2 lines
65 KiB
JavaScript
Executable File
2 lines
65 KiB
JavaScript
Executable File
class _TypeIcons{constructor(){this.kv={}}get(t,e){return this.kv.get(t,e)}register(t,e){this.kv[t]=e}}TypeIcons=new _TypeIcons;var currentScriptPath=function(){var t;if(document.currentScript)t=document.currentScript.src;else{console.log("has not currentScriot");var e=document.querySelectorAll("script[src]");if(e.length<1)return null;t=e[e.length-1].src}e=t.split("/"),e=e[e.length-1];return t.replace(e,"")},bricks_path=currentScriptPath(),bricks_resource=function(t){return bricks_path+t};function querySelectorAllShadows(e,t=document.body){var s=Array.from(t.querySelectorAll("*")).map(t=>t.shadowRoot).filter(Boolean),s=(console.log("[querySelectorAllShadows]",e,t,`(${s.length} shadowRoots)`),s.map(t=>querySelectorAllShadows(e,t)));return Array.from(t.querySelectorAll(e)).concat(s).flat()}var schedule_once=function(t,e){e*=1e3,window.setTimeout(t,e)},schedule_interval=function(s,t){schedule_once(function(t,e){t(),schedule_once(s,e)}.bind(s,t),t)},debug=function(){console.log(...arguments)},import_cache=new Map,import_css=async function(t){var e,s;1!==import_cache.get(t)&&(e=await tget(t),debug("import_css():tget() return",e),(s=document.createElement("style")).setAttribute("type","text/javascript"),s.innerHTML=e,document.getElementsByTagName("head")[0].appendChild(s),import_cache.set(t,1))},import_js=async function(t){var e;1!==import_cache.get(t)&&((e=document.createElement("script")).setAttribute("type","text/javascript"),e.src=t,document.body.appendChild(e),import_cache.set(t,1))},extend=function(t,e){for(var s in e)e.hasOwnProperty(s)&&(t[s]&&"object"==typeof t[s]&&"[object Object]"==t[s].toString()&&e[s]?extend(t[s],e[s]):t[s]=e[s]);return t},objget=function(t,e,s){return t.hasOwnProperty(e)?t[e]:s},obj_fmtstr=function(i,t){return t.replace(/\${(\w+)([:=]*)}/g,(t,e,s)=>i.hasOwnProperty(e)?""==s?i[e]:e+s+i[e]:"")},archorize=(Object.prototype.copy=function(){var t={};for(k in this)this.hasOwnProperty(k)&&(t[k]=this[k]);return t},Object.prototype.get=function(t,e){return objget(this,t,e)},Object.prototype.fmtstr=function(t){return obj_fmtstr(this,t)},Object.prototype.update=function(t){t&&extend(this,t)},Object.prototype.updates=function(){for(var t=0;t<arguments.length;t++)extend(this,arguments[t])},function(t,e){var s=(e=e||"cc")[0],e=e[1],i="0%";switch(s){case"t":i="0%";break;case"b":i="100%";break;default:i="50%"}var o="0%";switch(e){case"l":o="0%";break;case"r":o="100%";break;default:o="50%"}t.style.top=i;s={x:t.style.left=o,y:i}.fmtstr("translateY(-${y}) translateX(-${x})");console.log("archorize(): tsf=",s),t.style.transform=s,t.style.position="absolute"}),absurl=(Array.prototype.insert=function(t,...e){this.splice(t,0,...e)},Array.prototype.remove=function(t){t=this.indexOf(t);return 0<=t&&this.splice(t,1),this},function(t,e){return t.startsWith("http://")||t.startsWith("https://")?t:(e=e.baseURI,t.startsWith("/")&&(e=Body.baseURI,t=t.substring(1)),delete(paths=e.split("/"))[paths.length-1],paths.join("/")+t)}),debug=function(...t){console.log(...t)},convert2int=function(t){return"number"==typeof t?t:(t=t.match(/\d+/),parseInt(t[0]))};function setCookie(t,e,s){var i,o="";s&&((i=new Date).setTime(i.getTime()+24*s*60*60*1e3),o="; expires="+i.toUTCString()),document.cookie=t+"="+(e||"")+o+"; path=/"}function getCookie(t){for(var e=t+"=",s=document.cookie.split(";"),i=0;i<s.length;i++){for(var o=s[i];" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(e))return o.substring(e.length,o.length)}return null}function eraseCookie(t){document.cookie=t+"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"}var set_max_height=function(t,e){var s=t.dom_element.offsetHeight-e.dom_element.offsetHeight;s<0?t.set_height(e.dom_element.offsetHeight):0<s&&e.set_height(t.dom_element.offsetHeight)};class I18n{constructor(t,e){this.url=opts.url,this.default_lang=opts.default_lang||"en",this.method=opts.method||"GET",this.lang_msgs={},this.msgs={}}_(t,e){return this.msgs.hasOwnProperty(t)&&(itxt=this.msgs[t]),e instanceof Object?e.fmtstr(itxt):t}is_loaded(t){return!!this.lang_msgs.get(t)}setup_dict(t,e){this.cur_lang=e,this.lang_msgs.update({lang:t}),this.msgs=t}async change_lang(t){this.lang_msgs.get(t)?this.msgs=this.lang_msgs.get(t):this.url&&(d=await jcall(desc.url,{method:this.method||"GET",params:{lang:t}}),this.setup_dict(d,t))}}class Factory_{constructor(){this.widgets_kv=new Object,this.widgets_kv._t_=1}register(t,e){this.widgets_kv[t]=e}get(t){return this.widgets_kv.hasOwnProperty(t)?this.widgets_kv[t]:null}}const Factory=new Factory_;class JsWidget{dom_element=null;constructor(t){this.baseURI=(t=t||{}).baseURI,this.opts=t,this.create(),(this.dom_element.bricks_widget=this).opts_set_style(),this.opts.tooltip&&(this.dom_element.tooltip=this.opts.tooltip),this._container=!1,this.parent=null,this.sizable_elements=[],t.css&&this.set_css(t.css),t.csses&&this.set_csses(t.csses)}create(){this.dom_element=document.createElement("div")}opts_set_style(){for(var t=["width","x","y","height","margin","padding","align","textAlign","overflowY","overflowX","overflow","color"],e={"z-index":"zIndex","overflow-x":"overflowX","opveflow-y":"overflowY",bgcolor:"backgroundColor"},s=Object.keys(e),i={},o=Object.keys(this.opts),a=0;a<o.length;a++)t.find(t=>t==o[a])&&(i[o[a]]=this.opts[o[a]]),s.find(t=>t==o[a])&&(i[e[o[a]]]=this.opts[o[a]]),this[o[a]]=this.opts[o[a]];this.dom_element.style.update(i),this.opts.css&&this.set_css(this.opts.css)}sizable(){bricks_app.text_ref(this)}change_fontsize(t){if(t=convert2int(t),!this.specified_fontsize){var e=this.rate||1;this.dom_element.style.fontSize=t=t*e+"px";for(var s=0;s<this.sizable_elements.length;s++)this.sizable_elements[s].style.fontSize=t}}set_fontsize(){var t=this.opts.fontsize?(this.specified_fontsize=!0,this.opts.fontsize):bricks_app.get_textsize(this.ctype),e=(t=convert2int(t),this.rate||1);this.dom_element.style.fontSize=t=t*e+"px";for(var s=0;s<this.sizable_elements.length;s++)this.sizable_elements[s].style.fontSize=t}h_center(){this.dom_element.style.marginLeft="auto",this.dom_element.style.marginRight="auto"}h_left(){this.dom_element.style.marginLeft="0px",this.dom_element.style.marginRight="auto"}h_right(){this.dom_element.style.marginLeft="auto",this.dom_element.style.marginRight="0px"}ht_center(){this.dom_element.style.textAlign="center"}ht_left(){this.dom_element.style.textAlign="left"}ht_right(){this.dom_element.style.textAlign="right"}set_width(t){"number"==typeof t&&(t+="px"),this.dom_element.style.width=t}set_height(t){"number"==typeof t&&(t+="px"),this.dom_element.style.height=t}set_style(t,e){this.dom_element.style[t]=e}set_csses(t,e){t.split(" ").forEach(t=>{this.set_css(t,e)})}set_css(t,e){e?this.dom_element.classList.remove(t):this.dom_element.classList.add(t)}set_cssObject(t){this.dom_element.style.update(t)}is_container(){return this._container}_create(t){return document.createElement(t)}set_id(t){this.dom_element.id=t}set_baseURI(t){this.baseURI=t}absurl(t){return console.log("this.baseURI=",this.baseURI),this.baseURI?absurl(t,this):t}show(){this.dom_element.style.display=""}hide(){this.dom_element.style.display="none"}bind(t,e){this.dom_element.addEventListener(t,e)}unbind(t,e){this.dom_element.removeEventListener(t,e)}dispatch(t,e){t=new Event(t);t.params=e,this.dom_element.dispatchEvent(t)}}class TextBase extends JsWidget{constructor(t){super(t),this.opts=t,this.rate=this.opts.rate||1,this.specified_fontsize=!1,this.set_attrs(),this.dom_element.style.fontWeight="normal",this.sizable()}set_attrs(){this.opts.hasOwnProperty("text")&&(this.text=this.opts.text),this.opts.hasOwnProperty("otext")&&(this.otext=this.opts.otext),this.opts.hasOwnProperty("i18n")&&(this.i18n=this.opts.i18n),this._i18n=new I18n,this.i18n&&this.otext&&(this.text=this._i18n._(this.otext)),this.dom_element.innerHTML=this.text}set_i18n_text(){this.otext&&this.i18n&&(this.text=this._i18n._(this.otext),this.dom_element.innerHTML=this.text)}}class Text extends TextBase{constructor(t){super(t),this.ctype="text",this.set_fontsize()}}class Title1 extends TextBase{constructor(t){super(t),this.ctype="title1",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}class Title2 extends TextBase{constructor(t){super(t),this.ctype="title2",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}class Title3 extends TextBase{constructor(t){super(t),this.ctype="title3",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}class Title4 extends TextBase{constructor(t){super(t),this.ctype="title4",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}class Title5 extends TextBase{constructor(t){super(t),this.ctype="title5",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}class Title6 extends TextBase{constructor(t){super(t),this.ctype="title6",this.set_fontsize(),this.dom_element.style.fontWeight="bold"}}Factory.register("Text",Text),Factory.register("Title1",Title1),Factory.register("Title2",Title2),Factory.register("Title3",Title3),Factory.register("Title4",Title4),Factory.register("Title5",Title5),Factory.register("Title6",Title6);var tooltip=null;createTooltip=function(){(tooltip=document.createElement("div")).className="tooltip",tooltip.style.left="50%",tooltip.style.trabsform="translateX(-50%)";var e=t=>{t.target.removeChild(tooltip)};window.addEventListener("mouseover",t=>{if(!t.target.tooltop)return!0;tooltip.textContent=t.target.tooltip,t.target.addEventListener("mouseout",e,{once:!0})})};let bricks_app=null;var widgetBuild=async function(e,t){t=t||Body;var s,i,o=null,a=("urlwidget"==e.widgettype?(a=absurl(e.options.url,t),s=e.options.method||"GET",i=e.options.params||{},e=await jcall(o=a,{method:s,params:i})):o=t.baseURI,Factory.get(e.widgettype));if(!a)return console.log("widgetBuild():",e.widgettype,"not registered",Factory.widgets_kw),null;e.options.baseURI=o;var r=new a(e.options);if(e.hasOwnProperty("id")&&r.set_id(e.id),e.hasOwnProperty("subwidgets"))for(let t=0;t<e.subwidgets.length;t++){var n=e.subwidgets[t],h=await widgetBuild(n,r);h?r.add_widget(h):console.log("widgetBuild() error: sdesc=",n)}if(e.hasOwnProperty("binds"))for(var l=0;l<e.binds.length;l++)buildBind(r,e.binds[l]);return r},buildBind=function(t,e){var s,i=getWidgetById(e.wid,t);i?(s=e.event,buildEventBind(t,i,s,e)):cnsole.log("desc wid not find",e)},buildEventBind=function(t,e,s,i){t=universal_handler.bind(null,t,e,i);i.conform&&((i=widgetBuild(i.conform,e)).bind("on_conform",t),t=i.open.bind(i)),e.bind(s,t)},universal_handler=function(t,e,s,i){debug("universal_handler() info","from_widget=",t,"widget=",e,"desc=",s,i);var o=buildEventHandler(t,s);if(o)return o(i);debug("universal_handler() error","from_widget=",t,"widget=",e,"desc=",s,evnet)},buildEventHandler=function(t,e){var s=getWidgetById(e.target,t);if(!s)return console.log("target miss desc=",e,"w=",t),null;var i,o=null;switch(e.rtdata?o=e.rtdata:e.datawidget&&(i={widget:e.datawidget,method:e.datamethod,params:e.dataparams,script:e.datascript},o=getRealtimeData(t,i)),e.actiontype){case"urlwidget":return buildUrlwidgetHandler(t,s,o,e);case"bricks":return buildBricksHandler(t,s,o,e);case"registerfunction":return buildRegisterFunction(t,s,o,e);case"method":return buildMethodHandler(t,s,o,e);case"script":return buildScriptHandler(t,s,o,e);case"event":return buildDispatchEventHandler(t,s,o,e);default:console.log("invalid actiontype",s,e)}},getRealtimeData=function(t,e){var s,t=getWidgetById(e.widget,t);if(t){if(e.method)return(s=buildMethodHandler(null,t,null,e))();if(e.script)return(s=buildScriptHandler(null,t,null,e))();debug("getRealtimeData():desc=",e,"f=",s)}else console.log("target miss",e);return null},buildUrlwidgetHandler=function(t,e,s,i){var o=i.options.copy();return o.params.update(s),async function(t,e,s){console.log("target=",t,"mode=",e,"options=",s);var i=await widgetBuild(s,void 0);i?("replace"==e&&t.clear_widgets(),t.add_widget(i)):console.log("options=",s,"widgetBuild() failed")}.bind(e,e,i.mode||"replace",{widgettype:"urlwidget",options:o})},buildBricksHandler=function(t,e,s,i){var o=i.options.copy();return o.options.update(s),async function(t,e,s){console.log("target=",t,"mode=",e,"options=",s);var i=await widgetBuild(s,void 0);i?("replace"==e&&t.clear_widgets(),t.add_widget(i)):console.log("options=",s,"widgetBuild() failed")}.bind(e,e,i.mode||"replace",o)},buildRegisterFunctionHandler=function(t,e,s,i){var o,a=registerfunctions.get(i.rfname);return a?(o={},i.params&&o.update(i.params),s&&o.update(s),a.bind(e,o)):(console.log("rfname:",i.rfname,"not registed",i),null)},buildMethodHandler=function(t,e,s,i){var o,a=e[i.method];return a?((o={}).updates(i.params,s),a.bind(e,o)):(console.log("method:",i.method,"not exists in",e,"w=",t),null)},buildScriptHandler=function(t,e,s,i){var o={};return o.updates(i.params,s),new Function("target","params","event",i.script).bind(e,e,o)},buildDispatchEventHandler=function(t,e,s,i){var o={};o.updates(i.params,s);return function(t,e,s){t.dispatch(e,s)}.bind(e,o)},getWidgetById=function(e,t){if(!e)return t;if("string"!=typeof e)return e;for(var s,i=e.split("/"),o=t.dom_element,a=null,r=0;r<i.length;r++){if(0==r){if("self"==i[r]){o=t.dom_element;continue}if("root"==i[r]){o=bricks_app.root.dom_element;continue}if("app"==i[r])return bricks_app;if("window"==i[r]){o=Body.dom_element;continue}}try{a="-"==i[r][0]?(s=substr(1,i[r].length-1),o.closest("#"+s)):o.querySelector("#"+i[r])}catch(t){return console.log("getWidgetById():i=",i[r],e,"not found",t),null}if(null==a)return console.log("getWidgetById():",e,t,"el=",o,"id=",i[r]),null;o=a}return void 0!==o.bricks_widget?(console.log("getWidgetById():",e,t,o,"widget"),o.bricks_widget):o};class BricksApp{constructor(t){this.opts=t,(bricks_app=this).login_url=t.login_url,this.charsize=this.opts.charsize||20,this.opts.language?this.lang=this.opts.language:this.lang=navigator.language,this.textList=[],this.i18n=new I18n(t.get("i18n",{})),this.session_id=null,createTooltip()}save_session(t){this.session_id=t}get_session(){return this.session_id}get_textsize(t){var e=this.charsize;return parseInt({text:1,title1:1.96,title2:1.8,title3:1.64,title4:1.48,title5:1.32,title6:1.16}[t]*e)+"px"}text_ref(t){this.textList.push(new WeakRef(t))}text_remove_dead(){for(var t=this.textList,e=0;e<t.length;e++)t[e].deref()||this.textList.remove(t[e])}async setup_i18n(){var t={lang:this.lang};d=await jcall(desc.url,{method:desc.method||"GET",params:t}),this.i18n.setup_dict(d)}async build(){var t=structuredClone(this.opts.widget);return await widgetBuild(t,Body)}async run(){await this.change_language(this);var t=await this.build();this.root=t,Body.add_widget(t)}textsize_bigger(){this.charsize=1.05*this.charsize,this.text_resize()}textsize_smaller(){this.charsize=.95*this.charsize,this.text_resize()}text_resize=function(){for(var t,e,s=0;s<this.textList.length;s++)this.textList[s].deref()&&(t=this.textList[s].deref(),e=this.get_textsize(t.ctype),t.change_fontsize(e))};change_language=async function(t){this.lang=t,await this.i18n.change_lang(t);for(var e,s=0;s<this.textList.length;s++)this.textList[s].deref()&&(e=this.textList[s].deref()).opts.i18n&&e.set_i18n_text()}}class Image extends JsWidget{constructor(t){super(t),this.opts=t,this.options_parse()}create(){this.dom_element=document.createElement("img")}options_parse(){this.opts.hasOwnProperty("url")&&this.set_url(this.opts.url),this.opts.hasOwnProperty("width")&&(this.width=this.opts.width,this.dom_element.style.width=this.width),this.opts.hasOwnProperty("height")&&(this.height=this.opts.height,this.dom_element.style.height=this.height)}set_url(t){this.url=t,this.dom_element.src=t}}class Icon extends Image{constructor(t){super(t),this.opts.width=bricks_app.charsize,this.opts.height=bricks_app.charsize,this.ctype="text",this.sizable(),this.set_fontsize()}change_fontsize(t){var e=bricks_app.charsize;this.set_width(e),this.set_height(e)}set_fontsize(){var t=bricks_app.charsize;this.set_width(t),this.set_height(t)}set_width(t){this.dom_element.width=t}set_height(t){this.dom_element.height=t}}class BlankIcon extends JsWidget{constructor(t){t.width=bricks_app.charsize,t.height=bricks_app.charsize,super(t),this.ctype="text",this.sizable(),this.set_fontsize()}change_fontsize(t){var e=bricks_app.charsize+"px";this.set_width(e),this.set_height(e)}set_fontsize(){var t=bricks_app.charsize+"px";this.set_width(t),this.set_height(t)}set_width(t){this.dom_element.width=t,this.dom_element.style.width=t}set_height(t){this.dom_element.height=t,this.dom_element.style.height=t}}function url_params(e){return Object.keys(e).map(t=>t+"="+encodeURIComponent(e[t])).join("&")}Factory.register("Image",Image),Factory.register("Icon",Icon),Factory.register("BlankIcon",BlankIcon);class HttpText{constructor(t){this.headers=(t=t||{})||{Accept:"text/html"},this.headers.update(t),this.params={_webbricks_:1}}url_parse(t){var e=t.split("?");if(1!=e.length){t=e[0];for(var e=e[1].split("&"),s=0;s<e.length;s++){var i=e[s].split("=");this.params[i[0]]=i[1]}}return t}async get_result_data(t){return t.text()}add_own_params(t){if((t=t||{})instanceof FormData)for(var[e,s]of Object.entries(this.params))t.append(e,s);else t=Object.assign(this.params,t);var i=bricks_app.get_session();return i&&t.update({session:i}),t}add_own_headers(t){return t=t||{},Object.assign(this.headers,t)}async httpcall(t,{method:e="GET",headers:s=null,params:i=null}={}){t=this.url_parse(t);var o=this.add_own_params(i),s=(this.add_own_headers(s),{method:e}),o=("GET"==e||"HEAD"==e?t=t+"?"+url_params(o):o instanceof FormData?s.body=o:s.body=JSON.stringify(o),await fetch(t,s)),a=await this.get_result_data(o);if(o.ok)return(r=o.headers.get("Set-Cookie"))&&(r=r.split(";")[0],bricks_app.save_session(r)),a;if(401==o.status&&bricks_app.login_url)return this.withLoginInfo(t,s);console.log("method=",e,"url=",t,"params=",i),console.log("jsoncall error:");var r={type:"Error",message:a.message||"Something went wrong",data:a.data||"",code:a.code||""},o=new Error;return o.info=r,o}async withLoginInfo(t,e){await widgetBuild({id:"login_form",widgettype:"urlwidget",options:{url:bricks_app.login_url}});if(await new Promise((e,t,s)=>{s.bind("submit",t=>{e(t.target.getValue()),t.target.dismiss()}),s.bind("discard",t=>{e(null),t.target.dismiss()})})){this.set_authorization_header(e,lgin_info);var s=await fetch(t,e),i=null,i=await this.get_result_data(s);if(s.ok)return i;if(401==s.status)return this.withLoginInfo(t,e)}s={type:"Error",message:i.message||"Something went wrong",data:i.data||"",code:i.code||""},t=new Error;return t.info=s,t}set_authorization_header(t,e){var s="password::"+login_info.user+"::"+login_info.password,s=bricks_app.rsa.encrypt(s);self.header.authorization=btoa(s)}async get(t,{headers:e=null,params:s=null}={}){return this.httpcall(t,{method:"GET",headers:e,params:s})}async post(t,{headers:e=null,params:s=null}={}){return this.httpcall(t,{method:"POST",headers:e,params:s})}}class HttpJson extends HttpText{constructor(t){super(t=t||{}),this.headers={Accept:"application/json"},this.headers.update(t)}async get_result_data(t){return t.json()}}var hc=new HttpText,tget=hc.get.bind(hc),tpost=hc.post.bind(hc),jcall=(jc=new HttpJson).httpcall.bind(jc),jget=jc.get.bind(jc),jpost=jc.post.bind(jc);class Oper{constructor(t){this.value=t}__plus__(t,e){return console.log(t,e),new Oper(t.value+e.value)}__add__(t,e){return console.log(t,e),new Oper(t.value+e.value)}}class Layout extends JsWidget{constructor(t){super(t),this._container=!0,this.children=[]}add_widget(t,e){var s;!e||e>=this.children.length?((t.parent=this).children.push(t),this.dom_element.appendChild(t.dom_element)):(s=this.children[e],this.dom_element.insertBefore(t.dom_element,s.dom_element),this.children.insert(e+1,t))}remove_widgets_at_begin(t){return this._remove_widgets(t,!1)}remove_widgets_at_end(t){return this._remove_widgets(t,!0)}_remove_widgets(t,e){for(var s=this.children.copy(),i=this.children.length,o=0;o<i&&!(t<=o);o++){var a=s[e?i-1-o:o];this.children.remove(a),this.remove_widget(a)}}remove_widget(e){delete e.parent,this.children=this.children.filter(function(t){return t!=e}),this.dom_element.removeChild(e.dom_element)}clear_widgets(t){for(var e=0;e<this.children.length;e++)this.children[e].parent=null;this.children=[],this.dom_element.replaceChildren()}}class _Body extends Layout{constructor(t){super(t)}create(){this.dom_element=document.getElementsByTagName("body")[0],this.set_baseURI(this.dom_element.baseURI)}}Body=new _Body;class VBox extends Layout{constructor(t){super(t),this.set_css("vbox")}}class VFiller extends Layout{constructor(t){super(t),this.set_css("vfiller")}}class HBox extends Layout{constructor(t){super(t),this.set_css("hbox")}}class HFiller extends Layout{constructor(t){super(t),this.set_css("hfiller")}}Factory.register("HBox",HBox),Factory.register("VBox",VBox),Factory.register("HFiller",HFiller),Factory.register("VFiller",VFiller);class Menu extends VBox{constructor(t){super(t),this.dom_element.style.display="",this.dom_element.style.position="absolute",this.dom_element.style.backgroundColor=t.bgcolor||"white",this.dom_element.style.zIndex="1000",this.create_children(this.dom_element,this.opts.items),this.bind("click",this.menu_clicked)}create_submenu_container(){var t=document.createElement("div");return t.style.marginLeft="15px",t.style.display="none",t}async menu_clicked(t){var e=t.target;if(0<e.children.length)for(var s=0;s<e.children.length;s++)"none"==e.children[s].style.display?e.children[s].style.display="":e.children[s].style.display="none";else console.log("item clicked")}create_children(e,s){console.log("create_children():items=",s,"p=",e);for(let t=0;t<s.length;t++){var i,o=s[t],a=this.create_menuitem(o);e.appendChild(a),o.hasOwnProperty("items")&&(i=this.create_submenu_container(),a.appendChild(i),this.create_children(i,o.items))}}create_menuitem(t){var e=bricks_app.i18n,s=(console.log("i18n=",e),document.createElement("div"));return s.textContent=e._(t.label||t.name),console.log("create_menuitem():item=",t,"obj=",s),s}}Factory.register("Menu",Menu);class Modal extends Layout{constructor(t){super(t),this.set_width("100%"),this.set_height("100%"),this.ancestor_add_widget=Layout.prototype.add_widget.bind(this),this.panel=new VBox({}),this.ancestor_add_widget(this.panel),this.panel.set_width(this.opts.width),this.panel.dom_element.style.backgroundColor=this.opts.bgcolor||"#e8e8e8",this.panel.set_height(this.opts.height),this.panel.set_css("modal"),archorize(this.panel.dom_element,this.opts.get("archor","cc")),this.create_title(),this.content=new VBox({width:"100%"}),this.panel.add_widget(this.content)}create_title(){this.title_box=new HBox({width:"100%",height:"auto"}),this.title_box.set_css("title"),this.panel.add_widget(this.title_box),this.title=new HBox({height:"100%"});var t=new Icon({url:bricks_resource("imgs/delete.png")});t.bind("click",this.dismiss.bind(this)),this.title_box.add_widget(this.title),this.title_box.add_widget(t)}create(){var t=document.createElement("div");t.style.display="none",t.style.position="fixed",t.style.zIndex=this.opts.get("org_index",0)+1,t.style.paddingTop="100px",t.style.left=0,t.style.top=0,t.style.width="100%",t.style.height="100%",t.style.backgroundColor="rgba(0,0,0,0.4)",this.dom_element=t}add_widget(t,e){this.content.add_widget(t,e),this.opts.auto_open&&this.open()}click_handler(t){t.target==this.dom_element?this.dismiss():console.log("modal():click_handler()")}open(){var t;this.opts.auto_close&&(t=this.click_handler.bind(this),this.bind("click",t)),this.dom_element.style.display=""}dismiss(){this.dom_element.style.display="none",this.opts.auto_close&&this.unbind("click",this.click_handler.bind(this))}}class ModalForm extends Modal{constructor(t){super(t),this.build_form()}build_form(){var t={title:this.opts.title,description:this.opts.description,dataurl:this.opts.dataurl,submit_url:this.opts.submit_url,fields:this.opts.fields};this.form=new Form(t),this.form.bind("submit",this.dismiss.bind(this))}}Factory.register("Modal",Modal),Factory.register("ModalForm",ModalForm);class MdText extends JsWidget{constructor(t){super(t);t=this.build.bind(this);this.load_event=new Event("loaded"),this.dom_element.style.overFlow="auto",window.addEventListener("scroll",this.show_scroll.bind(this)),schedule_once(t,.01)}show_scroll(t){console.log("scrollY=",window.scrollY)}build=async function(){this._build(this.opts.md_url)};_build=async function(t){for(var e=await tget(t),s=(this.dom_element.innerHTML=marked.parse(e),this.dom_element.getElementsByTagName("a")),i=0;i<s.length;i++){var o=s[i].href;s[i].href="#",s[i].onclick=this._build.bind(this,o)}this.dispatch("loaded",{url:t})}}class MarkdownViewer extends VBox{constructor(t){super(t),this.back_stack=[],this.md_url=this.absurl(this.opts.md_url),this.opts.navigator&&this.createBackButton(),this.mdtext=new MdText({md_url:this.md_url}),this.add_widget(this.mdtext),this.mdtext.bind("loaded",this.add_back_stack.bind(this)),this.dom_element.style.overflow="auto",this.dom_element.style.height="100%",this.bind("scroll",this.show_scroll.bind(this))}show_scroll(t){console.log("scrollY=",window.scrollY)}createBackButton=async function(){var t={widgettype:"HBox",options:{},subwidgets:[{widgettype:"Text",options:{text:"<<<<<<<"}}]},e=await widgetBuild(t),s=(console.log("createBackButton():error, desc=",t,"w=",e),e.children[0]);console.log("createBackButton():text=",s),s.bind("click",this.go_back.bind(this)),this.add_widget(e),console.log("createBackButton():desc=",t,"w=",e)};add_back_stack(t){console.log("go_back_stack():event=",t);t=t.params.url;this.back_stack.push(t)}go_back=async function(t){var e;this.back_stack.length<2||(this.back_stack.pop(),e=this.back_stack.pop(),await this.mdtext._build(e))};build=async function(){this._build(this.opts.md_url)};_build=async function(t){for(var t=await tget(t),e=(this.md_el.innerHTML=marked.parse(t),this.md_el.getElementsByTagName("a")),s=0;s<e.length;s++){var i=e[s].href;e[s].href="#",e[s].onclick=this._build.bind(this,i)}}}Factory.register("MarkdownViewer",MarkdownViewer);class Video extends JsWidget{constructor(t){super(t),this.dom_element.controls="",this.opts.autoplay&&(this.dom_element.autoplay=""),this.dom_element.type="application/vnd.apple.mpegurl",this.dom_element.add_css("media-document"),this.dom_element.add_css("mac"),this.dom_element.add_css("video"),this.opts.url&&(this.dom_element.src=this.opts.url)}create(){this.dom_element=document.createElement("video")}}class VideoPlayer extends VBox{constructor(t){super(t);var t="",e=(this.opts.autoplay&&(t="autoplay"),this.opts.url);this.dom_element.innerHTML=`<video width="90%" controls ${t} src="${e}" type="application/vnd.apple.mpegurl" class="media-document mac video" ></video>`,this.video=this.dom_element.querySelector("video")}toggle_play(){this.video.paused?this.video.play():this.video.pause()}}Factory.register("VideoPlayer",VideoPlayer);class AudioPlayer extends JsWidget{constructor(t){super(t),this.url=opt.url,this.audio=this._create("audio"),this.audio.controls=!0,this.opts.autoplay&&this.audio.addEventListener("canplay",this.play_audio.bind(this)),this.audio.style.width="100%";t=this._create("source");t.src=this.opts.url,this.audio.appendChild(t),this.dom_element.appendChild(this.audio)}toggle_play(){this.audio.paused?this.audio.play():this.audio.pause()}}Factory.register("AudioPlayer",AudioPlayer);class Toolbar extends Layout{constructor(t){super(t),this.toolList=[],"vertical"==this.opts.orientation?(this.bar=new VBox(t),this.dom_element.classList.add("vtoolbar")):(this.bar=new HBox(t),this.dom_element.classList.add("htoolbar")),this.add_widget(this.bar),this.clicked_btn=null,this.preffix_css=this.opts.css||"toolbar",schedule_once(this.createTools.bind(this),.01)}add_interval_box(){"vertical"==this.opts.orientation?this.bar.add_widget(new JsWidget({height:this.opts.interval||"10px"})):this.bar.add_widget(new JsWidget({width:this.opts.interval||"10px"}))}createTools=async function(){for(var t=this.opts.tools.length,e=0;e<t;e++)await this.createTool(this.opts.tools[e]),e<t-1&&this.add_interval_box();this.dispatch("ready")};createTool=async function(t){var e={widgettype:"Button",options:{width:"auto",orientation:"horizontal",icon:t.icon,label:t.label,name:t.name,css:t.css}},s=await widgetBuild(e);if(s)return s.bind("click",this.do_handle.bind(this,s)),s.tool_opts=t,this.add_removable(s),this.toolList.push(s),this.bar.add_widget(s),s;console.log("Toolbar(): build widget failed",e)};remove_item(t,e){this.bar.remove_widget(t),this.toolList.remove(t),t.unbind("click",this.do_handle.bind(this,t)),this.dispatch("remove",t.tool_opts),e.preventDefault(),e.stopPropagation()}do_handle(t,e){console.log("Toolbar() onclock,target=",e.target,t);new Event("command");e={};e.update(t.tool_opts),this.opts.target&&(e.target=this.opts.target),this.dispatch("command",e),this.clicked_btn&&this.clicked_btn.set_css(this.preffix_css+"-button-active",!0),t.set_css(this.preffix_css+"-button-active"),this.clicked_btn=t}add_removable(t){var e,s;t.tool_opts.removable&&(e=bricks_resource("imgs/delete.png"),(s=new Icon({url:e}))?(t.add_widget(s),s.bind("click",this.remove_item.bind(this,t)),console.log("Toolbar(): add_removable() for ",e)):console.log("Toolbar(): Image create error",e))}click(t){for(var e=0;e<this.toolList.length;e++)t==this.toolList[e].tool_opts.name&&this.toolList[e].dom_element.click()}}Factory.register("Toolbar",Toolbar);class TabPanel extends Layout{constructor(t){super(t),this.content_buffer={},this.cur_tab_name="",this.content_container=new VFiller({}),"top"==this.opts.tab_pos||"bottom"==this.opts.tab_pos?(this.set_css("vbox"),t=this.opts.tab_wide||"auto",this.tab_container=new VBox({height:t}),this.tab_container.dom_element.style.width=this.opts.tab_long||"100%"):(this.set_css("hbox"),t=this.opts.tab_wide||"auto",this.tab_container=new VBox({width:t}),this.tab_container.dom_element.style.height=this.opts.tab_long||"100%"),"top"==this.opts.tab_pos||"left"==this.opts.tab_pos?(this.add_widget(this.tab_container),this.add_widget(this.content_container)):(this.add_widget(this.content_container),this.add_widget(this.tab_container)),this.createToolbar(),this.set_css("tabpanel"),this.content_container.set_css("tabpanel-content")}show_first_tab(){this.show_content_by_tab_name(this.opts.items[0].name)}show_content_by_tab_name(t){this.toolbar.click(t)}createToolbar(){var t={tools:this.opts.items},e="top"==this.opts.tab_pos||"bottom"==this.opts.tab_pos?"horizontal":"vertical";t.orientation=e,this.toolbar=new Toolbar(t),this.toolbar.bind("command",this.show_tabcontent.bind(this)),this.toolbar.bind("remove",this.tab_removed.bind(this)),this.toolbar.bind("ready",this.show_first_tab.bind(this)),this.tab_container.add_widget(this.toolbar)}show_tabcontent=async function(t){var e=t.params,s=this.opts.items;if(e.name==this.cur_tab_name)console.log("TabPanel(): click duplication click on same tab",e);else{for(var i,o=0;o<s.length;o++)if(e.name==s[o].name)return(i=this.content_buffer.get(e.name))&&!s[o].refresh?(this.content_container.clear_widgets(),this.content_container.add_widget(i),void(this.cur_tab_name=name)):(i=await widgetBuild(s[o].content))?(this.content_buffer[e.name]=i,this.content_container.clear_widgets(),this.content_container.add_widget(i),void(this.cur_tab_name=e.name)):void console.log("TabPanel():create content error",s[o].content);console.log("TabPanel(): click event handled but noting to do",e)}};add_tab(t){var e=this.toolbar.createTool(t);t.removable&&this.add_removeable(e)}tab_removed(t){t=t.params;this.content_buffer.hasOwnProperty(t.name)&&delete this.content_buffer[t.name],t.name==this.cur_tab_name&&this.show_first_tab()}}Factory.register("TabPanel",TabPanel);class UiType extends Layout{constructor(t){super(t),this.name=this.opts.name,this.required=t.required||!1,this.ctype="text",this.value=""}getValue(){var t={};return t[this.name]=this.resultValue(),t}focus(){this.dom_element.focus()}reset(){var t=this.opts.value||this.opts.defaultvalue||"";this.setValue(t)}setValue(t){this.vlaue=t=t||"",this.dom_element.value=t}set_disabled(t){this.dom_element.disabled=t}set_readonly(t){this.dom_element.readOnly=t}set_required(t){this.dom_element.required=t,this.required=t}}class UiStr extends UiType{static uitype="str";constructor(t){super(t),this.sizable(),this.set_fontsize(),t.readonly?this.set_readonly("Y"):this.set_readonly(!1),t.width&&(this.dom_element.style.width=t.width)}create(){var t=this._create("input");this.dom_element=t,this.pattern=".*",t.type="text",t.id=t.name=this.opts.name,this.opts.required&&(t.required=!0),this.opts.css?(t.classList.add(this.opts.css),this.actived_css=this.opts.css+"-actived"):(t.classList.add("input"),this.actived_css="input_actived"),t.style.textAlign=this.opts.align||"left",this.opts.hasOwnProperty("length")&&(t.maxlength=this.opts.length),this.opts.hasOwnProperty("minlength")&&(t.minlength=this.opts.minlength),this.opts.hasOwnProperty("value")&&(this.value=this.opts.value),this.opts.defaultVlaue&&(t.defaultValue=this.opts.defaultValue),this.reset(),this.opts.tip&&(t.placeholder=bricks_app.i18n._(this.opts.tip)),t.addEventListener("focus",this.onfocus.bind(this)),t.addEventListener("blur",this.onblur.bind(this)),t.addEventListener("input",this.set_value_from_input.bind(this))}onblur(t){this.dom_element.classList.remove(this.actived_css)}onfocus(t){this.dom_element.classList.add(this.actived_css)}check_pattern(t){var e=new RegExp(this.pattern),t=t.match(e);return t&&""!=t[0]?t[0]:null}set_value_from_input(t){var e,t=t.target;""==t.value?this.value="":"file"==t.type?this.value=t.value:null==(e=this.check_pattern(t.value))?t.value=this.value:(this.value=e,t=this.getValue(),this.dispatch("changed",t))}resultValue(){return this.value}setValue(t){this.value=t=t||"",this.dom_element.value=""+this.value}}class UiPassword extends UiStr{static uitype="password";constructor(t){super(t),this.dom_element.type="password"}}class UiInt extends UiStr{static uitype="int";constructor(t){super(t),this.dom_element.style.textAlign="right",this.dom_element.type="number",this.pattern="\\d*"}resultValue(){return parseInt(this.value)}setValue(t){this.value=""+(t=t||""),this.dom_element.value=""+t}}class UiFloat extends UiInt{static uitype="float";constructor(t){super(t),this.pattern="\\d*\\.?\\d+";for(var e=this.opts.dec_len||2,s=1,i=0;i<e;i++)s/=10;this.dom_element.step=s}resultValue(){return parseFloat(this.value)}setValue(t){this.value=""+(t=t||""),this.dom_element.value=""+t}}class UiTel extends UiStr{static uitype="tel";constructor(t){super(t),this.dom_element.type="tel",this.opts.pattern&&(this.dom_element.pattern=this.opts.pattern),this.pattern="[+]?\\d+"}}class UiEmail extends UiStr{static uitype="email";constructor(t){super(t),this.dom_element.type="email",this.opts.pattern&&(this.dom_element.pattern=this.opts.pattern),this.opts.pattern&&(this.dom_element.pattern=this.opts.pattern)}}class UiFile extends UiStr{static uitype="file";constructor(t){super(t),this.dom_element.type="file",this.opts.accept&&(this.dom_element.accept=this.opts.accept),this.opts.capture&&(this.dom_element.capture=this.opts.capture),this.opts.multiple&&(this.dom_element.multiple=!0)}setValue(t){}}class UiCheck extends UiType{static uitype="check";constructor(t){super(t),UiCheck.prototype.update(Layout.prototype),this.add_widget=Layout.prototype.add_widget.bind(this),this.dom_element.style.width="auto",this.dom_element.style.height="auto";var e="unchecked";t.value&&(e="checked"),this.ms_icon=new MultipleStateIcon({state:e,urls:{checked:bricks_resource("imgs/checkbox-checked.png"),unchecked:bricks_resource("imgs/checkbox-unchecked.png")}}),this.add_widget(this.ms_icon),this.ms_icon.bind("state_changed",this.set_value_from_input.bind(this))}set_value_from_input(t){var e="checked"==this.ms_icon.state,e=(this.value=e,{});e[this.name]=this.value,this.dispatch("changed",e)}setValue(t){(this.value=t)?this.ms_icon.set_state("checked"):this.ms_icon.set_state("unchecked")}resultValue(){return this.value}}class UiCheckBox extends UiType{static uitype="checkbox";constructor(t){super(t),this.valueField=t.valueField||"value",this.textField=t.textField||"text",this.value=this.opts.value||this.opts.defaultValue||[],Array.isArray(this.value)||(this.value=[this.value]),this.set_fontsize(),this.el_legend=this._create("legend");var e=this.opts.label||this.opts.name;this.el_legend.innerText=bricks_app.i18n._(e),this.opts.dataurl?schedule_once(this.load_data_onfly.bind(this),.01):(this.data=t.data,this.build_checkboxs())}create(){this.dom_element=this._create("fieldset")}build_checkboxs(){var t=this.data;this.input_boxs=[];for(var e=0;e<t.length;e++){var s=new HBox({height:"auto",width:"100%"}),i={},o=t[e][this.valueField],o=(this.value==o&&(i.value=!0),new UiCheck(i)),i=t[e][this.textField],i=new Text({otext:i,align:"left",i18n:!0});i.ht_left(),o.bind("changed",this.set_value_from_input.bind(this)),s.add_widget(o),s.add_widget(i),this.add_widget(s),this.input_boxs.push(o)}}async load_data_onfly(){var t=await jcall(this.opts.dataurl,{method:this.opts.method||"GET",params:this.opts.params});this.data=t,this.build_checkboxs()}set_value_from_input(t){t.stopPropagation();t=t.target,"checked"==t.state?this.value.push(t.value):this.value.remove(t.value),t={};t[this.name]=this.value,this.dispatch("changed",t)}resultValue(){return this.value}setValue(t){Array.isArray(t)?this.value=t:this.value=[t];for(var e=0;e<this.input_boxs.length;e++)this.value.includes(this.data[e][this.valueField])?this.input_boxs[e].setValue(!0):this.input_boxs[e].setValue(!1)}}class UiDate extends UiStr{static uitype="date";constructor(t){super(t),this.opts_setup()}opts_setup(){var t=this.dom_element;t.type="date",this.opts.max_date&&(t.max=this.opts.max_date),this.opts.min_date&&(t.min=this.opts.min_date)}}class UiText extends UiType{static uitype="text";constructor(t){super(t),this.build(),this.sizable(),this.set_fontsize()}create(){this.dom_element=this._create("textarea")}build(){var t=this.dom_element;t.id=t.name=this.opts.name,t.rows=this.opts.rows||5,t.cols=this.opts.cols||40,this.reset(),this.bind("input",this.set_value_from_input.bind(this))}set_value_from_input(t){this.value=this.dom_element.innerText}resultValue(){return this.value}setValue(t){this.value=t=t||"",this.dom_element.innerText="",this.dom_element.innerText=t,debug("UiText: v=",t)}reset(){var t=this.opts.value||this.opts.defaultvalue||"";this.setValue(t)}}class UiCode extends UiType{static uitype="code";constructor(t){super(t),this.data=this.opts.data,this.build()}create(){this.dom_element=this._create("select")}build(){this.dom_element.id=this.opts.name,this.dom_element.name=this.opts.name,this.opts.dataurl?schedule_once(this.get_data.bind(this),.01):this.build_options(this.opts.data)}async get_data(t){var e=this.opts.params,t=(t&&e.update(t.params),await jcall(this.opts.dataurl,{method:this.opts.method||"GET",params:e}));this.data=t,this.build_options(t)}build_options(t){var e=this.dom_element,s=(e.replaceChildren(),this.opts.value||this.opts.defaultvalue);this.value=s,this.option_widgets={};for(var i=0;i<t.length;i++){var o=document.createElement("option");o.value=t[i][this.opts.valueField||"value"],o.innerText=bricks_app.i18n._(t[i][this.opts.textField||"text"]),(this.option_widgets[o.value]=o).value==s&&(o.selected=!0),e.appendChild(o),this.sizable_elements.push(o)}this.bind("input",this.set_value_from_input.bind(this)),this.sizable(),this.set_fontsize()}set_value_from_input(t){this.value=this.dom_element.value,this.dispatch("changed",this.getValue())}resultValue(){return this.value}setValue(t){this.value=t;for(var e=0;e<this.option_widgets.length;e++)this.value,this.option_widgets[e].value,this.option_widgets[e].checked=!0}reset(){var t=this.opts.value||this.opts.defaultvalue||"";this.setValue(t)}}class _Input{constructor(){this.uitypes=[]}register(t,e){e?e.uitype?(Factory.register(t,e),this.uitypes[e.uitype]=e):console.log("uitype of Klass not defined",t):console.log("Klass not defined",t)}factory(t){var e=this.uitypes.get(t.uitype);return e?new e(t):(console.log("create input for:",t.uitype,"failed"),null)}}class UiAudio extends UiStr{static uitype="audio";constructor(t){super(t),this.autoplay=t.autoplay,this.readonly=t.readonly,this.icon=new Icon({url:bricks_resource("imgs/right_arrow.png")}),this.add_widget(this.icon),this.icon.bind("click",this.play_audio.bind(this)),this.player=new Audio({url:this.value}),this.autoplay&&schedule_once(this.autoplay_audio.bind(this),1)}autoplay_audio(){this.icon.dispatch("click")}play_audio(){this.player.toggle_play()}play_audio(){this.value!=this.player.src?(this.player.stop(),this.player.set_source(this.value),this.player.play()):(this.player.toggle_play(),this.btn.dispatch("click"))}}class UiVideo extends UiStr{static uitype="video";constructor(t){super(t),this.autoplay=t.autoplay,this.readonly=t.readonly,this.icon=new Icon({url:bricks_resource("imgs/right_arrow.png")}),this.add_widget(this.icon),this.icon.bind("click",this.play_audio.bind(this)),this.player=new VideoPlayer({url:this.value}),this.autoplay&&schedule_once(this.autoplay_audio.bind(this),1)}autoplay_audio(){this.icon.dispatch("click")}play_audio(){this.player.toggle_play()}play_audio(){this.value!=this.player.src?(this.player.stop(),this.player.set_source(this.value),this.player.play()):(this.player.toggle_play(),this.btn.dispatch("click"))}}var Input=new _Input;Input.register("UiStr",UiStr),Input.register("UiTel",UiTel),Input.register("UiDate",UiDate),Input.register("UiInt",UiInt),Input.register("UiFloat",UiFloat),Input.register("UiCheck",UiCheck),Input.register("UiCheckBox",UiCheckBox),Input.register("UiEmail",UiEmail),Input.register("UiFile",UiFile),Input.register("UiCode",UiCode),Input.register("UiText",UiText),Input.register("UiPassword",UiPassword),Input.register("UiAudio",UiAudio),Input.register("UiVideo",UiVideo);class RegisterFunction{constructor(){this.rfs={}}register(t,e){this.rfs.update({n:e})}get(t){return this.rfs.get(t)}}class Button extends Layout{constructor(t){super(t);var e={display:"flex",justifyContent:"center",textAlign:"center",alignItem:"center",width:"auto",height:"auto"};t.nonepack?(e.padding="0px",e.border="0"):e.padding="0.5rem","horizontal"==this.opts.orientation?(e.flexDirection="rows",this.orient="h"):(e.flexDirection="column",this.orient="v"),this.item_rate=t.item_rate||1,this.set_id(this.opts.name),this.opts_setup(),this.dom_element.style.update(e)}create(){this.dom_element=document.createElement("button")}opts_setup(){var t;this.opts.item_size||bricks_app.charsize;this.opts.icon&&(t=new Icon({rate:this.item_rate,url:this.opts.icon}),this.add_widget(t),t.bind("click",this.target_clicked.bind(this))),this.opts.label&&(t={rate:this.item_rate,color:this.opts.color,bgcolor:this.opts.bgcolor,otext:this.opts.label,i18n:!0},t=new Text(t),this.add_widget(t),t.bind("click",this.target_clicked.bind(this)))}target_clicked(t){console.log("target_clicked() .... called "),t.stopPropagation(),this.dispatch("click",this.opts),this.opts.action&&this.opts.debug&&console.log("debug:opts=",this.opts)}}Factory.register("Button",Button);class Accordion extends VBox{constructor(t){super(t);this.opts.item_size;this.set_height("100%");for(var e=this.opts.items,s=(this.items=[],this.subcontents={},this.opts.css,this.opts.css,0);s<e.length;s++){var t={name:e[s].name,icon:e[s].icon,text:e[s].text,height:"auto",orientation:"horizontal"},i=new Button(t);i.bind("click",this.change_content.bind(this)),this.items.push(i),this.add_widget(i)}this.content=new VBox({})}async change_content(t){for(var e=event.target.bricks_widget,s=e.opts.name,i=(console.log("accordion: button=",e,"name=",s),-1),o=0;o<this.opts.items.length;o++)if(s==this.opts.items[o].name){i=o;break}-1==i&&debug("Accordion():name=",s,"not found in items",this.opts.items);e=this.subcontents.get(s);e||(e=await widgetBuild(this.opts.items[i].content),this.subcontents[s]=e),this.content.clear_widgets(),this.content.add_widget(e);try{this.remove_widget(this.content)}catch(t){}this.add_widget(this.content,i+1)}}Factory.register("Accordion",Accordion);class TreeNode extends VBox{constructor(t,e,s){super({width:"100%",height:"auto",overflow:"hidden"}),this.tree=t,this.parent=e,this.children_loaded=!1,this.data=s,this.is_leaf=this.data.is_leaf,this.params={id:this.data[this.tree.opts.idField]},this.tree.multitype_tree&&(this.params.type=this.data[this.tree.opts.typeField]);t=new HBox({height:"auto",overflow:"hidden",width:"100%"});t.dom_element.style.margin=.2*bricks_app.charsize,this.add_widget(t),t.bind("click",this.tree.node_click_handle.bind(this.tree,this)),this.node_widget=t,this.create_node_content(t),this.data.is_leaf||(this.container=new VBox({height:"auto",overflow:"hidden"}),this.add_widget(this.container),this.container.dom_element.style.marginLeft=bricks_app.charsize+"px",this.data.children&&this.tree.create_node_children(this,this.data.children),this.container.hide())}selected(t){t?this.str_w.set_css("selected"):this.str_w.set_css("selected",!0)}async toggleExpandCollapse(t){"open"==t.params?await this.expand():this.collapse()}async expand(){this.is_leaf||(!this.tree.opts.dataurl||this.is_leaf||this.children_loaded||(await this.tree.get_children_data(this),this.children_loaded=!0),this.container.show())}collapse(){this.is_leaf||this.container.hide()}create_node_content(t){var e=bricks_app.charsize,s=(this.is_leaf?t.add_widget(new BlankIcon({})):(s=this.tree.opts.node_state_imgs||{},(i={}).open=s.get("open",bricks_resource("imgs/down_arrow.png")),i.close=s.get("close",bricks_resource("imgs/right_arrow.png")),this.trigle=new MultipleStateIcon({state:"close",urls:i,height:e,width:e}),this.trigle.bind("state_changed",this.toggleExpandCollapse.bind(this)),t.add_widget(this.trigle)),this.data[this.tree.opts.typeField]),i=TypeIcons.get(s),e=(i=(i=!i&&this.tree.opts.default_type?TypeIcons.get(his.tree.opts.default_type):i)||bricks_resource("imgs/folder.png"),new Icon({url:i})),s=(t.add_widget(e),this.data[this.tree.opts.textField]);t.add_widget(this.str_w=new Text({text:s})),this.input=new UiStr({name:"text",value:s}),this.input.bind("blur",this.edit_handle.bind(this)),t.add_widget(this.str_w)}edit(){this.node_widget.remove_widget(this.str_w),this.input.setValue(this.str_w.text),this.node_widget.add_widget(this.input)}async edit_handle(){var t;this.input.value!=this.str_w.text&&(t=this.input.value,r=await this.syncdata("edit"),this.data[this.tree.opts.textField]=t,this.str_w=new Text({text:t}),this.node_widget.remove_widget(this.input),this.node_widget.add_widget(this.str_w))}async syncdata(t){}}class Tree extends VBox{constructor(t){super(t),this.set_height("100%"),this.row_height=this.opts.row_height||"35px",this.multitype_tree=this.opts.multitype_tree||!1,this.selected_node=null,this.create_toolbar(),this.container=new VScrollPanel({}),this.add_widget(this.container),this.data_id=null,this.opts.dataurl&&schedule_once(.01,this.get_children_data.bind(this,this)),this.create_node_children(this,this.opts.data)}create_toolbar(){}async get_children_data(t){var e=await jcall(this.opts.dataurl,{method:this.opts.method||"GET",params:t.params});0==e.length?t.is_leaf=!0:this.create_tree_nodes(t,e)}create_node_children(t,e){for(var s=0;s<e.length;s++){var i=new TreeNode(this,t,e[s]);t.container.add_widget(i)}}node_click_handle(t,e){this.selected_node&&this.selected_node.selected(!1),(this.selected_node=t).selected(!0),this.dispatch("node_click",t)}}class EditableTree extends Tree{constructor(t){super(t)}create_toolbar(){var t;this.opts.admin&&(t={height:"auto",tools:[{name:"add",icon:bricks_resource("imgs/add.png")},{name:"edit",icon:bricks_resource("imgs/edit.png")},{name:"move_top",icon:bricks_resource("imgs/move_top.png")},{name:"move_up",icon:bricks_resource("imgs/move_up.png")},{name:"move_down",icon:bricks_resource("imgs/move_down.png")},{name:"move_button",icon:bricks_resource("imgs/move_bottom.png")},{name:"delete",icon:bricks_resource("imgs/delete_node.png")}]},this.toolbar=new Toolbar(t),this.toolbar.bind("command",this.command_handle.bind(this)),this.add_widget(this.toolbar,0))}command_handle(t){switch(console.log("command event fire ...",t),t.params.name){case"add":this.add_node();break;case"delete":this.delete_node();break;case"edit":this.edit_node();break;case"move_top":this.move_top();break;case"move_up":this.move_up();break;case"move_down":this.move_down();break;case"move_bottom":this.move_bottom()}}add_node(){var t=this,e=(this.selected_node&&(t=this.selected_node),{}),e=(e[this.opts.idField]="undefined",e[this.opts.textField]="new node",new TreeNode(this,t,e));t.container.add_widget(e),e.edit(),console.log("add_node() finished ...")}edit_node(){this.selected_node&&this.selected_node.edit()}delete_node(){this.selected_node&&this.selected_node.delete()}move_top(){this.selected_node&&this.selected_node.move_top()}move_up(){this.selected_node&&this.selected_node.move_up()}move_down(){this.selected_node&&this.selected_node.move_down()}move_botton(){this.selected_node&&this.selected_node.move_botton()}}class PolymorphyTree extends Tree{constructor(t){super(t)}}Factory.register("Tree",Tree),Factory.register("EditableTree",EditableTree);class MultipleStateImage extends Layout{constructor(t){super(t),this.state=this.opts.state;t={urls:this.opts.urls[this.state],width:this.opts.width,height:this.opts.height};this.img=new Image(t),this.add_widget(this.img),this.img.bind("click",this.change_state.bind(this))}set_state(t){this.state=t,this.img.set_url(this.opts.urls[t])}change_state(t){t.stopPropagation();for(var e=Object.keys(this.opts.urls),s=0;s<e.length;s++)if(e[s]==this.state){var i=s+1;i>=e.length&&(i=0),this.state=e[i],this.img.set_url(this.opts.urls[this.state]),this.dispatch("state_changed",this.state);break}}}class MultipleStateIcon extends Icon{constructor(t){t.url=t.urls[t.state],super(t),this.state=t.state,this.urls=t.urls,this.bind("click",this.change_state.bind(this))}change_state(t){t.stopPropagation();for(var e=Object.keys(this.urls),s=0;s<e.length;s++)if(e[s]==this.state){var i=s+1;i>=e.length&&(i=0),this.set_state(e[i]),this.dispatch("state_changed",this.state);break}}set_state(t){this.state=t,this.set_url(this.urls[t])}}Factory.register("MultipleStateImage",MultipleStateImage);class FormBody extends VBox{constructor(t){super(t),this.name_inputs={},this.opts.title&&(t=new Title2({otext:this.opts.title,height:"auto",i18n:!0}),this.add_widget(t)),this.opts.description&&(t=new Text({otext:this.opts.description,height:"auto",i18n:!0}),this.add_widget(t)),this.form_body=new Layout({width:"100%",overflow:"auto"}),this.add_widget(this.form_body),this.form_body.set_css("multicolumns"),this.build_fields()}reset_data(){for(var t in this.name_inputs)this.name_inputs.hasOwnProperty(t)&&this.name_inputs[t].reset()}async validation(){var t,e={};for(t in this.name_inputs)if(this.name_inputs.hasOwnProperty(t)){var s=this.name_inputs[t],i=s.getValue();if(s.required&&(""==i[t]||null===i[t]))return console.log("data=",e,"d=",i),void s.focus();e.update(i)}this.submit_url&&await jcall(this.submit_url,{params:e}),this.dispatch("submit",e)}build_fields(){for(var t=this.opts.fields,e=0;e<t.length;e++){var s=new VBox({height:"auto",overflow:"none"}),i=(s.set_css("inputbox"),this.form_body.add_widget(s),new Text({otext:t[e].label||t[e].name,height:"auto",i18n:!0})),i=(s.add_widget(i),Input.factory(t[e]));i?(s.add_widget(i),this.name_inputs[t[e].name]=i,console.log(t[e].uitype,"create Input ok")):console.log(t[e],"createInput failed")}}}class Form extends VBox{constructor(t){super(t),this.body=new FormBody(t),this.add_widget(this.body),this.build_toolbar(this)}build_toolbar(t){var e=new HBox({height:"auto",width:"100%"}),t=(t.add_widget(e),this.opts.toolbar||{width:"auto",tools:[{icon:bricks_resource("imgs/submit.png"),name:"submit",label:"Submit"},{icon:bricks_resource("imgs/cancel.png"),name:"cancel",label:"Cancel"}]}),t=new Toolbar(t);t.bind("command",this.command_handle.bind(this)),e.add_widget(new HFiller),e.add_widget(t),e.add_widget(new HFiller)}command_handle(t){var e=t.params;console.log("Form(): click_handle() params=",e),e?"submit"==e.name?this.validation():"cancel"==e.name?this.cancel():"reset"==e.name?this.reset_data():e.action&&(f=buildEventHandler(this,e))(t):error("click_handle() get a null params")}cancel(){this.dispatch("cancel")}}class TabForm extends Form{constructor(t){super(t)}build_fields(t){}}Factory.register("Form",Form);class Popup extends VBox{constructor(t){super(t),this.holder=t.holder,this.task=null,this.title=t.title||"Title",this.archor=t.archor||"cc",this.timeout=t.timeout,this.set_css("message"),this.build(),archorize(this.dom_element,this.archor)}build(){var t=new HBox({height:"40px"}),e=(t.set_css("title"),this.add_widget(t),new Text({otext:this.title,i18n:!0}));this.content=new VBox({}),VBox.prototype.add_widget.bind(this)(this.content),t.add_widget(e),this.holder=Body,this.opts.holder&&("string"==type(this.opts.holder)?this.holder=getWidgetById(this.opts.holder,Body):this.holder=this.opts.holder)}open(){this.holder.add_widget(this),this.timeout&&0<this.timeout&&(this.task=schedule_once(this.dismiss.bind(this),this.timeout))}add_widget(t,e){this.content.add_widget(t,e),this.opts.auto_open&&this.open()}dismiss(){this.task&&(this.task.cancel(),this.task=null),this.holder.remove_widget(this)}}class Message extends VBox{constructor(t){super(t);t=new Text({otext:this.opts.text,i18n:!0});this.add_widget(t)}}class Error extends Message{constructor(t){super(t),this.set_css("error")}}class PopupForm extends Popup{constructor(t){super(t),this.form=new Form(this.opts.form),this.add_widget(this.form),this.form.bind("submit",this.close_popup.bind(this)),this.form.bind("discard",this.close_popup.bind(this))}close_popup(t){this.dismiss()}}Factory.register("Message",Message),Factory.register("Error",Error),Factory.register("PopupForm",PopupForm);class BufferedDataLoader{constructor(t,e){this.widget=t,this.url=e.url,this.loading=!1,this.method=e.method||"GET",this.params=e.params||{},this.buffer_pages=e.buffer_pages||5,this.pagerows=e.pagerows||60,this.cur_page=-1,this.buffer={},this.buffered_pages=0,this.total_record=-1,this.cur_params={}}async loadData(t){this.buffer={},t=t||{};var e=this.params.copy();return e.update(t),e.rows=this.pagerows,this.cur_params=e,this.cur_page=1,this.loadPage()}async loadPage(t){var e;if(!this.loading)return this.loading=!0,this.buffered_pages>=this.buffer_pages&&(this.widget.del_old_rows(this.pagerows,this.direction),--this.buffered_pages),(e=this.cur_params.copy()).page=this.cur_page,e.rows=this.pagerows,e=await jcall(this.url,{method:this.method,params:e}),this.total_records=e.total,e.page=this.cur_page,e.total_page=this.total_records/this.pagerows,e.total_page*this.pagerows<this.total_record&&(e.total_page+=1),this.total_page=e.total_page,this.widget.add_rows(e.rows),this.buffered_pages+=1,this.loading=!1,e}async nextPage(){if(!(this.loading||this.cur_page>=this.total_page))return this.direction="down",this.cur_page+=1,this.loadPage()}async previousPage(){if(!(this.loading||this.cur_page<=1))return this.direction="up",--this.cur_page,this.loadPage()}}var low_handle=function(t,e,s,i,o,a){var s=i-s,r=i/(o-a),n=i/o;!t.threshold&&0<s&&r>=t.max_threshold?(console.log("max_threshold reached ..."),t.thresgold=!0,t.dispatch("max_threshold")):!t.threshold&&s<0&&n<=t.min_threshold?(console.log("min_threshold reached ..."),t.thresgold=!0,t.dispatch("min_threshold")):console.log("scroll_handle() called ...",r,i,o,a)};class HScrollPanel extends HFiller{constructor(t){super(t),this.min_threshold=t.min_threshold||.02,this.max_threshold=t.max_threshold||.95,this.bind("scroll",this.scroll_handle.bind(this)),this.last_scrollLeft=this.dom_element.scrollLeft,this.threshold=!1}scroll_handle(t){t.target!=this.dom_element||(t=this.dom_element).scrollWidth-t.clientWidth<1||(low_handle(this,"x",this.last_scrollLeft,t.scrollLeft,t.scrollWidth,t.clientWidth),this.last_scrollLeft=t.scrollLeft)}}class VScrollPanel extends VFiller{constructor(t){super(t),this.min_threshold=t.min_threshold||.02,this.max_threshold=t.max_threshold||.95,this.bind("scroll",this.scroll_handle.bind(this)),this.last_scrollTop=this.dom_element.scrollTop}scroll_handle(t){t.target!=this.dom_element||(t=this.dom_element).scrollHeight-t.clientHeight<2||(low_handle(this,"y",this.last_scrollTop,t.scrollTop,t.scrollHeight,t.clientHeight),this.last_scrollTop=t.scrollTop)}}Factory.register("VScrollPanel",VScrollPanel),Factory.register("HScrollPanel",HScrollPanel);set_max_height=function(t,e){var s=t.dom_element.offsetHeight,s="0 0 "+(s=0==(s=s<e.dom_element.offsetHeight?e.dom_element.offsetHeight:s)?30:s)+"px";t.set_style("flex",s),e.set_style("flex",s)};class Row{constructor(t,e){this.dg=t,this.data=e.copy(),this.freeze_cols=[],this.normal_cols=[],this.name_widgets={},this.click_handler=this.dg.click_handler.bind(this.dg,this),this.freeze_row=this.create_col_widgets(this.dg.freeze_fields,this.freeze_cols),this.freeze_row&&(this.freeze_row.set_css("datagrid-row"),this.freeze_row.set_style("width",this.freeze_width+"px")),this.normal_row=this.create_col_widgets(this.dg.normal_fields,this.normal_cols),this.normal_row&&(this.normal_row.set_css("datagrid-row"),this.normal_row.set_style("width",this.normal_width+"px")),this.freeze_row&&this.normal_row&&set_max_height(this.freeze_row,this.normal_row)}create_col_widgets(t,e){for(var s=0;s<t.length;s++){var i,o=t[s],a=o.uioptions||{};a.update({name:o.name,label:o.label,uitype:o.uitype,width:o.width,required:!0,readonly:!0}),"button"==a.uitype?(a.icon=o.icon,a.action=o.action,a.action.params=this.data.copy(),i=new Button(a),buildEventBind(this.dg,i,"click",a.action)):(a.value=this.data[o.name],(i=Input.factory(a)).bind("click",this.click_handler)),i.dom_element.style["min-width"]=i.width+"px",i.set_style("flex","0 0 "+convert2int(o.width)+"px"),e.push(i),this.name_widgets[o.name]=i}if(0<e.length){for(var r=new HBox({height:"auto"}),s=0;s<e.length;s++)r.add_widget(e[s]);return r}return null}selected(){this.freeze_row&&this.freeze_cols.forEach(t=>{t.set_css("selected",!1)}),this.normal_row&&this.normal_cols.forEach(t=>{t.set_css("selected",!1)})}unselected(){this.freeze_row&&this.freeze_cols.forEach(t=>{t.set_css("selected",!0)}),this.normal_row&&this.normal_cols.forEach(t=>{t.set_css("selected",!0)})}toogle_select(t,e){e?t.classList.add("selected"):t.classList.remove("selected")}}class DataGrid extends VBox{constructor(t){super(t),this.loading=!1,this.select_row=null,this.set_css("datagrid"),this.dataurl=t.dataurl,this.method=t.method,this.params=t.params,this.title=t.title,this.check=t.check||!1,this.lineno=t.lineno||!1,this.description=t.description,this.show_info=t.show_info,this.admin=t.admin,this.row_height=t.row_height,this.fields=t.fields,this.header_css=t.header_css||"grid_header",this.body_css=t.body_css||"grid_body",this.title&&(this.title_bar=new HBox({height:"auto"}),this.add_widget(this.title_bar),t=new Title1({otext:this.title,i18n:!0}),this.title_bar.add_widget(t)),this.description&&(this.descbar=new HBox({height:"auto"}),this.add_widget(this.descbar),t=new Text({otext:this.description,i18n:!0}),this.descbar.add_widget(t)),(this.opts.miniform||this.opts.toolbar)&&(this.admin_bar=new HBox({height:"auto"})),this.opts.miniform&&(this.miniform=new MiniForm(this.opts.miniform),this.miniform.bind("input",this.miniform_input.bind(this)),this.admin_bar.add_widget(this.miniform)),this.opts.toolbar&&(this.admin_bar.add_widget(new HFiller({})),self.toolbar=new Toolbar(this.opts.toolbar),self.toolbar.bind("command",this.command_handle.bind(this)),this.admin_bar.add_widget(this.toolbar)),this.create_parts(),this.show_info&&(this.infow=new HBox({height:"40px"}),this.add_widget(this.infow)),this.dataurl?(this.loader=new BufferedDataLoader(this,{pagerows:80,buffer_pages:5,url:absurl(this.dataurl,this),methiod:this.method,params:this.params}),schedule_once(this.loader.loadData.bind(this.loader),.01),this.freeze_body&&(this.freeze_body.bind("x_min_threshold",this.loader.previousPage.bind(this.loader)),this.freeze_body.bind("x_max_threshold",this.loader.nextPage.bind(this.loader))),this.normal_body.bind("x_min_threshold",this.loader.previousPage.bind(this.loader)),this.normal_body.bind("x_max_threshold",this.loader.nextPage.bind(this.loader))):this.data&&this.add_rows(this.data)}miniform_input(t){var e=this.miniform.getValue();this.loader.loadData(e)}loadData(t){this.loader.loadData(t)}command_handle(t){}del_old_rows(t,e){this.freeze_body&&("down"==e?this.freeze_body.remove_widgets_at_begin(t):this.freeze_body.remove_widgets_at_end(t)),"down"==e?this.normal_body.remove_widgets_at_begin(t):this.normal_body.remove_widgets_at_end(t)}add_rows(t,e){var s=null;"down"==e&&(s=0);for(var i=0;i<t.length;i++)this.add_row(t[i],s)}add_row(t,e){t=new Row(this,t);this.freeze_body&&this.freeze_body.add_widget(t.freeze_row,e),this.normal_body&&this.normal_body.add_widget(t.normal_row,e)}check_desc(){return{freeze:!0,uitype:"check",name:"_check",width:"20px"}}lineno_desc(){return{freeze:!0,uitype:"int",name:"_lineno",label:"#",width:"100px"}}create_parts(){this.freeze_width=0,this.normal_width=0;var t=new HBox({});t.set_css("datagrid-grid"),this.add_widget(t),this.freeze_fields=[],this.normal_fields=[],this.check&&this.fields.push(this.check_desc()),this.lineno&&this.fields.push(this.lineno_desc());for(var e=0;e<this.fields.length;e++){var s=this.fields[e];(!s.width||s.width<=0)&&(s.width=100),s.freeze?(this.freeze_fields.push(s),this.freeze_width+=convert2int(s.width)):(this.normal_fields.push(s),this.normal_width+=convert2int(s.width))}this.freeze_part=null,this.normal_part=null,console.log("width=",this.freeze_width,"-",this.normal_width,"..."),0<this.freeze_fields.length&&(this.freeze_part=new VBox({}),this.freeze_part.set_css("datagrid-left"),this.freeze_part.set_style("width",this.freeze_width+"px"),this.freeze_header=new HBox({height:"auto",width:"auto"}),this.freeze_header.set_css("datagrid-row"),this.freeze_header.set_style("width",this.freeze_width+"px"),this.freeze_body=new VScrollPanel({width:"auto"}),this.freeze_body.set_css("datagrid-body"),this.freeze_body.bind("scroll",this.coscroll.bind(this))),0<this.normal_fields.length&&(this.normal_part=new VBox({width:this.normal_width+"px",height:"100%",csses:"hscroll"}),this.normal_part.set_css("datagrid-right"),this.normal_header=new HBox({}),this.normal_header.set_css("datagrid-row"),this.normal_header.set_style("flex","0 0 "+this.normal_width+"px"),this.normal_body=new VScrollPanel({csses:"vbox vscroll",height:"100%",width:this.normal_width+"px"}),this.normal_body.set_css("datagrid-body")),this.create_header(),0<this.freeze_fields.length&&(this.freeze_part.add_widget(this.freeze_header),this.freeze_part.add_widget(this.freeze_body),t.add_widget(this.freeze_part)),0<this.normal_fields.length&&(this.normal_part.add_widget(this.normal_header),this.normal_part.add_widget(this.normal_body),this.normal_body.bind("scroll",this.coscroll.bind(this)),this.normal_body.bind("min_threshold",this.load_previous_data.bind(this)),this.normal_body.bind("max_threshold",this.load_next_data.bind(this)),t.add_widget(this.normal_part))}load_previous_data(){console.log("event min_threshold fired ........"),this.loader.previousPage()}load_next_data(){console.log("event max_threshold fired ........"),this.loader.nextPage()}coscroll(t){t=t.target.bricks_widget;t==this.freeze_body?this.normal_body.dom_element.scrollTop=t.dom_element.scrollTop:t==this.normal_body&&this.freeze_body&&(this.freeze_body.dom_element.scrollTop=t.dom_element.scrollTop)}create_header(){for(var t=0;t<this.freeze_fields.length;t++){var e=this.freeze_fields[t],s=new Text({otext:e.label||e.name,i18n:!0});e.width?s.set_style("flex","0 0 "+convert2int(e.width)+"px"):s.set_style("flex","0 0 100px"),this.freeze_header.add_widget(s),s.dom_element.column_no="f"+t}for(t=0;t<this.normal_fields.length;t++){e=this.normal_fields[t],s=new Text({otext:e.label||e.name,i18n:!0});e.width?s.set_style("flex","0 0 "+convert2int(e.width)+"px"):s.set_style("flex","0 0 100px"),this.normal_header.add_widget(s),s.dom_element.column_no="n"+t}this.normal_header&&this.freeze_header&&set_max_height(this.normal_header,this.freeze_header)}click_handler(t,e){this.selected_row&&this.selected_row.unselected(),this.selected_row=t,this.selected_row.selected(),this.dispatch("row_click",t),console.log("DataGrid():click_handler, row=",t,"event=",e)}}Factory.register("DataGrid",DataGrid);class MiniForm extends HBox{constructor(t){t.width="auto",t.height="auto",super(t),this.build()}build(){var t=(t=this.opts.defaultname)||this.opts.fields[0].name;this.build_options(),this.build_widgets(t)}build_widgets(e){this.input&&this.input.unbind("input",this.input_handle.bind(this)),this.clear_widgets(),this.add_widget(this.choose);var t=this.opts.fields.find(t=>t.name==e).copy(),t=(t.width="auto",Input.factory(t));t.bind("input",this.input_handle.bind(this)),this.add_widget(t),this.input=t}build_options(){var t={width:"90px",name:"name",uitype:"code",valueField:"name",textField:"label",data:this.opts.fields},t=Input.factory(t);t.bind("changed",this.change_input.bind(this)),this.choose=t,this.add_widget(t)}show_options(t){console.log("show_options() called ..."),this.choose.show()}change_input(t){var e=this.choose.value;this.build_widgets(e)}input_handle(t){var e=this.getValue();console.log("input_handle() ..",e),this.dispatch("input",e)}getValue(){var t=this.opts.params||{},e=this.input.getValue();return t.update(e),t}}Factory.register("MiniForm",MiniForm);class XTerminal extends JsWidget{constructor(t){super(t),schedule_once(this.open.bind(this),.1)}async open(){try{this.term=new Terminal({cursorBlink:"block"})}catch(t){return void console.log(t)}this.ws=new WebSocket(this.opts.ws_url,"echo-protocol");var s="",i=[];this.term.open(this.dom_element),this.term.write("web shell $ "),this.term.prompt=()=>{var t;s&&(t={method:"command",command:s},this.ws.send(JSON.stringify(t)))},this.term.prompt(),this.ws.onmessage=t=>{this.term.write("\r\n"+JSON.parse(t.data).data),s=""},this.term.on("key",function(t,e){13===e.keyCode?s&&(i.push(s),this.term.write("\r\n"),this.term.prompt()):8===e.keyCode?s&&(s=s.slice(0,s.length-1),this.term.write("\b \b")):(s+=t,this.term.write(t))}),this.term.on("paste",function(t){s+=t,this.term.write(t)})}}Factory.register("XTerminal",XTerminal);
|