diff --git a/ui (gen4)/lib/widget/browse2.html b/ui (gen4)/lib/widget/browse2.html index b2c42a71..bf1e8409 100755 --- a/ui (gen4)/lib/widget/browse2.html +++ b/ui (gen4)/lib/widget/browse2.html @@ -106,7 +106,8 @@ requirejs([ dialog_1 = browser.Browser(function(make){ make(['list', 'of', 'text']) make.group( - make('group item 0', function(){ console.log('###') }), + make('group item 0', + function(){ console.log('###', ...arguments) }), 'group item 1 (bare)') // XXX Q: should we show only one if multiple lines are in sequence??? make('---') diff --git a/ui (gen4)/lib/widget/browse2.js b/ui (gen4)/lib/widget/browse2.js index f7087351..83587666 100755 --- a/ui (gen4)/lib/widget/browse2.js +++ b/ui (gen4)/lib/widget/browse2.js @@ -197,6 +197,8 @@ Items.ListTitle = function(){} // -> this // // +// XXX make the event object customizable... +// XXX STUB event object... // XXX should this be simply a shorthand to .trigger(..) ??? var makeEventMethod = function(event, handler){ return function(item){ @@ -219,14 +221,12 @@ var makeEventMethod = function(event, handler){ handler && handler.call(this, evt, ...arguments) - // XXX we should get the actual item and pass it on... - this.trigger(evt, ...arguments) - return this + .trigger(evt, ...arguments) } } -var callItemEventHandlers = function(item, event, ...args){ +var callItemEventHandlers = function(item, event, evt, ...args){ ;(item[event] ? [item[event]] : []) @@ -236,16 +236,18 @@ var callItemEventHandlers = function(item, event, ...args){ handler.call(item, evt, item, ...args) }) } var makeItemEventMethod = function(event, handler, options){ + options = Object.assign( + { noQueryCheck: true }, + options || {}) // NOTE: this is not returned directly as we need to query the items // and pass those on to the handlers rather than the arguments // as-is... var method = makeEventMethod(event, function(evt, item, ...args){ handler - && handler.call(this, evt, item, ...args) + && handler.call(this, evt, item.slice(), ...args) item.forEach(function(item){ - callItemEventHandlers(item, event) }) - }) + callItemEventHandlers(item, event, evt, ...args) }) }) return function(item, ...args){ var that = this return method.call(this, @@ -1105,6 +1107,7 @@ var BaseBrowserPrototype = { // object query.. // NOTE: this must be last as it will return a test unconditionally... query: function(pattern){ + var that = this return function(elem){ return Object.entries(pattern) .reduce(function(res, [key, pattern]){ @@ -1724,7 +1727,6 @@ var BaseBrowserPrototype = { // generic event infrastructure... // XXX add support for tagged events... - // XXX should these be defined on this level or should we use DOM??? // XXX add support for item events... // e.g. item.focus(..) -> root.focus(..) // XXX also need to design a means for this system to interact both @@ -1793,7 +1795,6 @@ var BaseBrowserPrototype = { // XXX need a way to extend these to: // - be able to trigger an external (DOM) event... // - be able to be triggered from an external (DOM) event... - // XXX should call the handlers with actual items and not the arguments... // XXX should this return the focused item???? focus: makeItemEventMethod('focus', function(evt, items){ // NOTE: if we got multiple matches we care only about the first one...