Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name SadPandaScript
- // @namespace Rozenfag
- // @include https://exhentai.org/*
- // @match https://exhentai.org/*
- // @version 6
- // @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) Минимализм)) Только картинка и ты. Управление все через клавиши, т.к. как по мне это самое удобное. Кстати, очень круто в полноэкранном режиме браузера фапать))
- 6) Перевод на русский язык множества тегов, да еще и в виде крутой таблицы) Просто зайди на https://exhentai.org/ и нажми на "Показать список тегов" под поисковой формой. Очень удобно на лету выделить нужные фетиши, и сразу получить результат. А еще часть тегов автоматом переводится в галерее.
- [УПРАВЛЕНИЕ]
- ПРОБЕЛ или СТРЕЛОЧКА ВПРАВО: Следующая картинка.
- СТРЕРОЧКА ВЛЕВО: Предыдущая картинка.
- СТРЕЛОЧКА ВВЕРХ: Вернуться в галерею.
- СТРЕЛОЧКА ВНИЗ, F5: Обновить страницу, для получения настоящего URL, а не первого, т.н. "входного".
- TAB: Запуск и остановка слайдшоу.
- КЛИК ПО КАРТИНКЕ: Изменение режима масштабирования. Текущий можно посмотреть в значке вкладки.
- */
- var TIMEOUT_SEC_SLIDE_SHOW = 9; //По умолчанию картинка сменяется раз в 9 секунд.
- // 'tag_name' [[Категория - catTag], [Подкатегория - podCatTag], 'Перевод', 'Описание'],
- var tag = {
- 'uncensored': [2, [2], 'Без цензуры', 'Без цензурирования частей изображения.'],
- 'full_censorship': [2, [2], 'Зацензурено', 'Любая форма цензуры, которая охватывает почти все или все области половых органов.'],
- 'full_color': [2, [3], 'Раскрашено', 'Большинство или все изображения цветные.'],
- 'russian': [3, [1], 'Русский', 'Перевод на русский язык.'],
- 'english': [3, [1], 'Английский', 'Перевод на английский язык.'],
- 'translated': [3, [1], 'Перевод', 'Любой перевод с языка оригинала.'],
- 'age_progression': [10, [4,7], 'Увеличение возраста', 'Человек быстро становится старше.'],
- 'age_regression': [10, [4,7], 'Уменьшение возраста', 'Человек быстро становится моложе.'],
- 'dilf': [1, [5], 'Взрослый мужчина', 'Мужчина в возрасте 30-50 лет.'],
- 'infantilism': [10, [5], 'Инфантилизм', 'Сексуальные действия, связанные с взрослым партнером, как если бы они были младенцем. Например, смена подгузника или сюсюканье..'],
- 'lolicon': [0, [5], 'Лоликон', 'Несовершеннолетние девушки с неразвитым телом. Не следует путать с подростками или молодыми девушками.'],
- 'low_lolicon': [0, [5], 'Мягкий лоликон', 'Лоликон, не вписавшийся в правила ресурса.'],
- 'low_shotacon': [1, [5], 'Мягкий шотакон', 'Шотакон, не вписавшийся в правила ресурса.'],
- 'milf': [0, [5], 'Милфа', 'Женщина в возрасте 30-50 лет.'],
- 'old_lady': [0, [5], 'Старуха', 'Пожилая женщина за 50.'],
- 'old_man': [1, [5], 'Старик', 'Пожилой мужчина за 50.'],
- 'shotacon': [1, [5], 'Шотакон', 'Несовершеннолетние мальчики с неразвитым телом. Не следует путать с подростками или молодыми парнями.'],
- 'toddlercon': [10, [5], 'Дети', 'Сексуальные сцены с детьми.'],
- 'amputee': [10, [6], 'Ампутации', 'Когда отсутствует одна или несколько конечностей. Может присутствовать расчлененка.'],
- 'body_modification': [10, [6], 'Бодмод', 'Измененные части тела.'],
- 'conjoined': [0, [6], 'Сиамские близнецы', 'Две или более голов, из одного тела.'],
- 'doll_joints': [10, [6], 'Кукольные суставы', 'Шарнирные или похожие на них искуственные суставы.'],
- 'gijinka': [10, [6], 'Очеловечивание', 'Персонаж, не являющийся человеком, превращается или становится похож на него.'],
- 'inflation': [10, [6], 'Вспученность', 'Область живота неестественно выпуклая, словно надутый воздушный шарик. Часто, из-за заполнения газами/щупальцами/яйцами/жидкостями/существами и т.д.'],
- 'invisible': [10, [6], 'Невидимость', 'Совершение сексуальных действий, будучи невидимым.'],
- 'multiple_arms': [10, [6], 'Многорукость', 'Рук больше, чем две.'],
- 'multiple_breasts': [0, [6], 'Многогрудость', 'Грудей больше, чем две.'],
- 'multiple_nipples': [10, [6], 'Многососковость', 'Сосков больше чем обычно.'],
- 'multiple_penises': [10, [6], 'Мультипенисы', 'Обладание более чем одним пенисом.'],
- 'multiple_vaginas': [0, [6], 'Мультивагины', 'Обладание более чем одной вагиной.'],
- 'muscle': [10, [6], 'Мускулистость', 'Мускулистое телосложение.'],
- 'muscle_growth': [10, [6,7], 'Мышечный рост', 'Мышцы увеличиваются в размерах или появляются там, где их небыло.'],
- 'pregnant': [10, [6], 'Беременность', 'Сексуальные действия во время беременности.'],
- 'stretching': [10, [6], 'Растяжение', 'Растяжение частей тела за пределами человеческих возможностей.'],
- 'tailjob': [10, [6], 'Хвост', 'Использование хвоста для удовольствия, например, чтобы стимулировать половые органы.'],
- 'wings': [10, [6], 'Крылья', 'На теле присутствуют крылья.'],
- 'weight_gain': [10, [7], 'Увеличение веса', 'Значительное увеличение веса. Довольно часто, в результате, получается «толстяк» или «толстуха».'],
- 'growth': [10, [7], 'Увеличение роста', 'Значительное увеличение роста. Довольно часто, в результате, получается «великан» или «великанша».'],
- 'shrinking': [10, [7], 'Уменьшение роста', 'Значительное уменьшение роста. Довольно часто, в результате, получается «карлик» или «карлица».'],
- 'nipple_expansion': [0, [7], 'Увеличение сосков', 'Значительное увеличение размера сосков. После этого, у персонажа, весьма вероятны «большие соски».'],
- 'breast_reduction': [0, [7], 'Уменьшение груди', 'Значительное уменьшение размера груди. После этого, у персонажа, весьма вероятны «маленькие груди».'],
- 'ass_expansion': [0, [7], 'Увеличение попы', 'Ягодицы увеличиваются по какой-нибудь причине.'],
- 'balls_expansion': [10, [7], 'Увеличение яиц', 'Тестикулы увеличиваются по какой-нибудь причине.'],
- 'breast_expansion': [10, [7], 'Увеличение груди', 'Значительное увеличение размера груди. После этого, у персонажа, весьма вероятны «большие груди» или даже к «огромные груди».'],
- 'clit_growth': [10, [7], 'Увеличение клитора', 'Увеличение размера клитора. После этого, у персонажа, весьма вероятен «большой клитор».'],
- 'dick_growth': [10, [7], 'Увеличение члена', 'Значительное увеличение размера пениса. После этого, у персонажа, весьма вероятен «большой член».'],
- 'absorption': [10, [7], 'Поглощение', 'Поглощение кого-то или чего-то. Обычно бывает вследствие «проглатывания» или «обратных родов».'],
- 'body_swap': [10, [7], 'Обмен телами', 'Обмен телом с другим человеком.'],
- 'corruption': [10, [7], 'Перевоплощение', 'Изменение чьего-то ума (часто и тела) силой магии или других сверхъестественных сил, лишив его прежней чистоты/мотивов.'],
- 'feminization': [1, [7], 'Феминизация', 'Изменение образа жизни парня в сторону женского. Часто через через обучение или «контроль разума». Возможны элементы «кроссдресса». Но в любом случае, человек должен действовать или рассматриваться как более женственный.'],
- 'gender_bender': [10, [7], 'Смена пола', 'Персонажа меняет свой пол на противоположный. Довольно часто это показано в виде постепенной «трансформации».'],
- 'moral_degeneration': [10, [7], 'Моральное разложение', 'Изменение моральных устоев человека в отношении секса, фактически превращая его в безвольную и шлюховатую секс-машину. В некоторых случаях это результат «контроля разума».'],
- 'petrification': [10, [7], 'Окаменение', 'Превращение в статую или похожее камнеподобное образование.'],
- 'transformation': [10, [7], 'Трансформация', 'Последовательные физические или биологические изменения.'],
- 'alien': [1, [8], 'Инопланетянин', 'Любое существо мужского пола, которое, весьма вероятно родом из космоса.'],
- 'alien_girl': [0, [8], 'Инопланетянка', 'Любое существо женского пола, которое, весьма вероятно родом из космоса.'],
- 'angel': [10, [8], 'Ангел', 'Ангелободобное существо, с крыльями, нимбом и прочими атрибутами.'],
- 'bee_girl': [0, [8], 'Пчелодевочка', 'Любое существо женского пола, очень похожее или являющееся пчелой.'],
- 'bunny_boy': [1, [8], 'Зайкомальчик', 'Любое существо мужского пола, очень похожее или являющееся зайцем.'],
- 'bunny_girl': [0, [8], 'Зайкодевочка', 'Любое существо женского пола, очень похожее или являющееся зайцем.'],
- 'catboy': [1, [8], 'Кошкомальчик', 'Любое существо мужского пола, очень похожее или являющееся котом.'],
- 'catgirl': [0, [8], 'Кошкодевочка', 'Любое существо женского пола, очень похожее или являющееся кошкой.'],
- 'centaur': [10, [8], 'Кентавр', 'Любое существо, наполовину являющееся лошадью.'],
- 'cowgirl': [0, [8], 'Корова', 'Любое существо женского пола, очень похожее или являющееся коровой. Возможно в виде костюма.'],
- 'cowman': [1, [8], 'Бык', 'Любое существо мужского пола, очень похожее или являющееся быком. Возможно в виде костюма.']
- };
- // '00000': [10, [], '00000', '00000']
- //Категория тега (зависимости)
- var catTag = [
- ['female', 'женское:'], // 0
- ['male', 'мужское:'], // 1
- ['misc', 'разное:'], // 2
- ['language', 'язык:'] // 3
- ];
- //Подкатегория тега (для таблицы)
- var podCatTag = {
- 'p1':'[ Разное ]',
- c1: 'язык:', // 1
- c2: 'цензура:', // 2
- c3: 'исполнение:', // 3
- 'p2':'[ Возраст ]',
- c4: 'изменения:', // 4
- c5: 'вариации:', // 5
- 'p3':'[ Тело ]',
- c6: 'особенности:', // 6
- c7: 'изменения:', // 7
- c8: 'принадлежность:' // 8
- };
- window.addEventListener('load', function(){
- var regexpMain = /^https:\/\/exhentai\.org(?:\/tag)?\/?[^\.\/]*$/; //Главная
- var regexpGallery = /^https:\/\/exhentai\.org\/g\/\d+\/[\d\w]+\/.*$/; //Галерея
- var regexpImage = /^https:\/\/exhentai\.org\/s\/[\d\w]+\/[\d\-]+$/; //Изображение
- var genderColor = "url('data:image/gif;base64,R0lGODlhLAEUAKECAEZOjLNCj////////yH5BAEKAAIALAAAAAAsARQAAAKahI+py+0Po5xUhouz3rz7D4biSJZjhabqyraOCcfyTNefi+f6rtr+DwzKeMSicSdMKpfBo/MJhTCn1Goois1CrdxuVQsO67zkMlCMTqPM7DZMDY833PS6R47P2/f8vB/OF0j3RygmeGhWqJiF2Ni1CPnkOEkVaVlEmal0yTmm+fnTKdoCWlozippiuhqT6jrBGkvySvsgewtSAAA7')";
- //-----------------------------------------------------------------------------------------------------
- if(regexpMain.test(document.location.toString())){ // [Создание таблицы тегов на главной]
- //-----------------------------------------------------------------------------------------------------
- var show = false; var fetID=[];
- var space = document.createTextNode(' \u00A0\u00A0');
- var tagDivCont = document.createElement('div');
- var showHideTag = document.createElement('a');
- var advdiv=document.getElementById('advdiv');
- var inpSearch = document.getElementsByName('f_search')[0];
- function changeTagForm(tgn, del){
- if(del === true){
- var pos = inpSearch.value.indexOf(tgn);
- if(pos >= 0) inpSearch.value = inpSearch.value.replace((pos===0?'':' ') + tgn + (pos===0?(inpSearch.value.length==tgn.length?'':' '):''), '');
- }else{
- inpSearch.value += (inpSearch.value.length>0?' ':'') + tgn;
- }
- }
- function changeTag(tgn, modF){
- var ptag = tgn.split(':');
- if((ptag.length>0) && (typeof tag[ptag[1]] !== 'undefined')){
- var rTag = ptag[1];
- var pos = inpSearch.value.indexOf(tgn);
- var clr, currClr = document.getElementById(rTag+'-'+tag[rTag][1][0]).clr;
- if(modF === true){
- if(tag[rTag][0] == 10){
- clr = (currClr<0?0:(currClr<1?1:(currClr<2?10:-1)));
- }else{
- clr = (currClr<0?tag[rTag][0]:-1);
- }
- if((clr>=0)&&(inpSearch.value.length+rTag.length+9 > inpSearch.maxLength)){
- clr = -1;
- alert('Превышен лимит тегов!');
- }
- switch(clr){
- case -1:
- if(tag[rTag][0] == 10){
- changeTagForm('female:'+rTag,true);
- changeTagForm('male:'+rTag,true);
- }else{
- changeTagForm(tgn,true);
- }
- break;
- case 0:
- if(inpSearch.value.indexOf('female:'+rTag) < 0) changeTagForm('female:'+rTag,false);
- changeTagForm('male:'+rTag,true);
- break;
- case 1:
- changeTagForm('female:'+rTag,true);
- if(inpSearch.value.indexOf('male:'+rTag) < 0) changeTagForm('male:'+rTag,false);
- break;
- case 10:
- if(inpSearch.value.indexOf('female:'+rTag) < 0) changeTagForm('female:'+rTag,false);
- if(inpSearch.value.indexOf('male:'+rTag) < 0) changeTagForm('male:'+rTag,false);
- break;
- default:
- changeTagForm(tgn,false);
- break;
- }
- }else{
- if(tag[rTag][0] == 10){
- clr = (currClr<0?(ptag[0]=='male'?1:0):(currClr<1?(ptag[0]=='male'?10:0):(ptag[0]=='male'?1:10)));
- }else{
- clr = tag[rTag][0];
- }
- }
- for(var zz=0, tg; zz<tag[rTag][1].length; zz++){
- tg = document.getElementById(rTag+'-'+tag[rTag][1][zz]);
- switch(clr){
- case -1:
- tg.parentNode.style.backgroundColor = '';
- tg.parentNode.style.backgroundImage = '';
- break;
- case 0:
- tg.parentNode.style.backgroundImage = genderColor;
- tg.parentNode.style.backgroundPosition = 'right';
- break;
- case 1:
- tg.parentNode.style.backgroundImage = genderColor;
- tg.parentNode.style.backgroundPosition = 'left';
- break;
- case 10:
- tg.parentNode.style.backgroundImage = genderColor;
- tg.parentNode.style.backgroundPosition = 'center';
- break;
- default:
- tg.parentNode.style.backgroundColor = 'grey';
- break;
- }
- tg.clr = clr;
- }
- }
- }
- var tagDetect = document.location.toString().indexOf('/tag/');
- if(tagDetect>0){
- var corrTag, corrTagArr;
- corrTag = document.location.toString().substr(tagDetect+5);
- corrTag = corrTag.replace('%3A',':').replace('#','').replace('+','_');
- if(corrTag.length>0){
- if(corrTag.indexOf(':')<0) corrTag = 'misc:' + corrTag;
- corrTagArr = corrTag.split(':');
- if(typeof tag[corrTagArr[1]] !== 'undefined') inpSearch.value = corrTag;
- }
- }
- showHideTag.innerHTML = 'Показать список тегов';
- showHideTag.href = '#';
- advdiv.previousSibling.appendChild(space);
- advdiv.previousSibling.appendChild(showHideTag);
- showHideTag.addEventListener ('click', function(){
- if(show === true){
- showHideTag.innerHTML = 'Показать список тегов';
- tagDivCont.style.display='none';
- }else{
- showHideTag.innerHTML = 'Скрыть список тегов';
- tagDivCont.style.display="";
- }
- show = !show;
- }, false);
- var toppane=document.getElementById('toppane');
- tagDivCont.className = 'idi';
- tagDivCont.style.display='none';
- tagDivCont.style.width = '90%';
- toppane.appendChild(tagDivCont);
- var tagDiv = document.createElement('div');
- var tagTable = document.createElement('table');
- var tagTbody = document.createElement('tbody');
- tagDiv.id = 'taglist';
- tagDiv.style.height = 'auto';
- tagDivCont.appendChild(tagDiv);
- tagDiv.appendChild(tagTable);
- tagTable.appendChild(tagTbody);
- for (var keyP in podCatTag){
- var tr = document.createElement('tr');
- var td1= document.createElement('td');
- var td2 = document.createElement('td');
- if(keyP[0]=='p'){
- var hr = document.createElement('hr');
- td1.className = 'gdt1';
- td1.style.textAlign = 'right';
- td2.appendChild(hr);
- }else{
- td1.className = 'tc';
- td2.id = 'pod'+keyP;
- }
- td1.innerHTML = podCatTag[keyP];
- tr.appendChild(td1);
- tr.appendChild(td2);
- tagTbody.appendChild(tr);
- }
- for (var key in tag) {
- for(var t=0; t<tag[key][1].length; t++){
- var div = document.createElement('div');
- var a = document.createElement('a');
- div.className = 'gt';
- a.innerHTML = tag[key][2];
- a.href = '#';
- a.title = tag[key][3];
- a.clr = -1;
- a.id = key+'-'+tag[key][1][t].toString();
- div.appendChild(a);
- document.getElementById('podc'+tag[key][1][t].toString()).appendChild(div);
- }
- }
- if(inpSearch.value.length>0){
- var tags = inpSearch.value.split(' ');
- tags.forEach(function(item) {
- if(item.indexOf(':')>0) changeTag(item, false);
- });
- showHideTag.click();
- }
- tagTable.addEventListener ('click', function(e){
- if(e.target.tagName == 'A'){
- var zn=e.target.id.toString().substring(0,e.target.id.toString().indexOf('-'));
- zn = (tag[zn][0]!=10?catTag[tag[zn][0]][0]:'ma/fe') + ':' + zn;
- changeTag(zn, true);
- }
- }, false);
- //-----------------------------------------------------------------------------------------------------
- }else if(regexpGallery.test(document.location.toString())){ // [Перевод тегов в галерее]
- //-----------------------------------------------------------------------------------------------------
- //Ищем таблицу с тегами
- var taglist = document.getElementById('taglist').getElementsByTagName('tr');
- if(taglist.length>0){
- for(var i=0; i<taglist.length; i++){
- //Обрезаем двоеточие(да-да, знаю, можно было регулряркой удалить, но я аутист)
- var trTag = taglist[i].firstChild.innerHTML.substring(0,taglist[i].firstChild.innerHTML.length-1);
- //Перебираем в поисках известных категорий
- for(var j=0; j<catTag.length; j++) {
- if(catTag[j][0] == trTag){
- var aList = taglist[i].lastChild.getElementsByTagName('a');
- for(var k=0; k<aList.length; k++){
- var atag = aList[k].id.toString().substr(3+(j==2?0:trTag.length+1));
- if(typeof tag[atag] !== 'undefined'){
- aList[k].innerHTML = tag[atag][2];
- aList[k].title = tag[atag][3];
- }
- }
- taglist[i].firstChild.innerHTML = catTag[j][1];
- break;
- }
- }
- }
- }
- //--------------------------------------------------------------------------------------------------------
- }else if(regexpImage.test(document.location.toString())){ // [Прокачка режима просмотра изображений]
- //--------------------------------------------------------------------------------------------------------
- //Всякие переменные и картинки в base64 формате.
- var gallURL = document.getElementById('i5').getElementsByTagName('a')[0].href;
- var currURL, nextURL, prevURL;
- var block = false, blockIMG = false;
- var timer;
- var timeoutURL, timeoutIMG;
- var ScaleMode = 1;
- var slideShow = false;
- var loadIMG, showIMG;
- 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';
- //Создаем два пустых изображения. Первое сделаем скрытым от глаз, и будем в него грузить нужную картинку, а после загрузки, без всяких морганий,перекинем во второе, которое видимо. Кароче, в одном все грузится, во втором показывается.
- loadIMG = document.createElement("img");
- 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;
- window.scrollTo(0,0);
- }, 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));
- }
- }
- }
- //Обрабатываем нажатие клавиш.
- 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);
Add Comment
Please, Sign In to add comment