Commit Graph

1736 Commits (6b98269aa310abc121875753ded37042f3a95988)

Author SHA1 Message Date
Amitai Schlair 844169c9b0 I'm not redefining any subs after all, don't prevent those warnings. 2009-08-23 15:21:39 -04:00
Amitai Schlair 3d6bc6e1b7 Add rsync plugin, though the only rsync-specific thing about it is the
assumption that uploading an entire site is efficient.
2009-08-23 15:18:41 -04:00
Amitai Schlair 5bdcd4d57b Oops, use the more recent (and less brittle) directory test. 2009-08-22 02:22:36 -04:00
Amitai Schlair 524de4db26 Pass along wrapper args to ikiwiki, then handle the "cvs add dir"
case with a getopt hook directly in my plugin. If the wrapper change
is safe, we won't need a wrapper wrapper.
2009-08-22 01:25:41 -04:00
Amitai Schlair 5c0e56d149 Put old unixauth plugin under git control. Needs some serious attention. 2009-08-21 22:51:12 -04:00
Joey Hess 9b799ccc85 po: Fixed to run rcs_add ralative to srcdir. 2009-08-19 14:05:59 -04:00
Joey Hess 8b99e68743 use pagespec_match_list for feedpages
This is both faster, and propigates any error in processing the feedpages
pagespec out to display on the page. Which may have been why I didn't use
it before, but currently seems like a good thing to do, since it explains
why your feeds are empty..
2009-08-16 13:45:10 -04:00
Joey Hess 4ff3e2a540 po: Better fix for missing underlay translation problem.
If a page is taken from the underlay, and one of the specified languages
does not have po files in the underlay, it would create a broken link
to the translated version of the page for that language.

With this change, there's no broken link.
2009-08-15 22:18:05 -04:00
Joey Hess 1be07eae46 replace N/A with 0
I think the N/A was not intended to be visible, but it can show up as the
percent translated to a language. This happens if the page is located in an
underlay, and not translated to the language in any other underlay.
2009-08-15 21:08:17 -04:00
Joey Hess e031551727 update for consistency 2009-08-15 16:42:29 -04:00
Joey Hess 6a2f3ef4bd indentation 2009-08-15 13:58:04 -04:00
Simon McVittie 97e9d99358 meta: depend on absolute page name, not relative
Previously, [[!meta redir="foo"]] on bar, where bar/foo exists, would
depend on "foo" (which matches nothing, probably) rather than "bar/foo".
(cherry picked from commit f27ec09b72f886415e63fe394e18d9c3cb3913bf)
2009-08-15 13:50:55 -04:00
Simon McVittie e0bb9675ce img: depend on absolute page name, not relative
Previously, [[!img bar.jpg]] on foo, where foo/bar.jpg exists, would
get a dependency equivalent to "glob(bar.jpg)" (which might not match
anything), rather than the correct "glob(foo/bar.jpg)".
(cherry picked from commit 85b2ec49ecd12dd23e5c432933457a72744ce7cb)
2009-08-15 13:50:34 -04:00
Joey Hess 82bb3af579 optimise brokenlinks by gathering the data when calculating backlinks
During backlink calulation, all links are examined and broken links can
be detected for free, so store a list of broken links and have brokenlinks
use it.

Exposing the %brokenlinks structure is a bit ugly, but the speedup seems
worth it: Around 1 second for wikis the size of the doc wiki that use
brokenlinks.
2009-08-14 01:11:53 -04:00
Joey Hess f486271009 orphans: Reuse backlinks info
This plugin was building essentially the same data that is built to handle
backlinks, so reuse that as an optimisation.
2009-08-14 00:51:52 -04:00
Joey Hess 949eb252e9 po: use discussionpage config setting
This was tricky. $links{$page/discussion} must be checked; with it in
lowercase.
2009-08-13 21:44:40 -04:00
Joey Hess 830c9e59b2 Add discussionpage configuration setting
By adding this setting, we get both more configurability, and a minor
optimisation too, since gettext does not need to be called continually
to get the Discussion value.
2009-08-13 21:41:33 -04:00
Joey Hess 159c0c043c optimise gettext calls 2009-08-13 21:04:19 -04:00
Amitai Schlair 2b7a003794 Add my CVS plugin and related patches. 2009-08-13 16:56:26 -04:00
Joey Hess 4971f873a0 more idiomatic use of foreach 2009-08-12 12:49:40 -04:00
Joey Hess 906c8f6e58 use a more idiomatic foreach my 2009-08-12 12:43:57 -04:00
Joey Hess 04014e4775 inline: Avoid use of my $_ as it fails with older perls. Closes: #541215 2009-08-12 12:33:02 -04:00
Joey Hess b4d7dfcbe1 po: Detect if nowrapi18n can't be passed to po4a, and warn about the old version, but continue. Closes: #541205 2009-08-12 12:26:07 -04:00
Joey Hess 83480665c2 po: Fix copy of po file from underlay when editing
When first editing a page that was in the underlay, avoid losing
the translation by copying the po file over from the underlay.
2009-08-10 15:59:32 -04:00
Joey Hess 8f6e0212fd verify page name is sane
paranoia; I was thinking about XSS attacks specificaly
2009-08-08 12:27:48 -04:00
Joey Hess 22edaf77c2 fix misleading comment 2009-08-08 12:23:50 -04:00
Joey Hess 79312b2754 Merge commit 'smcv/ready/getsource'
Conflicts:
	debian/changelog
2009-08-08 12:22:10 -04:00
Joey Hess f1a70921e3 Merge commit 'remotes/smcv/ready/inline-pagenames' into staging 2009-07-31 10:25:43 +02:00
Joey Hess 0bbb3d201e Merge commit 'remotes/smcv/ready/harishcm-map-fix' into staging 2009-07-31 10:23:06 +02:00
Joey Hess 3d27dac809 Merge commit 'remotes/smcv/ready/among' 2009-07-31 10:12:23 +02:00
Joey Hess 9d96250fc5 img: Fix adding of dependency from page to the image.
This was impressively broken. add_depends was being called with params
backwards, and on parameter was set to the name of the generated
file, which isn't in the source.

