summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/dom/core/element.h29
-rw-r--r--src/core/element.c37
-rw-r--r--src/core/element.h8
3 files changed, 73 insertions, 1 deletions
diff --git a/include/dom/core/element.h b/include/dom/core/element.h
index c77335b..df093a4 100644
--- a/include/dom/core/element.h
+++ b/include/dom/core/element.h
@@ -87,6 +87,14 @@ typedef struct dom_element_vtable {
dom_exception (*dom_element_set_id_attribute_node)(
struct dom_element *element,
struct dom_attr *id_attr, bool is_id);
+
+ /* These two are for the benefit of bindings to libcss */
+ dom_exception (*dom_element_get_classes)(
+ struct dom_element *element,
+ lwc_string ***classes, uint32_t *n_classes);
+ dom_exception (*dom_element_has_class)(
+ struct dom_element *element,
+ lwc_string *name, bool *match);
} dom_element_vtable;
static inline dom_exception dom_element_get_tag_name(
@@ -323,4 +331,25 @@ static inline dom_exception dom_element_set_id_attribute_node(
dom_element_set_id_attribute_node((dom_element *) (e), \
(struct dom_attr *) (a), (bool) (i))
+static inline dom_exception dom_element_get_classes(
+ struct dom_element *element,
+ lwc_string ***classes, uint32_t *n_classes)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_classes(element, classes, n_classes);
+}
+#define dom_element_get_classes(e, c, n) \
+ dom_element_get_classes((dom_element *) (e), \
+ (lwc_string ***) (c), (uint32_t *) (n))
+
+static inline dom_exception dom_element_has_class(
+ struct dom_element *element, lwc_string *name, bool *match)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_has_class(element, name, match);
+}
+#define dom_element_has_class(e, n, m) \
+ dom_element_has_class((dom_element *) (e), \
+ (lwc_string *) (n), (bool *) (m))
+
#endif
diff --git a/src/core/element.c b/src/core/element.c
index 89c62a3..cf15a5f 100644
--- a/src/core/element.c
+++ b/src/core/element.c
@@ -883,6 +883,43 @@ dom_exception _dom_element_set_id_attribute_node(struct dom_element *element,
}
+/**
+ * Obtain a pre-parsed array of class names for an element
+ *
+ * \param element Element containing classes
+ * \param classes Pointer to location to receive allocated array
+ * \param n_classes Pointer to location to receive number of classes
+ * \return DOM_NO_ERR on success,
+ * DOM_NO_MEM_ERR on memory exhaustion
+ */
+dom_exception _dom_element_get_classes(struct dom_element *element,
+ lwc_string ***classes, uint32_t *n_classes)
+{
+ UNUSED(element);
+ UNUSED(classes);
+ UNUSED(n_classes);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+/**
+ * Determine if an element has an associated class
+ *
+ * \param element Element to consider
+ * \param name Class name to look for
+ * \param match Pointer to location to receive result
+ * \return DOM_NO_ERR.
+ */
+dom_exception _dom_element_has_class(struct dom_element *element,
+ lwc_string *name, bool *match)
+{
+ UNUSED(element);
+ UNUSED(name);
+ UNUSED(match);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
/*------------- The overload virtual functions ------------------------*/
/* Overload function of Node, please refer src/core/node.c for detail */
diff --git a/src/core/element.h b/src/core/element.h
index 77a040b..ae7d155 100644
--- a/src/core/element.h
+++ b/src/core/element.h
@@ -101,6 +101,10 @@ dom_exception _dom_element_set_id_attribute_ns(struct dom_element *element,
bool is_id);
dom_exception _dom_element_set_id_attribute_node(struct dom_element *element,
struct dom_attr *id_attr, bool is_id);
+dom_exception _dom_element_get_classes(struct dom_element *element,
+ lwc_string ***classes, uint32_t *n_classes);
+dom_exception _dom_element_has_class(struct dom_element *element,
+ lwc_string *name, bool *match);
#define DOM_ELEMENT_VTABLE \
_dom_element_get_tag_name, \
@@ -122,7 +126,9 @@ dom_exception _dom_element_set_id_attribute_node(struct dom_element *element,
_dom_element_get_schema_type_info, \
_dom_element_set_id_attribute, \
_dom_element_set_id_attribute_ns, \
- _dom_element_set_id_attribute_node
+ _dom_element_set_id_attribute_node, \
+ _dom_element_get_classes, \
+ _dom_element_has_class
/* Overloading dom_node functions */
dom_exception _dom_element_get_attributes(dom_node_internal *node,