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>
This commit is contained in:
Jo-Philipp Wich 2020-04-12 22:27:16 +02:00
parent e523bfd879
commit fde144c9be
2 changed files with 32 additions and 0 deletions

View file

@ -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

View file

@ -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,