Now updates to images will update the page that contains them, thus
updating them. This is unncessary for fullsize images, so skipped.
2009-07-27 22:22:26 +02:00
Simon McVittie 70b1c2aabd getsource: remove temporary variable 2009-07-27 11:58:36 +01:00
Simon McVittie 2ef53b128d getsource: remove unnecessary IkiWiki:: prefixes
Many variables and functions are exported.
2009-07-26 17:04:49 +01:00
Simon McVittie ea244ab7b5 getsource: don't allow getting the source of an attachment
Serving up images etc. as text/plain; charset=utf-8 is unlikely to work
very well, and there's no point in having this CGI action for attachments
(since they're copied into the output as-is anyway).
2009-07-26 17:04:34 +01:00
Simon McVittie 0afcec7346 getsource: turn missing pages into a 404
Also restructure so we return early on missing pages.
2009-07-26 17:04:30 +01:00
Simon McVittie 3f520da78a getsource: default to saying page source is in UTF-8, and make the example match the default
IkiWiki mostly assumes that pages are in UTF-8; anyone this doesn't work
for can override it in the setup file.
2009-07-26 16:36:17 +01:00
Simon McVittie eaf59e5ba9 getsource: run as plain CGI, rather than sessioncgi
As I suggested when reviewing Will's code, calling loadindex() should be
sufficient.
2009-07-26 16:33:12 +01:00
Will Uther 01e4cb1464 Add getsource plugin 2009-07-26 16:22:56 +01:00
harishcm 786b78be46 Fix failure to close <ul> in maps with no items
Signed-off-by: Simon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
2009-07-25 20:16:11 +01:00
Joey Hess 60ee03bd70 revert revert 2009-07-23 12:01:54 +02:00
Joey Hess a29507ec26 improve string to be less confusing 2009-07-23 11:52:33 +02:00
Joey Hess e01badd3e7 reverted a few of the string changes
Improved one string.
2009-07-23 11:48:02 +02:00
Jonas Smedegaard 3bdc366e73 Merge branch 'master' of git://git.ikiwiki.info 2009-07-23 01:17:40 +02:00
Jonas Smedegaard 27071f0ba9 Change rendering→building in translatable strings, to ease translations. 2009-07-23 00:53:23 +02:00
Jonas Smedegaard 28b572a61e Rephrase suggestion to not get confused as info on action already done. 2009-07-23 00:50:42 +02:00
Jonas Smedegaard 106b073ce1 Rephrase 'linked to by' confusing for translators. 2009-07-23 00:48:00 +02:00
Jonas Smedegaard 8b7389b426 Improve translatable texts to ease translation (e.g. to→into and from→inside) 2009-07-23 00:43:28 +02:00
Joey Hess 88d4fb15ba add --previous at bubulle's suggestion 2009-07-22 17:48:49 +02:00
Joey Hess c56ff6cd47 relocate po directory up a level 2009-07-21 13:16:26 +02:00
Joey Hess 637f32480c turn off pot file underlay again 2009-07-21 12:40:44 +02:00
Joey Hess cebffa917f improve invalid gettext message
(and gettext it as translators will see this!)
2009-07-21 12:39:21 +02:00
Joey Hess 1610b1e9e6 update 2009-07-21 12:38:40 +02:00
Joey Hess 7532eff2b7 update 2009-07-21 11:40:25 +02:00
Joey Hess eca2dbe67f po: Add support for mo files in underlays
In order to support translated basewiki and other underlays, we need
support for mo files in underlays.

The code did not allow this before, because if a mo file was in an
underlay, then it might try to update it, and its pot, and write to the
underlay, which is guaranteed to either fail due to permissions, or be
undesirable.

To fix, my approach is to just detect if a mo or pot file that is about to
be updated is in an underlay, and skip updating it. This seems to work
well:

- If the mo is out of date in the underlay, it won't get updated, but this
  would probably be due to a problem in the underlay, or more likely,
  the wiki is being rebuilt and so it *thinks* the mo is out of date,
  but it's really not (and it would be a waste of time to rebuild it
  anyway).
- If a page from the basewiki is edited, it is saved to the srcdir,
  which causes generation of an updated mo and pot also in the srcdir;
  the underlay stops being used for that page, and everything seems
  to work.

Note that I am not including an underlay search directory for pot files.
They *seem* to be unnecessary for the underlay, since the mo files
in there never need to be updated.
2009-07-21 11:31:51 +02:00
Joey Hess 4b1534d5bc fix example 2009-07-21 09:56:34 +02:00
Joey Hess e04692e059 po: Support running with a non-english master lang; add translated underlays
It seem to make sense to remove the check for there being slave languages
as part of this, since one might want a wiki that is only in non-English.
2009-07-20 07:19:05 +02:00
Joey Hess 9d9826a3d2 remove prototype from renamehook
Recursive calls make perl whine about protypes, and it wasn't
adding any value.
2009-07-20 07:11:22 +02:00
Joey Hess 741c33576e create translated underlays in mdwn format
These are for use by wikis where the primary language is not English.
On such a wiki, it makes sense to use an underlay has the source for pages
in the native language.
2009-07-20 06:23:33 +02:00
Joey Hess 4fb0e8720c s//bad//invalid// # jonas= 2009-07-19 20:13:57 +02:00
Joey Hess 126952bd33 avoid Po4a::Common exporting anything
It exports gettext and stuff by default, which conflicts with IkiWiki
exports.
2009-07-19 17:50:56 +02:00
Joey Hess 43e5c905cb shut up msgmerge 2009-07-19 16:54:03 +02:00
Joey Hess ea8c166a05 bugfix: Avoid generating po files for files that are not httmlizable 2009-07-19 13:46:10 +02:00
Joey Hess b23ddf6c4a improve error message 2009-07-19 13:36:46 +02:00
Joey Hess ec965fc92c Merge branch 'master' into po
Conflicts:
	debian/changelog
