dofus-autopilot-traveler/dofusTravel.js
2021-01-16 00:49:50 +01:00

110 lines
4.9 KiB
JavaScript

// ==UserScript==
// @name Travel picker - dofuspourlesnoobs.com
// @match https://www.dofuspourlesnoobs.com/*
// @match https://www.dofus.com/*
// @match https://dofus.jeuxonline.info/*
// @match https://www.gamosaurus.com/jeux/dofus/*
// @match https://dofus-map.com/*
// @match https://dofus-portals.fr/*
// @version 1.5
// @author Mazoyer Alexis
// @description Permet de rendre cliquable toutes les positions [x,y] indiquées sur le site dofuspourlesnoobs
// ==/UserScript==
const travelCommand = '/travel '
const parameters = new URLSearchParams(window.location.search)
const displayPopup = (text, status) => {
let popupDiv = document.createElement('div')
let popupText = document.createElement('p')
popupText.setAttribute('style', 'color: white; font-size: 1.3em')
popupDiv.setAttribute('style', 'display: inline-block; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 5px; background-color: #5FE026; border: solid 1px #46A31D; padding: 5px 15px; transition: opacity 1s ease-in-out; transition-delay: 1s')
if (!status || status === 'success') {
popupDiv.style.borderColor = '#46A31D'
popupDiv.style.backgroundColor = '#5FE026'
} else {
popupDiv.style.borderColor = '#992144'
popupDiv.style.backgroundColor = '#C70039'
}
popupText.textContent = text
popupDiv.appendChild(popupText)
document.body.appendChild(popupDiv)
window.setTimeout(_ => {
popupDiv.style.opacity = 0
window.setTimeout(_ => {
popupDiv.parentNode.removeChild(popupDiv)
}, 3000)
}, 50)
}
const copyTextToClipboard = (text, status) => {
let textArea = document.createElement("textarea");
textArea.setAttribute('style', 'position: fixed; top: 0; left: 0; width: 2em; height: 2em; padding: 0; border: none; outline: none; boxShadow: none; background: transparent;')
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
let successful = document.execCommand('copy');
let msg = successful ? 'successful' : 'unsuccessful';
if (successful) displayPopup(text + ' a bien été copié !', 'success')
else displayPopup(msg, 'error')
} catch (err) {}
document.body.removeChild(textArea);
}
const getPositionArray = chaine => {
const rule = /[-]{0,1}[0-9]{1,2}/g
return chaine.match(rule)
}
if (!window.location.href.includes('dofus-map')) {
(() => {
const match = /[\[]{0,1}(\s)*(-){0,1}([0-9]+)[\s]*,[\s]*(-){0,1}([0-9]+)[\s]*[\]]{0,1}/g
document.body.innerHTML = document.body.innerHTML.replace(match, "<goto data-x=\"$2$3\" data-y=\"$4$5\">$1[$2$3,$4$5]</goto>");
const allGotos = document.getElementsByTagName('goto');
for (let i = 0; i < allGotos.length; i++) {
allGotos[i].addEventListener('click', event => {
if (event.srcElement.getAttribute('data-x') !== null && event.srcElement.getAttribute('data-y') !== null && !isNaN(event.srcElement.getAttribute('data-x').replace('-', '')) && !isNaN(event.srcElement.getAttribute('data-y').replace('-', ''))) {
copyTextToClipboard(travelCommand + event.srcElement.getAttribute('data-x') + ',' + event.srcElement.getAttribute('data-y'))
} else {
displayPopup('Cette coordonnée n\'est pas compatible :(', 'error')
}
})
allGotos[i].addEventListener('contextmenu', event => {
event.preventDefault()
if (event.srcElement.getAttribute('data-x') !== null && event.srcElement.getAttribute('data-y') !== null && !isNaN(event.srcElement.getAttribute('data-x').replace('-', '')) && !isNaN(event.srcElement.getAttribute('data-y').replace('-', ''))) {
copyTextToClipboard('[' + event.srcElement.getAttribute('data-x') + ',' + event.srcElement.getAttribute('data-y') + ']')
} else {
displayPopup('Cette coordonnée n\'est pas compatible :(', 'error')
}
})
}
})()
} else {
const result = document.getElementById('secondLine')
let observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.addedNodes.length) {
const position = getPositionArray(result.innerHTML.replace( /(<([^>]+)>)/ig, '').replace(';', ',').replace(/\s/g, ''))
if(position && position.length === 2) {
if (parameters.has('noob')) {
copyTextToClipboard('[' + position[0] + ',' + position[1] + ']')
} else {
copyTextToClipboard(travelCommand + position[0] + ',' + position[1])
}
}
}
})
})
observer.observe(result, {
childList: true
})
}