#?SuikaWikiConfig/2.0 Plugin: @Name: WikiFormText @FullName: WikiForm: Text input module @Description: This module provides text input fields of WikiForm implementation. @License: %%Perl%% @Author[list]: Wakaba @Date.RCS: $Date: 2004/09/21 03:18:21 $ @RequiredModule[list]: WikiFormCore PluginConst: @NS_XHTML1: http://www.w3.org/1999/xhtml FormattingRule: @Category[list]: form-input @Name: text @Description: @@@@: Short text input (input[@type='text']) @@@lang:en @Formatting: __ATTRTEXT:%id__;__ATTRNODE:%label__; my $id = SuikaWiki::Plugin->module_package ('WikiFormCore') ->control_id ($o, local_id => $p->{id}, require_local_id => 1); my $has_label = 0; if ($p->{label}->count) { $has_label = 1; for ($p->{-parent}->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'label')) { $_->set_attribute (for => $id->{global_id}); $_->append_node ($p->{label}); } } for ($p->{-parent}->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'input')) { $_->set_attribute (type => 'text'); $_->set_attribute (name => $id->{local_id}); $_->set_attribute (id => $id->{global_id}) if $has_label; __ATTRTEXT:%size__;__ATTRTEXT:%description__; $_->set_attribute (size => ($p->{size}||20)*2); ## Length $_->set_attribute (title => $p->{description}) if $p->{description}; $_->set_attribute (disabled => 'disabled') if $o->{form}->{disabled}; __ATTRTEXT:%class__; my @class = split /\s+/, $p->{class}; push @class, 'require' if $o->{form}->{require}->{id}->{$p->{id}}; $_->option (use_EmptyElemTag => 1); __ATTRTEXT:%source__;__ATTRTEXT:%default__; if ($p->{source}) { my $v; if (ref $o->{var}->{source}->{$p->{source}}) { my $d = $o->{var}->{source}->{$p->{source}}->(p=>$p,o=>$o); $v = $d->{value}; push @class, @{$d->{class}||[]}; } else { $v = $o->{var}->{$p->{source}}; } $_->set_attribute (value => ref $v eq 'ARRAY' ? join "\n", @$v : ref $v ? '' . $v : $v); } else { $_->set_attribute (value => $p->{default}); ## Default value } $_->set_attribute (class => join ' ', @class) if @class; } FormattingRule: @Category[list]: form-template @Name: text @Description: @@@: Inputed text @@lang:en @Parameter: @@Name: source @@Type: ID @@Default:(require) @@Description: @@@@: WikiForm control ID of the source field @@@lang:en @After: $p->{-result} .= $o->{wiki}->{input}->parameter ('wikiform__'.$p->{source}); FormattingRule: @Category[list]: form-input @Name: textarea @Description: @@@@: Multiline text input @@@lang:en @Formatting: __ATTRTEXT:%id__;__ATTRNODE:%label__; my $id = SuikaWiki::Plugin->module_package ('WikiFormCore') ->control_id ($o, local_id => $p->{id}, require_local_id => 1); my $has_label = 0; if ($p->{label}->count) { $has_label = 1; for ($p->{-parent}->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'label')) { $_->set_attribute (for => $id->{global_id}); $_->append_node ($p->{label}); } $p->{-parent}->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'br') ->option (use_EmptyElemTag => 1); } for ($p->{-parent}->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'textarea')) { $_->set_attribute (name => $id->{local_id}); $_->set_attribute (id => $id->{global_id}) if $has_label; __ATTRTEXT:%size__;__ATTRTEXT:%lines__;__ATTRTEXT:%description__; $_->set_attribute (cols => ($p->{size}||20)*2); ## Length $_->set_attribute (rows => ($p->{lines}||5)); ## Lines $_->set_attribute (title => $p->{description}) if $p->{description}; $_->set_attribute (disabled => 'disabled') if $o->{form}->{disabled}; __ATTRTEXT:%class__; my @class = split /\s+/, $p->{class}; push @class, 'require' if $o->{form}->{require}->{id}->{$p->{id}}; ## ISSUE: Can't we separate this into stylesheet? if ($o->{wiki}->{var}->{client}->{user_agent_name} =~ m#^Mozilla/[0-4]\.#) { $_->set_attribute (wrap => 'virtual'); } __ATTRTEXT:%source__; if ($p->{source}) { if (ref $o->{var}->{source}->{$p->{source}}) { my $d = $o->{var}->{source}->{$p->{source}}->(p=>$p,o=>$o); $_->append_text ($d->{value}); push @class, @{$d->{class}||[]}; } else { $_->append_text ($o->{var}->{$p->{source}}); } } else { __ATTRTEXT:%default__; $_->append_text ($p->{default}); ## Default value } $_->set_attribute (class => join ' ', @class) if @class; }