NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Anime randomaizer // @namespace https://vk.com/shiki_ex // @updateURL https://openuserjs.org/meta/Newt300/Anime_randomaizer.meta.js // @downloadURL https://openuserjs.org/install/Newt300/Anime_randomaizer.user.js // @version 0.4.5 // @description [shikimori.org] У вас Over9000+ тайтлов в "Запланированно"? Сложно выбрать?? Тогда мы идем к вам! ### Этот скрипт входит в пакет скриптов shiki extender (by STorn) ### // @author STorn // @match https://shikimori.org/* // @match http://shikimori.org/* // @grant none // @license MIT // ==/UserScript== /*jshint multistr: true */ //Code Conventions?? Не, не слышал! var listsLength = 0; function fullListCheck() { if (kGlobal > 0 ){ if($("#chk1").prop("checked")) { if (document.querySelectorAll("span[class=action]")[0].innerText.replace(/[^-0-9]/gim,'') > document.querySelectorAll("tbody[class=entries] tr td[class=name] > a").length + 1) { document.getElementById("lInfo").innerHTML = 'Кажется ваш список "' + document.getElementsByClassName('subheadline')[2].innerText + '" прогружен не полностью. <br> [ ' + (document.querySelectorAll("tbody[class=entries] tr td[class=name] > a").length + 1) + ' / ' + document.querySelectorAll("span[class=action]")[0].innerText.replace(/[^-0-9]/gim,'') +' ] <br> [Нажмите чтобы прогрузить]'; return; } else document.getElementById("lInfo").innerHTML = ''; } else { if ((document.querySelectorAll("tbody[class=entries] tr td[class=name] > a").length + 1) % 400 === 0) { document.getElementById("lInfo").innerHTML = 'Кажется ваш список прогружен не полностью. <br> [ ' + (document.querySelectorAll("tbody[class=entries] tr td[class=name] > a").length + 1) + ' / ' + listsLength +' ] <br> [Нажмите чтобы прогрузить]'; return; } document.getElementById("lInfo").innerHTML = ''; } } } function insertButton() { console.log("##########################################"); console.log("[AR]: Anime Ranromaiser has successfully started"); var listsLengthEl = document.querySelectorAll('a.b-link.always-active > span'); for (var i = 0; i <= listsLengthEl.length - 1; i++) { listsLength += Number(listsLengthEl[i].innerHTML); } var firstListName = document.getElementsByClassName('subheadline')[1]; var insertPlace = document.getElementsByClassName('b-collection_search')[0]; //место вставки var button = document.createElement("div"); var div = document.createElement("div"); div.innerHTML = '<div class="b-options-floated collapse"><a href="https://vk.com/shiki_ex">shiki extender</a></div><div class="subheadline">Anime randomaizer</div>\ <div class="b-options-floated collapse"><a href="https://goo.gl/ugmFCL" target="_blank">[info]</a></div>'; button.innerHTML = '<table width="325" cellspacing="5" cellpadding="10"><tr><td title="\ Скрипт перемещает элемент из списка в выделенное место ниже. Этот метод позволяет сохранить вывод подсказки.">\ <input type="button" value="Рандом аниме" name="d" id="btn1"></td>\ <td title="Регулировать жанры можно спомощью стандартного shiki фильтра(меню справа)"> <input type="checkbox" name="b" id="chk1" checked></td>\ <td title="Регулировать жанры можно спомощью стандартного shiki фильтра(меню справа)"><p> фильтр "' + firstListName.innerText + '"</p></td>\ </tr></table>'; var br = document.createElement("br"); var table = document.createElement("table"); table.setAttribute("class", "b-table list-lines"); //table.setAttribute("hight", "25"); table.innerHTML = '<tbody class=""><tr class="user_rate selectable editable">\ <td id="r" width="25" class="index" title="Рандомное число"></td>\ <td id="p" width="500" class="name"></td>\ <td id="prev_a" width="25" align="right" class="index" title="Историю рандомов можно посмотреть в логах (Ctrl + Shift + I)">⤾</td>\ </tr><tr><td></td><td class="index" id="lInfo"></td></tr></tbody>'; insertPlace.appendChild(div); insertPlace.appendChild(button); insertPlace.appendChild(table); insertPlace.appendChild(br); } var kGlobal = 0; function main() { 'use strict'; var k = 0; var r = 0; var btn1 = document.getElementById("btn1"); var firstListLength = document.querySelectorAll("span[class=action]")[0].innerText.replace(/[^-0-9]/gim,''); var arIndex = document.getElementById("r"); btn1.onclick = function () { function reset() { var tNextChild = document.querySelectorAll("tbody[class=entries] tr td:nth-child(2) span:first-child")[0]; var tParent = document.querySelectorAll("tbody[class=entries] tr td[class=name]"); var tEl = document.querySelectorAll("tbody tr td[id=p] a")[0]; tParent[r].insertBefore(tEl, tNextChild); var prev_a = document.getElementById("prev_a"); prev_a.setAttribute("title", "Предыдущее: " + tEl.innerHTML); } if (k > 0) {reset();} // console.log("[AR]: firstListLength=" + firstListLength); var list = document.querySelectorAll("tbody[class=entries] tr td[class=name] > a"); var t = document.getElementById("p"); var firstListName = document.getElementsByClassName('subheadline')[2]; /*if(firstListLength > list.length) { document.getElementById("lInfo").innerHTML = 'Кажется ваш список "' + firstListName.innerText + '" прогружен не полностью. <br> [Нажмите чтобы прогрузить]'; } else { document.getElementById("lInfo").innerHTML = ""; }*/ if($("#chk1").prop("checked") && (firstListLength < list.length)) { r = Math.floor(Math.random() * firstListLength); console.log("[AR]: Флажок установлен"); console.log("[AR]: " + (r + 1) + "/" + firstListLength); } else { r = Math.floor(Math.random() * list.length); console.log("[AR]: Флажок не установлен"); console.log("[AR]: " + (r + 1) + "/" + list.length); } //console.log("[AR]: r2=" + r); arIndex.innerHTML = r + 1; t.appendChild(list[r]); console.log("[AR]: Random Anime " + (k + 1) + ": " + list[r].innerHTML); console.log("##########################################"); k++; kGlobal++; $(fullListCheck()); }; var scroll = document.getElementById("lInfo"); scroll.onclick = function () { var loader = document.querySelectorAll("div.b-postloader.collapsed")[0]; loader.click(); setTimeout(function() {fullListCheck();}, 2000); }; } function start() { if (window.location.pathname.indexOf("/list/anime") > 0 || window.location.pathname.indexOf("/list/manga/") > 0) { fullListCheck(); if($("#chk1").length>0) {return;} insertButton(); main(); } } $(document).bind('mouseup mousemove ready', function(){ start(); }); $(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();});