2009-07-19 12:36:01 +02:00
Simon McVittie acb79b5c00 pagestats: add `among` parameter, which only counts links from specified pages 2009-07-17 11:12:55 +01:00
Simon McVittie 2b0c8d167e pagestats: when making a tag cloud, don't emit links where the tag is unused 2009-07-17 11:12:45 +01:00
Joey Hess 42fcafa57d Merge commit 'e12b7f5e54730325c751a889ed2e08580b5ef6ba' 2009-07-11 15:52:51 -04:00
Joey Hess b1b7a2100f img: Pass the align parameter through to the generated img tag. 2009-07-11 00:33:19 -04:00
Simon McVittie e12b7f5e54 Move OpenID pretty-printing from openid plugin to core
On various sites I have two IkiWiki instances running from the same
repository: one accessible via http and only accepting openid logins,
and one accessible via authenticated https and only accepting httpauth.
The https version should still pretty-print OpenIDs seen in git history,
even though it does not itself accept OpenID logins.
2009-07-10 18:41:16 +01:00
Joey Hess 0c6a47e9e4 svn: Fix rcs_rename to properly scope call to dirname. 2009-07-08 13:13:23 -04:00
Joey Hess feae031a80 highlight: Fix utf-8 encoding bug. Closes: #535028 2009-07-07 16:31:18 -04:00
Simon McVittie ea4686a565 Update IkiWiki::openiduser to work with Net::OpenID 2.x
openiduser previously used a constructor that no longer works in 2.x.
However, all we actually want is the (undocumented) DisplayOfURL function
that is invoked by the display method, so try to use that.
(cherry picked from commit c3dd0ff5c7c10743107f203a5b456fdcd1b171df)
2009-07-07 13:38:04 -04:00
Joey Hess 2db6946037 typo 2009-07-01 13:45:28 -04:00
Simon McVittie a648c439f3 img plugin: do not emit a redundant double-quote before alt attribute 2009-06-16 17:15:06 +01:00
Simon McVittie e877013174 inline: add pagenames parameter
If given instead of pages, this is interpreted as a space-separated
list of links to pages (with the same LinkingRules as in a WikiLink),
and they are inlined in exactly the order given. The sort and pages
parameters cannot be used in conjunction with this one.
2009-06-16 17:13:19 +01:00
Joey Hess 9151346687 aggregate: Avoid resetting ctime when an item md5 changes.
Besides being wrong to do, this could lead to the wrong item
being expired, as follows: If B is added and at the same time
A is changed, then A's ctime may be set to the current time,
while B's is set to its creation time. Thus the new item, A,
is incorrectly removed as older.

(This interacted especially badly with the bug fixed by
90b4d079605b72bb50d1da41402d994960e10937.)
2009-06-12 19:31:23 -04:00
Joey Hess 90b4d07960 aggregate: Fix storing of changed md5.
The aggregate state merge code neglected to merge changes to the md5
field of an item. Therefore, if an item's md5 changed after initial
aggregation, it would be updated, and rewritten, each time thereafter.
This was wasteful and indirectly led to some expire problems.
2009-06-12 19:24:47 -04:00
Joey Hess 48a5f9f2d8 Disable the Preferences link if no plugin with an auth hook is enabled. 2009-06-09 15:39:00 -04:00
Joey Hess bf55a7fbb1 meta: Add openid delegate parameter to allow delegating only openid or openid2. 2009-06-08 21:40:06 -04:00
intrigeri 86edd73d16 Merge commit 'upstream/master' into pub/po
Conflicts:

	debian/changelog
	debian/control

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-06-06 14:03:40 +02:00
Joey Hess e40d2a6b2b goto: Support being passed a page title that is not a valid page name, to support several cases including mercurial's long user names on the RecentChanges page, and urls with spaces being handled by the 404 plugin. 2009-06-06 02:36:40 -04:00
Joey Hess e8d8386e52 pagecount: Fix broken optimisation for * pagespec. 2009-06-05 18:04:39 -04:00
Joey Hess 059d6f01fa fix further places where translated discussion case was assumed
Another benefit is that consistently using gettext("Discussion")
eliminates the need to translate one string.
2009-06-04 13:20:52 -04:00
intrigeri 091f11be76 po: better discussion link logic
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-06-03 18:30:00 +02:00
Joey Hess 5cdee82ef6 comment: Make comment directives no longer use the internal "_comment" form, and document the comment directive syntax.
Rationalle: Comments need to be user-editable so that they can be posted
via git commit etc.

The _comment directive is still supported, for back-compat.
2009-06-02 17:06:46 -04:00
Joey Hess 96087cbd88 call initLanguage after initTheme
See #530654
2009-05-26 17:04:49 -04:00
Joey Hess 39e5e25000 cache highlighters to optimise
Setting up a new highlighter object is slightly expensive since it
reads and parses the langfile each time. So cache them.

This also speeds up ext2langfile by avoiding it needing to check for the
existence of a language file in some cases.
2009-05-23 18:39:49 -04:00
Joey Hess 8ba98ad1dc update 2009-05-23 05:33:08 -04:00
Joey Hess 47298b01c1 allow format to use any language supported by highlight
format: Provide a htmlizefallback hook that other plugins can use to
handle formats that are not suitable for general-purpose htmlize hooks.

highlight: Use the hook to allow formatting of any language/extension,
without it needing to be enabled for standalone source files.

