NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name VK Yandex Music
// @version 0.1.0
// @description
// @author Pavel Khorikov
// @match https://vk.com/*
// @homepage https://vk.com/
// @grant GM_notification
// @license MIT
// @copyright 2018, JargeZ (https://openuserjs.org//users/JargeZ)
// ==/UserScript==
(function () {
//var trackObserver = new MutationObserver(listModified);
var list = document.getElementsByClassName("audio_row");
for (var i = 0; i < list.length; i++) {
audioFound(list[i]);
}
// Создадим observer для нотификаций о создании новых элементов на странице
var listObserver = new MutationObserver(elementAdded);
// и следим за body, когда новые списки аудиозаписей добавятся
listObserver.observe(document.body, {
childList: true,
subtree: true
});
// вызывается при любой модификации DOM страницы
function elementAdded(mutations) {
for (var i = 0; i < mutations.length; i++) {
var added = mutations[i].addedNodes;
// просмотрим добавленные элементы на предмет списка аудиозаписей
for (var j = 0; j < added.length; j++) {
findAudioAttach(added[j]);
}
}
}
// рекурсивная функция проходит по добавленным элементам и ищет в них списки аудиозаписей
function findAudioAttach(node) {
if (node.classList && node.classList.contains('audio_row')) // у списка должно быть id
{
// alert("ad");
console.log(node);
audioFound(node);
}
var child = node.firstElementChild;
while (child) {
findAudioAttach(child); // вызываем рекурсивно для всех дочерних элементов
child = child.nextElementSibling;
}
}
function audioFound(audioNode) {
if (audioNode.hasAttribute("data-audio")) // в новом списке уже есть аудиозаписи
{
var data_audio = JSON.parse(audioNode.getAttribute("data-audio"));
var audio_string = data_audio[4] + " - " + data_audio[3];
var yamusic_searchurl = "https://music.yandex.ru/search?text=" + audio_string;
audioNode.innerHTML = '<a href="' + yamusic_searchurl + '" target="_blank">music.yandex/search: ' + audio_string + '</a>';
console.log(data_audio);
}
//trackObserver.observe(listNode, {childList: true}); // следим за добавлением новых записей -> listModified()
}
})();