Advertisement
Guest User

Flat-Disqus-Comments

a guest
Sep 7th, 2015
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @include http://disqus.com/*
  3. // @include https://disqus.com/*
  4. // ==/UserScript==
  5.  
  6. var postListElement = null;
  7. var millsecInterval = 500;
  8.  
  9. console.log("Flat-Disqus-Comments starting");
  10. try {
  11.   //don't run on frames or iframes
  12.   if (window.top != window.self)  
  13.     return;
  14.  
  15.   //
  16.   flattenAndSortPosts();
  17.   setInterval(flattenAndSortPosts, millsecInterval);
  18. }catch(err){
  19.   console.log("Flat-Disqus-Comments: top level error: " + err);
  20. }
  21.  
  22.  
  23. return undefined;
  24. // ****
  25. // ****
  26.  
  27. function flattenAndSortPosts() {
  28.   try {
  29.     if (null == postListElement) {
  30.       postListElement = document.getElementById("post-list");
  31.       if (postListElement == null)
  32.         return;
  33.     }
  34.    
  35.     //get all comments
  36.     var allComments = getAllComments(postListElement);
  37.     var allCommentsSorted = allComments.slice();
  38.     allCommentsSorted.sort(byIdComparator);
  39.    
  40.     if (true == arrayEqual(allComments, allCommentsSorted) && true != existsNestedPost(allComments))
  41.       return;
  42.    
  43.     //clear children of comments
  44.     for (var i = 0; i < allCommentsSorted.length; ++i) {
  45.       var comment = allCommentsSorted[i];
  46.       var childrenNode = getChildrenNode(comment);
  47.       while (childrenNode.childNodes.length > 0)
  48.         childrenNode.removeChild(childrenNode.childNodes[0]);
  49.     }
  50.    
  51.     //clear post-list node
  52.     while (postListElement.childNodes.length > 0)
  53.       postListElement.removeChild(postListElement.childNodes[0]);
  54.    
  55.     //add comments in proper order to post-list node
  56.     for (var i = 0; i < allCommentsSorted.length; ++i)
  57.       postListElement.appendChild(allCommentsSorted[i]);
  58.   }catch(err) {
  59.     console.log("Flat-Disqus-Comments: flattenAndSortPosts error: " + err);
  60.   }
  61. }
  62.  
  63. function getAllComments(postListElement) {
  64.   var result = new Array();
  65.   getAllComments2(result, postListElement);
  66.   return result;
  67. }
  68. function getAllComments2(result, ele) {
  69.   var cl = getClassAttribute(ele);
  70.   if (cl === "post")
  71.     result.push(ele);
  72.   for (var i = 0; i < ele.childNodes.length; ++i) {
  73.     var child = ele.childNodes[i];
  74.     var cl = getClassAttribute(child);
  75.     if (cl === "post" || cl === "children")
  76.       getAllComments2(result, child);
  77.   }
  78. }
  79.  
  80. function getClassAttribute(x) {
  81.   if (x.class)
  82.     return x.class;
  83.    if (x.getAttribute)
  84.     return x.getAttribute("class");
  85.   return "";
  86. }
  87.  
  88.  
  89. function byIdComparator(a,b) {
  90.   a = a.id;
  91.   b = b.id;
  92.   a = a.substring(5, a.length);
  93.   b = b.substring(5, b.length);
  94.   a = Number(a);
  95.   b = Number(b);
  96.   return a - b;
  97. }
  98.  
  99. function arrayEqual(a, b) {
  100.   if ( ! Array.isArray(a) || ! Array.isArray(b))
  101.     throw "Invalid input to arrayEqual()";
  102.   if (a.length != b.length)
  103.     return false;
  104.   for (var i = 0; i < a.length; ++i) {
  105.     if (a[i] != b[i])
  106.       return false;
  107.   }
  108.   return true;
  109. }
  110.  
  111. function existsNestedPost(posts) {
  112.   for (var i = 0; i < posts.length; ++i) {
  113.     var post = posts[i];
  114.     var childrenNode = getChildrenNode(post);
  115.     if (childrenNode.childNodes.length > 0)
  116.       return true;
  117.   }
  118.   return false;
  119. }
  120.  
  121. function getChildrenNode(ele) {
  122.   for (var i = 0; i < ele.childNodes.length; ++i) {
  123.     var child = ele.childNodes[i];
  124.     var cl = getClassAttribute(child);
  125.     if (cl === "children")
  126.       return child;
  127.   }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement