NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name HAnime imgs adv // @namespace http://hanime.tv/ // @version 0.5 // @description Shows images resolution // @author kamikoto00 // @copyright 2019, kamikoto00 (https://openuserjs.org/users/kamikoto00) // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js // @match https://members.hanime.tv/browse/images // @match https://members.hanime.tv/browse/images?* // @match https://members.hanime.tv/browse/images/*?* // @match https://hanime.tv/browse/images // @match https://hanime.tv/browse/images?* // @match https://hanime.tv/browse/images/* // @match https://hanime.tv/browse/images/*?* // @license MIT // @grant none // @updateURL https://openuserjs.org/meta/kamikoto00/HAnime_imgs_adv.meta.js // ==/UserScript== // ==OpenUserJS== // @author kamikoto00 // ==/OpenUserJS== (async function () { 'use strict'; const $ = window.jQuery; const sizeGetter = $('<img style="">').appendTo(document.body); (await waitForE(".images_channel__item")).click(async () => { $(".cuc").first().append('<div id="wait_for_reload_check">'); await waitFor(() => $("#wait_for_reload_check"), null, p => !p.length); onChange(); }); const imgC = window.debug = $(".cuc_container"); onChange(); async function onChange() { const imgsContainer = await waitForE(".cuc.grows"); for (let e of imgsContainer) { e = $(e); sizeGetter.attr("src", e.attr("href")); let sg; try { sg = await waitFor(() => sizeGetter[0], sg => sg, sg => sg.naturalWidth && sg.naturalHeight, 0, 3000); } catch (e) { console.log(sg = await waitFor(() => sizeGetter, sg => ({ naturalWidth: sg.width(), naturalHeight: sg.height() }), sg => sg.width() && sg.height(), 0)); } //await new Promise(r => sizeGetter.one("load", r)); const img = $(`<div style="position: absolute; top: 0; width: 100%; color: white; transition: all 280ms; background: linear-gradient(0deg, rgba(23, 24, 26, 0), rgba(23, 24, 26, .85))">${sg.naturalWidth}x${sg.naturalHeight}</div>`).appendTo(e).hide(); e.on("mouseenter", () => { img.show(75); }); e.on("mouseleave", () => { img.hide(50); }); } sizeGetter.attr("src", ""); } async function waitForE(selector, delay = 100, timeout = 10000) { return waitFor(() => window.jQuery(selector), p => p, p => p.length, delay, timeout, selector); } async function waitFor(gF, returnF, checkF, delay = 100, timeout = 10000, timeouterr) { return new Promise(async (resolve, reject) => { let tow; const waiter = setInterval(() => { try { const r = (typeof gF === "function" ? gF() : gF); if (typeof checkF === "function" ? checkF(r) : checkF) { clearInterval(waiter); clearTimeout(tow); resolve(typeof returnF === "function" ? returnF(r) : returnF); } } catch (e) { clearTimeout(tow); clearIntrerval(waiter); reject(e); } }, delay); tow = setTimeout(() => { clearInterval(waiter); reject(new Error(`Waiting for (${timeouterr || (`function ${gF} with check ${checkF}`)}) was too long (${timeout} ms)`)); }, timeout); }); } })();