Adds a draggable exchange rate modal to the webpage
当前为
// ==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
// ...
})();