page-trail.pl 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # Copyright (C) 2004 Alex Schroeder <alex@emacswiki.org>
  2. #
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 3 of the License, or
  6. # (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. use strict;
  16. use v5.10;
  17. AddModuleDescription('page-trail.pl', 'Page Trail Extension');
  18. our ($q, %CookieParameters);
  19. our ($PageTrailLength);
  20. $PageTrailLength = 10;
  21. $CookieParameters{trail} = '';
  22. my @PageTrail;
  23. *OldPageTrailBrowsePage = \&BrowsePage;
  24. *BrowsePage = \&NewPageTrailBrowsePage;
  25. sub NewPageTrailBrowsePage {
  26. my ($id, @rest) = @_;
  27. UpdatePageTrail($id);
  28. OldPageTrailBrowsePage($id, @rest);
  29. }
  30. sub UpdatePageTrail {
  31. my $id = shift;
  32. my @trail = ($id);
  33. foreach my $page (split(/ /, GetParam('trail', ''))) {
  34. push(@trail, $page) unless $page eq $id;
  35. }
  36. @trail = @trail[0..$PageTrailLength-1] if $trail[$PageTrailLength];
  37. $q->param('trail', join(' ', @trail));
  38. @PageTrail = @trail;
  39. }
  40. *OldPageTrailGetGotoBar = \&GetGotoBar;
  41. *GetGotoBar = \&NewPageTrailGetGotoBar;
  42. sub NewPageTrailGetGotoBar {
  43. my $bar = OldPageTrailGetGotoBar(@_);
  44. $bar .= $q->span({-class=>'trail'}, $q->br(), T('Trail:') . ' ',
  45. map { GetPageLink($_) } reverse(@PageTrail))
  46. if @PageTrail;
  47. return $bar;
  48. }