/*js //==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>>==>>> // // CssHidex v1.16 [ Commercial Version ] // Copyright (c) phpkobo.com ( http://www.phpkobo.com/ ) // Email : admin@phpkobo.com // ID : HDXCS-116 // URL : http://www.phpkobo.com/csshidex // //==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<<==<<< */ //////////////////////////////////////////////////////////////////// // $shorthands function $(selector,el_ref){ return (el_ref?el_ref:document).querySelector(selector); }; function $$(selector,el_ref){ return (el_ref?el_ref:document).querySelectorAll(selector); }; function $id(id){ return document.getElementById(id); }; function $ce(tagName){ return document.createElement(tagName); }; //////////////////////////////////////////////////////////////////// // jQuery.offset function jqOffset(el){ var rect=el.getBoundingClientRect(); var el_body=document.documentElement; return { x:rect.left+el_body.scrollLeft, y:rect.top+el_body.scrollTop }; }; //////////////////////////////////////////////////////////////////// // ajaxCall function ajaxCall(url_server,requ,callback,auxproc,errproc){ const xhr=new XMLHttpRequest(); xhr.open("POST",url_server,true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); xhr.addEventListener("load",function(){ if (xhr.status==200){ let str=xhr.responseText; const sig="[!json!]"; const pos=str.indexOf(sig); if(pos!=-1){ if(pos>0){ const pretext=str.substr(0,pos); if(errproc){errproc("SBL",pretext);} } str=str.substr(pos+sig.length); const resp=JSON.parse(str); if (resp.result=="OK"){ if(callback){callback(resp);} }else{ if(errproc){errproc("NOR",resp.result);} } }else{ if(errproc){errproc("SMS",str);} } }else{ let s=""; s+="status:"+xhr.status+"\n"; s+="statusText:"+xhr.statusText; if(errproc){errproc("N2H",s);} } }); if(auxproc){auxproc(xhr);} xhr.send("requ="+encodeURIComponent(JSON.stringify(requ))); return xhr; }; //////////////////////////////////////////////////////////////////// // protect a webpage form drag-and-drop function preventFileDrop(){ document.addEventListener("dragover",function(e){ e.preventDefault(); }); document.addEventListener("drop",function(e){ e.preventDefault(); }); }; preventFileDrop(); //////////////////////////////////////////////////////////////////// // end events function onEnd(el,callback,ename){ const func=function(e){ if(el==e.srcElement){ el.removeEventListener(ename,func); if(callback){callback(e);} } }; el.addEventListener(ename,func); }; function onTransitionEnd(el,callback){ onEnd(el,callback,"transitionend"); }; function onAnimationEnd(el,callback){ onEnd(el,callback,"animationend"); }; //////////////////////////////////////////////////////////////////// // createElementFromHTML function createElementFromHTML(html){ const el=document.createElement("div"); el.innerHTML=html; return el.firstElementChild; } //////////////////////////////////////////////////////////////////// // browser detection function isSafari(){ return (window.safari!==undefined); }; function isFireFox(){ return (navigator.userAgent.toLowerCase().indexOf('firefox')>-1); }; function isIE(){ var ua=window.navigator.userAgent; var msie=ua.indexOf("MSIE "); // Trident/7.0; rv:11.0 return ((msie>0)||!!ua.match(/Trident.*rv\:11\./)); }; //////////////////////////////////////////////////////////////////// // send enter & space to click function esToClick(el){ el.addEventListener("keydown",function(e){ if((e.key=="Enter")||(e.key==" ")){ e.preventDefault(); this.click(); } }); return el; }; "use strict"; function CUiControl(px){ var el_control=px.el_control; function enable(){ el_control.classList.remove("uic-disable"); }; function disable(){ el_control.classList.add("uic-disable"); }; function init(){ enable(); }; init(); return { enable:enable, disable:disable }; }; "use strict"; function CRMenuControl(px){ // elements const el_control=px.el_control; const el_area=px.el_area;//the area that contains menu const el_mode_ref=px.el_mode_ref;//mode reference // rmn specification root const sp_root=px.sp_root; // "auto","expand","compact" let mmode=px.menu_mode; const b_mmode_auto=(px.menu_mode=="auto"); // mappings const mapE2S=new WeakMap();//from element to spec const mapP2C=new WeakMap();//from parent el_item to child el_box const mapC2P=new WeakMap();//from child el_box to parent el_item function isSafari(){ return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); }; function isFirefox(){ return (navigator.userAgent.indexOf("Firefox")!==-1); }; // remove all child nodes function removeAllChildNodes(parent){ while(parent.firstChild){ parent.removeChild(parent.firstChild); } }; // jQuery.offset function jqOffset(el){ const rect=el.getBoundingClientRect(); const el_body=document.documentElement; return { x:rect.left+el_body.scrollLeft, y:rect.top+el_body.scrollTop }; }; function isTopItem(el_item){ return !!(el_item.closest(".rmn-control")); }; function keyHandlerX(el,key){ if(!el){return false;} const b_top=isTopItem(el); const b_has=el.classList.contains("rmn-has-menu"); const b_open=el.classList.contains("rmn-open"); function clickSelf(el){ el.click(); }; function clickParent(el,key){ const el_item=mapC2P.get(el.parentElement); el_item.click(); if(key){ if(isTopItem(el_item)){ keyHandlerX(el_item,key); } } }; function openSubmenu(el){ if(!b_open){el.click();} const el_box=mapP2C.get(el); if(el_box){ const el_item=el_box.querySelector(".rmn-item"); if(el_item){el_item.focus();} } }; function moveSibling(el,key){ if(b_open){el.click();} let el_item; switch(key){ case "ArrowUp": case "ArrowLeft": el_item=el.previousElementSibling; break; case "ArrowDown": case "ArrowRight": el_item=el.nextElementSibling; break; } if(el_item){ el_item.focus(); }else if(key=="ArrowUp"){ clickParent(el); } }; function moveRL(el,key){ if(b_top){ moveSibling(el,key); }else{ if(b_has){ openSubmenu(el); }else{ clickParent(el,key); } } }; function openFirstMenu(el){ if(b_has){ if(!b_open){el.click();} const el_box=mapP2C.get(el); if(el_box){ const el_item=el_box.querySelector(".rmn-item"); if(el_item){el_item.focus();} } } }; switch(key){ case "Enter": clickSelf(el); break; case "Escape": if(b_open){ clickSelf(el); }else if(!b_top){ clickParent(el); } break; case "ArrowUp": if(!b_top){ moveSibling(el,key); } break; case "ArrowDown": if(b_top){ openFirstMenu(el); }else{ moveSibling(el,key); } break; case "ArrowLeft": case "ArrowRight": moveRL(el,key); break; default: return false; } return true; }; function keyHandler(el,e){ if(keyHandlerX(el,e.key)){ e.preventDefault(); e.stopPropagation(); } }; function setupItem(el_item,sp_item){ // mapping mapE2S.set(el_item,sp_item); // href const action=sp_item.menu?"+":sp_item.action; el_item.setAttribute("href",action); // target if(sp_item.target){el_item.setAttribute("target",sp_item.target);} // tabindex el_item.setAttribute("tabindex",0); // has-menu if(sp_item.menu){ el_item.classList.add("rmn-has-menu"); } // click el_item.addEventListener("click",function(e){ // [BEGIN] close the sibling that is currently open // (1) find parent let el_parent=this.closest(".rmn-control"); if(!el_parent){el_parent=this.closest(".rmn-box");} // (2) find the sibling that is currently open let el_sibling=el_parent.querySelector(".rmn-open"); // (3) close it if(el_sibling&&(el_sibling!=this)){ closeMenu(el_sibling); } // [END] close the sibling that is currently open // focus this.focus(); // get href data const href=this.getAttribute("href"); // open a rmn if(href=="+"){ e.preventDefault(); e.stopPropagation(); if(this.classList.contains("rmn-open")){ closeMenu(this); }else{ openMenu(this); } } // execute a command if(href.substr(0,1)=="@"){ e.preventDefault(); // obtain a command const cmd=href.substr(1); // execute a command el_control.dispatchEvent(new CustomEvent( "execute",{detail:cmd})); } }); el_item.addEventListener("keyup",function(e){ keyHandler(this,e); }); el_item.addEventListener("keydown",function(e){ e.preventDefault(); e.stopPropagation(); }); }; function createSmiLeft(){ // create sub rmn indicator inner const el_smi_inner=document.createElement("div"); // classname el_smi_inner.className="rmn-smi-inner-left"; // create sub rmn indicator const el_smi=document.createElement("div"); // classname el_smi.className="rmn-smi-left"; // append inner el_smi.appendChild(el_smi_inner); // return return el_smi; }; function createSmiRight(){ // create sub rmn indicator inner const el_smi_inner=document.createElement("div"); // classname el_smi_inner.className="rmn-smi-inner-right"; // create sub rmn indicator const el_smi=document.createElement("div"); // classname el_smi.className="rmn-smi-right"; // append inner el_smi.appendChild(el_smi_inner); // return return el_smi; }; function createLabel(label){ // create sub rmn indicator const el_label=document.createElement("div"); // classname el_label.className="rmn-label"; // label el_label.innerHTML=label; // return return el_label; }; function createItem(sp_item){ let el_item; if(sp_item.name&&(sp_item.name=="-")){ // create anchor element el_item=document.createElement("div"); // classname el_item.className="rmn-separator"; }else{ // create anchor element el_item=document.createElement("a"); // classname el_item.className="rmn-item"; // setup setupItem(el_item,sp_item); // insert components el_item.appendChild(createSmiLeft()); el_item.appendChild(createLabel(sp_item.label)); el_item.appendChild(createSmiRight()); } // return return el_item; }; function createBox(el_item){ const sp_item=mapE2S.get(el_item); const menu=sp_item.menu; // create rmn box var el_box=document.createElement("div"); // classname el_box.className="rmn-box"; // add nontop class if(!isTopItem(el_item)){ el_box.classList.add("rmn-box-nontop"); } // add children for(let i=0;i