luci-base: ui.js: add createHandlerFn() helper
The createHandlerFn() helper function is useful to construct onclick or similar event handling functions. It will add a "spinning" CSS class on the event target element and disable the element, wrap the given function with Promise.resolv() and re-enable the target element once the promise is settled. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
0d0882aea0
commit
7179d2e6dd
1 changed files with 23 additions and 0 deletions
|
@ -2081,6 +2081,29 @@ return L.Class.extend({
|
|||
catch (e) { }
|
||||
},
|
||||
|
||||
createHandlerFn: function(ctx, fn /*, ... */) {
|
||||
if (typeof(fn) == 'string')
|
||||
fn = ctx[fn];
|
||||
|
||||
if (typeof(fn) != 'function')
|
||||
return null;
|
||||
|
||||
return Function.prototype.bind.apply(function() {
|
||||
var t = arguments[arguments.length - 1].target;
|
||||
|
||||
t.classList.add('spinning');
|
||||
t.disabled = true;
|
||||
|
||||
if (t.blur)
|
||||
t.blur();
|
||||
|
||||
Promise.resolve(fn.apply(ctx, arguments)).then(function() {
|
||||
t.classList.remove('spinning');
|
||||
t.disabled = false;
|
||||
});
|
||||
}, this.varargs(arguments, 2, ctx));
|
||||
},
|
||||
|
||||
/* Widgets */
|
||||
Textfield: UITextfield,
|
||||
Checkbox: UICheckbox,
|
||||
|
|
Loading…
Reference in a new issue