NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name shiki UI extender // @namespace https://vk.com/shiki_ex // @updateURL https://openuserjs.org/meta/Newt300/shiki_UI_extender.meta.js // @downloadURL https://openuserjs.org/install/Newt300/shiki_UI_extender.user.js // @version 1.1.5 // @description [shikimori.org] ### Этот скрипт входит в пакет скриптов shiki extender (by STorn) ### // @author STorn // @match https://shikimori.org/* // @match http://shikimori.org/* // @match https://shikimori.one/* // @match http://shikimori.one/* // @match https://play.shikimori.org/* // @match http://play.shikimori.org/* // @license MIT // @grant none // ==/UserScript== /*jshint multistr: true */ //Code Conventions?? Не, не слышал! var kGlobal = 0; function start() { if ((window.location.pathname.indexOf("animes") > 0) || (window.location.pathname.indexOf("ranobe") > 0) || (window.location.pathname.indexOf("mangas") > 0)) { if(($(".friend-rate").length > 0) && ($("#friendRateAVG").length === 0)) { if ($(".anons").length > 0) return; friendRateAVG(); } if(($("#shikiRatingDup").length === 0)) { shikiRatingDup(); } } if (window.location.pathname.indexOf("/list/anime") > 0 | window.location.pathname.indexOf("/list/manga/") > 0) { if (($("#userlistRateAVG").length === 0)) { userlistRateAVG(); } } if (($(".mfp-bg.mfp-ready").length > 0)) { if ($("#modalWindow").length > 0 & ($("iframe.mfp-iframe").length > 1)) $("#modalWindow").remove(); if ($(document).width() < 935) return; if ($(".mfp-close").length > 2) return; var el = document.createElement("button"); el.setAttribute("title", "Свернуть"); el.setAttribute("type", "button"); el.setAttribute("class", "mfp-close"); el.setAttribute("style", "margin: -1px 30px 0px 0"); el.innerText = "-"; $(".mfp-iframe-scaler").append(el); el.onclick = function () {moduleWindow(); }; } document.querySelectorAll('a[href^="//shikimori.org/animes/kind/"][href*="="]').forEach(function(e){e.href=e.getAttribute('href').replace(/^(\/\/shikimori.org\/animes)\/kind\/(.+?)=(.+?)$/,'$1/$2/$3');}); } function moduleWindow() { var closeBtn = document.querySelectorAll(".mfp-close")[0]; var div = document.createElement("div"); div.class = "tooltip"; var t; if (document.querySelectorAll("aside.l-menu").length > 0) { t = document.querySelectorAll("aside.l-menu")[0].getBoundingClientRect().left; } else { t = document.querySelectorAll(".b-main_search")[0].getBoundingClientRect().left - 100; } div.setAttribute("style", "width: 321px; z-index: 20; display: ; position: fixed; top: 70%; left: " + t + "px;"); div.id = "modalWindow"; div.innerHTML = '<div class="tooltip-inner" style="width: 321px"><a onclick=\'$("#modalWindow").remove();\' id="closeBtn" title="закрыть" align="right" class="b-link bubbled-processed">закрыть </a><br><br></div>'; document.querySelectorAll("body")[0].append(div); $("#modalWindow > div")[0].append($(".mfp-iframe")[0]); document.querySelectorAll("#topics_show > div.mfp-wrap.mfp-close-btn-in.mfp-auto-cursor.mfp-ready")[0].style.display = "none"; document.querySelectorAll(".mfp-bg.mfp-ready")[0].remove(); document.querySelectorAll("html")[0].style = "none"; $("#closeBtn")[0].onclick = function () { $("#modalWindow").remove(); closeBtn.click(); }; //Реализую передвижение окна div.onmousedown = function(e){ var coords = getCoords(div); var shiftX = e.clientX - coords.left; var shiftY = e.clientY - coords.top; moveAt(e); function moveAt(e) { div.style.left = e.clientX - shiftX + 'px'; div.style.top = e.clientY - shiftY + 'px'; } document.ondragstart = function() { return false; }; document.onmousemove = function(e) { moveAt(e); }; document.onselectstart = function() { return false; }; div.onmouseup = function() { document.onmousemove = null; div.onmouseup = null; document.ondragstart = null; document.onselectstart = null; }; }; div.ondragstart = function() { return false; }; } function getCoords(elem) { // кроме IE8- var box = elem.getBoundingClientRect(); return { top: box.top, left: box.left }; } function friendRateAVG() { console.log('######################################################\n[UI ex]: Module "friendRateAVG" successfully activated.\n######################################################'); var friendRate = document.querySelectorAll("div[class*=friend-rate] div[class=status]"); var friendRateStatus = []; var sum = 0; var avg = 0; var count = 0; for (var i = friendRate.length - 1; i >= 0; i--) { friendRateStatus[i] = friendRate[i].innerText.replace(/[^-0-9]/gim,''); if (friendRateStatus[i] !== "") { sum += Number(friendRateStatus[i]); count++; } } avg = sum / count; //Вставляем элемент var insertAVG = document.createElement("div"); insertAVG.setAttribute("class", "b-options-floated collapse"); insertAVG.setAttribute("id", "friendRateAVG"); insertAVG.setAttribute("align", "right"); insertAVG.setAttribute("style", "margin: 6px 0px 0px 0"); insertAVG.innerHTML = '<h1>avg: ' + avg.toFixed(2) + '</h1>'; var avgNextChild = document.querySelectorAll("div[class=b-animes-menu] div[class=block]")[2]; avgNextChild.prepend(insertAVG); } function shikiRatingDup() { console.log('######################################################\n[UI ex]: Module "shikiRatingDup" successfully activated.\n######################################################'); var scoreData = jQuery.parseJSON($("#rates_scores_stats").attr("data-stats")); var sumScore = 0; var totalCount = 0; for (var i = 0; i < scoreData.length; i++) { sumScore += scoreData[i].value * scoreData[i].name; totalCount += scoreData[i].value; } var avg = sumScore / totalCount; //Вставляем элемент var insertAVG = document.createElement("div"); insertAVG.setAttribute("class", "b-options-floated collapse"); insertAVG.setAttribute("id", "shikiRatingDup"); insertAVG.setAttribute("align", "right"); insertAVG.setAttribute("style", "margin: 6px 0px 0px 0"); insertAVG.setAttribute("title", "Средняя оценка пользователей шикимори"); insertAVG.innerHTML = '<h1>avg: ' + avg.toFixed(2) + '</h1>'; var avgNextChild = document.querySelectorAll("div.b-animes-menu div.block")[0]; avgNextChild.prepend(insertAVG); } function userlistRateAVG() { console.log('######################################################\n[UI ex]: Module "userlistRateAVG" successfully activated.\n######################################################'); var scoreData = jQuery.parseJSON($("#scores").attr("data-stats")); var sumScore = 0; var totalCount = 0; for (var i = 0; i < scoreData.length; i++) { sumScore += scoreData[i].value * scoreData[i].name; totalCount += scoreData[i].value; } var avg = sumScore / totalCount; //Вставляем элемент var insertAVG = document.createElement("div"); insertAVG.setAttribute("class", "b-options-floated collapse"); insertAVG.setAttribute("id", "userlistRateAVG"); insertAVG.setAttribute("align", "right"); insertAVG.setAttribute("style", "margin: 6px 0px 0px 0"); insertAVG.innerHTML = '<h1>avg: ' + avg.toFixed(2) + '</h1>'; var avgNextChild = document.querySelectorAll("div.block.mini-charts div.scores.block")[0]; avgNextChild.prepend(insertAVG); } $(document).bind('mouseup mousemove ready', function(){ start(); }); (function loops(){ setTimeout(function(){ start(); loops(); // рекурсия }, 2000); })(); $(document).ready(start()); $(document).ready(function(){kGlobal = 0; start();}); $(document).on('page:load', function(){kGlobal = 0; start();}); $(document).on('turbolinks:load', function(){kGlobal = 0; start();});