/** * Copyright 2021, 2024 5 Mode * * This file is part of 5 Cube. * * 5 Cube is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * 5 Cube is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with 5 Cube. If not, see . * * interaction-code.js * * Interaction Code for home.php. * * @author Daniele Bonini * @copyrights (c) 2021, 2024, 5 Mode */ timeoutId=0; var oldtthis; // Old cube var lineOldVal = ""; // Old value for a detail line var lineNewVal = ""; // New value for a detail line var dataChanged = false; /* function zoominCube_old(tthis) { $(tthis).css("width","396px"); $(tthis).css("height","477px"); $(tthis).css("margin","0px"); } function zoomoffCube_old(tthis) { $(tthis).css("width","130px"); $(tthis).css("height","159px"); $(tthis).css("margin","50px"); } /* /* * Select the given cube * * @param selected cube * @returns void */ function selCube(tthis) { if (password === 1) { _selCube(tthis); // Clean the old selected.. $(oldtthis).css("color","#d4b0dc"); $(oldtthis).css("text-decoration","none"); oldtthis = tthis; // Decore the selected one.. $(tthis).css("color","#bd006e"); $(tthis).css("text-decoration","underline"); $("#cubezvname").html(curcube.getname()); // Reset the detail view $("#detailtitle").html(""); $("#detaildata").html(""); $("#datadetail").hide(); // Update ZOOMED VIEW interface.. $("#face1").html("" + curcube.getFace('h0') + " ―――――⨀ "); $("#face2").html("" + curcube.getFace('v1') + ""); $("#face3").html("⨀―――― " + curcube.getFace('h1') + ""); $("#face1").attr("target", curcube.getFace('h0')); $("#face2").attr("target", curcube.getFace('v1')); $("#face3").attr("target", curcube.getFace('h1')); clearTimeout(timeoutId); // Update body background.. $(document.body).css("background","url('../res/bg.jpg')"); $(document.body).css("background-size","cover"); // Display ZOOMED VIEW interface and controls $("#cubeList").css("width", "700px"); $("#cubectrls").show(); $("#zoomedview").show(); $("#cubelinks").show(); } } /* * Turn the current cube to the left * * @returns void */ function turnLeft() { curcube.turnLeft(); // Update ZOOMED VIEW interface.. $("#face1").html("" + curcube.getFace('h0') + " ―――――⨀ "); $("#face2").html("" + curcube.getFace('v1') + ""); $("#face3").html("⨀―――― " + curcube.getFace('h1') + ""); $("#face1").attr("target", curcube.getFace('h0')); $("#face2").attr("target", curcube.getFace('v1')); $("#face3").attr("target", curcube.getFace('h1')); // Display the debug info.. visInfo(); } /* * Turn the current cube to the right * * @returns void */ function turnRight() { curcube.turnRight(); // Update ZOOMED VIEW interface.. $("#face1").html("" + curcube.getFace('h0') + " ―――――⨀ "); $("#face2").html("" + curcube.getFace('v1') + ""); $("#face3").html("⨀―――― " + curcube.getFace('h1') + ""); $("#face1").attr("target", curcube.getFace('h0')); $("#face2").attr("target", curcube.getFace('v1')); $("#face3").attr("target", curcube.getFace('h1')); // Display the debug info.. visInfo(); } /* * Turn the current cube to upward * * @returns void */ function turnUp() { curcube.turnUp(); // Update ZOOMED VIEW interface.. $("#face1").html("" + curcube.getFace('h0') + " ―――――⨀ "); $("#face2").html("" + curcube.getFace('v1') + ""); $("#face3").html("⨀―――― " + curcube.getFace('h1') + ""); $("#face1").attr("target", curcube.getFace('h0')); $("#face2").attr("target", curcube.getFace('v1')); $("#face3").attr("target", curcube.getFace('h1')); // Display the debug info.. visInfo(); } /* * Turn the current cube to downward * * @returns void */ function turnDown() { curcube.turnDown(); // Update ZOOMED VIEW interface.. $("#face1").html("" + curcube.getFace('h0') + " ―――――⨀ "); $("#face2").html("" + curcube.getFace('v1') + ""); $("#face3").html("⨀―――― " + curcube.getFace('h1') + ""); $("#face1").attr("target", curcube.getFace('h0')); $("#face2").attr("target", curcube.getFace('v1')); $("#face3").attr("target", curcube.getFace('h1')); // Display the debug info.. visInfo(); } /* * Hide the ZOOMED VIEW * * @returns void */ function hideZoomedview() { // Clean the old selected.. $(oldtthis).css("color","#d4b0dc"); $(oldtthis).css("text-decoration","none"); oldtthis = null; // Reset the detail view $("#detailtitle").html(""); $("#detaildata").html(""); $("#datadetail").hide(); // Hide ZOOMED VIEW interface and controls $("#cubeList").css("width", "100%"); $("#cubelinks").hide(); $("#zoomedview").hide(); $("#cubectrls").hide(); // Reset body background.. $(document.body).css("background","#0d0d0d"); } /* * Mouse over handle for ZOOMED VIEW * * @returns void */ function zoomviewOver() { clearTimeout(timeoutId); } /* * Mouse out handle for ZOOMED VIEW * * @returns void */ function zoomviewOut() { timeoutId = setTimeout(hideZoomedview,1500); } /* * Display the debug info * * @returns void */ function visInfo() { $("#hcube").val(curcube.gethcube()); $("#vcube").val(curcube.getvcube()); $("#hcur").val(curcube.gethcur()); $("#vcur").val(curcube.getvcur()); $("#curcube").val(curcube.getname()); } /* function eachNode(rootNode, callback) { if (!callback) { const nodes = [] eachNode(rootNode, function(node) { nodes.push(node.nodeName) //nodes.push(node) }) return nodes } if (false === callback(rootNode)) { return false } if (rootNode.hasChildNodes()) { const nodes = rootNode.childNodes for (let i = 0, l = nodes.length; i < l; ++i) { if (false === eachNode(nodes[i], callback)) { return } } } } */ /* * Get the data for the given detail / face * * @param string xmlStr, the current cube xml data * @param string detail, the requested detail * @returns string, the detail data */ function getDetailData(xmlStr, detail) { var ret = ""; var re; detail = detail.toLowerCase(); xmlStr = xmlStr.replace('',""); xmlStr = xmlStr.replace('
',""); xmlStr = xmlStr.replace('
',""); xmlStr = xmlStr.replaceAll('\n',""); xmlStr = xmlStr.replaceAll(String.fromCharCode(9), ""); xmlStr = xmlStr.replaceAll(String.fromCharCode(10), ""); xmlStr = xmlStr.replaceAll(String.fromCharCode(13), ""); xmlStr = xmlStr.replaceAll(" ", ""); xmlStr = xmlStr.replaceAll(" ", ""); xmlStr = escape(xmlStr); xmlStr = xmlStr.replaceAll("%0A", ""); xmlStr = xmlStr.replaceAll("%20%20%20%20%20", ""); xmlStr = xmlStr.replaceAll("%20%20%20%20%", ""); xmlStr = xmlStr.replaceAll("%20%20%", ""); //xmlStr = unescape(xmlStr); //alert(xmlStr); switch (detail) { case "address": re = new RegExp("detail%20face%3D%22address%22.+/country", "igsu"); break; case "contacts": re = new RegExp("detail%20face%3D%22contacts%22.+/cell", "igsu"); break; case "other info": re = new RegExp("detail%20face%3D%22other%20info%22.+/description", "igsu"); break; case "menu": re = new RegExp("detail%20face%3D%22menu%22.+/menu3", "igsu"); break; case "pictures": re = new RegExp("detail%20face%3D%22pictures%22.+/pic5", "igsu"); break; case "password": re = new RegExp("detail%20face%3D%22password%22.+/password", "igsu"); break; } s = re.exec(xmlStr); if (!s || s.length===0) { ret = "      Error! #1"; return ret; } xmlStr = s[0]; xmlStr = "<"+xmlStr+">"; xmlStr = unescape(xmlStr); //alert(xmlStr); const parser = new DOMParser(); const doc = parser.parseFromString(xmlStr, "text/xml"); x = doc.getElementsByTagName("detail"); if (x.length===0) { ret = "Error! #2"; return ret; } ret += "
"; for (i = 0; i < x[0].childNodes.length; i++) { if (x[0].childNodes[i].nodeType === 1) { if (x[0].childNodes[i].getAttributeNode("type")) { mytype = x[0].childNodes[i].getAttributeNode("type"); if (mytype.value==="pic") { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } else { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } } else { if (x[0].childNodes[i].nodeName === "business-type") { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } else if (x[0].childNodes[i].nodeName === "guid") { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } else if (x[0].childNodes[i].nodeName === "password") { if (password===1) { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } } else if (x[0].childNodes[i].nodeName === "city-zip-prov") { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } else if (x[0].childNodes[i].nodeName === "country") { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } else { ret += "
" + x[0].childNodes[i].nodeName + "  
" + "
"; } } } } if ((detail==="pictures") || (detail==="menu")) { ret += "

