Set a `data-changed=true` attribute on the widget element when the user
did any change to the default value.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Remove the old server side support for file browsing and file uploading
and switch to a client side widget instead which uses XMLHTTPRequests to
upload files via cgi-io and RPC calls for file listing and status queries.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
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>
Restore the old CBI behaviour of not automatically rendering empty
selection choices in ListValue select dropdowns when .rmempty is
specified.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The "luci.form" and "luci.tools.widgets" classes use the "multiple"
keyword while ui.js uses "multi" internally, leading to single-value
dropdowns widget values getting stored as uci lists.
Fix the issue by using "multiple" everywhere.
Fixes: #2871
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add the ability to pass additional CSS classes to modal dialogs and
make use of this facility in form.js to annotate CBI map modals.
This can be used later by themes to apply additional CSS rules.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Placeholders may be HTML elements instead of plain strings, so do
not use innerHTML to assign them but rely on L.dom.content() instead.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Do not artificially cutoff dropdown items, use all available space
- Close open dropdown when clicking into the preview area
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Implement further widget primitives like text inputs or checkboxes and
support custom validation callback functions when instantiating CBI
validators.
Also add support initializing ui.js widgets from the "data-ui-widget"
HTML attribute.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Use the new class loader infrastructure to move gui specific
functionality out of the luci.js core and dispatch a new event
'luci-loaded' which is fired once all external classes have
been fetched.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>