// ==UserScript==
// @name Manga Loader
// @description Load all manga in current page, only available on 178.com and dm5.com
// @author Chris (http://chrisyip.im)
// @include http://*.178.com/*
// @include http://*.dm5.com/*
// @include http://*.dmzj.com/*
// @include http://www.manhua8.com/manhua/*
// @include http://www.manhua8.net/manhua/*
// @include http://www.manhua1.com/manhua/*
// @include http://www.manhua2.com/manhua/*
// @version 1.3.8.4
// @namespace https://greasyfork.org/users/96
// ==/UserScript==
;(function(window){
var style, script, init, resize
resize = function(){
document.body.style.width = getComputedStyle(document.querySelector('html')).width
}
init = function(){
var load_dm5, load_178, load_manhua8, selector, callback
load_dm5 = function(){
var image_div = document.querySelector( selector )
if (!image_div) return;
// make image clickable when there's only a image
image_div.id = ''
image_div.innerHTML = ''
var pid = DM5_CID
, current_page = DM5_PAGE
, last_page = DM5_IMAGE_COUNT
, key = document.getElementById('dm5_key').value
, url = 'chapterimagefun.ashx'
, img = document.createElement('img')
, page_index = DM5_PAGE + 1
, new_img, jump_to_page, _showNext, _showPre, _setURL, _showEnd
, load_image, next_chapter_box, set_bookmark
jump_to_page = function(e){
var page = parseInt(this.getAttribute('data-index'), 10) - 1
if (e.button == 0 || e.button == 1) {
_showNext(page)
} else if (e.button == 2) {
_showPre(page)
}
}
_setURL = function(page){
var _url = GetUrlFormat(window.location.href), next_url
if (page < 1) {
next_url = false
} else {
next_url = _url.replace("{0}", "-p" + (page))
}
!!next_url && (location.href = next_url)
}
_showPre = function(page) {
if (page > 1) {
_setURL(page - 1)
getimage()
SetFace()
SetReadHistory(DM5_CID, DM5_MID, page - 1, DM5_USERID)
} else {
alert("当前已经是第一页");
}
}
_showNext = function(page){
if (page < DM5_IMAGE_COUNT) {
_setURL(page + 1)
SetReadHistory(DM5_CID, DM5_MID, page, DM5_USERID)
getimage()
SetFace()
} else _showEnd()
}
_showEnd = function(){
if (!next_chapter_box.hasAttribute('data-show')) {
$.ajax({
url: DM5_CURL_END,
dataType: 'html',
success: function (data) {
var div = $(data).find('#index_mian a[href="javascript:addfavorite();"]').get(0).parentElement
, link = div.querySelector('a[href*=m]')
, s, rect
s = link ? '继续观看:' + link.outerHTML : '这已经是最新章节。'
next_chapter_box.innerHTML += s;
document.body.appendChild(next_chapter_box)
next_chapter_box.style.display = 'block'
rect = next_chapter_box.getBoundingClientRect()
next_chapter_box.style.marginTop = '-' + (rect.height / 2) + 'px'
next_chapter_box.style.marginLeft = '-' + (rect.width / 2) + 'px'
next_chapter_box.setAttribute('data-show', true)
},
error: function(){
location.href = DM5_CURL_END
}
})
} else {
'none' === next_chapter_box.style.display && (next_chapter_box.style.display = 'block')
}
}
set_bookmark = function(){
var imgs = document.querySelectorAll('.manga_image')
if ( !imgs.length ) return;
var body_index = parseInt(document.body.getAttribute('data-index'), 10) ||
parseInt(imgs[0].getAttribute('data-index'), 10)
, next_index = body_index
, innerHeight = window.innerHeight
, middle_loc = parseInt((innerHeight / 2), 10)
for (var i = 0, len = imgs.length, rect; i < len; i++) {
if (body_index - 1 == i) continue;
rect = imgs[i].getBoundingClientRect()
if ((middle_loc <= rect.bottom && innerHeight >= rect.bottom) ||
(0 <= rect.top && middle_loc >= rect.top)) {
next_index = parseInt(imgs[i].getAttribute('data-index'), 10)
break
}
}
if (next_index !== body_index) {
SetReadHistory(DM5_CID, DM5_MID, next_index, DM5_USERID)
document.body.setAttribute('data-index', next_index)
}
}
img.className = 'manga_image'
next_chapter_box = document.createElement('div')
next_chapter_box.id = 'next_chapter_box'
next_chapter_box.style.display = 'none'
next_chapter_box.innerHTML = '<a class="close">X</a><p>已经是最后一页。<a class="add-bookmark">加入书签</a>。</p>'
next_chapter_box.addEventListener('click', function (e) {
if (-1 < e.target.className.indexOf('add-bookmark')) {
this.style.display = 'none'
SetBookmarker(DM5_CID, DM5_MID, DM5_IMAGE_COUNT, DM5_USERID)
}
if (-1 < e.target.className.indexOf('close')) {
this.style.display = 'none'
}
}, false)
;(function(page){
var that = arguments.callee
$.ajax({
url: url,
data: {
cid: pid,
page: page,
language: 1,
key: key
},
success: function(data){
var d
eval(data)
if (!Array.isArray(d)) return;
for (var i = 0, len = d.length, url; i < len; i++) {
current_page++
url = d[i].trim()
if ('' == url || !!image_div.querySelector('img[src="' + url + '"]')) continue;
var el = img.cloneNode()
el.src = d[i]
el.setAttribute('data-index', page_index++)
el.addEventListener('mouseup', jump_to_page, false)
image_div.appendChild(el)
if (current_page > last_page) break;
}
if (current_page <= last_page) {
that.call(null, current_page)
}
}
})
})(current_page)
window.addEventListener('scroll', set_bookmark, false)
}
// end load_dm5
load_178 = function(){
var img = document.querySelector( selector )
if (!img) return;
var parent = img.parentElement
, currentPage = parseInt(document.querySelector('#jump_select2').value, 10)
, url_taste = /(.*\/\d+)(?:-\d+)?(\..*)/i.exec(location.href)
, url = {
prefix: url_taste[1] + '-',
format: url_taste[2]
}
, callback = function(){
var page = parseInt(this.getAttribute('data-index'), 10)
if (page < COMIC_PAGE.page_count) {
window.location.href = url.prefix + (page + 1) + url.format
return;
} else {
if ($('#next_chapter').size() > 0) {
nextChapterMsgBox()
} else {
if (final_page_url) {
window.location.href=final_page_url
return;
}
alert('你已经浏览完所有内容。')
window.location.href = 'http://manhua.178.com'
}
}
}
for (var i = currentPage, len = arr_pages.length, el; i < len; i++) {
el = document.createElement('img')
el.src = img_prefix + arr_pages[i]
el.setAttribute('data-index', i + 1)
el.addEventListener('mouseup', callback, false)
parent.appendChild(el)
}
}
load_manhua8 = function(){
var img = document.querySelector( selector )
if (!img) return;
var parent = img.parentElement
, pager = document.querySelector( '#topSelect' )
, total_page = pager.querySelector( 'option:last-child' ).value
, current_page = parseInt( pager.value, 10 )
, url_taste = /(.+?)(\d+)(\.[a-z]{3,4})$/i.exec( img.src )
, url = {
prefix: url_taste[1],
page_num_length: url_taste[2].length,
format: url_taste[3]
}
, formatURL = function ( index ) {
index = String(index)
var len = url.page_num_length - index.length
while ( len ) {
index = '0' + index
len--
}
return url.prefix + index + url.format
}
while ( ++current_page <= total_page ) {
el = document.createElement( 'img' )
el.classList.add( 'ImgComic' )
el.src = formatURL( current_page )
el.setAttribute( 'data-index', current_page )
parent.appendChild( el )
}
}
if ( /dmzj\.com|178\.com/.test( location.host ) ) {
selector = 'img[id*=bigimg]'
callback = load_178
} else if ( ~location.host.indexOf( 'dm5.com' ) ) {
selector = '#showimage'
callback = load_dm5
} else if ( /manhua\d+.(com|net)/.test( location.host ) ) {
selector = '#comicImg'
callback = load_manhua8
}
(function(){
if ( document.querySelector( selector ) ) {
callback.call()
return;
}
if ( document.readyState !== 'complete' ) {
setTimeout( arguments.callee, 1000 )
}
})()
} // end init()
document.body.style.minHeight = (screen.availHeight + 100) + 'px'
resize()
window.addEventListener('resize', resize, false)
document.body.style.minWidth = '980px'
style = document.createElement('style')
style.innerHTML = '.content .ImgComic, .inner_img img, .manga_image{box-sizing:border-box;padding:1px!important;border:2px solid gray!important;margin:0 auto 10px!important;display:block!important;max-width:99%!important;width:auto!important;height:auto!important;cursor:pointer;}#next_chapter_box{background:#333;position:fixed;top:50%;left:50%;margin:0;z-index:999999;padding:20px;color:#fff;font-size:16px;box-shadow:0 0 15px #000;border-radius:5px;}#next_chapter_box a{color:#FF4E00;cursor:pointer;}.close{position:absolute;top:5px;right:5px;font-size:12px;}'
document.head.appendChild(style)
script = document.createElement( 'script' )
script.textContent = '(' + init.toString() + ')( window )'
document.head.appendChild( script )
})(window);