Greasy Fork is available in English.
prednacte vsechny kapitoly vybraneho clanku do otevrene stranky
当前为
// ==UserScript==
// @name zive.cz - spojeni kapitol do jedne stranky
// @namespace monnef.tk
// @author moen
// @description prednacte vsechny kapitoly vybraneho clanku do otevrene stranky
// @include http://www.zive.cz/*
// @version 3
// @grant none
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// ==/UserScript==
// moje zkusenosti s JavaScriptem a jQuery nejsou zavratne,
// takze pokud odhalite chyby nebo vykonostni nedostatky,
// prosim napiste mi :)
// ----------------------------------
// -- zacatek uzivatelskeho nastaveni
// onlyPartialHide - nastaveni zpracovani vybranych
// elementu (napr. tlacitka pro navigaci mezi kapitolami, seznam kapitol)
// true - pouze zpruhledneni
// false - uplne skryti
var onlyPartialHide = false;
// pokud zapnuto (true), pak pro nacitani dalsich kapitol vlozi nahodne
// dlouhy cekaci interval
var insertWaiting = false;
var waitingMin = 250; // ms
var waitingMax = 2500; // ms
// -- konec uzivatelskeho nastaveni
// ----------------------------------
var debug = false;
var logTitle = "[chaptJoiner]";
function log(s) {
console.log(logTitle + " " + s);
}
function logD(s) {
if (debug) console.log(logTitle + "[D] " + s);
}
this.$ = this.jQuery = jQuery.noConflict(true);
log("started");
logD("debug output");
function getNextLink(mainAr) {
return $(".button-row a.chapter-next", mainAr).filter(function(index) {
return $(this).html().indexOf("Následující kapitola") != -1;
});
}
function getMainArticleDiv(page) {
return $("#main-article", page);
}
var mainAr = getMainArticleDiv($("html"));
if (mainAr.length === 0) {
logD("main article not found");
return;
}
if (debug) mainAr.css("border", "1px solid red");
var chapterTitles = getChapterTitles();
logD("got " + chapterTitles.length + " chapter titles: " + chapterTitles);
var nextChapterTitleIndex = 0
// --
function getCurrentChapterTitle() {
return chapterTitles[nextChapterTitleIndex++];
}
function appendNextChapter(newMainAr) {
mainAr.html(mainAr.html() +
"<br>\n<!-- Inserted by " + logTitle + " -->\n" +
newMainAr.html());
}
function generateChapterTitleHTML(){
return "<h2 style=\"margin:0\">"+getCurrentChapterTitle()+"</h2>";
}
function appendChapterTitle() {
mainAr.html(mainAr.html() + generateChapterTitleHTML());
}
function prependChapterTitle() {
if(chapterTitles.length !== 0) mainAr.prepend(generateChapterTitleHTML());
}
var applyHiding = function(idx) {
var elem = $(this);
if (onlyPartialHide) {
elem.css("opacity", "0.1");
} else {
elem.hide();
}
}
function getChaptersSpans() {
return $("div.box .box-heading span").filter(function(i) {
return $(this).html().indexOf("Kapitoly článku") != -1
});
}
function getChapterDivs(){
return getChaptersSpans().parent().parent().parent();
}
function getChapterTitles() {
var titles = [];
$("div.box-data ul li", getChapterDivs().first()).each(function(){
var elem = $(this);
titles.push(elem.text());
});
return titles;
}
function makeFinalTouches() {
var sigId = "chaptJoinerSig";
$(".button-row a.chapter-next, .button-row a.chapter-previous").each(applyHiding);
mainAr.append($("<div id='" + sigId + "'>Skript spojující kapitoly do jedné stránky vám napsal <a href='http://monnef.tk'>moen</a>.</div>"));
$("#" + sigId).
css("text-align", "right").
css("font-size", "120%");
getChapterDivs().each(applyHiding);
}
function queueNextChapter(url) {
$.ajax({
url: url
}).done(function(data) {
logD("got response, parsing");
var page = $.parseHTML(data);
logD("parsed");
var subMainAr = $("#main-article", page);
logD("subMainAr: " + subMainAr);
appendChapterTitle();
appendNextChapter(subMainAr);
processCurrMainAr(subMainAr, false);
});
}
function processCurrMainAr(currentMainAr, isFirst) {
var linkToNext = getNextLink(currentMainAr);
if (linkToNext.length === 0) {
logD("next link not found");
if (!isFirst) makeFinalTouches();
return;
} else {
logD("link found");
}
var linkTarget = linkToNext.prop('href');
if (debug) {
linkToNext.parent().css("border", "1px dashed blue");
logD("link points @ " + linkTarget);
}
var toFire = function() {
queueNextChapter(linkTarget);
};
if (insertWaiting) {
var ms = Math.floor(Math.random() * (waitingMax - waitingMin)) + waitingMin;
logD("waiting for " + ms + "ms");
window.setTimeout(toFire, ms);
} else {
toFire();
}
}
prependChapterTitle();
processCurrMainAr(mainAr, true);