98T图片预览

[NOW]官方双域名 私人镜像请自行修改替换 公共CDN请提供反馈 [TIP]预览 基于 @bluebabes的sehuatang 0.0.4版本

2023-09-27 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

// ==UserScript==
// @name         98T图片预览
// @description  [NOW]官方双域名 私人镜像请自行修改替换 公共CDN请提供反馈  [TIP]预览 基于 @bluebabes的sehuatang 0.0.4版本
// @version     1.1.2
// @icon data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLvcALW92gawt9w0u73lZb2+62vKzu8ryNDpC87S9gDI1dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArLPYAKuy1g6ts92Esbbj5rq66/u3tuv5x8jy4r3A56e7wOIhur/jAAAAAAAAAAAAAAAAAK6z3QCxt90FqKvbQ52f1XybotWZp67g+Ker5v+ipej/pKbr/7K17/+3uun/vcPpi////wDP1egAAAAAAAAAAAC4uucWuLjvfqmp6O2Xl97/kZfa/4uR3P96gNX/gYnb/46W5v+SmOv/o6js/7i97srDxvUiyc30CMOf/wDH19YAsrDpjraw8/ynovL/jY3l/3l/3P9eYtD/bXTT/5Sc5f+krO7/r7X0/5qg8P+ssvT5w8X818PF+LG0s+9cp6bnF6Ga3t6mnej/lZDo/3Z42/9vd9f/iI3g/6Op7/+ZoPX/k5z3/6mu+v+8wvr/tbz6/7i9+f+1tfL/sa7s+7y676qZktn/l4/h/4mI4P99gd7/q7Dt/5ed8P9weOz/S0/s/zg96/8+R+r/p6/8/7rC+P+nq/X/qafy/7Gu7v+0s+v3pJ/j/5eV4/+doOv/oKXx/6Op+P9OVub/T1nv/1Ra8P9ASOz/W2jz/4+Z/f+wtvj/oafv/6Cj8v+oqO7/ra7q/ael5MmjpOj/qq7x/6Cn9/+Yovv/dID3/1ll9/9kavj/XWj0/36L+P+NmP3/p6v8/7e69v+tr/T/sLPz/73C8r7AwPFBsrXr2auv7/+Ynfj/nqj8/4uW/f9sefz/XGT9/2Jp/f91gP3/eYX//6Om/P/BxPr+wcT45MXJ+Z7V3Psn////ALm+7Ty6u/Xnq6z9/6eu/P+ZoP7/bHb+/3yH/v+Sm/7/kZf+/6Wr/v+vs/v/ur7648rQ+z70/P8F2+L+AM7R+QDO0PgQy8v7w7+//f+ytv3/srf9/6Km/v+ipf//q6z//7a4//+1uv7/srL+/726/dTX2fob1df6AAAAAADCv/gAwLv4CNPQ/bfJyvv/wcP8/77C/f+5vPz/urr8/72//f+7vv7/sLD+/7Cr+//Bvfju1tf4NdTV+QAAAAAAxsj2AMfL9QnZ1fy30cz8/7689v+qpvb/tbT9/8DC/v+6u/7/t7b8/7Sx+P+3sPX/xMD2vNnc9xDV1vcAAAAAANDX9gDt4v8A3Nz8SczK98+wq+3fmZLwq6uo+47Fx/q/vb33+r279v/IxPn/xsH49MfF9Va3r/IA19z3AAAAAAAAAAAAwMz0AMbY/gG2vOsfr7PsKqus+gawtPAAzNHzF8PH8XDR0vi129v9qtPT+3DT1PgW09T4AAAAAAAAAAAA+B8AAPAPAACABwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACAAwAAgAMAAIADAADABwAAwgcAAA==
// @author       UnfogetMemory
// @namespace    https://www.sehuatang.net/*
// @namespace    https://www.sehuatang.org/*
// @match     https://www.sehuatang.net/forum*
// @match     https://www.sehuatang.org/forum*
// @match      https://www.sehuatang.net/forum.php?mod=forumdisplay&fid=103&page=*
// @match      https://www.sehuatang.org/forum.php?mod=forumdisplay&fid=103&page=*
// @require       https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @license 	 GNU GPLv3
// ==/UserScript==

