1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00

[ecmascript] walk_tree_query moved to ecmascript-c.c

This commit is contained in:
Witold Filipczyk 2024-05-05 19:29:52 +02:00
parent 3128c22c2e
commit 4a6b920586
3 changed files with 60 additions and 56 deletions

View File

@ -8,6 +8,7 @@
#include "dialogs/status.h"
#include "document/document.h"
#include "document/libdom/doc.h"
#include "document/libdom/mapa.h"
#include "document/view.h"
#include "ecmascript/ecmascript.h"
@ -481,3 +482,59 @@ void ecmascript_moved_form_state(struct form_state *fs)
spidermonkey_moved_form_state(fs);
#endif
}
void *
walk_tree_query(dom_node *node, char *selector, int depth)
{
dom_exception exc;
dom_node *child;
void *res = NULL;
dom_node_type typ;
/* Only interested in element nodes */
exc = dom_node_get_node_type(node, &typ);
if (typ != DOM_ELEMENT_NODE) {
return NULL;
}
if (res = el_match_selector(selector, node)) {
/* There was an error; return */
return res;
}
/* Get the node's first child */
exc = dom_node_get_first_child(node, &child);
if (exc != DOM_NO_ERR) {
fprintf(stderr, "Exception raised for node_get_first_child\n");
return NULL;
} else if (child != NULL) {
/* node has children; decend to children's depth */
depth++;
/* Loop though all node's children */
do {
dom_node *next_child;
/* Visit node's descendents */
res = walk_tree_query(child, selector, depth);
/* There was an error; return */
if (res) {
dom_node_unref(child);
return res;
}
/* Go to next sibling */
exc = dom_node_get_next_sibling(child, &next_child);
if (exc != DOM_NO_ERR) {
fprintf(stderr, "Exception raised for "
"node_get_next_sibling\n");
dom_node_unref(child);
return NULL;
}
dom_node_unref(child);
child = next_child;
} while (child != NULL); /* No more children */
}
return NULL;
}

View File

@ -40,6 +40,8 @@ void ecmascript_detach_form_view(struct form_view *fv);
void ecmascript_detach_form_state(struct form_state *fs);
void ecmascript_moved_form_state(struct form_state *fs);
void *walk_tree_query(dom_node *node, char *selector, int depth);
extern struct module ecmascript_module;
#ifdef __cplusplus

View File

@ -28,6 +28,7 @@
#include "document/view.h"
#include "ecmascript/css2xpath.h"
#include "ecmascript/ecmascript.h"
#include "ecmascript/ecmascript-c.h"
#include "ecmascript/libdom/parse.h"
#include "ecmascript/spidermonkey/collection.h"
#include "ecmascript/spidermonkey/form.h"
@ -1819,62 +1820,6 @@ document_getElementsByTagName(JSContext *ctx, unsigned int argc, JS::Value *vp)
return true;
}
void *
walk_tree_query(dom_node *node, char *selector, int depth)
{
dom_exception exc;
dom_node *child;
void *res = NULL;
dom_node_type typ;
/* Only interested in element nodes */
exc = dom_node_get_node_type(node, &typ);
if (typ != DOM_ELEMENT_NODE) {
return NULL;
}
if (res = el_match_selector(selector, node)) {
/* There was an error; return */
return res;
}
/* Get the node's first child */
exc = dom_node_get_first_child(node, &child);
if (exc != DOM_NO_ERR) {
fprintf(stderr, "Exception raised for node_get_first_child\n");
return NULL;
} else if (child != NULL) {
/* node has children; decend to children's depth */
depth++;
/* Loop though all node's children */
do {
dom_node *next_child;
/* Visit node's descendents */
res = walk_tree_query(child, selector, depth);
/* There was an error; return */
if (res) {
dom_node_unref(child);
return res;
}
/* Go to next sibling */
exc = dom_node_get_next_sibling(child, &next_child);
if (exc != DOM_NO_ERR) {
fprintf(stderr, "Exception raised for "
"node_get_next_sibling\n");
dom_node_unref(child);
return NULL;
}
dom_node_unref(child);
child = next_child;
} while (child != NULL); /* No more children */
}
return NULL;
}
static bool
document_querySelector(JSContext *ctx, unsigned int argc, JS::Value *vp)
{