<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-07-21T21:02:15Z</updated>
<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>
<entry>
<title>luci-base: correctness fixes: partial revert</title>
<updated>2026-05-27T22:32:16Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2026-05-27T22:32:16Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=f699752316ac4651ae4f4f966510d352670ca87a'/>
<id>urn:sha1:f699752316ac4651ae4f4f966510d352670ca87a</id>
<content type='text'>
This reverts problematic parts of commit
a818ac89bb0e376b7ac4c9f1a8a35f657bbd64c9.

Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-base: correctness fixes</title>
<updated>2026-05-27T12:49:44Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2026-05-26T14:33:06Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=a818ac89bb0e376b7ac4c9f1a8a35f657bbd64c9'/>
<id>urn:sha1:a818ac89bb0e376b7ac4c9f1a8a35f657bbd64c9</id>
<content type='text'>
validation:

use correct argument position for apply

network:

spec.need_tag -&gt; port.need_tag agrees with old lua compat

widgets:

rv.length is undefined, use firstChild

form:

Follow-up to 315dbfc7498e2f43afb0119b992915e8f311bc37
checkDepends recursion fix and implement cache lookup

uci:

improve timeout and Promise handling

ui:

follow-up to 92381c3ca285c2303a59c74509fb4d6a422fece3
renderListing sort: put directories first
getActiveTabId: check isNaN for tab state
getScrollParent: fix evaluation logic
fadeOutNotification: implement immediate timeout
openDropdown: accelerate draw via getBoundingClientRect

form:
ensure FlagValue parse always resolves

fs:
parse all 'expect' keys in RpcReply

luci:

Use the same source of truth in both the check and the dispatch
for flushRequestQueue

string check for dom string additions

Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
</content>
</entry>
</feed>
