Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name ExH
- // @namespace Rozenfag
- // @include https://exhentai.org/s/*/*
- // @match https://exhentai.org/s/*/*
- // @version 5
- // @author Aleksandr Petrov
- // @run-at document-end
- // @grant none
- // ==/UserScript==
- /*
- Здравствуй мой дорогой любитель фапа =3
- Для тебя (ну и конечно же для себя любимого), я накатал небольшой скрипт расширяющий функционал любимой
- грустнопанды. Для его запуска тебе понадобится современный браузер и расширение для выполнения UserScript-ов.
- Для Firefox это будет "Greasemonkey", для Opera нужно "Tampermonkey" или "Violent monkey", а для Chrome
- ищи "Trampermonkey".
- После установки нужного расширения, добавь в него этот скрипт и ты получишь следующие вкусности:
- 1) Возможность листать по пробелу. Очень удобно, особенно когда руки заняты, просто жмакнуть по большой конпке,
- а не целиться)))
- 2) Предзагрузка изображений, что позволяет избежать "морганий" при перелистывании контента. Незаменимая вещь на
- игровом арте, где зачастую фон не меняется, а меняются "эмоции" и появляются детали, вроде брызг спермы.
- 3) Слайдшоу режим, для полноценного освобождения рук)))))))))))))) Таймаут в секундах можете установить свой в
- переменной TIMEOUT_SEC_SLIDE_SHOW чуть ниже.
- 4) Автоматическое масштабирование изображения с помощью трех режимов: уменьшение до пределов окна, уменьшение
- или увеличение до пределов окна, и исходный размер.
- 5) Минимализм)) Только картинка и ты. Управление все через клавиши, т.к. как по мне это самое удобное. Кстати,
- очень круто в полноэкранном режиме браузера фапать))
- [УПРАВЛЕНИЕ]
- ПРОБЕЛ или СТРЕЛОЧКА ВПРАВО: Следующая картинка.
- СТРЕРОЧКА ВЛЕВО: Предыдущая картинка.
- СТРЕЛОЧКА ВВЕРХ: Вернуться в галерею.
- СТРЕЛОЧКА ВНИЗ, F5: Обновить страницу, для получения настоящего URL, а не первого, т.н. "входного".
- TAB: Запуск и остановка слайдшоу.
- КЛИК ПО КАРТИНКЕ: Изменение режима масштабирования. Текущий можно посмотреть в значке вкладки.
- */
- var TIMEOUT_SEC_SLIDE_SHOW = 6; //По умолчанию картинка сменяется раз в 6 секунд.
- window.addEventListener('load', function(){
- //Всякие переменные и картинки в base64 формате.
- var gallURL = document.getElementById("i5").getElementsByTagName("a")[0].href;
- var currURL, nextURL, prevURL;
- var block = false, blockIMG = false;
- var timeoutURL, timeoutIMG;
- var ScaleMode = 1;
- var slideShow = false;
- var loadImgW, loadImgH, showImgW, showImgH;
- var timeout_LoadIMG = 14000; //Таймаут в мс, на загрузку изображения.
- var favicons = [
- 'data:image/gif;base64,R0lGODlhEAAQAMIGAGYGEYCAgJmZmbOzs8zMzOXl5f///////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAHACwAAAAAEAAQAAADNAi63HowSvmmhfXOrCPvx9eJGnk9jhMCYVEQxDAIQhCwqAvLtI3jutisdlutUgsjyINEJgAAIfkEBQoABwAsAwAKAAoAAwAAAw1IVKUzQijmoFyNvJgAACH5BAUKAAcALAMACgAKAAMAAAMLOENUxUoxB+N8RCUAIfkEBQoABwAsAwAKAAoAAwAAAw0oMkNUxSnmoFztRZIAACH5BAUKAAcALAMACgAKAAMAAAMNGCEyQ6QUxRyUtL1YEgAh+QQFCgAHACwDAAoACgADAAADDSgSoTOEKOagXE28mAAAIfkEBQoABwAsAwAKAAoAAwAAAws4IxLBSjEH43xCJQAh+QQBCgAHACwDAAoACgADAAADDUg0IxLBKeagXO1FkQAAOw==',
- 'data:image/gif;base64,R0lGODlhEAAQAIABAGYGEf///yH5BAEKAAEALAAAAAAQABAAAAIohI9pwe2+nmRxvmobzmFnb4FThFCHCQGoplKd23bt7L6yHd4cq/RGAQA7',
- 'data:image/gif;base64,R0lGODlhEAAQAIABAGYGEf///yH5BAEKAAEALAAAAAAQABAAAAIthI9pwe2+EDwhgtds3e96z1xZWIkjl5lYp65pR06cKn5be5f6qkmp5mIphoYCADs=',
- 'data:image/gif;base64,R0lGODlhEAAQAIABAGYGEf///yH5BAEKAAEALAAAAAAQABAAAAIghI9pwe2+nmRxvmobzmFnb4GTKJEXwEFoSq2sqSqyUQAAOw=='
- ];
- //Удаляем все ненужное со страницы
- window.onpopstate = null;
- window.onresize = null;
- window.onload = null;
- document.onkeydown = null;
- document.body.innerHTML = "";
- document.body.style.textAlign = 'center';
- document.body.style.padding = '0px';
- //Создаем два пустых изображения. Первое сделаем скрытым от глаз, и будем в него грузить нужную картинку, а после загрузки, без всяких морганий,
- //перекинем во второе, которое видимо. Кароче, в одном все грузится, во втором показывается.
- var loadIMG = document.createElement("img");
- var showIMG = document.createElement("img");
- document.body.appendChild(loadIMG);
- document.body.appendChild(showIMG);
- loadIMG.style.width = '0px';
- loadIMG.style.height = '0px';
- showIMG.style.cursor = 'pointer';
- //Функция для показа анимации загрузки вместо стандартного значка грустнопанды во вкладке, чтоб было видно, что чет грузится.
- function changeFavicon(mode){
- var head = document.head || document.getElementsByTagName('head')[0];
- var link = document.createElement('link');
- link.id = 'dynamic-favicon';
- link.rel = 'shortcut icon';
- link.href = favicons[(mode<0?ScaleMode:mode)];
- var oldLink = document.getElementById('dynamic-favicon');
- if(oldLink) head.removeChild(oldLink);
- head.appendChild(link);
- }
- //Обрабатываем событие окончания загрузки нашей картинки в скрытом от глаз изображении.
- loadIMG.addEventListener ('load', function(){
- blockIMG = true;
- clearTimeout(timeoutIMG); //Удаляем таймаут на загрузку пикчи, а то вылезет попап, что мы якобы еще её грузим.
- showImgW = loadImgW;
- showImgH = loadImgH;
- ScaleImage();
- showIMG.src = loadIMG.src;
- changeFavicon(-1);
- block = false;
- blockIMG = false;
- }, false);
- //Функция для изменения размеров картинки в зависимости от режима маштабирования.
- function ScaleImage(){
- var ratio = Math.min((window.innerWidth-2) / showImgW, (window.innerHeight-2) / showImgH);
- if( ((ScaleMode == 1) && (ratio >= 1)) || (ScaleMode == 3) ) ratio = 1;
- showIMG.style.width = parseInt(showImgW*ratio)+'px';
- showIMG.style.height = parseInt(showImgH*ratio)+'px';
- }
- //Обрабатываем клик по изображению. Это меняет режим масштабирования.
- showIMG.addEventListener ('click', function(){
- ScaleMode = (ScaleMode==3?1:ScaleMode+1);
- if(blockIMG === false) ScaleImage();
- if(block === false) changeFavicon(ScaleMode);
- }, false);
- //Эта функция грузит нужную страницу в галерее и получает все данные о изображении на ней.
- function getImage(url){
- if(block === false){ //Если заблочено, значит что-то грузится и делать ничо не будем)
- if(url === currURL){ //На случай окончания картинок в галерее. Просто выходим в ее корень, с превьюхами.
- slideShow=false;
- document.location = gallURL;
- }else{ //Все ОК можно грузить страницу.
- block = true; //Блочим функцию на период ее асинхронного выполнения.
- changeFavicon(0); //Анимируем значок во вкладке.
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.open('GET', url, true); //Формируем запрос на грустнопанду.
- //Обрабатываем событие прихода ответа.
- xmlhttp.onreadystatechange=function(){
- if(xmlhttp.readyState != 4) return;
- clearTimeout(timeoutURL); //Ответ пришел, можно удалять таймаут на него.
- if(xmlhttp.status == 200){ //Ответ пришел какой мы и ждали)
- //Тут мы долго и скучно вытаскиваем из пришедшего html кода адреса для навигации, размер картинки и т.д.
- var tempDOM = new DOMParser().parseFromString(xmlhttp.responseText, "text/xml");
- nextURL=tempDOM.getElementById("next").href;
- prevURL=tempDOM.getElementById("prev").href;
- currURL=url;
- var imageSize = tempDOM.getElementById("i2").childNodes[1].innerHTML.split(' :: ')[1].split(' x ');
- loadImgW = imageSize[0];
- loadImgH = imageSize[1];
- //Начинаем грузить картинку в скрытое изображение по полученному адресу из ответа.
- loadIMG.src = tempDOM.getElementById("img").src;
- //Таймаут на загрузку картинки, т.к. грустнопанда не отличается идеальной стабильностью.
- timeoutIMG = setTimeout( function(){
- alert('ОШИБКА: Загрузка изображения длилась более '+parseInt(timeout_LoadIMG/2000)+' сек. и была прервана.');
- changeFavicon(-1);
- block = false;
- }, 100+parseInt(timeout_LoadIMG/2));
- } else {//Все ужасно(((
- alert('ОШИБКА: При загрузке exhentai.org возникли неполадки. Подробнее: ' + xmlhttp.statusText);
- }
- };
- xmlhttp.send(null); //Отправляем запрос на грутснопанду.
- //Таймаут запроса, на случай подвисшего инета, глюков на грустнопанде и прочих сетевых неврозах.
- timeoutURL = setTimeout( function(){
- xmlhttp.abort();
- alert('ОШИБКА: Загрузка exhentai.org длилась более '+parseInt(timeout_LoadIMG/2000)+' сек. и была прервана.');
- changeFavicon(-1);
- block = false;
- }, 100+parseInt(timeout_LoadIMG/2));
- }
- }
- }
- var timer;
- //Обрабатываем нажатие клавиш.
- document.body.addEventListener ('keydown', function(event){
- switch(event.keyCode){
- case 9://TAB
- slideShow = (slideShow===false?true:false);
- if(slideShow===true){
- alert('СЛАЙДШОУ: Запущена смена изображений раз в '+TIMEOUT_SEC_SLIDE_SHOW+' сек.');
- timer = setInterval(function(){
- if(slideShow===false){
- clearInterval(timer);
- }else{
- getImage(nextURL);
- }
- }, TIMEOUT_SEC_SLIDE_SHOW*1000);
- }else{
- alert('СЛАЙДШОУ: Остановлено.');
- }
- break;
- case 32://ПРОБЕЛ
- case 39://СТРЕЛОЧКА ВПРАВО
- getImage(nextURL); //Следущее изображение.
- break;
- case 37://СТРЕЛОЧКА ВЛЕВО
- getImage(prevURL); //Предыдущее изображение.
- break;
- case 38://СТРЕЛОЧКА ВВЕРХ
- document.location = gallURL; //Возвращение в галерею с превьюшками.
- break;
- case 40://СТРЕЛОЧКА ВНИЗ
- case 116://F5
- event.preventDefault();
- document.location = currURL; //Рефрешнуть страницу. Полезно для получения правильной ссылки на страницу в адресной строке.
- break;
- }
- }, false);
- getImage(document.URL); //Загружаем картинку начальной страницы, ведь мы удалили все в теге <body> очистив от всего лишнего.
- }, false);
Advertisement
Add Comment
Please, Sign In to add comment