Commit graph

59 commits

Author SHA1 Message Date
Jo-Philipp Wich
a453f2b9d0 luci-base: cbi.js: fix passing multiple dropdown values in change event
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-14 20:46:04 +01:00
INAGAKI Hiroshi
c3225c7012 luci-base: fix translation issues
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-11 15:24:18 +09:00
Jo-Philipp Wich
9dda4c651c luci-base: cbi.js: add client-side hexstring datatype validator
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:13:39 +01:00
Jo-Philipp Wich
f4c39dd6ff luci-base: cbi.js: add heuristics to attribute handling in E()
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-05 11:11:46 +01:00
Jo-Philipp Wich
7c78218339 luci-base, themes: rework dynlist and dropdown widgets
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:05:12 +01:00
Jo-Philipp Wich
c2b5709988 luci-base: cbi.js: rework dropdown implementation
- 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-05 11:01:45 +01:00
Jo-Philipp Wich
6b8fc99fd5 luci-base: cbi.js: utilize node.closest() if available
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-05 11:01:45 +01:00
Jo-Philipp Wich
911d540cbb luci-base: cbi.js: drop cbi_bind()
Just use node.addEventListener() directly since all reasonably recent
browsers support it nowadays.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Jo-Philipp Wich
7337872aa1 luci-base: cbi.js: rework client side input validation
- Refactor and fix datatype validation functions
 - Turn the type compilation and validation into a proper class
 - Display tooltip with error hint on invalid inputs

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Jo-Philipp Wich
51fb04f6e0 luci-base: cbi.js: fix corner case in IPv6() address parser
The implementation allowed a hexadecimal string without any colons.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Jo-Philipp Wich
7f613be500 luci-base, themes: add tooltip helpers & styles
Add the required JS and CSS infrastructure to support rich hover/focus
tooltips for element.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Jo-Philipp Wich
31bce2455f luci-base: cbi.js: switch to client side translation
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Jo-Philipp Wich
ab405edfb6 luci-base: cbi.js: add client side translation infrastructure
Implement the string hash algorithm used by LuCI's translation system in
JavaScript and provide a `_()` translation wrapper function to lookup
messages in the global string table.

Once client side translation loading is activated in a later commit,
JavaScript code can use the same string translation mechanism as server
side Lua code, e.g. `_("Static Routes")` would yield "Statische Routen"
when the German translation is loaded.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-11-05 11:01:45 +01:00
Stefan Weil
ec63339ae5 Add missing variable declarations in JavaScript code
This fixes errors reported by LGTM.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-10-28 22:38:20 +01:00
Jo-Philipp Wich
9e6949849d luci-base: fix cbi dropdown quirks with MS Edge
On MS Edge, the behaviour of "value" attributes on "li" elements is
unreliable, so use the "data-" prefix to circumvent the problem.

Ref: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/19320991/
Fixes: #2224
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-10-17 08:07:48 +02:00
Jo-Philipp Wich
c15d2d0474 luci-base: cbi.js: remove dead code
Remove some superfluous code which was added with a previous commit.

Fixes: 8270f10f1 ("luci-base: cbi.js: code cleanups")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-10-11 08:02:38 +02:00
Jo-Philipp Wich
8270f10f16 luci-base: cbi.js: code cleanups
- unify code style
 - add matchesElem() helper
 - replace nodeName checks with selector tests
 - replace className manipulations with classList operations

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-10-11 07:58:51 +02:00
Jo-Philipp Wich
0b6ae96f2d luci-base: cbi.js: recognize invalid input in dropdown create field
This is required to allow for validating the create field values in
later commits.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-10-10 08:29:02 +02:00
Jo-Philipp Wich
590d1cc74f luci-base: cbi.js: fade to-be-deleted section when hovering delete button
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-07-23 15:06:26 +02:00
Jo-Philipp Wich
875b561875 luci-base: cbi.js: use adjacent button dynlist add/remove buttons
Change the cbi.js code to create  a div based button element instead of an
image button.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-07-23 14:31:40 +02:00
Jo-Philipp Wich
7b43e81c9b luci-base: cbi.js: add cbi_submit() helper
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-07-18 12:05:05 +02:00
Jo-Philipp Wich
6cda8e6dab luci-base: cbi.js: avoid setting empty cell title attributes
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-07-09 11:51:43 +02:00
Jo-Philipp Wich
260d2cc44e luci-base: cbi.js: add NodeList.forEach() polyfill for IE 11
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-07-09 11:51:43 +02:00
Jo-Philipp Wich
c4bd6fb7b9 luci-base: cbi.js: add tooltip handling and responsive table helper code
- make findParent() globally available
 - add code for initializing rich cbi tooltips
 - introduce cbi_update_table() helper to auto-assign responsive attributes
   to table markup

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-06-22 15:14:40 +02:00
Jo-Philipp Wich
9d48490729 luci-base: add markup, JS and CSS for new dropdown
This commit introduces the required code for a new, markup based dropdown
widget which can be used as a styleable alternative to select boxes or
radio/checkbox button groups.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-06-08 08:14:36 +02:00
Jo-Philipp Wich
c3da1fc232 luci-base: cbi.js: remove unused serialize functions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-05-30 16:04:07 +02:00
Jo-Philipp Wich
d1df5a6b7d luci-base: cbi.js: fix cbi_row_swap() after recent table markup changes
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-05-30 15:59:52 +02:00
Jo-Philipp Wich
79c82237e3 luci-base: add element creation helper to cbi.js
Add a new helper function `E()` to cbi.js which can be used to conveniently
build HTML markup.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-05-28 15:18:45 +02:00
Jo-Philipp Wich
70ffbe65a0 luci-base: add a strict flag to the hostname validator
Some applications, e.g. dnsmasq, do not allow hostnames starting with an
underscore, therefor extend the existing hostname datatype validator with
a `strict` which disallows a leading underscore.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-04-04 23:21:53 +02:00
Jo-Philipp Wich
de4f1c9046 luci-base: rework client side IP validation types and support "hostid" type
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-02-16 17:05:48 +01:00
Jo-Philipp Wich
fbe7f90eed luci-base: fix client side "host" datatype validator
Fixes #1413.

