- Set src/dest defaults only in initial section create state, otherwise it
is impossible to specify output rules
- Get rid of dest_remote/dest_local widget switching and implement change
logic directly in tools.widgets.CBIZoneSelect
- Remove leftover debug code
Ref: https://github.com/openwrt/luci/issues/2889
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Attempt to properly report the scan status by treating 404 replies as
not yet completed scans and empty array replies as successful scans
that did not yield any results.
Fixes: #2874
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>
Insteado f displaying only the primary/delegated address, display all
configured IP addresses in the upstream interface boxes, similar to
the interface overview page.
Fixes: #2757
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The getWifiNetidBySid() helper returns an array containing the network id
and the corresponding radio name, not just the id.
Fixes: #2846.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This is required to properly reload the configurations after applying uci
changes that solely consist of uci section ordering operations.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a tools.widgets library which bundles a number of useful, higher
level CBI widgets like firewall zone list or network interface dropdowns
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rework validation error translations for compount operators such
as list() or neg() to not rely that much on specific native language
grammar.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add support for extended section syntax notation in @type[#] format and
refactor the package loading function to not load configurations twice
when a package load operation is already pending and another load request
is made for the same package.
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>
Calling abort() on a finished xhr object will clear properties such
as status which can confuse code relying on legacy LuCI request
helper functions.
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>
Implement new ubus rpcd backend calls for later use in the frontend:
- netdevs: dump information about Linux network devices present
- boardjson: dump /etc/board.json if present
- offload_support: query whether netfilter offloading is supported
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Properly handle ubus POST requests exceeding the default chunk size
and fix a possible nil dereference when rejecting incoming requests
due to bad JSON message framing.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new tools.prng JS library which implements the musl libc
srand() and rand() calls to produce identical pseudo random number
sequences in the browser which is needed for the string to color
conversion later on.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Refactor L.require() to use L.raise() instead of L.error() to signal
class loading failures. This allows callers to handle class loading
errors in a graceful manner.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Factor out an L.raise() function out of L.error() which constructs and
throws an exception object.
Rework the remaining L.error() function to internally use L.raise() to
construct exceptionts to render.
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>
Now that LuCI.Request is transparently coalescing requests, there
is no need for the rather cumbersome batch()/flush() api in rpc.js.
Also refactor the code to get rid of the rpcRequestRegistry indirection
and remove superfluous promises which simplifies the code a lot.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Extend LuCI.Request to automatically coalesce subsequent requests
to ubus resources into single batch requests.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Implement setters and getters for the base URL prefix used and also
implement a session ID getter while we're at it.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new LuCI.Poll class which is able to repeat any
promise based function and not strictly tied to HTTP request
semantics.
Also rework LuCI.Request.Poll and XHR.Poll as well as
LuCI.start(), LuCI.stop(), LuCI.halt() etc. to redirect to
the new api.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Fix discovering base url if cache buster is appended to luci.js href
- Fix extracting require tokens in minified sources
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a new client side form.js library which is a more or less direct
reimplementation of the Lua side cbi.lua in JavaScript.
Due to its client side nature, it supports a number of features which
would be hard to realize on the server side, such as drag&drop sorting,
modal sub-map dialogs, reload-free editing etc.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
The former name "Flashmemory write access" is wrong. The triggers also
indicate read/erase access to the flash memories.
Signed-off-by: Martin Schiller <ms@dev.tdt.de>
* fix escaping of magic lua chars (#2800)
* fix redundant second gsub line in shellstartsqescape function
* fix return value of shellstartsqescape function
Signed-off-by: Dirk Brenken <dev@brenken.org>
Modify the process status filter to allow also the processes
with a nice value to be visible on the Status/Processes page.
Filter out the top process itself.
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
commit 8a34a54b6aa6 ("base-files: use OPENWRT prefix for os-release
variables") changes the prefix of the os-release variables from LEDE_
to OPENWRT_. Use the new name.
Signed-off-by: Bjørn Mork <bjorn@mork.no>
When a value identical to the stored one is submitted, the CBI framework
will not emit an option write event and therfore not store the value in
the form data dictionary passed to SimpleForm.handle().
This usage pattern usally works be accident for file editor views such
as admin_system/crontab because \r\n windows style line endings are
substituted with unix \n ones before writing the data, defeating the
equality check in CBI.
When a single line without trailing newline is submitted however, the
CBI will not see a difference to the data stored in the file and clear
out the value on subsequent saves.
This commit alignes the logic used by various SimpleForm views to
behave identically and predictable:
- File data is handled in the SimpleForm.handle() callback
- The forcewrite property is used to disable equality checks
- Submission of an empty string empties the backing file
Fixes: #2737
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Currently only the dnsmasq lease file is read for hostname hint. If someone use only odhcpd as dhcp daemon the hostname resolution on wifi_assoc list is broken.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Move duid_to_mac function from status.lua to sys.lua.
Implement translation from DUID-LL without header to MAC
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
The following changes are included:
* properly handle "Präfix" as neuter
* add missing hyphens to many appearances of "Präfix"
* fix spelling
* add few missing translations
Signed-off-by: Lars Kruse <devel@sumpfralle.de>
Currently the lookup loop is very inefficient. This improve the lookup loop by moving the entities to a separate array and adds them only one time. Every entities is checked 3 times, after that it will be moved to dns cache as a raw addres (not resolved). This also introduce the Type column to identify common packet using the source port.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Since openwrt-18.06 the auto option is set/unset if we press
connect/disconnect on the interface page. So I think we should move this
to the general tab so that we see at once if this is started on boot or
not.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Currently on the system status page the the memory usage is shown in kB
only. If you have a system with 1 GB of Ram its hard to read the large
numbers. This automatically formats the byte numbers more human readable
into KB / MB / GB.
Submitted-by: Claudio Marelli <camarelli@gmx.net>
[squash commits, rewrap commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Switch the LuaSrcDiet download to direct cached SCM clones and
fix the tarball name while we're at it.
Supersedes: #2522
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
In some situation it is usefull to inform the use that this section
could not get delete, because this config is referenced or is in use.
Example pseudo code:
function s.remove(self, sid)
<check if secation could get deleted>
if output == nil then
self.error_msg = translatef("Unable to remove this section")
return nil
end
end
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Especially for systems without RTC this change has two advantages
* manual time sync with time server during configuration
* test possibility of the time sync over the configured servers
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
This checks if the installed hostapd supports SAE and allows to select
WPA3 Personal SAE in that case.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Even Freifunk was one of the major factory to create the LuCI-system, it's
now only a very small part of LuCI. LuCI has become a much bigger thing
and it seems that it's time to move the packages only relating to Freifunk
into it's own feed.
On the mailinglist it was discussed [1] and a repo below the general
Freifunk team on github was created.
This commit removes all packages that will be hosted in the new repo [2]
1 - http://lists.freifunk.net/pipermail/wlannews-freifunk.net/2019-February/004818.html
2 - https://github.com/freifunk/openwrt-packages
Signed-off-by: Sven Roederer <freifunk@it-solutions.geroedel.de>
Since the section labels are already HTML-escaped implicitely by the
striptags() function, we must not escape them again in attr() or
ifattr().
Fixes: #2524
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Extend the attr() and ifattr() template functions to take an optional
further parameter indicating that the passed value should not be escaped.
This is needed for cases where the input already is escaped through
other means, e.g. when the value was previously filtered through the
striptags() template helper.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rework the regexp pattern to allow both IP addresses without mask
and IPv6 addresses with netmask instead of CIDR notation.
Fixes: #2495, #2530
Fixes: f6bfac211 ("luci-mod-status: rework iptables status page")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Drop the "secret" value from RPC session objects in order to make them
compatible with ordinary web sessions used by the LuCI web interface.
That secret value was never used for anything and is the only difference
compared to normal LuCI login sessions.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The get_all() function has changed and how it was used before no
longer works properly. These changes not only change to individual
get() calls, but actually adds to the readability of the code and reduces
file size.
Signed-off-by: pmelange <isprotejesvalkata@gmail.com>
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>
Update timezone data to 2018i
http://mm.icann.org/pipermail/tz-announce/2018-December/000053.htmlhttp://mm.icann.org/pipermail/tz-announce/2018-December/000054.html
2018h:
* Qyzylorda, Kazakhstan moved from +06 to +05 on 2018-12-21.
* New zone Asia/Qostanay because Qostanay, Kazakhstan didn't move.
* Metlakatla, Alaska observes PST this winter only.
* Guess Morocco will continue to adjust clocks around Ramadan.
* Add predictions for Iran from 2038 through 2090.
2018i:
* São Tomé and Príncipe switches from +01 to +00 on 2019-01-01.
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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>
Replace all XHR poll time number with -1 so they will use the default
poll interval time value from "/etc/config/luci". If this is not set then
5 seconds as default is used.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
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>
When an interface configuration specifies both "option ipaddr 1.2.3.4/24"
and "option netmask", then netifd will ignore the netmask in favor to the
prefix encoded in the cidr string.
Support this variant as well by treating a sole cidr string value as
singöe-item cidr list.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- 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>
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>
Not every user knows which trigger does what. To make this clear, the
triggers are now translated with a short help text.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
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>
Multiple iptables listing commands might be triggered in parallel due
to the XHR polling, so use the -w flag to wait for the lock to become
free.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Use the same ordering logic for building the dispatch tree and for
querying the children of a given node.
Fixes#2338.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This feature was never used, is hardly documented and appears to be
designed to fiddle with the internal dispatch tree state.
Given that, simply drop the related code to simplify the dispatcher
class somewhat.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The default for 802.11r option ft_psk_generate_local
was changed a few months ago by openwrt/openwrt@3cc56a5
That change was a bit awkward, as it made hostapd to
overlook the possibly existing r0kh values by default
unless the user explicitly disables the new default.
Adapt LuCI by changing the default for ft_psk_generate_local
into 'enabled'.
But ensure that LuCI does not delete the existing key values
by not making the r0kh and r1kh fields to depend on this.
Note that this is just a quick fix for the wrong default value
causing problems, but not yet a complete fix for all the options.
In the long run it might be better to make the detail options
to depend on local generation.
Reference also to LuCI PR #2102
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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>
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>
Commit 94d8c9a7a accidentally overwrite the rewording of strings made in
an earlier commit.
Fixes: 94d8c9a7a ("luci-base: simplify apply widget code")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Split password, dropbear and SSH key configuration into separate pages in
order to improve the form layout and to simplify the code.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- 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>
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>
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>
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>
Send a custom LuCI X-Header to indicate that a login is required to access
the requested resource. This is mainly intended for xhr.js to be able to
intercept such responses and popup an authentication dialog.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This provides a more accurate description for the theme selection.
Signed-off-by: Angus Ding <angus.ding@gmail.com>
[reword commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a button to each row in the wireless assoclist table to allow
disconnecting clients using the ubus del_client method if the underlying
radio interface supports it.
Ref: https://github.com/openwrt/luci/pull/2271
Submitted-by: Wang805447391 <805447391@qq.com>
[move deauth function to luci-base next to the existing assoclist function,
require post security, fix parameter check condition, hide button if not
supported by the radio, disable button after call, squash commits, fix
whitespace, reword subject, add commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Move the old luci.model.ipkg utility class into a separate package and
let the components using it depend on the new library package.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Switch the system controller to the common luci.sys.process.exec() function
and drop the local ltn12_popen() and fork_exec() helpers.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rework the parameter handling to both prevent a crash when no parameter is
given and to prevent root command injection through the mtd index part of
the parameter value.
Fixes: 9840d310e ("modules: add backup module for mtdblock devices")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Drop embedded CSS in favor to new global rules
- Drop extraneous include of cbi.js
- Use showModal() facilities
- Fix a cosmetic bug in countdown timeout handling
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
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>
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>
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>
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>
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>
Commit 7c7821833 ("luci-base, themes: rework dynlist and dropdown widgets")
changed the way we initialize dynamic lists on client side, avoiding the
need for pre-rendering the items on the server side.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The filesystem option doesn't include additional filesystem included with /etc/filesystems, this is usefull if someone have ntfs-3g installed and wants to force use the external utility to mount partition instead of the default present in the kernel (if it's supported)
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
'non-wildcard' interfaces enables dnsmasq's '--bind-dynamic' mode.
This binds dynamically to interfaces rather than wildcard addresses
*and* keeps track of interface comings/goings via a unique Linux api.
Quoting dnsmasq's author "bind-dynamic (bind individual addresses,
keep up with changes in interface config) ... On linux, there's actually
no sane reason not to use --bind-dynamic, and it's only not the default
for historical reasons."
listen/exclude interfaces may be used independently of bind dynamic mode
so removed the bogus dependency of 'nonwildcard' enabling access to
'listen/exclude' interfaces - they may be used in any mode.. In fact
the dnsmasq init script takes notice of include/exclude interfaces
irrespective of the 'nonwildcard' parameter.
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Give the user the possibility to define and interface for the netdev
trigger which is not available at the moment. This is usefull if a
interface is not presented on configuration time.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
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>
Thanks to a recent commit, the translation files will now
have info about locations where the string is used. That
can help is deciding the correct translation, as all contexts
are more easily found.
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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>
- 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>
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>
- 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>
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>
Add a new /admin/translations/ endpoint which exposes the loaded system
translations as JavaScript file.
Once referenced by <script>, the endpoint will create a `window.TR` object
containing the entire translation string table for use on the client side.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Drop load(), loadc(), string() and stringf() from the luci.i18n class since
these functions are either no longer unused or were never used to begin with.
Also slightly rework the module to only use local symbols and unify the
module require style.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The i18n.loadc() function has been a no-op since almost six years so it
makes no sense to invoke it anymore.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rework the setlanguage() implementation to actually switch catalogues
if another language has been loaded previously and change it to return
the effectively loaded language tag.
Also improve input parameter validation and accept tags in both lower
or upper case.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new luci.template.parser.get_translations() function which will
iterate all loaded translation entries and pass the to the given callback
function.
This is useful to expose the loaded translations in other formats, e.g. for
wrapping them into JSON feeds.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add missing translations and update existing not quite correct translations.
Also removed unnecessary dots at the end of some translations.
Signed-off-by: Anton Kikin <a.kikin@tano-systems.com>
Update timezone data to 2018f
http://mm.icann.org/pipermail/tz-announce/2018-October/000051.html
Volgograd moves from +03 to +04 on 2018-10-28.
Fiji ends DST 2019-01-13, not 2019-01-20.
Most of Chile changes DST dates, effective 2019-04-06.
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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>
Since commit f6bfac211 ("luci-mod-status: rework iptables status page"),
nothing in luci-base depends on the iptparser class anymore, so fold it
out into a separate package and let the few apps that require it depend
on the new library package.
Saves about 10K uncompressed in luci-base while the iptables status
rework enlarged the markup by roughly 5KB, saving roughly 5KB of size
overall.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The zone forwarding list widget misleadingly displays the intra-zone
forwarding policy as default policy action when no forwardings exist
instead of the appropriate global defaults forwarding policy which is
the one applied to inter-zone forwarded traffic.
Fix the issue by displaying the defaults policy and not the per-zone
policy to match what the firewall implementation is actually doing.
Fixes: #2213
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
When creating a new zone through the firewall zone selector widget,
validate the given name before creating new items.
Depends on commit 0b6ae96f2 ("luci-base: cbi.js: recognize invalid
input in dropdown create field").
Fixes: #2211
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
It's completely OK to select a bridge as the underlying interface of
other interfaces, say a tunnel or PPPoE. The only case which should be
forbidden is bridge over bridge.
Signed-off-by: David Yang <mmyangfl@gmail.com>
Rename "Apply unchecked" to "Apply anyway" for better clarity and update
the base translation files accordingly.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This option is usefull to solve some problems with ath10k-ct and random client disconnect. This also adds some extra option to tune inactivity settings
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Prevent an incorrect / misleading "There are no changes to apply" message
from popping up when adding a new SSH key to the text box.
Fixes#2048.
Signed-off-by: Dirk Brenken <dev@brenken.org>
[reword commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
If we add a new wifi-iface to the config then the iface will start at once.
But normaly we would configure the wireless security in the next step.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Correct a typo that prevents displaying the interface IPv6 address in
some cases.
Fixes: #2166
Reported-by: Vladislav Grigoryev <20725816+vgaetera@users.noreply.github.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
After this change, luci-base will render the first module or application
page installed on the system, instead of rendering a "Component not found"
message when the status category is unavailable.
This allows for single-purpose LuCI installations like e.g. luci-base with
luci-app-travelmate which only presents application specific views without
any of the standard system pages.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The firstnode target will dispatch the request to the first eligible menu
subtree node that is not a redirect to another node, a special action or
post security enabled page.
That action is specifically useful for global category toplevel nodes like
"admin" which are supposed to simply direct access to the first installed
page node without having to hardcode specific choices.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Move some common elements to luci-base, and otherwise make three
packages out of status, system, and network. They were mostly
separated already, but there were some shared elements between
status and network that are now in luci-base.
Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
Per the discussion in https://github.com/openwrt/luci/issues/869, make
luci-base sufficient to login, logout, and review and apply or revert
uci changes. This allows most luci-app-xxx to work without having
luci-mod-admin-full installed.
It has been tested with some apps and not luci-mod-admin-full, as well
as with luci-mod-admin-full (to make sure the usual case doesn't break).
Instead of creating a new module namespace (e.g. 'Base') we reduce the
opportunities for breakage by having luci-base take over the 'shell' of
the 'Administration' (admin/....) namespace.
Since admin is assumed by all current building LuCI components (including
Freifunk), this doesn't introduce the 'Administration' tab into any
situation where it would not already be present (but includes it where it
was before).
We also add a "Component not installed" page to avoid fatal errors and
backtrace when e.g. luci-mod-admin-full is not installed.
Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
Several devices have multiple upstream interfaces, for example a fixed
and a mobile broadband connection. Currently, only one upstream
interface is shown per address family in Luci. So in my example, one of
the interfaces would not appear on the Status-page.
This PR introduces support for showing multiple upstream interfaces on
the Status-page. The code is not very complicated. get_status_by_route()
has been extended to return a list of all routes, and
get_wannet()/get_wan6net() now returns all upstream interfaces.
I could not find any other (active) users of these three functions than
calls triggered from the Status-page, so changing the default behavior
should be fine. get_wandev()/get_wan6dev() called get_status_by_route(),
but I could not find any place where those functions were called. I
removed the dev-functions instead of keeping the old
get_status_by_route().
On the status page, the wan/wan6-variables have been replaced with
arrays. When populating the html, we now iterate through these arrays
and create one element for each interface.
I have tested the code with different interface types, v4, v6, as well as
disconnecting and connecting interfaces. The status is updated and the
correct interfaces (or sometimes none at all) are shown.
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
* allow 'forced' firmware upgrades, even if the image format check
fails. Useful where flashing back to the OEM versions or switching
between ar71xx and ath79 builds
* option is only visible after first/failed image check
* added warning info (see screenshots below)
Signed-off-by: Dirk Brenken <dev@brenken.org>
The applyreboot page doesn't reload the page onload of the loding gif. This adds the right function.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
- Use native rpcd uci changes format instead of incompletely converting
back and forth between the old and the new format
- Rework uci changelog template to print the equivalent uci commands
for the various changes
- Rework theme headers to properly count the uncomitted changes
- Rework theme CSS to properly style new changelog
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This improve applyreboot page and fix problem with luci-nginx that doesn't refresh the page when the router reboot.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
This patch corrects "to get" to "to be" in apply_widget.htm
This shell command was used to find and make the change in
all impacted files:
find . -type f -exec sed -i 's/Waiting for configuration to get applied/Waiting for configuration to be applied/g' {} +
Signed-off-by: Gregory L. Dietsche <gregory.dietsche@cuw.edu>
Line attenuation, signal attenuation, noise margin and aggregate transmit power really need to show
decimal digits. Fixes commit 88713f6 from issue #2003 due to excess changes from %s to %d.
Rework the apply confirmation mechanism to be session agnostic in order to
circumvent cross domain restrictions which prevent the JS code from issuing
apply confirm requests in some cases, e.g. when changing the LAN IP.
Confirmation calls may now be done from unauthenticated pages, as long as a
matching confirmation token is sent along with the request.
The reasoning behind this is that there is little security impact in
confirming pending apply sessions, especially since those sessions can only
be initiated while being authenticated.
After this change, LuCI will now launch a confirmation process on every
rendered page when a rollback is pending. The confirmation will happen
regardless of whether the user is logged in or not, or if the current page
is a CBI form or static template.
A confirmation request now also requires a random one-time token which is
rendered along with the confirmation JavaScript code in order to succeed.
This token is not meant to provide security but to ensure that the confirm
was triggered from an interactive browser session and not some background
HTTP requests that happened to end up in the admin ui.
As a consequence, the different apply/confirm/rollback code paths in CBI
maps and the UCI change/revert pages have been consolidated into one common
implementation residing in the common global theme agnostic footer template.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Also add a hidden type password field to prevent browser autocompleters
from entering the login passwords into fields liek the wireless WPA key
field.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a "data-description" attribute to CBI fields which have a description
set, this allows responsive design themes to render a field description
when decomposing the table grid.
Also reuse the precalculated "typename" property if it exists, instead of
deriving it from the template name yet again.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The previous refactoring of the template caused the row stripying CSS
classes to be interpolated in such a way, that a separating space to
previous CSS classes was missing, leading to not rendered row names
and other side effects.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>