Image Viewer

inject this script into any page, and RIGHT-CLICK on the image you want to view full-size

От 11.06.2017. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name       Image Viewer
// @namespace  https://gist.github.com/bradenbest/04bd0fc2d57ec650449f
// @version    1.5.2
// @description  inject this script into any page, and RIGHT-CLICK on the image you want to view full-size
// @copyright  2014 - present, Braden Best
// ==/UserScript==
 
// poke

(function initialize(init){
  var init = init || 0;
  var firefox = /Firefox/i.test(navigator.userAgent);
  function push(url){
    var img = document.createElement('img'),
        img_helper = document.createElement('div'),
        img_helper_link = document.createElement('a');
    // Image
    img.src = url;
    img.style.position = 'absolute';
    img.style.left = '0px';
    img.style.top  = (80 + document.body.scrollTop) + 'px';
    img.style.zIndex = '2147483647'; // this is to push it above everything else, so the NG navbar doesn't float over it.
    img.className = 'img_viewer';
    img.draggable = 'false';
    img.dragging = 0;
    img.mousepos = [0,0];
    img.tabIndex = 0;
    // Image helper
    img_helper.innerHTML = "Click here to close image";
    img_helper.style.position = 'fixed';
    img_helper.style.left = '0px';
    img_helper.style.top  = '0px';
    img_helper.style.margin = '0';
    img_helper.style.padding = '5px 0';
    img_helper.style.width = '100%';
    img_helper.style.height='50px';
    img_helper.style.background = '#fff';
    img_helper.style.borderBottom = '1px solid #ccc';
    img_helper.style.color = '#000';
    img_helper.style.fontSize = '12px';
    img_helper.style.textAlign = 'center';
    img_helper.style.zIndex = '2147483647'; // The absolute maximum
    img_helper.className = 'img_viewer';
    // Image helper link
    img_helper_link.innerHTML = 'Direct URL';
    img_helper_link.href = url;
    img_helper_link.target = '_blank';
    img_helper_link.style.margin = '0';
    img_helper_link.style.padding = '0';
    img_helper_link.style.background = '#fff';
    img_helper_link.style.borderBottom = '1px solid #ccc';
    img_helper_link.style.display = 'block';
    img_helper_link.style.width = '100%';
    img_helper_link.style.height = '20px';
    img_helper_link.style.position = 'fixed';
    img_helper_link.style.left = '0';
    img_helper_link.style.top = '50px';
    img_helper_link.style.fontSize = '12px';
    img_helper_link.style.textAlign = 'center';
    img_helper_link.style.zIndex = '2147483647';
    img_helper_link.className = 'img_viewer';
    // append to body
    document.body.appendChild(img_helper);
    document.body.appendChild(img_helper_link);
    document.body.appendChild(img);
    // helper on-click
    img_helper.onclick = function(){
      document.body.removeChild(img);
      document.body.removeChild(img_helper);
      document.body.removeChild(img_helper_link);
    }
    if(firefox){ // I hate browser sniffing, but my hand is forced
      img.onmousedown = function(evt){
        this.dragging = !this.dragging;
        this.mousepos[0] = (evt.clientX || evt.pageX);
        this.mousepos[1] = (evt.clientY || evt.pageY);
      }
      img.onmouseup = null;
    } else {
      img.onmousedown = function(evt){
        this.dragging = 1;
        this.mousepos[0] = (evt.clientX || evt.pageX);
        this.mousepos[1] = (evt.clientY || evt.pageY);
      }
      img.onmouseup = function(evt){
        this.dragging = 0;
      }
    }
    img.onmousemove = function(evt){ // Hoo boy, that was pretty difficult to figure out
      if(this.dragging){
        lastX = this.mousepos[0];
        curX = (evt.clientX || evt.pageX);
        lastY = this.mousepos[1];
        curY = (evt.clientY || evt.pageY);
        if(!(lastX == curX && lastY == curY)){
          console.log("mouse has moved");
          if(curX > lastX){
            this.style.left = (parseInt(this.style.left) + (curX - lastX)) + 'px';
          }
          if(curX < lastX){
            this.style.left = (parseInt(this.style.left) - (lastX - curX)) + 'px';
          }
          if(curY > lastY){
            this.style.top = (parseInt(this.style.top) + (curY - lastY)) + 'px';
          }
          if(curY < lastY){
            this.style.top = (parseInt(this.style.top) - (lastY - curY)) + 'px';
          }
        }
        this.mousepos[0] = curX;
        this.mousepos[1] = curY;
      }
      return false;
    }
    img.onkeydown = function(evt){
      var temp_width;
      if(evt.keyCode == 38) { // Up
        temp_width = parseInt(this.width);
        temp_height = parseInt(this.height) - 10;
        this.width = temp_width;
        this.height = temp_height;
      } 
      if(evt.keyCode == 40) { // Down
        temp_width = parseInt(this.width);
        temp_height = parseInt(this.height) + 10;
        this.width = temp_width;
        this.height = temp_height;
      }
      if(evt.keyCode == 37) { // Left
        temp_width = parseInt(this.width) - 10;
        temp_height = parseInt(this.height);
        this.width = temp_width;
        this.height = temp_height;
      }
      if(evt.keyCode == 39) { // Right
        temp_width = parseInt(this.width) + 10;
        temp_height = parseInt(this.height);
        this.width = temp_width;
        this.height = temp_height;
      }
      return false;
    }
  }

  function clear(){
    var imgs = document.querySelectorAll('.img_viewer');
    if(imgs[0]) {
      for(var i = 0; i < imgs.length; i++){
        document.body.removeChild(imgs[i]);
      }
    } else {
      console.log("No images generated by this script were found");
    }
  }

  var imgs = document.querySelectorAll('img[src]'), i;
  if(imgs[0]){
    for(i = 0; i < imgs.length; i++){
      if(imgs[i].src){
        imgs[i].oncontextmenu = function(){
          push(this.src);
          return false;
        }
      }
    }
  } else {
    console.log("Something has gone wrong!");
  }
  if(!firefox){
    document.body.onmouseup = function(evt){
      var imgs = document.querySelectorAll('.img_viewer');
      if(imgs[0]){
        for(var i = 0; i < imgs.length; i++){
           imgs[i].dragging = 0;
        }
      }
    }
  }
  document.body.onkeydown = function(evt){
    if(evt.keyCode == 27){ // Escape key
      clear();
    }
    if(evt.keyCode == 17){ // Ctrl
      //clear();
      initialize(1);
    }
  }
  if(!init){
    console.log("Image Viewer successfully started up!");
    console.log("Try right-clicking an image");
  }else{
    console.log("Queue updated");
  }
})();