您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Предзагрузка, удобная навигация и прочие улучшения для сайта acomics.ru
当前为
// ==UserScript== // @name Улучшеный просмотрщик для acomics.ru / Enhanced viewer for acomics.ru // @description Предзагрузка, удобная навигация и прочие улучшения для сайта acomics.ru // @author Sanya_Zol (Alexander Zolotarev) // @license Public domain // @icon https://acomics.ru/favicon.ico // @homepageURL https://gf.qytechs.cn/ru/scripts/10521 // @supportURL https://gf.qytechs.cn/ru/scripts/10521 // @namespace Sanya_Zol // @version 0.2.4 // @include http://acomics.ru/* // @include https://acomics.ru/* // @run-at document-end // @grant none // ==/UserScript== /* ################################################################################ ######################### вместо README.md ######################### ################################################################################ **[Тема на форуме acomics.ru](http://acomics.ru/forum/index.php?showtopic=2785)** Описание ==================== Улучшеный просмотрщик комиксов для сайта [acomics.ru](http://acomics.ru/) * **Быстрый переход** между страницами нажатием стрелок [˂], [˃] * **Скриптовая прокрутка** стрелками [˄], [˅] *(Мне вот очень удобно читать комикс и комментарии одной рукой)* * Автоматическое **сохранение номера страницы** для каждого комикса (в localStorage). * **Предзагрузка** страниц - моментальный переход между страницами! * **Отключение уменьшения изображения** Некоторые комиксы, например [этот](http://acomics.ru/~unsounded/1), автоматически уменьшаются, что не есть хорошо. В частности, [тема поднималась в этом обсуждении](http://acomics.ru/forum/index.php?showtopic=2441&st=345&p=242192#entry242192): *> Можно увеличить max-width под комикс? Unsounded со своими 1024 все еще масштабируется в минус.* * **Удаление белого фона** Заметно например в [этом](http://acomics.ru/~DROW/1) комиксе Как пользоваться ==================== Если вы этого ещё не сделали, [устанавливаем расширение Greasemonkey (или его аналог) для своего браузера](https://gf.qytechs.cn/ru/help/installing-user-scripts) Заходим на страницу скрипта и жмем "Установить этот скрипт". Должно вылезти предложение установить скрипт - если его не будет, значит вы неправильно установили Greasemonkey (или его аналог). После установки скрипта заходим на страницу комикса (например, [http://acomics.ru/~unsounded/1](http://acomics.ru/~unsounded/1) ) и жмем появившуюся кнопку в правом верхнем углу. В случае, если вы в прошлый закончили чтение на другой странице комикса - произойдет переход на неё и надо будет ещё раз нажать кнопку. Очень рекомендую -------------------- 1. **Увеличить масштаб** при чтении комикса ( через меню, либо крутите колесо мыши вверх, зажав клавишу Ctrl ) 2. Читать в **полноэкранном режиме** ( активируется кнопкой **F11** ) Управление -------------------- [˂], [˃] {cтрелки влево и вправо} - переход по страницам [˄], [˅] {cтрелки вверх и вниз} - прокрутка вверх-вниз Shift+[˄] или Shift+[˅] - переключение режима прокрутки вверх-вниз (браузер / скрипт, по умолчанию "скрипт") Ctrl+[˄] или Ctrl+[˅] - плавная прокрутка (при режиме прокрутки "скрипт") Номер страницы автоматически сохраняется. Прочее ==================== Есть ещё некоторые недокументированные функции и настройки, но мне лень их документировать. Если интересно, смотрите код. Authors -------------------- * Sanya_Zol (Alexander Zolotarev) Contributing -------------------- Contributions must be under the same licence. mailto: sanya.zol%gmail License -------------------- *Public domain* I, the copyright holder of this work, release this work into the public domain. This applies worldwide. In some countries this may not be legally possible; if so: I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. ################################################################################ ######################### конец README.md ######################### ################################################################################ */ (function(){ // http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript var hereDoc=function(f){return f.toString().replace(/^[^\/]+\/\*!?/,'').replace(/\*\/[^\/]+$/,'');}; var a = hereDoc(function() {/*! // чтобы поменять номер страницы, открой консоль (Ctrl+Shift+I, вкладка "Console") и введи там // z_SetPage() var PAGE = {}; // не трогать. так надо. PAGE.blockUnload = false; // Блокировать случайное закрытие страницы PAGE.AjaxRequestTimeoutMs=10000; // таймаут запроса в милисекундах (секундах*1000) // чтобы деактивировать или снова активировать быстрый скролл, нажми Shift+[˄] или Shift+[˅] PAGE.scrollFasterDefault = true; // по умолчанию он включен, чтобы отключить поменяй на false PAGE.scrollFasterPx = 300; PAGE.scrollFasterCtrlPx = 100; // сейчас при скролле страницы стрелками по вертикали [˄] и [˅] будет быстрый скролл на 300 пикселей // а при зажатом Ctrl - на 100 // поменяй на нужное количество пикселей PAGE.scrollFasterSpeed = 75; // время в милисекундах, за которое скроллить при использовании быстрого скролла PAGE.scrollSpeed = 75; // время в милисекундах, за которое скроллить наверх при смене страниц PAGE.contentMarginMover = false; // поставь true чтобы выпилить комментарии - они будут вылазить при нажатии [˄]+[˃] // (стрелки вправо при зажатой стрелке вверх) и выезжать при нажатии [˂]+[˃] // мне это показалось не очень удобным и я вернул как было PAGE.visualLog = false; // поставь true чтобы выводить отладочную информацию в левом верхнем углу страницы // отладочная страница в консоли (Ctrl+Shift+I, вкладка "Console") PAGE.localStorageKeyPrefix = '**zol**page**'; // префикс хранилища html5 (которое localStorage и sessionStorage) PAGE.log = function(s){ console.log('[PAGE] '+s); }; PAGE.makeUrlReference = function(id,comicsName){ return '/~'+comicsName+'/'+id; }; PAGE.preInit = function(){ if( PAGE.preInitFailed ){return;} PAGE.preInitFailed = true; // var m = /^\/~([^/]+)\/(.*)$/.exec( location.pathname.toString() ); var m = /^\/~([^\/]+)\/(\d*)(?:\D|$)/.exec( location.pathname.toString() ); if(!m){return;} if(!window.$){ PAGE.log('preInit failed: where is my $, billy ??'); return; } // parse page info PAGE.comicsName = m[1]; var comicsPage = parseInt(m[2],10); if( m[2]=='' || isNaN(comicsPage) || comicsPage<1 ) { return; } PAGE.comicsPage = comicsPage; delete m; delete comicsPage; // if( PAGE.contentMarginMover ){ PAGE.$contentMargin } PAGE.makeUrl = function(id){ return '/~'+PAGE.comicsName+'/'+id; }; // stored shit PAGE.localStorageKey = PAGE.localStorageKeyPrefix + PAGE.comicsName; PAGE.localStorageKeyPage = PAGE.localStorageKey + '*'; PAGE.store = function(){ window.localStorage.setItem( PAGE.localStorageKey, PAGE.comicsPage ); }; var stored = window.localStorage.getItem( PAGE.localStorageKey ); if(stored){ stored = parseInt(stored,10)||false; } else {stored=false;} if( stored && (stored != PAGE.comicsPage) ){ // location.href = PAGE.makeUrl(stored);return; PAGE.wantPage = stored; } else { PAGE.wantPage = PAGE.comicsPage; } PAGE.stored = stored; delete stored; var curr = PAGE.parsePageString( $('html')[0].outerHTML ); if( !curr ){ return; } PAGE.comicsLastPage = curr.LastPage; PAGE.comicsPageTitle = curr.Title; PAGE.init_comicsPage = PAGE.comicsPage; PAGE.init_wantPage = PAGE.wantPage; if(PAGE.comicsPage != curr.Page){ if( confirm( 'Что-то пошло не так.' +'\n' +'\n[1] Сохраненная страница:\t'+PAGE.comicsPage +'\n[2] Страница комикса (html):\t'+curr.Page +'\n[3] Максимальная страница (html):\t'+PAGE.comicsLastPage +'\n' +'\nЗаменить сохраненную страницу '+PAGE.comicsPage+' на '+curr.Page+'?' ) ){ PAGE.wantPage = PAGE.comicsPage = curr.Page; PAGE.store(); location.href = PAGE.makeUrl(PAGE.comicsPage); } return; } PAGE.tmp_curr = curr; // PAGE.putCached( PAGE.comicsPage, curr ); // PAGE.putCached( PAGE.tmp_curr.Page, PAGE.tmp_curr ); delete PAGE.tmp_curr; delete curr; PAGE.preInit = function(){return true;}; return true; }; PAGE.preInitFailed = false; PAGE.init = function(){ if( !PAGE.preInit() ){return;} PAGE.init = function(){}; if( PAGE.visualLog ){ (function(){ var d = $('<div/>'); d.css({ position:'fixed', // absolute zIndex:1e6, left:'1px', top:'1px', padding:'1px', fontFamily:'Verdana', fontSize:'7px', color:'#fff', textShadow:'#000 0px 0px 1px',//, #000 2px 2px 2px background:'rgba(255,255,255,0.3)', borderRadius:'2px', border:'1px rgba(255,255,255,0.5) solid', overflowY:'hidden', maxHeight:'60px' }).appendTo('body'); PAGE.log = function(s){ $('<div/>').text(s).hide().prependTo(d).slideDown(200).delay(5000).slideUp(200,function(){ $(this).remove(); }); d.fadeIn().finish().delay(5000).slideUp(200); console.log('[PAGE] '+s); }; })(); } PAGE.noPushState = false; PAGE.firstPushState = true; PAGE.changeHandlers = function(){ PAGE.store(); PAGE.ShouldIDoSomething(); // history.pushState({}, , location.href); if( PAGE.noPushState ){ PAGE.noPushState = false; } else { // if( PAGE.firstPushState ){ // PAGE.firstPushState = false; // history.replaceState( // {page:PAGE.comicsPage}, // '#'+PAGE.comicsPage+' | '+PAGE.comicsPageTitle, // PAGE.makeUrl(PAGE.comicsPage) // ); // } else { history.pushState( {page:PAGE.comicsPage}, '#'+PAGE.comicsPage+' | '+PAGE.comicsPageTitle, PAGE.makeUrl(PAGE.comicsPage) ); // } } }; $(window).on('popstate', function(e){ var d = e.originalEvent.state || false; if(d && d.page){ PAGE.wantPage = d.page; PAGE.noPushState = true; PAGE.ShouldIDoSomething(); } }); // disable built-in navigation with left/right arrow keys. // search page source for "$(document).keydown(" for more info $(document).off('keydown'); // @FIX var $htmlbody = $('html,body'); PAGE.scroll = function( relative, scrollAmount ){ if(relative){ $htmlbody.finish().animate({ scrollTop: Math.max( 0, $(window).scrollTop() + scrollAmount ) }, PAGE.scrollFasterSpeed); } else { $htmlbody.finish().animate({ scrollTop: scrollAmount }, PAGE.scrollSpeed); } }; PAGE.SessCacheQuery = function(page){ var r = window.sessionStorage.getItem( PAGE.localStorageKeyPage + page ); if(!r)return false; try{ r = JSON.parse( r ); } catch(e){ return false; } return r; }; PAGE.SessCachePut = function(page,data){ var d = JSON.stringify( data ); window.sessionStorage.setItem( PAGE.localStorageKeyPage + page , d ); }; window.eval('window.z_SetPage=function(){ $(window).trigger(\''+ PAGE.localStorageKeyPrefix+':setpage' +'\') };') PAGE.storePage = function(){ // z_SetPage var p = parseInt( prompt('Set page to:', PAGE.comicsPage), 10 ) if( isNaN(p) || p<1 || p>PAGE.comicsLastPage ){ alert('Wrong page!\nMust be: 1 < page < '+PAGE.comicsLastPage); return; } if(!confirm('Warning! Really update page from '+PAGE.comicsPage+' to '+p+' ?')){ return; } PAGE.wantPage = p; PAGE.ShouldIDoSomething(); }; $(window).on(PAGE.localStorageKeyPrefix+':setpage',PAGE.storePage); // PAGE.wantPage = PAGE.comicsPage; setTimeout(function(){ if( PAGE.wantPage == PAGE.comicsPage ){ PAGE.swapPage(); } else { PAGE.ShouldIDoSomething(); } },1); // { // "Page" : 1, // "LastPage" : 741, // "Image" : "/upload/!c/!import/unsounded/000001-go44gzvmk6.jpg", // "ContentSerialNomargin" : "\t", // "ContentMargin" : "\t" // } PAGE.handleSwap = function(page, o){ PAGE.log('page.swap: swapping page to #'+page+( o.Preloaded?'':' which doesn\'t have preloaded image' )); PAGE.$contentMargin.html( o.ContentMargin ); PAGE.$contentSer.html( o.ContentSerialNomargin ); // title PAGE.comicsPageTitle = o.Title; PAGE.comicsPage = page; document.title = '#'+PAGE.comicsPage+' | '+PAGE.comicsPageTitle; // $(window).scrollTop(0); PAGE.scroll(false, 0); PAGE.changeHandlers(); } PAGE.plData = Object.create(null); // PAGE.wantPage = PAGE.comicsPage; PAGE.putCached = function(page,data){ PAGE.plData[ page ] = data; PAGE.SessCachePut( page, data ); PAGE.putCachedPreloadImage( page ); }; PAGE.putCachedPreloadImage = function(page){ PAGE.plData[ page ].Preloaded = false; PAGE.plData[ page ].DomImage = new Image(); PAGE.plData[ page ].DomImage.onerror = function(){ console.error('Cannot load image #'+page+' (window._err_img): '+PAGE.plData[ page ].Image); window._err_img = PAGE.plData[ page ].Image; if( typeof( PAGE.plData[ page ] )!='undefined' ){ delete PAGE.plData[ page ]; } }; var log = false; PAGE.plData[ page ].DomImage.onload = function(){ delete PAGE.plData[ page ].DomImage.onload; if( typeof( PAGE.plData[ page ] )=='object' ){ if(log){ PAGE.log('page.cache: IMG preloaded #'+page); } PAGE.plData[ page ].Preloaded = true; } else { PAGE.log('page.cache: IMG preloaded #'+page+' but OBJ DOES NOT EXISTS!!'); } }; PAGE.plData[ page ].DomImage.src = PAGE.plData[ page ].Image; setTimeout(function(){ log=true; },30); }; PAGE.$contentMargin = $('.contentSerialMargin'); PAGE.$content = $('#content'); PAGE.$contentSer = $('#content > div.serial-nomargin'); $('.common').remove(); $('#background > div').not('#container').remove(); $('#container > header.serial').remove(); $('#container > nav.serial').remove(); $('#contentSide').remove(); // custom stylesheets $('<style/>').attr('type','text/css').html('' +' #content.notitle h3.serial {display:none;}' +' section.issue img {max-width: none;}' +' div#container { width: auto; display:inline-block; min-width:'+$('div#container').css('width')+';' +' background-color: transparent; } ' +' .contentSerialMargin {background:#fff; min-height: 0px !important; padding:20px; margin:0px auto; border-radius:4px;} ' // outline:20px #fff solid; +' nav.issue > table { width:auto; margin-right:auto; margin-left:auto; } ' +' nav.issue>table>tbody>tr>td:nth-child(odd) { display:none; } ' +' nav.issue>table>tbody>tr>td:nth-child(2)>.button { display:none; } ' +' nav.issue>table>tbody>tr>td:nth-child(2)>.button.large, nav.issue>table>tbody>tr>td:nth-child(2)>.button.center { display:inline-block; } ' +' footer.common {background:#fff;} ' +' #background{text-align:center;}' +' #container{text-align:left;}' +' #content > div.serial-nomargin > section.issue { width: auto !important; display:inline-block !important; } ' +' #content > div.serial-nomargin { text-align: center; } #content > div.serial-nomargin>* { text-align: left; } ' +' footer.common, footer.common>div.inner {border-radius:4px} ' +' div#background {margin-top:0px;padding-top:0px;} ' ).appendTo('body'); // $('#content > div.serial-nomargin > h3.serial').remove(); PAGE.$content.addClass('notitle'); if( PAGE.contentMarginMover ){ PAGE.$contentMargin .detach() .css({ position:'absolute', left:'5px', top:'64px', border:'1px #000 solid', background:'#fff' }) .appendTo('body') .hide(); } PAGE.gcAllowedSet = function(){ PAGE.gcAllowed = true; }; PAGE.gcAllowedSet(); PAGE.gc = function(){ if( !PAGE.gcAllowed ){ return; } var r = PAGE.populateList(5); r.push( PAGE.wantPage ); for( var page in PAGE.plData ){ page = parseInt(page,10); if( $.inArray( page, r ) == -1 ){ PAGE.log('page.gc: removing old page #'+page); delete PAGE.plData[ page ]; window.sessionStorage.removeItem(PAGE.localStorageKeyPage + page); } } var prefixl = PAGE.localStorageKeyPage.length; for( var i = window.sessionStorage.length; i-->0; ){ var k = window.sessionStorage.key(i); if( typeof(k)=='string' && k.indexOf(PAGE.localStorageKeyPage)==0 ){ var page = parseInt(k.substr(prefixl),10); if( $.inArray( page, r ) == -1 ){ PAGE.log('page.gc: removing sessionStorage page #'+page); window.sessionStorage.removeItem(PAGE.localStorageKeyPage + page); } } } // key() PAGE.gcAllowed = false; setTimeout( PAGE.gcAllowedSet, 10000 ); }; PAGE.swapPage = function(){ var page = PAGE.wantPage; if( typeof( PAGE.plData[ page ] )=='undefined' ){ PAGE.log('page.swap: NO CACHE FOR #'+page); return false; } if( typeof( PAGE.plData[ page ] )=='boolean' ){ PAGE.log('page.swap: CACHE STILL WAITING #'+page); return true; } if( typeof( PAGE.plData[ page ] )=='object' ){ var o = PAGE.plData[ page ]; PAGE.handleSwap(page, o); } return true; } PAGE.ShouldIDoSomething = function(){ if( PAGE.wantPage < 1 ){ PAGE.log('page.swap: wrong wantPage = '+PAGE.wantPage); PAGE.wantPage = 1; } else if( PAGE.wantPage > PAGE.comicsLastPage ){ PAGE.log('page.swap: wrong wantPage = '+PAGE.wantPage); PAGE.wantPage = PAGE.comicsLastPage; } if( PAGE.wantPage != PAGE.comicsPage ){ if(!PAGE.swapPage()){ PAGE.log('page.cache: requesting non-preloaded page #'+PAGE.wantPage); PAGE.ajaxPreload( PAGE.wantPage ); return true; } } var r = PAGE.populateList(0); var rl = r.length; for( var i=0; i<rl; i++ ){ var page = r[i]; if( typeof( PAGE.plData[ page ] )=='undefined' ){ var cached = PAGE.ajaxPreload( page ); if(!cached){ PAGE.log('page.cache: preloading page #'+page); return true; } } } PAGE.gc(); return false; }; PAGE.ticker = function(){ var to = PAGE.ShouldIDoSomething()?300:1000; PAGE.tickerTO = setTimeout(PAGE.ticker, to); }; PAGE.tickerTO = setTimeout(PAGE.ticker,10); PAGE.populateList = function(Add){ var a = []; for( var i=1; i<=(4+Add); i++ ){ var np = PAGE.wantPage+i; if( np <= PAGE.comicsLastPage ){ a.push(np); } } for( var i=1; i<=(2+Add); i++ ){ var np = PAGE.wantPage-i; if( np >= 1 ){ a.push(np); } } return a; }; PAGE.ajaxPreload = function(page){ // return cached var sc = PAGE.SessCacheQuery(page); if(sc){ PAGE.plData[ page ] = sc; // PAGE.SessCachePut( page, data ); PAGE.putCachedPreloadImage( page ); return true; } PAGE.plData[ page ] = true; $.ajax({ type:'GET', dataType:'text', cache:true, url:PAGE.makeUrl( page ), timeout:PAGE.AjaxRequestTimeoutMs, error:function(){ if( typeof( PAGE.plData[ page ] )!='undefined' ){ delete PAGE.plData[ page ]; } }, success:function(d){ var parsed = PAGE.parsePageString( d ); if(!parsed){ console.error('Cannot parse data (see window._err_data)'); window._err_data = d; if( typeof( PAGE.plData[ page ] )!='undefined' ){ delete PAGE.plData[ page ]; } } else { PAGE.log('page.ajax: preloaded #'+page); PAGE.putCached(page,parsed); PAGE.ShouldIDoSomething(); } } }); return false; }; PAGE.handlePrev = function(){ // PAGE.wantPage = PAGE.comicsPage; PAGE.wantPage--; PAGE.ShouldIDoSomething(); }; PAGE.handleNext = function(){ PAGE.wantPage++; PAGE.ShouldIDoSomething(); }; var uparrow_pressed = false; var last_scroll = 0; var scroll_faster = PAGE.scrollFasterDefault; $(document).keydown(function(e){ var prevent = true; // if( e.which==13 && e.shiftKey ) { // Shift+Enter // } else if( (e.which==38 || e.which==40) && e.shiftKey ) { // ^/v scroll_faster = !scroll_faster; } if( e.which==37 ){ // < if( PAGE.contentMarginMover ){PAGE.$contentMargin.hide();} PAGE.$content.addClass('notitle'); if( uparrow_pressed ){ if( PAGE.contentMarginMover ){ $(window).scrollTop( last_scroll ); } } else { PAGE.handlePrev(); } } else if ( e.which==39 ){ // > if( uparrow_pressed ){ if( PAGE.contentMarginMover ){PAGE.$contentMargin.show();} PAGE.$content.removeClass('notitle'); // $(window).scrollTop(0); PAGE.scroll(false, 0); } else { if( PAGE.contentMarginMover ){PAGE.$contentMargin.hide();} PAGE.$content.addClass('notitle'); PAGE.handleNext(); } } else if ( e.which==38 ){ // ^ uparrow_pressed = true; last_scroll = $(window).scrollTop(); if( PAGE.scrollFasterPx && scroll_faster ){ // $(window).scrollTop( Math.max( 0, $(window).scrollTop()-PAGE.scrollFasterPx ) ); PAGE.scroll( true, -(e.ctrlKey?PAGE.scrollFasterCtrlPx:PAGE.scrollFasterPx) ); } else { prevent = false; } } else if ( e.which==40 ){ // v if( PAGE.scrollFasterPx && scroll_faster ){ // $(window).scrollTop( $(window).scrollTop()+PAGE.scrollFasterPx ); PAGE.scroll( true, (e.ctrlKey?PAGE.scrollFasterCtrlPx:PAGE.scrollFasterPx) ); } else { prevent = false; } } else { prevent = false; } if(prevent){e.preventDefault();return false;} }).keyup(function(e){ if ( e.which==38 ){ // ^ uparrow_pressed = false; } }); PAGE.$contentSer.on('click','a',function(){ var pn = this.pathname; if( pn == PAGE.makeUrl( PAGE.comicsPage+1 ) ){ PAGE.handleNext(); return false; } else if ( PAGE.makeUrl( PAGE.comicsPage-1 ) ) { PAGE.handlePrev(); return false; } }); if( PAGE.blockUnload ){ $(window).on('beforeunload', function(){ return 'You shall not pass.'; }); } // last PAGE.putCached( PAGE.tmp_curr.Page, PAGE.tmp_curr ); delete PAGE.tmp_curr; PAGE.log('init'); }; PAGE.removeScripts = (function(){ var dangerous_tags = (['script', 'style', 'link', 'embed', 'object'].join(', ')); var removeInlineHandlers = function(element){ // http://stackoverflow.com/a/3593250 http://stackoverflow.com/q/3593242 http://stackoverflow.com/questions/3593242/how-to-remove-all-attributes-from-body-with-js-or-jquery for( var i = element.attributes.length; i-->0; ){ var attr = element.attributes[i]; if( attr.nodeName.toLowerCase().indexOf('on')==0 ){ element.removeAttributeNode(attr); } } }; var removeScripts = function(el){ var f; while( f = el.querySelector(dangerous_tags) ){ // we querying selector every time because tags can contain each other f.parentNode.removeChild(f); } var f = el.querySelectorAll('*'); for(var i=f.length; i-->0; ){ removeInlineHandlers( f[i] ); } }; return removeScripts; })(); // Да простят меня авторы. Серьёзно, это уже порядком поднадоело. var rx1 = /(?:(?:Мой )?(?:патреон|яндекс|yandex|paypal|wm(?:z|r|e|u)|кошелек|счет)[\s.-]*(?:кошелек|money|деньги)?:?|(?:https?:\/\/)?(?:www\.)?patreon.com\/[^\s]*|41\d{13}\b|(?:wm)?(?:z|r|e|u)\d{12}\b)/gi; var rx2 = /(?:(?:\s*(?:<p>\s*<\/p>|<br ?\/? ?>)\s*)+|^(?:\s*<br ?\/? ?>)+|(?:<br ?\/? ?>\s*)+$)/gi; PAGE.parsePageString = function(s){ var o={}; var parser = new DOMParser(); var d = parser.parseFromString(s, "text/html"); var x = d.querySelector('#content span.button.center a[onclick^="jumpTo"]'); if(!x){return false;} x=$.trim(x.innerHTML).match(/^(\d+)\/(\d+)$/); if(!x){return false;} o.Page = parseInt(x[1]); o.LastPage = parseInt(x[2]); delete x; var x = d.querySelector('.contentSerialMargin > div.forum'); if(x){ x.parentNode.removeChild(x) }; delete x; var x = d.querySelector('.contentSerialMargin > form'); if(x){ x.parentNode.removeChild(x) }; delete x; var x = d.querySelector('.contentSerialMargin > article.authors > .social'); if(x){ x.parentNode.removeChild(x) }; delete x; // var x = d.querySelectorAll('.contentSerialMargin > article.authors > div.description > p'); // for(var i=x.length;i-->0;){ // var T = $.trim(x[i].innerText); // var t = $.trim(T.replace(rx,'')); // if( t == T ){continue;} // if( h == '' ){ x[i].parentNode.removeChild(x[i]);continue; } // var h = x[i].innerHTML.replace(rx,''); // x[i].innerHTML = h; // } var x = d.querySelector('.contentSerialMargin > article.authors > div.description'); if(x){ x.innerHTML = x.innerHTML.replace(rx1,'').replace(rx2,''); } delete x; var x = d.querySelector('#content > div.serial-nomargin #mainImage').getAttribute('src'); o.Image = x; delete x; var x = d.querySelector('#content > div.serial-nomargin'); PAGE.removeScripts(x); o.ContentSerialNomargin = x.innerHTML; delete x; var x = d.querySelector('.contentSerialMargin'); PAGE.removeScripts(x); o.ContentMargin = x.innerHTML; delete x; var x = d.querySelector('title'); o.Title = x?( $.trim( x.innerText ) ):'?'; delete x; return o; }; PAGE.list2 = {}; PAGE.list2.init = function(){ PAGE.list2.init = function(){}; if( !/\/-[A-Za-z0-9_-]+\/list2/.test(location.pathname) ){return;} // $('div.contentSerialMargin > div.agrHolder >table.agr >tbody>tr:first-child>td.agrBody>div.numbers') var div = $('div.agrHolder'); if(!div.length){return;} div.find('>table.agr').css({marginBottom:'4px'}).each(function(){ // var a = $(this).find('>tbody>tr:first-child>td.agrBody>h3>a'); // if(!a.length){return;} // a = a[0].pathname; // if( a.substr(0,2)!='/~' ){return;} // a=a.substr(2); var b = $(this).find('>tbody>tr:first-child>td.agrBody>div.numbers a').eq(0); if(!b.length){return;} b=b[0].pathname; var m = /^\/~([^\/]+)\/(\d*)(?:\D|$)/.exec(b); if(!m){return;} // parse page info var comicsName = m[1]; var comicsPage = parseInt(m[2],10); if( m[2]=='' || isNaN(comicsPage) || comicsPage<1 ) {return;} var k = PAGE.localStorageKeyPrefix + comicsName; // stored shit var stored = window.localStorage.getItem( k ); if(stored){ stored = parseInt(stored,10)||false; } else {stored=false;} if(!stored){return;} if( stored == comicsPage ){ $(this).css({backgroundColor:'#ccc',outline:'1px #999 solid'}); } else if( stored < comicsPage ){ $(this).css({backgroundColor:'#cff',outline:'1px #9ff solid'}); var link = $('<a/>').addClass('agr-today').attr( 'href', PAGE.makeUrlReference(stored,comicsName) ).text( 'Продолжить чтение со страницы '+stored+' (из '+comicsPage+')' ).css({ fontSize:'18px' }); $(this).find('>tbody>tr:first-child>td.agrBody>div.numbers').prepend('<hr/>').prepend(link); } // PAGE.comicsName = m[1]; // var comicsPage = parseInt(m[2],10); }) }; $(function(){ (function(){ // $('.common .inner td.nainmenu > nav > a[href$="/list2"]').css({backgroundColor:'#f00'}); var a = $('.common .inner td.logo > a'); var img = a.find('> img'); if(!img.length){return;} var div = $('<div style="display:inline-block;overflow:hidden;width:55px;height:54px;height:100%;vertical-align:middle;padding-top:7px;" />'); img.detach(); div.append(img).appendTo(a); $('.common .inner td.logo').css('width','auto'); var x = $('.common .inner td.nainmenu > nav > a[href$="/list2"]'); x.css({fontWeight:'bold'}); var y = $('<div/>').html('обновления').css({display:'inline-block',background:'#99f',borderRadius:'4px',border:'1px #66f solid', position:'absolute',marginTop:'-12px',marginLeft:'-48px', width:'64px',height:'14px', fontSize:'10px',fontFamily:'sans-serif',textTransform:'none',textAlign:'center',fontWeight:'normal' }); y.insertBefore(x.find('>span')); var live = $('.common .inner td.nainmenu > nav > a[href$="/live"]').contents().filter(function(){return this.nodeType === 3;}).eq(0); if(live.length){ live[0].textContent='Live'; } var Top = $('.common .inner td.nainmenu > nav > a[href$="//top.a-comics.ru/"]').contents().filter(function(){return this.nodeType === 3;}).eq(0); if(Top.length){ Top[0].textContent='ТОП'; } // window.lol_y = y; // window.lol_x = x; })(); if( !PAGE.preInit() ){ PAGE.list2.init(); return; } var current = (PAGE.init_comicsPage == PAGE.init_wantPage); var label = 'Запуск читалки'; if( !current ){ label = 'Продолжить чтение (стр. '+PAGE.init_wantPage+')'; } var d = $('<div/>'); $('<button/>').html('×').css({ color:'#F00',fontWeight:'bold',fontSize:'16px', position:'absolute',left:'-10px',top:'-10px',width:'20px',height:'20px',padding:'1px' }).click(function(){ d.remove(); }).appendTo(d); $('<button/>').html(label).css({ fontSize:'14px' }).click(function(){ d.remove(); PAGE.init(); // w.history.pushState({a:location.href}, "* Супер-читалка", location.href); }).appendTo(d); if( !current ){ d.append('<div>Произойдет переход на стр. '+PAGE.init_wantPage+'</div>'); $('<button/>').html( 'Читать со страницы '+PAGE.init_comicsPage+'' ).css({ fontSize:'12px' }).click(function(){ if(confirm('' +'Вы собираетесь удалить закладку со страницы '+PAGE.init_wantPage +'\nи продолжить чтение со страницы '+PAGE.init_comicsPage +'\n\nВсё верно?' )){ PAGE.wantPage = PAGE.comicsPage = PAGE.init_comicsPage; // PAGE.store(); // location.href = PAGE.makeUrl(PAGE.comicsPage); d.remove(); PAGE.init(); } }).appendTo(d); d.append('<div style="font-size:10px;">Закладка со стр. '+PAGE.init_wantPage+' будет удалена.</div>'); } d.css({ borderRadius:'4px', position:'fixed', // absolute zIndex:1e6, right:'3px', top:'3px', padding:'4px', background:'rgba(0,0,0,0.6)', color:'#fff', border:'2px rgba(0,0,0,0.9) solid' }).appendTo('body'); setTimeout(function(){ var inner = $('header.common > div.inner'); if(!inner.length)return; if( d.offset().left < ( inner.offset().left + inner.width() + 55 ) ){ d.css({ top: Math.round( inner.height() + 3 )+'px' }) } },1); }); */}); var s=document.createElement('script');s.type='text/javascript';s.innerHTML=a;document.body.appendChild(s); // textContent instead of innerHTML? })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址