📄 cgi.pm
字号:
my($label,$value,@other) = rearrange([NAME,[VALUE,LABEL]],@p); $label=$self->escapeHTML($label); $value=$self->escapeHTML($value,1); my($name) = ' name=".submit"' unless $NOSTICKY; $name = qq/ name="$label"/ if defined($label); $value = defined($value) ? $value : $label; my($val) = ''; $val = qq/ value="$value"/ if defined($value); my($other) = @other ? " @other" : ''; return $XHTML ? qq(<input type="submit"$name$val$other />) : qq/<input type="submit"$name$val$other>/;}END_OF_FUNC#### Method: reset# Create a "reset" button.# Parameters:# $name -> (optional) Name for the button.# Returns:# A string containing a <INPUT TYPE="reset"> tag####'reset' => <<'END_OF_FUNC',sub reset { my($self,@p) = self_or_default(@_); my($label,@other) = rearrange([NAME],@p); $label=$self->escapeHTML($label); my($value) = defined($label) ? qq/ value="$label"/ : ''; my($other) = @other ? " @other" : ''; return $XHTML ? qq(<input type="reset"$value$other />) : qq/<input type="reset"$value$other>/;}END_OF_FUNC#### Method: defaults# Create a "defaults" button.# Parameters:# $name -> (optional) Name for the button.# Returns:# A string containing a <INPUT TYPE="submit" NAME=".defaults"> tag## Note: this button has a special meaning to the initialization script,# and tells it to ERASE the current query string so that your defaults# are used again!####'defaults' => <<'END_OF_FUNC',sub defaults { my($self,@p) = self_or_default(@_); my($label,@other) = rearrange([[NAME,VALUE]],@p); $label=$self->escapeHTML($label,1); $label = $label || "Defaults"; my($value) = qq/ value="$label"/; my($other) = @other ? " @other" : ''; return $XHTML ? qq(<input type="submit" name=".defaults"$value$other />) : qq/<input type="submit" NAME=".defaults"$value$other>/;}END_OF_FUNC#### Method: comment# Create an HTML <!-- comment --># Parameters: a string'comment' => <<'END_OF_FUNC',sub comment { my($self,@p) = self_or_CGI(@_); return "<!-- @p -->";}END_OF_FUNC#### Method: checkbox# Create a checkbox that is not logically linked to any others.# The field value is "on" when the button is checked.# Parameters:# $name -> Name of the checkbox# $checked -> (optional) turned on by default if true# $value -> (optional) value of the checkbox, 'on' by default# $label -> (optional) a user-readable label printed next to the box.# Otherwise the checkbox name is used.# Returns:# A string containing a <INPUT TYPE="checkbox"> field####'checkbox' => <<'END_OF_FUNC',sub checkbox { my($self,@p) = self_or_default(@_); my($name,$checked,$value,$label,$override,@other) = rearrange([NAME,[CHECKED,SELECTED,ON],VALUE,LABEL,[OVERRIDE,FORCE]],@p); $value = defined $value ? $value : 'on'; if (!$override && ($self->{'.fieldnames'}->{$name} || defined $self->param($name))) { $checked = grep($_ eq $value,$self->param($name)) ? ' checked' : ''; } else { $checked = $checked ? qq/ checked/ : ''; } my($the_label) = defined $label ? $label : $name; $name = $self->escapeHTML($name); $value = $self->escapeHTML($value,1); $the_label = $self->escapeHTML($the_label); my($other) = @other ? " @other" : ''; $self->register_parameter($name); return $XHTML ? qq{<input type="checkbox" name="$name" value="$value"$checked$other />$the_label} : qq{<input type="checkbox" name="$name" value="$value"$checked$other>$the_label};}END_OF_FUNC#### Method: checkbox_group# Create a list of logically-linked checkboxes.# Parameters:# $name -> Common name for all the check boxes# $values -> A pointer to a regular array containing the# values for each checkbox in the group.# $defaults -> (optional)# 1. If a pointer to a regular array of checkbox values,# then this will be used to decide which# checkboxes to turn on by default.# 2. If a scalar, will be assumed to hold the# value of a single checkbox in the group to turn on. # $linebreak -> (optional) Set to true to place linebreaks# between the buttons.# $labels -> (optional)# A pointer to an associative array of labels to print next to each checkbox# in the form $label{'value'}="Long explanatory label".# Otherwise the provided values are used as the labels.# Returns:# An ARRAY containing a series of <INPUT TYPE="checkbox"> fields####'checkbox_group' => <<'END_OF_FUNC',sub checkbox_group { my($self,@p) = self_or_default(@_); my($name,$values,$defaults,$linebreak,$labels,$rows,$columns, $rowheaders,$colheaders,$override,$nolabels,@other) = rearrange([NAME,[VALUES,VALUE],[DEFAULTS,DEFAULT], LINEBREAK,LABELS,ROWS,[COLUMNS,COLS], ROWHEADERS,COLHEADERS, [OVERRIDE,FORCE],NOLABELS],@p); my($checked,$break,$result,$label); my(%checked) = $self->previous_or_default($name,$defaults,$override); if ($linebreak) { $break = $XHTML ? "<br />" : "<br>"; } else { $break = ''; } $name=$self->escapeHTML($name); # Create the elements my(@elements,@values); @values = $self->_set_values_and_labels($values,\$labels,$name); my($other) = @other ? " @other" : ''; foreach (@values) { $checked = $checked{$_} ? qq/ checked/ : ''; $label = ''; unless (defined($nolabels) && $nolabels) { $label = $_; $label = $labels->{$_} if defined($labels) && defined($labels->{$_}); $label = $self->escapeHTML($label); } $_ = $self->escapeHTML($_,1); push(@elements,$XHTML ? qq(<input type="checkbox" name="$name" value="$_"$checked$other />${label}${break}) : qq/<input type="checkbox" name="$name" value="$_"$checked$other>${label}${break}/); } $self->register_parameter($name); return wantarray ? @elements : join(' ',@elements) unless defined($columns) || defined($rows); return _tableize($rows,$columns,$rowheaders,$colheaders,@elements);}END_OF_FUNC# Escape HTML -- used internally'escapeHTML' => <<'END_OF_FUNC',sub escapeHTML { my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_); return undef unless defined($toencode); return $toencode if ref($self) && $self->{'dontescape'}; $toencode =~ s{&}{&}gso; $toencode =~ s{<}{<}gso; $toencode =~ s{>}{>}gso; $toencode =~ s{"}{"}gso; my $latin = uc $self->{'.charset'} eq 'ISO-8859-1' || uc $self->{'.charset'} eq 'WINDOWS-1252'; if ($latin) { # bug in some browsers $toencode =~ s{'}{'}gso; $toencode =~ s{\x8b}{‹}gso; $toencode =~ s{\x9b}{›}gso; if (defined $newlinestoo && $newlinestoo) { $toencode =~ s{\012}{ }gso; $toencode =~ s{\015}{ }gso; } } return $toencode;}END_OF_FUNC# unescape HTML -- used internally'unescapeHTML' => <<'END_OF_FUNC',sub unescapeHTML { my ($self,$string) = CGI::self_or_default(@_); return undef unless defined($string); my $latin = defined $self->{'.charset'} ? $self->{'.charset'} =~ /^(ISO-8859-1|WINDOWS-1252)$/i : 1; # thanks to Randal Schwartz for the correct solution to this one $string=~ s[&(.*?);]{ local $_ = $1; /^amp$/i ? "&" : /^quot$/i ? '"' : /^gt$/i ? ">" : /^lt$/i ? "<" : /^#(\d+)$/ && $latin ? chr($1) : /^#x([0-9a-f]+)$/i && $latin ? chr(hex($1)) : $_ }gex; return $string;}END_OF_FUNC# Internal procedure - don't use'_tableize' => <<'END_OF_FUNC',sub _tableize { my($rows,$columns,$rowheaders,$colheaders,@elements) = @_; $rowheaders = [] unless defined $rowheaders; $colheaders = [] unless defined $colheaders; my($result); if (defined($columns)) { $rows = int(0.99 + @elements/$columns) unless defined($rows); } if (defined($rows)) { $columns = int(0.99 + @elements/$rows) unless defined($columns); } # rearrange into a pretty table $result = "<table>"; my($row,$column); unshift(@$colheaders,'') if @$colheaders && @$rowheaders; $result .= "<tr>" if @{$colheaders}; foreach (@{$colheaders}) { $result .= "<th>$_</th>"; } for ($row=0;$row<$rows;$row++) { $result .= "<tr>"; $result .= "<th>$rowheaders->[$row]</th>" if @$rowheaders; for ($column=0;$column<$columns;$column++) { $result .= "<td>" . $elements[$column*$rows + $row] . "</td>" if defined($elements[$column*$rows + $row]); } $result .= "</tr>"; } $result .= "</table>"; return $result;}END_OF_FUNC#### Method: radio_group# Create a list of logically-linked radio buttons.# Parameters:# $name -> Common name for all the buttons.# $values -> A pointer to a regular array containing the# values for each button in the group.# $default -> (optional) Value of the button to turn on by default. Pass '-'# to turn _nothing_ on.# $linebreak -> (optional) Set to true to place linebreaks# between the buttons.# $labels -> (optional)# A pointer to an associative array of labels to print next to each checkbox# in the form $label{'value'}="Long explanatory label".# Otherwise the provided values are used as the labels.# Returns:# An ARRAY containing a series of <INPUT TYPE="radio"> fields####'radio_group' => <<'END_OF_FUNC',sub radio_group { my($self,@p) = self_or_default(@_); my($name,$values,$default,$linebreak,$labels, $rows,$columns,$rowheaders,$colheaders,$override,$nolabels,@other) = rearrange([NAME,[VALUES,VALUE],DEFAULT,LINEBREAK,LABELS, ROWS,[COLUMNS,COLS], ROWHEADERS,COLHEADERS, [OVERRIDE,FORCE],NOLABELS],@p); my($result,$checked); if (!$override && defined($self->param($name))) { $checked = $self->param($name); } else { $checked = $default; } my(@elements,@values); @values = $self->_set_values_and_labels($values,\$labels,$name); # If no check array is specified, check the first by default $checked = $values[0] unless defined($checked) && $checked ne ''; $name=$self->escapeHTML($name); my($other) = @other ? " @other" : ''; foreach (@values) { my($checkit) = $checked eq $_ ? qq/ checked/ : ''; my($break); if ($linebreak) { $break = $XHTML ? "<br />" : "<br>"; } else { $break = ''; } my($label)=''; unless (defined($nolabels) && $nolabels) { $label = $_; $label = $labels->{$_} if defined($labels) && defined($labels->{$_}); $label = $self->escapeHTML($label,1); } $_=$self->escapeHTML($_); push(@elements,$XHTML ? qq(<input type="radio" name="$name" value="$_"$checkit$other />${label}${break}) : qq/<input type="radio" name="$name" value="$_"$checkit$other>${label}${break}/); } $self->register_parameter($name); return wantarray ? @elements : join(' ',@elements) unless defined($columns) || defined($rows); return _tableize($rows,$columns,$rowheaders,$colheaders,@elements);}END_OF_FUNC#### Method: popup_menu# Create a popup menu.# Parameters:# $name -> Name for all the menu# $values -> A pointer to a regular array containing the# text of each menu item.# $default -> (optional) Default item to display# $labels -> (optional)# A pointer to an associative array of labels to print next to each checkbox# in the form $label{'value'}="Long explanatory label".# Otherwise the provided values are used as the labels.# Returns:# A string containing the definition of a popup menu.####'popup_menu' => <<'END_OF_FUNC',sub popup_menu { my($self,@p) = self_or_default(@_); my($name,$values,$default,$labels,$override,@other) = rearrange([NAME,[VALUES,VALUE],[DEFAULT,DEFAULTS],LABELS,[OVERRIDE,FORCE]],@p); my($result,$selected); if (!$override && defined($self->param($name))) { $selected = $self->param($name); } else { $selected = $default; } $name=$self->escapeHTML($name); my($other) = @other ? " @other" : ''; my(@values); @values = $self->_set_values_and_labels($values,\$labels,$name); $result = qq/<select name="$name"$other>\n/; foreach (@values) { my($selectit) = defined($selected) ? ($selected eq $_ ? qq/selected/ : '' ) : ''; my($label) = $_; $label = $labels->{$_} if defined($labels) && defined($labels->{$_}); my($value) = $self->escapeHTML($_); $label=$self->escapeHTML($label,1); $result .= "<option $selectit value=\"$value\">$label</option>\n"; } $result .= "</select>\n"; return $result;}END_OF_FUNC#### Method: scrolling_list# Create a scrolling list.# Parameters:# $name -> name for the list# $values -> A pointer to a regular array containing the# values for each option line in the list.# $defaults -> (optional)# 1. If a pointer to a regular array of options,# then this will be used to decide which# lines to turn on by default.# 2. Otherwise holds the value of the single line to turn on.# $size -> (optional) Size of the list.# $multiple -> (optional) If set, allow multiple selections.# $labels -> (optional)# A pointer to an associative array of labels to print next to each checkbox# in the form $label{'value'}="Long explanatory label".# Otherwise the provided values are used as the labels.# Returns:# A string containing the definition of a scrolling list.####'scrolling_list' => <<'END_OF_FUNC',sub scrolling_list { my($self,@p) = self_or_default(@_); my($name,$values,$defaults,$size,$multiple,$labels,$override,@other) = rearrange([NAME,[VALUES,VALUE],[DEFAULTS,DEFAULT], SIZE,MULTIPLE,LABELS,[OVERRIDE,FORCE]],@p); my($result,@values); @values = $self->_set_values_and_labels($values,\$labels,$name); $size = $size || scalar(@values); my(%selected) = $self->previous_or_default($name,$defaults,$override); my($is_multiple) = $multiple ? qq/ multiple/ : ''; my($has_size) = $size ? qq/ size="$size"/: ''; my($other) = @other ? " @other" : ''; $name=$self->escapeHTML($name); $result = qq/<select name="$name"$has_size$is_multiple$other>\n/; foreach (@values) { my($selectit) = $selected{$_} ? qq/selected/ : ''; my($label) = $_; $label
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -