// ==UserScript== // @name Coord MZ Hockey Alt // @namespace http://tampermonkey.net/ // @version 0.2 // @description You can establish by means of coordinates each position of your players in the Hockey tactics. // @author jrcl // @match https://www.managerzone.com/?p=tactics* // @icon none // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; var coordsContainerAux = document.getElementById('formation-container'); var input = ''; var _x = '--'; var _y = '--'; if( hasClass(document.getElementById('tactics_box'), 'hockey')) { enableActionsOnTabs(); enableActionForEachLine(); addEventsToEachPlayer(); addCoordinates(); document.addEventListener("keydown", setByKeys); document.addEventListener("click", generalClickEvent); } function addEventsToEachPlayer() { var checkExist = setInterval(function() { if (document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable').length) { var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable'); for (var i = 0; i < players.length; ++i) { players[i].addEventListener('click', updateCoordsLabel, false); players[i].addEventListener('keydown', updateCoordsLabel, false); } clearInterval(checkExist); } }, 1000); } function updateCoordsLabel(player) { getOffsetPos(player.path[1]); addCoordinates(); } function getOffsetPos( el ) { _y = -(el.offsetTop)+49; _x = el.offsetLeft-19; } function addCoordinates() { let coordDisplay = "none"; if (hasClass(document.getElementById('tttb'), 'ui-state-active')) coordDisplay = "block"; let coord = document.getElementById('divCoords'); if(coord) coord.parentElement.removeChild(coord); var coordsContainer = document.getElementById('formation-container'); var divCoords = "
Player position: **coords**
"; insertCoordinates(); var node = createElementFromHTML(divCoords.replace('**coords**', _x + _y)); coordsContainer.appendChild(node); addEventToCoordinates(); } function createElementFromHTML(htmlString) { var div = document.createElement('div'); div.innerHTML = htmlString.trim(); // Change this to div.childNodes to support multiple top-level nodes return div.firstChild; } function addEventToCoordinates() { var inpX = document.getElementById('inputX'); var inpY = document.getElementById('inputY'); inpX.addEventListener('keyup', setPlayerPos, false); inpY.addEventListener('keyup', setPlayerPos, false); } function setPlayerPos(input) { // Input define c x or y var c = input.currentTarget.id === 'inputX' ? 'x' : 'y'; // get element by input let selectedInput = c === 'x' ? document.getElementById('inputX') : document.getElementById('inputY'); // get selected player var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected'); if(players.length) { let xVal = c === 'x' ? input.currentTarget.value : document.getElementById('inputX').value; let yVal = c === 'y' ? input.currentTarget.value : document.getElementById('inputY').value; if(isInsideTheInterval(c == 'x' ? xVal : yVal, c)) { removeBorder(selectedInput); players[0].style.left = (parseInt(xVal) + 19) + "px"; players[0].style.top = (-parseInt(yVal) + 49) + "px"; } else { addBorder(selectedInput); } } } function insertCoordinates() { var inpX = input.replace('**id**','inputX').replace('**val**', _x); var inpY = input.replace('**id**','inputY').replace('**val**', _y); _x = ' X: ' + inpX; _y = ' Y: ' + inpY; } function isInsideTheInterval(number, coordinate) { if(!isNaN(number)) { var integer = parseInt(number); if(coordinate == 'x') { return integer <= 29 && integer >= -29; } else if(coordinate == 'y') { return integer <= 59 && integer >= -59; } else { return false; } } else { return false; } } function setByKeys(key) { if((key.keyCode === 37 || key.keyCode === 38 || key.keyCode === 39 || key.keyCode === 40) && (key.currentTarget.activeElement.localName != 'input')) { var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected'); var playerCollision = document.getElementsByClassName('fieldpos ui-selected fieldpos-collision'); //player selected with or without collision if(players.length) { _y = -(players[0].offsetTop) + 49; _x = players[0].offsetLeft - 19; } else if (playerCollision.length) { _y = -(playerCollision[0].offsetTop) + 49; _x = playerCollision[0].offsetLeft - 19; } else { _y = '--'; _x = '--'; } addCoordinates(); } } function generalClickEvent(ev) { if(ev.currentTarget.activeElement.localName === 'select') return false; var players = document.getElementsByClassName('fieldpos fieldpos-ok ui-draggable ui-selected'); if(!players.length) { _y = '--'; _x = '--'; addCoordinates(); } } function enableActionsOnTabs() { var tabs = document.getElementsByClassName('ui-state-default ui-corner-top'); let ttta = document.getElementById('ttta'); let tttb = document.getElementById('tttb'); ttta.addEventListener('click',reset); tttb.addEventListener('click',reset); for (var i = 0; i < tabs.length; ++i) { tabs[i].addEventListener("click", function() { addEventsToEachPlayer(); enableActionForEachLine(); }); } } function enableActionForEachLine() { var altTactics = document.getElementById('formation_select'); altTactics.addEventListener('change',reset); } function reset() { _y = '--'; _x = '--'; addEventsToEachPlayer(); addCoordinates(); } function addBorder(input) { input.style.border = 'solid 4px red'; } function removeBorder(input) { input.style.border = null; } function hasClass(element, className) { return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1; } })();