From face74fd38e805f291c7cbd74e5390ae2c147488 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sun, 5 May 2024 19:54:12 +0200 Subject: [PATCH] [spidermonkey] element.matches --- src/ecmascript/spidermonkey/element.cpp | 35 +++++---------------- test/ecmascript/assert/element.matches.html | 5 ++- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/ecmascript/spidermonkey/element.cpp b/src/ecmascript/spidermonkey/element.cpp index dfb276399..b85ecfc2b 100644 --- a/src/ecmascript/spidermonkey/element.cpp +++ b/src/ecmascript/spidermonkey/element.cpp @@ -24,6 +24,7 @@ #include "document/document.h" #include "document/forms.h" #include "document/libdom/corestrings.h" +#include "document/libdom/doc.h" #include "document/libdom/mapa.h" #include "document/libdom/renderer2.h" #include "document/view.h" @@ -4677,45 +4678,25 @@ element_matches(JSContext *ctx, unsigned int argc, JS::Value *vp) #endif return false; } - -// TODO -#if 0 - xmlpp::Element *el = JS::GetMaybePtrFromReservedSlot(hobj, 0); + dom_node *el = (dom_node *)JS::GetMaybePtrFromReservedSlot(hobj, 0); if (!el) { args.rval().setBoolean(false); return true; } + char *selector = jsval_to_string(ctx, args[0]); - struct string cssstr; - if (!init_string(&cssstr)) { - return false; - } - jshandle_value_to_char_string(&cssstr, ctx, args[0]); - xmlpp::ustring css = cssstr.source; - xmlpp::ustring xpath = css2xpath(css); - done_string(&cssstr); - - xmlpp::Node::NodeSet elements; - - try { - elements = el->find(xpath); - } catch (xmlpp::exception &e) { + if (!selector) { args.rval().setBoolean(false); return true; } - for (auto node: elements) { - if (node == el) { - args.rval().setBoolean(true); - return true; - } - } - args.rval().setBoolean(false); -#endif + void *res = el_match_selector(selector, el); + mem_free(selector); + + args.rval().setBoolean(res); return true; } - static bool element_querySelector(JSContext *ctx, unsigned int argc, JS::Value *vp) { diff --git a/test/ecmascript/assert/element.matches.html b/test/ecmascript/assert/element.matches.html index bd29003e5..2d78eddab 100644 --- a/test/ecmascript/assert/element.matches.html +++ b/test/ecmascript/assert/element.matches.html @@ -9,12 +9,15 @@ console.error('element.matches'); var birds = document.getElementsByTagName('li'); + var ch = false; for (var i = 0; i < birds.length; i++) { if (birds[i].matches('.endangered')) { - console.assert(birds[i].textContent === 'Philippine eagle', 'endangered'); + console.assert(birds[i].innerHTML === 'Philippine eagle', birds[i].innerHTML); + ch = true; } } + console.assert(ch, 'was matched'); console.exit(0);