From 20ccc903505ee15419b5cde113f9061b7a4f7513 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 26 Aug 2014 11:02:16 +0800 Subject: luci-base: urlencode: encode all except unreserved characters. As per http://tools.ietf.org/html/rfc3986#section-2.3 Characters that are allowed in a URI but do not have a reserved purpose are called unreserved. These include uppercase and lowercase letters, decimal digits, hyphen, period, underscore, and tilde. unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" Signed-off-by: Yousong Zhou --- modules/luci-base/luasrc/http/protocol.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'modules/luci-base/luasrc') diff --git a/modules/luci-base/luasrc/http/protocol.lua b/modules/luci-base/luasrc/http/protocol.lua index 859272679f..0cb62aeec9 100644 --- a/modules/luci-base/luasrc/http/protocol.lua +++ b/modules/luci-base/luasrc/http/protocol.lua @@ -72,7 +72,7 @@ function urlencode( str ) if type(str) == "string" then str = str:gsub( - "([^a-zA-Z0-9$_%-%.!*'(),])", + "([^a-zA-Z0-9$_%-%.%~])", __chrenc ) end -- cgit v1.2.3 From a28da6a88a0cd7a5bc0c12c1ef2d8cad86c2aff3 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 3 Nov 2015 14:20:03 +0800 Subject: luci-base: add support for DynamicList with FileBrowser Two new arguments url, defpath were added to cbi_dynlist_init() for initializing the brower button. An example of usage identity = section:taboption("general", DynamicList, "identity", translate("List of SSH key files for auth")) identity.datatype = "file" Signed-off-by: Yousong Zhou --- .../luci-base/htdocs/luci-static/resources/cbi.js | 25 +++++++++++++++------- modules/luci-base/luasrc/view/cbi/dynlist.htm | 4 +++- 2 files changed, 20 insertions(+), 9 deletions(-) (limited to 'modules/luci-base/luasrc') diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 5e31bf2099..02c54ad3e8 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -545,7 +545,7 @@ function cbi_browser_init(id, respath, url, defpath) cbi_bind(btn, 'click', cbi_browser_btnclick); } -function cbi_dynlist_init(name, respath, datatype, optional, choices) +function cbi_dynlist_init(name, respath, datatype, optional, url, defpath, choices) { var input0 = document.getElementsByName(name)[0]; var prefix = input0.name; @@ -606,6 +606,11 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) parent.appendChild(t); parent.appendChild(b); + if (datatype == 'file') + { + cbi_browser_init(t.id, respath, url, defpath); + } + parent.appendChild(document.createElement('br')); if (datatype) @@ -616,13 +621,13 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) if (choices) { cbi_combobox_init(t.id, choices[0], '', choices[1]); - t.nextSibling.index = i; + b.index = i; - cbi_bind(t.nextSibling, 'keydown', cbi_dynlist_keydown); - cbi_bind(t.nextSibling, 'keypress', cbi_dynlist_keypress); + cbi_bind(b, 'keydown', cbi_dynlist_keydown); + cbi_bind(b, 'keypress', cbi_dynlist_keypress); if (i == focus || -i == focus) - t.nextSibling.focus(); + b.focus(); } else { @@ -758,20 +763,24 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) ev = ev ? ev : window.event; var se = ev.target ? ev.target : ev.srcElement; + var input = se.previousSibling; + while (input && input.name != name) { + input = input.previousSibling; + } if (se.src.indexOf('remove') > -1) { - se.previousSibling.value = ''; + input.value = ''; cbi_dynlist_keydown({ - target: se.previousSibling, + target: input, keyCode: 8 }); } else { cbi_dynlist_keydown({ - target: se.previousSibling, + target: input, keyCode: 13 }); } diff --git a/modules/luci-base/luasrc/view/cbi/dynlist.htm b/modules/luci-base/luasrc/view/cbi/dynlist.htm index fd626a4ecf..e936c0c39f 100644 --- a/modules/luci-base/luasrc/view/cbi/dynlist.htm +++ b/modules/luci-base/luasrc/view/cbi/dynlist.htm @@ -15,7 +15,9 @@