/[pub]/suikawiki/script/misc/plugins/view/stylesheet.wp2
Suika

Contents of /suikawiki/script/misc/plugins/view/stylesheet.wp2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations) (download)
Wed Feb 18 07:22:11 2004 UTC (20 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.2: +3 -1 lines
WikiDB error reporting bug fixed

1 wakaba 1.1 #?SuikaWikiConfig/2.0
2    
3     Plugin:
4     @Name: StyleSheet
5     @Description:
6     @@@: Stylesheet support
7     @@lang:en
8 wakaba 1.2 @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.2 @Date.RCS:
16 wakaba 1.3 $Date: 2004/02/14 10:50:38 $
17 wakaba 1.1 @RequiredPlugin[list]:
18     Error
19     HTML
20     @Use:
21     use Message::Util::Error;
22     my $WIKIRESOURCE;
23    
24     PluginConst:
25     @NS_XHTML1:
26     http://www.w3.org/1999/xhtml
27     @WIKIRESOURCE:
28     {($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))}
29    
30     Format:
31     @ModuleName:
32     StyleSheet::CSS
33    
34     @Name: CSS
35     @Type: text/css
36     @Description:
37     @@@: Cascading Style Sheets (CSS)
38     @@lang: en
39    
40     @Use:
41     use Message::Markup::XML::QName qw(NS_xml_URI);
42    
43     @Converter:
44     @@Type: text/css
45     @@Description:
46     @@@: CSS -> CSS (no convertion)
47     @@lang: en
48     @@ToString:
49     return $$source;
50     ## BUG: Insecure specification MUST be removed
51    
52     @Converter:
53     @@Type: text/html
54     @@IsFragment: 1
55     @@Description:
56     @@@: CSS with some decoration, marked-up in HTML
57     @@lang: en
58     @@Main:
59     my $node = $opt->{-parent}->append_new_node
60     (type => '#element',
61     namespace_uri => $NS_XHTML1,
62     local_name => 'pre');
63     $node->set_attribute (class => 'text-css');
64     $node->set_attribute (space => 'preserve', namespace_uri => NS_xml_URI);
65     $node->append_text ($$source);
66     return $node;
67    
68     ViewDefinition:
69     @Mode: css
70     @Condition:
71     @@http-method[list]:
72     GET
73     HEAD
74     POST
75     @Description:
76     @@@: CSS Style Sheet
77     @@lang: en
78     @template:
79     @@http-status-code: 200
80     @@media-type: text/css
81     @@use-media-type-charset: 1
82     @@expires: %%stylesheet%%
83     @@body:
84     %read (Type => {text/css}, return-type => {ToString},
85     when-no-converter => 406);
86    
87     FormattingRule:
88     @Category[list]:
89     view
90     view-resource
91     @Name: styles-wiki-html
92     @Description:
93     @@@:
94     Stylesheet list as HTML (link element)
95     @@lang: en
96     @Paramater:
97     @@Name: page
98     @@Type: WikiName
99     @@Default: (auto)
100     @@Description:
101     @@@@: WikiPage in which stylesheet list is defined
102     @@@lang: en
103     @Formatting:
104     my $list = __FUNCPACK__->_get_stylelist_definition_page
105     (page => $o->{wiki}->name
106     ($p->{page} ||
107     $o->{wiki}->{config}->{page}
108     ->{'StyleSheetList(text/html)'} ||
109     [qw!Wiki Style List text/html!]),
110     o => $o, wiki => $o->{wiki});
111     return unless $list;
112     my $parent = $p->{-parent};
113    
114     my $ua_apply;
115     my $dg = $o->{wiki}->{var}->{client}->{downgrade};
116     if ($dg->{stylesheet_non_standard}) {
117     $ua_apply = $dg->{ua_netscape4} ? 'Netscape4'
118     : $dg->{ua_winie60} ? 'WinIE6.0'
119     : $dg->{ua_winie55} ? 'WinIE5.5'
120     : $dg->{ua_winie50} ? 'WinIE5.0'
121     : $dg->{ua_winie40} ? 'WinIE4.0'
122     : $dg->{ua_winie30} ? 'WinIE3.0'
123     : 1;
124     }
125    
126     for my $set (@{$list->child_nodes}) {
127     if ($set->local_name eq 'StyleSet') {
128     my $type = {
129     map {$_ => 1}
130     map {ref $_ ? @$_ : [$_]}
131     $set->get_attribute_value ('Apply', default => ['alternate'])
132     };
133     next if $ua_apply and not $type->{$ua_apply};
134     my $rel = $type->{alternate} ? 'alternate stylesheet' : 'stylesheet';
135     my $title = __FUNCPACK__->_get_styleset_title
136     (StyleSet => $set, o => $o,
137     type => $type);
138     for my $sheet (@{$set->child_nodes}) {
139     if ($sheet->local_name eq 'StyleSheet') {
140     my $link = $parent->append_new_node
141     (type => '#element',
142     namespace_uri => $NS_XHTML1,
143     local_name => 'link');
144     $link->option (use_EmptyElemTag => 1);
145     $link->set_attribute (rel => $rel);
146     $link->set_attribute (title => $title) unless $type->{persistent};
147     my $media_type = $sheet->get_attribute_value
148     ('Type', default => 'text/css');
149     ## TODO: parameter
150     $link->set_attribute (type => $media_type);
151     unless ($dg->{html_link_no_media}) {
152     my $media_descriptor = $sheet->get_attribute_value ('Media');
153     $link->set_attribute (media => $media_descriptor || 'all');
154     }
155     my $mode = 'css'; ## ISSUE: Make this media-type independent!
156     $link->set_attribute
157     (href => $o->{wiki}->uri_reference
158     (page => $o->{wiki}->name
159     ($sheet->get_attribute_value
160     ('WikiPage', default => '')),
161     mode => $mode,
162     with_lm => 1, base => 1));
163     $parent->append_text ("\n");
164     }
165     }
166    
167     }
168     }
169    
170     FormattingRule:
171     @Category[list]:
172     view
173     view-resource
174     @Name: styles-wiki-xml
175     @Description:
176     @@@:
177     Stylesheet list in xml-stylesheet processing instructions
178     @@lang: en
179     @Parameter:
180     @@Name: downgrade-html
181     @@Type: boolean
182     @@Default: "0"
183     @@Description:
184     @@@@:
185     HTML downgrade mode. PIs are not outputed if User-Agent does not
186     support PIs (eg. Classic Mozilla).
187     @@lang: en
188     @Paramater:
189     @@Name: page
190     @@Type: WikiName
191     @@Default: (auto)
192     @@Description:
193     @@@@: WikiPage in which stylesheet list is defined
194     @@@lang: en
195     @Formatting:
196     __ATTRTEXT:%downgrade_html__;
197     if ($p->{downgrade_html}) {
198     return if $o->{wiki}->{var}->{client}->{downgrade}->{html_no_pi};
199     }
200     my $list = __FUNCPACK__->_get_stylelist_definition_page
201     (page => $o->{wiki}->name
202     ($p->{page} ||
203     $o->{wiki}->{config}->{page}
204     ->{'StyleSheetList(text/html)'} ||
205     [qw!Wiki Style List text/html!]),
206     o => $o, wiki => $o->{wiki});
207     return unless $list;
208     my $parent = $p->{-parent};
209    
210     for my $set (@{$list->child_nodes}) {
211     if ($set->local_name eq 'StyleSet') {
212     my $type = {map {$_ => 1}
213     @{
214     $set->get_attribute_value ('Apply', default => ['alternate'])
215     }};
216     my $rel = $type->{alternate} ? 'alternate stylesheet' : 'stylesheet';
217     my $title = __FUNCPACK__->_get_styleset_title
218     (StyleSet => $set, o => $o,
219     type => $type);
220     for my $sheet (@{$set->child_nodes}) {
221     if ($sheet->local_name eq 'StyleSheet') {
222     my $link = $parent->append_new_node
223     (type => '#pi',
224     local_name => 'xml-stylesheet');
225     $link->set_attribute (alternate => $type->{preferred} ? 'no'
226     : 'yes')
227     unless $type->{persistent};
228     $link->set_attribute (title => $title) unless $type->{persistent};
229     my $media_type = $sheet->get_attribute_value
230     ('Type', default => 'text/css');
231     ## TODO: parameter
232     $link->set_attribute (type => $media_type);
233     unless ($o->{wiki}->{var}->{client}->{downgrade}
234     ->{html_link_no_media}) {
235     my $media_descriptor = $sheet->get_attribute_value ('Media');
236     $link->set_attribute (media => $media_descriptor || 'all');
237     }
238     my $mode = 'css'; ## ISSUE: Make this media-type independent!
239     $link->set_attribute
240     (href => $o->{wiki}->uri_reference
241     (page => $o->{wiki}->name
242     ($sheet->get_attribute_value
243     ('WikiPage', default => '')),
244     mode => $mode,
245     with_lm => 1));
246     $parent->append_text ("\n");
247     }
248     }
249     }
250     }
251    
252     FormattingRule:
253     @Category[list]:
254     view
255     view-resource
256     form-input
257     @Name: select-user-preferred-style
258     @Description:
259     @@@:
260     Select user preferred style
261     @@lang: en
262     @Paramater:
263     @@Name: page
264     @@Type: WikiName
265     @@Default: (auto)
266     @@Description:
267     @@@@: WikiPage in which stylesheet list is defined
268     @@@lang: en
269     @Formatting:
270     __ATTRTEXT:%page__;
271     my $list = __FUNCPACK__->_get_stylelist_definition_page
272     (page => $o->{wiki}->name
273     ($p->{page} ||
274     $o->{wiki}->{config}->{page}
275     ->{'StyleSheetList(text/html)'} ||
276     [qw!Wiki Style List text/html!]),
277     o => $o, wiki => $o->{wiki});
278     return unless $list;
279     my $form = $p->{-parent}->append_new_node
280     (type => '#element',
281     namespace_uri => $NS_XHTML1,
282     local_name => 'form');
283     my $id = SuikaWiki::Plugin->module_package ('WikiFormCore')
284     ->control_id ($o,
285     local_id => 'style-selector',
286     require_local_id => 1);
287     $form->set_attribute (id => $id->{global_id});
288     my $div = $form->append_new_node
289     (type => '#element',
290     namespace_uri => $NS_XHTML1,
291     local_name => 'div');
292     my $parent = $div->append_new_node
293     (type => '#element',
294     namespace_uri => $NS_XHTML1,
295     local_name => 'select');
296     $parent->set_attribute (id => $id->{global_id}.'-list');
297    
298     my $default = $parent->append_new_node
299     (type => '#element',
300     namespace_uri => $NS_XHTML1,
301     local_name => 'option');
302     $default->set_attribute (value => 'no-style');
303     $default->append_text ($WIKIRESOURCE->get (name => 'Style:Default',
304     o => $o, wiki => $o->{wiki}));
305     my $selected = 0;
306    
307     for my $set (@{$list->child_nodes}) {
308     if ($set->local_name eq 'StyleSet') {
309     my $type = {map {$_ => 1}
310     @{
311     $set->get_attribute_value ('Apply', default => ['alternate'])
312     }};
313     next unless $type->{preferred} or $type->{alternate};
314     my $title = __FUNCPACK__->_get_styleset_title
315     (StyleSet => $set, o => $o,
316     type => $type);
317     my $link = $parent->append_new_node
318     (type => '#element',
319     namespace_uri => $NS_XHTML1,
320     local_name => 'option');
321     $link->set_attribute (selected => 'selected'), $selected = 1
322     if $type->{preferred};
323     $link->set_attribute (value => $title);
324     $link->append_text ($title);
325     $parent->append_text ("\n");
326     }
327     }
328    
329     $default->set_attribute (selected => 'selected') unless $selected;
330    
331     for ($div->append_new_node (type => '#element',
332     namespace_uri => $NS_XHTML1,
333     local_name => 'input')) {
334     $_->set_attribute (type => 'button');
335     $_->set_attribute (id => $id->{global_id}.'-save');
336     $_->set_attribute (value => $WIKIRESOURCE->get
337     (name => 'Style:Save',
338     o => $o, wiki => $o->{wiki}));
339     $_->set_attribute (class => 'save');
340     $_->option (use_EmptyElemTag => 1);
341     }
342     for ($div->append_new_node (type => '#element',
343     namespace_uri => $NS_XHTML1,
344     local_name => 'input')) {
345     $_->set_attribute (type => 'reset');
346     $_->set_attribute (id => $id->{global_id}.'-reset');
347     $_->set_attribute (value => $WIKIRESOURCE->get
348     (name => 'Style:Reset',
349     o => $o, wiki => $o->{wiki}));
350     $_->set_attribute (class => 'reset');
351     $_->option (use_EmptyElemTag => 1);
352     }
353    
354     __ATTRTEXT:%expires__;
355 wakaba 1.2 my $cookie_path = $o->{wiki}->uri_reference->path;
356 wakaba 1.1 for ($div->append_new_node (type => '#element',
357     namespace_uri => $NS_XHTML1,
358     local_name => 'script')) {
359     $_->set_attribute (type => $o->{wiki}->{var}->{client}->{downgrade}
360     ->{media_type_no_app_js}
361     ? 'text/javascript'
362     : 'application/x-javascript');
363     $_->set_attribute (defer => 'defer');
364     ## Gecko assumes <script> content as CDATA even if it is XHTML,
365     ## when it is labeled as text/html. (Pseudo) comment declaration
366     ## nor CDATA marked section can be used to keep compatibility and
367     ## well-formedness. Use #xml type, instead of #text, not to escape
368     ## GREATER-THAN SIGN.
369     $_->append_new_node (type => '#xml', value => <<EOH);
370    
371     function getCookieValue (name) {
372     var c = document.cookie.split(';');
373     for (var i = 0; c.length > i; i++) {
374     var v = c[i].split('=');
375     if (v[0].replace(/^\\s+/,'').replace(/\\s+\$/,'') == name) {
376     return decodeURIComponent (v[1].replace(/^\\s+/,'')
377     .replace(/\\s+\$/,''));
378     }
379     }
380     return '';
381     }
382     var selectList = document.getElementById('$id->{global_id}-list');
383     selectList.value = getCookieValue('Selected');
384     selectList.onchange = function () {
385     var selectList = document.getElementById('$id->{global_id}-list');
386     for (var i = 0; document.styleSheets.length > i; i++) {
387     var s = document.styleSheets.item(i);
388     if (s.href != document.URL) {
389     if (s.title)
390     s.disabled = (s.title != selectList.value);
391     }
392     }
393     }
394     document.getElementById('$id->{global_id}-save').onclick = function () {
395     var selectList = document.getElementById('$id->{global_id}-list');
396     var expires = new Date();
397     expires.setTime (expires.getTime()
398     + 1000*3600*24*@{[$p->{expires}||365]});
399     document.cookie = 'Selected=' + encodeURIComponent(selectList.value)
400     + ';path=$cookie_path;expires='+expires.toGMTString();
401     }
402     document.getElementById('$id->{global_id}-reset').onclick = function () {
403     var expires = new Date();
404     expires.setTime (expires.getTime() - 3600);
405     document.cookie = 'Selected=;path=$cookie_path;expires='
406     + expires.toGMTString();
407     }
408    
409     EOH
410     }
411    
412     FormattingRule:
413     @Category[list]:
414     view
415     view-resource
416     form-input
417     @Name: apply-user-preferred-style
418     @Description:
419     @@@:
420     Applying user preferred style
421     @@lang: en
422     @Formatting:
423     for ($p->{-parent}->append_new_node
424     (type => '#element',
425     namespace_uri => $NS_XHTML1,
426     local_name => 'script')) {
427     $_->set_attribute (type => $o->{wiki}->{var}->{client}->{downgrade}
428     ->{media_type_no_app_js}
429     ? 'text/javascript'
430     : 'application/x-javascript');
431     $_->set_attribute (defer => 'defer');
432     ## TODO: Some mechanism to prevent multiple outputing of same functions
433     ## required.
434     $_->append_new_node (type => '#xml', value => <<EOH);
435    
436     function getCookieValue (name) {
437     var c = document.cookie.split(';');
438     for (var i = 0; c.length > i; i++) {
439     var v = c[i].split('=');
440     if (v[0].replace(/^\\s+/,'').replace(/\\s+\$/,'') == name) {
441     return decodeURIComponent (v[1].replace(/^\\s+/,'')
442     .replace(/\\s+\$/,''));
443     }
444     }
445     return '';
446     }
447    
448     var styleName = getCookieValue('Selected');
449     if (styleName) {
450     for (var i = 0; document.styleSheets.length > i; i++) {
451     var s = document.styleSheets.item(i);
452     if (s.href != document.URL) {
453     if (s.title)
454     s.disabled = (s.title != styleName) ? true : false;
455     }
456     }
457     }
458    
459     EOH
460     }
461    
462     Function:
463     @Name: _get_stylelist_definition_page
464     @Main:
465     my (undef, %opt) = @_;
466     my $content;
467     if ($opt{wiki}->{db}) {
468     try {
469     $content = $opt{wiki}->{db}->get (content => $opt{page});
470     } catch SuikaWiki::DB::Util::Error with {
471 wakaba 1.3 my $err = shift;
472     $err->throw if $err->{-type} eq 'ERROR_REPORTED';
473 wakaba 1.1 $content = undef;
474     };
475     }
476     my $format = SuikaWiki::Plugin->module_package ('WikiFormat')
477     ->handler (\$content,
478     o => $opt{o},
479     wiki => $opt{o}->{wiki});
480     my $cfg;
481     try {
482     $cfg = $format->convert (\$content,
483     Type => 'application/x.suikawiki.config',
484     Type_param => {version => '2.0'},
485     o => $opt{o}, page => $opt{page});
486     } catch SuikaWiki::Format::Definition::error with {
487     my $err = shift;
488     if ($err->{-type} eq 'CONVERTER_NOT_FOUND') {
489     SuikaWiki::Plugin->module_package ('Error')
490     ->report_error_simple
491     ($opt{o}->{wiki},
492     'Condition' => $err->stringify);
493     } else {
494     $err->throw;
495     }
496     };
497     $cfg;
498    
499     Function:
500     @Name: _get_styleset_title
501     @Description:
502     @@@: Get "title" of the styleset
503     @@lang: en
504     @Main:
505     my (undef, %opt) = @_;
506     my $title;
507     if (not $opt{type}->{persistent}) {
508     $title = $opt{StyleSet}->get_attribute_value
509     ('DisplayName', default => '');
510     if (length $title) {
511     try {
512     $title = SuikaWiki::Plugin->formatter ('view_resource')
513     ->replace ($title,
514     param => $opt{o})
515     ->inner_text;
516     } catch Message::Util::Formatter::error with {
517     my $err = shift;
518     if ($err->{-object}->{-category_name} eq 'view_resource') {
519     my $wiki = $err->{option}->{param}->{wiki};
520     SuikaWiki::Plugin->module_package ('Error')
521     ->reporting_formatting_template_error
522     ($err, $wiki,
523     template => $title);
524     } else {
525     $err->throw;
526     }
527     $title ||= $opt{StyleSet}->get_attribute_value
528     ('Name', default => '');
529     };
530     } else {
531     $title = $opt{StyleSet}->get_attribute_value ('Name', default => '');
532     }
533     }
534     return $title;
535    
536     FormattingRule:
537     @Category[list]:
538     view
539     view-resource
540     form-input
541     @Name: select-user-preferred-mode
542     @Description:
543     @@@:
544     Select user preferred mode
545     @@lang: en
546     @Formatting:
547     my $list = [grep /^[0-9A-Za-z_]/, keys %{$o->{wiki}->{view}->{definition}}];
548     my $form = $p->{-parent}->append_new_node
549     (type => '#element',
550     namespace_uri => $NS_XHTML1,
551     local_name => 'form');
552     my $id = SuikaWiki::Plugin->module_package ('WikiFormCore')
553     ->control_id ($o,
554     local_id => 'spss--mode-selector',
555     require_local_id => 1);
556     $form->set_attribute (id => $id->{global_id});
557     my $div = $form->append_new_node
558     (type => '#element',
559     namespace_uri => $NS_XHTML1,
560     local_name => 'div');
561     my $parent = $div->append_new_node
562     (type => '#element',
563     namespace_uri => $NS_XHTML1,
564     local_name => 'select');
565     $parent->set_attribute (id => $id->{global_id}.'-list');
566    
567     my $default = $parent->append_new_node
568     (type => '#element',
569     namespace_uri => $NS_XHTML1,
570     local_name => 'option');
571     $default->set_attribute (value => 'default');
572     $default->append_text ($WIKIRESOURCE->get (name => 'Mode:Default',
573     o => $o, wiki => $o->{wiki}));
574     $default->set_attribute (selected => 'selected');
575    
576     for my $set (@$list) {
577     my $title = $WIKIRESOURCE->get (name => 'Mode:'.$set,
578     o => $o, wiki => $o->{wiki});
579     my $link = $parent->append_new_node
580     (type => '#element',
581     namespace_uri => $NS_XHTML1,
582     local_name => 'option');
583     $link->set_attribute (value => $set);
584     $link->append_text ($title);
585     $parent->append_text ("\n");
586     }
587    
588     for ($div->append_new_node (type => '#element',
589     namespace_uri => $NS_XHTML1,
590     local_name => 'input')) {
591     $_->set_attribute (type => 'button');
592     $_->set_attribute (id => $id->{global_id}.'-save');
593     $_->set_attribute (value => $WIKIRESOURCE->get
594     (name => 'Mode:Save',
595     o => $o, wiki => $o->{wiki}));
596     $_->set_attribute (class => 'save');
597     $_->option (use_EmptyElemTag => 1);
598     }
599     for ($div->append_new_node (type => '#element',
600     namespace_uri => $NS_XHTML1,
601     local_name => 'input')) {
602     $_->set_attribute (type => 'reset');
603     $_->set_attribute (id => $id->{global_id}.'-reset');
604     $_->set_attribute (value => $WIKIRESOURCE->get
605     (name => 'Mode:Reset',
606     o => $o, wiki => $o->{wiki}));
607     $_->set_attribute (class => 'reset');
608     $_->option (use_EmptyElemTag => 1);
609     }
610    
611     __ATTRTEXT:%expires__;
612 wakaba 1.2 my $cookie_path = $o->{wiki}->uri_reference->path;
613 wakaba 1.1 for ($div->append_new_node (type => '#element',
614     namespace_uri => $NS_XHTML1,
615     local_name => 'script')) {
616     $_->set_attribute (type => $o->{wiki}->{var}->{client}->{downgrade}
617     ->{media_type_no_app_js}
618     ? 'text/javascript'
619     : 'application/x-javascript');
620     $_->set_attribute (defer => 'defer');
621     $_->append_new_node (type => '#xml', value => <<EOH);
622    
623     function getCookieValue (name) {
624     var c = document.cookie.split(';');
625     for (var i = 0; c.length > i; i++) {
626     var v = c[i].split('=');
627     if (v[0].replace(/^\\s+/,'').replace(/\\s+\$/,'') == name) {
628     return decodeURIComponent (v[1].replace(/^\\s+/,'')
629     .replace(/\\s+\$/,''));
630     }
631     }
632     return '';
633     }
634    
635     document.getElementById ('$id->{global_id}-list').value
636     = getCookieValue('SelectedMode');
637     document.getElementById ('$id->{global_id}-save').onclick = function () {
638     var expires = new Date ();
639     expires.setTime (expires.getTime ()
640     + 1000*3600*24*@{[$p->{expires}||365]});
641     document.cookie = 'SelectedMode='
642     + encodeURIComponent
643     (document.getElementById('$id->{global_id}-list')
644     .value)
645     + ';path=$cookie_path;expires='
646     + expires.toGMTString ();
647     }
648     document.getElementById('$id->{global_id}-reset').onclick = function () {
649     var expires = new Date();
650     expires.setTime (expires.getTime() - 3600);
651     document.cookie = 'SelectedMode=;path=$cookie_path;expires='
652     + expires.toGMTString();
653     }
654    
655     EOH
656     }
657    
658     ViewFragment:
659     @Name: ht--stylesheets-html
660     @Order: 0
661     @Description:
662     @@@: Default stylesheets links
663     @@lang: en
664     @Formatting:
665     %styles-wiki-html;
666    
667     ViewFragment:
668     @Name: ht--pre-element-content
669     @Order: 0
670     @Description:
671     @@@: Default stylesheets links (as xml-stylesheet PIs)
672     @@lang: en
673     @Formatting:
674     %styles-wiki-xml (downgrade-html);
675    
676     ViewFragment:
677     @Name: ws--footer
678     @Order: 100000
679     @Description:
680     @@@: Apply user selected stylesheets
681     @@lang: en
682     @Formatting:
683     %apply-user-preferred-style;
684    
685     Resource:
686     @Mode:css:
687     @@@: Cascading Style Sheet output
688     @@lang: en
689     @Mode:Default:
690     @@@:
691     Default
692     @@lang: en
693     @Mode:Reset:
694     @@@: Reset default mode selection
695     @@lang: en
696     @Mode:Save:
697     @@@: Save default mode selection
698     @@lang: en
699     @Style:Default:
700     @@@:
701     Basic Page Style
702     @@: lang: en
703     @Style:Reset:
704     @@@:
705     Reset style selection
706     @@lang: en
707     @Style:Save:
708     @@@:
709     Save style selection
710     @@lang: en
711    
712    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24