From 278a5201386ea16635e145ca2810aee70fbce5f9 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 8 Mar 2024 10:54:16 +0800 Subject: [PATCH] bugfix --- bricks/accordion.js | 2 +- bricks/aggrid.js | 2 +- bricks/audio.js | 26 +++---- bricks/bricks.js | 42 +++++------ bricks/button.js | 4 +- bricks/datagrid.js | 8 +- bricks/dataviewer.js | 6 +- bricks/dynamicaccordion.js | 147 ++++++++++++++++++++++--------------- bricks/form.js | 6 +- bricks/header.tmpl | 5 ++ bricks/input.js | 8 +- bricks/jsoncall.js | 2 +- bricks/layout.js | 4 +- bricks/markdown_viewer.js | 12 +-- bricks/menu.js | 8 +- bricks/miniform.js | 4 +- bricks/modal.js | 2 +- bricks/scroll.js | 24 +++--- bricks/tab.js | 6 +- bricks/toolbar.js | 10 +-- bricks/tree.js | 4 +- bricks/utils.js | 38 +++++++--- bricks/video.js | 4 +- bricks/widget.js | 6 ++ bricks/wterm.js | 4 +- examples/docs.ui | 4 +- examples/tab.ui | 1 + 27 files changed, 223 insertions(+), 166 deletions(-) diff --git a/bricks/accordion.js b/bricks/accordion.js index 45bbe5e..c754921 100644 --- a/bricks/accordion.js +++ b/bricks/accordion.js @@ -42,7 +42,7 @@ bricks.Accordion = class oops extends bricks.VBox { async change_content(evnet){ var b = event.target.bricks_widget; var name = b.opts.name; - console.log('accordion: button=', b, 'name=', name); + bricks.debug('accordion: button=', b, 'name=', name); var pos = -1; for (var i=0; i< this.opts.items.length; i++){ if (name == this.opts.items[i].name){ diff --git a/bricks/aggrid.js b/bricks/aggrid.js index af4a83b..46f7e88 100644 --- a/bricks/aggrid.js +++ b/bricks/aggrid.js @@ -41,6 +41,6 @@ bricks.AG_Grid = class oops extends bricks.JsWidget { }); } cell_clicked(params){ - console.log('clicked, params=', params); + bricks.debug('clicked, params=', params); } } diff --git a/bricks/audio.js b/bricks/audio.js index 13cef2f..e7bfc7a 100755 --- a/bricks/audio.js +++ b/bricks/audio.js @@ -36,7 +36,7 @@ bricks.AudioPlayer = class oops extends bricks.JsWidget { } set_source(url){ this.audio.src = url; - console.log(this.audio.src,' new src seted'); + bricks.debug(this.audio.src,' new src seted'); } play(){ this.audio.play(); @@ -84,7 +84,7 @@ bricks.AudioRecorder = class oops extends bricks.HBox { this.bind('record_finished', this.upload.bind(this)); } rec_btn_pressed(){ - console.log(this.rec_btn.url, ':url:', this.start_icon, this.stop_icon); + bricks.debug(this.rec_btn.url, ':url:', this.start_icon, this.stop_icon); if(this.rec_btn.url == this.start_icon){ this.rec_btn.set_url(this.stop_icon); this.start_recording(); @@ -119,7 +119,7 @@ bricks.AudioRecorder = class oops extends bricks.HBox { //此处创建这些音频可视化图形绘制浏览器支持妥妥的 //this.wave=Recorder.FrequencyHistogramView({elem:".recwave"}); }.bind(this),function(msg,isUserNotAllow){//用户拒绝未授权或不支持 - console.log('open recorder failed'); + bricks.debug('open recorder failed'); }); } recClose(){ @@ -128,7 +128,7 @@ bricks.AudioRecorder = class oops extends bricks.HBox { this.rec = null; this.mic_opened = false; }else{ - console.log('close recorder error'); + bricks.debug('close recorder error'); }; } recoding(){ @@ -149,19 +149,19 @@ bricks.AudioRecorder = class oops extends bricks.HBox { if(this.rec&&Recorder.IsOpen()){ this.rec.pause(); }else{ - console.log("gCAR::未打开录音"); + bricks.debug("gCAR::未打开录音"); }; } resume_recording(){ if(this.rec&&Recorder.IsOpen()){ this.rec.resume(); }else{ - console.log("Ob6S::未打开录音"); + bricks.debug("Ob6S::未打开录音"); }; } stop_recording(){ if(!(this.rec&&Recorder.IsOpen())){ - console.log("5JuL::未打开录音"); + bricks.debug("5JuL::未打开录音"); return; }; this.rec.stop(function(blob,duration){ @@ -176,32 +176,32 @@ bricks.AudioRecorder = class oops extends bricks.HBox { this.dispatch('record_finished', d); }.bind(this),function(msg){ - console.log("kGZO::录音失败:"); + bricks.debug("kGZO::录音失败:"); }); } upload = async function(){ if(!this.recordData){ - console.log("DUTn::请先录音,然后停止后再上传"); + bricks.debug("DUTn::请先录音,然后停止后再上传"); return; }; if(!this.upload_url){ return; } var blob=this.recordData.data; - console.log('blob=', blob, this.recordData); + bricks.debug('blob=', blob, this.recordData); var form=new FormData(); form.append("audiofile",blob,"recorder.wav"); var jpost = bricks.jpost var ret = await jpost(this.upload_url,{ params:form }); - console.log('ret=', ret); + bricks.debug('ret=', ret); this.recClose(); this.dispatch('updated', ret) } download(){ if(!this.recordData){ - console.log('recorder not opened'); + bricks.debug('recorder not opened'); return; }; var fileName="recorder-"+Date.now()+".wav"; @@ -211,7 +211,7 @@ bricks.AudioRecorder = class oops extends bricks.HBox { downA.download=fileName; // document.querySelector("."+cls).appendChild(downA); if(/mobile/i.test(navigator.userAgent)){ - console.log('mobile device'); + bricks.debug('mobile device'); } downA.click(); //不用了时需要revokeObjectURL,否则霸占内存 diff --git a/bricks/bricks.js b/bricks/bricks.js index e8d6537..b010bd8 100755 --- a/bricks/bricks.js +++ b/bricks/bricks.js @@ -87,7 +87,7 @@ bricks.widgetBuild = async function(desc, widget){ } let klass = bricks.Factory.get(desc.widgettype); if (! klass){ - console.log('widgetBuild():',desc.widgettype, 'not registered', bricks.Factory.widgets_kw); + bricks.debug('widgetBuild():',desc.widgettype, 'not registered', bricks.Factory.widgets_kw); return null; } var options = desc.options || {}; @@ -103,7 +103,7 @@ bricks.widgetBuild = async function(desc, widget){ if ( sw ){ w.add_widget(sw); } else { - console.log('widgetBuild() error: sdesc=', sdesc); + bricks.debug('widgetBuild() error: sdesc=', sdesc); } } } @@ -141,7 +141,7 @@ bricks.universal_handler = function(from_widget, widget, desc, event){ if (f){ return f(event); } - console.log('universal_handler() error', 'from_widget=', + bricks.debug('universal_handler() error', 'from_widget=', from_widget, 'widget=', widget, 'desc=', desc, @@ -150,7 +150,7 @@ bricks.universal_handler = function(from_widget, widget, desc, event){ bricks.buildEventHandler = function(w, desc){ var target = bricks.getWidgetById(desc.target, w); if (! target){ - console.log('target miss desc=', desc, 'w=', w); + bricks.debug('target miss desc=', desc, 'w=', w); return null } var rtdata = null; @@ -185,16 +185,16 @@ bricks.buildEventHandler = function(w, desc){ return bricks.buildDispatchEventHandler(w, target, rtdata, desc); break; default: - console.log('invalid actiontype', target, desc); + bricks.debug('invalid actiontype', target, desc); break; } } bricks.getRealtimeData = function(w, desc){ var target = bricks.getWidgetById(desc.widget, w); var f; - console.log('getRealtimeData() calling ...'); + bricks.debug('getRealtimeData() calling ...'); if (! target){ - console.log('target miss', desc); + bricks.debug('target miss', desc); return null } if (desc.method){ @@ -210,10 +210,10 @@ bricks.getRealtimeData = function(w, desc){ } var _buildWidget = async function(from_widget, target, mode, options){ - console.log('target=', target, 'mode=', mode, 'options=', options); + bricks.debug('target=', target, 'mode=', mode, 'options=', options); var w = await (bricks.widgetBuild(options, from_widget)); if (!w){ - console.log('options=', options, 'widgetBuild() failed'); + bricks.debug('options=', options, 'widgetBuild() failed'); return; } if (mode == 'replace'){ @@ -228,10 +228,10 @@ var _buildWidget = async function(from_widget, target, mode, options){ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){ var f = async function(target, mode, options){ - console.log('target=', target, 'mode=', mode, 'options=', options); + bricks.debug('target=', target, 'mode=', mode, 'options=', options); var w = await (bricks.widgetBuild(options, w)); if (!w){ - console.log('options=', options, 'widgetBuild() failed'); + bricks.debug('options=', options, 'widgetBuild() failed'); return; } if (mode == 'replace'){ @@ -253,10 +253,10 @@ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){ } bricks.buildBricksHandler = function(w, target, rtdata, desc){ var f = async function(target, mode, options){ - console.log('target=', target, 'mode=', mode, 'options=', options); + bricks.debug('target=', target, 'mode=', mode, 'options=', options); var w = await (bricks.widgetBuild(options, wa)); if (!w){ - console.log('options=', options, 'widgetBuild() failed'); + bricks.debug('options=', options, 'widgetBuild() failed'); return; } if (mode == 'replace'){ @@ -271,7 +271,7 @@ bricks.buildBricksHandler = function(w, target, rtdata, desc){ bricks.buildRegisterFunctionHandler = function(w, target, rtdata, desc){ var f = objget(registerfunctions, desc.rfname); if( ! f){ - console.log('rfname:', desc.rfname, 'not registed', desc); + bricks.debug('rfname:', desc.rfname, 'not registed', desc); return null; } var params = {}; @@ -286,7 +286,7 @@ bricks.buildRegisterFunctionHandler = function(w, target, rtdata, desc){ bricks.buildMethodHandler = function(w, target, rtdata, desc){ var f = target[desc.method]; if (! f){ - console.log('desc:', desc, 'not exists in', target, 'w=', w); + bricks.debug('desc:', desc, 'not exists in', target, 'w=', w); return null; } var params = {}; @@ -299,7 +299,7 @@ bricks.buildScriptHandler = function(w, target, rtdata, desc){ bricks.extend(params, desc.params) bricks.extend(params, rtdata); var f = new Function('target', 'params', 'event', desc.script); - console.log('params=', params, 'buildScriptHandler() ..........'); + bricks.debug('params=', params, 'buildScriptHandler() ..........'); return f.bind(target, target, params); } bricks.buildDispatchEventHandler = function(w, target, rtdata, desc){ @@ -352,11 +352,11 @@ bricks.getWidgetById = function(id, from_widget){ } } catch(err){ - console.log('getWidgetById():i=', ids[i], id, 'not found', err); + bricks.debug('getWidgetById():i=', ids[i], id, 'not found', err); return null; } if ( new_el == null ){ - console.log('getWidgetById():', id, from_widget, 'el=', el, 'id=', ids[i]); + bricks.debug('getWidgetById():', id, from_widget, 'el=', el, 'id=', ids[i]); return null; } el = new_el; @@ -364,7 +364,7 @@ bricks.getWidgetById = function(id, from_widget){ if (typeof(el.bricks_widget) !== 'undefined'){ return el.bricks_widget; } - console.log('********', id, 'el=', el, 'found, but not a bricks class with dom element'); + bricks.debug('********', id, 'el=', el, 'found, but not a bricks class with dom element'); return el; } @@ -425,7 +425,7 @@ bricks.App = class extends bricks.Layout { var opts = structuredClone(this.opts.widget); var w = await (bricks.widgetBuild(opts, bricks.Body)); if (!w){ - console.log('w=', w, 'Body=', bricks.Body, 'Factory=', bricks.Factory) + bricks.debug('w=', w, 'Body=', bricks.Body, 'Factory=', bricks.Factory) } return w; } @@ -434,7 +434,7 @@ bricks.App = class extends bricks.Layout { var w = await (this.build()); this.root = w; if (!w){ - console.log('w=', w, 'Body=', bricks.Body, 'Factory=', bricks.Factory) + bricks.debug('w=', w, 'Body=', bricks.Body, 'Factory=', bricks.Factory) return null; } bricks.Body.add_widget(w); diff --git a/bricks/button.js b/bricks/button.js index 0853532..ca86360 100644 --- a/bricks/button.js +++ b/bricks/button.js @@ -78,12 +78,12 @@ bricks.Button = class extends bricks.Layout { } } target_clicked(event){ - console.log('target_clicked() .... called '); + bricks.debug('target_clicked() .... called '); event.stopPropagation(); this.dispatch('click', this.opts); if (this.opts.action){ if (this.opts.debug){ - console.log('debug:opts=', this.opts); + bricks.debug('debug:opts=', this.opts); } } } diff --git a/bricks/datagrid.js b/bricks/datagrid.js index cb8e9f0..957aa66 100644 --- a/bricks/datagrid.js +++ b/bricks/datagrid.js @@ -283,7 +283,7 @@ bricks.DataGrid = class extends bricks.VBox { } this.freeze_part = null; this.normal_part = null; - console.log('width=', this.freeze_width, '-', this.normal_width, '...'); + bricks.debug('width=', this.freeze_width, '-', this.normal_width, '...'); if (this.freeze_fields.length > 0) { this.freeze_part = new bricks.VBox({}); this.freeze_part.set_css('datagrid-left'); @@ -325,11 +325,11 @@ bricks.DataGrid = class extends bricks.VBox { } } load_previous_data() { - console.log('event min_threshold fired ........'); + bricks.debug('event min_threshold fired ........'); this.loader.previousPage(); } load_next_data() { - console.log('event max_threshold fired ........'); + bricks.debug('event max_threshold fired ........'); this.loader.nextPage(); } coscroll(event) { @@ -378,7 +378,7 @@ bricks.DataGrid = class extends bricks.VBox { this.selected_row = row; this.selected_row.selected(); this.dispatch('row_click', row); - console.log('DataGrid():click_handler, row=', row, 'event=', event); + bricks.debug('DataGrid():click_handler, row=', row, 'event=', event); } } diff --git a/bricks/dataviewer.js b/bricks/dataviewer.js index 0ccc9fd..e2fc90c 100644 --- a/bricks/dataviewer.js +++ b/bricks/dataviewer.js @@ -40,7 +40,7 @@ bricks.DataViewer = class extends bricks.VScrollPanel { fetch(this.opts.viewer_url) .then(response => response.text()) .then(data => { - console.log('viewer_tmpl=', data); + bricks.debug('viewer_tmpl=', data); this.viewer_tmpl = data schedule_once(this.loader.loadData.bind(this.loader), 0.01); }); @@ -58,13 +58,13 @@ bricks.DataViewer = class extends bricks.VScrollPanel { var desc = JSON.parse(s); var w = await bricks.widgetBuild(desc, this); if (! w){ - console.log(desc, 'widgetBuild() failed...........'); + bricks.debug(desc, 'widgetBuild() failed...........'); return; } w.row_data = row; var index = null; if (direction == 'down') index = 0; - console.log('w=', w, 'this=', this); + bricks.debug('w=', w, 'this=', this); this.add_widget(w, index); } } diff --git a/bricks/dynamicaccordion.js b/bricks/dynamicaccordion.js index 5f9aece..0a55601 100644 --- a/bricks/dynamicaccordion.js +++ b/bricks/dynamicaccordion.js @@ -56,24 +56,24 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { } this.bind('min_threshold', this.load_previous_page.bind(this)); this.bind('max_threshold', this.load_next_page.bind(this)); + this.oldscrollY = null; this.render(); } render(params) { - console.log('params=', params, 'render() called'); + bricks.debug('params=', params, 'render() called'); this.clear_widgets(); this.pages = new Map(); // 用于存储已加载的页面数据 this.pageContents = new Map(); // 用于存储已加载的页面内容 params = params || {}; this.params = bricks.extend(this.base_params, params); this.loadPage(1); + this.dom_element.scrollTop = 0; + + } async loadPage(page) { - if (this.loading){ - return; - } - this.loading = true; // 检查页面是否在缓存中 if (! this.pages.has(page)) { var jc = new bricks.HttpJson(); @@ -84,7 +84,7 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { }); var d = await jc.get(this.dataUrl,{params:params}); if (!d){ - console.log(this.dataUrl,{params:params}, 'error'); + bricks.debug(this.dataUrl,{params:params}, 'error'); this.loading = false; return; } @@ -100,30 +100,30 @@ bricks.DynamicAccordion = class extends bricks.VScrollPanel { max = Math.max(...pages); min = Math.min(...pages); const farthestPage = page == max? min : max; - var w = this.pageContents.get(farthestPage); - this.remove_widget(w); + this.delete_page(farthestPage); this.pages.delete(farthestPage); - this.pageContents.delete(farthestPage); - } - var pages = Array.from(this.pages.keys()); - if (page == Math.min(pages)){ - this.scrollY = 1 / pages.length; - if (this.scrollY == 1){ - this.scrollY = 0; - } - } else { - this.scrollY = (pages.length - 1) / pages.length; } + } else { + bricks.debug(page, 'already n buffer, do not thing'); } - this.loading = false; return; } + is_max_page(page){ + const pages = Array.from(this.pages.keys()); + return page == Math.max(...pages); + } + is_min_page(page){ + const pages = Array.from(this.pages.keys()); + return page == Math.min(...pages); + } async renderAccordionItems(data, page) { - - const pageContent = new bricks.PageContent({height:"auto"}); - pageContent.page = page; - + var pos; for (var i=0;i= 0){ + this.dom_element.scrollTop += item.get_height(); + } else { + this.dom_element.scrollTop -= item.get_height(); + } }; - - this.pageContents.set(page, pageContent); - var pages = Array.from(this.pages.keys()); - if (page == Math.min(...pages)){ - this.add_widget(pageContent, 0); - } else { - this.add_widget(pageContent); + } + delete_page(page){ + var items = this.dom_element.querySelectorAll('[data-page="' + page + '"]'); + for (var i=0;i 0){ - await this.loadPage(page); - console.log('page loaded, page=', page); - } else { - var pages = Array.from(this.pages.keys()); - console.log('page NOT loaded, page=', page, - 'lastPage=', this.lastPage, - 'rows=', this.rows, - 'cacheLimit=', this.cacheLimit, - 'buffered page=', pages.length); + if (this.loading){ + bricks.debug('this.loading is set, do not thing'); + return; } + this.loading = true; + try { + var page = this.get_load_page('up'); + if (page > 0){ + await this.loadPage(page); + var pages = Array.from(this.pages.keys()); + bricks.debug('load_previous_page():page loaded, page=', page, pages); + } else { + var pages = Array.from(this.pages.keys()); + bricks.debug('page NOT loaded, page=', page, + 'lastPage=', this.lastPage, + 'rows=', this.rows, + 'cacheLimit=', this.cacheLimit, + 'buffered page=', pages.length); + } + } catch(e){ + bricks.debug('error happened', e); + } + this.loading = false; } async load_next_page(){ - var pages = Array.from(this.pages.keys()); - var page = this.get_load_page('down'); - if (page <= this.lastPage){ - await this.loadPage(page); - console.log('page Loaded, page=', page); - } else { - console.log('page=', page, - 'lastPage=', this.lastPage, - 'rows=', this.rows, - 'cacheLimit=', this.cacheLimit, - 'buffered page=', pages); + if (this.loading){ + bricks.debug('this.loading is set, do not thing'); + return; } + this.loading = true; + try { + var page = this.get_load_page('down'); + if (page <= this.lastPage){ + await this.loadPage(page); + var pages = Array.from(this.pages.keys()); + bricks.debug('load_next_page():page Loaded, page=', page, pages); + } else { + var pages = Array.from(this.pages.keys()); + bricks.debug('page=', page, + 'lastPage=', this.lastPage, + 'rows=', this.rows, + 'cacheLimit=', this.cacheLimit, + 'buffered page=', pages); + } + } catch (e){ + bricks.debug('error happened', e); + } + this.loading = false; + bricks.debug('load_next_page() finished'); } } bricks.Factory.register('DynamicAccordion', bricks.DynamicAccordion); diff --git a/bricks/form.js b/bricks/form.js index 67cce2a..8b16926 100644 --- a/bricks/form.js +++ b/bricks/form.js @@ -36,7 +36,7 @@ bricks.FieldGroup = class extends bricks.VBox { box.add_widget(w); form.name_inputs[fields[i].name] = w; } else { - console.log(fields[i], 'createInput failed'); + bricks.debug(fields[i], 'createInput failed'); } } } @@ -141,7 +141,7 @@ bricks.Form = class extends bricks.VBox { } command_handle(event){ var params = event.params; - console.log('Form(): click_handle() params=', params); + bricks.debug('Form(): click_handle() params=', params); if (!params){ error('click_handle() get a null params'); return @@ -181,7 +181,7 @@ bricks.Form = class extends bricks.VBox { var w = this.name_inputs[name]; var d = w.getValue(); if (w.required && ( d[name] == '' || d[name] === null)){ - console.log('data=', data, 'd=', d); + bricks.debug('data=', data, 'd=', d); w.focus(); return; } diff --git a/bricks/header.tmpl b/bricks/header.tmpl index 633cc77..2a81b47 100644 --- a/bricks/header.tmpl +++ b/bricks/header.tmpl @@ -19,5 +19,10 @@