/[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 - (show 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 #?SuikaWikiConfig/2.0
2
3 Plugin:
4 @Name: Map
5 @Description:
6 @@@:
7 Visualization of page to page relatinships
8 @@lang:en
9 @License: %%Perl%%
10 @Author:
11 @@Name:
12 @@@@: Wakaba
13 @@@lang:ja
14 @@@script:Latn
15 @@Mail[list]: w@suika.fam.cx
16 @Date.RCS:
17 $Date: 2004/07/25 06:54:29 $
18 @RequiredPlugin[list]:
19 Search
20 WikiLinking
21 WikiNamespace
22 @Use:
23 use Message::Util::Error;
24 my $WIKILINKING;
25 my $WIKIRESOURCE;
26 @Namespace:
27 @@relrev:
28 http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#
29
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 @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 my $rel (
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 ($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 }
97 }
98 }
99
100 FormattingRule:
101 @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 my $ns = $o->{wiki}->name ($p->{ns});
127
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 __ATTRTEXT:%template__;
167 $p->{template} ||= $WIKIRESOURCE->get
168 (name => 'Link:toWikiPage:SourceLabelLong:RecentChangeItem',
169 wiki => $o->{wiki}, o => $o);
170 __ATTRTEXT:%mode__;
171
172 for my $target (@target[$start..$end]) {
173 $WIKILINKING->to_wikipage_in_html ({
174 label => $p->{template},
175 } => {
176 base => $o->{wiki}->{var}->{page},
177 page_name_relative => $o->{wiki}->name ($target->[0]),
178 wiki_mode => $p->{mode},
179 _with_lm => 1,
180 page_lastmodified => $target->[1],
181 }, {
182 o => $o,
183 parent => $list->append_new_node
184 (type => '#element',
185 namespace_uri => $NS_XHTML1,
186 local_name => 'li'),
187 });
188 }
189
190 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 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 my $ns = $o->{wiki}->name ($p->{ns});
267
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 __ATTRTEXT:%template__;
296 $p->{template} ||= $WIKIRESOURCE->get
297 (name => 'Link:toWikiPage:SourceLabelLong:PageList',
298 wiki => $o->{wiki}, o => $o);
299
300 __ATTRTEXT:%mode__;
301 try {
302 for (@target[$start..$end]) {
303 $WIKILINKING->to_wikipage_in_html ({
304 label => $p->{template},
305 } => {
306 base => $o->{wiki}->{var}->{page},
307 page_name_relative => $o->{wiki}->name ($_->[0]),
308 wiki_mode => $p->{mode},
309 }, {
310 o => $o,
311 parent => $list->append_new_node
312 (type => '#element',
313 namespace_uri => $NS_XHTML1,
314 local_name => 'li'),
315 });
316 }
317 } catch SuikaWiki::DB::Util::Error with {
318 my $err = shift;
319 $err->throw if $err->{-type} eq 'ERROR_REPORTED';
320 };
321
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
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 @@@: After content body -- children and backward links
341 @@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 post-list => {%search--result-navigation (
352 fragment => children,
353 );}p,
354 );}p,
355 );
356
357 ViewFragment:
358 @Name: navbar
359 @Order: 21
360 @Formatting:
361 %link-to-wikipage (
362 page => {%ns--root-wikiname;}p,
363 mode => m--change,
364 label => {%link-to-it (
365 label => {%res (name => GoToRecentChanges);}p,
366 description => {%res (name => GoToRecentChangesLong);}p,
367 );},
368 rel => news,
369 );
370
371 ViewFragment:
372 @Name: links
373 @Formatting:
374 %m--html-link-navigation;
375
376 %link-to-wikipage (
377 page => {%ns--root-wikiname;}p,
378 rel => news,
379 mode => m--change,
380 label => {%html-link (
381 description => {%res(name=>GoToRecentChangesLink);}p,
382 );},
383 );
384 %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
400 Resource:
401 @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 @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 @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 @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
467
468

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24