mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Shuffle code so that the do_html_select, do_html_select_multiple, and
html_select are together.
This commit is contained in:
parent
a781cf1894
commit
cf2fcaa84f
@ -299,113 +299,6 @@ hid:
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
static void do_html_select(unsigned char *attr, unsigned char *html,
|
||||
unsigned char *eof, unsigned char **end,
|
||||
struct html_context *html_context);
|
||||
|
||||
static void
|
||||
do_html_select_multiple(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof,
|
||||
unsigned char **end)
|
||||
{
|
||||
unsigned char *al = get_attr_val(a, "name", html_context->options);
|
||||
|
||||
if (!al) return;
|
||||
html_focusable(html_context, a);
|
||||
html_top.type = ELEMENT_DONT_KILL;
|
||||
mem_free_set(&format.select, al);
|
||||
format.select_disabled = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: FORM_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void
|
||||
html_select(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
if (has_attr(a, "multiple", html_context->options))
|
||||
do_html_select_multiple(html_context, a, html, eof, end);
|
||||
else
|
||||
do_html_select(a, html, eof, end, html_context);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
html_option(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5)
|
||||
{
|
||||
struct form_control *fc;
|
||||
unsigned char *val;
|
||||
|
||||
if (!format.select) return;
|
||||
|
||||
val = get_attr_val(a, "value", html_context->options);
|
||||
if (!val) {
|
||||
struct string str;
|
||||
unsigned char *p, *r;
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
for (p = a - 1; *p != '<'; p--);
|
||||
|
||||
if (!init_string(&str)) goto end_parse;
|
||||
if (parse_element(p, html_context->eoff, NULL, NULL, NULL, &p)) {
|
||||
INTERNAL("parse element failed");
|
||||
val = str.source;
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
se:
|
||||
while (p < html_context->eoff && isspace(*p)) p++;
|
||||
while (p < html_context->eoff && !isspace(*p) && *p != '<') {
|
||||
|
||||
sp:
|
||||
add_char_to_string(&str, *p ? *p : ' '), p++;
|
||||
}
|
||||
|
||||
r = p;
|
||||
val = str.source; /* Has to be before the possible 'goto end_parse' */
|
||||
|
||||
while (r < html_context->eoff && isspace(*r)) r++;
|
||||
if (r >= html_context->eoff) goto end_parse;
|
||||
if (r - 2 <= html_context->eoff && (r[1] == '!' || r[1] == '?')) {
|
||||
p = skip_comment(r, html_context->eoff);
|
||||
goto se;
|
||||
}
|
||||
if (parse_element(r, html_context->eoff, &name, &namelen, NULL, &p)) goto sp;
|
||||
if (strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& strlcasecmp(name, namelen, "/OPTION", 7)
|
||||
&& strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& strlcasecmp(name, namelen, "/SELECT", 7)
|
||||
&& strlcasecmp(name, namelen, "OPTGROUP", 8)
|
||||
&& strlcasecmp(name, namelen, "/OPTGROUP", 9))
|
||||
goto se;
|
||||
}
|
||||
|
||||
end_parse:
|
||||
fc = init_form_control(FC_CHECKBOX, a, html_context);
|
||||
if (!fc) {
|
||||
mem_free_if(val);
|
||||
return;
|
||||
}
|
||||
|
||||
fc->name = null_or_stracpy(format.select);
|
||||
fc->default_value = val;
|
||||
fc->default_state = has_attr(a, "selected", html_context->options);
|
||||
fc->mode = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: format.select_disabled;
|
||||
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_stack_dup(html_context, ELEMENT_KILLABLE);
|
||||
format.form = fc;
|
||||
format.style.attr |= AT_BOLD;
|
||||
put_chrs(html_context, "[ ]", 3);
|
||||
kill_html_stack_item(html_context, &html_top);
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
static struct list_menu lnk_menu;
|
||||
|
||||
static void
|
||||
@ -576,6 +469,110 @@ end_parse:
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_html_select_multiple(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof,
|
||||
unsigned char **end)
|
||||
{
|
||||
unsigned char *al = get_attr_val(a, "name", html_context->options);
|
||||
|
||||
if (!al) return;
|
||||
html_focusable(html_context, a);
|
||||
html_top.type = ELEMENT_DONT_KILL;
|
||||
mem_free_set(&format.select, al);
|
||||
format.select_disabled = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: FORM_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void
|
||||
html_select(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
if (has_attr(a, "multiple", html_context->options))
|
||||
do_html_select_multiple(html_context, a, html, eof, end);
|
||||
else
|
||||
do_html_select(a, html, eof, end, html_context);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
html_option(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5)
|
||||
{
|
||||
struct form_control *fc;
|
||||
unsigned char *val;
|
||||
|
||||
if (!format.select) return;
|
||||
|
||||
val = get_attr_val(a, "value", html_context->options);
|
||||
if (!val) {
|
||||
struct string str;
|
||||
unsigned char *p, *r;
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
for (p = a - 1; *p != '<'; p--);
|
||||
|
||||
if (!init_string(&str)) goto end_parse;
|
||||
if (parse_element(p, html_context->eoff, NULL, NULL, NULL, &p)) {
|
||||
INTERNAL("parse element failed");
|
||||
val = str.source;
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
se:
|
||||
while (p < html_context->eoff && isspace(*p)) p++;
|
||||
while (p < html_context->eoff && !isspace(*p) && *p != '<') {
|
||||
|
||||
sp:
|
||||
add_char_to_string(&str, *p ? *p : ' '), p++;
|
||||
}
|
||||
|
||||
r = p;
|
||||
val = str.source; /* Has to be before the possible 'goto end_parse' */
|
||||
|
||||
while (r < html_context->eoff && isspace(*r)) r++;
|
||||
if (r >= html_context->eoff) goto end_parse;
|
||||
if (r - 2 <= html_context->eoff && (r[1] == '!' || r[1] == '?')) {
|
||||
p = skip_comment(r, html_context->eoff);
|
||||
goto se;
|
||||
}
|
||||
if (parse_element(r, html_context->eoff, &name, &namelen, NULL, &p)) goto sp;
|
||||
if (strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& strlcasecmp(name, namelen, "/OPTION", 7)
|
||||
&& strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& strlcasecmp(name, namelen, "/SELECT", 7)
|
||||
&& strlcasecmp(name, namelen, "OPTGROUP", 8)
|
||||
&& strlcasecmp(name, namelen, "/OPTGROUP", 9))
|
||||
goto se;
|
||||
}
|
||||
|
||||
end_parse:
|
||||
fc = init_form_control(FC_CHECKBOX, a, html_context);
|
||||
if (!fc) {
|
||||
mem_free_if(val);
|
||||
return;
|
||||
}
|
||||
|
||||
fc->name = null_or_stracpy(format.select);
|
||||
fc->default_value = val;
|
||||
fc->default_state = has_attr(a, "selected", html_context->options);
|
||||
fc->mode = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: format.select_disabled;
|
||||
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_stack_dup(html_context, ELEMENT_KILLABLE);
|
||||
format.form = fc;
|
||||
format.style.attr |= AT_BOLD;
|
||||
put_chrs(html_context, "[ ]", 3);
|
||||
kill_html_stack_item(html_context, &html_top);
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
void
|
||||
html_textarea(struct html_context *html_context, unsigned char *attr,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
|
Loading…
Reference in New Issue
Block a user