/[pub]/suikawiki/script/lib/SuikaWiki/Plugin/WikiFormat.wp2
Suika

Contents of /suikawiki/script/lib/SuikaWiki/Plugin/WikiFormat.wp2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (hide annotations) (download)
Sun Jul 25 06:54:29 2004 UTC (21 years, 11 months ago) by wakaba
Branch: MAIN
CVS Tags: suikawiki3-redirect, HEAD
Branch point for: helowiki, helowiki-2005
Changes since 1.6: +40 -15 lines
Property Editor implemented

1 wakaba 1.1 #?SuikaWikiConfig/2.0
2    
3     Plugin:
4     @Name: WikiFormat
5     @Description:
6     @@@: WikiFormat - format independent proceding
7     @@lang:en
8 wakaba 1.4 @License: %%Perl%%
9 wakaba 1.1 @Author:
10     @@Name:
11     @@@@: Wakaba
12     @@@lang:ja
13     @@@script:Latn
14     @@Mail[list]: w@suika.fam.cx
15 wakaba 1.4 @Date.RCS:
16 wakaba 1.7 $Date: 2004/06/03 06:38:48 $
17 wakaba 1.1 @RequiredPackage[list]:
18     Error
19 wakaba 1.5 @Use:
20     my $WIKIFORMCORE;
21     my $WIKIRESOURCE;
22     @Namespace:
23     @@media-type:
24     http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#
25 wakaba 1.1
26     PluginConst:
27     @NS_XHTML1:
28     http://www.w3.org/1999/xhtml
29 wakaba 1.5 @WIKIFORMCORE:
30     {($WIKIFORMCORE ||= SuikaWiki::Plugin->module_package ('WikiFormCore'))}
31     @WIKIRESOURCE:
32     {($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))}
33 wakaba 1.1
34     Function:
35     @Name: handler
36     @Description:
37     @@@:
38     Getting format handler for given data
39     @@lang:en
40     @Main:
41     my (undef, $content, %opt) = @_;
42 wakaba 1.5 my %type;
43 wakaba 1.6 if (not $opt{serialized_media_type} and $opt{content_prop}) {
44 wakaba 1.5 $type{serialized_media_type} = $opt{content_prop}
45     ->get_attribute_value (<Q:media-type:media-type>);
46     }
47 wakaba 1.7 $type{serialized_media_type} ||= $opt{serialized_media_type};
48     unless ($type{serialized_media_type}) {
49     my $magic = $opt{magic};
50     if (not $magic and
51     $$content =~ m[^(?:\#\?|/\*\s*)([\w.+-]+(?:/[\w.+-]+)?)]) {
52     $magic = $1;
53     }
54 wakaba 1.5 %type = $magic ? (magic => $magic) :
55     (Type => 'text/x-suikawiki',
56     Type_param => {version => '0.9'});
57     }
58     my $def = SuikaWiki::Format::Definition->new_handler (%type, -error => sub {
59 wakaba 1.1 my ($err) = @_;
60 wakaba 1.7 __FUNCPACK{Error}__
61 wakaba 1.3 ->report_error_simple ($opt{wiki} ||= $opt{o}->{wiki},
62 wakaba 1.2 SuikaWiki::Plugin
63     ->module_package ('WikiResource')
64     ->get (name => 'WikiFormat:Error:Type=WikiFormat',
65     wiki => $opt{wiki} ||
66     $opt{o}->{wiki},
67     o => $opt{o})
68 wakaba 1.3 => $err->text,
69     -trace => $opt{wiki}->{config}
70 wakaba 1.4 ->{debug}->{format});
71 wakaba 1.1 });
72     $def->{wiki} = $opt{wiki} || $opt{o}->{wiki};
73     $def->{view} = $def->{wiki}->{view};
74     $def;
75 wakaba 1.2
76 wakaba 1.3 ViewDefinition:
77     @Mode: -wf--converter-not-found
78     @Condition:
79     @@http-method[list]:
80     GET
81     HEAD
82     POST
83     @Description:
84     @@@: Converter to requested media type not found
85     @@lang: en
86     @template:
87     @@http-status-code: 406
88     @@http-status-phrase: Converter Not Found
89     @@media-type: text/html
90     @@use-media-type-charset: 1
91     @@expires: %%error%%
92     @@body:
93     %html-document (
94     title => {%res (name => {WikiFormat:NoConverter:WebPageTitle});}p,
95     link-meta => {%template (name => links);}p,
96     content => {
97     %block (id => tools1, class => tools,
98     content => {%template (name => navbar);}p);
99     %section (
100     title => {%res (name => {WikiFormat:NoConverter:Title});}p, heading,
101     content => {%paragraph (
102     content => {%res (name => {WikiFormat:NoConverter:Description});}p,
103     );%error-list (
104     no-error => {%res (name => {Error:NoErrorReported});}p,
105     );}p,
106     );
107     %block (id => footer, content => {%template (name => ws--footer);}p);
108     }p,
109     );
110 wakaba 1.5
111     FormattingRule:
112     @Category[list]:
113     form-input
114     view
115     view-resource
116     @Name: wf--select-media-type
117 wakaba 1.7 @Parameter:
118     @@Name: source
119     @@Type: CDATA
120     @@Default: (auto)
121     @@Description:
122     @@@@:
123     Default value provider. If specified,
124     $o->{var}->{source}->{ $p->{source} } must be a CODE reference
125     which returns the default value (a serialized media type,
126     with additional information).
127     @@@lang: en
128 wakaba 1.5 @Formatting:
129 wakaba 1.7 my $id = __FUNCPACK{WikiFormCore}__->control_id ($o,
130 wakaba 1.5 local_id => $p->{id},
131     require_local_id => 1);
132    
133     __ATTRNODE:%label__;
134     my $has_label = 0;
135     if ($p->{label}->count) {
136     $has_label = 1;
137     for ($p->{-parent}->append_new_node
138     (type => '#element',
139     namespace_uri => $NS_XHTML1,
140     local_name => 'label')) {
141     $_->set_attribute (for => $id->{global_id});
142     $_->append_node ($p->{label});
143     }
144     }
145 wakaba 1.7
146     my $select = $p->{-parent}->append_new_node
147     (type => '#element',
148     namespace_uri => $NS_XHTML1,
149     local_name => 'select');
150     $select->set_attribute (name => $id->{local_id});
151 wakaba 1.5
152     $select->set_attribute (id => $id->{global_id}) if $has_label;
153     __ATTRTEXT:%class__;__ATTRTEXT:%description__;
154     $select->set_attribute (title => $p->{description}) if $p->{description};
155     $select->set_attribute (disabled => 'disabled') if $o->{form}->{disabled};
156     my @class = split /\s+/, $p->{class};
157     push @class, 'require' if $o->{form}->{require}->{id}->{$p->{id}};
158     $select->set_attribute (class => join ' ', @class) if @class;
159    
160     my $default;
161 wakaba 1.7 __ATTRTEXT:%source__;
162     if ($p->{source}) {
163     if (ref $o->{var}->{source}->{$p->{source}}) {
164     my $d = $o->{var}->{source}->{$p->{source}}
165     ->(p => $p, o => $o, type => <Q:media-type:media-type>);
166     $default = $d->{value};
167     }
168     } else {
169     if ($o->{var}->{content_prop}) {
170     $default = $o->{var}->{content_prop}->get_attribute_value
171     (<Q:media-type:media-type>, default => undef);
172     }
173 wakaba 1.5 }
174     unless ($default) {
175     __ATTRTEXT:%default__;
176     $default = $p->{default} || 'IMT:application/octet-stream##';
177     }
178    
179     my $mt = $o->{wiki}->{config}->{<Q:media-type:accept-media-type>} || {};
180     for my $mtname (sort keys %$mt) {
181     for my $option ($select->append_new_node
182     (type => '#element',
183     namespace_uri => $NS_XHTML1,
184     local_name => 'option')) {
185     $option->set_attribute (title => $WIKIRESOURCE->get_text
186     (name => 'WikiFormat:MediaType:Description:'.$mtname,
187     o => $o, wiki => $o->{wiki}, default => $mtname));
188 wakaba 1.7 $option->set_attribute (value => $mtname);
189 wakaba 1.5 if ($default eq $mtname) {
190     $option->set_attribute (selected => 'selected');
191     undef $default;
192     }
193     $WIKIRESOURCE->get_op ('WikiFormat:MediaType:Label:'.$mtname,
194     $o, $option, default => $mtname);
195     }
196     }
197    
198     if ($default) {
199     for my $option ($select->append_new_node
200     (type => '#element',
201     namespace_uri => $NS_XHTML1,
202     local_name => 'option')) {
203     $option->set_attribute (value => '#asis');
204     $option->set_attribute (title => $WIKIRESOURCE->get_text
205     (name => 'WikiFormat:MediaType:Description:'.$default,
206     o => $o, wiki => $o->{wiki}, default => $default));
207     $option->set_attribute (selected => 'selected');
208     $WIKIRESOURCE->get_op ('WikiFormat:MediaType:Label:'.$default,
209     $o, $option, default => $default);
210    
211     }
212     }
213    
214     ViewFragment:
215     @Name: we--edit
216     @Description:
217     @@@: Edit form --- media type selection
218     @@lang:en
219     @Order: 420
220     @Formatting:
221     %wf--select-media-type (id => wf--media-type);
222 wakaba 1.3
223 wakaba 1.2 Resource:
224     @WikiFormat:Error:Type=WikiFormat:
225     @@@: WikiFormat
226 wakaba 1.3 @@lang: en
227     @WikiFormat:NoConverter:Description:
228     @@@:
229     Converter to media type requested not found, so that your
230     request cannot be completed.
231     @@lang: en
232     @WikiFormat:NoConverter:Title:
233     @@@: Converter Not Found
234     @@lang: en
235     @WikiFormat:NoConverter:WebPageTitle:
236     @@@: 406 Converter Not Found
237 wakaba 1.2 @@lang: en
238    
239 wakaba 1.1

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24