This is the name given to the
UseModDescendant for the
EmacsWiki. It
is one of the
PatchedScripts developed from
UseMod 0.92. The patches
have begun to be so extensive that I decided to fork.
Free documentation (according to the GFDL) exists on the Oddmuse wiki.
The documentation does not cover the code as the UseModWiki site does;
it just covers the user and the maintainer perspective.
The script is hosted on Savannah, so access to CVS is available.
This may be interesting for people wanting to port some of the ideas
back into UseMod.
Oddmuse currently has the following patches installed (sometimes with
modifications). The script is under 4000 lines of Perl to maintain my
MeatBall:FeatureKarma, but lots of modules are available.
- WikiPatches/AccessibleDiffs -- highlight the words added, changed or deleted. I changed the format, however, so now it really looks more or less like a diff output with some hilighting.
- WikiPatches/AutomaticLinkBack -- add links to other pages that link to you, including a way to filter out backlinks to particular hosts such as alternate addresses of the same wiki
- WikiPatches/BetterSearchOutput -- add some context for the matches found
- WikiPatches/BodyColors -- bugfix
- WikiPatches/LineEnds -- bugfix
- WikiPatches/MultiLang -- filtering RecentChanges according to the languages used on a page
- WikiPatches/NationalDays -- renamed to "Short Messages For Special Days"
- WikiPatches/PageCacheBugFix -- bugfix
- WikiPatches/PageDeletion -- people seem to want this
- WikiPatches/PictureSmilies -- more icons in wiki pages
- WikiPatches/SurgeProtector -- if mod_throttle and friends are not installed
- WikiPatches/TaviStyleHistory -- improved history handling
- WikiPatches/XmlRss -- produce RSS for others to include
- WikiPatches/RssInclusion -- build portals using the script
- WikiPatches/RawMode -- extended with the raw=2 parameter for EmacsWiki:SimpleWikiEditMode?, plus raw output of action=rc (list of recent changes) and action=index (list of all pageS)
- WikiPatches/RawWikiInclusion -- enabling transclusion
- WikiPatches/RcOldLog -- improve maintenance
- WikiPatches/RobotsNoFollow -- prevent bots from going crazy
- some minor things, such as a new variable for the version string
- The (diff) link on RecentChanges automatically choose a major or a minor diff depending on what change is shown.
- RecentLink controls whether usernames are linked to pages on RecentChanges.
- More CSS classes.
- There is a piece of code for your config file that will add LaTeX support to your wiki. This assumes the availability of `latex' and `dvi2bitmap' on the server.
- Rewrote parser to work like a state machine, inspired by Tiny Wiki[1]. I hope that this will result in more valid HTML being produced. Furthermore, this allows me to cache preparsed pages! Only things that can emit different HTML code later will be parsed on the next view. This is an idea from the MoinMoin community.
- WikiPatches/SearchButton -- for mobile devices
- WikiPatches/EmbedInheritance -- for mobile devices
- WikiPatches/IsbnCleanup -- the three URLs can be translated, now
- An option to add a link to the HTML validator service by the W3C. It is enabled by default on my homepage. [2]
- A new action that concatenates the HTML of all pages into one big HTML files, uses anchors for all page titles, and translates all simple page links to local anchor refs.
- An option to make the presence of the toplinkbar optional (like the toplinkbar parameter).
- Inheriting the toplinkbar and the embed parameters if they use non-standard values.
- A new action to convert from one record separator to another.
- Switched the record separator from the Latin-1 superscript 3 (which prevents complete ISO-8859 and UTF-8 support, because that byte is a valid text character in all these encodings) to the ASCII record separator RS (which is not a valid text character in all ASCII supersets including ISO-8859 variants and UTF-8).
- A variant of WikiPatches/GetReferersBar but included in the main script (and optional), used for example on my homepage [2].
- No longer treat '*' special in usernames, summaries, etc.
- Not only \xc0-\xff are non-english letters: With UTF-8, \x80-\xff are as well.
- Automatic updating of weblogs.com for major changes [3] [4]
- Instead of the editlinks action there is now a search and replace action for administrators.
- Interwiki links are defined on a page called InterMap. Only admins can create it, and by default it is locked upon creation. Administrators may unlock it, however.
- Banned hosts and IPs are defined on a page called BannedHosts. Only admins can create it, and by default it is locked upon creation. Administrators may unlock it, however.
- CSS can be defined on a page on the wiki, eg. CascadingStyleSheet. Only admins can create it, and by default it is locked upon creation. Administrators may unlock it, however. A new parameter `theme' introduced, which is used as the `class' attribute in the body element; thus you can specify various settings for various themes, and provide URLs for visitors to set their theme parameter. Something silimar (without the automatic locking) can be achieved by using an URL to the style sheet page using raw=1 (see WikiPatches/RawMode) for $StyleSheet.
- A new option $ConfigPage was introduced. This page will be read as Perl code. Only admins can create it, and by default it is locked upon creation. Administrators may unlock it, however. Obviously you still have to set the $DataDir before that for it to work.
- Comment pages added with an extra text area to append text at the bottom instead of having to edit pages.
- $EditAllowed? = 2 will allow edits only on comment pages. This, and the comment pages themselves, make OddMuse a real MeatBall:WikiLog candidate.
- Added rchostonly (a regexp) and rcuseronly (exact match) to action=rc so that you can better track people.
- MeatBall:FileUpload onto wiki pages -- ie. they appear in RecentChanges and you can look at old revisions, replace them with text, including replacing them with "DeletedPage" to remove them eventually. When uploaded files are downloaded via the download action, the script implements sophisticated caching using the 304 NOT MODIFIED response (whereas the default caching used is a 10s expiry time for all pages).
- User-supplied CSS files (even multiple ones). Users can supply URLs to CSS files using a new parameter. From then on, the wiki pages will be served with the CSS link pointing to the user-supplied URL.
- MeatBall:PageClusters
- MeatBall:PermanentAnchors acting like a page alias
- MeatBall:EditConflicts -- Conflicts are resolved automatically or the user is warned that he might have overwritten a change. There is no more conflict editing with two textareas.
- WikiPatches/SearchWithOperators -- Search allows "and" and "or" (with appropriate highlighting)
- MeatBall:FilteredRecentChanges -- show recent changes for pages returned by a search (therefore allowing searching for changes in a category by searching for the category...)
- Uses new file format.
Features removed:
- No more email notification
- No thin-lines option
- No user preferences saved on the server
- Username saved directly in the cookie
- No more conditional compilation (was disabled anyway)
- ScriptTZ is no longer an option; there is no more timezone handling, all timestamps use GMT
- UseCache is no longer an option; it is never used (was disabled and not 100% functional anyway)
- UseIndex is no longer an option; it is always used
- FastGlob is no longer an option; it is always used
- UseHeadings is no longer an option; it is always used
- UseDiffLog is no longer an option; diffs are never logged
- No more editlinks action, and no more editlinks file during maintenance. Pages can be deleted using the page deletion patch, and I have never ever had the need to rename pages. Using reverse lookup, and a few quick edits was always faster than figuring out what the password was, figuring out how to use the editlinks action, and praying that it all worked.
- Removed parameters such as alldiff, norcdiff, etc.
- Removed diff-type 4 (4 got replaced by the default). The default is 1 (ie. major diffs).
- Removed diff-type 3 (no more author diffs). At the same time, when displaying a diff, no links to other cached diff types exist. People can use the page history to produce any kind of diffs they want.
- NonEnglish is no longer an option; non-english characters are always allowed
- SimpleWiki is no longer an option; numbers are always allowed
- No more intermap file, no more banned list editing
- UseSubpages is no longer an option; the / separator is far too common for this to be useful, the shorthand /foo looks ugly, and the difference between WikiPatches/RawMode and WikiPatchesRawMode is hard to explain.
- FreeUpper is no longer an option; it was a source of confusion in one instance and requires extra explaining for non-US ASCII encodings (since it doesn't work, there).
- Deleting a page no longer removes all corresponding entries from the rclog (and thus the deleted page is still part of RecentChanges if you go back far enough)
What CliffordAdams said about Oddmuse when I asked him:
The main decisions I disagree with are those which make the script less friendly for some users in order to save a few lines of code. Using only UTC 24-hour time is almost as annoying for USA users as "EST/EDT" 12-hour time is for European users. SubPages are also useful for several users, although I understand they are a pain to maintain. Removing renaming and immediate deletion is another example. Finally, some of my core design decisions were that ordinary page loads will only open one wiki page, while Oddmuse may read and write several files when serving a page. All of these changes can be justified (I wouldn't implement SubPages in a new wiki project), but they do make OddMuse quite different from its parent. This diversity is a good thing in my view. I want people to try lots of wikis and then select the best one for their needs (even if it isn't mine). --CliffordAdams