// ==UserScript==
// @name MH - Maptain Tool
// @description Maptain Tool: Send SB and Map invite in a click!
// @author Chromatical
// @version 2.0.7
// @match https://www.mousehuntgame.com/*
// @match https://apps.facebook.com/mousehunt/*
// @resource https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css
// @require https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @icon https://www.google.com/s2/favicons?domain=mousehuntgame.com
// @namespace https://greasyfork.org/users/748165
// ==/UserScript==
$(document).ready(function() {
addTouchPoint();
});
function addTouchPoint() {
if ($('.snipeHix').length == 0) {
const invPages = $('.friends .tournament_scoreboards ');
const snipeHix = document.createElement('li');
snipeHix.classList.add('maptain_tool');
const snipeHixBtn = document.createElement('a');
snipeHixBtn.innerText = "Maptain Tool";
snipeHixBtn.onclick = function () {
render();
};
const icon = document.createElement("div");
icon.className = "icon";
snipeHixBtn.appendChild(icon);
snipeHix.appendChild(snipeHixBtn);
$(snipeHix).insertAfter(invPages);
}
}
function getFriends(){
return new Promise((resolve, reject) => {
postReq("https://www.mousehuntgame.com/managers/ajax/users/userData.php",
`sn=Hitgrab&hg_is_ajax=1&uh=${user.unique_hash}&get_friends=true`
).then(res=>{
try{
var data = JSON.parse(res.responseText);
var friendNameList = []
if(data.user_data){
var friendSnuidList = Object.keys(data.user_data)
for(var i=0;i<friendSnuidList.length;i++){
friendNameList.push(data.user_data[friendSnuidList[i]].name)
}
resolve([friendSnuidList,friendNameList]);
}
} catch(error){
alert("Error getting friends! Please contact Chromatical on Discord");
console.log(error)
}
})
})
}
async function render(){
document
.querySelectorAll("#map-tool-box")
.forEach(el=> el.remove())
const div = document.createElement("div");
div.id = "map-tool-box";
div.style.backgroundColor = "#F5F5F5";
div.style.position = "fixed";
div.style.zIndex = "9999";
div.style.left = "35vw";
div.style.top = "20vh";
div.style.border = "solid 3px #696969";
div.style.borderRadius = "20px";
div.style.padding = "10px";
div.style.textAlign = "center";
div.style.fontSize = "12px"
const closeButton = document.createElement("button", {
id: "close-button"
});
closeButton.textContent = "x"
closeButton.style.marginLeft = "5px"
closeButton.style.cursor = "pointer"
closeButton.onclick = function () {
document.body.removeChild(div);
var expandedMap = document.getElementById("track-expand-div")
var addMap = document.getElementById("add-row-div")
if (expandedMap){
document.body.removeChild(expandedMap)
}
if (addMap){
document.body.removeChild(addMap)
}
};
const minButton = document.createElement("button", {
id: "minimise-button"
});
minButton.textContent = "-"
minButton.style.marginLeft = "57px"
minButton.style.cursor = "pointer"
minButton.onclick = function(){
if (minButton.textContent == "-"){
$("#maptain-tool-content")[0].style.display = "none"
$(".maptain-tool-info")[0].style.marginLeft = "0px"
minButton.textContent = "+"
minButton.style.marginLeft = "5px"
} else if (minButton.textContent == "+"){
$("#maptain-tool-content")[0].style.display = ""
$(".maptain-tool-info")[0].style.marginLeft = "17px"
minButton.textContent = "-"
minButton.style.marginLeft = "57px"
}
}
const toolInfo = document.createElement("div")
toolInfo.className = "maptain-tool-info"
toolInfo.textContent = "Maptain Tool"
toolInfo.style.height = "21px"
toolInfo.style.textAlign = "Left"
toolInfo.style.marginLeft = "17px"
toolInfo.style.fontWeight = "bold"
toolInfo.style.cursor = "context-menu"
const contentDiv = document.createElement("div")
contentDiv.id = "maptain-tool-content"
const table = document.createElement("table");
table.id = "maptain-tool-table"
table.style.textAlign = "left";
table.style.borderSpacing = "1em 0"
//hid-------------------------------------------
const hid_row = document.createElement("tr");
const hid_td1 = document.createElement("td");
const hid_td2 = document.createElement("td")
const hid_radio = document.createElement("input")
hid_radio.type = "radio";
hid_radio.name = "chro-hunter-friend"
hid_radio.id = "chro-hunter-radio"
hid_radio.style.verticalAlign = "middle"
hid_radio.style.marginTop = "-2px"
hid_radio.checked = true;
hid_radio.onchange = function (){
processRadio()
}
hid_td1.appendChild(hid_radio)
const hid_label = document.createElement("label");
hid_label.innerText = "Hunter ID: "
hid_label.htmlFor = "chro-radio-hid"
hid_td1.appendChild(hid_label);
const hid_input = document.createElement("input");
hid_input.type = "text";
hid_input.id = "hunter-input-id"
hid_input.size = "10"
hid_input.style.placeHolder = "1";
hid_td2.appendChild(hid_input)
//friends---------------------------------------
const friend_row = document.createElement("tr");
const friend_td1 = document.createElement("td");
friend_td1.style.textAlign = "right"
const friend_td2 = document.createElement("td")
const friend_radio = document.createElement("input")
friend_radio.type = "radio";
friend_radio.name = "chro-hunter-friend"
friend_radio.id = "chro-friend-radio"
friend_radio.style.verticalAlign = "middle"
friend_radio.style.marginTop = "-2px"
friend_radio.style.position = "relative"
friend_radio.style.right = "17.5px"
friend_radio.onchange = function(){
processRadio();
};
friend_td1.appendChild(friend_radio)
const friend_label = document.createElement("label");
friend_label.innerHTML = "Friend:"
friend_label.htmlFor = "chro-radio-friend"
friend_td1.appendChild(friend_label);
const friend_input = document.createElement("input");
friend_input.type = "text";
friend_input.id = "friend-input-id"
friend_input.disabled = true;
friend_input.size = "10"
friend_td2.appendChild(friend_input)
//Either friend or hunter-------------------------------------
var friendList;
var friendSnuid;
var snuid;
var name;
async function processRadio() {
if (hid_radio.checked) {
hid_input.disabled = false;
friend_input.disabled = true;
friend_input.value = ""
} else if (friend_radio.checked) {
hid_input.disabled = true;
friend_input.disabled = false;
hid_input.value = ""
var list = await getFriends();
friendSnuid = list[0];
friendList = list[1]
$("#friend-input-id").autocomplete({
source: list[1],
open: function(){
setTimeout(function () {
$('.ui-autocomplete').css('z-index', 99999999999999);
}, 0);
}
});
}
}
//sb--------------------------------------------
const sb_row = document.createElement("tr");
const sb_td1 = document.createElement("td");
sb_td1.style.textAlign = "right"
const sb_td2 = document.createElement("td");
const sb_label = document.createElement("label");
sb_label.innerText = "SB Amount: "
sb_td1.appendChild(sb_label);
const sb_input = document.createElement("input");
sb_input.type = "text";
sb_input.id = "sb-input-id"
sb_input.size = "10"
sb_input.placehodler = "112"
sb_td2.appendChild(sb_input);
//map--------------------------------------
if(typeof (user.quests.QuestRelicHunter.maps[0]) == "undefined"){
var mapName1 = ""
} else {
mapName1 = user.quests.QuestRelicHunter.maps[0].name
}
mapName1 = await replaceRare(mapName1)
const map_row = document.createElement("tr");
const map_td1 = document.createElement("td");
map_td1.style.textAlign = "right"
const map_td2 = document.createElement("td");
const map_label = document.createElement("label");
map_label.innerText = "Map: "
map_td1.appendChild(map_label);
const map_select = document.createElement("select",{
id: "map_select"});
map_select.style.width = "103px"
var user_maps = user.quests.QuestRelicHunter.maps
if (user_maps){
for (var i=0;i<user_maps.length;i++){
var option = document.createElement("OPTION");
option.innerText = user_maps[i].name;
map_select.appendChild(option);
}
} else {
option = document.createElement("OPTION");
option.innerText = "None";
map_select.appendChild(option);
}
map_select.onchange = async function processMap(e){
mapName1 = map_select.value
mapName1 = await replaceRare(mapName1)
renderSbTrack(mapName1)
}
map_td2.appendChild(map_select);
//append-------------------------------------------
hid_row.appendChild(hid_td1);
hid_row.appendChild(hid_td2);
friend_row.appendChild(friend_td1);
friend_row.appendChild(friend_td2);
sb_row.appendChild(sb_td1);
sb_row.appendChild(sb_td2);
map_row.appendChild(map_td1);
map_row.appendChild(map_td2);
table.appendChild(map_row);
table.appendChild(sb_row);
table.appendChild(friend_row);
table.appendChild(hid_row);
//Buttons---------------------------------------------
const actionDiv = document.createElement("div");
actionDiv.className = "action-div"
const sbBtn = document.createElement("button",{
id: "sb-button"
})
sbBtn.textContent = "Send SB"
sbBtn.style.cursor = "pointer"
sbBtn.onclick = async function (){
if(sb_input.value > 0){
var snuidAndName = await getSnuidAndName(hid_input.value,friend_input.value,friendList,friendSnuid)
snuid = snuidAndName[0]
name = snuidAndName[1]
var promise = await getConfirmation("sendSB",snuid,name,sb_input.value)
.then(
result => sendSB(snuid,sb_input.value),
error => {}
)
}
}
const mapBtn = document.createElement("button",{
id: "map-button"
})
mapBtn.textContent = "Invite"
mapBtn.style.cursor = "pointer"
mapBtn.style.marginLeft = "5px"
mapBtn.onclick = async function (){
if(map_select.value != "None"){
var map_id;
for (var i=0;i<user_maps.length;i++){
if (user_maps[i].name == map_select.value){
map_id = user_maps[i].map_id
}
var snuidAndName = await getSnuidAndName(hid_input.value,friend_input.value,friendList,friendSnuid)
snuid = snuidAndName[0]
name = snuidAndName[1]
var promise = await getConfirmation("sendInvite",snuid,name,map_select.value)
.then(
result => sendInvite(snuid,map_id),
error => {}
)
}
}
}
const bothBtn = document.createElement("button",{
id: "both-button"
})
bothBtn.textContent = "Both"
bothBtn.style.cursor = "pointer"
bothBtn.style.marginLeft = "5px"
bothBtn.onclick = async function (){
if(map_select.value != "None" && sb_input.value > 0){
var map_id;
for (var i=0;i<user_maps.length;i++){
if (user_maps[i].name == map_select.value){
map_id = user_maps[i].map_id
}
}
var snuidAndName = await getSnuidAndName(hid_input.value,friend_input.value,friendList,friendSnuid)
snuid = snuidAndName[0]
name = snuidAndName[1]
var promise = await getConfirmation("sendSBAndInvite",snuid,name,sb_input.value,map_select.value)
.then(
result => {
sendSB(snuid,sb_input.value);
sendInvite(snuid,map_id);
changeSbTrack(map_select.value,name,sb_input.value)
//map_select.value,sb_input,name
},
error => {}
)}
}
actionDiv.appendChild(sbBtn)
actionDiv.appendChild(mapBtn)
actionDiv.appendChild(bothBtn)
//v2.0 features--------------------------------------------------
const trackDiv = document.createElement("div")
trackDiv.id = "map-tool-track-div"
trackDiv.style.paddingTop = "6px"
const sbtrackDiv = document.createElement("div")
sbtrackDiv.id = "map-tool-sb-track-div"
var currentMapName = mapName1
currentMapName = await replaceRare(currentMapName)
if(currentMapName){
var currentMap = "Chro-".concat(currentMapName)
}
if (localStorage.getItem(currentMap) && localStorage.getItem(currentMap) != '[]'){
var parsedMap = JSON.parse(localStorage.getItem(currentMap));
var last = parsedMap.length-1;
var totalSB = parsedMap[last][4]
} else {
totalSB = 0
}
sbtrackDiv.innerText = "SB+ sent: ".concat(totalSB);
sbtrackDiv.style.textAlign = "Left"
sbtrackDiv.style.marginLeft = "5px"
sbtrackDiv.style.float = "left"
sbtrackDiv.style.paddingTop = "4px"
const trackActDiv = document.createElement("div")
trackActDiv.id = "map-tool-action-div"
trackActDiv.style.float = "right"
const plusButton = document.createElement("button", {
id: "plus-button"
});
plusButton.textContent = "+"
plusButton.style.cursor = "pointer"
plusButton.onclick = function () {
var trackdiv = document.getElementById("add-row-div")
if (trackdiv){
document.body.removeChild(trackdiv)
} else {
addTrackRow(mapName1)
}
};
/*const minusButton = document.createElement("button", {
id: "minus-button"
});
minusButton.textContent = "-"
minusButton.style.width = "24px"
minusButton.style.marginLeft = "5px"
minusButton.style.cursor = "pointer"
minusButton.onclick = function () {
};*/
const bdButton = document.createElement("button", {
id: "bd-button"
});
bdButton.textContent = "?"
bdButton.style.marginLeft = "5px"
bdButton.style.cursor = "pointer"
bdButton.onclick = function () {
var expandedMap = document.getElementById("track-expand-div")
if (expandedMap){
document.body.removeChild(expandedMap)
} else {
expandMap(mapName1);
}
};
const resetButton = document.createElement("button", {
id: "reset-button"
});
resetButton.textContent = "Reset"
resetButton.style.marginLeft = "5px"
resetButton.style.cursor = "pointer"
resetButton.marginRight = "5px"
resetButton.onclick = async function () {
var promise = await getConfirmation("reset")
.then(async function(res)
{
var currentMap = "Chro-".concat(map_select.value);
currentMap = await replaceRare(currentMap)
var emptyset = []
localStorage.setItem(currentMap,JSON.stringify(emptyset));
document.getElementById("map-tool-sb-track-div").innerText = "SB+ sent: 0";
var expandedMap = document.getElementById("track-expand-div")
if (expandedMap){
expandMap(map_select.value)
}
},
error=> {})
}
trackActDiv.appendChild(plusButton)
trackActDiv.appendChild(bdButton)
trackActDiv.appendChild(resetButton)
trackDiv.appendChild(sbtrackDiv)
trackDiv.appendChild(trackActDiv)
//append---------------------------------------------------------
toolInfo.appendChild(minButton);
toolInfo.appendChild(closeButton);
div.appendChild(toolInfo);
contentDiv.appendChild(document.createElement("br"))
contentDiv.appendChild(table);
contentDiv.appendChild(document.createElement("br"))
contentDiv.appendChild(actionDiv)
contentDiv.appendChild(trackDiv)
div.appendChild(contentDiv);
document.body.appendChild(div);
dragElement(div);
}
async function getSnuidAndName(hid_input,friend_input,friendList,friendSnuid){
return new Promise(async(resolve, reject) => {
if(hid_input){
var snuidAndName = await getSnuidId(hid_input);
var snuid = snuidAndName[0];
var name = snuidAndName[1];
} else if (friend_input){
var friend_index = friendList.indexOf(friend_input);
snuid = friendSnuid[friend_index];
name = friend_input;
}
resolve ([snuid,name])
})
}
function getSnuidId(hid){
return new Promise((resolve, reject) => {
if(hid != user.user_id && hid.length >0){
postReq("https://www.mousehuntgame.com/managers/ajax/pages/friends.php",
`sn=Hitgrab&hg_is_ajax=1&action=community_search_by_id&user_id=${hid}&uh=${user.unique_hash}`
).then(res=>{
try{
var data = JSON.parse(res.responseText);
if (data){
var hunter_name = data.friend.name;
var hunter_snuid = data.friend.sn_user_id;
resolve([hunter_snuid,hunter_name])
}
}catch (error){
console.log(error)
}
})
}
})
}
function getConfirmation(action,snuid,name,input_value,input_value2){
return new Promise((resolve, reject) => {
document
.querySelectorAll("#confirm-action-box")
.forEach(el=> el.remove())
const actdiv = document.createElement("div");
actdiv.id = "confirm-action-box";
actdiv.style.backgroundColor = "#F5F5F5";
actdiv.style.position = "fixed";
actdiv.style.zIndex = "9999";
actdiv.style.left = "28vw";
actdiv.style.top = "28vh";
actdiv.style.border = "solid 3px #696969";
actdiv.style.borderRadius = "20px";
actdiv.style.padding = "10px";
actdiv.style.textAlign = "center";
const cfmdiv = document.createElement("div")
cfmdiv.id = "map-confirm-header"
cfmdiv.style.fontSize = "12px"
if (action == "sendSB"){
cfmdiv.innerText = "Send ".concat(input_value," SUPER|Brie+ to ",name,"?")
} else if (action == "sendInvite"){
cfmdiv.innerText = "Send ".concat(input_value," invite to ",name,"?")
} else if (action == "sendSBAndInvite"){
cfmdiv.innerText = "Send ".concat(input_value," SUPER|Brie+ and ",input_value2," invite to ",name,"?")
} else if (action == "reset"){
cfmdiv.innerText = "Reset current map history?"
}
//Buttons -----------
const doBtnDiv = document.createElement("div");
const cfmBtn = document.createElement("button",{
id: "cfm-button"
})
cfmBtn.style.cursor = "pointer"
cfmBtn.innerText = "Confirm"
cfmBtn.onclick = function(){
document.body.removeChild(actdiv);
resolve()
}
const noBtn = document.createElement("button",{
id: "no-button"
})
noBtn.innerText = "Cancel"
noBtn.style.marginLeft = "5px"
noBtn.style.cursor = "pointer"
noBtn.onclick = function(){
document.body.removeChild(actdiv);
reject(this)
}
doBtnDiv.appendChild(cfmBtn)
doBtnDiv.appendChild(noBtn)
actdiv.appendChild(cfmdiv)
actdiv.appendChild(document.createElement("br"))
actdiv.appendChild(doBtnDiv)
document.body.appendChild(actdiv);
dragElement(actdiv);
})
}
function sendSB(snuid,quantity){
postReq("https://www.mousehuntgame.com/managers/ajax/users/supplytransfer.php",
`sn=Hitgrab&hg_is_ajax=1&receiver=${snuid}&uh=${user.unique_hash}&item=super_brie_cheese&item_quantity=${quantity}`
).then(res=>{
try{
var data = JSON.parse(res.responseText);
if(data.success == "1"){
alert("SB Successfully Sent!")
} else {
alert("Supply trasnfer Failed! User is probably not your friend.")
}
} catch(error){
alert("Ajax Request Failed! Please contact Chromatical on Discord.");
console.log(error)
}
})
}
function sendInvite(snuid,mapId){
postReq("https://www.mousehuntgame.com/managers/ajax/users/treasuremap.php",
`sn=Hitgrab&hg_is_ajax=1&action=send_invites&map_id=${mapId}&snuids%5B%5D=${snuid}&uh=${user.unique_hash}&last_read_journal_entry_id=${lastReadJournalEntryId}`
).then(res=>{
try{
var data = JSON.parse(res.responseText);
if(data.success == "1"){
alert("Sent Map Invite!")
} else {
alert("Invite failed:\nYou are not the maptain or\nInvite has been sent before or\nMap is full!")
}
} catch(error){
alert("Ajax Request Failed! Please contact Chromatical on Discord.");
console.log(error)
}
})
}
function expandMap(mapName){
document
.querySelectorAll("#track-expand-div")
.forEach(el=> el.remove())
const expandDiv = document.createElement("div");
expandDiv.id = "track-expand-div";
expandDiv.style.backgroundColor = "#F5F5F5";
expandDiv.style.position = "fixed";
expandDiv.style.zIndex = "9999";
var left = document.getElementById("map-tool-box").style.left
expandDiv.style.left = left;
var top = document.getElementById("map-tool-box").style.top
var top_value = top.match(/\d+/g)
if (top.includes("px")){
var this_value = Number(top_value) + 208
var this_height = "".concat(this_value,"px")
} else{
this_value = Number(top_value) + 35
this_height = "".concat(this_value,"vh")
}
expandDiv.style.top = this_height;
expandDiv.style.border = "solid 3px #696969";
expandDiv.style.borderRadius = "20px";
expandDiv.style.padding = "10px";
expandDiv.style.textAlign = "center";
var table = document.createElement("table")
table.id = "track-expand-table"
table.style.textAlign = "center"
table.style.borderSpacing = "17px 5px"
var trackDate = document.createElement("th", {
innerTex:"track-date"
})
trackDate.innerText = "Date"
trackDate.style.fontWeight = "bold"
trackDate.style.textAlign = "center"
var trackName = document.createElement("th", {
id:"track-name"
})
trackName.innerText = "Name"
trackName.style.fontWeight = "bold"
trackName.style.textAlign = "center"
var trackSign = document.createElement("th", {
id:"track-Sign"
})
trackSign.innerText = "+/-"
trackSign.style.fontWeight = "bold"
trackSign.style.textAlign = "center"
var trackAmt = document.createElement("th", {
id:"track-amt"
})
trackAmt.innerText = "SB"
trackAmt.style.fontWeight = "bold"
trackAmt.style.textAlign = "center"
table.appendChild(trackDate)
table.appendChild(trackName)
table.appendChild(trackSign)
table.appendChild(trackAmt)
var currentMap = "Chro-".concat(mapName);
var localMap = localStorage.getItem(currentMap);
if (localMap){
var parsedLocalMap = JSON.parse(localStorage.getItem(currentMap))
for (var i=0;i<parsedLocalMap.length;i++){
//for (var j=0;j<4;j++){
var row = document.createElement("tr");
var date_data = document.createElement("td");
var name_data = document.createElement("td");
name_data.style.textAlign = "center"
var sign_data = document.createElement("td");
sign_data.style.textAlign = "center"
var amt_data = document.createElement("td");
amt_data.style.textAlign = "center"
var d = new Date(parsedLocalMap[i][0]);
var hunt_date = d.getDate() + '/' + (d.getMonth()+1) //+ '/' + d.getFullYear()
var hunt_time = ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2)
date_data.textContent = hunt_date.concat("\n",hunt_time)
name_data.textContent = parsedLocalMap[i][1];
sign_data.textContent = parsedLocalMap[i][2];
amt_data.textContent = parsedLocalMap[i][3];
row.appendChild(date_data);
row.appendChild(name_data);
row.appendChild(sign_data);
row.appendChild(amt_data);
table.appendChild(row);
//}
}
}
var dragDiv = document.createElement("div")
dragDiv.id = "drag-div"
dragDiv.appendChild(table);
expandDiv.appendChild(dragDiv)
document.body.appendChild(expandDiv);
dragElement(expandDiv)
}
function changeSbTrack(map,name,sb,plusminus){
var currentMap = "Chro-".concat(map);
var localMap = localStorage.getItem(currentMap);
if (localMap === null){
var emptySet = [];
localStorage.setItem(currentMap,JSON.stringify(emptySet));
var parsedLocalMap = [];
} else {
parsedLocalMap = JSON.parse(localStorage.getItem(currentMap))
}
if (parsedLocalMap.length >0){
var last = parsedLocalMap.length-1;
var total = Number(parsedLocalMap[last][4]);
} else {
total = 0
}
if (plusminus == "-"){
total-=Number(sb);
var now = new Date();
var sign = "-";
var newLocalMap = [now,name,sign,Number(sb),total]
parsedLocalMap.push(newLocalMap);
localStorage.setItem(currentMap,JSON.stringify(parsedLocalMap));
document.getElementById("map-tool-sb-track-div").innerText = "SB+ sent: ".concat(total);
} else {
total+=Number(sb);
now = new Date();
sign = "+";
newLocalMap = [now,name,sign,Number(sb),total];
parsedLocalMap.push(newLocalMap);
localStorage.setItem(currentMap,JSON.stringify(parsedLocalMap));
document.getElementById("map-tool-sb-track-div").innerText = "SB+ sent: ".concat(total);
var expandedMap = document.getElementById("track-expand-div")
}
if (expandedMap){
expandMap(map)
}
}
function renderSbTrack(map){
var currentMap = "Chro-".concat(map);
if (localStorage.getItem(currentMap) && localStorage.getItem(currentMap) != '[]'){
var parsedLocalMap = JSON.parse(localStorage.getItem(currentMap))
var last = parsedLocalMap.length-1
var total = Number(parsedLocalMap[last][4])
} else {
total = 0
}
document.getElementById("map-tool-sb-track-div").innerText = "SB+ sent: ".concat(total);
var expandedMap = document.getElementById("track-expand-div")
if (expandedMap){
expandMap(map)
}
}
function addTrackRow(map){
document
.querySelectorAll("#add-row-div")
.forEach(el=> el.remove())
const addRowDiv = document.createElement("div");
addRowDiv.id = "add-row-div";
addRowDiv.style.backgroundColor = "#F5F5F5";
addRowDiv.style.position = "fixed";
addRowDiv.style.zIndex = "9999";
var top = document.getElementById("map-tool-box").style.top
var top_value = top.match(/\d+/g)
if (top.includes("px")){
var this_value = Number(top_value) + 120
var this_height = "".concat(this_value,"px")
} else{
this_value = Number(top_value) + 20
this_height = "".concat(this_value,"vh")
}
addRowDiv.style.top = this_height;
var left = document.getElementById("map-tool-box").style.left
var left_value = left.match(/\d+/g)
if (left.includes("px")){
var this_left_value = Number(left_value) + 236
var this_left = "".concat(this_left_value,"px")
} else {
this_left_value = Number(left_value) + 20
this_left = "".concat(this_left_value,"vw")
}
addRowDiv.style.left = this_left;
addRowDiv.style.border = "solid 3px #696969";
addRowDiv.style.borderRadius = "20px";
addRowDiv.style.padding = "10px";
addRowDiv.style.textAlign = "center";
const table = document.createElement("table")
table.id = "add-row-table"
table.style.borderSpacing = "1em 0"
table.style.marginTop = "5px"
const tableheader = document.createElement("header")
tableheader.textContent = "Add Changes to Map History"
tableheader.style.fontWeight = "bold"
const name_row = document.createElement("tr")
const name_data = document.createElement("td")
name_data.innerText = "Name:"
name_data.style.textAlign = "right"
const name_input_data = document.createElement("td")
const name_input = document.createElement("input")
name_input.type = "text"
name_input.id = "add-row-name-input"
name_input.size = "10"
name_input_data.appendChild(name_input)
name_row.appendChild(name_data)
name_row.appendChild(name_input_data)
const sbadd_row = document.createElement("tr")
const sbadd_data = document.createElement("td")
sbadd_data.innerText = "SB+:"
sbadd_data.style.textAlign = "right"
const sbadd_input_data = document.createElement("td")
const sbadd_input = document.createElement("input")
sbadd_input.type = "text"
sbadd_input.id = "add-row-sb-input"
sbadd_input.size = "10"
sbadd_input.placeholder = "e.g. +200/-150"
sbadd_input_data.appendChild(sbadd_input)
sbadd_row.appendChild(sbadd_data)
sbadd_row.appendChild(sbadd_input_data)
const cfmBtn = document.createElement("button",{
id: "row-cfm-button"
})
cfmBtn.style.cursor = "pointer"
cfmBtn.innerText = "Confirm"
cfmBtn.style.marginTop = "8px"
cfmBtn.onclick = function(){
document.body.removeChild(addRowDiv);
var name = name_input.value
var pre_sb = sbadd_input.value
var plusminus = pre_sb.match(/\D+/g)
var sb = pre_sb.match(/\d+/g)
changeSbTrack(map,name,sb,plusminus)
renderSbTrack(map)
}
table.appendChild(name_row);
table.appendChild(sbadd_row);
addRowDiv.appendChild(tableheader)
addRowDiv.appendChild(table)
addRowDiv.appendChild(cfmBtn)
document.body.appendChild(addRowDiv);
dragElement(addRowDiv)
}
function replaceRare(string){
return new Promise((resolve, reject) => {
var replaced = string.replace(/Rare /g,'')
resolve(replaced)
})
}
function dragElement(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
if (elmnt.firstElementChild) {
// if present, the header is where you move the DIV from:
elmnt.firstElementChild.onmousedown = dragMouseDown;
} else {
// otherwise, move the DIV from anywhere inside the DIV:
elmnt.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:
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
// stop moving when mouse button is released:
document.onmouseup = null;
document.onmousemove = null;
}
}
function postReq(url, form) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
resolve(this);
}
};
xhr.onerror = function () {
reject(this);
};
xhr.send(form);
});
}