// ==UserScript==
// @name 轻文整卷阅读
// @namespace https://www.iqing.com/
// @version 0.2
// @description 在详情页加载整卷小说
// @author summer
// @match https://www.iqing.com/book/*
// @grant none
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
function volume_chapters_id(dom_volume) {
var dom_chapter = dom_volume.getElementsByClassName('chapter');
var reg_chapter_id = /\/(\d+)/;
var chapters = [];
for (var ii = 0; ii < dom_chapter.length; ii++) {
var href_chapter = dom_chapter[ii].getElementsByTagName('a')[0].href;
chapters.push(reg_chapter_id.exec(href_chapter)[1]);
}
return chapters;
}
function _btn_volume() {
var btn = document.createElement('button');
btn.innerText = '阅读整卷';
btn.className = 'btn btn-info';
btn.style.position = 'absolute';
btn.style.top = '8px';
btn.style.right = '0px';
btn.style.zIndex = 1;
return btn;
}
function _wrap_progress(progress) {
var wrap_progress = document.getElementById('wrap-progress-reader');
if (null === wrap_progress) {
wrap_progress = document.createElement('div');
wrap_progress.style.textAlign = 'center';
wrap_progress.id = 'wrap-progress-reader';
var reader = document.getElementById('content').getElementsByClassName('container')[0];
reader.innerHTML = '';
reader.appendChild(wrap_progress);
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
wrap_progress.innerHTML = progress + '
';
return wrap_progress;
}
function btn_volume_get(cb) {
var volumes = document.getElementsByClassName('volume');
for (var i = 0; i < volumes.length; i++) {
var dom_btn = _btn_volume();
dom_btn.addEventListener('click', function(){
if ('function' === typeof(cb)) {
cb(volume_chapters_id(this.parentNode));
}
});
volumes[i].appendChild(dom_btn);
}
}
function display_volume(data_text) {
var data = JSON.parse(data_text);
var content = data.results;
var title = document.createElement('div');
var wrap_reader = document.getElementById('content').getElementsByClassName('container')[0];
title.innerHTML = data.chapter_title + '
';
title.style.fontSize = '20px';
wrap_reader.appendChild(title);
for (var i = 0; i < content.length; i++) {
if (0 == content[i].type) {
_reader_add_text(wrap_reader, content[i].value);
} else if (1 == content[i].type) {
_reader_add_img(wrap_reader, content[i].value);
} else {
alert('出错了...');
}
}
wrap_reader.innerHTML += '
';
}
function _reader_add_text(reader, text) {
var lines = text.replace(/\r\n/g, "\n").split("\n");
var copyright = /^\s*轻文.+侵权必究。?\s*$/;
for (var i = 0; i < lines.length; i++) {
if (true === copyright.test(lines[i])){
continue;
}
var wrap = document.createElement('div');
wrap.style.wordBreak = 'break-word';
wrap.style.textIndent = '2em';
wrap.style.color = '#333';
wrap.style.padding = '.4em 0';
wrap.style.margin = '0';
wrap.style.lineHeight = '1.7';
wrap.style.fontSize = '16px';
wrap.innerText = lines[i];
reader.appendChild(wrap);
}
}
function _reader_add_img(reader, src) {
var img = document.createElement('img');
img.style.width = '100%';
img.style.padding = '12px';
img.style.backgroundColor = '#fff';
img.style.border = '1px solid #e3e3e3';
img.src = src;
var wrap = document.createElement('div');
wrap.style.textAlign = 'center';
wrap.appendChild(img);
reader.appendChild(wrap);
}
function get_show_volume(chapters_id, cb) {
if (0 === chapters_id.length){
_wrap_progress('获取完毕');
if ('function' === typeof(cb)) {
cb();
}
return ;
}
var url_pre = 'https://poi.iqing.com/content/';
var url_suf = '/chapter/';
var chapter_id = chapters_id.shift();
_wrap_progress('获取中... 剩余' + chapters_id.length + '章');
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if (4 == xhr.readyState && 200 == xhr.status) {
get_show_volume(chapters_id);
display_volume(xhr.responseText);
}
};
xhr.open('get', url_pre + chapter_id + url_suf, true);
xhr.send();
}
btn_volume_get(get_show_volume);
})();