From fde144c9be61d7886e81240233328a61d7088d08 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 12 Apr 2020 22:27:16 +0200 Subject: 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 --- .../luci-base/htdocs/luci-static/resources/luci.js | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'modules/luci-base/htdocs') diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js index 5984ad184a..e1aa65a34d 100644 --- a/modules/luci-base/htdocs/luci-static/resources/luci.js +++ b/modules/luci-base/htdocs/luci-static/resources/luci.js @@ -2596,6 +2596,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 -- cgit v1.2.3