diff --git a/dofusTravel.user.js b/dofusTravel.user.js index d49739b..8d1fd8a 100644 --- a/dofusTravel.user.js +++ b/dofusTravel.user.js @@ -6,26 +6,42 @@ // @match https://www.gamosaurus.com/jeux/dofus/* // @match https://dofus-map.com/* // @match https://dofus-portals.fr/* -// @version 1.2.2 -// @author Mazoyer Alexis +// @version 1.2.3 +// @author BoBobby // @description Permet de rendre cliquable toutes les positions [x,y] indiquées sur les sites dofuspourlesnoobs/dofus.jeuxonline.com/gamosaurus et dofus-map. Copie automatiquement /travel x,y lors des chasses sur dofus-map.com/hunt // ==/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; z-index: 9999999;') - if (!status || status === 'success') { - popupDiv.style.borderColor = '#46A31D' - popupDiv.style.backgroundColor = '#5FE026' - } else { - popupDiv.style.borderColor = '#992144' - popupDiv.style.backgroundColor = '#C70039' +const _settings = { + travelCommand: '/travel ', + popupTextStyle: 'color: white; font-size: 1.3em', + popupDivStyle: '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; z-index: 9999999;', + textareaStyle: 'position: fixed; top: 0; left: 0; width: 2em; height: 2em; padding: 0; border: none; outline: none; boxShadow: none; background: transparent;', + colors: { + success: { + background: '#5FE026', + border: '#46A31D' + }, + error: { + background: '#C70039', + border: '#992144' + } } - popupText.textContent = text +} +const parameters = new URLSearchParams(window.location.search) +const displayPopup = (prmText, prmStatus) => { + let popupDiv = document.createElement('div') + let popupText = document.createElement('p') + popupText.setAttribute('style', _settings.popupTextStyle) + popupDiv.setAttribute('style', _settings.popupDivStyle) + if (!prmStatus || prmStatus === 'success') { + popupDiv.style.borderColor = _settings.colors.success.border + popupDiv.style.backgroundColor = _settings.colors.success.background + } else { + popupDiv.style.borderColor = _settings.colors.error.border + popupDiv.style.backgroundColor = _settings.colors.error.background + } + + popupText.textContent = prmText popupDiv.appendChild(popupText) document.body.appendChild(popupDiv) window.setTimeout(_ => { @@ -39,7 +55,7 @@ const displayPopup = (text, status) => { 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.setAttribute('style', _settings.textareaStyle) textArea.value = text; @@ -50,8 +66,8 @@ const copyTextToClipboard = (text, status) => { try { let successful = document.execCommand('copy'); let msg = successful ? 'successful' : 'unsuccessful'; - if (successful) displayPopup(text + ' a bien été copié !', 'success') - else displayPopup(msg, 'error') + if (successful) displayPopup(text + ' a bien été copié !', status ? status : 'success') + else displayPopup(msg, status ? status : 'error') } catch (err) {} document.body.removeChild(textArea); } @@ -63,7 +79,6 @@ const getPositionArray = chaine => { if (!window.location.href.includes('dofus-map')) { (() => { - // const match = /(?$1[$2$3,$4$5]"); @@ -71,7 +86,7 @@ if (!window.location.href.includes('dofus-map')) { for (let i = 0; i < allGotos.length; i++) { allGotos[i].addEventListener('click', event => { if (event.target.getAttribute('data-x') !== null && event.target.getAttribute('data-y') !== null && !isNaN(event.target.getAttribute('data-x').replace('-', '')) && !isNaN(event.target.getAttribute('data-y').replace('-', ''))) { - copyTextToClipboard(travelCommand + event.target.getAttribute('data-x') + ',' + event.target.getAttribute('data-y')) + copyTextToClipboard(_settings.travelCommand + event.target.getAttribute('data-x') + ',' + event.target.getAttribute('data-y')) } else { displayPopup('Cette coordonnée n\'est pas compatible :(', 'error') } @@ -80,6 +95,9 @@ if (!window.location.href.includes('dofus-map')) { allGotos[i].addEventListener('contextmenu', event => { event.preventDefault() if (event.target.getAttribute('data-x') !== null && event.target.getAttribute('data-y') !== null && !isNaN(event.target.getAttribute('data-x').replace('-', '')) && !isNaN(event.target.getAttribute('data-y').replace('-', ''))) { + /** + * Ajouter ?noob à la fin de l'url pour que le message copié soit simplement la position [x,y] au lieu de la commande /travel x,y, pour les noobs qui n'ont pas l'autopilot + */ copyTextToClipboard((parameters.has('noob') ? '/p ' : '') + '[' + event.target.getAttribute('data-x') + ',' + event.target.getAttribute('data-y') + ']') } else { displayPopup('Cette coordonnée n\'est pas compatible :(', 'error') @@ -97,9 +115,12 @@ if (!window.location.href.includes('dofus-map')) { const position = getPositionArray(result.innerHTML.replace( /(<([^>]+)>)/ig, '').replace(';', ',').replace(/\s/g, '')) if(position && position.length === 2) { if (parameters.has('noob')) { + /** + * Ajouter ?noob à la fin de l'url pour que le message copié soit simplement la position [x,y] au lieu de la commande /travel x,y, pour les noobs qui n'ont pas l'autopilot + */ copyTextToClipboard('/p [' + position[0] + ',' + position[1] + ']') } else { - copyTextToClipboard(travelCommand + position[0] + ',' + position[1]) + copyTextToClipboard(_settings.travelCommand + position[0] + ',' + position[1]) } } } @@ -115,6 +136,9 @@ if (!window.location.href.includes('dofus-map')) { const mapElement = document.getElementById('mapContainer') mapElement.addEventListener('mousedown', mousedownEvent => { + /** + * Détecte si on a déplacé la map pour éviter de copier des positions non souhaitées + */ let moved = false mapElement.addEventListener('mousemove', moveEvent => moved = true) mapElement.addEventListener('mouseup', mouseupEvent => { @@ -122,9 +146,12 @@ if (!window.location.href.includes('dofus-map')) { if (position && position.length === 2 && !moved) { if (parameters.has('noob')) { + /** + * Ajouter ?noob à la fin de l'url pour que le message copié soit simplement la position [x,y] au lieu de la commande /travel x,y, pour les noobs qui n'ont pas l'autopilot + */ copyTextToClipboard('/p [' + position[0] + ',' + position[1] + ']') } else { - copyTextToClipboard(travelCommand + position[0] + ',' + position[1]) + copyTextToClipboard(_settings.travelCommand + position[0] + ',' + position[1]) } } })