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:
Jo-Philipp Wich 2019-08-14 22:54:59 +02:00
parent 0d0882aea0
commit 7179d2e6dd

View file

@ -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,