История изменений
Исправление theNamelessOne, (текущая версия) :
// ==UserScript==
// @name Numbers Increment/Decrement
// @namespace Violentmonkey Scripts
// @match <all_urls>
// @grant none
// @run-at document-end
// @version 1.0
// ==/UserScript==
const isTextInput = node =>
node.nodeName === 'TEXTAREA' || (node.nodeName === 'INPUT' && node.type === 'text')
const hasSelection = ({ selectionStart, selectionEnd }) => selectionStart !== selectionEnd
const selectedNumber = (element) => {
const { selectionStart, selectionEnd } = element
const maybeNumber = Number.parseInt(element.value.slice(selectionStart, selectionEnd), 10)
return Number.isNaN(maybeNumber) ? undefined : maybeNumber
}
const changeNumber = (element, delta) => {
const newNumber = selectedNumber(element) + delta
const { selectionStart, selectionEnd } = element
element.setRangeText(newNumber.toString(), selectionStart, selectionEnd)
}
let elementWithSelectedNumber = null
document.addEventListener('mouseup', ({ target: element }) => {
if (isTextInput(element) && hasSelection(element) && selectedNumber(element) !== undefined) {
elementWithSelectedNumber = element
} else {
elementWithSelectedNumber = null
}
})
document.addEventListener('wheel', (event) => {
if (!elementWithSelectedNumber) {
return
}
event.preventDefault()
changeNumber(elementWithSelectedNumber, event.deltaY < 0 ? -1 : 1)
})
Как работает:
- выделяешь в каком-нибудь поле ввода число мышкой;
- крутишь колесо мыши вверх - число уменьшается, крутишь колесо вниз - увеличивается;
- чтобы закончить, щелкни мышью куда-нибудь или выдели не текст.
Проверял в FF с ViolentMonkey, возможны мелкие баги.
Исходная версия theNamelessOne, :
Вот тебе готовый юзерскрипт
// ==UserScript==
// @name Numbers Increment/Decrement
// @namespace Violentmonkey Scripts
// @match <all_urls>
// @grant none
// @run-at document-end
// @version 1.0
// ==/UserScript==
const isTextInput = node =>
node.nodeName === 'TEXTAREA' || (node.nodeName === 'INPUT' && node.type === 'text')
const hasSelection = ({ selectionStart, selectionEnd }) => selectionStart !== selectionEnd
const selectedNumber = (element) => {
const { selectionStart, selectionEnd } = element
const maybeNumber = Number.parseInt(element.value.slice(selectionStart, selectionEnd), 10)
return Number.isNaN(maybeNumber) ? undefined : maybeNumber
}
const changeNumber = (element, delta) => {
const newNumber = selectedNumber(element) + delta
const { selectionStart, selectionEnd } = element
element.setRangeText(newNumber.toString(), selectionStart, selectionEnd)
}
let elementWithSelectedNumber = null
document.addEventListener('mouseup', ({ target: element }) => {
if (isTextInput(element) && hasSelection(element) && selectedNumber(element) !== undefined) {
elementWithSelectedNumber = element
} else {
elementWithSelectedNumber = null
}
})
document.addEventListener('wheel', (event) => {
if (!elementWithSelectedNumber) {
return
}
event.preventDefault()
changeNumber(elementWithSelectedNumber, event.deltaY < 0 ? -1 : 1)
})
Как работает:
- выделяешь в каком-нибудь поле ввода число мышкой;
- крутишь колесо мыши вверх - число уменьшается, крутишь колесо вниз - увеличивается;
- чтобы закончить, щелкни мышью куда-нибудь или выдели не текст.
Проверял в FF с ViolentMonkey