// ==UserScript==
// @name 「ONE·一个」网站增强
// @namespace https://github.com/jiajunw/one-enhanced
// @description 为「ONE·一个」网站增加方便的功能
// @icon https://raw.githubusercontent.com/JiajunW/One-Enhanced/master/res/icon.png
// @include http://wufazhuce.com/one
// @include http://wufazhuce.com/one/
// @include http://wufazhuce.com/one/vol*
// @version 1.5.0
// @resource custom_css https://raw.githubusercontent.com/JiajunW/One-Enhanced/master/style/style.css
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_xmlhttpRequest
// @downloadURL https://update.greasyfork.icu/scripts/4873/%E3%80%8CONE%C2%B7%E4%B8%80%E4%B8%AA%E3%80%8D%E7%BD%91%E7%AB%99%E5%A2%9E%E5%BC%BA.user.js
// @updateURL https://update.greasyfork.icu/scripts/4873/%E3%80%8CONE%C2%B7%E4%B8%80%E4%B8%AA%E3%80%8D%E7%BD%91%E7%AB%99%E5%A2%9E%E5%BC%BA.meta.js
// ==/UserScript==
function add_style() {
GM_addStyle(GM_getResourceText("custom_css"));
}
function get_today_no() {
var the_day_before_first = new Date(2012, 10 - 1, 7);
var today = new Date();
var diff = new Date(today - the_day_before_first);
var days = diff / 1000 / 60 / 60 / 24;
return Math.floor(days);
}
function get_cur_no() {
var url_path = document.location.pathname;
var re = /^\/one\/vol\.(\d+)/g;
var matches = re.exec(url_path);
if (matches && matches.length > 1) {
return parseInt(matches[1]);
}
}
function dom(tag, attr, inner) {
var tag = document.createElement(tag);
for (var key in attr) {
if (attr.hasOwnProperty(key)) {
tag.setAttribute(key,attr[key]);
}
}
if (inner) {
tag.innerHTML = inner;
}
return tag;
}
function jump_to_page_tab(e) {
e.preventDefault();
var tag = e.target.tagName.toLowerCase();
var url;
var hash = document.location.hash;
if (tag == 'span') {
url = e.target.parentNode.href;
} else {
url = e.target.href;
}
document.location.href = url + hash;
}
function add_nav() {
var new_nav = dom('nav', { id : 'enhanced-navbar' });
document.body.appendChild(new_nav);
var url = '/one/vol.';
if (cur < newest) {
var url_next = url + (cur + 1);
var new_nav_newer = dom(
'a',
{ id : 'enhanced-newer', href : url_next },
''
);
new_nav.appendChild(new_nav_newer);
}
if (cur > oldest) {
var url_prev = url + (cur - 1);
var new_nav_older = dom(
'a',
{ id : 'enhanced-older', href : url_prev },
''
);
new_nav.appendChild(new_nav_older);
}
var nodes = document.querySelectorAll('#enhanced-navbar a');
for (var i = 0; i < nodes.length; ++i) {
nodes[i].addEventListener('click', jump_to_page_tab, false);
}
add_style();
}
/**
* Returns a random integer between min (inclusive) and max (inclusive)
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function add_random_link() {
var rand = getRandomInt(oldest, newest);
var rand_url = '/one/vol.' + rand;
var navbar = document.querySelector('#one-navbar .navbar-right');
var recent = document.querySelector('#one-navbar .navbar-right > li');
var rand_link = 'ONE
偶遇ONE 偶遇';
var rand_item = dom('li', null, rand_link);
navbar.insertBefore(rand_item, recent);
rand_item.childNodes[0].addEventListener('click', jump_to_page_tab, false);
}
/**
* Some questions (e.g. vol 1,3,4,210, etc.) have html code on pages
* which are ugly. So I decide to remove them.
*/
function strip_html() {
var question = document.querySelector('.cuestion-contenido').innerHTML;
var stripped = question.replace(/</gi, '<').replace(/>/gi, '>').replace(/<(?:.|\n)*?>/gm, '');
document.querySelector('.cuestion-contenido').innerHTML = stripped;
}
/**
* Some old pages does not contain one things!
* So we can remove the link
*/
function strip_things() {
var thing_title = document.querySelector('#tab-cosas .cosas-titulo').innerHTML.trim();
if (!thing_title) {
var navbar = document.querySelector('#one-navbar ul');
var link = navbar.querySelector('li:last-child');
navbar.removeChild(link);
}
}
function detail_page() {
var header = document.querySelector('.page-header > h1');
if (header && header.innerHTML.trim() === '404 Not Found') {
// this is a 404 page
} else {
add_nav();
add_random_link();
strip_html();
strip_things();
}
}
function list_page() {
add_style();
var row = dom('div', { class : 'row' }, '