From 5466a1daf99e8e4c67a19f871aaf558312569652 Mon Sep 17 00:00:00 2001 From: joey Date: Fri, 26 May 2006 01:10:58 +0000 Subject: [PATCH] * The page name and parent links has switched from using a

to a styled , so pages can use

internally instead of needing to use

. * Updated all of ikiwiki's own wiki pages for that. * Add pagetemplate hook, which can be used by plugins that want to mess around with adding new stuff to the page template. * Remove headercontent; the search plugin now adds the search box to the header by registering a pagetemplate hook, and other plugins should do similarly. --- IkiWiki.pm | 1 - IkiWiki/Plugin/search.pm | 12 +++- IkiWiki/Plugin/skeleton.pm | 9 +++ IkiWiki/Render.pm | 7 ++- IkiWiki/Wrapper.pm | 4 -- basewiki/helponformatting.mdwn | 3 +- basewiki/style.css | 5 +- debian/changelog | 10 +++- doc/about_rcs_backends.mdwn | 18 +++--- doc/download.mdwn | 8 +-- doc/helponformatting.mdwn | 58 ------------------- doc/plugins.mdwn | 7 ++- doc/plugins/write.mdwn | 53 +++++++++-------- ..._new_pages_by_using_the_web_interface.mdwn | 28 +++++++-- doc/todo/done/html.mdwn | 4 +- templates/editpage.tmpl | 6 +- templates/inlinepage.tmpl | 2 +- templates/misc.tmpl | 4 +- templates/page.tmpl | 8 ++- templates/recentchanges.tmpl | 4 +- 20 files changed, 122 insertions(+), 129 deletions(-) delete mode 100644 doc/helponformatting.mdwn diff --git a/IkiWiki.pm b/IkiWiki.pm index df38efb7d..81a72d43d 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -42,7 +42,6 @@ sub defaultconfig () { #{{{ adminuser => undef, adminemail => undef, plugin => [qw{inline htmlscrubber}], - headercontent => '', } #}}} sub checkconfig () { #{{{ diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm index 213ed45ff..c94974ac4 100644 --- a/IkiWiki/Plugin/search.pm +++ b/IkiWiki/Plugin/search.pm @@ -9,6 +9,8 @@ use IkiWiki; sub import { #{{{ IkiWiki::hook(type => "checkconfig", id => "hyperestraier", call => \&checkconfig); + IkiWiki::hook(type => "pagetemplate", id => "hyperestraier", + call => \&pagetemplate); IkiWiki::hook(type => "delete", id => "hyperestraier", call => \&delete); IkiWiki::hook(type => "change", id => "hyperestraier", @@ -23,8 +25,14 @@ sub checkconfig () { #{{{ IkiWiki::error("Must specify $required when using the search plugin\n"); } } +} #}}} + +sub pagetemplate ($$) { #{{{ + my $page=shift; + my $template=shift; - $IkiWiki::config{headercontent}.=qq{ + # Add search box to page header. + $template->param(searchform => qq{
@@ -32,7 +40,7 @@ sub checkconfig () { #{{{
-}; +}); } #}}} sub delete (@) { #{{{ diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm index 346dfa5ff..226270c38 100644 --- a/IkiWiki/Plugin/skeleton.pm +++ b/IkiWiki/Plugin/skeleton.pm @@ -17,6 +17,8 @@ sub import { #{{{ call => \&filter); IkiWiki::hook(type => "sanitize", id => "skeleton", call => \&sanitize); + IkiWiki::hook(type => "pagetemplate", id => "skeleton", + call => \&pagetemplate); IkiWiki::hook(type => "delete", id => "skeleton", call => \&delete); IkiWiki::hook(type => "change", id => "skeleton", @@ -51,6 +53,13 @@ sub sanitize ($) { #{{{ return $content; } # }}} +sub pagetemplate ($$) { #{{{ + my $page=shift; + my $template=shift; + + IkiWiki::debug("skeleton plugin running as a pagetemplate hook"); +} # }}} + sub delete (@) { #{{{ my @files=@_; diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 854d5105e..b59a721c0 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -177,7 +177,12 @@ sub genpage ($$$) { #{{{ if ($config{discussion}) { $template->param(discussionlink => htmllink($page, "Discussion", 1, 1)); } - $template->param(headercontent => $config{headercontent}); + + if (exists $hooks{pagetemplate}) { + foreach my $id (keys %{$hooks{pagetemplate}}) { + $hooks{pagetemplate}{$id}{call}->($page, $template); + } + } $template->param( title => $title, diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 7d27abd06..52a7ca2c7 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -47,10 +47,6 @@ EOF EOF } - # This is only set by plugins, which append to it on startup, so - # avoid storing it in the wrapper. - $config{headercontent}=""; - $Data::Dumper::Indent=0; # no newlines my $configstring=Data::Dumper->Dump([\%config], ['*config']); $configstring=~s/\\/\\\\/g; diff --git a/basewiki/helponformatting.mdwn b/basewiki/helponformatting.mdwn index a34f20144..bc229aad0 100644 --- a/basewiki/helponformatting.mdwn +++ b/basewiki/helponformatting.mdwn @@ -1,4 +1,4 @@ -## Help on formatting text +# Help on formatting text Text on this wiki is written in a form very close to how you might write text for an email message. @@ -24,6 +24,7 @@ To create a header, start a line with one or more `#` characters followed by a space and the header text. The number of `#` characters controls the size of the header: +# # h1 ## ## h2 ### ### h3 #### #### h4 diff --git a/basewiki/style.css b/basewiki/style.css index 2e0141050..a830afb69 100644 --- a/basewiki/style.css +++ b/basewiki/style.css @@ -1,5 +1,8 @@ -#header h1 { +#header { margin: 0; + font-size: 22px; + font-weight: bold; + line-height: 1em; } #actions ul { diff --git a/debian/changelog b/debian/changelog index 65808d4d5..9e26c8c78 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,16 @@ ikiwiki (1.4) UNRELEASED; urgency=low * Tell HTML::Scrubber to treat "/" as a valid attribute which is its very strange way of enabling proper XHTML
type tags. Output html should be always valid again now. + * The page name and parent links has switched from using a

