/[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 - (show 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 #?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/04/01 04:39:58 $
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 (
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 @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 my $ns = $o->{wiki}->name ($p->{ns});
124
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 __ATTRTEXT:%template__;
164 $p->{template} ||= $WIKIRESOURCE->get
165 (name => 'Link:toWikiPage:SourceLabelLong:RecentChangeItem',
166 wiki => $o->{wiki}, o => $o);
167 __ATTRTEXT:%mode__;
168
169 for my $target (@target[$start..$end]) {
170 $WIKILINKING->to_wikipage_in_html ({
171 label => $p->{template},
172 } => {
173 base => $o->{wiki}->{var}->{page},
174 page_name_relative => $o->{wiki}->name ($target->[0]),
175 wiki_mode => $p->{mode},
176 _with_lm => 1,
177 page_lastmodified => $target->[1],
178 }, {
179 o => $o,
180 parent => $list->append_new_node
181 (type => '#element',
182 namespace_uri => $NS_XHTML1,
183 local_name => 'li'),
184 });
185 }
186
187 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 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 my $ns = $o->{wiki}->name ($p->{ns});
264
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 __ATTRTEXT:%template__;
293 $p->{template} ||= $WIKIRESOURCE->get
294 (name => 'Link:toWikiPage:SourceLabelLong:PageList',
295 wiki => $o->{wiki}, o => $o);
296
297 __ATTRTEXT:%mode__;
298 try {
299 for (@target[$start..$end]) {
300 $WIKILINKING->to_wikipage_in_html ({
301 label => $p->{template},
302 } => {
303 base => $o->{wiki}->{var}->{page},
304 page_name_relative => $o->{wiki}->name ($_->[0]),
305 wiki_mode => $p->{mode},
306 }, {
307 o => $o,
308 parent => $list->append_new_node
309 (type => '#element',
310 namespace_uri => $NS_XHTML1,
311 local_name => 'li'),
312 });
313 }
314 } catch SuikaWiki::DB::Util::Error with {
315 my $err = shift;
316 $err->throw if $err->{-type} eq 'ERROR_REPORTED';
317 };
318
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
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 @@@: After content body -- children and backward links
338 @@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 post-list => {%search--result-navigation (
349 fragment => children,
350 );}p,
351 );}p,
352 );
353
354 ViewFragment:
355 @Name: navbar
356 @Order: 21
357 @Formatting:
358 %link-to-wikipage (
359 page => {%ns--root-wikiname;}p,
360 mode => m--change,
361 label => {%link-to-it (
362 label => {%res (name => GoToRecentChanges);}p,
363 description => {%res (name => GoToRecentChangesLong);}p,
364 );},
365 rel => news,
366 );
367
368 ViewFragment:
369 @Name: links
370 @Formatting:
371 %m--html-link-navigation;
372
373 %link-to-wikipage (
374 page => {%ns--root-wikiname;}p,
375 rel => news,
376 mode => m--change,
377 label => {%html-link (
378 description => {%res(name=>GoToRecentChangesLink);}p,
379 );},
380 );
381 %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
397 Resource:
398 @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 @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 @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 @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
464
465

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24