/[pub]/suikawiki/script/misc/plugins/link/map.wp2
Suika

Contents of /suikawiki/script/misc/plugins/link/map.wp2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.14 - (hide annotations) (download)
Fri Aug 6 03:38:11 2004 UTC (20 years, 11 months ago) by wakaba
Branch: MAIN
Changes since 1.13: +19 -16 lines
InterWiki custom source-anchor label implemented

1 wakaba 1.1 #?SuikaWikiConfig/2.0
2    
3     Plugin:
4     @Name: Map
5     @Description:
6     @@@:
7     Visualization of page to page relatinships
8     @@lang:en
9 wakaba 1.3 @License: %%Perl%%
10 wakaba 1.1 @Author:
11     @@Name:
12     @@@@: Wakaba
13     @@@lang:ja
14     @@@script:Latn
15     @@Mail[list]: w@suika.fam.cx
16 wakaba 1.2 @Date.RCS:
17 wakaba 1.14 $Date: 2004/07/25 06:54:29 $
18 wakaba 1.1 @RequiredPlugin[list]:
19 wakaba 1.12 Search
20 wakaba 1.1 WikiLinking
21 wakaba 1.12 WikiNamespace
22 wakaba 1.1 @Use:
23     use Message::Util::Error;
24     my $WIKILINKING;
25     my $WIKIRESOURCE;
26 wakaba 1.13 @Namespace:
27     @@relrev:
28     http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#
29 wakaba 1.1
30     PluginConst:
31     @NS_XHTML1:
32     http://www.w3.org/1999/xhtml
33     @NS_RDF:
34     http://www.w3.org/1999/02/22-rdf-syntax-ns#
35     @NS_RSS:
36     http://purl.org/rss/1.0/
37     @NS_DC:
38     http://purl.org/dc/elements/1.1/
39     @NS_MAP:
40     http://members.jcom.home.ne.jp/jintrick/2003/02/site-concept.xml#
41     @WIKILINKING:
42     {($WIKILINKING ||= SuikaWiki::Plugin->module_package ('WikiLinking'))}
43     @WIKIRESOURCE:
44     {($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))}
45    
46     FormattingRule:
47 wakaba 1.13 @Category[list]: view
48     @Name: m--html-link-navigation
49     @Description:
50     @@@: Navigation links (HTML link elements) made from content properties
51     @@lang: en
52     @Parameter:
53     @@Name: page
54     @@Type: WikiName
55     @@Default: (current)
56     @@Description:
57     @@@lang: en
58     @@@@: Target WikiPage
59     @Formatting:
60     my $page = $o->{wiki}->name ($p->{page} || $o->{wiki}->{var}->{page});
61     my $content_prop;
62     try {
63     $content_prop = $o->{wiki}->{db}->get (content_prop => $page);
64     } catch SuikaWiki::DB::Util::Error with {
65     my $err = shift;
66     $err->throw if $err->{-type} eq 'ERROR_REPORTED';
67     } catch SuikaWiki::Format::Definition::error with {
68     #
69     };
70    
71     if ($content_prop) {
72 wakaba 1.14 for my $rel (
73 wakaba 1.13 {uri => <Q:relrev:prev>, html => 'prev'},
74     {uri => <Q:relrev:next>, html => 'next'},
75     {uri => <Q:relrev:contents>, html => 'contents'},
76     {uri => <Q:relrev:index>, html => 'index'},
77     {uri => <Q:relrev:up>, html => 'up'},
78     ) {
79 wakaba 1.14 if (my $val = $content_prop->get_attribute ($rel->{uri})) {
80     $val = $val->value;
81     for (ref $val eq 'ARRAY' ? @$val : $val) {
82     __FUNCPACK{WikiLinking}__->to_wikipage_in_html (
83     {
84     label => qq(%html-link (
85     description => {%res (name => {Map:LinkNav:$rel->{html}:Description});: %page-name;: %page-headline;}p,
86     );\n),
87     } => {
88     base => $page,
89     page_name_relative => $o->{wiki}->name ($_),
90     }, {
91     o => $o,
92     parent => $p->{-parent},
93     -rel => $rel->{html},
94     });
95     }
96 wakaba 1.13 }
97     }
98     }
99    
100     FormattingRule:
101 wakaba 1.1 @Category[list]:
102     form-input
103     view
104     view-resource
105     @Name: recent-change-list
106     @Description:
107     @@@: Recently changed WikiPage list
108     @@lang: en
109     @Parameter:
110     @@Name: ns
111     @@Type: WikiName
112     @@Default: (auto)
113     @@Description:
114     @@@@:
115     WikiNamespace name to which listed WikiPages belong
116     @@@lang: en
117     @Formatting:
118     my $list = $p->{-parent}->append_new_node
119     (type => '#element',
120     namespace_uri => $NS_XHTML1,
121     local_name => 'ol');
122     $list->set_attribute (class => 'm--recent-changes');
123    
124     __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;
125     $p->{recursive} = 1 unless length $p->{recursive};
126 wakaba 1.2 my $ns = $o->{wiki}->name ($p->{ns});
127 wakaba 1.12
128     my @target = map { try { [$_, $o->{wiki}->{db}->get (lastmodified => $_)] }
129     catch SuikaWiki::DB::Util::Error with {
130     my $err = shift;
131     $err->throw if $err->{-type} eq 'ERROR_REPORTED';
132     [$_, undef]} }
133     $o->{wiki}->{db}->keys ('lastmodified',
134     -ns => $ns,
135     -type => 'key',
136     -recursive => $p->{recursive});
137     try {
138     my $nsmodified = $o->{wiki}->{db}->get (lastmodified => $ns);
139     push @target, [$ns, $nsmodified] if $nsmodified;
140     } catch SuikaWiki::DB::Util::Error with {
141     my $err = shift;
142     $err->throw if $err->{-type} eq 'ERROR_REPORTED';
143     };
144     @target = sort {$b->[1] <=> $a->[1]} @target;
145    
146     __ATTRTEXT:%start__;
147     __ATTRTEXT:%n__;
148     my $start = length $p->{start} ? $p->{start} :
149     $o->{wiki}->{input}->parameter ('m--change--range-start') || 0;
150     $p->{n} = $o->{wiki}->{input}->parameter ('m--change--range-number')
151     unless length $p->{n};
152     my $end = $p->{n} ? $start + $p->{n} - 1 : $start + 29;
153     $start = 0 if $start > $#target or $start < 0;
154     $end = $#target if $end < $start or $end > $#target;
155     $end = $start + 255 if $end > $start + 255;
156     local $o->{var}->{search__result} = {
157     min => 0,
158     max => $#target,
159     start => $start,
160     end => $end,
161     number => $p->{n} || 30,
162     query => $p->{query},
163     param_prefix => 'm--change',
164     };
165    
166 wakaba 1.1 __ATTRTEXT:%template__;
167     $p->{template} ||= $WIKIRESOURCE->get
168     (name => 'Link:toWikiPage:SourceLabelLong:RecentChangeItem',
169     wiki => $o->{wiki}, o => $o);
170     __ATTRTEXT:%mode__;
171 wakaba 1.12
172     for my $target (@target[$start..$end]) {
173 wakaba 1.1 $WIKILINKING->to_wikipage_in_html ({
174     label => $p->{template},
175     } => {
176 wakaba 1.2 base => $o->{wiki}->{var}->{page},
177 wakaba 1.12 page_name_relative => $o->{wiki}->name ($target->[0]),
178 wakaba 1.1 wiki_mode => $p->{mode},
179     _with_lm => 1,
180 wakaba 1.12 page_lastmodified => $target->[1],
181 wakaba 1.1 }, {
182     o => $o,
183 wakaba 1.5 parent => $list->append_new_node
184     (type => '#element',
185     namespace_uri => $NS_XHTML1,
186     local_name => 'li'),
187 wakaba 1.1 });
188     }
189    
190 wakaba 1.12 if ($list->count) {
191     $list->set_attribute (start => $start + 1);
192     __ATTRNODE:%post_list->{$p->{-parent}}__;
193     } else {
194     $p->{-parent}->remove_child_node ($list);
195     }
196    
197     ViewDefinition:
198     @Mode: m--change
199     @Condition:
200     @@http-method[list]:
201     GET
202     HEAD
203     POST
204     @Description:
205     @@@: Show recently changed WikiPages list
206     @@lang: en
207     @template:
208     @@http-status-code: 200
209     @@media-type: text/html
210     @@use-media-type-charset: 1
211     @@expires: %%list%%
212     @@body:
213     %html-document (
214     title => {%res (name => {Map:Change:WebPageTitle});}p,
215     link-meta => {%template (name => links);}p,
216     content => {
217     %block (
218     id => tools1, class => tools,
219     content => {%template (name => navbar);}p,
220     );
221     %section (
222     title => {%res (name => {Map:Change:Title});}p,
223     heading,
224     id => WEBPAGE--M--CHANGE,
225     content => {%recent-change-list (
226     n => 50,
227     ns => {%page-name;}p,
228     post-list => {%search--result-navigation (
229     fragment => WEBPAGE--M--CHANGE,
230     );}p,
231     );}p,
232     );
233     %block (
234     id => footer,
235     content => {%template (name => ws--footer);}p,
236     );
237     }p,
238     );
239    
240    
241 wakaba 1.1 FormattingRule:
242     @Category[list]:
243     form-input
244     view
245     view-resource
246     @Name: page-list
247     @Description:
248     @@@: WikiPage list
249     @@lang: en
250     @Parameter:
251     @@Name: ns
252     @@Type: WikiName
253     @@Default: (auto)
254     @@Description:
255     @@@@:
256     WikiNamespace name to which listed WikiPages belong
257     @@@lang: en
258     @Formatting:
259     my $list = $p->{-parent}->append_new_node
260     (type => '#element',
261     namespace_uri => $NS_XHTML1,
262     local_name => 'ul');
263    
264     __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;
265     $p->{recursive} = 1 unless length $p->{recursive};
266 wakaba 1.2 my $ns = $o->{wiki}->name ($p->{ns});
267 wakaba 1.12
268     my @target = sort {$a->[1] cmp $b->[1]}
269     map {[$_, join "\t", @{$_}]} # make sort key
270     $o->{wiki}->{db}->keys ('content',
271     -ns => $ns,
272     -type => 'key',
273     -recursive => $p->{recursive});
274    
275     __ATTRTEXT:%start__;
276     __ATTRTEXT:%n__;
277     my $start = length $p->{start} ? $p->{start} :
278     $o->{wiki}->{input}->parameter ('m--list--range-start') || 0;
279     $p->{n} = $o->{wiki}->{input}->parameter ('m--list--range-number')
280     unless length $p->{n};
281     my $end = $p->{n} ? $start + $p->{n} - 1 : $start + 29;
282     $start = 0 if $start > $#target or $start < 0;
283     $end = $#target if $end < $start or $end > $#target;
284     $end = $start + 255 if $end > $start + 255;
285     local $o->{var}->{search__result} = {
286     min => 0,
287     max => $#target,
288     start => $start,
289     end => $end,
290     number => $p->{n} || 30,
291     query => $p->{query},
292     param_prefix => 'm--list',
293     };
294    
295 wakaba 1.1 __ATTRTEXT:%template__;
296     $p->{template} ||= $WIKIRESOURCE->get
297     (name => 'Link:toWikiPage:SourceLabelLong:PageList',
298     wiki => $o->{wiki}, o => $o);
299 wakaba 1.12
300 wakaba 1.1 __ATTRTEXT:%mode__;
301     try {
302 wakaba 1.12 for (@target[$start..$end]) {
303 wakaba 1.1 $WIKILINKING->to_wikipage_in_html ({
304     label => $p->{template},
305     } => {
306 wakaba 1.2 base => $o->{wiki}->{var}->{page},
307     page_name_relative => $o->{wiki}->name ($_->[0]),
308 wakaba 1.1 wiki_mode => $p->{mode},
309     }, {
310     o => $o,
311 wakaba 1.5 parent => $list->append_new_node
312     (type => '#element',
313     namespace_uri => $NS_XHTML1,
314     local_name => 'li'),
315 wakaba 1.1 });
316     }
317     } catch SuikaWiki::DB::Util::Error with {
318 wakaba 1.4 my $err = shift;
319     $err->throw if $err->{-type} eq 'ERROR_REPORTED';
320 wakaba 1.1 };
321 wakaba 1.12
322     if ($list->count) {
323     $list->set_attribute (start => $start + 1);
324     __ATTRNODE:%post_list->{$p->{-parent}}__;
325     } else {
326     $p->{-parent}->remove_child_node ($list);
327     }
328    
329 wakaba 1.1
330     FormattingRule:
331     @Category[list]:
332     page-link
333     @Name: m--link-weight
334     @Formatting:
335     $p->{-parent}->append_text ($o->{link}->{option}->{-m__weight}+0);
336    
337     ViewFragment:
338     @Name: ws--post-content
339     @Description:
340 wakaba 1.6 @@@: After content body -- children and backward links
341 wakaba 1.1 @@lang:en
342     @Order: 100
343     @Formatting:
344     %section (
345     id => children,
346     title => {%res(name=>{Children:Title});}p, heading,
347     content => {%page-list (
348     ns => {%page-name;}p, recursive => 0,
349     type => both,
350     template => {%resource-as-plain-text (name => {Children:Item});}p,
351 wakaba 1.12 post-list => {%search--result-navigation (
352     fragment => children,
353     );}p,
354 wakaba 1.1 );}p,
355     );
356    
357     ViewFragment:
358     @Name: navbar
359     @Order: 21
360     @Formatting:
361     %link-to-wikipage (
362 wakaba 1.12 page => {%ns--root-wikiname;}p,
363     mode => m--change,
364 wakaba 1.1 label => {%link-to-it (
365 wakaba 1.7 label => {%res (name => GoToRecentChanges);}p,
366     description => {%res (name => GoToRecentChangesLong);}p,
367 wakaba 1.1 );},
368     rel => news,
369     );
370    
371     ViewFragment:
372     @Name: links
373     @Formatting:
374 wakaba 1.13 %m--html-link-navigation;
375    
376 wakaba 1.1 %link-to-wikipage (
377 wakaba 1.12 page => {%ns--root-wikiname;}p,
378 wakaba 1.1 rel => news,
379 wakaba 1.12 mode => m--change,
380 wakaba 1.1 label => {%html-link (
381     description => {%res(name=>GoToRecentChangesLink);}p,
382     );},
383 wakaba 1.7 );
384 wakaba 1.12 %link-to-wikipage (
385     page => {%ns-page-path-name;}p,
386     rel => news,
387     mode => m--change,
388     label => {%html-link (
389     description => {%res(name=> {Map:Change:Link:Parent:Description});}p,
390     );},
391     );
392     %link-to-wikipage (
393     rel => news,
394     mode => m--change,
395     label => {%html-link (
396     description => {%res(name=> {Map:Change:Link:Local:Description});}p,
397     );},
398     );
399 wakaba 1.7
400     Resource:
401 wakaba 1.11 @Children:Title:
402     %link-to-it(label=>{%ns-short-page-name;}p,
403     description=>{%page-name(absolute);}p,
404     );
405     %span(class=>headline, content=>{%page-headline;}p);
406     @Link:toWikiPage:SourceLabelLong:PageList:
407     %link-to-it(
408     label=>{%page-title(relative);}p,
409     description=>{%page-name(absolute);}p,
410     );
411     %span(class=>headline,content=>{%page-headline;}p);
412     @Link:toWikiPage:SourceLabelLong:RecentChangeItem:
413     %last-modified;
414     %link-to-it(
415     label=>{%page-title(relative);}p,
416     description=>{%page-name(absolute);}p,
417     );
418     %span(class=>headline,content=>{%page-headline;}p);
419     @Link:toWikiPage:SourceLabelLong:SearchResult:
420     {%m--link-weight;}
421     %link-to-it(
422     label=>{%page-title(relative);}p,
423     description=>{%page-name(absolute);}p,
424     );
425     %span(class=>headline,content=>{%page-headline;}p);
426 wakaba 1.7 @GoToRecentChanges:
427     @@@: Recent
428     @@lang: en
429     @GoToRecentChangesLink:
430     @@@: Recently modified WikiPages list
431     @@lang: en
432     @GoToRecentChangesLong:
433     @@@: Review recently modified WikiPages list
434     @@lang: en
435 wakaba 1.12 @Map:Change:Link:Local:Description:
436     @@@: List of recently modified WikiPages in this namespace (%page-name;)
437     @@lang: en
438     @Map:Change:Link:Parent:Description:
439     @@@:
440     List of recently modified WikiPages in parent namespace
441     (%ns-page-path-name;)
442     @@lang: en
443     @Map:Change:Title:
444     @@@: Recent Changes
445     @@lang: en
446     @Map:Change:WebPageTitle:
447     @@@: Recent Changes (%page-name;)
448     @@lang: en
449 wakaba 1.13 @Map:LinkNav:prev:Description:
450     @@lang: en
451     @@@: Previous WikiPage
452     @Map:LinkNav:next:Description:
453     @@lang: en
454     @@@: Next WikiPage
455     @Map:LinkNav:contents:Description:
456     @@lang: en
457     @@@: Table of Contents
458     @Map:LinkNav:index:Description:
459     @@lang: en
460     @@@: Index
461     @Map:LinkNav:up:Description:
462     @@lang: en
463     @@@: Up
464    
465    
466 wakaba 1.12
467    
468    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24