From f46cdd8f03f0678617e94a1aebf6af3f2b832993 Mon Sep 17 00:00:00 2001 From: Miciah Dashiel Butler Masters Date: Sat, 24 Dec 2005 18:05:32 +0000 Subject: [PATCH] Add elinks.location property to get and set the current URL. --- src/scripting/smjs/elinks_object.c | 53 ++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/src/scripting/smjs/elinks_object.c b/src/scripting/smjs/elinks_object.c index db8d9c85..329479c1 100644 --- a/src/scripting/smjs/elinks_object.c +++ b/src/scripting/smjs/elinks_object.c @@ -7,13 +7,52 @@ #include "elinks.h" #include "ecmascript/spidermonkey/util.h" +#include "protocol/uri.h" #include "scripting/scripting.h" #include "scripting/smjs/core.h" #include "scripting/smjs/elinks_object.h" #include "scripting/smjs/global_object.h" #include "scripting/smjs/keybinding.h" +#include "session/location.h" +#include "session/session.h" +#include "session/task.h" +static JSBool +elinks_get_location(JSContext *ctx, JSObject *obj, jsval id, jsval *vp) +{ + struct uri *uri; + + if (!smjs_ses) return JS_FALSE; + + uri = have_location(smjs_ses) ? cur_loc(smjs_ses)->vs.uri + : smjs_ses->loading_uri; + if (!uri) return JS_FALSE; + + *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(smjs_ctx, struri(uri))); + + return JS_TRUE; +} + +static JSBool +elinks_set_location(JSContext *ctx, JSObject *obj, jsval id, jsval *vp) +{ + JSString *jsstr; + unsigned char *url; + + if (!smjs_ses) return JS_FALSE; + + jsstr = JS_ValueToString(smjs_ctx, *vp); + if (!jsstr) return JS_FALSE; + + url = JS_GetStringBytes(jsstr); + if (!url) return JS_FALSE; + + goto_url(smjs_ses, url); + + return JS_TRUE; +} + static JSBool elinks_alert(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -49,12 +88,20 @@ static const JSFunctionSpec elinks_funcs[] = { static JSObject * smjs_get_elinks_object(void) { + JSObject *jsobj; + assert(smjs_ctx); assert(smjs_global_object); - return JS_InitClass(smjs_ctx, smjs_global_object, NULL, - (JSClass *) &elinks_class, NULL, 0, NULL, - (JSFunctionSpec *) elinks_funcs, NULL, NULL); + jsobj = JS_InitClass(smjs_ctx, smjs_global_object, NULL, + (JSClass *) &elinks_class, NULL, 0, NULL, + (JSFunctionSpec *) elinks_funcs, NULL, NULL); + + JS_DefineProperty(smjs_ctx, jsobj, "location", JSVAL_NULL, + elinks_get_location, elinks_set_location, + JSPROP_ENUMERATE | JSPROP_PERMANENT); + + return jsobj; } void