Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @include http://disqus.com/*
- // @include https://disqus.com/*
- // ==/UserScript==
- var postListElement = null;
- var millsecInterval = 500;
- console.log("Flat-Disqus-Comments starting");
- try {
- //don't run on frames or iframes
- if (window.top != window.self)
- return;
- //
- flattenAndSortPosts();
- setInterval(flattenAndSortPosts, millsecInterval);
- }catch(err){
- console.log("Flat-Disqus-Comments: top level error: " + err);
- }
- return undefined;
- // ****
- // ****
- function flattenAndSortPosts() {
- try {
- if (null == postListElement) {
- postListElement = document.getElementById("post-list");
- if (postListElement == null)
- return;
- }
- //get all comments
- var allComments = getAllComments(postListElement);
- var allCommentsSorted = allComments.slice();
- allCommentsSorted.sort(byIdComparator);
- if (true == arrayEqual(allComments, allCommentsSorted) && true != existsNestedPost(allComments))
- return;
- //clear children of comments
- for (var i = 0; i < allCommentsSorted.length; ++i) {
- var comment = allCommentsSorted[i];
- var childrenNode = getChildrenNode(comment);
- while (childrenNode.childNodes.length > 0)
- childrenNode.removeChild(childrenNode.childNodes[0]);
- }
- //clear post-list node
- while (postListElement.childNodes.length > 0)
- postListElement.removeChild(postListElement.childNodes[0]);
- //add comments in proper order to post-list node
- for (var i = 0; i < allCommentsSorted.length; ++i)
- postListElement.appendChild(allCommentsSorted[i]);
- }catch(err) {
- console.log("Flat-Disqus-Comments: flattenAndSortPosts error: " + err);
- }
- }
- function getAllComments(postListElement) {
- var result = new Array();
- getAllComments2(result, postListElement);
- return result;
- }
- function getAllComments2(result, ele) {
- var cl = getClassAttribute(ele);
- if (cl === "post")
- result.push(ele);
- for (var i = 0; i < ele.childNodes.length; ++i) {
- var child = ele.childNodes[i];
- var cl = getClassAttribute(child);
- if (cl === "post" || cl === "children")
- getAllComments2(result, child);
- }
- }
- function getClassAttribute(x) {
- if (x.class)
- return x.class;
- if (x.getAttribute)
- return x.getAttribute("class");
- return "";
- }
- function byIdComparator(a,b) {
- a = a.id;
- b = b.id;
- a = a.substring(5, a.length);
- b = b.substring(5, b.length);
- a = Number(a);
- b = Number(b);
- return a - b;
- }
- function arrayEqual(a, b) {
- if ( ! Array.isArray(a) || ! Array.isArray(b))
- throw "Invalid input to arrayEqual()";
- if (a.length != b.length)
- return false;
- for (var i = 0; i < a.length; ++i) {
- if (a[i] != b[i])
- return false;
- }
- return true;
- }
- function existsNestedPost(posts) {
- for (var i = 0; i < posts.length; ++i) {
- var post = posts[i];
- var childrenNode = getChildrenNode(post);
- if (childrenNode.childNodes.length > 0)
- return true;
- }
- return false;
- }
- function getChildrenNode(ele) {
- for (var i = 0; i < ele.childNodes.length; ++i) {
- var child = ele.childNodes[i];
- var cl = getClassAttribute(child);
- if (cl === "children")
- return child;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement