Edgewall Software
Modify

Opened 3 years ago

Closed 2 years ago

Last modified 15 months ago

#11455 closed enhancement (fixed)

TitleIndex Macro should also take relative prefixes

Reported by: glinders@… Owned by: psuter
Priority: normal Milestone: 1.1.2
Component: wiki system Version:
Severity: normal Keywords: TitleIndex
Cc:
Release Notes:

Added support for the prefix in TitleIndex macro to be resolved relative to current wiki page. (E.g. [[TitleIndex(./)]] lists all subpages.)

API Changes:

Description

The TitleIndex macro only takes the full path of a Wiki page.

For instance, if you are on Wiki page WikiStart:Top/Deeper/Deepest and want to include a list of all subpages of Deepest, you have to include [[TitleIndex(Top/Deeper/Deepest/)]] in your page.

It would be great if you could also use [[TitleIndex(./)]] to achieve the same.

Similarly, [[TitleIndex(../)]] should give the same result as [[TitleIndex(Top/Deeper/)]]

Attachments (3)

T11455-relative-titleindex-prefix.patch (1.9 KB) - added by psuter 2 years ago.
20140310T002856.png (4.5 KB) - added by Jun Omae 2 years ago.
T11455-relative-titleindex-prefix-fixed-with-tests.patch (5.8 KB) - added by psuter 2 years ago.

Download all attachments as: .zip

Change History (13)

comment:1 Changed 2 years ago by psuter

Keywords: TitleIndex added
Milestone: 1.1.2
Owner: set to psuter
Status: newassigned

The attached patch implements this functionality that I've been missing myself.

Changed 2 years ago by psuter

Changed 2 years ago by Jun Omae

Attachment: 20140310T002856.png added

comment:2 Changed 2 years ago by Jun Omae

I tried the patch. It is inconsistent between [[TitleIndex(./)]] and [[TitleIndex(SandBox/)]].

Also, we should add unit tests for this feature.

comment:3 Changed 2 years ago by psuter

Thanks for testing. You are of course correct on both accounts. I will attach an updated patch later.

comment:4 in reply to:  2 ; Changed 2 years ago by psuter

Replying to jomae:

It is inconsistent between [[TitleIndex(./)]] and [[TitleIndex(SandBox/)]]. Also, we should add unit tests for this feature.

This updated patch fixes the inconsistency ([[TitleIndex(./)]] does not list the current wiki page anymore) and adds unit tests.

(The fix is changing _resolve_relative_name:

-elif comp and comp != '.': 
+elif comp != '.': 

It is not immediately obvious that this breaks no other callers, but I can not come up with a scenario where this change would affect the only other caller after pagename.rstrip('/') and pagename.startswith(('./', '../')) or pagename in ('.', '..').)

comment:5 in reply to:  4 Changed 2 years ago by Jun Omae

(The fix is changing _resolve_relative_name:

-elif comp and comp != '.': 
+elif comp != '.': 

It is not immediately obvious that this breaks no other callers, but I can not come up with a scenario where this change would affect the only other caller after pagename.rstrip('/') and pagename.startswith(('./', '../')) or pagename in ('.', '..').)

After the changes, in SandBox page,

Before the changes, both will link to WikiStart page.

But I think the patch is okay because page name doesn't have repeated-slashes.

Unit and functional tests pass on Python 2.5 - 2.7 with SQLite, PostgreSQL and MySQL on Linux.

comment:6 Changed 2 years ago by psuter

Release Notes: modified (diff)
Resolution: fixed
Status: assignedclosed

Committed in [12584]. Thanks for reviewing and testing. I had not considered such "invalid" page names with repeated slashes.

comment:7 Changed 2 years ago by Ryan J Ollos

How does the following documentation update look?

  • trac/wiki/macros.py

    diff --git a/trac/wiki/macros.py b/trac/wiki/macros.py
    index cda7dba..9bee07c 100644
    a b class TitleIndexMacro(WikiMacroBase): 
    8484    """Insert an alphabetic list of all wiki pages into the output.
    8585
    8686    Accepts a prefix string as parameter: if provided, only pages with names
    87     that start with the prefix are included in the resulting list. If this
    88     parameter is omitted, all pages are listed.
    89     If the prefix is specified, a second argument of value `hideprefix`
    90     can be given as well, in order to remove that prefix from the output.
     87    that start with the prefix are included in the resulting list. The
     88    commonly-used relative-path notation is supported: a prefix string
     89    starting with `./` will be relative to the current page, and parent pages
     90    can be specified using `../`. If this parameter is omitted, all pages are
     91    listed. If the prefix is specified, a second argument of value
     92    `hideprefix` can be given as well, in order to remove that prefix from
     93    the output.
    9194
    9295    Alternate `format` and `depth` named parameters can be specified:
    9396     - `format=compact`: The pages are displayed as comma-separated links.

comment:8 in reply to:  7 Changed 2 years ago by psuter

Your proposed text sounds fine.

I didn't think a documentation update was necessary as it seemed just like a standard use of wiki:TracLinks#Relativelinks. But documenting it explicitly doesn't hurt.

More details that may or may not be obvious:

  • ./ is probably the most common use case, but this is not restricted just to plain ./ and ../. E.g. on TracDev one might use ./ReleaseNotes/. (More complex combinations like ../../Wiki and even ./.././.././Wiki also "work".)
  • These only work on wiki pages, while absolute prefixes could also be used here in a ticket comment for example.

comment:9 Changed 2 years ago by Ryan J Ollos

Sorry for the delay. Documentation change committed to trunk in [13014].

comment:10 Changed 15 months ago by Ryan J Ollos

Just FYI, the changes to TitleIndex macro in this ticket provide equivalent functionality to the old SubWiki macro (th:HierWikiPlugin). I've marked HierWikiplugin as deprecated since it doesn't work with at least Trac 1.0 and later.

Last edited 15 months ago by Ryan J Ollos (previous) (diff)

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain psuter.
The resolution will be deleted. Next status will be 'reopened'.
to The owner will be changed from psuter to the specified user.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.