NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name 123du
// @namespace http://tampermonkey.net/
// @version 0.2.4
// @updateURL https://openuserjs.org/meta/clumsyman/123du.meta.js
// @downloadURL https://openuserjs.org/install/clumsyman/123du.user.js
// @description load multile chapters
// @author clumsyman
// @copyright 2018, clumsyman (https://openuserjs.org//users/clumsyman)
// @license MIT
// @match https://m.123dux.com/dudu-*/*/*.html
// @grant none
// ==/UserScript==
javascript:(function () {
function getBody(content) {
var x = content.indexOf('<body');
x = content.indexOf('>', x);
var y = content.lastIndexOf('</body>');
return content.slice(x + 1, y);
}
function queryContent(url) {
try {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.overrideMimeType('text\/html; charset=gbk');
xhr.send();
if (xhr.readyState == 4 && xhr.status == 200) {
load_store.innerHTML = getBody(xhr.responseText);
var content = findContent(load_store);
cleanup(content);
var nextUrl = getNextUrl(findPageSet(load_store));
return [content.innerHTML, nextUrl];
} else {
alert('readyState='+xhr.readyState+', status='+xhr.status+', statusText='+xhr.statusText);
}
} catch(e) {
alert(e + '\n' + e.stack);
} finally {
load_store.innerHTML = '';
}
}
function createStore(id) {
var store = document.getElementById(id);
if (!store) {
store = document.createElement('div');
store.id = id;
store.style.display = 'none';
document.body.appendChild(store);
}
return store;
}
function findContent(container) {
return container.querySelector('.TxtContent');
}
function findPageSet(container) {
return container.querySelector('#PageSet');
}
function getNextUrl(pageSet) {
if (pageSet && pageSet.lastChild &&
pageSet.lastChild.nodeName == "A" &&
pageSet.lastChild.text == "下—页") {
return pageSet.lastChild.href;
}
}
function cleanup(content) {
if (content.lastChild.nodeName == "#text" &&
content.lastChild.nodeValue == " 本章没完,请点击下—页继续阅读!如果被转码了请退出转码或者更换浏揽器即可。") {
content.removeChild(content.lastChild);
if (content.lastChild.nodeName == "BR") {
content.removeChild(content.lastChild);
if (content.lastChild.nodeName == "#text" &&
content.lastChild.nodeValue.endsWith("….")) {
content.lastChild.nodeValue = content.lastChild.nodeValue.slice(0, -2);
}
}
}
}
function restyle() {
var style = document.body.querySelector('style#clumsyman');
if (style) {
alert('found embedded <style>');
return false;
}
style = document.body.appendChild(document.createElement('style'));
style.id = 'clumsyman';
style.append(document.createTextNode([
'.TxtContent {font-size: 20px; line-height: 22px; }',
'.DivBottom, .DivBottom + div, h2.vbgcol, .S2 { display: none; }',
'#header { top: 0; }',
'#footer { bottom: 0; }',
'#header, #footer { position: fixed; width: 100%; }',
'#header.hide, #footer.hide { display: none; }',
'.VolumeTop { font-size: inherit; height: auto; margin: 0; padding: 0;}',
'.VolumeNext { margin: 0; }'
].join('\n')));
var anchor = document.body.querySelector('a[name="tobottomebb"]');
if (anchor && anchor.nextSibling &&
anchor.nextSibling.nodeName == "#text" &&
anchor.nextSibling.nodeValue == "ff\n") {
anchor.nextSibling.parentNode.removeChild(anchor.nextSibling);
}
var node = document.body.querySelector('.sau.FCol');
if (!node) return false;
node.parentNode.insertBefore(node, node.previousElementSibling);
document.body.querySelector('.VolumeTop.vbgcol').remove();
var header = document.body.appendChild(document.createElement('div'));
header.id = "header";
header.appendChild(document.body.querySelector('.Nav.bgcol'));
header.appendChild(document.body.querySelector('.searchForm.bgcol'));
var footer = document.body.appendChild(document.createElement('div'));
footer.id = "footer";
var navs = document.body.querySelectorAll('.VolumeNext.vbgcol.FCol');
var nav0 = navs[0];
var nav1 = navs[1];
var nav2 = navs[2];
var prev = nav0.querySelector('span:first-child');
var next = nav0.querySelector('span:last-child');
var cover = nav0.querySelector('span.m');
var shelf = nav2.querySelector('span:first-child');
shelf.classList.add('m');
var mark = nav2.querySelector('span.m');
var top = nav0.querySelector('span:last-child');
nav2.replaceChild(next, shelf);
nav1.replaceChild(shelf, nav1.querySelector('span.m'));
var report = document.body.querySelector('.sErr.FCol span');
nav1.replaceChild(report, nav1.lastElementChild);
footer.appendChild(nav1);
footer.appendChild(nav2);
nav0.remove();
document.body.querySelector('.sErr.FCol').remove();
var content = findContent(document.body);
content.addEventListener("click", function() {
header.classList.toggle("hide");
footer.classList.toggle("hide");
});
return true;
}
function completeContent() {
var load_store = createStore('load_store');
var content = findContent(document.body);
cleanup(content);
var nextUrl = getNextUrl(pageSet);
while (nextUrl) {
var nextPage = queryContent(nextUrl);
content.innerHTML += nextPage[0];
nextUrl = nextPage[1];
}
pageSet.parentNode.removeChild(pageSet);
}
try {
if (!restyle()) {
return;
}
var pageSet = findPageSet(document.body);
if (pageSet) {
window.setTimeout(completeContent, 1000);
}
} catch(e) {
alert(e + '\n' + e.stack);
}
})();