您需要先安装一个扩展,例如 篡改猴、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);
- })();