summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/javascript.c7
-rw-r--r--player/javascript/defaults.js3
2 files changed, 10 insertions, 0 deletions
diff --git a/player/javascript.c b/player/javascript.c
index 6047add255..f3d810e29c 100644
--- a/player/javascript.c
+++ b/player/javascript.c
@@ -59,6 +59,7 @@ static const char *const builtin_files[][3] = {
// Represents a loaded script. Each has its own js state.
struct script_ctx {
const char *filename;
+ const char *path; // NULL if single file
struct mpv_handle *client;
struct MPContext *mpctx;
struct mp_log *log;
@@ -477,6 +478,7 @@ static int s_load_javascript(struct mp_script_args *args)
.log = args->log,
.last_error_str = talloc_strdup(ctx, "Cannot initialize JavaScript"),
.filename = args->filename,
+ .path = args->path,
};
int r = -1;
@@ -1281,6 +1283,11 @@ static void add_functions(js_State *J, struct script_ctx *ctx)
js_pushstring(J, ctx->filename);
js_setproperty(J, -2, "script_file");
+ if (ctx->path) {
+ js_pushstring(J, ctx->path);
+ js_setproperty(J, -2, "script_path");
+ }
+
js_pop(J, 2); // leave the stack as we got it
}
diff --git a/player/javascript/defaults.js b/player/javascript/defaults.js
index 588e8d6891..dcea6734a0 100644
--- a/player/javascript/defaults.js
+++ b/player/javascript/defaults.js
@@ -463,6 +463,8 @@ function process_timers() {
*********************************************************************/
mp.module_paths = []; // global modules search paths
+if (mp.script_path !== undefined) // loaded as a directory
+ mp.module_paths.push(mp.utils.join_path(mp.script_path, "modules"));
// Internal meta top-dirs. Users should not rely on these names.
var MODULES_META = "~~modules",
@@ -645,6 +647,7 @@ mp.options = { read_options: read_options };
g.print = mp.msg.info; // convenient alias
mp.get_script_name = function() { return mp.script_name };
mp.get_script_file = function() { return mp.script_file };
+mp.get_script_directory = function() { return mp.script_path };
mp.get_time = function() { return mp.get_time_ms() / 1000 };
mp.utils.getcwd = function() { return mp.get_property("working-directory") };
mp.dispatch_event = dispatch_event;