/**
* 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 + "" + nodeName + ">");
//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 + ">", "<" + nodeName + ">" + lineNewVal + "" + nodeName + ">");
//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 + ">", "<" + nodeName + " type=\"pic\">" + lineNewVal + "" + nodeName + ">");
//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());
}