Imgur Direct

See Imgur images & videos directly.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
//
// @name           Imgur Direct
// @version        1.3
// @namespace      https://greasyfork.org/en/users/667743-catspinner
// @description    See Imgur images & videos directly.
// @icon           https://imgur.com/favicon.ico
// @license        MIT
//
//
// @include        /^https://imgur\.com/[a-zA-Z0-9]{5,8}$/
// @exclude        https://imgur.com/gallery
// @exclude        https://imgur.com/upload
//
// @run-at         document-start
//
// ==/UserScript==
//
/*=========================  Version History  ==================================

1.00    -    First public release.

1.1     -    Fixed Imgur's jpg/jpeg shenanigans.
             Shows images faster.
             Strict @include rule to define where script can run.

1.2     -    Fixed a typo in @include regex.

1.3     -    Just some meta changes.

==============================================================================*/


function runImgurDirect() {
  const imgname = location.href.replace('https://imgur.com/', 'https://i.imgur.com/'),
        imgname_jpeg = imgname + '.jpeg',
        imgname_jpg  = imgname + '.jpg',
        imgname_png  = imgname + '.png',
        imgname_gif  = imgname + '.gif',
        imgname_mp4  = imgname + '.mp4',
        imgname_gifv = imgname + '.gifv';

  const url = location.href;
  const xhr = new XMLHttpRequest();
  xhr.open('GET', url);
  xhr.responseType = 'text';
  xhr.send();
  xhr.onload = function() {
    const page = xhr.response;
    var video = true;
    var trueimage = location.href;

    if (page.indexOf("og:video") == -1) {
      video = false;
    } if (page.indexOf(imgname_png) > -1) {
      trueimage = imgname_png;
    } else if (page.indexOf(imgname_jpeg) > -1) {
      trueimage = imgname_jpeg;
    } else if (page.indexOf(imgname_jpg) > -1) {
      trueimage = imgname_jpg;
    }

    if (video) {
      if (countOccurrence(page, imgname_gif) > 2) {
        trueimage = imgname_gif;
      } else if (countOccurrence(page, imgname_mp4) > 2) {
        trueimage = imgname_mp4;
      } else if (countOccurrence(page, imgname_gifv) > 2) {
        trueimage = imgname_gifv;
      }
    }

    if (url !== trueimage) {
      window.location.replace(trueimage);
    } else {
      return;
    }
  }
}

function countOccurrence(string, subString) {
  var n    = 0,
      pos  = 0,
      step = subString.length;

  while (true) {
    pos = string.indexOf(subString, pos);
    if (pos >= 0) {
        ++n;
        pos += step;
    } else break;
  }
  return n;
}

runImgurDirect();