diff options
-rw-r--r-- | Makefile | 4 | ||||
m--------- | basewiki | 0 | ||||
-rw-r--r-- | ikiwiki.setup | 13 | ||||
-rw-r--r-- | ikiwiki_admin.setup | 234 | ||||
-rw-r--r-- | perl/IkiWiki/Plugin/farbar.pm | 110 | ||||
-rw-r--r-- | perl/IkiWiki/Plugin/topbar.pm | 110 | ||||
m--------- | smiley | 0 | ||||
m--------- | templates | 0 |
8 files changed, 468 insertions, 3 deletions
@@ -9,10 +9,10 @@ ikiwiki_MODULES = templates basewiki smiley directives #ikiwiki_POMODULES = basewiki smiley directives #ikiwiki_POLOCALES = da -#dummy_MODULES = content_dummy +dummy_MODULES = content_dummy # uncomment this when ikiwiki.setup is configured for the local environment -#CONFIGS = ikiwiki.setup +#CONFIGS = ikiwiki_admin.setup ikiwiki.setup # Everything after this is generic diff --git a/basewiki b/basewiki -Subproject 6b53960c5bbcf6a43f2e48b0b37a94e1f909b52 +Subproject 4239aa9035dfe9ff030f39940e6689748ca266c diff --git a/ikiwiki.setup b/ikiwiki.setup index 539c878..984713b 100644 --- a/ikiwiki.setup +++ b/ikiwiki.setup @@ -25,7 +25,7 @@ use IkiWiki::Setup::Standard { # users who are banned from the wiki banned_users => [], # where the source of the wiki is located - srcdir => $basedir . '/content', + srcdir => $basedir . '/content_dummy', # where to build the wiki destdir => $builddir . '/html', # base url to the wiki @@ -43,10 +43,14 @@ use IkiWiki::Setup::Standard { }], # plugins to disable disable_plugins => [qw{ + editpage }], # location of template files templatedir => $basedir . '/templates', # base wiki source location + underlaydirs => [ + $basedir . '/content', + ], underlaydir => $basedir . '/basewiki', # display verbose messages when building? #verbose => 1, @@ -224,4 +228,11 @@ use IkiWiki::Setup::Standard { #websetup_force_plugins => [], # show unsafe settings, read-only, in web interface? #websetup_show_unsafe => 1, + + # varioki plugin (strings are eval'ed: double-quote actual strings!) + #varioki => { + # 'branding_logo_text' => '"Example Website"', + # 'branding_logo' => '"logo.png"', + # 'branding_logo_tagline' => '"Yet another ikiwiki site!"', + #}, } diff --git a/ikiwiki_admin.setup b/ikiwiki_admin.setup new file mode 100644 index 0000000..08c0b17 --- /dev/null +++ b/ikiwiki_admin.setup @@ -0,0 +1,234 @@ +#!/usr/bin/perl +# Setup file for ikiwiki. +# +# Passing this to ikiwiki --setup will make ikiwiki generate +# wrappers and build the wiki. +# +# Remember to re-run ikiwiki --setup any time you edit this file. + +our ($basedir, $builddir, $domain, $gitrepo); +BEGIN { + # git hook requires full path as basedir: $ENV{'HOME'} . '/mywiki' + $basedir = $ENV{'SRCDIR'} || $ENV{'PWD'}; + $builddir = $ENV{'BUILDDIR'} || $basedir . '/build'; + $domain = 'example.org'; + $gitrepo = 'wiki'; +} + +use IkiWiki::Setup::Standard { + # name of the wiki + wikiname => 'MyWiki', + # contact email for wiki + #adminemail => 'me@example.org', + # users who are wiki admins + adminuser => [], + # users who are banned from the wiki + banned_users => [], + # where the source of the wiki is located + srcdir => $basedir . '/content', + # where to build the wiki + destdir => $builddir . '/html-admin', + # base url to the wiki + url => 'http://admin.' . $domain . '/', + # url to the ikiwiki.cgi + cgiurl => 'http://admin.' . $domain . '/ikiwiki.cgi', + # cgi wrapper to generate + cgi_wrapper => $builddir . '/cgi-admin/ikiwiki.cgi', + # mode for cgi_wrapper (can safely be made suid) + cgi_wrappermode => '00755', + # rcs backend to use + rcs => 'git', + # plugins to add to the default configuration + add_plugins => [qw{ + }], + # plugins to disable + disable_plugins => [qw{ + }], + # location of template files + templatedir => $basedir . '/templates', + # base wiki source location + underlaydir => $basedir . '/basewiki', + # display verbose messages when building? + #verbose => 1, + # log to syslog? + #syslog => 1, + # create output files named page/index.html? + usedirs => 1, + # use '!'-prefixed preprocessor directives? + prefix_directives => 1, + # use page/index.mdwn source files + indexpages => 0, + # enable Discussion pages? + discussion => 1, + # only send cookies over SSL connections? + sslcookie => 0, + # extension to use for new pages + default_pageext => 'mdwn', + # extension to use for html files + htmlext => 'html', + # strftime format string to display date + timeformat => '%c', + # UTF-8 locale to use + #locale => 'en_US.UTF-8', + # put user pages below specified page + userdir => '', + # how many backlinks to show before hiding excess (0 to show all) + numbacklinks => 10, + # attempt to hardlink source files? (optimisation for large files) + hardlink => 0, + # force ikiwiki to use a particular umask + #umask => 022, + # extra library and plugin directory + libdir => $basedir . '/perl', + # environment variables + ENV => {}, + # regexp of source files to ignore + #exclude => '\\.wav$', + # specifies the characters that are allowed in source filenames + wiki_file_chars => '-[:alnum:]+/.:_', + # allow symlinks in the path leading to the srcdir (potentially insecure) + allow_symlinks_before_srcdir => 0, + + # aggregate plugin + # enable aggregation to internal pages? + #aggregateinternal => 0, + # allow aggregation to be triggered via the web? + #aggregate_webtrigger => 0, + + # amazon_s3 plugin + # public access key id + #amazon_s3_key_id => 'XXXXXXXXXXXXXXXXXXXX', + # file holding secret key (must not be readable by others!) + #amazon_s3_key_id => 's3_key', + # globally unique name of bucket to store wiki in + #amazon_s3_bucket => 'mywiki', + # a prefix to prepend to each page name + #amazon_s3_prefix => 'wiki/', + # which S3 datacenter to use (leave blank for default) + #amazon_s3_location => 'EU', + # store each index file twice? (allows urls ending in "/index.html" and "/") + #amazon_s3_dupindex => 0, + + # anonok plugin + # PageSpec to limit which pages anonymous users can edit + #anonok_pagespec => '*/discussion', + + # attachment plugin + # enhanced PageSpec specifying what attachments are allowed + #allowed_attachments => 'virusfree() and mimetype(image/*) and maxsize(50kb)', + # virus checker program (reads STDIN, returns nonzero if virus found) + #virus_checker => 'clamdscan -', + + # calendar plugin + # base of the archives hierarchy + #archivebase => 'archives', + + # git plugin + # git hook to generate + git_wrapper => $builddir . '/post-update-ikiwiki-admin', + # mode for git_wrapper (can safely be made suid) + git_wrappermode => '06755', + # gitweb url to show file history ([[file]] substituted) + historyurl => 'http://source.' . $domain . '/gitweb.cgi?p=' . $gitrepo . '.git;a=history;f=[[file]]', # ;hb=master + # gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], and [[file]] substituted) + diffurl => 'http://source.' . $domain . '/gitweb.cgi?p=' . $gitrepo . '.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]', + # where to pull and push changes (set to empty string to disable) + #gitorigin_branch => 'samplewiki', + # branch that the wiki is stored in + #gitmaster_branch => 'master', + + # htmlscrubber plugin + # PageSpec specifying pages not to scrub + #htmlscrubber_skip => '!*/Discussion', + + # inline plugin + # enable rss feeds by default? + #rss => 0, + # enable atom feeds by default? + #atom => 0, + # allow rss feeds to be used? + #allowrss => 0, + # allow atom feeds to be used? + #allowatom => 0, + # urls to ping (using XML-RPC) on feed update + #pingurl => 'http://rpc.technorati.com/rpc/ping', + + # listdirectives plugin + # directory in srcdir that contains directive descriptions + #directive_description_dir => 'ikiwiki/directive', + + # lockedit plugin + # PageSpec controlling which pages are locked + #locked_pages => '!*/Discussion', + + # mdwn plugin + # enable multimarkdown features? + #multimarkdown => 0, + + # mirrorlist plugin + # list of mirrors + #mirrorlist => {}, + + # openid plugin + # an url where users can signup for an OpenID + #openidsignup => 'http://myopenid.com/', + + # passwordauth plugin + # a password that must be entered when signing up for an account + #account_creation_password => 's3cr1t', + # cost of generating a password using Authen::Passphrase::BlowfishCrypt + #password_cost => 8, + + # pinger plugin + # how many seconds to try pinging before timing out + #pinger_timeout => 15, + + # prettydate plugin + # format to use to display date + #prettydateformat => '%X, %B %o, %Y', + + # recentchanges plugin + # name of the recentchanges page + #recentchangespage => 'recentchanges', + # number of changes to track + #recentchangesnum => 100, + + # search plugin + # path to the omega cgi program + #omega_cgi => '/usr/lib/cgi-bin/omega/omega', + + # tag plugin + # parent page tags are located under + #tagbase => 'tag', + + # teximg plugin + # Should teximg use dvipng to render, or dvips and convert? + #teximg_dvipng => '', + # LaTeX prefix for teximg plugin + #teximg_prefix => '\\documentclass{article} + #\\usepackage{amsmath} + #\\usepackage{amsfonts} + #\\usepackage{amssymb} + #\\pagestyle{empty} + #\\begin{document} + #', + # LaTeX postfix for teximg plugin + #teximg_postfix => '\\end{document}', + + # typography plugin + # Text::Typography attributes value + #typographyattributes => '3', + + # websetup plugin + # list of plugins that cannot be enabled/disabled via the web interface + #websetup_force_plugins => [], + # show unsafe settings, read-only, in web interface? + #websetup_show_unsafe => 1, + + # varioki plugin (strings are eval'ed: double-quote actual strings!) + #varioki => { + # 'branding_logo_text' => '"Example Website"', + # 'branding_logo' => '"logo.png"', + # 'branding_logo_tagline' => '"Yet another ikiwiki site!"', + #}, +} diff --git a/perl/IkiWiki/Plugin/farbar.pm b/perl/IkiWiki/Plugin/farbar.pm new file mode 100644 index 0000000..37f1013 --- /dev/null +++ b/perl/IkiWiki/Plugin/farbar.pm @@ -0,0 +1,110 @@ +#!/usr/bin/perl +# Farbar plugin. +# by Jonas Smedegaard <dr@jones.dk> +# Heavily based on Sidebar by Tuomo Valkonen <tuomov at iki dot fi> + +package IkiWiki::Plugin::farbar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "farbar", call => \&getsetup); + hook(type => "preprocess", id => "farbar", call => \&preprocess); + hook(type => "pagetemplate", id => "farbar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_farbars => { + type => "boolean", + example => 1, + description => "show farbar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagefarbar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagefarbar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagefarbar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub farbar_content ($) { + my $page=shift; + + return delete $pagefarbar{$page} if defined $pagefarbar{$page}; + + return if ! exists $pagefarbar{$page} && + defined $config{global_farbars} && ! $config{global_farbars}; + + my $farbar_page=bestlink($page, "farbar") || return; + my $farbar_file=$pagesources{$farbar_page} || return; + my $farbar_type=pagetype($farbar_file); + + if (defined $farbar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new farbar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $farbar_page); + + my $content; + if (defined $oldfile && $farbar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($farbar_file)); + $oldcontent=$content; + $oldfile=$farbar_file; + } + + return unless length $content; + return IkiWiki::htmlize($farbar_page, $page, $farbar_type, + IkiWiki::linkify($farbar_page, $page, + IkiWiki::preprocess($farbar_page, $page, + IkiWiki::filter($farbar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "farbar")) { + my $content=farbar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(farbar => $content); + } + } +} + +1 diff --git a/perl/IkiWiki/Plugin/topbar.pm b/perl/IkiWiki/Plugin/topbar.pm new file mode 100644 index 0000000..2705161 --- /dev/null +++ b/perl/IkiWiki/Plugin/topbar.pm @@ -0,0 +1,110 @@ +#!/usr/bin/perl +# Topbar plugin. +# by Jonas Smedegaard <dr@jones.dk> +# Heavily based on Sidebar by Tuomo Valkonen <tuomov at iki dot fi> + +package IkiWiki::Plugin::topbar; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "topbar", call => \&getsetup); + hook(type => "preprocess", id => "topbar", call => \&preprocess); + hook(type => "pagetemplate", id => "topbar", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + global_topbars => { + type => "boolean", + example => 1, + description => "show topbar page on all pages?", + safe => 1, + rebuild => 1, + }, +} + +my %pagetopbar; + +sub preprocess (@) { + my %params=@_; + + my $page=$params{page}; + return "" unless $page eq $params{destpage}; + + if (! defined $params{content}) { + $pagetopbar{$page}=undef; + } + else { + my $file = $pagesources{$page}; + my $type = pagetype($file); + + $pagetopbar{$page}= + IkiWiki::htmlize($page, $page, $type, + IkiWiki::linkify($page, $page, + IkiWiki::preprocess($page, $page, $params{content}))); + } + + return ""; +} + +my $oldfile; +my $oldcontent; + +sub topbar_content ($) { + my $page=shift; + + return delete $pagetopbar{$page} if defined $pagetopbar{$page}; + + return if ! exists $pagetopbar{$page} && + defined $config{global_topbars} && ! $config{global_topbars}; + + my $topbar_page=bestlink($page, "topbar") || return; + my $topbar_file=$pagesources{$topbar_page} || return; + my $topbar_type=pagetype($topbar_file); + + if (defined $topbar_type) { + # FIXME: This isn't quite right; it won't take into account + # adding a new topbar page. So adding such a page + # currently requires a wiki rebuild. + add_depends($page, $topbar_page); + + my $content; + if (defined $oldfile && $topbar_file eq $oldfile) { + $content=$oldcontent; + } + else { + $content=readfile(srcfile($topbar_file)); + $oldcontent=$content; + $oldfile=$topbar_file; + } + + return unless length $content; + return IkiWiki::htmlize($topbar_page, $page, $topbar_type, + IkiWiki::linkify($topbar_page, $page, + IkiWiki::preprocess($topbar_page, $page, + IkiWiki::filter($topbar_page, $page, $content)))); + } + +} + +sub pagetemplate (@) { + my %params=@_; + + my $template=$params{template}; + if ($params{destpage} eq $params{page} && + $template->query(name => "topbar")) { + my $content=topbar_content($params{destpage}); + if (defined $content && length $content) { + $template->param(topbar => $content); + } + } +} + +1 diff --git a/smiley b/smiley -Subproject 30dd469765c2396ded03355876af391e922e89b +Subproject 53c7e615015d7a1a504996e001a8ce38df41f35 diff --git a/templates b/templates -Subproject 5df058b2b3dc6e565ad3b3604263f487ef65f2a +Subproject 806dedad06b62b4a49c0fddb89cde1c3b73fb15 |