Pull to refresh

Скрипт для фильтра комментариев

Reading time3 min
Views878
Спасибо за внимание к моему топику "Еще один фильтр для комментариев".
Мне стало интересно, на самом ли деле то что я придумал настолько бессмысленно, и посидев некоторое время за мануалами я создал простенький userscript для Greasemonkey/UserJS, который и реализует задуманное. В теле скрипта есть параметр CF_wordThreshold, комментарии в которых содержится меньшее количество слов будут скрыты. Тестировался в Opera 9.60, FF3.

// ==UserScript==
// @name      Length filter for Habrahabr comments
// @author     Kapustos
// @include    http://*habrahabr.ru/blog*
// ==/UserScript==

// if the browser doesn't support the GM functions
if (typeof(GM_getValue) == 'undefined') var GM_getValue = function() {
  return false;
};
if (typeof(GM_setValue) == 'undefined') var GM_setValue = function() {};
if (typeof(GM_registerMenuCommand) == 'undefined') var GM_registerMenuCommand = function() {};

// ---- Config -----

// hide comments with less words then CF_wordThreshold
var CF_wordThreshold = 20;

// --- /Config -----

window.addEventListener('load',
function(event) {
  var comments = document.getElementById('comments');
  if (comments != 'undefined') {

    var tempCommentsCloud = document.evaluate("//ul[@class='hentry']/li/div[@class='entry-content'][1]", comments, null, XPathResult.ANY_TYPE, null);
    var commentsCloud = new Array();
    while (temp = tempCommentsCloud.iterateNext()) {
      commentsCloud.push(temp);
    }

    var comment;
    while (comment = commentsCloud.pop()) {
      if (comment.getElementsByTagName("div").length < 1 ) {
        var commentText = comment.textContent;
        var words = commentText.split(' ').length;
        if (words < CF_wordThreshold) {
           var commentDiv = comment.cloneNode(true);
           commentDiv.className = '';
          commentDiv.style.display = 'none';
          comment.textContent = "";
          comment.appendChild(commentDiv);
          var appendText = document.createTextNode('раскрыть комментарий');
          var appendLink = document.createElement('a');
          appendLink.href = '#';
          appendLink.addEventListener('click', CF_showComment, false);
          appendLink.appendChild(appendText);
          comment.appendChild(appendLink);
        }
      }
    }

  }
},
false);

function CF_showComment(event) {
  com = event.target.parentNode.getElementsByTagName("div");
  event.target.className = 'hidden';
  com[0].style.display = 'block';
  event.stopPropagation();
  event.preventDefault();
  return false;
}


На случай кода побитого хабрапарсером, копия лежит на Pastebin: http://pastebin.com/m255bed2e
XPathExpression подсмотрел в скрипте NickMitin.
P.S.: Сегодня пользовался хабром с этим скриптом, пришел к выводу, что для большинства топиков (кроме опубликованных в блоге «Юмор») оптимальным для меня является сокрытие комментариев в которых меньше 8 слов.
Tags:
Hubs:
Total votes 3: ↑3 and ↓0+3
Comments2

Articles