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;tt==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.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;tt+"="+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{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`,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=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&&(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=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_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=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{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;it.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);