Greasy Fork

Greasy Fork is available in English.

zive.cz - oznaceni clanku s kapitolami

Označení článků s kapitolami (hlavní stránka, "nepřehlédněte" a "podobné články")

当前为 2014-05-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        zive.cz - oznaceni clanku s kapitolami
// @author      moen
// @namespace   monnef.tk
// @description Označení článků s kapitolami (hlavní stránka, "nepřehlédněte" a "podobné články")
// @include     http://www.zive.cz/*
// @version     2
// @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 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 chapterListRegex = /<div class="box box-tabbed noprint">[\s\S]*?Kapitoly[\s\S]*?(<ul>[\s\S]*?<\/ul>)[\s\S]*?<div class="clear">/m;

// Gets string containing "<ul>" tag with chapters.
function getChapterList(data) {
    return data.match(chapterListRegex)[0];
}

function getChapterCount(data) {
    if (!parseChapterCount) return -1;
    var list = getChapterList(data);
    return list.match(/<li>/g).length;
}

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());
        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) {
            onData(link, data, articleType);
        });
    } 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();
    }
}