diff options
author | Richard Yu <yurichard3839@gmail.com> | 2019-10-11 01:05:08 +0800 |
---|---|---|
committer | Richard Yu <yurichard3839@gmail.com> | 2019-10-11 01:05:08 +0800 |
commit | 02a0291d141e3ac8e345a08ab010e05198c895f9 (patch) | |
tree | b466e189a8e2a136eed17b1ff3ccf11735cf1596 /modules/luci-base/htdocs/luci-static | |
parent | d18ef580f2f6e5cdfe0839ae6c7ba7c4b52ffb78 (diff) |
luci-base: widgets.js: add user and group select
Signed-off-by: Richard Yu <yurichard3839@gmail.com>
Diffstat (limited to 'modules/luci-base/htdocs/luci-static')
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/tools/widgets.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js b/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js index 1667fa6707..9cc3e26ed2 100644 --- a/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js +++ b/modules/luci-base/htdocs/luci-static/resources/tools/widgets.js @@ -3,6 +3,19 @@ 'require form'; 'require network'; 'require firewall'; +'require fs'; + +function getUsers() { + return fs.lines('/etc/passwd').then(function(lines) { + return lines.map(function(line) { return line.split(/:/)[0] }); + }); +} + +function getGroups() { + return fs.lines('/etc/group').then(function(lines) { + return lines.map(function(line) { return line.split(/:/)[0] }); + }); +} var CBIZoneSelect = form.ListValue.extend({ __name__: 'CBI.ZoneSelect', @@ -559,10 +572,48 @@ var CBIDeviceSelect = form.ListValue.extend({ }, }); +var CBIUserSelect = form.ListValue.extend({ + __name__: 'CBI.UserSelect', + + load: function(section_id) { + return getUsers().then(L.bind(function(users) { + for (var i = 0; i < users.length; i++) { + this.value(users[i]); + } + + return this.super('load', section_id); + }, this)); + }, + + filter: function(section_id, value) { + return true; + }, +}); + +var CBIGroupSelect = form.ListValue.extend({ + __name__: 'CBI.GroupSelect', + + load: function(section_id) { + return getGroups().then(L.bind(function(groups) { + for (var i = 0; i < groups.length; i++) { + this.value(groups[i]); + } + + return this.super('load', section_id); + }, this)); + }, + + filter: function(section_id, value) { + return true; + }, +}); + return L.Class.extend({ ZoneSelect: CBIZoneSelect, ZoneForwards: CBIZoneForwards, NetworkSelect: CBINetworkSelect, DeviceSelect: CBIDeviceSelect, + UserSelect: CBIUserSelect, + GroupSelect: CBIGroupSelect, }); |