"use strict"; //login const loginForm = document.getElementById("loginForm"); const logoutButton = document.getElementById("logoutButton"); let langOpt; //read language cookie, if not there set to 0 if (getCookie("langOpt") === "") { document.cookie = "langOpt=en"; } if (getCookie("langOpt") === "0") { document.getElementById("dropdownMenuButtonF").style.display = "none"; } else { document.getElementById("dropdownMenuButtonF").style.display = "block"; } langOpt = getCookie("langOpt"); loginForm.addEventListener("submit", function (e) { e.preventDefault(); document.getElementById("loginBtn").hidden = true; document.getElementById("signInAnim").hidden = false; let email = loginForm["loginEmail"].value; let password = loginForm["loginPassword"].value; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/connectionData", "email=" + email + "&password=" + password ).then((resp) => { if (resp !== null) { setInit(resp, email, password); } else { document.getElementById("loginBtn").hidden = false; document.getElementById("signInAnim").hidden = true; document.getElementById("wrongPw").style.display = "block"; setTimeout(() => { document.getElementById("wrongPw").style.display = "none"; }, 4000); } }); }); //logout logoutButton.addEventListener("click", (e) => { e.preventDefault(); document.cookie = `managedProp=0`; auth.signOut().then(() => { document.getElementById("dadDiv").style.display = "none"; sessionStorage.removeItem("tigConf"); location.reload(); }); }); document.getElementById("signout2").addEventListener("click", (e) => { e.preventDefault(); document.cookie = `managedProp=0`; auth.signOut().then(() => { document.getElementById("dadDiv").style.display = "none"; sessionStorage.removeItem("tigConf"); location.reload(); }); }); // expired window logoutButton const expiredLogout = () => auth.signOut().then(() => { document.getElementById("dadDiv").style.display = "none"; sessionStorage.removeItem("tigConf"); location.reload(); }); let monthFeedback = []; function CMrun(hotelUID, uid, response) { const CLIENTURL = "https://seteraguest.com/content/index.html"; customer = hotelUID; let main; let lang; let langCount; let buttonList = []; let subscribeUri; let subscribeEncoded; let hotelUIDCookie; // if multiple properties set data otherwise hide property management if (multipleProps) { document.getElementById("singlePropAna").style.display = "none"; document.getElementById("singlePropChar").style.display = "none"; document.getElementById("groupViewAna").style.display = "block"; document.getElementById("propertyModTop").style.display = "block"; document.getElementById("showPropModalBtn").style.display = "block"; let propDrop = document.getElementsByName("propertyMod"); let cloneDrop = document.getElementsByName("propertyCloneSet")[0]; let anaDrop = document.getElementById("propertyModSetAna"); response = response.sort(comparePropertyName); for (let i = 0; i < response.length; i++) { var opt = document.createElement("option"); opt.appendChild(document.createTextNode(response[i].propertyName)); opt.value = response[i].propertyId; opt.name = response[i].propertyName; namesAndUid.push({ [opt.value]: opt.name }); for (let j = 0; j < propDrop.length; j++) { propDrop[j].appendChild(opt.cloneNode(true)); } anaDrop.appendChild(opt.cloneNode(true)); if (response[i].propertyId === getCookie("managedProp")) { propertyName = response[i].propertyName; propDrop.value = response[i].propertyId; anaDrop.value = response[i].propertyId; for (let x = 0; x < propDrop.length; x++) { propDrop[x].value = response[i].propertyId; } } else { cloneDrop.appendChild(opt.cloneNode(true)); } } currentProperty = anaDrop.options[anaDrop.selectedIndex].text; for (let i = 0; i < propDrop.length; i++) { propDrop[i].addEventListener("change", () => { document.getElementById("loadingAnim").style.display = "block"; document.getElementById("dadDiv").style.display = "none"; document.cookie = `managedProp=${propDrop[i].value}`; location.reload(); }); } cloneDrop.addEventListener("change", () => { if (cloneDrop.value === "0") { null; } else { let toPropertyName = cloneDrop.options[cloneDrop.selectedIndex].text; cloneSite( uid, getCookie("managedProp"), cloneDrop.value, toPropertyName ); } }); anaDrop.addEventListener("change", () => { document.getElementById("dayForm").reset(); currentProperty = anaDrop.options[anaDrop.selectedIndex].text; setAllUserStatistic(anaDrop.value); setMonthlyClickStatistic(anaDrop.value); setWeeklyClickStatistic(anaDrop.value); setDayClicks(anaDrop.value); setVoteStatistics(anaDrop.value, uid); //setCommentStatistics(anaDrop.value, uid); }); // if property cookie exists set property otherwise show modal for choosing property if (getCookie("managedProp") && getCookie("managedProp") !== "0") { customer = getCookie("managedProp"); hotelUID = getCookie("managedProp"); hotelUIDCookie = getCookie("managedProp"); } else { $("#propModal").modal("show"); } // set property name after its set again document.getElementById( "managedProp" ).textContent = `Currently managing ${propertyName}`; document.getElementById( "copyPropFrom" ).textContent = `Cloning site from ${propertyName}`; if (hotelUIDCookie) { loadHeaderData(hotelUIDCookie); loadMainData(hotelUIDCookie); loadButtonData(hotelUIDCookie); setAllUserStatistic(hotelUIDCookie); setGroupStatistics(uid, namesAndUid); setMonthlyClickStatistic(hotelUIDCookie); setWeeklyClickStatistic(hotelUIDCookie); setDayClicks(hotelUIDCookie); setVoteStatistics(hotelUIDCookie, uid); //setCommentStatistics(hotelUIDCookie, uid); } else if (hotelUID) { loadHeaderData(hotelUID); loadMainData(hotelUID); loadButtonData(hotelUID); setAllUserStatistic(hotelUID); setMonthlyClickStatistic(hotelUID); setWeeklyClickStatistic(hotelUID); setDayClicks(hotelUID); setVoteStatistics(hotelUID, uid); //setCommentStatistics(hotelUID, uid); } } else { document.getElementById("propNameTop").textContent = propertyName; document.getElementById("propNameTop").style.display = "block"; document.getElementById("propManage").hidden = true; document.getElementById("multiPropAna").hidden = true; document.getElementById("groupViewAna").style.display = "none"; document.getElementById("grpView").style.display = "none"; document.getElementById("singlePropAna").style.display = "block"; document.getElementById("singlePropChar").style.display = "block"; if (hotelUID) { loadHeaderData(hotelUID); loadMainData(hotelUID); loadButtonData(hotelUID); setAllUserStatistic(hotelUID); setMonthlyClickStatistic(hotelUID); setWeeklyClickStatistic(hotelUID); setDayClicks(hotelUID); setVoteStatistics(hotelUID, uid); //setCommentStatistics(hotelUID, uid); } } document.getElementById("resetCmBtn").textContent += " " + propertyName; //file upload (main & header) const uploaderMain = document.getElementById("fileToUp"); const uploaderHeader = document.getElementById("h_logo"); //forms const formMain = document.getElementById("mainForm"); const formHeader = document.getElementById("headerForm"); const formButton = document.getElementById("buttonForm"); const updateButtonForm = document.getElementById("updateButtonForm"); /** --------------------LOAD SECTION -------------------------- */ if (sessionStorage.getItem("buttons") === "enabled") { goToButton(); sessionStorage.removeItem("buttons"); } else if (sessionStorage.getItem("advanced") === "enabled") { goToExtras(); sessionStorage.removeItem("advanced"); } else { if (getCookie("firstlogin")) { goToTop(); document.getElementById("section0").style.display = "none"; document.cookie = "firstlogin=true;expires=Thu, 01 Jan 1970 00:00:01 GMT"; } else { document.getElementById("section0").style.display = "flex"; } } if (localStorage.getItem("es") === "enabled") { document.getElementById("setLogS").style.fontSize = "0.75vw"; } function loadButtonData(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newGetButtons", "customer=" + hotelUID + "&buttonid=" + langOpt ).then((snap) => { // sort by id for (let x = 0; x < snap.length; x++) { for (let y = 0; y < snap.length; y++) { if (parseInt(snap[y].id) === x + 1) { buttonList.push(snap[y]); //id sorted button list if (snap[y].type === "FEEDBACK") { //one feedback per laguage document.getElementById("showFeedback").remove(); } } } } setDropdown(buttonList); }); } function loadHeaderData(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newGetHeader", "customer=" + hotelUID ).then((header) => { setHeader(header); }); } function loadMainData(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newGetMain", "customer=" + hotelUID ).then((mainObj) => { main = mainObj; if (main.status == "newSite") { $("#templateModal").modal("show"); } if (main.licenseid === undefined) { main.licenseid = ""; } subscribeUri = `https://www.tigertms.com/solutions/iportal-subscriptions/?hotel_name=${propertyName}&iportal_id=${hotelUID}&email_adress=${useremail}&license_key=${main.licenseid}`; subscribeEncoded = encodeURI(subscribeUri); if (main.licenseiportalactive || main.licenseiportalactive === "true") { document.getElementById("preview").src = CLIENTURL + "?h=" + hotelUID; document.getElementById("previewOther").src = CLIENTURL + "?h=" + hotelUID; document.getElementById("qrCode").src = "https://api.qrserver.com/v1/create-qr-code/?data=" + CLIENTURL + "?h=" + hotelUID; document.getElementById("qrCodeRedirect").href = CLIENTURL + "?h=" + hotelUID; grabFontsFromFb(hotelUID); loadSocialMediafromJSON(); setMain(mainObj); loadIcons(); loadWebRTC(); } else { document.getElementById("dadDiv").style.pointerEvents = "none"; let overlay = document.createElement("div"); overlay.classList.add("overlay"); let end = document.createElement("div"); end.style.pointerEvents = "auto"; end.classList.add("endDiv"); end.innerHTML = `
${ langdata.languages[themeLang].strings["freeTrialEnd"] + " " }setera.com${ " " + langdata.languages[themeLang].strings["toUpgrade"] }
${ langdata.languages[themeLang].strings["signout"] }
`; overlay.append(end); dadDiv.append(overlay); } }); } function loadJSON(name, callback) { var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json"); xobj.open("GET", name + ".json", true); // Replace 'my_data' with the path to your file xobj.onreadystatechange = function () { if (xobj.readyState == 4 && xobj.status == "200") { // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode callback(xobj.responseText); } }; xobj.send(null); } function loadIcons() { loadJSON("icons", function (response) { // Parse JSON string into object var actual_JSON = JSON.parse(response); localStorage.setItem("icons", JSON.stringify(actual_JSON)); }); } function setAllUserStatistic(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/allUserStatistic", "customer=" + hotelUID + "&uid=" + uid ).then((res) => { setMonthly(res); setWeek(res); setDates(res); }); } function setMonthlyClickStatistic(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/allClicksStatistic", "customer=" + hotelUID + "&uid=" + uid ).then((res) => { setMonthlyClicks(res); }); } function setWeeklyClickStatistic(hotelUID) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/last7daysClicks", "customer=" + hotelUID + "&uid=" + uid ).then((res) => { setWeeklyClicks(res); }); } function setGroupStatistics(uid, namesAndUid) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/groupUsersStatistics", "uid=" + uid ).then((res) => { setGroupCharts(res, namesAndUid); }); } function setWeekGroupStatistics(uid, namesAndUid) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/last7daysGroupUsersStatistics", "uid=" + uid ).then((res) => { setGroupCharts(res, namesAndUid, "week"); }); } function setDayClicks(hotelUID) { setDailyClicks(hotelUID, uid); } function setVoteStatistics(hotelUID, uid) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/getFeedback", "customer=" + hotelUID + "&uid=" + uid + "&period=30" ).then((res) => { setVotes(res); }); } /** --------------------------SETTER -------------------------- */ //render DOM & set value from DB function setMain(main) { document.getElementsByName("title")[0].value = main.title; document.getElementsByName("backgroundColor")[0].value = main.backgroundColor; document.getElementsByName("split")[0].value = main.split; document.getElementsByName("langIconColor")[0].value = main.langIconColor; document.getElementsByName("langIconPosition")[0].value = main.langIconPosition; document.getElementsByName("slide")[0].value = main.slide; checkMainbackgroundImage(main, hotelUID, uid); let dropdown = document.getElementById("langDropdown"); let langDDDisplay = document.querySelector(".langDD"); document.getElementById("preview").src += "?lang=" + langOpt; document.getElementById("previewOther").src += "?lang=" + langOpt; document.getElementById("licenceNumInput").value = main.licenseid; trial = main.licensewebrtcenabled; document.getElementById("selectSub").href = subscribeEncoded; if (main.licenseisiportaltrial || main.licenseisiportaltrial === "true") { var utcSeconds = main.licenseiportaltrialexpirydate._seconds; var d = new Date(0); d.setUTCSeconds(utcSeconds); let correctDate = d.toDateString(); document.getElementById("trialMsg").innerText = langdata.languages[themeLang].strings["freeTrial"] + " " + correctDate; document.getElementById("expireSubscribe").href = subscribeEncoded; } else { document.getElementById("trialMsg").innerText = langdata.languages[themeLang].strings["subscribed"]; document.getElementById("expireSubscribe").href = subscribeEncoded; } //use lang as global var lang = main.lang; langCount = main.langCount; langDDDisplay.textContent = langdata.languages[themeLang].strings["selectLanguage"]; removeAllChildNodes(dropdown); //language name & button count set to dropdown main.lang.forEach((lan) => { if (lan.name != "") { let a = document.createElement("a"); a.classList.add("dropdown-item", "lang-item"); a.innerHTML = lan.name + "
" + lan.counter + "
"; a.addEventListener("click", () => { changeLanguage(lan.code); }); dropdown.append(a); } }); activeLanguageDD(main.lang); document.getElementById( "signedInAs" ).innerText = ` - ${langdata.languages[themeLang].strings["signedUser"]} ${username}`; //social media check if (main.socialmedia != undefined || main.socialmedia != "") { setSocialmedia(main); } if (main.slide.value == "0") { //toggleBarpositionBelowheader(true); toggleBarflowDynamic(true); } else if (formMain.slide.value == "1") { //toggleBarpositionBelowheader(false); toggleBarflowDynamic(false); } } function setHeader(header) { document.getElementsByName("h_status")[0].checked = header.status; document.getElementsByName("h_backgroundColor")[0].value = header.backgroundColor; document.getElementsByName("h_logoPosition")[0].value = header.logoPosition; if (header.transparent) { document.getElementById("hideHeadBgCol").style.display = "block"; } else { document.getElementById("hideHeadBgCol").style.display = "none"; } document.getElementsByName("h_transparent")[0].checked = header.transparent; document.getElementsByName("h_3d")[0].checked = header.dimension; checkboxHeaderCheck(); checkHeaderbackgroundImage(header, hotelUID, uid); if (header.status) { toggleBarpositionBelowheader(true); } else { toggleBarpositionBelowheader(false); } } /** --------------------SUBMIT EVENT LISTENER -------------------------- */ document.getElementById("addButtonSubmit").addEventListener("click", () => { if (formButton.b_name.value.length === 0) { showAlert(langdata.languages[themeLang].strings["uploadPdfCheckName"]); } }); //MAIN UPDATE formMain.addEventListener("submit", function (e) { e.preventDefault(); document.getElementById("mainSubmitButton").hidden = true; document.getElementById("mainSubmitButtonAnim").hidden = false; //prevent double click let mainSubmitButton = document.getElementById("mainSubmitButton"); mainSubmitButton.setAttribute("disabled", "true"); setTimeout(() => { mainSubmitButton.removeAttribute("disabled"); }, 3000); let sendObj = { title: formMain.title.value, backgroundColor: formMain.backgroundColor.value, split: formMain.split.value, langIconColor: formMain.langIconColor.value, langIconPosition: formMain.langIconPosition.value, slide: formMain.slide.value, }; //show/ hide social media settings depenp on slide setting if (formMain.slide.value == "0") { toggleBarflowDynamic(true); document.getElementById("socialbarFlowDiv").style.display = "block"; } else if (formMain.slide.value == "1") { toggleBarflowDynamic(false); sendObj.social_barflow = "0"; document.getElementById("socialbarFlowDiv").style.display = "none"; } sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateMain", "customer=" + hotelUID + "&uid=" + uid + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { refreshPreview(); document.getElementById("mainSubmitButton").hidden = false; document.getElementById("mainSubmitButtonAnim").hidden = true; }); }); //HEADER UPDATE formHeader.addEventListener("submit", function (e) { e.preventDefault(); document.getElementById("headerSubmitButton").hidden = true; document.getElementById("headerSubmitButtonAnim").hidden = false; //prevent double click let headerSubmitButton = document.getElementById("headerSubmitButton"); headerSubmitButton.setAttribute("disabled", "true"); setTimeout(() => { headerSubmitButton.removeAttribute("disabled"); }, 3000); let sendObj = { backgroundColor: formHeader.h_backgroundColor.value, status: formHeader.h_status.checked, logoPosition: formHeader.h_logoPosition.value, transparent: formHeader.h_transparent.checked, dimension: formHeader.h_3d.checked, }; if (formHeader.h_status.checked) { toggleBarpositionBelowheader(true); } else { toggleBarpositionBelowheader(false); } sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateHeader", "customer=" + hotelUID + "&uid=" + uid + "&data=" + JSON.stringify(sendObj) ).then(() => { refreshPreview(); document.getElementById("headerSubmitButton").hidden = false; document.getElementById("headerSubmitButtonAnim").hidden = true; }); }); // delete button image (preview) //new button document .getElementById("deleteAddImgPreview") .addEventListener("click", () => { document.getElementById("b_backgroundImage").value = ""; document.getElementById("addPreviewImage").remove(); document.getElementById("deleteAddImgPreview").style.display = "none"; document.getElementById("bgTransHide").style.display = "block"; document.getElementById("overlayHide").style.display = "none"; document.getElementById("b_backgroundImageL").style.width = "50%"; document.getElementById("bgColTog").textContent = langdata.languages[themeLang].strings["backgroundColor"]; document.getElementById("bgColToHide").style.display = "block"; }); //edit button document .getElementById("deleteAddImgPreview2") .addEventListener("click", () => { document.getElementById("bu_backgroundImage").value = ""; document.getElementsByClassName( "subbuttonPreview" )[0].style.backgroundImage = ""; document.getElementById("deleteAddImgPreview2").style.display = "none"; updateButtonForm.bu_img_url.value = ""; document.getElementById("bgUTransHide").style.display = "block"; document.getElementById("overlayUHide").style.display = "none"; document.getElementById("bu_backgroundImageL").style.width = "50%"; document.getElementById("bgColTogg").textContent = langdata.languages[themeLang].strings["backgroundColor"]; // document.getElementById("overlayU-toggle").checked = true; document.getElementById("bggColToHide").style.display = "block"; }); //BUTTON ADD formButton.addEventListener("submit", function (e) { e.preventDefault(); let imageInput = e.target[21].files[0]; let buttonType = formButton.b_type.value; document.getElementById("addButtonSubmit").hidden = true; document.getElementById("addButtonSubmitAnim").hidden = false; //prevent double click let addButtonSubmit = document.getElementById("addButtonSubmit"); addButtonSubmit.addEventListener("click", () => { if (formButton.b_name.value === 0) { showAlert(langdata.languages[themeLang].strings["uploadPdfCheckName"]); document.getElementById("addButtonSubmit").hidden = false; document.getElementById("addButtonSubmitAnim").hidden = true; } }); addButtonSubmit.setAttribute("disabled", "true"); setTimeout(() => { addButtonSubmit.removeAttribute("disabled"); }, 3000); //default properties to send let sendObj = { id: formButton.b_id.value, name: formButton.b_name.value, font: formButton.b_font.value, fontColor: formButton.b_fontColor.value, iconColor: formButton.b_iconColor.value, backgroundColor: formButton.b_backgroundColor.value, icon: formButton.b_icon.value, type: formButton.b_type.value, style: formButton.b_style.value, fontSize: formButton.b_fontSize.value, opacity: formButton.b_opacity.value, iconPos: formButton.b_iconPos.value, iconSize: formButton.b_iconSize.value, shadowStyle: formButton.b_shadow.value, buttonRadius: formButton.b_radius.value, colorTransparency: formButton.b_colInput.value, overlayToggle: formButton.overlayToggle.checked, }; //checking BUTTON TYPE if (buttonType == "LINK") { let urlValue = formButton.b_url.value; if (document.getElementById("emailRadio").checked === true) { urlValue = "mailto:" + urlValue; } else if (document.getElementById("telRadio").checked === true) { urlValue = "tel:" + urlValue; } sendObj.onClick = "myhref('" + urlValue + " , " + formButton.b_window.value + "')"; } else if (buttonType == "SPEEDDIAL") { sendObj.onClick = "generateSpeedDial(this)"; sendObj.extension = formButton.d_number.value; } else if (buttonType == "MAP") { sendObj.onClick = "generateMap(this)"; sendObj.lat = formButton.lat.value; sendObj.lng = formButton.lng.value; sendObj.mapBgCol = document.getElementById("mapBgCol").value; } else if (buttonType == "Messaging") { sendObj.onClick = "myhref('https://wa.me/" + formButton.phoneInput.value + " " + "')"; // removed subscribe message ?text=subscribe until we bring back inotify } else if (buttonType == "POPUP") { $(".subMenuButton").removeClass("redMarked"); sendObj.onClick = "generateContent(this)"; sendObj.p_divColor = formButton.p_divColor.value; sendObj.p_text = $("#summernote").summernote("code"); sendObj.subObj = subObjList; subObjList = []; sendObj.summernoteBackCol = document.getElementsByName("p_divColor")[0].value; } else if (buttonType == "FEEDBACK") { sendObj.onClick = "generateFeedback(this)"; const questions = document.getElementsByClassName("question_holder"); let question_list = []; for (let x = 0; x < questions.length; x++) { question_list.push(questions[x].textContent); } sendObj.questions = question_list; sendObj = { ...sendObj, ...getFeedbackSettings() }; } else { showAlert("Unknow button type"); return; } //send the sendObj { all properties } to Firebase and add to buttonList //checking whether button background image is set if (imageInput != undefined && !imageInput.type.endsWith("gif")) { checkImgFilePromise(imageInput) .then(() => { let storageRef = firebase .storage() .ref( "images/" + hotelUID + "/" + "button" + "/" + sendObj.name + "." + imageInput.type.replace("image/", "") ); storageRef.put(imageInput).then(() => { getURL(storageRef.location.path).then((fullPath) => { sendObj.backgroundImage = fullPath; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newSetButton", "customer=" + hotelUID + "&uid=" + uid + "&buttonid=" + langOpt + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { buttonList.push(sendObj); //remove the entries in the dropdown and set it again document.getElementById("buttonForm").reset(); document.getElementById("buttonForm").style.display = "none"; sessionStorage.setItem("buttons", "enabled"); location.reload(); }); }); }); }) .catch((e) => console.log(e)); } else { // console.log("Add new button wihtout background"); sendObj.backgroundImage = ""; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newSetButton", "customer=" + hotelUID + "&uid=" + uid + "&buttonid=" + langOpt + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { buttonList.push(sendObj); document.getElementById("buttonForm").reset(); document.getElementById("buttonForm").style.display = "none"; sessionStorage.setItem("buttons", "enabled"); location.reload(); }); } }); //BUTTON UPDATE updateButtonForm.addEventListener("submit", function (e) { e.preventDefault(); let updateFormButton = document.getElementById("updateButtonForm"); //let hiddenIMGfield = document.getElementsByName("bu_img")[0]; let docID = updateButtonForm.bu_id.value; let id = updateButtonForm.bu_posID.value; let buttonType = updateButtonForm.bu_type.value; // console.log(e.target); let imageInput = e.target[22].files[0]; document.getElementById("updateButtonSubmit").hidden = true; document.getElementById("updateButtonSubmitAnim").hidden = false; //prevent double click let updateButtonSubmit = document.getElementById("updateButtonSubmit"); updateButtonSubmit.setAttribute("disabled", "true"); setTimeout(() => { updateButtonSubmit.removeAttribute("disabled"); }, 3000); let sendObj = { id: updateButtonForm.bu_posID.value, name: updateFormButton.bu_name.value, font: updateButtonForm.bu_font.value, fontColor: updateFormButton.bu_fontColor.value, iconColor: updateFormButton.bu_iconColor.value, backgroundColor: updateFormButton.bu_backgroundColor.value, icon: updateFormButton.bu_icon.value, type: updateFormButton.bu_type.value, style: updateFormButton.bu_style.value, fontSize: updateButtonForm.bu_fontSize.value, opacity: updateButtonForm.bu_opacity.value, iconPos: updateButtonForm.bu_iconPos.value, iconSize: updateButtonForm.bu_iconSize.value, shadowStyle: updateButtonForm.bu_shadow.value, buttonRadius: updateButtonForm.bu_radius.value, colorTransparency: updateButtonForm.bu_colInput.value, overlayToggle: updateButtonForm.overlayToggleU.checked, }; //check if old image should be deleted if (updateButtonForm.bu_img_url.value === "") { for (let x = 0; x < buttonList.length; x++) { if ( buttonList[x].docID === updateButtonForm.bu_id.value && buttonList[x].backgroundImage != "" ) { deleteImg( "buttons", updateButtonForm.bu_id.value, buttonList[x].backgroundImage, hotelUID, uid ); } } } //checking BUTTON TYPE if (buttonType == "LINK") { let urlValue = updateButtonForm.bu_url.value; if (document.getElementById("emailRadioU").checked === true) { urlValue = "mailto:" + urlValue; } else if (document.getElementById("telRadioU").checked === true) { urlValue = "tel:" + urlValue; } sendObj.onClick = "myhref('" + urlValue + " , " + updateButtonForm.bu_window.value + "')"; } else if (buttonType == "POPUP") { $(".subMenuButton").removeClass("redMarked"); sendObj.onClick = "generateContent(this)"; sendObj.p_divColor = updateFormButton.p_divColor.value; // sendObj.p_divColor = updateFormButton.p_divColor.value; sendObj.p_text = $("#summernote").summernote("code"); sendObj.subObj = subObjList; // sendObj.tabO = document.getElementsByName("p_window")[0].value; sendObj.summernoteBackCol = document.getElementsByName("p_divColor")[0].value; } else if (buttonType == "SPEEDDIAL") { sendObj.onClick = "generateSpeedDial(this)"; sendObj.extension = updateFormButton.du_number.value; } else if (buttonType == "Messaging") { let phoneInput = document.getElementById("iNotifyNumber"); sendObj.onClick = "myhref('https://wa.me/" + phoneInput.value + " " + "')"; // removed subscribe message ?text=subscribe until we bring back inotify } else if (buttonType == "MAP") { sendObj.onClick = "generateMap(this)"; sendObj.lat = updateButtonForm.lat.value; sendObj.lng = updateButtonForm.lng.value; sendObj.mapBgCol = document.getElementById("mapBgCol").value; } else if (buttonType === "FEEDBACK") { const questions = document.getElementsByClassName("question_holder"); let question_list = []; for (let x = 0; x < questions.length; x++) { question_list.push(questions[x].textContent); } sendObj = { ...sendObj, ...getFeedbackSettings() }; sendObj.questions = question_list; } else { console.alert("Not supported button type"); } //checking button background image if (imageInput != undefined && !imageInput.type.endsWith("gif")) { checkImgFilePromise(imageInput) .then(() => { let storageRef = firebase .storage() .ref( "images/" + hotelUID + "/" + "button" + "/" + sendObj.name + "." + imageInput.type.replace("image/", "") ); storageRef.put(imageInput).then(() => { //upload the image and use the full url to store it getURL(storageRef.location.path).then((fullPath) => { //upload the image and use the full url to store it sendObj.backgroundImage = fullPath; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateButton", "customer=" + hotelUID + "&buttonid=" + langOpt + "&uid=" + uid + "&docID=" + docID + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { // console.log("button has been updated"); showButtonsSetup(sendObj); document.getElementById("dropdownMenuButton").textContent = sendObj.name; setDropdown(buttonList); refreshPreview(); document.getElementById("updateButtonSubmit").hidden = false; document.getElementById("updateButtonSubmitAnim").hidden = true; }); }); }); }) .catch((e) => console.log(e)); } else { //keep the old image setup (image url) if (updateButtonForm.bu_img_url.value != "") { sendObj.backgroundImage = updateButtonForm.bu_img_url.value; } else { sendObj.backgroundImage = ""; } sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateButton", "customer=" + hotelUID + "&buttonid=" + langOpt + "&uid=" + uid + "&docID=" + docID + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { document.querySelector(".buttonDD").textContent = updateButtonForm.bu_name.value; document.getElementById("dropdownMenuButton").textContent = sendObj.name; setDropdown(buttonList); refreshPreview(); document.getElementById("updateButtonSubmit").hidden = false; document.getElementById("updateButtonSubmitAnim").hidden = true; }); } //update button list buttonList[id - 1] = sendObj; buttonList[id - 1].docID = docID; //remove dropdown entries and set them again with new one emptyButtonDD(); }); document .getElementById("deleteButtonConfirm") .addEventListener("click", () => { deleteButton(); }); let bStyle = document.getElementsByName("b_style")[0]; let bShadow = document.getElementsByName("b_shadowDiv")[0]; bStyle.addEventListener("change", () => { if (bStyle.value === "2") { bShadow.hidden = false; } else { bShadow.hidden = true; } }); let buStyle = document.getElementsByName("bu_style")[0]; let buShadow = document.getElementsByName("bu_shadowDiv")[0]; buStyle.addEventListener("change", () => { if (buStyle.value === "2") { buShadow.hidden = false; } else { buShadow.hidden = true; } }); /** --------------------IMAGE UPLOAD EVENT LISTENER -------------------------- */ // main background UPLOADER uploaderMain.addEventListener("change", (e) => { //get the file let file = e.target.files[0]; if (file.type.endsWith("gif")) { showAlert( file.type + " " + langdata.languages[themeLang].strings["fileTypeNot"] ); } else { checkImgFilePromise(file) .then(() => { //create a store ref document.getElementById("mainUploadFor").hidden = true; document.getElementById("mainUploadAnim").hidden = false; let storageRef = firebase .storage() .ref( "images/" + hotelUID + "/" + "main" + "." + file.type.replace("image/", "") ); //upload file storageRef.put(file).then(() => { getURL(storageRef.location.path_).then((fullPath) => { let sendObj = { backgroundImage: fullPath, }; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateMain", "customer=" + hotelUID + "&uid=" + uid + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { main.backgroundImage = fullPath; document.getElementById("mainUploadAnim").hidden = true; document.getElementById("mainUploadFor").hidden = false; checkMainbackgroundImage(main, hotelUID, uid); refreshPreview(); }); }); }); }) .catch((e) => console.log(e)); } }); // header background UPLOADER uploaderHeader.addEventListener("change", (e) => { //get the file let file = e.target.files[0]; console.log(file); if (file.type.endsWith("gif")) { showAlert( file.type + " " + langdata.languages[themeLang].strings["fileTypeNot"] ); } else { checkImgFilePromise(file) .then(() => { document.getElementById("headerUploadFor").hidden = true; document.getElementById("headerUploadAnim").hidden = false; //create a store ref let storageRef = firebase .storage() .ref( "images/" + hotelUID + "/" + "header" + "." + file.type.replace("image/", "") ); storageRef.put(file).then(() => { getURL(storageRef.location.path_).then((fullPath) => { let sendObj = { backgroundImage: fullPath, }; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newUpdateHeader", "customer=" + hotelUID + "&uid=" + uid + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ).then(() => { header.backgroundImage = fullPath; document.getElementById("headerUploadFor").hidden = false; document.getElementById("headerUploadAnim").hidden = true; checkHeaderbackgroundImage(header, hotelUID, uid); refreshPreview(); }); }); }); }) .catch((e) => console.log(e)); } }); /**--------------------DROPDOWN TYPE SELECTION -------------------------- */ document .getElementsByClassName("forText")[0] .addEventListener("click", () => { document.getElementsByName("buttonSelect")[0].textContent = langdata.languages[themeLang].strings["buttonList"]; }); document.getElementById("showLink").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showLink(); }); document.getElementById("showPopup").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showPopup(hotelUID); }); document.getElementById("showMap").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showMap(); }); document.getElementById("showDial").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showDial(); }); document.getElementById("showNotify").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showNotify(); }); document.getElementById("showFeedback").addEventListener("click", () => { document.getElementById("updateButtonForm").style.display = "none"; showFeedback(); }); /**--------------------EVENT LISTENER -------------------------- */ document.getElementById("deleteButtMsg").addEventListener("click", () => { let name = updateButtonForm.bu_name.value; document.getElementById("deleteBtnMsg").textContent = langdata.languages[themeLang].strings["deleteConfirm"] + " " + name + " " + langdata.languages[themeLang].strings["btn"]; }); document.getElementById("pdfButton").addEventListener("click", () => { const formButton = document.getElementById("buttonForm"); let buttonName = formButton.b_name.value; if (!buttonName) { showAlert(langdata.languages[themeLang].strings["uploadPdfCheckName"]); } else { $("#uploadPdfModal").modal("show"); showPDFUploadDiv("new"); } }); document.getElementById("pdfButton2").addEventListener("click", () => { const updateButtonForm = document.getElementById("updateButtonForm"); let buttonName = updateButtonForm.bu_name.value; if (!buttonName) { showAlert(langdata.languages[themeLang].strings["uploadPdfCheckName"]); } else { $("#uploadPdfModal").modal("show"); showPDFUploadDiv("edit"); } }); document.getElementById("changeOrder").addEventListener("click", () => { changePosition(); }); document.getElementById("openIcon1").addEventListener("click", () => { openIconDiv("0", 1); }); document.getElementById("openIcon2").addEventListener("click", () => { openIconDiv("0", 2); }); document.getElementById("d_add").addEventListener("click", () => { addPhone(); }); document.getElementById("copyStyle").addEventListener("click", () => { copyStyle(); }); document.getElementById("copyStyle2").addEventListener("click", () => { copyStyle2(); }); document.getElementById("addMitelUser").addEventListener("click", () => { addUser(document.getElementById("addMitelUser").name); setTimeout(() => { document.getElementById("addUserMitel").style.display = "none"; }, 500); }); document.getElementById("addTelepoUser").addEventListener("click", () => { addUser(document.getElementById("addTelepoUser").name); setTimeout(() => { document.getElementById("addUserTelepo").style.display = "none"; }, 500); }); document.getElementById("addNecUser").addEventListener("click", () => { addUser(document.getElementById("addNecUser").name); setTimeout(() => { document.getElementById("addUserNec").style.display = "none"; }, 500); }); document.getElementById("delMitelUser").addEventListener("click", () => { deleteUser("mitel"); }); document.getElementById("delNecUser").addEventListener("click", () => { deleteUser("nec"); }); document.getElementById("delTelepoUser").addEventListener("click", () => { deleteUser("telepo"); }); // document.getElementById("loadWebRTC").addEventListener("click", () => { // loadWebRTC(); // }); document.getElementById("showAddTelepo").addEventListener("click", () => { document.getElementById("addUserTelepo").style.display = "block"; }); document.getElementById("showAddMitel").addEventListener("click", () => { document.getElementById("addUserMitel").style.display = "block"; }); document.getElementById("showAddNec").addEventListener("click", () => { document.getElementById("addUserNec").style.display = "block"; }); document.getElementById("add_question").addEventListener("click", () => { addQuestion("new"); }); //icon preview document.getElementsByName("b_iconColor")[0].addEventListener("input", () => { document.getElementById("iconPreview").style.color = document.getElementsByName("b_iconColor")[0].value; }); document .getElementsByName("b_backgroundColor")[0] .addEventListener("input", () => { document.getElementById("iconPreview").style.background = document.getElementsByName("b_backgroundColor")[0].value; }); document .getElementsByName("bu_iconColor")[0] .addEventListener("change", () => { document.getElementById("iconPreview2").style.color = document.getElementsByName("bu_iconColor")[0].value; }); document .getElementsByName("bu_backgroundColor")[0] .addEventListener("change", () => { document.getElementById("iconPreview2").style.background = document.getElementsByName("bu_backgroundColor")[0].value; }); Array.from(document.getElementsByClassName("copyLang")).forEach(function ( element ) { element.addEventListener("click", () => { copyAllButtonData(element.value, uid); }); }); document.getElementById("resetCmBtn").addEventListener("click", () => { resetContentManager(hotelUID, uid); }); /**------------------------------ SETTERS ------------------------------------ */ //insert the buttons from DB into the dropdown function setDropdown(list) { for (let x = 0; x < list.length; x++) { let dropdown = document.getElementById("buttonDropdown"); let a = document.createElement("a"); a.classList.add("dropdown-item"); a.addEventListener("click", () => { showButtonsSetup(list[x]); }); a.textContent = list[x].name; dropdown.append(a); } } /**----------------------------------UPDATE FORM ------------------------------------ */ // let appMarkers; //generate new form for "update" button function showButtonsSetup(button) { document.getElementsByClassName("forText")[0].textContent = langdata.languages[themeLang].strings["buttonType"]; let docID = button.docID; let deleteButton = document.createElement("input"); let imgDiv = document.createElement("div"); //show update form let buttonForm = document.getElementById("buttonForm"); let updateButtonForm = document.getElementById("updateButtonForm"); //empty hidden img url field updateButtonForm.bu_img_url.value = ""; let buttonDD = document.querySelector(".buttonDD"); buttonDD.textContent = button.name; updateButtonForm.style.display = "block"; buttonForm.style.display = "none"; document.getElementById("iconPreview").textContent = ""; //get input fields let name = document.getElementsByName("bu_name")[0]; let type = document.getElementsByName("bu_type")[0]; let fontColor = document.getElementsByName("bu_fontColor")[0]; let backgroundColor = document.getElementsByName("bu_backgroundColor")[0]; let icon = document.getElementsByName("bu_icon")[0]; let iconColor = document.getElementsByName("bu_iconColor")[0]; let buttonURL = document.getElementsByName("bu_url")[0]; let buttonID = document.getElementsByName("bu_id")[0]; let style = document.getElementsByName("bu_style")[0]; let hiddenIMGfield = document.getElementsByName("bu_img")[0]; let iconPreview = document.getElementById("iconPreview2"); let posID = document.getElementsByName("bu_posID")[0]; let fontSize = document.getElementsByName("bu_fontSize")[0]; let opacityField = document.getElementsByName("bu_amountInput")[0]; let opacity = document.getElementsByName("bu_opacity")[0]; let font = document.getElementsByName("bu_font")[0]; let iconSize = document.getElementsByName("bu_iconSize")[0]; let phoneNum = document.getElementsByName("du_number")[0]; let fontFamily = document.getElementsByName("bu_font")[0]; let shadowStyle = document.getElementsByName("bu_shadow")[0]; let emailRadio = document.getElementById("emailRadioU"); let telRadio = document.getElementById("telRadioU"); let urlRadio = document.getElementById("urlRadioU"); let borderRadius = document.getElementsByName("bu_radius")[0]; let amountRadius = document.getElementsByName("bu_amountRadius")[0]; let colOpacity = document.getElementsByName("bu_colOpacity")[0]; let colOpacityInput = document.getElementsByName("bu_colInput")[0]; let overlayToggle = document.getElementsByName("overlayToggleU")[0]; let mapBgCol = document.getElementById("mapBgCol"); //image delete button deleteButton.type = "button"; deleteButton.classList.add("blackButton2"); deleteButton.setAttribute( "onClick", "deleteImg('buttons" + langOpt + "' ,'" + docID + "','" + button.backgroundImage + "','" + hotelUID + "','" + uid + "')" ); let tab; if ( button.onClick.slice(-3, -2) === "1" || button.onClick.slice(-3, -2) === "2" ) { tab = button.onClick.slice(-3, -2); } if (parseInt(tab) === 1) { document.getElementsByName("bu_window")[0].value = "1"; } else { document.getElementsByName("bu_window")[0].value = "2"; } //set value let index = button.onClick.indexOf(","); let corWeb = button.onClick.slice(0, index); buttonURL.value = corWeb.substring(8, button.onClick.length - 2); // set radio buttons and remove prefix let tel = corWeb.match(/tel:/g); let mailto = corWeb.match(/mailto:/g); if (tel) { telRadio.checked = true; buttonURL.value = buttonURL.value.slice(4, -1); setDestinationText("telephone", "update"); } else if (mailto) { emailRadio.checked = true; buttonURL.value = buttonURL.value.slice(7, -1); setDestinationText("emailAdd", "update"); } else { urlRadio.checked = true; setDestinationText("webUrl", "update"); } name.value = button.name; type.value = button.type; fontColor.value = button.fontColor; backgroundColor.value = button.backgroundColor; iconPreview.innerHTML = button.icon; icon.value = button.icon; if (button.icon) { document.getElementById("bu_iconHide").style.display = "block"; } else { document.getElementById("bu_iconHide").style.display = "none"; } iconColor.value = button.iconColor; buttonID.value = docID; style.value = button.style; hiddenIMGfield.value = button.backgroundImage; posID.value = button.id; fontSize.value = button.fontSize; opacityField.value = button.opacity; opacity.value = button.opacity; font.value = button.font; summernoteBackCol = button.summernoteBackCol; mapBgCol.value = button.mapBgCol; if (button.overlayToggle !== true && button.overlayToggle !== false) { overlayToggle.checked = true; } else { overlayToggle.checked = button.overlayToggle; } // default values for newly added styles that old users dont have if (!button.iconSize) { iconSize.value = "40"; } else { iconSize.value = button.iconSize; } if (!button.shadowStyle) { shadowStyle.value = "2"; } else { shadowStyle.value = button.shadowStyle; } if (!button.colorTransparency && !button.opacity) { colOpacity.value = "100"; colOpacityInput.value = "100"; } else if (button.colorTransparency) { colOpacity.value = button.colorTransparency; colOpacityInput.value = button.colorTransparency; } else if (button.opacity) { // cover old user opacity colOpacity.value = button.opacity; colOpacityInput.value = button.opacity; } if (!button.buttonRadius) { borderRadius.value = "5"; amountRadius.value = "5"; } else { borderRadius.value = button.buttonRadius; amountRadius.value = button.buttonRadius; } let buShadow = document.getElementsByName("bu_shadowDiv")[0]; if (button.style === "2") { buShadow.hidden = false; } else { buShadow.hidden = true; } // checks if font has been deleted and sets default if not deleted uses right font let defaultFont = "Arial"; Array.from(document.querySelector("#b_font").options).forEach(function ( option_element ) { let option_value = option_element.value; if (option_value === button.font) { defaultFont = button.font; } }); fontFamily.value = defaultFont; // if (button.extension === undefined) { phoneNum.value = ""; } else { phoneNum.value = button.extension; } document.getElementById("iconPreview2").style.backgroundColor = button.backgroundColor; document.getElementById("iconPreview2").style.color = button.iconColor; //remove image preview from previous button if (document.getElementById("updatePreview") != null) { document.getElementById("updatePreview").remove(); } if (document.getElementsByClassName("infoDiv")[0] != undefined) { document.getElementById("bu_url_div").style.display = "block"; deleteInfo(); } //check if BG image is set if (button.backgroundImage != "") { if (updateButtonForm.bu_img_url) { updateButtonForm.bu_img_url.value = button.backgroundImage; } else { updateButtonForm.bu_img_url.value = button.backgroundImage; } document.getElementById("bu_backgroundImageL").style.width = "24%"; document.getElementById("bgUTransHide").style.display = "none"; document.getElementById("overlayUHide").style.display = "block"; document.getElementById("bgColTogg").textContent = langdata.languages[themeLang].strings["overlayBGCol"]; } else { updateButtonForm.bu_img_url.value = ""; document.getElementById("bgUTransHide").style.display = "block"; document.getElementById("overlayUHide").style.display = "none"; document.getElementById("bgColTogg").textContent = langdata.languages[themeLang].strings["backgroundColor"]; } //TYPE CHECK if (button.type == "POPUP") { hideButtonURL(); //remove redirection URL showInfo(hotelUID); hideMap(); hideSpeed(); hideNotify(); let buttonForm = document.getElementById("updateButtonForm"); let subButton = document.getElementById("deleteButtMsg"); let text = document.getElementById("summernote"); let divColor = document.getElementsByName("p_divColor")[0]; let popup = document.getElementById("popupDetails"); popup.style.display = "block"; buttonForm.insertBefore(popup, subButton); text.innerHTML = button.p_text; divColor.value = button.p_divColor; subObjList = undefined; subObjList = button.subObj; let firstsubButton = true; for (let x = 0; x < subObjList.length; x++) { //console.log(button.subObj); if (subObjList[x].type != "DELETED") { subButtonCreated(x); document.getElementById("subButtonDD").value = ""; document.getElementById("typeSelectionDD").style.display = "none"; document.getElementById("subButTypeText").style.display = "none"; document.getElementById("subButTypeT").style.display = "none"; //remove doule DOM entries (summernote bug) setTimeout(() => { if (document.getElementById("subMenu" + x) !== null) { document.getElementById("subMenu" + x).remove(); } }, 1000); } } } else if (button.type === "SPEEDDIAL") { hideMap(); hideNotify(); hideButtonURL(); hidePopup(); if (!trial || trial === "false") { hideSpeed(); let buttonForm = document.getElementById("updateButtonForm"); document.getElementById("hideUpSpeed").style.display = "none"; buttonForm.style.display = "none"; let overlay = document.createElement("div"); overlay.classList.add("overlay"); let end = document.createElement("div"); end.classList.add("endDiv"); end.textContent = langdata.languages[themeLang].strings["disabledDial"]; overlay.setAttribute( "onclick", 'document.getElementsByClassName("overlay")[0].remove()' ); overlay.append(end); dadDiv.append(overlay); } else { let phoneList = document.getElementById("speedDialList"); removeAllChildNodes(phoneList); let speedDialDiv = document.getElementById("speedDialSection"); let buttonForm = document.getElementById("updateButtonForm"); let addButton = document.getElementById("deleteButtMsg"); // speedDialDiv.style.display = "block"; document.getElementById("hideUpSpeed").style.display = "block"; buttonForm.insertBefore(speedDialDiv, addButton); if (button.callNumbers) { button.callNumbers.forEach((callNum) => { renderNewPhone(callNum); }); } } } else if (button.type == "MAP") { hideButtonURL(); hideSpeed(); hideNotify(); hidePopup(); document.getElementsByName("b_type")[0].value = "MAP"; let searchInput = document.createElement("input"); let lat = document.createElement("input"); let lng = document.createElement("input"); let updateButtonForm = document.getElementById("updateButtonForm"); let updateButton = document.getElementById("deleteButtMsg"); let mapDetails = document.getElementById("mapDetails"); //check if a map details is already there if (document.getElementById("mapDetails") != null) { document.getElementById("mapDetails").remove(); } searchInput.setAttribute("id", "searchInput"); searchInput.type = "text"; searchInput.classList.add("controls"); lat.type = "hidden"; lng.type = "hidden"; lat.name = "lat"; lng.name = "lng"; lat.setAttribute("id", "lat"); lng.setAttribute("id", "lng"); lat.value = parseFloat(button.lat); lng.value = parseFloat(button.lng); mapDetails.append(searchInput); mapDetails.append(lat); mapDetails.append(lng); // mapDetails.style.display = "block"; updateButtonForm.insertBefore(mapDetails, updateButton); const map = new google.maps.Map(document.getElementById("map"), { center: { lat: parseFloat(button.lat), lng: parseFloat(button.lng) }, zoom: 13, }); map.controls[google.maps.ControlPosition.TOP_CENTER].push(searchInput); //searchInput add to DOM before execute setTimeout(() => { const input = document.getElementById("searchInput"); // map.controls[google.maps.ControlPosition.TOP_CENTER].push(input); const autocomplete = new google.maps.places.Autocomplete(input); autocomplete.bindTo("bounds", map); // Set the data fields to return when the user selects a place. autocomplete.setFields([ "address_components", "geometry", "icon", "name", ]); const infowindow = new google.maps.InfoWindow(); const marker = new google.maps.Marker({ map, anchorPoint: new google.maps.Point(0, -29), }); autocomplete.addListener("place_changed", function () { infowindow.close(); marker.setVisible(false); let place = autocomplete.getPlace(); if (!place.geometry) { window.alert("Autocomplete's returned place contains no geometry!"); return; } //If place has a geometry, then present it on a map if (place.geometry.viewpoint) { map.fitBounds(place.geometry.viewpoint); } else { map.setCenter(place.geometry.location); map.setZoom(17); } marker.setIcon({ url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), }); marker.setPosition(place.geometry.location); marker.setVisible(true); let address = ""; if (place.address_components) { address = [ (place.address_components[0] && place.address_components[0].short_name) || "", (place.address_components[1] && place.address_components[1].short_name) || "", (place.address_components[2] && place.address_components[2].short_name) || "", ].join(" "); } infowindow.setContent( "
" + place.name + "
" + "
" + address + "
" ); infowindow.open(map, marker); //Location details for (let i = 0; i < place.address_components.length; i++) { lat.value = place.geometry.location.lat(); lng.value = place.geometry.location.lng(); } }); }, 1000); document.getElementById("mapDetails").style.display = "block"; } else if (button.type === "Messaging") { hideButtonURL(); hideMap(); hideSpeed(); hidePopup(); document.getElementById("iNotify").style.display = "block"; let addButton = document.getElementById("deleteButtMsg"); let buttonForm = document.getElementById("updateButtonForm"); let iNotify = document.getElementById("iNotifyDetails"); let b_url_div = document.getElementById("bu_url_div"); let phoneInput = document.getElementById("iNotifyNumber"); phoneInput.value = button.onClick.slice(22, -2); iNotify.style.display = "block"; buttonForm.insertBefore(iNotify, addButton); } else if (button.type == "LINK") { hideNotify(); hideSpeed(); hideMap(); hidePopup(); document.getElementById("bu_url_div").style.display = "block"; } else if (button.type === "FEEDBACK") { hideNotify(); hideSpeed(); hideMap(); hideButtonURL(); hidePopup(); let feedbackDiv = document.getElementById("feedbackDetails"); let buttonForm = document.getElementById("updateButtonForm"); let addButton = document.getElementById("deleteButtMsg"); if (feedbackDiv.style.display === "none") { feedbackDiv.style.display = "block"; buttonForm.insertBefore(feedbackDiv, addButton); for (let x = 0; x < button.questions.length; x++) { addQuestion("update", button.questions[x]); } setFeedbackSettings(button); } } document.getElementsByName("bu_backgroundImage")[0].value = ""; renderUpdateButtonPreview(document.getElementById("updateButtonForm")); } //delete the current selected button function deleteButton() { let updateButtonForm = document.getElementById("updateButtonForm"); let docID = updateButtonForm.bu_id.value; let posID = updateButtonForm.bu_posID.value; let sendList = []; for (let x = 0; x < buttonList.length; x++) { if (posID < buttonList[x].id) { buttonList[x].id = buttonList[x].id - 1; } if (posID - 1 != x) { sendList.push(buttonList[x].docID); } } document.getElementById("deleteButtonConfirm").hidden = true; document.getElementById("deleteButtonConfirmAnim").hidden = false; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/newDeleteButton", "customer=" + hotelUID + "&buttonid=" + langOpt + "&uid=" + uid + "&docID=" + docID + "&btnList=" + sendList ).then(() => { sessionStorage.setItem("buttons", "enabled"); location.reload(); }); } document.getElementById("buttonTypeDD").addEventListener("click", () => { showAddButton(); subObjList = []; }); //show add button form and type dropdown (new button) function showAddButton() { // reset icon preview let iconParent = document.getElementById("iconPreview"); iconParent.style.background = "black"; iconParent.style.color = "white"; iconParent.innerHTML = ""; // save id value and set again after form reset let type = document.getElementsByName("b_type")[0].value; document.getElementById("buttonForm").reset(); document.getElementsByName("b_type")[0].value = type; let posID = document.getElementsByName("b_id")[0]; posID.value = buttonList.length + 1; } //show overlay and PDF div function showPDFUploadDiv(type) { const allowedExtensions = /(\.pdf|\.PDF)$/i; const formButton = document.getElementById("buttonForm"); const updateButtonForm = document.getElementById("updateButtonForm"); let pdfURLinput = document.getElementById("pdfURLinput"); let fileInput = document.getElementById("PDFfileinput"); let innerDiv = document.getElementById("pdfInnerProgress"); let progress; innerDiv.style.width = "0%"; let buttonName = ""; if (type === "new") { buttonName = formButton.b_name.value; } else if (type === "edit") { buttonName = updateButtonForm.bu_name.value; } fileInput.addEventListener("change", (e) => { e.preventDefault(); if (allowedExtensions.exec(fileInput.value)) { let count = 0; progress = setInterval(() => { if (count < 75) { count += 25; innerDiv.style.width = count + "%"; } }, 1000); let file = e.target.files[0]; let storageRef = firebase .storage() .ref("PDF/" + hotelUID + "/" + buttonName); storageRef .put(file) .then(() => { clearInterval(progress); getURL(storageRef.location.path).then(function (resp) { pdfURLinput.value = resp; innerDiv.style.width = "100%"; setURL(); }); }) .then(() => { let value; if (type === "new") { value = "new"; document.getElementById("urlRadio").checked = true; } else if (type === "edit") { value = "update"; document.getElementById("urlRadioU").checked = true; } setDestinationText("webUrl", value); }); } else { showAlert(langdata.languages[themeLang].strings["fileTypeNot"]); } }); } function changePosition() { let buttonPositionDiv = document.getElementById("displayButtonPosition"); let setButton = document.getElementById("applyPositions"); setButton.setAttribute("onClick", "savePosition('" + hotelUID + "')"); if (document.getElementById("buttonPositions")) { document.getElementById("buttonPositions").remove(); } let ol = document.createElement("ol"); ol.id = "buttonPositions"; ol.classList.add("example"); ol.style.paddingRight = "10px"; for (let x = 0; x < buttonList.length; x++) { let li = document.createElement("li"); li.classList.add("change-item"); let hiddenDocId = document.createElement("input"); hiddenDocId.type = "hidden"; hiddenDocId.value = buttonList[x].docID; li.textContent = buttonList[x].name; li.append(hiddenDocId); ol.append(li); } $(function () { $("ol.example").sortable(); }); buttonPositionDiv.append(ol); } /** --------------------ICON SECTION -------------------------- */ // save the id in global in order to remember if we are in add or update button list let savedFormID; // icon type change let iconSelectionD = document.getElementById("iconSelectionD"); iconSelectionD.addEventListener("change", () => { openIconDiv(iconSelectionD.value, savedFormID); }); // open icon div function openIconDiv(iconID, formID) { savedFormID = formID; let iconDiv = document.getElementById("iconDiv"); // remove previous appended icons removeAllChildNodes(iconDiv); let iconsToAppend = document.createElement("div"); let parsedIconID = parseInt(iconID); // parse icons let icons = JSON.parse(localStorage.getItem("icons")); // get icon collection according to id for (let x = 0; x < icons[parsedIconID][iconID].length; x++) { let svgDiv = document.createElement("div"); svgDiv.classList.add("col-2", "svg"); svgDiv.style.maxWidth = "10%"; svgDiv.setAttribute("onClick", "setIcon(this, " + savedFormID + ")"); let svg = icons[parsedIconID][iconID][x].svg; svgDiv.innerHTML = svg; iconsToAppend.append(svgDiv); } // add class to icons iconsToAppend.classList.add("row"); iconsToAppend.style.margin = "auto"; iconsToAppend.style.justifyContent = "center"; //appending iconDiv.append(iconsToAppend); } //add phone into the list and empty the form function addPhone() { let phoneName = document.getElementsByName("d_name")[0]; let phoneNumber = document.getElementsByName("d_number")[0]; let icon = document.getElementById("iconInput3"); if (phoneName.value == "" || phoneNumber.value == "" || icon == "") { alert("All Speed Dial properties are required"); } else { renderNewPhone({ extension: phoneNumber.value, name: phoneName.value, svg: icon.value, }); } } function renderNewPhone(obj) { let speedDialList = document.getElementById("speedDialList"); //create let numberDiv = document.createElement("div"); let innerNumber = document.createElement("div"); let innerName = document.createElement("div"); let innerIcon = document.createElement("div"); let p = document.createElement("p"); innerName.textContent = obj.name; innerNumber.textContent = obj.extension; innerIcon.innerHTML = obj.svg; p.innerHTML = ''; innerName.style.display = "inline-block"; innerNumber.style.display = "inline-block"; innerName.style.padding = "5px"; innerNumber.style.padding = "5px"; innerIcon.style.width = "20%"; innerIcon.style.marginLeft = "40%"; p.classList.add("deleteIt"); numberDiv.setAttribute("phoneName", obj.name); numberDiv.setAttribute("phoneNumber", obj.extension); numberDiv.setAttribute("phoneIcon", obj.svg); numberDiv.classList.add("w30", "phone-item"); numberDiv.setAttribute("onclick", "removeEle(this)"); numberDiv.append(innerName); numberDiv.append(innerNumber); numberDiv.append(innerIcon); numberDiv.append(p); speedDialList.append(numberDiv); setTimeout(() => { document.getElementsByName("d_name")[0].value = ""; document.getElementsByName("d_number")[0].value = ""; document.getElementById("iconInput3").value = ""; document.getElementById("iconPreview3").innerHTML = ""; }, 500); } function copyStyle() { let iconDiv = document.getElementById("copyStyleDiv"); removeAllChildNodes(iconDiv); for (let x = 0; x < buttonList.length; x++) { let btn = document.createElement("input"); btn.type = "button"; btn.value = buttonList[x].name; btn.addEventListener("click", () => { copyThisStyle(x); $("#copyStyleModal").modal("hide"); }); iconDiv.append(btn); btn.classList.add("copyStyleBtn"); } } function copyStyle2() { let iconDiv = document.getElementById("copyStyleDiv"); removeAllChildNodes(iconDiv); for (let x = 0; x < buttonList.length; x++) { let btn = document.createElement("input"); btn.type = "button"; btn.value = buttonList[x].name; if ( document.getElementsByName("bu_name")[0].value === buttonList[x].name ) { btn.hidden = true; } btn.addEventListener("click", () => { copyThisStyle2(x); $("#copyStyleModal").modal("hide"); }); iconDiv.append(btn); btn.classList.add("copyStyleBtn"); } } function copyThisStyle(id) { buttonForm.b_icon.value = buttonList[id].icon; buttonForm.b_iconSize.value = buttonList[id].iconSize; buttonForm.b_iconPos.value = buttonList[id].iconPos; buttonForm.b_style.value = buttonList[id].style; buttonForm.b_iconColor.value = buttonList[id].iconColor; buttonForm.b_font.value = buttonList[id].font; buttonForm.b_fontColor.value = buttonList[id].fontColor; buttonForm.b_fontSize.value = buttonList[id].fontSize; buttonForm.b_backgroundColor.value = buttonList[id].backgroundColor; buttonForm.b_opacity.value = buttonList[id].opacity; buttonForm.b_amountInput.value = buttonList[id].opacity; buttonForm.b_shadow.value = buttonList[id].shadowStyle; buttonForm.overlayToggle.checked = buttonList[id].overlayToggle; if (buttonList[id].buttonRadius) { buttonForm.b_amountRadius.value = buttonList[id].buttonRadius; buttonForm.b_radius.value = buttonList[id].buttonRadius; } else { buttonForm.b_amountRadius.value = "5"; buttonForm.b_radius.value = "5"; } if (buttonList[id].colorTransparency) { buttonForm.b_colOpacity.value = buttonList[id].colorTransparency; buttonForm.b_colInput.value = buttonList[id].colorTransparency; } else if (buttonList[id].opacity) { // cover old user opacity buttonForm.b_colOpacity.value = buttonList[id].opacity; buttonForm.b_colInput.value = buttonList[id].opacity; // } document.getElementById("iconPreview").innerHTML = buttonList[id].icon; document.getElementById("iconPreview").style.color = buttonList[id].iconColor; document.getElementById("iconPreview").style.background = buttonList[id].backgroundColor; let bShadow = document.getElementsByName("b_shadowDiv")[0]; if (buttonList[id].style == "2") { bShadow.hidden = false; } let event = new Event("change"); buttonForm.dispatchEvent(event); } function copyThisStyle2(id) { updateButtonForm.bu_opacity.value = buttonList[id].opacity; updateButtonForm.bu_icon.value = buttonList[id].icon; updateButtonForm.bu_fontSize.value = buttonList[id].fontSize; updateButtonForm.bu_style.value = buttonList[id].style; updateButtonForm.bu_backgroundColor.value = buttonList[id].backgroundColor; updateButtonForm.bu_iconColor.value = buttonList[id].iconColor; updateButtonForm.bu_fontColor.value = buttonList[id].fontColor; updateButtonForm.bu_font.value = buttonList[id].font; updateButtonForm.bu_iconPos.value = buttonList[id].iconPos; updateButtonForm.bu_iconSize.value = buttonList[id].iconSize; updateButtonForm.bu_amountInput.value = buttonList[id].opacity; updateButtonForm.bu_shadow.value = buttonList[id].shadowStyle; updateButtonForm.overlayToggleU.checked = buttonList[id].overlayToggle; if (buttonList[id].buttonRadius) { updateButtonForm.bu_radius.value = buttonList[id].buttonRadius; updateButtonForm.bu_amountRadius.value = buttonList[id].buttonRadius; } else { updateButtonForm.bu_radius.value = "5"; updateButtonForm.bu_amountRadius.value = "5"; } if (buttonList[id].colorTransparency) { updateButtonForm.bu_colOpacity.value = buttonList[id].colorTransparency; updateButtonForm.bu_colInput.value = buttonList[id].colorTransparency; } else if (buttonList[id].opacity) { // cover old user opacity updateButtonForm.bu_colOpacity.value = buttonList[id].opacity; updateButtonForm.bu_colInput.value = buttonList[id].opacity; // } document.getElementById("iconPreview2").innerHTML = buttonList[id].icon; document.getElementById("iconPreview2").style.color = buttonList[id].iconColor; document.getElementById("iconPreview2").style.background = buttonList[id].backgroundColor; let buShadow = document.getElementsByName("bu_shadowDiv")[0]; if (buttonList[id].style === "2") { buShadow.hidden = false; } renderUpdateButtonPreview(updateButtonForm); } buttonForm.addEventListener("change", () => { let name = buttonForm.b_name.value; let icon = buttonForm.b_icon.value; let iconSize = buttonForm.b_iconSize.value; let iconPos = buttonForm.b_iconPos.value; let style = buttonForm.b_style.value; let iconColor = buttonForm.b_iconColor.value; let font = buttonForm.b_font.value; let fontColor = buttonForm.b_fontColor.value; let fontSize = buttonForm.b_fontSize.value; let backgroundColor = buttonForm.b_backgroundColor.value; let opacity = buttonForm.b_opacity.value; let shadowStyle = buttonForm.b_shadow.value; let buttonRadius = buttonForm.b_radius.value; let colorTransparency = buttonForm.b_colOpacity.value; let overlayToggle = buttonForm.overlayToggle.checked; let btnDiv = document.createElement("div"); let subbtnDiv = document.createElement("div"); let btnP = document.createElement("p"); let img = document.createElement("img"); img.id = "addPreviewImage"; //get row / bodyDiv div let bodyDiv = document.getElementById("buttonPreview"); //set icon and font if (iconPos === "2") { btnP.innerHTML = "" + name + "" + "" + icon + ""; } else { btnP.innerHTML = "" + icon + "" + "" + name + ""; } btnP.style.color = fontColor; subbtnDiv.style.borderRadius = buttonRadius + "%"; // upload & set backgroundImage if (document.getElementsByName("b_backgroundImage")[0].files[0]) { let file = document.getElementsByName("b_backgroundImage")[0].files[0]; if (file.type.endsWith("gif")) { showAlert(langdata.languages[themeLang].strings["fileTypeNot"]); } else { document.getElementById("b_backgroundImageL").style.width = "24%"; document.getElementById("deleteAddImgPreview").style.display = "inline"; if (overlayToggle) { let rgbaCol = convertToRGB(backgroundColor, 25); subbtnDiv.style.backgroundImage = `linear-gradient(rgba${rgbaCol}, rgba${rgbaCol}), url('` + URL.createObjectURL(file) + "')"; document.getElementById("bgColToHide").style.display = "block"; } else { subbtnDiv.style.backgroundImage = "url(" + URL.createObjectURL(file) + ")"; document.getElementById("bgColToHide").style.display = "none"; } subbtnDiv.style.backgroundSize = "cover"; document.getElementById("bgTransHide").style.display = "none"; document.getElementById("overlayHide").style.display = "block"; document.getElementById("bgColTog").textContent = langdata.languages[themeLang].strings["overlayBGCol"]; } } //3D Button effect if (style === "2") { if (shadowStyle === "1") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 3px 3px 5px"; subbtnDiv.setAttribute("class", "threed_buttonShadow1"); } else if (shadowStyle === "2") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 6px 6px 8px"; subbtnDiv.setAttribute("class", "threed_buttonShadow2"); } else if (shadowStyle === "3") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 9px 9px 10px"; subbtnDiv.setAttribute("class", "threed_buttonShadow2"); } else { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 12px 12px 10px"; subbtnDiv.setAttribute("class", "threed_buttonShadow3"); } } if (opacity != "") { subbtnDiv.style.opacity = opacity + "%"; } btnDiv.classList.add("buttonPreview"); subbtnDiv.classList.add("subbuttonPreview"); // remove elements while (bodyDiv.firstChild) { bodyDiv.removeChild(bodyDiv.firstChild); } let split = document.getElementsByName("split")[0].value; if (split === "1") { subbtnDiv.style.width = "50%"; } else if (split === "2") { subbtnDiv.style.width = "30%"; } else { subbtnDiv.style.width = "20%"; } // background colour opacity if (colorTransparency) { let colWithTrans = convertToRGB(backgroundColor, colorTransparency); subbtnDiv.style.backgroundColor = "rgba" + colWithTrans; } else { subbtnDiv.style.backgroundColor = backgroundColor; //background color } // append elements subbtnDiv.appendChild(btnP); btnDiv.appendChild(subbtnDiv); subbtnDiv.append(img); bodyDiv.appendChild(btnDiv); if (document.getElementById("btnPP").childNodes[0]) { document.getElementById("btnPP").childNodes[0].style.height = iconSize; } }); const convertToRGB = (hex, opacity) => { let newOpacity = parseInt(opacity) / 100; let newHex = hex.substring(1); let aRgbHex = newHex.match(/.{1,2}/g); let a = parseInt(aRgbHex[0], 16); let b = parseInt(aRgbHex[1], 16); let c = parseInt(aRgbHex[2], 16); var aRgb = `(${a}, ${b}, ${c}, ${newOpacity})`; return aRgb; }; updateButtonForm.addEventListener("change", () => { renderUpdateButtonPreview(updateButtonForm); }); function renderUpdateButtonPreview(updateButtonForm) { let name = updateButtonForm.bu_name.value; let icon = updateButtonForm.bu_icon.value; let iconSize = updateButtonForm.bu_iconSize.value; let iconPos = updateButtonForm.bu_iconPos.value; let style = updateButtonForm.bu_style.value; let iconColor = updateButtonForm.bu_iconColor.value; let font = updateButtonForm.bu_font.value; let fontColor = updateButtonForm.bu_fontColor.value; let fontSize = updateButtonForm.bu_fontSize.value; let backgroundColor = updateButtonForm.bu_backgroundColor.value; let opacity = updateButtonForm.bu_opacity.value; let shadowStyle = updateButtonForm.bu_shadow.value; let buttonRadius = updateButtonForm.bu_radius.value; let colorTransparency = updateButtonForm.bu_colOpacity.value; let overlayToggle = updateButtonForm.overlayToggleU.checked; let btnDiv = document.createElement("div"); let subbtnDiv = document.createElement("div"); let btnP = document.createElement("p"); //get row / bodyDiv div let bodyDiv = document.getElementById("updateButtonPreview"); document.getElementById("deleteAddImgPreview2").style.display = "none"; //set icon and font if (iconPos === "2") { btnP.innerHTML = "" + name + "" + "" + icon + ""; } else { btnP.innerHTML = "" + icon + "" + "" + name + ""; } btnP.style.color = fontColor; subbtnDiv.style.borderRadius = buttonRadius + "%"; //check & set backgroundImage if (updateButtonForm.bu_img_url.value != "") { document.getElementById("deleteAddImgPreview2").style.display = "inline"; if (overlayToggle) { let rgbaCol = convertToRGB(backgroundColor, 25); subbtnDiv.style.backgroundImage = `linear-gradient(rgba${rgbaCol}, rgba${rgbaCol}), url('` + updateButtonForm.bu_img_url.value + "')"; // subbtnDiv.style.opacity = "0.75"; document.getElementById("bggColToHide").style.display = "block"; } else { subbtnDiv.style.backgroundImage = "url(" + updateButtonForm.bu_img_url.value + ")"; document.getElementById("bggColToHide").style.display = "none"; } subbtnDiv.style.backgroundSize = "cover"; } //upload & set backgroundImage if (document.getElementsByName("bu_backgroundImage")[0].files[0]) { let file = document.getElementsByName("bu_backgroundImage")[0].files[0]; if (file.type.endsWith("gif")) { showAlert(langdata.languages[themeLang].strings["fileTypeNot"]); } else { document.getElementById("bu_backgroundImageL").style.width = "24%"; document.getElementById("deleteAddImgPreview2").style.display = "inline"; if (overlayToggle) { let rgbaCol = convertToRGB(backgroundColor, 25); subbtnDiv.style.backgroundImage = `linear-gradient(rgba${rgbaCol}, rgba${rgbaCol}), url('` + URL.createObjectURL(file) + "')"; document.getElementById("bggColToHide").style.display = "block"; } else { subbtnDiv.style.backgroundImage = "url(" + URL.createObjectURL(file) + ")"; document.getElementById("bggColToHide").style.display = "none"; } subbtnDiv.style.backgroundSize = "cover"; document.getElementById("bgUTransHide").style.display = "none"; document.getElementById("overlayUHide").style.display = "block"; document.getElementById("bgColTogg").textContent = langdata.languages[themeLang].strings["overlayBGCol"]; } } //3D Button effect if (style === "2") { if (shadowStyle === "1") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 3px 3px 5px"; subbtnDiv.setAttribute("class", "threed_buttonShadow1"); } else if (shadowStyle === "2") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 6px 6px 8px"; subbtnDiv.setAttribute("class", "threed_buttonShadow2"); } else if (shadowStyle === "3") { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 9px 9px 10px"; subbtnDiv.setAttribute("class", "threed_buttonShadow2"); } else { subbtnDiv.style.boxShadow = "rgba(255, 255, 255, 0.2) -1px -1px 10px, rgba(0, 0, 0, 0.6) 12px 12px 10px"; subbtnDiv.setAttribute("class", "threed_buttonShadow3"); } } btnDiv.classList.add("buttonPreview"); subbtnDiv.classList.add("subbuttonPreview"); let split = document.getElementsByName("split")[0].value; if (split === "1") { subbtnDiv.style.width = "50%"; } else if (split === "2") { subbtnDiv.style.width = "30%"; } else { subbtnDiv.style.width = "20%"; } // background colour opacity if (colorTransparency) { let colWithTrans = convertToRGB(backgroundColor, colorTransparency); subbtnDiv.style.backgroundColor = "rgba" + colWithTrans; } else { subbtnDiv.style.backgroundColor = backgroundColor; //background color } // remove elements while (bodyDiv.firstChild) { bodyDiv.removeChild(bodyDiv.firstChild); } // append elements subbtnDiv.appendChild(btnP); btnDiv.appendChild(subbtnDiv); bodyDiv.appendChild(btnDiv); if (document.getElementById("btnPPP").childNodes[0]) { document.getElementById("btnPPP").childNodes[0].style.height = iconSize; } } function loadDefaultTemplates(id) { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/getTemplate", "customer=" + hotelUID + "&uid=" + uid + "&templateid=" + id ); } // Saves imported fonts on firebase document.getElementById("importFont").addEventListener("click", () => { let addedFont = document.getElementsByName("importFont")[0].value; let fontURL = document.getElementsByName("importFontURL")[0].value; // checks if both fields are filled and link is formatted properly to pass check if ( fontURL.endsWith('"stylesheet">') && addedFont.length !== 0 && fontURL.length !== 0 ) { let sendObj = { [addedFont]: fontURL }; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/setFont", "customer=" + hotelUID + "&uid=" + uid + "&buttonid=" + langOpt + "&data=" + encodeURIComponent(JSON.stringify(sendObj)) ); document.getElementById("succMsg").style.display = "block"; setTimeout(() => { document.getElementById("succMsg").style.display = "none"; sessionStorage.setItem("advanced", "enabled"); location.reload(); }, 2000); // if either of the text fields are empty , show appropriate error message } else if (addedFont.length === 0 || fontURL.length === 0) { document.getElementById("unSuccMsg").style.display = "block"; setTimeout(() => { document.getElementById("unSuccMsg").style.display = "none"; }, 3000); // if link is not formatted properly , show appropriate error message } else if (!fontURL.endsWith('"stylesheet">')) { document.getElementById("unSuccFormMsg").style.display = "block"; setTimeout(() => { document.getElementById("unSuccFormMsg").style.display = "none"; }, 3000); } }); // Grabs all font data and appends them on available font list const grabFontsFromFb = (hotelUID) => { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/getFonts", "customer=" + hotelUID ).then((snap) => { if (snap) { let urls = []; let fonts = []; for (const [key, value] of Object.entries(snap)) { urls.push(value); fonts.push(key); } // Appends all font import links urls.forEach( (url) => (document.getElementById("importedFonts").innerHTML += url) ); fonts.forEach((font) => { // appends options on list document.getElementById( "b_font" ).innerHTML += ``; document.getElementById( "bu_font" ).innerHTML += ``; document.getElementById( "importedFontsSec" ).innerHTML += ``; document.getElementById( "feedback_font" ).innerHTML += ``; gArrayFonts.push(font); }); } }); }; // Deletes font from firebase document.getElementById("delImportFont").addEventListener("click", () => { let fontToDel = document.getElementById("importedFontsSec").value; sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/delFont", "customer=" + hotelUID + "&fontName=" + fontToDel ).then(() => { document.getElementById("succDelMsg").style.display = "block"; setTimeout(() => { document.getElementById("succDelMsg").style.display = "none"; location.reload(); }, 2000); }); }); //--------------PBX------------ // Saves webrtc settings to firebase document.getElementById("saveToFB").addEventListener("click", () => { let chosenPbx = document.getElementById("pbxTypeSel").value; let realm = document.getElementsByName("rtcrealm:" + chosenPbx); let wss = document.getElementsByName("rtcwss:" + chosenPbx); let address = document.getElementsByName("rtcPbxAdress:" + chosenPbx); let wsp = document.getElementsByName("rtWSP:" + chosenPbx); let url = document.getElementsByName("rtcURL:" + chosenPbx); let sendObj = {}; let newUsers = []; let usersList = document.getElementById("newUser:" + chosenPbx); for (let x = 0; x < usersList.length; x++) { let obj = {}; obj.user = usersList[x].attributes.username.value; obj.password = usersList[x].attributes.password.value; newUsers.push(obj); } if (chosenPbx === "mitel") { sendObj = { users: newUsers, type: chosenPbx, wss: wss[0].value, pbxIp: address[0].value, wss_port: wsp[0].value, api_url: url[0].value, }; } else { sendObj = { users: newUsers, realm: realm[0].value, type: chosenPbx, wss: wss[0].value, }; } sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/setWebRTC", "customer=" + hotelUID + "&uid=" + uid + "&buttonid=" + langOpt + "&data=" + JSON.stringify(sendObj) ).then(() => { sessionStorage.setItem("advanced", "enabled"); location.reload(); }); }); function loadWebRTC() { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/getWebRTC", "customer=" + hotelUID ).then((rtcSet) => { if (rtcSet) { rtcType(rtcSet); testCaller(rtcSet); document.getElementById("pbxTypeSel").value = rtcSet.type; setPBX(rtcSet.type); } }); } $(document).ready(function () { document.getElementById("loadingAnim").style.display = "none"; document.getElementById("dadDiv").style.display = "block"; }); // set group statistics 7 days/30 days let changeDaysForGroup = document.getElementsByName("timeRadio"); for (let i = 0; i < changeDaysForGroup.length; i++) { changeDaysForGroup[i].addEventListener("change", () => { if (changeDaysForGroup[i].value === "30") { setGroupStatistics(uid, namesAndUid); } else { setWeekGroupStatistics(uid, namesAndUid); } }); } //social media function setSocialmedia(main) { const social_status = main.social_status; const socialObj = main.socialmedia; document.getElementById("socialbarBackgroundcolor").value = main.social_barbackgroundcolor; document.getElementById("socialbarOpacity_number").value = main.social_baropacity; document.getElementById("socialbarOpacity_range").value = main.social_baropacity; document.getElementById("socialBarLocation").value = parseInt( main.social_barposition ); document.getElementById("socialIconsLocation").value = parseInt( main.social_iconsposition ); document.getElementById("socialbarSize").value = parseInt( main.social_barsize ); document.getElementById("socialbarFlow").value = parseInt( main.social_barflow ); if (social_status !== undefined && social_status === true) { document.getElementById("social-toggle").checked = true; document.getElementById("socialmediaDiv").style.display = "block"; } setTimeout(() => { for (let name in socialObj) { //update the `; } else { document.getElementById( "newUser:" + obj.type ).innerHTML += ``; } document.getElementById( "testCallList" ).innerHTML += ``; if (obj.type) { setTimeout(() => { document.getElementsByName("rtcuser:" + obj.type)[0].value = ""; document.getElementsByName("rtcpassword:" + obj.type)[0].value = ""; }, 500); } } const rtcType = (rtcSet) => { if (rtcSet.type) { if (rtcSet.type === "mitel") { if (rtcSet.pbxIp) { document.getElementById("rtcPbxAdress:" + rtcSet.type).value = rtcSet.pbxIp; } if (rtcSet.wss_port) { document.getElementById("rtWSP:" + rtcSet.type).value = rtcSet.wss_port; } if (rtcSet.api_url) { document.getElementById("rtcURL:" + rtcSet.type).value = rtcSet.api_url; } } if (rtcSet.type !== "mitel") { if (rtcSet.realm) { document.getElementById("rtcrealm:" + rtcSet.type).value = rtcSet.realm; } } if (rtcSet.wss) { document.getElementById("rtcwss:" + rtcSet.type).value = rtcSet.wss; } rtcSet.users.forEach((user) => { renderNewUser(user, rtcSet.type); }); } }; const deleteUser = (type) => { let userList = document.getElementById("newUser:" + type); for (let i = 0; i < userList.length; i++) { if (userList.options[i].value === userList.value) { userList.remove(i); } } }; document.getElementById("dlQrCode").addEventListener("click", () => { downloadImage(); }); // click to download image function async function downloadImage() { let imageSrc = document.getElementById("qrCode").src; const image = await fetch(imageSrc); const imageBlog = await image.blob(); const imageURL = URL.createObjectURL(imageBlog); const link = document.createElement("a"); link.href = imageURL; link.download = "iPortal QR Code"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } // show / hide password document.getElementById("showPassword").addEventListener("click", () => { if (document.getElementById("loginPassword").type === "text") { document.getElementById("loginPassword").type = "password"; } else { document.getElementById("loginPassword").type = "text"; } }); const resetContentManager = (hotelUID, uid) => { let resetButton = document.getElementById("resetCmBtn"); resetButton.addEventListener("click", () => { resetButton.disabled = true; resetContentManagerDone(hotelUID, uid); }); sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/resetSite", "customer=" + hotelUID + "&uid=" + uid ).then(() => { document.cookie = "langOpt=en"; location.reload(); }); }; let langCodes = [ { en: "English", de: "German", it: "Italian", fr: "French", es: "Spanish", ru: "Russian", ar: "Arabic", cn: "Chinese", tr: "Turkish", jp: "Japanese", }, ]; let months; // = [ // "", // "January", // "February", // "March", // "April", // "May", // "June", // "July", // "August", // "September", // "October", // "November", // "December", // ]; const setMonthly = (data) => { let totVisits = document.getElementById("totVisits"); let uniVisits = document.getElementById("uniVisits"); let aveVisits = document.getElementById("aveVisits"); let deskVisits = document.getElementById("deskUsers"); let mobVisits = document.getElementById("mobUsers"); let langUsersDiv = document.getElementById("langUsersInputs"); let andrUsers = document.getElementById("andrUsers"); let iosUsers = document.getElementById("iosUsers"); let totalVisits = 0; let uniqueVisits = 0; let averageVisits = 0; let desktopVisits = 0; let mobileVisits = 0; let androidVisits = 0; let iosVisits = 0; let visitsByLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; let visitsByHour = [ { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, }, ]; let datesForChart = []; let visitsForChart = []; let totalVisitsForChart = []; let nextMonthVisits = []; let nextYearVisits = []; let deciderMonth = 0; let deciderYear = 0; // find smallest month and year for (let i = 0; i < Object.keys(data).length; i++) { let year = parseInt(Object.keys(data)[i].slice(4)); let month = parseInt(Object.keys(data)[i].slice(2, 4)); if (deciderYear === 0) { deciderYear = year; } else if (deciderYear > year) { deciderYear = parseInt(Object.keys(data)[i].slice(4)); } if (deciderYear === year) { if (deciderMonth === 0) { deciderMonth = month; } else if (deciderMonth > month) { deciderMonth = parseInt(Object.keys(data)[i].slice(2, 4)); } } } let objectKeys = Object.keys(data); for (let i = 0; i < objectKeys.length; i++) { let year = parseInt(objectKeys[i].slice(4)); let month = parseInt(objectKeys[i].slice(2, 4)); if (parseInt(deciderYear) < year) { nextYearVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } else if (deciderYear === year && deciderMonth < month) { nextMonthVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } } let perfectlySorted = objectKeys .sort() .concat(nextMonthVisits.sort(), nextYearVisits.sort()); for (let i = 0; i < perfectlySorted.length; i++) { if (i === perfectlySorted.length - 1) { let index = perfectlySorted[0].slice(2, 4); let otherIndex = perfectlySorted[i].slice(2, 4); if (index.charAt(0) === "0") { index = perfectlySorted[0].slice(3, 4); } if (otherIndex.charAt(0) === "0") { otherIndex = perfectlySorted[perfectlySorted.length - 1].slice(3, 4); } let month = months[index]; let otherMonth = months[otherIndex]; if (month && otherMonth) { lastThirty = `${perfectlySorted[0].slice(0, 2)} ${month} ${ langdata.languages[themeLang].strings["to"] } ${perfectlySorted[i].slice(0, 2)} ${otherMonth}`; } } var date = [ perfectlySorted[i].slice(0, 2), " ", months[parseInt(perfectlySorted[i].slice(2, 4))].slice(0, 3), ].join(""); let newKey = perfectlySorted[i]; datesForChart.push(date); if (data[newKey].totalUsers) { totalVisits += parseInt(data[newKey].totalUsers); totalVisitsForChart.push(parseInt(data[newKey].totalUsers)); } else { totalVisitsForChart.push(0); } if (data[newKey].uniqueUsers) { uniqueVisits += parseInt(data[newKey].uniqueUsers); visitsForChart.push(parseInt(data[newKey].uniqueUsers)); } else { visitsForChart.push(0); } if (data[newKey].platform_Win32) { desktopVisits += parseInt(data[newKey].platform_Win32); } if (data[newKey].platform_MACIntel) { desktopVisits += parseInt(data[newKey].platform_MACIntel); androidVisits += parseInt(data[newKey].platform_MACIntel); } if (data[newKey].platform_iPhone) { mobileVisits += parseInt(data[newKey].platform_iPhone); iosVisits += parseInt(data[newKey].platform_iPhone); } if (data[newKey].platform_Android) { mobileVisits += parseInt(data[newKey].platform_Android); } const langUsers = ts("lang_", data[newKey]); for (let langKey of Object.keys(langUsers)) { let key = Object.keys(langUsers[langKey])[0]; visitsByLang[key] += Object.values(langUsers[langKey])[0]; } const hoursUsers = ts("hours_", data[newKey]); for (let hourKey of Object.keys(hoursUsers)) { let key = Object.keys(hoursUsers[hourKey])[0]; visitsByHour[0][key] += parseInt(Object.values(hoursUsers[hourKey])[0]); } } removeAllChildNodes(langUsersDiv); for (let key of Object.keys(visitsByLang)) { if (visitsByLang[key] != 0) { let langInput = document.createElement("input"); langInput.classList.add("form-control", "w30"); langInput.type = "number"; langInput.value = visitsByLang[key]; langInput.readOnly = true; let langName = langCodes[0][key]; langUsersDiv.append(langName); langUsersDiv.append(document.createElement("br")); langUsersDiv.append(langInput); langUsersDiv.append(document.createElement("br")); } } // hourly visits chart let allHoursArray = []; for (let x = 0; x < 24; x++) { allHoursArray[x] = visitsByHour[0][x]; } document.getElementById("mymonthChartDivInner").innerHTML = ''; var ctx = document.getElementById("mymonthChart").getContext("2d"); new Chart(ctx, { type: "line", data: { labels: [ "12am", "1am", "2am", "3am", "4am", "5am", "6am", "7am", "8am", "9am", "10am", "11am", "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm", "9pm", "10pm", "11pm", ], datasets: [ { label: langdata.languages[themeLang].strings["totalVisitsByH"], data: allHoursArray, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { scales: { y: { beginAtZero: true, }, }, plugins: { legend: { onClick: null, }, title: { display: true, text: `${currentProperty} - ${lastThirty}`, }, }, }, }); // visits by dates chart document.getElementById("mymonthChartVisitDivInner").innerHTML = ''; var ctxD = document.getElementById("mymonthChartVisit").getContext("2d"); new Chart(ctxD, { type: "line", data: { labels: datesForChart, datasets: [ { label: langdata.languages[themeLang].strings["uniVisitsByD"], data: visitsForChart, backgroundColor: ["rgba(255,183,0)"], borderColor: ["rgba(255,183,0)"], borderWidth: 1, }, { label: langdata.languages[themeLang].strings["totVisitsByD"], data: totalVisitsForChart, backgroundColor: ["rgba(255,69,0,1.0)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { title: { display: true, text: `${currentProperty} - ${lastThirty}`, }, }, }, }); andrUsers.value = androidVisits; iosUsers.value = iosVisits; totVisits.value = totalVisits; uniVisits.value = uniqueVisits; averageVisits = totalVisits / uniqueVisits; if (averageVisits) { aveVisits.value = averageVisits.toFixed(1); } deskVisits.value = desktopVisits; mobVisits.value = mobileVisits; let restVisits = totalVisits - uniqueVisits; if (uniqueVisits || restVisits) { document.getElementById("mymonthPieDivInner").innerHTML = ''; var ctxP = document.getElementById("mymonthPie").getContext("2d"); new Chart(ctxP, { type: "doughnut", plugins: [ChartDataLabels], data: { labels: [ `${langdata.languages[themeLang].strings["uniVisits"]}: ${uniqueVisits}`, `${langdata.languages[themeLang].strings["repeVisits"]}: ${restVisits}`, ], datasets: [ { data: [uniqueVisits, restVisits], backgroundColor: ["rgba(255,183,0)", "rgba(231,114,35)"], hoverOffset: 4, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { formatter: (value, ctx) => { let sum = 0; let dataArr = ctx.chart.data.datasets[0].data; dataArr.map((data) => { sum += data; }); let percentage = 0; if (value === 0) { null; } else { percentage = ((value * 100) / sum).toFixed(2) + "%"; } return percentage; }, color: "#fff", }, title: { display: true, text: `${currentProperty} - ${lastThirty}`, }, }, }, }); } else { document.getElementById("downloadMPChart").style.display = "none"; } }; const setWeek = (data) => { let totVisits = document.getElementById("totVisitsW"); let uniVisits = document.getElementById("uniVisitsW"); let aveVisits = document.getElementById("aveVisitsW"); let deskVisits = document.getElementById("deskUsersW"); let mobVisits = document.getElementById("mobUsersW"); let langUsersDiv = document.getElementById("langUsersInputsW"); let andrUsers = document.getElementById("andrUsersW"); let iosUsers = document.getElementById("iosUsersW"); let datesForChart = []; let visitsForChart = []; let totalVisitsForChart = []; let totalVisits = 0; let uniqueVisits = 0; let averageVisits = 0; let desktopVisits = 0; let mobileVisits = 0; let androidUsers = 0; let iOSusers = 0; let visitsByLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; let visitsByHour = [ { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, }, ]; let nextMonthVisits = []; let nextYearVisits = []; let deciderMonth = 0; let deciderYear = 0; // find smallest month and year for (let i = 0; i < Object.keys(data).length; i++) { let year = parseInt(Object.keys(data)[i].slice(4)); let month = parseInt(Object.keys(data)[i].slice(2, 4)); if (deciderYear === 0) { deciderYear = year; } else if (deciderYear > year) { deciderYear = parseInt(Object.keys(data)[i].slice(4)); } if (deciderYear === year) { if (deciderMonth === 0) { deciderMonth = month; } else if (deciderMonth > month) { deciderMonth = parseInt(Object.keys(data)[i].slice(2, 4)); } } } let objectKeys = Object.keys(data); for (let i = 0; i < objectKeys.length; i++) { let year = parseInt(objectKeys[i].slice(4)); let month = parseInt(objectKeys[i].slice(2, 4)); if (parseInt(deciderYear) < year) { nextYearVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } else if (deciderYear === year && deciderMonth < month) { nextMonthVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } } let perfectlySorted = objectKeys .sort() .concat(nextMonthVisits.sort(), nextYearVisits.sort()); /* if (Object.keys(data).length < 7) { for (let i = 0; i < perfectlySorted.length; i++) { if (i === perfectlySorted.length - 1) { let index = perfectlySorted[0].slice(2, 4); let otherIndex = perfectlySorted[i].slice(2, 4); if (index.charAt(0) === "0") { index = perfectlySorted[0].slice(3, 4); } if (otherIndex.charAt(0) === "0") { otherIndex = perfectlySorted[perfectlySorted.length - 1].slice(3, 4); } let month = months[index]; let otherMonth = months[otherIndex]; if (month && otherMonth) { console.log(perfectlySorted); lastSeven = `${perfectlySorted[0].slice(0, 2)} ${month} ${ langdata.languages[themeLang].strings["to"] } ${perfectlySorted[i].slice(0, 2)} ${otherMonth}`; } } let newKey = perfectlySorted[i]; var date = [ perfectlySorted[i].slice(0, 2), " ", months[parseInt(perfectlySorted[i].slice(2, 4))].slice(0, 3), ].join(""); datesForChart.push(date); if (data[newKey].uniqueUsers) { uniqueVisits += parseInt(data[newKey].uniqueUsers); visitsForChart.push(parseInt(data[newKey].uniqueUsers)); } else { visitsForChart.push(0); } if (data[newKey].totalUsers) { totalVisits += parseInt(data[newKey].totalUsers); totalVisitsForChart.push(parseInt(data[newKey].totalUsers)); } else { totalVisitsForChart.push(0); } if (data[newKey].platform_Win32) { desktopVisits += parseInt(data[newKey].platform_Win32); } if (data[newKey].platform_MACIntel) { desktopVisits += parseInt(data[newKey].platform_MACIntel); } if (data[newKey].platform_iPhone) { mobileVisits += parseInt(data[newKey].platform_iPhone); iOSusers += parseInt(data[newKey].platform_iPhone); } if (data[newKey].platform_Android) { mobileVisits += parseInt(data[newKey].platform_Android); androidUsers += parseInt(data[newKey].platform_Android); } const langUsers = ts("lang_", data[newKey]); for (let langKey of Object.keys(langUsers)) { let key = Object.keys(langUsers[langKey])[0]; visitsByLang[key] += Object.values(langUsers[langKey])[0]; } const hoursUsers = ts("hours_", data[newKey]); for (let hourKey of Object.keys(hoursUsers)) { let key = Object.keys(hoursUsers[hourKey])[0]; visitsByHour[0][key] += parseInt(Object.values(hoursUsers[hourKey])[0]); } } } else {*/ for (let i = 7; i > 0; i--) { let length = perfectlySorted.length - i; let newKey = perfectlySorted[length]; if (i === 1) { let index = perfectlySorted[perfectlySorted.length - 7].slice(2, 4); let otherIndex = perfectlySorted[perfectlySorted.length - 1].slice(2, 4); if (index.charAt(0) === "0") { index = perfectlySorted[perfectlySorted.length - 7].slice(3, 4); } if (otherIndex.charAt(0) === "0") { otherIndex = perfectlySorted[perfectlySorted.length - 1].slice(3, 4); } let month = months[index]; let otherMonth = months[otherIndex]; if (month && otherMonth) { lastSeven = `${perfectlySorted[perfectlySorted.length - 7].slice( 0, 2 )} ${month} ${ langdata.languages[themeLang].strings["to"] } ${perfectlySorted[perfectlySorted.length - 1].slice( 0, 2 )} ${otherMonth}`; } } var date = [ newKey.slice(0, 2), " ", months[parseInt(newKey.slice(2, 4))].slice(0, 3), ].join(""); datesForChart.push(date); if (data[newKey].totalUsers) { totalVisits += parseInt(data[newKey].totalUsers); totalVisitsForChart.push(parseInt(data[newKey].totalUsers)); } else { totalVisitsForChart.push(0); } if (data[newKey].uniqueUsers) { uniqueVisits += parseInt(data[newKey].uniqueUsers); visitsForChart.push(parseInt(data[newKey].uniqueUsers)); } else { visitsForChart.push(0); } if (data[newKey].platform_Win32) { desktopVisits += parseInt(data[newKey].platform_Win32); } if (data[newKey].platform_MACIntel) { desktopVisits += parseInt(data[newKey].platform_MACIntel); } if (data[newKey].platform_iPhone) { mobileVisits += parseInt(data[newKey].platform_iPhone); } if (data[newKey].platform_Android) { mobileVisits += parseInt(data[newKey].platform_Android); } const langUsers = ts("lang_", data[newKey]); for (let langKey of Object.keys(langUsers)) { let key = Object.keys(langUsers[langKey])[0]; visitsByLang[key] += Object.values(langUsers[langKey])[0]; } const hoursUsers = ts("hours_", data[newKey]); for (let hourKey of Object.keys(hoursUsers)) { let key = Object.keys(hoursUsers[hourKey])[0]; visitsByHour[0][key] += parseInt(Object.values(hoursUsers[hourKey])[0]); } } //} removeAllChildNodes(langUsersDiv); for (let key of Object.keys(visitsByLang)) { if (visitsByLang[key] != 0) { let langInput = document.createElement("input"); langInput.classList.add("form-control", "w30"); langInput.type = "number"; langInput.value = visitsByLang[key]; langInput.readOnly = true; let langName = langCodes[0][key]; langUsersDiv.append(langName); langUsersDiv.append(document.createElement("br")); langUsersDiv.append(langInput); langUsersDiv.append(document.createElement("br")); } } andrUsers.value = androidUsers; iosUsers.value = iOSusers; totVisits.value = totalVisits; uniVisits.value = uniqueVisits; averageVisits = totalVisits / uniqueVisits; if (averageVisits) { aveVisits.value = averageVisits.toFixed(1); } deskVisits.value = desktopVisits; mobVisits.value = mobileVisits; let restVisits = totalVisits - uniqueVisits; // visits by hours chart let allHoursArray = []; for (let x = 0; x < 24; x++) { allHoursArray[x] = visitsByHour[0][x]; } document.getElementById("myweekChartDivInner").innerHTML = ''; var ctx = document.getElementById("myweekChart").getContext("2d"); new Chart(ctx, { type: "line", data: { labels: [ "12am", "1am", "2am", "3am", "4am", "5am", "6am", "7am", "8am", "9am", "10am", "11am", "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm", "9pm", "10pm", "11pm", ], datasets: [ { label: langdata.languages[themeLang].strings["totalVisitsByH"], data: allHoursArray, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { scales: { y: { beginAtZero: true, }, }, plugins: { legend: { onClick: null, }, title: { display: true, text: `${currentProperty} - ${lastSeven}`, }, }, }, }); // visits by dates chart document.getElementById("myweekChartVisitDivInner").innerHTML = ''; var ctxD = document.getElementById("myweekChartVisit").getContext("2d"); new Chart(ctxD, { type: "line", data: { labels: datesForChart, datasets: [ { label: langdata.languages[themeLang].strings["uniVisitsByD"], data: visitsForChart, backgroundColor: ["rgba(255,183,0)"], borderColor: ["rgba(255,183,0)"], borderWidth: 1, }, { label: langdata.languages[themeLang].strings["totVisitsByD"], data: totalVisitsForChart, backgroundColor: ["rgba(255,69,0,1.0)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { title: { display: true, text: `${currentProperty} - ${lastSeven}`, }, }, }, }); // pie chart if (uniqueVisits || restVisits) { document.getElementById("myweekPieDivInner").innerHTML = ''; var ctxP = document.getElementById("myweekPie").getContext("2d"); new Chart(ctxP, { type: "doughnut", plugins: [ChartDataLabels], data: { labels: [ `${langdata.languages[themeLang].strings["uniVisits"]}: ${uniqueVisits}`, `${langdata.languages[themeLang].strings["repeVisits"]}: ${restVisits}`, ], datasets: [ { data: [uniqueVisits, restVisits], backgroundColor: ["rgba(255,183,0)", "rgba(231,114,35)"], hoverOffset: 4, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { formatter: (value, ctx) => { let sum = 0; let dataArr = ctx.chart.data.datasets[0].data; dataArr.map((data) => { sum += data; }); let percentage = 0; if (value === 0) { null; } else { percentage = ((value * 100) / sum).toFixed(2) + "%"; } return percentage; }, color: "#fff", }, title: { display: true, text: `${currentProperty} - ${lastSeven}`, }, }, }, }); } else { document.getElementById("downloadDPChart").style.display = "none"; document.getElementById("myweekPieDiv").hidden = true; } }; const setDates = (data) => { let nextMonthVisits = []; let nextYearVisits = []; let deciderMonth = 0; let deciderYear = 0; // find smallest month and year for (let i = 0; i < Object.keys(data).length; i++) { let year = parseInt(Object.keys(data)[i].slice(4)); let month = parseInt(Object.keys(data)[i].slice(2, 4)); if (deciderYear === 0) { deciderYear = year; } else if (deciderYear > year) { deciderYear = parseInt(Object.keys(data)[i].slice(4)); } if (deciderYear === year) { if (deciderMonth === 0) { deciderMonth = month; } else if (deciderMonth > month) { deciderMonth = parseInt(Object.keys(data)[i].slice(2, 4)); } } } let objectKeys = Object.keys(data); for (let i = 0; i < objectKeys.length; i++) { let year = parseInt(objectKeys[i].slice(4)); let month = parseInt(objectKeys[i].slice(2, 4)); if (parseInt(deciderYear) < year) { nextYearVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } else if (deciderYear === year && deciderMonth < month) { nextMonthVisits.push(objectKeys[i]); objectKeys.splice(i, 1); i--; } } let perfectlySorted = objectKeys .sort() .concat(nextMonthVisits.sort(), nextYearVisits.sort()); let days = document.getElementById("dailyAnalytics"); removeAllChildNodes(days); var opt = document.createElement("option"); opt.value = null; opt.appendChild( document.createTextNode( `${langdata.languages[themeLang].strings["selDate"]}` ) ); days.append(opt); for (let key of perfectlySorted) { let day = key.slice(0, 2); let index = key.slice(2, 4); if (index.charAt(0) === "0") { index = key.slice(3, 4); } let month = months[index]; let year = key.slice(4); var opt = document.createElement("option"); opt.value = key; opt.appendChild(document.createTextNode(`${day} ${month} ${year}`)); days.append(opt); } dateChosen = days.options[days.selectedIndex].text; document.getElementById("mydayChartDivInner").innerHTML = ''; var ctx = document.getElementById("mydayChart").getContext("2d"); var myChart = new Chart(ctx, { type: "line", data: { labels: [ "12am", "1am", "2am", "3am", "4am", "5am", "6am", "7am", "8am", "9am", "10am", "11am", "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm", "9pm", "10pm", "11pm", ], datasets: [ { label: langdata.languages[themeLang].strings["visitsByH"], data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ], backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { scales: { y: { beginAtZero: true, }, }, plugins: { legend: { onClick: null, }, title: { display: true, text: `${currentProperty}`, }, }, }, }); document.getElementById("mydayPieDivInner").innerHTML = ''; var ctxP = document.getElementById("mydayPie").getContext("2d"); var myPie = new Chart(ctxP, { type: "doughnut", plugins: [ChartDataLabels], data: { labels: [ langdata.languages[themeLang].strings["uniVisits"], langdata.languages[themeLang].strings["repeVisits"], ], datasets: [ { data: [0, 0], backgroundColor: ["rgba(255,183,0)", "rgba(231,114,35)"], hoverOffset: 4, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { formatter: (value, ctx) => { let sum = 0; let dataArr = ctx.chart.data.datasets[0].data; dataArr.map((data) => { sum += data; }); let percentage = 0; if (value === 0) { null; } else { percentage = ((value * 100) / sum).toFixed(2) + "%"; } return percentage; }, color: "#fff", }, title: { display: true, text: `${currentProperty}`, }, }, }, }); days.addEventListener("change", () => { if (days.value !== "null") { dateChosen = days.options[days.selectedIndex].text; let dayData = data[days.value]; let hours = ts("hours_", dayData); let allHoursArray = []; for (let x = 0; x < 24; x++) { for (let y = 0; y < hours.length; y++) { if (x == parseInt(Object.keys(hours[y]))) { allHoursArray[x] = hours[y][x]; break; } else { allHoursArray[x] = 0; } } } myChart.data.datasets[0].data = allHoursArray; myChart.options.plugins.title.text = `${currentProperty} ${dateChosen}`; myChart.update(); let totVisits = document.getElementById("totVisitsD"); let uniVisits = document.getElementById("uniVisitsD"); let aveVisits = document.getElementById("aveVisitsD"); let deskVisits = document.getElementById("deskUsersD"); let mobVisits = document.getElementById("mobUsersD"); let langUsersDiv = document.getElementById("langUsersInputsD"); let andrUsers = document.getElementById("andrUsersD"); let iosUsers = document.getElementById("iosUsersD"); let androidUsers = 0; let iOSusers = 0; let totalVisits = 0; let uniqueVisits = 0; let averageVisits = 0; let desktopVisits = 0; let mobileVisits = 0; let visitsByLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; if (dayData.totalUsers) { totalVisits += parseInt(dayData.totalUsers); } if (dayData.uniqueUsers) { uniqueVisits += parseInt(dayData.uniqueUsers); } if (dayData.platform_Win32) { desktopVisits += parseInt(dayData.platform_Win32); } if (dayData.platform_MACIntel) { desktopVisits += parseInt(dayData.platform_MACIntel); } if (dayData.platform_iPhone) { mobileVisits += parseInt(dayData.platform_iPhone); iOSusers += parseInt(dayData.platform_iPhone); } if (dayData.platform_Android) { mobileVisits += parseInt(dayData.platform_Android); androidUsers += parseInt(dayData.platform_Android); } const langUsers = ts("lang_", dayData); for (let langKey of Object.keys(langUsers)) { let key = Object.keys(langUsers[langKey])[0]; visitsByLang[key] += Object.values(langUsers[langKey])[0]; } removeAllChildNodes(langUsersDiv); for (let key of Object.keys(visitsByLang)) { if (visitsByLang[key] != 0) { let langInput = document.createElement("input"); langInput.classList.add("form-control", "w30"); langInput.type = "number"; langInput.value = visitsByLang[key]; langInput.readOnly = true; let langName = langCodes[0][key]; langUsersDiv.append(langName); langUsersDiv.append(document.createElement("br")); langUsersDiv.append(langInput); langUsersDiv.append(document.createElement("br")); } } andrUsers.value = androidUsers; iosUsers.value = iOSusers; totVisits.value = totalVisits; uniVisits.value = uniqueVisits; averageVisits = totalVisits / uniqueVisits; if (averageVisits) { aveVisits.value = averageVisits.toFixed(1); } deskVisits.value = desktopVisits; mobVisits.value = mobileVisits; let restVisits = totalVisits - uniqueVisits; myPie.data.labels = myPie.data.datasets[0].label = [ `${langdata.languages[themeLang].strings["uniVisits"]}: ${uniqueVisits}`, `${langdata.languages[themeLang].strings["repeVisits"]}: ${restVisits}`, ]; if (uniqueVisits || restVisits) { document.getElementById("mydayPie").style.display = "block"; document.getElementById("downloadDPChart").style.display = "block"; } myPie.data.datasets[0].data = [uniqueVisits, restVisits]; myPie.options.plugins.title.text = `${currentProperty} ${dateChosen}`; myPie.update(); } }); }; const setMonthlyClicks = (data) => { let labels = []; let clicks = []; let totClicks = 0; let langs = []; let clicksForLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; for (let key of Object.keys(data)) { if (key !== "lastCheckDate") { let langCode = key.slice(0, 2); clicksForLang[langCode] += data[key]; langs.push(langCode); let btnName = key.slice(3); totClicks += data[key]; clicks.push(data[key]); labels.push(btnName); } } document.getElementById("totClicks").value = totClicks; // clear multiple lang codes and only keep 1 of each const uniqueLangs = langs.filter((x, i, a) => a.indexOf(x) == i); let clicksByLang = document.getElementById("clicksByLang"); removeAllChildNodes(clicksByLang); uniqueLangs.forEach((lang) => { let clicksInput = document.createElement("input"); clicksInput.classList.add("form-control", "w30"); clicksInput.type = "number"; clicksInput.value = clicksForLang[lang]; clicksInput.readOnly = true; let clicksName = langCodes[0][lang]; clicksByLang.append(clicksName); clicksByLang.append(document.createElement("br")); clicksByLang.append(clicksInput); clicksByLang.append(document.createElement("br")); }); $(document).ready(function () { setTimeout(() => { document.getElementById("mymonthBarDivInner").innerHTML = ''; var ctxB = document.getElementById("mymonthBars").getContext("2d"); new Chart( ctxB, { type: "bar", plugins: [ChartDataLabels], data: { labels: labels, datasets: [ { label: langdata.languages[themeLang].strings["btnClicks"], data: clicks, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { color: "#ffffff", }, title: { display: true, text: `${currentProperty} - ${lastThirty}`, }, }, indexAxis: "y", responsive: true, }, }, 1000 ); // set average clicks after value of unique visits has been set let amount = totClicks / document.getElementById("uniVisits").value; if (amount) { document.getElementById("aveClicks").value = amount.toFixed(1); } }, 1000); }); }; const setWeeklyClicks = (data) => { let labels = []; let clicks = []; let totClicks = 0; let langs = []; let clicksForLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; for (let key of Object.keys(data)) { if (key !== "lastCheckDate") { let langCode = key.slice(0, 2); clicksForLang[langCode] += data[key]; langs.push(langCode); let btnName = key.slice(3); totClicks += data[key]; clicks.push(data[key]); labels.push(btnName); } } document.getElementById("totClicksW").value = totClicks; // set average clicks after value of unique visits has been set $(document).ready(function () { setTimeout(() => { let amount = totClicks / document.getElementById("uniVisitsW").value; if (amount) { document.getElementById("aveClicksW").value = amount.toFixed(1); } }, 1000); }); // clear multiple lang codes and only keep 1 of each const uniqueLangs = langs.filter((x, i, a) => a.indexOf(x) == i); let clicksByLang = document.getElementById("clicksByLangW"); removeAllChildNodes(clicksByLang); uniqueLangs.forEach((lang) => { let clicksInput = document.createElement("input"); clicksInput.classList.add("form-control", "w30"); clicksInput.type = "number"; clicksInput.value = clicksForLang[lang]; clicksInput.readOnly = true; let clicksName = langCodes[0][lang]; clicksByLang.append(clicksName); clicksByLang.append(document.createElement("br")); clicksByLang.append(clicksInput); clicksByLang.append(document.createElement("br")); }); $(document).ready(function () { setTimeout(() => { document.getElementById("myweekBarDivInner").innerHTML = ''; var ctxB = document.getElementById("myweekBar").getContext("2d"); new Chart(ctxB, { type: "bar", plugins: [ChartDataLabels], data: { labels: labels, datasets: [ { label: langdata.languages[themeLang].strings["btnClicks"], data: clicks, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { color: "#ffffff", }, title: { display: true, text: `${currentProperty} - ${lastSeven}`, }, }, indexAxis: "y", responsive: true, }, }); }, 1000); }); }; const setDailyClicks = (hotelUID, uid) => { document.getElementById("mydayBarDivInner").innerHTML = ''; var ctxB = document.getElementById("mydayBar").getContext("2d"); let barChart = new Chart(ctxB, { type: "bar", plugins: [ChartDataLabels], data: { labels: [], datasets: [ { label: langdata.languages[themeLang].strings["btnClicks"], data: [], backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { legend: { onClick: null, }, datalabels: { color: "#ffffff", }, title: { display: true, text: `${currentProperty}`, }, }, indexAxis: "y", responsive: true, }, }); document.getElementById("dailyAnalytics").addEventListener("change", () => { sendHttpRequest( "POST", "https://us-central1-seteraguestcloud.cloudfunctions.net/clickStatistic", "customer=" + hotelUID + "&uid=" + uid + "&date=" + document.getElementById("dailyAnalytics").value ).then((data) => { let labels = []; let clicks = []; let totClicks = 0; let langs = []; let clicksForLang = { en: 0, de: 0, it: 0, fr: 0, es: 0, ru: 0, ar: 0, cn: 0, tr: 0, jp: 0, }; if (data) { for (let key of Object.keys(data)) { if (key !== "lastCheckDate") { let langCode = key.slice(0, 2); clicksForLang[langCode] += data[key]; langs.push(langCode); let btnName = key.slice(3); totClicks += data[key]; clicks.push(data[key]); labels.push(btnName); } } } document.getElementById("totClicksD").value = totClicks; // set average clicks after value of unique visits has been set $(document).ready(function () { setTimeout(() => { let amount = totClicks / document.getElementById("uniVisitsD").value; if (amount) { document.getElementById("aveClicksD").value = amount.toFixed(1); } }, 1000); }); // clear multiple lang codes and only keep 1 of each const uniqueLangs = langs.filter((x, i, a) => a.indexOf(x) == i); let clicksByLang = document.getElementById("clicksByLangD"); removeAllChildNodes(clicksByLang); uniqueLangs.forEach((lang) => { let clicksInput = document.createElement("input"); clicksInput.classList.add("form-control", "w30"); clicksInput.type = "number"; clicksInput.value = clicksForLang[lang]; clicksInput.readOnly = true; let clicksName = langCodes[0][lang]; clicksByLang.append(clicksName); clicksByLang.append(document.createElement("br")); clicksByLang.append(clicksInput); clicksByLang.append(document.createElement("br")); }); barChart.data.labels = labels; barChart.data.datasets[0].data = clicks; barChart.options.plugins.title.text = `${currentProperty} ${dateChosen}`; barChart.update(); //feedback let date = document.getElementById("dailyAnalytics").value; let startdate = new Date(); startdate.setHours(0); startdate.setDate(date.slice(0, 2)); startdate.setMonth(date.slice(2, 4) - 1); startdate.setFullYear(date.slice(4)); let enddate = new Date(); enddate.setHours(23); enddate.setDate(date.slice(0, 2)); enddate.setMonth(date.slice(2, 4) - 1); enddate.setFullYear(date.slice(4)); monthFeedback.forEach((dayData) => { let dataDate = new Date(dayData.timestamp._seconds * 1000); if (dataDate > startdate && dataDate < enddate) { hideFeedbackDepth(); setFeedbackResult(dayData, document.getElementById("totalVotesD")); document .getElementById("showInDepthFD") .addEventListener("click", () => { renderFeedbackDepth( dayData, document.getElementById("inDepthFD") ); }); } }); }); }); }; const setGroupCharts = (data, namesAndUid, week) => { let labels = []; let visits = []; let totalVisits = []; let correctPeriod = lastSeven; for (let i = 0; i < namesAndUid.length; i++) { let key = Object.keys(namesAndUid[i])[0]; labels.push(Object.values(namesAndUid[i])[0]); if (data[key]) { if (data[key].uniqueUsers) { visits.push(data[key].uniqueUsers); } else { visits.push(0); } } if (data[key]) { if (data[key].totalUsers) { totalVisits.push(data[key].totalUsers); } else { totalVisits.push(0); } } } if (week === "week") { correctPeriod = lastSeven; } else { correctPeriod = lastThirty; } setTimeout(() => { document.getElementById("mygroupBarDiv").innerHTML = '
'; var ctxB = document.getElementById("mygroupBar").getContext("2d"); let groupChart = new Chart(ctxB, { type: "bar", plugins: [ChartDataLabels], data: { labels: labels, datasets: [ { label: langdata.languages[themeLang].strings["uniByProp"], data: visits, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, { label: langdata.languages[themeLang].strings["totByProp"], data: totalVisits, backgroundColor: ["rgba(128,128,128,0.8)"], borderColor: ["rgba(128,128,128,1.0)"], borderWidth: 1, }, ], }, options: { plugins: { datalabels: { color: "#ffffff", }, title: { display: true, text: `${groupName} ${correctPeriod}`, }, }, indexAxis: "y", responsive: true, }, }); }, 1000); }; function setVotes(data) { let allDateArray = []; let voteDateArray = []; let voteTotalArray = []; let voteUniqueArray = []; if (data.length > 0) { data.forEach((dayData) => { let d = new Date(dayData.timestamp._seconds * 1000); let totalVoteAmount = 0; let uniqueVoteAmount = 0; let tempObj = {}; Object.keys(dayData).forEach((key) => { if (dayData[key].uid) { tempObj[dayData[key].uid] = 1; //tempObj length === unique user } }); uniqueVoteAmount = Object.keys(tempObj).length; totalVoteAmount = Object.keys(dayData).length - 1; voteDateArray.push(d.toDateString()); voteTotalArray.push(totalVoteAmount); voteUniqueArray.push(uniqueVoteAmount); }); } let monthTotal = []; let monthUnique = []; let monthDate = []; for (let x = 0; x < 30; x++) { let d = new Date(Date.now() - x * 24 * 60 * 60 * 1000); d = d.toDateString(); if (voteDateArray.includes(d)) { let position = voteDateArray.findIndex((a) => { return a === d; }); monthTotal.push(voteTotalArray[position]); monthUnique.push(voteUniqueArray[position]); } else { monthTotal.push(0); monthUnique.push(0); } monthDate.push(d); } monthDate = monthDate.map((date) => { return date.split(" ")[2] + " " + date.split(" ")[1]; }); monthDate.reverse(); monthUnique.reverse(); monthTotal.reverse(); renderFeedbackChart("month", monthDate, monthTotal, monthUnique); renderFeedbackChart( "week", monthDate.slice(-7), monthTotal.slice(-7), monthUnique.slice(-7) ); } function renderFeedbackChart(type, date, total, unique) { if (type == "month") { var ctx = document.getElementById("mymonthChartFeedback").getContext("2d"); } else if (type == "week") { var ctx = document.getElementById("myweekChartFeedback").getContext("2d"); } let _title; type == "month" ? (_title = lastThirty) : (_title = lastSeven); new Chart(ctx, { type: "line", data: { labels: date, datasets: [ { label: langdata.languages[themeLang].strings["totalVotesByD"], data: total, backgroundColor: ["rgba(255,183,0)"], borderColor: ["rgba(255,183,0)"], borderWidth: 1, }, { label: langdata.languages[themeLang].strings["uniqueVotesByD"], data: unique, backgroundColor: ["rgba(255,69,0,1.0)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { scales: { y: { beginAtZero: true, }, }, plugins: { legend: { onClick: null, }, title: { display: true, text: `${currentProperty} - ${_title}`, }, }, }, }); } /* feedback_off const setMonthFeedbackChart = (monthResultforChart, period) => { console.log(monthResultforChart); const lastMonthDate = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); let monthDateArray = []; let monthDataArray = []; console.log(period); //array containg the date <==> vote amout let _dateArray = []; let _dataArray = []; for (let x = 0; x < monthResultforChart.length; x++) { let temp = monthResultforChart[x]; let total = 0; Object.keys(temp).forEach((key) => { if (key !== "timestamp") { Object.keys(temp[key]).forEach((key2) => { total += temp[key][key2]; }); } }); let d2 = new Date(temp.timestamp._seconds * 1000); _dateArray.push(d2.toDateString()); _dataArray.push(total); } for (let x = 0; x < period; x++) { let d = new Date(Date.now() - x * 24 * 60 * 60 * 1000); d = d.toDateString(); if (_dateArray.includes(d)) { let position = _dateArray.findIndex((a) => { return a === d; }); monthDataArray.push(_dataArray[position]); } else { monthDataArray.push(0); } monthDateArray.push(d); } let monthDateArray2 = monthDateArray.map((date) => { return date.split(" ")[2] + " " + date.split(" ")[1]; }); monthDateArray2.reverse(); monthDataArray.reverse(); if (period == 30) { var ctx = document.getElementById("mymonthChartFeedback").getContext("2d"); } else if (period == 7) { var ctx = document.getElementById("myweekChartFeedback").getContext("2d"); } new Chart(ctx, { type: "line", data: { labels: monthDateArray2, datasets: [ { label: langdata.languages[themeLang].strings["totalVotesByH"], data: monthDataArray, backgroundColor: ["rgba(255,69,0,0.8)"], borderColor: ["rgba(255,69,0,1.0)"], borderWidth: 1, }, ], }, options: { scales: { y: { beginAtZero: true, }, }, plugins: { legend: { onClick: null, }, title: { display: true, //text: `${currentProperty} ${lastThirty}`, }, }, }, }); }; const setVotesWeek = (data) => { const today = new Date(); today.setHours(0); today.setMinutes(30); const lastDayDate = new Date(Date.now() - 1 * 24 * 60 * 60 * 1000); lastDayDate.setHours(0); lastDayDate.setMinutes(30); const lastWeekDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); lastWeekDate.setHours(0); lastWeekDate.setMinutes(30); let dayResult = {}; let weekResult = {}; let weekResultforChart = []; if (Object.keys(data).length !== 0) { data.forEach((oneDayData) => { let d = new Date(oneDayData.timestamp._seconds * 1000); if (d > lastWeekDate) { weekResultforChart.push(oneDayData); Object.keys(oneDayData).forEach((key) => { let temp = { ...oneDayData[key] }; delete temp.timestamp; if (weekResult.hasOwnProperty(key)) { Object.keys(temp).forEach((key2) => { weekResult[key][key2] = weekResult[key][key2] + temp[key2]; }); } else { weekResult[key] = temp; } delete weekResult.timestamp; }); } }); setMonthFeedbackChart(weekResultforChart, 7); } setFeedbackResult(weekResult, document.getElementById("totalVotesW")); document.getElementById("showInDepthFW").addEventListener("click", () => { renderFeedbackDepth(weekResult, document.getElementById("inDepthFW")); }); }; const setVotesMonth = (data) => { let monthResult = {}; let monthResultforChart = []; if (Object.keys(data).length !== 0) { const lastMonthDate = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); lastMonthDate.setHours(0); lastMonthDate.setMinutes(30); data.forEach((oneDayData) => { let d = new Date(oneDayData.timestamp._seconds * 1000); if (d > lastMonthDate) { monthResultforChart.push(oneDayData); Object.keys(oneDayData).forEach((key) => { if (key !== "timestamp") { let temp = { ...oneDayData[key] }; if (monthResult.hasOwnProperty(key)) { Object.keys(temp).forEach((key2) => { monthResult[key][key2] = monthResult[key][key2] + temp[key2]; }); } else { monthResult[key] = temp; } delete monthResult.timestamp; } }); } }); setMonthFeedbackChart(monthResultforChart, 30); } setFeedbackResult(monthResult, document.getElementById("totalVotes")); document.getElementById("showInDepthF").addEventListener("click", () => { renderFeedbackDepth(monthResult, document.getElementById("inDepthF")); }); }; //set the total votes function setFeedbackResult(data, element) { let totalVotes = 0; Object.keys(data).forEach((key) => { if (key !== "timestamp") { Object.values(data[key]).forEach((value) => { totalVotes += value; }); } }); element.value = totalVotes; } //render the depth infrmation div function renderFeedbackDepth(data, element) { if (element.style.display == "none") { element.append(document.createElement("hr")); element.append(document.createElement("br")); Object.keys(data).forEach((key) => { if (key !== "timestamp") { let span = document.createElement("span"); span.textContent = key; let input = document.createElement("input"); input.type = "text"; input.readOnly = true; input.classList.add("form-control", "w30"); input.style.marginBottom = "15px"; let totalVotes = 0; let totalRate = 0; //calculate averange Object.keys(data[key]).forEach((key2) => { totalVotes += data[key][key2]; totalRate += data[key][key2] * key2; }); let averangeRate = totalRate / totalVotes; averangeRate = averangeRate.toFixed(2); input.value = "Ø " + averangeRate + " (votes: " + totalVotes + ")"; element.append(span); element.append(input); element.style.display = "block"; } }); } else { removeAllChildNodes(element); element.style.display = "none"; } } function hideFeedbackDepth() { removeAllChildNodes(document.getElementById("inDepthFD")); removeAllChildNodes(document.getElementById("inDepthFW")); removeAllChildNodes(document.getElementById("inDepthF")); } //comment function setComments(comments) { if (Object.keys(comments).length > 0) { let newCommentList = []; for (let x = 0; x < comments.length; x++) { Object.keys(comments[x]).forEach((key) => { if (key !== "timestamp") { newCommentList.push(comments[x][key]); } }); } let cC = new CommentControler(newCommentList); let commentLeft = document.getElementById("commentLeft"); let commentRight = document.getElementById("commentRight"); commentRight.addEventListener("click", () => { cC.next(); }); commentLeft.addEventListener("click", () => { cC.back(); }); } } class CommentControler { constructor(comments) { this.comments = comments; this.counter = 0; document.getElementById("commentContent").textContent = this.comments[this.counter].comment; document.getElementById("commentInfo").textContent = this.getDate( this.comments[this.counter].timestamp ); } next() { if (this.counter < this.comments.length - 1) { this.counter++; document.getElementById("commentContent").textContent = this.comments[this.counter].comment; document.getElementById("commentInfo").textContent = this.getDate( this.comments[this.counter].timestamp ); } } back() { if (this.counter > 0) { this.counter--; document.getElementById("commentContent").textContent = this.comments[this.counter].comment; document.getElementById("commentInfo").textContent = this.getDate( this.comments[this.counter].timestamp ); } } getDate(timestamp) { let d = new Date(timestamp); //return `${d.getHours()}:${d.getMinutes()} - ${d.getDay()}.${d.getMonth()}.${d.getFullYear()}`; return d.toDateString(); } } function extractComment(obj) { let returnObj = {}; Object.keys(obj).forEach((key) => { if (key !== "timestamp") { returnObj = obj[key]; } }); return returnObj; }*/ document.getElementById("showInDepth").addEventListener("click", () => { let inDepth = document.getElementById("inDepth"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepth").textContent = langdata.languages[themeLang].strings["hideInDepth"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepth").textContent = langdata.languages[themeLang].strings["showInDepth"]; } }); document.getElementById("showInDepthD").addEventListener("click", () => { let inDepth = document.getElementById("inDepthD"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepthD").textContent = langdata.languages[themeLang].strings["hideInDepth"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepthD").textContent = langdata.languages[themeLang].strings["showInDepth"]; } }); document.getElementById("showInDepthW").addEventListener("click", () => { let inDepth = document.getElementById("inDepthW"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepthW").textContent = langdata.languages[themeLang].strings["hideInDepth"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepthW").textContent = langdata.languages[themeLang].strings["showInDepth"]; } }); document.getElementById("showInDepthCW").addEventListener("click", () => { let inDepth = document.getElementById("inDepthCW"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepthCW").textContent = langdata.languages[themeLang].strings["hideClick"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepthCW").textContent = langdata.languages[themeLang].strings["showClick"]; } }); document.getElementById("showInDepthCD").addEventListener("click", () => { let inDepth = document.getElementById("inDepthCD"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepthCD").textContent = langdata.languages[themeLang].strings["hideClick"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepthCD").textContent = langdata.languages[themeLang].strings["showClick"]; } }); document.getElementById("showInDepthC").addEventListener("click", () => { let inDepth = document.getElementById("inDepthCM"); if (inDepth.style.display === "none") { inDepth.style.display = "block"; document.getElementById("showInDepthC").textContent = langdata.languages[themeLang].strings["hideClick"]; } else { inDepth.style.display = "none"; document.getElementById("showInDepthC").textContent = langdata.languages[themeLang].strings["showClick"]; } }); function ts(name, obj) { let arr = []; for (let x in obj) { if (x.indexOf(name) > -1) { let a = x.replace(name, ""); let p = name + a; let b = obj[p]; let o = {}; o[a] = b; arr.push(o); } } return arr; } const setMonthLang = (lang) => { months = langdata.languages[lang].strings["allMonths"]; };