From 584f8dee651080b16bd98d9279178875f1101ef4 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 22 Jun 2019 06:03:44 +0300 Subject: [PATCH] tweaking buttons... Signed-off-by: Alex A. Naanou --- ui (gen4)/lib/widget/browse2.html | 1 + ui (gen4)/lib/widget/browse2.js | 56 +++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/ui (gen4)/lib/widget/browse2.html b/ui (gen4)/lib/widget/browse2.html index 5c94620a..7ad41ec9 100755 --- a/ui (gen4)/lib/widget/browse2.html +++ b/ui (gen4)/lib/widget/browse2.html @@ -260,6 +260,7 @@ requirejs([ 'buttonAction: item button focused -- example button action...'], ['□', function(){ console.log('BUTTON:', ...arguments) }], + 'ToggleDisabled', ], }) diff --git a/ui (gen4)/lib/widget/browse2.js b/ui (gen4)/lib/widget/browse2.js index 7b0a75be..7f4c7fd1 100755 --- a/ui (gen4)/lib/widget/browse2.js +++ b/ui (gen4)/lib/widget/browse2.js @@ -160,6 +160,35 @@ Items.nest = function(item, list, options){ +//--------------------------------------------------------------------- +// Buttons... +var buttons = Items.buttons = {} + + +buttons.ToggleDisabled = [ + function(item){ + return item.disabled ? + '☐' + : '☑' }, + 'toggleDisabled: item', + true] + +buttons.ToggleHidden = [ + function(item){ + return item.hidden ? + '☐' + : '☑' }, + 'toggleHidden: item'] + +buttons.ToggleSelected = [ + function(item){ + return item.selected ? + '☐' + : '☑' }, + 'toggleSelect: item'] + + + //--------------------------------------------------------------------- // wrappers... @@ -2682,6 +2711,7 @@ var BaseBrowserPrototype = { && (item.focused = true) }, default_item: function(){ return this.get(0) }, options: { + // XXX get this from options... skipDisabled: true, }, getter: 'get' }), @@ -3114,9 +3144,13 @@ var BrowserPrototype = { // // - number/string/list/object // // - any values... // // + // // (optional, bool), of true the button will + // // be active while the item is disabled... + // // // // NOTE: for more doc see keyboard.Keyboard.parseStringHandler(..) // ['html', - // ': .. -- comment'], + // ': .. -- comment', + // ], // // ... // ] @@ -3695,17 +3729,27 @@ var BrowserPrototype = { // buttons... // XXX migrate the default buttons functionality and button inheritance... var buttons = (item.buttons || options.itemButtons || []) + // resolve buttons from library... + .map(function(button){ + return button instanceof Array ? + button + : Items.buttons[button] || button }) .slice() // NOTE: keep the order unsurprising... .reverse() var stopPropagation = function(evt){ evt.stopPropagation() } buttons - .forEach(function([html, handler]){ + // XXX add option to use a shortcut key... + // XXX use keyword to inherit buttons... + .forEach(function([html, handler, force, keyword]){ var button = document.createElement('div') button.classList.add('button') - button.innerHTML = html - // XXX should buttons be active in disabled state??? - if(!item.disabled){ + + button.innerHTML = html instanceof Function ? + html.call(that, item) + : html + + if(force || !item.disabled){ button.setAttribute('tabindex', '0') // events to keep in buttons... ;(options.buttonLocalEvents || options.localEvents || []) @@ -3747,7 +3791,7 @@ var BrowserPrototype = { var k = keyboard.event2key(evt) if(k.includes('Enter')){ event.stopPropagation() - func.call(that, evt) } }) } + func.call(that, evt, item) } }) } } elem.appendChild(button) })