highlight: If the highlight perl binding is not available, fallback
safely to a passthrough mode.
2009-05-23 05:17:26 -04:00
Joey Hess cdd1b58b38 remove commas in tohighlight list 2009-05-23 00:09:14 -04:00
Joey Hess 8ae260015f highlight: New plugin supporting syntax highlighting of pretty much anything.
* debian/control: Add suggests for libhighlight-perl, although
  that package is not yet created by Debian's highlight source package.
  (See #529869)
2009-05-22 22:57:03 -04:00
Joey Hess 8f6cdf3ae0 listdirectives: Avoid listing _comment directives and generally assume any directive starting with _ is likewise internal. 2009-05-22 14:17:26 -04:00
Joey Hess 27193a2eeb support longname for page types in commands and rename
Also, sort the list of page types.
2009-05-21 15:50:25 -04:00
Joey Hess ef003f48f4 Merge branch 'master' into po
Conflicts:
	debian/changelog
2009-05-19 13:07:47 -04:00
Joey Hess 53b1c6f559 Merge commit 'intrigeri/po' into po 2009-05-19 13:06:35 -04:00
Jon Dowland eba9b862b2 tidy up new page_types code 2009-05-16 14:44:23 +01:00
Jon Dowland 83e3fc3af0 add a long name for textile/txtl ("Textile") 2009-05-16 13:59:36 +01:00
Jon Dowland 79510950f0 add a long name for mdwn ("Markdown") 2009-05-16 13:59:27 +01:00
Jon Dowland 30248df40a check for longname for each syntax plugin
We build an array of [ plugin name, long name ] pairs, where long name
is an optional argument to hook(). So, a syntax plugin could define
long "friendly" name, such as "Markdown" instead of mdwn, and we would
then pass this array to formbuilder to populate the drop-down on the
edit page.
2009-05-16 13:56:25 +01:00
Joey Hess 838955aba4 remove pagespec_match_list override for external
Not needed since it returns a list of pages, not a fail/success object.
2009-05-06 13:13:01 -04:00
Joey Hess d3188a04ff external: Fix pagespec_match and pagespec_match_list. Closes: #527281 2009-05-06 12:57:37 -04:00
Joey Hess 2a7721febd Avoid %links accumulating duplicates. (For TOVA)
This is sorta an optimisation, and sorta a bug fix. In one
test case I have available, it can speed a page build up from 3
minutes to 3 seconds.

The root of the problem is that $links{$page} contains arrays of
links, rather than hashes of links. And when a link is found,
it is just pushed onto the array, without checking for dups.

Now, the array is emptied before scanning a page, so there
should not be a lot of opportunity for lots of duplicate links
to pile up in it. But, in some cases, they can, and if there
are hundreds of duplicate links in the array, then scanning it
for matching links, as match_link and some other code does,
becomes much more expensive than it needs to be.

Perhaps the real right fix would be to change the data structure
to a hash. But, the list of links is never accessed like that,
you always want to iterate through it.

I also looked at deduping the list in saveindex, but that does
a lot of unnecessary work, and doesn't completly solve the problem.

So, finally, I decided to add an add_link function that handles deduping,
and make ikiwiki-transition remove the old dup links.
2009-05-06 00:27:24 -04:00
Joey Hess e77d0030d6 inline: Minor optimisation.
When finding the pageurl, it was calling bestlink unnecessarily.
Since at this point $page contains the full name of the page that
is being inlined, there is no need to do bestlink's scan
for it.

This is only a minor optimisation, since bestlink is only called
once per displayed, inlined page.
2009-05-05 20:06:50 -04:00
Joey Hess 528f8f83ea simplifiy 2009-04-23 16:40:45 -04:00
Joey Hess 85ae48b21e Revert "pagespec_match_list * optimisation"
This reverts commit 2f96c49bd1.

I forgot about internal pages. We don't want * matching them!

I left the optimisation in pagecount, where it used to live.
Internal pages probably don't matter when they're just being
counted.
2009-04-23 16:35:56 -04:00
Joey Hess 4030f75765 avoid using pagespec_match_list here
I forgot to check if it was called from preprocess, and it is
not; it's called by a format hook. If an error is thrown from
a format hook, wiki build fails, so we don't want that.
2009-04-23 16:26:54 -04:00
Joey Hess 14d8df55ad simplify 2009-04-23 16:23:52 -04:00
Joey Hess 2f96c49bd1 pagespec_match_list * optimisation
Add an optimisation for the semi-common case of a "*" pagespec. Can
avoid doing any real processing in this case.
2009-04-23 16:20:18 -04:00
Joey Hess 860a867078 formatting 2009-04-23 16:14:35 -04:00
Joey Hess e3ccf393c6 typo 2009-04-23 16:13:40 -04:00
Joey Hess aa306957ba pagespec_match_list added and used in most appropriate places
* pagespec_match_list: New API function, matches pages in a list
  and throws an error if the pagespec is bad.
* inline, brokenlinks, calendar, linkmap, map, orphans, pagecount,
  pagestate, postsparkline: Display a handy error message if the pagespec
  is erronious.
2009-04-23 15:45:30 -04:00
Joey Hess 527d178c12 comments: Add link to comment post form to allow user to sign in if they wish to, if the configuration makes signin optional for commenting. 2009-04-23 14:56:10 -04:00
Joey Hess 748aa7af77 pagespec error/failure distinction and error display by inline
* Add IkiWiki::ErrorReason objects, and modify pagespecs to return
  them in cases where they fail to match due to a configuration or syntax
  error.
* inline: Display a handy error message if the inline cannot display any
  pages due to such an error.

This is perhaps somewhat incomplete, as other users of pagespecs do not
display the error, and will eventually need similar modifications to inline.
I should probably factor out a pagespec_match_all function and make it throw
ErrorReasons.
2009-04-23 14:07:28 -04:00
Joey Hess 338d4ccff1 fix id 2009-04-22 15:38:50 -04:00
Joey Hess 565e5291cd websetup: If setup fails, restore old setup file. 2009-04-22 14:05:37 -04:00
Joey Hess 55377e7336 blogspam: Load RPC::XML library in checkconfig, so that an error can be printed at that point if it's not available, allowing the admin to see it during wiki setup. Closes: #520015 2009-04-22 13:33:20 -04:00
Joey Hess 4fbe1c3d44 websetup: Display stderr in browser if ikiwiki setup fails. 2009-04-22 13:31:56 -04:00
intrigeri 4558457402 Merge commit 'upstream/master' into pub/po
Conflicts:

	debian/changelog
	debian/control
2009-04-20 12:21:18 +02:00
intrigeri 9db2438b3a po: remove unneeded check on link plugin
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-04-20 11:38:15 +02:00
Joey Hess 4cf70291bc remove unnecessary variable 2009-04-04 19:04:02 -04:00
Joey Hess f8fa69326a remove debugging 2009-04-04 18:48:33 -04:00
Joey Hess 6a7eb63ca5 fix display of web commits in recentchanges
The darcs backend appends @web to the names of web committers, so remove it
when extracting.
2009-04-04 18:36:39 -04:00
Joey Hess 01b063d2e2 fix bug I introduced 2009-04-04 18:30:29 -04:00
Joey Hess f7fa696619 move comments to copyright and changelog 2009-04-04 17:49:04 -04:00
Joey Hess bbd61b346b formatting, layout, indentation, coding style 2009-04-04 17:45:13 -04:00
Joey Hess 8e92468eae Merge branch 'master'
Conflicts:
	doc/ikiwiki-makerepo.mdwn
2009-04-04 17:27:48 -04:00
Joey Hess 72b9482835 recentchanges: change to using do=goto links. 2009-04-01 19:18:43 -04:00
Joey Hess e827247a86 wrapping 2009-03-29 15:48:26 -04:00
Joey Hess 4e9db780d5 whitespace 2009-03-29 14:52:29 -04:00
Joey Hess c84b4cefcc minor code changes 2009-03-29 14:31:32 -04:00
Joey Hess 0b2791ccc7 no need to use CORE::rename since I renamed the rename function 2009-03-27 15:28:35 -04:00
Joey Hess d622da057b rename function for clarity, formatting improvements 2009-03-27 15:27:38 -04:00
Joey Hess 529a06b7cc simplifiy 2009-03-27 15:23:36 -04:00
Joey Hess f9fd71df88 move dedup code into function, simplify 2009-03-27 15:21:21 -04:00
Joey Hess 825e2b1378 Merge branch 'master' into po
Conflicts:
	debian/control
2009-03-27 15:09:41 -04:00
Joey Hess 260ee2a283 use md5sum for page_to_id
The munged ids were looking pretty nasty, and were not completly guaranteed
to be unique. So a md5sum seems like a better approach. (Would have used
sha1, but md5 is in perl core.)
2009-03-27 13:44:31 -04:00
Joey Hess 10822a22b3 comments: Fix anchor ids to be legal xhtml. Closes: #521339
Well, that was a PITA.

Luckily, this doesn't break guids to comments in rss feeds,
though it does change the links.

I haven't put in a warning about needing to rebuild to get
this fix. It's probably good enough for new comments to get the
fix, without a lot of mass rebuilding.
2009-03-26 16:45:53 -04:00
Joey Hess 503d83ffbc comments: Fix too loose test for comments pages that matched normal pages with "comment_" in their name. Closes: #521322 2009-03-26 14:04:28 -04:00
Joey Hess a2c0423e54 fix rcs_getctime to return first, not last, change time
This was being buggy and returning the file's last change time, not its
creation time.

(I checked all the others (except tla) and they're ok.)
2009-03-20 16:32:37 -04:00
Joey Hess 2c86616a6a fix rcs_getctime to return first, not last, change time
This was being buggy and returning the file's last change time, not its
creation time.
2009-03-20 16:24:19 -04:00
Joey Hess a1c8520ce8 inline: Fix urls to feed when feedfile is used on an index page.
It would be better to use urlto() here, but will_render
has not yet been called on the feed files at this point, so
it won't work. (And reorganizing so it can be is tricky.)
2009-03-19 16:01:30 -04:00
Joey Hess bb258b56b2 avoid crashing if Sort::Naturally is not installed 2009-03-19 15:35:57 -04:00
chrysn 55b83cb7bd implement sort=title_natural for inline
adds a new sorting order, title_natural, that uses Sort::Naturally's
ncmp function to provide better sorting for inlines
2009-03-19 15:31:46 -04:00
Joey Hess 4ac0b29531 git: Manually decode git output from utf-8, avoids warning messages on invalidly encoded output. 2009-03-09 14:18:55 -04:00
Joey Hess 7bd0d53644 git: Fix utf-8 encoding of author names.
I guess what's happening here is that since the name
is passed to git via an environment variable, perl's normal
utf-8 IO layer stuff doesn't work. So we have to explicitly
decode the string from perl's internal representation into
utf-8.
2009-03-09 14:01:40 -04:00
Joey Hess 793e9332c3 avoid uninitialized value warnings 2009-03-09 13:52:51 -04:00
intrigeri f4a1732b0e Merge commit 'upstream/master' into prv/po 2009-03-09 00:32:10 +01:00
Joey Hess dd2fa2efb9 When loading a template in scan mode, let preprocess know it only needs to scan.
This makes wikis such as zack's much faster in the scan pass.
In that pass, when a template contains an inline, there is no reason to
process the entire inline and all its pages. I'd forgotten to pass
along the flag to let preprocess() know it was in scan mode, leading to
much unncessary churning.
2009-03-08 18:57:47 -04:00
Joey Hess d3b4c2dbd1 avoid potential infinite loop in smiley expansion
- In 3.05, ikiwiki began expanding templates in scan mode,
  for annoying, expensive, but ultimatly necessary reasons
  of correctness.
- Smiley processing has a bug: It inserts a span for the smiley,
  and then continues searching forward in the content for more,
  starting at $end_of_smiley+1. Which means it searches for smilies
  in the span too! And if it somehow finds one, we get an infinite loop
  here.
- This bug can, probably, only be tickled if a htmllink to
  show the smiley fails, because the smiley file doesn't exist,
  or because ikiwiki doesn't know about it. In that case,
  a link will be inserted to _create_ the missing page,
  and that link will include the smiley inside the <a></a>.
- When a template is expanded in scan mode, and it contains
  an inline, the sanitize hook is run during scan mode,
  which never happened before. That causes the smiley processor
  to run, before ikiwiki is, necessarily, aware that all
  the smiley files exist (depending on scan order). So
  it inserts creation links for them, and triggers the bug.

I've put in the simple fix of jumping forward past the inserted
span, and it does fix the problem. I will need to look in a bit
more detail into why an inline nested inside a template is
fully expanded during the scan pass -- that really shouldn't
be necessary, and it makes things much slower than they need
to be.
2009-03-08 18:49:34 -04:00
Joey Hess 1bf100cfde configure wmd to leave text in markdown 2009-03-08 13:11:26 -04:00
intrigeri 1efb182d56 rename: remove duplicates that hook functions may have added to @torename
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-03-08 15:47:50 +01:00
intrigeri 1bf21d2a37 rename: moved subpages addition to a rename hook
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-03-08 12:52:49 +01:00
intrigeri 8cfe428a28 rename hook: run once per file to be renamed
... as Joey suggested on todo/need_global_renamepage_hook

This hook is applied recursively to returned additional rename
hashes, so that it handles the case where two plugins use the hook:
plugin A would see when plugin B adds a new file to be renamed.

The full set of rename hashes can no longer be changed by hook functions, that
are only allowed to return any additional rename hashes it wants to add.
Rationale: the correct behavior of the recursion would be hard, if not
impossible, to define, if already considered pages were changing on the run.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-03-08 11:44:00 +01:00
intrigeri ae474d8e14 Merge commit 'upstream/master' into prv/po
Conflicts:

	IkiWiki/Plugin/editpage.pm
	debian/control
	debian/copyright
	doc/todo/need_global_renamepage_hook.mdwn

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-03-08 09:50:27 +01:00
Joey Hess 9a82ef32b9 look for wmd/wmd.js
This means that the underlay needs to have a wmd/wmd/wmd.js,
which is a trifle weird, but it isolates all the wmd stuff in a
single wmd subdirectory of the built wiki. The wmd/images creating
a toplevel images directory was particularly bad.
2009-03-07 19:23:38 -05:00
Joey Hess 72dd9a9a04 make wmd comment support comment editing (I think) 2009-03-07 18:54:26 -05:00
Joey Hess 029cf94493 rebuild not needed
This plugin only affects the page edit, not the compiled wiki.
2009-03-07 14:34:31 -05:00
Joey Hess e7d2da5641 wmd plugin from willu 2009-03-07 14:33:11 -05:00
Joey Hess affd4ca3da goto: Fix typo that broke recentchanges_link compatability. 2009-02-27 13:21:29 -05:00
Joey Hess 596b2906fd bzr: Add missing rcs_diff. (liw) 2009-02-26 14:09:26 -05:00
Joey Hess b30c1b0c38 comments: Avoid showing comment moderation button in prefs to non-admins. 2009-02-26 02:31:13 -05:00
Joey Hess 63439fa10b bzr: Add missing stub rcs_diff. 2009-02-25 16:56:02 -05:00
Joey Hess f813b10fef rename tag() to tagged(); add docs 2009-02-19 18:54:25 -05:00
Joey Hess e611d4cdc1 add tag() pagespec
patch from jon
2009-02-19 18:49:30 -05:00
Joey Hess 5f96944dd5 typo 2009-02-17 19:37:36 -05:00
Joey Hess 52f2235e60 goto: Fix redirect to comments. 2009-02-17 19:36:58 -05:00
Joey Hess 9acc4d578d template: Load templates in scan mode
This is potentially expensive, but is necessary so that meta and tag
directives, and other links on templates affect the page using the template
reliably.
2009-02-17 13:30:07 -05:00
Joey Hess a4497591f9 Revert "comments" (stupid commit)
This reverts commit bb8b8787ef.
2009-02-17 13:29:08 -05:00
Joey Hess bb8b8787ef comments 2009-02-17 13:25:06 -05:00
Joey Hess adcc349d89 check for empty srcdir
This happens when using -dumpsetup
2009-02-14 03:04:11 -05:00
Joey Hess 684cd73a79 downgrade missing shortcuts page error to warning
and response to bug report
2009-02-14 03:01:35 -05:00
Joey Hess 2c51b18aec move check_canedit, check_content to IkiWiki library from editpage
It no longer makes sense to keep these functions in editpage, because
serveral plugins now exist that use them, and users may want to disable
editpage, while leaving those plugins enabled.

Most notably, comments uses both functions, and it's entirely appropriate
to disable editpage but still want to have comments enabled.

Less likely, attachments, rename, and remove all use check_canedit -- but
it would be unusual indeed to want to use these w/o editpage.
2009-02-12 16:33:35 -05:00
Joey Hess 46819b530b shortcut: If default_pageext is set, first look for shortcuts.default_pageext
Falls back to looking for shortcuts.mdwn for backwards compatabiity; there
probably exist wikis that have changed the pageext but still use
shortcuts.mdwn.
2009-02-12 13:04:20 -05:00
Joey Hess 5e2e95a516 doubled semicolons 2009-02-11 12:30:28 -05:00
Simon McVittie dd862b4639 Work around XML::Atom strangeness that results in double-encoded posts
See [[bugs/Aggregated_Atom_feeds_are_double-encoded]]. By default,
XML::Atom outputs strings of UTF-8 bytes with the Perl UTF8 flag stripped
off, which IkiWiki assumes to be Latin-1 and re-encodes as UTF-8 on
output. XML::Feed  does not currently (0.41-1) set the magic variable to
change this behaviour (I've filed a bug on CPAN), but IkiWiki can
usefully set the same variable as a workaround.
2009-02-03 19:48:55 +00:00
Joey Hess 3b83e52018 rename apache404 -> 404
This may already work with other web servers that have copied apache's
interface, and it should be easy to add support to it for web servers that
use some other interface. So, make the name more general.
2009-01-31 19:26:36 -05:00
Joey Hess b0361b8efd factor out IE stupididy workaround 2009-01-31 19:02:50 -05:00
Simon McVittie c886bea320 Split cgi_goto into a goto plugin 2009-01-31 23:01:10 +00:00
Simon McVittie 46b880f839 Split apache404 into an independent plugin
Also make it ignore the 'do' parameter at Joey's suggestion, to have one
less thing to remember when configuring.
2009-01-31 22:32:10 +00:00
Simon McVittie a981d6857f recentchanges: delete CGI hook in favour of the global one 2009-01-31 14:49:25 +00:00
Simon McVittie 4e92548ebc comments: delete cgi hook in favour of the global one 2009-01-31 14:49:12 +00:00
intrigeri ea753782b2 po: remove all dependencies on nicepagetitle
... as my meta branch probably won't be merged before the po plugin is, contrary
to what I was originally supposing.

This implies removing the po_translation_status_in_links and
po_strictly_refresh_backlinks options.

Added a note to the TODO section to think of bringing these features back later,
as they really enhance user experience on a translatable wiki.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-27 17:52:32 +01:00
intrigeri 51badc960d rename hook: instead of modifying the passed-by-name array, return a copy
This is intended to solve Joey's concerns expressed on
http://ikiwiki.info/todo/need_global_renamepage_hook/, i.e. the need to make it
possible to use this hook from external plugins.

A plugin using this hook still can add/modify/remove elements of the
@torename array.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-27 17:08:55 +01:00
Joey Hess 5dd67723c1 typo 2009-01-26 20:33:55 -05:00
Joey Hess 5c14c7db61 Merge commit 'smcv/underlay' 2009-01-26 20:13:15 -05:00
Joey Hess 848ff1bf5e Merge commit 'smcv/updated' 2009-01-26 20:05:36 -05:00
Joey Hess d2a7768182 hook function names should be the same as the hook name 2009-01-26 19:13:15 -05:00
intrigeri ca9e45c3ba po: make the "backlinks involve dependencies" feature optional
It can now be configured with the po_strictly_refresh_backlinks setting.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-27 00:25:46 +01:00
intrigeri 03ab262319 revert renamepage's hook original name
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-27 00:00:00 +01:00
intrigeri 8915d2553c po: bring back a useful use of scalar
... that was removed in 68869d664b

Without this scalar, a two-cells array is passed to $template->param, which
builds a hash with an odd number of elements.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-26 23:21:14 +01:00
intrigeri 78a095aa42 only pass named parameters to the canremove hook
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-26 23:07:19 +01:00
intrigeri f02672c113 only pass named parameters to the canrename hook
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-26 23:02:31 +01:00
intrigeri e0e94d4716 po(formbuilder): stop hunting down non-existent cases
After some thinking about it, I can't find why the type of a page being created
in the CGI could be restricted to po. So the previous case seems enough.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-26 22:54:40 +01:00
Joey Hess cf374e97cf add mising hooks and fix syntax error 2009-01-26 14:00:28 -05:00
Joey Hess 73f0011836 remove unnecessary returns
check_canremove/canrename is called only for its side effect (of failing if
removal is not allowed), its return value is never used and returning
something makes that unclear
2009-01-26 13:55:32 -05:00
Joey Hess 9750f929ad remove redundant use
use is file-scoped so warnings and strict are already enabled
inside the second package, and IkiWiki is already loaded
(though not imported into this context)
2009-01-26 13:35:50 -05:00
Joey Hess 9e3dc0af60 non-code changes 2009-01-26 13:33:02 -05:00
Joey Hess aff9bf5a7a more unnecessary parens 2009-01-26 13:28:57 -05:00
Joey Hess 093f8534f1 avoid keeping running if a DOS attack is possible 2009-01-26 13:25:05 -05:00
Joey Hess 98f0d672df remove unnecessary parens 2009-01-26 13:24:33 -05:00
Joey Hess c5642119f7 another useless use of scalar
scalar(undef) is undef, so using scalar here had no effect.
Instead make the function return "", probably avoiding an uninitialized
value warning.
2009-01-26 13:21:33 -05:00
Joey Hess 68869d664b remove useless uses of scalar
if (scalar @array) is written idiomatically in perl as
if (@array).
2009-01-26 13:20:56 -05:00
Joey Hess 526d9dbe10 improve some english
I'm still not happy with the clarity of this warning message.
I don't understand when it could happen or why a warning is needed.
2009-01-26 13:15:29 -05:00
Joey Hess 8e738066bc avoid standalone -e or foo syntax
I prefer to use either of the other two syntaxes perl offers, and not this
one.
2009-01-26 13:10:37 -05:00
Joey Hess 66bc27b485 avoid mixing english with translation
"google search" is english which would get mixed in with translated text.
Instead, usr just the plugin name.
2009-01-26 13:08:25 -05:00
Joey Hess 12eb056b33 Merge branch 'master' into po 2009-01-26 13:05:38 -05:00
Joey Hess ce39f8e000 git: Fix malformed utf8 recieved from git.
If git log outputs malformed utf8 in, eg, usernames, detect it and fix it
up. This avoids commits such as f71abc92aa
breaking things.
2009-01-25 23:13:14 -05:00
Joey Hess 42b3e13739 format moderation queue only at end, avoid O(N^3) bug
It was calling format hooks for each comment on the page.
When relativedate is enabled, that made it insert <script> tags
for each comment. And the browser loaded the same script over and over,
which was slow on its own. But that was nothing compared to running
the onload even over and over.. especially since the hook system
added a new call to the hook each time it loaded.

For a page with 10 comments, that caused the relativedate DOM parsing
code to run 1000 times, I think. Anyway, it was sloow. Now it runs once.
2009-01-25 22:30:28 -05:00
Joey Hess 9d4f396b13 add reject all marked defer checkbox 2009-01-25 22:25:45 -05:00
Joey Hess 4e21af7671 sort comment queue by time, newest first 2009-01-25 19:45:56 -05:00
Joey Hess 7a7e28c55f add a button to prefs page for comment moderation 2009-01-25 19:04:45 -05:00
Joey Hess 9a5085e512 clean up comment preview
Remove actions from it, and avoid a broken title link.
2009-01-25 18:56:47 -05:00
Joey Hess 731fc9e7a2 comments: Add a moderation web interface. 2009-01-25 18:49:57 -05:00
Joey Hess c154fa5d6c comments: If comment content checks fail, store the comment (in .ikiwiki/comments_pending) for moderator review. 2009-01-25 15:42:13 -05:00
Joey Hess ee74e61ffc blogspam: Fix use of blogspam_options and blogspam_server config settings. 2009-01-25 14:37:04 -05:00
Joey Hess ef856a5f7a typo 2009-01-22 21:10:05 -05:00
Joey Hess e1ff06b634 fix uninitialized value warnings
I suspect these are only triggered by spammers.
2009-01-22 20:58:49 -05:00
Joey Hess 6fb0ab580e fix typo 2009-01-22 20:53:47 -05:00
Gabriel McManus 950137eb6c img: only provide alt text if it was specified
if suitable alternate text is unknown, then it should not be given.
empty alt text is suitable mainly for purely decorative images.
(cherry picked from commit 3cd7f67f0cf894f4fd5ba16f68e82e4f7bdbfdc5)
2009-01-21 21:17:57 -05:00
Joey Hess 3547a2a347 fix removal form display
The form was misdisplayed when displayed via comment removal.
2009-01-20 11:12:49 -05:00
Joey Hess 8360e96a86 blogspam: Log spam info on failure. 2009-01-19 14:11:15 -05:00
intrigeri f8c306a21b remove cansave plugin, now replaced by Joey's checkcontent one
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-19 19:53:32 +01:00
intrigeri a3726968bc make checkcontent compatible with hooks that need the full content
Always pass the full (modified) content in `content` named parameter. When the
user edits an existing wiki page, also pass a `diff` named parameter, which
includes only the lines that they added to the page, or modified.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-19 19:44:39 +01:00
Simon McVittie c89925048f Add meta field "updated", which can alter the <updated> Atom element
Some aggregators, like Planet, sort by mtime rather than ctime. This
means that posts with modified content come to the top (which seems odd
to me, but is presumably what the aggregator's author or operator
wants), but it also means that posts with insignificant edits (like
adding tags) come to the top too. Atom defines <updated> to be the date
of the last *significant* change, so it's fine that ikiwiki defaults to
using the mtime, but it would be good to have a way for the author to
say "that edit was insignificant, don't use that mtime".
2009-01-18 21:58:24 +00:00
Simon McVittie b7cd40c1bb Add underlay plugin 2009-01-18 16:42:12 +00:00
intrigeri 73a7bd2f68 fix previous buggy merge 2009-01-18 00:45:46 +01:00
intrigeri e9e75f5f29 Merge commit 'upstream/master' into prv/po
Conflicts:

	t/syntax.t
2009-01-18 00:38:31 +01:00
Joey Hess 6b681ed299 blogspam api now supports homepage link 2009-01-17 15:39:08 -05:00
Joey Hess cd2ddb57a5 load rpc xml lib on the fly
This way, enabling the plugin via websetup is safe, it can't leave
ikiwiki in a broken state.
2009-01-17 14:56:48 -05:00
Joey Hess 4bede22e4f use short names in comittype
Use mtn for monontone and hg for mercurial. The long names cause ugly
formatting in recentchanges, which has CSS that only allows a few
characters for the commit type column.
2009-01-17 13:39:53 -05:00
intrigeri 832d4d31d1 Merge commit 'upstream/master' into prv/po
Conflicts:

	IkiWiki/Plugin/editpage.pm
	IkiWiki/Plugin/skeleton.pm.example
	doc/plugins/write.mdwn
	t/syntax.t
2009-01-17 14:01:53 +01:00
Joey Hess 7ee92cab40 blogspam: New plugin, adding spam filtering for page editing / comment posting using the BlogSpam.net API. 2009-01-16 22:39:11 -05:00
Joey Hess 16c56af605 make postcomment() pagespecs work while in checkcontent 2009-01-16 21:58:05 -05:00
Joey Hess ae20879e84 add new hook to skeleton 2009-01-16 21:07:40 -05:00
Joey Hess f7b2cfcf50 checkcontent: New hook, can be used to implement arbitrary content filters, including spam filters. 2009-01-16 20:46:55 -05:00
Joey Hess 362a329556 remove xxx comment
IIRC I analised this and the code is right
2009-01-16 19:34:50 -05:00
intrigeri df82b5e62a po: when possible, disable use of Text::WrapI18N in po4a; else warn about too old po4a
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-16 15:07:05 +01:00
intrigeri 523718b181 po(change): re-render all rendered files in one corner case
All meta titles are first extracted at scan time, i.e. before we turn
PO files back into translated markdown; escaping of double-quotes in
PO files breaks the meta plugin's parsing enough to save ugly titles
to %pagestate at this time.

Then, at render time, every page's passes on row through the Great
Rendering Chain (filter->preprocess->linkify->htmlize), and the meta
plugin's preprocess hook is this time in a position to correctly
extract the titles from slave pages.

This is, unfortunately, too late: if the page A, linking to the page B,
is rendered before B, it will display the wrongly-extracted meta title
as the link text to B.

On the one hand, such a corner case only happens on rebuild: on
refresh, every rendered page is fixed to contain correct meta titles.
On the other hand, it can take some time to get every page fixed.
We therefore re-render every rendered page after a rebuild to fix them
at once. As this more or less doubles the time needed to rebuild the
wiki, we do so only when really needed.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-16 01:33:07 +01:00
intrigeri 3ba976d1d3 po: pages in underlay dirs are not translatable
Fixes build break due to read-only underlay dirs, e.g. basewiki.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-15 23:04:57 +01:00
intrigeri 9abda92324 po(_istranslation): fix unitialized value
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-15 22:45:45 +01:00
intrigeri 5c59ad63df po: fix broken links from slave pages
... by overriding cgiurl.

Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-15 21:49:32 +01:00
intrigeri 196f03a987 po: do not add translation status to parentlinks
Signed-off-by: intrigeri <intrigeri@boum.org>
2009-01-13 13:03:30 +01:00
intrigeri 82197bd0ea Merge commit 'upstream/master' into prv/po 2009-01-13 12:26:43 +01:00
Joey Hess 85dcc2958a pinger: Get whole url, don't just head.
Asking for only the head worked in my tests, but I've found a site where it
didn't -- apparently ikiwiki didn't get a chance to do or finish the
refresh when HEADed. Getting the whole url, waiting for ikiwiki to finish,
avoided the update problem.
2009-01-11 14:27:27 -05:00
Joey Hess 7a8ea68fc0 Consistently allow use of relative paths in all PageSpecs that take a page name parameter. Previously, match_created_before(), match_created_after(), match_sourcepage(), and match_destpage() did not support that, and the docs were not clear. 2009-01-10 14:36:03 -05:00
Simon McVittie 79676ca445 comments: if the remove plugin is enabled, append a "Remove comment" link 2009-01-10 11:31:24 +00:00
Simon McVittie d70b05971f comments: only try to insert commentuser etc. into templates if the page contained [[!_comment]] 2009-01-10 11:29:56 +00:00
Joey Hess 81b088866b repolist: New plugin to support the rel=vcs-* microformat.
* repolist: New plugin to support the rel=vcs-* microformat.
* goodstuff: Include repolist by default. (But it does nothing until
  configured with the repository locations.)
2009-01-07 16:07:46 -05:00
Joey Hess e1e1d37753 increment interface version 2009-01-07 15:01:43 -05:00
Joey Hess 551544663d comments: Fix cache avoidance hack.
The ?updated needs to come before the #anchor or browsers will not follow
the anchor.
2009-01-07 11:12:32 -05:00