您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AutoPagerizeをサポートするボタン
当前为
// ==UserScript== // @name AutoPagerize_Console // @namespace phodra // @description AutoPagerizeをサポートするボタン // @include http://* // @include https://* // @version 3.0 // @grant GM_getResourceText // @grant GM_getResourceURL // @grant GM_addStyle // @resource res_style https://www.dropbox.com/pri/get/greasemonkey/AutoPagerize_Console/AutoPagerize_Console30.css?_subject_uid=458281274&w=AABDSxYNzTf64mrwmUgqrmzCfiwtDNiY5nOsV_KlvSMZWw // @resource res_scrAll https://www.dropbox.com/pri/get/greasemonkey/AutoPagerize_Console/res_scrAll.png?_subject_uid=458281274&w=AAC1nNQHg54HAcIT9r_wtLfYfooghM9Zz_XSqJlzXoNVWg // @resource res_scrPage https://www.dropbox.com/pri/get/greasemonkey/AutoPagerize_Console/res_scrPage.png?_subject_uid=458281274&w=AABzAy7HXbTJz6TqislRIdgYome4Hvwe2ew06l1S7yIXAw // @resource res_tglEnabled https://www.dropbox.com/pri/get/greasemonkey/AutoPagerize_Console/res_tglEnabled.png?_subject_uid=458281274&w=AADgyiqSzgcFlHMk-Vg4OLLxO_rbPEiOwpDx-ZKXWHJ-ng // @resource res_tglDisabled https://www.dropbox.com/pri/get/greasemonkey/AutoPagerize_Console/res_tglDisabled.png?_subject_uid=458281274&w=AACcYk_tx6l7Li-_pmC9-QogcdK3vcubUeGWgAPkLtumfg // ==/UserScript== (function (){ // リソースの定数化 const RES = { 'style': GM_getResourceText("res_style"), 'scrAll': GM_getResourceURL("res_scrAll"), 'scrPage': GM_getResourceURL("res_scrPage"), 'tglEnabled': GM_getResourceURL("res_tglEnabled"), 'tglDisabled': GM_getResourceURL("res_tglDisabled"), }; // スタイル追加 var apcStyle = GM_addStyle(RES.style); // スクロール関数(jquery:animate:swingと違いキビキビした感じ) var PageScroll = function(target, bearing) { clearTimeout(timer); if( target==scTop ) return; if( bearing==null ) bearing = target-scTop; var y = (target-scTop)/5; window.scrollBy( 0, bearing>0? Math.ceil(y): bearing<0? Math.floor(y): 0 ); timer = setTimeout( function() { PageScroll( target, bearing); }, 10 ); if( (bearing<0 && (target>=scTop && target<document.body.clientHeight)) || (bearing>0 && target<=scTop) ) { window.scrollTo( 0, target); clearTimeout(timer); } }; // // 初期化 // var ap; // var timer, scTop; // var $pageInfo_dispNow, $pageInfo_dispMax; // var $pagelist, $pageitem; // // var AP_Init = function() // { // 初期化 var ap = { 'page': 0, 'seam': [0] }; var scTop = document.documentElement.scrollTop; var timer; // コントロール配置 // パネル(最親) var $panel = document.createElement("div"); $panel.id = "apc_panel"; $panel.style.display = 'none'; document.body.appendChild($panel); const APC_BTN = "apc_button"; // コントローラー var $controller = document.createElement("div"); $controller.id = "apc_controller"; $panel.appendChild($controller); // enable/disable 切り替え機能 var disp_E = "E", disp_D = "D"; var $ctrToggle = document.createElement("img"); $ctrToggle.id = "apc_ctrToggle"; $ctrToggle.className = APC_BTN; $ctrToggle.innerText = disp_E; $ctrToggle.textContent = disp_E; $ctrToggle.setAttribute('src', RES.tglEnabled); $controller.appendChild($ctrToggle); /// トグルイベント var ap_enable = true; $ctrToggle.addEventListener( 'click' , function() { var e = document.createEvent('Event'); e.initEvent('AutoPagerizeToggleRequest', true, true); return document.dispatchEvent(e); } ); var ApToggle = function(enbl) { ap_enable = enbl==null? !ap_enable: enbl; if( ap_enable ) { $ctrToggle.textContent = $ctrToggle.innerText = disp_E; $ctrToggle.setAttribute('src', RES.tglEnabled); } else { $ctrToggle.textContent = $ctrToggle.innerText = disp_D; $ctrToggle.setAttribute('src', RES.tglDisabled); } console.log(ap_enable); } document.addEventListener( 'AutoPagerizeToggleRequest', function(){ ApToggle(); } ); document.addEventListener( 'AutoPagerizeDisableRequest', function(){ ApToggle(false);} ); document.addEventListener( 'AutoPagerizeEnableRequest', function(){ ApToggle(true);} ); // スクローラー var $scroller = document.createElement("div"); $scroller.id = "apc_scroller"; $panel.appendChild($scroller); const APC_SCRBTN = APC_BTN + " apc_scrbtn"; // 最上部へ移動 var $scrTop = document.createElement("img"); $scrTop.className = APC_SCRBTN; $scrTop.id = "apc_scrTop"; $scrTop.setAttribute('src', RES.scrAll); $scrTop.setAttribute('alt', "↑"); $scrTop.setAttribute('title', "Move to Top"); $scrTop.addEventListener( 'click', function() { PageScroll(0); } ); $scroller.appendChild($scrTop); // 最下部へ移動 var $scrBtm = document.createElement("img"); $scrBtm.className = APC_SCRBTN; $scrBtm.id = "apc_scrBtm"; $scrBtm.setAttribute('src', RES.scrAll); $scrBtm.setAttribute('alt', "↓"); $scrBtm.setAttribute('title', "Move to Bottom"); $scrBtm.addEventListener( 'click', function() { PageScroll( document.body.clientHeight-window.innerHeight ); } ); $scroller.appendChild($scrBtm); // 前のページ var $scrPrv = document.createElement("img"); $scrPrv.className = APC_SCRBTN; $scrPrv.id = "apc_scrPrv"; $scrPrv.setAttribute('src', RES.scrPage); $scrPrv.setAttribute('alt', "△"); $scrPrv.setAttribute('title', "Move to Previous"); $scrPrv.addEventListener( 'click', function() { PageScroll( scTop==ap.seam[ap.page]? ap.seam[ap.page-1]: ap.seam[ap.page] ); } ); $scroller.appendChild($scrPrv); // 次のページ var $scrNxt = document.createElement("img"); $scrNxt.className = APC_SCRBTN; $scrNxt.id = "apc_scrNxt"; $scrNxt.setAttribute('src', RES.scrPage); $scrNxt.setAttribute('alt', "▽"); $scrNxt.setAttribute('title', "Move to Next"); $scrNxt.addEventListener( 'click', function() { PageScroll( ap.page+1<ap.seam.length? ap.seam[ap.page+1]: document.body.clientHeight-window.innerHeight ); } ); $scroller.appendChild($scrNxt); // ページ表示 var $pageInfo = document.createElement("div"); $pageInfo.id = "apc_pageInfo"; var $pageInfo_disp = document.createElement("div"); $pageInfo_disp.id = "apc_pageInfo_disp"; var $pageInfo_dispNow = document.createElement("span"); var $pageInfo_dispMax = document.createElement("span"); $pageInfo_dispNow.innerHTML = $pageInfo_dispMax.innerHTML = "1"; $pageInfo_disp.appendChild($pageInfo_dispNow); $pageInfo_disp.appendChild( document.createTextNode(" / ")); $pageInfo_disp.appendChild($pageInfo_dispMax); $pageInfo.appendChild($pageInfo_disp); $pageInfo.addEventListener( 'mouseover' , function() { $pageList.style.display = 'flex'; } ); $pageInfo.addEventListener( 'mouseout' , function() { $pageList.style.display = 'none'; } ); $panel.appendChild($pageInfo); // ページリスト var $pageList = document.createElement("ol"); $pageList.id = "apc_pageList"; $pageList.style.display = 'none'; $pageInfo.appendChild($pageList); // ページリストアイテム var $pageList_item = document.createElement("li"); $pageList_item.className = "apc_pageList_item"; $pageList_item.innerHTML = "1"; $pageList.appendChild($pageList_item); var PageItem_AddEvent = function($elm) { $elm.addEventListener( 'click', function() { var num = this.innerHTML-1; PageScroll( num>=0 && num<ap.seam.length? ap.seam[num]: 0 ); } ); $elm.addEventListener( 'dblclick', function() { var num = this.innerHTML-2; window.location = num>=0? document.getElementsByClassName("autopagerize_link")[num].href: window.location; } ); }; PageItem_AddEvent($pageList_item); // for( var i = 0; i<5; i++ ) // { // var $new_pageitem = $pageList_item.cloneNode(true); // $new_pageitem.innerHTML = i + "t"; // PageItem_AddEvent($new_pageitem); // $pageList.appendChild($new_pageitem); // } // ウィンドウのスクロールが発生した時 window.addEventListener( 'scroll', function() { scTop = document.documentElement.scrollTop; for( var i=ap.seam.length-1; i>=0; i-- ) { if( scTop >= ap.seam[i]-1 ) { if( ap.page != i ) { ap.page = i; $pageInfo_dispNow.innerHTML = i+1; } break; } } } ); // }; // ページを継ぎ足した時、継ぎ目の位置を記録する var AP_SeamLine = function() { var $ap_sep = document.getElementsByClassName("autopagerize_page_separator"); var len = $ap_sep.length; var offsety = 0, elm = $ap_sep[len-1]; do { offsety += elm.offsetTop || 0; elm = elm.offsetParent; }while(elm); ap.seam[len] = offsety; $pageInfo_dispMax.innerHTML = len+1; var $new_pageitem = $pageList_item.cloneNode(true); $new_pageitem.innerHTML = len+1; PageItem_AddEvent($new_pageitem); $pageList.appendChild($new_pageitem); }; if( window.AutoPagerize ) { console.log( 'window.AutoPagerize' ); // 初期化 // AP_Init(); $panel.style.display = 'flex'; // 継ぎ足した時 AutoPagerize.addFilter(AP_SeamLine); }else { // document.addEventListener( // 'GM_AutoPagerizeLoaded', // function() // { // AP_Init(); // } // ); document.addEventListener( 'GM_AutoPagerizeNextPageLoaded', function() { // 初期設定(GM_AutoPagerizeLoadedでできればいいんだけど……) // if( ap==null ) AP_Init(); $panel.style.display = 'flex'; AP_SeamLine(); } ); } })();