Označení článků s kapitolami (hlavní stránka a "nepřehlédněte")
// ==UserScript==
// @name zive.cz - oznaceni clanku s kapitolami
// @author moen
// @namespace monnef.tk
// @description Označení článků s kapitolami (hlavní stránka a "nepřehlédněte")
// @include http://www.zive.cz/*
// @version 5
// @grant none
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// ==/UserScript==
// nastavení
var chapFormat = "[Kapitoly - ~chap~] "; // formát přidávaného textu, použijte "~chap~" pro vložení počtu kapitol
// konec nastavení
var chapterString = "~chap~";
var parseChapterCount = new RegExp(chapterString).test(chapFormat);
var debug = false;
console.log("Označovač kapitol spuštěn (pChC=" + parseChapterCount + ")");
function stackTrace() {
var err = new Error();
return err.stack;
}
function hasChapters(data) {
return data.indexOf("data-tracker=\"Navigace,NextChapter\"") > -1;
}
function markLink(link, chapCount) {
var markText = chapFormat.replace(chapterString, chapCount);
link.attr("title", 'Skript "Označení článků s kapitolami" vám vytvořil moen\n' + link.attr("title"));
link.html(markText + link.html());
afterChapterProcessed();
}
var chapterListWithUnorderedListRegex = /<div class="ar-chapters">[\s\S]*?(<ul>[\s\S]*?<\/ul>)[\s\S]*?<div class="ar-content">/;
var chapterListWithSelectRegex = /<div class="[^"]*ar-chapters[^"]*">[\s\S]*?(<select class="fs-os">[\s\S]*?<\/select>)[\s\S]*?<div class="ar-content">/;
// Gets string containing "<ul>" tag with chapters.
function getChapterListWithUnorderedList(data) {
var list = data.match(chapterListWithUnorderedListRegex);
if (list) return list[0];
else return null;
}
function getChapterCountFromUnorderedList(data) {
if (!parseChapterCount) return -1;
var list = getChapterListWithUnorderedList(data);
if (list) {
return list.match(/<li>/g).length;
} else {
return 0;
}
}
// Gets string containing "<select>" tag with chapters.
function getChapterListWithSelect(data) {
var list = data.match(chapterListWithSelectRegex);
if (list) return list[0];
else return null;
}
function getChapterCountFromSelect(data) {
if (!parseChapterCount) return -1;
var list = getChapterListWithSelect(data);
if (list) {
return list.match(/<option /g).length;
} else {
return 0;
}
}
function getChapterCount(data){
return getChapterCountFromUnorderedList(data);
}
function onGenericArticleData(link, data, articleType) {
if (debug) console.log("got response for [" + articleType + "]: " + link.html());
if (hasChapters(data)) {
if (debug) console.log("marking [" + articleType + "]: " + link.html());
if (debug) console.log(stackTrace());
markLink(link, getChapterCount(data));
}
}
// Ordinary articles from main page
function onArticleData(link, data) {
if (debug) console.log("got response for: " + link.html());
if (hasChapters(data)) {
if (debug) console.log("marking: " + link.html());
markLink(link, getChapterCount(data));
}
}
function askForArticle(link, onData, articleType) {
var linkTarget = link.prop('href');
if (linkTarget.indexOf("zive.cz") > -1) {
if (debug) console.log("sending request: " + link.html() + " >>> " + linkTarget);
if (debug) link.css("border", "solid 1px red");
$.ajax({
url: linkTarget
}).done(function (data) {
if (data) {
onData(link, data, articleType);
} else {
console.log("got null data :(", link.text(), link[0]);
}
});
} else {
if (debug) console.log("skipping non-zive.cz link - " + linkTarget);
}
}
$(".box-data > .arlist").each(function () {
if (debug) $(this).css("border", "solid 2px green");
var link = $(".smaller > a, h2 > a", this);
askForArticle(link, onGenericArticleData, "main");
});
// Articles from "Don't miss"
function onDontMissData(link, data) {
if (debug) console.log("got response for [don't miss]: " + link.html());
if (hasChapters(data)) {
if (debug) console.log("marking [don't miss]: " + link.html());
markLink(link, getChapterCount(data));
}
}
$("#article-promo-content div[id^=article-promo-content-detail]").each(function () {
if (debug) $(this).css("border", "solid 2px orange");
var link = $(".promo-text h1 a", this);
if (debug) link.css("border", "solid 1px red");
askForArticle(link, onGenericArticleData, "don't miss");
});
// "Similar articles" bellow current acrticle
$("#ctl04_maindata .box-tabbed .bx-data .arlist").each(function () {
if (debug) $(this).css("border", "solid 2px gold");
var link = $("h2 a", this);
if (debug) link.css("border", "solid 1px magenta");
askForArticle(link, onGenericArticleData, "similar");
});
// "Created by" notice
var createdCreatedByNotice = false;
function createCreatedByNotice() {
var sigId = "chapMarkerSig";
var sigElem = $("<div id='" + sigId + "'>Skript pro označení článků s kapitolami vám napsal <a href='http://monnef.tk'>moen</a>.</div>");
var mainPageDiv = $("#ctl04_maindata .box-tabbed-gray div.box-data").last();
var mainPageOlderDiv = $("#ctl04_secdata .box-tabbed-gray div.box-data").last();
var similarArticlesDiv = $("#ctl04_maindata .box-tabbed .bx-data").last();
var candidates = [mainPageDiv, mainPageOlderDiv, similarArticlesDiv];
var nonEmpty = function (a) {
return a.size() != 0;
};
var nonEmptyCandidates = candidates.filter(nonEmpty);
if (nonEmptyCandidates.length > 0) {
nonEmptyCandidates[0].append(sigElem);
}
$("#" + sigId).css("text-align", "right").css("font-size", "120%").css("margin-bottom", "5px");
}
function afterChapterProcessed() {
if (!createdCreatedByNotice) {
createdCreatedByNotice = true;
createCreatedByNotice();
}
}