您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows calculation of sum or product on numeric data pasted in a textbox, uses cmd [ to summon text boxes
// ==UserScript== // @name Numeric Data Operator // @namespace http://your.namespace.com // @version 0.4 // @description Allows calculation of sum or product on numeric data pasted in a textbox, uses cmd [ to summon text boxes // @author Andrew Lakkis // @match *://*/* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; // Function to parse and process the numeric data function processData(data) { const rows = data.trim().split('\n'); const columns = rows.map(row => row.split(/\s+/)); const numericColumns = columns[0].map((_, i) => columns.map(row => parseFloat(row[i])).filter(num => !isNaN(num))); return numericColumns; } // Function to calculate the sum of a column function sum(column, useComma) { const sumValue = column.reduce((acc, curr) => acc + curr, 0); const expression = useComma ? column.join(', ') : column.join(' + '); return `${expression} = ${sumValue}`; } // Function to calculate the product of a column function product(column, useComma) { const productValue = column.reduce((acc, curr) => acc * curr, 1); const expression = useComma ? column.join(', ') : column.join(' * '); return `${expression} = ${productValue}`; } // Function to create and display the user interface function createUI(data) { if (!document.querySelector('[placeholder="Paste numeric data here..."]')) { const container = document.createElement('div'); container.style.position = 'fixed'; container.style.top = '50%'; container.style.left = '50%'; container.style.transform = 'translate(-50%, -50%)'; container.style.backgroundColor = '#fff'; container.style.padding = '20px'; container.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.2)'; container.style.zIndex = '9999'; const textArea = document.createElement('textarea'); textArea.style.width = '300px'; textArea.style.height = '200px'; textArea.placeholder = 'Paste numeric data here...'; container.appendChild(textArea); const select = document.createElement('select'); const sumOption = document.createElement('option'); sumOption.text = 'Sum'; select.add(sumOption); const productOption = document.createElement('option'); productOption.text = 'Product'; select.add(productOption); container.appendChild(select); const commaCheckbox = document.createElement('input'); commaCheckbox.type = 'checkbox'; commaCheckbox.id = 'commaCheckbox'; const commaLabel = document.createElement('label'); commaLabel.htmlFor = 'commaCheckbox'; commaLabel.textContent = 'Use comma separation'; container.appendChild(commaCheckbox); container.appendChild(commaLabel); const calculateButton = document.createElement('button'); calculateButton.textContent = 'Calculate'; calculateButton.onclick = function() { const selectedOption = select.options[select.selectedIndex].text; const useComma = commaCheckbox.checked; const numericData = processData(textArea.value); const result = selectedOption === 'Sum' ? numericData.map(column => sum(column, useComma)) : numericData.map(column => product(column, useComma)); resultTextBox.value = result.join('\n\n'); }; container.appendChild(calculateButton); const resultTextBox = document.createElement('textarea'); resultTextBox.style.width = '300px'; resultTextBox.style.height = '200px'; resultTextBox.placeholder = 'Calculation results will appear here...'; resultTextBox.disabled = true; container.appendChild(resultTextBox); const closeButton = document.createElement('button'); closeButton.textContent = 'Close'; closeButton.onclick = function() { document.body.removeChild(container); }; container.appendChild(closeButton); document.body.appendChild(container); } } // Check if the user presses Cmd + [ document.addEventListener('keydown', function(event) { if (event.metaKey && event.key === '[') { event.preventDefault(); createUI(); } }); })();