Exchange Modal for Facebook Ads

Adds a draggable exchange rate modal to the webpage

当前为 2023-11-24 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Exchange Modal for Facebook Ads
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Adds a draggable exchange rate modal to the webpage
// @author       Jamir-boop
// @match        https://www.google.com.pe/
// @license		 MIT
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Insert CSS for the modal
    const css = `
		#exchangeModal{
		  font-family: 'Montserrat';
		  font-size: 12px;
		}

		#exchangeModal {
		    position: fixed;
		    height: 140px;
            width: 190px;
            bottom: 0;
            right: 0;
		    background-color: #202020; /* Black background with opacity */
		    z-index: 9999;
		    cursor: default; /* Default cursor for modal content */
		    padding: 5px;
		    border: 1px solid #888;
		    text-align: center;
    		color: white;
            border-radius: 10px;
            display: none; /* Hidden by default */
		}

		/* Adjustments for the close button */
		#closeButton {
		  position: absolute;
		  top: -15px;
		  right: 0;
		  background-color: transparent;
		  color: red;
		  border: none;
		  color: white;
		  cursor: pointer;
		  width: 20px;
		  heigth: 20px;
		  padding: 2px;
		}
		#closeButton:hover{
		  background-color: red;
		}

		#exchangeModal h6 {
		  all: unset;
		  display: block;
		  margin-top: 0;
		  padding: 20px 0;
		  color: white;
		  font-weight: bold;
		}

		#usdValue{
			color: black;
		}

		#exchangeModal label {
		  margin-right: 10px;
		}

		#exchangeModal input[type=text] {
		  width: 50px;
		  padding: 3px;
		}

		button {
		  color: white;
		  background-color: transparent;
		  border: 1px solid #FFFFFF;
		  padding: 5px;
		  width: 80px;
		  margin: 20px 5px;
		  cursor: pointer;
          border-radius: 10px;
		}

		button:hover {
		  background-color: grey;
		}

		#showModalButton {
            position: fixed;
            width: 50px;
            height: 50px;
            bottom: 0;
            right: 0;
            background-color: red;
            z-index: 10000;
            cursor: pointer;
        }
    `;
    const styleSheet = document.createElement("style");
    styleSheet.type = "text/css";
    styleSheet.innerText = css;
    document.head.appendChild(styleSheet);

    // Insert HTML for the modal
    const modalHtml = `
<img src="https://i.ibb.co/B4GJrX5/Untitled.webp" alt="Untitled" border="0" id="showModalButton">
<div id="exchangeModal">
  <h6 id="modalHeader">Actualizar tipo de cambio</h6> <!-- Draggable area -->
  <button id="closeButton" title="Close">X</button>
  <label for="usdValue">valor USD</label>
  <input type="text" id="usdValue" value="0">
  <br>
  <button id="undoButton">Deshacer</button>
  <button id="applyButton">Aplicar</button>
</div>
    `;
    document.body.insertAdjacentHTML('beforeend', modalHtml);

    // Make the element draggable
    function dragElement(element, dragHandle) {
        var pos1 = 0,
            pos2 = 0,
            pos3 = 0,
            pos4 = 0;

        // if present, the header is where you move the DIV from:
        if (dragHandle) {
            // if header is specified, only start the drag process when the header is clicked
            dragHandle.onmousedown = dragMouseDown;
        } else {
            // otherwise, move the DIV from anywhere inside the DIV
            element.onmousedown = dragMouseDown;
        }

        function dragMouseDown(e) {
            e = e || window.event;
            e.preventDefault();
            // get the mouse cursor position at startup:
            pos3 = e.clientX;
            pos4 = e.clientY;
            document.onmouseup = closeDragElement;
            // call a function whenever the cursor moves:
            document.onmousemove = elementDrag;
        }

        function elementDrag(e) {
            e = e || window.event;
            e.preventDefault();
            // calculate the new cursor position:
            pos1 = pos3 - e.clientX;
            pos2 = pos4 - e.clientY;
            pos3 = e.clientX;
            pos4 = e.clientY;
            // set the element's new position:
            element.style.top = (element.offsetTop - pos2) + "px";
            element.style.left = (element.offsetLeft - pos1) + "px";
        }

        function closeDragElement() {
            // stop moving when mouse button is released:
            document.onmouseup = null;
            document.onmousemove = null;
        }
    }

    // Apply the drag function to your element
    dragElement(document.getElementById("exchangeModal"), document.getElementById("modalHeader"));
    dragElement(document.getElementById("showModalButton"), document.getElementById("showModalButton"));

    // Function to show the modal
    function showModal() {
        fetchExchangeRate();
        document.getElementById('exchangeModal').style.display = 'block';
        document.getElementById('showModalButton').style.display = 'none';
    }

    // Function to hide the modal and show the small box
    function hideModal() {
        document.getElementById('exchangeModal').style.display = 'none';
        document.getElementById('showModalButton').style.display = 'block';
    }

    // Function to fetch the exchange rate
    function fetchExchangeRate() {
        // The URL of the API providing exchange rate data.
        // Make sure to replace `YOUR-API-KEY` with your actual API key if required.
        const apiURL = 'https://api.exchangerate-api.com/v4/latest/USD';

        fetch(apiURL)
            .then(response => {
                if (!response.ok) {
                    throw new Error('Network response was not ok ' + response.statusText);
                }
                return response.json();
            })
            .then(data => {
                // Assuming the API returns a JSON object with a property `rates` containing the rates.
                const rate = data.rates.PEN;
                // Set the exchange rate in your modal.
                document.getElementById('usdValue').value = rate.toFixed(2);
            })
            .catch(error => {
                console.error('There has been a problem with your fetch operation:', error);
            });
    }
    fetchExchangeRate();

    // Event listener for close button
    document.getElementById('closeButton').addEventListener('click', hideModal);

    // Event listener for the small box to show the modal
    document.getElementById('showModalButton').addEventListener('click', showModal);

    // Event listeners for other buttons as needed
    // ...
})();