Reported-by: Wojciech Jowsa <wojciech.jowsa@gmail.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2017-10-25 14:23:47 +02:00
Yousong Zhou
3809bd6ffb luci-base: datatypes: add cidr, ipnet validator type
- Rewrite ipmask to use these subtypes
- Add ip{4,6}prefix validators to cbi.js

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
2017-08-22 20:19:49 +08:00
Jo-Philipp Wich
4c9ae3f615 luci-base: cbi.js: fix handling of inverse-depends, combobox validation
- Properly handle logic for evaluating inverted dependencies means
   when depending on another field *not* having a given value

 - Perform datatype validation *after* populating combobox choices to
   avoid triggering a false-positive when validating an .rmempty = false
   combobox during form instantiation

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2017-07-28 16:14:53 +02:00
Yousong Zhou
c759500d49 luci-base: fix loading fold.gif for filebrowser
cbi_init() needs to be called at the end of the page to initialize
cbi_strings with "[data-strings]" while cbi_browser_init() happened
before that.

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
2017-07-21 20:34:46 +08:00
Jo-Philipp Wich
e4b1bb3156 luci-base: ipmask, ipmask4 and ipmask6 validators
These validators accept IP address specifications in the form

 - address
 - address/bits
 - address/netmask

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2017-01-23 16:15:22 +01:00
Jian Chang
260a24aadb luci-base:adjust the code order
The `cbi_validate_field` should be after data initialized.

Signed-off-by: Jian Chang <aa65535@live.com>
2017-01-03 19:00:53 +08:00
Jo-Philipp Wich
6a11f71758 luci-base: cbi.js: handle undefined arguments in formatting
Fix the JavaScript String.format() to not trigger an exception if the argument
for an escaped format like %h or %q is undefined.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-08-04 11:45:30 +02:00
Jo-Philipp Wich
3b86fd1d1b luci-base: cbi: fix button handling for dynamic lists
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-19 17:21:06 +01:00
Jo-Philipp Wich
99f5d4e902 luci-base: cbi.js: properly round down numbers for %u and %d patterns
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-17 16:33:34 +01:00
Jo-Philipp Wich
a860de860a luci-base: cbi.js: string formatting fixes
* Fix left and right justify/padding in formats
* Do not emit decimal numbers for small values in %m format

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-15 12:45:42 +01:00
Jo-Philipp Wich
9ce798abd4 luci-base: cbi: properly handle dependant elements without parent
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-10 19:29:34 +01:00
Jo-Philipp Wich
58e2f557da luci-base: cbi: only spawn dynlist sub-comboboxes if choices are available
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-10 18:23:39 +01:00
Jo-Philipp Wich
6d126649f0 luci-base: cbi: further refactoring
Eliminate more inline scripts in favor to global initialization, use a global
object for sharing fixed strings instead of passing them to each invocation.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-10 18:11:49 +01:00
Jo-Philipp Wich
cd85ef388c luci-base: fix dependency handling of optionals (#645)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-02-09 16:12:02 +01:00
Jo-Philipp Wich
7b7783f0ee luci-base: cbi: optimize tab hide logic
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-19 10:36:54 +01:00
Jo-Philipp Wich
6f688a3265 luci-base: cbi: fix event binding js
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-19 10:36:54 +01:00
Jo-Philipp Wich
2bd428ad8a luci-base: cbi: prevent unintended focus on combobox init
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 20:14:47 +01:00
Jo-Philipp Wich
5eaf4cc489 luci-base: cbi: refactor event handling js
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 19:34:02 +01:00
Jo-Philipp Wich
808c1b77f9 luci-base: cbi: fix reverse field order after dependency change
When fields got removed and readded due to unsatisfied dependencies, they
got inserted in reverse order into the dom.

Fix this issue by properly passing the element index.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 18:59:19 +01:00
Jo-Philipp Wich
b50471787f luci-base: refactor cbi dependency handling code
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-18 17:05:36 +01:00