<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luci/modules/luci-base/htdocs/luci-static, branch master</title>
<subtitle>Lua Configuration Interface (mirror)</subtitle>
<id>https://git.openwrt.org/project/luci/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/luci/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/'/>
<updated>2026-09-06T18:47:04Z</updated>
<entry>
<title>treewide: wrap loose view content in cbi-section</title>
<updated>2026-09-06T18:47:04Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-09-05T16:43:28Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=9aff4652380831e40b075a6f698ca427ee59fd04'/>
<id>urn:sha1:9aff4652380831e40b075a6f698ca427ee59fd04</id>
<content type='text'>
Views that returned headings, tables and control rows with nothing around
them now wrap that content in a section: the system and kernel logs,
Processes, the nftables and iptables views, Startup, the wireless station
list, DSL stats and the package manager. The nftables rule tables also
drop an !important that no theme could override.

Nothing changes in the stock bootstrap theme; themes that draw
.cbi-section as a panel get the structure they need.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
<entry>
<title>treewide: fix textarea double scrolling issue</title>
<updated>2026-09-05T15:16:34Z</updated>
<author>
<name>Michael Pratt</name>
</author>
<published>2026-08-22T17:42:26Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=82966a62d0adb6ca0785f296f1d36e72cb9f7a3a'/>
<id>urn:sha1:82966a62d0adb6ca0785f296f1d36e72cb9f7a3a</id>
<content type='text'>
In "textarea" class elements, like the syslog,
depending on the browser, it is difficult to scroll if moused over
or after clicking or highlighting text.

The browser perceives that there is scrolling space/content within
the inner element because when the height of the element is exactly
the same size as text inside, the text padding or other invisible content
exceeds the size of the text box and the scroll bar is kept in the window.

This causes scrolling within the element with a range of just a few pixels,
and the rest of the page remains static and refuses to scroll.

To fix this add 1 to the dynamic size of the "textarea" boxes,
and also the initial values before the dynamic size is calculated.
This "+ 1" already exists in some instances of similar Javascript files.

A previous attempt at fixing this used "overflow-y" styling
but that causes undesirable behavior in some "textarea" use cases.

In some cases "+ 1" is added to both dynamic and final sizes, this can equate
to a total addition of 2 lines, which is still reasonable and proper padding,
and this promotes the habit of padding the textarea elements treewide,
no matter what example is used to modify or create the javascript for a new app.

The aria2 application ternary check for a minimum textarea size
seems to be written in reversed logic. It should likely be a minimum of 20 lines,
and the exact number + 1 otherwise, so fix that while at it.

Tested on Chrome 64-bit Windows 10.

Ref: 755061bc9e7e ("themes: remove overflow-y property...")
Signed-off-by: Michael Pratt &lt;mcpratt@pm.me&gt;
</content>
</entry>
<entry>
<title>luci-base: protocol/dhcp: add option to select the DHCPv4 client ID</title>
<updated>2026-07-21T21:02:15Z</updated>
<author>
<name>Hauke Mehrtens</name>
</author>
<published>2026-07-21T20:38:48Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=ed23f07d9f88e2b2ea0a81c609893001462206a3'/>
<id>urn:sha1:ed23f07d9f88e2b2ea0a81c609893001462206a3</id>
<content type='text'>
OpenWrt gained a per-interface "sendclientid" option which overrides the
preferred client identifier used for DHCPv4 requests. Expose it in the
advanced settings of the DHCP client protocol:

- "auto" (default) uses the explicitly configured client ID, or falls
  back to the global default DUID and finally the interface MAC address
- "global" always uses the global default DUID
- "hardware" passes no client ID to udhcpc, so the interface MAC address
  is used
- "none" omits DHCP option 61 from the requests entirely

The explicit client ID is only evaluated in "auto" mode, hence it now
depends on that setting.

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
</content>
</entry>
<entry>
<title>Revert "luci-base: protocol/dhcp: add option to disable the DHCPv4 client ID"</title>
<updated>2026-07-21T21:02:15Z</updated>
<author>
<name>Hauke Mehrtens</name>
</author>
<published>2026-07-21T20:33:08Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=14690cf01237ed6d4cfe4dd44d53b3b74627e093'/>
<id>urn:sha1:14690cf01237ed6d4cfe4dd44d53b3b74627e093</id>
<content type='text'>
This reverts commit 9e70fd02f8e55f9b311a49957de6e42c0b152b5a.

OpenWrt main tree merged a different implementation.

Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
</content>
</entry>
<entry>
<title>luci-base: don't crash in String.format() on an undefined argument</title>
<updated>2026-07-20T19:39:40Z</updated>
<author>
<name>Cristian Papa</name>
</author>
<published>2026-06-28T01:27:06Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=8deadcf01d549ce1c51ba13a2bb125683e52852d'/>
<id>urn:sha1:8deadcf01d549ce1c51ba13a2bb125683e52852d</id>
<content type='text'>
A `%&lt;n&gt;m` conversion stores its divisor in the min-length slot, but when
the argument was undefined the `if (param !== undefined)` block was
skipped, so the divisor was never cleared while `subst` stayed undefined
and the trailing `subst.toString()` in the padding loop threw.

