Commit graph

20 commits

Author SHA1 Message Date
Jo-Philipp Wich
9c7eb1decd luci-base: switch from server side to client side widget markup
Do not render standard widgets like checkboxes, select boxes,
text input fields etc. on the server side anymore but utilize
the ui.js primitives instead.

This avoids logic duplication between server side cbi templates
and JS widgets in the future.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-07-07 15:36:24 +02:00
Darius
e5071c88f0 luci-base: cbi.lua: fix TypedSection.parse()
It's not necessary to execute all code if section already exists.

Signed-off-by: Darius Joksas <jok.darius@gmail.com>
[reword commit message, squash commits, remove stray semicolon]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-09-29 14:01:49 +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
4cca96ef09 luci-base: support option aliases in luci.cbi
AbstractValue descendants may now specify a new optional property `alias`
which refers to a uci option to read/write/remove that differs from the
option name itself.

This is mainly useful for widgets that are toggled based on dependencies,
e.g. for alternating between SingleValue and MultiValue, but which are
intented to write into the same uci option.

Such a setup was previously possible already by overriding the .cfgvalue(),
.write() and .remove() callbacks with custom implementations, but that
required a lot of boiler plate code and was rather fragile.

With the `alias` property, CBI now takes care of the details and tracks
aliased fields within a section accordingly.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-06-08 07:25:54 +02:00
Jo-Philipp Wich
2d352a9251 luci-base: cbi: atomically reorder uci sections
Since the switch to ubus uci operations we do not have a local application-
side cursor cache anymore, instead uci operations happen synchronously in
the rpcd backend server.

This may cause cbi section reorder operations involving multiple elements
to fail, because anonymous section hashes may change due to rehashing
between consecutive ubus uci reorder calls.

In order to avoid that problem, use the ubus uci batch reorder extension,
which allows to pass a complete (or partial) list of section ids in the
desired order in one call, bypassing the volatile section id problem.

Fixes #1844.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-06-03 20:02:44 +02:00
Jo-Philipp Wich
8deb949551 treewide: rework uci apply workflow
Switch to rpcd based uci apply/rollback workflow which helps to avoid soft-
bricking devices by requiring an explicit confirmation call after config
apply.

When a user now clicks "Save & Apply", LuCI first issues a call to uci apply
which commits and reloads configuration, then goes into a polling countdown
mode where it repeatedly attempts to call uci confirm.

If the committed configuration is sane, the confirm call will go through and
cancel rpcd's pending rollback timer.

If the configuration change leads to a loss of connectivity (e.g. due to bad
firewall rules or similar), the rollback mechanism will kick in after the
timeout and revert configuration files and pending changes to the pre-apply
state.

In order to cover such rare cases where a lost of connectivity is expected
and desired, the user is offered an "unchecked" apply option after timing
out, which allows committing and applying the changes anyway, without the
extra safety checks.

As a consequence of this change, the luci-reload mechanism is now completely
unsused since rpcd uses ubus config reload signals to reload affected
services, which means that only procd-enabled services will receive proper
reload treatment with the new workflow.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2018-05-05 23:11:23 +02:00
Jo-Philipp Wich
61239741d8 luci-base: fix initialization of MultiValue options
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-23 17:34:53 +01:00
Jo-Philipp Wich
3f5fae2223 luci-base: add missing Lua side changes for new dependency code
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-19 08:07:28 +01:00
Jo-Philipp Wich
27281dca56 luci-base: prevent CBI map save on invalid values (#618)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-15 17:04:28 +01:00
Jo-Philipp Wich
eaf961fa70 luci-base: initialize CBI optionals on initial Map render (#618)
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2016-01-15 16:39:15 +01:00
Daniel Dickinson
b475ec699d luci-base: Make default for FileUpload 'safe'
Some files and pointers to files are not safe to remove without a replacement
file and config pointing to the file.  For instance for uhttpd application in
the works, removing the certificate or key config or files without having the
replacements in places renders the WeUI inaccessible.

The only other place where FileUpload is currently used is for wifi certificates
for which the 'safe' handling is also preferred.  Therefore make the default for
the FileUpload widget the safe handling and add a property self.unsafeupload that
allows for the old unsafe handling should it prove useful in some case.

Also allow to specify a file already on router instead of uploading a file.

Signed-off By: Daniel Dickinson <openwrt@daniel.thecshore.com>
2015-12-15 20:36:17 -05:00
Daniel Dickinson
403b939acd modules/luci-base: Move LuCI FileUpload directory to /etc/luci-uploads and save across sysupgrade
/lib/uci/upload is a rather odd place for configuration files

Also the files were not saved across sysupgrade, which is somewhat
counter-productive for configuration files.

Signed-off By: Daniel Dickinson <openwrt@daniel.thecshore.com>
2015-12-12 22:45:29 -05:00
Christian Schoenebeck
162548a879 cbi.lua: Implement "readonly" property for "Value"
cbi.lua: Implement "readonly" property for "Value"

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-10-31 23:09:40 +01:00
Christian Schoenebeck
84a57ec36f cbi.lua: Implement Flag.validate function
cbi.lua
- Implement Flag.validate function to be overwritable
- rewritten if clause for easier reading ;-)

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-10-30 18:42:38 +01:00
Jo-Philipp Wich
bd504f552d luci-base: prevent UCI changes in CBI if form is not in submit state
Only process submitted data if the "cbi.submit" parameter is present as the
dispatcher will verify the integrity of the CSRF token in this case.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-10-08 00:30:14 +02:00
Christian Schoenebeck
237740b386 cbi.lua: Fix Flag.parse() to set "self.section.changed"
Add to set "self.section.changed" on changes like other values do.

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
2015-08-02 07:06:42 +02:00
Jo-Philipp Wich
1dada8cc44 luci-base: prevent parsing the form input after cbi emergency save
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-05-26 17:32:11 +02:00
Jo-Philipp Wich
fe14cd5a66 luci-base: fallback to a simple text editor if uci config cannot be loaded
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-05-26 17:12:42 +02:00
Jo-Philipp Wich
7a3493b1f7 Globally reduce copyright headers
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-01-16 23:38:38 +01:00
Jo-Philipp Wich
1bb4822dca Rework LuCI build system
* Rename subdirectories to their repective OpenWrt package names
 * Make each LuCI module its own standalone package
 * Deploy a shared luci.mk which is used by each module Makefile

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
2015-01-08 16:26:20 +01:00
Renamed from modules/base/luasrc/cbi.lua (Browse further)