patch to add option to automatically link to sibling documents

View: New views
1 Messages — Rating Filter:   Alert me  

patch to add option to automatically link to sibling documents

by Bruno Postle-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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