From f1375fe19db064fcebf00433ce73eab99be038ef Mon Sep 17 00:00:00 2001 From: James Bursa Date: Sat, 25 Oct 2003 00:35:49 +0000 Subject: [project @ 2003-10-25 00:35:49 by bursa] Split out and clean up form submit code. svn path=/import/netsurf/; revision=374 --- render/form.h | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 render/form.h (limited to 'render/form.h') 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 + * Copyright 2003 James Bursa + */ + +/** \file + * Form handling functions (interface). + */ + +#ifndef _NETSURF_RENDER_FORM_H_ +#define _NETSURF_RENDER_FORM_H_ + +#include +#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 -- cgit v1.2.3