to a styled + , so pages can use

internally instead of needing to use

. + * Updated all of ikiwiki's own wiki pages for that. + * Add pagetemplate hook, which can be used by plugins that want to mess + around with adding new stuff to the page template. + * Remove headercontent; the search plugin now adds the search box to the + header by registering a pagetemplate hook, and other plugins should do + similarly. - -- Joey Hess Thu, 25 May 2006 18:01:59 -0400 + -- Joey Hess Thu, 25 May 2006 20:57:07 -0400 ikiwiki (1.3) unstable; urgency=low diff --git a/doc/about_rcs_backends.mdwn b/doc/about_rcs_backends.mdwn index 476525e3c..197f09394 100644 --- a/doc/about_rcs_backends.mdwn +++ b/doc/about_rcs_backends.mdwn @@ -1,16 +1,16 @@ -## A few bits about the RCS backends +# A few bits about the RCS backends -### Terminology +## Terminology ``web-edit'' means that a page is edited by using the web (CGI) interface as opposed to using a editor and the RCS interface. -### [[Subversion]] +## [[Subversion]] Subversion was the first RCS to be supported by ikiwiki. -#### How does it work internally? +### How does it work internally? Master repository M. @@ -28,12 +28,12 @@ see [[commit-internals]]. You browse and web-edit the wiki on W. -### [darcs](http://darcs.net/) (not yet included) +## [darcs](http://darcs.net/) (not yet included) Support for using darcs as a backend is being worked on by [Thomas Schwinge](mailto:tschwinge@gnu.org). -#### How will it work internally? +### How will it work internally? ``Master'' repository R1. @@ -59,7 +59,7 @@ separated parts in ikiwiki. What repository should [[RecentChanges]] and [[History]] work on? R1? -##### Rationale for doing it differently than in the Subversion case +#### Rationale for doing it differently than in the Subversion case darcs is a distributed RCS, which means that every checkout of a repository is equal to the repository it was checked-out from. There is @@ -76,7 +76,7 @@ off from R1. (To be continued.) -### [[Git]] (not yet included) +## [[Git]] (not yet included) A patch with full [Git](http://git.or.cz) support is at . Regarding the patch, Recai says: @@ -121,4 +121,4 @@ Some other notes: It works for me, but of course in the end, the final decision is yours (due to mostly GIT quirks, the implementation is not clean as SVN). Feel free -to fix/delete/add whatever you want. Hope it doesn't have any serious bug. \ No newline at end of file +to fix/delete/add whatever you want. Hope it doesn't have any serious bug. diff --git a/doc/download.mdwn b/doc/download.mdwn index bc58b178b..e64d1984c 100644 --- a/doc/download.mdwn +++ b/doc/download.mdwn @@ -1,11 +1,11 @@ Here's how to get ikiwiki. See [[setup]] for how to use it, and be sure to add your wiki to [[IkiwikiUsers]] if you use ikiwiki. -## tarball +# tarball The best place to download a tarball of the latest release is from . -## Debian package +# Debian package If using Debian unstable, or soon, testing: @@ -15,9 +15,9 @@ Or download the deb from . While this deb has been developed on Debian unstable, it should also work on stable, although to get the CGI stuff working on stable, you will need to upgrade to a newer version of libcgi-formbuilder-perl, `3.02.02`. -## subversion +# subversion The current development version of ikiwiki can be accessed using subversion at `svn://svn.kitenet.net/ikiwiki/trunk` -The source in subversion can be browsed [with viewcvs](http://svn.kitenet.net/trunk/?root=ikiwiki). \ No newline at end of file +The source in subversion can be browsed [with viewcvs](http://svn.kitenet.net/trunk/?root=ikiwiki). diff --git a/doc/helponformatting.mdwn b/doc/helponformatting.mdwn deleted file mode 100644 index 1e3958a61..000000000 --- a/doc/helponformatting.mdwn +++ /dev/null @@ -1,58 +0,0 @@ -## Help on formatting text - -Text on this wiki is written in a form very close to how you might write -text for an email message. This style of text formatting is called [[MarkDown]]. - -Leave blank lines between paragraphs. - -You can \**emphasise*\* or \*\***strongly emphasise**\*\* text by placing it -in single or double asterisks. - -To create a list, start each line with an asterisk: - -* "* this is my list" -* "* another item" - -To make a numbered list, start each line with a number (any number will -do) followed by a period: - -1. "1. first line" -2. "2. second line" -2. "2. third line" - -To create a header, start a line with one or more `#` characters followed -by a space and the header text. The number of `#` characters controls the -size of the header: - -## ## h2 -### ### h3 -#### #### h4 - -To create a horizontal rule, just write three or more dashes on their own -line: - ----- - -To quote someone, prefix the quote with ">": - -> To be or not to be, -> that is the question. - -To write a code block, indent each line with a tab or 8 spaces: - - 10 PRINT "Hello, world!" - 20 GOTO 10 - -To link to another page on the wiki, place the page's name inside double -square brackets, so you would use `\[[WikiLink]]` to link to [[WikiLink]]. - -To link to any other web page, or to an email address, you can just put the url in angle brackets: <>, or you can use the form -\[link text\]\(url\) - ----- - -Advanced users can use [[PreProcessorDirective]]s to do additional cool -stuff. - -Also, if the smiley plugin is enabled in your wiki, you can insert -[[smileys]] and some other useful symbols. diff --git a/doc/plugins.mdwn b/doc/plugins.mdwn index 5596586b3..2c184900c 100644 --- a/doc/plugins.mdwn +++ b/doc/plugins.mdwn @@ -1,17 +1,18 @@ -There's documentation if you want to [[write]] your own plugins, or you can install and use plugins contributed by others. +There's documentation if you want to [[write]] your own plugins, or you can +install and use plugins contributed by others. The [[inline]] and [[htmlscrubber]] plugins are enabled by default. To enable other plugins, use the `--plugin` switch described in [[usage]], or the equivalent line in [[ikiwiki.setup]]. -## Plugin directory +# Plugin directory Add all plugins here. Or add ideas to the [[todo|todo/plugin]] page. [[inline pages="plugins/* !plugins/write !*/Discussion" archive="yes" rootpage="plugins/contrib" show="60"]] -## Installing third party plugins +# Installing third party plugins Plugins are perl modules and should be installed somewhere in the perl module search path. See the @INC list at the end of the output of `perl -V` diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 6c013cd4a..245f7c9ee 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -4,7 +4,7 @@ lowercase, such as `IkiWiki::Plugin::inline`. Ikiwiki includes a `IkiWiki::Plugin::skeleton` that can be fleshed out to make a useful plugin. `IkiWiki::Plugin::pagecount` is another simple example. -## Note +# Note One thing to keep in mind when writing a plugin is that ikiwiki is a wiki *compiler*. So plugins influence pages when they are built, not when they @@ -15,7 +15,7 @@ random or changing thing on a page will generate a static page that won't change until ikiwiki rebuilds the page for some other reason, like the page being edited. -## Registering plugins +# Registering plugins Plugins should, when imported, call IkiWiki::hook to hook into ikiwiki's processing. The function uses named parameters, and use varies depending on @@ -26,7 +26,7 @@ hook, a "id" paramter, which should be a unique string for this plugin, and a "call" parameter, which is a reference to a function to call for the hook. -## Writing a [[PreProcessorDirective]] +# Writing a [[PreProcessorDirective]] This is probably the most common use of a plugin. @@ -40,14 +40,14 @@ Each time the directive is processed, the referenced function (`preprocess` in t as named parameters as well. Whatever the function returns goes onto the page in place of the directive. -### Error handing +## Error handing While a plugin can call ikiwiki's error routine for a fatal error, for errors that aren't intended to halt the entire wiki build, including bad parameters passed to a [[PreProcessorDirective]], etc, it's better to just return the error message as the output of the plugin. -### Html issues +## Html issues Note that if the [[htmlscrubber]] is enabled, html in [[PreProcessorDirective]] output is sanitised, which may limit what your @@ -55,12 +55,12 @@ plugin can do. Also, the rest of the page content is not in html format at preprocessor time. Text output by a preprocessor directive will be passed through markdown along with the rest of the page. -## Other types of hooks +# Other types of hooks Beyond PreProcessorDirectives, Other types of hooks that can be used by plugins include: -### checkconfig +## checkconfig IkiWiki::hook(type => "checkconfig", id => "foo", call => \&checkconfig); @@ -69,7 +69,7 @@ configuration. It's called early in the ikiwiki startup process. The function is passed no values. It's ok for the function to call IkiWiki::error if something isn't configured right. -### filter +## filter IkiWiki::hook(type => "filter", id => "foo", call => \&filter); @@ -77,7 +77,7 @@ Runs on the raw source of a page, before anything else touches it, and can make arbitrary changes. The function is passed named parameters `page` and `content` and should return the filtered content. -### sanitize +## sanitize IkiWiki::hook(type => "filter", id => "foo", call => \&sanitize); @@ -86,14 +86,25 @@ modify the content of a page after it has been fully converted to html. The function is passed the page content and should return the sanitized content. -### delete +## pagetemplate + + IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate); + +Each time a page is rendered, a [[template|templates]] is filled out. +This hook allows modifying that template. The function is passed the name +of the page, and a `HTML::Template` object that is the template that will +be used to generate the page. It can manipulate that template, the most +common thing to do is probably to call $template->param() to add a new +custom parameter to the template. + +## delete IkiWiki::hook(type => "delete", id => "foo", call => \&dele); Each time a page or pages is removed from the wiki, the referenced function is called, and passed the names of the source files that were removed. -### change +## change IkiWiki::hook(type => "change", id => "foo", call => \&render); @@ -101,7 +112,7 @@ Each time ikiwiki renders a change or addition (but not deletion) to the wiki, the referenced function is called, and passed the names of the source files that were rendered. -### cgi +## cgi IkiWiki::hook(type => "cgi", id => "foo", call => \&cgi); @@ -110,13 +121,13 @@ called in turn, and passed a CGI object. The hook should examine the parameters, and if it will handle this CGI request, output a page and terminate the program. -## Wiki configuration +# Wiki configuration A plugin can access the wiki's configuration via the `%IkiWiki::config` hash. The best way to understand the contents of the hash is to look at [[ikiwiki.setup]], which sets the hash content to configure the wiki. -## Wiki data +# Wiki data If your plugin needs to access data about other pages in the wiki. It can use the following hashes, using a page name as the key: @@ -136,19 +147,7 @@ use the following hashes, using a page name as the key: it is by using the IkiWiki::add_depends function, which takes as its parameters the page name and a [[GlobList]] of dependencies to add. -## Page templates - -Plugins are mostly limited to changing the content of pages, to change the -look and feel of the wiki it's generally better to use a stylesheet and -[[templates]]. However, there are some hooks in the templates that plugins -can use to add stuff to the wiki's UI: - -### Adding content to the page header - -Html that is added to $IkiWiki::config{headercontent} will show up in the -header of the page. One good thing to put here is a search form. - -## RCS plugins +# RCS plugins ikiwiki's support for revision control systems also uses pluggable perl modules. These are in the `IkiWiki::RCS` namespace, for example diff --git a/doc/todo/adding_new_pages_by_using_the_web_interface.mdwn b/doc/todo/adding_new_pages_by_using_the_web_interface.mdwn index 65de469fb..e24ab1232 100644 --- a/doc/todo/adding_new_pages_by_using_the_web_interface.mdwn +++ b/doc/todo/adding_new_pages_by_using_the_web_interface.mdwn @@ -1,8 +1,26 @@ -Perhaps I'm just too stupid to find the proper way to do this, but how would I add a new page to the wiki without selecting to edit an already installed one and frobbing the URL to direct to the to-be-created page? --[[ThomasSchwinge]] +Perhaps I'm just too stupid to find the proper way to do this, but how +would I add a new page to the wiki without selecting to edit an already +installed one and frobbing the URL to direct to the to-be-created page? +--[[ThomasSchwinge]] -Good point. Of course one way is to start with creating a link to the page, which also helps prevent orphans. But other wikis based on CGI do have this a bit easier, since they can detect an attempt to access a nonexistant page and show an edit page. Ikiwiki can't do that (unless its web server is configured to do smart things on a 404). +Good point. Of course one way is to start with creating a link to the page, +which also helps prevent orphans. But other wikis based on CGI do have this +a bit easier, since they can detect an attempt to access a nonexistant page +and show an edit page. Ikiwiki can't do that (unless its web server is +configured to do smart things on a 404, like maybe call ikiwiki.cgi which +could be modified to work as a smart 404 -> edit handler). -Some wikis also provide a UI means for creating a new page. If we can find something good, that can be added to ikiwiki's UI. --[[Joey]] +Some wikis also provide a UI means for creating a new page. If we can find +something good, that can be added to ikiwiki's UI. --[[Joey]] -Hmm, maybe just a preprocessor directive that creates a form inside a page, like is used for blog posting already would suffice? Then the main page of a wiki could have a form for adding new pages, if that directive were included there. -Won't work for subpages though, unless the directive were added to the parent page. However, unconnected subpages are surely an even rarer thing to want than unconnected top level pages. --[[Joey]] \ No newline at end of file +Hmm, maybe just a preprocessor directive that creates a form inside a page, +like is used for blog posting already would suffice? Then the main page of +a wiki could have a form for adding new pages, if that directive were +included there. Won't work for subpages though, unless the directive were +added to the parent page. However, unconnected subpages are surely an even +rarer thing to want than unconnected top level pages. --[[Joey]] + +Maybe a very simple PHP frontend for serving the +statically generated pages, that would display a page editing form or +something like that for non-existent pages, wouldn't be too bad a thing +and resource hog? Just a thought... --[[Tuomov]] diff --git a/doc/todo/done/html.mdwn b/doc/todo/done/html.mdwn index 96dc0b476..e74a979ca 100644 --- a/doc/todo/done/html.mdwn +++ b/doc/todo/done/html.mdwn @@ -1,6 +1,6 @@ -## html validation +# html validation * A doctype: XHTML 1.0 strict. * <hr> to <hr /> etc. * Image wikilinks provide an alt text. - * &'s in (cgi-)url's escaped as &amp;. \ No newline at end of file + * &'s in (cgi-)url's escaped as &amp;. diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl index 4724cd65f..b7ec3fa2b 100644 --- a/templates/editpage.tmpl +++ b/templates/editpage.tmpl @@ -20,7 +20,9 @@ confict and commit again to save your changes.

-

/

+ @@ -39,7 +41,7 @@ Optional comment about this change:

diff --git a/templates/inlinepage.tmpl b/templates/inlinepage.tmpl index 397ac860c..39afc7f98 100644 --- a/templates/inlinepage.tmpl +++ b/templates/inlinepage.tmpl @@ -1,5 +1,5 @@
-

+ diff --git a/templates/misc.tmpl b/templates/misc.tmpl index 1f724d3cd..3187f5892 100644 --- a/templates/misc.tmpl +++ b/templates/misc.tmpl @@ -12,9 +12,9 @@
diff --git a/templates/page.tmpl b/templates/page.tmpl index 09e19c359..fc0094121 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -9,13 +9,15 @@
diff --git a/templates/recentchanges.tmpl b/templates/recentchanges.tmpl index f9e7541da..389f98cb3 100644 --- a/templates/recentchanges.tmpl +++ b/templates/recentchanges.tmpl @@ -12,9 +12,9 @@
-- 2.45.2