From 7b11701188061ae3c336dd3cad07c4fae2e87e67 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Wed, 6 Aug 2008 00:55:29 +0200 Subject: clone plugin sidebar as branding, farbar, footer, and topbar [1/2] --- IkiWiki/Plugin/branding.pm | 109 +++++++++++++++++++++++++++++++++++++++++++++ IkiWiki/Plugin/farbar.pm | 109 +++++++++++++++++++++++++++++++++++++++++++++ IkiWiki/Plugin/footer.pm | 109 +++++++++++++++++++++++++++++++++++++++++++++ IkiWiki/Plugin/topbar.pm | 109 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 436 insertions(+) create mode 100644 IkiWiki/Plugin/branding.pm create mode 100644 IkiWiki/Plugin/farbar.pm create mode 100644 IkiWiki/Plugin/footer.pm create mode 100644 IkiWiki/Plugin/topbar.pm diff --git a/IkiWiki/Plugin/branding.pm b/IkiWiki/Plugin/branding.pm new file mode 100644 index 0000000..c1146b7 --- /dev/null +++ b/IkiWiki/Plugin/branding.pm @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# Sidebar plugin. +# by Tuomo Valkonen + +package IkiWiki::Plugin::sidebar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "sidebar", call => \&getsetup); + hook(type => "preprocess", id => "sidebar", call => \&preprocess); + hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_sidebars => { + type => "boolean", + example => 1, + description => "show sidebar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagesidebar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagesidebar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagesidebar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub sidebar_content ($) { + my $page=shift; + + return delete $pagesidebar{$page} if defined $pagesidebar{$page}; + + return if ! exists $pagesidebar{$page} && + defined $config{global_sidebars} && ! $config{global_sidebars}; + + my $sidebar_page=bestlink($page, "sidebar") || return; + my $sidebar_file=$pagesources{$sidebar_page} || return; + my $sidebar_type=pagetype($sidebar_file); + + if (defined $sidebar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new sidebar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $sidebar_page); + + my $content; + if (defined $oldfile && $sidebar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($sidebar_file)); + $oldcontent=$content; + $oldfile=$sidebar_file; + } + + return unless length $content; + return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type, + IkiWiki::linkify($sidebar_page, $page, + IkiWiki::preprocess($sidebar_page, $page, + IkiWiki::filter($sidebar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "sidebar")) { + my $content=sidebar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(sidebar => $content); + } + } +} + +1 diff --git a/IkiWiki/Plugin/farbar.pm b/IkiWiki/Plugin/farbar.pm new file mode 100644 index 0000000..c1146b7 --- /dev/null +++ b/IkiWiki/Plugin/farbar.pm @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# Sidebar plugin. +# by Tuomo Valkonen + +package IkiWiki::Plugin::sidebar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "sidebar", call => \&getsetup); + hook(type => "preprocess", id => "sidebar", call => \&preprocess); + hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_sidebars => { + type => "boolean", + example => 1, + description => "show sidebar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagesidebar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagesidebar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagesidebar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub sidebar_content ($) { + my $page=shift; + + return delete $pagesidebar{$page} if defined $pagesidebar{$page}; + + return if ! exists $pagesidebar{$page} && + defined $config{global_sidebars} && ! $config{global_sidebars}; + + my $sidebar_page=bestlink($page, "sidebar") || return; + my $sidebar_file=$pagesources{$sidebar_page} || return; + my $sidebar_type=pagetype($sidebar_file); + + if (defined $sidebar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new sidebar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $sidebar_page); + + my $content; + if (defined $oldfile && $sidebar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($sidebar_file)); + $oldcontent=$content; + $oldfile=$sidebar_file; + } + + return unless length $content; + return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type, + IkiWiki::linkify($sidebar_page, $page, + IkiWiki::preprocess($sidebar_page, $page, + IkiWiki::filter($sidebar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "sidebar")) { + my $content=sidebar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(sidebar => $content); + } + } +} + +1 diff --git a/IkiWiki/Plugin/footer.pm b/IkiWiki/Plugin/footer.pm new file mode 100644 index 0000000..c1146b7 --- /dev/null +++ b/IkiWiki/Plugin/footer.pm @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# Sidebar plugin. +# by Tuomo Valkonen + +package IkiWiki::Plugin::sidebar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "sidebar", call => \&getsetup); + hook(type => "preprocess", id => "sidebar", call => \&preprocess); + hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_sidebars => { + type => "boolean", + example => 1, + description => "show sidebar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagesidebar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagesidebar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagesidebar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub sidebar_content ($) { + my $page=shift; + + return delete $pagesidebar{$page} if defined $pagesidebar{$page}; + + return if ! exists $pagesidebar{$page} && + defined $config{global_sidebars} && ! $config{global_sidebars}; + + my $sidebar_page=bestlink($page, "sidebar") || return; + my $sidebar_file=$pagesources{$sidebar_page} || return; + my $sidebar_type=pagetype($sidebar_file); + + if (defined $sidebar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new sidebar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $sidebar_page); + + my $content; + if (defined $oldfile && $sidebar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($sidebar_file)); + $oldcontent=$content; + $oldfile=$sidebar_file; + } + + return unless length $content; + return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type, + IkiWiki::linkify($sidebar_page, $page, + IkiWiki::preprocess($sidebar_page, $page, + IkiWiki::filter($sidebar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "sidebar")) { + my $content=sidebar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(sidebar => $content); + } + } +} + +1 diff --git a/IkiWiki/Plugin/topbar.pm b/IkiWiki/Plugin/topbar.pm new file mode 100644 index 0000000..c1146b7 --- /dev/null +++ b/IkiWiki/Plugin/topbar.pm @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# Sidebar plugin. +# by Tuomo Valkonen + +package IkiWiki::Plugin::sidebar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "sidebar", call => \&getsetup); + hook(type => "preprocess", id => "sidebar", call => \&preprocess); + hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_sidebars => { + type => "boolean", + example => 1, + description => "show sidebar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagesidebar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagesidebar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagesidebar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub sidebar_content ($) { + my $page=shift; + + return delete $pagesidebar{$page} if defined $pagesidebar{$page}; + + return if ! exists $pagesidebar{$page} && + defined $config{global_sidebars} && ! $config{global_sidebars}; + + my $sidebar_page=bestlink($page, "sidebar") || return; + my $sidebar_file=$pagesources{$sidebar_page} || return; + my $sidebar_type=pagetype($sidebar_file); + + if (defined $sidebar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new sidebar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $sidebar_page); + + my $content; + if (defined $oldfile && $sidebar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($sidebar_file)); + $oldcontent=$content; + $oldfile=$sidebar_file; + } + + return unless length $content; + return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type, + IkiWiki::linkify($sidebar_page, $page, + IkiWiki::preprocess($sidebar_page, $page, + IkiWiki::filter($sidebar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "sidebar")) { + my $content=sidebar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(sidebar => $content); + } + } +} + +1 -- cgit v1.2.3