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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by wakaba, Fri Mar 19 03:42:06 2004 UTC revision 1.14 by wakaba, Fri Aug 6 03:38:11 2004 UTC
# Line 16  Plugin: Line 16  Plugin:
16    @Date.RCS:    @Date.RCS:
17       $Date$       $Date$
18    @RequiredPlugin[list]:    @RequiredPlugin[list]:
19        Search
20      WikiLinking      WikiLinking
21        WikiNamespace
22    @Use:    @Use:
23      use Message::Util::Error;      use Message::Util::Error;
24      my $WIKILINKING;      my $WIKILINKING;
25      my $WIKIRESOURCE;      my $WIKIRESOURCE;
26      @Namespace:
27        @@relrev:
28          http://suika.fam.cx/~wakaba/archive/2004/7/25/html-relrev#
29    
30  PluginConst:  PluginConst:
31    @NS_XHTML1:    @NS_XHTML1:
# Line 39  PluginConst: Line 44  PluginConst:
44      {($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))}      {($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))}
45    
46  FormattingRule:  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]:    @Category[list]:
102      form-input      form-input
103      view      view
# Line 63  FormattingRule: Line 122  FormattingRule:
122      $list->set_attribute (class => 'm--recent-changes');      $list->set_attribute (class => 'm--recent-changes');
123            
124      __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;      __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;
     __ATTRTEXT:%n__;  
