Greasy Fork镜像 is available in English.

Soundcloud:Sort comments by timestamp

Sort comments by timestamp on Soundcloud

Od 01.10.2015.. Pogledajte najnovija verzija.

// ==UserScript==
// @name Soundcloud:Sort comments by timestamp
// @description Sort comments by timestamp on Soundcloud
// @include *soundcloud.com/*
// @grant none
// @namespace https://greasyfork.dpdns.org/users/4252
// @version 0.0.1.20151001012956
// ==/UserScript==    
//Note: Only been tested in firefox
var SortButton = document.createElement("button");
SortButton.type = "button";
SortButton.className = "sc-button sc-button-medium sc-button-responsive";
SortButton.innerHTML = "Sort by timestamp";
SortButton.onclick = sortcomments;
window.addEventListener('load', WindowLoadedSortButton, false);

function WindowLoadedSortButton() {
    if (document.getElementsByClassName("commentsList__title").length != 0) { //if comment header exists
        document.getElementsByClassName("commentsList__title")[0].appendChild(SortButton);
    }
}

function sortcomments() {
    if (document.getElementsByClassName("paging-eof").length == 0) {
        alert("Please scroll all the way to the bottom so that all comments load before running this script");
        return;
    }

    var commentContainer = document.getElementsByClassName("lazyLoadingList__list")[0];
    var allcomments = [].slice.call(commentContainer.children);
    k = 0.01; //decimal to stick at end of timestamp so that threads (replies) stay together 
    for (i = 0; i < allcomments.length; i++) {
        if (allcomments[i].firstChild.classList.contains("isReply")) {
            allcomments[i].setAttribute("timestamp4sort", getTimestampInSeconds(allcomments[i]) + k);
            k = k + 0.01; //theoretically correctly sort 100 consecutive replies
        } else {
            allcomments[i].setAttribute("timestamp4sort", getTimestampInSeconds(allcomments[i]));
            k = 0.01; //reset
        }
    }

    allcomments.sort(compare);

    while (commentContainer.lastChild) {
        commentContainer.removeChild(commentContainer.lastChild);
    }

    for (i = 0; i < allcomments.length; i++) {
        commentContainer.appendChild(allcomments[i]);
    }

    alert("sorted");
}


function compare(a, b) {
    var avalue = parseFloat(a.getAttribute("timestamp4sort"));
    var bvalue = parseFloat(b.getAttribute("timestamp4sort"));
    if (avalue < bvalue)
        return -1;
    if (avalue > bvalue)
        return 1;
    return 0;
}

function hmsToSecondsOnly(str) { //This function handles "HH:MM:SS" as well as "MM:SS" or "SS".
    var p = str.split(':'),
        s = 0,
        m = 1;

    while (p.length > 0) {
        s += m * parseInt(p.pop(), 10);
        m *= 60;
    }

    return s;
}

function getTimestampInSeconds(licomment) { //takes  the <li> element of a comment. returns an integer

    if (licomment.getElementsByClassName("commentItem__timestamp").length != 0) {
        return hmsToSecondsOnly(licomment.getElementsByClassName("commentItem__timestamp")[0].innerHTML.replace("says at ", "").slice(0, -1)); //we slice of the last character to change "1:32:25:" to "1:32:25"
    } else {
        return 0;
    }
}
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元