summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/htdocs/luci-static
AgeCommit message (Collapse)Author
2019-07-07luci-base: cbi.js, ui.js: add custom validation callbacks, new ui widgetsJo-Philipp Wich
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>
2019-07-07luci-base: add client based view actionsJo-Philipp Wich
Introduce a new view() target for CBI dispatch nodes, as long with the required template and plumbing work in luci.js to allow requiring view classes. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: tweak error handlingJo-Philipp Wich
If the ui class is loaded, use its modalDialog facility to display runtime errors, alternatively render them into the maincontent area. Also prevent duplication of stack trace information and throw a low level error on session expiration to allow higher layers to properly handle it. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: replace uci change pages with client side modal dialogJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: add uci.js and rpc.js classesJo-Philipp Wich
Add a new rpc.js class which provides low level facilities to exchanges messages with the ubus rpc endpoint. Also introduce a new uci.js class which provides client side uci manipulation routines. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: add ubus-http gatewayJo-Philipp Wich
Add an admin/ubus route mimicking the native uhttpd-mod-ubus protocol. The main difference to the native protocol is that this gateway requires no additional per-object/procedure ACL setup on the router side and that it is located under the same prefix as LuCI itself, allowing the reuse of the session login cookie. This route is meant to be a transitional mechanism until client side RPC calls are eventually migrated to uhttpd-mod-ubus completely. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: move dropdown, combox and dynlist widget code to L.uiJo-Philipp Wich
Move the widget code to the ui class and replace it with compatibility shims in cbi.js Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: add L.dom.data()Jo-Philipp Wich
Add a new data() function which allows to attach arbitrary JS data to DOM elements. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: cbi.js: support field validation for formless inputsJo-Philipp Wich
JS CBI fields have no parent form element anymore. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: cbi.js: untangle dropdown and dynlists from dependency updateJo-Philipp Wich
In order to prepare the move of the dynlist and dropdown widgets into the LuCI ui class, remove the direct calls to cbi_d_update() and replace them with custom events instead. Extend cbi_init() to handle these custom events and to invoke cbi_d_update() when receiving them. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: add L.bind() helperJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: consolidate error handlingJo-Philipp Wich
Add a new function L.error() which creates and throws a custom error object with stack information and given type. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: convert LuCI.dom to Class instanceJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: split ui helper functions into external ui.jsJo-Philipp Wich
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>
2019-07-07luci-base: luci.js: add dynamic class loaderJo-Philipp Wich
Introduce L.require() to fetch additional JavaScript classes. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: convert LuCI to Class instanceJo-Philipp Wich
Also hijack cbi_init() and call it after the LuCI DOM setup. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: add HTTP request functionsJo-Philipp Wich
Add a fetch() inspired HTTP request utility class to luci.js and replace the old xhr.js class with a stub using the new request api. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: add class construction helperJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: add ES6 Promise polyfill for IE < EdgeJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07luci-base: luci.js: add Object.assign polyfillJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-01-05luci-base: Fix addr:port validate always failsDaniel F. Dickinson
In cbi.js there is an error which causes ipaddrport validation to always fail. JS match() return the entire match as ret[0] and individual matches (for multiple ()) as the subsequent list members. So we fix it by just fixing the index in the calls that want the individual parts. Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
2018-12-29luci-base: rework filebrowser initializationJo-Philipp Wich
Do not call cbi_init() from the browser field template but lazily initialize the field, like it is being done for all other widgets as well. Fixes: #2398 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-12-20modules: use configurable poll intervalFlorian Eckert
Make poll interval configurable. Use option from ---- config core 'main' option pollinterval '5' --- This will only be used if the interval option is less or equal zero. If the poll interval is not configured then a default value of 5 seconds is used. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2018-12-13luci-base: cbi.js: update deps on dynlist changes, honor placeholderJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-12-10luci-base: rework ui tabbing codeJo-Philipp Wich
- Instantiate tab menus on the client side - Simplify server side markup generation - Show error indicators in cbi tabs Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-12-10luci-base: luci.js: emit custom events for tooltip open/close actionsJo-Philipp Wich
The new `tooltip-open` and `tooltip-close` events allow other code to hook into the tooltip div rendering, e.g. to populate it with custom markup. Also ignore tooltip events originating from descendant elements while we're at it. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-12-02luci-base: fix ReferenceErrorJo-Philipp Wich
The showTooltip() and hideTooltip() functions have been moved to luci.js Reported-by: brv phoenix <feixuekaka1@gmail.com> Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-23luci-base: modal accessibility fix, wrap XHR.stop()Jo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-22luci-base: move DOM manipulation functions to luci.jsJo-Philipp Wich
Introduce a new luci.dom class which groups the DOM manipulation helpers such as E(), findParent(), matchesElem() etc. Provide wrappers for the old functions to ease the transition to the new functions. Also add a new widget helper function L.itemlist() which consolidates the item enumeration formatting code found on various pages. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-22luci-base: cbi.js: remove functions moved to luci.jsJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-22luci-base: introduce common JavaScript apiJo-Philipp Wich
Introduce a new script file luci.js which is included by default and intended to be the common location of functions currently scattered in cbi.js and xhr.js. The luci.js file provides a LuCI() class which - among other things - implements helpers to construct URL paths and making HTTP requests. A singleton instance of the class is instantiated as window.L upon load and preset with the necessary environment information. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-19luci-base: further hash calculation signedness bugfixesJo-Philipp Wich
- cbi.js: make sure to treat single bytes as signed char when handling end cases - template_lmo.c: make sure to treat single bytes as signed char when handling end cases, avoids hash miscalculations on ARM Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-19luci-base: cbi.js: fix sfh() signedness bug for strings with 3 trailing bytesJo-Philipp Wich
Replace a sign-propagating right shift by a zero-filling right shift to avoid calculating a wrong hash code in the three-trailing-bytes case. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-19luci-base: cbi.js: fix sfh() hash calculation over multibyte sequencesJo-Philipp Wich
The C side implementation of the hash operates on bytes while the JS variant operated on UTF-16 codepoints, leading to miscalculations on input strings containing multibyte sequences. Recode the given string to an internal UTF-8 byte representation and calculate the hash over that. Fixes client side mapping of translation strings containing non-ASCII characters. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-16luci-base: xhr.js: rework class, handle expired sessionJo-Philipp Wich
Drop very old IE compat code, restructure class, align code style with other files and properly handle JSON mimetypes with charset trailer. Also detect session related 403 errors and show a modal prompting to re-login. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: add modal dialog functionsJo-Philipp Wich
Add two new functions showModal() and hideModal() which will fade in and close an open modal respectively. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base, themes: dropdown behaviour improvementsJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: remove dead code in cbi_validate_field()Jo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: enable validation for dropdown fieldsJo-Philipp Wich
Directly attach validation handlers to cbi dropdowns as well, this allows validating dropdown choices made by the user, similar to how plain select boxes are handled by the cbi JavaScript. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: set .value property of cbi dropdown elementsJo-Philipp Wich
In order to make cbi dropdowns usable for validation and other code expecting native form elements, set the .value DOM property on the dropdown parent element whenever the selection is changed. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: properly handle cbi tooltips on nested elementsJo-Philipp Wich
Rework the tooltip event delegation logic to prevent hiding the tooltop when the cursor is moved to a children of the tooltip container element. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: avoid using .form property directlyJo-Philipp Wich
In order to prepare support for calling cbi validation on non-native form widgets, remove direct usages of the node.form property and lookup the containing form using findParent() instead. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-14luci-base: cbi.js: fix passing multiple dropdown values in change eventJo-Philipp Wich
Due to a misspelled property name, only the first value was passed in the event details. Fixes: c2b570998 ("luci-base: cbi.js: rework dropdown implementation") Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-11luci-base: fix translation issuesINAGAKI Hiroshi
Fixed several issues for translation. - add translation markup to "Expecting " - add missing ")" into "valid time (HH:MM:SS" Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
2018-11-05luci-base: cbi.js: add client-side hexstring datatype validatorJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05luci-base: cbi.js: add heuristics to attribute handling in E()Jo-Philipp Wich
If a given attribute value is a function, register it as event listener, if it is an object, filter it through JSON.stringify(), else set it as-is. This helps to reduce some boiler-plate code when building DOM structures. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05luci-base, themes: rework dynlist and dropdown widgetsJo-Philipp Wich
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05luci-base: cbi.js: rework dropdown implementationJo-Philipp Wich
- Refactor event handler closures into class methods and bind them instead - Fix quirk in dropdown placement calculation - Different dropdown placement strategy on touch devices - Broadcast custom "cbi-dropdown-change" event when value is changed - Implement setValues() method to alter dropdown selection - Prevent creating empty custom values Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05luci-base: cbi.js: utilize node.closest() if availableJo-Philipp Wich
Use node.closest() in findParent() when available since it should be faster than manaually traversing the ancestor chain. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05luci-base: cbi.js: drop cbi_bind()Jo-Philipp Wich
Just use node.addEventListener() directly since all reasonably recent browsers support it nowadays. Signed-off-by: Jo-Philipp Wich <jo@mein.io>