Greasy Fork is available in English.
dc 글을 페이지로 보기기
- // ==UserScript==// @name dc-paginate// @namespace http://tampermonkey.net/// @version 0.1// @description dc 글을 페이지로 보기기// @author fienestar// @match https://gall.dcinside.com/board/view*// @match https://gall.dcinside.com/mgallery/board/view*// @icon https://www.google.com/s2/favicons?sz=64&domain=dcinside.com// @grant none// @license MIT// ==/UserScript==(function() {'use strict';const SINGLE_PAGE = true;const RIGHT_IS_NEXT = true;const CONTROL_RIGHT_IS_NEXT = true;const write_div = document.getElementsByClassName('write_div')[0]function is_image_p(p){return p.getElementsByClassName('imgwrap').length}function is_space_p(p){return p.children.length === 0 || (p.children.length === 1 && p.children[0].tagName.toUpperCase() === 'BR')}let page_list = [[]]for(const child of write_div.children){if(is_image_p(child)){child.getElementsByTagName('img')[0].style.maxHeight = '90vh';page_list.push([child], []);}else page_list.at(-1).push(child);}const removed = [];page_list.forEach(page => {while(page.length !== 0 && is_space_p(page.at(0))) removed.push(page.shift());while(page.length !== 0 && is_space_p(page.at(-1))) removed.push(page.pop());})page_list = page_list.filter(page => page.length !== 0);let paginated = false;function pagenate(){if(paginated) return;paginated = true;removed.forEach(element => element.remove());const page_element_list = page_list.map(page => {const div = document.createElement('div');div.style.margin = '0 auto';div.style.width = 'fit-content';page.forEach(element => div.appendChild(element));return div;});const page_count = page_element_list.lengthconst placeholder = document.createElement('p');const left = document.createElement('p');const right = document.createElement('p');for(const element of [placeholder, left, right])element.style.height = '90vh';placeholder.style.width = '100%';const p = document.createElement('p');const br = document.createElement('br');p.append(br);write_div.prepend(placeholder, br);const placeholder_rect = placeholder.getBoundingClientRect();const top = placeholder_rect.y - document.body.getBoundingClientRect().yif(SINGLE_PAGE)left.style.right = '27.5vw';elseleft.style.right = '50vw';right.style.left = '50vw';for(const page of [left, right]){page.style.position = 'absolute';page.style.top = top + 'px';page.style.height = '90vh';page.style.maxHeight = '90vh';page.style.width = placeholder_rect.width + 'px';page.style.maxWidth = '45vw';page.style.zIndex = '256';document.body.prepend(page);}function setPage(page){location.hash = `#page-${page}`let a = SINGLE_PAGE ? 1 : 2;// RIGHT_IS_NEXTleft.children[0]?.remove();left.append(page_element_list[page + (!SINGLE_PAGE) * (!RIGHT_IS_NEXT)] ?? '');if(!SINGLE_PAGE){right.children[0]?.remove();right.append(page_element_list[page + RIGHT_IS_NEXT] ?? '');}// console.log(page_element_list[page], page_element_list[page+1]);}let page = 0;function applyHash(){if(location.hash.startsWith('#page-')){page = +location.hash.slice('#page-'.length)setPage(page);}}applyHash();window.addEventListener("hashchange", applyHash);setPage(page);document.addEventListener('keydown', e => {let a = CONTROL_RIGHT_IS_NEXT ? 1 : -1if(!SINGLE_PAGE) a *= 2;if(e.key === 'ArrowRight') page += a;if(e.key === 'ArrowLeft') page -= a;page = Math.min(page, page_count-1);page = Math.max(page, 0);setPage(page);})}if(page_list.length > 4 && !paginated){const button = document.createElement('button')button.innerText = '페이지로 보기'button.addEventListener('click', () => {button.remove();pagenate();});write_div.prepend(button)}})();