Last active
November 10, 2019 05:26
-
-
Save BubuInc/7413bcdf94a71cb3fe1b to your computer and use it in GitHub Desktop.
Groted Photo Viewer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name Groted Visor de fotos | |
| // @namespace MangaReader | |
| // @description Ve las fotos de los posts como en el escritorio | |
| // @author http://www.groted.com/perfil/Putencio | |
| // @include http://www.groted.com/posts/* | |
| // @include http://www.groted.com/post/* | |
| // @exclude http://www.groted.com/agregar/ | |
| // @icon http://i.imgur.com/LqccTgB.png | |
| // @version 4.0 | |
| // @grant none | |
| // ==/UserScript== | |
| // Insertar estilo | |
| var styleText = 'body.noScroll{padding-top:0px;min-height:100vh;min-width:0px}.post-content img[onclick]{cursor:pointer}#phOverlay{position:fixed;top:0px;left:0px;bottom:0px;right:0px;background-color:#222;z-index:100001;cursor:pointer;background-image:url("http://i.imgur.com/RzAYhrB.png")}#phImg{position:absolute;z-index:100002;top:0;left:0;right:0;margin:auto;cursor:pointer}#phImg.phH{max-height:100vh}#phImg.phW{max-width:100%}#phTextoWr{z-index:100003;position:fixed;left:0px;right:0px;margin:auto;max-width:64%;bottom:16px;text-align:center}#phTexto{color:#FFF;margin:0 auto;bottom:16px;border-radius:10px;padding:8px;text-shadow:0px 0px 4px #000;background-color:rgba(0,0,0,0.27);font-size:1.2rem;display:inline-block;max-height:90vh;overflow-y:auto}#phBtns{position:fixed;opacity:1;transition:opacity .7s;z-index:100004}.phBtn{position:fixed;bottom:7px;right:7px;width:35px;height:35px;padding:10px;background-color:#000;cursor:pointer;border-radius:4px;opacity:0.4;transition:opacity .3s}.phBtn > div{height:100%;background-image:url("http://i.imgur.com/a8fyLKQ.png");background-size:70px}.phBtn:hover{opacity:0.7}.phBtn:active{opacity:1}#Wbtn{right:66px}#Wbtn > div{background-position:0px 70px}#Hbtn > div{background-position:35px 70px}#Xbtn{top:8px;right:8px}#Xbtn > div{background-position:0px 35px}#Tbtn{left:5px;bottom:66px}#Tbtn > div{background-position:-35px -70px}#Pbtn{left:7px}#Pbtn.phPause > div{background-position:35px 0px}#phSpeed{display:none;position:fixed;bottom:12px;left:70px;width:120px}#PbtnWr.showSpeed #phSpeed{display:block}.pressed{opacity:0.7;background-color:#555}#txtSpeed{display:none;position:absolute;left:70px;color:#FFF;font-size:1.2rem;position:fixed;bottom:39px}#PbtnWr.showSpeed #phSpeed:hover~#txtSpeed{display:block}'; | |
| var style = document.createElement('style'); | |
| style.textContent = styleText; | |
| document.head.appendChild(style); | |
| // Estructura | |
| var div = document.createElement('div'); | |
| div.id = 'phWrapper'; | |
| div.style.display = 'none'; | |
| div.innerHTML = '<div id="phOverlay" onclick="phNext()"></div>'+ | |
| '<img id="phImg" class="phH" onclick="phNext()">'+ | |
| '<div id="phTextoWr">'+ | |
| '<div id="phTexto" style="display:none"></div>'+ | |
| '</div>'+ | |
| '<div id="phBtns">'+ | |
| '<div id="Wbtn" class="phBtn" onclick="setW()"><div></div></div>'+ | |
| '<div id="Hbtn" class="phBtn pressed" onclick="setH()"><div></div></div>'+ | |
| '<div id="Xbtn" class="phBtn" onclick="closeVisor()"><div></div></div>'+ | |
| '<div id="Tbtn" class="phBtn pressed" onclick="showText()"><div></div></div>'+ | |
| '<div id="PbtnWr">'+ | |
| '<div id="Pbtn" class="phBtn" onclick="phPlay()"><div></div></div>'+ | |
| '<input type="range" id="phSpeed" value="5" min="1" max="15" step="1">'+ | |
| '<div id="txtSpeed">5 segundos</div>'+ | |
| '</div>'+ | |
| '</div>'; | |
| document.body.appendChild(div); | |
| // Buscar imagenes y textos | |
| var nodes = document.querySelectorAll('.relato-p img'); | |
| var content2 = document.querySelector('.relato-p').cloneNode(true); | |
| var nodes2 = content2.getElementsByTagName('img'); | |
| window.imgs = []; | |
| //Encontrar barra separadora si hay, y quitarla | |
| var i, counts = {}, node; | |
| for (i = 0; i < nodes.length; i++) { //Contar cuanto se repiten las fotos | |
| node = nodes[i]; | |
| if (counts[node.src] !== undefined) {counts[node.src]++;} | |
| else {counts[node.src] = 1;} | |
| } | |
| for (i = 0; i < nodes.length; i++) { //Agregar las que se repiten maximo 2 veces | |
| if (counts[nodes[i].src]<3) { | |
| imgs.push(nodes[i]); | |
| var textSep = document.createTextNode('@img@'); | |
| nodes2[i].parentNode.insertBefore(textSep, nodes2[i]); | |
| } | |
| } | |
| var textos = content2.textContent; | |
| textos = textos.split('@img@'); | |
| // Variables y elementos | |
| window.nPh = 0; | |
| window.phSpeed = 5; | |
| window.modoFit = 2; //0: ninguno | 1: width | 2: height | |
| window.textoMostrado = 1; | |
| window.intervalPlay = null; | |
| window.tmoutHideMouse = null; | |
| window.tmout2 = null; | |
| window.closeFromPrevNext = 0; | |
| window.isPlaying = 0; | |
| window.phOverlay = document.getElementById('phOverlay'); | |
| window.phImg = document.getElementById('phImg'); | |
| window.phTexto = document.getElementById('phTexto'); | |
| window.phBtnsEl = document.getElementById("phBtns"); | |
| window.TbtnEl = document.getElementById("Tbtn"); | |
| window.WbtnEl = document.getElementById("Wbtn"); | |
| window.HbtnEl = document.getElementById("Hbtn"); | |
| window.XbtnEl = document.getElementById("Xbtn"); | |
| window.PbtnWrEl = document.getElementById("PbtnWr"); | |
| window.PbtnEl = document.getElementById("Pbtn"); | |
| window.speedEl = document.getElementById('phSpeed'); | |
| window.openVisor = function (n) { | |
| if (imgs[n].naturalHeight > 30) { | |
| window.nPh = n; | |
| document.getElementById('phWrapper').style.display = ''; | |
| if(document.getElementById('page')){document.getElementById('page').style.display = 'none';} | |
| else{ | |
| document.getElementById('header').style.display = 'none'; | |
| document.getElementById('nav').style.display = 'none'; | |
| document.getElementById('main').style.display = 'none'; | |
| document.getElementById('footer').style.display = 'none'; | |
| document.getElementById('footer-links').style.display = 'none'; | |
| } | |
| document.body.classList.add('noScroll'); | |
| window.scrollTo(0, 0); | |
| fixH(); | |
| window.phImg.src = imgs[window.nPh].src; | |
| if(textoMostrado){phTexto.textContent = setText();} | |
| window.document.body.onkeydown = function (event){ phKeyListener(event);}; | |
| } | |
| }; | |
| window.phKeyListener = function (event) { | |
| var k = event.keyCode; | |
| if (k==37||k==39||k==33||k==34||k==27||k==32||k==87||k==72||k==80||k==84||k==13||k==36||k==35||k==8) { | |
| event.preventDefault(); | |
| switch(k){ | |
| case 37: phPrev(); break; // right arrow | |
| case 39: phNext(); break; // left arrow | |
| case 33: phPrev(); break; // Page Up | |
| case 34: phSpace(); break; // Page Down | |
| case 27: closeVisor(); break; // Esc | |
| case 32: phSpace(); break;// SpaceBar | |
| case 87: setW(); break; // W | |
| case 72: setH(); break; // H | |
| case 80: phPlay(); break; // P | |
| case 84: showText(); break; // T | |
| case 13: closeVisor(); break; // Enter | |
| case 36: goFirst(); break; // Home | |
| case 35: goLast(); break; // End | |
| case 8: phPrev(); break; // Backspace | |
| } | |
| } | |
| }; | |
| window.phMouseMoveListener = function () { | |
| clearTimeout(tmoutHideMouse); | |
| phShowMouse(); | |
| tmoutHideMouse = setTimeout(phHideMouse,3000); | |
| }; | |
| window.closeVisor = function () { | |
| stopPlaying(); | |
| clearTimeout(tmout2); | |
| window.document.body.onkeydown = null; | |
| document.body.onmousemove = null; | |
| if(document.getElementById('page')){document.getElementById('page').style.display = '';} | |
| else{ | |
| document.getElementById('header').style.display = ''; | |
| document.getElementById('nav').style.display = ''; | |
| document.getElementById('main').style.display = ''; | |
| document.getElementById('footer').style.display = ''; | |
| document.getElementById('footer-links').style.display = ''; | |
| } | |
| document.getElementById('phWrapper').style.display = 'none'; | |
| document.body.classList.remove('noScroll'); | |
| var dif = Math.floor((window.innerHeight - imgs[nPh].offsetHeight)/2); | |
| var newPosY = imgs[nPh].offsetTop - (dif<0?0:dif); | |
| if(closeFromPrevNext){ | |
| closeFromPrevNext = 0; | |
| if (nPh===0) {newPosY -= window.innerHeight*0.8;} | |
| if (nPh==imgs.length-1) {newPosY += imgs[nPh].offsetHeight - 150;} | |
| } | |
| window.scrollTo(window.pageXOffset, newPosY); | |
| }; | |
| window.showText = function () { | |
| if (textoMostrado == 1) { //apagar | |
| phTexto.style.display = 'none'; | |
| TbtnEl.classList.remove('pressed'); | |
| textoMostrado = 0; | |
| }else{ //encender | |
| TbtnEl.classList.add('pressed'); | |
| phTexto.textContent = setText(); | |
| textoMostrado = 1; | |
| } | |
| }; | |
| window.setText = function () { | |
| var txt = textos[nPh].trim(); | |
| if (txt==='') {phTexto.style.display = 'none';} | |
| else{phTexto.style.display = '';} | |
| return txt; | |
| }; | |
| window.phSpace = function () { | |
| var T = window.document.documentElement.scrollHeight, //document height | |
| pos = window.pageYOffset, //scrollY | |
| h = window.innerHeight, //viewport height | |
| a = h-40; //avance | |
| if (T>h+pos+2) { | |
| if (pos+a+200>T) {a+=200;} | |
| if (isPlaying && modoFit!=2) {unsetMouseMoveListener();} | |
| window.scrollBy(0, a); | |
| if (isPlaying && modoFit!=2) {tmout2 = setTimeout(setMouseMoveListener,1000);} | |
| }else{ | |
| if (isPlaying && modoFit!=2) {unsetMouseMoveListener();} | |
| phNext(); | |
| if (isPlaying && modoFit!=2) {tmout2 = setTimeout(setMouseMoveListener,1000);} | |
| } | |
| }; | |
| window.phNext = function () { | |
| window.scrollTo(window.pageXOffset, 0); | |
| if (findNextImg()) { | |
| fixH(); | |
| phImg.src = imgs[nPh].src; | |
| if(textoMostrado){phTexto.textContent = setText();} | |
| }else{ | |
| closeFromPrevNext = 1; | |
| closeVisor(); | |
| } | |
| }; | |
| window.findNextImg = function () { | |
| for (var i = nPh+1; i < imgs.length; i++) { | |
| if (imgs[i].naturalHeight > 30) {nPh = i; return true;} | |
| } | |
| if (i == imgs.length) {return false;} //No hay mas imagenes adelante | |
| }; | |
| window.findPrevImg = function () { | |
| for (var i = nPh-1; i >= 0; i--) { | |
| if (imgs[i].naturalHeight > 30) {nPh = i; return true;} | |
| } | |
| if (i == -1) {return false;} //No hay mas imagenes atras | |
| }; | |
| window.phPrev = function () { | |
| window.scrollTo(window.pageXOffset, 0); | |
| if (findPrevImg()) { | |
| fixH(); | |
| phImg.src = imgs[nPh].src; | |
| if(textoMostrado){phTexto.textContent = setText();} | |
| }else{ | |
| closeFromPrevNext = 1; | |
| closeVisor(); | |
| } | |
| }; | |
| window.phPlay = function () { | |
| if (isPlaying) {stopPlaying();} | |
| else {startPlaying();} | |
| }; | |
| window.startPlaying = function () { | |
| PbtnWrEl.classList.add('showSpeed'); | |
| PbtnEl.classList.add('phPause'); | |
| intervalPlay = setInterval(phSpace, phSpeed*1000); | |
| tmoutHideMouse = setTimeout(phHideMouse,2000); | |
| setMouseMoveListener(); | |
| isPlaying = 1; | |
| }; | |
| window.setMouseMoveListener = function () { | |
| window.document.body.onmousemove = phMouseMoveListener; | |
| }; | |
| window.unsetMouseMoveListener = function () { | |
| window.document.body.onmousemove = null; | |
| }; | |
| window.stopPlaying = function () { | |
| unsetMouseMoveListener(); | |
| clearInterval(intervalPlay); | |
| clearTimeout(tmoutHideMouse); | |
| PbtnWrEl.classList.remove('showSpeed'); | |
| PbtnEl.classList.remove('phPause'); | |
| phShowMouse(); | |
| isPlaying = 0; | |
| }; | |
| window.goFirst = function () { | |
| window.scrollTo(window.pageXOffset, 0); | |
| window.nPh=0; | |
| fixH(); | |
| phImg.src = imgs[nPh].src; | |
| if(textoMostrado){phTexto.textContent = setText();} | |
| }; | |
| window.goLast= function () { | |
| window.scrollTo(window.pageXOffset, 0); | |
| window.nPh=imgs.length-1; | |
| fixH(); | |
| phImg.src = imgs[nPh].src; | |
| if(textoMostrado){phTexto.textContent = setText();} | |
| }; | |
| window.fixH = function () { | |
| var T = imgs[nPh].height, //image height | |
| h = window.innerHeight; //viewport height | |
| if(T>h){ | |
| phImg.style.bottom = ''; | |
| if (T<h+200) {phImg.style.height='100vh';} | |
| else{phImg.style.height='';} | |
| }else{ | |
| phImg.style.bottom = 0; | |
| phImg.style.height='';} | |
| }; | |
| window.setW = function (){ | |
| if (modoFit == 1) { //apagar | |
| WbtnEl.classList.remove('pressed'); | |
| phImg.classList.remove('phW'); | |
| modoFit = 0; | |
| }else{ //encender | |
| HbtnEl.classList.remove('pressed'); | |
| phImg.classList.remove('phH'); | |
| WbtnEl.classList.add('pressed'); | |
| phImg.classList.add('phW'); | |
| modoFit = 1; | |
| } | |
| }; | |
| window.setH = function (){ | |
| if (modoFit == 2) { //apagar | |
| HbtnEl.classList.remove('pressed'); | |
| phImg.classList.remove('phH'); | |
| modoFit = 0; | |
| }else{ //encender | |
| WbtnEl.classList.remove('pressed'); | |
| phImg.classList.remove('phW'); | |
| HbtnEl.classList.add('pressed'); | |
| phImg.classList.add('phH'); | |
| modoFit = 2; | |
| } | |
| }; | |
| speedEl.onchange=function () { | |
| window.phSpeed = speedEl.value; | |
| if (PbtnEl.classList.contains('phPause')) { | |
| clearInterval(intervalPlay); | |
| intervalPlay = setInterval(phNext, phSpeed*1000); | |
| } | |
| }; | |
| speedEl.oninput = function () { | |
| document.getElementById('txtSpeed').textContent = speedEl.value+' segundos'; | |
| }; | |
| window.document.documentElement.style.height = "100%"; | |
| window.removeClick = function (n) {imgs[n].removeAttribute('onclick');}; | |
| //Agregar escuchadores | |
| for (var i = 0; i < imgs.length; i++) { | |
| imgs[i].setAttribute('onclick', 'openVisor('+i+')'); | |
| imgs[i].setAttribute('onerror', 'removeClick('+i+')'); | |
| } | |
| window.phHideMouse = function () { | |
| phOverlay.style.cursor = 'none'; | |
| phImg.style.cursor = 'none'; | |
| phBtnsEl.style.opacity = 0; | |
| }; | |
| window.phShowMouse = function () { | |
| phOverlay.style.cursor = ''; | |
| phImg.style.cursor = ''; | |
| phBtnsEl.style.opacity = ''; | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment