This commit is contained in:
yumoqing 2025-02-20 17:46:50 +08:00
parent 688e751091
commit 9bc17fe7ec
5 changed files with 158 additions and 27 deletions

View File

@ -218,18 +218,24 @@ bricks.universal_handler = async function(from_widget, widget, desc, event){
'desc=', desc,
event);
}
bricks.default_popup = function(opts){
var popts = bricks.get_popup_default_options();
bricks.extend(popts, opts);
return new bricks.Popup(popts);
}
bricks.default_popupwindow = function(opts){
var popts = bricks.get_popupwindow_default_options();
bricks.extend(popts, opts);
return new bricks.PopupWindow(popts);
}
bricks.buildEventHandler = async function(w, desc, event){
var target;
if (desc.target == 'Popup'){
var popts = bricks.get_popup_default_options();
var opt1 = desc.popup_options || {};
bricks.extend(popts, opt1);
target = new bricks.Popup(popts);
target = bricks.default_popup(desc.popup_options || {});
} else if (desc.target == 'PopupWindow') {
var popts = bricks.get_popupwindow_default_options();
var opt1 = desc.popup_options || {};
bricks.extend(popts, opt1);
target = new bricks.PopupWindow(popts);
target = bricks.default_popupwindow(desc.popup_options || {});
} else if ( desc.target instanceof bricks.JsWidget ) {
target = desc.target;
} else {
target = bricks.getWidgetById(desc.target, w);
}
@ -349,6 +355,9 @@ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){
} else {
rtdata = bricks.extend(rtdata, desc.event_params);
options = bricks.apply_data(options, rtdata);
if (desc.params_mapping){
rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others);
}
options.params = bricks.extend(params, rtdata);
}
@ -361,6 +370,9 @@ bricks.buildUrlwidgetHandler = function(w, target, rtdata, desc){
bricks.buildBricksHandler = function(w, target, rtdata, desc){
var options = objcopy(desc.options||{});
rtdata = bricks.extend(rtdata, inputdata2dic(desc.event_params));
if (desc.params_mapping){
rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others);
}
options = bricks.apply_data(options, rtdata);
return _buildWidget.bind(w, target, target, desc.mode || 'replace', options, desc);
}
@ -370,6 +382,9 @@ bricks.buildRegisterFunctionHandler = function(w, target, rtdata, desc){
bricks.debug('rfname:', desc.rfname, 'not registed', desc);
return null;
}
if (desc.params_mapping){
rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others);
}
var params = {};
if (desc.params){
bricks.extend(params, desc.params);
@ -391,6 +406,9 @@ bricks.buildMethodHandler = function(w, target, rtdata, desc){
bricks.extend(params, desc.params)
bricks.extend(params, rtdata);
bricks.extend(params, inputdata2dic(desc.event_params));
if (desc.params_mapping){
rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others);
}
params = bricks.apply_data(params, rtdata);
return f.bind(target, params);
}
@ -399,6 +417,9 @@ bricks.buildScriptHandler = function(w, target, rtdata, desc){
bricks.extend(params, desc.params)
bricks.extend(params, rtdata);
bricks.extend(params, inputdata2dic(desc.event_params));
if (desc.params_mapping){
rtdata = bricks.map(rtdata, desc.params_mapping.mapping, desc.params_mapping.need_others);
}
params = bricks.apply_data(params, rtdata);
var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
var f = new AsyncFunction('params', 'event', desc.script);

View File

@ -249,6 +249,105 @@ bricks.UiStr =class extends bricks.UiType {
}
}
bricks.UiSearch = class extends bricks.HBox {
/*
search_url:
valueField
textField
select_event
popup_options
value,
text
*/
constructor(opts){
super(opts);
this.uitype = 'search';
var inputdesc = {
name:this.name,
value:this.text,
readonly:true
}
this.str_in = new bricks.UiStr(inputdesc);
this.search_icon = new bricks.Icon({
url:bricks_resource('imgs/search.png'),
rate:1.5
});
this.str_in.set_css('filler');
this.search_icon.set_css('clickable');
this.search_icon.bind('click', this.open_search_window.bind(this));
this.add_widget(this.str_in);
this.add_widget(this.search_icon);
}
async open_search_window(event){
var desc = {
"widgettype":"urlwidget",
"options":{
"url":this.search_url
}
}
var w = await bricks.widgetBuild(desc, this);
var tabular = null;
for (var i=0;i<w.children.length;i++){
if (w.children[i] instanceof bricks.Tabular){
tabular = w.children[i];
}
}
if (!tabular){
console.log('tubular not found is w');
return;
}
var win = bricks.default_popupwindow(this.popup_options||{});
win.add_widget(w);
win.open();
tabular.bind(this.search_event, this.set_data.bind(this));
tabular.bind(this.search_event, win.dismiss.bind(win));
}
set_data(event){
var d = event.params;
this.value = d[this.valueField];
this.str_in.setValue(d[this.textField])
}
getValue(){
var o = {}
o[this.name] = this.resultValue();
var d = this.getUserData();
if (d){
o = bricks.extend(o, d);
}
return o;
}
set_formdata(formdata){
formdata.append(this.name, this.resultValue());
}
resultValue(){
return this.value;
}
focus(){
this.str_in.dom_element.focus();
}
reset(){
var v = this.opts.value||this.opts.defaultvalue|| '';
this.setValue(v);
this.str_in.setValue(this.opts.text||'');
}
setValue(v, t){
if (! v)
v = '';
this.vlaue = v;
this.str_in.setValue(t);
}
set_disabled(f){
this.dom_element.disabled = f;
}
set_readonly(f){
this.dom_element.readOnly = f;
}
set_required(f){
this.dom_element.required = f;
this.required = f;
}
}
bricks.UiPassword =class extends bricks.UiStr {
/*
{
@ -808,7 +907,7 @@ bricks.UiCode =class extends bricks.UiType {
e.removeChild(e.firstChild);
}
var v = this.opts.value || this.opts.defaultvalue || null;
if (!v && ! this.opts.nullable){
if (!v && ! this.opts.nullable && data.length > 0){
v = data[0][this.opts.valueField]
}
if (this.opts.nullable){
@ -969,3 +1068,4 @@ Input.register('UiPassword', 'password', bricks.UiPassword);
Input.register('UiAudio', 'audio', bricks.UiAudio);
Input.register('UiVideo', 'video', bricks.UiVideo);
Input.register('UiAudioText', 'audiotext', bricks.UiAudioText);
Input.register('UiSearch', 'search', bricks.UiSearch);

View File

@ -66,7 +66,9 @@ bricks.Tabular = class extends bricks.DataViewer {
if (flag){
row.content_widget.show();
row.content_widget.clear_widgets();
var w = await bricks.widgetBuild(this.content_view, row.content_widget, row.user_data);
var desc = objcopy(this.content_view);
desc = bricks.apply_data(desc, row.user_data);
var w = await bricks.widgetBuild(desc, row.content_widget);
if (w){
row.content_widget.add_widget(w);
}

View File

@ -210,14 +210,14 @@ bricks.Tree = class extends bricks.VScrollPanel {
create_toolbar(){
var toolbar = bricks.extend({}, this.toolbar);
var tools = [];
if (toolbar.tools){
toolbar.tools.forEach(f => tools.push(f));
}
if (this.editable){
tools.push({icon:bricks_resource('imgs/add.png'), name:'add'});
tools.push({icon:bricks_resource('imgs/update.png'), name:'update'});
tools.push({icon:bricks_resource('imgs/delete.png'), name:'delete'});
}
if (toolbar.tools){
toolbar.tools.forEach(f => tools.push(f));
}
if (tools.length == 0){
return;
}
@ -239,16 +239,17 @@ bricks.Tree = class extends bricks.VScrollPanel {
this.update_node();
break;
default:
if ((opts.selected_data || opts.checked_data) && ! this.selected_node){
w = new bricks.Error({title:'Error', message:'No selected node found'});
w.open();
return;
}
console.log('opts=', opts);
var d = null;
if (opts.checked_data){
d = {
checked_data:JSON.stringify(this.checked_data)
}
} else if (opts.selected_node){
d = {
selected_data:JSON.stringify(this.selected_node.user_data)
}
d = this.checked_data
} else if (opts.selected_data){
d = this.selected_node.user_data
}
this.dispatch(opts.name, d);
break;

View File

@ -1,6 +1,18 @@
var bricks = window.bricks || {};
bricks.bug = false;
bricks.map = function(data_source, mapping, need_others){
ret = {};
Object.entries(data_source).forEach(([key, value]) => {
if (mapping.hasOwnProperty(key)){
ret[mapping[key]] = data_source[key];
} else if (need_others){
ret[key] = data_source[key];
}
});
return ret;
}
bricks.relocate_by_eventpos = function(event, widget){
var ex,ey;
var x,y;
@ -390,13 +402,8 @@ var set_max_height = function(w1, w2){
}
}
var objcopy = function(obj){
var o = {}
for ( k in obj){
if (obj.hasOwnProperty(k)){
o[k] = obj[k];
}
}
return o;
var s = JSON.stringify(obj);
return JSON.parse(s);
}
bricks.set_stream_source = async function(target, url, params){