diff --git a/dist/mapCoordsPicker.js b/dist/mapCoordsPicker.js index 9b1fa23..6c186cb 100644 --- a/dist/mapCoordsPicker.js +++ b/dist/mapCoordsPicker.js @@ -124,24 +124,34 @@ const $bfe8b11df18d9acc480580699499dd1a$var$saveConfig = () => { $3d935538f644f492fe681e00121114a4$export$setItem($bfe8b11df18d9acc480580699499dd1a$var$LOCAL_STORAGE_KEY, $bfe8b11df18d9acc480580699499dd1a$var$config); }; - const $bfe8b11df18d9acc480580699499dd1a$var$villageIDByCoords = (x, y) => { + const $bfe8b11df18d9acc480580699499dd1a$var$getVillageIDByCoords = (x, y) => { const xy = parseInt(("").concat(x).concat(y), 10); const village = TWMap.villages[xy]; - if (village) { - return TWMap.villages[xy].id; + if (!village) { + return NaN; } - return NaN; + return village.id; }; - const $bfe8b11df18d9acc480580699499dd1a$var$setVillageBorder = function setVillageBorder(x, y) { + const $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillage = function addBorderToVillage(x, y) { let color = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'transparent'; - const id = $bfe8b11df18d9acc480580699499dd1a$var$villageIDByCoords(x, y); - if (isNaN(id)) return; - const village = document.querySelector('#map_village_' + id); + const village = document.querySelector('#map_village_' + $bfe8b11df18d9acc480580699499dd1a$var$getVillageIDByCoords(x, y)); if (village) { village.style.boxSizing = 'border-box'; village.style.border = color !== 'transparent' ? ("5px solid ").concat(color) : 'none'; } }; + const $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillagesInGroup = function addBorderToVillagesInGroup(name) { + let color = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + $bfe8b11df18d9acc480580699499dd1a$var$config.groups[name].villages.forEach(village => { + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillage(village.x, village.y, color ? color : $bfe8b11df18d9acc480580699499dd1a$var$config.groups[name].color); + }); + }; + const $bfe8b11df18d9acc480580699499dd1a$var$addBorderToSelectedVillages = function addBorderToSelectedVillages() { + let color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + for (let name in $bfe8b11df18d9acc480580699499dd1a$var$config.groups) { + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillagesInGroup(name, color); + } + }; const $bfe8b11df18d9acc480580699499dd1a$var$deleteVillageFromOtherGroups = key => { for (let name in $bfe8b11df18d9acc480580699499dd1a$var$config.groups) { if (name === $bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup) return; @@ -150,20 +160,22 @@ }; const $bfe8b11df18d9acc480580699499dd1a$var$handleMapClick = (x, y, e) => { e.preventDefault(); - const key = ("").concat(x, "|").concat(y); - const selected = $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages.some(village => village.key === key); - if (selected) { - $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages = $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages.filter(village => village.key !== key); - $bfe8b11df18d9acc480580699499dd1a$var$setVillageBorder(x, y, 'transparent'); - } else { - $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages = [...$bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages, { - x, - y, - key - }]; - $bfe8b11df18d9acc480580699499dd1a$var$setVillageBorder(x, y, $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].color); - $bfe8b11df18d9acc480580699499dd1a$var$deleteVillageFromOtherGroups(key); + if (isNaN($bfe8b11df18d9acc480580699499dd1a$var$getVillageIDByCoords(x, y))) { + return; } + const key = ("").concat(x, "|").concat(y); + if ($bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages.some(village => village.key === key)) { + $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages = $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages.filter(village => village.key !== key); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillage(x, y, 'transparent'); + return; + } + $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages = [...$bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].villages, { + x, + y, + key + }]; + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillage(x, y, $bfe8b11df18d9acc480580699499dd1a$var$config.groups[$bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup].color); + $bfe8b11df18d9acc480580699499dd1a$var$deleteVillageFromOtherGroups(key); }; const $bfe8b11df18d9acc480580699499dd1a$var$renderForm = (container, group) => { const selected = group && group.name !== $bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup; @@ -174,7 +186,7 @@ e.preventDefault(); if (group) { if (group.name === $bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup) $bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup = e.target[1].value; - $bfe8b11df18d9acc480580699499dd1a$var$colorizeGroupVillages(group.name, e.target[0].value); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillagesInGroup(group.name, e.target[0].value); $bfe8b11df18d9acc480580699499dd1a$var$config.groups[e.target[1].value] = $bfe8b11df18d9acc480580699499dd1a$var$_objectSpread($bfe8b11df18d9acc480580699499dd1a$var$_objectSpread({}, $bfe8b11df18d9acc480580699499dd1a$var$config.groups[group.name]), {}, { color: e.target[0].value }); @@ -192,7 +204,7 @@ if ($bfe8b11df18d9acc480580699499dd1a$var$config.selectedGroup === group.name) { return UI.ErrorMessage($bfe8b11df18d9acc480580699499dd1a$var$translations.cannotDeleteSelectedGroup); } - $bfe8b11df18d9acc480580699499dd1a$var$colorizeGroupVillages(group.name, 'transparent'); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToVillagesInGroup(group.name, 'transparent'); delete $bfe8b11df18d9acc480580699499dd1a$var$config.groups[group.name]; form.remove(); }); @@ -231,7 +243,7 @@ }; const $bfe8b11df18d9acc480580699499dd1a$var$handleSpawnSector = (data, sector) => { TWMap.mapHandler.__spawnSector(data, sector); - $bfe8b11df18d9acc480580699499dd1a$var$colorizeVillages(); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToSelectedVillages(); }; const $bfe8b11df18d9acc480580699499dd1a$var$handleStart = () => { TWMap.map.handler.__onClick = TWMap.map.handler.onClick; @@ -240,7 +252,7 @@ TWMap.mapHandler.spawnSector = $bfe8b11df18d9acc480580699499dd1a$var$handleSpawnSector; $bfe8b11df18d9acc480580699499dd1a$var$button.innerHTML = $bfe8b11df18d9acc480580699499dd1a$var$translations.stopCoordsPicker; $bfe8b11df18d9acc480580699499dd1a$var$renderActions(); - $bfe8b11df18d9acc480580699499dd1a$var$colorizeVillages(); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToSelectedVillages(); $bfe8b11df18d9acc480580699499dd1a$var$renderGroups(); $bfe8b11df18d9acc480580699499dd1a$var$intervalID = setInterval($bfe8b11df18d9acc480580699499dd1a$var$saveConfig, 500); }; @@ -254,7 +266,7 @@ $bfe8b11df18d9acc480580699499dd1a$var$button.innerHTML = $bfe8b11df18d9acc480580699499dd1a$var$translations.startCoordsPicker; $bfe8b11df18d9acc480580699499dd1a$var$formsContainer.innerHTML = ''; $bfe8b11df18d9acc480580699499dd1a$var$actionsContainer.innerHTML = ''; - $bfe8b11df18d9acc480580699499dd1a$var$colorizeVillages('transparent'); + $bfe8b11df18d9acc480580699499dd1a$var$addBorderToSelectedVillages('transparent'); if ($bfe8b11df18d9acc480580699499dd1a$var$intervalID) { clearInterval($bfe8b11df18d9acc480580699499dd1a$var$intervalID); } @@ -271,18 +283,6 @@ $bfe8b11df18d9acc480580699499dd1a$var$config.started = !$bfe8b11df18d9acc480580699499dd1a$var$config.started; $bfe8b11df18d9acc480580699499dd1a$var$saveConfig(); }; - const $bfe8b11df18d9acc480580699499dd1a$var$colorizeGroupVillages = function colorizeGroupVillages(name) { - let bgColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; - $bfe8b11df18d9acc480580699499dd1a$var$config.groups[name].villages.forEach(village => { - $bfe8b11df18d9acc480580699499dd1a$var$setVillageBorder(village.x, village.y, bgColor ? bgColor : $bfe8b11df18d9acc480580699499dd1a$var$config.groups[name].color); - }); - }; - const $bfe8b11df18d9acc480580699499dd1a$var$colorizeVillages = function colorizeVillages() { - let bgColor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - for (let name in $bfe8b11df18d9acc480580699499dd1a$var$config.groups) { - $bfe8b11df18d9acc480580699499dd1a$var$colorizeGroupVillages(name, bgColor); - } - }; const $bfe8b11df18d9acc480580699499dd1a$var$renderUI = () => { $bfe8b11df18d9acc480580699499dd1a$var$button = document.createElement('button'); $bfe8b11df18d9acc480580699499dd1a$var$button.style.marginLeft = '5px'; diff --git a/dist/quickbar/mapCoordsPicker.js b/dist/quickbar/mapCoordsPicker.js index ac2c41f..6cb7d1e 100644 --- a/dist/quickbar/mapCoordsPicker.js +++ b/dist/quickbar/mapCoordsPicker.js @@ -1 +1 @@ -!function(){const e={pl_PL:{startCoordsPicker:"Uruchom zbieracza koordynat",stopCoordsPicker:"Zatrzymaj zbieracza koordynat",exportedVillages:"Wyeksportowane wioski",cannotDeleteSelectedGroup:"Nie można usunąć wybranej grupy!",select:"Wybierz",delete:"Usuń",add:"Dodaj",save:"Zapisz",groupName:"Nazwa grupy",export:"Eksport"},en_DK:{startCoordsPicker:"Start coords picker",stopCoordsPicker:"Stop coords picker",exportedVillages:"Exported villages",cannotDeleteSelectedGroup:"Cannot delete selected group!",select:"Select",delete:"Delete",add:"Add",save:"Save",groupName:"Group name",export:"Export"},de_DE:{startCoordsPicker:"Starte Koordinaten-Selektor",stopCoordsPicker:"Stoppe Koordinaten-Selektor",exportedVillages:"Exportierte Dörfer",cannotDeleteSelectedGroup:"Gruppe kann nicht gelöscht werden!",select:"Selektieren",delete:"Löschen",add:"Hinzufügen",save:"Speichern",groupName:"Gruppen-Name",export:"Exportieren"}};function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function r(e){for(var r=1;r h2");let l,c,s,p,i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=localStorage.getItem(e);let o=t;return r&&(o=JSON.parse(r)),o}(n,{started:!1,groups:{All:{villages:[],color:"#ffffff"}},selectedGroup:"All"});const u=e[window.game_data.locale]||e.en_DK,d=()=>{var e,t;e=n,t=i,localStorage.setItem(e,JSON.stringify(t))},g=(e,t)=>{const r=parseInt("".concat(e).concat(t),10);return TWMap.villages[r]?TWMap.villages[r].id:NaN},m=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"transparent";const o=g(e,t);if(isNaN(o))return;const n=document.querySelector("#map_village_"+o);n&&(n.style.boxSizing="border-box",n.style.border="transparent"!==r?"5px solid ".concat(r):"none")},v=(e,t,r)=>{r.preventDefault();const o="".concat(e,"|").concat(t);i.groups[i.selectedGroup].villages.some((e=>e.key===o))?(i.groups[i.selectedGroup].villages=i.groups[i.selectedGroup].villages.filter((e=>e.key!==o)),m(e,t,"transparent")):(i.groups[i.selectedGroup].villages=[...i.groups[i.selectedGroup].villages,{x:e,y:t,key:o}],m(e,t,i.groups[i.selectedGroup].color),(e=>{for(let t in i.groups){if(t===i.selectedGroup)return;i.groups[t].villages=i.groups[t].villages.filter((t=>t.key!==e))}})(o))},f=(e,t)=>{const o=t&&t.name!==i.selectedGroup,n='\n \n \n \n ").concat(t?'"):"","\n ").concat(o?'"):"","\n "),a=document.createElement("form");if(a.innerHTML=n,a.addEventListener("submit",(e=>{e.preventDefault(),t?(t.name===i.selectedGroup&&(i.selectedGroup=e.target[1].value),M(t.name,e.target[0].value),i.groups[e.target[1].value]=r(r({},i.groups[t.name]),{},{color:e.target[0].value}),t.name!==e.target[1].value&&delete i.groups[t.name]):i.groups[e.target[1].value]={color:e.target[0].value,villages:[]},y()})),t){a.querySelector('button[type="button"]').addEventListener("click",(()=>{if(i.selectedGroup===t.name)return UI.ErrorMessage(u.cannotDeleteSelectedGroup);M(t.name,"transparent"),delete i.groups[t.name],a.remove()}));const e=a.querySelector(".selectButton");e&&e.addEventListener("click",(e=>{i.selectedGroup=t.name,y()}))}e.appendChild(a)},y=()=>{c.innerHTML="";for(let e in i.groups)f(c,r(r({},i.groups[e]),{},{name:e}));f(c)},b=()=>{const e=[];for(let t in i.groups)e.push('
\n

'.concat(t,"

\n \n
"));const t="\n ".concat(e.join(""),"\n ");Dialog.show(u.exportedVillages,t)},k=(e,t)=>{TWMap.mapHandler.__spawnSector(e,t),_()},h=()=>{TWMap.map.handler.__onClick=TWMap.map.handler.onClick,TWMap.map.handler.onClick=v,TWMap.mapHandler.__spawnSector=TWMap.map.handler.spawnSector,TWMap.mapHandler.spawnSector=k,l.innerHTML=u.stopCoordsPicker,(()=>{const e=document.createElement("button");e.innerHTML=u.export,e.addEventListener("click",b),s.appendChild(e)})(),_(),y(),p=setInterval(d,500)},S=()=>{i.started?(()=>{"function"==typeof TWMap.map.handler.__onClick&&(TWMap.map.handler.onClick=TWMap.map.handler.__onClick),"function"==typeof TWMap.map.handler.__spawnSector&&(TWMap.mapHandler.spawnSector=TWMap.map.handler.__spawnSector),l.innerHTML=u.startCoordsPicker,c.innerHTML="",s.innerHTML="",_("transparent"),p&&clearInterval(p);for(let e in i.groups)i.groups[e].villages=[]})():h(),i.started=!i.started,d()},M=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";i.groups[e].villages.forEach((r=>{m(r.x,r.y,t||i.groups[e].color)}))},_=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";for(let t in i.groups)M(t,e)};!function(){try{l=document.createElement("button"),l.style.marginLeft="5px",l.innerHTML=i.started?u.stopCoordsPicker:u.startCoordsPicker,l.addEventListener("click",S),a.appendChild(l),c=document.createElement("div"),a.parentElement.insertBefore(c,a.nextSibling),s=document.createElement("div"),a.parentElement.insertBefore(s,a.nextSibling),i.started&&h()}catch(e){console.log("Map Coords Picker",e)}}()}(); \ No newline at end of file +!function(){const e={pl_PL:{startCoordsPicker:"Uruchom zbieracza koordynat",stopCoordsPicker:"Zatrzymaj zbieracza koordynat",exportedVillages:"Wyeksportowane wioski",cannotDeleteSelectedGroup:"Nie można usunąć wybranej grupy!",select:"Wybierz",delete:"Usuń",add:"Dodaj",save:"Zapisz",groupName:"Nazwa grupy",export:"Eksport"},en_DK:{startCoordsPicker:"Start coords picker",stopCoordsPicker:"Stop coords picker",exportedVillages:"Exported villages",cannotDeleteSelectedGroup:"Cannot delete selected group!",select:"Select",delete:"Delete",add:"Add",save:"Save",groupName:"Group name",export:"Export"},de_DE:{startCoordsPicker:"Starte Koordinaten-Selektor",stopCoordsPicker:"Stoppe Koordinaten-Selektor",exportedVillages:"Exportierte Dörfer",cannotDeleteSelectedGroup:"Gruppe kann nicht gelöscht werden!",select:"Selektieren",delete:"Löschen",add:"Hinzufügen",save:"Speichern",groupName:"Gruppen-Name",export:"Exportieren"}};function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function r(e){for(var r=1;r h2");let l,c,s,p,i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=localStorage.getItem(e);let o=t;return r&&(o=JSON.parse(r)),o}(n,{started:!1,groups:{All:{villages:[],color:"#ffffff"}},selectedGroup:"All"});const u=e[window.game_data.locale]||e.en_DK,d=()=>{var e,t;e=n,t=i,localStorage.setItem(e,JSON.stringify(t))},g=(e,t)=>{const r=parseInt("".concat(e).concat(t),10),o=TWMap.villages[r];return o?o.id:NaN},m=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"transparent";const o=document.querySelector("#map_village_"+g(e,t));o&&(o.style.boxSizing="border-box",o.style.border="transparent"!==r?"5px solid ".concat(r):"none")},v=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";i.groups[e].villages.forEach((r=>{m(r.x,r.y,t||i.groups[e].color)}))},f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";for(let t in i.groups)v(t,e)},y=(e,t,r)=>{if(r.preventDefault(),isNaN(g(e,t)))return;const o="".concat(e,"|").concat(t);if(i.groups[i.selectedGroup].villages.some((e=>e.key===o)))return i.groups[i.selectedGroup].villages=i.groups[i.selectedGroup].villages.filter((e=>e.key!==o)),void m(e,t,"transparent");i.groups[i.selectedGroup].villages=[...i.groups[i.selectedGroup].villages,{x:e,y:t,key:o}],m(e,t,i.groups[i.selectedGroup].color),(e=>{for(let t in i.groups){if(t===i.selectedGroup)return;i.groups[t].villages=i.groups[t].villages.filter((t=>t.key!==e))}})(o)},b=(e,t)=>{const o=t&&t.name!==i.selectedGroup,n='\n \n \n \n ").concat(t?'"):"","\n ").concat(o?'"):"","\n "),a=document.createElement("form");if(a.innerHTML=n,a.addEventListener("submit",(e=>{e.preventDefault(),t?(t.name===i.selectedGroup&&(i.selectedGroup=e.target[1].value),v(t.name,e.target[0].value),i.groups[e.target[1].value]=r(r({},i.groups[t.name]),{},{color:e.target[0].value}),t.name!==e.target[1].value&&delete i.groups[t.name]):i.groups[e.target[1].value]={color:e.target[0].value,villages:[]},k()})),t){a.querySelector('button[type="button"]').addEventListener("click",(()=>{if(i.selectedGroup===t.name)return UI.ErrorMessage(u.cannotDeleteSelectedGroup);v(t.name,"transparent"),delete i.groups[t.name],a.remove()}));const e=a.querySelector(".selectButton");e&&e.addEventListener("click",(e=>{i.selectedGroup=t.name,k()}))}e.appendChild(a)},k=()=>{c.innerHTML="";for(let e in i.groups)b(c,r(r({},i.groups[e]),{},{name:e}));b(c)},h=()=>{const e=[];for(let t in i.groups)e.push('
\n

'.concat(t,"

\n \n
"));const t="\n ".concat(e.join(""),"\n ");Dialog.show(u.exportedVillages,t)},S=(e,t)=>{TWMap.mapHandler.__spawnSector(e,t),f()},_=()=>{TWMap.map.handler.__onClick=TWMap.map.handler.onClick,TWMap.map.handler.onClick=y,TWMap.mapHandler.__spawnSector=TWMap.map.handler.spawnSector,TWMap.mapHandler.spawnSector=S,l.innerHTML=u.stopCoordsPicker,(()=>{const e=document.createElement("button");e.innerHTML=u.export,e.addEventListener("click",h),s.appendChild(e)})(),f(),k(),p=setInterval(d,500)},x=()=>{i.started?(()=>{"function"==typeof TWMap.map.handler.__onClick&&(TWMap.map.handler.onClick=TWMap.map.handler.__onClick),"function"==typeof TWMap.map.handler.__spawnSector&&(TWMap.mapHandler.spawnSector=TWMap.map.handler.__spawnSector),l.innerHTML=u.startCoordsPicker,c.innerHTML="",s.innerHTML="",f("transparent"),p&&clearInterval(p);for(let e in i.groups)i.groups[e].villages=[]})():_(),i.started=!i.started,d()};!function(){try{l=document.createElement("button"),l.style.marginLeft="5px",l.innerHTML=i.started?u.stopCoordsPicker:u.startCoordsPicker,l.addEventListener("click",x),a.appendChild(l),c=document.createElement("div"),a.parentElement.insertBefore(c,a.nextSibling),s=document.createElement("div"),a.parentElement.insertBefore(s,a.nextSibling),i.started&&_()}catch(e){console.log("Map Coords Picker",e)}}()}(); \ No newline at end of file diff --git a/src/mapCoordsPicker.js b/src/mapCoordsPicker.js index e6a94c8..7d36dcb 100644 --- a/src/mapCoordsPicker.js +++ b/src/mapCoordsPicker.js @@ -35,19 +35,19 @@ const saveConfig = () => { setItem(LOCAL_STORAGE_KEY, config); }; -const villageIDByCoords = (x, y) => { +const getVillageIDByCoords = (x, y) => { const xy = parseInt(`${x}${y}`, 10); const village = TWMap.villages[xy]; - if (village) { - return TWMap.villages[xy].id; + if (!village) { + return NaN; } - return NaN; + return village.id; }; -const setVillageBorder = (x, y, color = 'transparent') => { - const id = villageIDByCoords(x, y); - if (isNaN(id)) return; - const village = document.querySelector('#map_village_' + id); +const addBorderToVillage = (x, y, color = 'transparent') => { + const village = document.querySelector( + '#map_village_' + getVillageIDByCoords(x, y) + ); if (village) { village.style.boxSizing = 'border-box'; village.style.border = @@ -55,6 +55,22 @@ const setVillageBorder = (x, y, color = 'transparent') => { } }; +const addBorderToVillagesInGroup = (name, color = '') => { + config.groups[name].villages.forEach(village => { + addBorderToVillage( + village.x, + village.y, + color ? color : config.groups[name].color + ); + }); +}; + +const addBorderToSelectedVillages = (color = '') => { + for (let name in config.groups) { + addBorderToVillagesInGroup(name, color); + } +}; + const deleteVillageFromOtherGroups = key => { for (let name in config.groups) { if (name === config.selectedGroup) return; @@ -67,27 +83,33 @@ const deleteVillageFromOtherGroups = key => { const handleMapClick = (x, y, e) => { e.preventDefault(); + if (isNaN(getVillageIDByCoords(x, y))) { + return; + } + const key = `${x}|${y}`; - const selected = config.groups[config.selectedGroup].villages.some( - village => village.key === key - ); - if (selected) { + if ( + config.groups[config.selectedGroup].villages.some( + village => village.key === key + ) + ) { config.groups[config.selectedGroup].villages = config.groups[ config.selectedGroup ].villages.filter(village => village.key !== key); - setVillageBorder(x, y, 'transparent'); - } else { - config.groups[config.selectedGroup].villages = [ - ...config.groups[config.selectedGroup].villages, - { - x, - y, - key, - }, - ]; - setVillageBorder(x, y, config.groups[config.selectedGroup].color); - deleteVillageFromOtherGroups(key); + addBorderToVillage(x, y, 'transparent'); + return; } + + config.groups[config.selectedGroup].villages = [ + ...config.groups[config.selectedGroup].villages, + { + x, + y, + key, + }, + ]; + addBorderToVillage(x, y, config.groups[config.selectedGroup].color); + deleteVillageFromOtherGroups(key); }; const renderForm = (container, group) => { @@ -119,7 +141,7 @@ const renderForm = (container, group) => { if (group) { if (group.name === config.selectedGroup) config.selectedGroup = e.target[1].value; - colorizeGroupVillages(group.name, e.target[0].value); + addBorderToVillagesInGroup(group.name, e.target[0].value); config.groups[e.target[1].value] = { ...config.groups[group.name], @@ -141,7 +163,7 @@ const renderForm = (container, group) => { if (config.selectedGroup === group.name) { return UI.ErrorMessage(translations.cannotDeleteSelectedGroup); } - colorizeGroupVillages(group.name, 'transparent'); + addBorderToVillagesInGroup(group.name, 'transparent'); delete config.groups[group.name]; form.remove(); }); @@ -195,7 +217,7 @@ const renderActions = () => { const handleSpawnSector = (data, sector) => { TWMap.mapHandler.__spawnSector(data, sector); - colorizeVillages(); + addBorderToSelectedVillages(); }; const handleStart = () => { @@ -205,7 +227,7 @@ const handleStart = () => { TWMap.mapHandler.spawnSector = handleSpawnSector; button.innerHTML = translations.stopCoordsPicker; renderActions(); - colorizeVillages(); + addBorderToSelectedVillages(); renderGroups(); intervalID = setInterval(saveConfig, 500); }; @@ -220,7 +242,7 @@ const handleStop = () => { button.innerHTML = translations.startCoordsPicker; formsContainer.innerHTML = ''; actionsContainer.innerHTML = ''; - colorizeVillages('transparent'); + addBorderToSelectedVillages('transparent'); if (intervalID) { clearInterval(intervalID); } @@ -239,22 +261,6 @@ const handleButtonClick = () => { saveConfig(); }; -const colorizeGroupVillages = (name, bgColor = '') => { - config.groups[name].villages.forEach(village => { - setVillageBorder( - village.x, - village.y, - bgColor ? bgColor : config.groups[name].color - ); - }); -}; - -const colorizeVillages = (bgColor = '') => { - for (let name in config.groups) { - colorizeGroupVillages(name, bgColor); - } -}; - const renderUI = () => { button = document.createElement('button'); button.style.marginLeft = '5px';