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) { }
|
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 */
|
/* Widgets */
|
||||||
Textfield: UITextfield,
|
Textfield: UITextfield,
|
||||||
Checkbox: UICheckbox,
|
Checkbox: UICheckbox,
|
||||||
|
|
Loading…
Reference in a new issue