/*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 }; }; function CSMenuControl(px){ // elements const el_control=px.el_control; const el_btn_main=px.el_btn_main; let el_cover; let el_front; // parameters // specification root const sp_root=px.sp_root; // animate for open in abosolute mode let b_aniopen=("b_aniopen" in px)?px.b_aniopen:true; // variables let el_selected=null; // mappings:from element to spec const mapE2S=new WeakMap(); // mappings:from name to element const mapN2E={}; function isAbsMode(){ const el=el_control.querySelector(".smn-cover"); const v=window.getComputedStyle(el).getPropertyValue("position"); return(v=="absolute"); }; function toggleFront(){ el_btn_main.click(); }; function selectItem(el_item){ const sp_item=mapE2S.get(el_item); if(sp_item.selectable){ if(el_selected){ el_selected.classList.remove("smn-selected"); } el_selected=el_item; el_selected.classList.add("smn-selected"); } }; function executeItem(el_item){ let b_processed=false; const sp_item=mapE2S.get(el_item); // open/close submenu if(el_item.classList.contains("smn-has-menu")){ b_processed=true; el_item.classList.toggle("smn-open"); }else{ // get href data const href=el_item.getAttribute("href"); // execute a command if(href.substr(0,1)=="@"){ b_processed=true; // selectable selectItem(el_item); // obtain a command const cmd=href.substr(1); // execute a command el_control.dispatchEvent(new CustomEvent( "execute",{detail:cmd})); } // close front if(isAbsMode()){ toggleFront(); } } return b_processed; }; function select(name){ const el_item=mapN2E[name]; if(el_item){selectItem(el_item);} }; function execute(name){ const el_item=mapN2E[name]; if(el_item){executeItem(el_item);} }; function createMenuItem(el_parent,sp_item){ if(sp_item.name=="-"){ const el_line=$ce("div"); el_line.className="smn-line"; // append el_parent.appendChild(el_line); }else{ // item const el_item=$ce("a"); el_item.className="smn-item"; // state if(sp_item.state){ sp_item.state.forEach(function(a){ el_item.classList.add("smn-"+a); if(a=="selected"){ el_selected=el_item; } }); } // mapping mapE2S.set(el_item,sp_item); if(sp_item.name){ mapN2E[sp_item.name]=el_item; } // item:href const action=sp_item.menu?"+":sp_item.action; el_item.setAttribute("href",action); // item:target if(sp_item.target){el_item.setAttribute("target",sp_item.target);} // item:tabindex el_item.setAttribute("tabindex",0); // item:has-menu const b_has_menu=!!sp_item.menu; if(b_has_menu){ el_item.classList.add("smn-has-menu"); } // handle const el_handle=$ce("div"); el_handle.className="smn-handle"; el_item.appendChild(el_handle); // switch const el_switch=$ce("div"); el_switch.className="smn-switch"; el_item.appendChild(el_switch); // switch-mark if(b_has_menu){ const el_switch_mark=$ce("div"); el_switch_mark.className="smn-switch-mark"; el_switch.appendChild(el_switch_mark); } // label const el_label=$ce("div"); el_label.className="smn-label"; el_label.innerHTML=sp_item.label; el_item.appendChild(el_label); // append el_parent.appendChild(el_item); // child menu if(b_has_menu){ const el_box=$ce("div"); el_box.className="smn-box"; createSubMenu(el_box,sp_item.menu); el_parent.appendChild(el_box); } } }; function createSubMenu(el_parent,menu){ for(let i=0;i