Soundcloud Precise Date

A script to replace relative dates with exact dates (e.g track upload date, comment publication date).

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         Soundcloud Precise Date
// @namespace    Violentmonkey Scripts
// @match        https://soundcloud.com/*
// @grant        none
// @version      2.0
// @author       bye-csavier (https://github.com/bye-csavier)
// @run-at       document-end
// @description  A script to replace relative dates with exact dates (e.g track upload date, comment publication date).
// @license      GNU GPLv3
// ==/UserScript==

function setRealDate(relDate){
  if(relDate.dataset.xjsPreciseSoundCloudDate) return;
  let realDate = relDate.getAttribute("title")
  relDate.children[1].innerText = realDate; //may changed based on soundcloud comoponents strcture
  relDate.dataset.xjsPreciseSoundCloudDate = true;
}

function handleAllRelativeTimes(){
  let trackDates = document.querySelectorAll("time.relativeTime");
  for (let i = 0, len = trackDates.length; i < len; ++i) {
    setRealDate(trackDates[i])
  }
}

handleAllRelativeTimes(); //If the content is already loaded, somehow


let idleDone = false;
/*
    I guess soundcloud loads everything after the DOMContentLoaded event, trough scripts. Therefore I need to observe for every mutation on the body :(
    Still, the mutation is used to replace the new content the user loads so +1 for mutation observer.

    It may be possible to stop it after a while it gets not called and trigger the mec
*/
new MutationObserver((mutations, observer)=>{
  handleAllRelativeTimes();
  if(!idleDone){
    idleDone = true;
    observer.disconnect();
    observer.observe(document.getElementById("content"), {subtree:true, childList:true})
  }
}).observe(document.body, {subtree:true, childList:true})