/* Window Engine - MIT License - Copyright (c) 2019 Gauthier Staehler */ var g_activePopupClass; const metaTag = document.createElement("meta"); metaTag.name = "viewport"; metaTag.content = "user-scalable=0"; document.getElementsByTagName("head")[0].appendChild(metaTag); var g_ResultObj; var g_outputEditorControl; var g_bBrowseByCat = false; var g_catCurCatSel = 0; var g_catDefCatSel = 0; var BTN_PREV = 1; var BTN_NEXT = 2; var BTN_ACCEPT = 3; var BTN_ACCEPT_ALL = 4; var BTN_REJECT = 5; var BTN_REJECT_ALL = 6; var BTN_COMMIT = 7; var g_actionButtonDetailsObjArr = [ {id:BTN_PREV, idStr:"button", bDefLabel:"<>", bLabelParenFlag:false, parenLabel:"(0)", bBttnDisabled:false,}, {id:BTN_ACCEPT, idStr:"button", bDefLabel:"Accept", bLabelParenFlag:false, parenLabel:"(%d)", bBttnDisabled:false,}, {id:BTN_ACCEPT_ALL, idStr:"button", bDefLabel:"Accept.All", bLabelParenFlag:false, parenLabel:"(%d)", bBttnDisabled:false,}, {id:BTN_REJECT, idStr:"button", bDefLabel:"Reject", bLabelParenFlag:false, parenLabel:"(%d)", bBttnDisabled:false,}, {id:BTN_REJECT_ALL, idStr:"button", bDefLabel:"Reject.All", bLabelParenFlag:false, parenLabel:"(%d)", bBttnDisabled:false,}, {id:BTN_COMMIT, idStr:"button", bDefLabel:"Commit", bLabelParenFlag:false, parenLabel:"(Update)", bBttnDisabled:false,}, ]; function doModal(id, htmlContent, resultMapObj, outputEditorControl) { let windowID = document.getElementById("window" + id); var footerModalCtl = document.getElementById("window" + id+"footer"); var bodyModalCtl = document.getElementById("mainWindowModal"+id); var headCloseModalCtl = document.getElementById("closeButton"+id); bodyModalCtl.innerHTML = htmlContent; headCloseModalCtl.innerHTML = "x"; fadeIn(windowID); fadeIn(footerModalCtl); fadeIn(bodyModalCtl); g_ResultObj = resultMapObj; g_outputEditorControl = outputEditorControl; var inpSel = document.getElementById('categoryLocatorSelect'), opt = null, textNode=null, textNode2 = null, labelNode=null; while (inpSel!= null && inpSel.options.length > 0) { inpSel.remove(0); } for (var i = 0; i< g_ResultObj.categoriesChange.length; i++) { opt = document.createElement("option"); opt.setAttribute("value", g_ResultObj.categoriesChange[i].catLocatorInMapChangesArr); opt.setAttribute("id", "catSelCh_"+String(i)); textNode = document.createTextNode(g_ResultObj.categoriesChange[i].categoryStr); opt.appendChild(textNode); inpSel.appendChild(opt); } g_catCurCatSel = g_catDefCatSel; setButtonStatus (true, false, true);// this function will also call updateButtonLabels (); onEnableCatBrowse('enableCatBrowse','categoryLocatorSelect'); showNextChange ("mainWindowModal"+id, 1); // scroll to the first change } function setButtonStatus (bAll, bDisable, bDefault, bBttnIDListArr) { if (bAll == false && Array.isArray(bBttnIDListArr) == false) return; if (bAll){ for (var i=0; i= g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numItemsChanged) { g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numAccepted = g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numItemsChanged; if (bAcceptThis) { setButtonStatus (false, true, false, [BTN_PREV, BTN_NEXT, BTN_ACCEPT, BTN_REJECT, BTN_ACCEPT_ALL]);//disable all others including accept all setButtonStatus (false, false, false, [BTN_REJECT_ALL]);//enable reject all } else { setButtonStatus (false, true, false, [BTN_PREV, BTN_NEXT, BTN_ACCEPT, BTN_REJECT, BTN_REJECT_ALL]);//disable all others including reject all setButtonStatus (false, false, false, [BTN_ACCEPT_ALL]);//enable accept all } } else if (g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numAccepted < 0) g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numAccepted = 0; if (g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numRejected >= g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numItemsChanged) { g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numRejected = g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numItemsChanged; if (bAcceptThis) { setButtonStatus (false, true, false, [BTN_PREV, BTN_NEXT, BTN_ACCEPT, BTN_REJECT, BTN_ACCEPT_ALL]);//disable all others including accept all setButtonStatus (false, false, false, [BTN_REJECT_ALL]);//enable reject all } else { setButtonStatus (false, true, false, [BTN_PREV, BTN_NEXT, BTN_ACCEPT, BTN_REJECT, BTN_REJECT_ALL]);//disable all others including reject all setButtonStatus (false, false, false, [BTN_ACCEPT_ALL]);//enable accept all } } else if (g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numRejected < 0) g_ResultObj.categoriesChange[curCtls_obj.categoryLocator].numRejected = 0; updateButtonLabels (); } for (var i=start; i<=end; i++) { curCtls_obj = g_ResultObj.mapChangeIDLoc[i]; elmID_orjStrTag = curCtls_obj.elmID_orjStrTag; elmID_orjStr = curCtls_obj.elmID_orjStr; elmID_repStrTag = curCtls_obj.elmID_repStrTag; elmID_repStr = curCtls_obj.elmID_repStr; curOrgCtl = modalWindowCtl.querySelector(elmID_orjStrTag+"#"+elmID_orjStr); curRepCtl = modalWindowCtl.querySelector(elmID_repStrTag+"#"+elmID_repStr); if (curOrgCtl == null || curRepCtl == null) return; // curOrgCtl.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); // curOrgCtl.focus(); if (bAcceptThis) { curOrgCtl.style.display = "none"; curRepCtl.style.display = "initial" curOrgCtl.style.background = "none"; curRepCtl.style.background = "lightGreen"; curCtls_obj.bChangeAccepted = true; curCtls_obj.bChangeRejected = false; curCtls_obj.bReviewComplete = false; } else { curOrgCtl.style.display = "initial"; curRepCtl.style.display = "none" curOrgCtl.style.background = "lightBlue"; curRepCtl.style.background = "none"; curCtls_obj.bChangeAccepted = false; curCtls_obj.bChangeRejected = true; curCtls_obj.bReviewComplete = false; } curOrgCtl.style.borderStyle = "none"; curRepCtl.style.borderStyle = "none"; curOrgCtl.style.textDecoration = "none"; curRepCtl.style.textDecoration = "none"; } //g_catCurCatSel = categoryLocatorSelectCtl.selectedIndex; } function commitAndUpdateChange (modalWindowCtlStr){ var modalWindowCtl = document.getElementById(modalWindowCtlStr); var tempStr = "", promptStr = "All changes will be finalized now. Output control will be updated now." ; var curCtls_obj = null, elmID_orjStrTag = "", elmID_orjStr = "", elmID_repStrTag = "", elmID_repStr = "", curOrgCtl = null, curRepCtl = null; tempStr = prompt (promptStr, "Ok to proceed and cancel to continue edits.", "Confirm"); if (tempStr == null) { return; } for (var i=0; i=g_ResultObj.nChangesMade_Total) { g_ResultObj.nextMapLocator = 0; // wrap around } if (g_ResultObj.prevMapLocator<0) { g_ResultObj.prevMapLocator = g_ResultObj.nChangesMade_Total-1; // wrap around } } else { var catStart = g_ResultObj.categoriesChange[g_ResultObj.mapChangeIDLoc[g_ResultObj.currentMapLocator].categoryLocator].catStartLoc; var catEnd = g_ResultObj.categoriesChange[g_ResultObj.mapChangeIDLoc[g_ResultObj.currentMapLocator].categoryLocator].catEndLoc; if (g_ResultObj.nextMapLocator>catEnd) { g_ResultObj.nextMapLocator = catStart; // wrap around } if (g_ResultObj.prevMapLocator=0 ? g_ResultObj.currentMapLocator = g_ResultObj.nextMapLocator :g_ResultObj.currentMapLocator = g_ResultObj.prevMapLocator; if (g_ResultObj.currentMapLocator == -1 || g_ResultObj.currentMapLocator >= g_ResultObj.mapChangeIDLoc.length) { // reset the locators and return g_ResultObj.currentMapLocator = g_ResultObj.nextMapLocator = g_ResultObj.prevMapLocator = 0; return; } var curCtls_obj = g_ResultObj.mapChangeIDLoc[g_ResultObj.currentMapLocator]; // get current location control's information if (!(curCtls_obj.bChangeAccepted == false && curCtls_obj.bChangeRejected == false)){ nDirection>0?g_ResultObj.nextMapLocator = g_ResultObj.currentMapLocator+1: g_ResultObj.prevMapLocator = g_ResultObj.currentMapLocator-1; adjustMapLocators (); if (g_ResultObj.bAllChangesReadyToCommit == false) showNextChange (modalWindowCtlStr, nDirection); return; } setFocusOnCurrentChange (modalWindowCtlStr); g_ResultObj.nextMapLocator = g_ResultObj.currentMapLocator+1; g_ResultObj.prevMapLocator = g_ResultObj.currentMapLocator-1; adjustMapLocators (); } function onButtonReplace (elmID_repStr, altTextCtlIDStr, bReplaceAll=false){ var strToUpdate = ""; var altTextIDStr_WOTag = altTextCtlIDStr.replace(DROP_CONTENT_ALT_TEXT_TAG_TYPE,''); var altTextCtl = document.getElementById(DROP_CONTENT_ALT_TEXT_TAG_TYPE+altTextIDStr_WOTag); var elementRepCtl = document.getElementById(elmID_repStr); if (altTextCtl!=null && elementRepCtl!= null){ strToUpdate = altTextCtl.value; if (bReplaceAll == false){ elementRepCtl.innerText=strToUpdate; } else { var altTextAtt_Arr = myTrim(altTextIDStr_WOTag, true, true, "_").split("_"); var start = Number(altTextAtt_Arr[altTextAtt_Arr.length-2]); var end = Number(altTextAtt_Arr[altTextAtt_Arr.length-1]); if (start != NaN && end != NaN) { while (1){ elementRepCtl = document.getElementById(DROP_CONTENT_ITEM_TAG_TYPE+"_" +altTextAtt_Arr[0]+"_" +altTextAtt_Arr[1]+"_" +start++); if (elementRepCtl==null) break; elementRepCtl.innerText=strToUpdate; } } } } } function handleClick_OrgCtl(elmID_repStr, elmID_orjStr, curBttnCtl, orjStr, altTextCtlIDStr=null){ var strToUpdate = orjStr.replace(/_/gi,''); var elementOrjCtl = document.getElementById(elmID_orjStr); strToUpdate = (curBttnCtl.innerText == strToUpdate)?strToUpdate:curBttnCtl.innerText; var elementRepCtl = document.getElementById(elmID_repStr); if (elementRepCtl!=null)elementRepCtl.innerText=strToUpdate; if (elementOrjCtl!=null)elementOrjCtl.innerText=strToUpdate; } function handleClick_RepCtl(elmID_repStr, elmID_orjStr, curBttnCtl, orjStr, altTextCtlIDStr=null){ var strToUpdate = orjStr.replace(/_/gi,''); var elementOrjCtl = document.getElementById(elmID_orjStr); strToUpdate = (curBttnCtl.innerText == strToUpdate)?strToUpdate:curBttnCtl.innerText; var elementRepCtl = document.getElementById(elmID_repStr); if (elementRepCtl!=null)elementRepCtl.innerText=strToUpdate; if (elementOrjCtl!=null)elementOrjCtl.innerText=strToUpdate; if (altTextCtlIDStr!=null && altTextCtlIDStr!=""){ document.getElementById(DROP_CONTENT_ALT_TEXT_TAG_TYPE+altTextCtlIDStr.replace(DROP_CONTENTS_TAG_TYPE,'')).value=strToUpdate; } } function setChangeControls_Display(pHtmlOrjCtl1, pHtmlRepCtl1, bSetFocus1, pHtmlOrjCtl2, pHtmlRepCtl2, bSetFocus2 ){ if (pHtmlOrjCtl1!=null && pHtmlRepCtl1!=null){ pHtmlOrjCtl1.style.display = "initial"; pHtmlRepCtl1.style.display = "initial" if (bSetFocus1 == true) { pHtmlOrjCtl1.style.background = "cyan"; pHtmlRepCtl1.style.background = "yellow"; pHtmlOrjCtl1.style.borderStyle = "dotted"; pHtmlRepCtl1.style.borderStyle = "solid"; pHtmlOrjCtl1.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); pHtmlOrjCtl1.focus(); } else { pHtmlOrjCtl1.style.background = "none"; pHtmlRepCtl1.style.background = "none"; pHtmlOrjCtl1.style.borderStyle = "none"; pHtmlRepCtl1.style.borderStyle = "none"; } } if (pHtmlOrjCtl2!=null && pHtmlRepCtl2!=null){ pHtmlOrjCtl2.style.display = "initial"; pHtmlRepCtl2.style.display = "initial" if (bSetFocus2 == true) { pHtmlOrjCtl2.style.background = "cyan"; pHtmlRepCtl2.style.background = "yellow"; pHtmlOrjCtl2.style.borderStyle = "dotted"; pHtmlRepCtl2.style.borderStyle = "solid"; pHtmlOrjCtl2.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); pHtmlOrjCtl2.focus(); } else { pHtmlOrjCtl2.style.background = "none"; pHtmlRepCtl2.style.background = "none"; pHtmlOrjCtl2.style.borderStyle = "none"; pHtmlRepCtl2.style.borderStyle = "none"; } } } function goToPreviousReviewItem(currentDropBttnCtlStr, catStartLocStr, curCtlLocInCatStr){ var currentDropBttnIDStr_NumPart = currentDropBttnCtlStr.replace(DROP_BTTN_CLASS_NAME+"_","").split("_"); var currentDropBttnLoc = Number(currentDropBttnIDStr_NumPart[0]); var catStartLoc = Number(catStartLocStr); var curCtlLocInCat = Number(curCtlLocInCatStr); if (g_ResultObj==null ||currentDropBttnLoc == NaN || catStartLoc == NaN || curCtlLocInCat == NaN ) return; var ctlToNavigateLocInCat = curCtlLocInCat - 1; var catObj_CurCtl = g_ResultObj.categoriesChange[currentDropBttnLoc]; if (ctlToNavigateLocInCat>catObj_CurCtl.catEndLoc || ctlToNavigateLocInCat=g_ResultObj.categoriesChange.length?null:g_ResultObj.categoriesChange[currentDropBttnLoc+1]; var catObj_CurCtl = g_ResultObj.categoriesChange[currentDropBttnLoc]; var catObj_PrevCtl = currentDropBttnLoc-1<0?null:g_ResultObj.categoriesChange[currentDropBttnLoc-1]; var pHtmlOrjCtl_cur = document.getElementsByName ("orj_"+String(catObj_CurCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_cur = document.getElementsByName ("rep_"+String(catObj_CurCtl.elementIDLocator+1))[0]; var pHtmlOrjCtl_prev = catObj_PrevCtl==null?null:document.getElementsByName ("orj_"+String(catObj_PrevCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_prev = catObj_PrevCtl==null?null:document.getElementsByName ("rep_"+String(catObj_PrevCtl.elementIDLocator+1))[0]; var pHtmlOrjCtl_next = catObj_NextCtl==null?null:document.getElementsByName ("orj_"+String(catObj_NextCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_next = catObj_NextCtl==null?null:document.getElementsByName ("rep_"+String(catObj_NextCtl.elementIDLocator+1))[0]; setChangeControls_Display(pHtmlOrjCtl_cur, pHtmlRepCtl_cur, false, pHtmlOrjCtl_prev, pHtmlRepCtl_prev, true ); setChangeControls_Display(pHtmlOrjCtl_cur, pHtmlRepCtl_cur, false, pHtmlOrjCtl_next, pHtmlRepCtl_next, false ); if (catObj_PrevCtl==null) return; var catStartLoc = Number(catObj_PrevCtl.catStartLoc); var ctlToNavigateLocInCat = catObj_PrevCtl.catStartLoc; currentDropBttnIDStr_NumPart[0] = currentDropBttnLoc-1; currentDropBttnIDStr_NumPart[1] = catStartLoc; currentDropBttnIDStr_NumPart[2] = ctlToNavigateLocInCat; var prevBttnCtl = document.getElementById(DROP_BTTN_CLASS_NAME+"_"+String(currentDropBttnIDStr_NumPart.join("_"))); if (prevBttnCtl == null) return; prevBttnCtl.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); prevBttnCtl.focus(); /* var event = new MouseEvent('mouseover', { 'view': window, 'bubbles': true, 'cancelable': true }); prevBttnCtl.dispatchEvent(event);*/ } function goToNextReviewItem(currentDropBttnCtlStr, catStartLocStr, curCtlLocInCatStr){ var currentDropBttnIDStr_NumPart = currentDropBttnCtlStr.replace(DROP_BTTN_CLASS_NAME+"_","").split("_"); var currentDropBttnLoc = Number(currentDropBttnIDStr_NumPart[0]); var catStartLoc = Number(catStartLocStr); var curCtlLocInCat = Number(curCtlLocInCatStr); if (g_ResultObj==null ||currentDropBttnLoc == NaN || catStartLoc == NaN || curCtlLocInCat == NaN ) return; var ctlToNavigateLocInCat = curCtlLocInCat + 1; var catObj_CurCtl = g_ResultObj.categoriesChange[currentDropBttnLoc]; if (ctlToNavigateLocInCat>catObj_CurCtl.catEndLoc || ctlToNavigateLocInCat=g_ResultObj.categoriesChange.length?null:g_ResultObj.categoriesChange[currentDropBttnLoc+1]; var catObj_CurCtl = g_ResultObj.categoriesChange[currentDropBttnLoc]; var catObj_PrevCtl = currentDropBttnLoc-1<0?null:g_ResultObj.categoriesChange[currentDropBttnLoc-1]; var pHtmlOrjCtl_cur = document.getElementsByName ("orj_"+String(catObj_CurCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_cur = document.getElementsByName ("rep_"+String(catObj_CurCtl.elementIDLocator+1))[0]; var pHtmlOrjCtl_prev = catObj_PrevCtl==null?null:document.getElementsByName ("orj_"+String(catObj_PrevCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_prev = catObj_PrevCtl==null?null:document.getElementsByName ("rep_"+String(catObj_PrevCtl.elementIDLocator+1))[0]; var pHtmlOrjCtl_next = catObj_NextCtl==null?null:document.getElementsByName ("orj_"+String(catObj_NextCtl.elementIDLocator+1))[0]; var pHtmlRepCtl_next = catObj_NextCtl==null?null:document.getElementsByName ("rep_"+String(catObj_NextCtl.elementIDLocator+1))[0]; setChangeControls_Display(pHtmlOrjCtl_cur, pHtmlRepCtl_cur, false, pHtmlOrjCtl_prev, pHtmlRepCtl_prev, false ); setChangeControls_Display(pHtmlOrjCtl_cur, pHtmlRepCtl_cur, false, pHtmlOrjCtl_next, pHtmlRepCtl_next, true ); if (catObj_NextCtl==null) return; var catStartLoc = Number(catObj_NextCtl.catStartLoc); var ctlToNavigateLocInCat = catObj_NextCtl.catStartLoc; currentDropBttnIDStr_NumPart[0] = currentDropBttnLoc+1; currentDropBttnIDStr_NumPart[1] = catStartLoc; currentDropBttnIDStr_NumPart[2] = ctlToNavigateLocInCat; var nextBttnCtl = document.getElementById(DROP_BTTN_CLASS_NAME+"_"+String(currentDropBttnIDStr_NumPart.join("_"))); if (nextBttnCtl == null) return; nextBttnCtl.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}); nextBttnCtl.focus(); /* var event = new MouseEvent('mouseover', { 'view': window, 'bubbles': true, 'cancelable': true }); nextBttnCtl.dispatchEvent(event);*/ } function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if ("ontouchstart" in document.documentElement) { var pos1touch = 0, pos2touch = 0, pos3touch = 0, pos4touch = 0; } if (document.getElementById(elmnt.id + "header")) { document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown; document.getElementById(elmnt.id + "header").ontouchstart = dragMouseDown; } function dragMouseDown(e) { if (!"ontouchstart" in document.documentElement) { e.preventDefault(); } pos3 = e.clientX; pos4 = e.clientY; if ("ontouchstart" in document.documentElement) { try { pos3touch = e.touches[0].clientX; pos4touch = e.touches[0].clientY; } catch(error) {} } document.onmouseup = closeDragElement; document.onmousemove = elementDrag; document.ontouchend = closeDragElement; document.ontouchmove = elementDrag; activeWindow(document.getElementById(elmnt.id)); } function elementDrag(e) { e.preventDefault(); var tmpLeft = 10, tmpTop = 10; if ("ontouchstart" in document.documentElement) { pos1touch = pos3touch - e.touches[0].clientX; pos2touch = pos4touch - e.touches[0].clientY; pos3touch = e.touches[0].clientX; pos4touch = e.touches[0].clientY; tmpTop = (elmnt.offsetTop - pos2touch); tmpLeft = (elmnt.offsetLeft - pos1touch); } else { pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; tmpTop = (elmnt.offsetTop - pos2); tmpLeft = (elmnt.offsetLeft - pos1); } elmnt.style.top = tmpTop>10?1:tmpTop + "px"; elmnt.style.left = tmpLeft>10?10:tmpLeft + "px"; // elmnt.style.display = "block"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; document.ontouchend = null; document.ontouchmove = null; } } function fadeIn(elmnt) { elmnt.style.opacity = 0; elmnt.style.display = "block"; if (elmnt.classList.contains("fade")) { var opacity = 0; var timer = setInterval(function () { opacity += 30 / 70; if (opacity >= 1) { clearInterval(timer); opacity = 0.9; } elmnt.style.opacity = opacity; activeWindow(elmnt); }, 50); } else { elmnt.style.opacity = "0.9"; activeWindow(elmnt); } } function fadeOut(elmnt) { if (elmnt.classList.contains("fade")) { var opacity = 1; var timer = setInterval(function () { opacity -= 30 / 70; if (opacity <= 0) { clearInterval(timer); opacity = 0; elmnt.style.display = "none"; } elmnt.style.opacity = opacity; }, 50); } else { elmnt.style.display = "none"; activeWindow(elmnt); } } function activeWindow(elmnt) { for (let i = g_activePopupClass.length - 1; i > -1; i--) { g_activePopupClass[i].classList.remove("windowActive"); elmnt.className += " windowActive"; } }