(function () {
	'use strict';

	const REFERER = document.location.href;
	const USER_AGENT = window.navigator.userAgent;
	const ACCEPT =
		'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7';
	const COOKIE = document.cookie;

	var elArrayLength = 0;

	GM_addStyle(`
        .nep_um_main{
            display: flex;
            flex-flow: wrap;
            width: 2501px;
        }

        .nep_um_title {
            width: 100%;
            max-width: 100%;
            margin: 1rem;
            font-size: 1.7rem;
            font-weight: bold;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            flex-basis: 100%;
        }

        .nep_um_cover {
            height: auto;
            margin: 1rem;
            flex-basis: 100%;
        }

        .nep_um_cover > img {
            width: 100%;
            height: auto;
            max-width: 938.667px;
        }

        .nep_um_magent {
            flex-basis: 100%;
            width: 100%;
            margin: 1rem;
        }

       .nep_um_torrent {
            flex-basis: 100%;
            width: 100%;
            margin: 1rem;
            font-size: 1.2rem;
        }

        .nep_um_divider {
            flex-basis: 100%;
            width: 100%;
            margin: 1rem;
            font-size: 1.2rem;
            height: 0.4rem;
            background-color: black;
        }
    `);

	function getOpenUrl(elBody) {
		let elUrl = null;
		if (elBody) {
			let subUrl = null;
			let subUrlEl = elBody.querySelector('td > td.icon > a');
			if (!subUrlEl) {
				subUrlEl = elBody.querySelector('tr > th.common > a.s.xst');
			}
			if (!subUrlEl) {
				subUrlEl = elBody.querySelector('tr > th.new > a.s.xst');
			}
			if (subUrlEl) {
				subUrl = subUrlEl.href;
			}
			if (subUrl) {
				elUrl = subUrl;
			}
		}
		return elUrl;
	}

	function getAllArray() {
		return Array.from(
			document.querySelectorAll('[id^="normalthread_"]')
		).filter(function (element) {
			if (/^normalthread_\d+$/.test(element.id)) {
				return element;
			}
		});
	}

	function cutLastArray() {
		let allArray = getAllArray();
		let lastArray = null;
		if (allArray && allArray.length > 0) {
			let nowArrayLength = allArray.length;
			if (elArrayLength <= 0) {
				lastArray = allArray;
			} else {
				lastArray = allArray.slice(elArrayLength);
			}
			elArrayLength = nowArrayLength;
		}
		return lastArray;
	}

	function getSubPageImageEl(subPageHTML) {
		if (subPageHTML) {
			let _el = subPageHTML.querySelector('ignore_js_op > img');
			if (_el) {
				return `<img src="${_el.getAttribute(
					'zoomFile'
				)}" style="width:100%; max-with:300px; height: auto;"/>`;
			}
		}
		return null;
	}

	function getSubPageMagentEl(subPageHTML) {
		if (subPageHTML) {
			let magentEl = subPageHTML.querySelector('.blockcode > div > ol > li');
			if (magentEl) {
				return `<a href="${magentEl.innerText}" style="text-decoration:underline;">${magentEl.innerText}</a>`;
			}
		}
		return null;
	}

	function getSubPageTorrentEl(subPageHTML) {
		if (subPageHTML) {
			return subPageHTML.querySelector(
				'div.pattl > ignore_js_op > dl > dd > p.attnm '
			);
		}
		return null;
	}

	function getTitle(elBody) {
		let title = 'Unknown';
		if (elBody) {
			let titleEl = elBody.querySelector('tr > th.common > a.s.xst');
			if (!titleEl) {
				titleEl = elBody.querySelector('tr > th.new > a.s.xst');
			}
			if (titleEl) {
				title = titleEl.innerText.replace(/<savdiv[^>]*>.*?<\/savdiv>/g, '');
			}
		}
		return title;
	}
	/* toRequestSubURL */
	function convertElBody(elBody) {
		let openPageUrl = getOpenUrl(elBody);
		if (!openPageUrl) {
			return null;
		}
		GM_xmlhttpRequest({
			method: 'GET',
			url: openPageUrl,
			headers: {
				'User-agent': USER_AGENT,
				Accept: ACCEPT,
				cookie: COOKIE,
				referer: REFERER,
			},
			onerror: function (_error) {},
			onload: function (_res) {
				let parser = new DOMParser();
				let subPageHTML = parser.parseFromString(
					_res.responseText,
					'text/html'
				);
				let imgEl = getSubPageImageEl(subPageHTML);
				let magentEl = getSubPageMagentEl(subPageHTML);
				let torrentEl = getSubPageTorrentEl(subPageHTML);
				if (imgEl && (magentEl || torrentEl)) {
					// main
					let mainDiv = document.createElement('div');
					mainDiv.classList.add('nep_um_main');
					mainDiv.id = 'nep_um_main';

					// title
					let title = getTitle(elBody);
					let titleDiv = document.createElement('div');
					titleDiv.classList.add('nep_um_title');
					titleDiv.innerText = title;
					mainDiv.appendChild(titleDiv);

					// cover
					let imgDiv = document.createElement('div');
					imgDiv.onclick = function () {
						window.open(openPageUrl, '_blank');
					};
					imgDiv.classList.add('nep_um_cover');
					imgDiv.innerHTML = imgEl;
					mainDiv.appendChild(imgDiv);

					// magent
					let magentDiv = document.createElement('div');
					magentDiv.classList.add('nep_um_magent');
					magentDiv.innerHTML = magentEl;
					mainDiv.appendChild(magentDiv);

					// torrent
					let torrentDiv = document.createElement('div');
					torrentDiv.classList.add('nep_um_torrent');
					torrentDiv.innerHTML = torrentEl.outerHTML;
					mainDiv.appendChild(torrentDiv);

					// divider
					let dividerDiv = document.createElement('div');
					dividerDiv.classList.add('nep_um_divider');
					mainDiv.appendChild(dividerDiv);

					elBody.innerHTML = '';
					elBody.appendChild(mainDiv);
				}
			},
		});
	}

	function run() {
		let modifyElArray = cutLastArray();
		if (modifyElArray && modifyElArray.length > 0) {
			modifyElArray.forEach(function (_el) {
				// try {
				//     convertElBody(_el)
				// } catch{

				// }
				convertElBody(_el);
			});
		}
	}

	var runDebounce = _.debounce(run, 3000, { maxWait: 8000 });
	/* mainListen */
	const observer_list = new MutationObserver(function (mutations) {
		mutations.forEach(function (mutation) {
			if (mutation.type === 'childList') {
				runDebounce();
			}
		});
	});
	const observerConfig_list = { childList: true, subtree: true };
	observer_list.observe(document.body, observerConfig_list);

	/* widthListen */
	const wpDiv = document.querySelector('#wp');
	const observer_width = new ResizeObserver((entries, observer) => {
		// 遍历观察结果
		for (const entry of entries) {
			if (entry.target === wpDiv) {
				const newWidth = wpDiv.clientWidth;
				const childDivs = wpDiv.querySelectorAll('#nep_um_main');
				for (const childDiv of childDivs) {
					childDiv.style.width = newWidth + 'px';
				}
			}
		}
	});
	observer_width.observe(wpDiv);

	// init
	run();
	document.querySelector('#threadlisttableid').style.width = '100%';
})();