LINUX.ORG.RU

История изменений

Исправление 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