您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to instantly download the optimum (largest) wallpaper image variant base on its total megapixels
// ==UserScript== // @name InterfaceLIFT | Download Largest Wallpaper Variant // @namespace de.sidneys.userscripts // @homepage https://gist.githubusercontent.com/sidneys/32af71f8a3260cee2baef026837151a5/raw/ // @version 11.11.11 // @description Adds a button to instantly download the optimum (largest) wallpaper image variant base on its total megapixels // @author sidneys // @icon https://interfacelift.com/favicon.ico // @include http*://interfacelift.com/wallpaper/* // @require https://greasyfork.org/scripts/38888-greasemonkey-color-log/code/Greasemonkey%20%7C%20Color%20Log.js // @require https://greasyfork.org/scripts/38889-greasemonkey-waitforkeyelements-2018/code/Greasemonkey%20%7C%20waitForKeyElements%202018.js // @run-at document-end // ==/UserScript== /** * @default * @constant */ const DEBUG = false; /** * @default * @constant */ const defaultBaseUrl = 'https://InterfaceLIFT.com/wallpaper/7yz4ma1/'; /** * Convert image dimensions to megapixels * @param {String} dimensions - Image dimensions (e.g. '1920x1080') * @returns {Number} Image megapixels (e.g. 2.07) */ let convertDimensionsToMegapixels = (dimensions) => { console.debug('convertDimensionsToMegapixels'); let width = dimensions.match(/\d+/g)[0]; let height = dimensions.match(/\d+/g)[1]; return parseFloat(((width * height) / 1048576).toFixed(2)); }; /** * Get wallpaper id * @param {String} url - InterfaceLIFT wallpaper url * @returns {String} InterfaceLIFT wallpaper id */ let getWallpaperId = (url) => { console.debug('getWallpaperId'); const wallpaperId = url.match(/\d+/)[0]; return wallpaperId.length < 5 ? `0${wallpaperId}` : `${wallpaperId}`; }; /** * Get wallpaper name * @param {String} url - InterfaceLIFT wallpaper url * @returns {String} InterfaceLIFT wallpaper name */ let getWallpaperName = (url) => { console.debug('getWallpaperName'); return url.replace(/.*\/|\.[^.]*$/g, ''); }; /** * Get wallpaper url * @param {String} id - InterfaceLIFT wallpaper id * @param {String} name - InterfaceLIFT wallpaper name * @param {String} dimensions - Image dimensions (e.g. '1920x1080') * @returns {String} InterfaceLIFT wallpaper name */ let getWallpaperUrl = (id, name, dimensions) => { console.debug('getWallpaperName'); const wallpaperNameClean = name.replace(/_/g, ''); return `${defaultBaseUrl}${id}_${wallpaperNameClean}_${dimensions}.jpg`; }; /** * Parse optimum image dimensions from InterfaceLIFT selector * @param {HTMLElement} selectElement - InterfaceLIFT resolution selector dropdown * @returns {String} Image dimensions (e.g. '1920x1080') */ let parseOptimumDimensions = (selectElement) => { console.debug('parseOptimumDimensions'); const dimensionsList = []; const elementOptionList = selectElement.querySelectorAll('optgroup'); elementOptionList.forEach((elem) => { dimensionsList.push(elem.querySelector('option').value); dimensionsList.sort((a, b) => { const megapixelsA = convertDimensionsToMegapixels(a); const megapixelsB = convertDimensionsToMegapixels(b); if (megapixelsA > megapixelsB) { return -1; } if (megapixelsA < megapixelsB) { return 1; } return 0; }); }); return dimensionsList[0]; }; /** * Adds largest resolution download controls * @param {Element} containerElement - Wallpaper container element */ let addDownloadControls = (containerElement) => { console.debug('addDownloadControls'); // Get wallpaper previews let itemList = containerElement.querySelectorAll('.item .preview'); // Extend wallpaper previews itemList.forEach((element) => { // Get id, name const defaultWallpaperUrl = element.querySelector('a').getAttribute('href'); const wallpaperId = getWallpaperId(defaultWallpaperUrl); const wallpaperName = getWallpaperName(defaultWallpaperUrl); // Get url const selectElement = element.querySelector('select'); // Get optimal wallpaper data const optimumDimensions = parseOptimumDimensions(selectElement); const optimumMegapixels = convertDimensionsToMegapixels(optimumDimensions); const optimumUrl = getWallpaperUrl(wallpaperId, wallpaperName, optimumDimensions); // Form: Select optimal image selectElement.value = optimumDimensions; // Button: Add url to optimal image const buttonElement = document.createElement('div'); element.appendChild(buttonElement); buttonElement.style.height = '28px'; buttonElement.style.marginLeft = '44px'; buttonElement.style.backgroundColor = 'rgba(150, 50, 50, 0.05)'; buttonElement.classList.add('download'); buttonElement.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; white-space: nowrap;"> <b>${optimumDimensions}</b> (${optimumMegapixels} MP) </span> <div id="download_4113" style="display: inline-block; float: right;"> <a download href="${optimumUrl}"> <img src="/img_NEW/button_download.png" style="filter: hue-rotate(169deg) saturate(400%);"> </a> </div> `; // Status console.info(wallpaperName, optimumUrl, optimumDimensions); }); }; /** * Init */ let init = () => { console.info('init'); waitForKeyElements('#page > div:nth-child(5)', (containerElement) => { addDownloadControls(containerElement); }); }; /** * @listens window:Event#load */ window.addEventListener('load', () => { console.debug('window#load'); init(); });