Greasy Fork

Greasy Fork is available in English.

DMZJ漫画转为手机版链接

DMZJ漫画更新页面链接转为手机版

目前为 2015-08-07 提交的版本,查看 最新版本

// ==UserScript==
// @name        DMZJ漫画转为手机版链接
// @author      Crab
// @namespace   [email protected]
// @description DMZJ漫画更新页面链接转为手机版
// @include     http://i.178.com/~sms.cartoon.cartoonListUid*
// @include     http://i.178.com/~sms.cartoon.cartoonNewList*
// @include     http://m.dmzj.com/*
// @include     http://manhua.dmzj.com/*
// @include     http://user.dmzj.com/my/subscribe/mh/*
// @version     0.2
// @grant       none
// ==/UserScript==

(function(){

if(location.hostname.indexOf('m.dmzj.com') > -1 && top !== self){
	return (function(){
		addEventListener('message', function(event){
			if(event.data.nid !== 'dmzj_get_chapters') return;
			var req = new XMLHttpRequest();
			req.open('GET', event.data.url, true);
			req.onload = function () {
				event.data.response = this.responseText;
				top.postMessage(event.data, event.origin);
			};
			req.send();
		});
		top.postMessage({nid: 'dmzj_get_chapters'}, '*');
	})();
};

var gUrl = (function(){
	var url = document.URL;
	if(/cartoonListUid|cartoonNewList/g.test(url)){
		return 'cartoonList';
	}else if(/^http:\/\/manhua\.dmzj\.com\/update\_\d+\.shtml$/.test(url)){
		return 'update';
	}else if(/^http:\/\/m\.dmzj\.com\/view\/.+\.html(\?t=\d+#\d+)?$/.test(url)){
		return 'mobile';
	}else if(/^http:\/\/m\.dmzj\.com\/([^\/\.]+\.html)?(\?t=\d+#\d+)?$/.test(url)){
		return 'mobileHome';
	}else if(/^http:\/\/manhua\.dmzj\.com\/.+$/.test(url)){
		return 'desktop';
	}else if(/^http:\/\/user\.dmzj\.com\/.+$/.test(url)){
		return 'subscribe';
	}
})();


var $$ = function(e){
	return Array.from(document.querySelectorAll(e))
};

console.log(gUrl);

var toMobileLink = function(a){
	var a1 = a.cloneNode(true);
	a1.textContent = '(#)';
	a1.style.color = 'orange';
	a.parentNode.insertBefore(a1, a.nextSibling);
	a.href = a.href.replace(/\/\/manhua([^\/]+)/,'//m$1/view').replace(/shtml$/, 'html');
};

window._cE = function (name, attr, parent){
	var e = document.createElement(name);
	for (var i in attr || []) 
		i == 'text' ? (e.textContent = attr[i]) : e.setAttribute(i, attr[i]);
	parent && (Array.isArray(parent) ? 
		parent[0].insertBefore(e, parent.length == 2 ? parent[1] : parent[0].firstChild) : 
		parent.appendChild(e));
	return e;
};

if(gUrl == 'cartoonList'){
	$$('.acg-content-text a[href$=shtml]').forEach(toMobileLink);
}if(gUrl == 'update'){
	$$('.pictext a[href$=shtml]').forEach(toMobileLink);
	//漫画更新页面国漫灰色显示
	$$('.pictext a[href^="http\:\/\/www\.dmzj\.com\/"]').forEach(function(a){
		var boxdiv = a;
		while(boxdiv){
			if(boxdiv.className == 'boxdiv1')
				return boxdiv.classList.add('filter');
			boxdiv = boxdiv.parentNode;
		}
	});
	_cE('style', {text: '.boxdiv1.filter:not(:hover){ filter: grayscale(100%);}'}, document.head);

}else if(gUrl == 'desktop'){
	$$('.cartoon_online_border a[title][href$=shtml]').forEach(toMobileLink);

	//被隐藏的漫画至少显示最新话
	var mhContainer = $$('.cartoon_online_border')[0];
	if(mhContainer.firstElementChild.localName == 'img'){
		mhContainer.innerHTML = '<a href="http://m.dmzj.com/view/'+ g_comic_id +'/' + g_last_chapter_id +'.html" title="'+ g_last_update +'" target="_blank">'+ g_last_update +'</a><a href="' + g_comic_url + g_last_chapter_id +'.shtml" title="'+ g_last_update +'" target="_blank" style="color:orange;">(#)</a>' +'<h2>正在加载被屏蔽的地址...</h2>';

		var iframe = _cE('iframe', {style: 'display:none', src: 'http://m.dmzj.com/xhr'}, document.body);
		addEventListener('message', function(e){
			if(!e.data.nid == 'dmzj_get_chapters') return;
			if(!e.data.response)
				return e.source.postMessage({nid: e.data.nid, url: '/info/'+ g_comic_id + '.html'}, e.origin);
			mhContainer.innerHTML = '';
			JSON.parse(e.data.response.match(/<script type="text\/javascript">\s+initIntroData\(([^)]+)\);/)[1]).forEach(function(chapters){
				_cE('h3', {text: chapters.title}, mhContainer);
				var ul = _cE('ul', null, mhContainer);
				chapters.data.forEach(function(c){
					_cE('li', null, ul).innerHTML = '<a href="http://m.dmzj.com/view/'+ c.comic_id +'/' + c.id +'.html" title="'+ c.chapter_name +'" target="_blank">'+ c.chapter_name +'</a><a href="' + g_comic_url + c.id +'.shtml" title="'+ c.chapter_name +'" target="_blank" style="color:orange;">(#)</a>'
				});
				_cE('div', {class: 'clearfix'}, mhContainer);
			});
			removeEventListener('message', arguments.callee); iframe.remove();
		});

	}
}else if(gUrl == 'subscribe'){
	$$('.autoHeight p:nth-child(2)> a[href$="shtml"]').forEach(toMobileLink);
}else if(gUrl == 'mobile'){
	_cE('style', {text: (function(){/*
		body .UnderPage .subHeader {background-color: rgba(255, 255, 255, 0.68);}
		.UnderPage{background:#222!important}
		#commicBox>div{text-align:center}
		#commicBox>div>img{width:80%!important;margin: 0px -3% 0px 3%;}
		#pageNum {
			position: fixed;
			top: 50px;
			width: 80px;
			background: rgba(238, 170, 0, 0.5);
			color: blanchedalmond;
			height: 1.6em;
			text-align:center;
			line-height: 1.6em;
			font-size: 2.3em;
			right: 0px;
		}

		#np_chap{
			position: fixed; 
			bottom:30%;
			right: 20px;
			z-index: 11111;
		}
		#np_chap >div>div, #np_chap>a{
			cursor: pointer;
			display: block;
			background: transparent url("/images/page_bg.png") no-repeat scroll center bottom / 100% auto;
			width: 40px;
			height:40px;
			transform: rotate(90deg);
			margin-top: 5px;
			box-shadow: 0 0 6px -2px rgba(255, 255, 255, 0.65);
			border-radius: 8px;
		}
		#np_chap>div>div:not(:hover), #np_chap>a:not(:hover){
			opacity: .5;
		}
		#np_chap>div>div:last-child{
			transform: rotate(-90deg);
		}
		#np_chap>a{
			background-image:url('data:image/png;base64,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');
			transform:none;
		}
		#tucao{
			position: fixed;
			top: 50px;
			left: 0;
			color: #fff;
			z-index: 1111111;
			height: calc(100% - 115px);
		}
		#tucao:not(:hover){
			opacity: 0.5
		}
		#tucao ul{
			overflow-y: scroll;
			height: calc(100% - 40px);
		}
		#tucao pre{
			font-weight: bold;
			margin-bottom: 5px;
		}
		#tucao li{
			margin-bottom: 5px;
			margin-left: 3px;
		}
		#tucao span{
			padding: 0px 3px;
			border-radius: 2px;
			cursor: pointer;
			border:transparent 1px solid;
		}
		#tucao span:hover{
			background-color:#FFF!important;
			color:#000;
			border-color:red;
		}

		.control_scroll{
			margin-top: 0!important;
			padding-top:0!important;
			opacity:.5;
			transition: opacity 0.3s cubic-bezier(.55,.09,.68,.53) 0s;
		}
		.control_scroll:hover{
			opacity:1;
		}
		#m_r_bottom{
			display:block!important;
			height:38px!important
		}
		#m_r_bottom>.BtnBox{
			display:none;
		}
		#m_r_slider{
			background-clip: content-box;
			padding: 14px 0px;
			top: 3px;
		}
		#m_r_slider_ball{
			top: 3px;
		}
		.control_commentIcon{
			margin-top: 9px;
		}
		//#m_r_panelbox{display:none!important}
	*/}).toString().replace(/^.*|\s\/\/.*|.*\}$/g, '')}, document.head);

	var data = $$('script:not([src])')[0].textContent.match(/mReader\.initData\(([^}]+\}),/);
	try{
		data = JSON.parse(data[1]);
		console.info(data.page_url.join('\n'));
	}catch(e){
		return console.error(e);
	}

	var np_chap = _cE('span', {id:'np_chap'}, document.body),
		np = _cE('div', null, np_chap);
	_cE('a', {title: '章节目录', href: '../../info/'+data.comic_id+'.html'}, [np_chap]);

	_cE('div', {title: '上一话', onclick: 'mReader.prevBtnAction()'}, np).style.display = data.prev_chap_id ? '' : 'none';
	_cE('div', {title: '下一话', onclick: 'mReader.nextBtnAction()'}, np).style.display = data.next_chap_id ? '' : 'none';

	_cE('script', {text: '('+(function(chapter_name){
		window.success_jsonpCallback = function(json){
			//console.log(json);
			var length = json.data && json.data.list && json.data.list.length || 0,
				tucao = _cE('div', {id:'tucao',}, document.body);
			_cE('pre', {text: chapter_name+'\n'+(json.msg=='提交成功'? '' : ' '+json.msg) + (length ? ' 现有 '+ length+'/'+(json.data && json.data.total || 0)+' 吐槽:' : '')}, tucao);
			if(!length) return;
			var ul = _cE('ul', null, tucao),
				opacity = 1,
				tc = null;
			for(var i=0; i<length; i++){
				tc = json.data.list[i];
				_cE('span', {text: tc.title, title: tc.nickname+' (uid: '+tc.uid+')\nIP:'+tc.ip}, _cE('li', null, ul)).style.backgroundColor = 'rgba(39, 117, 247, '+ opacity +')';
				opacity -= 1 / (length + 1);
			}
		};
	}).toString()+')(" <'+data.chapter_name+'>")'}, document.head);

	_cE('script', {src: 'http://interface.dmzj.com/api/viewpoint/getViewpoint?callback=success_jsonpCallback&more=1&type='+data.chapter_type+ '&type_id='+data.comic_id+'&chapter_id='+data.id+'&_='+ new Date().getTime()}, document.body);


	window._pageNum = _cE('div', {id:'pageNum', text: '1/'+data.sum_pages}, document.body);
	var scrollTimeout;
	var imgs = null;
	addEventListener('scroll', function(){
		clearTimeout(scrollTimeout);
		scrollTimeout = setTimeout(function(){
			// 页码
			imgs = imgs || document.querySelector('#commicBox>div[id]').children;
			var st = document.documentElement.scrollTop,
				sh = document.documentElement.clientHeight;
			!window._dragToScroll && mReader.updatePageDisplay();
			window._dragToScroll = false;
			for(var i=0;i<imgs.length;i++){
				var r = imgs[i].getBoundingClientRect();
				if((r.height + r.top)/sh > 0.2) return (_pageNum._page != i+1) && (_pageNum.textContent = (_pageNum._page = i+1)+'/'+data.sum_pages);
			}
		}, 100);
	});

	//修复拖拽进度条
	var slider = $$('#m_r_slider_ball')[0],
		sliderBar = $$('#m_r_slider')[0];
	if(slider && sliderBar){
		window._isSlider = false;
		window._sliderOffset = 0;
		mReader.clickAction = eval('('+ mReader.clickAction.toString()
			.replace(/#m_r_bottom/g, '#mark')
		+').bind(mReader)');

		//拖拽滑块跳转
		addEventListener('mousemove', eval('('+ mReader.touchMoveAction.toString()
			.replace(/^.*\{/, '$&\nif(!window._isSlider) return;\n')
			.replace('touches[0]', 'event')
			.replace('32 -', 'window._sliderOffset - 2*')
			.replace(/.*\}$/,'window._pageNum.textContent = this.curr_page + "/"+ this.page_num;$&')
		+').bind(mReader)'));
		slider.onmousedown = function(e){
			if(event.button !== 0 || e.target !== this) return;
			window._isSlider = true;
			window._sliderOffset = e.clientX - this.offsetLeft - this.parentNode.offsetLeft;
		};
		addEventListener('mouseup', function(event){
			if(!window._isSlider) return;
			window._isSlider = false;
			window._dragToScroll = true;
			mReader.touchEndAction();
		});

		//点击进度条位置跳转
		sliderBar.addEventListener('mousedown', eval('('+ mReader.touchMoveAction.toString()
			.replace(/^.*\{/, '$&\nif(event.button !== 0)return;\nwindow._isSlider = true; window._dragToScroll = true;\n')
			.replace('touches[0]', 'event')
			.replace('32 -', '2*')
			.replace('currX < max', 'currX <= max')
			.replace(/.*\}$/,'window._pageNum.textContent = this.curr_page + "/"+ this.page_num;$&')
		+').bind(mReader)'));
	}
}else if('mobileHome'== gUrl){
	_cE('style', {text: (function(){/*
		.imgBox [class^='col_3_'] li{
			width: 10%!important;
			min-width: 120px;
			margin: 0px 0% 0% 3%!important;
		}
		.imgBox [class^='col_2'] li{
			width: 18%!important;
			min-width: 200px;
		}
		.imgBox [class^='col_3_'] li img{
			height: auto!important;
		}
		.imgBox [class^='col_3_'] li:nth-child(7n+1){
			clear:left;
		}
	*/}).toString().replace(/^.*|\/\/.*|.*\}$/g, '')}, document.head);
}

})();