* The page name and parent links has switched from using a <h1> to a styled

<span>, so pages can use <h1> internally instead of needing to use <h2>.
* 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.
master
joey 2006-05-26 01:10:58 +00:00
parent 7f64dd4f66
commit 5466a1daf9
20 changed files with 122 additions and 129 deletions

View File

@ -42,7 +42,6 @@ sub defaultconfig () { #{{{
adminuser => undef,
adminemail => undef,
plugin => [qw{inline htmlscrubber}],
headercontent => '',
} #}}}
sub checkconfig () { #{{{

View File

@ -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");
}
}
} #}}}
$IkiWiki::config{headercontent}.=qq{
sub pagetemplate ($$) { #{{{
my $page=shift;
my $template=shift;
# Add search box to page header.
$template->param(searchform => qq{
<form method="get" action="$IkiWiki::config{cgiurl}" id="searchform">
<div>
<input type="text" name="phrase" value="" size="16" />
@ -32,7 +40,7 @@ sub checkconfig () { #{{{
<input type="hidden" name="do" value="hyperestraier" />
</div>
</form>
};
});
} #}}}
sub delete (@) { #{{{

View File

@ -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=@_;

View File

@ -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,

View File

@ -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;

View File

@ -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

View File

@ -1,5 +1,8 @@
#header h1 {
#header {
margin: 0;
font-size: 22px;
font-weight: bold;
line-height: 1em;
}
#actions ul {

10
debian/changelog vendored
View File

@ -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 <br /> type tags. Output html
should be always valid again now.
* The page name and parent links has switched from using a <h1> to a styled
<span>, so pages can use <h1> internally instead of needing to use <h2>.
* 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 <joeyh@debian.org> Thu, 25 May 2006 18:01:59 -0400
-- Joey Hess <joeyh@debian.org> Thu, 25 May 2006 20:57:07 -0400
ikiwiki (1.3) unstable; urgency=low

View File

@ -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 <http://people.debian.org/~roktas/patches/ikiwiki/git.patch>. Regarding the patch, Recai says:

View File

@ -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
<http://packages.debian.org/unstable/source/ikiwiki>.
## Debian package
# Debian package
If using Debian unstable, or soon, testing:
@ -15,7 +15,7 @@ Or download the deb from <http://packages.debian.org/unstable/web/ikiwiki>.
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`

View File

@ -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: <<http://ikiwiki.kitenet.net>>, 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.

View File

@ -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`

View File

@ -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

View File

@ -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]]
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]]

View File

@ -1,4 +1,4 @@
## html validation
# html validation
* A doctype: XHTML 1.0 strict.
* &lt;hr&gt; to &lt;hr /&gt; etc.

View File

@ -20,7 +20,9 @@ confict and commit again to save your changes.
</p>
</TMPL_IF>
<TMPL_VAR FORM-START>
<h1><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></h1>
<div id="header">
<span><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></span>
</div>
<TMPL_VAR FIELD-DO>
<TMPL_VAR FIELD-FROM>
<TMPL_VAR FIELD-RCSINFO>
@ -39,7 +41,7 @@ Optional comment about this change:<br />
<hr />
<TMPL_IF NAME="PAGE_PREVIEW">
<div id="header">
<h1>Page preview:</h1>
<span>Page preview:</span>
</div>
<div id="content">
<TMPL_VAR PAGE_PREVIEW>

View File

@ -1,5 +1,5 @@
<div class="inlinepage">
<h1><TMPL_VAR PAGELINK></h1>
<span id="header"><TMPL_VAR PAGELINK></span>
<TMPL_VAR CONTENT>

View File

@ -12,9 +12,9 @@
<body>
<div id="header">
<h1>
<span>
<TMPL_VAR INDEXLINK>/ <TMPL_VAR TITLE>
</h1>
</span>
</div>
<div id="content">

View File

@ -9,13 +9,15 @@
<body>
<div id="header">
<h1>
<span>
<TMPL_LOOP NAME="PARENTLINKS">
<a href="<TMPL_VAR NAME=URL>"><TMPL_VAR NAME=PAGE></a>/
</TMPL_LOOP>
<TMPL_VAR TITLE>
</h1>
<TMPL_VAR HEADERCONTENT>
</span>
<TMPL_IF NAME="SEARCHFORM">
<TMPL_VAR SEARCHFORM>
</TMPL_IF>
</div>
<div id="actions">

View File

@ -12,9 +12,9 @@
<body>
<div id="header">
<h1>
<span>
<TMPL_VAR INDEXLINK>/ <TMPL_VAR TITLE>
</h1>
</span>
</div>
<div id="content">