you can use eg. Goolge Drive or Microsoft OneDrive to host your pictures.
" } ret += "
"; return ret; } /* * Store the old data of the text control * * @param {InterfaceEl} tthis, the text control under editing * @returns void */ /*function storeOldData(tthis) { //alert("keypress"); lineOldVal = $(tthis).val(); }*/ /* * Store in the cube object the new data of the text control * * @param {InterfaceEl} tthis, the text control under editing * @returns void */ function storeData(tthis) { //alert("keyup"); lineNewVal = $(tthis).val(); //alert(lineNewVal); nodeName = tthis.id; nodeName = nodeName.replace("cube-detail-",""); //alert(nodeName); xmlStr = curcube.getxml(); //$("#log").html($("#log").html() + "old=" + "/(\<" + nodeName + "\>).*(\<\/" + nodeName + "\>)/gs" + "\n"); //$("#log").html($("#log").html() + "new=" + lineNewVal + "\n"); //alert("<" + nodeName + ">" + lineNewVal + ""); //re = "/(\<" + nodeName + "\>).*(\<\/" + nodeName + "\>)/gs"; switch (nodeName) { case "name": re = /(\).*(\<\/name>)/gs; break; case "address-line1": re = /(\).*(\<\/address-line1>)/gs; break; case "address-line2": re = /(\).*(\<\/address-line2>)/gs; break; case "address-line3": re = /(\).*(\<\/address-line3>)/gs; break; case "city-zip-prov": re = /(\).*(\<\/city-zip-prov>)/gs; break; case "country": re = /(\).*(\<\/country>)/gs; break; case "tel": re = /(\).*(\<\/tel>)/gs; break; case "fax": re = /(\).*(\<\/fax>)/gs; break; case "cell": re = /(\).*(\<\/cell>)/gs; break; case "description": re = /(\).*(\<\/description>)/gs; break; } xmlStr = xmlStr.replace(re, "$1" + lineNewVal + "$2"); //xmlStr = xmlStr.replace("<" + nodeName + ">" + lineOldVal + "", "<" + nodeName + ">" + lineNewVal + ""); //alert(xmlStr); curcube.xml = xmlStr; dataChanged = true; } /* * Store in the cube object the new pic data * * @param {InterfaceEl} tthis, the text control under editing * @returns void */ function storePicData(tthis) { //alert("keyup"); lineNewVal = $(tthis).val(); nodeName = tthis.id; nodeName = nodeName.replace("cube-detail-",""); //alert(nodeName); xmlStr = curcube.getxml(); switch (nodeName) { case "menu1": re = /(\).*(\<\/menu1>)/gs; break; case "menu2": re = /(\).*(\<\/menu2>)/gs; break; case "menu3": re = /(\).*(\<\/menu3>)/gs; break; case "pic1": re = /(\).*(\<\/pic1>)/gs; break; case "pic2": re = /(\).*(\<\/pic2>)/gs; break; case "pic3": re = /(\).*(\<\/pic3>)/gs; break; case "pic4": re = /(\).*(\<\/pic4>)/gs; break; case "pic5": re = /(\).*(\<\/pic5>)/gs; break; } xmlStr = xmlStr.replace(re, "$1" + lineNewVal + "$2") //xmlStr = xmlStr.replace("<" + nodeName + " type=\"pic\">" + lineOldVal + "", "<" + nodeName + " type=\"pic\">" + lineNewVal + ""); //alert(xmlStr); curcube.xml = xmlStr; dataChanged = true; } function _saveData() { if (dataChanged) { curcube.savedata(); //saveData(); dataChanged = false; } } setInterval("_saveData()", 1500); /* * Display the given data detail * * @param selected cube * @returns void */ function openDetail(tthis) { myhtml = getDetailData(curcube.getxml(), $(tthis).attr("target")); $("#detailtitle").html("      " + $(tthis).attr("target") + ":"); $("#detaildata").html(myhtml); $("#datadetail").show(); //alert(curcube.getxml()); }