summaryrefslogtreecommitdiff
path: root/render/form.h
diff options
context:
space:
mode:
Diffstat (limited to 'render/form.h')
-rw-r--r--render/form.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/render/form.h b/render/form.h
new file mode 100644
index 000000000..b81abf01a
--- /dev/null
+++ b/render/form.h
@@ -0,0 +1,89 @@
+/*
+ * This file is part of NetSurf, http://netsurf.sourceforge.net/
+ * Licensed under the GNU General Public License,
+ * http://www.opensource.org/licenses/gpl-license
+ * Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
+ * Copyright 2003 James Bursa <bursa@users.sourceforge.net>
+ */
+
+/** \file
+ * Form handling functions (interface).
+ */
+
+#ifndef _NETSURF_RENDER_FORM_H_
+#define _NETSURF_RENDER_FORM_H_
+
+#include <stdbool.h>
+#include "netsurf/render/box.h"
+
+struct form_control;
+struct form_option;
+
+/** HTML form. */
+struct form {
+ char *action; /* url */
+ enum {method_GET, method_POST} method;
+ struct form_control *controls; /**< Linked list of controls. */
+ struct form_control *last_control; /**< Last control in list. */
+};
+
+/** Form control. */
+struct form_control {
+ enum { GADGET_HIDDEN, GADGET_TEXTBOX, GADGET_RADIO, GADGET_CHECKBOX,
+ GADGET_SELECT, GADGET_TEXTAREA, GADGET_IMAGE,
+ GADGET_PASSWORD, GADGET_SUBMIT, GADGET_RESET } type;
+ char *name;
+ char *value;
+ char *initial_value;
+ bool disabled;
+ struct form *form;
+ struct box *box;
+ struct box *caret_inline_container;
+ struct box *caret_text_box;
+ int caret_char_offset;
+ unsigned int maxlength;
+ union {
+ struct {
+ int mx, my;
+ } image;
+ struct {
+ int num_items;
+ struct form_option *items, *last_item;
+ bool multiple;
+ int num_selected;
+ /** Currently selected item, if num_selected == 1. */
+ struct form_option *current;
+ } select;
+ struct {
+ int selected;
+ } checkbox;
+ struct {
+ int selected;
+ } radio;
+ } data;
+ struct form_control *next; /**< Next control in this form. */
+};
+
+/** Option in a select. */
+struct form_option {
+ bool selected;
+ bool initial_selected;
+ char* value;
+ char* text;
+ struct form_option* next;
+};
+
+/** Successful control, as defined by HTML 4.01 17.13. */
+struct form_successful_control {
+ char *name; /**< Control name. */
+ char *value; /**< Current value. */
+ struct form_successful_control *next; /**< Next in linked list. */
+};
+
+void form_add_control(struct form *form, struct form_control *control);
+struct form_successful_control *form_successful_controls(struct form *form,
+ struct form_control *submit_button);
+char *form_url_encode(struct form_successful_control *control);
+void form_free_successful(struct form_successful_control *control);
+
+#endif