Author: kake
Date: 2012-08-17 17:24:05 +0100 (Fri, 17 Aug 2012)
New Revision: 1434
Modified:
trunk/Changes
trunk/lib/OpenGuides/Utils.pm
trunk/t/102_macros.t
Log:
Implemented new @INDEX_LIST_NO_PREFIX macro.
Modified: trunk/Changes
===================================================================
--- trunk/Changes 2012-08-17 15:36:57 UTC (rev 1433)
+++ trunk/Changes 2012-08-17 16:24:05 UTC (rev 1434)
@@ -6,6 +6,7 @@
0.70 ?
Updated URLs for Leaflet JavaScript and CSS.
Added meta descriptions to headers of map and list index pages.
+ Implemented new @INDEX_LIST_NO_PREFIX macro.
0.69 07 July 2012
The output of the "show_missing_metadata" action is now alphabetised.
Modified: trunk/lib/OpenGuides/Utils.pm
===================================================================
--- trunk/lib/OpenGuides/Utils.pm 2012-08-17 15:36:57 UTC (rev 1433)
+++ trunk/lib/OpenGuides/Utils.pm 2012-08-17 16:24:05 UTC (rev 1434)
@@ -137,33 +137,16 @@
qr/\@INDEX_LIST\s+\[\[(Category|Locale)\s+([^\]]+)]]/ =>
sub {
my ($wiki, $type, $value) = @_;
-
- # We may be being called by Wiki::Toolkit::Plugin::Diff,
- # which doesn't know it has to pass us $wiki
- unless ( UNIVERSAL::isa( $wiki, "Wiki::Toolkit" ) ) {
- return "(unprocessed INDEX_LIST macro)";
- }
-
- my @nodes = sort $wiki->list_nodes_by_metadata(
- metadata_type => $type,
- metadata_value => $value,
- ignore_case => 1,
- );
- unless ( scalar @nodes ) {
- return "\n* No pages currently in "
- . lc($type) . " $value\n";
- }
- my $return = "\n";
- foreach my $node ( @nodes ) {
- $return .= "* "
- . $wiki->formatter->format_link(
- wiki => $wiki,
- link => $node,
- )
- . "\n";
- }
- return $return;
+ return $class->do_index_list_macro(
+ wiki => $wiki, type => $type, value => $value,
+ include_prefix => 1 );
},
+ qr/\@INDEX_LIST_NO_PREFIX\s+\[\[(Category|Locale)\s+([^\]]+)]]/ =>
+ sub {
+ my ($wiki, $type, $value) = @_;
+ return $class->do_index_list_macro(
+ wiki => $wiki, type => $type, value => $value );
+ },
qr/\@MAP_LINK\s+\[\[(Category|Locale)\s+([^\]|]+)\|?([^\]]+)?\]\]/ =>
sub {
if ( UNIVERSAL::isa( $_[0], "Wiki::Toolkit" ) ) {
@@ -263,6 +246,41 @@
return $wiki;
}
+sub do_index_list_macro {
+ my ( $class, %args ) = @_;
+ my ( $wiki, $type, $value, $include_prefix )
+ = @args{ qw( wiki type value include_prefix ) };
+
+ # We may be being called by Wiki::Toolkit::Plugin::Diff,
+ # which doesn't know it has to pass us $wiki
+ if ( !UNIVERSAL::isa( $wiki, "Wiki::Toolkit" ) ) {
+ if ( $args{include_prefix} ) {
+ return "(unprocessed INDEX_LIST macro)";
+ } else {
+ return "(unprocessed INDEX_LIST_NO_PREFIX macro)";
+ }
+ }
+
+ my @nodes = sort $wiki->list_nodes_by_metadata(
+ metadata_type => $type,
+ metadata_value => $value,
+ ignore_case => 1,
+ );
+ unless ( scalar @nodes ) {
+ return "\n* No pages currently in " . lc($type) . " $value\n";
+ }
+ my $return = "\n";
+ foreach my $node ( @nodes ) {
+ my $title = $node;
+ $title =~ s/^(Category|Locale) // unless $args{include_prefix};
+ $return .= "* "
+ . $wiki->formatter->format_link( wiki => $wiki,
+ link => "$node|$title" )
+ . "\n";
+ }
+ return $return;
+}
+
=item B<get_wgs84_coords>
Returns coordinate data suitable for use with Google Maps (and other GIS
Modified: trunk/t/102_macros.t
===================================================================
--- trunk/t/102_macros.t 2012-08-17 15:36:57 UTC (rev 1433)
+++ trunk/t/102_macros.t 2012-08-17 16:24:05 UTC (rev 1434)
@@ -11,7 +11,7 @@
plan skip_all => "DBD::SQLite could not be used - no database to test with. ($error)";
}
-plan tests => 19;
+plan tests => 27;
SKIP: {
# Clear out the database from any previous runs.
@@ -22,35 +22,42 @@
my $wiki = $guide->wiki;
# Test @INDEX_LINK
- $wiki->write_node( "Test 1", "\@INDEX_LINK [[Category Foo]]" )
+ $wiki->write_node( "Category Alpha", "\@INDEX_LINK [[Category Alpha]]",
+ undef, { category => "category" } )
or die "Can't write node";
- $wiki->write_node( "Test 2", "\@INDEX_LINK [[Category Bar|Bars]]" )
+
+ $wiki->write_node( "Category Beta", "\@INDEX_LINK [[Category Beta|Betas]]",
+ undef, { category => "category" } )
or die "Can't write node";
my $output;
$output = $guide->display_node(
return_output => 1,
- id => "Test 1",
+ id => "Category Alpha",
);
- like( $output, qr/View all pages in Category Foo/,
+ like( $output, qr/View all pages in Category Alpha/,
"\@INDEX_LINK has right default link text" );
- like( $output, qr/action=index;cat=foo/, "...and URL looks right" );
+ like( $output, qr/action=index;cat=alpha/, "...and URL looks right" );
$output = $guide->display_node(
return_output => 1,
- id => "Test 2",
+ id => "Category Beta",
);
- like( $output, qr/>Bars<\/a>/, "Default link text can be overridden" );
- like( $output, qr/action=index;cat=bar/, "...and URL looks right" );
+ like( $output, qr/>Betas<\/a>/, "Default link text can be overridden" );
+ like( $output, qr/action=index;cat=beta/, "...and URL looks right" );
# Test @INDEX_LIST
- $wiki->write_node( "Test 3", "\@INDEX_LIST [[Category Foo]]" )
+ $wiki->write_node( "Category Foo", "\@INDEX_LIST [[Category Foo]]",
+ undef, { category => "category" } )
or die "Can't write node";
- $wiki->write_node( "Test 4", "\@INDEX_LIST [[Locale Bar]]" )
+ $wiki->write_node( "Locale Bar", "\@INDEX_LIST [[Locale Bar]]",
+ undef, { category => "locales" } )
or die "Can't write node";
- $wiki->write_node( "Test 5", "\@INDEX_LIST [[Category Nonexistent]]" )
+ $wiki->write_node( "Category Empty", "\@INDEX_LIST [[Category Empty]]",
+ undef, { category => "foo" } )
or die "Can't write node";
- $wiki->write_node( "Test 6", "\@INDEX_LIST [[Locale Nonexistent]]" )
+ $wiki->write_node( "Locale Empty", "\@INDEX_LIST [[Locale Empty]]",
+ undef, { locale => "bar" } )
or die "Can't write node";
$wiki->write_node( "Wibble", "wibble", undef,
{
@@ -59,31 +66,90 @@
}
)
or die "Can't write node";
+
$output = $guide->display_node(
return_output => 1,
- id => "Test 3",
+ id => "Category Foo",
);
like ( $output, qr|<a href=".*">Wibble</a>|,
- '@INDEX_LIST works for categories' );
+ '@INDEX_LIST works for regular pages in categories' );
+ like ( $output, qr|<a href=".*">Category Empty</a>|,
+ '...and for category pages in categories' );
$output = $guide->display_node(
return_output => 1,
- id => "Test 5",
+ id => "Category Empty",
);
like ( $output, qr|No pages currently in category|,
"...and fails nicely if no pages in category" );
$output = $guide->display_node(
return_output => 1,
- id => "Test 4",
+ id => "Locale Bar",
);
like ( $output, qr|<a href=".*">Wibble</a>|,
- '@INDEX_LIST works for locales' );
+ '@INDEX_LIST works for regular pages in locales' );
+ like ( $output, qr|<a href=".*">Locale Empty</a>|,
+ '...and for locale pages in locales' );
$output = $guide->display_node(
return_output => 1,
- id => "Test 6",
+ id => "Locale Empty",
);
like ( $output, qr|No pages currently in locale|,
"...and fails nicely if no pages in locale" );
+ # Test @INDEX_LIST_NO_PREFIX
+ $wiki->write_node( "Category Foo NP",
+ "\@INDEX_LIST_NO_PREFIX [[Category Foo NP]]",
+ undef, { category => "category" } )
+ or die "Can't write node";
+ $wiki->write_node( "Locale Bar NP",
+ "\@INDEX_LIST_NO_PREFIX [[Locale Bar NP]]",
+ undef, { category => "locales" } )
+ or die "Can't write node";
+ $wiki->write_node( "Category Empty NP",
+ "\@INDEX_LIST_NO_PREFIX [[Category Empty NP]]",
+ undef, { category => "foo np" } )
+ or die "Can't write node";
+ $wiki->write_node( "Locale Empty NP",
+ "\@INDEX_LIST_NO_PREFIX [[Locale Empty NP]]",
+ undef, { locale => "bar np" } )
+ or die "Can't write node";
+ $wiki->write_node( "Wibble NP", "wibble", undef,
+ {
+ category => "foo np",
+ locale => "bar np",
+ }
+ )
+ or die "Can't write node";
+
+ $output = $guide->display_node(
+ return_output => 1,
+ id => "Category Foo NP",
+ );
+ like ( $output, qr|<a href=".*">Wibble NP</a>|,
+ '@INDEX_LIST_NO_PREFIX works for regular pages in categories' );
+ like ( $output, qr|<a href=".*">Empty NP</a>|,
+ '...and for category pages in categories' );
+ $output = $guide->display_node(
+ return_output => 1,
+ id => "Category Empty NP",
+ );
+ like ( $output, qr|No pages currently in category|,
+ "...and fails nicely if no pages in category" );
+ $output = $guide->display_node(
+ return_output => 1,
+ id => "Locale Bar NP",
+ );
+ like ( $output, qr|<a href=".*">Wibble NP</a>|,
+ '@INDEX_LIST_NO_PREFIX works for regular pages in locales' );
+ like ( $output, qr|<a href=".*">Empty NP</a>|,
+ '...and for locale pages in locales' );
+ $output = $guide->display_node(
+ return_output => 1,
+ id => "Locale Empty NP",
+ );
+ like ( $output, qr|No pages currently in locale|,
+ "...and fails nicely if no pages in locale" );
+
# Test @MAP_LINK
OpenGuides::Test->write_data(
guide => $guide,