lepro total comments JS
当前为
// ==UserScript==
// @name Lepro Total Comments JS
// @description lepro total comments JS
// @license MIT
// @namespace leprosorium.ru
// @include http://leprosorium.ru/comments/*
// @include http://*.leprosorium.ru/comments/*
// @include http*://leprosorium.ru/comments/*
// @include http*://*.leprosorium.ru/comments/*
// @copyright 2016, lynxtaa
// @grant none
// @version 1.2
// ==/UserScript==
var BEST_TRESHOLD = 0.75;
var controls = document.getElementById('js-comments').querySelector('.b-comments_controls'),
comments_holder = document.getElementById('js-comments_holder'),
style = document.createElement('style'),
best = document.createElement('a'),
all = document.createElement('a'),
std_dev,
best_count;
style.textContent = ".is_hidden { display: none; }";
document.body.appendChild(style);
// Кнопки управления
best.textContent = 'лучшие';
all.textContent = 'все';
controls.appendChild(best);
controls.appendChild(all);
// Лучшее
best.addEventListener('click', function(e) {
e.preventDefault();
if (this.className === 'active') {
return false;
} else if (std_dev) {
document.body.appendChild(style);
} else {
var votes = comments_holder.querySelectorAll('strong.vote_result');
var rating;
best_count = votes.length;
std_dev = (getStdDev(votes) || 0.1);
for (var i = 0; i < votes.length; i++) {
rating = parseInt(votes[i].textContent);
if ( rating > 0 && (rating / std_dev) < BEST_TRESHOLD) {
hideComment(votes[i]);
}
}
this.setAttribute('title', best_count);
}
this.className = 'active';
this.nextSibling.className = '';
}, false);
// Показать всё
all.addEventListener('click', function(e) {
e.preventDefault();
if (std_dev && this.className !== 'active') {
this.className = 'active';
this.previousSibling.className = '';
document.body.removeChild(style);
}
}, false);
// Среднеквадратическое отклонение
function getStdDev(votes) {
var abovenull = 0,
rating_square_sum = 0,
rating_sum = 0,
rating;
for (var i = 0; i < votes.length; i++) {
rating = parseInt(votes[i].textContent);
if ( rating > 0 ) {
abovenull++;
rating_sum += rating;
rating_square_sum += Math.pow(rating, 2);
} else {
hideComment(votes[i]);
}
}
abovenull = (abovenull || 1);
return Math.sqrt( (rating_square_sum / abovenull) -
Math.pow((rating_sum / abovenull), 2) );
}
// Прячем
function hideComment(el) {
while (!el.classList.contains('comment')) {
el = el.parentNode;
if (el === document) {
throw new Error('Can\'t find comment container.');
}
}
el.classList.add('is_hidden');
best_count--;
}