Merge pull request #159 from oliverschmidt/master
Added support for <input type='hidden'>.
This commit is contained in:
commit
3a486d3954
|
@ -33,3 +33,4 @@ html_name "name\0"
|
||||||
html_text "text\0"
|
html_text "text\0"
|
||||||
html_size "size\0"
|
html_size "size\0"
|
||||||
html_image "image\0"
|
html_image "image\0"
|
||||||
|
html_hidden "hidden\0"
|
||||||
|
|
|
@ -103,3 +103,6 @@ const char html_size[6] =
|
||||||
const char html_image[7] =
|
const char html_image[7] =
|
||||||
/* "image\0" */
|
/* "image\0" */
|
||||||
{0x69, 0x6d, 0x61, 0x67, 0x65, 00, };
|
{0x69, 0x6d, 0x61, 0x67, 0x65, 00, };
|
||||||
|
const char html_hidden[8] =
|
||||||
|
/* "hidden\0" */
|
||||||
|
{0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 00, };
|
||||||
|
|
|
@ -33,3 +33,4 @@ extern const char html_name[6];
|
||||||
extern const char html_text[6];
|
extern const char html_text[6];
|
||||||
extern const char html_size[6];
|
extern const char html_size[6];
|
||||||
extern const char html_image[7];
|
extern const char html_image[7];
|
||||||
|
extern const char html_hidden[8];
|
||||||
|
|
|
@ -149,20 +149,20 @@ struct htmlparser_state {
|
||||||
unsigned char tagptr;
|
unsigned char tagptr;
|
||||||
char tagattr[20];
|
char tagattr[20];
|
||||||
unsigned char tagattrptr;
|
unsigned char tagattrptr;
|
||||||
char tagattrparam[WWW_CONF_MAX_URLLEN];
|
char tagattrparam[WWW_CONF_MAX_URLLEN + 1];
|
||||||
unsigned char tagattrparamptr;
|
unsigned char tagattrparamptr;
|
||||||
unsigned char lastchar, quotechar;
|
unsigned char lastchar, quotechar;
|
||||||
unsigned char majorstate, lastmajorstate;
|
unsigned char majorstate, lastmajorstate;
|
||||||
char linkurl[WWW_CONF_MAX_URLLEN];
|
char linkurl[WWW_CONF_MAX_URLLEN + 1];
|
||||||
|
|
||||||
char word[WWW_CONF_WEBPAGE_WIDTH];
|
char word[WWW_CONF_WEBPAGE_WIDTH];
|
||||||
unsigned char wordlen;
|
unsigned char wordlen;
|
||||||
|
|
||||||
#if WWW_CONF_FORMS
|
#if WWW_CONF_FORMS
|
||||||
char formaction[WWW_CONF_MAX_FORMACTIONLEN];
|
char formaction[WWW_CONF_MAX_FORMACTIONLEN + 1];
|
||||||
unsigned char inputtype;
|
unsigned char inputtype;
|
||||||
char inputname[WWW_CONF_MAX_INPUTNAMELEN];
|
char inputname[WWW_CONF_MAX_INPUTNAMELEN + 1];
|
||||||
char inputvalue[WWW_CONF_MAX_INPUTVALUELEN];
|
char inputvalue[WWW_CONF_MAX_INPUTVALUELEN + 1];
|
||||||
unsigned char inputvaluesize;
|
unsigned char inputvaluesize;
|
||||||
#endif /* WWW_CONF_FORMS */
|
#endif /* WWW_CONF_FORMS */
|
||||||
};
|
};
|
||||||
|
@ -241,7 +241,10 @@ static void
|
||||||
init_input(void)
|
init_input(void)
|
||||||
{
|
{
|
||||||
s.inputtype = HTMLPARSER_INPUTTYPE_NONE;
|
s.inputtype = HTMLPARSER_INPUTTYPE_NONE;
|
||||||
s.inputname[0] = s.inputvalue[0] = 0;
|
s.inputname[0] = s.inputvalue[0] =
|
||||||
|
s.formaction[WWW_CONF_MAX_FORMACTIONLEN] =
|
||||||
|
s.inputname[WWW_CONF_MAX_INPUTNAMELEN] =
|
||||||
|
s.inputvalue[WWW_CONF_MAX_INPUTVALUELEN] = 0;
|
||||||
s.inputvaluesize = 20; /* De facto default size */
|
s.inputvaluesize = 20; /* De facto default size */
|
||||||
}
|
}
|
||||||
#endif /* WWW_CONF_FORMS */
|
#endif /* WWW_CONF_FORMS */
|
||||||
|
@ -474,8 +477,8 @@ parse_tag(void)
|
||||||
switch(s.inputtype) {
|
switch(s.inputtype) {
|
||||||
case HTMLPARSER_INPUTTYPE_NONE:
|
case HTMLPARSER_INPUTTYPE_NONE:
|
||||||
case HTMLPARSER_INPUTTYPE_TEXT:
|
case HTMLPARSER_INPUTTYPE_TEXT:
|
||||||
s.inputvalue[s.inputvaluesize] = 0;
|
case HTMLPARSER_INPUTTYPE_HIDDEN:
|
||||||
htmlparser_inputfield(s.inputvaluesize, s.inputvalue, s.inputname);
|
htmlparser_inputfield(s.inputtype, s.inputvaluesize, s.inputvalue, s.inputname);
|
||||||
break;
|
break;
|
||||||
case HTMLPARSER_INPUTTYPE_SUBMIT:
|
case HTMLPARSER_INPUTTYPE_SUBMIT:
|
||||||
case HTMLPARSER_INPUTTYPE_IMAGE:
|
case HTMLPARSER_INPUTTYPE_IMAGE:
|
||||||
|
@ -492,6 +495,8 @@ parse_tag(void)
|
||||||
s.inputtype = HTMLPARSER_INPUTTYPE_IMAGE;
|
s.inputtype = HTMLPARSER_INPUTTYPE_IMAGE;
|
||||||
} else if(strncmp(s.tagattrparam, html_text, sizeof(html_text)) == 0) {
|
} else if(strncmp(s.tagattrparam, html_text, sizeof(html_text)) == 0) {
|
||||||
s.inputtype = HTMLPARSER_INPUTTYPE_TEXT;
|
s.inputtype = HTMLPARSER_INPUTTYPE_TEXT;
|
||||||
|
} else if(strncmp(s.tagattrparam, html_hidden, sizeof(html_hidden)) == 0) {
|
||||||
|
s.inputtype = HTMLPARSER_INPUTTYPE_HIDDEN;
|
||||||
} else {
|
} else {
|
||||||
s.inputtype = HTMLPARSER_INPUTTYPE_OTHER;
|
s.inputtype = HTMLPARSER_INPUTTYPE_OTHER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,8 @@ void htmlparser_link(char *text, unsigned char textlen, char *url);
|
||||||
void htmlparser_form(char *action);
|
void htmlparser_form(char *action);
|
||||||
void htmlparser_submitbutton(char *value,
|
void htmlparser_submitbutton(char *value,
|
||||||
char *name);
|
char *name);
|
||||||
void htmlparser_inputfield(unsigned char size,
|
void htmlparser_inputfield(unsigned char type,
|
||||||
|
unsigned char size,
|
||||||
char *value,
|
char *value,
|
||||||
char *name);
|
char *name);
|
||||||
void htmlparser_newline(void);
|
void htmlparser_newline(void);
|
||||||
|
@ -50,7 +51,7 @@ void htmlparser_word(char *word, unsigned char wordlen);
|
||||||
|
|
||||||
#define HTMLPARSER_INPUTTYPE_NONE 0
|
#define HTMLPARSER_INPUTTYPE_NONE 0
|
||||||
#define HTMLPARSER_INPUTTYPE_TEXT 1
|
#define HTMLPARSER_INPUTTYPE_TEXT 1
|
||||||
#define HTMLPARSER_INPUTTYPE_PASSWORD 2
|
#define HTMLPARSER_INPUTTYPE_HIDDEN 2
|
||||||
#define HTMLPARSER_INPUTTYPE_SUBMIT 3
|
#define HTMLPARSER_INPUTTYPE_SUBMIT 3
|
||||||
#define HTMLPARSER_INPUTTYPE_IMAGE 4
|
#define HTMLPARSER_INPUTTYPE_IMAGE 4
|
||||||
#define HTMLPARSER_INPUTTYPE_OTHER 5
|
#define HTMLPARSER_INPUTTYPE_OTHER 5
|
||||||
|
|
|
@ -687,7 +687,7 @@ webclient_datahandler(char *data, uint16_t len)
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
static void CC_FASTCALL
|
static void CC_FASTCALL
|
||||||
add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char type,
|
add_pagewidget(char *text, unsigned char size, char *attrib, unsigned char type,
|
||||||
unsigned char border)
|
unsigned char border)
|
||||||
{
|
{
|
||||||
char *wptr;
|
char *wptr;
|
||||||
|
@ -697,16 +697,13 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(textlen + border == 0) {
|
maxwidth = size ? WWW_CONF_WEBPAGE_WIDTH - (1 + 2 * border)
|
||||||
return;
|
: WWW_CONF_WEBPAGE_WIDTH;
|
||||||
}
|
|
||||||
|
|
||||||
maxwidth = WWW_CONF_WEBPAGE_WIDTH - (1 + 2 * border);
|
|
||||||
|
|
||||||
/* If the text of the link is too long so that it does not fit into
|
/* If the text of the link is too long so that it does not fit into
|
||||||
the width of the current window, counting from the current x
|
the width of the current window, counting from the current x
|
||||||
coordinate, we first try to jump to the next line. */
|
coordinate, we first try to jump to the next line. */
|
||||||
if(textlen + x > maxwidth) {
|
if(size + x > maxwidth) {
|
||||||
htmlparser_newline();
|
htmlparser_newline();
|
||||||
if(!loading) {
|
if(!loading) {
|
||||||
return;
|
return;
|
||||||
|
@ -717,9 +714,9 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
XXX: this is not really the right thing to do, we should probably
|
XXX: this is not really the right thing to do, we should probably
|
||||||
either make a link into a multiline link, or add multiple
|
either make a link into a multiline link, or add multiple
|
||||||
buttons. But this will do for now. */
|
buttons. But this will do for now. */
|
||||||
if(textlen > maxwidth) {
|
if(size > maxwidth) {
|
||||||
text[maxwidth] = 0;
|
text[maxwidth] = 0;
|
||||||
textlen = maxwidth;
|
size = maxwidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(firsty == pagey) {
|
if(firsty == pagey) {
|
||||||
|
@ -730,17 +727,16 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
drawing area and reference it from there. */
|
drawing area and reference it from there. */
|
||||||
wptr[0] = 0;
|
wptr[0] = 0;
|
||||||
wptr += border;
|
wptr += border;
|
||||||
memcpy(wptr, text, textlen);
|
memcpy(wptr, text, size);
|
||||||
wptr[textlen] = 0;
|
wptr[size] = 0;
|
||||||
wptr[textlen + border] = ' ';
|
wptr[size + border] = ' ';
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case CTK_WIDGET_HYPERLINK: {
|
case CTK_WIDGET_HYPERLINK: {
|
||||||
struct linkattrib *linkptr;
|
struct linkattrib *linkptr =
|
||||||
|
(struct linkattrib *)add_pageattrib(sizeof(struct linkattrib) /* incl 1 attrib char */ + attriblen);
|
||||||
linkptr = (struct linkattrib *)add_pageattrib(sizeof(struct linkattrib) /* incl 1 attrib char */ + attriblen);
|
|
||||||
if(linkptr != NULL) {
|
if(linkptr != NULL) {
|
||||||
CTK_HYPERLINK_NEW(&linkptr->hyperlink, x, y + 3, textlen, wptr, linkptr->url);
|
CTK_HYPERLINK_NEW(&linkptr->hyperlink, x, y + 3, size, wptr, linkptr->url);
|
||||||
strcpy(linkptr->url, attrib);
|
strcpy(linkptr->url, attrib);
|
||||||
CTK_WIDGET_SET_FLAG(&linkptr->hyperlink, CTK_WIDGET_FLAG_MONOSPACE);
|
CTK_WIDGET_SET_FLAG(&linkptr->hyperlink, CTK_WIDGET_FLAG_MONOSPACE);
|
||||||
CTK_WIDGET_ADD(&mainwindow, &linkptr->hyperlink);
|
CTK_WIDGET_ADD(&mainwindow, &linkptr->hyperlink);
|
||||||
|
@ -749,11 +745,10 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
}
|
}
|
||||||
#if WWW_CONF_FORMS
|
#if WWW_CONF_FORMS
|
||||||
case CTK_WIDGET_BUTTON: {
|
case CTK_WIDGET_BUTTON: {
|
||||||
struct submitattrib *submitptr;
|
struct submitattrib *submitptr =
|
||||||
|
(struct submitattrib *)add_pageattrib(sizeof(struct submitattrib) /* incl 1 attrib char */ + attriblen);
|
||||||
submitptr = (struct submitattrib *)add_pageattrib(sizeof(struct submitattrib) /* incl 1 attrib char */ + attriblen);
|
|
||||||
if(submitptr != NULL) {
|
if(submitptr != NULL) {
|
||||||
CTK_BUTTON_NEW((struct ctk_button *)&submitptr->button, x, y + 3, textlen, wptr);
|
CTK_BUTTON_NEW((struct ctk_button *)&submitptr->button, x, y + 3, size, wptr);
|
||||||
add_forminput((struct inputattrib *)submitptr);
|
add_forminput((struct inputattrib *)submitptr);
|
||||||
submitptr->formptr = formptr;
|
submitptr->formptr = formptr;
|
||||||
strcpy(submitptr->name, attrib);
|
strcpy(submitptr->name, attrib);
|
||||||
|
@ -763,19 +758,21 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CTK_WIDGET_TEXTENTRY: {
|
case CTK_WIDGET_TEXTENTRY: {
|
||||||
struct textattrib *textptr;
|
struct textattrib *textptr =
|
||||||
|
(struct textattrib *)add_pageattrib(sizeof(struct textattrib) /* incl 1 attrib char */ + attriblen
|
||||||
textptr = (struct textattrib *)add_pageattrib(sizeof(struct textattrib) /* incl 1 attrib char */ + attriblen + WWW_CONF_MAX_INPUTVALUELEN);
|
+ (size ? WWW_CONF_MAX_INPUTVALUELEN : strlen(text)) + 1);
|
||||||
if(textptr != NULL) {
|
if(textptr != NULL) {
|
||||||
CTK_TEXTENTRY_NEW((struct ctk_textentry *)&textptr->textentry, x, y + 3, textlen, 1,
|
CTK_TEXTENTRY_NEW((struct ctk_textentry *)&textptr->textentry, x, y + 3, size, 1,
|
||||||
textptr->name + attriblen + 1, WWW_CONF_MAX_INPUTVALUELEN);
|
textptr->name + attriblen + 1, WWW_CONF_MAX_INPUTVALUELEN);
|
||||||
add_forminput((struct inputattrib *)textptr);
|
add_forminput((struct inputattrib *)textptr);
|
||||||
textptr->formptr = formptr;
|
textptr->formptr = formptr;
|
||||||
strcpy(textptr->textentry.text, text);
|
strcpy(textptr->textentry.text, text);
|
||||||
strcpy(textptr->name, attrib);
|
strcpy(textptr->name, attrib);
|
||||||
|
if(size) {
|
||||||
CTK_WIDGET_SET_FLAG(&textptr->textentry, CTK_WIDGET_FLAG_MONOSPACE);
|
CTK_WIDGET_SET_FLAG(&textptr->textentry, CTK_WIDGET_FLAG_MONOSPACE);
|
||||||
CTK_WIDGET_ADD(&mainwindow, &textptr->textentry);
|
CTK_WIDGET_ADD(&mainwindow, &textptr->textentry);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif /* WWW_CONF_FORMS */
|
#endif /* WWW_CONF_FORMS */
|
||||||
|
@ -783,11 +780,13 @@ add_pagewidget(char *text, unsigned char textlen, char *attrib, unsigned char ty
|
||||||
}
|
}
|
||||||
/* Increase the x coordinate with the length of the link text plus
|
/* Increase the x coordinate with the length of the link text plus
|
||||||
the extra space behind it and the CTK button markers. */
|
the extra space behind it and the CTK button markers. */
|
||||||
textlen = textlen + 1 + 2 * border;
|
if(size) {
|
||||||
x += textlen;
|
size += 1 + 2 * border;
|
||||||
|
}
|
||||||
|
x += size;
|
||||||
|
|
||||||
if(firsty == pagey) {
|
if(firsty == pagey) {
|
||||||
webpageptr += textlen;
|
webpageptr += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(x == WWW_CONF_WEBPAGE_WIDTH) {
|
if(x == WWW_CONF_WEBPAGE_WIDTH) {
|
||||||
|
@ -871,9 +870,13 @@ htmlparser_submitbutton(char *text, char *name)
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
htmlparser_inputfield(unsigned char size, char *text, char *name)
|
htmlparser_inputfield(unsigned char type, unsigned char size, char *text, char *name)
|
||||||
{
|
{
|
||||||
|
if(type == HTMLPARSER_INPUTTYPE_HIDDEN) {
|
||||||
|
add_pagewidget(text, 0, name, CTK_WIDGET_TEXTENTRY, 0);
|
||||||
|
} else {
|
||||||
add_pagewidget(text, size, name, CTK_WIDGET_TEXTENTRY, 1);
|
add_pagewidget(text, size, name, CTK_WIDGET_TEXTENTRY, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
static void CC_FASTCALL
|
static void CC_FASTCALL
|
||||||
|
|
Loading…
Reference in a new issue