* Use precalculated backlinks info when determining if files need an update
due to a page they link to being added/removed. Mostly significant if
there are lots of pages.
* Remove duplicate link info when saving index. In some cases it could
pile up rather badly. (Probably not the best way to deal with this
problem.)
8x.
* Add "scan" parameter to hook(), which is used to make the hook be called
during the scanning pass, as well as the render pass. The meta and tag
plugins need to use the new scan parameter, so will any others that modify
%links.
* Now that links are calculated in a separate pass, it can also
precalculate backlinks in one pass, which is O(N^2) instead of the
previous code that was O(N^3). A very nice speedup for wikis with lots
(thousands) of pages.
instead of over and over. This is up to 8 times faster than before!
(This could have introduced some subtle bugs, so it needs to be tested
extensively.)
an exception for the wiki's toplevel index page, which will still use the
wikiname as the feed title.
* Sanitize possibly problimatic characters out of the polygen grammar names,
just in case. Should not be exploitable anyway, since it only tries to run
polygen after finding the specified grammar file.
* Add a shortcut plugin, inspired by Victor Moral's contributed shortcuts
plugin, but featuring a more ikiwiki-ish syntax and with shortcuts that
can be configured using a page in wiki.
* Add feeds=no option to inline preprocessor directive to turn off all types
of feeds. feeds=rss will still work, and feeds=atom was also added, for
fine control.
* $IkiWiki::version now holds the program version, and is accessible to
plugins.
source file, to allow tracking of extra rendered files like rss feeds.
* Note that plugins that accessed this variable will need to be updated!
The plugin interface has been increased to version 1.01 for this change.
* Add will_render function to the plugin interface, used to register that a
page renders a destination file, and do some security checks.
* Use will_render in the inline and linkmap plugins.
* Previously but no longer rendered files will be cleaned up.
* You will need to rebuild your wiki on upgrade to this version.
using HTTP Authentication instead of ikiwiki's built in authentication.
Useful for eg, large sites with their own previously existing user auth
setup. Closes: #384534
* chomp trailing newlines at the end of templates read in by the template
plugin, to allow use of the template preprocessor directive in
whitespace-sensative situations. Closes: #387073
- Plugins should not need to load IkiWiki::Render to get commonly
used functions, so moved some functions from there to IkiWiki.
- Picked out the set of functions and variables that most plugins
use, documented them, and made IkiWiki export them by default,
like a proper perl module should.
- Use the other functions at your own risk.
- This is not quite complete, I still have to decide whether to
export some other things.
* Changed all plugins included in ikiwiki to not use "IkiWiki::" when
referring to stuff now exported by the IkiWiki module.
* Anyone with a third-party ikiwiki plugin is strongly enrouraged
to make like changes to it and avoid use of non-exported symboles from
"IkiWiki::".
* Link debian/changelog and debian/news to NEWS and CHANGELOG.
* Support hyperestradier version 1.4.2, which adds a new required phraseform
setting.
* otl2hmtl can't be safely used with IPC::Open2 since it sometimes
writes before consuming its whole stdin. Avoid this deadlock.
* Fix alt tags for outline checkboxes.
cookies to only be sent over ssl connections to avoid interception.
* Factor out the cgi header printing code into a new function.
* Fix preferences page on anonok wikis; still need to sign in to get
to the preferences page.
This allows passing a wikilink inside a parameter to a preprocessor
directive without it being expanded to html, and leaking out of the
parameter, which had required some non-obvious use of triple-quoting
to avoid. Note that any preprocessor plugins that output something
that looks like a wikilink will now have it treated as such; AFAIK
this doesn't change any behavior though except for the template plugin.
* Enable preprocessor directives when previewing an edit.
text blocks, for easy nesting of quotes inside.
* Add a template plugin.
* Use the template plugin to add infoboxes to each plugin page listing basic
info about the plugin.
pages.
* Change how the stylesheet url is determined in the templates: Remove
STYLEURL and add BASEURL to all templates (some already had it). This
new more general variable can be used to link to other things (eg, images)
from the template, as well as stylesheets.
Talens-Oliag. Note that this has many known issues -- see the caveats on
the plugin's page.
* Credit everyone who wrote a plugin on the plugins' wiki pages.
* If a page links to itself, mark up the link text in a span with
class="selflink" so that it can be styled. I don't have a useful style
defined for that though.
* Add --version.
* Man page format fixups.
* Add a %pagecase which maps lower-case page names to the actual case
used in the filename. Use this in bestlinks calculation instead of
forcing the link to lowercase.
* Also use %pagecase in various other places that want to check if a page
with a given name exists.
* This means that links to pages with mixed case names will now work,
even if the link is in some other case mixture, and mixed case pages
should be fully supported throughout ikiwiki.
* Recommend rebuilding wikis on upgrade to this version.
them without annoyances.
* Suck in the page content when generating an inline archive page, to work
around the meta plugin's lack of caching of title metadata across runs.
in case it was installed as one. Then fall back to trying
/usr/bin/markdown.
* Document in install page how to install markdown, since it has no
installation procedure in the upstream tarball.
Run it with -asxhtml instead, so it will output well-formed xhtml no
matter what the input.
* Disable tidy warnings too.
* Add a new format hook, and make tidy use it, since tidy can really only
operate on and output complete html documents, not the body chunks
that sanitise gets.
* Add permalink and author support to meta plugin, affecting RSS feeds
and blog pages.
* Change titlepage() to encode utf-8 alnum characters. This is necessary
to avoid UTF-8 creeping into filenames in urls. (There are still
some other ways that it can get in.)
the current support is a crude hack due to limitations of XML::Feed:
xml:base is not supported, neither is Content-Location. And of course,
relative links in RSS feeds are ill-undefined..
* PageSpecs can now include nested parens, "and", and "or". This remains
backwards compatible to the old GlobList format. It's implemented by
treating the GlobList as a very limited microlanguage that is transformed
to perl code that does the matching.
* The old GlobList format is deprecated, and I encourage users to switch to
using the new PageSpec format. Compatability with the old format will be
removed at some point, possibly by 2.0.
* Wiki rebuild needed on upgrade to this version due to PageSpec change.
* Add support for creation_month and creation_year to PageSpec.
Closes: #380680
* Changes to index file encoding.
quotes and such can be represented in title tags.
* Depend and build-depend on HTML::Parser for HTML::Entities which is used
for the above.
* Make --rebuild also cause --aggregate to re-download and write aggregated
pages.
* Avoid outputting duplicate meta info.
* Include title metadata on aggregated posts for capitalised and un-munged
titles.
plugin, so it's possible to implement a Planet using ikiwiki!
* --setup --refresh no longer rebuilds wrappers. Use --setup --refresh
--wrappers to do that.
* Add %IkiWiki::forcerebuild to provide a way for plugins like aggregate
to update pages that haven't changed on disk.
- Adds a locale setting to setup files.
- Proper local time, if the locale configuration option is used.
- Support for UTF-8 (or ISO-8859-X) filenames in SVN. Before this patch,
commiting (or even rcs_updating) on repositories with UTF-8 filenames was
impossible.
the wikiformat plugin works. Thanks, Emanuele Aina.
* Patch from Alessandro Dotti Contra to clean up backlinks and navbar
display, running them through pagetitle. This removes ugly underscores and
other gunk from the display, much nicer. You may want to rebuild your wiki
when upgrading to get the cleanup globally.
* Pass a "destpage" parameter to preprocessor and pagetemplate hooks.
This will be the page that a source page will be part of, which is
different than the source page for inlined pages.
* Audited all plugins to endure they pass page, destpage to htmllink
appropriatly. This means inlining of various plugins will not work
properly, with correct links generated.
The meta plugin can also still be used for that, but the tag plugin
also lists a page's tags at the bottom of the page.
- Allows preprocessor directives to have parameters with no specified
value.
- Fixes preprocessor directive parameter parsing so that
foo=bar baz now means "foo=bar" and a "baz" with no value.
* Run pagetemplate hooks when inlining pages so that inlines pages also
list their tags.
* Make all plugins with pagetemplate hooks check that variables exist
on the template before setting them.
- allows preprocessor directives to have parameters with no specified
value
- fixes preprocessor directive parameter parsing so that
foo=bar baz now means "foo=bar" and a "baz" with no value
- Add a tag plugin that allows more easily tagging pages.
The meta plugin can also still be used for this.
* Noticed a bug in the wikitext markup plugin -- it made CamelCase links the
default throughout the wiki, not only on wikitext pages. Decided to call
this a feature, and split the camelcase support out into a separate plugin
that is independant of wikitext.
readable and avoid future mistakes. The patch seems to work and for the
first time I have a UTF-8 username ;-) (Faidon)
* Use form->field consistently, not form->param.
is a savings of 2 pointless fork/execs per link calculation, which
results in ~25% speedup of ikiwiki building its own doc wiki, and
about 35% speedup displaying RecentChanges!
if you'd ever want to do such a thing. Slightly tricky, since ikiwiki
defaults to not processing .html files, since w/o this plugin they would
be copied unsanitised. With this plugin, it will process, and html
sanitise, them like any other page type.
This allows adding or removing plugins w/o overriding the whole list of
default plugins, which makes it easier to upgrade when new default plugins
are added.
flagged string even if the locale causes it to generate utf8 output,
so make sure to let perl know it should be handled as utf8. Also,
the optimised version used for standard time formats won't work if the
user has changed locale, so drop it. Thanks, Faidon Liambotis.
* Fix re-encoding of the comments field to utf8 if a commit fails
due to a conflict. Thanks, Faidon Liambotis.
* Let svn know that commits have utf8 commit messages. Thanks, Faidon
Liambotis.
* Add insane double encode/decode to utf8 around call to markdown.
This works around a truely strange bug, which is apparently a bug in
perl, which I lack space to describe here (see t/crazy-badass-perl-bug.t)
- The serious problem is that writefile() saves the content in undecoded
format in CGI, hence all (non-ascii) chars are corrupted permanently.
- Comment field in edit page is not decoded and all the non-ascii chars in
this field are corrupted as the result. We should decode it as we do it
for the content.
layer, which led to lots of problems; make it force read files as utf-8.
Closes: #373203
* writefile() likewise needs to use the utf8 output layer.
* Remove the -CSD from ikiwiki's hashbang since it's useless to have it
there.
* Revert some of the decode_utf8 changes in CGI.pm that seem unnecessary
given the readfile fix.
* Add utf-8 testcases for readfile and htmlize.
* Allow pagetemplate plugins to override *anything* in the template.
* Add a meta plugin, which allows specifying various metadata about pages,
like license and author. It also allows for inserting html link and meta
tags into html, overriding the title, and adding hidden WikiLinks, which
can be useful when using link-based globbing for page categorisation.
* Remove preprocessor directives from inlined pages.
* Allow simple preprocessor directive values to be specified w/o quotes.
* When inlining a page in another one, links from the inlined page are now
expanded the same as they are when rendering the inlined page as a
standalone page. So rather than being expanded from the POV of the
inlining page, they are expanded from the POV of the inlined page.
For example, a link from blog/foo to "bar" will now link to blog/bar
if it exists. Previously this needed to be a link explicitly to
"blog/bar"; such links will also continue to work.
(This was slightly complex to do as the link still has to be constructed
relative to the inlining page.)
fix and make it a bit more flexible
* rcs_getctime is changed, now rather than needing to loop over all pages,
it should just use the rcs to get the ctime of the passed file.
* Add a html validity check to the test suite, using the wdg-html-validator,
if available.
* Make the html valid when there is nothing in the actions list by adding an
empty <li> to the end of it.
* Reordered some function call parameters for consistency.
<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.
for other types of search engine plugins if wanted, and also opening up a
lot of new possibilities for other kinds of plugins later
some notable changes along the way:
- lots of new hook types: cgi, render, delete
- wrapper files fixed to support config strings with newlines in them
- HEADERCONTENT in page template useful for plugins. Probably needs to be
expanded to more such for other places plugins might want to add content.
- remove unnecessary wrappers field from config info stored in wrappers
to pave the way for adding other RCS support. This also changes the
setup files, where before they had svn => 1 or svn => 0, now they have
rcs => "svn" or rcs => "".
* Add a debian/NEWS file with upgrade notes.
* Load whatever rcs module is specified, so new ones can be just dropped in
as plugins and work.
* Add some basic docs about writing RCS modules.
* Added a pagecount plugin, enabled by default.
* Support PreProcessorDirectives with no parameters, ie "[[pagecount ]]".
* Fixed/optimised backlinks code, to avoid rebuilding pages to update
backlinks when the backlinks hadn't really changed.
* Moved inline page support, rss generation etc into the inline plugin,
enabled by default.
* Added brokenlinks plugin, not enabled by default, but rather handy.
* Fix several broken links in the doc wiki.
dependency relationships than just inlining. This will require a rebuild
on upgrade to this version.
* Move the rss link, put it in the blogpost form if there is one and at the
top if not. This is both nicer because easier to find, and it cleans up
the code which had used inlinepage as a flag for adding the link later.
* Allow the depends GlobList to be built up from multiple sources (such as
plugins) during a page render.
* Which means that more than one blog is now supported to appear on a
single page. (With some limitations.)
expanded before markdown. Consequences:
- No need to worry about markdown messing with parameters of
preprocessordirectives. (If you had to escape stuff in one before, you'll
need to undo that escaping now.)
- No need for ugly </p> hacks before inlined subpages. Instead, subpages
are wrapped in a <div>, and this prevents markdown from touching them.
(This can also be used to add style to subpages.)
- rss generation is less of a hack.
wikilinks since the urls should work now in more situations
- drop --limit from svn log run, since a) it needs a fairly new svn and
b) in some cases, it would limit it to too few entries to display the
requested number of changes
- Use driver:DB_File and not driver:db_file for better compatability with
old versions of CGI::Session.
- Note that HTML::Template 3.02.02 is needed.
so I don't need to maintain two copies anymore.
You might also want to remove the files provided in the basewiki underlay
from your wiki, if you have not created custom local versions of them, so
that these pages will be automatically updated in future ikiwiki upgrades.
- escape & in urls (also clean up cgi url generation)
- since markdown wraps inlined pages in <p></p>, close and re-open
the paragraph tags when generating the embedded html
- added XHTML 1.0 doctypes to templates
- fixed <hr /> and <br /> in templates
- add an alt attribute to inline images, based on the WikiLink to the
image. Allows things like [[my_image|img.png]] to customise alt text.
in filenames. Now converts to valid filenames automatically.
Note, need to --refresh your wiki after updating to this version, if you
use any pages with __nn__ in their names.
Fixed in the easiest way by creating an RSS feed for archive pages (it will
include only a limited number of items, not everything).
Alternative fix would be to track separately which pages are archives and
which not, and only create feeds for non-archives.
This {gross,amazing} hack makes all wrapped uses of ikiwiki forgo any
option parsing at all. Options come in preparses via an env var from the
wrapper. As a bonus, Wrapper.pm no longer needs to be updated when command
line options are added to the program. Load time is sped up by around 10%.
ikiwikiwrap --params is no longer supported by this change. You will need
to rebuild your wrappers to take advantage of it.
kept in mind during this are a) to reduce load time for common cases like
cgi and post-commit and b) make the code easier to navigate.
This also modularises RCS support to the extent that it should be possible
to drop in a module for some RCS other than svn, add a switch for it, and
it pretty much just work.
High chance I missed an edge case that breaks something, this is only
barely tested at this point.
checkoptions() that can be used to set defaults for this and other options
based on existing options.
Also involved some cleanups to how gen_wrapper is used.
holger reported that decode_utf8 was crashing with perl 5.8.8. Earlier, I
thought that passing 0 to the function avoided this with old perls, but
that was apparently not enough, it still crashes. So, put it inside the
eval, so we can at least recover from it crashing.
The old code actually did the same thing, just obfuscated -- since the eval
use wasn't quoted, it used the modules on load. Thus, the error (not to
mentioned the return) was bypassed, and it just failed on load.
But that seems like the right thing to do, really, so just made it clearer
that's what happens.