summaryrefslogtreecommitdiff
path: root/render/html_forms.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2012-07-21 18:16:04 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2012-07-21 18:16:04 +0100
commit792dbe6e44cc1d3a78dfb62f99c001bc46131de7 (patch)
treec7ae7e8da7d8f90ab1783ed29051f2fb5735464a /render/html_forms.c
parent9d3986e768b761e63f28c657de67c408ba0b9486 (diff)
downloadnetsurf-792dbe6e44cc1d3a78dfb62f99c001bc46131de7.tar.gz
netsurf-792dbe6e44cc1d3a78dfb62f99c001bc46131de7.tar.bz2
Add textarea support back in.
Diffstat (limited to 'render/html_forms.c')
-rw-r--r--render/html_forms.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/render/html_forms.c b/render/html_forms.c
index 5212b3ab8..5b917cde8 100644
--- a/render/html_forms.c
+++ b/render/html_forms.c
@@ -392,6 +392,52 @@ out:
}
static struct form_control *
+parse_textarea_element(struct form *forms, dom_html_text_area_element *ta)
+{
+ struct form_control *control = NULL;
+ dom_html_form_element *form = NULL;
+ dom_string *ds_name = NULL;
+
+ char *name = NULL;
+
+ if (dom_html_text_area_element_get_form(ta, &form) != DOM_NO_ERR)
+ goto out;
+
+ if (dom_html_text_area_element_get_name(ta, &ds_name) != DOM_NO_ERR)
+ goto out;
+
+ if (ds_name != NULL)
+ name = strndup(dom_string_data(ds_name),
+ dom_string_byte_length(ds_name));
+
+ control = form_new_control(ta, GADGET_TEXTAREA);
+
+ if (control == NULL)
+ goto out;
+
+ if (name != NULL) {
+ /* Hand the name string over */
+ control->name = name;
+ name = NULL;
+ }
+
+ if (form != NULL && control != NULL)
+ form_add_control(find_form(forms, form), control);
+
+out:
+ if (form != NULL)
+ dom_node_unref(form);
+ if (ds_name != NULL)
+ dom_string_unref(ds_name);
+
+ if (name != NULL)
+ free(name);
+
+
+ return control;
+}
+
+static struct form_control *
invent_fake_gadget(dom_node *node)
{
struct form_control *ctl = form_new_control(node, GADGET_HIDDEN);
@@ -441,6 +487,10 @@ struct form_control *html_forms_get_control_for_node(struct form *forms, dom_nod
html_dom_string_input)) {
ctl = parse_input_element(forms,
(dom_html_input_element *) node);
+ } else if (dom_string_caseless_isequal(ds_name,
+ html_dom_string_textarea)) {
+ ctl = parse_textarea_element(forms,
+ (dom_html_text_area_element *) node);
}
}