summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/htdocs
AgeCommit message (Collapse)Author
2023-02-05luci-base: ui.js: modal dialog tweaksJo-Philipp Wich
- Automatically focus modal dialog frame - Close modal dialog on pressing escape key Fixes: #4609, #6205 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-02-05luci-base: ui.js: improve ui.Dropdown event handlingJo-Philipp Wich
Improve overall event and focus handling, avoid registering a global mouseover event listener, stop propagating escape keypress on closing dropdown and avoid `Element.blur()` to prevent de-focusing open modals. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-02-04luci-base: form.js: reuse JSONMap data provider in GridSection modalsJo-Philipp Wich
Reuse the same data provider as the parent JSONMap instance in order to avoid inadvertently mangling the form data when saving the modal edit dialog. Fixes: bb9ede238a ("luci-base: form.js: reuse JSONMap data provider in GridSection modals") Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-02-04luci-base: form.js: fix GridSection modals in JSONMap instancesJo-Philipp Wich
Since grid section edit modals construct a new Map instance internally, we must take care of using the correct map constructor type for the internal copy in order to end up with the correct data provider. Ensure that the extended option modal of GridSection instances uses a JSONMap when the grid section's owner map is a JSONMap to avoid stray uci related errors. Ref: https://forum.openwrt.org/t/luci-save-apply/149658/5 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-01-17luci-base: help-text spell fixPaul Dee
Signed-off-by: Paul Dee <itsascambutmailmeanyway@gmail.com>
2022-12-27luci-base: ui.js: support div based table markup in UITable.update()Jo-Philipp Wich
Constructing UITable instances from existing, div based markup is supported but the UITable.update() implementation did not account for that, leading to defunct data updates on tables built from div based markup. Fix this issue by extending UITable.update() to consider a div based table structure as well, like we do in UITable.initFromMarkup() already. Fixes: #5713 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-12-13luci-base: fix button handling for named sectionsFlorian Eckert
If more than one named section is added to the page, it is currently the case, that the first button is always switched on or off during input validation of the uci section name. This is because the usage of the 'document.querySelector' function is to imprecise. Changing the search start to the element to be created, fixes this. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2022-11-22luci-base: ui.js: table enhancementsJo-Philipp Wich
- Gracefully handle cells without innerText - Properly handle `DocumentFragment` call values on table update - Introduce ability to fetch actual cell value for sorting purposes from `data-value` attribute Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-11-09luci-base: cbi.js: await L.ui load before updating tablesJo-Philipp Wich
On legacy views, the `L.ui` JavaScript class is not automatically loaded, so request it before updating tables. Fixes: e0e6989a4a ("luci-base: introduce new LuCI.ui.Table class") Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-10-25treewide: separate Lua runtime resourcesJo-Philipp Wich
Move classes required for Lua runtime support into a new `luci-lua-runtime` package. Also replace the `luci.http` and `luci.util` classes in `luci-lib-base` with stubbed versions interacting with the ucode based runtime environment. Finally merge `luci-base-ucode` into the remainders of `luci-base`. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-07-27luci-base: revise array sortingJo-Philipp Wich
Refactor various sort operations throughout luci-base to use the new L.naturalCompare() comparator function. This primarily ensures that embedded numbers are sorted numerically and not in a lexicographical way. It also simplifies some code as a side effect. Ref: #5899 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-07-27luci-base: luci.js: add array sort utilitiesJo-Philipp Wich
Add two new utility functions L.naturalCompare() and L.sortedArray() to simplify sorting arrays naturally. Ref: #5899 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-07-23luci-base: uci.js: prevent sending empty uci set operationsJo-Philipp Wich
Under certain circumstances, a staged uci option value might get unset again before saving the config, leaving an empty section change set behind, causing the save call to send an empty uci set request via rpc, triggering an ubus code 4 (Resource not found) error. In particular this prevented bridge VLANs from getting saved properly. Fixes: #5876 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-07-22luci-base: form.js: fix removing just created named GridSectionJo-Philipp Wich
Since the `handleModalSave()` handler of the GridSection class invokes `handleModalCancel()` after saving the data but before removing the `addedSection` property, the `handleModalCancel` handler incorrectly removed the uci section that has just been created. This bug didn't affect anonymous GridSections because after saving the id of the created section changes, causing the remove command to fail, but for named ones with stable section IDs, the bug manifested. Solve the issue by passing a flag to `handleModalCancel()` indicating whether the method was called from a safe operation and use it do decide whether to delete the new staged uci section or not. Fixes: #5760 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-06-25luci-base: optimized icons filesizesy04
Optimized PNG filesize without any quality loss. Signed-off-by: Alexander Semukhin <semukhin@mail.com>
2022-06-16luci-base: network.js: consider uci config for Device.getType()/getParent()Jo-Philipp Wich
For network devices declared in uci but not yet created by netifd, the runtime status information will be unavailable, causing methods such as `getType()` to assume plain ethernet interfaces and `getParent()` to fail resolving parent devices. Fall back to infer the information from uci configuration settings in such cases to give accurate type hints to callers. In particular, this prevents LuCI from turning wireless target networks containing a to-be-created bridge device into bridges themselves. Fixes: https://github.com/openwrt/packages/issues/18768 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-17luci-base: ui.js: add required CSS class to dynlist widgetJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-17luci-base: form.js: minor tweaks for mobile stylingJo-Philipp Wich
- Annotate gridsection textvalue cells as CBI.DummyValue widgets - Replace `<br>` elements with newlines in `stripTags()` Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: trim option descriptionJo-Philipp Wich
If a whitespace-only description is set on an element, the CSS :empty selector will not match, causing description icons to be shown when there's no actual content. To avoid that, trim the description string when building the element. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: luci.js: remove wrong CSS class from page footerJo-Philipp Wich
The `control-group` class is meant for gapless grouping of inputs with buttons, while the page actions are just distinct buttons in a row. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: remove stray `<br>` elements from section placeholderJo-Philipp Wich
Theme CSS styles shoudl take care of introducing padding as needed. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: save parent map on opening nested modal mapJo-Philipp Wich
Before opening (rendering) a nested modal map, make sure to save the parent modal map in order to persist any structural uci changes, such as newly added anonymous sections to prevent the nested map from operating on stale values or ephemeral config section IDs. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: handle SectionValue objects in GridSection modalsJo-Philipp Wich
The existing logic for cloning section options into the modal form section container did not properly handle SectionValue objects. Introduce a new `cloneOptions()` helper to recursively traverse and properly clowning such nested sections. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: reset parent maps on returning from nested section modalJo-Philipp Wich
The nested section modal might have changed values also covered/displayed by the parent map, so ensure to reload all parent maps in the current modal view stack to ensure that no stale values are shown on return. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: form.js: allow overriding section placeholder of TableSectionsJo-Philipp Wich
The existing implementation was hardcoding the empty TableSection placeholder instead of invoking `renderSectionPlaceholder()` which might be overridden by various forms. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-16luci-base: ui.js: warn about connectivity loss on changing iface settingsJo-Philipp Wich
If specific settings such as the protocol, IP address or netmask of an interface the user is connected to are changed, the apply/rollback mechanism might interfere. Display an additional warning dialog in this case, instructing the user to manually reconnect and offering to continue with a less safe unchecked apply mechanism. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-06luci-base: ui.js: make "Apply unchecked" available from the changes dialogJo-Philipp Wich
Previously, "Apply unchecked" was only possible from the save action of CBI maps, allow to invoke it from the configuration change dialog as well. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-06luci-base: ui.js: gracefully handle failing confirm calls on rollbackJo-Philipp Wich
Do not abort the poll loop if some confirm request attempts fail, which might happen when the device starts rolling back its configuration. Before that fix, the rollback information dialog offering an unchecked apply was not reliably presented in such situations. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-05-06luci-base: form.js: rework stacked modal CBI map logicJo-Philipp Wich
Only stack a new modal CBI map on top of the currently displayed modal one if the related map or section differs. This prevents misbehavior when switching the protocol of interfaces. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-04-28luci-base: ui: resolve aliases and rewrites on obtaining menu node childrenJo-Philipp Wich
Extend LuCI.ui.menu.getChildren() to resolve aliases and rewrites prior to returning the menu nodes. This allows aliasing entire menu trees instead of just single pages. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-27luci-base: ui: fix null access in ui.Table.update()Jo-Philipp Wich
Fixes: #5702 Fixes: e0e6989a4a ("luci-base: introduce new LuCI.ui.Table class") Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-24luci-base: form.js: add column sorting to TableSections and GridSectionsJo-Philipp Wich
Add ability to reorder TableSection and GridSection rows by clicking on column headers. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-24luci-base: introduce new LuCI.ui.Table classJo-Philipp Wich
Introduce a new `LuCI.ui.Table` class to simplify generating HTML tables for data output and turn the existing `cbi_update_table()` procedure into a wrapper around this new facility. Tables generated by the new class closely resemble the old markup but provide additional sorting capabilities. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-21luci-base: properly handle promise targets in Request.request()Jo-Philipp Wich
Under some circumstances, ubus RPC requests may be initiated while LuCI is still resolving the `rpcBaseURL` value. In this situation, the `target` argument of the `request()` call will be a pending promise object which results in an invalid URL when serialized by `expandURL()`, leading to an `Failed to execute 'open' on 'XMLHttpRequest': Invalid URL` exception. This commonly occured on the index status page which immediately initiates ubus RPC calls on load to discover existing status page partials. Solve the issue by filtering the given `target` argument through `Promise.resolve()` before expanding the URL and initiating the actual request. Fixes: #3747 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-16luci-app-firewall: fix setting unspecified zone on forwardingsJo-Philipp Wich
Fixes: #5685 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-23luci.js: remove unsafe fallback code from dom.parse()Jo-Philipp Wich
Do not fallback to .innerHTML if DOMParser() failed for whatever reason. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-23luci-base: form.js: do not execute embedded script code in stripTags()Jo-Philipp Wich
Instead of relying on .innerHTML which executes embedded script code to parse a given HTML fragment, use dom.parse() which utilizies DOMParser() internally in order to extract textContent in a safe manner. Fixes: FS#4199 Ref: https://bugs.openwrt.org/index.php?do=details&task_id=4199 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-09luci-base: cbi.js: properly handle non-strings in `%h` and `%q` formatsJo-Philipp Wich
Only replace null, objects and function values with the empty string but return booleans and numbers as strings. Spotted while debugging #5587. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-09luci-base: ui.js: avoid error tooltips overlapping dropdownsJo-Philipp Wich
Fixes: #5588 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-09luci-base: form.js: implement AbstractValue.retain propertyJo-Philipp Wich
The new `retain` boolean property controls whether the related option value is purged from the configuration when the dependencies of the option are not satisifed. Ref: #5579 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-02Merge pull request #5540 from jow-/wireguard-peer-gridsectionJo-Philipp Wich
Implement nested grid section support and use it for wireguard peer config
2021-11-23luci-base: cbi.js: properly handle falsy values in cbi_update_table()Jo-Philipp Wich
Fixes: #5544 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-22luci-base: form.js: allow nesting Grid and Table sectionsJo-Philipp Wich
Implement a simple view stack within the modal overlay to allow the modal edit dialog of a table or grid section to render another table or grid section which recursively opens another modal edit dialog. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-18Merge pull request #5442 from lvoegl/validation-error-popup-messageJo-Philipp Wich
luci-base: show validation message in save error
2021-11-16luci-base: luci.js: fix undefined variable access in Request.request()Jo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-11luci-base: widget.js: use firewall.getZoneColorStyle() in zone widgetsJo-Philipp Wich
Use the new `firewall.getZoneColorStyle()` helper to apply background color styles. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-11luci-base: firewall.js: add getZoneColorStyle() helperJo-Philipp Wich
The getZoneColorStyle() function will produce CSS style properties that describe the color value of the zone. The color declaration is divided into a CSS variable called `--zone-color-rgb` which holds the RGB value of the color and a `background-color` property assigning these values as background property. This allows themes to override the color with derived values, e.g. by applying an alpha channel. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-10luci-base: network.js: ignore wireless ifname patterns on retrieving devicesJo-Philipp Wich
Only treat the given identifier as Linux netdev name if we can find a corresponding entry in the device info cache and do not consider strings starting with "wlan", "ath" or "wl" to be existing devices. This fixes incorrectly adding wireless sections as ifnames to network interfaces when the wifi-iface section name begins with one of the `iface_patterns_wireless` patterns. Fixes: #5069 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-11-10luci-base: tools.widgets: adjust zone selector dropdown markupJo-Philipp Wich
No functional changes but required for styling rules. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-10-28luci-base: add legacy directory, file and device validator JS stubsJo-Philipp Wich
Fixes: #5466 Signed-off-by: Jo-Philipp Wich <jo@mein.io>