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();});