Skip to content

Instantly share code, notes, and snippets.

@FabulousCupcake
Created November 5, 2022 13:00
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FabulousCupcake/f858725d00ae3975613f565aad08afd3 to your computer and use it in GitHub Desktop.
Save FabulousCupcake/f858725d00ae3975613f565aad08afd3 to your computer and use it in GitHub Desktop.
EH – SearchNav Click UI
// ==UserScript==
// @name EH – SearchNav Click UI
// @namespace fabulous.cupcake.jp.net
// @version 2022.11.05.1
// @description Make SearchNav more mouse-friendly
// @author FabulousCupcake
// @license MIT
// @runat document-start
// @include /https?:\/\/(e-|ex)hentai\.org\/.*/
// @grant unsafeWindow
// ==/UserScript==
const stylesheet = `
#ujumpbox {
position: relative;
}
#ujumpbox .preset-inputs {
display: flex;
flex-direction: column;
gap: 4px;
padding: 0.5em;
position: absolute;
top: 30px;
left: 50%;
transform: translateX(-50%);
z-index: 99999;
}
#ujumpbox .row {
display: flex;
flex-direction: row;
justify-content: center;
}
#ujumpbox .preset-inputs input {
width: 33px;
}
/* Date Input Width Fix */
.jumpbox { width: auto !important; }
`;
const hasSearchNav = () => {
return !!document.querySelector(".searchnav");
}
const addStylesheet = () => {
const stylesheetEl = document.createElement("style");
stylesheetEl.innerHTML = stylesheet;
document.body.appendChild(stylesheetEl);
}
const addElements = () => {
const hook = document.querySelector("#ujumpbox");
const el = `
<div class="preset-inputs stuffbox">
<div class="row" style="margin-bottom: 0.25em;">
<button class="date-input">Use Date Input</button>
</div>
<div class="row">
<input type="button" value="1d"/>
<input type="button" value="3d"/>
<input type="button" value="1w"/>
<input type="button" value="2w"/>
</div>
<div class="row">
<input type="button" value="1m"/>
<input type="button" value="6m"/>
<input type="button" value="1y"/>
<input type="button" value="2y"/>
</div>
</div>
`;
hook.insertAdjacentHTML("beforeend", el);
}
const addEventListeners = () => {
// Preset Button Events
const presetInputButtons = document.querySelectorAll("#ujumpbox .preset-inputs input");
const handler = e => {
const mainInput = document.querySelector("#ujump");
const value = e.target.getAttribute("value");
mainInput.value = value;
mainInput.dispatchEvent(new Event('change'));
}
Array.from(presetInputButtons).forEach(el => el.addEventListener("click", handler));
// Date Input Event
const dateButton = document.querySelector("#ujumpbox .date-input");
dateButton.addEventListener("click", () => {
const mainInput = document.querySelector("#ujump");
mainInput.setAttribute("type", "date");
// Disable preset inputs
Array.from(presetInputButtons).forEach(el => el.setAttribute("disabled", ""));
});
}
const addSearchJumpButtonCallback = callbackFn => {
const origFn = unsafeWindow.enable_jump_mode;
unsafeWindow.enable_jump_mode = function() {
origFn.apply(this, arguments);
callbackFn();
}
}
const main = () => {
if (!hasSearchNav()) return;
addStylesheet();
addSearchJumpButtonCallback(() => {
addElements();
addEventListeners();
});
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment