Bruno Postle | 17 Aug 14:07
X-Face

patch to add option to automatically link to sibling documents

Currently MKDoc automatically links to child dcouments, this patch 
adds the option to link to sibling documents too.

By default it is disabled, it can be enabled by adding this to the 
httpd-env.conf file:

  SetEnv MKD__LINK_SIBLINGS  TRUE

It also adds two more methods available to template writers:

  document/siblings
  document/siblings_showable

Both return lists of siblings of the current document.  They are 
different from these methods which also include the current document 
in the list:

  document/parent/children
  document/parent/children_showable

-- 
Bruno
Index: flo/Editor.pm
===================================================================
RCS file: /var/spool/cvs/mkd/flo/Editor.pm,v
retrieving revision 1.12.2.50
diff -r1.12.2.50 Editor.pm
223a224,236
> 	# plus we want to hyperlink all the siblings
>         if (MKDoc::Config->LINK_SIBLINGS) {
> 	    foreach my $sibling ($document->siblings_showable)
> 	    {
> 	        push @links, {
>                    class => "mkdoc-name-". $sibling->name,
> 	    	    href => $sibling->uri,
> 	     	    desc => $sibling->description,
> 		    expr => $sibling->title,
> 		    lang => $sibling->lang,
> 	        }
> 	    }
>         }
Index: MKDoc/Config.pm
===================================================================
RCS file: /var/spool/cvs/mkd/MKDoc/Config.pm,v
retrieving revision 1.8.2.49
diff -r1.8.2.49 Config.pm
177a178,184
> sub LINK_SIBLINGS
> {
>     my $class = shift;
>     return get_env ('MKD__LINK_SIBLINGS') || undef;
> }
> 
> 
Index: MKDoc/Site/ConfigWriter/Httpd_Conf.pm
===================================================================
RCS file: /var/spool/cvs/mkd/MKDoc/Site/ConfigWriter/Httpd_Conf.pm,v
retrieving revision 1.1.2.46
diff -r1.1.2.46 Httpd_Conf.pm
228a229,231
> # uncomment this if you want to automatically link to sibling documents
> # SetEnv MKD__LINK_SIBLINGS  TRUE
> 
Index: flo/Record/Document.pm
===================================================================
RCS file: /var/spool/cvs/mkd/flo/Record/Document.pm,v
retrieving revision 1.25.2.73
diff -r1.25.2.73 Document.pm
1664a1665,1721
> ##
> # $self->siblings;
> # ----------------
> # Returns a list of all sibling documents of this document
> ##
> sub siblings
> {
>     my $self = shift;
>     my $args = { @_ };
> 
>     $self->{'.siblings'} ||= do {
> 	my $parent   = $self->parent();
> 	if ($parent)
> 	{
>             my @siblings;
>             for my $sibling ($parent->children())
>             {
>                 push @siblings, $sibling unless $self->equals ($sibling);
>             }
>             \@siblings;
>         }
>         else
>         {
>             [];
>         }
>     };
>     
>     my @res = @{$self->{'.siblings'}};
>     
>     my $with = $args->{'with'};
>     $with and do { @res = map { @{$_->components ($with) } ? $_ : () } @res };
>     
>     my $without = $args->{'without'};
>     $without and do { @res = map { @{$_->components ($without) } ? () : $_ } @res };
>     
>     return wantarray ? @res : \@res;
> }
> 
> ##
> # $self->siblings_showable();
> # ---------------------------
> # Same as siblings(), except returns only showable documents.
> ##
> sub siblings_showable
> {
>     my $self = shift;
>     my @res;
>     if (flo::Standard::current_user && flo::Standard::current_user->is_editor)
>     {
>         @res  = map { $_->is_showable_to_editor() ? $_ : () } $self->siblings;
>     }
>     else
>     {
>         @res  = map { $_->is_showable() ? $_ : () } $self->siblings;
>     }
>     return wantarray ? @res : \@res;
> }
_______________________________________________
MKDoc-dev mailing list
MKDoc-dev@...
https://lists.webarch.co.uk/mailman/listinfo/mkdoc-dev

Gmane