您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This script works on any browser and simulates the Opera Browser Mouse+Rocker Gestures, along with the Search HighLight and Units+Currency Converters, but with this script you can modify or disable them as you want.
当前为
- // ==UserScript==
- // @name Opera Browser Rocker+Mouse Gestures + Search HighLight
- // @namespace OperaBrowserGestures
- // @description This script works on any browser and simulates the Opera Browser Mouse+Rocker Gestures, along with the Search HighLight and Units+Currency Converters, but with this script you can modify or disable them as you want.
- // @version 52
- // @author hacker09
- // @include *
- // @icon https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.opera.com/&size=64
- // @require https://code.jquery.com/jquery-3.5.1.min.js
- // @grant GM_registerMenuCommand
- // @grant GM_openInTab
- // @grant window.close
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // @run-at document-end
- // ==/UserScript==
- // *** Mouse Gesture Settings Below *****************************************************************************************************************************************
- GM_registerMenuCommand("Enable/Disable Mouse Gestures", MouseGestures); //Adds an option to the tampermonkey menu
- if (GM_getValue("MouseGestures") !== true && GM_getValue("MouseGestures") !== false) { //If the value doesn't exist define as true
- GM_setValue("MouseGestures", true); //Defines the variable as true
- } //Finishes the if condition
- function MouseGestures() //Function to enable or disable the MouseGestures
- { //Starts the function MouseGestures
- if (GM_getValue("MouseGestures") === true) { //If the last config was true, set as false
- GM_setValue("MouseGestures", false); //Defines the variable as false
- } //Finishes the if condition
- else { //If the last config was false, set as true
- GM_setValue("MouseGestures", true); //Defines the variable as true
- location.reload(); //Reloads the page
- } //Finishes the else condition
- } //Finishes the function MouseGestures
- if (GM_getValue("MouseGestures") === true) //If the MouseGestures is enabled
- { //Starts the if condition
- const SENSITIVITY = 3; // Adjust the script mouse senvity here between 1 ~ 5
- const TOLERANCE = 3; // Adjust the script mouse tolerance here between 1 ~ 5
- const funcs = { //Variable to store the functions
- 'L': function() { //Function that will run when the mouse movement Left is performed
- window.history.back(); //Go Back
- }, //Finishes the mouse movement Left
- 'R': function() { //Function that will run when the mouse movement Right is performed
- window.history.forward(); //Go Forward
- }, //Finishes the mouse movement Right
- 'D': function() { //Function that will run when the mouse movement Down is performed
- if (IsShiftNotPressed === true) { //If the shift key isn't being pressed
- GM_openInTab(link, { //Open the link on a new tab
- active: true, //Focus on the new tab
- insert: true, //Insert the new tab after the actual tab
- setParent: true //Return to the tab the user was in
- }); //Open the link that was hovered
- } //Finishes the if condition
- }, //Finishes the mouse movement Down
- 'UD': function() { //Function that will run when the mouse movement Up+Down is performed
- window.location.reload(); //Reload the Tab
- }, //Finishes the mouse movement Up+Down
- 'DR': function(e) { //Function that will run when the mouse movement Down+Right is performed
- window.top.close(); //Close the tab
- e.preventDefault(); //Prevent the default context menu from being opened
- e.stopPropagation(); //Prevent the default context menu from being opened
- }, //Finishes the mouse movement Down+Right
- 'DU': function() { //Function that will run when the mouse movement Down+Up is performed
- GM_openInTab(link, { //Open the link that was hovered
- active: false, //Don't focus on the new tab
- insert: true, //Insert the new tab after the actual tab
- setParent: true //Return to the tab the user was in
- }); //Open the link that was hovered on a new background tab
- } //Finishes the mouse movement Down+Up
- }; //Finishes the variable to store the functions
- // *** Below this line is the math codes that track the mouse movement gestures *******************************************************************************************
- const s = 1 << ((7 - SENSITIVITY) << 1);
- const t1 = Math.tan(0.15708 * TOLERANCE),
- t2 = 1 / t1;
- let x, y, path;
- const tracer = function(e) { //Starts the const tracer
- let cx = e.clientX,
- cy = e.clientY,
- deltaX = cx - x,
- deltaY = cy - y,
- distance = deltaX * deltaX + deltaY * deltaY;
- if (distance > s) {
- let slope = Math.abs(deltaY / deltaX),
- direction = '';
- if (slope > t1) {
- direction = deltaY > 0 ? 'D' : 'U';
- } else if (slope <= t2) {
- direction = deltaX > 0 ? 'R' : 'L';
- }
- if (path.charAt(path.length - 1) !== direction) {
- path += direction;
- }
- x = cx;
- y = cy;
- }
- }; //Finishes the const tracer
- window.addEventListener('mousedown', function(e) { //Add an advent listener to the page to detect when the mouse is clicked
- if (e.which === 3) { //Starts the if condition
- x = e.clientX;
- y = e.clientY;
- path = "";
- window.addEventListener('mousemove', tracer, false); //Add an advent listener to the page to detect the mouse position
- } //Finishes the if condition
- }, false); //Finishes the advent listener
- var IsShiftNotPressed = true; //Variable to hold the shift key status
- window.addEventListener("contextmenu", function(e) { //Adds an advent listener to the page to know when the shift key is pressed or not
- if (e.shiftKey) { //If the shift key was pressed
- IsShiftNotPressed = false; //Variable to hold the shift key status
- window.open(link, '_blank', 'height=' + window.screen.height + ',width=' + window.screen.width); //Open the link on a new window
- } //Finishes the if condition
- if (LeftClicked === true) { //If the Left Click was released when the Rocker Mouse Gestures are activated
- e.preventDefault(); //Prevent the default context menu from being opened
- e.stopPropagation(); //Prevent the default context menu from being opened
- } //Finishes the if condition
- setTimeout(function() { //Starts the settimeout function
- IsShiftNotPressed = true; //Variable to hold the shift key status
- }, 500); //Finishes the settimeout function
- }, false); //Finishes the advent listener
- window.addEventListener('contextmenu', function(e) { //When the right click button is released
- window.removeEventListener('mousemove', tracer, false); //Stop tracking the mouse movements
- if (path !== "") { //Starts the if condition
- e.preventDefault(); //Prevent the default context menu from being opened
- if (funcs.hasOwnProperty(path)) { //Starts the if condition
- funcs[path]();
- } //Finishes the if condition
- } //Finishes the if condition
- }, false); //Finishes the advent listener
- var link; //Make the variable global
- Array.from(document.querySelectorAll('a')).forEach(Element => Element.onmouseover = function() { //Get all the a link elements and add an advent listener to the link element
- link = this.href; //Store the actual hovered link to a variable
- }); //Finishes the forEach
- Array.from(document.querySelectorAll('a')).forEach(Element => Element.onmouseout = function() { //Get all the a link elements and add an advent listener to the link element
- var PreviousLink = link; //Save the actual hovered link to another variable
- setTimeout(function() { //Starts the settimeout function
- if (PreviousLink === link) //If he actual hovered link is still the same as the Previously hovered Link
- { //Starts the if condition
- link = 'about:newtab'; //Make the script open a new browser tab when the mouse leaves any link that was hovered
- } //Finishes the if condition
- }, 200); //Finishes the settimeout function
- }); //Finishes the forEach
- } //Finishes the if condition
- // *** Rocker Mouse Gesture Settings Below ***********************************************************************************************************************************
- GM_registerMenuCommand("Enable/Disable Rocker Mouse Gestures", RockerMouseGestures); //Adds an option to the tampermonkey menu
- if (GM_getValue("RockerMouseGestures") !== true && GM_getValue("RockerMouseGestures") !== false) { //If the value doesn't exist define as false
- GM_setValue("RockerMouseGestures", false); //Defines the variable as false
- } //Finishes the if condition
- function RockerMouseGestures() //Function to enable or disable the RockerMouseGestures
- { //Starts the function RockerMouseGestures
- if (GM_getValue("RockerMouseGestures") === true) { //If the last config was true, set as false
- GM_setValue("RockerMouseGestures", false); //Defines the variable as false
- } //Finishes the if condition
- else { //If the last config was false, set as true
- GM_setValue("RockerMouseGestures", true); //Defines the variable as true
- location.reload(); //Reloads the page
- } //Finishes the else condition
- } //Finishes the function RockerMouseGestures
- if (GM_getValue("RockerMouseGestures") === true || GM_getValue("SearchHiLight") === true) //If the RockerMouseGestures or the SearchHiLight is enabled
- { //Starts the if condition
- var LeftClicked, RightClicked; //Make these variables global
- window.addEventListener("mousedown", function(e) { //Detect the right and left mouse clicks presses on the page
- switch (e.button) { //Start the switch condition
- case 0: //If Left Click was Pressed
- LeftClicked = true; //Set the variable LeftClicked as true
- break; //Don't execute the lines below if the Left Key was Pressed
- case 2: //If Right Click was Pressed
- RightClicked = true; //Set the variable RightClicked as true
- break; //Don't execute the lines below if the Right Key was Pressed
- } //Finishes the switch condition
- }, false); //Finishes the adventlistener mousedown
- window.addEventListener("mouseup", function(e) { //Detect the right and left mouse clicks releases on the page
- switch (e.button) { //Start the switch condition
- case 0: //If Left Click was released
- LeftClicked = false; //Set the variable LeftClicked as false
- break; //Don't execute the lines below if the Left Key was Pressed
- case 2: //If Right Click was released
- RightClicked = false; //Set the variable RightClicked as false
- break; //Don't execute the lines below if the Left Key was Pressed
- } //Finishes the switch condition
- if (LeftClicked && RightClicked === false) { //If Left was Clicked and then Right Click was released
- window.history.back(); //Go Back
- } //Finishes the if condition
- if (RightClicked && LeftClicked === false) { //If Right was Clicked and then Left Click was released
- window.history.forward(); //Go Forward
- } //Finishes the if condition
- }, false); //Finishes the adventlistener mouseup
- } //Finishes the if condition
- // *** SearchHighLight Below *************************************************************************************************************************************************
- GM_registerMenuCommand("Enable/Disable SearchHiLight", SearchHiLight); //Adds an option to the tampermonkey menu
- if (GM_getValue("SearchHiLight") !== true && GM_getValue("SearchHiLight") !== false) { //If the value doesn't exist define as true
- GM_setValue("SearchHiLight", true); //Defines the variable as true
- } //Finishes the if condition
- if (GM_getValue("CurrenciesConverter") !== true && GM_getValue("CurrenciesConverter") !== false) { //If the value doesn't exist define as true
- GM_setValue("CurrenciesConverter", true); //Defines the variable as true
- } //Finishes the if condition
- if (GM_getValue("UnitsConverter") !== true && GM_getValue("UnitsConverter") !== false) { //If the value doesn't exist define as true
- GM_setValue("UnitsConverter", true); //Defines the variable as true
- } //Finishes the if condition
- function SearchHiLight() //Function to enable or disable the SearchHiLight and the Currency/Unit converters
- { //Starts the function SearchHiLight
- if (GM_getValue("SearchHiLight") === true) { //If the last config was true, set as false
- GM_setValue("SearchHiLight", false); //Defines the variable as false
- GM_setValue("CurrenciesConverter", false); //Defines the variable as false
- GM_deleteValue('YourLocalCurrency'); //Remove the YourLocalCurrency variable of the tampermonkey storage
- GM_setValue("UnitsConverter", false); //Defines the variable as false
- } //Finishes the if condition
- else { //If the last config was false, set as true
- GM_setValue("SearchHiLight", true); //Defines the variable as true
- if (confirm('If you want to enable the Currency Converter press OK.')) //Show the confimation alert box text
- { //Starts the if condition
- GM_setValue("CurrenciesConverter", true); //Defines the variable as true
- } //Finishes the if condition
- else //If the user pressed cancel
- { //Starts the else condition
- GM_setValue("CurrenciesConverter", false); //Defines the variable as false
- } //Finishes the else condition
- if (confirm('If you want to enable the Units Converter press OK.')) //Show the confimation alert box text
- { //Starts the if condition
- GM_setValue("UnitsConverter", true); //Defines the variable as true
- } //Finishes the if condition
- else //If the user pressed cancel
- { //Starts the else condition
- GM_setValue("UnitsConverter", false); //Defines the variable as false
- } //Finishes the else condition
- location.reload(); //Reloads the page
- } //Finishes the else condition
- } //Finishes the function SearchHiLight
- if (GM_getValue("SearchHiLight") === true) //If the SearchHiLight is enabled
- { //Starts the if condition
- var $ = window.jQuery; //Defines That The Symbol $ Is A jQuery
- var SelectedTextIsLink; //Creates a new global variable
- var Links = new RegExp(/\.org|\.ly|\.net|\.co|\.tv|\.me|\.biz|\.club|\.site|\.br|\.gov|\.io|\.jp|\.edu|\.au|\.in|\.it|\.ca|\.mx|\.fr|\.tw|\.il|\.uk|\.zoom\.us|\youtu.be/i); //Creates a global variable to check if a link is matched
- var FinalCurrency, SelectedText, SelectedTextSearch = ''; //Make these variables global
- $(function() { //Starts the function
- var menu = $("#highlight_menu", $("#highlight_menu_div")[0].shadowRoot); //Creates a variable to hold the menu element
- $(document.body).on('mouseup', function() { //When the user releases the mouse click after selecting something
- SelectedText = window.getSelection().toString(); //Creates a variable to store the selected text
- SelectedTextSearch = window.getSelection().toString().replaceAll('&', '%26'); //Creates a variable to store the selected text to be opened on google
- if (GM_getValue("CurrenciesConverter") === true) { //If the Currencies Converter option is activated
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = ''; //Remove the previous Currency text
- var Currencies = new RegExp(/^[ \t\xA0]*(?=.*?(\d+(?:.\d+)?))(?=(?:\1[ \t\xA0]*)?(Dólares|dolares|dólares|dollars|AUD|BGN|BRL|BCH|BTC|BYN|CAD|CHF|CNY|CZK|DKK|EUR|EGP|ETH|GBP|GEL|HKD|HRK|HUF|IDR|ILS|INR|JPY|LTC|KRW|MXN|MYR|NOK|NZD|PHP|PLN|RON|RM|RUB|SEK|SGD|THB|TRY|USD|UAH|ZAR|KZT|YTL|\$|R\$|HK\$|US\$|\$US|¥|€|Rp|kn|Kč|kr|zł|£|฿|₩))(?:\1[ \t\xA0]*\2|\2[ \t\xA0]*\1)[ \t\xA0]*$/i); //Adds an regex expression to the Currencies variable
- if (SelectedText.match(Currencies) !== null) //If the selected text is a currency
- { //Starts the if condition
- if (GM_getValue("YourLocalCurrency") === undefined) { //If the value is undefined
- var UserInput = prompt('This is the first time that you selected a currency.\nThis is the first and last time this popup will appear, so please write your local currency so that the script will always use your local currency to make exchange rate conversions.\n*Example of what you should write: BRL\nCAD\nUSD\netc...\n*Press OK'); //Gets the user input
- GM_setValue("YourLocalCurrency", UserInput); //Defines the variable as the UserInput
- } //Finishes the if condition
- (async () => { //Creates a function to get the final value
- var CurrencySymbol = SelectedText.match(Currencies)[2]; //Get the actual currency symbol supposing "it's correct"
- var CurrencySymbols = new RegExp(/\$|R\$|HK\$|US\$|\$US|¥|€|Rp|kn|Kč|kr|zł|£|฿|₩/i); //Create a variable to check for the selected currency symbols
- if (SelectedText.match(Currencies)[2].match(CurrencySymbols) !== null) //If the selected currency contains a symbol
- { //Starts the if condition
- switch (SelectedText.match(CurrencySymbols)[0].toLowerCase()) { //If the selected currency constains a symbol
- case '$': //Get the actual selected currency symbol
- case 'us$': //Get the actual selected currency symbol
- case '$us': //Get the actual selected currency symbol
- CurrencySymbol = 'USD'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'r$': //Get the actual selected currency symbol
- CurrencySymbol = 'BRL'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'hk$': //Get the actual selected currency symbol
- CurrencySymbol = 'HKD'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case "¥": //Get the actual selected currency symbol
- CurrencySymbol = 'JPY'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case '€': //Get the actual selected currency symbol
- CurrencySymbol = 'EUR'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'rp': //Get the actual selected currency symbol
- CurrencySymbol = 'IDR'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'kn': //Get the actual selected currency symbol
- CurrencySymbol = 'HRK'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'kč': //Get the actual selected currency symbol
- CurrencySymbol = 'CZK'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'kr': //Get the actual selected currency symbol
- CurrencySymbol = 'DKK'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case 'zł': //Get the actual selected currency symbol
- CurrencySymbol = 'PLN'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case '£': //Get the actual selected currency symbol
- CurrencySymbol = 'GBP'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case '฿': //Get the actual selected currency symbol
- CurrencySymbol = 'THB'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- case '₩': //Get the actual selected currency symbol
- CurrencySymbol = 'KRW'; //"Convert" the symbol to the Currency Letters
- break; //Stop trying to get the correct Currency Letters
- } //Finishes the switch condition
- } //Finishes the if condition
- const responsehtml = await (await fetch(`https://api.allorigins.win/get?url=${encodeURIComponent('https://www.google.com/search?q=' + SelectedText.match(Currencies)[1] + ' ' + CurrencySymbol + ' in ' + GM_getValue("YourLocalCurrency"))}`)).json(); //Fetch
- const newDocument = new DOMParser().parseFromString(responsehtml.contents, 'text/html'); //Parses the fetch response
- FinalCurrency = parseFloat(newDocument.querySelector("div.BNeawe.iBp4i.AP7Wnd").innerText.split(' ')[0].replaceAll(',', '')); //Gets the final amount of money
- if (SelectedText.match(Currencies)[2].match(CurrencySymbols) !== null) //If the selected currency contains a symbol
- { //Starts the if condition
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = CurrencySymbol + ' 🠂 ' + Intl.NumberFormat(navigator.language, {
- style: 'currency',
- currency: GM_getValue("YourLocalCurrency")
- }).format(FinalCurrency) + ' | '; //Show the FinalCurrency on the menu
- } //Finishes the if condition
- else //If the selected currency contains no symbol
- { //Starts the else condition
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = Intl.NumberFormat(navigator.language, {
- style: 'currency',
- currency: GM_getValue("YourLocalCurrency")
- }).format(FinalCurrency) + ' | '; //Show the FinalCurrency on the menu
- } //Finishes the else condition
- var text = document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText; //Save the actual currency text
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onmousemove = function() { //When the mouse is hovering the currency
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = "Copy | "; //Change the element text to copy
- }; //Finishes the onmousemove advent listener
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onmouseout = function() { //When the mouse leaves the button
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = text; //Return the previous text
- }; //Finishes the onmouseout advent listener
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onclick = function() { //When the user clicks on the currency
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = "Done | "; //Change the element text to copy
- navigator.clipboard.writeText(Intl.NumberFormat(navigator.language, {
- style: 'currency',
- currency: GM_getValue("YourLocalCurrency")
- }).format(FinalCurrency)); //Copy the Final Currency
- }; //Finishes the onclick advent listener
- })(); //Finishes the async function
- } //Finishes the if condition
- } //Finishes the if condition
- //___________________________________________________________________________________________________________________________________________________________________________
- if (GM_getValue("UnitsConverter") === true) { //If the Units Converter option is activated
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = ''; //Remove the previous Units text
- var Units = new RegExp(/^[ \t\xA0]*(-?\d+(?:[., ]\d+)?)[ \t\xA0]*("|inch|inches|in|cms?|centimeters?|meters?|ft|kg|lbs?|pounds?|kilograms?|ounces?|g|ozs?|fl oz|fl oz (us)|fluid ounces?|kphs?|km\/h|kilometers per hours?|mphs?|meters per hours?|°?º?[CF]|km\/hs?|ml|milliliters?|l|liters?|litres?|gal|gallons?|yards?|yd|Millimeter|millimetre|kilometers?|mi|mm|miles?|km|ft|fl|feets?|mts?|grams?|kilowatts?|kws?|brake horsepower|mechanical horsepower|hps?|bhps?|miles per gallons?|mpgs?|liters per 100 kilometers?|l\/100km|liquid quarts?|lqs?|foot-?pounds?|ft-?lbs?|lb fts?|newton-?meters?|nm|\^\d+)[ \t\xA0]*(?:\(\w+\)[ \t\xA0]*)?$/i); //Adds an regex expression to the Units variable
- if (SelectedText.match(Units) !== null) //If the selected text is an unit
- { //Starts the if condition
- var SelectedUnitValue = SelectedText.match(Units)[1].replaceAll(',', '.'); //Get the selected unit value and store the value to a variable
- switch (SelectedText.match(Units)[2].toLowerCase()) { //Set all letters to Lower Case and convert the selected unit to another unit the same way the Opera Browser does
- case 'inch': //Get the actual selected unit type
- case 'inches': //Get the actual selected unit type
- case 'in': //Get the actual selected unit type
- case '"': //Get the actual selected unit type
- var NewUnit = 'cm'; //"Convert" the current unit to another unit
- var ConvertedUnit = parseFloat(SelectedUnitValue * 2.54).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'centimeter': //Get the actual selected unit type
- case 'centimeters': //Get the actual selected unit type
- case 'cm': //Get the actual selected unit type
- case 'cms': //Get the actual selected unit type
- NewUnit = 'in'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 2.54).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mt': //Get the actual selected unit type
- case 'mts': //Get the actual selected unit type
- case 'meters': //Get the actual selected unit type
- case 'meter': //Get the actual selected unit type
- NewUnit = 'ft'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 3.281).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'kg': //Get the actual selected unit type
- case 'kilograms': //Get the actual selected unit type
- case 'kilogram': //Get the actual selected unit type
- NewUnit = 'lb'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 2.205).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'pound': //Get the actual selected unit type
- case 'pounds': //Get the actual selected unit type
- case 'lb': //Get the actual selected unit type
- case 'lbs': //Get the actual selected unit type
- NewUnit = 'kg'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 2.205).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'ounce': //Get the actual selected unit type
- case 'ounces': //Get the actual selected unit type
- case 'oz': //Get the actual selected unit type
- case 'ozs': //Get the actual selected unit type
- NewUnit = 'g'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 28.35).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'g': //Get the actual selected unit type
- case 'gram': //Get the actual selected unit type
- case 'grams': //Get the actual selected unit type
- NewUnit = 'oz'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 28.35).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'kilometer': //Get the actual selected unit type
- case 'kilometers': //Get the actual selected unit type
- NewUnit = 'mi'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.609).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'kph': //Get the actual selected unit type
- case 'kphs': //Get the actual selected unit type
- case 'km/h': //Get the actual selected unit type
- case 'km/hs': //Get the actual selected unit type
- case 'kilometers per hour': //Get the actual selected unit type
- case 'kilometers per hours': //Get the actual selected unit type
- NewUnit = 'mph'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 1000).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mph': //Get the actual selected unit type
- case 'mphs': //Get the actual selected unit type
- case 'meters per hour': //Get the actual selected unit type
- case 'meters per hours': //Get the actual selected unit type
- NewUnit = 'km/h'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.000).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mi': //Get the actual selected unit type
- case 'mile': //Get the actual selected unit type
- case 'miles': //Get the actual selected unit type
- NewUnit = 'km'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 1.609).toFixed(2); //Gets the converted unit result
- break; //Stop
- case '°c': //Get the actual selected unit type
- NewUnit = '°F'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat((SelectedUnitValue * 9 / 5) + 32).toFixed(2); //Gets the converted unit result
- break; //Stop
- case '°f': //Get the actual selected unit type
- NewUnit = '°C'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat((SelectedUnitValue - 32) * 5 / 9).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'ºc': //Get the actual selected unit type
- NewUnit = 'ºF'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat((SelectedUnitValue * 9 / 5) + 32).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'ºf': //Get the actual selected unit type
- NewUnit = 'ºC'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat((SelectedUnitValue - 32) * 5 / 9).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'ml': //Get the actual selected unit type
- case 'milliliter': //Get the actual selected unit type
- case 'milliliters': //Get the actual selected unit type
- NewUnit = 'fl oz (US)'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 29.574).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'fl oz (US)': //Get the actual selected unit type
- case 'fl oz': //Get the actual selected unit type
- case 'fl': //Get the actual selected unit type
- case 'fluid ounce': //Get the actual selected unit type
- case 'fluid ounces': //Get the actual selected unit type
- NewUnit = 'ml'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 29.574).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'l': //Get the actual selected unit type
- case 'litre': //Get the actual selected unit type
- case 'liter': //Get the actual selected unit type
- case 'litres': //Get the actual selected unit type
- case 'liters': //Get the actual selected unit type
- NewUnit = 'gal (US)'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 3.785).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'gal': //Get the actual selected unit type
- case 'gallon': //Get the actual selected unit type
- case 'gallons': //Get the actual selected unit type
- NewUnit = 'lt'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 3.785).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'yard': //Get the actual selected unit type
- case 'yards': //Get the actual selected unit type
- case 'yd': //Get the actual selected unit type
- NewUnit = 'm'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.094).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mm': //Get the actual selected unit type
- case 'millimetre': //Get the actual selected unit type
- case 'Millimeters': //Get the actual selected unit type
- NewUnit = 'in'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 25.4).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'ft': //Get the actual selected unit type
- case 'feet': //Get the actual selected unit type
- case 'feets': //Get the actual selected unit type
- NewUnit = 'mt'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 0.3048).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'kw': //Get the actual selected unit type
- case 'kws': //Get the actual selected unit type
- case 'kilowatt': //Get the actual selected unit type
- case 'kilowatts': //Get the actual selected unit type
- NewUnit = 'mhp'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 1.341).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mhp': //Get the actual selected unit type
- case 'mhps': //Get the actual selected unit type
- case 'hp': //Get the actual selected unit type
- case 'hps': //Get the actual selected unit type
- case 'brake horsepower': //Get the actual selected unit type
- case 'mechanical horsepower': //Get the actual selected unit type
- NewUnit = 'kw'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.341).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'mpg': //Get the actual selected unit type
- case 'mpgs': //Get the actual selected unit type
- case 'miles per gallon': //Get the actual selected unit type
- case 'miles per gallons': //Get the actual selected unit type
- NewUnit = 'l/100km'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(235.215 / SelectedUnitValue).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'l/100km': //Get the actual selected unit type
- case 'liters per 100 kilometer': //Get the actual selected unit type
- case 'liters per 100 kilometers': //Get the actual selected unit type
- NewUnit = 'US mpg'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(235.215 / SelectedUnitValue).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'lq': //Get the actual selected unit type
- case 'lqs': //Get the actual selected unit type
- case 'liquid quart': //Get the actual selected unit type
- case 'liquid quarts': //Get the actual selected unit type
- NewUnit = 'l'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.057).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'liter': //Get the actual selected unit type
- case 'liters': //Get the actual selected unit type
- NewUnit = 'lqs'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 1.057).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'foot-pound': //Get the actual selected unit type
- case 'foot-pounds': //Get the actual selected unit type
- case 'foot pound': //Get the actual selected unit type
- case 'foot pounds': //Get the actual selected unit type
- case 'ft-lbs': //Get the actual selected unit type
- case 'ft-lb': //Get the actual selected unit type
- case 'ft lbs': //Get the actual selected unit type
- case 'ft lb': //Get the actual selected unit type
- case 'lb ft': //Get the actual selected unit type
- case 'lb fts': //Get the actual selected unit type
- NewUnit = 'Nm'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue * 1.3558179483).toFixed(2); //Gets the converted unit result
- break; //Stop
- case 'newton-meter': //Get the actual selected unit type
- case 'newton-meters': //Get the actual selected unit type
- case 'newton meter': //Get the actual selected unit type
- case 'newton meters': //Get the actual selected unit type
- case 'nm': //Get the actual selected unit type
- NewUnit = 'ft lb'; //"Convert" the current unit to another unit
- ConvertedUnit = parseFloat(SelectedUnitValue / 1.3558179483).toFixed(2); //Gets the converted unit result
- break; //Stop
- case (SelectedText.match(Units)[2].replaceAll(',', '.').match(/\^/)).input: //Get the actual selected unit type
- NewUnit = 'power'; //"Convert" the current unit to another unit
- ConvertedUnit = Math.pow(parseFloat(SelectedUnitValue), parseFloat(SelectedText.split('^')[1])); //Gets the converted unit result
- break; //Stop
- } //Finishes the switch condition
- setTimeout(function() { //Starts the settimeout function
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = ConvertedUnit + ' ' + NewUnit + ' | '; //Display the converted unit results
- var text = document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText; //Save the actual converted unit value
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onmousemove = function() { //When the mouse is hovering the converted unit value
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = "Copy | "; //Change the element text to copy
- }; //Finishes the onmousemove advent listener
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onmouseout = function() { //When the mouse leaves the button
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = text; //Return the previous text
- }; //Finishes the onmouseout advent listener
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").onclick = function() { //When the user clicks on the converted unit value
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#ShowCurrencyORUnits").innerText = "Done | "; //Change the element text to copy
- navigator.clipboard.writeText(ConvertedUnit); //Copy the Final converted unit value
- }; //Finishes the onclick advent listener
- }, 0); //Finishes the settimeout
- } //Finishes the if condition
- } //Finishes the if condition
- //___________________________________________________________________________________________________________________________________________________________________________
- if (document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#SearchBTN").innerText === 'Open') //If the Search butotn text is 'Open'
- { //Starts the if condition
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#highlight_menu > ul").style.paddingLeft = '7px'; //Change the ul menu element padding left css style
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#SearchBTN").innerText = 'Search'; //The next time that the menu is shown display the button text as Search again
- SelectedTextIsLink = false; //Add the value false to the variable to make common words searchable again
- } //Finishes the if condition
- if (SelectedText.match(Links) !== null) //If the selected text is a link
- { //Starts the if condition
- SelectedTextIsLink = true; //Add the value true to the variable
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#highlight_menu > ul").style.paddingLeft = '7px'; //Change the ul menu element padding left css style
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#SearchBTN").innerText = 'Open'; //Change the button text to Open
- } //Finishes the if condition
- //___________________________________________________________________________________________________________________________________________________________________________
- if (document.getSelection().toString().trim() !== '') { //If the user selected something
- var p = document.getSelection().getRangeAt(0).getBoundingClientRect(); //Create a new variable to get the positions later
- menu.css({ //Set the menu css
- left: (p.left + (p.width / 2)) - (menu.width() / 2), //Make the menu show on the correct left position
- top: (p.top - menu.height() - 10), //Make the menu show on the correct top position
- display: '' //Show the menu on the page
- }).animate({ //Creates the animation
- opacity: 1 //Set the animation opacity
- }, 0); //Add an animation to the menu
- menu.addClass('highlight_menu_animate'); //Add the class to animate the menu
- //$('head').append('<style>.highlight_menu_animate .popuptext::after { content: ""; top: 100%; left: 50%; margin-left: -10px; position: absolute; border-style: solid; border-color: #292929 transparent transparent transparent; }</style>'); //Create a class to animate the menu
- return; //Keep displaying the menu box
- } //Finishes the if condition
- menu.animate({ //Creates the animation
- opacity: 0 //Set the animation opacity
- }); //Hide the menu If the user clicked on any of the options
- setTimeout(function() { //Hide the menu after some time
- menu.css({ //Set the menu css
- display: 'none' //Hide the menu on the page
- }); //Hide the menu If the user clicked on any of the options
- }, 300); //Finishes the setTimeout function
- }); //Finishes the mouseup advent listener
- }); //Finishes the function
- //___________________________________________________________________________________________________________________________________________________________________________
- var HtmlMenu = document.createElement('div'); //Creates a variable
- HtmlMenu.setAttribute("id", "highlight_menu_div"); //Set the div id to the HtmlMenu variable
- HtmlMenu.attachShadow({
- mode: 'open'
- }).innerHTML = '<style>.highlight_menu_animate .popuptext::after { content: ""; top: 100%; left: 50%; margin-left: -10px; border-top-width: 10px; border-right-width: 10px; border-left-width: 10px; position: absolute; border-style: solid; border-color: #292929 transparent transparent transparent; }</style><div id="highlight_menu" style="display:none; color: #fff; position: fixed; background-color: #292929; font-size: 13.4px; font-family: monospace; z-index: 9999;"> <ul style="margin-block-end: 10px; padding-left: 7px; padding-right: 7px; margin-top:10px;"><li class="popuptext" id="ShowCurrencyORUnits" style="cursor: pointer; display: inline;">' + FinalCurrency + '</li><li class="popuptext" id="SearchBTN" style="cursor: pointer; display: inline;">Search</li><li class="popuptext" id="CopyBTN" style="cursor: pointer; display: inline;"> | Copy</li></ul></div>'; //Set the HtmlMenu div html
- if (document.body.textContent !== '' || document.body.innerText !== '') //If the body has any text
- { //Starts the if condition
- document.body.appendChild(HtmlMenu); //Append the HtmlMenu div to the page
- } //Finishes the if condition
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#SearchBTN").onmousedown = function() { //When the user clicks on the Search button
- var LinkfyOrSearch = 'https://www.google.com/search?q='; //Creates a variable to open google
- if (SelectedTextIsLink === true) //If the selected text is a link
- { //Starts the if condition
- LinkfyOrSearch = 'https://'; //Make the non http and non https links able to be opened
- } //Finishes the if condition
- if (SelectedText.match(/http:|https:/) !== null) //If the selected text is a link that already has http or https
- { //Starts the if condition
- LinkfyOrSearch = ''; //Remove the https:// that was previsouly added to this variable
- } //Finishes the if condition
- window.open(LinkfyOrSearch + SelectedTextSearch); //Open google and search for the selected word(s)
- window.getSelection().removeAllRanges(); //UnSelect the selected text after the search button is clicked so that if the user clicks on the past selected text the menu won't show up again.
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#highlight_menu").style.display = 'none'; //Hide the menu
- }; //Finishes the onmousedown advent listener
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#CopyBTN").onmousedown = function() { //When the user clicks on the copy button
- navigator.clipboard.writeText(SelectedText); //Copy the selected word(s)
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#CopyBTN").innerText = ' | Done'; //Change the button text to Done
- setTimeout(function() { //Starts the setTimeout function
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#CopyBTN").innerText = ' | Copy'; //The next time that the menu is shown display the button text as Copy again, instead of Done
- }, 400); //Finishes the setTimeout function
- }; //Finishes the onmousedown advent listener
- //___________________________________________________________________________________________________________________________________________________________________________
- setTimeout(function() { //Starts the setTimeout function
- var AllIframes = document.querySelectorAll("iframe"); //Get all iframes on the page
- for (var i = AllIframes.length; i--;) { //Starts the for condition
- if (AllIframes[i].allow.match('clipboard-write;') === null && AllIframes[i].src.match(Links) !== null && AllIframes[i].src.match(/youtube|dailymotion|vimeo|streamtape|mcloud|vidstream|mp4upload|googlevideo|kaltura|crunchyroll|animesup|google.com\/recaptcha\/|blank.html|\.mp4/) === null && location.href.match(/animeshouse.net|nowanimes.com\/play/) === null) //If the iframe doesn't have the clipboard-write attribute yet and the iframed source attribute has a link. And if the iframe isn't an YT/dailymotion or vimeo video.
- { //Starts the if condition
- AllIframes[i].allow = AllIframes[i].allow + 'clipboard-write;'; //Add the permission to copy the iframe text
- AllIframes[i].src = AllIframes[i].src; //Reload the iframe to make the iframe have the new permission
- } //Finishes the if condition
- } //Finishes the for condition
- }, 4000); //Finishes the setTimeout function
- window.addEventListener('scroll', async function() { //When the page is scrolled
- document.querySelector("#highlight_menu_div").shadowRoot.querySelector("#highlight_menu").style.display = 'none'; //Hide the menu
- if (LeftClicked === false && SelectedText !== '') { //If the Left Click isn't being holded, and if something is currently selected
- window.getSelection().removeAllRanges(); //UnSelect the selected text when scrolling the page down so that if the user clicks on the past selected text the menu won't show up again.
- } //Finishes the if condition
- }); //Finishes the onscroll advent listener
- } //Finishes the if condition