mirror of
https://github.com/rkd77/elinks.git
synced 2025-06-30 22:19:29 -04:00
[quickjs] nodelist.forEach
This commit is contained in:
parent
3d92071eba
commit
786469da5f
@ -24,6 +24,8 @@
|
|||||||
|
|
||||||
#define countof(x) (sizeof(x) / sizeof((x)[0]))
|
#define countof(x) (sizeof(x) / sizeof((x)[0]))
|
||||||
|
|
||||||
|
static JSClassID js_nodelist_class_id;
|
||||||
|
|
||||||
void *map_nodelist;
|
void *map_nodelist;
|
||||||
void *map_rev_nodelist;
|
void *map_rev_nodelist;
|
||||||
|
|
||||||
@ -50,6 +52,30 @@ js_nodeList_SetOpaque(JSValueConst this_val, void *node)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static JSValue
|
||||||
|
js_nodeList_get_property_length(JSContext *ctx, JSValueConst this_val)
|
||||||
|
{
|
||||||
|
#ifdef ECMASCRIPT_DEBUG
|
||||||
|
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
|
||||||
|
#endif
|
||||||
|
REF_JS(this_val);
|
||||||
|
|
||||||
|
dom_nodelist *nl = (dom_nodelist *)(js_nodeList_GetOpaque(this_val));
|
||||||
|
dom_exception err;
|
||||||
|
uint32_t size;
|
||||||
|
|
||||||
|
if (!nl) {
|
||||||
|
return JS_NewInt32(ctx, 0);
|
||||||
|
}
|
||||||
|
err = dom_nodelist_get_length(nl, &size);
|
||||||
|
|
||||||
|
if (err != DOM_NO_ERR) {
|
||||||
|
return JS_NewInt32(ctx, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_NewInt32(ctx, size);
|
||||||
|
}
|
||||||
|
|
||||||
static JSValue
|
static JSValue
|
||||||
js_nodeList_item2(JSContext *ctx, JSValueConst this_val, int idx)
|
js_nodeList_item2(JSContext *ctx, JSValueConst this_val, int idx)
|
||||||
{
|
{
|
||||||
@ -146,27 +172,36 @@ js_nodeList_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const JSCFunctionListEntry js_nodeList_proto_funcs[] = {
|
static const JSCFunctionListEntry js_nodeList_proto_funcs[] = {
|
||||||
// JS_CGETSET_DEF("length", js_nodeList_get_property_length, nullptr),
|
// JS_CGETSET_DEF("length", js_nodeList_get_property_length, NULL),
|
||||||
JS_CFUNC_DEF("item", 1, js_nodeList_item),
|
JS_CFUNC_DEF("item", 1, js_nodeList_item),
|
||||||
JS_CFUNC_DEF("toString", 0, js_nodeList_toString)
|
JS_CFUNC_DEF("toString", 0, js_nodeList_toString)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static JSClassDef js_nodelist_class = {
|
||||||
|
"nodelist",
|
||||||
|
};
|
||||||
|
|
||||||
JSValue
|
JSValue
|
||||||
getNodeList(JSContext *ctx, void *node)
|
getNodeList(JSContext *ctx, void *node)
|
||||||
{
|
{
|
||||||
#ifdef ECMASCRIPT_DEBUG
|
#ifdef ECMASCRIPT_DEBUG
|
||||||
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
|
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
JSValue nodeList_obj = JS_NewArray(ctx);
|
JSValue proto;
|
||||||
JS_SetPropertyFunctionList(ctx, nodeList_obj, js_nodeList_proto_funcs, countof(js_nodeList_proto_funcs));
|
|
||||||
|
|
||||||
attr_save_in_map(map_nodelist, node, nodeList_obj);
|
/* nodelist class */
|
||||||
js_nodeList_SetOpaque(nodeList_obj, node);
|
JS_NewClassID(&js_nodelist_class_id);
|
||||||
js_nodeList_set_items(ctx, nodeList_obj, node);
|
JS_NewClass(JS_GetRuntime(ctx), js_nodelist_class_id, &js_nodelist_class);
|
||||||
|
proto = JS_NewArray(ctx);
|
||||||
|
REF_JS(proto);
|
||||||
|
|
||||||
return nodeList_obj;
|
JS_SetPropertyFunctionList(ctx, proto, js_nodeList_proto_funcs, countof(js_nodeList_proto_funcs));
|
||||||
|
JS_SetClassProto(ctx, js_nodelist_class_id, proto);
|
||||||
|
|
||||||
// JSValue rr = JS_DupValue(ctx, nodeList_obj);
|
attr_save_in_map(map_nodelist, node, proto);
|
||||||
|
js_nodeList_SetOpaque(proto, node);
|
||||||
|
js_nodeList_set_items(ctx, proto, node);
|
||||||
|
|
||||||
// RETURN_JS(rr);
|
JSValue rr = JS_DupValue(ctx, proto);
|
||||||
|
RETURN_JS(rr);
|
||||||
}
|
}
|
||||||
|
20
test/ecmascript/assert/nodelist.forEach.html
Normal file
20
test/ecmascript/assert/nodelist.forEach.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<ul id="birds">
|
||||||
|
<li>Orange-winged parrot</li>
|
||||||
|
<li class="endangered">Philippine eagle</li>
|
||||||
|
<li>Great white pelican</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
console.error('nodelist.forEach.html');
|
||||||
|
var birds = document.querySelectorAll('li');
|
||||||
|
|
||||||
|
var counter = 0;
|
||||||
|
birds.forEach(function(b) {
|
||||||
|
counter++;
|
||||||
|
});
|
||||||
|
console.assert(counter === 3, 'Three');
|
||||||
|
|
||||||
|
console.exit(0);
|
||||||
|
|
||||||
|
</script>
|
Loading…
x
Reference in New Issue
Block a user