InterfaceLIFT: Auto-select Largest Resolution

Adds a button to always download the largest image size, calculated on the base of image dimensions megapixel total.

目前为 2017-05-06 提交的版本。查看 最新版本

// ==UserScript==
// @name             InterfaceLIFT: Auto-select Largest Resolution
// @description      Adds a button to always download the largest image size, calculated on the base of image dimensions megapixel total.
// @version          3.0.1
// @namespace        sidneys
// @author           sidneys
// @icon             https://interfacelift.com/favicon.ico
// @include          http*://interfacelift.com/wallpaper/*
// @grant            GM_addStyle
// @grant            GM_getValue
// @grant            GM_setValue
// @grant            GM_xmlhttpRequest
// @run-at           document-end
// ==/UserScript==
const INTERFACELIFT_BASEURL = 'http://interfacelift.com/wallpaper/7yz4ma1/';

let calcMegapixels = (dimensionsString) => {
    let width = dimensionsString.match(/\d+/g)[0];
    let height = dimensionsString.match(/\d+/g)[1];
    let megapixels = ((width*height)/1048576).toFixed(2);
    return megapixels;
};

let getMaximumImageDimensions = (imageId, imageName, elementSelect) => {
    let dimensionsList = [];
    
    let dimensionMax;
    let megapixelsMax;
    let urlMax;

    const imageIdPadded = imageId.length < 5 ? `0${imageId}` : `${imageId}`;
    const imageNameClean = imageName.replace(/_/g, '');

    const elementOptionList = elementSelect.querySelectorAll('optgroup');
    elementOptionList.forEach((elem) => {
          dimensionsList.push(elem.querySelector('option').value);
          dimensionsList.sort((a,b) => {
              megapixelsA = calcMegapixels(a);
              megapixelsB = calcMegapixels(b);
              if (megapixelsA > megapixelsB) { return -1; }
              if (megapixelsA < megapixelsB) { return 1; }
              return 0;
          });
    });

    dimensionMax = dimensionsList[0];
    megapixelsMax = calcMegapixels(dimensionMax);
    urlMax = `${INTERFACELIFT_BASEURL}${imageIdPadded}_${imageNameClean}_${dimensionMax}.jpg`;

    return {
        dimensions: dimensionMax,
        megapixels: megapixelsMax,
        url: urlMax
    };
};

let parseItems = () => {
     let itemList = document.querySelectorAll('#wallpaper .item');
      itemList.forEach((elem) => {
          /** Parse DOM for image name and id **/
          let elemPreview = elem.getElementsByClassName('preview')[0];
          let elemPreviewAnchor = elemPreview.getElementsByTagName('a')[0];
          let elemPreviewSelect = elem.getElementsByClassName('select')[0];
          let wallpaperUrl = elemPreviewAnchor.getAttribute('href');
          let imageId = wallpaperUrl.match(/\d+/)[0];
          let imageName = wallpaperUrl.replace(/.*\/|\.[^.]*$/g, '');

          /** Calculate Maxima**/
          const imageMaximum = getMaximumImageDimensions(imageId, imageName, elemPreviewSelect);
          const imageDimensions  = imageMaximum.dimensions;
          const imageMegapixels  = imageMaximum.megapixels;
          const imageUrl  = imageMaximum.url;

          /** Set Form Value **/
          let elemForm = elem.getElementsByClassName('select')[0];
          elemForm.value = imageDimensions;

          /** Add Download Button **/
          let elemDownload = document.createElement('div');
          elemPreview.appendChild(elemDownload);
          elemDownload.style.height='28px';
          elemDownload.style.marginLeft='44px';
          elemDownload.style.backgroundColor='rgba(150,50,50,0.1)';
          elemDownload.classList.add('download');
          elemDownload.innerHTML=`<span style="display: inline-block; margin: 4px 8px; width: 145px; max-width: 145px; text-align: left; font-family: Arial, sans-serif; font-size: 11px; -webkit-font-smoothing: subpixel-antialiased;"><b>Max:</b> ${imageDimensions} (${imageMegapixels}MP)</span><div id="download_4113" style="display: inline-block; float: right;"><a href="${imageUrl}"><img src="/img_NEW/button_download.png" style="filter: hue-rotate(169deg) saturate(400%);"></a></div>`;
       });
};

parseItems();