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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24