diff options
author | Jo-Philipp Wich <jo@mein.io> | 2020-04-12 22:27:16 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-04-12 22:51:28 +0200 |
commit | fde144c9be61d7886e81240233328a61d7088d08 (patch) | |
tree | c3761e58f8624abf43bd5468b76a25bf908f3495 | |
parent | e523bfd879f34ee92824e97bf57ceead3ac7bc37 (diff) |
luci-base: luci.js: add LuCI.fspath() helper
The LuCI.fspath() function allows constructing absolute filesystem paths
from path segments relative to the document root.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/luci.js | 31 | ||||
-rw-r--r-- | modules/luci-base/luasrc/view/header.htm | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js index 5984ad184..e1aa65a34 100644 --- a/modules/luci-base/htdocs/luci-static/resources/luci.js +++ b/modules/luci-base/htdocs/luci-static/resources/luci.js @@ -2597,6 +2597,37 @@ env: {}, /** + * Construct an absolute filesystem path relative to the server + * document root. + * + * @instance + * @memberof LuCI + * + * @param {...string} [parts] + * An array of parts to join into a path. + * + * @return {string} + * Return the joined path. + */ + fspath: function(/* ... */) { + var path = this.env.documentroot; + + for (var i = 0; i < arguments.length; i++) + path += '/' + arguments[i]; + + var p = path.replace(/\/+$/, '').replace(/\/+/g, '/').split(/\//), + res = []; + + for (var i = 0; i < p.length; i++) + if (p[i] == '..') + res.pop(); + else if (p[i] != '.') + res.push(p[i]); + + return res.join('/'); + }, + + /** * Construct a relative URL path from the given prefix and parts. * The resulting URL is guaranteed to only contain the characters * `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well diff --git a/modules/luci-base/luasrc/view/header.htm b/modules/luci-base/luasrc/view/header.htm index 4d3072980..9b49f4129 100644 --- a/modules/luci-base/luasrc/view/header.htm +++ b/modules/luci-base/luasrc/view/header.htm @@ -22,6 +22,7 @@ resource = resource, scriptname = luci.http.getenv("SCRIPT_NAME"), pathinfo = luci.http.getenv("PATH_INFO"), + documentroot = luci.http.getenv("DOCUMENT_ROOT"), requestpath = luci.dispatcher.context.requestpath, dispatchpath = luci.dispatcher.context.path, pollinterval = luci.config.main.pollinterval or 5, |