125      $p->{recursive} = 1 unless length $p->{recursive};      $p->{recursive} = 1 unless length $p->{recursive};
126      my $ns = $o->{wiki}->name ($p->{ns});      my $ns = $o->{wiki}->name ($p->{ns});
127      #$ns->append_component ('') unless $ns->[$#$ns] eq '';  
128      my $i = 0;      my @target = map  { try { [$_, $o->{wiki}->{db}->get (lastmodified => $_)] }
129      $p->{n} ||= 10;                          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__;      __ATTRTEXT:%template__;
167      $p->{template} ||= $WIKIRESOURCE->get      $p->{template} ||= $WIKIRESOURCE->get
168          (name => 'Link:toWikiPage:SourceLabelLong:RecentChangeItem',          (name => 'Link:toWikiPage:SourceLabelLong:RecentChangeItem',
169           wiki => $o->{wiki}, o => $o);           wiki => $o->{wiki}, o => $o);
170      __ATTRTEXT:%mode__;      __ATTRTEXT:%mode__;
171      for (sort {$b->[1] <=> $a->[1]}  
172           map  { try { [$_, $o->{wiki}->{db}->get (lastmodified => $_)] }      for my $target (@target[$start..$end]) {
                 catch SuikaWiki::DB::Util::Error with {  
                   my $err = shift;  
                   $err->throw if $err->{-type} eq 'ERROR_REPORTED';  
                   [$_, undef]} }  
          $o->{wiki}->{db}->keys ('content',  
                                  -ns => $ns,  
                                  -type => 'key',  
                                  -recursive => $p->{recursive})) {  
       next unless $_->[0];  
       last if $i++ == $p->{n};  
         
173        $WIKILINKING->to_wikipage_in_html ({        $WIKILINKING->to_wikipage_in_html ({
174          label => $p->{template},          label => $p->{template},
175        } => {        } => {
176          base => $o->{wiki}->{var}->{page},          base => $o->{wiki}->{var}->{page},
177          page_name_relative => $o->{wiki}->name ($_->[0]),          page_name_relative => $o->{wiki}->name ($target->[0]),
178          wiki_mode => $p->{mode},          wiki_mode => $p->{mode},
179          _with_lm => 1,          _with_lm => 1,
180          page_lastmodified => $_->[1],          page_lastmodified => $target->[1],
181        }, {        }, {
182          o => $o,          o => $o,
183          parent => $list->append_new_node          parent => $list->append_new_node
# Line 104  FormattingRule: Line 187  FormattingRule:
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:  FormattingRule:
242    @Category[list]:    @Category[list]:
243      form-input      form-input
# Line 128  FormattingRule: Line 262  FormattingRule:
262                                   local_name => 'ul');                                   local_name => 'ul');
263            
264      __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;      __ATTRTEXT:%ns__;__ATTRTEXT:%recursive__;
     __ATTRTEXT:%n__;  
265      $p->{recursive} = 1 unless length $p->{recursive};      $p->{recursive} = 1 unless length $p->{recursive};
266      my $ns = $o->{wiki}->name ($p->{ns});      my $ns = $o->{wiki}->name ($p->{ns});
267      #$ns->append_component ('') unless $ns->[$#$ns] eq '';  
268      my $i = 0;      my @target = sort {$a->[1] cmp $b->[1]}
269      $p->{n} ||= -1;             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__;      __ATTRTEXT:%template__;
296      $p->{template} ||= $WIKIRESOURCE->get      $p->{template} ||= $WIKIRESOURCE->get
297          (name => 'Link:toWikiPage:SourceLabelLong:PageList',          (name => 'Link:toWikiPage:SourceLabelLong:PageList',
298           wiki => $o->{wiki}, o => $o);           wiki => $o->{wiki}, o => $o);
299      __ATTRTEXT:%match__; ## WARNING: This parameter might be dangerous!  
     my $reg = $p->{match} ? qr/$p->{match}/ : qr/./;  
300      __ATTRTEXT:%mode__;      __ATTRTEXT:%mode__;
301      try {      try {
302        for (sort {$a->[1] cmp $b->[1]}        for (@target[$start..$end]) {
            grep {$_->[1] =~ /$reg/}  
            map {[$_, join '//', @{$_}]} # make sort key  
            $o->{wiki}->{db}->keys ('content',  
                                    -ns => $ns,  
                                    -type => 'key',  
                                    -recursive => $p->{recursive})) {  
         last if $i++ == $p->{n};  
           
303          $WIKILINKING->to_wikipage_in_html ({          $WIKILINKING->to_wikipage_in_html ({
304            label => $p->{template},            label => $p->{template},
305          } => {          } => {
# Line 169  FormattingRule: Line 318  FormattingRule:
318        my $err = shift;        my $err = shift;
319        $err->throw if $err->{-type} eq 'ERROR_REPORTED';        $err->throw if $err->{-type} eq 'ERROR_REPORTED';
320      };      };
321      $p->{-parent}->remove_child_node ($list) unless $list->count;  
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:  FormattingRule:
331    @Category[list]:    @Category[list]:
# Line 192  ViewFragment: Line 348  ViewFragment:
348                       ns       => {%page-name;}p, recursive => 0,                       ns       => {%page-name;}p, recursive => 0,
349                       type     => both,                       type     => both,
350                       template => {%resource-as-plain-text (name => {Children:Item});}p,                       template => {%resource-as-plain-text (name => {Children:Item});}p,
351                         post-list => {%search--result-navigation (
352                           fragment => children,
353                         );}p,
354                     );}p,                     );}p,
355      );      );
356    
 Resource:  
   @Children:Title:  
       %link-to-it(label=>{%ns-short-page-name;}p,  
         description=>{%page-name(absolute);}p,  
       );  
       %span(class=>headline, content=>{%page-headline;}p);  
   @Link:toWikiPage:SourceLabelLong:PageList:  
     %link-to-it(  
       label=>{%page-title(relative);}p,  
       description=>{%page-name(absolute);}p,  
     );  
     %span(class=>headline,content=>{%page-headline;}p);  
   @Link:toWikiPage:SourceLabelLong:RecentChangeItem:  
     %last-modified;  
     %link-to-it(  
       label=>{%page-title(relative);}p,  
       description=>{%page-name(absolute);}p,  
     );  
     %span(class=>headline,content=>{%page-headline;}p);  
   
 ## TODO: Make recent-changes page name customizable  
357  ViewFragment:  ViewFragment:
358    @Name: navbar    @Name: navbar
359    @Order: 21    @Order: 21
360    @Formatting:    @Formatting:
361      %link-to-wikipage (      %link-to-wikipage (
362        page => {RecentChanges},        page => {%ns--root-wikiname;}p,
363          mode => m--change,
364        label => {%link-to-it (        label => {%link-to-it (
365          label => {%res (name => GoToRecentChanges);}p,          label => {%res (name => GoToRecentChanges);}p,
366          description => {%res (name => GoToRecentChangesLong);}p,          description => {%res (name => GoToRecentChangesLong);}p,
# Line 229  ViewFragment: Line 368  ViewFragment:
368        rel => news,        rel => news,
369      );      );
370    
 ## TODO:  
371  ViewFragment:  ViewFragment:
372    @Name: links    @Name: links
373    @Formatting:    @Formatting:
374        %m--html-link-navigation;
375    
376      %link-to-wikipage (      %link-to-wikipage (
377        page => {RecentChanges},        page => {%ns--root-wikiname;}p,
378        rel => news,        rel => news,
379          mode => m--change,
380        label => {%html-link (        label => {%html-link (
381                    description => {%res(name=>GoToRecentChangesLink);}p,                    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:  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:    @GoToRecentChanges:
427      @@@: Recent      @@@: Recent
428      @@lang: en      @@lang: en
# Line 251  Resource: Line 432  Resource:
432    @GoToRecentChangesLong:    @GoToRecentChangesLong:
433      @@@: Review recently modified WikiPages list      @@@: Review recently modified WikiPages list
434      @@lang: en      @@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    

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.14

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24