您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Топовые комментарии VK!
// ==UserScript== // @name VK top comments // @namespace http://tampermonkey.net/ // @version 0.2 // @description Топовые комментарии VK! // @author Me // @match *://vk.com/* // @match *://*.vk.com/* // @grant none // ==/UserScript== (function() { 'use strict'; function CommentSorter(box) { if (window.location.host == 'vk.com') { box.setAttribute("data-sorter-init", "true"); this.rootNode = box; this.statNode = box.querySelector('.post_full_like'); if (this.statNode === null && this.rootNode.id == "wl_post") { this.statNode = box.querySelector('#wl_post_actions_wrap'); this.singlePost = true; } this.init(); } } CommentSorter.getResource = function () { var scriptNode = document.querySelector("#VKCommentsSorterRootEx"); return JSON.parse( scriptNode.getAttribute("data-resource") ); }; CommentSorter.hookComments = function () { var arCommentsBox = document.querySelectorAll(".post"); var box = null; var commentBox = null; var i; for (i = 0; i < arCommentsBox.length; i++) { box = arCommentsBox[i]; commentBox = null; if ( !box.hasAttribute("data-sorter-init") && (commentBox = box.querySelector(".replies_wrap.clear")) && commentBox.style.display != "none" ) { box.commentSorter = new CommentSorter(box); } } box = document.getElementById('wl_post'); if ( box && !box.hasAttribute("data-sorter-init") && (commentBox = box.querySelector(".wl_replies")) && commentBox.style.display != "none" ) { //console.log("Init for post"); box.commentSorter = new CommentSorter(box); } arCommentsBox = document.querySelectorAll(".wall_fixed"); box = null; commentBox = null; for (i = 0; i < arCommentsBox.length; i++) { box = arCommentsBox[i]; commentBox = null; if ( !box.hasAttribute("data-sorter-init") && ((commentBox = box.querySelector(".replies_wrap.clear")) || (commentBox = box.querySelector('.wall_fixed_replies'))) && commentBox.style.display != "none" ) { box.commentSorter = new CommentSorter(box); } } }; CommentSorter.setSortAfterInit = function () { CommentSorter.sortAfterInit = true; }; CommentSorter.getSortAfterInit = function () { if (CommentSorter.sortAfterInit) { CommentSorter.sortAfterInit = false; return true; } else { return false; } }; CommentSorter.getTextOnBtn = function () { return 'Топ';//CommentSorter.getResource().lang.top; }; CommentSorter.getButtonNodeForFullPost = function(self) { var btn = document.createElement("a"); btn.className = "flat_button secondary button_light wl_action_link wl_post_share"; btn.href = "#"; btn.innerHTML = "<img style='margin-left:5px; float:right; margin-top:1px; width:17px' src='http://topcomments.burlaka.net/icon.svg'><span>"+CommentSorter.getTextOnBtn()+"</span>"; btn.addEventListener("click", function (event) { event.preventDefault(); self.onSortFullPostClick(event); }); return btn; }; CommentSorter.getButtonNode = function (self) { if (self.singlePost) { return CommentSorter.getButtonNodeForFullPost(self); } var btn = document.createElement("div"); btn.className = "post_share fl_r"; btn.innerHTML = "<img style='float:right; margin-top:0px;width:17px;opacity:0.5' src='http://topcomments.burlaka.net/icon.svg'>"+'<span style="display: block" class="post_share_link fl_l">'+CommentSorter.getTextOnBtn()+'</span>'; btn.style.position = "absolute"; btn.style.width = "40px"; btn.style.left = "-48px"; btn.addEventListener("click", function (event) {self.onSortClick(event);} ); return btn; }; CommentSorter.prototype.init = function () { var btn = CommentSorter.getButtonNode(this); if (this.singlePost) { this.btnText = btn.querySelector("span"); } else { this.btnText = btn.querySelector('.post_share_link'); } if (this.statNode) { this.statNode.appendChild( btn ); } else { //console.log("Init without button"); } if (CommentSorter.getSortAfterInit()) { btn.click(); } }; CommentSorter.prototype.onFinishLoadAllComment = function () { this.btnText.innerHTML = CommentSorter.getTextOnBtn(); clearInterval(this.loaderTimer); this.sortingAnimation = false; }; CommentSorter.prototype.onStartLoadAllComment = function() { if (this.sortingAnimation) return false; this.sortingAnimation = true; this.btnTextPonts = "."; this.btnText.innerHTML = CommentSorter.getTextOnBtn()+this.btnTextPonts; var self = this; this.loaderTimer = setInterval( function () { self.onLoadProgress(); }, 400 ); return true; }; CommentSorter.prototype.onLoadProgress = function () { if (this.btnTextPonts.length >= 3) { this.btnTextPonts = "."; } else { this.btnTextPonts += '.'; } this.btnText.innerHTML = CommentSorter.getTextOnBtn()+this.btnTextPonts; }; CommentSorter.prototype.onSortClick = function (event) { CommentSorter.setSortAfterInit(); //console.log(event); var obj; if (obj == this.rootNode.querySelector(".wall_post_text")) { obj.click(); } if (obj == this.rootNode.querySelector(".published_comment") ) obj.click(); if (obj == this.rootNode.querySelector(".reply_link_wrap") ) obj.click(); if (obj == this.rootNode.querySelector(".post_media") ) obj.click(); if (obj == this.rootNode.querySelector(".event_share") ) obj.click(); if (obj == this.rootNode.querySelector(".public_share") ) obj.click(); if (obj == this.rootNode.querySelector(".group_share") ) obj.click(); this.rootNode.click(); //return; /*this.onStartLoadAllComment(); var commentLoader = this.rootNode.querySelector('.wr_header'); var self = this; if (commentLoader) { var progressBar = commentLoader.querySelector('.progress'); if (progressBar && progressBar.style.display == "block") { setTimeout( function () {self.onSortClick(null);}, 100 ); //console.log("Load wait"); } else { if (!commentLoader.classList.contains('wrh_all')) { commentLoader.click(); setTimeout( function () {self.onSortClick(null);}, 100 ); //console.log("open all"); } if (event === null) { setTimeout(function () { self.resortComments(); }, 400); //console.log("resort all after load"); this.onFinishLoadAllComment(); } } } this.resortComments();*/ }; CommentSorter.prototype.onSortFullPostClick = function (event) { var self = this; if (this.onStartLoadAllComment()) { this.resortComments(); } if (wkcur) wkcur.limit = 100; var loaderState = this.rootNode.querySelector('#wl_replies_more_link'); if (loaderState && loaderState.style.display != 'none' ) { var progressBar = this.rootNode.querySelector('#wl_replies_more_progress'); if (progressBar && progressBar.style.display != 'block') { loaderState.click(); //console.log("Click on load more"); this.resortComments(); } else { //console.log("Progress bar is hidden"); } //console.log("Wait for loader"); setTimeout( function () {self.onSortFullPostClick(0);}, 100 ); } else { //console.log("Loader is hidden"); if (event !== -1 && event !== -2) { setTimeout( function () {self.onSortFullPostClick(-1);}, 400 ); //console.log("Waiting for loader this"); } else { //console.log("Waiting twice"); if (event !== -2) { setTimeout( function () {self.onSortFullPostClick(-2);}, 1200 ); } else { //console.log("Loading too long, return"); this.resortComments(); this.onFinishLoadAllComment(); } } } }; CommentSorter.prototype.resortComments = function () { var arComments = this.rootNode.querySelectorAll(".reply.reply_dived"); var arSort = []; console.log("Start sort "+arComments.length); for (var i = 0; i < arComments.length; i++) { var node = arComments[i]; var sortObject = {"node":node, "rating":0}; var likeNode = node.querySelector(".like_count"); if (likeNode && likeNode.innerHTML.length) { sortObject.rating = parseInt( likeNode.innerHTML ); } arSort.push(sortObject); } arSort.sort( function compare(b, a) { if (a.rating < b.rating) { return -1; } if (a.rating > b.rating) { return 1; } return 0; } ); for (var j = 0; j < arSort.length; j++) { var prent = arSort[j].node.parentNode; prent.removeChild(arSort[j].node); prent.appendChild(arSort[j].node); } }; CommentSorter.hookComments(); setInterval(function () {CommentSorter.hookComments();}, 500); })();