Use an empty substitution for an undefined argument and preserve the
parsed field width, so values such as `'%10s'.format(undefined)` render
as padding plus an empty string (ten spaces). `%m` stays special: it
reuses the min-length slot as the metric divisor, not a field width, so
clear it for undefined `%m` conversions just like the defined-argument
path does, to avoid padding the empty value out to ~1024 characters.

Also move the pad initialization ahead of the `param !== undefined` check
so the common padding block has a valid pad character for undefined
arguments too.

As a side effect a plain `%s`/`%d` on an undefined argument now yields an
empty string instead of the literal "undefined".

Signed-off-by: Cristian Papa &lt;pcristian292@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-base: fix undefined View reference in instantiateView()</title>
<updated>2026-07-20T19:37:07Z</updated>
<author>
<name>Maxim Skokov</name>
</author>
<published>2026-07-01T11:09:19Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=b27f781d13fcb6693cd020cb7447de45a4127189'/>
<id>urn:sha1:b27f781d13fcb6693cd020cb7447de45a4127189</id>
<content type='text'>
instantiateView() guarded against invalid view modules with:

  if (!(view instanceof View))

but View (capital V) was never declared or imported in ui.js, causing
a ReferenceError whenever the guard was reached. Additionally,
L.require() returns a class instance rather than a constructor, making
instanceof conceptually incorrect here regardless.

Replace with a duck-type check on the render() method, which all valid
LuCI view modules are required to implement. This preserves the
fail-fast behavior for invalid modules without introducing a circular
dependency or relying on an undefined identifier.

Also fixes two pre-existing no-useless-escape lint errors in the same
file (lines 3365 and 5105) that were surfaced by ESLint when the file
was touched.

Signed-off-by: Maxim Skokov &lt;skokov.m020709@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-base: protocol/dhcp: add option to disable the DHCPv4 client ID</title>
<updated>2026-07-20T19:30:43Z</updated>
<author>
<name>Hauke Mehrtens</name>
</author>
<published>2026-07-05T14:50:00Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=9e70fd02f8e55f9b311a49957de6e42c0b152b5a'/>
<id>urn:sha1:9e70fd02f8e55f9b311a49957de6e42c0b152b5a</id>
<content type='text'>
netifd gained a per-interface "sendclientid" boolean to suppress DHCP
option 61 (client identifier), for ISPs that reject requests carrying it
(e.g. Turksat KabloNet).

Expose it in the DHCP protocol form as a "Send Client ID" flag, enabled
by default. Disabling it writes sendclientid '0', which makes netifd
start udhcpc with -C so no client identifier is sent. The explicit
"Client ID" field is hidden while sending is disabled.

Reported-at: https://github.com/openwrt/openwrt/issues/24065
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
</content>
</entry>
<entry>
<title>treewide: escape slash chars in regex strings in .js files</title>
<updated>2026-06-25T20:14:58Z</updated>
<author>
<name>Hannu Nyman</name>
</author>
<published>2026-06-25T20:14:58Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=c653c94a02ea7cbca1a03cceb5beeb6f631b0fbe'/>
<id>urn:sha1:c653c94a02ea7cbca1a03cceb5beeb6f631b0fbe</id>
<content type='text'>
Properly escape the slash '/' chars that are included in the regex
strings in javascript files. Slash is used as a regex delimiter in
javascript, so an un-escaped slash may cause parsing errors in some
tools like xgettext used with .po translation manipulation.

Signed-off-by: Hannu Nyman &lt;hannu.nyman@iki.fi&gt;
</content>
</entry>
<entry>
<title>luci-base: add helper functions for password</title>
<updated>2026-06-03T10:49:07Z</updated>
<author>
<name>Christian Korber</name>
</author>
<published>2026-06-01T06:29:55Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=62862114f0045ddd526b159f091d9c47e96c752d'/>
<id>urn:sha1:62862114f0045ddd526b159f091d9c47e96c752d</id>
<content type='text'>
Because validating password is used in `luci-app-acl` and
`luci-mod-system` this commit adds helper functions for them to
luci-base.

Signed-off-by: Christian Korber &lt;ckorber@tdt.de&gt;
</content>
</entry>
<entry>
<title>luci-base: extend String.format() with named placeholder support</title>
<updated>2026-05-28T07:01:19Z</updated>
<author>
<name>Jo-Philipp Wich</name>
</author>
<published>2026-05-27T13:59:24Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=a31eccfa1494e6cb8afc90963ae7081c800d25e0'/>
<id>urn:sha1:a31eccfa1494e6cb8afc90963ae7081c800d25e0</id>
<content type='text'>
Support for %{key} and %{key:fmt} named placeholders in String.format().
The key is looked up in any plain-object argument passed to format(); the
argument list is scanned left-to-right and the first object containing the
key wins, allowing mixing of positional and named substitutions, e.g.:

  '%s test %{foo:s}'.format('blah', {bar: true}, {foo: 123})
     =&gt; 'blah test 123'

Ref: https://github.com/openwrt/luci/issues/8603#issuecomment-4554956879

Signed-off-by: Jo-Philipp Wich &lt;jo@mein.io&gt;
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
