<td>
</td>
</tr>
- <tr>
- <td> Aug 2004 </td>
- <td align="right"> 65 </td>
- <td align="right"> 8 </td>
- <td align="right"> 0 </td>
- <td> 8 [[Main/TWikiGroups]]<br /> 7 [[Main/WebPreferences]]<br /> 4 [[Main/WebRss]]<br /> 4 [[Main/TWikiGroupTemplate]]<br /> 3 [[Main/WebStatistics]]<br /> 3 [[Main/WebHome]]<br /> 3 [[Main/WebNotify]]<br /> 3 [[Main/WebIndex]]<br /> 3 [[Main/WebChanges]]<br /> 2 [[Main/WebSearchAdvanced]]<br /> 2 [[Main/PeterThoeny]]</td>
- <td> 7 [[Main/PeterThoeny]]<br /> 1 [[Main/ArthurClemens]]</td>
- </tr>
</table>
**_Notes:_**
-- Do not edit this topic, it is updated automatically. (You can also [force](http://www.dementia.org/twiki//statistics/%WEB%) an update)
+- This topic is updated by the statistics script. (You can also [force](http://www.dementia.org/twiki/statistics/%WEB%) an update)
- [[TWikiDocumentation]] tells you how to enable the automatic updates of the statistics.
- Suggestion: You could archive this topic once a year and delete the previous year's statistics from the table.
-This is a short introduction training course for TWiki beginners (newbies).
+This is a short introductory training course for TWiki beginners.
<a name="StartPresentation"></a> <span>[[Main/WebHome?slideshow=on;skin=print#GoSlide1]]</span>
## <a name="Slide 1: A Taste of TWiki"></a> Slide 1: A Taste of TWiki
-The basic function of TWiki is a Wiki (if that helps!)
-
-A Wiki is like a normal web site, except that you can edit the content in your browser
-
-<table width="100%">
+<table cellspacing="10">
<tr>
- <td>
+ <td><img alt="Hula girl" height="111" src="http://www.dementia.org/twiki//view/hula.gif" width="113" /></td>
+ <td> The basic function of TWiki is a Wiki (if that helps!) <p> A Wiki is like a web site, except that you can edit the content in your browser </p>
+ <p>
+ </p>
<ul>
<li> "Wiki" is short for "wiki wiki", the Hawaiian for "Quick" </li>
<li> The idea originates from <a href="http://www.hyperdictionary.com/computing/hypercard" target="_top">Macintosh Hypercard</a>, via <a href="http://www.c2.com/cgi/wiki?WardCunningham" target="_top">Ward Cunningham</a></li>
<li> In Ward's words, Wiki is <em>"the simplest online database that could possibly work"</em></li>
- <li> A Wiki is basically a shared, online, persistant whiteboard </li>
+ <li> A Wiki is basically a shared, online, persistent whiteboard </li>
</ul>
</td>
- <td align="right"><img alt="" height="112" src="http://www.dementia.org/twiki//view/hula.gif" width="88" /></td>
</tr>
</table>
## <a name="Slide 2: TWiki Wiki"></a> Slide 2: TWiki Wiki
-TWiki implements the basic Wiki idea of a shared whiteboard
-
-<table width="100%">
+<table cellspacing="10">
<tr>
- <td>
+ <td><img alt="Whiteboard" height="160" src="http://www.dementia.org/twiki//view/whiteboard.gif" width="240" /></td>
+ <td>TWiki implements the basic Wiki idea of a shared whiteboard <p>
+ </p>
<ul>
<li> Anyone can add content<br />... or change what is written<br />... or change the organisation of the content </li>
<li> Whatever what you write is<br />... nicely presented<br />... remembered... and never forgotten </li>
</ul>
</td>
- <td align="right"><img alt="" height="112" src="http://www.dementia.org/twiki//view/anarchy.gif" width="112" /></td>
</tr>
</table>
## <a name="Slide 3: Where is it used?"></a> Slide 3: Where is it used?
-- TWiki is mainly used in commercial environments, often on corporate intranets
- - Examples: Disney, SAP, British Telecom, Wind River, Motorola, [Epic Games](http://udn.epicgames.com/Main/WebHome)
-- A number of public Wiki sites also use TWiki
- - Examples: <br /><http://www.trommetter.com/cgi-bin/view.cgi/><br /><http://csci.mrs.umn.edu/twiki/view><br />
+TWiki is mainly used in commercial environments, often on corporate intranets
+
+- Examples: Disney, British Telecom, SAP, Wind River, Motorola, [Epic Games](http://udn.epicgames.com/Main/WebHome)<br /><table cellspacing="20">
+ <tr>
+ <td><img alt="Disney logo" height="31" src="http://www.dementia.org/twiki//view/Disney_logo.gif" width="80" /></td>
+ <td><img alt="British Telecom logo" height="41" src="http://www.dementia.org/twiki//view/BT_logo.gif" width="80" /></td>
+ <td><img alt="SAP logo" height="40" src="http://www.dementia.org/twiki//view/SAP_logo.gif" width="80" /></td>
+ <td><img alt="Motorola logo" height="65" src="http://www.dementia.org/twiki//view/Motorola_logo.gif" width="80" /></td>
+ <td><img alt="Epic Games logo" height="65" src="http://www.dementia.org/twiki//view/EpicGames_logo.gif" width="80" /></td>
+ </tr>
+</table>
+
+A number of public Wiki sites also use TWiki
+
+- Examples: <br /><https://uimon.cern.ch/twiki/bin/view/><br /><http://csci.mrs.umn.edu/twiki/view>
## <a name="Slide 4: TWiki Features"></a> Slide 4: TWiki Features
- TWiki pages are fully revision controlled, so a record of every change to every page is kept <table border="0" cellpadding="3" cellspacing="0">
<tr>
- <td bgcolor="#D0D0D0"><font color="black" size="-1">r1.6 <a>></a> r1.5 <a>></a> r1.4</font></td>
+ <td bgcolor="#D0D0D0"><font color="black" size="-1">r6 <a><</a> r5 <a><</a> r4</font></td>
</tr>
</table>
- The look-and-feel is highly configurable, through use of templates
- Go <input name="topic" size="16" type="text" />
- lets you type in the name of a page you already know
-## <a name="Slide 9: The Page Header"></a> Slide 9: The Page Header
+## <a name="Slide 9: The Page Header ... con"></a> Slide 9: The Page Header ... continued
<table bgcolor="white" border="0" cellpadding="3" cellspacing="0" width="90%">
<tr>
<table bgcolor="white" border="0" cellpadding="3" cellspacing="0" width="90%">
<tr bgcolor="#D0D0D0">
- <td colspan="2" valign="top"><font color="black" size="-1"> <a href="none"><b>Edit</b></a> | <a href="none">Attach</a> | <a href="none">Diffs</a> | r1.2 <a href="none">></a> r1.1 | <a href="none">More</a> </font></td>
+ <td colspan="2" valign="top"><font color="black" size="-1"> <a href="none"><b>Edit</b></a> | <a href="none">Attach</a> | <a href="none">Diffs</a> | r2 <a href="none">></a> r1 | <a href="none">More</a> </font></td>
</tr>
<tr>
<td valign="top"><font color="black" size="-1">Revision r1.2 - 13 Feb 2004 - 09:09 GMT - <a href="none">TWikiPresenter</a> </font></td>
- <code>\[[BumpyWords]\[bumpy words]] appears as [[bumpy words|Main/BumpyWords]]</code>
- An ordinary URL pasted into text will appear as a link - <http://www.google.com>
- You can also prettify URLs using square brackets:
- - `[[http://www..google.com][google]]` appears as [google](http://www.google.com)
+ - `[[http://www.google.com/][Google]]` appears as [Google](http://www.google.com/)
- Use %SEARCH. This is an interface to a sophisticated search engine that embeds the results of the search in your page. See [[TWikiVariables]] for full details.
## <a name="Slide 19: More formatting"></a> Slide 19: More formatting
- A Wiki trick for grouping pages together
- Example: to group together a set of pages all relating to the weather:
1. Create a page called 'CategoryWeather'
- 2. Put a SEARCH that contain the word 'CategoryWeather' into it
+ 2. Put a SEARCH that contains the word 'CategoryWeather' into it
- `%SEARCH{"CategoryWeather" nosearch="on" nosummary="on"}%`
3. Put the [[BumpyWord]] 'CategoryWeather' on all the pages relating to the weather<br />(usually at the bottom, below a horizontal bar)
The following plugins are installed on this TWiki: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]]
-There are many other plugins, see <http://www.twiki.org/cgi-bin/view/Plugins>
+There are many other plugins, see <http://TWiki.org/cgi-bin/view/Plugins>
## <a name="Slide 29: Credits and Acknowledg"></a> Slide 29: Credits and Acknowledgements
- The latest version of this presentation is available at TWiki:%WEB%.%TOPIC%, where you can also provide feedback
**_Related topics:_** [[WelcomeGuest]], [[TWikiTutorial]], [[ATasteOfTWikiTemplate]]
-
--- TWiki:Main.CrawfordCurrie - 17 Feb 2004
- Press the required letter
[Learn more](http://www.salford.gov.uk/online/howto/accesskeys.htm)
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="A List of TWiki Administrator Do"></a> A List of TWiki Administrator Documentation
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
Although the [[TWikiInstallationGuide]] is quite complete, there will on occasion be parts that don't work in your local environment (particularly with TWiki:Codev/TWikiOnWebHostingSites, which are sometimes challenging even for those with good OS and web server skills).
-There are many excellent resources for learning how to administer your OS and web server, including books, web sites, web forums, IM and email lists. The TWiki:Support web must **not** be depended on as a resource for this purpose - in other words, it is not there to answer basic questions about operating system and web server administration. Asking and answering questions is time consuming for all concerned and is best used for specific _TWiki related_ issues, rather than helping you learn the OS and web server.
+There are many excellent resources for learning how to administer your OS and web server, including books, web sites, web forums, IM and e-mail lists. The TWiki:Support web must **not** be depended on as a resource for this purpose - in other words, it is not there to answer basic questions about operating system and web server administration. Asking and answering questions is time consuming for all concerned and is best used for specific _TWiki related_ issues, rather than helping you learn the OS and web server.
-One of the best training courses for Linux is **Basic Linux Training** at <http://basiclinux.net/> - this is a 2 month distance-learning course (via email). The course operators are friendly, and all students are newbies. A nice tool for people migrating from Windows is <http://www.MidnightCommander.org/>. It is already installed on Linux systems: try <code>**mc -ac**</code> and <code>**ESC 1**</code> to get help.
+r.
--- TWiki:Main.RichardDonkin - 27 Apr 2002 %BR% -- TWiki:Main.GrantBow - 15 Jan 2003 %BR% -- TWiki:Main.PeterMasiar - 28 May 2003
+To get started with Linux, visit <http://linuxbasics.org/>. LinuxBasics.org offers Linux tutorials, a mailing-list and an IRC-channel to answer questions, and links to sites with information to install and use Linux. A nice tool for people migrating from Windows is <http://www.MidnightCommander.org/>. It is already installed on Linux systems: try <code>**mc -ac**</code> and <code>**ESC 1**</code> to get help.
+
+**_Related Topics:_** [[AdminDocumentationCategory]]
--- /dev/null
+# <a name="Admin tools"></a> Admin tools
+
+Manage whole **%WIKITOOLNAME%** site from one screen.
+
+- **[[Users|Main/TWikiUsers]]:** [[Register|Main/TWikiRegistration]], [[NewUserTemplate]], [[UserForm]], [[ResetPassword]], [[ChangePassword]]
+- **[[Site Tools|Main/TWikiSiteTools]]:** [Configure](http://www.dementia.org/twiki/configure), [[TWikiPreferences]], [[InterWikis]], [[Variables|Main/TWikiVariables]]
+- **Managing:** [[Topics|Main/ManagingTopics]], [[Webs|Main/ManagingWebs]], [[YouAreHere]]
+- **Webs:**
+
+> <table bgcolor="#000000" border="0" cellpadding="3" cellspacing="2" width="100%">
+> <tr bgcolor="#99CCCC">
+> <th>Web</th>
+> <th>Tools</th>
+> <th>Use to...</th>
+> </tr>
+> <tr>
+> <td>
+> <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </td>
+> </tr>
+> <tr bgcolor="#ffffff">
+> <td colspan="3"><font size="-1">This table is updated automatically based on WebPreferences settings of the individual webs. </font></td>
+> </tr>
+> </table>
+> <table border="0" cellpadding="0" cellspacing="2">
+> <tr bgcolor="#ffffff">
+> <td valign="top"><font size="-1"> Legend: </font></td>
+> <td valign="top"> </td>
+> <td valign="top"><font size="-1"> <img alt="Home of web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/home.gif" width="16" /> WebHome </font></td>
+> <td valign="top"><font size="-1"> <img alt="Search web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/searchtopic.gif" width="16" /> WebSearch </font></td>
+> <td valign="top"><font size="-1"> <img alt="Recent changes in the web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/recentchanges.gif" width="16" /> WebChanges </font></td>
+> <td valign="top"><font size="-1"> <img alt="Get notified of changes to the web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/notify.gif" width="16" /> WebNotify </font></td>
+> </tr>
+> <tr bgcolor="#ffffff">
+> <td valign="top"> </td>
+> <td valign="top"> </td>
+> <td valign="top"><font size="-1"> <img alt="Preferences of web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/wrench.gif" width="16" /> WebPreferences </font></td>
+> <td valign="top"><font size="-1"> <img alt="Statistics of web" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/statistics.gif" width="16" /> WebStatistics </font></td>
+> <td valign="top"><font size="-1"> <img alt="Bullet list of all topics" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/indexlist.gif" width="16" /> WebTopicList </font></td>
+> <td valign="top"><font size="-1"> <img alt="Index of all topics" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/index.gif" width="16" /> WebIndex </font></td>
+> </tr>
+> </table>
+
+## <a name="All Admin Tools Category topics"></a> All Admin Tools Category topics
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+## <a name="Plugins"></a> Plugins
+
+Administrators can enable and disable plugins using [configure](http://www.dementia.org/twiki/configure).
+
+- [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
+- [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
+- [[EditTablePlugin]] <span>(any TWiki, 11646)</span>:
+- [[InterwikiPlugin]] <span>(Dakar, $Rev: 11935$)</span>:
+- [[PreferencesPlugin]] <span>(Dakar, 9839)</span>:
+- [[SlideShowPlugin]] <span>(Any TWiki, $Rev: 12847$)</span>:
+- [[SmiliesPlugin]] <span>(Dakar, 8154)</span>:
+- [[TablePlugin]] <span>(1.020, 12339)</span>:
+- [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
+
+see also: [[TWikiPlugins]]
+
+## <a name="TWiki Version"></a> TWiki Version
+
+- TWiki engine: TWiki-4.1.2, Sat, 03 Mar 2007, build 13046
+- Plugin API: 1.11
+
+**_Related Topics:_** [[AdminDocumentationCategory]]
--- /dev/null
+## <a name="FAQ:"></a> FAQ:
+
+How can I create a simple [[TWiki Form|Main/TWikiForms]] based application?
+
+## <a name="Answer:"></a> Answer:
+
+1. Create a [[TWiki Form|Main/TWikiForms]] and define fields ([[TWikiForms]])
+2. Add the form in the list of Web Forms. Set the variable WEBFORMS in [[WebPreferences]]
+3. Create a Template Topic and in Edit mode
+4. In edit mode add the [[TWiki Form|Main/TWikiForms]] you defined to the Template Topic
+5. Create a HTML Form with necessary fields
+6. Define `SEARCH` function for listing items. See [[TWikiVariables#VarSEARCH]]
+
+For more information follow the links...
+
+The following is the code source of [[TWikiFAQ]]:
+
+ <form action="%SCRIPTURLPATH{edit}%/%WEB%/">
+ New FAQ topic: (Use a name in TWiki.WikiNotation) <br />
+ <input type="text" name="topic" size="32" /> <input type="submit" class="twikiSubmit" value="Create Topic" />
+ <input type="hidden" name="onlywikiname" value="on" />
+ <input type="hidden" name="templatetopic" value="TWikiFaqTemplate" />
+ <input type="hidden" name="topicparent" value="%TOPIC%" />
+ <br />
+ </form>
+
+----
+
+And the `SEARCH` function:
+
+ %SEARCH{ "Back to\:__ TWikiFAQ" casesensitive="on" regex="on" nosearch="on" nototal="on"}%
+
+**_Back to:_** [[TWikiFAQ]]
+
+**_Related Topics:_** [[UserDocumentationCategory]]
+
+-- TWiki:Main.MiyokoTakushima - 18 Oct 2004 <br />
<div>
<ul>
- <li><a href="#Appendix C: Encode URLs With UTF"> Appendix C: Encode URLs With UTF8 </a><ul>
+ <li><a href="#Appendix B: Encode URLs With UTF"> Appendix B: Encode URLs With UTF8 </a><ul>
<li><a href="#Current Status"> Current Status</a></li>
<li><a href="#Details of Implementation"> Details of Implementation</a></li>
<li><a href="#Testing and Limitation"> Testing and Limitation</a></li>
<a name="EncodeURLsUTF8"></a>
-# <a name="Appendix C: Encode URLs With UTF"></a> Appendix C: Encode URLs With UTF8
+# <a name="Appendix B: Encode URLs With UTF"></a> Appendix B: Encode URLs With UTF8
-_This page addresses implemented UTF-8 support for URLs only. The overall plan for UTF-8 support for TWiki is described in TWiki:Codev.ProposedUTF8SupportForI18N ._
+_Use internationalised characters within WikiWords and attachment names_
+
+This topic addresses implemented UTF-8 support for URLs only. The overall plan for UTF-8 support for TWiki is described in TWiki:Codev.ProposedUTF8SupportForI18N.
## <a name="Current Status"></a> Current Status
- Perl 5.8 sites using any character set do not require additional modules, since CPAN:Encode is installed as part of Perl.
- This feature still works on Perl 5.005\_03 as per [[TWikiSystemRequirements]], or Perl 5.6, as long as CPAN:Unicode::MapUTF8 is installed.
-ISO-2022-\*, HZ-\* and other 'non-ASCII-safe' multi-byte character sets are now specifically excluded from use as the site character set, since they interfere with TWiki ML; however, many multi-byte character sets work fine, e.g. EUC-JP, GB2312, etc.
+The following 'non-ASCII-safe' character encodings are now excluded from use as the site character set, since they interfere with TWiki markup: ISO-2022-\*, HZ-\*, Shift-JIS, MS-Kanji, GB2312, GBK, GB18030, Johab and UHC. However, many multi-byte character sets work fine, e.g. EUC-JP, EUC-KR, EUC-TW, and EUC-CN. In addition, UTF-8 can already be used, with some limitations, for East Asian languages where EUC character encodings are not acceptable - see TWiki:Codev.ProposedUTF8SupportForI18N.
-It's now possible to override the site character set defined in the `$siteLocale` setting in TWiki.cfg - this enables you to have a slightly different spelling of the character set in the server locale (e.g. 'eucjp') and the HTTP header sent to the browser (e.g. 'euc-jp').
+It's now possible to override the site character set defined in the `{SiteLocale}` setting in [configure](http://www.dementia.org/twiki/configure) - this enables you to have a slightly different spelling of the character set in the server locale (e.g. 'eucjp') and the HTTP header sent to the browser (e.g. 'euc-jp').
This feature should also support use of Mozilla Browser with TWiki:Codev.TWikiOnMainframe (as long as mainframe web server can convert or pass through UTF-8 URLs) - however, this specific combination is not tested. Other browser-server combinations should not have any problems.
The main point is that you can use TWiki with international characters in [[WikiWords]] without changing your browser setup from the default, and you can also still use TWiki using non-UTF-8 URLs. This works on any Perl version from 5.005\_03 onwards and corresponds to Phase 1 of TWiki:Codev.ProposedUTF8SupportForI18N. You can have different users using different URL formats transparently on the same server.
-UTF-8 URLs are automatically converted to the current `$siteCharset` (from the `TWiki.cfg` locale setting), using modules such as CPAN:Encode if needed.
+UTF-8 URLs are automatically converted to the current [\{Site\}\{Charset\}](http://www.dementia.org/twiki/configure#Localisation), using modules such as CPAN:Encode if needed.
TWiki generates the whole page in the site charset, e.g. ISO-8859-1 or EUC-JP, but the browser dynamically UTF-8 encodes the attachment's URL when it's used. Since Apache serves attachment downloads without TWiki being involved, TWiki's code can't do its UTF-8 decoding trick, so TWiki URL-encodes such URLs in ISO-8859-1 or whatever when generating the page, to bypass this URL encoding, ensuring that the URLs and filenames seen by Apache remain in the site charset.
For up to date information see TWiki:Codev.EncodeURLsWithUTF8
--- TWiki:Main.RichardDonkin - 7 Jan 2004 %BR% -- TWiki:Main.MattWilkie - 10 Aug 2004 %BR% -- TWiki:Main.PeterThoeny - 14 Aug 2004
+**_Related Topics:_** [[AdminDocumentationCategory]]
-**BookView** is an option available from the [[WebSearch]] topic. It allows you to display the result in "book view", that is, the whole content of topics is shown instead of a topic summary. This allows you to easily see a whole set of pages, which is useful for printing.
+**BookView** is an option available from the [[advanced search|Main/WebSearchAdvanced]] topic. It allows you to display the result in "book view", that is, the whole content of topics is shown instead of a topic summary. This allows you to easily see a whole set of pages, which is useful for printing.
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="Bulk Registration"></a> Bulk Registration
+
+The [[TWikiAdminGroup]] can use %TOPIC% to register (i.e. create logins and [[UserTopics]]) for a group of people quickly. Create a table in the REGISTERTOPIC named below, setting each row to represent each user and each column to correspond to the metadata. Then press the button on this page to perform registration for those users. Unlike normal registration the administrator is assumed to have correct e-mail addresses for the users, so no verification is required. Note that the new users are not notified that they have an account. This is so you can prepare and verify the accounts before announcing them. To announce them use the [[BulkResetPassword]] feature: this will assign a new random password and notify users.
+
+## <a name="Bulk Registration usage"></a> Bulk Registration usage
+
+Any fields you define in this table will end up in the User's topic. If a form (such as [[UserForm]]) is attached to [[NewUserTemplate]] then the data will go in as META:FIELDS, meaning that you can use SEARCH formfield constructs to search.
+
+If you use the [[UserForm]] then ensure that it contains all the fields you define here. Otherwise they will disappear when the user edits their home topic!
+
+### <a name="Mandatory fields"></a> Mandatory fields
+
+- [[WikiName]]
+- Email
+- FirstName
+- LastName
+
+### <a name="Optional fields"></a> Optional fields
+
+- [[LoginName]] - if not set will register with [[WikiName]]
+
+## <a name="Settings"></a> Settings
+
+- - Set REGISTERTOPIC = [[UnprocessedRegistrations]]
+ - Set LOGTOPIC = %REGISTERTOPIC%Log
+
+- - Set OVERWRITEHOMETOPICS = 0
+
+### <a name="Example format"></a> Example format
+
+The following should be inserted into your REGISTERTOPIC as a table.
+
+ | FirstName | LastName | Email | WikiName | CustomFieldThis | SomeOtherRandomField | WhateverYouLike |
+ | Test | User | you@example.com | TestUser | A | B | C |
+
+To use this:
+
+1. Make sure that the Custom fields appear on the [[UserForm]]
+2. Copy the above table to your clipboard
+3. Click through and paste this on %REGISTERTOPIC%, save the topic and return here.
+4. Click the Bulk register button below
+5. Read %LOGTOPIC%
+6. When you are ready, use the [[BulkResetPassword]] page to assign passwords and notify the users of their new accounts.
+
+Notes:
+
+1. The first row of the table dictates the heading format and that the fieldnames must be plain, i.e. **must not contain bolded** entries.
+2. You are responsible for ensuring that the fieldnames appear in the [[Main.UserForm|Main/UserForm]]
+3. Only members of the [[TWikiAdminGroup]] can run this.
+
+<form action="http://www.dementia.org/twiki/manage/%REGISTERTOPIC%" method="post" name="bulkRegister"><input name="action" type="hidden" value="bulkRegister" /> <input type="submit" value="Bulk Register these people" /> <input name="LogTopic" type="hidden" value="%LOGTOPIC%" /> <input name="OverwriteHomeTopics" type="hidden" value="%OVERWRITEHOMETOPICS%" /></form>
+
+## <a name="%REGISTERTOPIC%"></a> %REGISTERTOPIC%
+
+## <a name="%LOGTOPIC%"></a> %LOGTOPIC%
+
+**_Related Topics:_** [[AdminToolsCategory]]
--- /dev/null
+# <a name="Bulk Reset Passwords"></a> Bulk Reset Passwords
+
+The [[TWikiAdminGroup]] can use %TOPIC% to reset any number of passwords. Users whose passwords are reset with this will be sent an e-mail at the address recorded in their home topic (the administrator will **not** be told the new passwords).
+
+<div>
+ <form action="http://www.dementia.org/twiki/resetpasswd/%WEB%/%TOPIC%" method="post">
+ <table border="0">
+ <tr>
+ <th colspan="4"> This text will be sent to users in their "reset" e-mail: </th>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <textarea cols="70" name="Introduction" rows="4" style="width: 99%">
+Welcome! The site ready for your use. Please use the login name and password listed below and contact me if you have any questions.
+</textarea>
+ </td>
+ </tr>
+ <tr>
+ <th colspan="4">
+ <p> Click the checkboxes below for the users whose passwords you want to reset: </p>
+ </th>
+ </tr>
+ <tr bgcolor="lightgray">
+ <th>WikiName</th>
+ <th>Created</th>
+ <th>Changed</th>
+ <th>Reset</th>
+ </tr>
+ <tr>
+ <td>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </td>
+ </tr>
+ <tr>
+ <td align="center" colspan="4"><input name="action" type="hidden" value="resetPassword" /> <input type="submit" value="Reset selected passwords now" /></td>
+ </tr>
+ </table>
+ </form>
+</div>
+
+**_Note_** if you don't see all the users you expect in the table below, make sure their home topic has an attached [[UserForm]]. This is used to identify users.
+
+----
+
+**_Related Topics:_** [[AdminToolsCategory]]
+
+- - Set ALLOWTOPICVIEW = [[TWikiAdminGroup]]
+ - Set ALLOWTOPICCHANGE = [[TWikiAdminGroup]]
See %WEB%.WikiWord
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="List of all Category topics"></a> List of all Category topics
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
--- /dev/null
+# <a name="Change E-mail Address"></a> Change E-mail Address
+
+[[TWikiUsers]] has a full list of user names.
+
+This form is used to change your registered e-mail addresses. Your registered e-mails are used by TWiki for sending you e-mails, include notifications of password changes. The addresses you register via this form are kept secret and will **not** be published anywhere on this site.
+
+%X% **_Security Note_**: You really ought to register a valid e-mail address. If TWiki can't find a registered e-mail for you in the secret database, it will look in your user topic for a line like this:
+
+ * Set Email = user@example.com
+
+If your user topic is not protected from changes by other people, and you don't register an e-mail address using this form, then your user account could be hijacked by someone else.
+
+If your old e-mail addresses are all invalid (you can't receive mail there any more) and you have forgotten your password, please contact .
+
+Registered e-mail addresses for currently logged in user (`admin`):
+
+<form action="http://www.dementia.org/twiki/passwd/%WEB%/%TOPIC%" method="post" name="passwd">
+ <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Your [[TWiki/LoginName]]: </td>
+ <td><input name="username" size="40" type="text" value="admin" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td align="right"> Password: </td>
+ <td><input name="oldpassword" size="40" type="password" value="" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td align="right"> New e-mails (space-separated list): </td>
+ <td><input name="email" size="40" type="text" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td colspan="2"><input type="submit" value="Change e-mail address" /> (Fields marked <code><font color="red">**</font></code> are required) </td>
+ </tr>
+ </table><input name="TopicName" type="hidden" value="%TOPIC%" /> <input name="action" type="hidden" value="changePassword" /></form>
+
+After submitting this form your e-mail will be changed, and you will be returned to this form.
+
+If you have questions please contact the TWiki administrator .
+
+<table bgcolor="yellow">
+ <tr>
+ <td><strong><em>Note to administrator:</em></strong> This form applies only if TWiki uses a {PasswordManager} that supports storing e-mails (e.g. TWiki::Users::HtPasswdUser). Otherwise replace this topic with a note describing how to change registered e-mail in your organization). </td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[ChangePassword]], [[AdminToolsCategory]], [[UserToolsCategory]]
-<font>Change password</font>
+# <a name="Change Password"></a> Change Password
-**_Forgot your old password?_** Then use [[ResetPassword]] instead. Please only use ResetPassword in case you really forgot your password. Thank you.
+**_Forgotten your password?_** Then use [[ResetPassword]] instead.
-<form action="http://www.dementia.org/twiki//manage/TWiki/WebHome" method="post" name="passwd">
+[[TWikiUsers]] has a full list of user names.
+
+<form action="http://www.dementia.org/twiki/passwd/TWiki/WebHome" method="post" name="passwd">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td align="right"> Your [[TWiki/WikiName]]: </td>
- <td><input name="username" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
+ <td align="right"> Your [[TWiki/LoginName]]: </td>
+ <td><input name="username" size="40" type="text" value="admin" /> <code><font color="red">**</font></code></td>
</tr>
<tr>
<td align="right"> Old password: </td>
- <td><input name="oldpassword" size="40" type="password" /> <code><font color="red">**</font></code></td>
+ <td><input name="oldpassword" size="40" type="password" value="" /> <code><font color="red">**</font></code></td>
</tr>
<tr>
<td align="right"> New password: </td>
</tr>
<tr>
<td align="right"> <input name="TopicName" type="hidden" value="%TOPIC%" /></td>
- <td><input name="action" type="hidden" value="changePassword" /> <input type="submit" value=" Request password change " /> (Fields marked <code><font color="red">**</font></code> are required) </td>
+ <td><input name="action" type="hidden" value="changePassword" /> <input type="submit" value="Change password" /> (Fields marked <code><font color="red">**</font></code> are required) </td>
</tr>
</table>
</form>
After submitting this form your password will be changed.
-If you have questions please contact the TWiki webmaster .
+If you have questions please contact the TWiki administrator .
+
+<table bgcolor="yellow">
+ <tr>
+ <td><strong><em>Note to administrator:</em></strong> This form applies only if TWiki uses a {PasswordManager} that supports changing passwords (e.g. TWiki::Users::HtPasswdUser). Otherwise replace this topic with a note describing how to change the password in your organization). See [[Main/TWikiUserAuthentication]] for more information. </td>
+ </tr>
+</table>
-**_Note to administrator:_** The change password form applies only if TWiki uses Basic Authentication, e.g. a `.htpassword` file managed by TWiki. It does not apply if you are using external authentication, such as an IT managed password system. (remove this note if you are using Basic Authentication; else replace this topic with a note describing how to change the password in your organization)
+**_Related Topics:_** [[ChangeEmailAddress]], [[AdminToolsCategory]], [[UserToolsCategory]]
--- /dev/null
+A [[ClassMethod]] is a method that must be called relative to the containing class object. This normally only applies to the `new` method used to create new object instances. For example,
+
+# <a name="package Telecoms"></a> package Telecoms
+
+## <a name="ClassMethod new()"></a> [[ClassMethod]] new()
+
+ my $mobile = new Telecoms();
+
+or
+
+ my $mobile = Telecoms->new();
+
+**_Related Topics:_** [[DeveloperDocumentationCategory]], [[StaticMethod]], [[ObjectMethod]]
# <a name="Classic Skin"></a> Classic Skin
-The classic TWiki skin is a bare bone and functional skin, supporting any browser, and has a minimum of graphics
-
-This is not really a skin. It is the set of default templates, shown if no skin is activated. The default templates are part of every TWiki distribution.
+The classic TWiki skin is the traditional TWiki skin, as seen in previous TWiki versions.
## <a name="Skin Info"></a> Skin Info
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right"> Description: </td>
- <td> The classic TWiki skin, bare bone and functional, for any browser, with a minimum of graphics </td>
+ <td> Bare bone and functional, for any browser, with a minimum of graphics </td>
</tr>
<tr>
<td align="right"> Screenshot: </td>
<td><a href="http://www.dementia.org/twiki//view/fullscreen.gif"><img alt="Click for full screen image" height="130" src="http://www.dementia.org/twiki//view/screenshot.gif" width="600" /></a></td>
</tr>
<tr>
+ <td align="right"> Preview: </td>
+ <td>[[%WEB%/%TOPIC%?skin=classic]]</td>
+ </tr>
+ <tr>
<td align="right"> Base Name: </td>
<td> classic </td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Note:_** The Description, Screenshot and Base Name rows are needed by the [[TWikiSkinBrowser]]
-**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]]
-
--- TWiki:Main/PeterThoeny - 25 Jul 2004
+**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
_( Discussion in TWiki:Plugins/CommentPluginDev )_
+**_Note: this version of the [[CommentPlugin]] will _not_ work with TWiki versions released prior to June 2005_**
+
<div>
<ul>
<li><a href="#Features"> Features</a></li>
<li><a href="#The <code>OUTPUT</code> template"> The OUTPUT template</a></li>
</ul>
</li>
- <li><a href="#Important Note regarding Locks"> Important Note regarding Locks</a></li>
<li><a href="#Settings"> Settings</a></li>
<li><a href="#Plugin Installation Instructions"> Plugin Installation Instructions</a></li>
<li><a href="#Plugin Info"> Plugin Info</a></li>
</tr>
<tr>
<td><code>type</code></td>
- <td> (Required) This is the name of the template to use for this comment. Comment templates are defined in a TWiki template - see [[Main/WebHome#TemPlates]], below. If this attribute is not defined, the type is whatever is defined by COMMENTPLUGIN_DEFAULT_TYPE, either in this topic or in your [[Main/WebPreferences]]. By default this is 'below'. </td>
+ <td> This is the name of the template to use for this comment. Comment templates are defined in a TWiki template - see [[Main/WebHome#TemPlates]], below. If this attribute is not defined, the type is whatever is defined by COMMENTPLUGIN_DEFAULT_TYPE, either in this topic or in your [[Main/WebPreferences]]. By default this is 'below'. </td>
</tr>
<tr>
<td><code>target</code></td>
<td><code>nonotify</code></td>
<td> Set to "on" to disable change notification for target topics </td>
</tr>
+ <tr>
+ <td><code>noform</code></td>
+ <td> Set to "on" to disable the automatic form that encloses your comment block - <em>remember</em> to insert <code><FORM></code> tags yourself! </td>
+ </tr>
</table>
## <a name="Positioning the comment"></a> Positioning the comment
**Warning** of course, if a user's comment contains the string "Flights of Fancy" they may and up _changing the location_ for the next comment! Also, if you use a tag in the location, then you've just inserted another tag in the page that contains the `%COMMENT`! So be very careful how you specify the RE for `location`. Note that the RE is matched using perl "multiple line" mode, so ^ and $ match the start of a line and the end of a line respectively.
+I look forward to someone leveraging this feature to create - for example - threaded conversations using `%COMMENT`.
+
If you specify an anchor _and_ a `location`, the anchor will be ignored.
## <a name="Default templates"></a> Default templates
+Templates are used to define the "comment style" i.e. how comments appear in the page. The default is to add comments in "Blog like" style using bulleted lists, with the most recent comment at the top, but many other styles are available such as tables or Wiki thread mode comments. It is easy to define your own customer styles as well.
+
A set of default comment templates are shipped with the plugin. These are:
<table border="1" cellpadding="0" cellspacing="0">
</tr>
<tr>
<td><code>top</code></td>
- <td> Comments, signed and dated, added at top of the topic (the anchor is ignored) </td>
+ <td> Comments, signed and dated (server time), added at top of the topic (the anchor is ignored) </td>
</tr>
<tr>
<td><code>bottom</code></td>
- <td> Comments, signed and dated, added at end of the target topic (the anchor is ignored) </td>
+ <td> Comments, signed and dated (server time), added at end of the target topic (the anchor is ignored) </td>
</tr>
<tr>
<td><code>above</code></td>
- <td> Comments, signed and dated, added immediately before the target anchor, or the <code>%COMMENT</code> if no anchor is specified </td>
+ <td> Comments, signed and dated (server time), added immediately before the target anchor, or the <code>%COMMENT</code> if no anchor is specified </td>
</tr>
<tr>
<td><code>below</code></td>
- <td> Comments, signed and dated, added immediately below the target anchor, or the <code>%COMMENT</code> if no anchor is specified </td>
+ <td> Comments, signed and dated (server time), added immediately below the target anchor, or the <code>%COMMENT</code> if no anchor is specified </td>
+ </tr>
+ <tr>
+ <td><code>threadmode</code></td>
+ <td> Wiki thread mode comment, signed and dated (server time) </td>
</tr>
<tr>
<td><code>tableprepend</code></td>
- <td> Comments, signed and dated, formatted as an HTML table row, added below the anchor (which must be in an HTML <table>) </td>
+ <td> Comments, signed and dated (server time), formatted as an HTML table row, added below the anchor (which must be in an HTML <table>) </td>
</tr>
<tr>
<td><code>tableappend</code></td>
- <td> Comments, signed and dated, formatted as an HTML table row, added above the anchor (which must be in an HTML <table>) </td>
+ <td> Comments, signed and dated (server time), formatted as an HTML table row, added above the anchor (which must be in an HTML <table>) </td>
</tr>
</table>
- familiarity with HTML forms,
- some familiarity with the [[TWiki templating language|TWiki/TWikiTemplates]].
-The plugin picks up its templates from a standard TWiki template file, named "comments". This allows different templates to be defined for different TWiki skins. This template file may include other template files, or may include a topic from a user web (this is an extension to the normal handling of `%TMPL:INCLUDE` described in the documentation). The shipped plugin defines default templates in `comments.tmpl` and then includes the topic [[CommentsTmpl]]. If you want to define your own templates, add them to [[UserTemplates]]. Note that you can use `%TMPL:INCLUDE` in this file to include other files of templates. Note also that if you want to override any of the default templates shipped with the plugin, you can simply do so by defining them in [[UserTemplates]], and they will replace the installed versions.
-
To define a comment type, you have to provide two simple template definitions in the template file; one for the prompt box, and one for the generated output. If we have a template type "mytype", these are named `PROMPT:mytype` and `OUTPUT:mytype` respectively. See `comments.tmpl` in the templates directory for examples.
+The plugin picks up these template definitions from a standard TWiki template file, `templates/comments.tmpl`. This allows different templates to be defined for different TWiki skins. By default, this template includes the topic [[CommentsTemplate]], which contains all the shipped standard templates and in turn includes TWiki.UserCommentsTemplate. This allows for several levels of customisation:
+
+1. To override all default templates, everywhere, change `comments.tmpl` to include a different topic (this customisation will be lost next time you upgrade, though).
+2. To add site-wide local template customisations, add them to TWiki.UserCommentsTemplate. You can redefine the standard templates here if you want, and your definitions will override the standard definitions.
+3. To override templates on a web-by-web basis, add a topic UserCommentsTemplate to the web (this will replace TWiki.UserCommentsTemplate)
+4. To override templates for a specific skin, add them to TWiki.UserComments<Skin>Template (where <Skin> is the name of the skin with the first letter capitalised, e.g. Pattern)
+
+%X% Templates are picked up by following the [[standard TWiki rules|Main/TWikiTemplates#Finding_Templates]] for locating template files. Note that you can use `%TMPL:INCLUDE` to include other files of templates.
+
## <a name="The <code>PROMPT</code> template"></a> The `PROMPT` template
The `PROMPT` template defines the contents of an HTML form that is used to capture the comment. This form invokes the comment generator when submitted. Parameters to the comment generator are defined using standard HTML input fields, such as `input`, `textarea` and `select`. The user enters values for these parameters, and these are then available when the `OUTPUT` template is expanded, in the form of `%URLPARAM%`s.
-Only the input fields of the form need be defined. The plugin automatically generates the `>form<` and `>:/form<` tags. **Note** that you must define a "submit" button if you want the form to work!
+Only the input fields of the form need be defined. The plugin automatically generates the `>form<` and `>:/form<` tags, unless you specify `noform="on"`, in which case you have to provide them yourself. **Note** that you must define a "submit" button if you want the form to work!
<a name="MoreAttrs"></a> If an attribute is given to the `%COMMENT` tag that is not one of the [[standard attributes|Main/WebHome#StandardAttrs]], then that attribute is taken as the name of a parameter to be expanded in the `PROMPT` template. Expressions in the template of the form `%`_param_`|`_default_`%` (e.g. `%rows|3%`, `%button|Push me%`) are expanded to the values given in the `%COMMENT`. For example, if the `PROMPT` template 'example' contains:
and the %COMMENT tag is:
- %COMMENT{type="example" rows="5" cols="20"}%
+ %COMMENT{type="example" cols="75"}%
then the template will be expanded as
- <textarea rows=5 cols="20" value="Rubbish">
+ <textarea rows="3" cols="75" value="Rubbish">
As well as support for all the usual TWiki variables in templates, the following special variables are supported in the `PROMPT` definition:
</tr>
<tr>
<td><code>%DISABLED%</code></td>
- <td> Set to 'disabled' when you cannot comment (see [[Main/WebHome#HandlingPageLock]], below). </td>
+ <td> Set to 'disabled' when you cannot comment (e.g. in preview mode). </td>
</tr>
</table>
Note that these position tags are obviously mutually exclusive. If you define more than one, the result is undefined. If none is present, the default is taken from the plugin setting `DEFAULT_TYPE`
-<a name="HandlingPageLock"></a>
-
-# <a name="Important Note regarding Locks"></a> Important Note regarding Locks
-
-The plugin checks if the page is locked for edit. When a locked page is displayed in 'view' mode, comment input is automatically disabled.
-
-Note that if the page was read long time ago, it's possible that page was locked by another user **after** it was read, and the lock is still outstanding. In this case, comments cannot be saved, and you will be redirected to a "topic is locked" page. You then have two options:
-
-- **Cancel** - throw away your comment and return to viewing the page.
-- **Back** - **WARNING** some browsers might requery the page and **lose** your comments - so test how your browser behaves before using the Back button.
-
-To help avoid edit conflict, a reminder to refresh the page before entering comments is the default text for a `%COMMENT`. When the target page is known to be locked, the `PROMPT` form is automatically disabled.
+All the usual [[TWikiVariables]] that can be used in a topic template can also be used in an `OUTPUT` template. See [[TWikiVariables]] for details.
# <a name="Settings"></a> Settings
- Description:
- Set SHORTDESCRIPTION = Allows users to quickly post comments to a page without an edit/preview/save cycle.
-- templates; includes user templates from [[CommentsTmpl]]
+- Name of file in the 'templates' directory that contains the comment templates. The default 'comments.tmpl' automatically includes user templates from [[CommentsTmpl]]
- Set TEMPLATES = comments
- default template type (if not present, defaults to "below")
- - Set DEFAULT\_TYPE = above
+ - Set DEFAULT\_TYPE = below
# <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
-\* Make sure you have the TWiki:Plugins/SharedCode module installed. Among other things, TWiki:Plugins/SharedCode includes a compatibility module that enables plugins to use new TWiki features with earlier TWiki releases. If you don't already have it, install it now.
-
-- Download the ZIP file from the Plugin web (see below)
-- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
- <tr>
- <th bgcolor="#99CCCC"><strong> File: </strong></th>
- <th bgcolor="#99CCCC"><strong> Description: </strong></th>
- </tr>
- <tr>
- <td><code><b>data/TWiki/CommentPlugin.txt</b></code></td>
- <td> Plugin doc page (this page) </td>
- </tr>
- <tr>
- <td><code><b>data/TWiki/CommentsTmpl.txt</b></code></td>
- <td> Example user templates </td>
- </tr>
- <tr>
- <td><code><b>templates/comments.tmpl</b></code></td>
- <td> Master comment templates </td>
- </tr>
- <tr>
- <td><code><b>lib/TWiki/Plugins/CommentPlugin.pm</b></code></td>
- <td> Plugin Perl module </td>
- </tr>
- <tr>
- <td><code><b>lib/TWiki/Plugins/CommentPlugin/Comment.pm</b></code></td>
- <td> Plugin Perl module </td>
- </tr>
- <tr>
- <td><code><b>lib/TWiki/Plugins/CommentPlugin/Templates.pm</b></code></td>
- <td> Plugin Perl module </td>
- </tr>
- <tr>
- <td><code><b>lib/TWiki/Plugins/CommentPlugin/test.zip</b></code></td>
- <td> Tests </td>
- </tr>
- <tr>
- <td><code><b>lib/TWiki/Plugins/CommentPlugin/build.pl</b></code></td>
- <td> Build file </td>
- </tr>
-</table>
-
-- The Plugin depends on the `viewauth` script to authenticate the user. As described in [[TWikiAccessControl]], copy the `view` script to `viewauth` (or better, create a symbolic link) and add `viewauth` to the list of authenticated scripts in the `.htaccess` file.
-
-If installed correctly, you should see a `%COMMENT` edit box below here.
-
-<form action="http://www.dementia.org/twiki/save/Sandbox/Comments" enctype="multipart/form-data" id="top0" method="post" name="top0"><input name="comment_action" type="hidden" value="save" /><input name="comment_type" type="hidden" value="top" /><input name="comment_index" type="hidden" value="0" /></form>
+- This plugin is pre-installed in most TWiki releases. However if you need to upgrade the plugin for any reason:
+ - Download the archive file from the Plugin web (see below)
+ - Unpack the archive in your twiki installation directory.
+ - You may need to correct file permissions.
+ - Run <code>**%TOPIC%\_installer**</code> to automatically check and install other modules that this module depends on. You can also do this step manually. Dependencies: None
+ - Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
# <a name="Plugin Info"></a> Plugin Info
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right"> Plugin Author: </td>
- <td> v1.0 TWiki:Main/DavidWeller v2.0 TWiki:Main/PeterMasiar v3.0 TWiki:Main/CrawfordCurrie </td>
- </tr>
- <tr>
- <td align="right"> Plugin Version: </td>
- <td> 3.0 </td>
- </tr>
- <tr>
- <td align="right"> Change History: </td>
- <td> 3.003 11 Apr 2004: Minor line termination problem fixed, and "security" hyphen on standard comment removed and replaced with a bulleted list. </td>
- </tr>
- <tr>
- <td> </td>
- <td> 3.002 6 April 2004: Applied patches (thanks Peter Thoeny) for multiple comment adding, BOTTOM and TOP inside meta-data, and moved example to Sandbox. </td>
- </tr>
- <tr>
- <td> </td>
- <td> 3.001 13 March 2004: Modified to use viewauth save technique (safer), add nonotify parameter, move templates fully into topics, with a hook for site-specifics, support %COMMENT%, internationalisation fixes </td>
- </tr>
- <tr>
- <td> </td>
- <td> 3.000 18 Feb 2004: TWiki:Main/CrawfordCurrie rewrote for standard templates and other user requests. Recognition to Patrice Fournier and Sam Abrams for terrific testing and patch support. </td>
- </tr>
- <tr>
- <td> </td>
- <td> 7 Feb 2004: TWiki:Main/CrawfordCurrie rewrote this page and [[Main/CommentTemplates]] in an effort to make the plugin more user friendly. Added {TIME} variable. Also updated CVS. </td>
- </tr>
- <tr>
- <td> </td>
- <td> 23 Sep 2003 TWiki:Main/PeterMasiar: 80% rewrite/refactor, adding templates </td>
- </tr>
- <tr>
- <td> </td>
- <td> 15 July 2003: TWiki:Main/PeterMasiar added "reminder" parameter and feature to pass comments to oopslockedcomments.tmpl template to copy-paste later </td>
- </tr>
- <tr>
- <td> </td>
- <td> 5 March 2002 Bug fixes, TWiki:Main/JonLambert created oopslockedcomments.tmpl template </td>
- </tr>
- <tr>
- <td> </td>
- <td> 24 Feb 2002 added a few more user requests, made "English" text configurable </td>
- </tr>
- <tr>
- <td> </td>
- <td> 4 Dec 2001: 1.01 release, changed name to [[Main/CommentPlugin]], added $button var, changed textarea WRAP setting to "soft" </td>
+ <td> TWiki:Main.DavidWeller, TWiki:Main.PeterMasiar, TWiki:Main.CrawfordCurrie <a href="http://www.c-dot.co.uk" target="_top">http://www.c-dot.co.uk</a></td>
</tr>
<tr>
- <td> </td>
- <td> 30 Nov 2001: Initial version </td>
+ <td> Change History: </td>
+ <td> Please refer to the TWiki Subversion repository for a complete change history of this plugin. </td>
</tr>
<tr>
<td align="right"> Dependencies: </td>
- <td> </td>
+ <td> None </td>
</tr>
<tr>
<td align="right"> Perl Version: </td>
- <td> 5.0 </td>
+ <td> >= 5.6.1 </td>
</tr>
<tr>
<td align="right"> Plugin Home: </td>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
--- TWiki:Main/DavidWeller - 05 Mar 2002 <br /> -- TWiki:Main/PeterMasiar - 15 Jul 2003, 23 Sep 2003<br /> -- TWiki:Main/CrawfordCurrie - 21 May 2004
+-- TWiki:Main/CrawfordCurrie - 23:00:07 01 February 2006
**_Back to:_** [[TWikiFAQ]]
--- [[PeterThoeny]] - 09 May 2003
+**_Related Topics:_** [[UserDocumentationCategory]]
**_Back to:_** [[TWikiFAQ]]
--- [[PeterThoeny]] - 09 May 2003
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="A List of TWiki Developer Docume"></a> A List of TWiki Developer Documentation
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
**_Note:_** No new revision is created in case you save the same topic again within a certain time frame (default is one hour). You only need to checkmark the "Minor change, don't notify" checkbox once within this time frame, because subsequent save operations do not notify users.
**_Note:_** The initial state of the checkbox can be set to on with the `DONTNOTIFYCHECKBOX` preferences variable. See [[TWikiPreferences]] for more.
+
+**_Related Topics:_** [[UserDocumentationCategory]]
**_Back to:_** [[TWikiFAQ]]
--- [[PeterThoeny]] - 27 Nov 2000 <br />
+**_Related Topics:_** [[UserDocumentationCategory]]
</tr>
<tr>
<td><code>format</code></td>
- <td> The format of one column when editing the table. A cell can be a text input field, or any of these edit field types:%BR% - Text input field (1 line):%BR% <code>| text, <size>, <initial value> |</code> %BR% - Textarea input field:%BR% <code>| textarea, <rows>x<columns>, <initial value> |</code> %BR% - Drop down box: %BR% <code>| select, <size>, <option 1>, <option 2>, etc |</code> %BR% - Fixed label: %BR% <code>| label, 0, <label text> |</code> %BR% - Row number: %BR% <code>| row, <offset> |</code> %BR% - Date: %BR% <code>| date, <size>, <initial value>, <DHTML date format> |</code></td>
+ <td> The format of one column when editing the table. A cell can be a text input field, or any of these edit field types:%BR% • Text input field (1 line):%BR% <code>| text, <size>, <initial value> |</code> %BR% • Textarea input field:%BR% <code>| textarea, <rows>x<columns>, <initial value> |</code> %BR% • Drop down box: %BR% <code>| select, <size>, <option 1>, <option 2>, etc |</code> %BR% • Radio buttons: %BR% <code>| radio, <size*>, <option 1>, <option 2>, etc |</code> %BR% <code>*</code> size indicates the number of buttons per line in edit mode %BR% • Checkboxes: %BR% <code>| checkbox, <size*>, <option 1>, <option 2>, etc |</code> %BR% <code>*</code> size indicates the number of checkboxes per line in edit mode %BR% • Fixed label: %BR% <code>| label, 0, <label text> |</code> %BR% • Row number: %BR% <code>| row, <offset> |</code> %BR% • Date: %BR% <code>| date, <size>, <initial value>, <DHTML date format> |</code></td>
<td><code>"text, 16"</code> %BR% for all cells </td>
</tr>
<tr>
## <a name="Examples"></a> Examples
-Line before table: `%EDITTABLE{ header="|*Nr*|*Text field sandbox*|*Drop down sandbox*|*Timestamp*|" format="| row, -1 | text, 20, init | select, 1, one, two, three, four | label, 0, %SERVERTIME{"$day $mon $year $hour:$min"}% |" changerows="on" }%` <a name="edittable1"></a>
+Line before table: `%EDITTABLE{ format="| row, -1 | text, 20, init | select, 1, one, two, three, four | radio, 3,:-),:-I,:-( | label, 0, %SERVERTIME{"$day $mon $year $hour:$min"}% |" changerows="on" }%` <a name="edittable1"></a>
<div>
<form action="http://www.dementia.org/twiki/viewauth#edittable1" method="post" name="edittable1"><input name="ettablenr" type="hidden" value="1" /> <input name="etedit" type="hidden" value="on" /><table border="1" cellpadding="0" cellspacing="0">
<tr>
<th bgcolor="#99CCCC"><strong> Nr </strong></th>
- <th bgcolor="#99CCCC"><strong> Text field sandbox </strong></th>
- <th bgcolor="#99CCCC"><strong> Drop down sandbox </strong></th>
+ <th bgcolor="#99CCCC"><strong> Text field </strong></th>
+ <th bgcolor="#99CCCC"><strong> Drop down </strong></th>
+ <th bgcolor="#99CCCC"><strong> Mood </strong></th>
<th bgcolor="#99CCCC"><strong> Timestamp </strong></th>
</tr>
<tr>
<td> 1 </td>
<td> hello table </td>
<td> one </td>
+ <td> :-) </td>
<td> 26 Jun 2002 12:30 </td>
</tr>
<tr>
<td> 2 </td>
<td> </td>
<td> two </td>
+ <td> :-( </td>
<td> 27 Jun 2002 12:40 </td>
</tr>
</table><input name="etrows" type="hidden" value="3" /> <input type="submit" value="Edit table" /></form>
</div>
-%RED% **_Note:_** Please use TWiki:Sandbox.EditTablePluginTesting if you want to try out this Plugin %ENDCOLOR%
+%RED% **_Note:_** Please do not save this example table! Use TWiki:Sandbox.EditTablePluginTesting if you want to try out this Plugin %ENDCOLOR%
If this plugin is installed you will see an **[ Edit table ]** button above; if you were to click on it (please don't, use TWiki:Sandbox.EditTablePluginTesting for testing) you get this form:
<table border="1" cellpadding="0" cellspacing="1">
<tr>
<th bgcolor="#99CCCC"> Nr </th>
- <th bgcolor="#99CCCC"> Text field sandbox </th>
- <th bgcolor="#99CCCC"> Drop down sandbox </th>
+ <th bgcolor="#99CCCC"> Text field </th>
+ <th bgcolor="#99CCCC"> Drop down </th>
+ <th bgcolor="#99CCCC"> Mood </th>
<th bgcolor="#99CCCC"> Timestamp </th>
</tr>
<tr>
<option>two</option>
<option>three</option>
<option>four</option></select></td>
- <td bgcolor="#FFFFFF"> 26 Jun 2002 12:30<input name="etcell2x4" type="hidden" value="26 Jun 2002 12:30" /></td>
+ <td bgcolor="#FFFFFF"><input checked name="etcell2x4" type="radio" value=":-)" /> <img alt="smile" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/smile.gif" title="smile" /> <input name="etcell2x4" type="radio" value=":-I" /> <img alt="indifferent" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/indifferent.gif" title="indifferent" /> <input name="etcell2x4" type="radio" value=":-(" /> <img alt="frown" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/frown.gif" title="frown" /></td>
+ <td bgcolor="#FFFFFF"> 26 Jun 2002 12:30<input name="etcell2x5" type="hidden" value="26 Jun 2002 12:30" /></td>
</tr>
<tr>
<td bgcolor="#FFFF99"> 2<input name="etcell3x1" type="hidden" value="2" /></td>
<option selected>two</option>
<option>three</option>
<option>four</option></select></td>
- <td bgcolor="#FFFF99"> 27 Jun 2002 12:40<input name="etcell3x4" type="hidden" value="27 Jun 2002 12:40" /></td>
+ <td bgcolor="#FFFF99"><input name="etcell2x4" type="radio" value=":-)" /> <img alt="smile" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/smile.gif" title="smile" /> <input name="etcell2x4" type="radio" value=":-I" /> <img alt="indifferent" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/indifferent.gif" title="indifferent" /> <input checked name="etcell2x4" type="radio" value=":-(" /> <img alt="frown" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SmiliesPlugin/frown.gif" title="frown" /></td>
+ <td bgcolor="#FFFF99"> 27 Jun 2002 12:40<input name="etcell3x5" type="hidden" value="27 Jun 2002 12:40" /></td>
</tr>
</table><input name="etsave" onclick="return(false);" type="submit" value="Save table" /> <input name="etqsave" onclick="return(false);" type="submit" value="Quiet save" /> <input name="etaddrow" onclick="return(false);" type="submit" value="Add row" /> <input name="etdelrow" onclick="return(false);" type="submit" value="Delete last row" /> <input name="etcancel" onclick="return(false);" type="submit" value="Cancel" /> (demo only, these buttons do not work) </form>
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 01 Aug 2004 </td>
+ <td> 8670 </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 21 Jan 2006: </td>
+ <td> TWiki:Main.CrawfordCurrie ported to TWiki-4.0.0, changed to use [[Main/JSCalendarContrib]]</td>
+ </tr>
+ <tr>
+ <td align="right"> 16 Sep 2004: </td>
+ <td> Added radio buttons and checkbox controls; escaped "|" pipe symbol found in input fields to preserve tables </td>
+ </tr>
+ <tr>
<td align="right"> 01 Aug 2004: </td>
<td> Fixed bug where edittable did not work if at the end of a topic </td>
</tr>
<td> Initial version </td>
</tr>
<tr>
- <td align="right"> CPAN Dependencies: </td>
- <td> none </td>
- </tr>
- <tr>
- <td align="right"> Other Dependencies: </td>
- <td><a href="http://dynarch.com/mishoo/calendar.epl" target="_top">Mishoo DHTML calendar</a> (version 0.9.5 preinstalled); TWiki version 01 Feb 2003 or later </td>
+ <td align="right"> Dependencies: </td>
+ <td> None </td>
</tr>
<tr>
<td align="right"> Perl Version: </td>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
--- TWiki:Main/PeterThoeny - 01 Aug 2004
+-- TWiki:Main/PeterThoeny - 16 Sep 2004
- One line description, is shown in the [[TextFormattingRules]] topic:
- Set SHORTDESCRIPTION = This plugin does nothing, but can be used as a template for your own plugins.
-- Your own setting, i.e.:
+- Your own setting, for example:
- Set EXAMPLE = got it!
- Debug plugin: (See output in `data/debug.txt`)
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 21 Mar 2003 </td>
+ <td> 21 Mar 2004 </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
-**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]], [[DefaultPlugin]]
-
--- TWiki:Main.AndreaSterbini - 27 Feb 2001 %BR% -- TWiki:Main.PeterThoeny - 21 Mar 2004
+**_Related Topics:_** [[DeveloperDocumentationCategory]], [[AdminDocumentationCategory]], [[TWikiPreferences]], [[TWikiPlugins]]
## <a name="What Are Attachments Good For?"></a> What Are Attachments Good For?
-File Attachments can be used to create powerful customized groupware solutions, like file sharing and document management systems, and quick Web page authoring.
+File Attachments can be used to archive data, or to create powerful customized groupware solutions, like file sharing and document management systems, and quick Web page authoring.
### <a name="Document Management System"></a> Document Management System
- The previous upload path is retained for convenience. In case you make some changes to the local file and want to upload it, again you can copy the previous upload path into the Local file field.
- TWiki can limit the file size. This is defined by the `%ATTACHFILESIZELIMIT%` variable of the [[TWikiPreferences]], currently set at %ATTACHFILESIZELIMIT% KB.
- %X% It's not recommended to upload files greater than a few hundred K through a browser. Large files can be extremely slow-loading, and often time out. Use an FTP site for large file uploads.
+- Automatic attachments:
+ - When enabled, all files in a topic's attachment directory are shown as attachments to the topic - even if they were directly copied to the directory and never attached by using an 'Attach' link. This is a convenient way to quickly "attach" files to a topic without uploading them one by one; although at the cost of losing audit trail and version control.
+ - To enable this feature, set the \{AutoAttachPubDir\} configuration option.
+ - **_NOTE:_** The automatic attachment feature can only be used by an administrator who has access to the server's file system.
## <a name="Downloading Files"></a> Downloading Files
3. <code>**Preview**</code>: `%ATTACHURL%/Sample.txt` text appears as: <http://www.dementia.org/twiki//view/%WEB%/%TOPIC%/Sample.txt>, a link to the text file.
- To reference an attachment located in another topic, enter:
- - `%PUBURL%/%WEB%/OtherTopic/Sample.txt` (if it's within the same web)
- - `%PUBURL%/Otherweb/OtherTopic/Sample.txt` (if it's in a different web)
+ - `%PUBURLPATH%/%WEB%/OtherTopic/Sample.txt` (if it's within the same web)
+ - `%PUBURLPATH%/Otherweb/OtherTopic/Sample.txt` (if it's in a different web)
- Attached HTML files and text files can be inlined in a topic. Example:
1. <code>**Attach**</code> file: `Sample.txt`
2. <code>**Edit**</code> topic and write text: `%INCLUDE{"%ATTACHURL%/Sample.txt"}%`
- Content of attached file is shown inlined.
- - Read more in [[IncludeTopicsAndWebPages]].
+ - Read more about INCLUDE in [[TWikiVariables|Main/TWikiVariables#VarINCLUDE]]
- GIF, JPG and PNG images can be attached and shown embedded in a topic. Example:
1. <code>**Attach**</code> file: `Smile.gif`
Files attached to a topic are displayed in a directory table, displayed at the bottom of the page, or optionally, hidden and accessed when you click **Attach**.
-> <table border="1" cellpadding="20" cellspacing="0" width="90%">
+> <table border="1" cellpadding="1" cellspacing="0">
> <tr>
-> <td>
-> <table border="1" cellpadding="1" cellspacing="0">
-> <tr>
-> <th align="center" bgcolor="#99CCCC"><strong><a href="FileAttachment">Attachment</a></strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Action</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Size</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Date</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Who</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Comment</strong></th>
-> </tr>
-> <tr>
-> <td><img align="top" height="16" src="http://www.dementia.org/twiki//view/icn/txt.gif" width="16" /> <a href="http://www.dementia.org/twiki//viewfile/%WEB%/%TOPIC%?rev=&filename=Sample.txt">Sample.txt</a></td>
-> <td><a href="http://www.dementia.org/twiki//attach/%WEB%/%TOPIC%?filename=Sample.txt&revInfo=1">manage</a></td>
-> <td align="right"> 0.1 K </td>
-> <td> 22 Jul 2000 - 19:37 </td>
-> <td><a href="PeterThoeny">PeterThoeny</a></td>
-> <td> Just a sample </td>
-> </tr>
-> <tr>
-> <td><img align="top" hight="16" src="http://www.dementia.org/twiki//view/icn/bmp.gif" width="16" /> <a href="http://www.dementia.org/twiki//viewfile/%WEB%/%TOPIC%?rev=&filename=Smile.gif">Smile.gif</a></td>
-> <td><a href="http://www.dementia.org/twiki//attach/%WEB%/%TOPIC%?filename=Smile.gif&revInfo=1">manage</a></td>
-> <td align="right"> 0.1 K </td>
-> <td> 22 Jul 2000 - 19:38 </td>
-> <td><a href="PeterThoeny">PeterThoeny</a></td>
-> <td> Smiley face </td>
-> </tr>
-> </table>
-> </td>
+> <th align="center" bgcolor="#99CCCC"><strong>I</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Attachment</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Action</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Size</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Date</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Who</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Comment</strong></th>
+> </tr>
+> <tr>
+> <td><img align="top" alt="txt" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/txt.gif" width="16" /></td>
+> <td><a href="http://www.dementia.org/twiki/viewfile/%WEB%/%TOPIC%?rev=&filename=Sample.txt">Sample.txt</a></td>
+> <td><a href="http://www.dementia.org/twiki/attach/%WEB%/%TOPIC%?filename=Sample.txt&revInfo=1">manage</a></td>
+> <td align="right"> 0.1 K </td>
+> <td> 22 Jul 2000 - 19:37 </td>
+> <td><a href="UploadingUser">UploadingUser</a></td>
+> <td> Just a sample </td>
+> </tr>
+> <tr>
+> <td><img align="top" alt="bmp" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/bmp.gif" width="16" /></td>
+> <td><a href="http://www.dementia.org/twiki/viewfile/%WEB%/%TOPIC%?rev=&filename=Smile.gif">Smile.gif</a></td>
+> <td><a href="http://www.dementia.org/twiki/attach/%WEB%/%TOPIC%?filename=Smile.gif&revInfo=1">manage</a></td>
+> <td align="right"> 0.1 K </td>
+> <td> 22 Jul 2000 - 19:38 </td>
+> <td><a href="UploadingUser">UploadingUser</a></td>
+> <td> Smiley face </td>
> </tr>
> </table>
## <a name="File Attachment Controls"></a> File Attachment Controls
-Clicking on a <code>**Manage**</code> link takes you to a new page that looks like this:
+Clicking on a <code>**Manage**</code> link takes you to a new page that looks a bit like this (depending on what [[skin|Main/TWikiSkins]] is selected):
> <form>
> <table border="1" cellpadding="20" cellspacing="0">
> <tr>
> <td>
-> <table border="1" cellpadding="1" cellspacing="0">
-> <tr>
-> <th align="center" bgcolor="#99CCCC"><strong><a href="FileAttachment">Attachment</a></strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Action</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Size</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Date</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Who</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Comment</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong><a href="FileAttribute">Attribute</a></strong></th>
-> </tr>
-> <tr>
-> <td><img align="top" height="16" src="http://www.dementia.org/twiki//view/icn/txt.gif" width="16" /> <a href="http://www.dementia.org/twiki//viewfile/TWiki/%WEB%/%TOPIC%?rev=&filename=Sample.txt">Sample.txt</a></td>
-> <td><a href="http://www.dementia.org/twiki//attach/%WEB%/%TOPIC%?filename=Sample.txt&revInfo=1">manage</a></td>
-> <td align="right"> 0.1 K </td>
-> <td> 22 Jul 2000 - 19:37 </td>
-> <td><a href="PeterThoeny">PeterThoeny</a></td>
-> <td> Just a sample </td>
-> <td align="center"> </td>
-> </tr>
-> <tr>
-> <td><img align="top" height="16" src="http://www.dementia.org/twiki//view/icn/bmp.gif" width="16" /> <a href="http://www.dementia.org/twiki//viewfile/%WEB%/%TOPIC%?rev=&filename=Smile.gif">Smile.gif</a></td>
-> <td><a href="http://www.dementia.org/twiki//attach/%WEB%/%TOPIC%?filename=Smile.gif&revInfo=1">manage</a></td>
-> <td align="right"> 0.1 K </td>
-> <td> 22 Jul 2000 - 19:38 </td>
-> <td><a href="PeterThoeny">PeterThoeny</a></td>
-> <td> Smiley face </td>
-> <td align="center"> </td>
-> </tr>
-> </table>
-> <p>
-> </p>
> <h2>Update attachment <code>Sample.txt</code></h2>
+> <div>
+> <table border="1" cellpadding="1" cellspacing="0">
+> <tr>
+> <th align="center" bgcolor="#99CCCC"><strong>Version</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Action</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Date</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Who</strong></th>
+> <th align="center" bgcolor="#99CCCC"><strong>Comment</strong></th>
+> </tr>
+> <tr>
+> <td> 1 </td>
+> <td><a href="http://www.dementia.org/twiki/viewfile/%WEB%/%TOPIC%?rev=1&filename=Sample.txt">view</a></td>
+> <td> 22 Jul 2000 - 19:37 </td>
+> <td><a href="UploadingUser">UploadingUser</a></td>
+> <td> Just a sample </td>
+> </tr>
+> </table>
+> </div>
> <p>
> </p>
-> <table border="1" cellpadding="1" cellspacing="0">
-> <tr>
-> <th align="center" bgcolor="#99CCCC"><strong>Version</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Action</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Date</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Who</strong></th>
-> <th align="center" bgcolor="#99CCCC"><strong>Comment</strong></th>
-> </tr>
-> <tr>
-> <td> 1.1 </td>
-> <td><a href="http://www.dementia.org/twiki//viewfile/%WEB%/%TOPIC%?rev=1.1&filename=Sample.txt">view</a></td>
-> <td> 2001.08.30.09.28.56 </td>
-> <td><a href="PeterThoeny">PeterThoeny</a></td>
-> <td> </td>
-> </tr>
-> </table>
-> <p>
-> </p>
-> <table width="100%">
-> <tr>
-> <td align="right"> Previous <br /> upload: </td>
-> <td><code>C:\DATA\Sample.txt</code> (<a href="PeterThoeny">PeterThoeny</a>) </td>
-> </tr>
-> <tr>
-> <td align="right"> Local file: </td>
-> <td><input name="filename" type="hidden" value="Sample.txt" /> <input name="filepath" size="50" type="file" value="C:\DATA\Sample.txt" /></td>
-> </tr>
-> <tr>
-> <td align="right"> Comment: </td>
-> <td><input maxlength="50" name="filecomment" size="50" type="text" value="Just a sample" /></td>
-> </tr>
-> <tr>
-> <td align="right"> Link: </td>
-> <td><input name="createlink" type="checkbox" /> Create a link to the attached file at the end of the topic. </td>
-> </tr>
-> <tr>
-> <td align="right"> Hide file: </td>
-> <td><input name="hidefile" type="checkbox" /> Hide attachment in normal topic view. </td>
-> </tr>
-> </table><em>Help text ...</em><p> Topic <b>FileAttachment</b> . { </p><input type="submit" value=" Upload file " /> | <input name="changeproperties" type="submit" value="Change properties" /> | <a href="http://www.dementia.org/twiki//rename/%WEB%/%TOPIC%?attachment=Sample.txt">Move attachment</a> | <a href="FileAttachment">Cancel</a> } </td>
+> <div>
+> <table>
+> <tr>
+> <th>Previous upload</th>
+> <td><code>Sample.txt</code> <span>(<a href="http://visiblearea.com/devtwiki/bin/view/Main/TWikiContributor">TWikiContributor</a>)</span></td>
+> <td>Select a new local file to update this attachment.</td>
+> </tr>
+> <tr>
+> <th> Local file </th>
+> <td><input name="filename" type="hidden" value="Sample.txt" /><input name="filepath" size="30" type="file" value="Sample.txt" /></td>
+> <td> Upload up to 10000 KB. </td>
+> </tr>
+> <tr>
+> <th> Comment </th>
+> <td><input maxlength="256" name="filecomment" size="50" type="text" value="Just a sample" /></td>
+> <td>
+> </td>
+> </tr>
+> <tr>
+> <th> Link </th>
+> <td><input id="createlink" name="createlink" type="checkbox" /><label for="createlink">Create a link to the attached file</label>
+> </td>
+> <td> Images will be displayed, for other attachments a link will be created. </td>
+> </tr>
+> <tr>
+> <th> Hide file </th>
+> <td><input id="hidefile" name="hidefile" type="checkbox" /><label for="hidefile">Do not show attachment in table</label>
+> </td>
+> <td>Attachments will not be shown in topic view page.</td>
+> </tr>
+> <tr>
+> <th>
+> </th>
+> <td colspan="2"><input name="changeproperties" type="submit" value="Change properties only" /></td>
+> </tr>
+> </table>
+> </div>
+> </td>
> </tr>
> </table>
> </form>
## <a name="Known Issues"></a> Known Issues
- Unlike topics, attachments are not locked during editing. As a workaround, you can change the comment to indicate an attachment file is being worked on - the comment on the specific version isn't lost, it's there when you list all versions of the attachment.
+- Attachments are not secured. Anyone can read them if they know the name of the web, topic and attachment.
+
+**_Related Topics:_** [[UserDocumentationCategory]]
-Each [[FileAttachment]] in a Topic has an attribute string. At present only only the hidden attribute is supported. If the attribute includes _h_ then the attachment is considered to be hidden. It is not listed in the topic, but is displayed when attach page is displayed.
+Each [[FileAttachment]] in a Topic has an attribute string. At present only the hidden attribute is supported. If the attribute includes _h_ then the attachment is considered to be hidden. It is not listed in the topic, but is displayed when attach page is displayed.
--- TWiki:Main.JohnTalintyre - 30 Aug 2001
+**_Related Topics:_** [[UserDocumentationCategory]], [[DeveloperDocumentationCategory]]
--- /dev/null
+Normally, if you make subsequent edits within a one hour period (configuration item `ReplaceIfEditedAgainWithin`), %WIKITOOLNAME% will fold together your changes. This is often the "right thing to do", as it can reduce the visual clutter of diffs.
+
+The "Force New Revision" checkbox is a way to force it to create a separate revision each time you save.
+
+The [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] variable `FORCENEWREVISIONCHECKBOX` controls whether this is checked by default or not.
+
+On a related note, you can force **_every_** save to be a new revision number by setting `ReplaceIfEditedAgainWithin` to 0.
+
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
<div>
<ul>
- <li><a href="#TWiki Formatted Search Results"> TWiki Formatted Search Results</a><ul>
+ <li><a href="#TWiki Formatted Search"> TWiki Formatted Search</a><ul>
<li><a href="#Syntax"> Syntax</a></li>
<li><a href="#Examples"> Examples</a><ul>
<li><a href="#Bullet list showing topic name a"> Bullet list showing topic name and summary</a></li>
</ul>
</div>
-# <a name="TWiki Formatted Search Results"></a> TWiki Formatted Search Results
+# <a name="TWiki Formatted Search"></a> TWiki Formatted Search
_Inline search feature allows flexible formatting of search result_
-The <code>[[%SEARCH{...}%|Main/TWikiVariables#VarSEARCH]]</code> variable documented in [[TWikiVariables]] has a fixed format for the search result, that is, a table consisting of topic names and topic summaries. Use the `format="..."` parameter to specify a customized format of the search result. The string of the format parameter is typically a bullet list or table row containing variables (such as `%SEARCH{ "food" format="| $topic | $summary |" }%`).
+The default output format of a <code>[[%SEARCH{...}%|Main/TWikiVariables#VarSEARCH]]</code> is a table consisting of topic names and topic summaries. Use the `format="..."` parameter to customize the search result. The format parameter typically defines a bullet or a table row containing variables, such as `%SEARCH{ "food" format="| $topic | $summary |" }%`.
## <a name="Syntax"></a> Syntax
</tr>
<tr>
<td><code>$date</code></td>
- <td> Time stamp of last topic update, e.g. <code>29 Jun 2010 - 15:46</code></td>
+ <td> Time stamp of last topic update, e.g. <code>29 Jun 2010 - 15:56</code></td>
</tr>
<tr>
<td><code>$isodate</code></td>
- <td> Time stamp of last topic update, e.g. <code>2010-06-29T15:46Z</code></td>
+ <td> Time stamp of last topic update, e.g. <code>2010-06-29T15:56Z</code></td>
</tr>
<tr>
<td><code>$rev</code></td>
- <td> Number of last topic revision, e.g. <code>1.4</code></td>
+ <td> Number of last topic revision, e.g. <code>4</code></td>
</tr>
<tr>
<td><code>$username</code></td>
</tr>
<tr>
<td><code>$createdate</code></td>
- <td> Time stamp of topic revision 1.1 </td>
+ <td> Time stamp of topic revision 1 </td>
</tr>
<tr>
<td><code>$createusername</code></td>
- <td> Login name of topic revision 1.1, e.g. <code>jsmith</code></td>
+ <td> Login name of topic revision 1, e.g. <code>jsmith</code></td>
</tr>
<tr>
<td><code>$createwikiname</code></td>
- <td> Wiki user name of topic revision 1.1, e.g. <code>JohnSmith</code></td>
+ <td> Wiki user name of topic revision 1, e.g. <code>JohnSmith</code></td>
</tr>
<tr>
<td><code>$createwikiusername</code></td>
- <td> Wiki user name of topic revision 1.1, e.g. <code>Main.JohnSmith</code></td>
+ <td> Wiki user name of topic revision 1, e.g. <code>Main.JohnSmith</code></td>
</tr>
<tr>
<td><code>$summary</code></td>
- <td> Topic summary </td>
+ <td> Topic summary, just the plain text, all formatting and line breaks removed; up to 162 characters </td>
+ </tr>
+ <tr>
+ <td><code>$summary(50)</code></td>
+ <td> Topic summary, up to 50 characters shown </td>
+ </tr>
+ <tr>
+ <td><code>$summary(showvarnames)</code></td>
+ <td> Topic summary, with <code>%ALLTWIKI{...}%</code> variables shown as <code>ALLTWIKI{...}</code></td>
+ </tr>
+ <tr>
+ <td><code>$summary(noheader)</code></td>
+ <td> Topic summary, with leading <code>---+ headers</code> removed%BR% <strong><em>Note:</em></strong> The tokens can be combined, for example <code>$summary(100, showvarnames, noheader)</code></td>
+ </tr>
+ <tr>
+ <td><code>$changes</code></td>
+ <td> Summary of changes between latest rev and previous rev </td>
+ </tr>
+ <tr>
+ <td><code>$changes(n)</code></td>
+ <td> Summary of changes between latest rev and rev n </td>
</tr>
<tr>
<td><code>$formname</code></td>
</tr>
<tr>
<td><code>$pattern(reg-exp)</code></td>
- <td> A regular expression pattern to extract some text from a topic (does not search meta data; use <code>$formfield</code> instead). In case of a <code>multiple="on"</code> search, the pattern is applied to the line found in each search hit.%BB% Specify a [[Main/RegularExpression]] that covers the whole text (topic or line), which typically starts with <code>.*</code>, and must end in <code>.*</code> %BB% Put text you want to keep in parenthesis, like <code>$pattern(.*?(from here.*?to here).*)</code> %BB% Example: <code>$pattern(.*?\*.*?Email\:\s*([^\n\r]+).*)</code> extracts the email address from a bullet of format <code>* Email: ...</code> %BB% This example has non-greedy <code>.*?</code> patterns to scan for the first occurance of the Email bullet; use greedy <code>.*</code> patterns to scan for the last occurance %BB% Limitation: Do not use <code>.*)</code> inside the pattern, e.g. <code>$pattern(.*foo(.*)bar.*)</code> does not work, but <code>$pattern(.*foo(.*?)bar.*)</code> does %BB% Note: Make sure that the integrity of a web page is not compromised; for example, if you include an HTML table make sure to include everything including the table end tag </td>
+ <td> A regular expression pattern to extract some text from a topic (does not search meta data; use <code>$formfield</code> instead). In case of a <code>multiple="on"</code> search, the pattern is applied to the line found in each search hit.%BB% Specify a [[Main/RegularExpression]] that covers the whole text (topic or line), which typically starts with <code>.*</code>, and must end in <code>.*</code> %BB% Put text you want to keep in parenthesis, like <code>$pattern(.*?(from here.*?to here).*)</code> %BB% Example: <code>$pattern(.*?\*.*?Email\:\s*([^\n\r]+).*)</code> extracts the e-mail address from a bullet of format <code>* Email: ...</code> %BB% This example has non-greedy <code>.*?</code> patterns to scan for the first occurance of the Email bullet; use greedy <code>.*</code> patterns to scan for the last occurance %BB% Limitation: Do not use <code>.*)</code> inside the pattern, e.g. <code>$pattern(.*foo(.*)bar.*)</code> does not work, but <code>$pattern(.*foo(.*?)bar.*)</code> does %BB% Note: Make sure that the integrity of a web page is not compromised; for example, if you include an HTML table make sure to include everything including the table end tag </td>
+ </tr>
+ <tr>
+ <td><code>$count(reg-exp)</code></td>
+ <td> Count of number of times a regular expression pattern appears in the text of a topic (does not search meta data). Follows guidelines for use and limitations outlined above under <code>$pattern(reg-exp)</code>. Example: <code>$count(.*?(---[+][+][+][+]) .*)</code> counts the number of <H4> headers in a page. </td>
</tr>
<tr>
<td><code>$n</code> or <code>$n()</code></td>
- <td> New line </td>
+ <td> New line. Use <code>$n()</code> if followed by alphanumeric character, e.g. write <code>Foo$n()Bar</code> instead of <code>Foo$nBar</code></td>
</tr>
<tr>
<td><code>$nop</code> or <code>$nop()</code></td>
<th bgcolor="#99CCCC"><strong>OsVersion:</strong></th>
</tr>
<tr>
- <td><a href="http://www.dementia.org/twiki//view/Sandbox/IncorrectDllVersionW32PTH10DLL">IncorrectDllVersionW32PTH10DLL</a></td>
- <td><a href="http://www.dementia.org/twiki//view/Sandbox/OsWin">OsWin</a></td>
+ <td>[[Sandbox/IncorrectDllVersionW32PTH10DLL]]</td>
+ <td>[[Sandbox/OsWin]]</td>
<td> 95/98 </td>
</tr>
<tr>
- <td><a href="http://www.dementia.org/twiki//view/Sandbox/WinDoze95Crash">WinDoze95Crash</a></td>
- <td><a href="http://www.dementia.org/twiki//view/Sandbox/OsWin">OsWin</a></td>
+ <td>[[Sandbox/WinDoze95Crash]]</td>
+ <td>[[Sandbox/OsWin]]</td>
<td> 95 </td>
</tr>
</table>
**Write this:**
- <form action="%SCRIPTURLPATH%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%">
+ <form action="%SCRIPTURLPATH{"view"}%/%WEB%/%TOPIC%">
Find Topics:
- <input type="text" name="q" size="32" value="%URLPARAM{"q"}%" />
- <input type="submit" value="Search" />
+ <input type="text" name="q" size="32" value="%URLPARAM{"q"}%" /> <input type="submit" class="twikiSubmit" value="Search" />
</form>
Result:
%SEARCH{ search="%URLPARAM{"q"}%" format=" * $web.$topic: %BR% $summary" nosearch="on" }%
**To get this:**
-<form action="http://www.dementia.org/twiki//view/%WEB%/%TOPIC%"> Find Topics: <input name="q" size="32" type="text" value="" /> <input type="submit" value="Search" /></form>
+<form action="http://www.dementia.org/twiki/view/%WEB%/%TOPIC%"> Find Topics: <input name="q" size="32" type="text" value="" /> <input type="submit" value="Search" /></form>
Result:
Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
--- TWiki:Main.PeterThoeny - 26 Jul 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details, published at <http://www.gnu.org/copyleft/gpl.html>
-Please note that TWiki is not distributed under the LGPL (Lesser General Public Licence), which implies TWiki can only be used with software that is licensed under conditions compliant with the GPL. Embedding in proprietary software requires an alternative license. Contact the author for details.
-
**_Back to:_** [[TWikiFAQ]]
--- TWiki:Main.PeterThoeny - 27 Nov 2000
+**_Related Topics:_** [[UserDocumentationCategory]]
# <a name="Go Box"></a> Go Box
-The box at the top or sidebar of each page.
+The box at the top or sidebar of each page, also called Jump box.
Enter a topic name to quickly jump to the topic, for example:
**_Note:_** The Go box is not a search box
--- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
- **TIP:** Check the source when you want to find out how something is formatted: click <code>**Edit**</code> on the lower toolbar. To see earlier versions, click <code>**More**</code>, then check <code>**Raw text format**</code> and click <code>**View revision**</code>. A bit of HTML experience can't hurt, but you'll soon see with [[TWikiShorthand]] how far that is from necessary.
--- TWiki:Main.MikeMannix - 01 Dec 2001 %BR% -- TWiki:Main.PeterThoeny - 13 Mar 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
- enable the **Hide file** checkbox,
- then click **Change properties**
--- [[PeterThoeny]] - 13 Nov 2001
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+The `%IF%` construct gives TWiki the power to include content in topics based on the value of simple expressions.
+
+`%IF{"CONDITION" then="THEN" else="ELSE"}%`
+
+In the example above, if CONDITION evaluates to TRUE, then THEN will be included in the topic; otherwise ELSE will be included.
+
+What can be included in the THEN and ELSE parameters is obviously limited by standard TWiki syntax for parameters. The best way to use this feature is to define two [[TWikiVariables]], one for the THEN case and the other for the ELSE case. For example:
+
+ <!--
+ * Set LI = Fred is here!
+ * Set LO = Fred is there!
+ -->
+ %IF{"context authenticated and defined WIKINAME and $ WIKINAME='FredBloggs'" then="%LI%" else="%LO%"}%
+
+The basic syntax of a condition is as follows:
+
+ expr ::= '(' expr ')' ;
+ expr ::= andexpr | andexpr 'or' expr ;
+ andexpr ::= notexpr | notexpr 'and' andexpr ;
+ notexpr ::= basexpr | 'not' baseexpr ;
+ basexpr ::= atom | uop atom | atom bop basexpr ;
+ uop ::= 'context' | 'defined' | '$' ;
+ bop ::= '=' | '!=' | '>' | '<' | '>=' | '<=' ;
+ atom ::= context identifier, TWiki variable name, single-quoted string
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC" colspan="2"><strong> Operators </strong></th>
+ </tr>
+ <tr>
+ <td> and </td>
+ <td> True if both sides are true </td>
+ </tr>
+ <tr>
+ <td> or </td>
+ <td> True if one or other side is true </td>
+ </tr>
+ <tr>
+ <td> not </td>
+ <td> negate the following expression </td>
+ </tr>
+ <tr>
+ <td> =, != </td>
+ <td> String comparison </td>
+ </tr>
+ <tr>
+ <td> <, >, <=, >= </td>
+ <td> Number comparison (there is no explicit numeric =) </td>
+ </tr>
+ <tr>
+ <td> context </td>
+ <td> True if the current context is set (see below) </td>
+ </tr>
+ <tr>
+ <td> defined </td>
+ <td> True if a preference variable or url parameter of this name is defined. </td>
+ </tr>
+ <tr>
+ <td> $ </td>
+ <td> expands a URL parameter or [[Main/TWikiVariables]]. Plugin handlers <strong>are not called</strong>. Built-in variables and user-defined preferences are supported. You can pass a limited subset of parameters to TWiki variables by enclosing the variable name in single quotes; for example, <code>$ 'VARIABLE{value}'</code>. The quoted string may <strong>not</strong> contain quotes (' or "). </td>
+ </tr>
+</table>
+
+examples:
+
+ %IF{"defined WIKINAME" then="WIKINAME is defined" else="WIKINAME is not defined"}%
+
+ You are %IF{ "$ WIKINAME='TWikiGuest' and not defined OPEN_DAY" then="not" }% allowed to
+ %IF{ "context view" then="view" else="edit"}% this TWiki today.
+
+ %IF{ "defined search" then="Search: %URLPARAM{search}%" else="No search passed in"}%
+
+ url param t is %IF{ "0 < $ t and $ t < 1000" then="in" else="out of"}% range.
+
+ %IF{ "$'URLPARAM{scope}'='text'" then="Plain text search" }%
+
+Given
+
+- Set OPEN\_DAY = yes
+
+this expands to:
+
+You are allowed to edit this TWiki today.
+
+Context identifiers are used in TWiki to label various stages of the rendering process. They are especially useful for [[skin|Main/TWikiSkins]] authors to find out where they are in the rendering process. The following context identifiers are available:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> id </strong></th>
+ <th bgcolor="#99CCCC"><strong> context </strong></th>
+ </tr>
+ <tr>
+ <td> absolute_urls </td>
+ <td> Set if absolute URLs are required </td>
+ </tr>
+ <tr>
+ <td> authenticated </td>
+ <td> a user is authenticated </td>
+ </tr>
+ <tr>
+ <td> body_text </td>
+ <td> when the body text is being processed in a view (useful in plugin handlers) </td>
+ </tr>
+ <tr>
+ <td> can_login </td>
+ <td> current environment supports login </td>
+ </tr>
+ <tr>
+ <td> changes </td>
+ <td> in changes script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> command_line </td>
+ <td> the running script was run from the command line, and not from CGI </td>
+ </tr>
+ <tr>
+ <td> diff </td>
+ <td> in rdiff script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> edit </td>
+ <td> in edit script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> footer_text </td>
+ <td> when the footer text is being processed in a view (useful in plugin handlers) </td>
+ </tr>
+ <tr>
+ <td> header_text </td>
+ <td> when the header text is being processed in a view (useful in plugin handlers) </td>
+ </tr>
+ <tr>
+ <td> i18n_enabled </td>
+ <td> when user interface [[Main/I18N]] support is enabled (i.e., user can choose the language for UI) </td>
+ </tr>
+ <tr>
+ <td> inactive </td>
+ <td> if active links such as 'edit' and 'attach' should be disabled </td>
+ </tr>
+ <tr>
+ <td> mirror </td>
+ <td> if this is a mirror </td>
+ </tr>
+ <tr>
+ <td> new_topic </td>
+ <td> if the topic doesn't already exist </td>
+ </tr>
+ <tr>
+ <td> oops </td>
+ <td> in oops script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> preview </td>
+ <td> in preview script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> rss </td>
+ <td> if this is an RSS skin rendering </td>
+ </tr>
+ <tr>
+ <td> save </td>
+ <td> in save script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> search </td>
+ <td> in search script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> view </td>
+ <td> in view script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+ <tr>
+ <td> rest </td>
+ <td> in rest script (see [[Main/TWikiScripts]]) </td>
+ </tr>
+</table>
+
+In addition there is an identifier for each enabled plugin; for example, if `GallousBreeksPlugin` is installed **and enabled**, then the context ID `GallousBreeksPluginEnabled` will be set.
+
+The `%IF%` statement is deliberately kept simple. In particular, note that there is no way to conditionally execute a Set statement. If you need more sophisticated control over formatting, then consider using the [[SpreadSheetPlugin]].
-# <a name="Include Topics and Web Pages Usi"></a><a name=" Include Topics and Web Pages Us"></a> Include Topics and Web Pages Using <code>**%INCLUDE\{...\}%**</code> Variable
+# <a name="Include Topics and Web Pages Usi"></a><a name=" Include Topics and Web Pages Us"></a> Include Topics and Web Pages Using `%INCLUDE{...}%` Variable
-Use the <code>**%INCLUDE\{...\}%**</code> variable to embed the content of another topic or web page inside a %WIKITOOLNAME% topic. The whole content or only parts of a page can be included. If needed, set a proxy server in [[TWikiPreferences]].
+Use the `%INCLUDE{...}%` variable to embed the content of another topic or web page inside a TWiki topic. The whole content or only parts of a page can be included. If needed, set a proxy server in [[TWikiPreferences]].
<div>
<ul>
- <li><a href="#Syntax"> Syntax</a></li>
+ <li><a href="#Syntax Example"> Syntax Example</a></li>
<li><a href="#Usage Examples"> Usage Examples</a><ul>
<li><a href="#1. Display regression test resul"> 1. Display regression test results in a TWiki page</a></li>
<li><a href="#2. Display Google's robot.txt fi"> 2. Display Google's robot.txt file</a></li>
</ul>
</div>
-## <a name="Syntax"></a> Syntax
+## <a name="Syntax Example"></a> Syntax Example
-<code>**%INCLUDE\{ "page" pattern="reg-exp" rev="1.2" \}%**</code>
+`%INCLUDE{ "page" pattern="reg-exp" rev="2" warn="off" section="clients" }%`
-- <code>**"page"**</code>: %BR% The nameless parameter specifies the page to include. It is
- - The name of a topic located in the current web, e.g., <code>**%INCLUDE\{"WebNotify"\}%**</code>
- - A `Web.Topic` name specifying a topic in another web, e.g., <code>**%INCLUDE\{"TWiki.SiteMap"\}%**</code>
- - A full qualified URL with <code>**http**</code> protocol, domain name and optional port number, e.g., <code>**%INCLUDE\{"http://twiki.org:80/index.html"\}%**</code>. Supported content types are <code>**text/html**</code> and <code>**text/plain**</code>. The full page is included by default, but the HTML header and scripts are stripped in case it is a web page.
+The `pattern` parameter is optional and allows you to extract some parts of a web page. Specify a [[RegularExpression]] that scans from start (`'^'`) to end and contains the text you want to keep in parenthesis, e.g., `pattern="^.*?(from here.*?to here).*"`. You need to make sure that the integrity of a web page is not compromised; for example, if you include a table, make sure to include everything including the table end tag.
-- <code>**pattern="reg-exp"**</code>: %BR% The **pattern** parameter is optional and allows you to extract some parts of a web page. Specify a [[RegularExpression]] that scans from start (`'^'`) to end and contains the text you want to keep in parenthesis, e.g., <code>**pattern="^.\*?(from here.\*?to here).\*"**</code>. You need to make sure that the integrity of a web page is not compromised; for example, if you include a table, make sure to include everything including the table end tag.
+[[TWikiVariables#VarINCLUDE]] explains the other parameters.
-- <code>**rev="1.x"**</code>: %BR% The **rev** parameter is optional and allows you to include an earlier revision of a topic. This can be used to include an official version of a topic, e.g. one that has been signed of by management. This parameter does not apply to URLs.
-
-**_Note:_** All text of a topic is included unless you specify <code>**%STARTINCLUDE%**</code>, <code>**%STOPINCLUDE%**</code> and/or a **pattern** parameter. A pattern will only search between <code>**%STARTINCLUDE%**</code> and <code>**%STOPINCLUDE%**</code>.
+**_Note:_** All text of a topic is included unless it contains a `%STARTINCLUDE%` and `%STOPINCLUDE%`, or you specify a `section` parameter and/or a `pattern` parameter. A pattern will only search between `%STARTINCLUDE%` and `%STOPINCLUDE%`.
## <a name="Usage Examples"></a> Usage Examples
### <a name="2. Display Google's robot.txt fi"></a> 2. Display Google's robot.txt file
-- You type:
- - <code>**%INCLUDE\{"http://www.google.com/robots.txt"\}%**</code>
+ %INCLUDE{"http://www.google.com/robots.txt"}%
### <a name="3. Display the current time in T"></a> 3. Display the current time in Tokyo in a TWiki page
- You get:
- Tokyo:
-See also other [[TWikiVariables]].
-
--- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Related Topics:_** [[TWikiVariables#VarINCLUDE]], [[UserDocumentationCategory]]
# <a name="Installed Plugins"></a> Installed Plugins
-Plugins are mainly user-contributed add-ons that enhance and extend TWiki features and capabilities. A limited number of plugins are included in the core TWiki distribution - and most those can be removed - while the rest are optional, available from TWiki:Plugins/WebHome.
+Plugins are mainly user-contributed add-ons that enhance and extend TWiki features and capabilities. A limited number of plugins are included in the core TWiki distribution - and any those can be removed - while the rest are optional, available from TWiki:Plugins.PluginPackage.
Here is a list of the plugins currently installed and enabled on this TWiki site:
- [[TablePlugin]] <span>(1.020, 12339)</span>:
- [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
+Administrators can enable and disable plugins using [<img src="http://www.dementia.org/twiki//view/Main/WebHome/wrench.gif" width="16" height="16" alt="wrench" /> configure](http://www.dementia.org/twiki/configure).
+
+## <a name="Contrib Modules"></a> Contrib Modules
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
# <a name="Plugin Diagnostics"></a> Plugin Diagnostics
<table border="1">
**_Note:_** The diagnostics are provided by the `%FAILEDPLUGINS%` variable
-**_Related Topics:_** [[TWikiPlugins]], [[TWikiPreferences]]
-
--- TWiki:Main.MikeMannix - 12 May 2002 %BR% -- TWiki:Main.PeterThoeny - 18 May 2004
+**_Related Topics:_** [[TWikiPlugins]], [[TWikiPreferences]], [[AdminDocumentationCategory]], [[AdminToolsCategory]]
# <a name="Instant TWiki Site Enhancements"></a><a name=" Instant TWiki Site Enhancements"></a> Instant TWiki Site Enhancements
-These quick enhancements are aimed at improving TWiki's ease-of-use. New TWiki site administrators are especially encouraged to review this document for ideas before deploying a new [[TWikiSite]]. The metaphor of building a house is useful. The listed enhancements are some of the details possible when moving into a new office or home. These small changes can make a **big** differences for user satisfaction at your site. All modifications can be done through your Web browser, and they don't take more then in a couple of minutes. No system administration expertise is required. Some of these enhancements are also mentioned in the reference manual and other topics.
+These quick enhancements are aimed at improving and customising your TWiki. New TWiki site administrators are especially encouraged to review this document for ideas before deploying a new [[TWikiSite]]. The metaphor of building a house is useful. The listed enhancements are some of the details possible when moving into a new office or home. These small changes can make a **big** differences for user satisfaction at your site. All modifications can be done through your Web browser, and they don't take more then in a couple of minutes. No system administration expertise is required. Some of these enhancements are also mentioned in the reference manual and other topics.
Many of these tips are based on setting some special [[TWikiVariables]].
-%S% We recommend implementing at least **_some_** of these enhancements **_right after installation_**, to get a taste for what is possible. Some of these tips and enhancements _should_ be implemented before or during initial roll-out.
+%S% We recommend implementing at least **_some_** of these enhancements **_right after installation_** to get a taste for what is possible. Some of these tips and enhancements _should_ be implemented before or during initial roll-out.
-This may spark your imagination to **really** customize your site so that it's optimal for **your** users. Slightly more advanced customization tips are listed in [[TWikiAdminCookBook]].
+This may spark your imagination to **really** customize your site so that it's optimal for **your** users. Slightly more advanced customization tips are listed in TWiki:TWiki.TWikiAdminCookBook.
<div>
<ul>
- <li><a href="#Tips using _TWikiVariables"> Tips using TWikiVariables</a><ul>
+ <li><a href="#Tips using TWiki Variables"> Tips using TWiki Variables</a><ul>
<li><a href="#Change Colors of Page Header/Foo"> Change Colors of Page Header/Footer</a></li>
<li><a href="#Set Page Background Color"> Set Page Background Color </a></li>
- <li><a href="#Titles-Only Topic List - _WebTop"> Titles-Only Topic List - WebTopicList</a></li>
+ <li><a href="#Titles-Only Topic List - _WebTo"> Titles-Only Topic List - WebTopicList</a></li>
<li><a href="#Simple way to create %RED% color"> Simple way to create %RED% colored text %ENDCOLOR% and graphics</a></li>
<li><a href="#EZ Graphic Icons to Highlight Te"> EZ Graphic Icons to Highlight Text</a></li>
<li><a href="#Use TOC variable to create table"> Use TOC variable to create table of content</a></li>
</ul>
</li>
<li><a href="#Hidden Edit Lock for Individual"> Hidden Edit Lock for Individual Topics</a></li>
- <li><a href="#Change the Default Site Logo"> Change the Default Site Logo</a></li>
+ <li><a href="#Change the Default Logo"> Change the Default Logo</a></li>
<li><a href="#Customize Topic Classification F"> Customize Topic Classification Forms</a></li>
<li><a href="#Add Your Favorite _JavaScript Fe"> Add Your Favorite JavaScript Features</a></li>
+ <li><a href="#Customize The Left Navigation Ba"> Customize The Left Navigation Bar</a></li>
</ul>
</div>
----
-## <a name="Tips using _TWikiVariables"></a> Tips using [[TWikiVariables]]
+## <a name="Tips using TWiki Variables"></a> Tips using TWiki Variables
-You need to know what is the variable name, and in what page is/should be defined.
+[[TWikiVariables]] are a great resource to customize your site. You need to know the variable name and decide where to put it.
### <a name="Change Colors of Page Header/Foo"></a> Change Colors of Page Header/Footer
### <a name="Set Page Background Color"></a> Set Page Background Color
-Without getting into the [[TWikiTemplates]] system yet, you can easily edit the <code>**view.tmpl**</code> (in the `templates` directory). In the HTML at the top, the body tag has the page background hardcoded to white <code>**bgcolor="#ffffff"**</code>. You can change that color value to new variable. First, define a new preferences variable in the site-level [[TWikiPreferences]], e.g. `* Set =PAGEBGCOLOR = #d0d0d0`, then edit the <code>**view.tmpl**</code> template file and change <code>**bgcolor="#ffffff"**</code> to <code>**bgcolor="%PAGEBGCOLOR%"**</code>. If you want you can set the page background color individualy per web, simple add a `* Set =PAGEBGCOLOR = #d0d0d0` bullet to the [[WebPreferences]] to overload the site-level preferences. (Without font color control, you'll have to stick to light colors.
+Without getting into the [[TWikiTemplates]] system yet, you can easily edit the <code>**view.tmpl**</code> (in the `templates` directory). In the HTML at the top, the body tag has the page background hardcoded to white <code>**bgcolor="#ffffff"**</code>. You can change that color value to new variable. First, define a new preferences variable in the site-level [[Main.TWikiPreferences|Main/TWikiPreferences]], e.g. `* Set =PAGEBGCOLOR = #d0d0d0`, then edit the <code>**view.tmpl**</code> template file and change <code>**bgcolor="#ffffff"**</code> to <code>**bgcolor="%PAGEBGCOLOR%"**</code>. If you want, you can set the page background color individually per web, simple add a `* Set =PAGEBGCOLOR = #d0d0d0` bullet to the [[WebPreferences]] to overload the site-level preferences. (Without font color control, you'll have to stick to light colors.)
-### <a name="Titles-Only Topic List - _WebTop"></a> Titles-Only Topic List - [[WebTopicList]]
+### <a name="Titles-Only Topic List - _WebTop"></a> Titles-Only Topic List - WebTopicList
-**_A good first navigation tool for new users,_** a fast-loading linked list (page titles only) of a web's topics is a quick and easy way see what's available. By default, slower, but more powerfull [[WebIndex]] is used.
+[[WebTopicList]] is a **_good first navigation tool for new users,_** a fast-loading linked list (page titles only) of a web's topics is a quick and easy way see what's available. By default, slower, but more powerful [[WebIndex]] is used.
Without explaining what WEBTOPICLIST is, just try it:
### <a name="EZ Graphic Icons to Highlight Te"></a> EZ Graphic Icons to Highlight Text
-Graphics in text (like this: %X%) is done also by defining special variables. See [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]]. Some may prefer longer names, like `HELP`, `WARN` etc. You can also add your own images, e.g. a `NEW`, or a `ASK` to ask question.
+Icons can do a lot to enhance scannability of topics. For instance, on **HELP** pages, most people tend to jump around looking for answers rather than reading through - icons help point out the most important bits.
-%T% Using graphic icons to highlight important text right from the start can seriously improve how well new users take to a TWiki site. A minimum set of two or three icons can make content much easier to follow, eye-catching, EXCITING. Research says, people tend not to read pages through, but scan them first - and graphics (used sparringly ;-) of course) can help them. On **HELP** pages, most people tend to jump around looking for answers rather than reading through - icons help point out the most important bits.
+[[TWikiDocGraphics]] has a whole collection of ready icon images. You can use these images in any topic by referring to their name. For example, TWikiDocGraphics has an image attachment called `days.gif`. To show this image in a topic, write `%ICON{"days"}%` to get <img src="http://www.dementia.org/twiki//view/Main/WebHome/days.gif" width="16" height="16" alt="days" />.
-**How to create your own set of icons:**
+**Creating image variables**
-1. Go to the <code>**Preferences**</code> topic: [[TWikiPreferences]] for site-wide use, or [[WebPreferences]] for use in one web only.
-2. <code>**Attach**</code> a graphic (the ones on this page are 16x16 pixels), then define a Preference Variable with a short but recognizable name.
+You may find it easier to write shorthand graphic notation. You can create your own image variables by defining them in a preference topic (most likely [[Main.TWikiPreferences|Main/TWikiPreferences]].)
+
+A variable name may be one letter, like `Y`, or may be longer like `HELP`, `WARN` etc. You can also add your own images, e.g. a `NEW`, or a `ASK` to ask question.
+
+For instance, if we want to write `%DOWN%` instead of `%ICON{"arrowbdown"}%`, define the new variable like this:
+
+ * Set DOWN = %ICON{"arrowbdown"}%
+
+Or if you have a custom image to use, attach this to [[Main.TWikiPreferences|Main/TWikiPreferences]] and write:
+
+ * Set DOWN = <img src="%ATTACHURL%/my_image.gif" border="0" alt="DOWN" width="16" height="16" />
+
+Most images in [[TWikiDocGraphics]] are 16 x 16 pixels.
-- **_Example:_** Enter `%TEST%` to get %TEST% - see how it's [[done|Main/WebPreferences#DefineIcon]].
-- %T% Ideas for quick icons: NEW; UPDATE; a STAR or other bullet; key symbols relating to your site content.
-- For documentation and help, this [[TWiki|TWiki/WebHome]] web uses three main icons: %H% for **HELP**, %T% for **TIP**, %X% for **IMPORTANT**.
- **_Related:_** There are other approaches for creating more extensive TWiki icon libraries. This is a simply and quick way to get started. See [[TWikiDocGraphics]] for more info.
### <a name="Use TOC variable to create table"></a> Use TOC variable to create table of content
TOC is Table-Of-Content, generated automagically from headers (defined like that: <code>**---++**</code> , see [[TWikiShorthand]]).
-For example, you may want to put all your custom variables in [[TWikiPreferences]] right on top of the page, and generate table of contens, like:
+For example, you may want to put all your custom variables in [[Main.TWikiPreferences|Main/TWikiPreferences]] right on top of the page, and generate table of contents, like:
- Preferences for easy creating nice pages
- Graphics icons in text
## <a name="Personal Productivity - Tools an"></a> Personal Productivity - Tools and Tips for Working Faster
-Although this area applies to all TWiki set-ups, the initial focus is on TWiki site managers working on a Linux/Apache TWiki site, from a Windows local PC. The assumption being: if you're working with Linux as your desktop, you're probably a programmer or system admin and have these basics handled!
+Although this area applies to all TWiki setups, the initial focus is on TWiki site managers working on a Linux/Apache TWiki site, from a Windows local PC. The assumption being: if you're working with Linux as your desktop, you're probably a programmer or system admin and have these basics handled!
### <a name="Use your favorite text editor fo"></a> Use your favorite text editor for major edits
**_Browser Integration:_** Some web browsers can be configured to automatically use an external editor. See your browser documentation for details. Such a configuration and a small tool for Linux is described in an example on TWiki.org. TWiki:Codev/EditDaemonWithGVimIntegration
-**_Alternate Browser:_** While your main browser might not have the features for TWikic topic editing, another one might.
+**_Alternate Browser:_** While your main browser might not have the features for TWiki topic editing, another one might.
- An example on the Linux platform is the `w3m` pager/browser for Linux. This is a text based version similar to `lynx` but it includes text editor features and a configurable command set to act like `lynx` if you are more accustomed to it.
### <a name="Recently changed pages"></a> Recently changed pages
-Here, last 15 is formatted into neat table.
+Here are the last 15 changed pages, formatted into a neat table.
<table>
%SEARCH{ "\.*" scope="topic" regex="on" nosearch="on" nototal="on" order="modified" reverse="on" format="<tr><td> [[$topic][$topic]] </td><td> $wikiusername </td><td> $date </td></tr>" limit="15" }%
- **_Example:_** <code>**Set ALLOWTOPICCHANGE = Main.UserName, Main.GroupName**</code>
- %T% **To hide the setting:** Use HTML comment tags - put <code>**<!--**</code> on the line \_above the setting, and <code>**-->**</code> on the line below.
-- _This is in the regular help files but worth highlighting._
----
-## <a name="Change the Default Site Logo"></a> Change the Default Site Logo
+## <a name="Change the Default Logo"></a> Change the Default Logo
+
+If you want to change the logo per TWiki web, simply attach a new logo.gif to the web's WebPreferences, and change the logo's filename by overriding the name using WEBLOGONAME in WebPreferences:
-If you want to change the default TWiki logo, attach a new graphic to a topic of choice and change the WIKILOGOIMG variable in the [[TWikiPreferences]], e.g.
+- `Set WEBLOGONAME = filename.gif`
-- `Set WIKILOGOIMG = %PUBURL%/TWiki/MyLogo/mylogo.gif`
+Other cusomtisations are possible using `WEBLOGOIMG`, `WEBLOGOURL`, and `WEBLOGOALT` (they mirror the `WIKILOGO*` TWiki variables, but are applied to each web, rather than to the %WIKITOOLNAME%-based references)
+
+If you'd like to have the same customised logo for all the webs, make these changes in [[TWikiPreferences]] instead of each web's WebPreferences, e.g.,
+
+- `Set WEBLOGOIMG = %PUBURLPATH%/TWiki/WebPreferences/mylogo.gif`
----
## <a name="Customize Topic Classification F"></a> Customize Topic Classification Forms
-With a simple one or two-line default topic form available for every topic - in **Edit** mode, click the <code>**[Add]**</code> button, and select the form if it isn't alredy enabled. Then, click the title to get to the actual form, <code>**[Edit]**</code>, and carefully change values, probably basic page classifications. You'll get some increased value, and hands-on experience with [[TWikiForms]], without having to read up about them first. %X% **_(add the corresponding search per category - copy a default and change)_**
+With a simple one or two-line default topic form available for every topic - in **Edit** mode, click the <code>**[Add]**</code> button, and select the form if it isn't already enabled. Then, click the title to get to the actual form, <code>**[Edit]**</code>, and carefully change values, probably basic page classifications. You'll get some increased value, and hands-on experience with [[TWikiForms]], without having to read up about them first. %X% **_(add the corresponding search per category - copy a default and change)_**
----
----
+## <a name="Customize The Left Navigation Ba"></a> Customize The Left Navigation Bar
+
+Customize the contents of the [[WebLeftBar]] for each web to include important topics for that web, or to link to an important topic for the overall site. Each web has its own [[WebLeftBar]] page. (This is specific to the [[PatternSkin]].)
+
+----
+
%T% **_NOTE:_** Feel free to add your own tips to TWiki:%WEB%.%TOPIC% as quick notes at the end of the list, following the existing format!
-**Contributors:** TWiki:Main.GrantBow, TWiki:Main.LynnwoodBrown, TWiki:Main.MikeMannix, TWiki:Main.PeterMasiar, TWiki:Main.PeterThoeny, TWiki:Main.MattWilkie
+**_Related Topics:_** [[AdminDocumentationCategory]]
+
+-- **_Contributors:_** TWiki:Main.GrantBow, TWiki:Main.LynnwoodBrown, TWiki:Main.MikeMannix, TWiki:Main.PeterMasiar, TWiki:Main.PeterThoeny, TWiki:Main.MattWilkie, TWiki:Main.AmandaSmith
<td> Look up '$page' on Acronym Finder site </td>
</tr>
<tr>
+ <td> CPAN </td>
+ <td><a href="http://search.cpan.org/perldoc" target="_top">http://search.cpan.org/perldoc</a>? </td>
+ <td> CPAN perl repository </td>
+ </tr>
+ <tr>
<td> Dictionary </td>
<td><a href="http://www.dictionary.com/cgi-bin/dict.pl?term=" target="_top">http://www.dictionary.com/cgi-bin/dict.pl?term=</a></td>
<td> Look up '$page' at Dictionary.com </td>
<td> Book with ISBN#$page (One click patent? Say no to Amazon!) </td>
</tr>
<tr>
+ <td> News </td>
+ <td><a href="http://news.google.com/news?q=" target="_top">http://news.google.com/news?q=</a></td>
+ <td> Search for '$page' on Google news </td>
+ </tr>
+ <tr>
<td> RFC </td>
<td><a href="http://www.faqs.org/rfcs/rfc$page.html" target="_top">http://www.faqs.org/rfcs/rfc$page.html</a></td>
<td> IETF RFC #$page </td>
<td> Search '$page' on the original 'WikiWikiWeb' site </td>
</tr>
<tr>
+ <td> DokuWiki </td>
+ <td><a href="http://wiki.splitbrain.org/wiki" target="_top">http://wiki.splitbrain.org/wiki</a>: </td>
+ <td> '$page' on Doku Wiki site </td>
+ </tr>
+ <tr>
<td> DolphinWiki </td>
<td><a href="http://www.object-arts.co.uk/wiki/html/Dolphin/$page.htm" target="_top">http://www.object-arts.co.uk/wiki/html/Dolphin/$page.htm</a></td>
<td> '$page' on Dolphin Wiki site </td>
</tr>
<tr>
<td> MoinMoin </td>
- <td><a href="http://moin.sourceforge.net/cgi-bin/moin/moin/" target="_top">http://moin.sourceforge.net/cgi-bin/moin/moin/</a></td>
+ <td><a href="http://moinmoin.wikiwikiweb.de/" target="_top">http://moinmoin.wikiwikiweb.de/</a></td>
<td> '$page' on 'MoinMoin' Wiki site </td>
</tr>
<tr>
</tr>
</table>
-**_Note:_** This topic is powered by the [[InterwikiPlugin]].
+**_Note:_** This topic configures the [[InterwikiPlugin]].
+
+**_Related Topics:_** [[TWikiPlugins]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
Plugin settings are stored as Preferences variables. To reference a plugin setting write <code>**%<plugin>\_<setting>%**</code>, for example, <code>**%INTERWIKIPLUGIN\_SHORTDESCRIPTION%**</code>
- One-line description, shown in the [[TextFormattingRules]] topic:
- - Set SHORTDESCRIPTION = Link <code>**ExternalSite:Page**</code> text to external sites based on aliases defined in the %WEB%.InterWikis topic
+ - Set SHORTDESCRIPTION = Link <code>**ExternalSite:Page**</code> text to external sites based on aliases defined in a rules topic
- Link rules topic name: (default is [[InterWikis]])
- Set RULESTOPIC =
- Suppress tooltip help for links: (<code>****</code> or <code>**1**</code>, default is <code>****</code>)
- Set SUPPRESSTOOLTIP = 0
-- Debug plugin: (See output in `data/debug.txt`)
- - Set DEBUG = 0
-
## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
%X% **NOTE:** This Plugin is included in the TWiki distribution package. You do not need to install it unless you want to upgrade to a newer version.
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 25 Aug 2004, 1.005 </td>
+ <td> 1.008 </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 26 Feb 2005: </td>
+ <td> 1.008 TWiki:Main.CrawfordCurrie cleaned up code and made Dakar-ready </td>
+ </tr>
+ <tr>
<td align="right"> 25 Aug 2004: </td>
- <td> Updated [[Main/InterWikis]] link rules (no code change) </td>
+ <td> 1.005 TWiki:Main.PeterThoeny updated [[Main/InterWikis]] link rules (no code change) </td>
</tr>
<tr>
<td align="right"> 09 Mar 2004: </td>
</tr>
<tr>
<td align="right"> 20 Feb 2001: </td>
- <td> Initial version </td>
+ <td> TWiki:Main.AndreaSterbini, TWiki:Main.PeterThoeny - Initial version </td>
</tr>
<tr>
<td align="right"> CPAN Dependencies: </td>
</tr>
<tr>
<td align="right"> Plugin Home: </td>
- <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a> (TWiki:Plugins/%TOPIC%) </td>
+ <td> TWiki:Plugins/%TOPIC% (TWiki:Plugins/%TOPIC%) </td>
</tr>
<tr>
<td align="right"> Feedback: </td>
- <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a> (TWiki:Plugins/%TOPIC%Dev) </td>
+ <td> TWiki:Plugins/%TOPIC%Dev (TWiki:Plugins/%TOPIC%Dev) </td>
</tr>
</table>
**_Related Topics:_** [[InterWikis]], [[TWikiPreferences]], [[TWikiPlugins]]
-
--- TWiki:Main.AndreaSterbini - 20 Oct 2000 <br /> -- TWiki:Main.MikeMannix - 01 Oct 2001 <br /> -- TWiki:Main.PeterThoeny - 25 Aug 2004 <br />
--- /dev/null
+[Mishoo JSCalendar](http://dynarch.com/mishoo/calendar.epl), packaged for use by plugins, skins and add-ons.
+
+# <a name="Summary of Contents"></a> Summary of Contents
+
+This module packages the [Mishoo JSCalendar](http://dynarch.com/mishoo/calendar.epl) Javascript in a form suitable for use with TWiki.
+
+# <a name="Detailed Documentation"></a> Detailed Documentation
+
+Read [the Mishoo documentation](http://www.dementia.org/twiki//view/doc/html/reference.html) or [visit the demo page](http://www.dementia.org/twiki//view).
+
+This package also includes a small Perl module to make using the calendar easier from TWiki plugins. This module includes the function:
+
+ addHEAD( $setup )
+
+that can automatically add the required headers to the page being rendered. `$setup` is the name of the calendar setup module; it can either be ommitted, in which case the method described in the Mishoo documentation can be used to create calendars, or it can be `'twiki'`, in which case a helper function is added that simplifies using calendars to set a value in a text field. For example,
+
+ # Add styles and javascript for the calendar
+ require TWiki::Contrib::JSCalendarContrib;
+ if( $@ || !$TWiki::Contrib::JSCalendarContrib::VERSION ||
+ $TWiki::Contrib::JSCalendarContrib::VERSION < 0.961 ) {
+ TWiki::Func::writeWarning('JSCalendarContrib >=0.961 not found '.$@);
+ } else {
+ TWiki::Contrib::JSCalendarContrib::addHEAD( 'twiki' );
+ }
+
+ $html .= CGI::textfield(
+ { name => 'datefield',
+ id => "id_datefield" });
+ $html .=
+ CGI::image_button(
+ -name => 'datefield_calendar',
+ -onclick =>
+ "return showCalendar('id_datefield','%e %B %Y')",
+ -src=> TWiki::Func::getPubUrlPath() . '/' .
+ TWiki::Func::getTwikiWebname() .
+ '/JSCalendarContrib/img.gif',
+ -alt => 'Calendar',
+ -align => 'MIDDLE' );
+ }
+ }
+
+The first parameter to showCalendar is the id of the textfield. See the Mishoo documentation for details of the '$e %B %Y' parameter.
+
+Note that the header will only be added once, regardless of the number of times that addHEAD is called.
+
+`addHEAD` can be called from `commonTagsHandler` for adding the header to all pages, or to `beforeEditHandler` just for edit pages etc.
+
+## <a name="Settings"></a> Settings
+
+- Name of the perl package
+ - Set STUB = TWiki::Contrib::JSCalendarContrib
+
+## <a name="Installation Instructions"></a> Installation Instructions
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> File: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/JSCalendarContrib.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Contrib/JSCalendarContrib/build.pl</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Contrib/JSCalendarContrib.pm</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/twiki.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/bugtest-hidden-selects.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-blue2.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-blue.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-brown.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-green.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar.php</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-setup.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-setup_stripped.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar_stripped.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-system.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-tas.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-win2k-1.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-win2k-2.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-win2k-cold-1.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/calendar-win2k-cold-2.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/ChangeLog</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/dayinfo.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/doc/html/field-button.jpg</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/doc/html/reference.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/doc/html/reference.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/doc/html/reference-Z-S.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/doc/reference.pdf</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/img.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/index.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-af.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-al.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-bg.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-big5.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-big5-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-br.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ca.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-cs-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-cs-win.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-da.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-de.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-du.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-el.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-en.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-es.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-fi.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-fr.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-he-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-hr.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-hr-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-hu.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-it.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-jp.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ko.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ko-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-lt.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-lt-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-lv.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-nl.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-no.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-pl.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-pl-utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-pt.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ro.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ru_win_.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-ru.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-si.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-sk.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-sp.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-sv.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-tr.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/calendar-zh.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/lang/cn_utf8.js</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/active-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/dark-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/hover-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/menuarrow.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/normal-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/rowhover-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/status-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/theme.css</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/title-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/skins/aqua/today-bg.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/menuarrow.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/menuarrow2.gif</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/multiple-dates.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/README</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/release-notes.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/simple-1.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/simple-2.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/simple-3.html</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/test.php</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/JSCalendarContrib/test-position.html</b></code></td>
+ <td> </td>
+ </tr>
+</table>
+
+- Make sure that all files are readable by the web server user
+
+## <a name="Contrib Info"></a> Contrib Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Author: </td>
+ <td> TWiki:Main/CrawfordCurrie <a href="http://www.c-dot.co.uk" target="_top">http://www.c-dot.co.uk</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Version: </td>
+ <td> 8670 of the Mishoo calendar </td>
+ </tr>
+ <tr>
+ <td align="right"> Copyright ©: </td>
+ <td> See <a href="http://www.dementia.org/twiki//view/doc/html/reference.html" target="_top">the Mishoo documentation</a></td>
+ </tr>
+ <tr>
+ <td align="right"> License: </td>
+ <td> GNU LGPL </td>
+ </tr>
+ <tr>
+ <td align="right"> Dependencies: </td>
+ <td> None </td>
+ </tr>
+ <tr>
+ <td align="right"> 27/12/05 </td>
+ <td> updated to calendar version 1.0; set style for Safari to win2k-1 </td>
+ </tr>
+ <tr>
+ <td align="right"> 14/08/04 </td>
+ <td> Separated out from [[Main/SharedCode]] module </td>
+ </tr>
+ <tr>
+ <td align="right"> Home: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]]
+
+-- TWiki:Main/CrawfordCurrie - 23:00:11 01 February 2006
--- /dev/null
+# <a name="The name you log in with"></a> The name you log in with
+
+A login name is a sequence of alphanumeric characters and underscores.
+
+You cannot alter your LoginName: you have to get the administrator to do this for you.
+
+## <a name="How to find yours"></a> How to find yours
+
+Look in [[TWikiUsers]] - if your name is followed by a dash and a word, usually lowercase, this is what you log in with.
+
+e.g.
+
+- TWikiGuest - guest - 05 Sep 2004
+
+Would mean that TWikiGuest would log in using the login name 'guest'
+
+If, on the other hand, if your entry is like this:
+
+- TWikiGuest - 05 Sep 2004
+
+Then you would log in using your [[WikiName]], in this case 'TWikiGuest'
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+This module is an add-on to the TWiki kernel that supports e-mail notification of changes.
+
+<div>
+ <ul>
+ <li><a href="#Summary of Contents"> Summary of Contents</a><ul>
+ <li><a href="#tools/mailnotify"> <code>tools/mailnotify</code></a></li>
+ <li><a href="#TWiki/Contrib/_MailerContrib cod"> <code>TWiki/Contrib/MailerContrib</code> code library</a></li>
+ </ul>
+ </li>
+ <li><a href="#Installation Instructions"> Installation Instructions</a></li>
+ <li><a href="#Setting up your cron job"> Setting up your cron job</a></li>
+ <li><a href="#Settings"> Settings</a></li>
+ <li><a href="#Contrib Info"> Contrib Info</a></li>
+ </ul>
+</div>
+
+# <a name="Summary of Contents"></a> Summary of Contents
+
+## <a name="tools/mailnotify"></a> `tools/mailnotify`
+
+The main part of the mailer module is a script, `tools/mailnotify`. This script is designed to be run from 'cron' (or an equivalent offline job scheduler), and processes the contents of the standard WebNotify topic. As well as providing the usual notification service, it also provides per-topic notification services. The script may be run from the command line or a cron job.
+
+Subscribers are listed in WebNotify following one of these bullet list formats:
+
+_three spaces_ \* [ _webname_ . ] _wikiName_ - _SMTP mail address_<br />_three spaces_ \* [ _webName_ . ] _wikiName_<br />_three spaces_ \* _SMTP mail address_<br />_three spaces_ \* _SMTP mail address_ : _topics_<br />_three spaces_ \* [ _webname_ . ] _wikiName_ : _topics_
+
+where _topics_ is a space-separated list of topic names.
+
+- Specify topics without a _Web._ prefix
+- Topics must exist in this web.
+- Topics may be specified using \* wildcards
+- Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. _Note_ This uses the TWiki "Topic parent" feature.
+- Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "don't send notifications regarding this topic". This allows users to elect to filter out changes to certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
+
+For example:
+
+ * daisy@flowers.com
+ * daisy@flowers.com: Web*
+ * DaisyCutter: Petal* (1) WeedKillers (3) Red*Phlox
+ * StarTrekFan: * - *Wars - *sInTheirEyes - *shipTroopers
+
+A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified of changes to that topic _once_.
+
+If a _TWiki group_ is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
+
+**_%T% Tip:_** List names in alphabetical order to make it easier to find the names.
+
+In the future it is intended that individual users will be able to control the frequency with which they are notified of topic changes, by changing a schedule specification in their home topic. However at present, the notification schedule is controlled by the frequency of activation of the `cron` job that runs the `mailnotify` script.
+
+%RED% **_Note_** `mailnotify` ignores permissions in webs. It is entirely possible for a user to get added to a WebNotify topic in a web, when they are not authorised to view the topics in that web. This could result in them having limited access to sensitive information (the topic summaries). %ENDCOLOR%
+
+## <a name="TWiki/Contrib/_MailerContrib cod"></a> `TWiki/Contrib/MailerContrib` code library
+
+The second part of the module is a code library that provides the services for other applications to modify WebNotify through a clean, well documented interface. This allows (for example) plugin developers to add a "Register me for notification" button to their pages. The main interface is the `WebNotify` package described below.
+
+# <a name="Installation Instructions"></a> Installation Instructions
+
+This Contrib is pre-installed as part of the TWiki release package, and should only have to be re-installed if an upgrade is required.
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory.
+- Run the installer script `MailContrib_intaller.pl` or alternatively resolve all dependencies manually.
+- To make sure the installation was successful, run the `mailnotify` script from the command line, with no parameters. In this case it will print out what it would have done to STDOUT.
+
+# <a name="Setting up your cron job"></a> Setting up your cron job
+
+You need to set up a `cron` (or equivalent) job to run `mailnotify`.
+
+<code>Usage: perl -I tools/mailnotify [-q] [ _web1 web2 ... webN_ ]</code> is the path to the TWiki bin directory, so that the script can find the rest of TWiki.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>-q</code></td>
+ <td> Don't print progress information </td>
+ </tr>
+ <tr>
+ <td><code><i>web1 web2 ... webN</i></code></td>
+ <td> List of webs to process, separated by spaces or commas. Default is to process all legal TWiki webs. Wildcards (*) are supported. </td>
+ </tr>
+</table>
+
+For example, `perl -I /usr/local/twiki/bin mailnotify -q Public Private` will generate notifications for the Public and Private webs.
+
+# <a name="Settings"></a> Settings
+
+- Name of the perl package
+ - Set STUB = TWiki::Contrib::Mailer
+
+# <a name="Contrib Info"></a> Contrib Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Author: </td>
+ <td> TWiki:Main/CrawfordCurrie (<a href="http://c-dot.co.uk" target="_top">http://c-dot.co.uk</a>) </td>
+ </tr>
+ <tr>
+ <td align="right"> Copyright ©: </td>
+ <td> 2004, Wind River Systems </td>
+ </tr>
+ <tr>
+ <td align="right"> License: </td>
+ <td> GPL </td>
+ </tr>
+ <tr>
+ <td align="right"> Change History: </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="right"> 4 March 2005 </td>
+ <td> 1.010 Dakar release ready. </td>
+ </tr>
+ <tr>
+ <td align="right"> 12 Oct 2004 </td>
+ <td> 1.004 Added support for anti-subscriptions. Doc fixes from TWiki:Main.PeterThoeny. Bug fixes to permissions code. Back-off and retry if the mailer can't be reached (should really be in Net::sendEmail) </td>
+ </tr>
+ <tr>
+ <td align="right"> 6 Oct 2004 </td>
+ <td> 1.003 Excluded _ webs from processing, added <code>bin/remove_obsolete_locks</code> for full reverse-compatibility </td>
+ </tr>
+ <tr>
+ <td align="right"> 1 Oct 2004 </td>
+ <td> 1.002 PeterThoeny provided additional documentation </td>
+ </tr>
+ <tr>
+ <td align="right"> 27 Sep 2004 </td>
+ <td> 1.001 runnable as CGI script, minor bugfixes, removed dependency on DBCacheContrib </td>
+ </tr>
+ <tr>
+ <td align="right"> 8 Sep 2004 </td>
+ <td> 1.000 Initial version </td>
+ </tr>
+ <tr>
+ <td align="right"> Home: </td>
+ <td> TWiki:Plugins/%TOPIC% </td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td> TWiki:Plugins/%TOPIC%Dev </td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]]
+
+-- TWiki:Main/CrawfordCurrie
-**Main Features of TWiki**
+# <a name="Main Features of TWiki"></a> Main Features of TWiki
- **Any web browser:** Edit existing pages or create new pages by using any web browser. There is no need to upload pages.
-- **Edit link:** To edit a page, simply click on the <code>**Edit**</code> link at the bottom of the page.
+- **Edit link:** To edit a page, simply click on the <code>**Edit**</code> link at the top or bottom of the page.
- **Auto links:** Web pages are [[linked automatically|Main/WikiWord]]. You do not need to learn HTML commands to link pages.
- **Text formatting:** Simple, powerful and easy-to-learn [[text formatting rules|Main/WikiSyntax]]. Basically you write text like you would write an e-mail.
- **Webs:** Pages are grouped into [[TWiki webs|TWiki/SiteMap]] (or collections). This allows you to set up separate collaboration groups.
-- **Search:** [[Full text search|Main/WebSearch]] with/without regular expressions. See a sample [search result](http://www.dementia.org/twiki//search/TWiki/?scope=text&search=learn).
+- **Search:** [[Full text search|Main/WebSearch]] with/without regular expressions. See a sample [search result](http://www.dementia.org/twiki/search/TWiki/?scope=text&search=learn).
- **E-mail notification:** Get [[automatically notified|Main/WebChangesAlert]] when something has changed in a TWiki web.
- **Structured content:** Use [[TWikiForms]] to classify and categorize unstructured web pages and to create simple workflow systems.
- **File attachments:** [[Upload|Main/FileAttachment]] and download any file as an attachment to a page by using your browser. This is similar to file attachments in an e-mail, but it happens on web pages.
- **Managing users:** Web-based [[user registration|Main/TWikiRegistration]] and [[change of password|Main/ChangePassword]].
- **Statistics:** Create statistics of TWiki webs. Find out most popular pages and top contributors.
- **Preferences:** Three levels of preferences: [[TWikiPreferences]] for site-level, [[WebPreferences]] for each web, and user level preferences.
-- **Topic locking:** Users are warned if a page is being edited by another person. This is to prevent [[simultaneous page editing|Main/SimultaneousEdits]].
+- **[[simultaneous page editing|Main/SimultaneousEdits]]:**
- **Referred-By:** Find the pages that contain links to a topic.
+
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
### <a name="How Referring Topics Are Found"></a> How Referring Topics Are Found
-Referring topics are found using the %SEARCH% variable - see the template <code>**searchrenameview.tmpl**</code>. First, matching topics in the current web are listed - matches are to <code>**topic**</code>. Next, all webs (including the current one) are listed that match <code>**web.topic**</code>. Because %SEARCH% is used, webs marked in [[WebPreferences]] as `NOSEARCHALL` will not show up in the search for references to the `topic` being changed.
+First, matching topics in the current web are listed - matches are to <code>**topic**</code>. Next, all webs (including the current one) are listed that match <code>**web.topic**</code>. _All_ webs will be searched during rename, even if `NOSEARCHALL` is defined on a web, though access permissions will of course be honoured.
Changed references are kept are as short as possible, ex: `topic` is used in preference to `web.topic`.
> [[old t opic]] => not changed
> [[OldTopic]] => [[NewTopic]]
--- TWiki:Main.MikeMannix - 27 Dec 2001
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
## <a name="Register User"></a> Register User
+It is not necessary to have user home pages in the TWiki system for Authentication to work - see [[TWikiUserAuthentication]] for details.
+
- [[TWikiRegistration]] is for users to fill out a form
-- [[NewUserTemplate]] can be changed to customize user home pages
+- [[NewUserTemplate]] can be changed to customize user home pages, it can optionally use the [[UserForm]] to define user fields as meta data
+- [[BulkRegistration]] is for administrators to use to set up one or more accounts: either from a table or from an external file
## <a name="Change, Reset and Install Passwo"></a> Change, Reset and Install Passwords
-- [[ChangePassword]] is for users who remember their password
-- [[ResetPassword]] is for users who do _not_ remember their password; they are asked to send a request to the site administrator to install a new password
-- [[InstallPassword]] is for the site administrator to install a password
+- [[ChangePassword]] is for users who can remember their password and want to change it
+- [[ResetPassword]] is for users who cannot remember their password; a system generated password is e-mailed to them
+- [[BulkResetPassword]] if for administrators who want to reset many passwords at once
## <a name="Removing User Accounts"></a> Removing User Accounts
-To remove a user account:
+To remove a user account (FredQuimby, who logs in as "fred"):
-1. Edit the `data/.htpasswd` file to delete their entry (only applies if you are using a .htpasswd file)
-2. Remove the `FredQuimby` line from the Main.TWikiUsers topic
-3. Remove user from all groups and from all the `ALLOWWEB/ALLOWTOPIC...` declarations, if any.%BR% **_Note:_** Otherwise this is a security hole as the first one to re-register with this name will be granted the permissions of the previous user.
-4. _[optional]_ Remove their topic files: `data/Main/FredQuimby.txt` and `data/Main/FredQuimby.txt,v`
+1. If you are using a `.htpasswd` file, edit the `.htpasswd` file to delete the line starting `fred:`
+2. Remove the `FredQuimby - fred` line from the Main.TWikiUsers topic
+3. Remove `FredQuimby` from all groups and from all the `ALLOWWEB/ALLOWTOPIC...` declarations, if any.%BR% **_Note:_** If you fail to do this you risk creating a security hole, as the next user to register with the wikiname FredQuimby will inherit the old FredQuimby's permissions.
+4. _[optional]_ Delete their user topic Main.FredQuimby.
-**_Note:_** Consider leaving the user topic file in place so their past signatures and revision author entries don't end up looking like [[AnUncreatedTopic]]. If you want to make it clear the user is inactive on your site (e.g. [[PeterThoeny]]) or has been banished add a note to that effect and write protect the page ([[TWikiAccessControl]]). The existance of the UserName topic prevent that user name from being re-used.
+**_Note:_** Consider leaving the user topic file in place so their past signatures and revision author entries don't end up looking like [[AnUncreatedTopic]]. If you want to make it clear the user is no longer with the organization or has been banished, replace the topic content with a note to that effect. The existance of the UserName topic should also prevent that user name from being re-used, sealing the potential security hole regarding inherited permissions..
--- TWiki:Main.MattWilkie - 21 Jul 2003 %BR% -- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Related Topics:_** [[AdminDocumentationCategory]]
<li><a href="#Choose Web Template"> Choose Web Template</a></li>
<li><a href="#Adding a New Web"> Adding a New Web</a></li>
<li><a href="#Renaming or Deleting a Web"> Renaming or Deleting a Web</a><ul>
- <li><a href="#Renaming the MAINWEB"> Renaming the MAINWEB</a></li>
+ <li><a href="#Permissions"> Permissions</a></li>
+ <li><a href="#Edit Conflicts"> Edit Conflicts</a></li>
+ <li><a href="#Renaming the webs in the distrib"> Renaming the webs in the distribution</a></li>
+ </ul>
+ </li>
+ <li><a href="#Hierarchical Webs"> Hierarchical Webs</a><ul>
+ <li><a href="#Subweb Preferences are Inherited"> Subweb Preferences are Inherited</a></li>
+ <li><a href="#Navigation"> Navigation</a></li>
</ul>
</li>
</ul>
# <a name="Managing Webs"></a> Managing Webs
-_Adding webs is a web based operation; renaming and deleting webs are manual operations done directly on the server_
+_Adding, renaming and deleting webs are all web-based operations._
## <a name="Overview"></a> Overview
-A [[TWikiSite]] is divided into webs; each one represents one subject, one area of collaboration. Administrators can add/rename/delete webs.
+A [[TWikiSite]] is divided into webs; each one represents one subject, one area of collaboration. Administrators (in the [[TWikiAdminGroup]]) can add/rename/delete webs.
<a name="WebTemplate"></a>
## <a name="Choose Web Template"></a> Choose Web Template
-There are two methods used to create a new web. First you can use a specially designed [[TemplateWeb]]. This is an invisible web that begins with an underscore "\_" character. All topics in the \_default template web will be copied into your new web.
+There are two methods used to create a new web. First you can use a specially designed [[TemplateWeb]]. This is an invisible web that begins with an underscore "\_" character (for example `_default`). All topics in the template web will be copied into your new web.
The second method is to use an existing web as a template web. This may be useful if you already have a web that you like to use as a starting point. Only topics that have names beginning with **Web...** (like "WebHome", "WebNotify", etc.) are copied.
## <a name="Adding a New Web"></a> Adding a New Web
-<form action="http://www.dementia.org/twiki//manage/%WEB%/%TOPIC%" method="post" name="admin"> Create a new web by filling out this form. <strong><em>Note:</em></strong> It is not recommended to create a new web for each little project. You can organize content within a web using [[Main/TWikiForms]] and [[Main/FormattedSearch]]. Cross-linking topics and search is easier if there are only a few larger webs. <table border="1" cellpadding="0" cellspacing="0">
+<form action="http://www.dementia.org/twiki/manage/%WEB%/%TOPIC%" method="post" name="admin"> Create a new web by filling out this form.%BR% <strong><em>%X% Note:</em></strong> <strong>Keep the number of webs to a minimum!</strong> It is not recommended to create a new web for each little project. You can organize content within a web using categories, [[Main/TWikiForms]] and [[Main/FormattedSearch]]. Cross-linking topics and search is easier if there are only a few larger webs. <table border="1" cellpadding="0" cellspacing="0">
<tr>
<th align="right" bgcolor="#99CCCC"><strong> Name of new web: </strong></th>
<td><input name="newweb" size="16" type="text" value="" /></td>
- <td> Enter a short name of up to 10 characters. The name must start with an upper case letters, followed by optional upper or lower case letters or numbers </td>
+ <td> The name must start with an upper case letter, followed by upper or lower case letters or numbers. Specify a short name to avoid long URLs. </td>
</tr>
<tr>
<th align="right" bgcolor="#99CCCC"><strong> Based on web: </strong></th>
<td> Specify if you want to exclude the web from a "search all webs" search. Note that the [[TWiki/SiteMap]] will not list the web if you select Yes. </td>
</tr>
<tr>
- <td> </td>
+ <th bgcolor="#99CCCC"><strong> </strong></th>
<td colspan="2"><input type="submit" value="Create new web" /></td>
</tr>
</table><input name="newtopic" type="hidden" value="" /> <input name="action" type="hidden" value="createweb" /></form>
**_Notes:_**
- Attachments will NOT get copied over along with their topics
-- The manage script while creating the new web will update the following variables in the [[WebPreferences]]: `WEBBGCOLOR`, `SITEMAPLIST`, `SITEMAPWHAT`, `SITEMAPUSETO` and `NOSEARCHALL`. These variables are used to dynamically generate the [[SiteMap]]
-- This script does not edit the [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] file to update the `WIKIWEBLIST`. This must be done by hand
-- As of TWiki Release 01 Sep 2004, a web name can be a [[WikiWord]]. Prior to that it could be only `UPPER` or `UPPERlower`. A side effect of this is that if you do use a wiki name, `%WEB%` must be written as `<nop>%WEB%` or else it will try to link to a non-existing topic of that name
+- While creating the new web, TWiki will update the following variables in the [[WebPreferences]]: `WEBBGCOLOR`, `SITEMAPLIST`, `SITEMAPWHAT`, `SITEMAPUSETO` and `NOSEARCHALL`. These variables are used to dynamically generate the [[SiteMap]]
+- TWiki does not edit the [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] to update the `WIKIWEBLIST`. This must be done by hand
## <a name="Renaming or Deleting a Web"></a> Renaming or Deleting a Web
-Renaming or deleting a web requires direct access to the installation files on the host server. There are currently no browser-based equivalents of the Rename/move/delete topic tools for working with webs.
+Rename a web via the Tools section in each web's [[WebPreferences]] topic. You may delete a web by moving it into a Trash web.
+
+### <a name="Permissions"></a> Permissions
+
+You may only rename a web if you have permissions to rename all the topics within that web, including any topics in that web's subwebs. You will also need permissions to update any topics containing references to that web.
+
+### <a name="Edit Conflicts"></a> Edit Conflicts
+
+If anyone is editing a topic which requires updating, or which lives in the web being renamed, a second confirmation screen will come up which will indicate which topics are still locked for edit. You may continue to hit the refresh button until an edit lease is obtained for each topic which requires updating (the "Refresh" button will change to "Submit"), or hit "Cancel", which will cancel your edit lease on all affected topics.
+
+### <a name="Renaming the webs in the distrib"></a> Renaming the webs in the distribution
+
+If you plan to rename the Main web, remember that TWiki stores user and group topics in `%MAINWEB%`, which by default is `Main` (this is assigned in the site configuration). That means that every [[WikiName]] signature - `Main.SomeUserName` - points to it and would need updating (unless the variable, `%MAINWEB%.SomeUserName`, is used throughout). This potentially large change can be performed automatically with the renameweb function mentioned above, in the [[Main.WebPreferences|Main/WebPreferences]] topic.
+
+If you want to rename the TWiki web, remember it is referred to by `%TWIKIWEB%` which is also defined by a configuration setting.
+
+## <a name="Hierarchical Webs"></a> Hierarchical Webs
+
+Hierarchical web support is enabled by turning on the `{EnableHierarchicalWebs}` setting in `configure`. Without this setting, TWiki will only allow a single level of hierarchy (webs). If you set this, you can use multiple levels, like a directory tree, i.e. webs within webs.
+
+**_%T% Note:_** You might not need hierarchical webs. TWiki topics already have a parent/child relationship within a web, which is shown in the breadcrumb. Try to keep the number of webs to a minimum in order to keep search and cross-referencing simple.
+
+You can create hierarchical webs via the _Adding a New Web_ form above, by using a slash- or dot-separated path name which is based on an existing web name in the _Name of new web:_ field.
+
+**Example:**
+
+To create a subweb named `Bar` inside a web named `Foo`, use `Foo/Bar` or `Foo.Bar` as the new web name in the form above.
+
+### <a name="Subweb Preferences are Inherited"></a> Subweb Preferences are Inherited
+
+The preferences of a subweb are inherited from the parent web and overridden locally. Preferences are ultimately inherited from the [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] topic.
+
+**Example Preference Inheritance for `Sandbox/TestWeb/SubWeb.SubWebTopic` topic:**
-1. Prepare your site: Search each web for links to the target web, searching topic text for `Oldwebname.`, including the dot so you'll find references like `Oldwebname.SomeTopic`
- - Make changes as required, to `Newwebname.SomeTopic` or better yet, to `%MAINWEB%.SomeTopic`
-2. Edit the [[TWikiPreferences]] topic: Rename or delete the web from the `WIKIWEBLIST` variable
-3. Login to the %WIKITOOLNAME% server, via Telnet or FTP
-4. Go to `twiki/data` and rename or remove the web directory
-5. Go to `twiki/templates` and rename or remove the web directory if present
- - **_Note:_** See TWiki:Codev.RenameWebs for some complications
-6. Go to `twiki/pub` and rename or remove the web directory if present
+1. `TWiki.TWikiPreferences` site-wide preferences
+2. `Sandbox.WebPreferences` inherits from and overrides settings in `TWiki.TWikiPreferences`
+3. `Sandbox/TestWeb.WebPreferences` inherits from and overrides settings in `Sandbox.WebPreferences`
+4. `Sandbox/TestWeb/SubWeb.WebPreferences` inherits from and overrides settings in `Sandbox/TestWeb.WebPreferences`
+5. `Sandbox/TestWeb/SubWeb.SubWebTopic` inherits from and overrides settings in `Sandbox/TestWeb/SubWeb.WebPreferences`
-### <a name="Renaming the MAINWEB"></a> Renaming the MAINWEB
+### <a name="Navigation"></a> Navigation
-If you plan to rename the Main web, remember that TWiki stores user and group topics in `%MAINWEB%`, default named `Main`. That means, every [[WikiName]] signature - `Main.SomeUserName` - points to it and would need updating (unless the variable, `%MAINWEB%.SomeUserName`, is used throughout).
+The Pattern skin (default) indicates Subwebs by indenting them in the sidebar relative to their level in the hierarchy.
--- TWiki:Main.MikeMannix - 14 Sep 2001 %BR% -- TWiki:Main.PeterThoeny - 07 Apr 2002 %BR% -- TWiki:Main.GrantBow - 16 Jan 2003
+**_Related Topics:_** [[AdminDocumentationCategory]], [[AdminToolsCategory]]
[[ManagingTopics]] can be used to move a topic from one Web to another. One specialised use of this is [[DeleteWeb]].
+
+**_Related Topics:_** [[UserDocumentationCategory]]
- %KEY%: %VALUE%%SPLIT%
-**_My Links_**
+## <a name="My Links"></a> My Links
-- [[WelcomeGuest]] to learn TWiki
-- [[Sandbox|Sandbox/WebHome]] web to try out TWiki
-- Sandbox.%TOPIC%Sandbox just for me
+- [[ATasteOfTWiki]] - view a short introductory presentation on TWiki for beginners
+- [[WelcomeGuest]] - starting points on TWiki
+- [[TWikiUsersGuide]] - complete TWiki documentation, Quick Start to Reference
+- [[Sandbox|Sandbox/WebHome]] - try out TWiki on your own
+- Sandbox.%TOPIC%Sandbox - just for me
-
-
-**_Personal Preferences (details in [[TWikiVariables]])_**
+## <a name="Personal Preferences"></a> Personal Preferences
-- Show tool-tip topic info on mouse-over of [[WikiWord]] links, on or off: (see details in [[TWikiPreferences]])
- - Set LINKTOOLTIPINFO = off
+Uncomment preferences variables to activate them (remove the #-sign). Help and details on preferences variables are available in [[TWikiPreferences]].
+
+- Show tool-tip topic info on mouse-over of [[WikiWord]] links, on or off:
+ - #Set LINKTOOLTIPINFO = off
+- Horizontal size of text edit box:
+ - #Set EDITBOXWIDTH = 70
+- Vertical size of text edit box:
+ - #Set EDITBOXHEIGHT = 22
+- Style of text edit box. `width: 99%` for full window width (default), `width: auto` to disable.
+ - #Set EDITBOXSTYLE = width: 99%
+- Write protect your home page: (set it to your [[WikiName]])
+ - #Set ALLOWTOPICCHANGE = Main.admin
+
+## <a name="Related Topics"></a> Related Topics
+
+- [[ChangePassword]] for changing your password
+- [[ChangeEmailAddress]] for changing your email address
+- [[TWikiUsers]] has a list of other TWiki users
+- [[UserDocumentationCategory]] is a list of TWiki user documentation
+- [[UserToolsCategory]] lists all TWiki user tools
+
+Note to TWiki Administrator:
+
+Above text is for English speaking users. If you have a multilingual wiki community you can replace the "My Links", "Personal Preferences" and "Related Topics" sections above with the localized text below. Text enclosed in %MAKETEXT will be shown in the language selected by the user. Please note that the %MAKETEXT can be quite intimidating to new users. Consider translating above text to your own language if your community uses a non-English language. (Remove all text from `%STARTSECTION{type="templateonly"}%` to `%ENDSECTION{type="templateonly"}%` when you are done)
+
+Text for multilingual wiki community, copy from here to %ENDSECTION\{type="templateonly"\}%
+
+## <a name="My Links"></a> My Links
+
+- [[ATasteOfTWiki]] - view a short introductory presentation on TWiki for beginners
+- [[WelcomeGuest]] - starting points on TWiki
+- [[TWikiUsersGuide]] - complete TWiki documentation, Quick Start to Reference
+- [[Sandbox|Sandbox/WebHome]] - try out TWiki on your own
+- Sandbox.%TOPIC%Sandbox - just for me
+-
+-
+
+## <a name="Personal Preferences"></a> Personal Preferences
+
+Uncomment preferences variables to activate them (remove the #-sign). Help and details on preferences variables are available in [[TWikiPreferences]].
+
+- Show tool-tip topic info on mouse-over of [[WikiWord]] links, on or off:
+ - #Set LINKTOOLTIPINFO = off
- Horizontal size of text edit box:
- - Set EDITBOXWIDTH = 70
+ - #Set EDITBOXWIDTH = 70
- Vertical size of text edit box:
- - Set EDITBOXHEIGHT = 22
+ - #Set EDITBOXHEIGHT = 22
- Style of text edit box. `width: 99%` for full window width (default), `width: auto` to disable.
- - Set EDITBOXSTYLE = width: 99%
-- Optionally write protect your home page: (set it to your [[WikiName]])
- - Set ALLOWTOPICCHANGE =
+ - #Set EDITBOXSTYLE = width: 99%
+- Write protect your home page: (set it to your [[WikiName]])
+ - Set ALLOWTOPICCHANGE = Main.admin
-**_Related topics_**
+## <a name="Related Topics"></a> Related Topics
-- [[ChangePassword]]
-- [[TWikiPreferences]] has site-level preferences of %WIKITOOLNAME%.
-- [[WebPreferences]] has preferences of the %WIKITOOLNAME%.%WEB% web.
-- [[TWikiUsers]] has a list of other TWiki users.
+- [[ChangePassword]] for changing your password
+- [[ChangeEmailAddress]] for changing your email address
+- [[TWikiUsers]] has a list of other TWiki users
+- [[UserDocumentationCategory]] is a list of TWiki user documentation
+- [[UserToolsCategory]] lists all TWiki user tools
--- /dev/null
+An [[ObjectMethod]] is a method that must be called relative to a previous constructed object of the class type. For example:
+
+# <a name="package Telecoms"></a> package Telecoms
+
+## <a name="ClassMethod new()"></a> [[ClassMethod]] new()
+
+## <a name="ObjectMethod phone( $who )"></a> [[ObjectMethod]] phone( $who )
+
+must be called something like this
+
+ my $mobile = new Telecoms();
+ $mobile->phone( "home" );
+
+or you can pass the object in as a parameter if you need to:
+
+ Telecoms::phone( $mobile, "home" );
+
+**_Related Topics:_** [[ClassMethod]], [[StaticMethod]], [[DeveloperDocumentationCategory]]
</ul>
</li>
<li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li><a href="#Creating your own look"> Creating your own look</a></li>
<li><a href="#Supported browsers"> Supported browsers</a></li>
<li><a href="#Installation"> Installation</a><ul>
<li><a href="#Troubleshooting"> Troubleshooting</a></li>
</ul>
</li>
- <li><a href="#Creating your own look"> Creating your own look</a></li>
- <li><a href="#Customization"> Customization</a></li>
- <li><a href="#Further reading"> Further reading</a></li>
<li><a href="#Skin Info"> Skin Info</a></li>
<li><a href="#Related topics"> Related topics</a></li>
<li><a href="#Feedback"> Feedback</a></li>
## <a name="Screen Shot"></a> Screen Shot
-[<img src="http://www.dementia.org/twiki//view/patternskin_screenshot.gif" width="600" height="130" alt="Click for full screen image" style="border: 1px solid #eee" />](http://www.dementia.org/twiki//view/patternskin_screenshot_full.gif)
+[<img src="http://www.dementia.org/twiki//view/patternskin_screenshot.jpg" width="600" height="130" alt="Click for full screen image" style="border: 1px solid #eee" />](http://www.dementia.org/twiki//view/patternskin_screenshot_full.png)
+
+## <a name="Creating your own look"></a> Creating your own look
+
+It is easy to tune the look and feel of PatternSkin by changing the color and space (margin, padding) settings in the Style Sheet files.
+
+You may also choose to radically change the look and create a PatternSkin-based new skin. This is easier than to create a skin by writing new template files; you can concentrate on how things should look instead of what elements should get displayed.
+
+- [[PatternSkinCustomization]] - how to configure page elements
+- [[PatternSkinCssCookbook]] - how to customize the default look of TWiki
+- [[PatternSkinCss]] - documentation of PatternSkin CSS classes
## <a name="Supported browsers"></a> Supported browsers
- Internet Explorer 6.0, 5.5 (note: Explorer 5.0 is **not** supported: will function but shows visual quirks)
- Mozilla/Firefox
- Mac OS X
- - Safari 1.2
+ - Safari 2.0.3
- Mozilla/Firefox
-
-Not tested, but will probably work (let me know):
-
- \*nix
- Mozilla/Firefox
- Download the ZIP file from the Skin Home page (see below)
- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory
-- Test if installed: <http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?skin=pattern>
+- Test if installed: [[http://www.dementia.org/twiki/view/%WEB%/%TOPIC%?skin=pattern|%WEB%/%TOPIC%?skin=pattern]]
- For skin activation see [[TWikiSkins]]
### <a name="Troubleshooting"></a> Troubleshooting
- TWIKILAYOUTURL = %TWIKILAYOUTURL%
- TWIKISTYLEURL = %TWIKISTYLEURL%
+- TWIKICOLORSURL = %TWIKICOLORSURL%
- SKIN = %SKIN%
If TWIKILAYOUTURL or TWIKISTYLEURL don't give a value or point to non-existing files, check in [[TWikiPreferences]] that the following variables do exist and that they are set to on:
* %TWIKIWEB%.PatternSkin settings:
- * Set TWIKILAYOUTURL = %PUBURL%/%TWIKIWEB%/PatternSkin/layout.css
- * Set TWIKISTYLEURL = %PUBURL%/%TWIKIWEB%/PatternSkin/style.css
+ * Set TWIKILAYOUTURL = %PUBURLPATH%/%TWIKIWEB%/PatternSkin/layout.css
+ * Set TWIKISTYLEURL = %PUBURLPATH%/%TWIKIWEB%/PatternSkin/style.css
+ * Set TWIKICOLORSURL = %PUBURLPATH%/%TWIKIWEB%/PatternSkin/colors.css
If this still does not work, contact the administrator who installs skins.
-For further troubleshooting and feedback, go to TWiki:Plugins/PatternSkinDev.
-
-## <a name="Creating your own look"></a> Creating your own look
-
-It is easy to tune the look and feel of PatternSkin by changing the color and space (margin, padding) settings in the Style Sheet files.
-
-You may also choose to radically change the look and create a PatternSkin-based new skin. This is easier than to create a skin by writing new template files; you can concentrate on how things should look instead of what elements should get displayed.
-
-You can either:
-
-- Change the `layout.css` and `style.css` attachment files for this topic (upload updated versions)
-- In [[TWikiPreferences]], point the variables `TWIKILAYOUTURL` and `TWIKISTYLEURL` to other attachments, perhaps in another topic (your new skin topic?)
-
-See for practical details: [[PatternSkinCustomization]] %BR% The CSS classes that PatternSkin uses are documented in [[PatternSkinCss]].
-
-## <a name="Customization"></a> Customization
-
-See: [[PatternSkinCustomization]], [[PatternSkinPalette]]
-
-## <a name="Further reading"></a> Further reading
-
-- [[PatternSkinCustomization]] - Practical information on how to change the looks of PatternSkin
-- [[PatternSkinPalette]] - How to change the colors only
-- [[PatternSkinCss]] - A reference to used CSS classes
-- TWiki:Plugins/PatternSkinDev - Development page, bug reports, solutions from users
+For further troubleshooting and feedback, go to TWiki:Plugins/PatternSkinDev. Report bugs in the [[Support web|TWiki:Support/WebHome]].
## <a name="Skin Info"></a> Skin Info
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right"> Description: </td>
- <td> Provides a CSS based default look and feel for TWiki - flexible and [[Main/W3C]]-compliant </td>
+ <td> TWiki's default skin; CSS based, flexible and [[Main/W3C]]-compliant </td>
</tr>
<tr>
<td align="right"> Screenshot: </td>
- <td><a href="http://www.dementia.org/twiki//view/patternskin_screenshot_full.gif"><img alt="Click for full screen image" height="130" src="http://www.dementia.org/twiki//view/patternskin_screenshot.gif" style="border: 1px solid #eee" width="600" /></a></td>
+ <td><a href="http://www.dementia.org/twiki//view/patternskin_screenshot_full.png"><img alt="Click for full screen image" height="130" src="http://www.dementia.org/twiki//view/patternskin_screenshot.jpg" style="border: 1px solid #eee" width="600" /></a></td>
+ </tr>
+ <tr>
+ <td align="right"> Preview: </td>
+ <td>[[%WEB%/%TOPIC%?skin=pattern]]</td>
</tr>
<tr>
<td align="right"> Base Name: </td>
</tr>
<tr>
<td align="right"> Skin Version: </td>
- <td> 28 Aug 2004 (v1.0.9) </td>
+ <td> 31 Jan 2006 (v2.0.0) </td>
</tr>
<tr>
<td align="right"> History: </td>
<td> </td>
</tr>
<tr>
- <td align="right"> 28 Aug 2004: </td>
- <td> v.1.0.9 - CAIRO RELEASE VERSION - Removed twikiTopic div from attach template </td>
- </tr>
- <tr>
- <td align="right"> 24 Aug 2004: </td>
- <td> v.1.0.8 - Fix for disabled TablePlugin; added plain.pattern.tmpl </td>
- </tr>
- <tr>
- <td align="right"> 23 Aug 2004: </td>
- <td> v.1.0.7 - Change to checkboxes in edit and preview screen; removed REVINFO at bottom; style changes </td>
- </tr>
- <tr>
- <td align="right"> 22 Aug 2004: </td>
- <td> v.1.0.6b - Removed files from zip that are now part of the TWiki distribution; removed .DS_Store files </td>
- </tr>
- <tr>
- <td align="right"> 17 Aug 2004: </td>
- <td> v.1.0.6 - Support for twikiMoved css class </td>
- </tr>
- <tr>
- <td align="right"> 17 Aug 2004: </td>
- <td> v.1.0.5 - Fix for not showing SEARCHSTRING </td>
- </tr>
- <tr>
- <td align="right"> 16 Aug 2004: </td>
- <td> v.1.0.4 - Fixes search results layout with noheader="on" </td>
- </tr>
- <tr>
- <td align="right"> 14 Aug 2004: </td>
- <td> v.1.0.3 - Update to attach template, css fix to edit template </td>
- </tr>
- <tr>
- <td align="right"> 14 Aug 2004: </td>
- <td> v.1.0.2 - Fixes print template, table paddings in topics, minor changes to style.css </td>
+ <td align="right"> 31 Jan 2006: </td>
+ <td> v.2.0.0 - DAKAR RELEASE VERSION </td>
</tr>
<tr>
- <td align="right"> 13 Aug 2004: </td>
- <td> v.1.0.1 - Updated /data/TWiki/WebLeftBarPersonalTemplate and style.css </td>
+ <td align="right"> 28 Aug 2004: </td>
+ <td> v.1.0.9 - CAIRO RELEASE VERSION </td>
</tr>
<tr>
<td align="right"> 08 Aug 2004: </td>
</tr>
<tr>
<td align="right"> Dependencies: </td>
- <td> </td>
+ <td> TWiki:Plugins/TwistyContrib (automatically supported by Dakar) </td>
</tr>
<tr>
<td align="right"> Skin Home: </td>
## <a name="Related topics"></a> Related topics
- [[TWikiCss]]
+- [[PatternSkinCss]]
+- [[PatternSkinCssCookbook]]
+- [[PatternSkinCssCookbookCenterPage]]
+- [[PatternSkinCssCookbookEditTableStyle]]
+- [[PatternSkinCssCookbookFonts]]
+- [[PatternSkinCssCookbookNoLeftBar]]
+- [[PatternSkinCssCookbookNoTopBar]]
+- [[PatternSkinCustomization]]
+- [[PatternSkinJavascripts]]
- [[WebBottomBar]]
- [[WebLeftBar]]
+- [[WebLeftBarCookbook]]
- [[WebLeftBarExample]]
+- [[WebLeftBarLogin]]
- [[WebLeftBarPersonalTemplate]]
-- [[WebLeftBarCookbook]]
+- [[WebLeftBarSearch]]
+- [[WebLeftBarWebsList]]
- [[WebTopBar]]
-
-See also [[Further reading|Main/TOPIC#Further_reading]] on this page.
+- [[AdminDocumentationCategory]]
Other skins:
## <a name="Feedback"></a> Feedback
Leave remarks, suggestions and other feedback in TWiki:Plugins.PatternSkinDev.
-
--- TWiki:Main/ArthurClemens - 28 Aug 2004
-# <a name="Css elements in _PatternSkin"></a><a name=" Css elements in _PatternSkin"></a> Css elements in PatternSkin
+# <a name="CSS elements in _PatternSkin"></a><a name=" CSS elements in _PatternSkin"></a> CSS elements in PatternSkin
This page is a reference for all CSS classes used in [[PatternSkin]].
<div><span>Page contents:</span><ul>
<li><a href="#Naming conventions"> Naming conventions</a></li>
<li><a href="#Namespaces"> Namespaces</a><ul>
- <li><a href="#body class names"> body class names</a></li>
+ <li><a href="#Page type classes"> Page type classes</a></li>
</ul>
</li>
<li><a href="#Layout classes"> Layout classes</a></li>
<li><a href="#Style classes"> Style classes</a></li>
- <li><a href="#CSS tags emitted from TWiki core"> CSS tags emitted from TWiki core code</a></li>
<li><a href="#Layout per template"> Layout per template</a><ul>
<li><a href="#View template"> View template</a></li>
</ul>
</ul>
</div>
-The PatternSkin stylesheet is divided in two files:
+PatternSkin uses 4 stylesheets:
- [layout.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/layout.css): positioning of block elements on the page
-- [style.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css): appearance of blocks and all other page elements
+- [style.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css): margins, paddings, borders, font sizes
+- [colors.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/colors.css): text colors, background colors, border colors
+- [print.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/print.css): optimalizations for printed page
If you want to learn how to create your own look or skin based on PatternSkin, read further in [[PatternSkin]].
## <a name="Naming conventions"></a> Naming conventions
-PatternSkin follows the naming conventions used in TWiki core code: all TWiki class names have the prefix `twiki`: twikiEditPage, twikiTopicAction, etcetera. ID names are not used, only class names, to allow multipe class names. See also: [[TWikiCss]].
+- All PatternSkin specific classes have the prefix `pattern`: patternEditPage, patternTopicAction, etcetera.
+- TWiki specific classes (emitted by the TWiki engine) have the prefix `twiki`: twikiButton, twikiToc, etcetera. See for a complete list [[TWikiCss]].
## <a name="Namespaces"></a> Namespaces
PatternSkin uses namespaces for templates, by adding one (sometimes two - multiple) class names to the template's body tag.
-- The body tag in view.pattern.tmpl for instance has the class name "twikiViewPage": `<body >`. All CSS elements specific to the view template thus can be defined as `.twikiViewPage .someClassName`.
-- All templates that are _not_ the view template have the body class name "twikiNoViewPage". That makes it easy to give all of these pages a different layout in one sweep (smaller or wider margins for instance). Template edit.pattern.tmpl uses `<body >`.
+- The body tag in view.pattern.tmpl for instance has the class name "patternViewPage": `<body >`. All CSS elements specific to the view template thus can be defined as `.patternViewPage .someClassName`.
+- All templates that are _not_ the view template have the body class name "patternNoViewPage". That makes it easy to give all of these pages a different layout in one sweep (smaller or wider margins for instance). Template edit.pattern.tmpl uses `<body >`.
-### <a name="body class names"></a> body class names
+### <a name="Page type classes"></a> Page type classes
-- .twikiViewPage
-- .twikiViewPage .twikiPrintPage
-- .twikiNoViewPage
-- .twikiNoViewPage .twikiEditPage
-- .twikiNoViewPage .twikiAttachPage
-- .twikiNoViewPage .twikiChangeFormPage
-- .twikiNoViewPage .twikiDiffPage
-- .twikiNoViewPage .twikiRenamePage
-- .twikiSearchResultsPage
+- .patternViewPage
+- .patternViewPage .patternPrintPage
+- .patternNoViewPage
+- .patternNoViewPage .patternEditPage
+- .patternNoViewPage .patternAttachPage
+- .patternNoViewPage .patternChangeFormPage
+- .patternNoViewPage .patternDiffPage
+- .patternNoViewPage .patternRenamePage
+- .patternSearchResultsPage
+- .patternPlainPage (view.plain.pattern.tmpl)
## <a name="Layout classes"></a> Layout classes
-- General
- - .twikiLeft - a left floating element
- - .twikiRight - a right floating element
- - .twikiClear - to clean up either of these floats: put immediately after the containing block
- - .twikiHidden - hidden element
-
-- TWiki block elements
- - .twikiMiddleContainer - holder for twikiMain and twikiLeftbar
- - .twikiLeftBar - left bar area
- - .twikiLeftBarContents - used for left menu
- - .twikiMain - holder of twikiToolbar, twikiTopic, twikiAttachments, etc.
- - .twikiTopBar - top bar area
- - .twikiBottomBar - bottom bar area
-
-- Layout adjustments on specific pages
- - .twikiNoViewPage .twikiMain
- - .twikiPrintPage .twikiMain
- - .twikiPrintPage .twikiBottomBar
+- Main layout elements
+ - #patternScreen - holder of patternPageShadow and patternBottomBar
+ - #patternPageShadow - shadow border around patternPage; default not used
+ - #patternPage - html content container
+ - #patternColumnWrapper - holder for patternMain and patternLeftbar
+ - #patternMain - holder of patternMainContents
+ - #patternTopBar - top bar area
+ - .patternTopBarContents - table (for easy vertical alignment) for header art / logo; contains topic [[WebTopBar]]
+ - #patternLeftBar - left bar area
+ - .patternLeftBarContents - used for left menu
+ - #patternBottomBar - bottom bar area
+ - .patternBottomBarContents - copyright
## <a name="Style classes"></a> Style classes
-- .twikiMiddleContainer - holder for twikiMain and twikiLeftbar
-- .twikiMain - holder of twikiToolbar, twikiTopic, twikiAttachments, etc)
-- .twikiTopBar - top bar area
-- .twikiTopBarContents - logo, go box
-- .twikiLeftBar - left bar area
-- .twikiWebIndicator - shows current Web name; background of color %WEBBGCOLOR%
-- .twikiLeftBarContents - used for left menu (a bullet list)
-- .twikiLeftBarPersonal - block of personal links (included topic %MAINWEB%.%USERNAME%LeftBar)
-- .twikiBottomBar - bottom bar area
-- .twikiBottomBarContents - copyright
-- .twikiTopic
-- .twikiAttachments - attachment table; used in template attachtables.tmpl
-- .twikiForm - WebForm table; used in template attachtables.tmpl
-- .twikiTopicAction - actions buttons at bottom of page; holder of table with buttons
-- .twikiTopicActionSecondary - second layer above twikiTopicAction (for instance in Preview)
-- .twikiTopicActionHelp - help text row
-- .twikiCancelCol - table columns (td) for cancel button
-- .twikiSubmitCol - table columns (td) for submit button
-- .twikiAddCol - table columns (td) for additional button/link (for instance: "Move attachment")
-- .twikiSeparator - separator character
-- .twikiToc - topic contents (%TOC%)
-- .twikiTocTitle - title of TOC (%TOC\{title="Contents:"\}%)
-- .twikiTopicInfo - revision (%REVINFO%) and moved (%META\{"moved"\}%) info
-- .twikiRevInfo - revision info (top and bottom of page)
-- .twikiTopicFooter - used for breadcrumb (twikiHomePath)
-- .twikiHomePath - breadcrumb
-- .twikiToolBar - action buttons at top of topic (a bullet list), revision info
-- .twikiPageNav - links "end of topic" and "to top"
-- .twikiSearchBox - go box and current page in top bar
-- .twikiHelp - help text
-- .twikiBroadcastMessage - BROADCASTMESSAGE
-- .twikiAlert - red
-- .twikiGrayText - grayed out text, literally gray
-- .twikiSmall - styled "small"
-- .twikiNewLink - style of links to yet non-existent pages (not used)
-
-- Table class names (emitted from [[TablePlugin]])
- - .twikiSortedAscendingCol - sortable table column header that is sorted ascending (uses [[TablePlugin]])
- - .twikiSortedDescendingCol - ditto sorted descending
- - .twikiFirstCol
-- Other table class names
- - .twikiVersatileTable - table used in various places (Attach, Rename, Changeform)
- - .twikiVersatileTable .twikiMainCol - table column that is the most important part of the table
- - .twikiVersatileTable .twikiOldCol - table column with 'old' appearance, for instance the old attachment or the old topic name
- - .twikiVersatileTable .twikiHelpCol - table column with help texts
-
-- Search
- - .twikiNew - emitted from Search.pm and Changes.pm with the text NEW
- - .twikiSummary - summary text with search results
- - .twikiSearchResults - the big block of all results
- - .twikiSearchResultsHeader - top of block, styled with %WEBBGCOLOR%
- - .twikiSearchResults .twikiTopRow - top of one result, with link, author, revision
- - .twikiSearchResults .twikiBottomRow - result summary
- - .twikiSearchResults .twikiAlert - used with "locked" text
- - .twikiSearchResultCount - result count
- - .twikiBookViewList - the big block of all results with book view option
-
-- Form elements
- - .twikiCheckbox - styled checkbox
- - .twikiRadioButton
- - .twikiSubmit - submit button (in twikiTopicAction this is the darkest button; in twikiTopic it has a lighter color)
- - .twikiButton - general button (in Rename/Delete: clear/select all checkboxes)
- - .twikiSecondary - button next to submit button (same appearance as twikiButton)
- - .twikiTertiary - button at far right (blue color)
- - .twikiCancel - cancel button
- - .twikiEditPage .twikiFormHolder - constrains the width of the textarea
- - .twikiChangeFormButton - emitted from Form.pm, button to change the WebForm - styled as link
- - .twikiEditForm - emitted from Form.pm, editable WebForm table
- - .twikiEditFormTextField - emitted from Form.pm, input textfield in twikiEditForm
- - .twikiSig - signature copy field
-
-- Preview
- - .twikiPreviewPage .twikiPreviewArea - holder of previewed topic text
-
-- Attach
- - .twikiAttachPage .twikiNotes - holder of help text
- - .twikiAttachPage .twikiPrevious - attachment table of previous versions
-
-- Diff
- - .twikiDiffPage .twikiDiffTable - block of revisions; emitted from RDiff.pm (also all diff classes below)
- - .twikiDiffPage .twikiDiffDeletedHeader
- - .twikiDiffPage .twikiDiffDeletedMarker
- - .twikiDiffPage .twikiDiffDeletedText
- - .twikiDiffPage .twikiDiffAddedHeader
- - .twikiDiffPage .twikiDiffAddedMarker
- - .twikiDiffPage .twikiDiffAddedText
- - .twikiDiffPage th.twikiDiffChangedHeader
- - .twikiDiffPage .twikiDiffChangedText
- - .twikiDiffPage .twikiDiffUnchangedText
- - .twikiDiffPage .twikiDiffLineNumberHeader
-
-## <a name="CSS tags emitted from TWiki core"></a> CSS tags emitted from TWiki core code
-
-See: [[TWikiCss]]
+- View
+ - .patternMainContents - holder of patternTop, patternTopic, twikiForm, twikiAttachments, etc.
+ - .patternContent - container around .patternTopic in view.pattern.tmpl only; to be able to give .twikiAttachments and .twikiForm a different appearance when they are not enclosed by it, for example the personal data form on the user pages (where the user form is positioned outside, above the topic text)
+ - .patternTopBarLogo - logo position in patternTopBar (topic [[WebTopBar]])
+ - .patternTopBarOverlay - striped white image background
+ - .patternTopic - TWiki topic text
+ - .patternTop - area at top of topic text, with patternHomePath, revision and action buttons
+ - .patternTopicAction - container for .patternActionButtons
+ - .patternActionButtons - action buttons at bottom of page
+ - .patternMoved - topic moved info (only visible when the topic has changed name or web)
+ - .patternWebIndicator - not used
+ - .patternFormHolder - container around form to manage the size of form elements
+ - .patternLeftBarPersonal - block of personal links (included topic %MAINWEB%.%USERNAME%LeftBar)
+ - .patternVersatileTable - table used in various places (Attach, Rename, Changeform)
+ - .patternVersatileTable .patternMainCol - table column that is the most important part of the table
+ - .patternVersatileTable .patternOldCol - table column with 'old' appearance, for instance the old attachment or the old topic name
+ - .patternVersatileTable .patternHelpCol - table column with help texts
+ - .patternHomePath - breadcrumb at top
+ - .patternHomePathTitle - "You are here" text
+ - .patternRevInfo - revision info and author name
+ - .patternToolBar - holder for .patternToolBarButtons
+ - .patternToolBarButtons - action buttons at top of page
+ - .patternToolBarBottom - seperator
+ - .patternSimpleLogo - logo used on 'simple' pages like the login screen
+ - .patternFormFieldVerticalForm - input field in vertically formatted form
+
+- Edit
+ - .patternSig - signature copy box
+ - .patternSaveOptions - holder for .patternSaveOptionsContents
+ - .patternSaveOptionsContents - checkboxes that change the state of a topic save; for instance "Force revision" checkbox
+ - .patternAccessKeyInfo - info block with access key information
+
+- Preview page
+ - .patternPreviewArea - container around preview of .patternTopic
+
+- Attach page
+ - .patternPrevious - attachment table of previous versions
+ - .patternMoveAttachment - container for "Move or Delete attachment"
+
+- Rename (rename, move, delete)
+ - patternRenameOptionsList - list of topics that can be updated
+
+- More
+ - patternDiffOptions - row of revision options under "Compare revisions"
+
+- Search results
+ - .patternSearchResultsHeader
+ - .patternSearchString
+ - .patternSearchResults
+ - .patternSearchResultCount
+ - .patternSearchResultsBegin - for changes template with noheader="on"
+ - .patternBookViewList
+
+- Print
+ - .patternTopicFooter - revision and author info at bottom of printed topic
+
+- [[WebLeftBarSearch]]
+ - .patternFormSpacer - for layout purposes
+ - .patternFormField
+ - .patternFormButton
+ - .patternChangeLanguage - change language button
## <a name="Layout per template"></a> Layout per template
### <a name="View template"></a> View template
-<img src="http://www.dementia.org/twiki//view/CSS_element_layout_view.pattern.tmpl.png" width="576" height="735" alt="CSS layout in View template" style="border: 1px solid #ddd" />
+<img src="http://www.dementia.org/twiki//view/CSS_element_layout_view.pattern.tmpl.png" width="586" height="746" alt="CSS layout in View template" style="border: 1px solid #ddd" />
--- TWiki:Main.ArthurClemens - 08 Aug 2004
+**_Related Topics:_** [[TWikiSkins]], [[AdminDocumentationCategory]]
--- /dev/null
+# <a name="TWiki._PatternSkin CSS Cookbook"></a><a name=" TWiki._PatternSkin CSS Cookbook"></a> [[PatternSkin]] CSS Cookbook
+
+**Questions and answers on how to customize the default look of TWiki for your own needs, using style sheets.** For configuring page elements, see [[PatternSkinCustomization]].
+
+<div>
+ <ul>
+ <li><a href="#Introduction"> Introduction</a><ul>
+ <li><a href="#When you need lots of graphic ch"> When you need lots of graphic changes: Rewriting CSS</a></li>
+ <li><a href="#When you need small adjustments:"> When you need small adjustments: Adding to existing CSS</a></li>
+ </ul>
+ </li>
+ <li><a href="#Recipes"> Recipes</a><ul>
+ <li><a href="#Hide the left bar"> Hide the left bar</a></li>
+ <li><a href="#Use different fonts"> Use different fonts</a></li>
+ <li><a href="#No top bar"> No top bar</a></li>
+ <li><a href="#Centered page"> Centered page</a></li>
+ <li><a href="#Centered page (with a border aro"> Centered page (with a border around the page)</a></li>
+ <li><a href="#Setting _EditTablePlugin styles"> Setting EditTablePlugin styles</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="Introduction"></a> Introduction
+
+PatternSkin uses 3 style sheets (attached to [[PatternSkin]]):
+
+- [layout.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/layout.css) - the positioning of main page elements (blocks), widths and heights
+- [stylestyle.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css) - fonts, sizes, margins and paddings
+- [colors.css](http://www.dementia.org/twiki//view/TWiki/PatternSkin/colors.css) - border colors, text colors and background colors
+
+When customizing your TWiki installation, you can either choose to completely rewrite all css styles, or to selectively override some styles. The latter option is by far less time consuming, but all depends on your graphical wishes.
+
+### <a name="When you need lots of graphic ch"></a> When you need lots of graphic changes: Rewriting CSS
+
+- Create a new topic that will contain your new CSS files
+- Attach 3 new style sheets to the topic
+- Point the CSS variables in [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] to your new files:
+
+ * Set TWIKILAYOUTURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/layout.css
+ * Set TWIKISTYLEURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/style.css
+ * Set TWIKICOLORURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/colors.css
+
+### <a name="When you need small adjustments:"></a> When you need small adjustments: Adding to existing CSS
+
+With CSS you cannot remove already defined classes, you can only add to it, or overwrite existing styles. <br /> Overriding default CSS is done with 3 variables: `USERLAYOUTURL`, `USERSTYLEURL`, `USERCOLORSURL`.
+
+- Create a new topic that will contain your new CSS files
+- Attach 1, 2 or 3 new style sheets to the topic, dependent on your CSS setup (if you don't change much, you might as well put everything in one CSS file, layout, margins and colors)
+- Point the CSS variables in [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] to your new files (below the `TWIKIXXXURL` variables):
+
+ * Set USERLAYOUTURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/layout.css
+ * Set USERSTYLEURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/style.css
+ * Set USERCOLORSURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/colors.css
+
+- If you use only little CSS and you've only attached one file, write:
+
+ * Set USERSTYLEURL = %PUBURLPATH%/%TWIKIWEB%/YourNewTopic/style.css
+
+Instead of setting these variables in [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]], you can set these in your home topic, or in any other topic. Setting style URL variables in:
+
+- [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]]: the style is visible for all users, site-wide
+- [[WebPreferences]]: the style is visible for all users in one web
+- Home topic: the style is visible for that one user when viewing the site
+- Some other topic: the style is only visible in that one topic
+
+User styles are always loaded after TWiki styles.
+
+The rest of this topic shows examples of small CSS changes.
+
+## <a name="Recipes"></a> Recipes
+
+### <a name="Hide the left bar"></a> Hide the left bar
+
+See example at: [[PatternSkinCssCookbookNoLeftBar]]
+
+### <a name="Use different fonts"></a> Use different fonts
+
+See example at: [[PatternSkinCssCookbookFonts]]
+
+### <a name="No top bar"></a> No top bar
+
+See example at: [[PatternSkinCssCookbookNoTopBar]]
+
+### <a name="Centered page"></a> Centered page
+
+See example at: [[PatternSkinCssCookbookCenterPage]]
+
+### <a name="Centered page (with a border aro"></a> Centered page (with a border around the page)
+
+See example at: [[PatternSkinCssCookbookCenterPageBorder]]
+
+### <a name="Setting _EditTablePlugin styles"></a> Setting EditTablePlugin styles
+
+See example at: [[PatternSkinCssCookbookEditTableStyle]]
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe: C"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: Center the page
+
+**This recipe shows how center the page horizontally.**
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL = %ATTACHURL%/centerpage.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe: C"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: Center the page with a border
+
+**This recipe shows how to put a border around the page, while centering the page horizontally.** The example on this page uses a gradient image as background - on top of a gray base color. You can choose to set no image of course.
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL = %ATTACHURL%/centerpageborder.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
+
+Add the dynamic variable link to the logo image to the topic text:
+
+ <style type="text/css" media="all">
+ html body {
+ background-image:url("%PUBURLPATH%/%TWIKIWEB%/PatternSkin/gradient_page.gif");
+ background-repeat:repeat-x;
+ }
+ #patternPageShadow {
+ background-image:url("%PUBURLPATH%/%TWIKIWEB%/PatternSkin/striped_pageshadow.gif");
+ }
+ </style>
+<div><img align="top" alt="info" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/info.gif" width="16" /> If you don't write this overloading style in a template and use an external <code>.css</code> file, you need to set the image to the absolute url: <pre>
+<style type="text/css" media="all">
+html body {
+background-image:url("http://www.dementia.org/twiki//view/TWiki/PatternSkin/gradient_page.gif");
+background-repeat:repeat-x;
+}
+</style>
+</pre> You can always write a <code><style></code> in a topic - all current browsers support this - but the page won't validate as valid XHTML. </div>
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe:_E"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: [[EditTable|TWiki:Plugins/EditTablePlugin]] style
+
+**Cookbook example to illustrate control over EditTable edit styles.**
+
+1. EditTable uses a monospace font in edit mode to make the input text width correspond to the set width of the table columns. The attached example style makes the text more readable by changing the monospace font to a naturally spaced one.
+2. EditTable table cell content is vertically centered. The example style makes the content aligned at the top.
+3. The buttons at the bottom (in edit mode) are visually the same as other buttons on TWiki pages. The example style makes them more distinctive.
+4. The example style gives the input fields a background color so that they stand out more.
+
+Test table:
+
+<a name="edittable1"></a>
+
+<div>
+ <form action="http://www.dementia.org/twiki/viewauth#edittable1" method="post" name="edittable1"><input name="ettablenr" type="hidden" value="1" /> <input name="etedit" type="hidden" value="on" /><table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Head1 </strong></th>
+ <th bgcolor="#99CCCC"><strong> Head2 </strong></th>
+ </tr>
+ <tr>
+ <td><strong>Hamlet:</strong> So much for this, sir; now shall you see the other.<br />You do remember all the circumstance? </td>
+ <td><strong>Horatio:</strong> Remember it, my lord! </td>
+ </tr>
+ </table><input name="etrows" type="hidden" value="2" /> <input type="submit" value="Edit table" /></form>
+</div>
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL = %ATTACHURL%/edittable.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe: F"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: Font variation
+
+**Cookbook example with other fonts and font colors.**
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL = %ATTACHURL%/fonts.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe: H"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: Hide the left bar
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL = %ATTACHURL%/hideleftbar_Dakar.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
--- /dev/null
+# <a name="PatternSkinCssCookbook Recipe: H"></a><a name=" _PatternSkinCssCookbook Recipe:"></a> [[PatternSkinCssCookbook]] Recipe: Hide the top bar
+
+**This recipe shows how to hide the top bar and to put the logo in the left bar.**
+
+<div> This line loads the extra style definition: <pre>
+ * Set USERSTYLEURL=%ATTACHURL%/notopbar.css
+</pre> You can write this line in [[TWiki/TWikiPreferences]], in [[Main/WebPreferences]], in your user topic or on a single page. </div>
+
+Add the dynamic variable link to the logo image to the topic text:
+
+ <style type="text/css" media="all">
+ #patternLeftBar { background-image:url("%PUBURLPATH%/%WEB%/%WEBPREFSTOPIC%/logo.gif"); }
+ </style>
+<div><img align="top" alt="info" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/info.gif" width="16" /> If you don't write this overloading style in a template and use an external <code>.css</code> file, you need to set the image to the absolute url: <pre>
+<style type="text/css" media="all">
+#patternLeftBar { background-image:url("http://www.dementia.org/twiki//view/%WEB%/WebPreferences/logo.gif"); }
+</style>
+</pre> You can always write a <code><style></code> in a topic - all current browsers support this - but the page won't validate as valid XHTML. </div>
-# <a name="Customization of _PatternSkin"></a><a name=" Customization of _PatternSkin"></a> Customization of PatternSkin
-
-This page describes ways to change the layout, fonts and colors of [[PatternSkin]].
-
-<div><span>Page contents:</span><ul>
- <li><a href="#Your own TWiki look"> Your own TWiki look</a></li>
- <li><a href="#Screen parts"> Screen parts</a><ul>
- <li><a href="#Top bar"> Top bar</a></li>
- <li><a href="#Left bar"> Left bar</a><ul>
- <li><a href="#Putting the left bar at the righ"> Putting the left bar at the right</a></li>
- </ul>
- </li>
- <li><a href="#Bottom bar"> Bottom bar</a></li>
- </ul>
- </li>
- <li><a href="#Customizing the logo"> Customizing the logo</a></li>
- <li><a href="#Fonts"> Fonts</a><ul>
- <li><a href="#Font style"> Font style</a></li>
- <li><a href="#Font size"> Font size</a></li>
- </ul>
- </li>
- <li><a href="#Colors"> Colors</a></li>
- <li><a href="#Tables"> Tables</a><ul>
- <li><a href="#Tables in topic text"> Tables in topic text</a><ul>
- <li><a href="#Topic text table example"> Topic text table example</a></li>
- </ul>
- </li>
- <li><a href="#Attachment table, Form table"> Attachment table, Form table</a></li>
- <li><a href="#Other templates"> Other templates</a></li>
- </ul>
- </li>
- </ul>
-</div>
-
-## <a name="Your own TWiki look"></a> Your own TWiki look
-
-You can easily create your own TWiki look by attaching modified css files to your home page:
-
-- If you want to change the layout of the page, download layout.css from [[PatternSkin]]
-- If you want to change the spacing or colors, download style.css from [[PatternSkin]]
-- modify the CSS in either style sheet, using tips from this page
-- [attach](http://www.dementia.org/twiki//attach/Main/admin) your modified layout.css and/or style.css to your home page
-- as shown below, add the `USERLAYOUTURL` and `USERSTYLEURL` settings to [[your home page|Main/Admin]]
-
- * Personal TWiki.PatternSkin CSS settings
- * Set USERLAYOUTURL = %PUBURL%/%MAINWEB%/%WIKINAME%/layout.css
- * Set USERSTYLEURL = %PUBURL%/%MAINWEB%/%WIKINAME%/style.css
-
-## <a name="Screen parts"></a> Screen parts
-
-The PatternSkin view template uses four screen parts:
-
-- The topic part - contains besides the topic content: action buttons, form table, attachment table, topic info
-- Top bar - used for a logo, contains Go box
-- Left bar - site and web navigation, contains a personal link block; may contain a Go box
-- Bottom bar - copyright, disclaimer
-
-These parts are dynamically included topics:
-
-- Top bar: [[WebTopBar]]
-- Left bar: included topic [[WebLeftBar]] (one WebLeftBar topic per web)
- - Personal links block: Main.%USERNAME%LeftBar. Your own personal leftbar: Main.adminLeftBar
-- Bottom bar: included topic [[WebBottomBar]]
-
-### <a name="Top bar"></a> Top bar
-
-The top bar is mainly used as branding space. To change the screen room for the logo, see below, [[Customizing the logo|Main/TOPIC#Customizing_the_logo]].
-
-### <a name="Left bar"></a> Left bar
-
-The menu items are css-formatted bullet lists. So in [[WebLeftBar]] you write:
-
- * *Group*
- * [[SomeTopic][Link 1]]
- * [[AnotherTopic][Link 2]]
- * [[ThirdTopic][Link 3]]
-
-The left bar may contain a Go box instead of the top bar. Use:
-
- * <input type="text" name="topic" size="16" />
-
-The personal left bar block is formatted like the rest of the left bar.
-
-#### <a name="Putting the left bar at the righ"></a> Putting the left bar at the right
-
-If you have a low screen resolution of say, 640 by 480 pixels, it can be useful to put the left bar "out of the way", at the right side of the page - at the cost of a horizontal scroll bar to access the left (now right) bar. This CSS does this:
-
-> Add this to layout.css:
->
-> .twikiMain {
-> margin-left:0px;
-> }
-> .twikiLeftBar {
-> margin-left:100%;
-> }
-> .twikiBottomBar {
-> margin-left:1em;
-> margin-right:0;
-> padding:0;
-> }
->
-> Add this to style.css:
->
-> .twikiMain {
-> padding-left:1em;
-> padding-right:1em;
-> }
-> .twikiBottomBarContents {
-> padding-left:0em;
-> }
-
-This CSS is also attached to this topic, [LowRes.css](http://www.dementia.org/twiki//view/LowRes.css). To use this style, add this to your home page:
-
- * Personal TWiki.PatternSkin CSS settings
- * Set USERLAYOUTURL = %PUBURL%/%SYSTEMWEB%/PatternSkinCustomization/LowRes.css
-
-### <a name="Bottom bar"></a> Bottom bar
-
-The bottom bar contains the copyright disclaimer, but may contain other information, perhaps a web list.
-
-## <a name="Customizing the logo"></a> Customizing the logo
-
-The top bar is 60 pixels high, and has a padding of 5 pixels on top, bottom and left, so the logo should be 50 pixels high. If your logo image has a different size, you can either alter the padding in `style.css` (.twikiTopBarContents) or change the top bar height in `layout.css` (look for the comment _setting the height of the top bar_).
-
-You can also choose to set a background image for the top bar. In `style.css`, add this to .twikiTopBar:
-
- background-position:top left;
- background-attachment:fixed;
- background-repeat:no-repeat;
- background-image:url(http://absolute_path_to_your_image);
-
-and set the correct image file path.
-
-## <a name="Fonts"></a> Fonts
-
-### <a name="Font style"></a> Font style
-
-Font styles are defined in `style.css` in these places:
-
- html body {
- font-family:"Lucida Grande", verdana, lucida, helvetica, sans-serif;
- }
- h1, h2, h3, h4, h5, h6 {
- font-family:"Lucida Grande", helvetica, lucida, verdana, sans-serif;
- }
- textarea {
- font-family:monospace;
- }
- input, select {
- font-family:verdana,arial,sans-serif;
- }
- .twikiSeparator {
- font-family:Arial,sans-serif;
- }
- .twikiEditPage .twikiSig input {
- font-family:monospace;
- }
-
-### <a name="Font size"></a> Font size
-
-Font sizes in PatternSkin are scalable. This means that even on Windows Explorer, the text in the browser can scale with the user settings (in contrast to many sites where texts have a fixes pixel size, these cannot be changed by the user).
-
-Scalable text is a big accessibility asset. If you notwithstanding want to have a fixed font, or if you want to set the default size smaller or bigger, the easiest way is to make a new entry for body, below the 2 other entries:
-
- html body {
- ... (keep)
- }
- html>body {
- ... (keep)
- }
- html body {
- font-size:11px;
- }
-
-## <a name="Colors"></a> Colors
-
-<span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span>
-
-To create a customised palette of colors, see [[PatternSkinPalette]].
-
-## <a name="Tables"></a> Tables
-
-### <a name="Tables in topic text"></a> Tables in topic text
-
-If you have [[TablePlugin]] installed, tables in topics take on the properties from `TABLEATTRIBUTES`. Without [[TablePlugin]] (if not installed, or disabled in [[TWikiPreferences]] under `DISABLEDPLUGINS`), the tables have a default appearance that is hardcoded in Render.pm. Styles of topic text tables are not set in a style sheet. If you want to have control over the design of tables, for instance if you work with a style guide, you should add table styles under `.twikiTopic`. See for an example below.
-
-#### <a name="Topic text table example"></a> Topic text table example
-
-This is an example css to give tables in topic text a similar appearance. This will override settings in [[TablePlugin]]. This code should be added below the other `.twikiTopic` code in style.css:
-
- .twikiTopic table {
- border-collapse:collapse;
- padding:0px;
- border-spacing:0px;
- empty-cells:show;
- border:0px;
- }
- .twikiTopic table th {
- background-color:#ccc;
- padding:0.5em 1em;
- }
- .twikiTopic table td {
- border:1px solid #eee;
- }
- /* override hardcoded font color */
- .twikiTopic table font {
- color:#1e5bbd;
- }
- .twikiTopic table th a:link,
- .twikiTopic table th a:visited {
- color:#1e5bbd;
- text-decoration:none;
- }
- /* don't show hover background color because we have a table header background */
- .twikiTopic table th a:hover {
- background-color:transparent;
- text-decoration:underline;
- border-width:1px;
- }
- /* no underline if a sort indicator (line) is displayed */
- .twikiTopic table th.twikiSortedDescendingCol a:hover,
- .twikiTopic table th.twikiSortedAscendingCol a:hover {
- text-decoration:none;
- }
- /* hide sort icons */
- .twikiTopic table th img,
- .twikiTopic table th a:link img,
- .twikiTopic table th a:visited img {
- display:none;
- }
-
-### <a name="Attachment table, Form table"></a> Attachment table, Form table
-
-The appearance of the form table and the attachment table are set in style.css under `.twikiForm` and `.twikiAttachments`. Text in these tables is set to wrap, so often the dates are wrapped to two lines. If you prefer to have text on one line and are not disturbed by an extra wide attachment table (or when you screen resolution is big enough), add this code to `.twikiAttachments td, .twikiForm td {`:
-
- white-space:nowrap;
-
-### <a name="Other templates"></a> Other templates
-
-Other templates than `view` use the style `.twikiVersatileTable` for, as the name says, tables with versatile functions. Versatile tables appear a little diffent in each template page (differences are created using multiple classes). Versatile tables are mostly used to format forms to highlight important parts and to dim less important parts. See `style.css` for specific settings for each template.
-
--- TWiki:Main.ArthurClemens - 28 Aug 2004
-Peter Thoeny is the author of TWiki and therefore a TWiki:Codev/CoreTeam member and a [[TWikiContributor]].
+Peter Thoeny is the founder of TWiki and TWiki.org, is a [[Core Team|TWiki:Codev/CoreTeam]] member, and a [[TWikiContributor]].
-See home page at TWiki:Main/%TOPIC%
+See home page at TWiki:Main.PeterThoeny
# <a name="Plain Skin"></a> Plain Skin
-The plain skin can be used to get the rendered topic text without any page decoration.
+The plain skin is used to get the rendered topic text without any page decoration such as side, top or bottom bars. For example, TWiki uses this skin for pop-up help windows. It also can be used to display topic content inside an [IFRAME](http://www.htmlhelp.com/reference/html40/special/iframe.html).
This skin is part of every TWiki distribution.
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right"> Description: </td>
- <td> The plain skin can be used to get the rendered topic text without any page decoration </td>
+ <td> Shows rendered topic text without any page decoration </td>
</tr>
<tr>
<td align="right"> Screenshot: </td>
<td><a href="http://www.dementia.org/twiki//view/fullscreen.gif"><img alt="Click for full screen image" height="130" src="http://www.dementia.org/twiki//view/screenshot.gif" width="600" /></a></td>
</tr>
<tr>
+ <td align="right"> Preview: </td>
+ <td>[[%WEB%/%TOPIC%?skin=plain]]</td>
+ </tr>
+ <tr>
<td align="right"> Base Name: </td>
<td> plain </td>
</tr>
<tr>
<td align="right"> Skin Author: </td>
- <td> TWiki:Main/PeterThoeny </td>
+ <td> TWiki:Main.PeterThoeny, TWiki:Main.CrawfordCurrie </td>
</tr>
<tr>
<td align="right"> Skin Version: </td>
- <td> 27 Jul 2004 (v1.000) </td>
+ <td> 04 Jan 2006 (v8096) </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 04 Jan 2006: </td>
+ <td> Dakar update (v8096) </td>
+ </tr>
+ <tr>
<td align="right"> 27 Jul 2004: </td>
<td> Initial version (v1.000) </td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Note:_** The Description, Screenshot and Base Name rows are needed by the [[TWikiSkinBrowser]]
-**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]]
-
--- TWiki:Main/PeterThoeny - 27 Jul 2004
+**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
--- /dev/null
+<form action="http://www.dementia.org/twiki/viewauth/Main/WebHome" enctype="multipart/form-data" method="post" name="editpreferences">
+ <p>
+ </p>
+ <h1><a name="%TOPIC%"></a><a name=" %TOPIC%"></a> %TOPIC% </h1>
+ <p> Allows editing of preferences using fields predefined in a [[TWiki/TWikiForms]]. However, the edit fields are inlined in the text, similar to how tables are edited in TWiki:Plugins/EditTablePlugin. </p>
+ <p>
+ </p>
+ <div>
+ <ul>
+ <li><a href="#Syntax Rules"> Syntax Rules</a></li>
+ <li><a href="#Examples"> Examples</a></li>
+ <li><a href="#Plugin Settings"> Plugin Settings</a></li>
+ <li><a href="#Plugin Installation Instructions"> Plugin Installation Instructions</a></li>
+ <li><a href="#Plugin Info"> Plugin Info</a></li>
+ </ul>
+ </div>
+ <p> Insert the <code>%EDITPREFERENCES%</code> variable (see below) anywhere in your topic. It will be replaced by a button that allows editing each preference in its predefined input format (or a text box, when no format is defined for this preference). </p>
+ <p> In edit mode, the edit button is replaced by save and cancel buttons, with their obvious meanings. </p>
+ <p>
+ </p>
+ <h2><a name="Syntax Rules"></a> Syntax Rules </h2>
+ <p>
+ </p>
+ <ul>
+ <li><code>%EDITPREFERENCES{ "</code> <em>topic</em> <code>" }%</code><ul>
+ <li><em>topic</em> references a [[TWiki/TWikiForms]] defining the format of the edit fields for preferences. It may be prefixed by a web. </li>
+ <li> If a preference setting is not mentioned in the form referenced by <em>topic</em>, a text input box of the specified length is provided. </li>
+ <li> Otherwise, the input can be through textareas, select, radio, checkbox, date, or text, as provided by [[TWiki/TWikiForms]]. </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <h2><a name="Examples"></a> Examples </h2>
+ <p>
+ </p>
+ <ul>
+ <li><code>%EDITPREFERENCES{ "%TWIKIWEB%.TWikiPreferencesForm" }%</code></li>
+ </ul>
+ <p>
+ </p>
+ <h2><a name="Plugin Settings"></a> Plugin Settings </h2>
+ <p> Plugin settings are stored as preferences variables. To reference a plugin setting write <code><b>%<plugin>_<setting>%</b></code>, i.e. <code><b>%PREFERENCESPLUGIN_SHORTDESCRIPTION%</b></code></p>
+ <p>
+ </p>
+ <ul>
+ <li> One line description, is shown in the [[TWiki/TextFormattingRules]] topic: <ul>
+ <li> Set SHORTDESCRIPTION = Allows editing of preferences using fields predefined in a form </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <h2><a name="Plugin Installation Instructions"></a> Plugin Installation Instructions </h2>
+ <p><strong><em>Note:</em></strong> You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the server where TWiki is running. </p>
+ <p>
+ </p>
+ <ul>
+ <li> Download the ZIP file from the Plugin web (see below) </li>
+ <li> Unzip <code><b>%TOPIC%.zip</b></code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> File: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
+ <td> Plugin topic </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/%TOPIC%.txt,v</b></code></td>
+ <td> Plugin topic repository </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/%TOPIC%.pm</b></code></td>
+ <td> Plugin Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiPreferencesForm.txt</b></code></td>
+ <td> Example form </td>
+ </tr>
+ </table>
+ </li>
+ <li> (Dakar) Visit <code>configure</code> in your TWiki installation, and enable the plugin in the {Plugins} section. </li>
+ <li> If the installation was successful, an edit button should appear below: <input name="prefsaction" type="submit" value="Edit" /></li>
+ </ul>
+ <p>
+ </p>
+ <h2><a name="Plugin Info"></a> Plugin Info </h2>
+ <p>
+ </p>
+ <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Plugin Author: </td>
+ <td> TWiki:Main.ThomasWeigert </td>
+ </tr>
+ <tr>
+ <td align="right"> Plugin Version: </td>
+ <td> 08 May 2005 </td>
+ </tr>
+ <tr>
+ <td align="right"> Change History: </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="right"> 26 May 2005: </td>
+ <td> Crawford Currie recoded to use code from Form.pm to render form fields. </td>
+ </tr>
+ <tr>
+ <td align="right"> 08 May 2005: </td>
+ <td> Add plugin preference to define default input length </td>
+ </tr>
+ <tr>
+ <td align="right"> 07 May 2005: </td>
+ <td> Initial version </td>
+ </tr>
+ <tr>
+ <td align="right"> TWiki Dependency: </td>
+ <td> $TWiki::Plugins::VERSION 1.026 </td>
+ </tr>
+ <tr>
+ <td align="right"> CPAN Dependencies: </td>
+ <td> none </td>
+ </tr>
+ <tr>
+ <td align="right"> Other Dependencies: </td>
+ <td> none </td>
+ </tr>
+ <tr>
+ <td align="right"> Perl Version: </td>
+ <td> 5.005 </td>
+ </tr>
+ <tr>
+ <td align="right"> License: </td>
+ <td> GPL (<a href="http://www.gnu.org/copyleft/gpl.html" target="_top">GNU General Public License</a>) </td>
+ </tr>
+ <tr>
+ <td align="right"> TWiki:Plugins/Benchmark: </td>
+ <td>[[TWiki/GoodStyle]] nn%, [[TWiki/FormattedSearch]] nn%, %TOPIC% nn% </td>
+ </tr>
+ <tr>
+ <td align="right"> Plugin Home: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
+ </table>
+ <p><strong><em>Related Topics:</em></strong> [[TWiki/TWikiPreferences]], [[TWiki/TWikiForms]]</p>
+ <p> -- TWiki:Main.ThomasWeigert - 08 May 2005 </p>
+ <p>
+ </p>
+</form>
-**Background Image for Preview**
+# <a name="Background Image for Preview"></a> Background Image for Preview
-Preview looks like the real page, but the links leed to an oops dialog warning users of not yet saved topics. In addition, a background with a "PREVIEW" watermark is shown to have visual clue that you are previewing a topic. You can change the background image by specifying the name of an attached background image file in the PREVIEWBGIMAGE variable in the [[TWikiPreferences]].
+Preview looks like the real page, but the links lead to an oops dialog warning users of not-yet-saved topics. In addition, a background with a "PREVIEW" watermark is shown to have visual clue that you are previewing a topic. You can change the background image by specifying the name of an attached background image file in the PREVIEWBGIMAGE variable in the [[TWikiPreferences]].
Remarks:
- You also could attach a new image file to this topic.
- You can override the PREVIEWBGIMAGE preference variable in your personal home page.
--- TWiki:Main.PeterThoeny - 02 Oct 2000
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
# <a name="Print Skin"></a> Print Skin
-The print skin, useful to print pages with a small header and footer.
+The print skin, useful to print pages with a small header and footer. Other skins, such as [[PatternSkin]], may introduce their own print skin.
This skin is part of every TWiki distribution.
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right"> Description: </td>
- <td> The print skin, useful to print pages with a small header and footer </td>
+ <td> Useful to print pages with a small header and footer </td>
</tr>
<tr>
<td align="right"> Screenshot: </td>
<td><a href="http://www.dementia.org/twiki//view/fullscreen.gif"><img alt="Click for full screen image" height="130" src="http://www.dementia.org/twiki//view/screenshot.gif" width="600" /></a></td>
</tr>
<tr>
+ <td align="right"> Preview: </td>
+ <td>[[%WEB%/%TOPIC%?skin=print]]</td>
+ </tr>
+ <tr>
<td align="right"> Base Name: </td>
<td> print </td>
</tr>
</tr>
<tr>
<td align="right"> Skin Version: </td>
- <td> 27 Jul 2004 (v1.000) </td>
+ <td> 04 Jan 2006 (v8096) </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 04 Jan 2006: </td>
+ <td> Dakar update (v8096) </td>
+ </tr>
+ <tr>
<td align="right"> 27 Jul 2004: </td>
<td> Initial version (v1.000) </td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Note:_** The Description, Screenshot and Base Name rows are needed by the [[TWikiSkinBrowser]]
-**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]]
-
--- TWiki:Main/PeterThoeny - 27 Jul 2004
+**_Related topic:_** [[TWikiSkins]], [[TWikiSkinBrowser]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
-Like Save but does not email people on the [[WebNotify]] notification list - same effect as checking "Minor changes, don't notify".
+Like Save but does not e-mail people on the [[WebNotify]] notification list - same effect as checking "Minor changes, don't notify".
--- TWiki:Main.RandyKramer - 15 Aug 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+This topic is a placeholder for registrations not yet completed.
+
+Attachments are made when people first register, held pending until the registration is confirmed and approved, and are removed when registration is completed.
+
+- - - Set ALLOWTOPICVIEW = [[TWikiAdminGroup]]
+ - Set ALLOWTOPICRENAME = [[TWikiAdminGroup]]
+ - Set ALLOWTOPICCHANGE = [[TWikiAdminGroup]]
+
+**_Related Topics:_** [[AdminToolsCategory]]
> Repetition takes precedence over concatenation, which in turn takes precedence over alternation. A whole subexpression may be enclosed in parentheses to override these precedence rules.
>
> The backreference \\n, where n is a single digit, matches the substring previously matched by the nth parenthesized subexpression of the regular expression.
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+- <img src="http://www.dementia.org/twiki//view/Main/WebHome/move.gif" width="16" height="16" alt="move" /> **Rename, move or delete this web:**
+ - **[Rename/move/delete web...](http://www.dementia.org/twiki/rename/Main/WebHome?action=renameweb)**, looking for references in _all public webs_ - See also: [[ManagingWebs]]
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 21 Mar 2004 (V1.031) </td>
+ <td> 21 Nov 2004 (V1.032) </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 21 Nov 2004: </td>
+ <td> Added benchmarks (no code changes) </td>
+ </tr>
+ <tr>
<td align="right"> 21 Mar 2004: </td>
- <td> Internal change: Fixed inofficial function call </td>
+ <td> Internal change: Fixed unofficial function call </td>
</tr>
<tr>
<td align="right"> 01 Mar 2004: </td>
<td> 5.005 </td>
</tr>
<tr>
+ <td align="right"> TWiki:Plugins/Benchmark: </td>
+ <td>[[TWiki/GoodStyle]] 97%, [[TWiki/FormattedSearch]] 98%, [[Main/RenderListPlugin]] 93% </td>
+ </tr>
+ <tr>
<td align="right"> Plugin Home: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]], TWiki:Plugins/TreePlugin
--- TWiki:Main/PeterThoeny - 21 Mar 2004
+-- TWiki:Main/PeterThoeny - 21 Nov 2004
-<font>Request for reset of password</font><br />
+# <a name="Reset Password"></a> Reset Password
-Please only use this **ResetPassword** form in case you really forgot your password. Otherwise just change it using [[ChangePassword]]. Thank you.
+If you didn't forget your password, use [[ChangePassword]] to change it to a new one. Otherwise, use this form to get a new one e-mailed to you. Your [[LoginName]] is listed on [[TWikiUsers]].
-<form action="http://www.dementia.org/twiki//passwd/Main/WebHome" method="post" name="passwd">
+%X% **_Note_**: you **must** have at least one valid registered e-mail to be able to reset your password. If none of your registered e-mail addresses is valid, and you have forgotten your password, contact .
+
+<form action="http://www.dementia.org/twiki/passwd/Main/WebHome" method="post" name="passwd">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td align="right"> Your [[TWiki/WikiName]]: </td>
- <td><input name="username" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> New password: </td>
- <td><input name="password" size="40" type="password" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> Retype new password: </td>
- <td><input name="passwordA" size="40" type="password" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> <input name="TopicName" type="hidden" value="%TOPIC%" /> <input name="installPasswd" type="hidden" value="requestReset" /></td>
- <td><input type="submit" value=" Request password reset " /> (Fields marked <code><font color="red">**</font></code> are required) </td>
+ <td align="right"> Your [[TWiki/LoginName]]: </td>
+ <td><input name="LoginName" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
</tr>
- </table>
-</form>
+ </table><input name="action" type="hidden" value="resetPassword" /> <input name="TopicName" type="hidden" value="%TOPIC%" /> <input type="submit" value=" Request password reset " /></form>
+
+After submitting this form, you will receive an e-mail with your new, **system-generated** password, and a link to a page where you can change it.
-After submitting this form you will see a page with your **new password** appearing **encrypted**.
+If you continue to have problems, please e-mail for help.
-You will have to e-mail this information to the Wiki webmaster, , who will set your account to use the new password.
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
-**_Note to administrator:_** The reset password form applies only if TWiki uses Basic Authentication, e.g. a `.htpassword` file managed by TWiki. It does not apply if you are using external authentication, such as an IT managed password system. (remove this note if you are using Basic Authentication; replace this topic with a note describing how to reset the password in your organization)
+<table bgcolor="yellow">
+ <tr>
+ <td><strong><em>Note to administrator:</em></strong> This form applies only if TWiki uses a {PasswordManager} that supports changing passwords (e.g. TWiki::Users::HtPasswdUser). Otherwise replace this topic with a note describing how to change the password in your organization). See [[Main/TWikiUserAuthentication]] for more information. </td>
+ </tr>
+</table>
## <a name="Answer:"></a> Answer:
-That is an indication that %WIKITOOLNAME% can't find the `egrep` and `fgrep` commands on your system. Check the `$egrepCmd` and `$fgrepCmd` variables in `twiki/lib/TWiki.cfg`.
+That is an indication that %WIKITOOLNAME% can't find the `egrep` and `fgrep` commands on your system. Check the `{RCS}EgrepCmd}` and `{RCS}{FgrepCmd}` settings in [configure](http://www.dementia.org/twiki/configure).
**_Back to:_** [[TWikiFAQ]]
--- TWiki:Main.PeterThoeny - 26 Jan 2001 <br />
+**_Related Topics:_** [[AdminDocumentationCategory]]
<div>
<ul>
- <li><a href="#Basic Search Form"> Basic Search Form</a></li>
- <li><a href="#Advanced Search Form"> Advanced Search Form</a></li>
+ <li><a href="#Search Pages"> Search Pages</a></li>
<li><a href="#Formatted Searches"> Formatted Searches</a></li>
<li><a href="#Search Preferences"> Search Preferences</a></li>
</ul>
</div>
-## <a name="Basic Search Form"></a> Basic Search Form
+## <a name="Search Pages"></a> Search Pages
-The [[WebSearch]] form offers basic search features:
+There are two search pages; [[WebSearch]] offers basic search features, while [[WebSearchAdvanced]] offers more control over searches.
-- Search field: Enter one or more keywords
-- All webs flag: Check the flag if you want to search all public webs, not just the current web
-- Scope: Select if you want to search the topic title, text body or both
-
-The search is keyword based like in a typical search engine:
+By default searches are keyword based like in a typical search engine:
- Specify word(s) you want to find
- Multiple words form an **AND** search, `intranet web service` returns all pages that have the three words anywhere in the page
- If you want to search for a word in the stop word list, prefix the word with a plus sign
- **Example:** To search for all topics that contain `"SOAP"`, `"WSDL"`, a literal `"web service"`, but not `"shampoo"`,%BR% enter this: `soap +wsdl "web service" -shampoo`
-## <a name="Advanced Search Form"></a> Advanced Search Form
-
-The [[WebSearchAdvanced]] form offers more control over search.
-
-TWiki supports three types of searches:
-
-- `keyword`: The basic search type
-- `literal`: Simple search where text is searched literally
-- `regex`: A [[RegularExpression]] search for power users
-
-TWiki's regex search is a set of regular expression patterns:
+Regular expression search searches for a set of regular expression patterns:
-- Patterns are delimited by a semicolon
+- Patterns are separated by semicolons
- An AND search is performed for the list of patterns
- An exclamation point preceeding a pattern indicates an AND NOT search; use it to exclude a pattern, like `!web service`
- If you want to search for a semicolon or an exclamation point, escape them with a leading backslash, like `\!shampoo`
## <a name="Formatted Searches"></a> Formatted Searches
-You can embed a nicely [[formatted search|Main/FormattedSearch]] in a topic by using the `%SEARCH{}%` variable described in [[TWikiVariables]].
+You can embed a nicely [[formatted search|Main/FormattedSearch]] in a topic by using the `%SEARCH{}%` variable described in [[TWikiVariables#VarSEARCH]].
## <a name="Search Preferences"></a> Search Preferences
-The [[TWikiPreferences]] has these settings:
+[[TWikiPreferences]] defines these search preferences:
- `SEARCHDEFAULTTTYPE`: Default search type for search forms which calls the `search` script
+ - Currently `%SEARCHDEFAULTTTYPE%`
- `SEARCHVARDEFAULTTYPE`: Default search type for `%SEARCH{}` variable
-- `SEARCHSTOPWORDS`: List of stop words
+ - Currenty `%SEARCHVARDEFAULTTYPE%`
+- `SEARCHSTOPWORDS`: List of stop words (common words and characters to exclude from a keyword search)
+ - Currently `%SEARCHSTOPWORDS%`
--- TWiki:Main.PeterThoeny - 18 Jan 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="Search Pattern Cookbook"></a><a name=" Search Pattern Cookbook"></a> Search Pattern Cookbook
+
+The Search function in TWiki is very powerful. Especially searches using a [[RegularExpression]] play an important part of tapping TWiki's full potential. Unfortunately [[RegularExpressions]] can be incredibly obscure to the uninitiated.
+
+Most people not familiar (enough) with Regular Expressions mostly cut and paste (and maybe tweak) from existing examples. This page intends to collect lots of examples together.
+
+<div>
+ <ul>
+ <li>
+ <ul>
+ <li><a href="#Pattern 1: Extract values from a"> Pattern 1: Extract values from a table</a><ul>
+ <li><a href="#Problem definition"> Problem definition</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li><a href="#Pattern 2: List generated from f"> Pattern 2: List generated from form classification</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Test case"> Test case</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ </ul>
+ </li>
+ <li><a href="#Pattern 3a: listbox with all use"> Pattern 3a: listbox with all user names</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li><a href="#Pattern 3b: listbox with all use"> Pattern 3b: listbox with all user names - select multiple names</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ <li><a href="#Test case"> Test case</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li><a href="#Pattern 4: Extract the parent of"> Pattern 4: Extract the parent of a given topic</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ <li><a href="#Test Case"> Test Case</a></li>
+ </ul>
+ </li>
+ <li><a href="#Pattern 5: Search and display th"> Pattern 5: Search and display the home topics of public webs in a list</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ <li><a href="#Test case"> Test case</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li>
+ <ul>
+ <li><a href="#Alternative solution"> Alternative solution</a></li>
+ </ul>
+ </li>
+ <li><a href="#Pattern 6: Extract a value from"> Pattern 6: Extract a value from a bullet list</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ <li><a href="#Test case"> Test case</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#TWiki Installation Error">TWiki Installation Error</a><ul>
+ <li><a href="#Pattern 7: Search for Form and M"> Pattern 7: Search for Form and Meta data: explained</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ </ul>
+ </li>
+ <li><a href="#Pattern 8: Search all topics tha"> Pattern 8: Search all topics that have been moved</a><ul>
+ <li><a href="#Problem"> Problem</a></li>
+ <li><a href="#Solution"> Solution</a></li>
+ </ul>
+ </li>
+ <li><a href="#Contributors"> Contributors</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="Pattern 1: Extract values from a"></a> Pattern 1: Extract values from a table
+
+### <a name="Problem definition"></a> Problem definition
+
+Suppose there is a topic with a table defining entries in a TWikiForm. I.e. they define select menu items in a form template. They are then formatted like:
+
+ | *Name* | *Type* | *Tooltip message* |
+ | option1 | option | |
+ | option2 | option | |
+ | option3 | option | |
+
+How to extract the 'name' values, i.e. 'option1', 'option2' and 'option3' and put them in a HTML form select input?
+
+### <a name="Solution"></a> Solution
+
+The following search pattern can be employed:
+
+ <form>
+ <select>
+ %SEARCH{ "^\|[^\|]*\| *option *\|" topic="%TOPIC%" regex="on" multiple="on" nosearch="on" nototal="on" format="<option>$pattern(^\| *(.*?) *\|.*)</option>" }%
+ </select>
+ </form>
+
+which is, in effect:
+
+<form><select><h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </select></form>
+
+%BR%
+
+## <a name="Pattern 2: List generated from f"></a> Pattern 2: List generated from form classification
+
+### <a name="Problem"></a> Problem
+
+Imagine a TWiki form-based topic classification, i.e. every page has a form with several fields. How to:
+
+1. create a search to display all topics where one form field is set to a certain value
+2. create a search to filter the list above based on the values of a second form field
+
+### <a name="Test case"></a> Test case
+
+In practice: %BR% Image a TWiki form with two fields:
+
+- TopicClassification = One, Two or Three
+- TopicStatus = Test or Final
+
+We will:
+
+1. List all topics where the TopicClassification field is set to 'Two'
+2. Enable the user to filter this list based on the values of TopicStatus
+
+### <a name="Solution"></a> Solution
+
+ %SEARCH{"[T]opicClassification.*value\=.*Two;[T]opicStatus.*value\=.*%URLPARAM{type}%"
+ regex="on" casesensitive="on" nosearch="on"
+ format=" * $topic - <font face=\"arial,helvetica\" size=\"1\">
+ _last modified by_ $wikiusername _on_ $date </font> %BR%
+ <font face=\"arial,helvetica\" size=\"1\"> $formfield(TopicStatus) </font>"
+ sort="topic"}%
+
+The filtering select dialogue is created as in Pattern 1:
+
+ %STARTSIDEBAR%
+ *Filter:* %BR%
+ <form name="selectType" action="%SCRIPTURLPATH{"view"}%/%WEB%/" >
+ <select name="type" size="1" onchange="document.location=this.value;">
+ %SEARCH{ "^\|[^\|]*\| *option *\|" topic="TopicClassification" web="%WEB%" regex="on"
+ multiple="on" nosearch="on" nototal="on" format="<option value=%INCLUDINGTOPIC%?type=$pattern(^\| *(.*?) *\|.*)>$pattern(^\| *(.*?) *\|.*)</option>" }%
+ <option value=%INCLUDINGTOPIC%>All pages</option> </select>
+ </form>
+ %STOPSIDEBAR%
+
+This will create similar functionality as TWiki:Plugins.TopicClassificationAddOn %BR%
+
+## <a name="Pattern 3a: listbox with all use"></a> Pattern 3a: listbox with all user names
+
+### <a name="Problem"></a> Problem
+
+How to populate a list box with all usernames of registered TWiki users
+
+### <a name="Solution"></a> Solution
+
+ <form name="testing" action="%SCRIPTURLPATH{"view"}%/%MAINWEB%" method="get">
+ <select name="topic">
+ <option>Select user...</option>
+ %SEARCH{ "Name:;Email:;Country:" web="%MAINWEB%" type="regex" nosearch="on" nototal="on" format="<option>$topic</option>" }%
+ </select>
+ <input type="submit" value="Go" />
+ </form>
+
+Which expands to this: (here limited to all Z\* users because TWiki.org has so many)
+
+<form action="http://www.dementia.org/twiki/view/Main" method="get" name="testing"><select name="topic"><option>Select user...</option>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </select> <input type="submit" value="Go" /></form>
+
+This searches all topics in the Main web that contain "Name", "Email" and "Country" bullets. Alternatively, do a [[FormattedSearch]] with `multiple="on"` on the [[Main.TWikiUsers|Main/TWikiUsers]] topic.
+
+## <a name="Pattern 3b: listbox with all use"></a> Pattern 3b: listbox with all user names - select multiple names
+
+### <a name="Problem"></a> Problem
+
+Suppose you want to send mail from a form on topic page to a selected list of **_multiple_** [[TWikiUsers]]
+
+### <a name="Solution"></a> Solution
+
+The example of Pattern 3a produces the list box. Add a MULTIPLE to the _select_ statement, i.e.:
+
+ <select name="topic" size="2" MULTIPLE>
+
+Please note that the Search pattern is unchanged compared to Pattern 3a. The change is in the HTML form element.
+
+### <a name="Test case"></a> Test case
+
+The Search pattern 3a with the abovementioned modification is, in effect:
+
+<form action="http://www.dementia.org/twiki/view/Main" method="get" name="testing"><select multiple="MULTIPLE" name="topic" size="2"><option>Select user...</option>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </select> <input type="submit" value="Go" /></form>
+
+## <a name="Pattern 4: Extract the parent of"></a> Pattern 4: Extract the parent of a given topic
+
+### <a name="Problem"></a> Problem
+
+How to get to the parent of the current topic to display on the page?
+
+### <a name="Solution"></a> Solution
+
+You might think that the following Search would do the trick:
+
+ %SEARCH{ "^%BASETOPIC%$" scope="topic" nosearch="on" type="regex" nototal="on" format="[[$parent][parent_link]]" }%
+
+However, the `[[$parent][parent_link]]` link fails if the topic has no parent set (`$parent` will be empty). You can use some [[SpreadSheetPlugin]] magic to conditionally link to the parent or to `WebHome`: `[[$percntCALC{$IF($EXACT($parent,), %HOMETOPIC%, $parent)}$percnt][parent_link]]`
+
+So the total Search query to find a topic's parent topic is:
+
+ %SEARCH{ "^%BASETOPIC%$" scope="topic" nosearch="on" type="regex" nototal="on" format="[<nop>[$percntCALC{$IF($EXACT($parent,), <nop>%HOMETOPIC%, $parent)}$percnt][parent_link]]" }%
+
+### <a name="Test Case"></a> Test Case
+
+The parent topic of this topic is:
+
+# TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+## <a name="Pattern 5: Search and display th"></a> Pattern 5: Search and display the home topics of public webs in a list
+
+### <a name="Problem"></a> Problem
+
+How to find and display public webs in a drop down list box.
+
+### <a name="Solution"></a> Solution
+
+_Thanks to TWiki:Main.PeterThoeny for these solutions._
+
+ <form>
+ <select name="topic">
+ <option value="%TOPIC%">Select...</option>
+ %SEARCH{ "%HOMETOPIC%" scope="topic" web="all" topic="%HOMETOPIC%" format="<option value=\"$web.$topic\">$web</option>" separator=" " }%
+ </select>
+ <input type="submit" value="Go" />
+ </form>
+
+### <a name="Test case"></a> Test case
+
+Public webs of TWiki.
+
+<form><select name="topic"><option value="%TOPIC%">Select...</option>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </select> <input type="submit" value="Go" /></form>
+
+%T% For private webs, or any other webs you wish to exclude from the display, use "on" for the `Exclude web from a web="all" search` setting in the relevant web's WebPreferences topic.
+
+### <a name="Alternative solution"></a> Alternative solution
+
+This result can also be accomplished with the %WEBLIST% variable.
+
+<form><select name="topic"><option value="%TOPIC%">Select...</option>
+ <p>
+ </p></select> <input type="submit" value="Go" /></form>
+
+## <a name="Pattern 6: Extract a value from"></a><a name="Pattern 6: Extract a value from "></a> Pattern 6: Extract a value from a bullet list
+
+### <a name="Problem"></a> Problem
+
+Display the user name in the user's topic title
+
+### <a name="Solution"></a> Solution
+
+Search for the `Name:` entry.
+
+ %SEARCH{" * [N]ame: " topic="%TOPIC%" regex="on" casesensitive="on" nosummary="on" nosearch="on" noheader="on" nototal="on" format="---+!! $pattern(.* \* Name: ([^\n]*).*)"}%
+
+### <a name="Test case"></a> Test case
+
+To create a test case, we will put a name entry here:
+
+- Name: John Doe
+
+Search result:
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+## <a name="Pattern 7: Search for Form and M"></a> Pattern 7: Search for Form and Meta data: explained
+
+### <a name="Problem"></a> Problem
+
+Below is an example of a search that searches form data. The questions are:
+
+- why is this searching the metadata, shouldn't it just search the text?
+- what is the meaning of the `td..td` in the search expression?
+
+ %SEARCH{ "[S]tatus.*(td..td|value\=).*[W]aiting" casesensitive="on" regex="on"
+ nosearch="on" nototal="on" format="| [[$topic]]<br /> ($date - $rev -
+ [[%SCRIPTURLPATH{rdiff}%/$web/$topic][Diffs]]) |"}%
+
+### <a name="Solution"></a> Solution
+
+%SEARCH depends on grep, and grep searches the whole file, including the meta data.
+
+An example meta data form field is:
+
+ %META:FIELD{name="OperatingSystem" title="OperatingSystem" value="OsWin"}%
+
+So a search for a form field could look like:
+
+ %SEARCH{ "[O]peratingSystem.*value\=.*[O]sWin" regex="on" ... }%
+
+- Using square brackets is a trick to avoid a hit on the topic doing the search.
+- The `.*` indicate that there can be any number of any character between `OperatingSystem` and `value` in the (whole) file
+
+Now the original file format of the category table (the predecessor of the TWiki forms) looks like this:
+
+ <td valign="top" align="right"> OperatingSystem: </td><td> OsWin </td>
+
+The following search finds topics in the old and new format:
+
+ %SEARCH{ "[O]peratingSystem.*(td..td|value\=).*[O]sWin" regex="on" ... }%
+
+The `td..td` matches `td<>td`; a simple search on `"[O]peratingSystem.*[O]sWin"` could find a hit in the topic text by coincidence.
+
+A simple `%SEARCH{ "[O]peratingSystem.*value\=.*[O]sWin" ...}%` search is sufficient if you do not have topics in the old format.
+
+## <a name="Pattern 8: Search all topics tha"></a> Pattern 8: Search all topics that have been moved
+
+### <a name="Problem"></a> Problem
+
+How would I go about listing all moved topics ?
+
+### <a name="Solution"></a> Solution
+
+Search for the META:TOPICMOVED meta data. Type this:
+
+`Moved topics: %SEARCH{ "%META\:TOPICMOVED" regex="on" format="$topic, " nosearch="on" noheader="on" nosummary="on" }%`
+
+to get this (limited to 10 results):
+
+Moved topics:
+
+# TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+## <a name="Contributors"></a> Contributors
+
+TWiki:Main.AntonAylward, TWiki:Main.ArthurClemens, TWiki:Main.JosMaccabiani, TWiki:Main.PeterThoeny, TWiki:Main.SueLocke
+
+**_Related Topics:_** [[UserDocumentationCategory]]
## <a name="Answer:"></a> Answer:
-The second person gets a warning that the topic is currently being edited by another user. A topic gets locked automatically for some time (default is one hour) when you edit, preview or save the topic. If you get the lock warning you should wait until the lock is gone or contact the other person to ask if you can go ahead and break the lock. See also [[UnlockTopic]].
+TWiki allows multiple simultaneous edits of the same topic, and then merges the different changes automatically. You probably won't even notice this happening unless there is a conflict that cannot be merged automatically. In this case, you may see TWiki inserting "change marks" into the text to highlight conflicts between your edits and another person's. These change marks are only used if you edit the same part of a topic as someone else, and they indicate what the text used to look like, what the other person's edits were, and what your edits were.
+
+TWiki will warn if you attempt to edit a topic that someone else is editing. It will also warn if a merge was required during a save.
**_Back to:_** [[TWikiFAQ]]
--- TWiki:Main.PeterThoeny - 27 Nov 2000
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+## <a name="25 most recent topic changes in"></a><a name="25 most recent topic changes in "></a> 25 most recent topic changes in all webs
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Last Modified</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Web.Topic</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Last Editor</font></a></th>
+ </tr>
+</table>
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
<h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </td>
</tr>
<tr bgcolor="#ffffff">
- <td colspan="3"><font size="-1">You can use color coding by web for identification and reference. This table is updated automatically based on WebPreferences settings of the individual webs. Contact if you need a separate collaboration web for your team. See also [[Main/AdminTools]]. </font></td>
+ <td colspan="3"><font size="-1">You can use color coding by web for identification and reference. This table is updated automatically based on WebPreferences settings of the individual webs. Contact if you need a separate collaboration web for your team. See also [[Main/AdminToolsCategory]]. </font></td>
</tr>
</table>
<table border="0" cellpadding="3" cellspacing="2">
--- /dev/null
+# <a name="Permissions settings of the webs"></a> Permissions settings of the webs on this TWiki site
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Web </strong></th>
+ <th bgcolor="#99CCCC"><strong> Sitemap </strong></th>
+ <th bgcolor="#99CCCC" colspan="2"><strong> VIEW </strong></th>
+ <th bgcolor="#99CCCC" colspan="2"><strong> CHANGE </strong></th>
+ <th bgcolor="#99CCCC" colspan="2"><strong> RENAME </strong></th>
+ </tr>
+ <tr>
+ <td> ^ </td>
+ <th bgcolor="#99CCCC"><strong> Listed </strong></th>
+ <th bgcolor="#99CCCC"><strong> DENY </strong></th>
+ <th bgcolor="#99CCCC"><strong> ALLOW </strong></th>
+ <th bgcolor="#99CCCC"><strong> DENY </strong></th>
+ <th bgcolor="#99CCCC"><strong> ALLOW </strong></th>
+ <th bgcolor="#99CCCC"><strong> DENY </strong></th>
+ <th bgcolor="#99CCCC"><strong> ALLOW </strong></th>
+ </tr>
+</table>
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+See [[TWikiAccessControl]] for details
+
+**_Please Note:_**
+
+- A blank in the the above table may mean _either_ the corresponding control is absent or commented out _or_ that it has been set to a null value. The two conditions have dramatically different and possibly opposed semantics.
+- [[TWikiGuest]] is the guest account - used by unauthenticated users.
+- The TWiki web must not deny view to [[TWikiGuest]]; otherwise, people will not be able to register.
+
+**_Related Topics:_** [[SiteMap]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]], [[AdminToolsCategory]]
<td> The text of the slide </td>
</tr>
<tr>
+ <td><code>%SLIDECOMMENT%</code></td>
+ <td> The comment of the slide (optional; appended to slide of missing) </td>
+ </tr>
+ <tr>
<td><code>%SLIDENUM%</code></td>
<td> The current slide number </td>
</tr>
<td> Various button image files </td>
</tr>
</table>
+- (Dakar) Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
- Test above example if the installation was successful.
## <a name="Plugin Info"></a> Plugin Info
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 21 Mar 2004 (V1.003) </td>
+ <td> 1.005 </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 16 Mar 2005: </td>
+ <td> 1.005 Crawford Currie prepped for Dakar, and fixed multiple evaluation bug </td>
+ </tr>
+ <tr>
+ <td align="right"> 21 Nov 2004: </td>
+ <td> 1.004 Added support for <code>%SLIDECOMMENT%</code> template keyword (TWiki:Main/ArthurClemens); added benchmarks </td>
+ </tr>
+ <tr>
<td align="right"> 21 Mar 2004: </td>
- <td> Internal change: Fixed inofficial function call </td>
+ <td> Internal change: Fixed unofficial function call </td>
</tr>
<tr>
<td align="right"> 14 Dec 2002: </td>
<td> 5.005 </td>
</tr>
<tr>
+ <td align="right"> TWiki:Plugins/Benchmark: </td>
+ <td>[[TWiki/GoodStyle]] 98%, [[TWiki/FormattedSearch]] 99%, [[Main/SlideShowPlugin]] 99% </td>
+ </tr>
+ <tr>
<td align="right"> Plugin Home: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
-
--- TWiki:Main.PeterThoeny - 21 Mar 2004
<td> "in love" </td>
</tr>
<tr>
- <td> :scull: </td>
- <td><img alt="scull.gif" src="http://www.dementia.org/twiki//view/scull.gif" /></td>
- <td> "scull" </td>
+ <td> :skull: </td>
+ <td><img alt="skull.gif" src="http://www.dementia.org/twiki//view/skull.gif" /></td>
+ <td> "skull" </td>
</tr>
</table>
Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%<plugin>\_<setting>%**</code>, for example, <code>**%INTERWIKIPLUGIN\_SHORTDESCRIPTION%**</code>
- One line description, shown in the [[TextFormattingRules]] topic:
- - Set SHORTDESCRIPTION = Render smilies as icons, like ` :-)` for :-) or ` :cool:` for :cool:
-
-- Set DEBUG to 1 to get debug messages in `data/debug.txt`. Default: `0`
- - Set DEBUG = 0
+- Set SHORTDESCRIPTION = Render smilies as icons, like ` :-)` for :-) or ` :cool:` for :cool:
- The name of the topic containig your Smilies. Default: <code>**%WEB%.SmiliesPlugin**</code>
- - #Set TOPIC = [[SmiliesPlugin]]
+- #Set TOPIC = [[SmiliesPlugin]]
- The way the _emoticon_ is displayed. You can use <code>**$emoticon**</code> (e.g. `:D`), <code>**$url**</code> (e.g. `%ATTACHURL%/biggrin.gif`) and <code>**$tooltip**</code> (e.g. `"big grin"`). Default: <code>**<img src="$url" alt="$tooltip" title="$tooltip" border="0" />**</code>
- * #Set FORMAT = <img src="$url" alt="$emoticon" title="$emoticon" border="0" />
+ * #Set FORMAT = <img src="$url" alt="$emoticon" title="$emoticon" border="0" />
## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+This plugin is installed by default with a TWiki release. You should not need to install the plugin unless it is for an upgrade.
+
- Download the ZIP file from the Plugin web (see below)
- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
<tr>
<td> Plugin icon files </td>
</tr>
</table>
+- (Dakar) Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
- Test if the plugin is correctly installed:
- - You will see a series of icons on next line: <br /> :-) :) :cool: :( :o :D ;) :p :rolleyes: :mad: :eek: :confused: >:-) >;-) :-X :ok: :yes: :no: :love: :scull:
+- You will see a series of icons on next line: <br /> :-) :) :cool: :( :o :D ;) :p :rolleyes: :mad: :eek: :confused: >:-) >;-) :-X :ok: :yes: :no: :love: :skull:
## <a name="Plugin Info"></a> Plugin Info
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 21 Aug 2004 (v1.003) </td>
+ <td> 1.004 </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 16 Mar 2005: </td>
+ <td> Fixed typo "scull" </td>
+ </tr>
+ <tr>
+ <td align="center"> 5 Mar 2005 </td>
+ <td> 1.004 Crawford Currie prepared for Dakar </td>
+ </tr>
+ <tr>
+ <td align="right"> 21 Nov 2004: </td>
+ <td> Added benchmarks (no code changes) </td>
+ </tr>
+ <tr>
<td align="right"> 21 Aug 2004: </td>
- <td> Fixed tooltip for Netscape; added "sealed lips", "thumbs up", "yes" "no", "in love", "scull" </td>
+ <td> Fixed tooltip for Netscape; added "sealed lips", "thumbs up", "yes" "no", "in love", "skull" </td>
</tr>
<tr>
<td align="right"> 16 Feb 2004: </td>
<td> 5.0 </td>
</tr>
<tr>
+ <td align="right"> TWiki:Plugins/Benchmark: </td>
+ <td>[[TWiki/GoodStyle]] 96%, [[TWiki/FormattedSearch]] 98%, [[Main/SmiliesPlugin]] 96% </td>
+ </tr>
+ <tr>
<td align="right"> Plugin Home: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
</tr>
<td align="right"> Feedback: </td>
<td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
</tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
</table>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
-
--- TWiki:Main.AndreaSterbini - 28 Dec 2000 <br /> -- TWiki:Main.PeterThoeny - 21 Aug 2004
--- /dev/null
+# <a name="TWiki Source Code Packages"></a><a name=" TWiki Source Code Packages"></a> TWiki Source Code Packages
+
+%X% This documentation is automatically generated from the `pod`, so it always matches the running code
+
+<div>
+ <ul>
+ <li><a href="#TWiki::_AccessControlException"> TWiki::AccessControlException </a></li>
+ <li><a href="#TWiki::Access"> TWiki::Access </a></li>
+ <li><a href="#TWiki::Attach"> TWiki::Attach </a></li>
+ <li><a href="#TWiki::Attrs"> TWiki::Attrs </a></li>
+ <li><a href="#TWiki::Client::_ApacheLogin"> TWiki::Client::ApacheLogin </a></li>
+ <li><a href="#TWiki::Client"> TWiki::Client </a></li>
+ <li><a href="#TWiki::Client::_TemplateLogin"> TWiki::Client::TemplateLogin </a></li>
+ <li><a href="#TWiki::Compatibility"> TWiki::Compatibility </a></li>
+ <li><a href="#TWiki"> TWiki </a></li>
+ <li><a href="#TWiki::Form"> TWiki::Form </a></li>
+ <li><a href="#TWiki::Func"> TWiki::Func </a></li>
+ <li><a href="#TWiki::_I18N"> TWiki::I18N </a></li>
+ <li><a href="#TWiki::_I18N::Extract"> TWiki::I18N::Extract </a></li>
+ <li><a href="#TWiki::If"> TWiki::If </a></li>
+ <li><a href="#TWiki::Merge"> TWiki::Merge </a></li>
+ <li><a href="#TWiki::Merge"> TWiki::Merge </a></li>
+ <li><a href="#TWiki::Meta"> TWiki::Meta </a></li>
+ <li><a href="#TWiki::Net"> TWiki::Net </a></li>
+ <li><a href="#TWiki::_OopsException"> TWiki::OopsException </a></li>
+ <li><a href="#"> </a></li>
+ <li><a href="#TWiki::Plugins"> TWiki::Plugins </a></li>
+ <li><a href="#TWiki::Plurals"> TWiki::Plurals </a></li>
+ <li><a href="#TWiki::Prefs"> TWiki::Prefs </a></li>
+ <li><a href="#TWiki::Prefs::Parser"> TWiki::Prefs::Parser </a></li>
+ <li><a href="#TWiki::Prefs::_PrefsCache"> TWiki::Prefs::PrefsCache </a></li>
+ <li><a href="#TWiki::Render"> TWiki::Render </a></li>
+ <li><a href="#TWiki::Sandbox"> TWiki::Sandbox </a></li>
+ <li><a href="#TWiki::Search"> TWiki::Search </a></li>
+ <li><a href="#TWiki::Store"> TWiki::Store </a></li>
+ <li><a href="#TWiki::Store::_RcsFile"> TWiki::Store::RcsFile </a></li>
+ <li><a href="#TWiki::Store::_RcsLite"> TWiki::Store::RcsLite </a></li>
+ <li><a href="#File format"> File format</a></li>
+ <li><a href="#TWiki::Store::_RcsWrap"> TWiki::Store::RcsWrap </a></li>
+ <li><a href="#TWiki::Templates"> TWiki::Templates </a></li>
+ <li><a href="#TWiki::Time"> TWiki::Time </a></li>
+ <li><a href="#TWiki::UI::_ChangeForm"> TWiki::UI::ChangeForm </a></li>
+ <li><a href="#TWiki::UI"> TWiki::UI </a></li>
+ <li><a href="#TWiki::UI::Edit"> TWiki::UI::Edit </a></li>
+ <li><a href="#TWiki::UI::Manage"> TWiki::UI::Manage </a></li>
+ <li><a href="#TWiki::UI::Oops"> TWiki::UI::Oops </a></li>
+ <li><a href="#TWiki::UI::RDiff"> TWiki::UI::RDiff </a></li>
+ <li><a href="#TWiki::UI::Register"> TWiki::UI::Register </a></li>
+ <li><a href="#TWiki::UI::Rest"> TWiki::UI::Rest </a></li>
+ <li><a href="#TWiki::UI::Save"> TWiki::UI::Save </a></li>
+ <li><a href="#TWiki::UI::Search"> TWiki::UI::Search </a></li>
+ <li><a href="#TWiki::UI::Statistics"> TWiki::UI::Statistics </a></li>
+ <li><a href="#TWiki::UI::Upload"> TWiki::UI::Upload </a></li>
+ <li><a href="#TWiki::UI::View"> TWiki::UI::View </a></li>
+ <li><a href="#TWiki::User"> TWiki::User </a></li>
+ <li><a href="#TWiki::Users::_ApacheHtpasswdUse"> TWiki::Users::ApacheHtpasswdUser </a></li>
+ <li><a href="#TWiki::Users"> TWiki::Users </a></li>
+ <li><a href="#TWiki::Users::Password"> TWiki::Users::Password </a></li>
+ </ul>
+</div>
+
+## <a name="TWiki::_AccessControlException"></a> [[TWiki::AccessControlException|Main/TWikiAccessControlExceptionDotPm]]
+
+Exception used raise an access control violation.
+
+This package doesn't smell
+
+## <a name="TWiki::Access"></a> [[TWiki::Access|Main/TWikiAccessDotPm]]
+
+A singleton object of this class manages the access control database.
+
+This package has smell factor of **1**
+
+## <a name="TWiki::Attach"></a> [[TWiki::Attach|Main/TWikiAttachDotPm]]
+
+A singleton object of this class is used to deal with attachments to topics.
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Attrs"></a> [[TWiki::Attrs|Main/TWikiAttrsDotPm]]
+
+Class of attribute sets, designed for parsing and storing attribute values from a TWiki tag e.g. `%TAG{fred='bad' "sad" joe="mad"}%`
+
+An attribute set is a map containing an entry for each parameter. The default parameter (unnamed quoted string) is named `_DEFAULT` in the map.
+
+Attributes declared later in the string will override those of the same name defined earlier. The one exception to this is the \_DEFAULT key, where the _first_ instance of a setting is always taken.
+
+As well as standard TWiki syntax (parameter values double-quoted) it also parses single-quoted values, unquoted spaceless values, spaces around the =, and commas as well as spaces separating values, though none of these alternatives is advertised in documentation and the extended syntax can be turned off by passing the 'strict' parameter to `new`.
+
+This class replaces the old TWiki::extractNameValuePair and TWiki::extractParameters.
+
+This package doesn't smell
+
+## <a name="TWiki::Client::_ApacheLogin"></a> [[TWiki::Client::ApacheLogin|Main/TWikiClientApacheLoginDotPm]]
+
+This is login manager that you can specify in the security setup section of [configure](http://www.dementia.org/twiki//configure). It instructs TWiki to cooperate with your web server (typically Apache) to require authentication information (username & password) from users. It requires that you configure your web server to demand authentication for scripts named "login" and anything ending in "auth". The latter should be symlinks to existing scripts; e.g., `viewauth -> view`, `editauth -> edit`, and so on.
+
+See also [[TWikiUserAuthentication]].
+
+Subclass of TWiki::Client; see that class for documentation of the methods of this class.
+
+This package doesn't smell
+
+## <a name="TWiki::Client"></a> [[TWiki::Client|Main/TWikiClientDotPm]]
+
+The package is also a Factory for login managers and also the base class for all login managers.
+
+On it's own, an object of this class is used when you specify 'none' in the security setup section of [configure](http://www.dementia.org/twiki//configure). When it is used, logins are not supported. If you want to authenticate users then you should consider [[TemplateLogin]] or [[ApacheLogin]], which are subclasses of this class.
+
+If you are building a new login manager, then you should write a new subclass of this class, implementing the methods marked as **VIRTUAL**. There are already examples in the `lib/TWiki/Client` directory.
+
+This package has smell factor of **3**
+
+## <a name="TWiki::Client::_TemplateLogin"></a> [[TWiki::Client::TemplateLogin|Main/TWikiClientTemplateLoginDotPm]]
+
+This is a login manager that you can specify in the security setup section of [configure](http://www.dementia.org/twiki//configure). It provides users with a template-based form to enter usernames and passwords, and works with the [[PasswordManager]] that you specify to verify those passwords.
+
+Subclass of TWiki::Client; see that class for documentation of the methods of this class.
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Compatibility"></a> [[TWiki::Compatibility|Main/TWikiCompatibilityDotPm]]
+
+Support for compatibility with old TWiki versions. Packaged separately because 99.999999% of the time this won't be needed.
+
+=end
+
+sub \_upgradeCategoryItem \{ my ( $catitems, $ctext ) = @\_; my $catname = ''; my $scatname = ''; my $catmodifier = ''; my $catvalue = ''; my @cmd = split( /\\|/, $catitems ); my $src = ''; my $len = @cmd; if( $len < '2' ) \{ # FIXME return ( $catname, $catmodifier, $catvalue ) \} my $svalue = '';
+
+my $i; my $itemsPerLine;
+
+# check for [[CategoryName]]=CategoryValue parameter my $paramCmd = ''; my $cvalue = ''; # was$query->param( $cmd[1] ); if( $cvalue ) \{ $src = "$cvalue"; \} elsif( $ctext ) \{ foreach( split( /\\r?\\n/, $ctext ) ) \{ if( /$cmd[1]/ ) \{ $src = $\_; last; \} \} \}
+
+if( $cmd[0] eq 'select' || $cmd[0] eq 'radio') \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; my $size = $cmd[2]; for( $i = 3; $i < $len; $i++ ) \{ my $value = $cmd[$i]; $svalue = $value; if( $src =~ /$value/ ) \{ $catvalue = $svalue; \} \}
+
+\} elsif( $cmd[0] eq 'checkbox' ) \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; if( $cmd[2] eq 'true' || $cmd[2] eq '1' ) \{ $i = $len - 4; $catmodifier = 1; \} $itemsPerLine = $cmd[3]; for( $i = 4; $i < $len; $i++ ) \{ my $value = $cmd[$i]; $svalue = $value; # [[I18N]]: FIXME - need to look at this, but since it's upgrading # old forms that probably didn't use [[I18N]], it's not a high # priority. if( $src =~ /$value[^a-zA-Z0-9\\.]/ ) \{ $catvalue .= ", " if( $catvalue ); $catvalue .= $svalue; \} \}
+
+\} elsif( $cmd[0] eq 'text' ) \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; $src =~ /(.\*)/; if( $1 ) \{ $src = $1; \} else \{ $src = ''; \} $catvalue = $src; \}
+
+return ( $catname, $catmodifier, $catvalue ) \}
+
+This package has smell factor of **2**
+
+## <a name="TWiki"></a> [[TWiki|Main/TWikiDotPm]]
+
+TWiki operates by creating a singleton object (known as the Session object) that acts as a point of reference for all the different modules in the system. This package is the class for this singleton, and also contains the vast bulk of the basic constants and the per- site configuration mechanisms.
+
+Global variables are avoided wherever possible to avoid problems with CGI accelerators such as mod\_perl.
+
+This package has smell factor of **29**
+
+## <a name="TWiki::Form"></a> [[TWiki::Form|Main/TWikiFormDotPm]]
+
+Object representing a single form definition.
+
+This package has smell factor of **11**
+
+## <a name="TWiki::Func"></a> [[TWiki::Func|Main/TWikiFuncDotPm]]
+
+_Official list of stable TWiki functions for Plugin developers_
+
+This module defines official functions that [[Plugins|TWiki/TWikiPlugins]] can use to interact with the TWiki engine and content.
+
+Refer to [[EmptyPlugin]] and lib/TWiki/Plugins/EmptyPlugin.pm for a template Plugin and documentation on how to write a Plugin.
+
+Plugins should **only** use functions published in this module. If you use functions in other TWiki libraries you might create a security hole and you will probably need to change your Plugin when you upgrade TWiki.
+
+Deprecated functions will still work in older code, though they should _not_ be called in new Plugins and should be replaced in older Plugins as soon as possible.
+
+The version of the TWiki::Func module is defined by the VERSION number of the TWiki::Plugins module, currently 1.11. This can be shown by the `%PLUGINVERSION%` variable. The 'Since' field in the function documentation refers to the VERSION number and the date that the function was addded.
+
+**_Note:_** Beware! These methods should only ever be called from the context of a TWiki Plugin. They require a Plugins SESSION context to be established before they are called, and will not work if simply called from another TWiki module. For example,
+
+ use TWiki;
+ print TWiki::Func::getSkin(),"\n";
+
+will fail with `Can't call method "getSkin" on an undefined value at TWiki/Func.pm line 83`.
+
+If you want to call the methods outside the context of a plugin, you can create a Plugins SESSION object. For example, the script:
+
+ use TWiki:
+ $TWiki::Plugins::SESSION = new TWiki();
+ print TWiki::Func::getSkin(),"\n";
+
+will work happily.
+
+This package has smell factor of **1**
+
+## <a name="TWiki::_I18N"></a> [[TWiki::I18N|Main/TWikiI18NDotPm]]
+
+Support for strings translation and language detection.
+
+This package has smell factor of **1**
+
+## <a name="TWiki::_I18N::Extract"></a> [[TWiki::I18N::Extract|Main/TWikiI18NExtractDotPm]]
+
+Support translatable strings extraction from TWiki topics and templates. Depends on Locale::Maketext::Extract (part of CPAN::Locale::Maketext::Lexicon).
+
+This package has smell factor of **1**
+
+## <a name="TWiki::If"></a> [[TWiki::If|Main/TWikiIfDotPm]]
+
+Support for the conditions in %IF\{\} statements. Basically a simple stack-based parser for infix expressions that generates a parse tree that can subsequently be evaluated.
+
+This package doesn't smell
+
+## <a name="TWiki::Merge"></a> [[TWiki::Merge|Main/TWikiMerge3DotPm]]
+
+Support for 3-way merging of strings. Similar to Merge.pm, except that: a) it's considers the ancestor revision of the string, and b) it works. :-P
+
+This package doesn't smell
+
+## <a name="TWiki::Merge"></a> [[TWiki::Merge|Main/TWikiMergeDotPm]]
+
+Support for merging strings
+
+This package doesn't smell
+
+## <a name="TWiki::Meta"></a> [[TWiki::Meta|Main/TWikiMetaDotPm]]
+
+Meta-data handling.
+
+A meta-data object is a hash of different types of meta-data (keyed on the type, such as 'FIELD' and 'TOPICINFO').
+
+Each entry in the hash is an array, where each entry in the array contains another hash of the key=value pairs, corresponding to a single meta-datum.
+
+If there may be multiple entries of the same top-level type (i.e. for FIELD and FILEATTACHMENT) then the array hash multiple entries. These types are referred to as "keyed" types. The array entries are keyed with the attribute 'name' which must be in each entry in the array.
+
+For unkeyed types, the array has only one entry.
+
+The module knows nothing about how meta-data is stored. That is entirely the responsibility of the Store module.
+
+Meta-data objects are created by the Store engine when topics are read. They are populated using the `put` method.
+
+This package has smell factor of **6**
+
+## <a name="TWiki::Net"></a> [[TWiki::Net|Main/TWikiNetDotPm]]
+
+Object that brokers access to network resources.
+
+This package has smell factor of **2**
+
+## <a name="TWiki::_OopsException"></a> [[TWiki::OopsException|Main/TWikiOopsExceptionDotPm]]
+
+Exception used to raise a request to redirect to an Oops URL. An [[OopsException]] thrown anywhere in the code will redirect the browser to a url based on the `oops` script. `oops` requires a `template` parameter, that is the name of a template file from the `templates` directory. This file will be expanded and the parameter values passed to the exception instantiated. The result will be shown in the browser.
+
+This package doesn't smell
+
+## <> \[[TWikiPluginDotPm]\[]]
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Plugins"></a> [[TWiki::Plugins|Main/TWikiPluginsDotPm]]
+
+This module defines the singleton object that handles Plugins loading, initialization and execution.
+
+This class uses Chain of Responsibility (GOF) pattern to dispatch handler calls to registered plugins.
+
+This package doesn't smell
+
+## <a name="TWiki::Plurals"></a> [[TWiki::Plurals|Main/TWikiPluralsDotPm]]
+
+Handle conversion of plural topic names to singular form.
+
+This package has smell factor of **3**
+
+## <a name="TWiki::Prefs"></a> [[TWiki::Prefs|Main/TWikiPrefsDotPm]]
+
+The Prefs class is a singleton that implements management of preferences. It uses a stack of TWiki::Prefs::PrefsCache objects to store the preferences for global, web, user and topic contexts, and provides the means to look up preferences in these.
+
+Preferences from different places stack on top of each other, so there are global preferences, then site, then web (and subweb and subsubweb), then topic, included topic and so on. Each level of the stack is tagged with a type identifier.
+
+The module also maintains a separate of the preferences found in every topic and web it reads. This supports the lookup of preferences for webs and topics that are not on the stack, and must not be chained in (you can't allow a user to override protections from their home topic!)
+
+This package has smell factor of **1**
+
+## <a name="TWiki::Prefs::Parser"></a> [[TWiki::Prefs::Parser|Main/TWikiPrefsParserDotPm]]
+
+This Prefs-internal class is used to parse \* Set and \* Local statements from arbitrary text, and extract settings from meta objects. It is used by [[TopicPrefs]] to parse preference settings from topics.
+
+This class does no validation or duplicate-checking on the settings; it simply returns the recognized settings in the order it sees them in.
+
+This package has smell factor of **1**
+
+## <a name="TWiki::Prefs::_PrefsCache"></a> [[TWiki::Prefs::PrefsCache|Main/TWikiPrefsPrefsCacheDotPm]]
+
+The [[PrefsCache]] package holds a cache of topics that have been read in, using the [[TopicPrefs]] class. These functions manage that cache.
+
+We maintain 2 hashes of values:
+
+- \{locals\} Contains all locals at this level. Locals are values that only apply when the current topic is the topic where the local is defined. The variable names are decorated with the locality where they apply.
+- \{values\} contains all sets, locals, and all values inherited from the parent level
+
+As each cache level is built, the values are copied down from the parent cache level. This sounds monstrously inefficient, but in fact perl does this a lot better than doing a multi-level lookup when a value is referenced. This is especially important when many prefs lookups may be done in a session, for example when searching.
+
+This package has smell factor of **1**
+
+## <a name="TWiki::Render"></a> [[TWiki::Render|Main/TWikiRenderDotPm]]
+
+This module provides most of the actual HTML rendering code in TWiki.
+
+This package has smell factor of **24**
+
+## <a name="TWiki::Sandbox"></a> [[TWiki::Sandbox|Main/TWikiSandboxDotPm]]
+
+This object provides an interface to the outside world. All calls to system functions, or handling of file names, should be brokered by this object.
+
+This package has smell factor of **3**
+
+## <a name="TWiki::Search"></a> [[TWiki::Search|Main/TWikiSearchDotPm]]
+
+This module implements all the search functionality.
+
+This package has smell factor of **22**
+
+## <a name="TWiki::Store"></a> [[TWiki::Store|Main/TWikiStoreDotPm]]
+
+This module hosts the generic storage backend. This module provides the interface layer between the "real" store provider - which is hidden behind a handler - and the rest of the system. it is responsible for checking for topic existance, access permissions, and all the other general admin tasks that are common to all store implementations.
+
+This module knows nothing about how the data is actually _stored_ - that knowledge is entirely encapsulated in the handlers.
+
+The general contract for methods in the class requires that errors are signalled using exceptions. TWiki::AccessControlException is used for access control exceptions, and Error::Simple for all other types of error.
+
+This package has smell factor of **17**
+
+## <a name="TWiki::Store::_RcsFile"></a> [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]]
+
+This class is PACKAGE PRIVATE to Store, and should never be used from anywhere else. Base class of implementations of stores that manipulate RCS format files.
+
+The general contract of the methods on this class and its subclasses calls for errors to be signalled by Error::Simple exceptions.
+
+Refer to Store.pm for models of usage.
+
+This package has smell factor of **10**
+
+## <a name="TWiki::Store::_RcsLite"></a> [[TWiki::Store::RcsLite|Main/TWikiStoreRcsLiteDotPm]]
+
+This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
+
+Simple replacement for RCS. Doesn't support:
+
+- branches
+- locking
+
+Neither of which are used (or needed) by TWiki.
+
+This module doesn't know anything about the content of the topic
+
+There is one of these object for each file stored under RCSLite.
+
+This object is PACKAGE PRIVATE to Store, and should NEVER be used from anywhere else.
+
+FIXME:
+
+- need to tidy up dealing with \\n for differences
+- still have difficulty on line ending at end of sequences, consequence of doing a line based diff
+
+## <a name="File format"></a> File format
+
+ rcstext ::= admin {delta}* desc {deltatext}*
+ admin ::= head {num};
+ { branch {num}; }
+ access {id}*;
+ symbols {sym : num}*;
+ locks {id : num}*; {strict ;}
+ { comment {string}; }
+ { expand {string}; }
+ { newphrase }*
+ delta ::= num
+ date num;
+ author id;
+ state {id};
+ branches {num}*;
+ next {num};
+ { newphrase }*
+ desc ::= desc string
+ deltatext ::= num
+ log string
+ { newphrase }*
+ text string
+ num ::= {digit | .}+
+ digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+ id ::= {num} idchar {idchar | num }*
+ sym ::= {digit}* idchar {idchar | digit }*
+ idchar ::= any visible graphic character except special
+ special ::= $ | , | . | : | ; | @
+ string ::= @{any character, with @ doubled}*@
+ newphrase ::= id word* ;
+ word ::= id | num | string | :
+
+Identifiers are case sensitive. Keywords are in lower case only. The sets of keywords and identifiers can overlap. In most environments RCS uses the ISO 8859/1 encoding: visible graphic characters are codes 041-176 and 240-377, and white space characters are codes 010-015 and 040.
+
+Dates, which appear after the date keyword, are of the form Y.mm.dd.hh.mm.ss, where Y is the year, mm the month (01-12), dd the day (01-31), hh the hour (00-23), mm the minute (00-59), and ss the second (00-60). Y contains just the last two digits of the year for years from 1900 through 1999, and all the digits of years thereafter. Dates use the Gregorian calendar; times use UTC.
+
+The newphrase productions in the grammar are reserved for future extensions to the format of RCS files. No newphrase will begin with any keyword already in use.
+
+Revisions consist of a sequence of 'a' and 'd' edits that need to be applied to rev N+1 to get rev N. Each edit has an offset (number of lines from start) and length (number of lines). For 'a', the edit is followed by length lines (the lines to be inserted in the text). For example:
+
+d1 3 means "delete three lines starting with line 1 a4 2 means "insert two lines at line 4' xxxxxx is the new line 4 yyyyyy is the new line 5
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Store::_RcsWrap"></a> [[TWiki::Store::RcsWrap|Main/TWikiStoreRcsWrapDotPm]]
+
+This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
+
+Wrapper around the RCS commands required by TWiki. There is one of these object for each file stored under RCS.
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Templates"></a> [[TWiki::Templates|Main/TWikiTemplatesDotPm]]
+
+Support for the TWiki template language.
+
+This package has smell factor of **2**
+
+## <a name="TWiki::Time"></a> [[TWiki::Time|Main/TWikiTimeDotPm]]
+
+Time handling functions.
+
+This package has smell factor of **10**
+
+## <a name="TWiki::UI::_ChangeForm"></a> [[TWiki::UI::ChangeForm|Main/TWikiUIChangeFormDotPm]]
+
+Service functions used by the UI packages
+
+This package doesn't smell
+
+## <a name="TWiki::UI"></a> [[TWiki::UI|Main/TWikiUIDotPm]]
+
+Service functions used by the UI packages
+
+This package doesn't smell
+
+## <a name="TWiki::UI::Edit"></a> [[TWiki::UI::Edit|Main/TWikiUIEditDotPm]]
+
+Edit command handler
+
+This package has smell factor of **1**
+
+## <a name="TWiki::UI::Manage"></a> [[TWiki::UI::Manage|Main/TWikiUIManageDotPm]]
+
+UI functions for web, topic and user management
+
+This package has smell factor of **5**
+
+## <a name="TWiki::UI::Oops"></a> [[TWiki::UI::Oops|Main/TWikiUIOopsDotPm]]
+
+UI delegate for oops function
+
+This package has smell factor of **1**
+
+## <a name="TWiki::UI::RDiff"></a> [[TWiki::UI::RDiff|Main/TWikiUIRDiffDotPm]]
+
+UI functions for diffing.
+
+This package has smell factor of **12**
+
+## <a name="TWiki::UI::Register"></a> [[TWiki::UI::Register|Main/TWikiUIRegisterDotPm]]
+
+User registration handling.
+
+This package has smell factor of **28**
+
+## <a name="TWiki::UI::Rest"></a> [[TWiki::UI::Rest|Main/TWikiUIRestDotPm]]
+
+Rest delegate for view function
+
+This package doesn't smell
+
+## <a name="TWiki::UI::Save"></a> [[TWiki::UI::Save|Main/TWikiUISaveDotPm]]
+
+UI delegate for save function
+
+This package has smell factor of **1**
+
+## <a name="TWiki::UI::Search"></a> [[TWiki::UI::Search|Main/TWikiUISearchDotPm]]
+
+UI functions for searching.
+
+This package has smell factor of **3**
+
+## <a name="TWiki::UI::Statistics"></a> [[TWiki::UI::Statistics|Main/TWikiUIStatisticsDotPm]]
+
+Statistics extraction and presentation
+
+This package has smell factor of **4**
+
+## <a name="TWiki::UI::Upload"></a> [[TWiki::UI::Upload|Main/TWikiUIUploadDotPm]]
+
+UI delegate for attachment management functions
+
+This package has smell factor of **5**
+
+## <a name="TWiki::UI::View"></a> [[TWiki::UI::View|Main/TWikiUIViewDotPm]]
+
+UI delegate for view function
+
+This package has smell factor of **1**
+
+## <a name="TWiki::User"></a> [[TWiki::User|Main/TWikiUserDotPm]]
+
+A User object is an internal representation of a user in the real world. The object knows about users having login names, wiki names, personal topics, and email addresses.
+
+This package has smell factor of **5**
+
+## <a name="TWiki::Users::_ApacheHtpasswdUse"></a> [[TWiki::Users::ApacheHtpasswdUser|Main/TWikiUsersApacheHtpasswdUserDotPm]]
+
+Password manager that uses Apache::HtPasswd to manage users and passwords.
+
+Subclass of [[ TWiki::Users::Password |Main/TWikiUsersPasswordDotPm]]. See documentation of that class for descriptions of the methods of this class.
+
+Duplicates functionality of [[ =TWiki::Users::HtPasswdUser=|Main/TWikiUsersHtPasswdUserDotPm]]; provided mainly as an example of how to write a new password manager.
+
+This package doesn't smell
+
+## <a name="TWiki::Users"></a> [[TWiki::Users|Main/TWikiUsersDotPm]]
+
+Singleton object that handles mapping of users to wikinames and vice versa, and user authentication checking.
+
+This package has smell factor of **4**
+
+## <a name="TWiki::Users::Password"></a> [[TWiki::Users::Password|Main/TWikiUsersPasswordDotPm]]
+
+Base class of all password handlers. Default behaviour is no passwords, so anyone can be anyone they like.
+
+The methods of this class should be overridded by subclasses that want to implement other password handling methods.
+
+This package doesn't smell
+
+There were a total of **231** smells
# <a name="TWiki Spreadsheet Plugin"></a><a name=" TWiki Spreadsheet Plugin"></a> TWiki Spreadsheet Plugin
-This Plugin adds speadsheet capabilities to %WIKITOOLNAME% topics. Formulae like <code>**%CALC\{"$INT(7/3)"\}%**</code> are evaluated at page view time. They can be placed in table cells and outside of tables. In other words, this Plugin provides general formula evaluation capability, not just classic spreadsheet functions.
+This Plugin adds spreadsheet capabilities to %WIKITOOLNAME% topics. Formulae like <code>**%CALC\{"$INT(7/3)"\}%**</code> are evaluated at page view time. They can be placed in table cells and outside of tables. In other words, this Plugin provides general formula evaluation capability, not just classic spreadsheet functions.
<table>
<tr>
<li><a href="#COUNTITEMS( list ) -- count indi"> COUNTITEMS( list ) -- count individual items in a list</a></li>
<li><a href="#COUNTSTR( list, str ) -- count t"> COUNTSTR( list, str ) -- count the number of cells in a list equal to a given string</a></li>
<li><a href="#DEF( list ) -- find first non-em"> DEF( list ) -- find first non-empty list item or cell</a></li>
- <li><a href="#EVAL( formula ) -- evaluate a si"> EVAL( formula ) -- evaluate a simple formula</a></li>
+ <li><a href="#EVAL( formula ) -- evaluate a si"> EVAL( formula ) -- evaluate a simple mathematical formula</a></li>
+ <li><a href="#EVEN( num ) -- test for even num"> EVEN( num ) -- test for even number</a></li>
<li><a href="#EXACT( text1, text2 ) -- compare"> EXACT( text1, text2 ) -- compare two text strings</a></li>
+ <li><a href="#EXEC( formula ) -- execute a spr"> EXEC( formula ) -- execute a spreadsheet formula</a></li>
+ <li><a href="#EXISTS( topic ) -- check if topi"> EXISTS( topic ) -- check if topic exists</a></li>
<li><a href="#FIND( string, text, start ) -- f"> FIND( string, text, start ) -- find one string within another string</a></li>
<li><a href="#FORMAT( type, prec, number ) --"> FORMAT( type, prec, number ) -- format a number to a certain type and precision</a></li>
<li><a href="#FORMATTIME( serial, text ) -- co"> FORMATTIME( serial, text ) -- convert a serialized date into a date string</a></li>
<li><a href="#LIST( range ) -- convert content"> LIST( range ) -- convert content of a cell range into a list</a></li>
<li><a href="#LISTIF( condition, list ) -- rem"> LISTIF( condition, list ) -- remove elements from a list that do not meet a condition</a></li>
<li><a href="#LISTITEM( index, list ) -- get o"> LISTITEM( index, list ) -- get one element of a list</a></li>
+ <li><a href="#LISTJOIN( separator, list ) -- c"> LISTJOIN( separator, list ) -- convert a list into a string</a></li>
<li><a href="#LISTMAP( formula, list ) -- eval"> LISTMAP( formula, list ) -- evaluate and update each element of a list</a></li>
<li><a href="#LISTREVERSE( list ) -- opposite"> LISTREVERSE( list ) -- opposite order of a list</a></li>
<li><a href="#LISTSIZE( list ) -- number of el"> LISTSIZE( list ) -- number of elements in a list</a></li>
<li><a href="#MEDIAN( list ) -- median of a li"> MEDIAN( list ) -- median of a list or range of cells</a></li>
<li><a href="#MIN( list ) -- smallest value of"> MIN( list ) -- smallest value of a list or range of cells</a></li>
<li><a href="#MOD( num, divisor ) -- reminder"> MOD( num, divisor ) -- reminder after dividing num by divisor</a></li>
+ <li><a href="#NOEXEC( formula ) -- do not exec"> NOEXEC( formula ) -- do not execute a spreadsheet formula</a></li>
<li><a href="#NOP( text ) -- no-operation"> NOP( text ) -- no-operation</a></li>
<li><a href="#NOT( num ) -- reverse logic of a"> NOT( num ) -- reverse logic of a number</a></li>
+ <li><a href="#ODD( num ) -- test for odd numbe"> ODD( num ) -- test for odd number</a></li>
<li><a href="#OR( list ) -- logcial OR of a li"> OR( list ) -- logcial OR of a list</a></li>
+ <li><a href="#PERCENTILE( num, list ) -- perce"> PERCENTILE( num, list ) -- percentile of a list or range of cells</a></li>
<li><a href="#PRODUCT( list ) -- product of a"> PRODUCT( list ) -- product of a list or range of cells</a></li>
- <li><a href="#PROPER( text ) -- properly capit"> PROPER( text ) -- properly capitalize trxt</a></li>
+ <li><a href="#PROPER( text ) -- properly capit"> PROPER( text ) -- properly capitalize text</a></li>
<li><a href="#PROPERSPACE( text ) -- properly"> PROPERSPACE( text ) -- properly space out WikiWords</a></li>
<li><a href="#RAND( max ) -- random number"> RAND( max ) -- random number</a></li>
<li><a href="#REPEAT(text) -- repeat text a nu"> REPEAT(text) -- repeat text a number of times</a></li>
- Syntax: <code>**$ABS( num )**</code>
- Example: <code>**%CALC\{"$ABS(-12.5)"\}%**</code> returns <code>**12\.5**</code>
-- Related: <code>[[$SIGN()|Main/WebHome#FuncSIGN]]</code>
+- Related: <code>[[$SIGN()|Main/WebHome#FuncSIGN]]</code>, <code>[[$EVEN()|Main/WebHome#FuncEVEN]]</code>, <code>[[$ODD()|Main/WebHome#FuncODD]]</code>
<a name="FuncAND"></a>
<a name="FuncEVAL"></a>
-### <a name="EVAL( formula ) -- evaluate a si"></a> EVAL( formula ) -- evaluate a simple formula
+### <a name="EVAL( formula ) -- evaluate a si"></a> EVAL( formula ) -- evaluate a simple mathematical formula
- Addition, substraction, multiplication, division and modulus of numbers are supported. Any nesting is permitted
- Syntax: <code>**$EVAL( formula )**</code>
- Example: <code>**%CALC\{"$EVAL( (5 \* 3) / 2 + 1.1 )"\}%**</code> returns <code>**8\.6**</code>
-- Related: <code>[[$INT()|Main/WebHome#FuncINT]]</code>, <code>[[$MOD()|Main/WebHome#FuncMOD]]</code>, <code>[[$ROUND()|Main/WebHome#FuncROUND]]</code>, <code>[[$VALUE()|Main/WebHome#FuncVALUE]]</code>
+- Related: <code>[[$EXEC()|Main/WebHome#FuncEXEC]]</code>, <code>[[$INT()|Main/WebHome#FuncINT]]</code>, <code>[[$MOD()|Main/WebHome#FuncMOD]]</code>, <code>[[$ROUND()|Main/WebHome#FuncROUND]]</code>, <code>[[$VALUE()|Main/WebHome#FuncVALUE]]</code>
+
+<a name="FuncEVEN"></a>
+
+### <a name="EVEN( num ) -- test for even num"></a> EVEN( num ) -- test for even number
+
+- Syntax: <code>**$EVEN( num )**</code>
+- Example: <code>**%CALC\{"$EVEN(2)"\}%**</code> returns <code>**1**</code>
+- Related: <code>[[$ABS()|Main/WebHome#FuncABS]]</code>, <code>[[$MOD()|Main/WebHome#FuncMOD]]</code>, <code>[[$ODD()|Main/WebHome#FuncODD]]</code>, <code>[[$SIGN()|Main/WebHome#FuncSIGN]]</code>
<a name="FuncEXACT"></a>
- Example: <code>**%CALC\{"$EXACT(foo, $LOWER(Foo))"\}%**</code> returns <code>**1**</code>
- Related: <code>[[$IF()|Main/WebHome#FuncIF]]</code>, <code>[[$TRIM()|Main/WebHome#FuncTRIM]]</code>
+<a name="FuncEXEC"></a>
+
+### <a name="EXEC( formula ) -- execute a spr"></a> EXEC( formula ) -- execute a spreadsheet formula
+
+- Execute a spreadsheet formula, typically retrieved from a variable. This can be used to store a formula in a variable once and execute it many times using different parameters.
+- Syntax: <code>**$EXEC( formula )**</code>
+- Example: <code>**%CALC\{"$SET(msg, $NOEXEC(Hi $GET(name)))"\}%**</code> sets the `msg` variable with raw formula `Hi $GET(name)`
+- Example: <code>**%CALC\{"$SET(name, Tom) $EXEC($GET(msg))"\}%**</code> executes content of `msg` variable and returns `Hi Tom`
+- Example: <code>**%CALC\{"$SET(name, Jerry) $EXEC($GET(msg))"\}%**</code> returns `Hi Jerry`
+- Related: <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>, <code>[[$GET()|Main/WebHome#FuncGET]]</code>, <code>[[$NOEXEC()|Main/WebHome#FuncNOEXEC]]</code>, <code>[[$SET()|Main/WebHome#FuncSET]]</code>
+
+<a name="FuncEXISTS"></a>
+
+### <a name="EXISTS( topic ) -- check if topi"></a> EXISTS( topic ) -- check if topic exists
+
+- Topic can be `TopicName` or a `Web.TopicName`
+- Syntax: <code>**$EXISTS( topic )**</code>
+- Example: <code>**%CALC\{"$EXISTS(WebHome)"\}%**</code> returns <code>**1**</code>
+- Example: <code>**%CALC\{"$EXISTS(ThisDoesNotExist)"\}%**</code> returns <code>****</code>
+
<a name="FuncFIND"></a>
### <a name="FIND( string, text, start ) -- f"></a> FIND( string, text, start ) -- find one string within another string
### <a name="FORMAT( type, prec, number ) --"></a><a name="FORMAT( type, prec, number ) -- "></a> FORMAT( type, prec, number ) -- format a number to a certain type and precision
-- Type can be COMMA for comma format, DOLLAR for Dollar format, NUMBER for number, and PERCENT for percent format
+- Type can be COMMA for comma format, DOLLAR for Dollar format, KB for Kilo Byte format, MB for Mega Byte format, KBMB for Kilo/Mega/Giga/Tera Byte auto-adjust format, NUMBER for number, and PERCENT for percent format
- Syntax: <code>**$FORMAT( type, prec, number )**</code>
- Example: <code>**%CALC\{"$FORMAT(COMMA, 2, 12345.6789)"\}%**</code> returns <code>**12,345.68**</code>
- Example: <code>**%CALC\{"$FORMAT(DOLLAR, 2, 12345.67)"\}%**</code> returns <code>**$12,345.68**</code>
+- Example: <code>**%CALC\{"$FORMAT(KB, 2, 1234567)"\}%**</code> returns <code>**1205\.63 KB**</code>
+- Example: <code>**%CALC\{"$FORMAT(MB, 2, 1234567)"\}%**</code> returns <code>**1\.18 MB**</code>
+- Example: <code>**%CALC\{"$FORMAT(KBMB, 2, 1234567)"\}%**</code> returns <code>**1\.18 MB**</code>
+- Example: <code>**%CALC\{"$FORMAT(KBMB, 2, 1234567890)"\}%**</code> returns <code>**1\.15 GB**</code>
- Example: <code>**%CALC\{"$FORMAT(NUMBER, 1, 12345.67)"\}%**</code> returns <code>**12345\.7**</code>
- Example: <code>**%CALC\{"$FORMAT(PERCENT, 1, 0.1234567)"\}%**</code> returns <code>**12\.3%**</code>
- Related: <code>[[$ROUND()|Main/WebHome#FuncROUND]]</code>
- Specify the variable name (alphanumeric characters and underscores). An empty string is returned if the variable does not exist. Use `$SET()` to set a variable first. Unlike table ranges, variables live for the time of the page view and persist across tables, i.e. you can use it to summarize results across several tables.
- Syntax: <code>**$GET( name )**</code>
- Example: <code>**%CALC\{"$GET(my\_total)"\}%**</code> returns the value of the `my_total` variable
-- Related: <code>[[$SET()|Main/WebHome#FuncSET]]</code>, <code>[[$SETM()|Main/WebHome#FuncSETM]]</code>
+- Related: <code>[[$EXEC()|Main/WebHome#FuncEXEC]]</code>, <code>[[$NOEXEC()|Main/WebHome#FuncNOEXEC]]</code>, <code>[[$SET()|Main/WebHome#FuncSET]]</code>, <code>[[$SETM()|Main/WebHome#FuncSETM]]</code>
<a name="FuncIF"></a>
- Convert the content of a range of cells into a flat list, delimited by comma. Cells containing commas are merged into the list
- Syntax: <code>**$LIST( range )**</code>
- Example: <code>**%CALC\{"$LIST($LEFT())"\}%**</code> returns <code>**Apples, Lemons, Oranges, Kiwis**</code> assuming the cells to the left contain <code>**| Apples | Lemons, Oranges | Kiwis |**</code>
-- Related: <code>[[$AVERAGE()|Main/WebHome#FuncAVERAGE]]</code>, <code>[[$COUNTITEMS()|Main/WebHome#FuncCOUNTITEMS]]</code>, <code>[[$COUNTSTR()|Main/WebHome#FuncCOUNTSTR]]</code>, <code>[[$DEF()|Main/WebHome#FuncDEF]]</code>, <code>[[$LISTIF()|Main/WebHome#FuncLISTIF]]</code>, <code>[[$LISTITEM()|Main/WebHome#FuncLISTITEM]]</code>, <code>[[$LISTMAP()|Main/WebHome#FuncLISTMAP]]</code>, <code>[[$LISTREVERSE()|Main/WebHome#FuncLISTREVERSE]]</code>, <code>[[$LISTSIZE()|Main/WebHome#FuncLISTSIZE]]</code>, <code>[[$LISTSORT()|Main/WebHome#FuncLISTSORT]]</code>, <code>[[$LISTUNIQUE()|Main/WebHome#FuncLISTUNIQUE]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>, <code>[[$PRODUCT()|Main/WebHome#FuncPRODUCT]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>, <code>[[$SUMDAYS()|Main/WebHome#FuncSUMDAYS]]</code>, <code>[[$SUMPRODUCT()|Main/WebHome#FuncSUMPRODUCT]]</code>
+- Related: <code>[[$AVERAGE()|Main/WebHome#FuncAVERAGE]]</code>, <code>[[$COUNTITEMS()|Main/WebHome#FuncCOUNTITEMS]]</code>, <code>[[$COUNTSTR()|Main/WebHome#FuncCOUNTSTR]]</code>, <code>[[$DEF()|Main/WebHome#FuncDEF]]</code>, <code>[[$LISTIF()|Main/WebHome#FuncLISTIF]]</code>, <code>[[$LISTITEM()|Main/WebHome#FuncLISTITEM]]</code>, <code>[[$LISTJOIN()|Main/WebHome#FuncLISTJOIN]]</code>, <code>[[$LISTMAP()|Main/WebHome#FuncLISTMAP]]</code>, <code>[[$LISTREVERSE()|Main/WebHome#FuncLISTREVERSE]]</code>, <code>[[$LISTSIZE()|Main/WebHome#FuncLISTSIZE]]</code>, <code>[[$LISTSORT()|Main/WebHome#FuncLISTSORT]]</code>, <code>[[$LISTUNIQUE()|Main/WebHome#FuncLISTUNIQUE]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>, <code>[[$PRODUCT()|Main/WebHome#FuncPRODUCT]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>, <code>[[$SUMDAYS()|Main/WebHome#FuncSUMDAYS]]</code>, <code>[[$SUMPRODUCT()|Main/WebHome#FuncSUMPRODUCT]]</code>
<a name="FuncLISTIF"></a>
- Example: <code>**%CALC\{"$LISTITEM(-1, Apple, Orange, Apple, Kiwi)"\}%**</code> returns <code>**Kiwi**</code>
- Related: <code>[[$COUNTITEMS()|Main/WebHome#FuncCOUNTITEMS]]</code>, <code>[[$COUNTSTR()|Main/WebHome#FuncCOUNTSTR]]</code>, <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$LISTIF()|Main/WebHome#FuncLISTIF]]</code>, <code>[[$LISTMAP()|Main/WebHome#FuncLISTMAP]]</code>, <code>[[$LISTREVERSE()|Main/WebHome#FuncLISTREVERSE]]</code>, <code>[[$LISTSIZE()|Main/WebHome#FuncLISTSIZE]]</code>, <code>[[$LISTSORT()|Main/WebHome#FuncLISTSORT]]</code>, <code>[[$LISTUNIQUE()|Main/WebHome#FuncLISTUNIQUE]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>
+<a name="FuncLISTJOIN"></a>
+
+### <a name="LISTJOIN( separator, list ) -- c"></a> LISTJOIN( separator, list ) -- convert a list into a string
+
+- By default, list items are separated by a comma and a space. Use this function to indicate a specific `separator` string, which may include `$comma` for comma, `$n` for newline, and `$sp` for space.
+- Syntax: <code>**$LISTJOIN( separator, list )**</code>
+- Example: <code>**%CALC\{"$LISTJOIN($n, Apple, Orange, Apple, Kiwi)"\}%**</code> returns the four items separated by new lines
+- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$LISTSIZE()|Main/WebHome#FuncLISTSIZE]]</code>
+
<a name="FuncLISTMAP"></a>
### <a name="LISTMAP( formula, list ) -- eval"></a> LISTMAP( formula, list ) -- evaluate and update each element of a list
- Syntax: <code>**$LISTSIZE( list )**</code>
- Example: <code>**%CALC\{"$LISTSIZE(Apple, Orange, Apple, Kiwi)"\}%**</code> returns <code>**4**</code>
-- Related: <code>[[$COUNTITEMS()|Main/WebHome#FuncCOUNTITEMS]]</code>, <code>[[$COUNTSTR()|Main/WebHome#FuncCOUNTSTR]]</code>, <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$LISTIF()|Main/WebHome#FuncLISTIF]]</code>, <code>[[$LISTITEM()|Main/WebHome#FuncLISTITEM]]</code>, <code>[[$LISTMAP()|Main/WebHome#FuncLISTMAP]]</code>, <code>[[$LISTREVERSE()|Main/WebHome#FuncLISTREVERSE]]</code>, <code>[[$LISTSORT()|Main/WebHome#FuncLISTSORT]]</code>, <code>[[$LISTUNIQUE()|Main/WebHome#FuncLISTUNIQUE]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>
+- Related: <code>[[$COUNTITEMS()|Main/WebHome#FuncCOUNTITEMS]]</code>, <code>[[$COUNTSTR()|Main/WebHome#FuncCOUNTSTR]]</code>, <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$LISTIF()|Main/WebHome#FuncLISTIF]]</code>, <code>[[$LISTITEM()|Main/WebHome#FuncLISTITEM]]</code>, <code>[[$LISTJOIN()|Main/WebHome#FuncLISTJOIN]]</code>, <code>[[$LISTMAP()|Main/WebHome#FuncLISTMAP]]</code>, <code>[[$LISTREVERSE()|Main/WebHome#FuncLISTREVERSE]]</code>, <code>[[$LISTSORT()|Main/WebHome#FuncLISTSORT]]</code>, <code>[[$LISTUNIQUE()|Main/WebHome#FuncLISTUNIQUE]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>
<a name="FuncLISTSORT"></a>
- Syntax: <code>**$MAX( list )**</code>
- Example: To find the biggest number to the left of the current cell, write: <code>**%CALC\{"$MAX($LEFT())"\}%**</code>
-- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>
+- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>, <code>[[$PERCENTILE()|Main/WebHome#FuncPERCENTILE]]</code>
<a name="FuncMEDIAN"></a>
- Syntax: <code>**$MEDIAN( list )**</code>
- Example: <code>**%CALC\{"$MEDIAN(3, 9, 4, 5)"\}%**</code> returns <code>**4\.5**</code>
-- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>
+- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>, <code>[[$PERCENTILE()|Main/WebHome#FuncPERCENTILE]]</code>
<a name="FuncMIN"></a>
- Syntax: <code>**$MIN( list )**</code>
- Example: <code>**%CALC\{"$MIN(15, 3, 28)"\}%**</code> returns <code>**3**</code>
-- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>
+- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$PERCENTILE()|Main/WebHome#FuncPERCENTILE]]</code>
<a name="FuncMOD"></a>
- Syntax: <code>**$MOD( num, divisor )**</code>
- Example: <code>**%CALC\{"$MOD(7, 3)"\}%**</code> returns <code>**1**</code>
-- Related: <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>, <code>[[$()|Main/WebHome#Func]]</code>
+- Related: <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>
+
+<a name="FuncNOEXEC"></a>
+
+### <a name="NOEXEC( formula ) -- do not exec"></a> NOEXEC( formula ) -- do not execute a spreadsheet formula
+
+- Prevent a formula from getting executed. This is typically used to store a raw formula in a variable for later use as described in <code>[[$EXEC()|Main/WebHome#FuncEXEC]]</code>.
+- Syntax: <code>**$NOEXEC( formula )**</code>
+- Example: <code>**%CALC\{"$SET(msg, $NOEXEC(Hi $GET(name)))"\}%**</code> sets the `msg` variable with the formula `Hi $GET(name)` without executing it
+- Related: <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>, <code>[[$EXEC()|Main/WebHome#FuncEXEC]]</code>, <code>[[$GET()|Main/WebHome#FuncGET]]</code>, <code>[[$SET()|Main/WebHome#FuncSET]]</code>
<a name="FuncNOP"></a>
- Example: <code>**%CALC\{"$NOT(0)"\}%**</code> returns <code>**1**</code>
- Related: <code>[[$AND()|Main/WebHome#FuncAND]]</code>, <code>[[$IF()|Main/WebHome#FuncIF]]</code>, <code>[[$OR()|Main/WebHome#FuncOR]]</code>
+<a name="FuncODD"></a>
+
+### <a name="ODD( num ) -- test for odd numbe"></a> ODD( num ) -- test for odd number
+
+- Syntax: <code>**$ODD( num )**</code>
+- Example: <code>**%CALC\{"$ODD(2)"\}%**</code> returns <code>****</code>
+- Related: <code>[[$ABS()|Main/WebHome#FuncABS]]</code>, <code>[[$EVEN()|Main/WebHome#FuncEVEN]]</code>, <code>[[$MOD()|Main/WebHome#FuncMOD]]</code>, <code>[[$SIGN()|Main/WebHome#FuncSIGN]]</code>
+
<a name="FuncOR"></a>
### <a name="OR( list ) -- logcial OR of a li"></a> OR( list ) -- logcial OR of a list
- Example: <code>**%CALC\{"$OR(1, 0, 1)"\}%**</code> returns <code>**1**</code>
- Related: <code>[[$AND()|Main/WebHome#FuncAND]]</code>, <code>[[$IF()|Main/WebHome#FuncIF]]</code>, <code>[[$NOT()|Main/WebHome#FuncNOT]]</code>
+<a name="FuncPERCENTILE"></a>
+
+### <a name="PERCENTILE( num, list ) -- perce"></a> PERCENTILE( num, list ) -- percentile of a list or range of cells
+
+- Calculates the num-th percentile, useful to establish a threshold of acceptance. num is the percentile value, range 0..100
+- Syntax: <code>**$PERCENTILE( num, list )**</code>
+- Example: <code>**%CALC\{"$PERCENTILE(75, 400, 200, 500, 100, 300)"\}%**</code> returns <code>**450**</code>
+- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$MAX()|Main/WebHome#FuncMAX]]</code>, <code>[[$MEDIAN()|Main/WebHome#FuncMEDIAN]]</code>, <code>[[$MIN()|Main/WebHome#FuncMIN]]</code>
+
<a name="FuncPRODUCT"></a>
### <a name="PRODUCT( list ) -- product of a"></a><a name="PRODUCT( list ) -- product of a "></a> PRODUCT( list ) -- product of a list or range of cells
<a name="FuncPROPER"></a>
-### <a name="PROPER( text ) -- properly capit"></a> PROPER( text ) -- properly capitalize trxt
+### <a name="PROPER( text ) -- properly capit"></a> PROPER( text ) -- properly capitalize text
- Capitalize letters that follow any character other than a letter; convert all other letters to lowercase letters
- Syntax: <code>**$PROPER( text )**</code>
- Properly spaces out [[WikiWords]] preceeded by white space, parenthesis, or <code>**]\[**</code>. Words listed in the DONTSPACE [[TWikiPreferences]] variable or DONTSPACE Plugins setting are excluded
- Syntax: <code>**$PROPERSPACE( text )**</code>
-- Example: Assuming DONTSPACE contains MacDonald: <code>**%CALC\{"PROPERSPACE(Old MacDonald had a ServerFarm, EeEyeEeEyeOh"\}%**</code> returns <code>**Old MacDonald had a Server Farm, Ee Eye Ee Eye Oh**</code>
+- Example: Assuming DONTSPACE contains MacDonald: <code>**%CALC\{"$PROPERSPACE(Old MacDonald had a ServerFarm, EeEyeEeEyeOh"\}%**</code> returns <code>**Old MacDonald had a Server Farm, Ee Eye Ee Eye Oh**</code>
- Related: <code>[[$LOWER()|Main/WebHome#FuncLOWER]]</code>, <code>[[$PROPER()|Main/WebHome#FuncPROPER]]</code>, <code>[[$TRIM()|Main/WebHome#FuncTRIM]]</code>, <code>[[$UPPER()|Main/WebHome#FuncUPPER]]</code>
<a name="FuncRAND"></a>
### <a name="SET( name, value ) -- set a vari"></a> SET( name, value ) -- set a variable for later use
-- Specify the variable name (alphanumeric characters and underscores) and the value. The value may contain a formula; formulas are evaluated before the variable assignment. This function returns no output. Use `$GET()` to retrieve variables. Unlike table ranges, variables live for the time of the page view and persist across tables, i.e. you can use it to summarize results across several tables
+- Specify the variable name (alphanumeric characters and underscores) and the value. The value may contain a formula; formulae are evaluated before the variable assignment; see <code>[[$NOEXEC()|Main/WebHome#FuncNOEXEC]]</code> if you want to prevent that. This function returns no output. Use `$GET()` to retrieve variables. Unlike table ranges, variables live for the time of the page view and persist across tables, i.e. you can use it to summarize results across several tables and also included topics
- Syntax: <code>**$SET( name, value )**</code>
- Example: <code>**%CALC\{"$SET(my\_total, $SUM($ABOVE()))"\}%**</code> sets the `my_total` variable to the sum of all table cells located above the current cell and returns an empty string
-- Related: <code>[[$GET()|Main/WebHome#FuncGET]]</code>, <code>[[SETM()|Main/WebHome#FuncSETM]]</code>
+- Related: <code>[[$EXEC()|Main/WebHome#FuncEXEC]]</code>, <code>[[$GET()|Main/WebHome#FuncGET]]</code>, <code>[[$NOEXEC()|Main/WebHome#FuncNOEXEC]]</code>, <code>[[SETM()|Main/WebHome#FuncSETM]]</code>
<a name="FuncSETM"></a>
- Returns -1 if <code>**num**</code> is negative, 0 if zero, or 1 if positive
- Syntax: <code>**$SIGN( num )**</code>
- Example: <code>**%CALC\{"$SIGN(-12.5)"\}%**</code> returns <code>**-1**</code>
-- Related: <code>[[$ABS()|Main/WebHome#FuncABS]]</code>, <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>, <code>[[$INT()|Main/WebHome#FuncINT]]</code>, <code>[[$NOT()|Main/WebHome#FuncNOT]]</code>
+- Related: <code>[[$ABS()|Main/WebHome#FuncABS]]</code>, <code>[[$EVAL()|Main/WebHome#FuncEVAL]]</code>, <code>[[$EVEN()|Main/WebHome#FuncEVEN]]</code>, <code>[[$INT()|Main/WebHome#FuncINT]]</code>, <code>[[$NOT()|Main/WebHome#FuncNOT]]</code>, <code>[[$ODD()|Main/WebHome#FuncODD]]</code>
<a name="FuncSUBSTITUTE"></a>
### <a name="SUMPRODUCT( list, list ) -- scal"></a> SUMPRODUCT( list, list ) -- scalar product on ranges of cells
- Syntax: <code>**$SUMPRODUCT( list, list, _list..._ )**</code>
-- Example: <code>**%CALC\{"$SUM(R2:C1..R4:C1, R2:C5..R4:C5)"\}%**</code> evaluates and returns the result of <code>**($T(R2:C1) \* $T(R2:C5) + $T(R3:C1) \* $T(R3:C5) + $T(R4:C1) \* $T(R4:C5))**</code>
+- Example: <code>**%CALC\{"$SUMPRODUCT(R2:C1..R4:C1, R2:C5..R4:C5)"\}%**</code> evaluates and returns the result of <code>**($T(R2:C1) \* $T(R2:C5) + $T(R3:C1) \* $T(R3:C5) + $T(R4:C1) \* $T(R4:C5))**</code>
- Related: <code>[[$LIST()|Main/WebHome#FuncLIST]]</code>, <code>[[$PRODUCT()|Main/WebHome#FuncPRODUCT]]</code>, <code>[[$SUM()|Main/WebHome#FuncSUM]]</code>
<a name="FuncT"></a>
- The unit is seconds if not specified; unit can be `second`, `minute`, `hour`, `day`, `week`, `month`, `year`. Note: An approximation is used for month and year calculations
- Syntax: <code>**$TIMEADD( serial, value, _unit_ )**</code>
-- Example: <code>**%CALC\{"$TIMEADD($TIME(), 2, week)"\}%**</code>
-- Related: <code>[[$()|Main/WebHome#Func]]</code>, <code>[[$()|Main/WebHome#Func]]</code> returns the serialized date two weeks from now
+- Example: <code>**%CALC\{"$TIMEADD($TIME(), 2, week)"\}%**</code> returns the serialized date two weeks from now
- Related: <code>[[$FORMATTIME()|Main/WebHome#FuncFORMATTIME]]</code>, <code>[[$FORMATGMTIME()|Main/WebHome#FuncFORMATGMTIME]]</code>, <code>[[$TIME()|Main/WebHome#FuncTIME]]</code>, <code>[[$TIMEDIFF()|Main/WebHome#FuncTIMEDIFF]]</code>, <code>[[$TODAY()|Main/WebHome#FuncTODAY]]</code>
<a name="FuncTIMEDIFF"></a>
- Debug plugin: (See output in `data/debug.txt`)
- Set DEBUG = 0
-- Do not handle `%CALC{}%` tag in included topic while including topic: (default: 1)
+- Do not handle `%CALC{}%` variable in included topic while including topic: (default: 1)
- Set SKIPINCLUDE = 1
- [[WikiWords|TWiki/WikiWord]] to exclude from being spaced out by the <code>**$PROPERSPACE(text)**</code> function. This comma delimited list can be overloaded by a DONTSPACE preferences variable:
<td> Plugin Perl module </td>
</tr>
</table>
+- (Dakar) Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
- Test if the "Total" in the first table in this topic is correct.
## <a name="Plugin Info"></a> Plugin Info
</tr>
<tr>
<td align="right"> Plugin Version: </td>
- <td> 17 Jul 2004 </td>
+ <td> 17 Jun 2005 (1.018) </td>
</tr>
<tr>
<td align="right"> Change History: </td>
<td> </td>
</tr>
<tr>
+ <td align="right"> 17 Jun 2005: </td>
+ <td> Added $NOEXEC(), $EXEC() </td>
+ </tr>
+ <tr>
+ <td align="right"> 25 Mar 2005: </td>
+ <td> Fixed evaluation bug when using SpeedyCGI accelerator; code refactor to load module only when needed, contributed by TWiki:Main/CrawfordCurrie </td>
+ </tr>
+ <tr>
+ <td align="right"> 24 Oct 2004: </td>
+ <td> Added $EXISTS(), contributed by TWiki:Main/RodrigoChandia; added $PERCENTILE() </td>
+ </tr>
+ <tr>
+ <td align="right"> 18 Oct 2004: </td>
+ <td> Added $LISTJOIN() </td>
+ </tr>
+ <tr>
+ <td align="right"> 26 Sep 2004: </td>
+ <td> Added $FORMAT(KB), $FORMAT(MB), contributed by TWiki:Main/ArthurClemens; added $FORMAT(KBMB), $EVEN(), $ODD() </td>
+ </tr>
+ <tr>
<td align="right"> 17 Jul 2004: </td>
<td> Added $WORKINGDAYS(), contributed by TWiki:Main/CrawfordCurrie </td>
</tr>
</tr>
<tr>
<td align="right"> 19 Apr 2003: </td>
- <td> Added $COUNTSTR(), $EXACT(), $IF(), $ROUND(), $TRIM(); added $FORMAT(), contributed by TWiki:Main/JimStraus; support <code>%</code> modulus operator in $EVAL, $INT, and $ROUND; fixed bug in $DEF </td>
+ <td> Added $COUNTSTR(), $EXACT(), $IF(), $ROUND(), $TRIM(); added $FORMAT(), contributed by TWiki:Main/JimStraus; support <code>%</code> modulus operator in $EVAL(), $INT(), and $ROUND(); fixed bug in $DEF() </td>
</tr>
<tr>
<td align="right"> 07 Jun 2002: </td>
</tr>
<tr>
<td align="right"> 19 Jul 2001: </td>
- <td> Fixed incorrect $SUM calculation of cell with value <code>0</code></td>
+ <td> Fixed incorrect $SUM() calculation of cell with value <code>0</code></td>
</tr>
<tr>
<td align="right"> 14 Jul 2001: </td>
</tr>
<tr>
<td align="right"> 01 Jun 2001: </td>
- <td> Fixed insecure dependencies for $MIN and $MAX </td>
+ <td> Fixed insecure dependencies for $MIN() and $MAX() </td>
</tr>
<tr>
<td align="right"> 16 Apr 2001: </td>
- <td> Fixed div by 0 bug in $AVERAGE </td>
+ <td> Fixed div by 0 bug in $AVERAGE() </td>
</tr>
<tr>
<td align="right"> 17 Mar 2001: </td>
- <td> Initial version </td>
+ <td> Initial version with $ABOVE(), $AVERAGE(), $COLUMN(), $COUNTITEMS(), $EVAL(), $INT(), $LEFT(), $LOWER(), $MAX(), $MIN(), $ROW(), $SUM(), $T(), $UPPER() </td>
</tr>
<tr>
<td align="right"> CPAN Dependencies: </td>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
--- TWiki:Main/PeterThoeny - 17 Jul 2004
+-- TWiki:Main/PeterThoeny - 17 Jun 2005
<table width="100%">
<tr align="center">
- <td bgcolor="#000000"><font color="#FFFFFF"> #000000 </font></td>
- <td bgcolor="#000033"><font color="#FFFFFF"> #000033 </font></td>
- <td bgcolor="#000066"><font color="#FFFFFF"> #000066 </font></td>
- <td bgcolor="#000099"><font color="#FFFFFF"> #000099 </font></td>
- <td bgcolor="#0000CC"><font color="#FFFFFF"> #0000CC </font></td>
- <td bgcolor="#0000FF"><font color="#FFFFFF"> #0000FF </font></td>
+ <td bgcolor="#000000"><font color="#FFFFFF"><b> #000000 </b></font></td>
+ <td bgcolor="#000033"><font color="#FFFFFF"><b> #000033 </b></font></td>
+ <td bgcolor="#000066"><font color="#FFFFFF"><b> #000066 </b></font></td>
+ <td bgcolor="#000099"><font color="#FFFFFF"><b> #000099 </b></font></td>
+ <td bgcolor="#0000CC"><font color="#FFFFFF"><b> #0000CC </b></font></td>
+ <td bgcolor="#0000FF"><font color="#FFFFFF"><b> #0000FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#003300"><font color="#FFFFFF"> #003300 </font></td>
- <td bgcolor="#003333"><font color="#FFFFFF"> #003333 </font></td>
- <td bgcolor="#003366"><font color="#FFFFFF"> #003366 </font></td>
- <td bgcolor="#003399"><font color="#FFFFFF"> #003399 </font></td>
- <td bgcolor="#0033CC"><font color="#FFFFFF"> #0033CC </font></td>
- <td bgcolor="#0033FF"><font color="#FFFFFF"> #0033FF </font></td>
+ <tr align="center">
+ <td bgcolor="#003300"><font color="#FFFFFF"><b> #003300 </b></font></td>
+ <td bgcolor="#003333"><font color="#FFFFFF"><b> #003333 </b></font></td>
+ <td bgcolor="#003366"><font color="#FFFFFF"><b> #003366 </b></font></td>
+ <td bgcolor="#003399"><font color="#FFFFFF"><b> #003399 </b></font></td>
+ <td bgcolor="#0033CC"><font color="#FFFFFF"><b> #0033CC </b></font></td>
+ <td bgcolor="#0033FF"><font color="#FFFFFF"><b> #0033FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#006600"><font color="#FFFFFF"> #006600 </font></td>
- <td bgcolor="#006633"><font color="#FFFFFF"> #006633 </font></td>
- <td bgcolor="#006666"><font color="#FFFFFF"> #006666 </font></td>
- <td bgcolor="#006699"><font color="#FFFFFF"> #006699 </font></td>
- <td bgcolor="#0066CC"><font color="#FFFFFF"> #0066CC </font></td>
- <td bgcolor="#0066FF"><font color="#FFFFFF"> #0066FF </font></td>
+ <tr align="center">
+ <td bgcolor="#006600"><font color="#FFFFFF"><b> #006600 </b></font></td>
+ <td bgcolor="#006633"><font color="#FFFFFF"><b> #006633 </b></font></td>
+ <td bgcolor="#006666"><font color="#FFFFFF"><b> #006666 </b></font></td>
+ <td bgcolor="#006699"><font color="#FFFFFF"><b> #006699 </b></font></td>
+ <td bgcolor="#0066CC"><font color="#FFFFFF"><b> #0066CC </b></font></td>
+ <td bgcolor="#0066FF"><font color="#FFFFFF"><b> #0066FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#009900"> #009900 </td>
- <td bgcolor="#009933"> #009933 </td>
- <td bgcolor="#009966"> #009966 </td>
- <td bgcolor="#009999"> #009999 </td>
- <td bgcolor="#0099CC"> #0099CC </td>
- <td bgcolor="#0099FF"> #0099FF </td>
+ <tr align="center">
+ <td bgcolor="#009900"><b> #009900 </b></td>
+ <td bgcolor="#009933"><b> #009933 </b></td>
+ <td bgcolor="#009966"><b> #009966 </b></td>
+ <td bgcolor="#009999"><b> #009999 </b></td>
+ <td bgcolor="#0099CC"><b> #0099CC </b></td>
+ <td bgcolor="#0099FF"><b> #0099FF </b></td>
</tr>
- <tr align="center">
- <td bgcolor="#00CC00"> #00CC00 </td>
- <td bgcolor="#00CC33"> #00CC33 </td>
- <td bgcolor="#00CC66"> #00CC66 </td>
- <td bgcolor="#00CC99"> #00CC99 </td>
- <td bgcolor="#00CCCC"> #00CCCC </td>
- <td bgcolor="#00CCFF"> #00CCFF </td>
+ <tr align="center">
+ <td bgcolor="#00CC00"><b> #00CC00 </b></td>
+ <td bgcolor="#00CC33"><b> #00CC33 </b></td>
+ <td bgcolor="#00CC66"><b> #00CC66 </b></td>
+ <td bgcolor="#00CC99"><b> #00CC99 </b></td>
+ <td bgcolor="#00CCCC"><b> #00CCCC </b></td>
+ <td bgcolor="#00CCFF"><b> #00CCFF </b></td>
</tr>
- <tr align="center">
- <td bgcolor="#00FF00"> #00FF00 </td>
- <td bgcolor="#00FF33"> #00FF33 </td>
- <td bgcolor="#00FF66"> #00FF66 </td>
- <td bgcolor="#00FF99"> #00FF99 </td>
- <td bgcolor="#00FFCC"> #00FFCC </td>
- <td bgcolor="#00FFFF"> #00FFFF </td>
+ <tr align="center">
+ <td bgcolor="#00FF00"><b> #00FF00 </b></td>
+ <td bgcolor="#00FF33"><b> #00FF33 </b></td>
+ <td bgcolor="#00FF66"><b> #00FF66 </b></td>
+ <td bgcolor="#00FF99"><b> #00FF99 </b></td>
+ <td bgcolor="#00FFCC"><b> #00FFCC </b></td>
+ <td bgcolor="#00FFFF"><b> #00FFFF </b></td>
</tr>
-</table>
-<table width="100%">
- <tr align="center">
- <td bgcolor="#330000"><font color="#FFFFFF"> #330000 </font></td>
- <td bgcolor="#330033"><font color="#FFFFFF"> #330033 </font></td>
- <td bgcolor="#330066"><font color="#FFFFFF"> #330066 </font></td>
- <td bgcolor="#330099"><font color="#FFFFFF"> #330099 </font></td>
- <td bgcolor="#3300CC"><font color="#FFFFFF"> #3300CC </font></td>
- <td bgcolor="#3300FF"><font color="#FFFFFF"> #3300FF </font></td>
+ <tr align="center">
+ <td bgcolor="#330000"><font color="#FFFFFF"><b> #330000 </b></font></td>
+ <td bgcolor="#330033"><font color="#FFFFFF"><b> #330033 </b></font></td>
+ <td bgcolor="#330066"><font color="#FFFFFF"><b> #330066 </b></font></td>
+ <td bgcolor="#330099"><font color="#FFFFFF"><b> #330099 </b></font></td>
+ <td bgcolor="#3300CC"><font color="#FFFFFF"><b> #3300CC </b></font></td>
+ <td bgcolor="#3300FF"><font color="#FFFFFF"><b> #3300FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#333300"><font color="#FFFFFF"> #333300 </font></td>
- <td bgcolor="#333333"><font color="#FFFFFF"> #333333 </font></td>
- <td bgcolor="#333366"><font color="#FFFFFF"> #333366 </font></td>
- <td bgcolor="#333399"><font color="#FFFFFF"> #333399 </font></td>
- <td bgcolor="#3333CC"><font color="#FFFFFF"> #3333CC </font></td>
- <td bgcolor="#3333FF"><font color="#FFFFFF"> #3333FF </font></td>
+ <tr align="center">
+ <td bgcolor="#333300"><font color="#FFFFFF"><b> #333300 </b></font></td>
+ <td bgcolor="#333333"><font color="#FFFFFF"><b> #333333 </b></font></td>
+ <td bgcolor="#333366"><font color="#FFFFFF"><b> #333366 </b></font></td>
+ <td bgcolor="#333399"><font color="#FFFFFF"><b> #333399 </b></font></td>
+ <td bgcolor="#3333CC"><font color="#FFFFFF"><b> #3333CC </b></font></td>
+ <td bgcolor="#3333FF"><font color="#FFFFFF"><b> #3333FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#336600"><font color="#FFFFFF"> #336600 </font></td>
- <td bgcolor="#336633"><font color="#FFFFFF"> #336633 </font></td>
- <td bgcolor="#336666"><font color="#FFFFFF"> #336666 </font></td>
- <td bgcolor="#336699"><font color="#FFFFFF"> #336699 </font></td>
- <td bgcolor="#3366CC"><font color="#FFFFFF"> #3366CC </font></td>
- <td bgcolor="#3366FF"><font color="#FFFFFF"> #3366FF </font></td>
+ <tr align="center">
+ <td bgcolor="#336600"><font color="#FFFFFF"><b> #336600 </b></font></td>
+ <td bgcolor="#336633"><font color="#FFFFFF"><b> #336633 </b></font></td>
+ <td bgcolor="#336666"><font color="#FFFFFF"><b> #336666 </b></font></td>
+ <td bgcolor="#336699"><font color="#FFFFFF"><b> #336699 </b></font></td>
+ <td bgcolor="#3366CC"><font color="#FFFFFF"><b> #3366CC </b></font></td>
+ <td bgcolor="#3366FF"><font color="#FFFFFF"><b> #3366FF </b></font></td>
</tr>
- <tr align="center">
- <td bgcolor="#339900"> #339900 </td>
- <td bgcolor="#339933"> #339933 </td>
- <td bgcolor="#339966"> #339966 </td>
- <td bgcolor="#339999"> #339999 </td>
- <td bgcolor="#3399CC"> #3399CC </td>
- <td bgcolor="#3399FF"> #3399FF </td>
+ <tr align="center">
+ <td bgcolor="#339900"><b> #339900 </b></td>
+ <td bgcolor="#339933"><b> #339933 </b></td>
+ <td bgcolor="#339966"><b> #339966 </b></td>
+ <td bgcolor="#339999"><b> #339999 </b></td>
+ <td bgcolor="#3399CC"><b> #3399CC </b></td>
+ <td bgcolor="#3399FF"><b> #3399FF </b></td>
</tr>
- <tr align="center">
- <td bgcolor="#33CC00"> #33CC00 </td>
- <td bgcolor="#33CC33"> #33CC33 </td>
- <td bgcolor="#33CC66"> #33CC66 </td>
- <td bgcolor="#33CC99"> #33CC99 </td>
- <td bgcolor="#33CCCC"> #33CCCC </td>
- <td bgcolor="#33CCFF"> #33CCFF </td>
+ <tr align="center">
+ <td bgcolor="#33CC00"><b> #33CC00 </b></td>
+ <td bgcolor="#33CC33"><b> #33CC33 </b></td>
+ <td bgcolor="#33CC66"><b> #33CC66 </b></td>
+ <td bgcolor="#33CC99"><b> #33CC99 </b></td>
+ <td bgcolor="#33CCCC"><b> #33CCCC </b></td>
+ <td bgcolor="#33CCFF"><b> #33CCFF </b></td>
</tr>
- <tr align="center">
- <td bgcolor="#33FF00"> #33FF00 </td>
- <td bgcolor="#33FF33"> #33FF33 </td>
- <td bgcolor="#33FF66"> #33FF66 </td>
- <td bgcolor="#33FF99"> #33FF99 </td>
- <td bgcolor="#33FFCC"> #33FFCC </td>
- <td bgcolor="#33FFFF"> #33FFFF </td>
+ <tr align="center">
+ <td bgcolor="#33FF00"><b> #33FF00 </b></td>
+ <td bgcolor="#33FF33"><b> #33FF33 </b></td>
+ <td bgcolor="#33FF66"><b> #33FF66 </b></td>
+ <td bgcolor="#33FF99"><b> #33FF99 </b></td>
+ <td bgcolor="#33FFCC"><b> #33FFCC </b></td>
+ <td bgcolor="#33FFFF"><b> #33FFFF </b></td>
</tr>
-</table>
-<table width="100%">
- <tr align="center">
- <td bgcolor="#660000"><font color="#FFFFFF"> #660000 </font></td>
- <td bgcolor="#660033"><font color="#FFFFFF"> #660033 </font></td>
- <td bgcolor="#660066"><font color="#FFFFFF"> #660066 </font></td>
- <td bgcolor="#660099"><font color="#FFFFFF"> #660099 </font></td>
- <td bgcolor="#6600CC"><font color="#FFFFFF"> #6600CC </font></td>
- <td bgcolor="#6600FF"><font color="#FFFFFF"> #6600FF </font></td>
+ <tr align="center">
+ <td bgcolor="#660000"><font color="#FFFFFF"><b> #660000 </b></font></td>
+ <td bgcolor="#660033"><font color="#FFFFFF"><b> #660033 </b></font></td>
+ <td bgcolor="#660066"><font color="#FFFFFF"><b> #660066 </b></font></td>
+ <td bgcolor="#660099"><font color="#FFFFFF"><b> #660099 </b></font></td>
+ <td bgcolor="#6600CC"><font color="#FFFFFF"><b> #6600CC </b></font></td>
+ <td bgcolor="#6600FF"><font color="#FFFFFF"><b> #6600FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#663300"><font color="#FFFFFF"> #663300 </font></td>
- <td bgcolor="#663333"><font color="#FFFFFF"> #663333 </font></td>
- <td bgcolor="#663366"><font color="#FFFFFF"> #663366 </font></td>
- <td bgcolor="#663399"><font color="#FFFFFF"> #663399 </font></td>
- <td bgcolor="#6633CC"><font color="#FFFFFF"> #6633CC </font></td>
- <td bgcolor="#6633FF"><font color="#FFFFFF"> #6633FF </font></td>
+ <td bgcolor="#663300"><font color="#FFFFFF"><b> #663300 </b></font></td>
+ <td bgcolor="#663333"><font color="#FFFFFF"><b> #663333 </b></font></td>
+ <td bgcolor="#663366"><font color="#FFFFFF"><b> #663366 </b></font></td>
+ <td bgcolor="#663399"><font color="#FFFFFF"><b> #663399 </b></font></td>
+ <td bgcolor="#6633CC"><font color="#FFFFFF"><b> #6633CC </b></font></td>
+ <td bgcolor="#6633FF"><font color="#FFFFFF"><b> #6633FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#666600"><font color="#FFFFFF"> #666600 </font></td>
- <td bgcolor="#666633"><font color="#FFFFFF"> #666633 </font></td>
- <td bgcolor="#666666"><font color="#FFFFFF"> #666666 </font></td>
- <td bgcolor="#666699"><font color="#FFFFFF"> #666699 </font></td>
- <td bgcolor="#6666CC"><font color="#FFFFFF"> #6666CC </font></td>
- <td bgcolor="#6666FF"><font color="#FFFFFF"> #6666FF </font></td>
+ <td bgcolor="#666600"><font color="#FFFFFF"><b> #666600 </b></font></td>
+ <td bgcolor="#666633"><font color="#FFFFFF"><b> #666633 </b></font></td>
+ <td bgcolor="#666666"><font color="#FFFFFF"><b> #666666 </b></font></td>
+ <td bgcolor="#666699"><font color="#FFFFFF"><b> #666699 </b></font></td>
+ <td bgcolor="#6666CC"><font color="#FFFFFF"><b> #6666CC </b></font></td>
+ <td bgcolor="#6666FF"><font color="#FFFFFF"><b> #6666FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#669900"> #669900 </td>
- <td bgcolor="#669933"> #669933 </td>
- <td bgcolor="#669966"> #669966 </td>
- <td bgcolor="#669999"> #669999 </td>
- <td bgcolor="#6699CC"> #6699CC </td>
- <td bgcolor="#6699FF"> #6699FF </td>
+ <td bgcolor="#669900"><b> #669900 </b></td>
+ <td bgcolor="#669933"><b> #669933 </b></td>
+ <td bgcolor="#669966"><b> #669966 </b></td>
+ <td bgcolor="#669999"><b> #669999 </b></td>
+ <td bgcolor="#6699CC"><b> #6699CC </b></td>
+ <td bgcolor="#6699FF"><b> #6699FF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#66CC00"> #66CC00 </td>
- <td bgcolor="#66CC33"> #66CC33 </td>
- <td bgcolor="#66CC66"> #66CC66 </td>
- <td bgcolor="#66CC99"> #66CC99 </td>
- <td bgcolor="#66CCCC"> #66CCCC </td>
- <td bgcolor="#66CCFF"> #66CCFF </td>
+ <td bgcolor="#66CC00"><b> #66CC00 </b></td>
+ <td bgcolor="#66CC33"><b> #66CC33 </b></td>
+ <td bgcolor="#66CC66"><b> #66CC66 </b></td>
+ <td bgcolor="#66CC99"><b> #66CC99 </b></td>
+ <td bgcolor="#66CCCC"><b> #66CCCC </b></td>
+ <td bgcolor="#66CCFF"><b> #66CCFF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#66FF00"> #66FF00 </td>
- <td bgcolor="#66FF33"> #66FF33 </td>
- <td bgcolor="#66FF66"> #66FF66 </td>
- <td bgcolor="#66FF99"> #66FF99 </td>
- <td bgcolor="#66FFCC"> #66FFCC </td>
- <td bgcolor="#66FFFF"> #66FFFF </td>
+ <td bgcolor="#66FF00"><b> #66FF00 </b></td>
+ <td bgcolor="#66FF33"><b> #66FF33 </b></td>
+ <td bgcolor="#66FF66"><b> #66FF66 </b></td>
+ <td bgcolor="#66FF99"><b> #66FF99 </b></td>
+ <td bgcolor="#66FFCC"><b> #66FFCC </b></td>
+ <td bgcolor="#66FFFF"><b> #66FFFF </b></td>
</tr>
-</table>
-<table width="100%">
<tr align="center">
- <td bgcolor="#990000"><font color="#FFFFFF"> #990000 </font></td>
- <td bgcolor="#990033"><font color="#FFFFFF"> #990033 </font></td>
- <td bgcolor="#990066"><font color="#FFFFFF"> #990066 </font></td>
- <td bgcolor="#990099"><font color="#FFFFFF"> #990099 </font></td>
- <td bgcolor="#9900CC"><font color="#FFFFFF"> #9900CC </font></td>
- <td bgcolor="#9900FF"><font color="#FFFFFF"> #9900FF </font></td>
+ <td bgcolor="#990000"><font color="#FFFFFF"><b> #990000 </b></font></td>
+ <td bgcolor="#990033"><font color="#FFFFFF"><b> #990033 </b></font></td>
+ <td bgcolor="#990066"><font color="#FFFFFF"><b> #990066 </b></font></td>
+ <td bgcolor="#990099"><font color="#FFFFFF"><b> #990099 </b></font></td>
+ <td bgcolor="#9900CC"><font color="#FFFFFF"><b> #9900CC </b></font></td>
+ <td bgcolor="#9900FF"><font color="#FFFFFF"><b> #9900FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#993300"><font color="#FFFFFF"> #993300 </font></td>
- <td bgcolor="#993333"><font color="#FFFFFF"> #993333 </font></td>
- <td bgcolor="#993366"><font color="#FFFFFF"> #993366 </font></td>
- <td bgcolor="#993399"><font color="#FFFFFF"> #993399 </font></td>
- <td bgcolor="#9933CC"><font color="#FFFFFF"> #9933CC </font></td>
- <td bgcolor="#9933FF"><font color="#FFFFFF"> #9933FF </font></td>
+ <td bgcolor="#993300"><font color="#FFFFFF"><b> #993300 </b></font></td>
+ <td bgcolor="#993333"><font color="#FFFFFF"><b> #993333 </b></font></td>
+ <td bgcolor="#993366"><font color="#FFFFFF"><b> #993366 </b></font></td>
+ <td bgcolor="#993399"><font color="#FFFFFF"><b> #993399 </b></font></td>
+ <td bgcolor="#9933CC"><font color="#FFFFFF"><b> #9933CC </b></font></td>
+ <td bgcolor="#9933FF"><font color="#FFFFFF"><b> #9933FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#996600"><font color="#FFFFFF"> #996600 </font></td>
- <td bgcolor="#996633"><font color="#FFFFFF"> #996633 </font></td>
- <td bgcolor="#996666"><font color="#FFFFFF"> #996666 </font></td>
- <td bgcolor="#996699"><font color="#FFFFFF"> #996699 </font></td>
- <td bgcolor="#9966CC"><font color="#FFFFFF"> #9966CC </font></td>
- <td bgcolor="#9966FF"><font color="#FFFFFF"> #9966FF </font></td>
+ <td bgcolor="#996600"><font color="#FFFFFF"><b> #996600 </b></font></td>
+ <td bgcolor="#996633"><font color="#FFFFFF"><b> #996633 </b></font></td>
+ <td bgcolor="#996666"><font color="#FFFFFF"><b> #996666 </b></font></td>
+ <td bgcolor="#996699"><font color="#FFFFFF"><b> #996699 </b></font></td>
+ <td bgcolor="#9966CC"><font color="#FFFFFF"><b> #9966CC </b></font></td>
+ <td bgcolor="#9966FF"><font color="#FFFFFF"><b> #9966FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#999900"> #999900 </td>
- <td bgcolor="#999933"> #999933 </td>
- <td bgcolor="#999966"> #999966 </td>
- <td bgcolor="#999999"> #999999 </td>
- <td bgcolor="#9999CC"> #9999CC </td>
- <td bgcolor="#9999FF"> #9999FF </td>
+ <td bgcolor="#999900"><b> #999900 </b></td>
+ <td bgcolor="#999933"><b> #999933 </b></td>
+ <td bgcolor="#999966"><b> #999966 </b></td>
+ <td bgcolor="#999999"><b> #999999 </b></td>
+ <td bgcolor="#9999CC"><b> #9999CC </b></td>
+ <td bgcolor="#9999FF"><b> #9999FF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#99CC00"> #99CC00 </td>
- <td bgcolor="#99CC33"> #99CC33 </td>
- <td bgcolor="#99CC66"> #99CC66 </td>
- <td bgcolor="#99CC99"> #99CC99 </td>
- <td bgcolor="#99CCCC"> #99CCCC </td>
- <td bgcolor="#99CCFF"> #99CCFF </td>
+ <td bgcolor="#99CC00"><b> #99CC00 </b></td>
+ <td bgcolor="#99CC33"><b> #99CC33 </b></td>
+ <td bgcolor="#99CC66"><b> #99CC66 </b></td>
+ <td bgcolor="#99CC99"><b> #99CC99 </b></td>
+ <td bgcolor="#99CCCC"><b> #99CCCC </b></td>
+ <td bgcolor="#99CCFF"><b> #99CCFF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#99FF00"> #99FF00 </td>
- <td bgcolor="#99FF33"> #99FF33 </td>
- <td bgcolor="#99FF66"> #99FF66 </td>
- <td bgcolor="#99FF99"> #99FF99 </td>
- <td bgcolor="#99FFCC"> #99FFCC </td>
- <td bgcolor="#99FFFF"> #99FFFF </td>
+ <td bgcolor="#99FF00"><b> #99FF00 </b></td>
+ <td bgcolor="#99FF33"><b> #99FF33 </b></td>
+ <td bgcolor="#99FF66"><b> #99FF66 </b></td>
+ <td bgcolor="#99FF99"><b> #99FF99 </b></td>
+ <td bgcolor="#99FFCC"><b> #99FFCC </b></td>
+ <td bgcolor="#99FFFF"><b> #99FFFF </b></td>
</tr>
-</table>
-<table width="100%">
<tr align="center">
- <td bgcolor="#CC0000"><font color="#FFFFFF"> #CC0000 </font></td>
- <td bgcolor="#CC0033"><font color="#FFFFFF"> #CC0033 </font></td>
- <td bgcolor="#CC0066"><font color="#FFFFFF"> #CC0066 </font></td>
- <td bgcolor="#CC0099"><font color="#FFFFFF"> #CC0099 </font></td>
- <td bgcolor="#CC00CC"><font color="#FFFFFF"> #CC00CC </font></td>
- <td bgcolor="#CC00FF"><font color="#FFFFFF"> #CC00FF </font></td>
+ <td bgcolor="#CC0000"><font color="#FFFFFF"><b> #CC0000 </b></font></td>
+ <td bgcolor="#CC0033"><font color="#FFFFFF"><b> #CC0033 </b></font></td>
+ <td bgcolor="#CC0066"><font color="#FFFFFF"><b> #CC0066 </b></font></td>
+ <td bgcolor="#CC0099"><font color="#FFFFFF"><b> #CC0099 </b></font></td>
+ <td bgcolor="#CC00CC"><font color="#FFFFFF"><b> #CC00CC </b></font></td>
+ <td bgcolor="#CC00FF"><font color="#FFFFFF"><b> #CC00FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#CC3300"><font color="#FFFFFF"> #CC3300 </font></td>
- <td bgcolor="#CC3333"><font color="#FFFFFF"> #CC3333 </font></td>
- <td bgcolor="#CC3366"><font color="#FFFFFF"> #CC3366 </font></td>
- <td bgcolor="#CC3399"><font color="#FFFFFF"> #CC3399 </font></td>
- <td bgcolor="#CC33CC"><font color="#FFFFFF"> #CC33CC </font></td>
- <td bgcolor="#CC33FF"><font color="#FFFFFF"> #CC33FF </font></td>
+ <td bgcolor="#CC3300"><font color="#FFFFFF"><b> #CC3300 </b></font></td>
+ <td bgcolor="#CC3333"><font color="#FFFFFF"><b> #CC3333 </b></font></td>
+ <td bgcolor="#CC3366"><font color="#FFFFFF"><b> #CC3366 </b></font></td>
+ <td bgcolor="#CC3399"><font color="#FFFFFF"><b> #CC3399 </b></font></td>
+ <td bgcolor="#CC33CC"><font color="#FFFFFF"><b> #CC33CC </b></font></td>
+ <td bgcolor="#CC33FF"><font color="#FFFFFF"><b> #CC33FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#CC6600"><font color="#FFFFFF"> #CC6600 </font></td>
- <td bgcolor="#CC6633"><font color="#FFFFFF"> #CC6633 </font></td>
- <td bgcolor="#CC6666"><font color="#FFFFFF"> #CC6666 </font></td>
- <td bgcolor="#CC6699"><font color="#FFFFFF"> #CC6699 </font></td>
- <td bgcolor="#CC66CC"><font color="#FFFFFF"> #CC66CC </font></td>
- <td bgcolor="#CC66FF"><font color="#FFFFFF"> #CC66FF </font></td>
+ <td bgcolor="#CC6600"><font color="#FFFFFF"><b> #CC6600 </b></font></td>
+ <td bgcolor="#CC6633"><font color="#FFFFFF"><b> #CC6633 </b></font></td>
+ <td bgcolor="#CC6666"><font color="#FFFFFF"><b> #CC6666 </b></font></td>
+ <td bgcolor="#CC6699"><font color="#FFFFFF"><b> #CC6699 </b></font></td>
+ <td bgcolor="#CC66CC"><font color="#FFFFFF"><b> #CC66CC </b></font></td>
+ <td bgcolor="#CC66FF"><font color="#FFFFFF"><b> #CC66FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#CC9900"> #CC9900 </td>
- <td bgcolor="#CC9933"> #CC9933 </td>
- <td bgcolor="#CC9966"> #CC9966 </td>
- <td bgcolor="#CC9999"> #CC9999 </td>
- <td bgcolor="#CC99CC"> #CC99CC </td>
- <td bgcolor="#CC99FF"> #CC99FF </td>
+ <td bgcolor="#CC9900"><b> #CC9900 </b></td>
+ <td bgcolor="#CC9933"><b> #CC9933 </b></td>
+ <td bgcolor="#CC9966"><b> #CC9966 </b></td>
+ <td bgcolor="#CC9999"><b> #CC9999 </b></td>
+ <td bgcolor="#CC99CC"><b> #CC99CC </b></td>
+ <td bgcolor="#CC99FF"><b> #CC99FF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#CCCC00"> #CCCC00 </td>
- <td bgcolor="#CCCC33"> #CCCC33 </td>
- <td bgcolor="#CCCC66"> #CCCC66 </td>
- <td bgcolor="#CCCC99"> #CCCC99 </td>
- <td bgcolor="#CCCCCC"> #CCCCCC </td>
- <td bgcolor="#CCCCFF"> #CCCCFF </td>
+ <td bgcolor="#CCCC00"><b> #CCCC00 </b></td>
+ <td bgcolor="#CCCC33"><b> #CCCC33 </b></td>
+ <td bgcolor="#CCCC66"><b> #CCCC66 </b></td>
+ <td bgcolor="#CCCC99"><b> #CCCC99 </b></td>
+ <td bgcolor="#CCCCCC"><b> #CCCCCC </b></td>
+ <td bgcolor="#CCCCFF"><b> #CCCCFF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#CCFF00"> #CCFF00 </td>
- <td bgcolor="#CCFF33"> #CCFF33 </td>
- <td bgcolor="#CCFF66"> #CCFF66 </td>
- <td bgcolor="#CCFF99"> #CCFF99 </td>
- <td bgcolor="#CCFFCC"> #CCFFCC </td>
- <td bgcolor="#CCFFFF"> #CCFFFF </td>
+ <td bgcolor="#CCFF00"><b> #CCFF00 </b></td>
+ <td bgcolor="#CCFF33"><b> #CCFF33 </b></td>
+ <td bgcolor="#CCFF66"><b> #CCFF66 </b></td>
+ <td bgcolor="#CCFF99"><b> #CCFF99 </b></td>
+ <td bgcolor="#CCFFCC"><b> #CCFFCC </b></td>
+ <td bgcolor="#CCFFFF"><b> #CCFFFF </b></td>
</tr>
-</table>
-<table width="100%">
<tr align="center">
- <td bgcolor="#FF0000"><font color="#FFFFFF"> #FF0000 </font></td>
- <td bgcolor="#FF0033"><font color="#FFFFFF"> #FF0033 </font></td>
- <td bgcolor="#FF0066"><font color="#FFFFFF"> #FF0066 </font></td>
- <td bgcolor="#FF0099"><font color="#FFFFFF"> #FF0099 </font></td>
- <td bgcolor="#FF00CC"><font color="#FFFFFF"> #FF00CC </font></td>
- <td bgcolor="#FF00FF"><font color="#FFFFFF"> #FF00FF </font></td>
+ <td bgcolor="#FF0000"><font color="#FFFFFF"><b> #FF0000 </b></font></td>
+ <td bgcolor="#FF0033"><font color="#FFFFFF"><b> #FF0033 </b></font></td>
+ <td bgcolor="#FF0066"><font color="#FFFFFF"><b> #FF0066 </b></font></td>
+ <td bgcolor="#FF0099"><font color="#FFFFFF"><b> #FF0099 </b></font></td>
+ <td bgcolor="#FF00CC"><font color="#FFFFFF"><b> #FF00CC </b></font></td>
+ <td bgcolor="#FF00FF"><font color="#FFFFFF"><b> #FF00FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#FF3300"><font color="#FFFFFF"> #FF3300 </font></td>
- <td bgcolor="#FF3333"><font color="#FFFFFF"> #FF3333 </font></td>
- <td bgcolor="#FF3366"><font color="#FFFFFF"> #FF3366 </font></td>
- <td bgcolor="#FF3399"><font color="#FFFFFF"> #FF3399 </font></td>
- <td bgcolor="#FF33CC"><font color="#FFFFFF"> #FF33CC </font></td>
- <td bgcolor="#FF33FF"><font color="#FFFFFF"> #FF33FF </font></td>
+ <td bgcolor="#FF3300"><font color="#FFFFFF"><b> #FF3300 </b></font></td>
+ <td bgcolor="#FF3333"><font color="#FFFFFF"><b> #FF3333 </b></font></td>
+ <td bgcolor="#FF3366"><font color="#FFFFFF"><b> #FF3366 </b></font></td>
+ <td bgcolor="#FF3399"><font color="#FFFFFF"><b> #FF3399 </b></font></td>
+ <td bgcolor="#FF33CC"><font color="#FFFFFF"><b> #FF33CC </b></font></td>
+ <td bgcolor="#FF33FF"><font color="#FFFFFF"><b> #FF33FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#FF6600"><font color="#FFFFFF"> #FF6600 </font></td>
- <td bgcolor="#FF6633"><font color="#FFFFFF"> #FF6633 </font></td>
- <td bgcolor="#FF6666"><font color="#FFFFFF"> #FF6666 </font></td>
- <td bgcolor="#FF6699"><font color="#FFFFFF"> #FF6699 </font></td>
- <td bgcolor="#FF66CC"><font color="#FFFFFF"> #FF66CC </font></td>
- <td bgcolor="#FF66FF"><font color="#FFFFFF"> #FF66FF </font></td>
+ <td bgcolor="#FF6600"><font color="#FFFFFF"><b> #FF6600 </b></font></td>
+ <td bgcolor="#FF6633"><font color="#FFFFFF"><b> #FF6633 </b></font></td>
+ <td bgcolor="#FF6666"><font color="#FFFFFF"><b> #FF6666 </b></font></td>
+ <td bgcolor="#FF6699"><font color="#FFFFFF"><b> #FF6699 </b></font></td>
+ <td bgcolor="#FF66CC"><font color="#FFFFFF"><b> #FF66CC </b></font></td>
+ <td bgcolor="#FF66FF"><font color="#FFFFFF"><b> #FF66FF </b></font></td>
</tr>
<tr align="center">
- <td bgcolor="#FF9900"> #FF9900 </td>
- <td bgcolor="#FF9933"> #FF9933 </td>
- <td bgcolor="#FF9966"> #FF9966 </td>
- <td bgcolor="#FF9999"> #FF9999 </td>
- <td bgcolor="#FF99CC"> #FF99CC </td>
- <td bgcolor="#FF99FF"> #FF99FF </td>
+ <td bgcolor="#FF9900"><b> #FF9900 </b></td>
+ <td bgcolor="#FF9933"><b> #FF9933 </b></td>
+ <td bgcolor="#FF9966"><b> #FF9966 </b></td>
+ <td bgcolor="#FF9999"><b> #FF9999 </b></td>
+ <td bgcolor="#FF99CC"><b> #FF99CC </b></td>
+ <td bgcolor="#FF99FF"><b> #FF99FF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#FFCC00"> #FFCC00 </td>
- <td bgcolor="#FFCC33"> #FFCC33 </td>
- <td bgcolor="#FFCC66"> #FFCC66 </td>
- <td bgcolor="#FFCC99"> #FFCC99 </td>
- <td bgcolor="#FFCCCC"> #FFCCCC </td>
- <td bgcolor="#FFCCFF"> #FFCCFF </td>
+ <td bgcolor="#FFCC00"><b> #FFCC00 </b></td>
+ <td bgcolor="#FFCC33"><b> #FFCC33 </b></td>
+ <td bgcolor="#FFCC66"><b> #FFCC66 </b></td>
+ <td bgcolor="#FFCC99"><b> #FFCC99 </b></td>
+ <td bgcolor="#FFCCCC"><b> #FFCCCC </b></td>
+ <td bgcolor="#FFCCFF"><b> #FFCCFF </b></td>
</tr>
<tr align="center">
- <td bgcolor="#FFFF00"> #FFFF00 </td>
- <td bgcolor="#FFFF33"> #FFFF33 </td>
- <td bgcolor="#FFFF66"> #FFFF66 </td>
- <td bgcolor="#FFFF99"> #FFFF99 </td>
- <td bgcolor="#FFFFCC"> #FFFFCC </td>
- <td bgcolor="#FFFFFF"> #FFFFFF </td>
+ <td bgcolor="#FFFF00"><b> #FFFF00 </b></td>
+ <td bgcolor="#FFFF33"><b> #FFFF33 </b></td>
+ <td bgcolor="#FFFF66"><b> #FFFF66 </b></td>
+ <td bgcolor="#FFFF99"><b> #FFFF99 </b></td>
+ <td bgcolor="#FFFFCC"><b> #FFFFCC </b></td>
+ <td bgcolor="#FFFFFF"><b> #FFFFFF </b></td>
</tr>
</table>
+See TWiki:Codev.ColorScheme for links to web sites with web safe palettes, scheme generators, and other color tools and reference.
+
**_Related web sites:_**
- <http://www.cloford.com/resources/colours/websafe2.htm>
- <http://the-light.com/colclick.html>
- <http://www.triplecode.com/munsell/>
--- TWiki:Main.PeterThoeny - 16 Dec 2003 %BR% -- TWiki:Main.AndreaSterbini - 08 Sep 2003
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
- [[MainFeatures]]: The main features of the TWiki collaboration platform
- [[FileAttachments]]: Browser-upload files for distribution or display
-- [[WebChangesAlert]]: Get email alerts linking to the latest page changes
+- [[WebChangesAlert]]: Get e-mail alerts linking to the latest page changes
+
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+A [[StaticMethod]] is a method in a package that can be called without reference to an object of the package type. For example,
+
+# <a name="package Telecoms"></a> package Telecoms
+
+## <a name="StaticMethod defaultColour()"></a> [[StaticMethod]] defaultColour()
+
+ my $colour = Telecoms::defaultColour()
+
+**_Related Topics:_** [[ClassMethod]], [[ObjectMethod]], [[DeveloperDocumentationCategory]]
<ul>
<li><a href="#TWiki Access Control"> TWiki Access Control</a><ul>
<li><a href="#An Important Control Considerati"> An Important Control Consideration</a></li>
+ <li><a href="#Permissions settings of the webs"> Permissions settings of the webs on this TWiki site</a></li>
<li><a href="#Authentication vs. Access Contro"> Authentication vs. Access Control</a></li>
<li><a href="#Users and Groups"> Users and Groups</a><ul>
<li><a href="#Managing Users"> Managing Users</a></li>
<li><a href="#Managing Groups"> Managing Groups</a></li>
+ <li><a href="#The Super Admin Group"> The Super Admin Group</a></li>
</ul>
</li>
- <li><a href="#Restricting Write Access"> Restricting Write Access</a><ul>
- <li><a href="#Deny Editing by Topic"> Deny Editing by Topic</a></li>
- <li><a href="#Deny Editing by Web"> Deny Editing by Web</a></li>
+ <li><a href="#Restricting Access"> Restricting Access</a><ul>
+ <li><a href="#Controlling access to a Web"> Controlling access to a Web</a></li>
+ <li><a href="#Controlling access to a Topic"> Controlling access to a Topic</a></li>
+ <li><a href="#Controlling access to Attachment"> Controlling access to Attachments</a></li>
+ <li><a href="#How TWiki evaluates ALLOW/DENY s"> How TWiki evaluates ALLOW/DENY settings</a></li>
</ul>
</li>
- <li><a href="#Restricting Rename Access"> Restricting Rename Access</a><ul>
- <li><a href="#Deny Renaming by Topic"> Deny Renaming by Topic</a></li>
- <li><a href="#Deny Renaming by Web"> Deny Renaming by Web</a></li>
+ <li><a href="#Access Control quick recipes"> Access Control quick recipes</a><ul>
+ <li><a href="#Obfuscating Webs"> Obfuscating Webs</a></li>
+ <li><a href="#Authenticate all Webs and Restri"> Authenticate all Webs and Restrict Selected Webs</a></li>
+ <li><a href="#Authenticate and Restrict Select"> Authenticate and Restrict Selected Webs Only</a></li>
+ <li><a href="#Hide Control Settings"> Hide Control Settings</a></li>
</ul>
</li>
- <li><a href="#Restricting Read Access"> Restricting Read Access</a><ul>
- <li><a href="#Deny Viewing by Topic"> Deny Viewing by Topic</a></li>
- <li><a href="#Deny Viewing by Web"> Deny Viewing by Web</a><ul>
- <li><a href="#Obfuscate Webs"> Obfuscate Webs</a></li>
- <li><a href="#Authenticate all Webs and Restri"> Authenticate all Webs and Restrict Selected Webs</a></li>
- <li><a href="#Authenticate and Restricting Sel"> Authenticate and Restricting Selected Webs Only</a></li>
- </ul>
- </li>
- </ul>
- </li>
- <li><a href="#Hiding Control Settings"> Hiding Control Settings</a></li>
- <li><a href="#The _SuperAdminGroup"> The SuperAdminGroup</a></li>
</ul>
</li>
</ul>
_Restricting read and write access to topics and webs, by Users and groups_
-[[TWikiAccessControl]] allows you restrict access to single topics and entire webs, by individual user and by user Groups, in three areas: view; edit & attach; and rename/move/delete. Access control, combined with [[TWikiUserAuthentication]], lets you easily create and manage an extremely flexible, fine-grained privilege system.
+TWiki Access Control allows you restrict access to single topics and entire webs, by individual user and by user Groups. Access control, combined with [[TWikiUserAuthentication]], lets you easily create and manage an extremely flexible, fine-grained privilege system.
+
+**_%T% Tip:_** TWiki:TWiki.TWikiAccessControlSupplement on TWiki.org has additional documentation on access control.
## <a name="An Important Control Considerati"></a> An Important Control Consideration
-Open, freeform editing is the essence of [[WikiCulture]] - what makes TWiki different and often more effective than other collaboration tools. For that reason, it is strongly recommended that decisions to restrict read or write access to a web or a topic are made with care - the more restrictions, the less Wiki in the mix. Experience shows that _unrestricted write access_ works very well because:
+Open, freeform editing is the essence of [[WikiCulture]] - what makes TWiki different and often more effective than other collaboration tools. For that reason, it is strongly recommended that decisions to restrict read or write access to a web or a topic are made with great care - the more restrictions, the less Wiki in the mix. Experience shows that _unrestricted write access_ works very well because:
- **Peer influence** is enough to ensure that only relevant content is posted.
-
-- **Peer editing** - the ability for anyone to rearrange all content on a page - keeps topics focussed.
-
+- **Peer editing** - the ability for anyone to rearrange all content on a page - keeps topics focused.
- In TWiki, content is transparently preserved under **revision control**:
- Edits can be undone by the [[TWikiAdminGroup]] (the default administrators group; see [[#ManagingGroups|Main/WebHome#ManagingGroups]]).
- Users are encouraged to edit and refactor (condense a long topic), since there's a safety net.
- Create broad-based Groups (for more and varied input), and...
- Avoid creating view-only Users (if you can read it, you should be able to contribute to it).
+## <a name="Permissions settings of the webs"></a> Permissions settings of the webs on this TWiki site
+
+**_Note:_** Above table comes from [[SitePermissions]]
+
## <a name="Authentication vs. Access Contro"></a> Authentication vs. Access Control
**Authentication:** Identifies who a user is based on a login procedure. See [[TWikiUserAuthentication]].
A user can create an account in [[TWikiRegistration]]. The following actions are performed:
-- [[WikiName]] and encrypted password are recorded in `.htpasswd` if authentication is enabled.
+- [[WikiName]] and encrypted password are recorded using the password manager if authentication is enabled.
- A confirmation e-mail is sent to the user.
- A user home page with the [[WikiName]] of the user is created in the Main web.
- The user is added to the [[TWikiUsers]] topic.
-Users can be authenticated using Basic Authentication (htaccess) or SSL (secure server). In either case, [[TWikiUserAuthentication]] is required in order to track user identities, and use User and Group access control.
-
The default visitor name is [[TWikiGuest]]. This is the non-authenticated user.
<a name="ManagingGroups"></a>
### <a name="Managing Groups"></a> Managing Groups
-Groups are defined by group topics created in the <code>**Main**</code> web, like the [[TWikiAdminGroup]]. To create a new group:
+Groups are defined by group topics located in the <code>**Main**</code> web, such as the [[TWikiAdminGroup]]. To create a new group, visit [[TWikiGroups]] and enter the name of the new group ending in <code>**Group**</code> into the "new group" form field. This will create a new group topic with two important settings:
-1. <code>**Edit**</code> [[TWikiGroups]] by entering a new topic with a name that ends in <code>**Group**</code>. Example:
- - <code>**SomeGroup**</code>
-2. **Set Preferences** for two Variables in the new group topic:
- - <code>**Set GROUP = < list of Users and/or Groups >**</code>
- - <code>**Set ALLOWTOPICCHANGE = < list of Users and/or Groups >**</code>
- - The GROUP variable is a comma-separated list of Users and/or other Groups. Example:
- - <code>**Set GROUP = Main.SomeUser, Main.OtherUser, Main.SomeGroup**</code>
- - ALLOWTOPICCHANGE defines who is allowed to change the group topic; it is a comma delimited list of Users and Groups. You typically want to restrict that to the members of the group itself, so it should contain the name of the topic. (This prevents Users not in the Group from editing the topic to give themselves or others access. For example, for the TWikiAdminGroup topic write:
- - <code>**Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup**</code>
+- <code>**Set GROUP = < list of Users and/or Groups >**</code>
+- <code>**Set ALLOWTOPICCHANGE = < list of Users and/or Groups >**</code>
-## <a name="Restricting Write Access"></a> Restricting Write Access
+The GROUP setting is a comma-separated list of users and/or other groups. Example:
-You can define who is allowed to make changes to a web or a topic.
+- <code>**Set GROUP = Main.SomeUser, Main.OtherUser, Main.SomeGroup**</code>
-### <a name="Deny Editing by Topic"></a> Deny Editing by Topic
+The ALLOWTOPICCHANGE setting defines who is allowed to change the group topic; it is a comma delimited list of users and groups. You typically want to restrict that to the members of the group itself, so it should contain the name of the topic. This prevents users not in the group from editing the topic to give themselves or others access. For example, for the TWikiAdminGroup topic write:
-Denying editing of a topic also restricts file attachment; both privileges are assigned together.
+- <code>**Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup**</code>
-- Define one or both of these variables in a topic, preferably at the end of the page:
- - <code>**Set DENYTOPICCHANGE = < list of Users and Groups >**</code>
- - <code>**Set ALLOWTOPICCHANGE = < list of Users and Groups >**</code>
+**_%X% Note:_** TWiki has strict formatting rules. Make sure you have three spaces, an asterisk, and an extra space in front of any access control rule.
-- DENYTOPICCHANGE defines Users or Groups that **are not** allowed to make changes to the topic, with a comma-delimited list. Example:
- - <code>**Set DENYTOPICCHANGE = Main.SomeBadBoy, Main.SomeBadGirl, Main.SomeHackerGroup**</code>
+<a name="SuperAdminGroup"></a>
+
+### <a name="The Super Admin Group"></a> The Super Admin Group
-- ALLOWTOPICCHANGE defines Users or Groups that **are** allowed to make changes to the topic. It is a comma delimited list of Users and Groups. Example:
- - <code>**Set ALLOWTOPICCHANGE = Main.SomeGoodGuy, Main.SomeGoodGirl, Main.TWikiAdminGroup**</code>
+By mistyping a user or group name in the settings, it's possible to lock a topic so that no-one can edit it from a browser. To avoid this, add the [[WikiNames]] of registered administrators to the super admin group topic called <code>**TWikiAdminGroup**</code>. The name of this topic is defined by the \{SuperAdminGroup\} configure setting. Example group setting:
-- DENYTOPICCHANGE is evaluated before ALLOWTOPICCHANGE. Access is denied if the authenticated person is in the DENYTOPICCHANGE list, or not in the ALLOWTOPICCHANGE list. Access is granted in case DENYTOPICCHANGE and ALLOWTOPICCHANGE is not defined.
+- <code>**Set GROUP= Main.ElizabethWindsor, Main.TonyBlair**</code>
-### <a name="Deny Editing by Web"></a> Deny Editing by Web
+## <a name="Restricting Access"></a> Restricting Access
-Restricting web-level editing blocks creating new topics, changing topics or attaching files.
+You can define who is allowed to read or write to a web or a topic. Note that some plugins may not respect access permissions.
-- Define one or both of these variable in the [[WebPreferences]] topic:
- - <code>**Set DENYWEBCHANGE = < list of Users and Groups >**</code>
- - <code>**Set ALLOWWEBCHANGE = < list of Users and Groups >**</code>
+- Restricting VIEW blocks viewing and searching of content.
+- Restricting CHANGE blocks creating new topics, changing topics or attaching files.
+- Restricting RENAME controls who is allowed to rename, move or delete a topic.
+ - To rename, move or delete a topic, the user also also needs VIEW and CHANGE permission. They also need CHANGE access to change references in any referring topics (though the rename can proceed without this access), and CHANGE access to the target topic.
+- Restricting MANAGE controls access to certain management functions, such as 'create web'. It must be set in the TWiki web.
-The same rules apply as for restricting topics, with these additions:
+### <a name="Controlling access to a Web"></a> Controlling access to a Web
-- DENYTOPICCHANGE (in topic) overrides DENYWEBCHANGE (in WebPreferences)
-- ALLOWTOPICCHANGE (in topic) overrides ALLOWWEBCHANGE (in WebPreferences)
+You can define restrictions of who is allowed to view a %WIKITOOLNAME% web. You can restrict access to certain webs to selected Users and Groups, by:
-## <a name="Restricting Rename Access"></a> Restricting Rename Access
+- **authenticating all webs and restricting selected webs:** Topic access in all webs is authenticated, and selected webs have restricted access.
+- **authenticating and restricting selected webs only:** Provide unrestricted viewing access to open webs, with authentication and restriction only on selected webs.
-You can define who is allowed to rename, move or delete a topic, or rename a web.
+- You can define these settings in the [[WebPreferences]] topic, preferable towards the end of the topic:
+ - <code>**Set DENYWEBVIEW = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWWEBVIEW = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set DENYWEBCHANGE = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWWEBCHANGE = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set DENYWEBRENAME = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWWEBRENAME = < comma-delimited list of Users and Groups >**</code>
-### <a name="Deny Renaming by Topic"></a> Deny Renaming by Topic
+**Be careful** with empty values for any of these. In older versions of TWiki,
-To allow a user to rename, move or delete a topic, they also need write (editing) permission. They also need write access to change references in referring topics.
+- <code>**Set ALLOWWEBVIEW = **</code>
-- Define one or both of these variables in a topic, preferably at the end of the topic:
- - <code>**Set DENYTOPICRENAME = < list of Users and Groups >**</code>
- - <code>**Set ALLOWTOPICRENAME = < list of Users and Groups >**</code>
+meant the same as not setting it at all. However since TWiki Dakar release, it means _allow noone access_ i.e. prevent anyone from viewing the web. Similarly
-- DENYTOPICCRENAME defines Users or Groups that **are not** allowed to rename the topic. It is a comma delimited list of Users and Groups. Example:
- - <code>**Set DENYTOPICRENAME = Main.SomeBadBoy, Main.SomeBadGirl, Main.SomeHackerGroup**</code>
+- <code>**Set DENYWEBVIEW = **</code>
-- ALLOWTOPICRENAME defines Users or Groups that **are** allowed to rename the topic. It is a comma delimited list of Users and Groups. Example:
- - <code>**Set ALLOWTOPICRENAME = Main.SomeGoodGuy, Main.SomeGoodGirl, Main.TWikiAdminGroup**</code>
+now means _do not deny anyone the right to view this web_. See "How TWiki evaluates ALLOW/DENY settings" below for more on this.
-- DENYTOPICRENAME is evaluated before ALLOWTOPICRENAME. Access is denied if the authenticated person is in the DENYTOPICRENAME list, or not in the ALLOWTOPICRENAME list. Access is granted in case DENYTOPICRENAME and ALLOWTOPICRENAME is not defined.
+### <a name="Controlling access to a Topic"></a> Controlling access to a Topic
-### <a name="Deny Renaming by Web"></a> Deny Renaming by Web
+- You can define these settings in the [[WebPreferences]] topic, preferable towards the end of the topic:
+ - <code>**Set DENYTOPICVIEW = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWTOPICVIEW = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set DENYTOPICCHANGE = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWTOPICCHANGE = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set DENYTOPICRENAME = < comma-delimited list of Users and Groups >**</code>
+ - <code>**Set ALLOWTOPICRENAME = < comma-delimited list of Users and Groups >**</code>
-You can define restrictions of who is allowed to rename a %WIKITOOLNAME% web.
+Remember when opening up access to specific topics within a restricted web that other topics in the web - for example, the [[WebLeftBar]] - may also be accessed when viewing the topics. The message you get when you are denied access should tell you what topic you were not permitted to access.
-- Define one or both of these variable in the [[WebPreferences]] topic:
- - <code>**Set DENYWEBRENAME = < list of Users and Groups >**</code>
- - <code>**Set ALLOWWEBRENAME = < list of Users and Groups >**</code>
+**Be careful** with empty values for any of these. In older versions of TWiki,
-The same rules apply as for topics, with these additions:
+- <code>**Set ALLOWTOPICVIEW = **</code>
-- DENYTOPICRENAME (in topic) overrides DENYWEBRENAME (in WebPreferences)
-- ALLOWTOPICRENAME (in topic) overrides ALLOWWEBRENAME (in WebPreferences)
+meant the same as not setting it at all. However since TWiki Dakar release, it means _allow no-one access_ i.e. prevent anyone from viewing the topic. Similarly
-## <a name="Restricting Read Access"></a> Restricting Read Access
+- <code>**Set DENYTOPICVIEW = **</code>
-You can define who is allowed to see a web.
+now means _do not deny anyone the right to view this topic_. See "How TWiki evaluates ALLOW/DENY settings" below for more on this.
-### <a name="Deny Viewing by Topic"></a> Deny Viewing by Topic
+### <a name="Controlling access to Attachment"></a> Controlling access to Attachments
-%X% Technically it is possible to restrict read access to an individual topic based on <code>**DENYTOPICVIEW**</code> / <code>**ALLOWTOPICVIEW**</code> preferences variables, provided that the view script is authenticated. However this setup is not recommended since all content is searchable within a web - a search will turn up view restricted topics.
+Attachments are referred to directly, and are not normally indirected via TWiki scripts. This means that the above instructions for access control will _not_ apply to attachments. It is possible that someone may inadvertently publicise a URL that they expected to be access-controlled.
-### <a name="Deny Viewing by Web"></a> Deny Viewing by Web
+The easiest way to apply the same access control rules for attachments as apply to topics is to use the Apache `mod_rewrite` module, and configure your webserver to redirect accesses to attachments to the TWiki `viewfile` script. For example,
-You can define restrictions of who is allowed to view a %WIKITOOLNAME% web. You can restrict access to certain webs to selected Users and Groups, by:
+ ScriptAlias /twiki/bin/ /filesystem/path/to/twiki/bin/
+ Alias /twiki/pub/ /filesystem/path/to/twiki/pub/
-- **obfuscating webs:** Insecure but handy method to hide new webs until content is ready for deployment.
-- **authenticating all webs and restricting selected webs:** Topic access in all webs is authenticated, and selected webs have restricted access.
-- **authenticating and restricting selected webs only:** Provide unrestricted viewing access to open webs, with authentication and restriction only on selected webs.
+ RewriteEngine on
+ RewriteRule ^/twiki/pub/TWiki/(.*)$ /twiki/pub/TWiki/$1 [L,PT]
+ RewriteRule ^/twiki/pub/([^\/]+)/([^\/]+)/([^\/]+)$ /twiki/bin/viewfile/$1/$2?filename=$3 [L,PT]
-#### <a name="Obfuscate Webs"></a> Obfuscate Webs
+That way all the controls that apply to the topic also apply to attachments to the topic. Other types of webserver have similar support.
-The idea is to keep a web hidden by not publishing its URL and by preventing the <code>**all webs**</code> search option from accessing obfuscated webs. Do so by enabling the <code>**NOSEARCHALL**</code> variable in [[WebPreferences]]:
+**_Note:_** Images embedded in topics will load much slower since each image will be delivered by the `viewfile` script.
+
+### <a name="How TWiki evaluates ALLOW/DENY s"></a> How TWiki evaluates ALLOW/DENY settings
+
+When deciding whether to grant access, TWiki evaluates the following rules in order (read from the top of the list; if the logic arrives at **PERMITTED** or **DENIED** that applies immediately and no more rules are applied). You need to read the rules bearing in mind that VIEW, CHANGE and RENAME access may be granted/denied separately.
+
+1. If the user is a [[super-user|Main/WebHome#SuperAdminGroup]]
+ - access is **PERMITTED**.
+2. If DENYTOPIC is set to a list of wikinames
+ - people in the list will be **DENIED**.
+3. If DENYTOPIC is set to _empty_ ( i.e. `Set DENYTOPIC =` )
+ - access is **PERMITTED** _i.e_ no-one is denied access to this topic
+4. If ALLOWTOPIC is set
+ 1. people in the list are **PERMITTED**
+ 2. everyone else is **DENIED**
+ - Note that this means that setting ALLOWTOPIC to empty _denies access to everyone except admins_ (unless DENYTOPIC is also set to empty, as described above)
+5. If DENYWEB is set to a list of wikiname
+ - people in the list are **DENIED** access
+6. If ALLOWWEB is set to a list of wikinames
+ - people in the list will be **PERMITTED**
+ - everyone else will be **DENIED**
+ - Note that setting ALLOWWEB to empty _denies access to everyone except admins_
+7. If you got this far, access is **PERMITTED**
+
+## <a name="Access Control quick recipes"></a> Access Control quick recipes
+
+### <a name="Obfuscating Webs"></a> Obfuscating Webs
+
+Another way of hiding webs is to keep them hidden by not publishing the URL and by preventing the <code>**all webs**</code> search option from accessing obfuscated webs. Do so by enabling the <code>**NOSEARCHALL**</code> variable in [[WebPreferences]]:
- <code>**Set NOSEARCHALL = on**</code>
-This setup can be useful to hide a new web until content its ready for deployment.
+This setup can be useful to hide a new web until content its ready for deployment, or to hide view access restricted webs.
-%X% **Obfuscating webs is insecure**, as anyone who knows the URL can access the web.
+**_%X% Note:_** Obfuscating a web without view access control is very insecure, as anyone who knows the URL can access the web.
-#### <a name="Authenticate all Webs and Restri"></a> Authenticate all Webs and Restrict Selected Webs
+### <a name="Authenticate all Webs and Restri"></a> Authenticate all Webs and Restrict Selected Webs
-Use the following setup to authenticate users for topic viewing in all webs and to restrict access to selected webs:
+Use the following setup to authenticate users for topic viewing in all webs and to restrict access to selected webs. Requires [[TWikiUserAuthentication]] to be enabled.
1. **Restrict** view access to selected Users and Groups. Set one or both of these variables in its [[WebPreferences]] topic:
- <code>**Set DENYWEBVIEW = < list of Users and Groups >**</code>
- **_Note:_** `DENYWEBVIEW` is evaluated before `ALLOWWEBVIEW`. Access is denied if the authenticated person is in the `DENYWEBVIEW` list, or not in the `ALLOWWEBVIEW` list. Access is granted in case `DENYWEBVIEW` and `ALLOWWEBVIEW` is not defined.
2. **Hide** the web from an "all webs" search. Enable this restriction with the <code>**NOSEARCHALL**</code> variable in its [[WebPreferences]] topic:
- <code>**Set NOSEARCHALL = on**</code>
-3. **Add** <code>**view**</code> to the list of authenticated scripts in the `.htaccess` file.
-%H% This method only works if the <code>**view**</code> script is authenticated, which means that all Users have to login, even for read-only access. (An open guest account, like [[TWikiGuest]], can get around this, allowing anyone to login to a common account with, for example, view-only access for public webs.) [[TWikiInstallationGuide]] has more on Basic Authentication, using the <code>**.htaccess**</code> file.
+### <a name="Authenticate and Restrict Select"></a> Authenticate and Restrict Selected Webs Only
-#### <a name="Authenticate and Restricting Sel"></a> Authenticate and Restricting Selected Webs Only
-
-Use the following setup to provide unrestricted viewing access to open webs, with authentication only on selected webs:
+Use the following setup to provide unrestricted viewing access to open webs, with authentication only on selected webs. Requires [[TWikiUserAuthentication]] to be enabled.
1. **Restrict** view access to selected Users and Groups. Set one or both of these variables in its [[WebPreferences]] topic:
- <code>**Set DENYWEBVIEW = < list of Users and Groups >**</code>
- **_Note:_** `DENYWEBVIEW` is evaluated before `ALLOWWEBVIEW`. Access is denied if the authenticated person is in the `DENYWEBVIEW` list, or not in the `ALLOWWEBVIEW` list. Access is granted in case `DENYWEBVIEW` and `ALLOWWEBVIEW` is not defined.
2. **Hide** the web from an "all webs" search. Enable this restriction with the <code>**NOSEARCHALL**</code> variable in its [[WebPreferences]] topic:
- <code>**Set NOSEARCHALL = on**</code>
-3. **Enable** the <code>**$doRememberRemoteUser**</code> flag in <code>**lib/TWiki.cfg**</code> as described in [[TWikiUserAuthentication]]. %WIKITOOLNAME% will now remember the IP address of an authenticated user.
-4. **Copy** the <code>**view**</code> script to <code>**viewauth**</code> (or better, create a symbolic link)
-5. **Add** <code>**viewauth**</code> to the list of authenticated scripts in the `.htaccess` file. The <code>**view**</code> script should not be listed in the `.htaccess` file.
-
-When a user accesses a web where you enabled view restriction, %WIKITOOLNAME% will redirect from the `view` script to the `viewauth` script once (this happens only if the user has never edited a topic). Doing so will ask for authentication. The `viewauth` script shows the requested topic if the user could log on and if the user is authorized to see that web.
-
-%X% **Authenticating webs is not very secure**, as there is a way to circumvent the read access restriction. It can be useful in certain situations - for example, to simplify site organization and clutter, by hiding low traffic webs - but is not recommended for securing sensitive content.
-
-## <a name="Hiding Control Settings"></a> Hiding Control Settings
-
-%T% To hide access control settings from normal browser viewing, place them in comment markers.
-
-<style="background-color:#f5f5f5"> `<!--`<br />` * Set DENYTOPICCHANGE = Main.SomeGroup`<br />`-->`
-
-<a name="SuperAdminGroup"></a>
-
-## <a name="The _SuperAdminGroup"></a> The SuperAdminGroup
-By mistyping a user or group name in the ALLOWTOPICCHANGE setting, it's possible to lock a topic so that no-one can edit it from a browser. To avoid this, you can create Web-based **superusers**:
+### <a name="Hide Control Settings"></a> Hide Control Settings
-- Set the <code>**$superAdminGroup**</code> variable in <code>**lib/TWiki.cfg**</code> to the name of a group of Users who are always allowed to edit/view topics.
+**_%T% Tip:_** To hide access control settings from normal browser viewing, place them in HTML comment markers.
-> $superAdminGroup = "TWikiAdminGroup";
+> <code>**<!--**</code>
+>
+> <br />
+>
+> <code>** \* Set DENYTOPICCHANGE = Main.SomeGroup**</code>
+>
+> <br />
+>
+> <code>**-->**</code>
-- The default setting is not to have superusers.
+**_Related Topics:_** [[AdminDocumentationCategory]], [[TWikiUserAuthentication]], TWiki:TWiki.TWikiAccessControlSupplement
--- TWiki:Main.PeterThoeny - 04 May 2002 %BR% -- TWiki:Main.MikeMannix - 12 May 2002
+-- **_Contributors:_** TWiki:Main.PeterThoeny, TWiki:Main.MikeMannix, TWiki:Main.CrawfordCurrie
--- /dev/null
+# <a name="Package <code>TWiki::_AccessControlEx"></a> Package =TWiki::AccessControlException
+
+**extends** `Error`
+
+Exception used raise an access control violation.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::_AccessControlEx"> Package TWiki::AccessControlException</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($mode,$user,$"> ClassMethod new <tt>($mode,$user,$web,$topic,$reason)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>stringify</strong> () -> $"> ObjectMethod stringify <tt>() -> $string</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($mode,$user,$"></a> [[ClassMethod]] **new** `($mode,$user,$web,$topic,$reason)`
+
+- `$mode` - mode of access (view, change etc)
+- `$user` - user object doing the accessing
+- `$web` - web being accessed
+- `$topic` - topic being accessed
+- `$reason` - string reason for failure
+
+All the above fields are accessible from the object in a catch clause in the usual way e.g. `$e->{web}` and `$e->{reason}`
+
+## <a name="ObjectMethod <strong>stringify</strong> () - $s"></a> [[ObjectMethod]] **stringify** `() -> $string`
+
+Generate a summary string
--- /dev/null
+# <a name="Package <code>TWiki::Access="></a> Package =TWiki::Access
+
+A singleton object of this class manages the access control database.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Access="> Package TWiki::Access</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ()"> ClassMethod new <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>permissionsSet</strong> ($"> ObjectMethod permissionsSet <tt>($web) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getReason</strong> () -> $"> ObjectMethod getReason <tt>() -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *check_AccessPermis"> ObjectMethod checkAccessPermission <tt>($action,$user,$text,$topic,$web) -> $boolean</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ()"></a> [[ClassMethod]] **new** `()`
+
+Construct a new singleton object to manage the permissions database.
+
+## <a name="ObjectMethod <strong>permissionsSet</strong> ($"></a> [[ObjectMethod]] **permissionsSet** `($web) -> $boolean`
+
+Are there any security restrictions for this Web (ignoring settings on individual pages).
+
+## <a name="ObjectMethod <strong>getReason</strong> () - $s"></a> [[ObjectMethod]] **getReason** `() -> $string`
+
+Return a string describing the reason why the last access control failure occurred.
+
+## <a name="ObjectMethod <strong>check_AccessPermis"></a> [[ObjectMethod]] \*checkAccessPermission `($action,$user,$text,$topic,$web) -> $boolean`
+
+Check if user is allowed to access topic
+
+- `$action` - 'VIEW', 'CHANGE', 'CREATE', etc.
+- `$user` - User object
+- `$text` - If undef or '': Read '$theWebName.$theTopicName' to check permissions
+- `$topic` - Topic name to check, e.g. 'SomeTopic' \*undef to check web perms only)
+- `$web` - Web, e.g. 'Know'
+
+If the check fails, the reason can be recoveered using getReason.
--- /dev/null
+# <a name="Package <code>TWiki::Attach="></a> Package =TWiki::Attach
+
+A singleton object of this class is used to deal with attachments to topics.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Attach="> Package TWiki::Attach</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session)"> ClassMethod new <tt>($session)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>render_MetaData</strong> ("> ObjectMethod renderMetaData <tt>($web,$topic,$meta,$args) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>formatVersions</strong> ($"> ObjectMethod formatVersions <tt>($web,$topic,$attrs) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *get_AttachmentLink"> ObjectMethod getAttachmentLink <tt>($user,$web,$topic,$name,$meta) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod *migrate_ToFileAtta"> ObjectMethod migrateToFileAttachmentMacro <tt>($meta,$text) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *upgradeFrom1v0beta"> ObjectMethod upgradeFrom1v0beta <tt>($meta) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session)"></a> [[ClassMethod]] **new** `($session)`
+
+Constructor
+
+## <a name="ObjectMethod <strong>render_MetaData</strong> ("></a> [[ObjectMethod]] **renderMetaData** `($web,$topic,$meta,$args) -> $text`
+
+Generate a table of attachments suitable for the bottom of a topic view, using templates for the header, footer and each row.
+
+- `$web` the web
+- `$topic` the topic
+- `$meta` meta-data hash for the topic
+- `$args` hash of attachment arguments
+
+## <a name="ObjectMethod <strong>formatVersions</strong> ($"></a> [[ObjectMethod]] **formatVersions** `($web,$topic,$attrs) -> $text`
+
+Generate a version history table for a single attachment
+
+- `$web` - the web
+- `$topic` - the topic
+- `$attrs` - Hash of meta-data attributes
+
+## <a name="ObjectMethod <strong>get_AttachmentLink"></a> [[ObjectMethod]] \*getAttachmentLink `($user,$web,$topic,$name,$meta) -> $html`
+
+- `$user` - User doing the reading
+- `$web` - Name of the web
+- `$topic` - Name of the topic
+- `$name` - Name of the attachment
+- `$meta` - Meta object that contains the meta info
+
+Build a link to the attachment, suitable for insertion in the topic.
+
+## <a name="ObjectMethod <strong>migrate_ToFileAtta"></a> [[ObjectMethod]] \*migrateToFileAttachmentMacro `($meta,$text) -> $text`
+
+Migrate old HTML format
+
+## <a name="ObjectMethod <strong>upgradeFrom1v0beta"></a> [[ObjectMethod]] \*upgradeFrom1v0beta `($meta) -> $text`
+
+CODE\_SMELL: Is this really necessary? upgradeFrom1v0beta?
--- /dev/null
+# <a name="Package <code>TWiki::Attrs="></a> Package =TWiki::Attrs
+
+Class of attribute sets, designed for parsing and storing attribute values from a TWiki tag e.g. `%TAG{fred='bad' "sad" joe="mad"}%`
+
+An attribute set is a map containing an entry for each parameter. The default parameter (unnamed quoted string) is named `_DEFAULT` in the map.
+
+Attributes declared later in the string will override those of the same name defined earlier. The one exception to this is the \_DEFAULT key, where the _first_ instance of a setting is always taken.
+
+As well as standard TWiki syntax (parameter values double-quoted) it also parses single-quoted values, unquoted spaceless values, spaces around the =, and commas as well as spaces separating values, though none of these alternatives is advertised in documentation and the extended syntax can be turned off by passing the 'strict' parameter to `new`.
+
+This class replaces the old TWiki::extractNameValuePair and TWiki::extractParameters.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Attrs="> Package TWiki::Attrs</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($string,$frie"> ClassMethod new <tt>($string,$friendly)=>\%attrsObjectRef</tt></a></li>
+ <li><a href="#ObjectMethod <strong>isEmpty</strong> () -> boo"> ObjectMethod isEmpty <tt>() -> boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>remove</strong> ($key) ->"> ObjectMethod remove <tt>($key) -> $value</tt></a></li>
+ <li><a href="#ObjectMethod <strong>stringify</strong> () -> $"> ObjectMethod stringify <tt>() -> $string</tt></a></li>
+ <li><a href="#StaticMethod <strong>extractValue</strong> () -"> StaticMethod extractValue <tt>() -> $string</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get</strong> ($key) -> $va"> ObjectMethod get <tt>($key) -> $value</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($string,$frie"></a> [[ClassMethod]] **new** `($string,$friendly)=>\%attrsObjectRef`
+
+- `$string` - String containing attribute specification
+- `$friendly` - if true, the parse will be according to the extended syntax pioneered by the original Contrib::Attrs. Otherwise it will be strict as per traditional TWiki syntax.
+
+Parse a standard attribute string containing name=value pairs and create a new attributes object. The value may be a word or a quoted string. If there is an error during parsing, the parse will complete but $attrs->\{\_ERROR\} will be set in the new object. $attrs->\{\_RAW\} will always contain the full unprocessed $string.
+
+Extended syntax example:
+
+ my $attrs = new TWiki::Attrs('the="time \\"has come", "the walrus" said to=speak of=\'many \\'things\', 1);
+
+In this example:
+
+- `the` will be `time "has come`
+- `__default__` will be `the walrus`
+- `said` will be `on`
+- `to` will be `speak`
+- `of` will be `many 'things`
+
+Only " and ' are escaped.
+
+Traditional syntax is as old TWiki, except that the whole string is parsed (the old parser would only recognise default values in position 1, nowhere else)
+
+## <a name="ObjectMethod <strong>isEmpty</strong> () - bool"></a> [[ObjectMethod]] **isEmpty** `() -> boolean`
+
+Return false if attribute set is not empty.
+
+## <a name="ObjectMethod <strong>remove</strong> ($key) - $"></a> [[ObjectMethod]] **remove** `($key) -> $value`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> $key </td>
+ <td> Attribute to remove </td>
+ </tr>
+</table>
+
+Remove an attr value from the map, return old value. After a call to `remove` the attribute is no longer defined.
+
+## <a name="ObjectMethod <strong>stringify</strong> () - $s"></a> [[ObjectMethod]] **stringify** `() -> $string`
+
+Generate a printed form for the map, using standard attribute syntax, with only the single-quote extension syntax observed (no \{\} brackets, though).
+
+## <a name="StaticMethod <strong>extractValue</strong> () -"></a> [[StaticMethod]] **extractValue** `() -> $string`
+
+Legacy support, formerly known as extractNameValuePair. This static method uses context information to determine how a value string is to be parsed. For example, if you have an attribute string like this:
+
+"abc def="ghi" jkl" def="qqq"
+
+then call extractValue( "def" ), it will return "ghi".
+
+## <a name="ObjectMethod <strong>get</strong> ($key) - $val"></a> [[ObjectMethod]] **get** `($key) -> $value`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> $key </td>
+ <td> Attribute to get </td>
+ </tr>
+</table>
+
+Get an attr value from the map.
+
+Synonymous with $attrs->\{$key\}. Retained mainly for compatibility with the old [[AttrsContrib]].
--- /dev/null
+# <a name="Package <code>TWiki::Compatibility="></a> Package =TWiki::Compatibility
+
+Support for compatibility with old TWiki versions. Packaged separately because 99.999999% of the time this won't be needed.
+
+=end
+
+sub \_upgradeCategoryItem \{ my ( $catitems, $ctext ) = @\_; my $catname = ''; my $scatname = ''; my $catmodifier = ''; my $catvalue = ''; my @cmd = split( /\\|/, $catitems ); my $src = ''; my $len = @cmd; if( $len < '2' ) \{ # FIXME return ( $catname, $catmodifier, $catvalue ) \} my $svalue = '';
+
+my $i; my $itemsPerLine;
+
+# check for [[CategoryName]]=CategoryValue parameter my $paramCmd = ''; my $cvalue = ''; # was$query->param( $cmd[1] ); if( $cvalue ) \{ $src = "$cvalue"; \} elsif( $ctext ) \{ foreach( split( /\\r?\\n/, $ctext ) ) \{ if( /$cmd[1]/ ) \{ $src = $\_; last; \} \} \}
+
+if( $cmd[0] eq 'select' || $cmd[0] eq 'radio') \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; my $size = $cmd[2]; for( $i = 3; $i < $len; $i++ ) \{ my $value = $cmd[$i]; $svalue = $value; if( $src =~ /$value/ ) \{ $catvalue = $svalue; \} \}
+
+\} elsif( $cmd[0] eq 'checkbox' ) \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; if( $cmd[2] eq 'true' || $cmd[2] eq '1' ) \{ $i = $len - 4; $catmodifier = 1; \} $itemsPerLine = $cmd[3]; for( $i = 4; $i < $len; $i++ ) \{ my $value = $cmd[$i]; $svalue = $value; # [[I18N]]: FIXME - need to look at this, but since it's upgrading # old forms that probably didn't use [[I18N]], it's not a high # priority. if( $src =~ /$value[^a-zA-Z0-9\\.]/ ) \{ $catvalue .= ", " if( $catvalue ); $catvalue .= $svalue; \} \}
+
+\} elsif( $cmd[0] eq 'text' ) \{ $catname = $cmd[1]; $scatname = $catname; #$scatname =~ s/[^a-zA-Z0-9]//g; $src =~ /(.\*)/; if( $1 ) \{ $src = $1; \} else \{ $src = ''; \} $catvalue = $src; \}
+
+return ( $catname, $catmodifier, $catvalue ) \}
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Compatibility="> Package TWiki::Compatibility</a><ul>
+ <li><a href="#StaticMethod *upgrade_CategoryTa"> StaticMethod upgradeCategoryTable <tt>($session,$web,$topic,$meta,$text) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>upgrade_CategoryTa"></a> [[StaticMethod]] \*upgradeCategoryTable `($session,$web,$topic,$meta,$text) -> $text`
+
+Upgrade old style category table
+
+May throw TWiki::OopsException
# <a name="TWiki Contributor"></a> TWiki Contributor
-A TWiki contributor is a person devoting his/her time to contribute on the development of the Open Source project TWiki, hosted at <http://TWiki.org/> . It is defined as a person who:
+On a personal note, I would like to take this opportunity to express my sincere appreciation and thanks to all who contributed ideas, code, fixes and documentation and anything else to the Open Source TWiki project. -- TWiki:Main.PeterThoeny
-- has contributed code that was accepted into the TWiki distribution, or
-- has considerably contributed to the TWiki documentation.
+**_Note:_** Please contact us at <http://TWiki.org> if you contributed to TWiki and your name is not on this list!
-I would like to take this opportunity to express my sincere appreciation and thanks to all who contributed ideas, code, fixes and documentation to the TWiki project :-)
+**_Disclaimer:_** TWiki gets installed on many public web sites. The TWiki contributors are not affiliated in any way with those sites.
-## <a name="List of Contributors"></a> List of Contributors
-
-<table border="1" cellpadding="0" cellspacing="0">
- <tr>
- <th bgcolor="#99CCCC"><strong> Person </strong></th>
- <th bgcolor="#99CCCC"><strong> Home Page </strong></th>
- <th bgcolor="#99CCCC"><strong> Comment </strong></th>
- </tr>
- <tr>
- <td> Adam Theo </td>
- <td> TWiki:Main/AdamTheo </td>
- <td> </td>
- </tr>
- <tr>
- <td> Adrian Lynch </td>
- <td> TWiki:Main/AdrianLynch </td>
- <td> </td>
- </tr>
- <tr>
- <td> Al Williams </td>
- <td> TWiki:Main/AlWilliams </td>
- <td> </td>
- </tr>
- <tr>
- <td> Andrea Sterbini </td>
- <td> TWiki:Main/AndreaSterbini </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Antonio Bellezza </td>
- <td> TWiki:Main/AntonioBellezza </td>
- <td> </td>
- </tr>
- <tr>
- <td> Arthur Clemens </td>
- <td> TWiki:Main/ArthurClemens </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Carl Patten </td>
- <td> TWiki:Main/CarlPatten </td>
- <td> </td>
- </tr>
- <tr>
- <td> Caylan Larson </td>
- <td> TWiki:Main/CaylanLarson </td>
- <td> </td>
- </tr>
- <tr>
- <td> Christophe Vermeulen </td>
- <td> TWiki:Main/ChristopheVermeulen </td>
- <td> </td>
- </tr>
- <tr>
- <td> Claus Brunzema </td>
- <td> TWiki:Main/ClausBrunzema </td>
- <td> </td>
- </tr>
- <tr>
- <td> Colas Nahaboo </td>
- <td> TWiki:Main/ColasNahaboo </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Corey Fruitman </td>
- <td> TWiki:Main/CoreyFruitman </td>
- <td> </td>
- </tr>
- <tr>
- <td> Crawford Currie </td>
- <td> TWiki:Main/CrawfordCurrie </td>
- <td> </td>
- </tr>
- <tr>
- <td> Cris Bailiff </td>
- <td> TWiki:Main/CrisBailiff </td>
- <td> </td>
- </tr>
- <tr>
- <td> Dan Boitnott </td>
- <td> TWiki:Main/DanBoitnott </td>
- <td> </td>
- </tr>
- <tr>
- <td> David Warman </td>
- <td> TWiki:Main/DavidWarman </td>
- <td> </td>
- </tr>
- <tr>
- <td> Frank Smith </td>
- <td> TWiki:Main/FrankSmith </td>
- <td> </td>
- </tr>
- <tr>
- <td> Grant Bowman </td>
- <td> TWiki:Main/GrantBow </td>
- <td> </td>
- </tr>
- <tr>
- <td> Harold Gottschalk </td>
- <td> TWiki:Main/HaroldGottschalk </td>
- <td> </td>
- </tr>
- <tr>
- <td> John Talintyre </td>
- <td> TWiki:Main/JohnTalintyre </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Kevin Kinnell </td>
- <td> TWiki:Main/KevinKinnell </td>
- <td> TWiki:Codev/CoreTeamHallOfFame member </td>
- </tr>
- <tr>
- <td> Kim Covil </td>
- <td> TWiki:Main/KimCovil </td>
- <td> </td>
- </tr>
- <tr>
- <td> Klaus Wriessnegger </td>
- <td> TWiki:Main/KlausWriessnegger </td>
- <td> </td>
- </tr>
- <tr>
- <td> Manpreet Singh </td>
- <td> TWiki:Main/ManpreetSingh </td>
- <td> </td>
- </tr>
- <tr>
- <td> Martin Cleaver </td>
- <td> TWiki:Main/MartinCleaver </td>
- <td> </td>
- </tr>
- <tr>
- <td> Martin Gregory </td>
- <td> TWiki:Main/MartinGregory </td>
- <td> </td>
- </tr>
- <tr>
- <td> Martin Raabe </td>
- <td> TWiki:Main/MartinRaabe </td>
- <td> </td>
- </tr>
- <tr>
- <td> MS </td>
- <td> TWiki:Main/MichaelSparks </td>
- <td> </td>
- </tr>
- <tr>
- <td> Mike Mannix </td>
- <td> TWiki:Main/MikeMannix </td>
- <td> TWiki:Codev/CoreTeamHallOfFame member </td>
- </tr>
- <tr>
- <td> Neil McCurdy </td>
- <td> TWiki:Main/NeilMcCurdy </td>
- <td> </td>
- </tr>
- <tr>
- <td> Nicholas Lee </td>
- <td> TWiki:Main/NicholasLee </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Niels Koldso </td>
- <td> TWiki:Main/NielsKoldso </td>
- <td> </td>
- </tr>
- <tr>
- <td> Pauline Cheung </td>
- <td> TWiki:Main/PaulineCheung </td>
- <td> </td>
- </tr>
- <tr>
- <td> Pavel Goran </td>
- <td> TWiki:Main/PavelGoran </td>
- <td> </td>
- </tr>
- <tr>
- <td> Peter Fokkinga </td>
- <td> TWiki:Main/PeterFokkinga </td>
- <td> </td>
- </tr>
- <tr>
- <td> Peter Thoeny </td>
- <td> TWiki:Main/PeterThoeny </td>
- <td> TWiki:Codev/CoreTeam member and author of TWiki </td>
- </tr>
- <tr>
- <td> Randy Kramer </td>
- <td> TWiki:Main/RandyKramer </td>
- <td> </td>
- </tr>
- <tr>
- <td> Richard Donkin </td>
- <td> TWiki:Main/RichardDonkin </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Raymond Lutz </td>
- <td> TWiki:Main/RaymondLutz </td>
- <td> </td>
- </tr>
- <tr>
- <td> Ryan Freebern </td>
- <td> TWiki:Main/RyanFreebern </td>
- <td> </td>
- </tr>
- <tr>
- <td> Sam Hasler </td>
- <td> TWiki:Main/SamHasler </td>
- <td> </td>
- </tr>
- <tr>
- <td> Stanley Knutson </td>
- <td> TWiki:Main/StanleyKnutson </td>
- <td> </td>
- </tr>
- <tr>
- <td> Sue Blake </td>
- <td> TWiki:Main/SueBlake </td>
- <td> </td>
- </tr>
- <tr>
- <td> Sven Dowideit </td>
- <td> TWiki:Main/SvenDowideit </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
- <tr>
- <td> Ted Pavlic </td>
- <td> TWiki:Main/TedPavlic </td>
- <td> </td>
- </tr>
- <tr>
- <td> Thomas Weigert </td>
- <td> TWiki:Main/ThomasWeigert </td>
- <td> </td>
- </tr>
- <tr>
- <td> Vito Miliano </td>
- <td> TWiki:Main/VitoMiliano </td>
- <td> </td>
- </tr>
- <tr>
- <td> Walter Mundt </td>
- <td> TWiki:Main/WalterMundt </td>
- <td> TWiki:Codev/CoreTeam member </td>
- </tr>
-</table>
-
-**_Note:_** Please contact a TWiki:Codev/CoreTeam member in case you contributed to TWiki and your name is not on this list!
-
-**_Disclaimer:_** TWiki gets installed on thousands of public web sites. The contributors are not affiliated in any way with those sites.
-
-## <a name="List of Contributions"></a> List of Contributions
-
-- See [[TWikiHistory]]
-- See also List of Production Releases in TWiki:Codev/TWikiReleases
-
--- TWiki:Main/PeterThoeny - 09 May 2004
+**_Releated Topics:_** [[TWikiHistory]], and the List of Production Releases in TWiki:Codev/TWikiReleases
<div>
<ul>
- <li><a href="#Appendix B: TWiki CSS"> Appendix B: TWiki CSS</a><ul>
+ <li><a href="#Appendix C: TWiki CSS"> Appendix C: TWiki CSS</a><ul>
<li><a href="#Who should read this document?"> Who should read this document?</a></li>
- <li><a href="#Naming conventions"> Naming conventions</a></li>
- <li><a href="#CSS classes"> CSS classes</a><ul>
- <li><a href="#Classes from core code"> Classes from core code</a></li>
- <li><a href="#Classes from Plugins"> Classes from Plugins</a></li>
+ <li><a href="#Naming conventions"> Naming conventions</a><ul>
+ <li><a href="#TWiki styles in core code"> TWiki styles in core code</a></li>
+ <li><a href="#TWiki Styles in Plugins"> TWiki Styles in Plugins</a></li>
+ <li><a href="#TWiki Styles in Templates"> TWiki Styles in Templates</a></li>
+ <li><a href="#TWiki Styles in topics"> TWiki Styles in topics</a></li>
</ul>
</li>
- <li><a href="#Going further"> Going further</a></li>
+ <li><a href="#Tips"> Tips</a></li>
</ul>
</li>
</ul>
</div>
-# <a name="Appendix B: TWiki CSS"></a> Appendix B: TWiki CSS
+# <a name="Appendix C: TWiki CSS"></a> Appendix C: TWiki CSS
-_Listing of CSS class names emitted from TWiki core code and standard plugins, for the 01-Aug-2004 TWiki production release._
+_Listing of CSS class names emitted from TWiki core code and standard plugins, for the Dakar release._
## <a name="Who should read this document?"></a> Who should read this document?
-More or less all html elements generated by TWiki core code now have Cascading Style Sheet (CSS) tags. **_Skin builders_** and others who want to change the appearance of the default TWiki installation or any of the skins can use this document to see what styles can be created for these html elements.
+Most html elements generated by TWiki core code now have Cascading Style Sheet (CSS) tags. **_Skin builders_** and others who want to change the appearance of the default TWiki installation or any of the skins can use this document to see what styles can be created for these html elements.
## <a name="Naming conventions"></a> Naming conventions
-1. All TWiki class names have the prefix `twiki`. So: twikiEditPage, twikiTopicAction, etcetera. Remember that CSS class names are case sensitive - TWiki CSS uses lowercase `tw`.
-2. TWiki uses class names only (.twikiViewPage) and no id names (#twikiViewPage), to allow multiple class names. Class names are written using the dot prefix.
+1. All TWiki class names have the prefix `twiki`. So: twikiAlert, twikiToc, etcetera. Remember that CSS class names are case sensitive - TWiki CSS uses lowercase `tw`.
+2. TWiki uses class names only (.twikiDiffTable) and no id names (#twikiDiffTable), to allow multiple class names. Class names are written using the dot prefix.
3. If you define your own CSS classes, it is preferable that you do not use the `twiki` prefix to prevent undesired overriding effects.
-## <a name="CSS classes"></a> CSS classes
+A wide range of standard styles are used in the TWiki core code and topics, and more are used in plugins. The following is an exhaustive list of all styles defined by the Pattern skin. For the most part, the names are the only documentation of the purpose of the style. For more information on how these styles are used, read the code (sorry!)
-### <a name="Classes from core code"></a> Classes from core code
+### <a name="TWiki styles in core code"></a> TWiki styles in core code
<table border="1" cellpadding="0" cellspacing="0">
<tr>
+ <td> .twikiAlert </td>
+ <td> Client.pm, Form.pm, Statistics.pm </td>
+ </tr>
+ <tr>
+ <td> .twikiFirstCol </td>
+ <td> Render.pm </td>
+ </tr>
+ <tr>
+ <td> .twikiForm </td>
+ <td> Render.pm </td>
+ </tr>
+ <tr>
<td> .twikiNew </td>
+ <td> Changes.pm, Search.pm </td>
+ </tr>
+ <tr>
+ <td> .twikiHelp </td>
<td> Changes.pm </td>
</tr>
<tr>
- <td> .twikiChangeFormButtonHolder </td>
- <td> Edit.pm </td>
+ <td> .twikiTopRow </td>
+ <td> Manage.pm </td>
</tr>
<tr>
- <td> .twikiChangeFormButton </td>
- <td> Form.pm </td>
+ <td> .twikiSummary </td>
+ <td> Manage.pm </td>
</tr>
<tr>
- <td> .twikiForm </td>
- <td> Form.pm </td>
+ <td> .twikiGrayText </td>
+ <td> Manage.pm </td>
</tr>
<tr>
- <td> .twikiEditFormTextField </td>
- <td> Form.pm </td>
+ <td> .twikiCheckBox </td>
+ <td> Manage.pm </td>
</tr>
<tr>
- <td> .twikiEditFormLabelField </td>
- <td> Form.pm </td>
+ <td> .twikiLink </td>
+ <td> Render.pm </td>
</tr>
<tr>
- <td> .twikiEditFormTextAreaField </td>
- <td> Form.pm </td>
+ <td> .twikiNewLink </td>
+ <td> Render.pm </td>
</tr>
<tr>
- <td> .twikiEditFormCheckboxButton </td>
+ <td> .twikiAnchorLink </td>
+ <td> Render.pm </td>
+ </tr>
+ <tr>
+ <td> .twikiEmulatedLink </td>
+ <td> Preview.pm </td>
+ </tr>
+ <tr>
+ <td> .twikiWebIndent </td>
+ <td> TWiki.pm </td>
+ </tr>
+</table>
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> .twikiEditFormTextField </td>
<td> Form.pm </td>
</tr>
<tr>
- <td> .twikiEditFormCheckboxButton </td>
+ <td> .twikiEditFormLabelField </td>
<td> Form.pm </td>
</tr>
<tr>
- <td> .twikiEditFormCheckboxField </td>
+ <td> .twikiEditFormTextAreaField </td>
<td> Form.pm </td>
</tr>
<tr>
- <td> .twikiEditFormRadioField </td>
+ <td> .twikiEditFormCheckboxButton </td>
<td> Form.pm </td>
</tr>
<tr>
- <td> .twikiEditFormError </td>
+ <td> .twikiEditFormCheckboxField </td>
<td> Form.pm </td>
</tr>
<tr>
<td> Form.pm </td>
</tr>
<tr>
- <td> .twikiCheckbox </td>
+ <td> .twikiEditFormRadioField </td>
<td> Form.pm </td>
</tr>
<tr>
<td> .twikiEditFormError </td>
<td> Form.pm </td>
</tr>
+</table>
+
+<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td> .twikiDiffTable </td>
<td> RDiff.pm </td>
<td> RDiff.pm </td>
</tr>
<tr>
+ <td> .twikiDiffUnchangedTextContents </td>
+ <td> RDiff.pm </td>
+ </tr>
+ <tr>
<td> .twikiDiffLineNumberHeader </td>
<td> RDiff.pm </td>
</tr>
+</table>
+
+<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td> .twikiForm </td>
- <td> Render.pm </td>
+ <td> .twikiToc </td>
+ <td> TWiki.pm </td>
</tr>
<tr>
- <td> .twikiAnchorLink </td>
- <td> Render.pm </td>
+ <td> .twikiTocTitle </td>
+ <td> TWiki.pm </td>
</tr>
+</table>
+
+### <a name="TWiki Styles in Plugins"></a> TWiki Styles in Plugins
+
+<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td> .twikiLink </td>
- <td> Render.pm </td>
+ <td> .twikiTable </td>
+ <td>[[Main/TablePlugin]]</td>
</tr>
<tr>
- <td> .twikiNewLink </td>
- <td> Render.pm </td>
+ <td> .twikiSortedAscendingCol </td>
+ <td>[[Main/TablePlugin]]</td>
</tr>
<tr>
- <td> .twikiNew </td>
- <td> Search.pm </td>
+ <td> .twikiSortedDescendingCol </td>
+ <td>[[Main/TablePlugin]]</td>
</tr>
<tr>
- <td> .twikiAlert </td>
- <td> Search.pm </td>
+ <td> .twikiFirstCol </td>
+ <td>[[Main/TablePlugin]]</td>
</tr>
+</table>
+
+### <a name="TWiki Styles in Templates"></a> TWiki Styles in Templates
+
+<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td> .twikiAlert </td>
- <td> Statistics.pm </td>
+ <td> .twikiFormTable </td>
+ <td> formtables.tmpl, form.tmpl </td>
</tr>
<tr>
- <td> .twikiAlert </td>
- <td> TWiki.pm </td>
+ <td> .twikiFormTableHRow </td>
+ <td> formtables.tmpl, form.tmpl </td>
</tr>
<tr>
- <td> .twikiToc </td>
- <td> TWiki.pm </td>
+ <td> .twikiFormTableRow </td>
+ <td> formtables.tmpl </td>
</tr>
<tr>
- <td> .twikiTocTitle </td>
- <td> TWiki.pm </td>
+ <td> .twikiAttachments </td>
+ <td> attachtables.tmpl </td>
</tr>
-</table>
-
-### <a name="Classes from Plugins"></a> Classes from Plugins
-
-**[[TablePlugin]]**
-
-<table border="1" cellpadding="0" cellspacing="0">
<tr>
- <td> .twikiSortedAscendingCol </td>
- <td> !TablePlugin.pm </td>
+ <td> .twikiEditForm </td>
+ <td> form.tmpl </td>
</tr>
<tr>
- <td> .twikiSortedDescendingCol </td>
- <td> !TablePlugin.pm </td>
+ <td> .twikiSubmit </td>
+ <td> </td>
</tr>
<tr>
- <td> .twikiFirstCol </td>
- <td> !TablePlugin.pm </td>
+ <td> .twikiButton </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiLeft </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiRight </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiClear </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiHidden </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiSmall </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiBottomRow </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiSRAuthor </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiSRRev </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiPageForm </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiSeparator </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiAccessKey </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> .twikiLinkLabel </td>
+ <td> </td>
</tr>
</table>
-## <a name="Going further"></a> Going further
+### <a name="TWiki Styles in topics"></a> TWiki Styles in topics
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> .twikiBroadcastMessage </td>
+ <td>[[TWiki/TWikiPreferences]]</td>
+ </tr>
+</table>
-PatternSkin makes fully use of CSS in its templates. Read the [[PatternSkin]] topic and [[PatternSkinCss]] to learn more about adjusting PatternSkin, or creating your own CSS-based skin.
+## <a name="Tips"></a> Tips
-See also: [[DragonSkin]].
+PatternSkin makes extensive use of CSS in its templates. Read the [[PatternSkin]] topic and [[PatternSkinCss]] to learn more about creating your own CSS-based skin.
Practical introduction to CSS: <http://www.w3.org/Style/LieBos2e/enter/>
--- TWiki:Main.ArthurClemens - 08 Aug 2004
+**_Related Topics:_** [[TWikiSkins]], [[PatternSkin]], [[DeveloperDocumentationCategory]], [[AdminDocumentationCategory]]
-# <a name="TWiki Documentation Graphics"></a> TWiki Documentation Graphics
+# <a name="TWiki Documentation Graphics and"></a><a name=" TWiki Documentation Graphics an"></a> TWiki Documentation Graphics and Filetype icons
-This is one way to create a library of common icons, accessible through user-defined [[TWikiVariables]] set in [[WebPreferences]], or in [[TWikiPreferences]] for site-wide use.
+This is the TWiki icon library. The graphics can be used in topics and by web applications.
-There are other approaches as well:
+<div><span>Contents:</span><ul>
+ <li><a href="#Usage"> Usage</a></li>
+ <li><a href="#Graphics"> Graphics</a><ul>
+ <li><a href="#Document icons"> <img align="top" alt="note" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/note.gif" width="16" /> Document icons</a></li>
+ <li><a href="#Topic, file, folder icons"> <img align="top" alt="viewtopic" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/viewtopic.gif" width="16" /> Topic, <img align="top" alt="attachfile" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/attachfile.gif" width="16" /> file, <img align="top" alt="folder" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/folder.gif" width="16" /> folder icons</a></li>
+ <li><a href="#Person, group, access icons"> <img align="top" alt="person" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/person.gif" width="16" /> Person, <img align="top" alt="group" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/group.gif" width="16" /> group, <img align="top" alt="lock" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/lock.gif" width="16" /> access icons</a></li>
+ <li><a href="#Changes, notification icons"> <img align="top" alt="changes" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/changes.gif" width="16" /> Changes, <img align="top" alt="notify" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/notify.gif" width="16" /> notification icons</a></li>
+ <li><a href="#Status, flag, LED icons"> <img align="top" alt="choice-yes" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/choice-yes.gif" width="16" /> Status, <img align="top" alt="flag" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/flag.gif" width="16" /> flag, <img align="top" alt="led-box-red" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/led-box-red.gif" width="16" /> LED icons</a></li>
+ <li><a href="#Navigation icons"> <img align="top" alt="home" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/home.gif" width="16" /> Navigation icons</a></li>
+ <li><a href="#Block graphics"> <img align="top" alt="line_ur" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/line_ur.gif" width="16" /> Block graphics</a></li>
+ <li><a href="#Filetype icons"> <img align="top" alt="gif" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/gif.gif" width="16" /> Filetype icons</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
-- In any topic, write `%PUBURL%/%TWIKIWEB%/%TOPIC%/help.gif` to show the ![help.gif](http://www.dementia.org/twiki//view/TWiki/%TOPIC%/help.gif) icon
-- The TWiki:Plugins/TopicVarsPlugin lets you set variables in any topic, not just in [[WebPreferences]], for use in the same topic
-- The TWiki:Plugins/SmiliesPlugin, using a different short hand than `%VARIABLES%`, may be worth checking out for extended use
-- **_Related:_** TWiki's [[FileAttachments]] show their own icons for many different file types. As documented in [[TWikiVariables]], write `%ICON{"pdf"}%` to show the <img src="http://www.dementia.org/twiki//view/Main/WebHome/pdf.gif" width="16" height="16" alt="pdf" /> icon
+## <a name="Usage"></a> Usage
-In this example, %TOPIC% - this topic - acts as the icon library. Graphics are uploaded and displayed. Then, the paths are set in [[TWiki.TWikiPreferences#DocGraphics|TWiki/TWikiPreferences#DocGraphics]] for site-wide access. You can also create individual library pages in each web. And you don't have to restrict yourself to graphics: Preferences Variables can include text and links to any type of file.
+There are several ways to put an image in a topic.
-<table border="1" cellpadding="0" cellspacing="0">
+- **Shorthand notation:** `%ICON{help}%` results in: <img src="http://www.dementia.org/twiki//view/Main/WebHome/help.gif" width="16" height="16" alt="help" />
+ - Note that `ICON{}` assumes an image of 16 x 16 pixels
+- **Really shorthand notation:** in [[TWikiPreferences]] set a variable to an ICON, for example:%BR% ` * Set H = %ICON{help}%` %BR% Now you can use the icon by writing `%H%`.
+- There are other approaches as well:
+ - In any topic, write `%PUBURL%/%TWIKIWEB%/TWikiDocGraphics/help.gif` to show the ![help.gif](http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/help.gif) icon. %BR%
+ - You are not restricted to use the TWikiDocGraphics topic - in a similar way you can show attached images by replacing `TWikiDocGraphics` with the topic name.
+ - The TWiki:Plugins.SmiliesPlugin, using a different short hand than `%VARIABLES%`, may be worth checking out for extended use
+- To create an image with a link, write: `[[WebHome][%ICON{home}%]]` to get: [[Main/WebHome]]
+- To get the full URL of the icon, use [[ICONURL|Main/TWikiVariables#VarICONURL]]: `%ICONURL{"toggleopen"}%` gets you: `http://www.dementia.org/twiki//view/Main/WebHome/toggleopen.gif` (if you paste that in a topic you will get: ![toggleopen.gif](http://www.dementia.org/twiki//view/Main/WebHome/toggleopen.gif))
+- **_Note:_** Most images have 16x16 pixels. For those images you can use the `%ICON{}%` syntax. Use an HTML img tag with `%ICONURL{}%` for image with other sizes.
+
+**_Related Topics:_** [[TWikiSkins]], [[DeveloperDocumentationCategory]], [[AdminDocumentationCategory]]
+
+**_Contributors:_** The icons on this page were originally designed by TWiki:Main.PeterThoeny. All except led-color icons, dot graph and line graph images were then recreated by TWiki:Main.ArthurClemens.
+
+## <a name="Graphics"></a> Graphics
+
+### <a name="Document icons"></a><a name=" Document icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/note.gif" width="16" height="16" alt="note" /> Document icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Speech bubble" src="http://www.dementia.org/twiki//view/bubble.gif" title="Speech bubble" /></td>
+ <td bgcolor="#ffffff" style=""><code>bubble.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Speech bubble </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{bubble}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Days / Calendar" src="http://www.dementia.org/twiki//view/days.gif" title="Days / Calendar" /></td>
+ <td bgcolor="#ffffff" style=""><code>days.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Days, Calendar </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{days}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Download" src="http://www.dementia.org/twiki//view/download.gif" title="Download" /></td>
+ <td bgcolor="#ffffff" style=""><code>download.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Download </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{download}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Filter" src="http://www.dementia.org/twiki//view/filter.gif" title="Filter" /></td>
+ <td bgcolor="#ffffff" style=""><code>filter.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Filter </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{filter}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Gear" src="http://www.dementia.org/twiki//view/gear.gif" title="Gear" /></td>
+ <td bgcolor="#ffffff" style=""><code>gear.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Gear </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{gear}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Globe" src="http://www.dementia.org/twiki//view/globe.gif" title="Globe" /></td>
+ <td bgcolor="#ffffff" style=""><code>globe.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Globe </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{globe}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Pointing hand" src="http://www.dementia.org/twiki//view/hand.gif" title="Pointing hand" /></td>
+ <td bgcolor="#ffffff" style=""><code>hand.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Pointing hand </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{hand}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Help" src="http://www.dementia.org/twiki//view/help.gif" title="Help" /></td>
+ <td bgcolor="#ffffff" style=""><code>help.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Help </td>
+ <td bgcolor="#ffffff" style=""><code>%H%</code>, <code>%ICON{help}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Information" src="http://www.dementia.org/twiki//view/info.gif" title="Information" /></td>
+ <td bgcolor="#ffffff" style=""><code>info.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Info </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{info}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Hour glass (clock)" src="http://www.dementia.org/twiki//view/hourglass.gif" title="Hour glass (clock)" /></td>
+ <td bgcolor="#ffffff" style=""><code>hourglass.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Hour glass (clock) </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{hourglass}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Read more" src="http://www.dementia.org/twiki//view/more.gif" title="Read more" /></td>
+ <td bgcolor="#ffffff" style=""><code>more.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Read more </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{more}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Read more" src="http://www.dementia.org/twiki//view/more-small.gif" title="Read more" /></td>
+ <td bgcolor="#ffffff" style=""><code>more-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Read more, 13x13 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{more-small}%" width="13" height="13" alt="Read more" border="0" /></code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Move" src="http://www.dementia.org/twiki//view/move.gif" title="Move" /></td>
+ <td bgcolor="#ffffff" style=""><code>move.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Move </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{move}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Note" src="http://www.dementia.org/twiki//view/note.gif" title="Note" /></td>
+ <td bgcolor="#ffffff" style=""><code>note.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Note </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{note}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Parked" src="http://www.dementia.org/twiki//view/parked.gif" title="Parked" /></td>
+ <td bgcolor="#ffffff" style=""><code>parked.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Parked </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{parked}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Pencil / Refactor / Edit" src="http://www.dementia.org/twiki//view/pencil.gif" title="Pencil / Refactor / Edit" /></td>
+ <td bgcolor="#ffffff" style=""><code>pencil.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Pencil / Refactor / Edit </td>
+ <td bgcolor="#ffffff" style=""><code>%P%</code>, <code>%ICON{pencil}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Request for comments" src="http://www.dementia.org/twiki//view/rfc.gif" title="Request for comments" /></td>
+ <td bgcolor="#ffffff" style=""><code>rfc.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Request for comments </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{rfc}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Sort" src="http://www.dementia.org/twiki//view/sort.gif" title="Sort" /></td>
+ <td bgcolor="#ffffff" style=""><code>sort.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Sort </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{sort}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Gold star, favorites" src="http://www.dementia.org/twiki//view/stargold.gif" title="Gold star, favorites" /></td>
+ <td bgcolor="#ffffff" style=""><code>stargold.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Gold star, favorites </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{stargold}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Red star, highlight" src="http://www.dementia.org/twiki//view/starred.gif" title="Red star, highlight" /></td>
+ <td bgcolor="#ffffff" style=""><code>starred.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Red star, highlight </td>
+ <td bgcolor="#ffffff" style=""><code>%S%</code>, <code>%ICON{starred}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Stop" src="http://www.dementia.org/twiki//view/stop.gif" title="Stop" /></td>
+ <td bgcolor="#ffffff" style=""><code>stop.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Stop </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{stop}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Target" src="http://www.dementia.org/twiki//view/target.gif" title="Target" /></td>
+ <td bgcolor="#ffffff" style=""><code>target.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Target </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{target}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Tip, idea" src="http://www.dementia.org/twiki//view/tip.gif" title="Tip, idea" /></td>
+ <td bgcolor="#ffffff" style=""><code>tip.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Tip, idea </td>
+ <td bgcolor="#ffffff" style=""><code>%T%</code>, <code>%ICON{tip}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Warning, important" src="http://www.dementia.org/twiki//view/warning.gif" title="Warning, important" /></td>
+ <td bgcolor="#ffffff" style=""><code>warning.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Warning, important </td>
+ <td bgcolor="#ffffff" style=""><code>%W%</code>, <code>%ICON{warning}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Watch" src="http://www.dementia.org/twiki//view/watch.gif" title="Watch" /></td>
+ <td bgcolor="#ffffff" style=""><code>watch.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Watch </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{watch}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Work in progress, under construction" src="http://www.dementia.org/twiki//view/wip.gif" title="Work in progress, under construction" /></td>
+ <td bgcolor="#ffffff" style=""><code>wip.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Work in progress, under construction </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{wip}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Wrench, tools" src="http://www.dementia.org/twiki//view/wrench.gif" title="Wrench, tools" /></td>
+ <td bgcolor="#ffffff" style=""><code>wrench.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Wrench, tools </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{wrench}%</code></td>
+ </tr>
+</table>
+
+### <a name="Topic, file, folder icons"></a><a name=" Topic, file, folder icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/viewtopic.gif" width="16" height="16" alt="viewtopic" /> Topic, <img src="http://www.dementia.org/twiki//view/Main/WebHome/attachfile.gif" width="16" height="16" alt="attachfile" /> file, <img src="http://www.dementia.org/twiki//view/Main/WebHome/folder.gif" width="16" height="16" alt="folder" /> folder icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="View topic" src="http://www.dementia.org/twiki//view/viewtopic.gif" title="View topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>viewtopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> View topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{viewtopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Print topic" src="http://www.dementia.org/twiki//view/printtopic.gif" title="Print topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>printtopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Print topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{printtopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Refresh topic" src="http://www.dementia.org/twiki//view/refreshtopic.gif" title="Refresh topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>refreshtopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Refresh topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{refreshtopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="New topic" src="http://www.dementia.org/twiki//view/newtopic.gif" title="New topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>newtopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> New topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{newtopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Edit topic" src="http://www.dementia.org/twiki//view/edittopic.gif" title="Edit topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>edittopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Edit topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{edittopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Save" src="http://www.dementia.org/twiki//view/save.gif" title="Save" /></td>
+ <td bgcolor="#ffffff" style=""><code>save.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Save </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{save}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Attach file" src="http://www.dementia.org/twiki//view/attachfile.gif" title="Attach file" /></td>
+ <td bgcolor="#ffffff" style=""><code>attachfile.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Attach file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{attachfile}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Download" src="http://www.dementia.org/twiki//view/download.gif" title="Download" /></td>
+ <td bgcolor="#ffffff" style=""><code>download.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Download </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{download}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Trash" src="http://www.dementia.org/twiki//view/trash.gif" title="Trash" /></td>
+ <td bgcolor="#ffffff" style=""><code>trash.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Trash </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{trash}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Search topic" src="http://www.dementia.org/twiki//view/searchtopic.gif" title="Search topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>searchtopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Search topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{searchtopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Search" src="http://www.dementia.org/twiki//view/search-small.gif" title="Search" /></td>
+ <td bgcolor="#ffffff" style=""><code>search-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Small search button, 13x13 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{search-small}%" width="13" height="13" alt="Search" border="0" /></code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Topic back-links" src="http://www.dementia.org/twiki//view/topicbacklinks.gif" title="Topic back-links" /></td>
+ <td bgcolor="#ffffff" style=""><code>topicbacklinks.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Topic back-links </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{topicbacklinks}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Topic difference" src="http://www.dementia.org/twiki//view/topicdiffs.gif" title="Topic difference" /></td>
+ <td bgcolor="#ffffff" style=""><code>topicdiffs.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Topic difference </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{topicdiffs}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Statistics" src="http://www.dementia.org/twiki//view/statistics.gif" title="Statistics" /></td>
+ <td bgcolor="#ffffff" style=""><code>statistics.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Statistics </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{statistics}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Index" src="http://www.dementia.org/twiki//view/index.gif" title="Index" /></td>
+ <td bgcolor="#ffffff" style=""><code>index.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Index </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{index}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Index list" src="http://www.dementia.org/twiki//view/indexlist.gif" title="Index list" /></td>
+ <td bgcolor="#ffffff" style=""><code>indexlist.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Index list </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{indexlist}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Cache topic" src="http://www.dementia.org/twiki//view/cachetopic.gif" title="Cache topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>cachetopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Cache topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{cachetopic}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Folder" src="http://www.dementia.org/twiki//view/folder.gif" title="Folder" /></td>
+ <td bgcolor="#ffffff" style=""><code>folder.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Folder </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{folder}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Web" src="http://www.dementia.org/twiki//view/web-bg.gif" title="Web" /></td>
+ <td bgcolor="#ffffff" style=""><code>web-bg.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Web background, used in [[TWiki/WebLeftBarWebsList]]</td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{web-bg}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Web" src="http://www.dementia.org/twiki//view/web-bg-small.gif" title="Web" /></td>
+ <td bgcolor="#ffffff" style=""><code>web-bg-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Web background, 13x13 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{web-bg-small}%" width="13" height="13" alt="Web" border="0" /></code></td>
+ </tr>
+</table>
+
+### <a name="Person, group, access icons"></a><a name=" Person, group, access icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/person.gif" width="16" height="16" alt="person" /> Person, <img src="http://www.dementia.org/twiki//view/Main/WebHome/group.gif" width="16" height="16" alt="group" /> group, <img src="http://www.dementia.org/twiki//view/Main/WebHome/lock.gif" width="16" height="16" alt="lock" /> access icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Person" src="http://www.dementia.org/twiki//view/person.gif" title="Person" /></td>
+ <td bgcolor="#ffffff" style=""><code>person.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Person </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{person}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Persons" src="http://www.dementia.org/twiki//view/persons.gif" title="Persons" /></td>
+ <td bgcolor="#ffffff" style=""><code>persons.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Persons </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{persons}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Group" src="http://www.dementia.org/twiki//view/group.gif" title="Group" /></td>
+ <td bgcolor="#ffffff" style=""><code>group.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Group </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{group}%</code></td>
+ </tr>
<tr>
- <th bgcolor="#99CCCC"><strong> Icon </strong></th>
- <th bgcolor="#99CCCC"><strong> File Name </strong></th>
- <th bgcolor="#99CCCC"><strong> Comment </strong></th>
+ <td bgcolor="#ffffff" style=""><img alt="Building" src="http://www.dementia.org/twiki//view/building.gif" title="Building" /></td>
+ <td bgcolor="#ffffff" style=""><code>building.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Building </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{building}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="help.gif" height="16" src="http://www.dementia.org/twiki//view/help.gif" width="16" /></td>
- <td><code>help.gif</code></td>
- <td> Help </td>
+ <td bgcolor="#ffffff" style=""><img alt="Buildings" src="http://www.dementia.org/twiki//view/buildings.gif" title="Buildings" /></td>
+ <td bgcolor="#ffffff" style=""><code>buildings.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Buildings </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{buildings}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="note.gif" height="16" src="http://www.dementia.org/twiki//view/note.gif" width="16" /></td>
- <td><code>note.gif</code></td>
- <td> Note </td>
+ <td bgcolor="#ffffff" style=""><img alt="Log out" src="http://www.dementia.org/twiki//view/logout.gif" title="Log out" /></td>
+ <td bgcolor="#ffffff" style=""><code>logout.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Log out </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{logout}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="bubble.gif" height="16" src="http://www.dementia.org/twiki//view/bubble.gif" width="16" /></td>
- <td><code>bubble.gif</code></td>
- <td> Speech bubble </td>
+ <td bgcolor="#ffffff" style=""><img alt="Key" src="http://www.dementia.org/twiki//view/key.gif" title="Key" /></td>
+ <td bgcolor="#ffffff" style=""><code>key.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Key </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{key}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="tip.gif" height="16" src="http://www.dementia.org/twiki//view/tip.gif" width="16" /></td>
- <td><code>tip.gif</code></td>
- <td> Tip / Idea </td>
+ <td bgcolor="#ffffff" style=""><img alt="Lock" src="http://www.dementia.org/twiki//view/lock.gif" title="Lock" /></td>
+ <td bgcolor="#ffffff" style=""><code>lock.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Lock </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{lock}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="warning.gif" height="16" src="http://www.dementia.org/twiki//view/warning.gif" width="16" /></td>
- <td><code>warning.gif</code></td>
- <td> Warning / Important </td>
+ <td bgcolor="#ffffff" style=""><img alt="Locked topic" src="http://www.dementia.org/twiki//view/locktopic.gif" title="Locked topic" /></td>
+ <td bgcolor="#ffffff" style=""><code>locktopic.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Locked topic </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{locktopic}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="stop.gif" height="16" src="http://www.dementia.org/twiki//view/stop.gif" width="16" /></td>
- <td><code>stop.gif</code></td>
- <td> Stop </td>
+ <td bgcolor="#ffffff" style=""><img alt="Locked topic, gray" src="http://www.dementia.org/twiki//view/locktopicgray.gif" title="Locked topic, gray" /></td>
+ <td bgcolor="#ffffff" style=""><code>locktopicgray.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Locked topic, gray </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{locktopicgray}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="target.gif" height="16" src="http://www.dementia.org/twiki//view/target.gif" width="16" /></td>
- <td><code>target.gif</code></td>
- <td> Blue target </td>
+ <td bgcolor="#ffffff" style=""><img alt="Locked folder" src="http://www.dementia.org/twiki//view/lockfolder.gif" title="Locked folder" /></td>
+ <td bgcolor="#ffffff" style=""><code>lockfolder.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Locked folder </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{lockfolder}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="gear.gif" height="16" src="http://www.dementia.org/twiki//view/gear.gif" width="16" /></td>
- <td><code>gear.gif</code></td>
- <td> Gear </td>
+ <td bgcolor="#ffffff" style=""><img alt="Locked folder, gray" src="http://www.dementia.org/twiki//view/lockfoldergray.gif" title="Locked folder, gray" /></td>
+ <td bgcolor="#ffffff" style=""><code>lockfoldergray.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Locked folder, gray </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{lockfoldergray}%</code></td>
</tr>
+</table>
+
+### <a name="Changes, notification icons"></a><a name=" Changes, notification icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/changes.gif" width="16" height="16" alt="changes" /> Changes, <img src="http://www.dementia.org/twiki//view/Main/WebHome/notify.gif" width="16" height="16" alt="notify" /> notification icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <td align="center"><img alt="wrench.gif" height="16" src="http://www.dementia.org/twiki//view/wrench.gif" width="16" /></td>
- <td><code>wrench.gif</code></td>
- <td> Wrench </td>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
</tr>
<tr>
- <td align="center"><img alt="pencil.gif" height="16" src="http://www.dementia.org/twiki//view/pencil.gif" width="16" /></td>
- <td><code>pencil.gif</code></td>
- <td> Refactor / Edit </td>
+ <td bgcolor="#ffffff" style=""><img alt="Changes" src="http://www.dementia.org/twiki//view/changes.gif" title="Changes" /></td>
+ <td bgcolor="#ffffff" style=""><code>changes.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Changes </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{changes}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="choice-yes.gif" height="16" src="http://www.dementia.org/twiki//view/choice-yes.gif" width="16" /></td>
- <td><code>choice-yes.gif</code></td>
- <td> Yes / Done </td>
+ <td bgcolor="#ffffff" style=""><img alt="Changes" src="http://www.dementia.org/twiki//view/changes-small.gif" title="Changes" /></td>
+ <td bgcolor="#ffffff" style=""><code>changes-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Changes (small), 13x13 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{changes-small}%" width="13" height="13" alt="Changes" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="choice-no.gif" height="16" src="http://www.dementia.org/twiki//view/choice-no.gif" width="16" /></td>
- <td><code>choice-no.gif</code></td>
- <td> No </td>
+ <td bgcolor="#ffffff" style=""><img alt="Recent changes" src="http://www.dementia.org/twiki//view/recentchanges.gif" title="Recent changes" /></td>
+ <td bgcolor="#ffffff" style=""><code>recentchanges.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Recent changes </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{recentchanges}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="choice-cancel.gif" height="16" src="http://www.dementia.org/twiki//view/choice-cancel.gif" width="16" /></td>
- <td><code>choice-cancel.gif</code></td>
- <td> Cancel </td>
+ <td bgcolor="#ffffff" style=""><img alt="Mail" src="http://www.dementia.org/twiki//view/mail.gif" title="Mail" /></td>
+ <td bgcolor="#ffffff" style=""><code>mail.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Mail </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{mail}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="updated.gif" height="8" src="http://www.dementia.org/twiki//view/updated.gif" width="56" /></td>
- <td><code>updated.gif</code></td>
- <td> Updated </td>
+ <td bgcolor="#ffffff" style=""><img alt="Notify" src="http://www.dementia.org/twiki//view/notify.gif" title="Notify" /></td>
+ <td bgcolor="#ffffff" style=""><code>notify.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Notify </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{notify}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="new.gif" height="8" src="http://www.dementia.org/twiki//view/new.gif" width="28" /></td>
- <td><code>new.gif</code></td>
- <td> New </td>
+ <td bgcolor="#ffffff" style=""><img alt="RSS feed" src="http://www.dementia.org/twiki//view/rss-feed.gif" title="RSS feed" /></td>
+ <td bgcolor="#ffffff" style=""><code>rss-feed.gif</code></td>
+ <td bgcolor="#ffffff" style=""> RSS feed, 36x14 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{rss-feed}%" width="36" height="14" alt="RSS feed" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="starred.gif" height="16" src="http://www.dementia.org/twiki//view/starred.gif" width="16" /></td>
- <td><code>starred.gif</code></td>
- <td> Highlight (positive) </td>
+ <td bgcolor="#ffffff" style=""><img alt="RSS feed" src="http://www.dementia.org/twiki//view/rss-small.gif" title="RSS feed" /></td>
+ <td bgcolor="#ffffff" style=""><code>rss-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> RSS feed </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{rss-small}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="stargold.gif" height="16" src="http://www.dementia.org/twiki//view/stargold.gif" width="16" /></td>
- <td><code>stargold.gif</code></td>
- <td> Favorites (gold star) </td>
+ <td bgcolor="#ffffff" style=""><img alt="XML feed" src="http://www.dementia.org/twiki//view/xml-feed.gif" title="XML feed" /></td>
+ <td bgcolor="#ffffff" style=""><code>xml-feed.gif</code></td>
+ <td bgcolor="#ffffff" style=""> XML feed, 36x14 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{xml-feed}%" width="36" height="13" alt="XML feed" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="hand.gif" height="16" src="http://www.dementia.org/twiki//view/hand.gif" width="16" /></td>
- <td><code>hand.gif</code></td>
- <td> Pointing hand </td>
+ <td bgcolor="#ffffff" style=""><img alt="XML feed" src="http://www.dementia.org/twiki//view/xml-small.gif" title="XML feed" /></td>
+ <td bgcolor="#ffffff" style=""><code>xml-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> XML feed </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{xml-small}%</code></td>
</tr>
+</table>
+
+### <a name="Status, flag, LED icons"></a><a name=" Status, flag, LED icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/choice-yes.gif" width="16" height="16" alt="choice-yes" /> Status, <img src="http://www.dementia.org/twiki//view/Main/WebHome/flag.gif" width="16" height="16" alt="flag" /> flag, <img src="http://www.dementia.org/twiki//view/Main/WebHome/led-box-red.gif" width="16" height="16" alt="led-box-red" /> LED icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <td align="center"><img alt="arrowleft.gif" height="16" src="http://www.dementia.org/twiki//view/arrowleft.gif" width="16" /></td>
- <td><code>arrowleft.gif</code></td>
- <td> Arrow red left </td>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
</tr>
<tr>
- <td align="center"><img alt="arrowright.gif" height="16" src="http://www.dementia.org/twiki//view/arrowright.gif" width="16" /></td>
- <td><code>arrowright.gif</code></td>
- <td> Arrow red right </td>
+ <td bgcolor="#ffffff" style=""><img alt="NEW" src="http://www.dementia.org/twiki//view/new.gif" title="NEW" /></td>
+ <td bgcolor="#ffffff" style=""><code>new.gif</code></td>
+ <td bgcolor="#ffffff" style=""> NEW, 30x16 </td>
+ <td bgcolor="#ffffff" style=""><code>%N%</code>, <code><img src="%ICONURL{new}%" width="30" height="16" alt="New" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowup.gif" height="16" src="http://www.dementia.org/twiki//view/arrowup.gif" width="16" /></td>
- <td><code>arrowup.gif</code></td>
- <td> Arrow red up </td>
+ <td bgcolor="#ffffff" style=""><img alt="TODO" src="http://www.dementia.org/twiki//view/todo.gif" title="TODO" /></td>
+ <td bgcolor="#ffffff" style=""><code>todo.gif</code></td>
+ <td bgcolor="#ffffff" style=""> TODO, 37x16 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{todo}%" width="37" height="16" alt="TODO" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowdown.gif" height="16" src="http://www.dementia.org/twiki//view/arrowdown.gif" width="16" /></td>
- <td><code>arrowdown.gif</code></td>
- <td> Arrow red down </td>
+ <td bgcolor="#ffffff" style=""><img alt="UPDATED" src="http://www.dementia.org/twiki//view/updated.gif" title="UPDATED" /></td>
+ <td bgcolor="#ffffff" style=""><code>updated.gif</code></td>
+ <td bgcolor="#ffffff" style=""> UPDATED, 55x16 </td>
+ <td bgcolor="#ffffff" style=""><code>%U%</code>, <code><img src="%ICONURL{updated}%" width="55" height="16" alt="UPDATED" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowbleft.gif" height="16" src="http://www.dementia.org/twiki//view/arrowbleft.gif" width="16" /></td>
- <td><code>arrowbleft.gif</code></td>
- <td> Arrow blue left </td>
+ <td bgcolor="#ffffff" style=""><img alt="DONE" src="http://www.dementia.org/twiki//view/done.gif" title="DONE" /></td>
+ <td bgcolor="#ffffff" style=""><code>done.gif</code></td>
+ <td bgcolor="#ffffff" style=""> DONE, 37x16 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{done}%" width="37" height="16" alt="Done" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowbright.gif" height="16" src="http://www.dementia.org/twiki//view/arrowbright.gif" width="16" /></td>
- <td><code>arrowbright.gif</code></td>
- <td> Arrow blue right </td>
+ <td bgcolor="#ffffff" style=""><img alt="CLOSED" src="http://www.dementia.org/twiki//view/closed.gif" title="CLOSED" /></td>
+ <td bgcolor="#ffffff" style=""><code>closed.gif</code></td>
+ <td bgcolor="#ffffff" style=""> CLOSED, 48x16 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{closed}%" width="48" height="16" alt="Closed" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowbup.gif" height="16" src="http://www.dementia.org/twiki//view/arrowbup.gif" width="16" /></td>
- <td><code>arrowbup.gif</code></td>
- <td> Arrow blue up </td>
+ <td bgcolor="#ffffff" style=""><img alt="Minus" src="http://www.dementia.org/twiki//view/minus.gif" title="Minus" /></td>
+ <td bgcolor="#ffffff" style=""><code>minus.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Minus </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{minus}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowbdown.gif" height="16" src="http://www.dementia.org/twiki//view/arrowbdown.gif" width="16" /></td>
- <td><code>arrowbdown.gif</code></td>
- <td> Arrow blue down </td>
+ <td bgcolor="#ffffff" style=""><img alt="Plus" src="http://www.dementia.org/twiki//view/plus.gif" title="Plus" /></td>
+ <td bgcolor="#ffffff" style=""><code>plus.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Plus </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{plus}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="arrowdot.gif" height="16" src="http://www.dementia.org/twiki//view/arrowdot.gif" width="16" /></td>
- <td><code>arrowdot.gif</code></td>
- <td> Meet here (arrows to red dot) </td>
+ <td bgcolor="#ffffff" style=""><img alt="Cancel" src="http://www.dementia.org/twiki//view/choice-cancel.gif" title="Cancel" /></td>
+ <td bgcolor="#ffffff" style=""><code>choice-cancel.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Cancel </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{choice-cancel}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_start.gif" height="16" src="http://www.dementia.org/twiki//view/go_start.gif" width="16" /></td>
- <td><code>go_start.gif</code></td>
- <td> Go start </td>
+ <td bgcolor="#ffffff" style=""><img alt="No" src="http://www.dementia.org/twiki//view/choice-no.gif" title="No" /></td>
+ <td bgcolor="#ffffff" style=""><code>choice-no.gif</code></td>
+ <td bgcolor="#ffffff" style=""> No </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{choice-no}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_fb.gif" height="16" src="http://www.dementia.org/twiki//view/go_fb.gif" width="16" /></td>
- <td><code>go_fb.gif</code></td>
- <td> Go fast back </td>
+ <td bgcolor="#ffffff" style=""><img alt="Yes / Done" src="http://www.dementia.org/twiki//view/choice-yes.gif" title="Yes / Done" /></td>
+ <td bgcolor="#ffffff" style=""><code>choice-yes.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Yes / Done </td>
+ <td bgcolor="#ffffff" style=""><code>%Y%</code>, <code>%ICON{choice-yes}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_back.gif" height="16" src="http://www.dementia.org/twiki//view/go_back.gif" width="16" /></td>
- <td><code>go_back.gif</code></td>
- <td> Go back </td>
+ <td bgcolor="#ffffff" style=""><img alt="Unchecked checkbox" src="http://www.dementia.org/twiki//view/unchecked.gif" title="Unchecked checkbox" /></td>
+ <td bgcolor="#ffffff" style=""><code>unchecked.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Unchecked checkbox </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{unchecked}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_forward.gif" height="16" src="http://www.dementia.org/twiki//view/go_forward.gif" width="16" /></td>
- <td><code>go_forward.gif</code></td>
- <td> Go forward </td>
+ <td bgcolor="#ffffff" style=""><img alt="Checked checkbox" src="http://www.dementia.org/twiki//view/checked.gif" title="Checked checkbox" /></td>
+ <td bgcolor="#ffffff" style=""><code>checked.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Checked checkbox </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{checked}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_ff.gif" height="16" src="http://www.dementia.org/twiki//view/go_ff.gif" width="16" /></td>
- <td><code>go_ff.gif</code></td>
- <td> Go fast forward </td>
+ <td bgcolor="#ffffff" style=""><img alt="Flag" src="http://www.dementia.org/twiki//view/flag.gif" title="Flag" /></td>
+ <td bgcolor="#ffffff" style=""><code>flag.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Flag </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{flag}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="go_end.gif" height="16" src="http://www.dementia.org/twiki//view/go_end.gif" width="16" /></td>
- <td><code>go_end.gif</code></td>
- <td> Go end </td>
+ <td bgcolor="#ffffff" style=""><img alt="Flag" src="http://www.dementia.org/twiki//view/flag-gray.gif" title="Flag" /></td>
+ <td bgcolor="#ffffff" style=""><code>flag-gray.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Gray flag </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{flag-gray}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="wip.gif" height="16" src="http://www.dementia.org/twiki//view/wip.gif" width="16" /></td>
- <td><code>wip.gif</code></td>
- <td> Work in progress </td>
+ <td bgcolor="#ffffff" style=""><img alt="Flag" src="http://www.dementia.org/twiki//view/flag-gray-small.gif" title="Flag" /></td>
+ <td bgcolor="#ffffff" style=""><code>flag-gray-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Small gray flag, 13x13 </td>
+ <td bgcolor="#ffffff" style=""><code><img src="%ICONURL{flag-gray-small}%" width="13" height="13" alt="Flag" border="0" /></code></td>
</tr>
<tr>
- <td align="center"><img alt="rfc.gif" height="16" src="http://www.dementia.org/twiki//view/rfc.gif" width="16" /></td>
- <td><code>rfc.gif</code></td>
- <td> Request for comments </td>
+ <td bgcolor="#ffffff" style=""><img alt="Aqua led" src="http://www.dementia.org/twiki//view/led-aqua.gif" title="Aqua led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-aqua.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Aqua led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-aqua}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="days.gif" height="16" src="http://www.dementia.org/twiki//view/days.gif" width="16" /></td>
- <td><code>days.gif</code></td>
- <td> Days </td>
+ <td bgcolor="#ffffff" style=""><img alt="Blue led" src="http://www.dementia.org/twiki//view/led-blue.gif" title="Blue led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-blue.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Blue led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-blue}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="hourglass.gif" height="16" src="http://www.dementia.org/twiki//view/hourglass.gif" width="16" /></td>
- <td><code>hourglass.gif</code></td>
- <td> Hour glass </td>
+ <td bgcolor="#ffffff" style=""><img alt="Gray led" src="http://www.dementia.org/twiki//view/led-gray.gif" title="Gray led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-gray.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Gray led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-gray}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="watch.gif" height="16" src="http://www.dementia.org/twiki//view/watch.gif" width="16" /></td>
- <td><code>watch.gif</code></td>
- <td> Watch </td>
+ <td bgcolor="#ffffff" style=""><img alt="Green led" src="http://www.dementia.org/twiki//view/led-green.gif" title="Green led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-green.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Green led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-green}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="globe.gif" height="16" src="http://www.dementia.org/twiki//view/globe.gif" width="16" /></td>
- <td><code>globe.gif</code></td>
- <td> Globe </td>
+ <td bgcolor="#ffffff" style=""><img alt="Orange led" src="http://www.dementia.org/twiki//view/led-orange.gif" title="Orange led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-orange.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Orange led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-orange}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="home.gif" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
- <td><code>home.gif</code></td>
- <td> Home </td>
+ <td bgcolor="#ffffff" style=""><img alt="Purple led" src="http://www.dementia.org/twiki//view/led-purple.gif" title="Purple led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-purple.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Purple led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-purple}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="group.gif" height="16" src="http://www.dementia.org/twiki//view/group.gif" width="16" /></td>
- <td><code>group.gif</code></td>
- <td> Group </td>
+ <td bgcolor="#ffffff" style=""><img alt="Red led" src="http://www.dementia.org/twiki//view/led-red.gif" title="Red led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-red.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Red led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-red}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="person.gif" height="16" src="http://www.dementia.org/twiki//view/person.gif" width="16" /></td>
- <td><code>person.gif</code></td>
- <td> Person </td>
+ <td bgcolor="#ffffff" style=""><img alt="Yellow led" src="http://www.dementia.org/twiki//view/led-yellow.gif" title="Yellow led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-yellow.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Yellow led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-yellow}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="persons.gif" height="16" src="http://www.dementia.org/twiki//view/persons.gif" width="16" /></td>
- <td><code>persons.gif</code></td>
- <td> Persons </td>
+ <td bgcolor="#ffffff" style=""><img alt="Aqua led" src="http://www.dementia.org/twiki//view/led-box-aqua.gif" title="Aqua led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-aqua.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Aqua led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-aqua}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="lock.gif" height="16" src="http://www.dementia.org/twiki//view/lock.gif" width="16" /></td>
- <td><code>lock.gif</code></td>
- <td> Lock </td>
+ <td bgcolor="#ffffff" style=""><img alt="Blue led" src="http://www.dementia.org/twiki//view/led-box-blue.gif" title="Blue led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-blue.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Blue led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-blue}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="folder.gif" height="16" src="http://www.dementia.org/twiki//view/folder.gif" width="16" /></td>
- <td><code>folder.gif</code></td>
- <td> Folder </td>
+ <td bgcolor="#ffffff" style=""><img alt="Gray led" src="http://www.dementia.org/twiki//view/led-box-gray.gif" title="Gray led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-gray.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Gray led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-gray}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="lockfolder.gif" height="16" src="http://www.dementia.org/twiki//view/lockfolder.gif" width="16" /></td>
- <td><code>lockfolder.gif</code></td>
- <td> Locked folder </td>
+ <td bgcolor="#ffffff" style=""><img alt="Green led" src="http://www.dementia.org/twiki//view/led-box-green.gif" title="Green led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-green.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Green led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-green}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="lockfoldergray.gif" height="16" src="http://www.dementia.org/twiki//view/lockfoldergray.gif" width="16" /></td>
- <td><code>lockfoldergray.gif</code></td>
- <td> Locked folder, gray </td>
+ <td bgcolor="#ffffff" style=""><img alt="Orange led" src="http://www.dementia.org/twiki//view/led-box-orange.gif" title="Orange led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-orange.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Orange led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-orange}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="locktopic.gif" height="16" src="http://www.dementia.org/twiki//view/locktopic.gif" width="16" /></td>
- <td><code>locktopic.gif</code></td>
- <td> Locked topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Purple led" src="http://www.dementia.org/twiki//view/led-box-purple.gif" title="Purple led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-purple.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Purple led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-purple}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="locktopicgray.gif" height="16" src="http://www.dementia.org/twiki//view/locktopicgray.gif" width="16" /></td>
- <td><code>locktopicgray.gif</code></td>
- <td> Locked topic, gray </td>
+ <td bgcolor="#ffffff" style=""><img alt="Red led" src="http://www.dementia.org/twiki//view/led-box-red.gif" title="Red led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-red.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Red led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-red}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="refreshtopic.gif" height="16" src="http://www.dementia.org/twiki//view/refreshtopic.gif" width="16" /></td>
- <td><code>refreshtopic.gif</code></td>
- <td> Refresh topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Yellow led" src="http://www.dementia.org/twiki//view/led-box-yellow.gif" title="Yellow led" /></td>
+ <td bgcolor="#ffffff" style=""><code>led-box-yellow.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Yellow led </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{led-box-yellow}%</code></td>
+ </tr>
+</table>
+
+### <a name="Navigation icons"></a><a name=" Navigation icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/home.gif" width="16" height="16" alt="home" /> Navigation icons
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=6;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=6;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=6;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=6;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
</tr>
<tr>
- <td align="center"><img alt="viewtopic.gif" height="16" src="http://www.dementia.org/twiki//view/viewtopic.gif" width="16" /></td>
- <td><code>viewtopic.gif</code></td>
- <td> View topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Home" src="http://www.dementia.org/twiki//view/home.gif" title="Home" /></td>
+ <td bgcolor="#ffffff" style=""><code>home.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Home </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{home}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="edittopic.gif" height="16" src="http://www.dementia.org/twiki//view/edittopic.gif" width="16" /></td>
- <td><code>edittopic.gif</code></td>
- <td> Edit topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Meet here (arrows to red dot)" src="http://www.dementia.org/twiki//view/arrowdot.gif" title="Meet here (arrows to red dot)" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowdot.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Meet here (arrows to red dot) </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowdot}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="topicdiffs.gif" height="16" src="http://www.dementia.org/twiki//view/topicdiffs.gif" width="16" /></td>
- <td><code>topicdiffs.gif</code></td>
- <td> Topic difference </td>
+ <td bgcolor="#ffffff" style=""><img alt="Left" src="http://www.dementia.org/twiki//view/left.gif" title="Left" /></td>
+ <td bgcolor="#ffffff" style=""><code>left.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{left}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="topicbacklinks.gif" height="16" src="http://www.dementia.org/twiki//view/topicbacklinks.gif" width="16" /></td>
- <td><code>topicbacklinks.gif</code></td>
- <td> Topic back-links </td>
+ <td bgcolor="#ffffff" style=""><img alt="Right" src="http://www.dementia.org/twiki//view/right.gif" title="Right" /></td>
+ <td bgcolor="#ffffff" style=""><code>right.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{right}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="newtopic.gif" height="16" src="http://www.dementia.org/twiki//view/newtopic.gif" width="16" /></td>
- <td><code>newtopic.gif</code></td>
- <td> New topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Up" src="http://www.dementia.org/twiki//view/up.gif" title="Up" /></td>
+ <td bgcolor="#ffffff" style=""><code>up.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Up </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{up}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="searchtopic.gif" height="16" src="http://www.dementia.org/twiki//view/searchtopic.gif" width="16" /></td>
- <td><code>searchtopic.gif</code></td>
- <td> Search topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Down" src="http://www.dementia.org/twiki//view/down.gif" title="Down" /></td>
+ <td bgcolor="#ffffff" style=""><code>down.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{down}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="statistics.gif" height="16" src="http://www.dementia.org/twiki//view/statistics.gif" width="16" /></td>
- <td><code>statistics.gif</code></td>
- <td> Statistics </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow blue left" src="http://www.dementia.org/twiki//view/arrowbleft.gif" title="Arrow blue left" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowbleft.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow blue left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowbleft}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="index.gif" height="16" src="http://www.dementia.org/twiki//view/index.gif" width="16" /></td>
- <td><code>index.gif</code></td>
- <td> Index </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow blue right" src="http://www.dementia.org/twiki//view/arrowbright.gif" title="Arrow blue right" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowbright.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow blue right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowbright}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="indexlist.gif" height="16" src="http://www.dementia.org/twiki//view/indexlist.gif" width="16" /></td>
- <td><code>indexlist.gif</code></td>
- <td> Index list </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow blue up" src="http://www.dementia.org/twiki//view/arrowbup.gif" title="Arrow blue up" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowbup.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow blue up </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowbup}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="cachetopic.gif" height="16" src="http://www.dementia.org/twiki//view/cachetopic.gif" width="16" /></td>
- <td><code>cachetopic.gif</code></td>
- <td> Cache topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow blue down" src="http://www.dementia.org/twiki//view/arrowbdown.gif" title="Arrow blue down" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowbdown.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow blue down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowbdown}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="printtopic.gif" height="16" src="http://www.dementia.org/twiki//view/printtopic.gif" width="16" /></td>
- <td><code>printtopic.gif</code></td>
- <td> Print topic </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow left" src="http://www.dementia.org/twiki//view/arrowleft.gif" title="Arrow left" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowleft.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowleft}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="attachfile.gif" height="16" src="http://www.dementia.org/twiki//view/attachfile.gif" width="16" /></td>
- <td><code>attachfile.gif</code></td>
- <td> Attach file </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow right" src="http://www.dementia.org/twiki//view/arrowright.gif" title="Arrow right" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowright.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow right </td>
+ <td bgcolor="#ffffff" style=""><code>%M%</code>, <code>%ICON{arrowright}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="recentchanges.gif" height="16" src="http://www.dementia.org/twiki//view/recentchanges.gif" width="16" /></td>
- <td><code>recentchanges.gif</code></td>
- <td> Recent changes </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow up" src="http://www.dementia.org/twiki//view/arrowup.gif" title="Arrow up" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowup.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow up </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowup}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="changes.gif" height="16" src="http://www.dementia.org/twiki//view/changes.gif" width="16" /></td>
- <td><code>changes.gif</code></td>
- <td> Changes </td>
+ <td bgcolor="#ffffff" style=""><img alt="Arrow down" src="http://www.dementia.org/twiki//view/arrowdown.gif" title="Arrow down" /></td>
+ <td bgcolor="#ffffff" style=""><code>arrowdown.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Arrow down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{arrowdown}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="notify.gif" height="16" src="http://www.dementia.org/twiki//view/notify.gif" width="16" /></td>
- <td><code>notify.gif</code></td>
- <td> Notify </td>
+ <td bgcolor="#ffffff" style=""><img alt="Go to start" src="http://www.dementia.org/twiki//view/go_start.gif" title="Go to start" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_start.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go to start </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_start}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="mail.gif" height="16" src="http://www.dementia.org/twiki//view/mail.gif" width="16" /></td>
- <td><code>mail.gif</code></td>
- <td> Mail </td>
+ <td bgcolor="#ffffff" style=""><img alt="Go fast back" src="http://www.dementia.org/twiki//view/go_fb.gif" title="Go fast back" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_fb.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go fast back </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_fb}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="trash.gif" height="16" src="http://www.dementia.org/twiki//view/trash.gif" width="16" /></td>
- <td><code>trash.gif</code></td>
- <td> Trash </td>
+ <td bgcolor="#ffffff" style=""><img alt="Go back" src="http://www.dementia.org/twiki//view/go_back.gif" title="Go back" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_back.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go back </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_back}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="rss-feed.gif" height="14" src="http://www.dementia.org/twiki//view/rss-feed.gif" width="36" /></td>
- <td><code>rss-feed.gif</code></td>
- <td> RSS feed 36x14 </td>
+ <td bgcolor="#ffffff" style=""><img alt="Go forward" src="http://www.dementia.org/twiki//view/go_forward.gif" title="Go forward" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_forward.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go forward </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_forward}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="xml-feed.gif" height="14" src="http://www.dementia.org/twiki//view/xml-feed.gif" width="36" /></td>
- <td><code>xml-feed.gif</code></td>
- <td> RSS feed 36x14 </td>
+ <td bgcolor="#ffffff" style=""><img alt="Go fast forward" src="http://www.dementia.org/twiki//view/go_ff.gif" title="Go fast forward" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_ff.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go fast forward </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_ff}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Go to end" src="http://www.dementia.org/twiki//view/go_end.gif" title="Go to end" /></td>
+ <td bgcolor="#ffffff" style=""><code>go_end.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Go to end </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{go_end}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Close toggle, Twisty close toggle" src="http://www.dementia.org/twiki//view/toggleclose.gif" title="Close toggle, Twisty close toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleclose.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Close toggle, Twisty close toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleclose}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Close toggle, Twisty close toggle" src="http://www.dementia.org/twiki//view/toggleclose-small.gif" title="Close toggle, Twisty close toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleclose-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Close toggle, Twisty close toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleclose-small}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Open toggle, Twisty open toggle" src="http://www.dementia.org/twiki//view/toggleopen.gif" title="Open toggle, Twisty open toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleopen.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Open toggle, Twisty open toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleopen}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Open toggle, Twisty open toggle" src="http://www.dementia.org/twiki//view/toggleopen-small.gif" title="Open toggle, Twisty open toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleopen-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Open toggle, Twisty open toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleopen-small}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Open toggle, Twisty open toggle" src="http://www.dementia.org/twiki//view/toggleopenleft.gif" title="Open toggle, Twisty open toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleopenleft.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Open toggle, Twisty open toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleopenleft}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="Open toggle, Twisty open toggle" src="http://www.dementia.org/twiki//view/toggleopenleft-small.gif" title="Open toggle, Twisty open toggle" /></td>
+ <td bgcolor="#ffffff" style=""><code>toggleopenleft-small.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Open toggle, Twisty open toggle </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{toggleopenleft-small}%</code></td>
+ </tr>
+</table>
+
+### <a name="Block graphics"></a><a name=" Block graphics"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/line_ur.gif" width="16" height="16" alt="line_ur" /> Block graphics
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=7;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=7;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=7;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=7;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
</tr>
<tr>
- <td align="center"><img alt="empty.gif" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
- <td><code>empty.gif</code></td>
- <td> Empty transparent 16x16 spacer </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_ld.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_ld.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph left-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_ld}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_ud.gif" height="16" src="http://www.dementia.org/twiki//view/line_ud.gif" width="16" /></td>
- <td><code>line_ud.gif</code></td>
- <td> Line graph up-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_lr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_lr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_lr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_lr.gif" height="16" src="http://www.dementia.org/twiki//view/line_lr.gif" width="16" /></td>
- <td><code>line_lr.gif</code></td>
- <td> Line graph left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_lrd.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_lrd.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph left-right-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_lrd}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_udlr.gif" height="16" src="http://www.dementia.org/twiki//view/line_udlr.gif" width="16" /></td>
- <td><code>line_udlr.gif</code></td>
- <td> Line graph up-down-left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_rd.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_rd.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph right-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_rd}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_ur.gif" height="16" src="http://www.dementia.org/twiki//view/line_ur.gif" width="16" /></td>
- <td><code>line_ur.gif</code></td>
- <td> Line graph up-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_ud.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_ud.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_ud}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_rd.gif" height="16" src="http://www.dementia.org/twiki//view/line_rd.gif" width="16" /></td>
- <td><code>line_rd.gif</code></td>
- <td> Line graph right-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_udl.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_udl.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-down-left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_udl}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_ld.gif" height="16" src="http://www.dementia.org/twiki//view/line_ld.gif" width="16" /></td>
- <td><code>line_ld.gif</code></td>
- <td> Line graph left-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_udlr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_udlr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-down-left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_udlr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_ul.gif" height="16" src="http://www.dementia.org/twiki//view/line_ul.gif" width="16" /></td>
- <td><code>line_ul.gif</code></td>
- <td> Line graph up-left </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_udr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_udr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-down-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_udr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_udr.gif" height="16" src="http://www.dementia.org/twiki//view/line_udr.gif" width="16" /></td>
- <td><code>line_udr.gif</code></td>
- <td> Line graph up-down-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_ul.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_ul.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_ul}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_lrd.gif" height="16" src="http://www.dementia.org/twiki//view/line_lrd.gif" width="16" /></td>
- <td><code>line_lrd.gif</code></td>
- <td> Line graph left-right-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_ulr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_ulr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_ulr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_udl.gif" height="16" src="http://www.dementia.org/twiki//view/line_udl.gif" width="16" /></td>
- <td><code>line_udl.gif</code></td>
- <td> Line graph up-down-left </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/line_ur.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>line_ur.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Line graph up-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{line_ur}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="line_ulr.gif" height="16" src="http://www.dementia.org/twiki//view/line_ulr.gif" width="16" /></td>
- <td><code>line_ulr.gif</code></td>
- <td> Line graph up-left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_ld.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_ld.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph left-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_ld}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_ud.gif" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
- <td><code>dot_ud.gif</code></td>
- <td> Dot graph up-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_lr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_lr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_lr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_lr.gif" height="16" src="http://www.dementia.org/twiki//view/dot_lr.gif" width="16" /></td>
- <td><code>dot_lr.gif</code></td>
- <td> Dot graph left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_lrd.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_lrd.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph left-right-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_lrd}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_udlr.gif" height="16" src="http://www.dementia.org/twiki//view/dot_udlr.gif" width="16" /></td>
- <td><code>dot_udlr.gif</code></td>
- <td> Dot graph up-down-left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_rd.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_rd.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph right-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_rd}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_ur.gif" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
- <td><code>dot_ur.gif</code></td>
- <td> Dot graph up-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_ud.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_ud.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-down </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_ud}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_rd.gif" height="16" src="http://www.dementia.org/twiki//view/dot_rd.gif" width="16" /></td>
- <td><code>dot_rd.gif</code></td>
- <td> Dot graph right-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_udl.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_udl.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-down-left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_udl}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_ld.gif" height="16" src="http://www.dementia.org/twiki//view/dot_ld.gif" width="16" /></td>
- <td><code>dot_ld.gif</code></td>
- <td> Dot graph left-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_udlr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_udlr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-down-left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_udlr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_ul.gif" height="16" src="http://www.dementia.org/twiki//view/dot_ul.gif" width="16" /></td>
- <td><code>dot_ul.gif</code></td>
- <td> Dot graph up-left </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_udr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_udr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-down-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_udr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_udr.gif" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
- <td><code>dot_udr.gif</code></td>
- <td> Dot graph up-down-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_ul.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_ul.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-left </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_ul}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_lrd.gif" height="16" src="http://www.dementia.org/twiki//view/dot_lrd.gif" width="16" /></td>
- <td><code>dot_lrd.gif</code></td>
- <td> Dot graph left-right-down </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_ulr.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_ulr.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-left-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_ulr}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_udl.gif" height="16" src="http://www.dementia.org/twiki//view/dot_udl.gif" width="16" /></td>
- <td><code>dot_udl.gif</code></td>
- <td> Dot graph up-down-left </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/dot_ur.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>dot_ur.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dot graph up-right </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dot_ur}%</code></td>
</tr>
<tr>
- <td align="center"><img alt="dot_ulr.gif" height="16" src="http://www.dementia.org/twiki//view/dot_ulr.gif" width="16" /></td>
- <td><code>dot_ulr.gif</code></td>
- <td> Dot graph up-left-right </td>
+ <td bgcolor="#ffffff" style=""><img alt="" src="http://www.dementia.org/twiki//view/empty.gif" title="" /></td>
+ <td bgcolor="#ffffff" style=""><code>empty.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Empty transparent 16x16 spacer </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{empty}%</code></td>
</tr>
</table>
--- TWiki:Main.PeterThoeny - 06 Aug 2004 %BR% -- TWiki:Main.MikeMannix - 16 May 2002
+### <a name="Filetype icons"></a><a name=" Filetype icons"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/gif.gif" width="16" height="16" alt="gif" /> Filetype icons
+
+Filetype icons are used by the attachment table and are seldom used in topics. Write `%ICON{pdf}%` to show the <img src="http://www.dementia.org/twiki//view/Main/WebHome/pdf.gif" width="16" height="16" alt="pdf" /> icon.
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=8;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff"> </font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=8;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=8;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Name</font></a></th>
+ <th bgcolor="#ffffff" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=8;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Write...</font></a></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="as" src="http://www.dementia.org/twiki//view/as.gif" title="as" /></td>
+ <td bgcolor="#ffffff" style=""><code>as.gif</code></td>
+ <td bgcolor="#ffffff" style=""> ActionScript </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{as}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="bat" src="http://www.dementia.org/twiki//view/bat.gif" title="bat" /></td>
+ <td bgcolor="#ffffff" style=""><code>bat.gif</code></td>
+ <td bgcolor="#ffffff" style=""> MS-DOS batch file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{bat}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="bmp" src="http://www.dementia.org/twiki//view/bmp.gif" title="bmp" /></td>
+ <td bgcolor="#ffffff" style=""><code>bmp.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Bitmap </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{bmp}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="c" src="http://www.dementia.org/twiki//view/c.gif" title="c" /></td>
+ <td bgcolor="#ffffff" style=""><code>c.gif</code></td>
+ <td bgcolor="#ffffff" style=""> C source code file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{c}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="dll" src="http://www.dementia.org/twiki//view/dll.gif" title="dll" /></td>
+ <td bgcolor="#ffffff" style=""><code>dll.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Dynamic Linked Library; Microsoft application file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{dll}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="doc" src="http://www.dementia.org/twiki//view/doc.gif" title="doc" /></td>
+ <td bgcolor="#ffffff" style=""><code>doc.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Microsoft Word file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{doc}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="else" src="http://www.dementia.org/twiki//view/else.gif" title="else" /></td>
+ <td bgcolor="#ffffff" style=""><code>else.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Unknown file format </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{else}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="eml" src="http://www.dementia.org/twiki//view/eml.gif" title="eml" /></td>
+ <td bgcolor="#ffffff" style=""><code>eml.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Microsoft Outlook e-mail file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{eml}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="exe" src="http://www.dementia.org/twiki//view/exe.gif" title="exe" /></td>
+ <td bgcolor="#ffffff" style=""><code>exe.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Microsoft Executable file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{exe}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="fla" src="http://www.dementia.org/twiki//view/fla.gif" title="fla" /></td>
+ <td bgcolor="#ffffff" style=""><code>fla.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Macromedia Flash Movie </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{fla}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="fon" src="http://www.dementia.org/twiki//view/fon.gif" title="fon" /></td>
+ <td bgcolor="#ffffff" style=""><code>fon.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Windows bitmapped font file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{fon}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="gif" src="http://www.dementia.org/twiki//view/gif.gif" title="gif" /></td>
+ <td bgcolor="#ffffff" style=""><code>gif.gif</code></td>
+ <td bgcolor="#ffffff" style=""> GIF </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{gif}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="h" src="http://www.dementia.org/twiki//view/h.gif" title="h" /></td>
+ <td bgcolor="#ffffff" style=""><code>h.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Header file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{h}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="hlp" src="http://www.dementia.org/twiki//view/hlp.gif" title="hlp" /></td>
+ <td bgcolor="#ffffff" style=""><code>hlp.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Standard help file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{hlp}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="html" src="http://www.dementia.org/twiki//view/html.gif" title="html" /></td>
+ <td bgcolor="#ffffff" style=""><code>html.gif</code></td>
+ <td bgcolor="#ffffff" style=""> HTML </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{html}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="java" src="http://www.dementia.org/twiki//view/java.gif" title="java" /></td>
+ <td bgcolor="#ffffff" style=""><code>java.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Java source code file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{java}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="jpg" src="http://www.dementia.org/twiki//view/jpg.gif" title="jpg" /></td>
+ <td bgcolor="#ffffff" style=""><code>jpg.gif</code></td>
+ <td bgcolor="#ffffff" style=""> JPEG </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{jpg}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="js" src="http://www.dementia.org/twiki//view/js.gif" title="js" /></td>
+ <td bgcolor="#ffffff" style=""><code>js.gif</code></td>
+ <td bgcolor="#ffffff" style=""> JavaScript </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{js}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="mdb" src="http://www.dementia.org/twiki//view/mdb.gif" title="mdb" /></td>
+ <td bgcolor="#ffffff" style=""><code>mdb.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Microsoft Access database File </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{mdb}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="mov" src="http://www.dementia.org/twiki//view/mov.gif" title="mov" /></td>
+ <td bgcolor="#ffffff" style=""><code>mov.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Quicktime movie </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{mov}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="mp3" src="http://www.dementia.org/twiki//view/mp3.gif" title="mp3" /></td>
+ <td bgcolor="#ffffff" style=""><code>mp3.gif</code></td>
+ <td bgcolor="#ffffff" style=""> MP3 </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{mp3}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="pdf" src="http://www.dementia.org/twiki//view/pdf.gif" title="pdf" /></td>
+ <td bgcolor="#ffffff" style=""><code>pdf.gif</code></td>
+ <td bgcolor="#ffffff" style=""> PDF </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{pdf}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="pl" src="http://www.dementia.org/twiki//view/pl.gif" title="pl" /></td>
+ <td bgcolor="#ffffff" style=""><code>pl.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Perl source code file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{pl}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="png" src="http://www.dementia.org/twiki//view/png.gif" title="png" /></td>
+ <td bgcolor="#ffffff" style=""><code>png.gif</code></td>
+ <td bgcolor="#ffffff" style=""> PNG </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{png}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="ppt" src="http://www.dementia.org/twiki//view/ppt.gif" title="ppt" /></td>
+ <td bgcolor="#ffffff" style=""><code>ppt.gif</code></td>
+ <td bgcolor="#ffffff" style=""> PowerPoint </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{ppt}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="ps" src="http://www.dementia.org/twiki//view/ps.gif" title="ps" /></td>
+ <td bgcolor="#ffffff" style=""><code>ps.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Postscript </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{ps}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="py" src="http://www.dementia.org/twiki//view/py.gif" title="py" /></td>
+ <td bgcolor="#ffffff" style=""><code>py.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Python source code file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{py}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="ram" src="http://www.dementia.org/twiki//view/ram.gif" title="ram" /></td>
+ <td bgcolor="#ffffff" style=""><code>ram.gif</code></td>
+ <td bgcolor="#ffffff" style=""> RealAudio </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{ram}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="reg" src="http://www.dementia.org/twiki//view/reg.gif" title="reg" /></td>
+ <td bgcolor="#ffffff" style=""><code>reg.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Registry file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{reg}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="sh" src="http://www.dementia.org/twiki//view/sh.gif" title="sh" /></td>
+ <td bgcolor="#ffffff" style=""><code>sh.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Unix shell script </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{sh}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="sniff" src="http://www.dementia.org/twiki//view/sniff.gif" title="sniff" /></td>
+ <td bgcolor="#ffffff" style=""><code>sniff.gif</code></td>
+ <td bgcolor="#ffffff" style=""> sniff </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{sniff}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="swf" src="http://www.dementia.org/twiki//view/swf.gif" title="swf" /></td>
+ <td bgcolor="#ffffff" style=""><code>swf.gif</code></td>
+ <td bgcolor="#ffffff" style=""> SWF (Shockwave Flash) </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{swf}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="ttf" src="http://www.dementia.org/twiki//view/ttf.gif" title="ttf" /></td>
+ <td bgcolor="#ffffff" style=""><code>ttf.gif</code></td>
+ <td bgcolor="#ffffff" style=""> True Type font </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{ttf}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="txt" src="http://www.dementia.org/twiki//view/txt.gif" title="txt" /></td>
+ <td bgcolor="#ffffff" style=""><code>txt.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Text </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{txt}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="wav" src="http://www.dementia.org/twiki//view/wav.gif" title="wav" /></td>
+ <td bgcolor="#ffffff" style=""><code>wav.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Waveform sound file </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{wav}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="wri" src="http://www.dementia.org/twiki//view/wri.gif" title="wri" /></td>
+ <td bgcolor="#ffffff" style=""><code>wri.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Windows Write </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{wri}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="xls" src="http://www.dementia.org/twiki//view/xls.gif" title="xls" /></td>
+ <td bgcolor="#ffffff" style=""><code>xls.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Microsoft Excel Spreadsheet </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{xls}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="xml" src="http://www.dementia.org/twiki//view/xml.gif" title="xml" /></td>
+ <td bgcolor="#ffffff" style=""><code>xml.gif</code></td>
+ <td bgcolor="#ffffff" style=""> XML </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{xml}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="xsl" src="http://www.dementia.org/twiki//view/xsl.gif" title="xsl" /></td>
+ <td bgcolor="#ffffff" style=""><code>xsl.gif</code></td>
+ <td bgcolor="#ffffff" style=""> XSL (XML style sheet) </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{xsl}%</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><img alt="zip" src="http://www.dementia.org/twiki//view/zip.gif" title="zip" /></td>
+ <td bgcolor="#ffffff" style=""><code>zip.gif</code></td>
+ <td bgcolor="#ffffff" style=""> Compressed Zip archive </td>
+ <td bgcolor="#ffffff" style=""><code>%ICON{zip}%</code></td>
+ </tr>
+</table>
This page contains all documentation topics as one long, complete reference sheet.%BR% **_Doubleclick anywhere_** to return to the top of the page.
-Note - if you are reading this at twiki.org, then you are reading about the most recent code under development.%BR% If you want to read about the features on your local TWiki, then you should read the documentation there!
-
-**_Note:_** Read the most up to date version of this document at <http://TWiki.org/cgi-bin/view/TWiki/TWikiDocumentation>
-
-**_Related Topics:_** [[TWikiSite]], [[TWikiHistory]], [[TWikiPlannedFeatures]], [[TWikiEnhancementRequests]]
-
-----
+**_Related Topics:_** [[TWikiSite]], [[TWikiHistory]], [[TWikiPlannedFeatures]], [[TWikiEnhancementRequests]], [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
----
--- /dev/null
+# <a name="Package <code>TWiki="></a> Package =TWiki
+
+TWiki operates by creating a singleton object (known as the Session object) that acts as a point of reference for all the different modules in the system. This package is the class for this singleton, and also contains the vast bulk of the basic constants and the per- site configuration mechanisms.
+
+Global variables are avoided wherever possible to avoid problems with CGI accelerators such as mod\_perl.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki="> Package TWiki</a><ul>
+ <li><a href="#StaticMethod <strong>get_TWikiLibDir</strong> ("> StaticMethod getTWikiLibDir <tt>() -> $path</tt></a></li>
+ <li><a href="#ObjectMethod *_UTF82SiteCharSet*"> ObjectMethod UTF82SiteCharSet <tt>($utf8) -> $ascii</tt></a></li>
+ <li><a href="#ObjectMethod *write_CompletePage"> ObjectMethod writeCompletePage <tt>($text,$pageType,$contentType)</tt></a></li>
+ <li><a href="#ObjectMethod *write_PageHeader*"> ObjectMethod writePageHeader <tt>($query,$pageType,$contentType,$contentLength)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>redirect</strong> ($url,.."> ObjectMethod redirect <tt>($url,...)</tt></a></li>
+ <li><a href="#StaticMethod *is_ValidWikiWord*"> StaticMethod isValidWikiWord <tt>($name) -> $boolean</tt></a></li>
+ <li><a href="#StaticMethod *is_ValidTopicName*"> StaticMethod isValidTopicName <tt>($name) -> $boolean</tt></a></li>
+ <li><a href="#StaticMethod <strong>is_ValidAbbrev</strong> ($"> StaticMethod isValidAbbrev <tt>($name) -> $boolean</tt></a></li>
+ <li><a href="#StaticMethod <strong>is_ValidWebName</strong> ("> StaticMethod isValidWebName <tt>($name,$system) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod *read_OnlyMirrorWeb"> ObjectMethod readOnlyMirrorWeb <tt>($theWeb) -> ($mirrorSiteName,$mirrorViewURL,$mirrorLink,$mirrorNote)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getSkin</strong> () -> $st"> ObjectMethod getSkin <tt>() -> $string</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_ScriptUrl</strong> ($a"> ObjectMethod getScriptUrl <tt>($absolute,$script,$web,$topic,...) -> $scriptURL</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_PubUrl</strong> ($abso"> ObjectMethod getPubUrl <tt>($absolute,$web,$topic,$attachment) -> $url</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_IconUrl</strong> ($abs"> ObjectMethod getIconUrl <tt>($absolute,$iconName) -> $iconURL</tt></a></li>
+ <li><a href="#ObjectMethod *map_ToIconFileName"> ObjectMethod mapToIconFileName <tt>($fileName,$default) -> $fileName</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_OopsUrl</strong> ($tem"> ObjectMethod getOopsUrl <tt>($template,@options) -> $absoluteOopsURL</tt></a></li>
+ <li><a href="#ObjectMethod *normalize_WebTopic"> ObjectMethod normalizeWebTopicName <tt>($theWeb,$theTopic) -> ($theWeb,$theTopic)</tt></a></li>
+ <li><a href="#ClassMethod <strong>new</strong> ($remoteUser,$"> ClassMethod new <tt>($remoteUser,$query)</tt></a></li>
+ <li><a href="#ObjectMethod *finish*"> ObjectMethod finish <tt></tt></a></li>
+ <li><a href="#ObjectMethod <strong>writeLog</strong> ($action"> ObjectMethod writeLog <tt>($action,$webTopic,$extra,$user)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>writeWarning</strong> ($te"> ObjectMethod writeWarning <tt>($text)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>writeDebug</strong> ($text"> ObjectMethod writeDebug <tt>($text)</tt></a></li>
+ <li><a href="#StaticMethod *apply_PatternToInc"> StaticMethod applyPatternToIncludedText <tt>($text,$pattern) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>inlineAlert</strong> ($tem"> ObjectMethod inlineAlert <tt>($template,$def,...) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *expand_VariablesOn"> ObjectMethod expandVariablesOnTopicCreation <tt>($text,$user) -> $text</tt></a></li>
+ <li><a href="#StaticMethod <strong>entityEncode</strong> ($te"> StaticMethod entityEncode <tt>($text,$extras) -> $encodedText</tt></a></li>
+ <li><a href="#StaticMethod <strong>entityDecode</strong> ($en"> StaticMethod entityDecode <tt>($encodedText) -> $text</tt></a></li>
+ <li><a href="#StaticMethod <strong>urlEncode</strong> ($strin"> StaticMethod urlEncode <tt>($string) -> encodedstring</tt></a></li>
+ <li><a href="#StaticMethod <strong>urlDecode</strong> ($strin"> StaticMethod urlDecode <tt>($string) -> decodedstring</tt></a></li>
+ <li><a href="#StaticMethod <strong>isTrue</strong> ($value,$d"> StaticMethod isTrue <tt>($value,$default) -> $boolean</tt></a></li>
+ <li><a href="#StaticMethod *space_OutWikiWord*"> StaticMethod spaceOutWikiWord <tt>($word,$sep) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod <strong>enterContext</strong> ($id"> ObjectMethod enterContext <tt>($id,$val)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>leaveContext</strong> ($id"> ObjectMethod leaveContext <tt>($id)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>inContext</strong> ($id)"> ObjectMethod inContext <tt>($id)</tt></a></li>
+ <li><a href="#StaticMethod *register_TagHandle"> StaticMethod registerTagHandler <tt>($tag,$fnref)</tt></a><ul>
+ <li><a href="#registerRESTHandler( $subject, $"> registerRESTHandler( $subject, $verb, \&fn )</a></li>
+ <li><a href="#restDispatch( $subject, $verb) ="> restDispatch( $subject, $verb) => \&fn</a></li>
+ </ul>
+ </li>
+ <li><a href="#ObjectMethod *handle_CommonTags*"> ObjectMethod handleCommonTags <tt>($text,$web,$topic) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>add_ToHEAD</strong> ($id,$"> ObjectMethod addToHEAD <tt>($id,$html)</tt></a></li>
+ <li><a href="#StaticMethod <strong>initialize</strong> ($path"> StaticMethod initialize <tt>($pathInfo,$remoteUser,$topic,$url,$query) -> ($topicName,$webName,$scriptUrlPath,$userName,$dataDir)</tt></a></li>
+ <li><a href="#StaticMethod <strong>readFile</strong> ($filena"> StaticMethod readFile <tt>($filename) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>get_TWikiLibDir</strong> ("></a> [[StaticMethod]] **getTWikiLibDir** `() -> $path`
+
+STATIC method.
+
+Returns the full path of the directory containing TWiki.pm
+
+## <a name="ObjectMethod <strong>_UTF82SiteCharSet*"></a> [[ObjectMethod]] \*UTF82SiteCharSet `($utf8) -> $ascii`
+
+Auto-detect UTF-8 vs. site charset in string, and convert UTF-8 into site charset.
+
+## <a name="ObjectMethod <strong>write_CompletePage"></a> [[ObjectMethod]] \*writeCompletePage `($text,$pageType,$contentType)`
+
+Write a complete HTML page with basic header to the browser. $text is the HTML of the page body (<html> to </html>)
+
+This method removes noautolink and nop tags before outputting the page.
+
+## <a name="ObjectMethod <strong>write_PageHeader*"></a><a name="ObjectMethod *write_PageHeader</strong> "></a> [[ObjectMethod]] **writePageHeader** `($query,$pageType,$contentType,$contentLength)`
+
+All parameters are optional.
+
+- `$query` CGI query object | Session CGI query (there is no good reason to set this)
+- `$pageType` - May be "edit", which will cause headers to be generated that force caching for 24 hours, to prevent [[BackFromPreviewLosesText]] bug, which caused data loss with IE5 and IE6.
+- `$contentType` - page content type | text/html
+- `$contentLength` - content-length | no content-length will be set if this is undefined, as required by HTTP1.1
+
+Implements the post-Dec2001 release plugin API, which requires the writeHeaderHandler in plugin to return a string of HTTP headers, CR/LF delimited. Filters any illegal headers. Plugin headers will override core settings.
+
+## <a name="ObjectMethod <strong>redirect</strong> ($url,.."></a> [[ObjectMethod]] **redirect** `($url,...)`
+
+Generate a CGI redirect to $url unless (1) $session->\{cgiQuery\} is undef or (2) $query->param('noredirect') is set to a true value. Thus a redirect is only generated when in a CGI context.
+
+The ... parameters are concatenated to the message written when printing to STDOUT, and are ignored for a redirect.
+
+Redirects the request to $url, via the CGI module object $query unless overridden by a plugin declaring a `redirectCgiQueryHandler`.
+
+## <a name="StaticMethod <strong>is_ValidWikiWord*"></a><a name="StaticMethod *is_ValidWikiWord</strong> "></a> [[StaticMethod]] **isValidWikiWord** `($name) -> $boolean`
+
+Check for a valid [[WikiWord]] or [[WikiName]]
+
+## <a name="StaticMethod <strong>is_ValidTopicName*"></a> [[StaticMethod]] \*isValidTopicName `($name) -> $boolean`
+
+Check for a valid topic name
+
+## <a name="StaticMethod <strong>is_ValidAbbrev</strong> ($"></a> [[StaticMethod]] **isValidAbbrev** `($name) -> $boolean`
+
+Check for a valid ABBREV (acronym)
+
+## <a name="StaticMethod <strong>is_ValidWebName</strong> ("></a> [[StaticMethod]] **isValidWebName** `($name,$system) -> $boolean`
+
+STATIC Check for a valid web name. If $system is true, then system web names are considered valid (names starting with \_) otherwise only user web names are valid
+
+## <a name="ObjectMethod <strong>read_OnlyMirrorWeb"></a> [[ObjectMethod]] \*readOnlyMirrorWeb `($theWeb) -> ($mirrorSiteName,$mirrorViewURL,$mirrorLink,$mirrorNote)`
+
+If this is a mirrored web, return information about the mirror. The info is returned in a quadruple:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> site name </td>
+ <td> URL </td>
+ <td> link </td>
+ <td> note </td>
+ </tr>
+</table>
+
+## <a name="ObjectMethod <strong>getSkin</strong> () - $str"></a> [[ObjectMethod]] **getSkin** `() -> $string`
+
+Get the currently requested skin path
+
+## <a name="ObjectMethod <strong>get_ScriptUrl</strong> ($a"></a> [[ObjectMethod]] **getScriptUrl** `($absolute,$script,$web,$topic,...) -> $scriptURL`
+
+Returns the URL to a TWiki script, providing the web and topic as "path info" parameters. The result looks something like this: "http://host/twiki/bin/$script/$web/$topic".
+
+- `...` - an arbitrary number of name,value parameter pairs that will be url-encoded and added to the url. The special parameter name '#' is reserved for specifying an anchor. e.g. `getScriptUrl('x','y','view','#'=>'XXX',a=>1,b=>2)` will give `.../view/x/y#XXX?a=1&b=2`
+
+If $absolute is set, generates an absolute URL. $absolute is advisory only; TWiki can decide to generate absolute URLs (for example when run from the command-line) even when relative URLs have been requested.
+
+The default script url is taken from \{ScriptUrlPath\}, unless there is an exception defined for the given script in \{ScriptUrlPaths\}. Both \{ScriptUrlPath\} and \{ScriptUrlPaths\} may be absolute or relative URIs. If they are absolute, then they will always generate absolute URLs. if they are relative, then they will be converted to absolute when required (e.g. when running from the command line, or when generating rss). If $script is not given, absolute URLs will always be generated.
+
+If either the web or the topic is defined, will generate a full url (including web and topic). Otherwise will generate only up to the script name. An undefined web will default to the main web name.
+
+## <a name="ObjectMethod <strong>get_PubUrl</strong> ($abso"></a> [[ObjectMethod]] **getPubUrl** `($absolute,$web,$topic,$attachment) -> $url`
+
+Composes a pub url. If $absolute is set, returns an absolute URL. If $absolute is set, generates an absolute URL. $absolute is advisory only; TWiki can decide to generate absolute URLs (for example when run from the command-line) even when relative URLs have been requested.
+
+$web, $topic and $attachment are optional. A partial URL path will be generated if one or all is not given.
+
+## <a name="ObjectMethod <strong>get_IconUrl</strong> ($abs"></a> [[ObjectMethod]] **getIconUrl** `($absolute,$iconName) -> $iconURL`
+
+Map an icon name to a URL path.
+
+## <a name="ObjectMethod <strong>map_ToIconFileName"></a> [[ObjectMethod]] \*mapToIconFileName `($fileName,$default) -> $fileName`
+
+Maps from a filename (or just the extension) to the name of the file that contains the image for that file type.
+
+## <a name="ObjectMethod <strong>get_OopsUrl</strong> ($tem"></a> [[ObjectMethod]] **getOopsUrl** `($template,@options) -> $absoluteOopsURL`
+
+Composes a URL for an "oops" error page. The @options consists of a list of key => value pairs. The following keys are used:
+
+- `-web` - web name
+- `-topic` - topic name
+- `-def` - optional template def within the main template file
+- `-params` - a single parameter, or a reference to an array of parameters These are passed in the URL as '&param1=' etc.
+
+Do _not_ include the "oops" part in front of the template name.
+
+Alternatively you can pass a reference to an [[OopsException]] in place of the template. All other parameters will be ignored.
+
+The returned URL ends up looking something like this: "http://host/twiki/bin/oops/$web/$topic?template=$template&param1=$scriptParams[0]..."
+
+## <a name="ObjectMethod <strong>normalize_WebTopic"></a> [[ObjectMethod]] \*normalizeWebTopicName `($theWeb,$theTopic) -> ($theWeb,$theTopic)`
+
+Normalize a Web.TopicName
+
+ Input: Return:
+ ( 'Web', 'Topic' ) ( 'Web', 'Topic' )
+ ( '', 'Topic' ) ( 'Main', 'Topic' )
+ ( '', '' ) ( 'Main', 'WebHome' )
+ ( '', 'Web/Topic' ) ( 'Web', 'Topic' )
+ ( '', 'Web.Topic' ) ( 'Web', 'Topic' )
+ ( 'Web1', 'Web2.Topic' ) ( 'Web2', 'Topic' )
+ ( 'Main', 'Web2.Topic' ) ( 'Main', 'Topic' )
+ ( 'TWiki', 'Web2.Topic' ) ( 'TWiki', 'Topic' )
+
+Note: Function renamed from getWebTopic
+
+SMELL: WARNING: this function defaults the web and topic names. Be very careful where you use it!
+
+## <a name="ClassMethod <strong>new</strong> ($remoteUser,$"></a> [[ClassMethod]] **new** `($remoteUser,$query)`
+
+Constructs a new TWiki object. Parameters are taken from the query object.
+
+- `$remoteUser` the logged-in user (login name)
+- `$query` the query
+
+## <a name="ObjectMethod <strong>finish*"></a><a name="ObjectMethod *finish</strong> "></a> [[ObjectMethod]] **finish** ``
+
+Complete processing after the client's HTTP request has been responded to. Right now this only entails one activity: calling TWiki::Client to flushing the user's session (if any) to disk.
+
+## <a name="ObjectMethod <strong>writeLog</strong> ($action"></a> [[ObjectMethod]] **writeLog** `($action,$webTopic,$extra,$user)`
+
+- `$action` - what happened, e.g. view, save, rename
+- `$wbTopic` - what it happened to
+- `$extra` - extra info, such as minor flag
+- `$user` - user who did the saving (user object or string user name)
+
+Write the log for an event to the logfile
+
+## <a name="ObjectMethod <strong>writeWarning</strong> ($te"></a> [[ObjectMethod]] **writeWarning** `($text)`
+
+Prints date, time, and contents $text to $TWiki::cfg\{WarningFileName\}, typically 'warnings.txt'. Use for warnings and errors that may require admin intervention. Use this for defensive programming warnings (e.g. assertions).
+
+## <a name="ObjectMethod <strong>writeDebug</strong> ($text"></a> [[ObjectMethod]] **writeDebug** `($text)`
+
+Prints date, time, and contents of $text to $TWiki::cfg\{DebugFileName\}, typically 'debug.txt'. Use for debugging messages.
+
+## <a name="StaticMethod <strong>apply_PatternToInc"></a> [[StaticMethod]] \*applyPatternToIncludedText `($text,$pattern) -> $text`
+
+Apply a pattern on included text to extract a subset
+
+## <a name="ObjectMethod <strong>inlineAlert</strong> ($tem"></a> [[ObjectMethod]] **inlineAlert** `($template,$def,...) -> $string`
+
+Format an error for inline inclusion in rendered output. The message string is obtained from the template 'oops'.$template, and the DEF $def is selected. The parameters (...) are used to populate %PARAM1%..%PARAMn%
+
+## <a name="ObjectMethod <strong>expand_VariablesOn"></a> [[ObjectMethod]] \*expandVariablesOnTopicCreation `($text,$user) -> $text`
+
+- `$text` - text to expand
+- `$user` - reference to user object. This is the user expanded in e.g. %USERNAME. Optional, defaults to logged-in user.
+
+Expand limited set of variables during topic creation. These are variables expected in templates that must be statically expanded in new content.
+
+# SMELL: no plugin handler
+
+## <a name="StaticMethod <strong>entityEncode</strong> ($te"></a> [[StaticMethod]] **entityEncode** `($text,$extras) -> $encodedText`
+
+Escape special characters to HTML numeric entities. This is **not** a generic encoding, it is tuned specifically for use in TWiki.
+
+HTML4.0 spec: "Certain characters in HTML are reserved for use as markup and must be escaped to appear literally. The "<" character may be represented with an _entity_, **&lt;**. Similarly, ">" is escaped as **&gt;**, and "&" is escaped as **&amp;**. If an attribute value contains a double quotation mark and is delimited by double quotation marks, then the quote should be escaped as **&quot;**.
+
+Other entities exist for special characters that cannot easily be entered with some keyboards..."
+
+This method encodes HTML special and any non-printable ascii characters (except for \\n and \\r) using numeric entities.
+
+FURTHER this method also encodes characters that are special in TWiki meta-language.
+
+$extras is an optional param that may be used to include **additional** characters in the set of encoded characters. It should be a string containing the additional chars.
+
+## <a name="StaticMethod <strong>entityDecode</strong> ($en"></a> [[StaticMethod]] **entityDecode** `($encodedText) -> $text`
+
+Decodes all numeric entities (e.g. &#123;). _Does not_ decode named entities such as &amp; (use HTML::Entities for that)
+
+## <a name="StaticMethod <strong>urlEncode</strong> ($strin"></a> [[StaticMethod]] **urlEncode** `($string) -> encodedstring`
+
+Encode by converting characters that are illegal in URLs to their %NN equivalents. This method is used for encoding strings that must be embedded _verbatim_ in URLs; it cannot be applied to URLs themselves, as it escapes reserved characters such as = and ?.
+
+RFC 1738, Dec. '94:
+
+ >
+ ...Only alphanumerics [0-9a-zA-Z], the special
+ characters $-_.+!*'(), and reserved characters used for their
+ reserved purposes may be used unencoded within a URL.
+
+Reserved characters are $&+,/:;=?@ - these are _also_ encoded by this method.
+
+SMELL: For non-ISO-8859-1 $TWiki::cfg\{Site\}\{CharSet\}, need to convert to UTF-8 before URL encoding. This encoding only supports 8-bit character codes.
+
+## <a name="StaticMethod <strong>urlDecode</strong> ($strin"></a> [[StaticMethod]] **urlDecode** `($string) -> decodedstring`
+
+Reverses the encoding done in urlEncode.
+
+## <a name="StaticMethod <strong>isTrue</strong> ($value,$d"></a> [[StaticMethod]] **isTrue** `($value,$default) -> $boolean`
+
+Returns 1 if `$value` is true, and 0 otherwise. "true" means set to something with a Perl true value, with the special cases that "off", "false" and "no" (case insensitive) are forced to false. Leading and trailing spaces in `$value` are ignored.
+
+If the value is undef, then `$default` is returned. If `$default` is not specified it is taken as 0.
+
+## <a name="StaticMethod <strong>space_OutWikiWord*"></a> [[StaticMethod]] \*spaceOutWikiWord `($word,$sep) -> $string`
+
+Spaces out a wiki word by inserting a string (default: one space) between each word component. With parameter $sep any string may be used as separator between the word components; if $sep is undefined it defaults to a space.
+
+## <a name="ObjectMethod <strong>enterContext</strong> ($id"></a> [[ObjectMethod]] **enterContext** `($id,$val)`
+
+Add the context id $id into the set of active contexts. The $val can be anything you like, but should always evaluate to boolean TRUE.
+
+An example of the use of contexts is in the use of tag expansion. The commonTagsHandler in plugins is called every time tags need to be expanded, and the context of that expansion is signalled by the expanding module using a context id. So the forms module adds the context id "form" before invoking common tags expansion.
+
+Contexts are not just useful for tag expansion; they are also relevant when rendering.
+
+Contexts are intended for use mainly by plugins. Core modules can use $session->inContext( $id ) to determine if a context is active.
+
+## <a name="ObjectMethod <strong>leaveContext</strong> ($id"></a> [[ObjectMethod]] **leaveContext** `($id)`
+
+Remove the context id $id from the set of active contexts. (see `enterContext` for more information on contexts)
+
+## <a name="ObjectMethod <strong>inContext</strong> ($id)"></a> [[ObjectMethod]] **inContext** `($id)`
+
+Return the value for the given context id (see `enterContext` for more information on contexts)
+
+## <a name="StaticMethod <strong>register_TagHandle"></a> [[StaticMethod]] \*registerTagHandler `($tag,$fnref)`
+
+STATIC Add a tag handler to the function tag handlers.
+
+- `$tag` name of the tag e.g. MYTAG
+- `$fnref` Function to execute. Will be passed ($session, \\%params, $web, $topic )
+
+### <a name="registerRESTHandler( $subject, $"></a> registerRESTHandler( $subject, $verb, \\&fn )
+
+Adds a function to the dispatch table of the REST interface for a given subject. See [[TWikiScripts#rest]] for more info.
+
+- `$subject` - The subject under which the function will be registered.
+- `$verb` - The verb under which the function will be registered.
+- `\&fn` - Reference to the function.
+
+The handler function must be of the form:
+
+ sub handler(\%session,$subject,$verb) -> $text
+
+where:
+
+- `\%session` - a reference to the TWiki session object (may be ignored)
+- `$subject` - The invoked subject (may be ignored)
+- `$verb` - The invoked verb (may be ignored)
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="restDispatch( $subject, $verb) ="></a> restDispatch( $subject, $verb) => \\&fn
+
+Returns the handler function associated to the given $subject and $werb, or undef if none is found.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+## <a name="ObjectMethod <strong>handle_CommonTags*"></a> [[ObjectMethod]] \*handleCommonTags `($text,$web,$topic) -> $text`
+
+Processes %VARIABLE%, and %TOC% syntax; also includes 'commonTagsHandler' plugin hook.
+
+Returns the text of the topic, after file inclusion, variable substitution, table-of-contents generation, and any plugin changes from commonTagsHandler.
+
+## <a name="ObjectMethod <strong>add_ToHEAD</strong> ($id,$"></a> [[ObjectMethod]] **addToHEAD** `($id,$html)`
+
+Add `$html` to the HEAD tag of the page currently being generated.
+
+Note that TWiki variables may be used in the HEAD. They will be expanded according to normal variable expansion rules.
+
+The 'id' is used to ensure that multiple adds of the same block of HTML don't result in it being added many times.
+
+## <a name="StaticMethod <strong>initialize</strong> ($path"></a> [[StaticMethod]] **initialize** `($pathInfo,$remoteUser,$topic,$url,$query) -> ($topicName,$webName,$scriptUrlPath,$userName,$dataDir)`
+
+Return value: ( $topicName, $webName, $TWiki::cfg\{ScriptUrlPath\}, $userName, $TWiki::cfg\{DataDir\} )
+
+Static method to construct a new singleton session instance. It creates a new TWiki and sets the Plugins $SESSION variable to point to it, so that TWiki::Func methods will work.
+
+This method is **DEPRECATED** but is maintained for script compatibility.
+
+Note that $theUrl, if specified, must be identical to $query->url()
+
+## <a name="StaticMethod <strong>readFile</strong> ($filena"></a> [[StaticMethod]] **readFile** `($filename) -> $text`
+
+Returns the entire contents of the given file, which can be specified in any format acceptable to the Perl open() function. Fast, but inherently unsafe.
+
+WARNING: Never, ever use this for accessing topics or attachments! Use the Store API for that. This is for global control files only, and should be used **only** if there is **absolutely no alternative**.
TWiki is distributed under the [[GnuGeneralPublicLicense]]. You can get the source from <http://TWiki.org/download.html>.
-**_Back to:_** [[TWikiFAQ]]
-
--- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Back to:_** [[TWikiFAQ]], [[AdminDocumentationCategory]]
- Please bring your enhancement requests to TWiki:Codev.FeatureEnhancementRequest
-**Related Topics**
+**_Related Topics:_**
- [[TWikiHistory]] has a list of added features in TWiki.
- [[TWikiPlannedFeatures]] has a list of planned features.
- [[TWikiDocumentation]] is the implementation documentation.
-
--- TWiki:Main.PeterThoeny - 23 Jan 2003
# <a name="TWiki Installation Error"></a> TWiki Installation Error
-Incorrect format of search template (missing sections? There should be 4 %SPLIT% tags)
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
**_NOTE:_** The most recent version of this FAQ is at TWiki:TWiki/TWikiFAQ.
**_%RED%NOTE:%ENDCOLOR%_** The FAQs here are for frequently asked questions **_including_** answers; please ask support questions in the TWiki:Support web. New FAQ topics are based on the [[TWikiFaqTemplate]].
-<form action="http://www.dementia.org/twiki//edit/%WEB%/"> New FAQ topic: (Use a name in [[TWiki/WikiNotation]]) <br /><input name="topic" size="32" type="text" /> <input name="onlywikiname" type="hidden" value="on" /> <input name="templatetopic" type="hidden" value="TWikiFaqTemplate" /> <input name="topicparent" type="hidden" value="%TOPIC%" /> <input type="submit" value="Create Topic" /><br />
+<form action="http://www.dementia.org/twiki/edit/%WEB%/"> New FAQ topic: (Use a name in [[TWiki/WikiNotation]]) <br /><input name="topic" size="32" type="text" /> <input type="submit" value="Create Topic" /> <input name="onlywikiname" type="hidden" value="on" /> <input name="templatetopic" type="hidden" value="TWikiFaqTemplate" /> <input name="topicparent" type="hidden" value="%TOPIC%" /><br />
</form>
## <a name="More sources..."></a> More sources...
- [[WikiSyntax]], [[TextFormattingRules]]: A quick one-two guide to TWiki shorthand basics
- [[TextFormattingFAQ]]: Answers to frequently asked questions about text styling in TWiki
- If you can't find an answer, ask a question - post it in the TWiki:Support web
-
--- TWiki:Main.PeterThoeny - 26 Nov 2000 %BR% -- TWiki:Main.MikeMannix - 13 Sep 2001
--- /dev/null
+# <a name="Package <code>TWiki::Form="></a> Package =TWiki::Form
+
+Object representing a single form definition.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Form="> Package TWiki::Form</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session,$web"> ClassMethod new <tt>($session,$web,$form)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>render_ForEdit</strong> ($"> ObjectMethod renderForEdit <tt>($web,$topic,$meta,$useDefaults) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod *render_FieldForEdi"> ObjectMethod renderFieldForEdit <tt>($fieldDef,$web,$topic,$value) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod <strong>renderHidden</strong> ($me"> ObjectMethod renderHidden <tt>($meta,$useDefaults) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod <strong>cgiName</strong> ($field)"> ObjectMethod cgiName <tt>($field) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *get_FieldValuesFro"> ObjectMethod getFieldValuesFromQuery <tt>($query,$metaObject,$handleMandatory) -> $metaObject</tt></a></li>
+ <li><a href="#ObjectMethod *is_TextMergeable*"> ObjectMethod isTextMergeable <tt>($name) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getField</strong> ($name)"> ObjectMethod getField <tt>($name) -> \%row</tt></a></li>
+ <li><a href="#StaticMethod *render_ForDisplay*"> StaticMethod renderForDisplay <tt>($templates,$meta)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session,$web"></a> [[ClassMethod]] **new** `($session,$web,$form)`
+
+- $web - default web to recover form from, if $form doesn't specify a web
+- `$form` - topic name to read form definition from
+
+May throw TWiki::OopsException
+
+## <a name="ObjectMethod <strong>render_ForEdit</strong> ($"></a> [[ObjectMethod]] **renderForEdit** `($web,$topic,$meta,$useDefaults) -> $html`
+
+- `$web` the web of the topic being rendered
+- `$topic` the topic being rendered
+- `$meta` the meta data for the form
+- `$useDefaults` if true, will use default values from the form definition if no other value is given
+
+Render the form fields for entry during an edit session, using data values from $meta
+
+## <a name="ObjectMethod <strong>render_FieldForEdi"></a> [[ObjectMethod]] \*renderFieldForEdit `($fieldDef,$web,$topic,$value) -> $html`
+
+- `$fieldDef` the field being rendered
+- `$web` the web of the topic being rendered
+- `$topic` the topic being rendered
+- `$value` the current value of the field
+
+Render a single form field for entry during an edit session, using data values from $meta. Plugins can provide a handler that extends the set of supported types
+
+SMELL: this should be a method on a field class SMELL: [[JSCalendarContrib]] ought to provide a 'date' handler.
+
+## <a name="ObjectMethod <strong>renderHidden</strong> ($me"></a> [[ObjectMethod]] **renderHidden** `($meta,$useDefaults) -> $html`
+
+- `$useDefaults` if true, will use default values from the form definition if no other value is given
+
+Render form fields found in the meta as hidden inputs, so they pass through edits untouched.
+
+## <a name="ObjectMethod <strong>cgiName</strong> ($field)"></a><a name="ObjectMethod <strong>cgiName</strong> ($field) "></a> [[ObjectMethod]] **cgiName** `($field) -> $string`
+
+Generate the 'name' of the CGI parameter used to represent a field.
+
+## <a name="ObjectMethod <strong>get_FieldValuesFro"></a> [[ObjectMethod]] \*getFieldValuesFromQuery `($query,$metaObject,$handleMandatory) -> $metaObject`
+
+Extract new values for form fields from a query.
+
+- `$query` - the query
+- `$metaObject` - the meta object that is storing the form values
+- `$handleMandatory` - if set, will throw an [[OopsException]] if any mandatory fields are absent from the query.
+
+For each field, if there is a value in the query, use it. Otherwise if there is already entry for the field in the meta, keep it. Otherwise, if $handleMandatory, initialise the field to '' and set it in the meta.
+
+## <a name="ObjectMethod <strong>is_TextMergeable*"></a><a name="ObjectMethod *is_TextMergeable</strong> "></a> [[ObjectMethod]] **isTextMergeable** `($name) -> $boolean`
+
+- `$name` - name of a form field (value of the `name` attribute)
+
+Returns true if the type of the named field allows it to be text-merged.
+
+If the form does not define the field, it is assumed to be mergeable.
+
+## <a name="ObjectMethod <strong>getField</strong> ($name)"></a><a name="ObjectMethod <strong>getField</strong> ($name) "></a> [[ObjectMethod]] **getField** `($name) -> \%row`
+
+- `$name` - name of a form field (value of the `name` attribute)
+
+Returns the field, or undef if the form does not define the field.
+
+## <a name="StaticMethod <strong>render_ForDisplay*"></a> [[StaticMethod]] \*renderForDisplay `($templates,$meta)`
+
+- `$templates` ref to templates singleton
+- `$meta` - meta object containing the form to be rendered
+
+Static because we want to be able to do this without a form definition.
+
+SMELL: Why? Is reading the form topic such a big burden?
<li><a href="#Overview"> Overview</a></li>
<li><a href="#Defining a Form Template"> Defining a Form Template</a><ul>
<li><a href="#Form Template Elements"> Form Template Elements</a></li>
- <li><a href="#Defining a Form in One Topic"> Defining a Form in One Topic</a></li>
- <li><a href="#Defining a Form with Multiple To"> Defining a Form with Multiple Topics</a></li>
+ <li><a href="#Defining a Form"> Defining a Form</a></li>
</ul>
</li>
<li><a href="#Enabling Forms by Web"> Enabling Forms by Web</a></li>
- <li><a href="#Including Forms in New Topics"> Including Forms in New Topics</a></li>
- <li><a href="#Setting Up Multiple Form Options"> Setting Up Multiple Form Options</a></li>
- <li><a href="#Form Data Storage"> Form Data Storage</a></li>
- <li><a href="#Using Form Data"> Using Form Data</a></li>
- <li><a href="#Main Changes from Category Table"> Main Changes from Category Tables</a><ul>
- <li><a href="#Importing Category Table Data"> Importing Category Table Data</a></li>
- </ul>
- </li>
- <li><a href="#Using Forms For Settings"> Using Forms For Settings</a></li>
+ <li><a href="#Add a form to a topic"> Add a form to a topic</a></li>
+ <li><a href="#Build an HTML form to create new"> Build an HTML form to create new Form-based topics</a></li>
+ <li><a href="#Changing a form"> Changing a form</a></li>
+ <li><a href="#Searching for Form Data"> Searching for Form Data</a></li>
+ <li><a href="#Extending the range of form data"> Extending the range of form data types</a></li>
+ <li><a href="#Gotcha!"> Gotcha!</a></li>
+ <li><a href="#Importing Category Table Data"> Importing Category Table Data</a></li>
</ul>
</li>
</ul>
# <a name="TWiki Forms"></a> TWiki Forms
-_Form-based input in topics, with name/value pairs stored as Meta Data variables; choose one of multiple forms per web & topic_
+_Add structure to content with forms attached to twiki topics. TWiki forms (with form fields) and formatted search are the base for building database applications._
## <a name="Overview"></a> Overview
-By adding form-based input to freeform content, you can structure topics with unlimited, easily searchable categories. When forms are enabled for a web and selected in a topic, a single form appears in edit mode, and the contents are rendered as a table when viewed on the display page. You can define unlimited forms per web. For each topic, you can select a template if more than one is defined, or remove forms entirely. Form input values are stored as [[TWikiMetaData]]; all data is saved.
+By adding form-based input to freeform content, you can structure topics with unlimited, easily searchable categories. A form is enabled for a web and can be added to a topic. The form data is shown in tabular format when the topic is viewed, and can be changed in edit mode using edit fields, radio buttons, check boxes and list boxes. Many different form types can be defined in a web, though a topic can only have only form attached to it at a time.
-Form Templates replace TWikiCategoryTables from the 01-Dec-2000 version of TWiki. - see [[#FormsVsCategoryTables|Main/WebHome#FormsVsCategoryTables]]
+Typical steps to build an application based on TWiki forms:
+
+1. Define a form template
+2. Enable the form for a web
+3. Add the form to a [[template topic|Main/TWikiTemplates#Template_Topics]]
+4. Build an HTML form to create new topics based on that template topic
+5. Build a [[FormattedSearch]] to list topics that share the same form
## <a name="Defining a Form Template"></a> Defining a Form Template
-A Form Template is simply a page containing your form, defined as a table where each row is one form field.
+A Form Template specifies the fields in a form. A Form Template is simply a page containing a TWiki table, where each row of the table is one form field.
### <a name="Form Template Elements"></a> Form Template Elements
-- **form template** - a set of fields defining a form (replaces _category table definition_)
+- **form template** - a set of fields defining a form
- A web can use one or more form templates
-- **form** - a topic containing additional meta data (besides the freeform TEXTAREA) that categorizes the content (replaces _category table_)
+- **form** - additional meta data (besides the freeform TEXTAREA) attached to a topic
- Within a form-enabled web, individual topics can have a form or no form
-- **form field** - a named item in a form (replaces _category item name_)
-- **field type** - selects the INPUT type: <table border="1" cellpadding="0" cellspacing="0">
+- **form field** - a named item in a form (also known as a _key_)
+- **field type** - selects the field type: <table border="1" cellpadding="0" cellspacing="0">
<tr>
<th bgcolor="#99CCCC"><strong> Input type </strong></th>
<th bgcolor="#99CCCC"><strong> Type field </strong></th>
<tr>
<td> One or more checkboxes </td>
<td><code>checkbox</code></td>
- <td> number of checkboxes per line </td>
- <td> comma list of checkbox labels </td>
+ <td> number of items per line </td>
+ <td> comma list of item labels </td>
</tr>
<tr>
<td> One or more checkboxes, plus <strong>Set</strong> and <strong>Clear</strong> buttons </td>
<td> (same) </td>
</tr>
<tr>
- <td> Read-only label text </td>
- <td><code>label</code></td>
- <td><code>1</code></td>
- <td> (unused) </td>
+ <td> One or more radio buttons (radio buttons are mutually exclusive; only one can be selected) </td>
+ <td><code>radio</code></td>
+ <td> (same) </td>
+ <td> (same) </td>
</tr>
<tr>
- <td> One or more radio buttons </td>
- <td><code>radio</code></td>
- <td> number of radio buttons per line </td>
- <td> comma list of checkbox labels </td>
+ <td> Read-only label text </td>
+ <td><code>label</code></td>
+ <td><em>ignored</em></td>
+ <td> text </td>
</tr>
<tr>
<td> Drop-down menu or scrollable box </td>
<td><code>select</code></td>
<td><code>1</code> for drop down, <code>2</code> and up for scrollable box </td>
- <td> comma list of options </td>
+ <td> comma-separated list of options </td>
</tr>
<tr>
<td> A one-line text field </td>
<td><code>text</code></td>
<td> text box width in number of characters </td>
- <td> (unused) </td>
+ <td> initial text, if a new topic is created with a form template </td>
</tr>
<tr>
- <td> A text box; size is 40x10 (columns x rows) </td>
+ <td> A text box </td>
<td><code>textarea</code></td>
- <td> columns x rows, e.g. <code>40x6</code></td>
- <td> (unused) </td>
+ <td> columns x rows, e.g. <code>80x6</code>; default size is 40x5 </td>
+ <td> initial text, if a new topic is created with a form template </td>
</tr>
</table>
-- **field value** - one or more values from a fixed set (select, checkbox, radio type) or free-form (text). (replaces _category item value_)
+- **field value** - one or more values from a fixed set (select, checkbox, radio type) or free-form (label, text, text area).
-### <a name="Defining a Form in One Topic"></a> Defining a Form in One Topic
+### <a name="Defining a Form"></a> Defining a Form
-1. Create a new topic with your form name: <code>**YourForm**</code>, <code>**ExpenseReport**</code>, <code>**InfoCategory**</code>, <code>**RecordReview**</code>, whatever you need.
-2. Create a TWiki table, with each column head representing one element of an entry field: <code>**Name**</code>, <code>**Type**</code>, <code>**Size**</code>, <code>**Values**</code>, and <code>**Tooltip message**</code> _(see sample below)_.
+1. Create a new topic with your form name: <code>**YourForm**</code>, <code>**ExpenseReportForm**</code>, <code>**InfoCategoryForm**</code>, <code>**RecordReviewForm**</code>, whatever you need.
+2. Create a TWiki table, with each column head representing one element of an entry field: <code>**Name**</code>, <code>**Type**</code>, <code>**Size**</code>, <code>**Values**</code>, <code>**Tooltip message**</code>, and <code>**Attributes**</code> _(see sample below)_.
3. For each field, fill in a new line; for the type of field, select from the list.
4. Save the topic _(you can later choose to [[enable/disable|Main/WebHome#EnablingForms]] individual forms)_.
-> **Example:**
->
-> <code>**WebForm**</code>
+> **Example: WebForm**
>
> %BR%
>
-> `| *Name* | *Type* | *Size* | *Values* | *Tooltip message* |`
+> `| *Name* | *Type* | *Size* | *Values* | *Tooltip message* | *Attributes* |`
>
> %BR%
>
-> `| TopicClassification | select | 1 | NoDisclosure, PublicSupported, PublicFAQ | blah blah... |`
+> `| TopicClassification | select | 1 | NoDisclosure, PublicSupported, PublicFAQ | blah blah... | |`
>
> %BR%
>
-> `| OperatingSystem | checkbox | 3 | OsHPUX, OsLinux, OsSolaris, OsWin | blah blah... |`
+> `| OperatingSystem | checkbox | 3 | OsHPUX, OsLinux, OsSolaris, OsWin | blah blah... | |`
>
> %BR%
>
-> `| OsVersion | text | 16 | | blah blah... |`
+> `| OsVersion | text | 16 | | blah blah... | |`
>
> <table border="1" cellpadding="0" cellspacing="0">
> <tr>
> <th bgcolor="#99CCCC"><strong> Size </strong></th>
> <th bgcolor="#99CCCC"><strong> Values </strong></th>
> <th bgcolor="#99CCCC"><strong> Tooltip message </strong></th>
+> <th bgcolor="#99CCCC"><strong> Attributes </strong></th>
> </tr>
> <tr>
-> <td><a href="http://www.dementia.org/twiki//view/Sandbox/TopicClassification">TopicClassification</a></td>
+> <td>[[Sandbox/TopicClassification]]</td>
> <td> select </td>
> <td align="center"> 1 </td>
-> <td><a href="http://www.dementia.org/twiki//view/Sandbox/NoDisclosure">NoDisclosure</a>, <a href="http://www.dementia.org/twiki//view/Sandbox/PublicSupported">PublicSupported</a>, <a href="http://www.dementia.org/twiki//view/Sandbox/PublicFAQ">PublicFAQ</a></td>
+> <td>[[Sandbox/NoDisclosure]], [[Sandbox/PublicSupported]], [[Sandbox/PublicFAQ]]</td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> <tr>
-> <td><a href="http://www.dementia.org/twiki//view/Sandbox/OperatingSystem">OperatingSystem</a></td>
+> <td>[[Sandbox/OperatingSystem]]</td>
> <td> checkbox </td>
> <td align="center"> 3 </td>
-> <td><a href="http://www.dementia.org/twiki//view/Sandbox/OsHPUX">OsHPUX</a>, <a href="http://www.dementia.org/twiki//view/Sandbox/OsLinux">OsLinux</a>, <a href="http://www.dementia.org/twiki//view/Sandbox/OsSolaris">OsSolaris</a>, <a href="http://www.dementia.org/twiki//view/Sandbox/OsWin">OsWin</a></td>
+> <td>[[Sandbox/OsHPUX]], [[Sandbox/OsLinux]], [[Sandbox/OsSolaris]], [[Sandbox/OsWin]]</td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> <tr>
-> <td><a href="http://www.dementia.org/twiki//view/Sandbox/OsVersion">OsVersion</a></td>
+> <td>[[Sandbox/OsVersion]]</td>
> <td> text </td>
> <td align="center"> 16 </td>
> <td> </td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> </table>
-### <a name="Defining a Form with Multiple To"></a> Defining a Form with Multiple Topics
-
-Forms can also be defined by using form templates that retrieve field values from one or more separate topics:
+You can also retrieve possible values for select, checkbox or radio types from other topics:
-- A <code>**FormTemplate**</code> topic defines the Form, ex: <code>**YourFormTemplate**</code>.
-- For each field that has a value list - select, radio, checkbox - can use separate topic to define the available values.
-
-> **Example: WebFormTemplate**
+> **Example: WebForm**
>
-> - WebFormTemplate main definition: <br /> <table border="1" cellpadding="0" cellspacing="0">
+> - In the WebForm topic, define the form: <br /><table border="1" cellpadding="0" cellspacing="0">
> <tr>
> <th bgcolor="#99CCCC"><strong> Name </strong></th>
> <th bgcolor="#99CCCC"><strong> Type </strong></th>
> <th bgcolor="#99CCCC"><strong> Size </strong></th>
> <th bgcolor="#99CCCC"><strong> Values </strong></th>
> <th bgcolor="#99CCCC"><strong> Tooltip message </strong></th>
+> <th bgcolor="#99CCCC"><strong> Attributes </strong></th>
> </tr>
> <tr>
> <td> TopicClassification </td>
> <td> 1 </td>
> <td> </td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> <tr>
> <td> OperatingSystem </td>
> <td> 3 </td>
> <td> </td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> <tr>
> <td> OsVersion </td>
> <td> 16 </td>
> <td> </td>
> <td> blah blah... </td>
+> <td> </td>
> </tr>
> </table>
> <br /> %X% Leave the <code>**Values**</code> field **blank**.
>
-> - TopicClassification field value definition: <br /> <table border="1" cellpadding="0" cellspacing="0">
+> - Then in the TopicClassification topic, define the possible values: <br /><table border="1" cellpadding="0" cellspacing="0">
> <tr>
> <th bgcolor="#99CCCC"><strong> Name </strong></th>
> <th bgcolor="#99CCCC"><strong> Type </strong></th>
> <td> blah blah... </td>
> </tr>
> <tr>
-> <td> PublicSupported </td>
+> <td> Public Supported </td>
> <td> option </td>
> <td> blah blah... </td>
> </tr>
> <tr>
-> <td> PublicFAQ </td>
+> <td> Public FAQ </td>
> <td> option </td>
> <td> blah blah... </td>
> </tr>
> </table>
-- **Implementation Notes:** This format allows you to define field items with or without [[WikiNames]], depending on your needs.
- - Topics can be protected in the usual manner, using [[TWikiAccessControl]], to limit who can change the form template and/or individual value lists.
- - <code>**\[[...]]**</code> links can be used to force a link (at present, the <code>**\[[...]\[...]]**</code> format is not supported).
- - The <code>**Tooltip message**</code> column is used as a tooltip for the field name (only if field name is a [[WikiName]]) - you only see the tooltip In edit.
- - The first item in the list is the default item. Alternative initial values can be set in a topic template, like <code>**WebTopicEditTemplate**</code>, with <code>**field=value**</code>, or, for checkboxes, <code>**field=1**</code>.
- - The topic definition is not read when a topic is viewed.
+Field values can also be obtained as the result of a [[FormattedSearch]]. For example,
+
+> `%SEARCH{"Office$" scope="topic" web="%MAINWEB%" nototal="on" nosummary="on" nosearch="on" regex="on" format="$web.$topic" separator=", " }%`
+
+when used in the value field of the form definition, will take the set of field values to be all topic names in the Main web which end in "Office".
+
+**Notes:**
+
+- A very few field names are reserved. If you try to use one of these names, TWiki will automatically append an underscore to the name when the form is used.
+- The field value will be used to initialize a field when a form is created, unless specific values are given by the topic template or query parameters. The first item in the list for a select or radio type is the default item. For `label`, `text`, and `textarea` fields the value may also contain commas. `checkbox` fields cannot be initialized through the form template.
+- If a `label` field has no name (blank first column in the form definition) it will **not** be shown when the form is **viewed**, only when it is **edited**.
+- The topic definition is not read when a topic is viewed.
+- Field names can include any text, but you should stick to alphanumeric characters. If you want to use a non-wikiname for a `select`, `checkbox` or `radio` field, and want to get the values from another topic, you can use <code>**\[[...]]**</code> links. This notation can also be used when referencing another topic to obtain field values, but a name other than the topic name is required as the name of the field.
+- Field names have to be unique. If the same name is necessary (as when the field values for several fields are obtained from the same topic), an alternative name must be assigned using the <code>**\[[...]]**</code> notation.
+- The topic defining field values can also be generated through a [[FormattedSearch]], which must yield a suitable table as the result.
+- Form definition topics can be protected in the usual manner, using [[TWikiAccessControl]], to limit who can change the form template and/or individual value lists. Note that view access is required to be able to edit topics that use the form definition, though view access to the form definition is _not_ required to view a topic where the form has been used.
+- The <code>**Tooltip message**</code> column is used as a tooltip for the field name (only if field name is a [[WikiName]]) - you only see the tooltip in edit view.
+- The <code>**Attributes**</code> column is used to define special behavior for that form field (multiple attributes can be entered, with or without separators):
+ - An attribute `H` indicates that this field should not be shown in view mode. However, the field is available for editing and storing information.
+ - An attribute `M` indicates that this field is mandatory. The topic cannot be saved unless a value is provided for this field. If the field is found empty during topic save, an error is raised and the user is redirected to an `oops` page. Mandatory fields are indicated by an asterisks next to the field name.
<a name="EnablingForms"></a>
## <a name="Enabling Forms by Web"></a> Enabling Forms by Web
-Forms are enabled on a per web basis. The <code>**WEBFORMS**</code> variable in [[WebPreferences]] is optional and defines a list of possible form templates. Example:
+Forms have to be enabled for each individual web. The <code>**WEBFORMS**</code> variable in [[WebPreferences]] is optional and defines a list of possible form templates.
-- Set WEBFORMS = BugForm, FeatureForm, BookLoanForm
+> **Example:**
+>
+> - Set WEBFORMS = BugForm, FeatureForm, Books.BookLoanForm
- With <code>**WEBFORMS**</code> enabled, an extra button is added to the edit view. If the topic doesn't have a Form, an **Add Form** button appears at the end of the topic. If a Form is present, a **Change** button appears in the top row of the Form. The buttons open a screen that enables selection of a form specified in `WEBFORMS`, or the **No form** option.
-## <a name="Including Forms in New Topics"></a> Including Forms in New Topics
+## <a name="Add a form to a topic"></a> Add a form to a topic
-- A default Form Template (new topics get this default form) can be provided by creating the `WebTopicEditTemplate` topic in a web and adding a form to it. Initial Form values can be set there.
+- Edit a topic and follow the "Add form" button to add a Form to the topic. This is typically done to a [[template topic|Main/TWikiTemplates#TemplateTopic]], either to the `WebTopicEditTemplate` topic in a web, or a new topic that serves as an application specific template topic. Initial Form values can be set there.
-- Additionally a new topic can be given a Form using the `formtemplate` parameter in the URL. Initial values can then be provided in the URLs or as form values:
+- Additionally a new topic can be given a Form using the `formtemplate` parameter in the (edit or save) URL. Initial values can then be provided in the URLs or as form values:
- other than checkboxes: <code>**name**</code>, ex: <code>**?BugPriority=1**</code>
- checkbox: <code>**namevalue=1**</code>, ex: <code>**?ColorRed=1**</code>. <br /> Boxes with a tick must be specified.
+ - Example: This will add a textfield for the new topic name and a "Create"-Button to your topic. When the button is pressed, the topic editor will open with the form "MyForm" already attached to the new topic.
+ <form name="newtopic" action="%SCRIPTURLPATH{"edit"}%/%WEB%/">
+ <input type="hidden" name="formtemplate" value="MyForm" />
+ New topic name <input type="text" name="topic" size="40" />
+ <input type="submit" value="Create" />
+ </form>
+- **_%T% Tip:_** For TWiki applications you can [[automatically generate unique topicnames|Main/TWikiTemplates#AutomaticallyGeneratedTopicname]].
-## <a name="Setting Up Multiple Form Options"></a> Setting Up Multiple Form Options
-
-- The optional <code>**WEBFORMS**</code> variable defines alternative forms that can be selected by pressing **Change** in edit mode.
+- **_%X% Note:_** Initial values will not be submitted to the form of a new topic if you only use the formtemplate parameter.
-- A topic template can use any form.
+## <a name="Build an HTML form to create new"></a> Build an HTML form to create new Form-based topics
-- New topics with a form are created by simple HTML forms asking for a topic name. For example, you can have a `SubmitExpenseReport` topic where you can create new expense reports, a `SubmitVacationRequest` topic, and so on. These can specify the required template topic with its associated form.
+- New topics with a form are created by simple HTML forms asking for a topic name. For example, you can have a `SubmitExpenseReport` topic where you can create new expense reports, a `SubmitVacationRequest` topic, and so on. These can specify the required template topic with its associated form. [[Template topics|Main/TWikiTemplates#TemplateTopics]] has more.
-## <a name="Form Data Storage"></a> Form Data Storage
+## <a name="Changing a form"></a> Changing a form
-The form topic name, fields and values are stored as [[TWikiMetaData]] - the order of the field/value pairs is the same as in the template.
+- You can change a form definition, and TWiki will try to make sure you don't lose any data from the topics that use that form.
-<a name="UsingFormData"></a>
+- If you change the form definition, the changes will not take affect in a topic that uses that form until you edit and save it.
-## <a name="Using Form Data"></a> Using Form Data
+- If you add a new field to the form, then it will appear next time you edit a topic that uses the form.
-[[TWikiForms]] accept user-input data, stored as [[TWikiMetaData]]. Meta data also contains program-generated info about changes, attachments, etc. To find, format and display form and other meta data, see [[TWikiMetaData]], <code>**SEARCH**</code> and <code>**METASEARCH**</code> variables in [[TWikiVariables]], and [[TWiki Formatted Search|Main/FormattedSearch]] for various options.
+- If you delete a field from the form, or change a field name, then the data will not be visible when you edit the topic (the changed form definition will be used). **If you save the topic, the old data will be lost** (though thanks to revision control, you can always see it in older versions of the topic)
-<a name="FormsVsCategoryTables"></a>
-
-## <a name="Main Changes from Category Table"></a> Main Changes from Category Tables
-
-The Form Template system is a more powerful, flexible replacement for the original TWikiCategoryTable. Data from existing category tables can be imported directly.
-
-<table border="1" cellpadding="0" cellspacing="0">
- <tr>
- <th align="center" bgcolor="#99CCCC"><strong> Form Templates </strong></th>
- <th align="center" bgcolor="#99CCCC"><strong> Category Tables </strong></th>
- </tr>
- <tr>
- <td align="center"> defined in topics </td>
- <td align="center"> defined in templates </td>
- </tr>
- <tr>
- <td align="center"> many forms per web </td>
- <td align="center"> one table per web </td>
- </tr>
- <tr>
- <td align="center"> saved as Meta Data </td>
- <td align="center"> saved as HTML </td>
- </tr>
- <tr>
- <td align="center"><strong>Change</strong> & <strong>Add Form</strong> buttons </td>
- <td align="center"><strong>UseCategory</strong> radio button </td>
- </tr>
-</table>
+<a name="UsingFormData"></a>
-### <a name="Importing Category Table Data"></a> Importing Category Table Data
+## <a name="Searching for Form Data"></a> Searching for Form Data
-On upgrading from the previous TWiki, a Form Template topic has to be built for each web that used a Category Table, recreating the fields and values from the old <code>**twikicatitems.tmpl**</code>. The replacement Form Template must be set as the first item in the [[WebPreferences]] variable `WEBFORMS`. If missing, pages will display, but attempting to edit results in an error message.
+TWiki Forms accept user-input data, stored as [[TWikiMetaData]]. Meta data also contains program-generated info about changes, attachments, etc. To find, format and display form and other meta data, see [[TWikiMetaData]], <code>**FORMFIELD**</code>, <code>**SEARCH**</code> and <code>**METASEARCH**</code> variables in [[TWikiVariables]], and [[TWiki Formatted Search|Main/FormattedSearch]].
-The new Form Template system should work with old Category Table data with no special conversion. Data is assigned to Meta variables the first time an imported topic is edited and saved in the new system.
-
-%T% **NOTE:** If things aren't working correctly, there may be useful entries in `data/warning.txt`.
+> **Example**
+>
+> %BR% TWiki users often want to have an overview of topics they contributed to. With the
+>
+> <code>**$formfield**</code>
+>
+> parameter it is easy to display the value of a classification field next to the topic link:
+>
+> | *Topic* | *Classification* |
+> %SEARCH{"%MAINWEB%.UserName" scope="text" regex="off" nosearch="on" nototal="on" order="modified" reverse="on"
+> format="|<b>[[$web.$topic][$topic]]</b> |<nop>$formfield(TopicClassification) |" web="Sandbox"}%
-## <a name="Using Forms For Settings"></a> Using Forms For Settings
+## <a name="Extending the range of form data"></a> Extending the range of form data types
-Example process to change your [[WebPreferences]] to use forms instead of `{3 spaces}* Set` statements:
+Several Plugins allow you to extend the range of data types accepted by forms. For example, the TWiki:Plugins.DateFieldPlugin lets you add a 'date' type to the available data types. All data types are single-valued (can only have one value) with the following exceptions:
-1. create WebPrefencesForm topic
-2. fill it with a table like this: %BR% `| *Name*|*Type*|*Size*|*Value*|*Tooltip message*|*Attributes*|` %BR% `| WEBTOPICLIST |textarea| | | List of topics of the %WEB% web |S|` %BR% `| SITEMAPLIST |select |3| on, | list this web in the Site Map |S|` %BR% `| SITEMAPWHAT |textarea| | | short web summary |S|` %BR% `| WEBBGCOLOR |text |8| | Web specific background color |S|` %BR% etc...
-3. Edit [[WebPreferences]] and:
- - Add or Change the form to WebPrefencesForm
- - add WebPrefencesForm to the `Set WEBFORMS` line
- - Save
-4. Edit [[WebPreferences]], jump straight down to the form ignoring all the `textarea` stuff, and set as you like
-5. if everything works as you like it, you can delete the Set statements (the form overrides set if they are both used).
+- any type name starting with `checkbox`
+- any type name with `+multi` anywhere in the name
-**_Notes:_**
+Types with names like this can both take multiple values.
-If it isn't working, double check that the <code>**S**</code> attribute has been specified (S for Setting). If you change the form, the changes will not take affect until you edit and save the preferences' topics again.
+## <a name="Gotcha!"></a> Gotcha!
-Using the TWiki:Plugins.EditTablePlugin on WebPreferencesForm makes adding new prefedrences a breeze.
+- Some browsers may strip linefeeds from `text` fields when a topic is saved. If you need linefeeds in a field, make sure it is a `textarea`.
-A possibly unwanted side effect for using forms for the SKINS setting in their personal user topic: because the User Preferences are final you can't have different skins for different webs as the user's setting always wins. A workaround is to simply omit SKIN in the form.
+<a name="FormsVsCategoryTables"></a>
-Another example, this one using EditTablePlugin, source:
+## <a name="Importing Category Table Data"></a> Importing Category Table Data
-`%EDITTABLE{ header="|*Name*|*Type*|*Size*|*Values*|*Tooltip message*|*Attributes*|" format="|text,20|text,20|text,20|text,20|text,20|text,1|" }%`
+Very, very old TWiki releases used a system called the "TWikiCategoryTable". Later releases support automatic import of this data.
-Result (after some editing):
+On upgrading from the previous TWiki, a Form Template topic has to be built for each web that used a Category Table, recreating the fields and values from the old <code>**twikicatitems.tmpl**</code>. The replacement Form Template must be set as the first item in the [[WebPreferences]] variable `WEBFORMS`. If missing, pages will display, but attempting to edit results in an error message.
-<a name="edittable1"></a>
+The new Form Template system should work with old Category Table data with no special conversion. Data is assigned to Meta variables the first time an imported topic is edited and saved in the new system.
-<div>
- <form action="http://www.dementia.org/twiki/viewauth#edittable1" method="post" name="edittable1"><input name="ettablenr" type="hidden" value="1" /> <input name="etedit" type="hidden" value="on" /><table border="1" cellpadding="0" cellspacing="0">
- <tr>
- <th bgcolor="#99CCCC"><strong> Name </strong></th>
- <th bgcolor="#99CCCC"><strong> Type </strong></th>
- <th bgcolor="#99CCCC"><strong> Size </strong></th>
- <th bgcolor="#99CCCC"><strong> Values </strong></th>
- <th bgcolor="#99CCCC"><strong> tooltip message </strong></th>
- <th bgcolor="#99CCCC"><strong> Attributes </strong></th>
- </tr>
- <tr>
- <td> ALLOWTOPICCHANGE </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups <strong><em>allowed</em></strong> to change or rename this %TOPIC% topic: (I.e. [[Main/TWikiAdminGroup]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> ALLOWWEBCHANGE </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups who <strong><em>are</em></strong> allowed to <strong><em>change</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> ALLOWWEBRENAME </td>
- <td> textarea </td>
- <td> </td>
- <td>[[Main/TWikiAdminGroup]]</td>
- <td> Users or groups who <strong><em>are</em></strong> allowed to <strong><em>rename</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> ALLOWWEBVIEW </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups who <strong><em>are</em></strong> allowed to <strong><em>view</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> DENYWEBCHANGE </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups who <strong><em>are not</em></strong> allowed to <strong><em>change</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> DENYWEBRENAME </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups who <strong><em>are not</em></strong> allowed to <strong><em>rename</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> DENYWEBVIEW </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td> Users or groups who <strong><em>are not</em></strong> allowed to <strong><em>view</em></strong> topics in the %WEB% web: (See [[TWiki/TWikiAccessControl]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> FINALPREFERENCES </td>
- <td> textarea </td>
- <td> </td>
- <td> "NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME" </td>
- <td> Web preferences that are <strong>not</strong> allowed to be overridden by user preferences </td>
- <td> S </td>
- </tr>
- <tr>
- <td> NOSEARCHALL </td>
- <td> text </td>
- <td> </td>
- <td> ",on" </td>
- <td> "Exclude web from a <code>web=""all""</code> search: (Set to <code>on</code> for hidden webs)" </td>
- <td> S </td>
- </tr>
- <tr>
- <td> SITEMAPLIST </td>
- <td> select </td>
- <td> </td>
- <td> "on, ," </td>
- <td> List this web in the [[TWiki/SiteMap]]</td>
- <td> S </td>
- </tr>
- <tr>
- <td> SITEMAPUSETO </td>
- <td> textarea </td>
- <td> </td>
- <td> ...to do something. </td>
- <td> ...to do something. </td>
- <td> S </td>
- </tr>
- <tr>
- <td> SITEMAPWHAT </td>
- <td> textarea </td>
- <td> </td>
- <td> Describe what this web does. </td>
- <td> Describe what this web does. </td>
- <td> </td>
- </tr>
- <tr>
- <td> SKIN </td>
- <td> select </td>
- <td> </td>
- <td> "twiki, free, gnu, koala, pattern, plain, tiger" </td>
- <td> list of installed skins </td>
- <td> S </td>
- </tr>
- <tr>
- <td> WEBBGCOLOR </td>
- <td> select </td>
- <td> </td>
- <td> lightpink, pink, crimson, lavenderblush, palevioletred, hotpink, deeppink, mediumvioletred, orchid, thistle, plum, violet, fuchsia, fuchsia, darkmagenta, purple, mediumorchid, darkviolet, darkorchid, indigo, blueviolet, mediumpurple, mediumslateblue, slateblue, darkslateblue, ghostwhite, lavender, blue, mediumblue, darkblue, navy, midnightblue, royalblue, cornflowerblue, lightsteelblue, lightslategray, slategray, dodgerblue, aliceblue, steelblue, lightskyblue, skyblue, deepskyblue, lightblue, powderblue, cadetblue, darkturquoise, azure, lightcyan, paleturquoise, aqua, aqua, darkcyan, teal, darkslategray, mediumturquoise, lightseagreen, turquoise, aquamarine, mediumaquamarine, mediumspringgreen, mintcream, springgreen, mediumseagreen, seagreen, honeydew, darkseagreen, palegreen, lightgreen, limegreen, lime, forestgreen, green, darkgreen, lawngreen, chartreuse, greenyellow, darkolivegreen, yellowgreen, olivedrab, ivory, beige, lightyellow, lightgoldenrodyellow, yellow, olive, darkkhaki, palegoldenrod, lemonchiffon, khaki, gold, cornsilk, goldenrod, darkgoldenrod, floralwhite, oldlace, wheat, orange, moccasin, papayawhip, blanchedalmond, navajowhite, antiquewhite, tan, burlywood, darkorange, bisque, linen, peru, peachpuff, sandybrown, chocolate, saddlebrown, seashell, sienna, lightsalmon, coral, orangered, darksalmon, tomato, salmon, mistyrose, lightcoral, snow, rosybrown, indianred, red, brown, firebrick, darkred, maroon, white, whitesmoke, gainsboro, lightgrey, silver, darkgray, gray, dimgray, black </td>
- <td> Web specific background color: (Pick a lighter one of the [[TWiki/StandardColors]]) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> WEBFORMS </td>
- <td> textarea </td>
- <td> </td>
- <td> </td>
- <td>[[TWiki/TWikiForms]]: How to enable form(s) </td>
- <td> S </td>
- </tr>
- <tr>
- <td> WEBTOPICLIST </td>
- <td> textarea </td>
- <td> </td>
- <td>[[Main/WebHome]], [[Main/WebChanges]], [[Main/WebTopicList]], [[Main/WebIndex]], [[Main/WebSearch]], Go <input name="topic" size="16" type="text" /></td>
- <td> the main entry point topics for this web </td>
- <td> S </td>
- </tr>
- </table><input name="etrows" type="hidden" value="17" /> <input type="submit" value="Edit table" /></form>
-</div>
+%T% If things aren't working correctly, there may be useful entries in `data/warning.txt`.
--- TWiki:Main.JohnTalintyre - 16 Aug 2001 %BR% -- TWiki:Main.MikeMannix - 05 Jan 2002 %BR% -- TWiki:Main.PeterThoeny - 25 Apr 2004 %BR% -- TWiki:Main.MattWilkie - 27 Jul 2004 %BR%
+**_Related Topics:_** [[UserDocumentationCategory]], [[TWikiTemplates]]
--- /dev/null
+# <a name="Package <code>TWiki::Func="></a> Package =TWiki::Func
+
+_Official list of stable TWiki functions for Plugin developers_
+
+This module defines official functions that [[Plugins|TWiki/TWikiPlugins]] can use to interact with the TWiki engine and content.
+
+Refer to [[EmptyPlugin]] and lib/TWiki/Plugins/EmptyPlugin.pm for a template Plugin and documentation on how to write a Plugin.
+
+Plugins should **only** use functions published in this module. If you use functions in other TWiki libraries you might create a security hole and you will probably need to change your Plugin when you upgrade TWiki.
+
+Deprecated functions will still work in older code, though they should _not_ be called in new Plugins and should be replaced in older Plugins as soon as possible.
+
+The version of the TWiki::Func module is defined by the VERSION number of the TWiki::Plugins module, currently 1.11. This can be shown by the `%PLUGINVERSION%` variable. The 'Since' field in the function documentation refers to the VERSION number and the date that the function was addded.
+
+**_Note:_** Beware! These methods should only ever be called from the context of a TWiki Plugin. They require a Plugins SESSION context to be established before they are called, and will not work if simply called from another TWiki module. For example,
+
+ use TWiki;
+ print TWiki::Func::getSkin(),"\n";
+
+will fail with `Can't call method "getSkin" on an undefined value at TWiki/Func.pm line 83`.
+
+If you want to call the methods outside the context of a plugin, you can create a Plugins SESSION object. For example, the script:
+
+ use TWiki:
+ $TWiki::Plugins::SESSION = new TWiki();
+ print TWiki::Func::getSkin(),"\n";
+
+will work happily.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Func="> Package TWiki::Func</a><ul>
+ <li><a href="#Environment"> Environment</a><ul>
+ <li><a href="#getSkin( ) -> $skin"> getSkin( ) -> $skin</a></li>
+ <li><a href="#get_UrlHost( ) -> $host"> getUrlHost( ) -> $host</a></li>
+ <li><a href="#get_ScriptUrl( $web, $topic, $sc"> getScriptUrl( $web, $topic, $script, ... ) -> $url</a></li>
+ <li><a href="#get_ViewUrl( $web, $topic ) -> $"> getViewUrl( $web, $topic ) -> $url</a></li>
+ <li><a href="#get_OopsUrl( $web, $topic, $temp"> getOopsUrl( $web, $topic, $template, $param1, $param2, $param3, $param4 ) -> $url</a></li>
+ <li><a href="#get_PubUrlPath( ) -> $path"> getPubUrlPath( ) -> $path</a></li>
+ <li><a href="#get_CgiQuery( ) -> $query"> getCgiQuery( ) -> $query</a></li>
+ <li><a href="#get_SessionValue( $key ) -> $val"> getSessionValue( $key ) -> $value</a></li>
+ <li><a href="#set_SessionValue( $key, $value )"> setSessionValue( $key, $value ) -> $boolean</a></li>
+ <li><a href="#clear_SessionValue( $key ) -> $b"> clearSessionValue( $key ) -> $boolean</a></li>
+ <li><a href="#getContext() -> \%hash"> getContext() -> \%hash</a></li>
+ </ul>
+ </li>
+ <li><a href="#Preferences"> Preferences</a><ul>
+ <li><a href="#get_PreferencesValue( $key, $web"> getPreferencesValue( $key, $web ) -> $value</a></li>
+ <li><a href="#get_PluginPreferencesValue( $key"> getPluginPreferencesValue( $key ) -> $value</a></li>
+ <li><a href="#get_PreferencesFlag( $key, $web"> getPreferencesFlag( $key, $web ) -> $value</a></li>
+ <li><a href="#get_PluginPreferencesFlag( $key"> getPluginPreferencesFlag( $key ) -> $boolean</a></li>
+ <li><a href="#get_WikiToolName( ) -> $name"> getWikiToolName( ) -> $name</a></li>
+ <li><a href="#get_MainWebname( ) -> $name"> getMainWebname( ) -> $name</a></li>
+ <li><a href="#get_TwikiWebname( ) -> $name"> getTwikiWebname( ) -> $name</a></li>
+ </ul>
+ </li>
+ <li><a href="#User Handling and Access Control"> User Handling and Access Control</a><ul>
+ <li><a href="#get_DefaultUserName( ) -> $login"> getDefaultUserName( ) -> $loginName</a></li>
+ <li><a href="#get_WikiName( ) -> $wikiName"> getWikiName( ) -> $wikiName</a></li>
+ <li><a href="#get_WikiUserName( ) -> $wikiName"> getWikiUserName( ) -> $wikiName</a></li>
+ <li><a href="#wiki_ToUserName( $wikiName ) ->"> wikiToUserName( $wikiName ) -> $loginName</a></li>
+ <li><a href="#user_ToWikiName( $loginName, $do"> userToWikiName( $loginName, $dontAddWeb ) -> $wikiName</a></li>
+ <li><a href="#isGuest( ) -> $boolean"> isGuest( ) -> $boolean</a></li>
+ <li><a href="#permissionsSet( $web ) -> $boole"> permissionsSet( $web ) -> $boolean</a></li>
+ <li><a href="#check_AccessPermission( $type, $"> checkAccessPermission( $type, $wikiName, $text, $topic, $web ) -> $boolean</a></li>
+ </ul>
+ </li>
+ <li><a href="#Webs, Topics and Attachments"> Webs, Topics and Attachments</a><ul>
+ <li><a href="#get_ListOfWebs( $filter ) -> @we"> getListOfWebs( $filter ) -> @webs</a></li>
+ <li><a href="#webExists( $web ) -> $boolean"> webExists( $web ) -> $boolean</a></li>
+ <li><a href="#createWeb( $newWeb, $baseWeb, $o"> createWeb( $newWeb, $baseWeb, $opts )</a></li>
+ <li><a href="#moveWeb( $oldName, $newName )"> moveWeb( $oldName, $newName )</a></li>
+ <li><a href="#get_TopicList( $web ) -> @topics"> getTopicList( $web ) -> @topics</a></li>
+ <li><a href="#topicExists( $web, $topic ) -> $"> topicExists( $web, $topic ) -> $boolean</a></li>
+ <li><a href="#check_TopicEditLock( $web, $topi"> checkTopicEditLock( $web, $topic ) -> ( $oopsUrl, $loginName, $unlockTime )</a></li>
+ <li><a href="#set_TopicEditLock( $web, $topic,"> setTopicEditLock( $web, $topic, $lock )</a></li>
+ <li><a href="#saveTopic( $web, $topic, $meta,"> saveTopic( $web, $topic, $meta, $text, $options ) -> $error</a></li>
+ <li><a href="#save_TopicText( $web, $topic, $t"> saveTopicText( $web, $topic, $text, $ignorePermissions, $dontNotify ) -> $oopsUrl</a></li>
+ <li><a href="#moveTopic( $web, $topic, $newWeb"> moveTopic( $web, $topic, $newWeb, $newTopic )</a></li>
+ <li><a href="#get_RevisionInfo($web, $topic, $"> getRevisionInfo($web, $topic, $rev, $attachment ) -> ( $date, $user, $rev, $comment ) </a></li>
+ <li><a href="#get_RevisionAtTime( $web, $topic"> getRevisionAtTime( $web, $topic, $time ) -> $rev</a></li>
+ <li><a href="#readTopic( $web, $topic, $rev )"> readTopic( $web, $topic, $rev ) -> ( $meta, $text )</a></li>
+ <li><a href="#read_TopicText( $web, $topic, $r"> readTopicText( $web, $topic, $rev, $ignorePermissions ) -> $text</a></li>
+ <li><a href="#attachmentExists( $web, $topic,"> attachmentExists( $web, $topic, $attachment ) -> $boolean</a></li>
+ <li><a href="#readAttachment( $web, $topic, $n"> readAttachment( $web, $topic, $name, $rev ) -> $data</a></li>
+ <li><a href="#saveAttachment( $web, $topic, $a"> saveAttachment( $web, $topic, $attachment, $opts )</a></li>
+ <li><a href="#moveAttachment( $web, $topic, $a"> moveAttachment( $web, $topic, $attachment, $newWeb, $newTopic, $newAttachment )</a></li>
+ </ul>
+ </li>
+ <li><a href="#Assembling Pages"> Assembling Pages</a><ul>
+ <li><a href="#readTemplate( $name, $skin ) ->"> readTemplate( $name, $skin ) -> $text</a></li>
+ <li><a href="#loadTemplate ( $name, $skin, $we"> loadTemplate ( $name, $skin, $web ) -> $text</a></li>
+ <li><a href="#expandTemplate( $def ) -> $stri"> expandTemplate( $def ) -> $string</a></li>
+ <li><a href="#writeHeader( $query, $contentLen"> writeHeader( $query, $contentLength )</a></li>
+ <li><a href="#redirect_CgiQuery( $query, $url"> redirectCgiQuery( $query, $url )</a></li>
+ <li><a href="#add_ToHEAD( $id, $header )"> addToHEAD( $id, $header )</a></li>
+ <li><a href="#expand_CommonVariables( $text, $"> expandCommonVariables( $text, $topic, $web ) -> $text</a></li>
+ <li><a href="#renderText( $text, $web ) -> $te"> renderText( $text, $web ) -> $text</a></li>
+ <li><a href="#internalLink( $pre, $web, $topic"> internalLink( $pre, $web, $topic, $label, $anchor, $createLink ) -> $text</a></li>
+ </ul>
+ </li>
+ <li><a href="#E-mail"> E-mail</a><ul>
+ <li><a href="#sendEmail ( $text, $retries ) ->"> sendEmail ( $text, $retries ) -> $error</a></li>
+ <li><a href="#wiki_ToEmail( $wikiName ) -> $em"> wikiToEmail( $wikiName ) -> $email</a></li>
+ </ul>
+ </li>
+ <li><a href="#Creating New Topics"> Creating New Topics</a><ul>
+ <li><a href="#expand_VariablesOnTopicCreation"> expandVariablesOnTopicCreation ( $text ) -> $text</a></li>
+ </ul>
+ </li>
+ <li><a href="#Special handlers"> Special handlers</a><ul>
+ <li><a href="#register_TagHandler( $var, \fn,"> registerTagHandler( $var, \&fn, $syntax )</a></li>
+ <li><a href="#registerRESTHandler( $alias, \fn"> registerRESTHandler( $alias, \&fn, )</a></li>
+ </ul>
+ </li>
+ <li><a href="#Searching"> Searching</a><ul>
+ <li><a href="#search_InWebContent($searchStrin"> searchInWebContent($searchString, $web, \@topics, \%options ) -> \%map</a></li>
+ </ul>
+ </li>
+ <li><a href="#Plugin-specific file handling"> Plugin-specific file handling</a><ul>
+ <li><a href="#get_WorkArea( $pluginName ) -> $"> getWorkArea( $pluginName ) -> $directorypath</a></li>
+ <li><a href="#readFile( $filename ) -> $text"> readFile( $filename ) -> $text</a></li>
+ <li><a href="#saveFile( $filename, $text )"> saveFile( $filename, $text )</a></li>
+ </ul>
+ </li>
+ <li><a href="#General Utilities"> General Utilities</a><ul>
+ <li><a href="#get_RegularExpression( $name ) -"> getRegularExpression( $name ) -> $expr</a></li>
+ <li><a href="#normalize_WebTopicName($web, $to"> normalizeWebTopicName($web, $topic) -> ($web, $topic)</a></li>
+ <li><a href="#writeWarning( $text )"> writeWarning( $text )</a></li>
+ <li><a href="#writeDebug( $text )"> writeDebug( $text )</a></li>
+ <li><a href="#formatTime( $time, $format, $tim"> formatTime( $time, $format, $timezone ) -> $text</a></li>
+ <li><a href="#is_ValidWikiWord ( $text ) -> $b"> isValidWikiWord ( $text ) -> $boolean</a></li>
+ <li><a href="#extractParameters($attr ) -> %pa"> extractParameters($attr ) -> %params</a></li>
+ <li><a href="#extract_NameValuePair( $attr, $n"> extractNameValuePair( $attr, $name ) -> $value</a></li>
+ </ul>
+ </li>
+ <li><a href="#Deprecated functions"> Deprecated functions</a><ul>
+ <li><a href="#get_ScriptUrlPath( ) -> $path"> getScriptUrlPath( ) -> $path</a></li>
+ <li><a href="#get_PublicWebList( ) -> @webs"> getPublicWebList( ) -> @webs</a></li>
+ <li><a href="#format_GmTime( $time, $format )"> formatGmTime( $time, $format ) -> $text</a></li>
+ <li><a href="#get_DataDir( ) -> $dir"> getDataDir( ) -> $dir</a></li>
+ <li><a href="#get_PubDir( ) -> $dir"> getPubDir( ) -> $dir</a></li>
+ <li><a href="#checkDependencies( $moduleName,"> checkDependencies( $moduleName, $dependenciesRef ) -> $error</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="Environment"></a> Environment
+
+### <a name="getSkin( ) - $skin"></a> getSkin( ) -> $skin
+
+Get the skin path, set by the `SKIN` and `COVER` preferences variables or the `skin` and `cover` CGI parameters
+
+Return: `$skin` Comma-separated list of skins, e.g. `'gnu,tartan'`. Empty string if none.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
+
+### <a name="get_UrlHost( ) - $host"></a> getUrlHost( ) -> $host
+
+Get protocol, domain and optional port of script URL
+
+Return: `$host` URL host, e.g. `"http://example.com:80"`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_ScriptUrl( $web, $topic, $sc"></a> getScriptUrl( $web, $topic, $script, ... ) -> $url
+
+Compose fully qualified URL
+
+- `$web` - Web name, e.g. `'Main'`
+- `$topic` - Topic name, e.g. `'WebNotify'`
+- `$script` - Script name, e.g. `'view'`
+
+Return: `$url` URL, e.g. `"http://example.com:80/cgi-bin/view.pl/Main/WebNotify"`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_ViewUrl( $web, $topic ) - $u"></a> getViewUrl( $web, $topic ) -> $url
+
+Compose fully qualified view URL
+
+- `$web` - Web name, e.g. `'Main'`. The current web is taken if empty
+- `$topic` - Topic name, e.g. `'WebNotify'`
+
+Return: `$url` URL, e.g. `"http://example.com:80/cgi-bin/view.pl/Main/WebNotify"`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_OopsUrl( $web, $topic, $temp"></a> getOopsUrl( $web, $topic, $template, $param1, $param2, $param3, $param4 ) -> $url
+
+Compose fully qualified 'oops' dialog URL
+
+- `$web` - Web name, e.g. `'Main'`. The current web is taken if empty
+- `$topic` - Topic name, e.g. `'WebNotify'`
+- `$template` - Oops template name, e.g. `'oopsmistake'`. The 'oops' is optional; 'mistake' will translate to 'oopsmistake'.
+- `$param1` ... `$param4` - Parameter values for %PARAM1% ... %PARAMn% variables in template, optional
+
+Return: `$url` URL, e.g. `"http://example.com:80/cgi-bin/oops.pl/ Main/WebNotify?template=oopslocked¶m1=joe"`
+
+This might be used like this:
+
+ my $url = TWiki::Func::getOopsUrl($web, $topic, 'oopsmistake', 'I made a boo-boo');
+ TWiki::Func::redirectCgiQuery( undef, $url );
+ return 0;
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+Since TWiki::Plugins::VERSION 1.1, the recommended approach is to throw an [[oops exception|Main/TWikiOopsExceptionDotPm]].
+
+ use Error qw( :try );
+
+ throw TWiki::OopsException($web, $topic, undef, 0, [ 'I made a boo-boo' ]);
+
+and let TWiki handle the cleanup.
+
+### <a name="get_PubUrlPath( ) - $path"></a> getPubUrlPath( ) -> $path
+
+Get pub URL path
+
+Return: `$path` URL path of pub directory, e.g. `"/pub"`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
+
+### <a name="get_CgiQuery( ) - $query"></a> getCgiQuery( ) -> $query
+
+Get CGI query object. Important: Plugins cannot assume that scripts run under CGI, Plugins must always test if the CGI query object is set
+
+Return: `$query` CGI query object; or 0 if script is called as a shell script
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_SessionValue( $key ) - $valu"></a> getSessionValue( $key ) -> $value
+
+Get a session value from the client session module
+
+- `$key` - Session key
+
+Return: `$value` Value associated with key; empty string if not set
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 200)
+
+### <a name="set_SessionValue( $key, $value )"></a> setSessionValue( $key, $value ) -> $boolean
+
+Set a session value via the client session module
+
+- `$key` - Session key
+- `$value` - Value associated with key
+
+Return: true if function succeeded
+
+**Since:** TWiki::Plugins::VERSION 1.000 (17 Aug 2001)
+
+### <a name="clear_SessionValue( $key ) - $bo"></a> clearSessionValue( $key ) -> $boolean
+
+Clear a session value via the client session module
+
+- `$key` - Session key
+
+Return: true if function succeeded
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="getContext() - \%hash"></a> getContext() -> \\%hash
+
+Get a hash of context identifiers representing the currently active context.
+
+The context is a set of identifiers that are set during specific phases of TWiki processing. For example, each of the standard scripts in the 'bin' directory each has a context identifier - the view script has 'view', the edit script has 'edit' etc. So you can easily tell what 'type' of script your Plugin is being called within. The core context identifiers are listed in the [[TWikiTemplates]] topic. Please be careful not to overwrite any of these identifiers!
+
+Context identifiers can be used to communicate between Plugins, and between Plugins and templates. For example, in [[FirstPlugin]].pm, you might write:
+
+ sub initPlugin {
+ TWiki::Func::getContext()->{'MyID'} = 1;
+ ...
+
+This can be used in SecondPlugin.pm like this:
+
+ sub initPlugin {
+ if( TWiki::Func::getContext()->{'MyID'} ) {
+ ...
+ }
+ ...
+
+or in a template, like this:
+
+ %TMPL:DEF{"ON"}% Not off %TMPL:END%
+ %TMPL:DEF{"OFF"}% Not on %TMPL:END%
+ %TMPL:P{context="MyID" then="ON" else="OFF"}%
+
+or in a topic:
+
+ %IF{"context MyID" then="MyID is ON" else="MyID is OFF"}%
+
+**_Note_**: **all** plugins have an **automatically generated** context identifier if they are installed and initialised. For example, if the [[FirstPlugin]] is working, the context ID 'FirstPlugin' will be set.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+## <a name="Preferences"></a> Preferences
+
+### <a name="get_PreferencesValue( $key, $web"></a> getPreferencesValue( $key, $web ) -> $value
+
+Get a preferences value from TWiki or from a Plugin
+
+- `$key` - Preferences key
+- `$web` - Name of web, optional. Current web if not specified; does not apply to settings of Plugin topics
+
+Return: `$value` Preferences value; empty string if not set
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+- Example for Plugin setting:
+ - [[MyPlugin]] topic has: `* Set COLOR = red`
+ - Use `"MYPLUGIN_COLOR"` for `$key`
+ - `my $color = TWiki::Func::getPreferencesValue( "MYPLUGIN_COLOR" );`
+
+- Example for preferences setting:
+ - [[WebPreferences]] topic has: `* Set WEBBGCOLOR = #FFFFC0`
+ - `my $webColor = TWiki::Func::getPreferencesValue( 'WEBBGCOLOR', 'Sandbox' );`
+
+### <a name="get_PluginPreferencesValue( $key"></a> getPluginPreferencesValue( $key ) -> $value
+
+Get a preferences value from your Plugin
+
+- `$key` - Plugin Preferences key w/o PLUGINNAME\_ prefix.
+
+Return: `$value` Preferences value; empty string if not set
+
+**_Note_**: This function will will **only** work when called from the Plugin.pm file itself. it **will not work** if called from a sub-package (e.g. TWiki::Plugins::MyPlugin::MyModule)
+
+**Since:** TWiki::Plugins::VERSION 1.021 (27 Mar 2004)
+
+### <a name="get_PreferencesFlag( $key, $web"></a><a name="get_PreferencesFlag( $key, $web "></a> getPreferencesFlag( $key, $web ) -> $value
+
+Get a preferences flag from TWiki or from a Plugin
+
+- `$key` - Preferences key
+- `$web` - Name of web, optional. Current web if not specified; does not apply to settings of Plugin topics
+
+Return: `$value` Preferences flag `'1'` (if set), or `"0"` (for preferences values `"off"`, `"no"` and `"0"`)
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+- Example for Plugin setting:
+ - [[MyPlugin]] topic has: `* Set SHOWHELP = off`
+ - Use `"MYPLUGIN_SHOWHELP"` for `$key`
+ - `my $showHelp = TWiki::Func::getPreferencesFlag( "MYPLUGIN_SHOWHELP" );`
+
+### <a name="get_PluginPreferencesFlag( $key"></a><a name="get_PluginPreferencesFlag( $key "></a> getPluginPreferencesFlag( $key ) -> $boolean
+
+Get a preferences flag from your Plugin
+
+- `$key` - Plugin Preferences key w/o PLUGINNAME\_ prefix.
+
+Return: false for preferences values `"off"`, `"no"` and `"0"`, or values not set at all. True otherwise.
+
+**_Note_**: This function will will **only** work when called from the Plugin.pm file itself. it **will not work** if called from a sub-package (e.g. TWiki::Plugins::MyPlugin::MyModule)
+
+**Since:** TWiki::Plugins::VERSION 1.021 (27 Mar 2004)
+
+### <a name="get_WikiToolName( ) - $name"></a> getWikiToolName( ) -> $name
+
+Get toolname as defined in TWiki.cfg
+
+Return: `$name` Name of tool, e.g. `'TWiki'`
+
+Synonymous with TWiki::Func::getPreferencesValue('WIKITOOLNAME');
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
+
+### <a name="get_MainWebname( ) - $name"></a> getMainWebname( ) -> $name
+
+Get name of Main web as defined in TWiki.cfg
+
+Return: `$name` Name, e.g. `'Main'`
+
+Synonymous with TWiki::Func::getPreferencesValue('MAINWEB');
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
+
+### <a name="get_TwikiWebname( ) - $name"></a> getTwikiWebname( ) -> $name
+
+Get name of TWiki documentation web as defined in TWiki.cfg
+
+Return: `$name` Name, e.g. `'TWiki'`
+
+Synonymous with TWiki::Func::getPreferencesValue('TWIKIWEB');
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
+
+## <a name="User Handling and Access Control"></a> User Handling and Access Control
+
+### <a name="get_DefaultUserName( ) - $loginN"></a> getDefaultUserName( ) -> $loginName
+
+Get default user name as defined in the configuration as `DefaultUserLogin`
+
+Return: `$loginName` Default user name, e.g. `'guest'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_WikiName( ) - $wikiName"></a> getWikiName( ) -> $wikiName
+
+Get Wiki name of logged in user
+
+Return: `$wikiName` Wiki Name, e.g. `'JohnDoe'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_WikiUserName( ) - $wikiName"></a> getWikiUserName( ) -> $wikiName
+
+Get Wiki name of logged in user with web prefix
+
+Return: `$wikiName` Wiki Name, e.g. `"Main.JohnDoe"`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="wiki_ToUserName( $wikiName ) - $"></a> wikiToUserName( $wikiName ) -> $loginName
+
+Translate a Wiki name to a login name based on [[Main.TWikiUsers|Main/TWikiUsers]] topic
+
+- `$wikiName` - Wiki name, e.g. `'Main.JohnDoe'` or `'JohnDoe'`
+
+Return: `$loginName` Login name of user, e.g. `'jdoe'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="user_ToWikiName( $loginName, $do"></a> userToWikiName( $loginName, $dontAddWeb ) -> $wikiName
+
+Translate a login name to a Wiki name based on [[Main.TWikiUsers|Main/TWikiUsers]] topic
+
+- `$loginName` - Login name, e.g. `'jdoe'`
+- `$dontAddWeb` - Do not add web prefix if `"1"`
+
+Return: `$wikiName` Wiki name of user, e.g. `'Main.JohnDoe'` or `'JohnDoe'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="isGuest( ) - $boolean"></a> isGuest( ) -> $boolean
+
+Test if logged in user is a guest ([[TWikiGuest]])
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="permissionsSet( $web ) - $boolea"></a> permissionsSet( $web ) -> $boolean
+
+Test if any access restrictions are set for this web, ignoring settings on individual pages
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
+
+### <a name="check_AccessPermission( $type, $"></a> checkAccessPermission( $type, $wikiName, $text, $topic, $web ) -> $boolean
+
+Check access permission for a topic based on the [[TWiki.TWikiAccessControl|TWiki/TWikiAccessControl]] rules
+
+- `$type` - Access type, e.g. `'VIEW'`, `'CHANGE'`, `'CREATE'`
+- `$wikiName` - [[WikiName]] of remote user, i.e. `"Main.PeterThoeny"`
+- `$text` - Topic text, optional. If empty, topic `$web.$topic` is consulted
+- `$topic` - Topic name, required, e.g. `'PrivateStuff'`
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
+
+## <a name="Webs, Topics and Attachments"></a> Webs, Topics and Attachments
+
+### <a name="get_ListOfWebs( $filter ) - @web"></a> getListOfWebs( $filter ) -> @webs
+
+- `$filter` - spec of web types to recover
+
+Gets a list of webs, filtered according to the spec in the $filter, which may include one of:
+
+1. 'user' (for only user webs)
+2. 'template' (for only template webs i.e. those starting with "\_")
+
+`$filter` may also contain the word 'public' which will further filter out webs that have NOSEARCHALL set on them. 'allowed' filters out webs the current user can't read.
+
+For example, the deprecated getPublicWebList function can be duplicated as follows:
+
+ my @webs = TWiki::Func::getListOfWebs( "user,public" );
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="webExists( $web ) - $boolean"></a> webExists( $web ) -> $boolean
+
+Test if web exists
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
+
+### <a name="createWeb( $newWeb, $baseWeb, $o"></a> createWeb( $newWeb, $baseWeb, $opts )
+
+- `$newWeb` is the name of the new web.
+- `$baseWeb` is the name of an existing web (a template web). If the base web is a system web, all topics in it will be copied into the new web. If it is a normal web, only topics starting with 'Web' will be copied. If no base web is specified, an empty web (with no topics) will be created. If it is specified but does not exist, an error will be thrown.
+- `$opts` is a ref to a hash that contains settings to be modified in
+
+the web preferences topic in the new web.
+
+ use Error qw( :try );
+ use TWiki::AccessControlException;
+
+ try {
+ TWiki::Func::createWeb( "Newweb" );
+ } catch Error::Simple with {
+ my $e = shift;
+ # see documentation on Error::Simple
+ } catch TWiki::AccessControlException with {
+ my $e = shift;
+ # see documentation on TWiki::AccessControlException
+ } otherwise {
+ ...
+ };
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="moveWeb( $oldName, $newName )"></a> moveWeb( $oldName, $newName )
+
+Move (rename) a web.
+
+ use Error qw( :try );
+ use TWiki::AccessControlException;
+
+ try {
+ TWiki::Func::moveWeb( "Oldweb", "Newweb" );
+ } catch Error::Simple with {
+ my $e = shift;
+ # see documentation on Error::Simple
+ } catch TWiki::AccessControlException with {
+ my $e = shift;
+ # see documentation on TWiki::AccessControlException
+ } otherwise {
+ ...
+ };
+
+To delete a web, move it to a subweb of `Trash`
+
+ TWiki::Func::moveWeb( "Deadweb", "Trash.Deadweb" );
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="get_TopicList( $web ) - @topics"></a> getTopicList( $web ) -> @topics
+
+Get list of all topics in a web
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+Return: `@topics` Topic list, e.g. `( 'WebChanges', 'WebHome', 'WebIndex', 'WebNotify' )`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="topicExists( $web, $topic ) - $b"></a> topicExists( $web, $topic ) -> $boolean
+
+Test if topic exists
+
+- `$web` - Web name, optional, e.g. `'Main'`.
+- `$topic` - Topic name, required, e.g. `'TokyoOffice'`, or `"Main.TokyoOffice"`
+
+$web and $topic are parsed as described in the documentation for `normalizeWebTopicName`.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
+
+### <a name="check_TopicEditLock( $web, $topi"></a> checkTopicEditLock( $web, $topic ) -> ( $oopsUrl, $loginName, $unlockTime )
+
+Check if a lease has been taken by some other user.
+
+- `$web` Web name, e.g. `"Main"`, or empty
+- `$topic` Topic name, e.g. `"MyTopic"`, or `"Main.MyTopic"`
+
+Return: `( $oopsUrl, $loginName, $unlockTime )` - The `$oopsUrl` for calling redirectCgiQuery(), user's `$loginName`, and estimated `$unlockTime` in minutes, or ( '', '', 0 ) if no lease exists.
+
+**Since:** TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
+
+### <a name="set_TopicEditLock( $web, $topic,"></a> setTopicEditLock( $web, $topic, $lock )
+
+- `$web` Web name, e.g. `"Main"`, or empty
+- `$topic` Topic name, e.g. `"MyTopic"`, or `"Main.MyTopic"`
+- `$lock` 1 to lease the topic, 0 to clear the lease=
+
+Takes out a "lease" on the topic. The lease doesn't prevent anyone from editing and changing the topic, but it does redirect them to a warning screen, so this provides some protection. The `edit` script always takes out a lease.
+
+It is **impossible** to fully lock a topic. Concurrent changes will be merged.
+
+**Since:** TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
+
+### <a name="saveTopic( $web, $topic, $meta,"></a><a name="saveTopic( $web, $topic, $meta, "></a> saveTopic( $web, $topic, $meta, $text, $options ) -> $error
+
+- `$web` - web for the topic
+- `$topic` - topic name
+- `$meta` - reference to TWiki::Meta object
+- `$text` - text of the topic (without embedded meta-data!!!
+- `\%options` - ref to hash of save options `\%options` may include: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>dontlog</code></td>
+ <td> don't log this change in twiki log </td>
+ </tr>
+ <tr>
+ <td><code>comment</code></td>
+ <td> comment for save </td>
+ </tr>
+ <tr>
+ <td><code>minor</code></td>
+ <td> True if this is a minor change, and is not to be notified </td>
+ </tr>
+</table>
+
+Return: error message or undef.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
+
+For example,
+
+ my( $meta, $text ) = TWiki::Func::readTopic( $web, $topic )
+ $text =~ s/APPLE/ORANGE/g;
+ TWiki::Func::saveTopic( $web, $topic, $meta, $text, { comment => 'refruited' } );
+
+**_Note:_** Plugins handlers ( e.g. `beforeSaveHandler` ) will be called as appropriate.
+
+### <a name="save_TopicText( $web, $topic, $t"></a> saveTopicText( $web, $topic, $text, $ignorePermissions, $dontNotify ) -> $oopsUrl
+
+Save topic text, typically obtained by readTopicText(). Topic data usually includes meta data; the file attachment meta data is replaced by the meta data from the topic file if it exists.
+
+- `$web` - Web name, e.g. `'Main'`, or empty
+- `$topic` - Topic name, e.g. `'MyTopic'`, or `"Main.MyTopic"`
+- `$text` - Topic text to save, assumed to include meta data
+- `$ignorePermissions` - Set to `"1"` if checkAccessPermission() is already performed and OK
+- `$dontNotify` - Set to `"1"` if not to notify users of the change
+
+Return: `$oopsUrl` Empty string if OK; the `$oopsUrl` for calling redirectCgiQuery() in case of error
+
+This method is a lot less efficient and much more dangerous than `saveTopic`.
+
+**Since:** TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
+
+ my $text = TWiki::Func::readTopicText( $web, $topic );
+
+ # check for oops URL in case of error:
+ if( $text =~ /^http.*?\/oops/ ) {
+ TWiki::Func::redirectCgiQuery( $query, $text );
+ return;
+ }
+ # do topic text manipulation like:
+ $text =~ s/old/new/g;
+ # do meta data manipulation like:
+ $text =~ s/(META\:FIELD.*?name\=\"TopicClassification\".*?value\=\")[^\"]*/$1BugResolved/;
+ $oopsUrl = TWiki::Func::saveTopicText( $web, $topic, $text ); # save topic text
+
+### <a name="moveTopic( $web, $topic, $newWeb"></a> moveTopic( $web, $topic, $newWeb, $newTopic )
+
+- `$web` source web - required
+- `$topic` source topic - required
+- `$newWeb` dest web
+- `$newTopic` dest topic
+
+Renames the topic. Throws an exception if something went wrong. If $newWeb is undef, it defaults to $web. If $newTopic is undef, it defaults to $topic.
+
+The destination topic must not already exist.
+
+Rename a topic to the $TWiki::cfg\{TrashWebName\} to delete it.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+ use Error qw( :try );
+
+ try {
+ moveTopic( "Work", "TokyoOffice", "Trash", "ClosedOffice" );
+ } catch Error::Simple with {
+ my $e = shift;
+ # see documentation on Error::Simple
+ } catch TWiki::AccessControlException with {
+ my $e = shift;
+ # see documentation on TWiki::AccessControlException
+ } otherwise {
+ ...
+ };
+
+### <a name="get_RevisionInfo($web, $topic, $"></a> getRevisionInfo($web, $topic, $rev, $attachment ) -> ( $date, $user, $rev, $comment )
+
+Get revision info of a topic or attachment
+
+- `$web` - Web name, optional, e.g. `'Main'`
+- `$topic` - Topic name, required, e.g. `'TokyoOffice'`
+- `$rev` - revsion number, or tag name (can be in the format 1.2, or just the minor number)
+- `$attachment` -attachment filename
+
+Return: `( $date, $user, $rev, $comment )` List with: ( last update date, login name of last user, minor part of top revision number ), e.g. `( 1234561, 'phoeny', "5" )`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> $date </td>
+ <td> in epochSec </td>
+ </tr>
+ <tr>
+ <td> $user </td>
+ <td> Wiki name of the author (<strong>not</strong> login name) </td>
+ </tr>
+ <tr>
+ <td> $rev </td>
+ <td> actual rev number </td>
+ </tr>
+ <tr>
+ <td> $comment </td>
+ <td> WHAT COMMENT? </td>
+ </tr>
+</table>
+
+NOTE: if you are trying to get revision info for a topic, use `$meta->getRevisionInfo` instead if you can - it is significantly more efficient, and returns a user object that contains other user information.
+
+NOTE: prior versions of TWiki may under some circumstances have returned the login name of the user rather than the wiki name; the code documentation was totally unclear, and we have been unable to establish the intent. However the wikiname is obviously more useful, so that is what is returned.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
+
+### <a name="get_RevisionAtTime( $web, $topic"></a> getRevisionAtTime( $web, $topic, $time ) -> $rev
+
+Get the revision number of a topic at a specific time.
+
+- `$web` - web for topic
+- `$topic` - topic
+- `$time` - time (in epoch secs) for the rev
+
+Return: Single-digit revision number, or undef if it couldn't be determined (either because the topic isn't that old, or there was a problem)
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="readTopic( $web, $topic, $rev )"></a><a name="readTopic( $web, $topic, $rev ) "></a> readTopic( $web, $topic, $rev ) -> ( $meta, $text )
+
+Read topic text and meta data, regardless of access permissions.
+
+- `$web` - Web name, required, e.g. `'Main'`
+- `$topic` - Topic name, required, e.g. `'TokyoOffice'`
+- `$rev` - revision to read (default latest)
+
+Return: `( $meta, $text )` Meta data object and topic text
+
+`$meta` is a perl 'object' of class `TWiki::Meta`. This class is fully documented in the source code documentation shipped with the release, or can be inspected in the `lib/TWiki/Meta.pm` file.
+
+This method **ignores** topic access permissions. You should be careful to use `checkAccessPermissions` to ensure the current user has read access to the topic.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="read_TopicText( $web, $topic, $r"></a> readTopicText( $web, $topic, $rev, $ignorePermissions ) -> $text
+
+Read topic text, including meta data
+
+- `$web` - Web name, e.g. `'Main'`, or empty
+- `$topic` - Topic name, e.g. `'MyTopic'`, or `"Main.MyTopic"`
+- `$rev` - Topic revision to read, optional. Specify the minor part of the revision, e.g. `"5"`, not `"1.5"`; the top revision is returned if omitted or empty.
+- `$ignorePermissions` - Set to `"1"` if checkAccessPermission() is already performed and OK; an oops URL is returned if user has no permission
+
+Return: `$text` Topic text with embedded meta data; an oops URL for calling redirectCgiQuery() is returned in case of an error
+
+This method is more efficient than `readTopic`, but returns meta-data embedded in the text. Plugins authors must be very careful to avoid damaging meta-data. You are recommended to use readTopic instead, which is a lot safer..
+
+**Since:** TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
+
+### <a name="attachmentExists( $web, $topic,"></a><a name="attachmentExists( $web, $topic, "></a> attachmentExists( $web, $topic, $attachment ) -> $boolean
+
+Test if attachment exists
+
+- `$web` - Web name, optional, e.g. `Main`.
+- `$topic` - Topic name, required, e.g. `TokyoOffice`, or `Main.TokyoOffice`
+- `$attachment` - attachment name, e.g.=logo.gif=
+
+$web and $topic are parsed as described in the documentation for `normalizeWebTopicName`.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="readAttachment( $web, $topic, $n"></a> readAttachment( $web, $topic, $name, $rev ) -> $data
+
+- `$web` - web for topic
+- `$topic` - topic
+- `$name` - attachment name
+- `$rev` - revision to read (default latest)
+
+Read an attachment from the store for a topic, and return it as a string. The names of attachments on a topic can be recovered from the meta-data returned by `readTopic`. If the attachment does not exist, or cannot be read, undef will be returned.
+
+View permission on the topic is required for the read to be successful. Access control violations are flagged by a TWiki::AccessControlException. Permissions are checked for the user passed in.
+
+ my( $meta, $text ) = TWiki::Func::readTopic( $web, $topic );
+ my @attachments = $meta->find( 'FILEATTACHMENT' );
+ foreach my $a ( @attachments ) {
+ try {
+ my $data = TWiki::Func::readAttachment( $meta, $a->{name} );
+ ...
+ } catch TWiki::AccessControlException with {
+ };
+ }
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="saveAttachment( $web, $topic, $a"></a> saveAttachment( $web, $topic, $attachment, $opts )
+
+- `$web` - web for topic
+- `$topic` - topic to atach to
+- `$attachment` - name of the attachment
+- `$opts` - Ref to hash of options
+
+`$opts` may include:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>dontlog</code></td>
+ <td> don't log this change in twiki log </td>
+ </tr>
+ <tr>
+ <td><code>comment</code></td>
+ <td> comment for save </td>
+ </tr>
+ <tr>
+ <td><code>hide</code></td>
+ <td> if the attachment is to be hidden in normal topic view </td>
+ </tr>
+ <tr>
+ <td><code>stream</code></td>
+ <td> Stream of file to upload </td>
+ </tr>
+ <tr>
+ <td><code>file</code></td>
+ <td> Name of a file to use for the attachment data. ignored if stream is set. Local file on the server. </td>
+ </tr>
+ <tr>
+ <td><code>filepath</code></td>
+ <td> Client path to file </td>
+ </tr>
+ <tr>
+ <td><code>filesize</code></td>
+ <td> Size of uploaded data </td>
+ </tr>
+ <tr>
+ <td><code>filedate</code></td>
+ <td> Date </td>
+ </tr>
+</table>
+
+Save an attachment to the store for a topic. On success, returns undef. If there is an error, an exception will be thrown.
+
+ try {
+ TWiki::Func::saveAttachment( $web, $topic, 'image.gif',
+ { file => 'image.gif',
+ comment => 'Picture of Health',
+ hide => 1 } );
+ } catch Error::Simple with {
+ # see documentation on Error
+ } otherwise {
+ ...
+ };
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="moveAttachment( $web, $topic, $a"></a> moveAttachment( $web, $topic, $attachment, $newWeb, $newTopic, $newAttachment )
+
+- `$web` source web - required
+- `$topic` source topic - required
+- `$attachment` source attachment - required
+- `$newWeb` dest web
+- `$newTopic` dest topic
+- `$newAttachment` dest attachment
+
+Renames the topic. Throws an exception on error or access violation. If $newWeb is undef, it defaults to $web. If $newTopic is undef, it defaults to $topic. If $newAttachment is undef, it defaults to $attachment. If all of $newWeb, $newTopic and $newAttachment are undef, it is an error.
+
+The destination topic must already exist, but the destination attachment must **not** exist.
+
+Rename an attachment to $TWiki::cfg\{TrashWebName\}.TrashAttament to delete it.
+
+ use Error qw( :try );
+
+ try {
+ # move attachment between topics
+ moveAttachment( "Countries", "Germany", "AlsaceLorraine.dat",
+ "Countries", "France" );
+ # Note destination attachment name is defaulted to the same as source
+ } catch TWiki::AccessControlException with {
+ my $e = shift;
+ # see documentation on TWiki::AccessControlException
+ } catch Error::Simple with {
+ my $e = shift;
+ # see documentation on Error::Simple
+ };
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+## <a name="Assembling Pages"></a> Assembling Pages
+
+### <a name="readTemplate( $name, $skin ) - $"></a> readTemplate( $name, $skin ) -> $text
+
+Read a template or skin. Embedded [[template directives|TWiki/TWikiTemplates]] get expanded
+
+- `$name` - Template name, e.g. `'view'`
+- `$skin` - Comma-separated list of skin names, optional, e.g. `'print'`
+
+Return: `$text` Template text
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="loadTemplate ( $name, $skin, $we"></a> loadTemplate ( $name, $skin, $web ) -> $text
+
+- `$name` - template file name
+- `$skin` - comma-separated list of skins to use (default: current skin)
+- `$web` - the web to look in for topics that contain templates (default: current web)
+
+Return: expanded template text (what's left after removal of all %TMPL:DEF% statements)
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+Reads a template and extracts template definitions, adding them to the list of loaded templates, overwriting any previous definition.
+
+How TWiki searches for templates is described in [[TWikiTemplates]].
+
+If template text is found, extracts include statements and fully expands them.
+
+### <a name="expandTemplate( $def ) - $strin"></a> expandTemplate( $def ) -> $string
+
+Do a , only expanding the template (not expanding any variables other than %TMPL)
+
+- `$def` - template name
+
+Return: the text of the expanded template
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+A template is defined using a %TMPL:DEF% statement in a template file. See the documentation on TWiki templates for more information.
+
+### <a name="writeHeader( $query, $contentLen"></a> writeHeader( $query, $contentLength )
+
+Prints a basic content-type HTML header for text/html to standard out
+
+- `$query` - CGI query object. If not given, the default CGI query will be used. In most cases you should _not_ pass this parameter.
+- `$contentLength` - Length of content
+
+Return: none
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="redirect_CgiQuery( $query, $url"></a><a name="redirect_CgiQuery( $query, $url "></a> redirectCgiQuery( $query, $url )
+
+Redirect to URL
+
+- `$query` - CGI query object. Ignored, only there for compatibility. The session CGI query object is used instead.
+- `$url` - URL to redirect to
+
+Return: none, never returns
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="add_ToHEAD( $id, $header )"></a> addToHEAD( $id, $header )
+
+Adds `$header` to the HTML header (the
+
+tag). This is useful for Plugins that want to include some javascript custom css.
+
+- `$id` - Unique ID to prevent the same HTML from being duplicated. Plugins should use a prefix to prevent name clashes (e.g EDITTABLEPLUGIN\_JSCALENDAR)
+- `$header` - the HTML to be added to the
+
+section. The HTML must be valid in a HEAD tag - no checks are performed.
+
+All TWiki variables present in `$header` will be expanded before being inserted into the ``
+
+section.
+
+Note that this is _not_ the same as the HTTP header, which is modified through the Plugins `modifyHeaderHandler`.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+example:
+
+ TWiki::Func::addToHEAD('PATTERN_STYLE','<link id="twikiLayoutCss" rel="stylesheet" type="text/css" href="%PUBURL%/TWiki/PatternSkin/layout.css" media="all" />')
+
+### <a name="expand_CommonVariables( $text, $"></a> expandCommonVariables( $text, $topic, $web ) -> $text
+
+Expand all common `%VARIABLES%`
+
+- `$text` - Text with variables to expand, e.g. `'Current user is %WIKIUSER%'`
+- `$topic` - Current topic name, e.g. `'WebNotify'`
+- `$web` - Web name, optional, e.g. `'Main'`. The current web is taken if missing
+
+Return: `$text` Expanded text, e.g. `'Current user is TWikiGuest'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+See also: expandVariablesOnTopicCreation
+
+### <a name="renderText( $text, $web ) - $tex"></a> renderText( $text, $web ) -> $text
+
+Render text from TWiki markup into XHTML as defined in [[TWiki.TextFormattingRules|TWiki/TextFormattingRules]]
+
+- `$text` - Text to render, e.g. `'*bold* text and =fixed font='`
+- `$web` - Web name, optional, e.g. `'Main'`. The current web is taken if missing
+
+Return: `$text` XHTML text, e.g. `'<b>bold</b> and <code>fixed font</code>'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="internalLink( $pre, $web, $topic"></a> internalLink( $pre, $web, $topic, $label, $anchor, $createLink ) -> $text
+
+Render topic name and link label into an XHTML link. Normally you do not need to call this funtion, it is called internally by `renderText()`
+
+- `$pre` - Text occuring before the TWiki link syntax, optional
+- `$web` - Web name, required, e.g. `'Main'`
+- `$topic` - Topic name to link to, required, e.g. `'WebNotify'`
+- `$label` - Link label, required. Usually the same as `$topic`, e.g. `'notify'`
+- `$anchor` - Anchor, optional, e.g. `'#Jump'`
+- `$createLink` - Set to `'1'` to add question linked mark after topic name if topic does not exist;<br /> set to `'0'` to suppress link for non-existing topics
+
+Return: `$text` XHTML anchor, e.g. `'<a href='/cgi-bin/view/Main/WebNotify#Jump'>notify</a>'`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+## <a name="E-mail"></a> E-mail
+
+### <a name="sendEmail ( $text, $retries ) -"></a><a name="sendEmail ( $text, $retries ) - "></a> sendEmail ( $text, $retries ) -> $error
+
+- `$text` - text of the mail, including MIME headers
+- `$retries` - number of times to retry the send (default 1)
+
+Send an e-mail specified as MIME format content. To specify MIME format mails, you create a string that contains a set of header lines that contain field definitions and a message body such as:
+
+ To: liz@windsor.gov.uk
+ From: serf@hovel.net
+ CC: george@whitehouse.gov
+ Subject: Revolution
+
+ Dear Liz,
+
+ Please abolish the monarchy (with King George's permission, of course)
+
+ Thanks,
+
+ A. Peasant
+
+Leave a blank line between the last header field and the message body.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+### <a name="wiki_ToEmail( $wikiName ) - $ema"></a> wikiToEmail( $wikiName ) -> $email
+
+- `$wikiName` - wiki name of the user
+
+Get the e-mail address(es) of the named user. If the user has multiple e-mail addresses (for example, the user is a group), then the list will be comma-separated.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+## <a name="Creating New Topics"></a> Creating New Topics
+
+### <a name="expand_VariablesOnTopicCreation"></a><a name="expand_VariablesOnTopicCreation "></a> expandVariablesOnTopicCreation ( $text ) -> $text
+
+Expand the limited set of variables that are always expanded during topic creation
+
+- `$text` - the text to process
+
+Return: text with variables expanded
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+Expands only the variables expected in templates that must be statically expanded in new content.
+
+The expanded variables are:
+
+- `%DATE%` Signature-format date
+- `%SERVERTIME%` See [[TWikiVariables]]
+- `%GMTIME%` See [[TWikiVariables]]
+- `%USERNAME%` Base login name
+- `%WIKINAME%` Wiki name
+- `%WIKIUSERNAME%` Wiki name with prepended web
+- `%URLPARAM{...}%` - Parameters to the current CGI query
+- `%NOP%` No-op
+
+See also: expandVariables
+
+## <a name="Special handlers"></a> Special handlers
+
+Special handlers can be defined to make functions in plugins behave as if they were built-in to TWiki.
+
+### <a name="register_TagHandler( $var, \fn,"></a><a name="register_TagHandler( $var, \fn, "></a> registerTagHandler( $var, \\&fn, $syntax )
+
+Should only be called from initPlugin.
+
+Register a function to handle a simple variable. Handles both %VAR% and %VAR\{...\}%. Registered variables are treated the same as TWiki internal variables, and are expanded at the same time. This is a _lot_ more efficient than using the `commonTagsHandler`.
+
+- `$var` - The name of the variable, i.e. the 'MYVAR' part of %MYVAR%. The variable name **must** match /^[A-Z]\[A-Z0-9\_]\*$/ or it won't work.
+- `\&fn` - Reference to the handler function.
+- `$syntax` can be 'classic' (the default) or 'context-free'. 'classic' syntax is appropriate where you want the variable to support classic TWiki syntax i.e. to accept the standard `%MYVAR{ "unnamed" param1="value1" param2="value2" }%` syntax, as well as an unquoted default parameter, such as `%MYVAR{unquoted parameter}%`. If your variable will only use named parameters, you can use 'context-free' syntax, which supports a more relaxed syntax. For example, %MYVAR\{param1=value1, value 2, param3="value 3", param4='value 5"\}%
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+The variable handler function must be of the form:
+
+ sub handler(\%session, \%params, $topic, $web)
+
+where:
+
+- `\%session` - a reference to the TWiki session object (may be ignored)
+- `\%params` - a reference to a TWiki::Attrs object containing parameters. This can be used as a simple hash that maps parameter names to values, with \_DEFAULT being the name for the default parameter.
+- `$topic` - name of the topic in the query
+- `$web` - name of the web in the query
+
+for example, to execute an arbitrary command on the server, you might do this:
+
+ sub initPlugin{
+ TWiki::Func::registerTagHandler('EXEC', \&boo);
+ }
+
+ sub boo {
+ my( $session, $params, $topic, $web ) = @_;
+ my $cmd = $params->{_DEFAULT};
+
+ return "NO COMMAND SPECIFIED" unless $cmd;
+
+ my $result = `$cmd 2>&1`;
+ return $params->{silent} ? '' : $result;
+ }
+ }
+
+would let you do this: `%EXEC{"ps -Af" silent="on"}%`
+
+### <a name="registerRESTHandler( $alias, \fn"></a> registerRESTHandler( $alias, \\&fn, )
+
+Should only be called from initPlugin.
+
+Adds a function to the dispatch table of the REST interface
+
+- `$alias` - The name .
+- `\&fn` - Reference to the function.
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+The handler function must be of the form:
+
+ sub handler(\%session)
+
+where:
+
+- `\%session` - a reference to the TWiki session object (may be ignored)
+
+From the REST interface, the name of the plugin must be used as the subject of the invokation.
+
+Example
+
+----
+
+The [[EmptyPlugin]] has the following call in the initPlugin handler:
+
+ TWiki::Func::registerRESTHandler('example', \&restExample);
+
+This adds the `restExample` function to the REST dispatch table for the [[EmptyPlugin]] under the 'example' alias, and allows it to be invoked using the URL
+
+`http://server:port/bin/rest/EmptyPlugin/example`
+
+note that the URL
+
+`http://server:port/bin/rest/EmptyPlugin/restExample`
+
+(ie, with the name of the function instead of the alias) will not work.
+
+## <a name="Searching"></a> Searching
+
+### <a name="search_InWebContent($searchStrin"></a> searchInWebContent($searchString, $web, \\@topics, \\%options ) -> \\%map
+
+Search for a string in the content of a web. The search is over all content, including meta-data. Meta-data matches will be returned as formatted lines within the topic content (meta-data matches are returned as lines of the format %META:\\w+\{.\*\}%)
+
+- `$searchString` - the search string, in egrep format
+- `$web` - The web to search in
+- `\@topics` - reference to a list of topics to search
+- `\%option` - reference to an options hash
+
+The `\%options` hash may contain the following options:
+
+- `type` - if `regex` will perform a egrep-syntax RE search (default '')
+- `casesensitive` - false to ignore case (defaulkt true)
+- `files_without_match` - true to return files only (default false). If `files_without_match` is specified, it will return on the first match in each topic (i.e. it will return only one match per topic, and will not return matching lines).
+
+The return value is a reference to a hash which maps each matching topic name to a list of the lines in that topic that matched the search, as would be returned by 'grep'.
+
+To iterate over the returned topics use:
+
+ my $result = TWiki::Func::searchInWebContent( "Slimy Toad", $web, \@topics,
+ { casesensitive => 0, files_without_match => 0 } );
+ foreach my $topic (keys %$result ) {
+ foreach my $matching_line ( @{$result->{$topic}} ) {
+ ...etc
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+## <a name="Plugin-specific file handling"></a> Plugin-specific file handling
+
+### <a name="get_WorkArea( $pluginName ) - $d"></a> getWorkArea( $pluginName ) -> $directorypath
+
+Gets a private directory for Plugin use. The Plugin is entirely responsible for managing this directory; TWiki will not read from it, or write to it.
+
+The directory is guaranteed to exist, and to be writable by the webserver user. By default it will **not** be web accessible.
+
+The directory and it's contents are permanent, so Plugins must be careful to keep their areas tidy.
+
+**Since:** TWiki::Plugins::VERSION 1.1 (Dec 2005)
+
+### <a name="readFile( $filename ) - $text"></a> readFile( $filename ) -> $text
+
+Read file, low level. Used for Plugin workarea.
+
+- `$filename` - Full path name of file
+
+Return: `$text` Content of file, empty if not found
+
+**_NOTE:_** Use this function only for the Plugin workarea, **not** for topics and attachments. Use the appropriate functions to manipulate topics and attachments.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
+
+### <a name="saveFile( $filename, $text )"></a> saveFile( $filename, $text )
+
+Save file, low level. Used for Plugin workarea.
+
+- `$filename` - Full path name of file
+- `$text` - Text to save
+
+Return: none
+
+**_NOTE:_** Use this function only for the Plugin workarea, **not** for topics and attachments. Use the appropriate functions to manipulate topics and attachments.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
+
+## <a name="General Utilities"></a> General Utilities
+
+### <a name="get_RegularExpression( $name ) -"></a> getRegularExpression( $name ) -> $expr
+
+Retrieves a TWiki predefined regular expression or character class.
+
+- `$name` - Name of the expression to retrieve. See notes below
+
+Return: String or precompiled regular expression matching as described below.
+
+**Since:** TWiki::Plugins::VERSION 1.020 (9 Feb 2004)
+
+**_Note:_** TWiki internally precompiles several regular expressions to represent various string entities in an [[I18N]]-compatible manner. Plugins authors are encouraged to use these in matching where appropriate. The following are guaranteed to be present. Others may exist, but their use is unsupported and they may be removed in future TWiki versions.
+
+In the table below, the expression marked type 'String' are intended for use within character classes (i.e. for use within square brackets inside a regular expression), for example:
+
+ my $upper = TWiki::Func::getRegularExpression('upperAlpha');
+ my $alpha = TWiki::Func::getRegularExpression('mixedAlpha');
+ my $capitalized = qr/[$upper][$alpha]+/;
+
+Those expressions marked type 'RE' are precompiled regular expressions that can be used outside square brackets. For example:
+
+ my $webRE = TWiki::Func::getRegularExpression('webNameRegex');
+ my $isWebName = ( $s =~ m/$webRE/ );
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Name </strong></th>
+ <th bgcolor="#99CCCC"><strong> Matches </strong></th>
+ <th bgcolor="#99CCCC"><strong> Type </strong></th>
+ </tr>
+ <tr>
+ <td> upperAlpha </td>
+ <td> Upper case characters </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> upperAlphaNum </td>
+ <td> Upper case characters and digits </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> lowerAlpha </td>
+ <td> Lower case characters </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> lowerAlphaNum </td>
+ <td> Lower case characters and digits </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> numeric </td>
+ <td> Digits </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> mixedAlpha </td>
+ <td> Alphabetic characters </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> mixedAlphaNum </td>
+ <td> Alphanumeric characters </td>
+ <td> String </td>
+ </tr>
+ <tr>
+ <td> wikiWordRegex </td>
+ <td>[[Main/WikiWords]]</td>
+ <td> RE </td>
+ </tr>
+ <tr>
+ <td> webNameRegex </td>
+ <td> User web names </td>
+ <td> RE </td>
+ </tr>
+ <tr>
+ <td> anchorRegex </td>
+ <td> #AnchorNames </td>
+ <td> RE </td>
+ </tr>
+ <tr>
+ <td> abbrevRegex </td>
+ <td> Abbreviations e.g. GOV, IRS </td>
+ <td> RE </td>
+ </tr>
+ <tr>
+ <td> emailAddrRegex </td>
+ <td><a href="mailto:email@address.com">email@address.com</a></td>
+ <td> RE </td>
+ </tr>
+ <tr>
+ <td> tagNameRegex </td>
+ <td> Standard variable names e.g. %THIS_BIT% (THIS_BIT only) </td>
+ <td> RE </td>
+ </tr>
+</table>
+
+### <a name="normalize_WebTopicName($web, $to"></a> normalizeWebTopicName($web, $topic) -> ($web, $topic)
+
+Parse a web and topic name, supplying defaults as appropriate.
+
+- `$web` - Web name, identifying variable, or empty string
+- `$topic` - Topic name, may be a web.topic string, required.
+
+Return: the parsed Web/Topic pai
+
+**Since:** TWiki::Plugins::VERSION 1.1
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Input </strong></th>
+ <th bgcolor="#99CCCC"><strong> Return </strong></th>
+ </tr>
+ <tr>
+ <td><tt>( 'Web', 'Topic' ) </tt></td>
+ <td><tt>( 'Web', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( '', 'Topic' ) </tt></td>
+ <td><tt>( 'Main', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( '', '' ) </tt></td>
+ <td><tt>( 'Main', 'WebHome' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( '', 'Web/Topic' ) </tt></td>
+ <td><tt>( 'Web', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( '', 'Web.Topic' ) </tt></td>
+ <td><tt>( 'Web', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( 'Web1', 'Web2.Topic' )</tt></td>
+ <td><tt>( 'Web2', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( 'Main', 'Topic' )</tt></td>
+ <td><tt>( 'Main', 'Topic' ) </tt></td>
+ </tr>
+ <tr>
+ <td><tt>( 'TWiki', 'Topic' )</tt></td>
+ <td><tt>( 'TWiki', 'Topic' ) </tt></td>
+ </tr>
+</table>
+
+where `Main` and `TWiki` are the web names set in $cfg\{UsersWebName\} and $cfg\{SystemWebName\} respectively.
+
+### <a name="writeWarning( $text )"></a> writeWarning( $text )
+
+Log Warning that may require admin intervention to data/warning.txt
+
+- `$text` - Text to write; timestamp gets added
+
+Return: none
+
+**Since:** TWiki::Plugins::VERSION 1.020 (16 Feb 2004)
+
+### <a name="writeDebug( $text )"></a> writeDebug( $text )
+
+Log debug message to data/debug.txt
+
+- `$text` - Text to write; timestamp gets added
+
+Return: none
+
+**Since:** TWiki::Plugins::VERSION 1.020 (16 Feb 2004)
+
+### <a name="formatTime( $time, $format, $tim"></a> formatTime( $time, $format, $timezone ) -> $text
+
+Format the time in seconds into the desired time string
+
+- `$time` - Time in epoc seconds
+- `$format` - Format type, optional. Default e.g. `'31 Dec 2002 - 19:30'`. Can be `'$iso'` (e.g. `'2002-12-31T19:30Z'`), `'$rcs'` (e.g. `'2001/12/31 23:59:59'`, `'$http'` for HTTP header format (e.g. `'Thu, 23 Jul 1998 07:21:56 GMT'`), or any string with tokens `'$seconds, $minutes, $hours, $day, $wday, $month, $mo, $year, $ye, $tz'` for seconds, minutes, hours, day of month, day of week, 3 letter month, 2 digit month, 4 digit year, 2 digit year, timezone string, respectively
+- `$timezone` - either not defined (uses the displaytime setting), 'gmtime', or 'servertime'
+
+Return: `$text` Formatted time string
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> Note: </td>
+ <td> if you used the removed formatGmTime, add a third parameter 'gmtime' </td>
+ </tr>
+</table>
+
+**Since:** TWiki::Plugins::VERSION 1.020 (26 Feb 2004)
+
+### <a name="is_ValidWikiWord ( $text ) - $bo"></a> isValidWikiWord ( $text ) -> $boolean
+
+Check for a valid [[WikiWord]] or [[WikiName]]
+
+- `$text` - Word to test
+
+**Since:** TWiki::Plugins::VERSION 1.100 (Dec 2005)
+
+### <a name="extractParameters($attr ) - %par"></a> extractParameters($attr ) -> %params
+
+Extract all parameters from a variable string and returns a hash of parameters
+
+- `$attr` - Attribute string
+
+Return: `%params` Hash containing all parameters. The nameless parameter is stored in key `_DEFAULT`
+
+**Since:** TWiki::Plugins::VERSION 1.025 (26 Aug 2004)
+
+- Example:
+ - Variable: `%TEST{ 'nameless' name1="val1" name2="val2" }%`
+ - First extract text between `{...}` to get: `'nameless' name1="val1" name2="val2"`
+ - Then call this on the text: <br />
+- params = TWiki::Func::extractParameters( $text );=
+ - The `%params` hash contains now: <br />`_DEFAULT => 'nameless'`<br />`name1 => "val1"`<br />`name2 => "val2"`
+
+### <a name="extract_NameValuePair( $attr, $n"></a> extractNameValuePair( $attr, $name ) -> $value
+
+Extract a named or unnamed value from a variable parameter string - Note: | Function TWiki::Func::extractParameters is more efficient for extracting several parameters
+
+- `$attr` - Attribute string
+- `$name` - Name, optional
+
+Return: `$value` Extracted value
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+- Example:
+ - Variable: `%TEST{ 'nameless' name1="val1" name2="val2" }%`
+ - First extract text between `{...}` to get: `'nameless' name1="val1" name2="val2"`
+ - Then call this on the text: <br />`my $noname = TWiki::Func::extractNameValuePair( $text );`<br />`my $val1 = TWiki::Func::extractNameValuePair( $text, "name1" );`<br />`my $val2 = TWiki::Func::extractNameValuePair( $text, "name2" );`
+
+## <a name="Deprecated functions"></a> Deprecated functions
+
+From time-to-time, the TWiki developers will add new functions to the interface (either to [[TWikiFuncDotPm]], or new handlers). Sometimes these improvements mean that old functions have to be deprecated to keep the code manageable. When this happens, the deprecated functions will be supported in the interface for at least one more TWiki release, and probably longer, though this cannot be guaranteed.
+
+Updated plugins may still need to define deprecated handlers for compatibility with old TWiki versions. In this case, the plugin package that defines old handlers can suppress the warnings in %FAILEDPLUGINS%.
+
+This is done by defining a map from the handler name to the `TWiki::Plugins` version _in which the handler was first deprecated_. For example, if we need to define the `endRenderingHandler` for compatibility with `TWiki::Plugins` versions before 1.1, we would add this to the plugin:
+
+ package TWiki::Plugins::SinkPlugin;
+ use vars qw( %TWikiCompatibility );
+ $TWikiCompatibility{endRenderingHandler} = 1.1;
+
+If the currently-running TWiki version is 1.1 _or later_, then the _handler will not be called_ and _the warning will not be issued_. TWiki with versions of `TWiki::Plugins` before 1.1 will still call the handler as required.
+
+The following functions are retained for compatibility only. You should stop using them as soon as possible.
+
+### <a name="get_ScriptUrlPath( ) - $path"></a> getScriptUrlPath( ) -> $path
+
+Get script URL path
+
+**DEPRECATED** since 1.1 - use `getScriptUrl` instead.
+
+Return: `$path` URL path of TWiki scripts, e.g. `"/cgi-bin"`
+
+**WARNING:** you are strongly recommended **not** to use this function, as the \{ScriptUrlPaths\} URL rewriting rules will not apply to urls generated using it.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_PublicWebList( ) - @webs"></a> getPublicWebList( ) -> @webs
+
+**DEPRECATED** since 1.1 - use `getListOfWebs` instead.
+
+Get list of all public webs, e.g. all webs that do not have the `NOSEARCHALL` flag set in the [[WebPreferences]]
+
+Return: `@webs` List of all public webs, e.g. `( 'Main', 'Know', 'TWiki' )`
+
+**Since:** TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
+
+### <a name="format_GmTime( $time, $format )"></a><a name="format_GmTime( $time, $format ) "></a> formatGmTime( $time, $format ) -> $text
+
+**DEPRECATED** since 1.1 - use `formatTime` instead.
+
+Format the time to GM time
+
+- `$time` - Time in epoc seconds
+- `$format` - Format type, optional. Default e.g. `'31 Dec 2002 - 19:30'`, can be `'iso'` (e.g. `'2002-12-31T19:30Z'`), `'rcs'` (e.g. `'2001/12/31 23:59:59'`, `'http'` for HTTP header format (e.g. `'Thu, 23 Jul 1998 07:21:56 GMT'`)
+
+Return: `$text` Formatted time string
+
+**Since:** TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
+
+### <a name="get_DataDir( ) - $dir"></a> getDataDir( ) -> $dir
+
+**DEPRECATED** since 1.1 - use the [[content handling functions|Main/WebHome#Functions_Content_Handling]] to manipulate topics instead
+
+Get data directory (topic file root)
+
+Return: `$dir` Data directory, e.g. `'/twiki/data'`
+
+This function violates store encapsulation and is therefore **deprecated**.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
+
+### <a name="get_PubDir( ) - $dir"></a> getPubDir( ) -> $dir
+
+**DEPRECATED** since 1.1 - use the [[content handling functions|Main/WebHome#Functions_Content_Handling]] to manipulateattachments instead
+
+Get pub directory (file attachment root). Attachments are in `$dir/Web/TopicName`
+
+Return: `$dir` Pub directory, e.g. `'/htdocs/twiki/pub'`
+
+This function violates store encapsulation and is therefore **deprecated**.
+
+Use `readAttachment` and `saveAttachment` instead.
+
+**Since:** TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
+
+### <a name="checkDependencies( $moduleName,"></a><a name="checkDependencies( $moduleName, "></a> checkDependencies( $moduleName, $dependenciesRef ) -> $error
+
+**DEPRECATED** since 1.1 - use TWiki:Plugins.BuildContrib and define DEPENDENCIES that can be statically evaluated at install time instead. It is a lot more efficient.
+
+**Since:** TWiki::Plugins::VERSION 1.025 (01 Aug 2004)
-<div>
- <ul>
- <li><a href="#TWiki Glossary"> TWiki Glossary</a></li>
- </ul>
-</div>
-
# <a name="TWiki Glossary"></a> TWiki Glossary
_Simple glossary of TWiki terms_
</tr>
<tr>
<td> Plugin API: </td>
- <td> The standard interface for creating TWiki <em>Plugins</em> and add-on programs that ensure a perfect integration. [[Main/TWikiFuncModule]]</td>
+ <td> The standard interface for creating TWiki <em>Plugins</em> and add-on programs that ensure a perfect integration. [[Main/TWikiFuncDotPm]]</td>
</tr>
<tr>
<td> Preferences: </td>
</tr>
</table>
--- TWiki:Main.MikeMannix - 27 Aug 2001 %BR% -- TWiki:Main.PeterThoeny - 27 Jan 2003
+**_Related Topics:_** [[UserDocumentationCategory]]
<div>
<ul>
- <li><a href="#Appendix D: TWiki Development Ti"> Appendix D: TWiki Development Timeline</a><ul>
+ <li><a href="#Appendix A: TWiki Development Ti"> Appendix A: TWiki Development Timeline</a><ul>
+ <li><a href="#TWiki Release 4.0.0 (Dakar), 01"> TWiki Release 4.0.0 (Dakar), 01 Feb 2006</a></li>
<li><a href="#01-Sep-2004 Release (Cairo)"> 01-Sep-2004 Release (Cairo)</a></li>
<li><a href="#01-Feb-2003 Release (Beijing)"> 01-Feb-2003 Release (Beijing)</a></li>
<li><a href="#01-Dec-2001 Release (Athens)"> 01-Dec-2001 Release (Athens)</a></li>
</ul>
</div>
-# <a name="Appendix D: TWiki Development Ti"></a> Appendix D: TWiki Development Timeline
+# <a name="Appendix A: TWiki Development Ti"></a> Appendix A: TWiki Development Timeline
+
+<a name="DakarRelease"></a>
+
+## <a name="TWiki Release 4.0.0 (Dakar), 01"></a><a name="TWiki Release 4.0.0 (Dakar), 01 "></a> TWiki Release 4.0.0 (Dakar), 01 Feb 2006
+
+**_Major New Features_**
+
+- Much simpler install and configuration
+- Integrated session support
+- Webserver-independent login/logout
+- Security sandbox blocking exploits for remote command execution on the server
+- Edit conflict resolution with automatic merge
+- Multilingual UI
+- E-mail confirmations for registration
+- WYSIWYG editor (beta)
+- Hierarchical sub-webs (beta)
+
+Many, many people worked on TWiki-4.0.0. The credits in the table below only list the people who worked on individual enhancements. If you find an omission please fix it at TWiki:TWiki.%TOPIC%. There were many other contributors; for a full list, visit [[TWikiContributor]].
+
+Most of the redesign, refactoring and new documentation work in Dakar release was done by [Crawford Currie](http://c-dot.co.uk). [Michael Sparks](http://kamaelia.org/Michael.html) provided ideas and proof of concept for several improvements. Other people who gave _large_ amounts of their time and patience to less sexy aspects of the work, such as testing, infrastructure and documentation, are [[AntonAylward]], [[KennethLavrsen]], [[LynnwoodBrown]], [[MichaelDaum]], [Peter Thoeny](http://www.structuredwikis.com/), [Sven Dowideit](http://www.home.org.au), [[WillNorris]].
+
+<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th align="left" bgcolor="#6b7f93" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Installation & configuration </strong> </font></span></th>
+ <th align="left" bgcolor="#6b7f93" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Contributor </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Much simpler install and configuration </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/LynnwoodBrown]], [[TWiki:Main/ArthurClemens]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><code>mod_perl</code> safe code for better performance </td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Security </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Security sandbox blocking exploits for remote command execution on the server </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://www.enyo.de/fw/" target="_top">Florian Weimer</a>, <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, <a href="http://www.home.org.au" target="_top">Sven Dowideit</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Reworked access permission model </td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Internationalization & localization </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/UserInterfaceInternationalisation]]</td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/AntonioTerceiro]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Chinese translation </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/CheDong]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Danish translation </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/SteffenPoulsen]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Dutch translation </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/ArthurClemens]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> French translation </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/BenVoui]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> German translation </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/AndreUlrich]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Portuguese translation </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/AntonioTerceiro]], [[TWiki:Main/CarlinhosCecconi]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Spanish translation </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/WillNorris]], [[TWiki:Main/MiguelABayona]]</td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> New features for users </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Edit conflict resolution with automatic merge </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Fine grained change notification on page level and parent/child relationship </td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> WYSIWYG editor </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/ColasNahaboo]], [[TWiki:Main/DamienMandrioli]], [[TWiki:Main/RomainRaugi]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Integrated session support </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/GregAbbas]], <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Webserver-independent login/logout </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style="">[[TWiki:Codev/RegisterCgiScriptRewrite]]</td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/MartinCleaver]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/TipOfTheDayFeatureRequest]]</td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/PaulineCheung]], <a href="http://www.structuredwikis.com/" target="_top">Peter Thoeny</a>, [[TWiki:Main/AntonAylward]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style="">[[Main/WebAtomBase]]</td>
+ <td bgcolor="#ffffff" style=""><a href="http://www.structuredwikis.com/" target="_top">Peter Thoeny</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/ForceNewRevisionCheckBox]]</td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/WillNorris]]</td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> New features for TWiki administrators and wiki application developers </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Improved preferences handling </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/ThomasWeigert]], <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Named include sections </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/RafaelAlvarez]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/AllowDynamicTopicNameCreation]]</td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://www.home.org.au" target="_top">Sven Dowideit</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style="">[[TWiki:Codev/ParameterizedIncludes]]</td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/DynamicFormOptionDefinitions]] of [[Main/TWikiForms]] with [[Main/FormattedSearch]]</td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/MartinCleaver]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> SEARCH enhancements with new parameters <code>excludeweb</code>, <code>newline</code>, <code>noempty</code>, <code>nofinalnewline</code>, <code>nonoise</code>, <code>recurse</code>, <code>zeroresults</code></td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/ArthurClemens]], <a href="http://www.structuredwikis.com/" target="_top">Peter Thoeny</a>, [[TWiki:Main/ThomasWeigert]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[Main/FormattedSearch]] enhancements with <code>$changes</code>, <code>$count</code>, <code>$formfield(name, 30, ...)</code>, <code>$summary(expandvar)</code>, <code>$summary(noheaders)</code>, <code>$summary(showvarnames)</code></td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/ColasNahaboo]], <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, <a href="http://www.structuredwikis.com/" target="_top">Peter Thoeny</a>, <a href="http://www.home.org.au" target="_top">Sven Dowideit</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> New [[Main/TWikiVariables]] [[Main/TWikiVariables#VarACTIVATEDPLUGINS]], [[Main/TWikiVariables#VarALLVARIABLES]], [[Main/TWikiVariables#VarAUTHREALM]], [[Main/TWikiVariables#VarEMAILS]], [[Main/TWikiVariables#VarFAILEDPLUGINS]], [[Main/TWikiVariables#VarHTTP]], [[Main/TWikiVariables#VarHTTPS]], [[Main/TWikiVariables#VarICONURL]], [[Main/TWikiVariables#VarICONURLPATH]], [[Main/TWikiVariables#VarIF]], [[Main/TWikiVariables#VarLANGUAGES]], [[Main/TWikiVariables#VarLOCALSITEPREFS]], [[Main/TWikiVariables#VarLOGIN]], [[Main/TWikiVariables#VarLOGOUT]], [[Main/TWikiVariables#VarMAKETEXT]], [[Main/TWikiVariables#VarMETA]], [[Main/TWikiVariables#VarPLUGINDESCRIPTIONS]], [[Main/TWikiVariables#VarQUERYSTRING]], [[Main/TWikiVariables#VarSTARTSECTION]]/[[Main/TWikiVariables#VarENDSECTION]], [[Main/TWikiVariables#VarSESSION_VARIABLE]], [[Main/TWikiVariables#VarSESSIONID]], [[Main/TWikiVariables#VarSESSIONVAR]], [[Main/TWikiVariables#VarSPACEOUT]], [[Main/TWikiVariables#VarUSERLANGUAGE]], [[Main/TWikiVariables#VarWIKIHOMEURL]]</td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/ArthurClemens]], [[TWiki:Main/AntonioTerceiro]], <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/GregAbbas]], [[TWiki:Main/PeterThoeny]], <a href="http://www.home.org.au" target="_top">Sven Dowideit</a>, [[TWiki:Main/WillNorris]] and many more </td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Codev/TWikiFormWithHiddenType]] and other form enhancements </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/LynnwoodBrown]], [[TWiki:Main/ThomasWeigert]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style="">[[TWiki:Codev/SupportTopicSpecificTemplates]] for TWiki applications </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/ThomasWeigert]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Direct save feature for one-click template-based topic creation </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/LynnwoodBrown]], <a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/ThomasWeigert]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style="">[[TWiki:Codev/AutomaticAttachments]] showing all files in the attachment directory </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/MartinCleaver]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Rename, move or delete webs </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/PeterNixon]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Hierarchical subwebs (beta) </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/PeterNixon]]</td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> New features for Plugin developers </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> REST (representational state transfer) interface for Plugins </td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/RafaelAlvarez]], [[TWiki:Main/MartinCleaver]], <a href="http://www.home.org.au" target="_top">Sven Dowideit</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> New and improved Plugins APIs </td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/ThomasWeigert]]</td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Improvements in the TWiki engine room </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Major OO redesign and refactoring of codebase </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Automatic build system </td>
+ <td bgcolor="#ffffff" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Extensive test suite, unit tests and testcases </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> TWiki:Codev.DevelopBranch , <a href="http://develop.twiki.org/~develop/cgi-bin/view/Bugs" target="_top">DEVELOP branch Bugs system</a></td>
+ <td bgcolor="#ffffff" style=""><a href="http://www.home.org.au" target="_top">Sven Dowideit</a></td>
+ </tr>
+ <tr>
+ <th align="left" bgcolor="#6b7f93" colspan="2" maxcols="0" style="text-align: left"><span><font color="#ffffff"> <strong> Documentation, logo artwork, skins: </strong> </font></span></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Documentation </td>
+ <td bgcolor="#ecf2f8" style=""><a href="http://c-dot.co.uk" target="_top">Crawford Currie</a>, [[TWiki:Main/LynnwoodBrown]], <a href="http://www.structuredwikis.com/" target="_top">Peter Thoeny</a>, <a href="http://www.home.org.au" target="_top">Sven Dowideit</a> and others </td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""> Design of [[Main/TWikiLogos]] with big "T" in a speech bubble </td>
+ <td bgcolor="#ffffff" style="">[[TWiki:Main/ArthurClemens]], [[TWiki:Main/PeterThoeny]]</td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Improved templates and [[Main/PatternSkin]]</td>
+ <td bgcolor="#ecf2f8" style="">[[TWiki:Main/ArthurClemens]]</td>
+ </tr>
+</table>
+
+See more details at [[TWikiReleaseNotes04x00x00]]
+
+<a name="CairoRelease"></a>
## <a name="01-Sep-2004 Release (Cairo)"></a> 01-Sep-2004 Release (Cairo)
- Many improvements to SEARCH
- Improved support for internationalisation
- Better topic management screens
-- More pre-installed Plugins: CommentPlugin, EditTablePlugin, RenderListPlugin, SlideShowPlugin, SmiliesPlugin, SpreadSheetPlugin, TablePlugin
+- More pre-installed Plugins: [[CommentPlugin]], [[EditTablePlugin]], [[RenderListPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[SpreadSheetPlugin]], [[TablePlugin]]
- Improved Plugins API and more Plugin callbacks
- Better support for different authentication methods
- Many user interface and usability improvements
<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#6b7f93" maxcols="0" style="width: 90%" width="90%"><a href="http://localhost?sortcol=0;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Details of New Features and Enhancements of 01-Sep-2004 Release</font></a></th>
- <th bgcolor="#6b7f93" maxcols="0" style="width: 10%" width="10%"><a href="http://localhost?sortcol=1;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Developer, Sponsor</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style="width: 90%" width="90%"><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Details of New Features and Enhancements of 01-Sep-2004 Release</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style="width: 10%" width="10%"><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Developer, Sponsor</font></a></th>
</tr>
<tr>
<td bgcolor="#ecf2f8" style="width: 90%" width="90%"> Install: Ship with an automatic upgrade script to facilitate TWiki upgrades. <a href="http://TWiki.org/cgi-bin/view/Codev/CairoReleaseUpgradeGuide" target="_top">Details</a></td>
<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#6b7f93" maxcols="0" style="width: 90%" width="90%"><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Bug Fixes of 01-Sep-2004 Release</font></a></th>
- <th bgcolor="#6b7f93" maxcols="0" style="width: 10%" width="10%"><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Developer, Sponsor</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style="width: 90%" width="90%"><a href="http://localhost?sortcol=0;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Bug Fixes of 01-Sep-2004 Release</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style="width: 10%" width="10%"><a href="http://localhost?sortcol=1;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Developer, Sponsor</font></a></th>
</tr>
<tr>
<td bgcolor="#ecf2f8" style="width: 90%" width="90%"> Fix: Consistently create headings with empty anchor tags. <a href="http://TWiki.org/cgi-bin/view/Codev/AllcapsHeadingsProduceBrokenAnchors" target="_top">Details</a></td>
</tr>
<tr>
<td bgcolor="#ecf2f8" style="width: 90%" width="90%"> Fix: Double quotes got replaced by " in TWiki forms. <a href="http://TWiki.org/cgi-bin/view/Codev/DoubleQuoteHandlingInTwikiForms" target="_top">Details</a></td>
- <td bgcolor="#ecf2f8" style="width: 10%" width="10%"> TWiki: MS TWiki:Main.PeterThoeny </td>
+ <td bgcolor="#ecf2f8" style="width: 10%" width="10%"> TWiki:Main.MichaelSparks TWiki:Main.PeterThoeny </td>
</tr>
<tr>
<td bgcolor="#ffffff" style="width: 90%" width="90%"> Fix: Duplicated Wiki name in .htpasswd entry for sha1 encoding. <a href="http://TWiki.org/cgi-bin/view/Codev/DuplicatedWikiNameInHtpasswdEntry" target="_top">Details</a></td>
</tr>
</table>
+<a name="BeijingRelease"></a>
+
## <a name="01-Feb-2003 Release (Beijing)"></a> 01-Feb-2003 Release (Beijing)
- **18 Jan 2003** - TWiki:Main.PeterThoeny
- Support for `/bin/view/Web.TopicName` topic view URL (besides the default `/bin/view/Web/TopicName` URL); useful for [[InterwikiPlugin]] links like TWiki:Codev.ReadmeFirst
- **31 Dec 2002** - TWiki:Main.PeterThoeny
- - Enhanced Plugin API to manipulate topic data with new functions in [[TWikiFuncModule]]: `readTopicText`, `saveTopicText`, `setTopicEditLock`, `checkTopicEditLock`
+ - Enhanced Plugin API to manipulate topic data with new functions in Func.pm: `readTopicText`, `saveTopicText`, `setTopicEditLock`, `checkTopicEditLock`
- **31 Dec 2002** - TWiki:Main.PeterThoeny
- New `%NOAUTOLINK%` setting in the [[TWikiPreferences]] to disable the auto-linking of [[WikiWords]]
- **29 Dec 2002** - TWiki:Main.AndreaSterbini, TWiki:Main.PeterThoeny, TWiki:Main.RichardDonkin, TWiki:Main.SvenDowideit
- **09 Jan 2002** - TWiki:Main.JohnTalintyre
- Variables inside `<verbatim>` tags are no longer expanded
+<a name="AthensRelease"></a>
+
## <a name="01-Dec-2001 Release (Athens)"></a> 01-Dec-2001 Release (Athens)
- **25 Oct 2001** - TWiki:Main.PeterThoeny
## <a name="01-Dec-2000 Release"></a> 01-Dec-2000 Release
- **03 Nov 2000** - TWiki:Main.PeterThoeny
- - Flag `$doHidePasswdInRegistration` in `wikicfg.pm` to hide plain text password in registration email.
+ - Flag `$doHidePasswdInRegistration` in `wikicfg.pm` to hide plain text password in registration e-mail.
- **01 Nov 2000** - TWiki:Main.PeterThoeny
- - New variable `%VAR{"NAME" web="Web"}%` to get web specific preferences. More in [[TWikiVariables]].
+ - New variable `%VAR{"NAME" web="Web"}%` to get web-specific preferences. More in [[TWikiVariables]].
- **01 Nov 2000** - TWiki:Main.PeterThoeny
- Added a "Cancel" link in edit that releases the edit lock.
- **23 Oct 2000** - TWiki:Main.PeterThoeny
- **29 Jan 2000** - TWiki:Main.PeterThoeny
- Fixed bug where TWiki would not initialize correctly under certain circumstances, i.e. when running it under mod\_perl. Sub `initialize` in `wiki.pm` did not handle `$thePathInfo` correctly.
- **24 Jan 2000** - TWiki:Main.PeterThoeny
- - Fixed bug where an email address starting with a [[WikiName]] was rendered as an internal Wiki link instead of an email address, i.e. <SomeWikiName@somewhere.test> .
+ - Fixed bug where an e-mail address starting with a [[WikiName]] was rendered as an internal Wiki link instead of an e-mail address, i.e. <SomeWikiName@somewhere.test> .
- **10 Jan 2000** - TWiki:Main.PeterThoeny
- No more escaping for '%' percent characters. (Number of consecutive '%' entered and displayed is identical.)
- **03 Oct 1999** - TWiki:Main.PeterThoeny
- - Limit the number of revisions shown at the bottom of the topic. Example <br /> Topic %TOPIC% . \{ ..... [Diffs](../../rdiff/%WEB%/%TOPIC%) r1.10 [>](../../rdiff/%WEB%/%TOPIC%?rev1=1.10&rev2=1.9) [r1.9](../../view/%WEB%/%TOPIC%?rev=1.9) [>](../../rdiff/%WEB%/%TOPIC%?rev1=1.9&rev2=1.8) [r1.8](../../view/%WEB%/%TOPIC%?rev=1.8) [>](../../rdiff/%WEB%/%TOPIC%?rev1=1.8&rev2=1.7) [r1.7](../../view/%WEB%/%TOPIC%?rev=1.7) [>...](../../oops/%WEB%/%TOPIC%?template=oopsrev¶m1=1.10) \} <br /> Additional revisions can be selected by pressing the `>...` link.
+ - Limit the number of revisions shown at the bottom of the topic. Example %BR% Topic %TOPIC% . \{ ..... [Diffs](http://www.dementia.org/twiki//rdiff/%WEB%/%TOPIC%) r1.10 [>](http://www.dementia.org/twiki//rdiff/%WEB%/%TOPIC%?rev1=1.10&rev2=1.9) [r1.9](http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?rev=1.9) [>](http://www.dementia.org/twiki//rdiff/%WEB%/%TOPIC%?rev1=1.9&rev2=1.8) [r1.8](http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?rev=1.8) [>](http://www.dementia.org/twiki//rdiff/%WEB%/%TOPIC%?rev1=1.8&rev2=1.7) [r1.7](http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?rev=1.7) [>...](http://www.dementia.org/twiki//oops/%WEB%/%TOPIC%?template=oopsrev¶m1=1.10) \} %BR% Additional revisions can be selected by pressing the `>...` link.
## <a name="01-Sep-1999 Release"></a> 01-Sep-1999 Release
- **09 Feb 1999** - TWiki:Main.PeterThoeny
- No new topic revision is created if the _same_ person saves a topic again within _one_ hour.
- **03 Feb 1999** - TWiki:Main.PeterThoeny
- - Possible to view complete revision history of a topic on one page. Access at the linked date in the Changes page, or the `Diffs` link at the bottom of each topic, e.g. <br /><code> Topic TWikiHistory . \{ Edit Ref-By Diffs r1.3 > r1.2 > r1.1 \} <br /> Revision r1.3 1998/11/10 01:34 by PeterThoeny </code>
+ - Possible to view complete revision history of a topic on one page. Access at the linked date in the Changes page, or the `Diffs` link at the bottom of each topic, e.g. %BR% ` Topic TWikiHistory . { Edit Ref-By Diffs r1.3 > r1.2 > r1.1 } %BR% Revision r1.3 1998/11/10 01:34 by PeterThoeny `
- **04 Jan 1999** - TWiki:Main.PeterThoeny
- Fixed bug when viewing differences between topic revisions that include HTML table tags like <table>, <tr>, <td>.
- **18 Nov 1998** - TWiki:Main.PeterThoeny
- Internal log of topic save actions to the file `data/logYYYYMM.txt`, where `YYYYMM` the year and month in numeric format is. Intended for auditing only, not accessible from the web.
- **10 Nov 1998** - TWiki:Main.PeterThoeny
- - The email notification and the Changes topic have now a topic date that is linked. Clicking on the link will show the difference between the two most recent topic revisions.
+ - The e-mail notification and the Changes topic have now a topic date that is linked. Clicking on the link will show the difference between the two most recent topic revisions.
- **10 Nov 1998** - TWiki:Main.PeterThoeny
- - View differences between topic revisions. Each topic has a list of revisions (e.g. `r1.3`) and differences thereof (e.g. `>`) at the bottom <br /><code> Topic TWikiHistory . \{ Edit Ref-By r1.3 > r1.2 > r1.1 \} <br /> Revision r1.3 1998/11/10 01:34 by TWiki:Main.PeterThoeny </code>
+ - View differences between topic revisions. Each topic has a list of revisions (e.g. `r1.3`) and differences thereof (e.g. `>`) at the bottom %BR% ` Topic TWikiHistory . { Edit Ref-By r1.3 > r1.2 > r1.1 } %BR% Revision r1.3 1998/11/10 01:34 by TWiki:Main.PeterThoeny `
- **26 Oct 1998** - TWiki:Main.PeterThoeny
- Added preview of topic changes before saving the topic. This was necessary to prevent unneeded revisions.
- **26 Oct 1998** - TWiki:Main.PeterThoeny
- - Added revision control using RCS. Each topic has now a list of revisions at the bottom and a revision info, e.g. <br /><code> Topic TWikiHistory . \{ Edit Ref-By r1.3 r1.2 r1.1 \} <br /> Revision r1.3 1998/10/26 01:34:00 by TWiki:Main.PeterThoeny </code>
+ - Added revision control using RCS. Each topic has now a list of revisions at the bottom and a revision info, e.g. %BR% ` Topic TWikiHistory . { Edit Ref-By r1.3 r1.2 r1.1 } %BR% Revision r1.3 1998/10/26 01:34:00 by TWiki:Main.PeterThoeny `
- **14 Oct 1998** - TWiki:Main.PeterThoeny
- Refered-By Find out which topics have a link to the current topic. Each topic has a Ref-By link for that. Note Only references from the current web are shown, not references from other webs.
- **13 Oct 1998** - TWiki:Main.PeterThoeny
- Alphabetical topic index in [[WebSearch]].
- **24 Sep 1998** - TWiki:Main.PeterThoeny
- - Corrected templates for automatic email notification so that MS Outlook can display attachment as an HTML file.
+ - Corrected templates for automatic e-mail notification so that MS Outlook can display attachment as an HTML file.
- **13 Aug 1998** - TWiki:Main.PeterThoeny
- [[WikiNotation]] allows also numbers after the `AaA` sequence, e.g. `AaA1` is a valid [[WikiTopic]] name, but not `Aa1`.
- **07 Aug 1998** - TWiki:Main.PeterThoeny
- - Automatic email notification when something has changed in a TWiki web. Each web has a topic [[WebNotify]] where one can subscribe and unsubscribe.
+ - Automatic e-mail notification when something has changed in a TWiki web. Each web has a topic [[WebNotify]] where one can subscribe and unsubscribe.
- **06 Aug 1998** - TWiki:Main.PeterThoeny
- Added server side include of files. Syntax is `%INCLUDE:"filename.ext"%`
- **05 Aug 1998** - TWiki:Main.PeterThoeny
- TWiki:Codev.DocsToDo: feature documentation pending
- TWiki:Codev.FeatureDocumented: documented feature
- [[TWikiDocumentation]]: reference manual for the latest TWiki
+
+**_Related Topics:_** [[DeveloperDocumentationCategory]]
--- /dev/null
+# <a name="Package <code>TWiki::_I18N="></a> Package =TWiki::I18N
+
+Support for strings translation and language detection.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::_I18N="> Package TWiki::I18N</a><ul>
+ <li><a href="#ClassMethod *available_languages"> ClassMethod available_languages <tt></tt></a></li>
+ <li><a href="#ClassMethod <strong>get</strong> ($session)"> ClassMethod get <tt>($session)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>maketext</strong> ($text)"> ObjectMethod maketext <tt>($text) -> $translation</tt></a></li>
+ <li><a href="#ObjectMethod <strong>language</strong> () -> $l"> ObjectMethod language <tt>() -> $language_tag</tt></a></li>
+ <li><a href="#ObjectMethod *enabled_languages*"> ObjectMethod enabled_languages <tt>() -> %languages</tt></a></li>
+ <li><a href="#ObjectMethod *from_SiteCharSet*"> ObjectMethod fromSiteCharSet <tt>($text) -> $encoded</tt></a></li>
+ <li><a href="#ObjectMethod <strong>to_SiteCharSet</strong> ($"> ObjectMethod toSiteCharSet <tt>($encoded) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>available_languages"></a> [[ClassMethod]] \*available\_languages ``
+
+Lists languages tags for languages available at TWiki installation. Returns a list containing the tags of the available languages.
+
+**_Note_**: the languages available to users are determined in the `configure` interface.
+
+## <a name="ClassMethod <strong>get</strong> ($session)"></a> [[ClassMethod]] **get** `($session)`
+
+Constructor. Gets the language object corresponding to the current user's language.
+
+## <a name="ObjectMethod <strong>maketext</strong> ($text)"></a><a name="ObjectMethod <strong>maketext</strong> ($text) "></a> [[ObjectMethod]] **maketext** `($text) -> $translation`
+
+Translates the given string (assumed to be written in English) into the current language, as detected in the constructor, and converts it into the site charset.
+
+Wraps around Locale::Maketext's maketext method, adding charset conversion and checking
+
+Return value: translated string, or the argument itself if no translation is found for thet argument.
+
+## <a name="ObjectMethod <strong>language</strong> () - $la"></a> [[ObjectMethod]] **language** `() -> $language_tag`
+
+Indicates the language tag of the current user's language, as detected from the information sent by the browser. Returns the empty string if the language could not be determined.
+
+## <a name="ObjectMethod <strong>enabled_languages*"></a> [[ObjectMethod]] \*enabled\_languages `() -> %languages`
+
+Returns an array with language tags as keys and language (native) names as values, for all the languages enabled in this [[TWikiSite]]. Useful for listing available languages to the user.
+
+## <a name="ObjectMethod <strong>from_SiteCharSet*"></a><a name="ObjectMethod *from_SiteCharSet</strong> "></a> [[ObjectMethod]] **fromSiteCharSet** `($text) -> $encoded`
+
+This method receives `$text`, assumed to be encoded in \{Site\}\{CharSet\}, and converts it to a internal representation.
+
+Currently this representation will be a UTF-8 string, but this may change in the future. This way, you can't assume any property on the returned value, and should only use the returned value of this function as input to toSiteCharSet. If you change the returnd value, either by removing, updating or appending characters, be sure to touch only ASCII characters (i.e., characters that have ord() less than 128).
+
+## <a name="ObjectMethod <strong>to_SiteCharSet</strong> ($"></a> [[ObjectMethod]] **toSiteCharSet** `($encoded) -> $text`
+
+This method receives a string, assumed to be encoded in TWiki's internal string representation (as generated by the fromSiteCharSet method, and converts it into \{Site\}\{CharSet\}.
+
+When converting into \{Site\}\{CharSet\}, characters that are not present at that charset are represented as HTML numerical character entities (NCR's), in the format `&#NNNN;`, where NNNN is the character's Unicode codepoint.
+
+See also: the `fromSiteCharSet` method.
--- /dev/null
+# <a name="Package <code>TWiki::_I18N::Extract="></a> Package =TWiki::I18N::Extract
+
+Support translatable strings extraction from TWiki topics and templates. Depends on Locale::Maketext::Extract (part of CPAN::Locale::Maketext::Lexicon).
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::_I18N::Extract="> Package TWiki::I18N::Extract</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session) ->"> ClassMethod new <tt>($session) -> $extract</tt></a></li>
+ <li><a href="#ObjectMethod <strong>extract</strong> ($msgid)"> ObjectMethod extract <tt>($msgid) -> $formated</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session) - $"></a> [[ClassMethod]] **new** `($session) -> $extract`
+
+Constructor. Creates a fresh new Extract object. A $session object, instance of the TWiki class, is optional: if it's available, it'll be used for printing warnings.
+
+## <a name="ObjectMethod <strong>extract</strong> ($msgid)"></a><a name="ObjectMethod <strong>extract</strong> ($msgid) "></a> [[ObjectMethod]] **extract** `($msgid) -> $formated`
+
+This method overrides the one with same name in `Locale::Maketext::Extract`, as a workaround for [a bug](http://rt.cpan.org/Public/Bug/Display.html?id=14629) in the `Locale::Maketext::Lexicon` Perl package, and was not fixed up to the 0.53 release.
+
+What it does is to call an alternative version of the \_format function, which avoids [double-escaping](http://develop.twiki.org/~develop/cgi-bin/view/Bugs/Item1500) the extracted strings.
+
+This method was tested only under the circumstances of TWiki's needs, i.e., extracting strings from source and topics and generating a brand new POT file. Merging with previous PO files is done with GNU gettext tools, so maybe if it's used for merging it can
+
+Once that bug is fixed, in future TWiki versions this method may be removed.
+
+!!!extract!!!
<div>
<ul>
<li><a href="#TWiki Installation Guide"> TWiki Installation Guide</a><ul>
- <li><a href="#Standard Installation"> Standard Installation</a><ul>
- <li><a href="#Step 1: Create Configure the Di"> Step 1: Create & Configure the Directories</a><ul>
- <li><a href="#Aletrnative Step 1: Create Conf"> Aletrnative Step 1: Create & Configure the Directories for Non-Root Accounts</a></li>
- </ul>
- </li>
- <li><a href="#Step 2: Set File Permissions"> Step 2: Set File Permissions</a></li>
- <li><a href="#Step 3: Edit the Configuration F"> Step 3: Edit the Configuration Files</a></li>
- <li><a href="#Step 4: Internationalisation Set"> Step 4: Internationalisation Setup (Optional)</a><ul>
- <li><a href="#Trouble with _I18N?"> Trouble with I18N? </a></li>
- </ul>
- </li>
- <li><a href="#Step 5: Configure Site-Wide Emai"> Step 5: Configure Site-Wide Email Preferences</a></li>
- <li><a href="#Step 6: Finish Up from Your Brow"> Step 6: Finish Up from Your Browser</a></li>
- </ul>
- </li>
- <li><a href="#Additional Server-Level Options"> Additional Server-Level Options</a><ul>
- <li><a href="#Enabling Authentication of Users"> Enabling Authentication of Users</a></li>
- <li><a href="#WYSIWYG Editor"> WYSIWYG Editor</a></li>
- </ul>
- </li>
- <li><a href="#TWiki File System Info"> TWiki File System Info</a></li>
+ <li><a href="#Basic Installation"> Basic Installation</a></li>
+ <li><a href="#Next Steps"> Next Steps</a></li>
+ <li><a href="#Troubleshooting"> Troubleshooting</a></li>
</ul>
</li>
</ul>
# <a name="TWiki Installation Guide"></a> TWiki Installation Guide
-_Installation instructions for the TWiki 01-Sep-2004 production release._
+_Installation instructions for the TWiki 4.0 production release._
-_If you are reading this on your own TWiki installation, please get the latest installation guide (TWiki:TWiki.TWikiInstallationGuide), as this often has important updates to resolve installation issues._
+TWiki should be fine with any web server and OS that meet the [[system requirements|Main/TWikiSystemRequirements]]. The following installation instructions are written for experienced system administrators; please review the [[AdminSkillsAssumptions]] before you install TWiki. If you need help, ask a question in the TWiki:Support web or on TWiki:Codev.TWikiIRC (irc.freenode.net, channel #twiki)
-These installation steps are based on the **Apache** web server on **Linux**. TWiki runs on other web servers and Unix systems, and should be fine with any web server and OS that meet the [[system requirements|Main/TWikiSystemRequirements]]. Official documentation for platforms other than Linux is somewhat limited, so _please check_ the topics listed below, they include some important tips for HP-UX, Solaris, OS/390, and many other platforms.
-
-- For Unix or Linux, check TWiki:Codev/TWikiOnUnix (install your own RCS, `diff` and `grep` tools if in doubt!) and TWiki:Codev/TWikiOnLinux.
-- For Windows, check the [[WindowsInstallCookbook]].
-- For MacOS X, check TWiki:Codev/TWikiOnMacOSX.
-- To install TWiki on SourceForge, for use on a software development project, read TWiki:Codev/TWikiOnSourceForge
-- For other platforms, see TWiki:Codev/TWikiOn, and search the TWiki:Codev and TWiki:Support webs for other installation notes.
-- If you need help, ask a question in the TWiki:Support web
+**_%H% Hint:_** TWiki:TWiki.InstallingTWiki on TWiki.org has supplemental documentation that help you install TWiki on different platforms, environments and web hosting sites.
<a name="StandardInstallation"></a>
-## <a name="Standard Installation"></a> Standard Installation
-
-Download the TWiki 01-Sep-2004 distribution in Unix ZIP format from <http://TWiki.org/download.html>. Please review the [[AdminSkillsAssumptions]] before you install TWiki.
-
-### <a name="Step 1: Create Configure the Di"></a> Step 1: Create & Configure the Directories
-
-%X% **NOTE:** _If you don't have access to your Web server configuration files - for example, if you're installing on an ISP-hosted account, or you don't have administrator privileges on your intranet server - use the [[alternative Step 1|Main/WebHome#StepOneB]] instead._
-
-- Create directory `/home/httpd/twiki` and [unzip](http://www.info-zip.org/pub/infozip/UnZip.html) the TWiki distribution into this directory.
-- The `twiki/bin` directory of TWiki must be set as a cgi-bin directory. Add `/home/httpd/twiki/bin` to file `httpd.conf` (typcially located in `/etc/httpd/`) with only `ExecCGI` option.
-- The `twiki/pub` directory of TWiki must be set so that it is visible as a URL. Add `/home/httpd/twiki` to file `httpd.conf` with normal access options (copy from `/home/httpd/html` ).
-- Now add `ScriptAlias` for `/twiki/bin` and `Alias` for `/twiki` to file `httpd.conf` . <br /> %X% **NOTE:** The `ScriptAlias` **_must_** come before the `Alias`, otherwise, Apache will fail to correctly set up `/twiki/bin/`, by treating it as just another subdirectory of the `/twiki/` alias.
-- The `twiki/data` and `twiki/templates` directories should be set so that they are **not** visible as URLs. Add them to `httpd.conf` with `deny from all`.
-
-> **Example `httpd.conf` entries:**
->
-> ScriptAlias /twiki/bin/ "/home/httpd/twiki/bin/"
-> Alias /twiki/ "/home/httpd/twiki/"
-> <Directory "/home/httpd/twiki/bin">
-> Options +ExecCGI
-> SetHandler cgi-script
-> Allow from all
-> </Directory>
-> <Directory "/home/httpd/twiki/pub">
-> Options FollowSymLinks +Includes
-> AllowOverride None
-> Allow from all
-> </Directory>
-> <Directory "/home/httpd/twiki/data">
-> deny from all
-> </Directory>
-> <Directory "/home/httpd/twiki/templates">
-> deny from all
-> </Directory>
-
-- Restart Apache by `service httpd restart` (or as appropriate to your flavor of UNIX or Linux).
-- Test that the `twiki/bin` directory is CGI-enabled by trying visiting it in your browser:
- - Enter the URL for the `bin` directory, `http://yourdomain.com/twiki/bin/`
- - Your settings are OK if you get a message like `"Forbidden. You don't have permission to access /twiki/bin/ on this server"`.
- - Settings are NOT correct if you get something like `"Index of /twiki/bin"` - recheck your `httpd.conf` file.
-
-- _Go directly to [[Step 2|Main/WebHome#StepTwo]]..._
-
-<a name="StepOneB"></a>
-
-#### <a name="Aletrnative Step 1: Create Conf"></a> Aletrnative Step 1: Create & Configure the Directories for Non-Root Accounts
-
-To install TWiki on a system where you don't have Unix/Linux root (administrator) privileges, for example, on a hosted Web account or an intranet server administered by someone else:
-
-- Download and unzip TWiki on your local PC
-- Using the table below, create a directory structure on your host server
-- Upload the TWiki files by FTP (transfer as _text_ except for the image files in `pub`)
-
-> <table border="1" cellpadding="0" cellspacing="0">
-> <tr>
-> <th bgcolor="#99CCCC"><strong> TWiki dir: </strong></th>
-> <th bgcolor="#99CCCC"><strong> What it is: </strong></th>
-> <th bgcolor="#99CCCC"><strong> Where to copy: </strong></th>
-> <th bgcolor="#99CCCC"><strong> Example: </strong></th>
-> </tr>
-> <tr>
-> <td><code>twiki</code></td>
-> <td> start-up pages </td>
-> <td> root TWiki dir </td>
-> <td><code>/home/smith/twiki/</code></td>
-> </tr>
-> <tr>
-> <td><code>twiki/bin</code></td>
-> <td> CGI bin </td>
-> <td> CGI-enabled dir </td>
-> <td><code>/home/smith/twiki/bin</code></td>
-> </tr>
-> <tr>
-> <td><code>twiki/lib</code></td>
-> <td> library files </td>
-> <td> same level as <code>twiki/bin</code></td>
-> <td><code>/home/smith/twiki/lib</code></td>
-> </tr>
-> <tr>
-> <td><code>twiki/pub</code></td>
-> <td> public files </td>
-> <td> htdoc enabled dir </td>
-> <td><code>/home/smith/twiki/pub</code></td>
-> </tr>
-> <tr>
-> <td><code>twiki/data</code></td>
-> <td> topic data </td>
-> <td> dir secure from public access </td>
-> <td><code>/home/smith/twiki/data</code></td>
-> </tr>
-> <tr>
-> <td><code>twiki/templates</code></td>
-> <td> web templates </td>
-> <td> dir secure from public access </td>
-> <td><code>/home/smith/twiki/templates</code></td>
-> </tr>
-> </table>
-
-**_Note:_** Don't worry if you are not able to put the `twiki/lib` directory at the same level as the `twiki/bin` directory (e.g. because CGI `bin` directories can't be under your home directory and you don't have root access). You can create this directory elsewhere and configure the `/twiki/bin/setlib.cfg` file (done in Step 3)
-
-<a name="StepTwo"></a>
-
-### <a name="Step 2: Set File Permissions"></a> Step 2: Set File Permissions
-
-- Make sure Perl 5 and the Perl CGI library are installed on your system. The default location of Perl is `/usr/bin/perl`. If it's elsewhere, change the path to Perl in the first line of each script in the `twiki/bin` directory, or create a symbolic link from `/usr/bin/perl`.
- - **IMPORTANT:**
- - On ISP-hosted accounts (and some intranet servers), Perl CGI scripts may require a `.cgi` extension to run. Some systems need `.pl`, the regular Perl extension. Rename all `twiki/bin` scripts if necessary.
- - Alternatively, you might try creating a file `twiki/bin/.htaccess` that contains the single line `SetHandler cgi-script`, which tells Apache to treat all files in this directory as CGI scripts.
-- Set the file permission of all Perl scripts in the `twiki/bin` directory as executable to `-rwxr-xr-x` (755).
-- To be able to edit the Perl scripts and `.tmpl` files it is necessary to `chown` and `chgrp -R twiki` so all the files have the owner you want.
-- %H% This Guide assumes user `nobody` ownership for all files manipulated by the CGI scripts (executed by the Web server), and user `twiki` for all other files. You can:
- - replace `nobody` with another user if your server executes scripts under a different name (ex: default for Debian is `www-data`).
- - %T% **HINT:** Run the `testenv` script from your browser: `http://yourdomain.com/twiki/bin/testenv`. It will show you the user name of the CGI scripts, a table listing all CGI environment variables, and a test of your `twiki/lib/TWiki.cfg` configuration file (you'll configure that in a minute).
- - replace user `twiki` with your own username
-- Set permissions manually.
- - Set the permission of all **files** below `twiki/data` so that they are writable by user `nobody`. A simple way is to `chmod` them to `-rw-rw-r--` (664) and to `chown` them to `nobody`.
- - Set the permission of the `twiki/data` **directory** and its **subdirectories** so that files in there are writable by user `nobody`. A simple way is to chmod them to `drwxrwxr-x` (775) and to `chown` them to `nobody`.
- - Set the permission of the `twiki/pub` directory and all its subdirectories so that files in there are writable by user `nobody`. A simple way is to `chmod` them to `drwxrwxr-x` (775) and to `chown` them to `nobody`.
- - %H% The `twiki/data/*/*.txt,v` RCS repository files in the installation package are locked by user `nobody`. If your CGI scripts are **_not_** running as user `nobody`, it's not possible to check in files (you'll see that the revision number won't increase after saving a topic). In this case, you need to unlock all repository files (check the RCS man pages) and lock them with a different user, such as `www-data`, or delete them all - new files will be automatically created the first time each topic is edited. You have two options to change ownership of the RCS lock user:
- - Run the `testenv` script from your browser; in the %BROWN% **Fix** %ENDCOLOR% line you can <u>relock</u> all the rcs files **(recommended)**
- - Alternatively, run this in your shell: %BR% `cd twiki/data` %BR% <code>find . -name **,v -exec perl -pi~ -e '$. <= 10 && s/nobody:/www-data:/ ' \{\} \\;**</code> %BR% This will create `,v~` backup files which you should remove after verification: %BR% `find . -name *,v~ -exec rm -f {} \;`
-
-### <a name="Step 3: Edit the Configuration F"></a> Step 3: Edit the Configuration Files
-
-- Edit the file `/twiki/bin/setlib.cfg`
- - Set `$twikiLibPath` to the absolute file path of your `/twiki/lib` as seen by the web server.
- - %X% **_Attention:_** Do **not** leave it as a relative `"../lib"` path or Plugins might fail to initialize properly
- - You can also edit `$localPerlLibPath` if you are not root and need to install additional CPAN modules, but can't update the main Perl installation files on the server. Just set this variable to the full pathname to your local lib directory, typically under your home directory.
- - %X% **_Attention:_** If you are running TWiki on Apache 2.0 on Unix you might experience cgi scripts to hang forever. This is a known Apache 2.0 bug. See details and woraround in the `setlib.cfg` file.
-- Edit the file `twiki/lib/TWiki.cfg`, setting the variables to your needs.
- - Set the file extension in the `$scriptSuffix` variable to `cgi` or `pl` if required.
- - RCS - revision control system to store revision of topics and attachments. You can use RCS executables or a version of RCS written in Perl, note that as the time of writing (Apr 2002) the Perl version has not been widely tested, so if you want to put up a live site the RCS executables are recommended.
- - Set `$storeTopicImpl = "RcsWrap";` for the RCS executables and make sure RCS is installed. Set `$rcsDir` in `twiki/lib/TWiki.cfg` to match the location of your RCS binaries. You can check this by issuing the command `rcs` at the prompt, it should result in something like `"rcs: no input file"`.
- - Check that you have GNU `diff`, by typing `diff -v` - an error indicates you have a non-GNU diff, so install the GNU `diffutils` package and make sure that `diff` is on the PATH used by TWiki (see `$safeEnvPath` in the `TWiki.cfg` file).
- - Set `$storeTopicImpl = "RcsLite";` for the Perl based RCS
-- **Security issue:** Directories `twiki/data` , `twiki/templates` and all their subdirectories should be set so that they are **_not_** visible through URLs. (Alternatively, move the directories to a place where they are not visible, and change the variables in `twiki/lib/TWiki.cfg` accordingly)
-- Test your settings by running the `testenv` script from your browser: `http://yourdomain.com/twiki/bin/testenv`. Check if your `twiki/lib/TWiki.cfg` configuration file settings are correct.
-
-### <a name="Step 4: Internationalisation Set"></a> Step 4: Internationalisation Setup (Optional)
+## <a name="Basic Installation"></a> Basic Installation
-By default, TWiki is configured to support US ASCII letters (no accents) in [[WikiWords]], and ISO-8859-1 (Western European) characters in page contents. If that's OK for you, skip this step.
+1. **Download** the TWiki distribution from <http://TWiki.org/download.html>.
+2. **Make a directory** for the installation and **unpack the distribution** in it.
+3. **Make sure** the user that runs CGI scripts on your system can read and write all files in the distribution. %BR% Detailed instructions on file permissions are beyond the scope of this guide, but in general:
+ - During installation and configuration, the CGI user needs to be able to read and write _everything_ in the distribution,
+ - Once installation and configuration is complete, the CGI user needs write access to everything under the `data` and `pub` directories and to `lib/LocalSite.cfg`. _Everything else_ should be read-only.
+ - Everybody else should be denied access to everything, always.
+4. **Make sure** Perl 5 and the Perl CGI library are installed on your system. %BR% The default location of Perl is `/usr/bin/perl`. **If it's somewhere else**, change the path to Perl in the first line of each script in the `twiki/bin` directory. %BR% %H% Some systems require a special extension on perl scripts (e.g. `.cgi` or `.pl`). If necessary, rename all files in `twiki/bin` (i.e. rename `view` to `view.pl` etc). If you do this, make sure you set the `ScriptSuffix` option in `configure` (Step 6).
+5. **Create the file** `/twiki/bin/LocalLib.cfg`. %BR% There is a template for this file in `/twiki/bin/LocalLib.cfg.txt`. %BR% The file must contain a setting for `$twikiLibPath`, which must point to the absolute file path of your `twiki/lib` e.g. `/home/httpd/twiki/lib`. %BR% %H% If you need to install additional CPAN modules, but can't update the main Perl installation files on the server, you can set `$CPANBASE` to point to your personal CPAN install. Don't forget that the webserver user has to be able to read those files as well.
+6. **Configure the webserver** so you can execute the `bin/configure` script from your browser.
+ - Explicit instructions for doing this are beyond the scope of this document, though there is a lot of advice on TWiki.org covering different configurations of webserver. To help you out, there's an example Apache `httpd.conf` file in `twiki_httpd_conf.txt` at the root of the package. This file also contains advice on securing your installation. There's also a script called `tools/rewriteshebang.pl` to help you in fixing up the shebang lines in your CGI scripts.
+7. Run the `configure` script from your browser, and resolve any errors or warnings it tells you about.
-If your Wiki will be used by non-English speakers, TWiki can be configured for Internationalisation ('I' followed by 18 letters, then 'N', or _I18N_). Specifically, TWiki will support suitable accented characters in [[WikiWords]] (as well as languages such as Japanese or Chinese in which [[WikiWords]] do not apply), and will support virtually any character set in the contents of pages. **_NOTE:_** TWiki does not currently support UTF-8, so you are advised **not** to use this - however, improved UTF-8 support is under development, see TWiki:Codev/ProposedUTF8SupportForI18N.
-
-To configure internationalisation suppport:
-
-1. Edit the `TWiki.cfg` file's Internationalisation section to set the `$useLocale` parameter to `1`. TWiki will now use the [[I18N]] parameters set in the rest of this section.
-2. Type the Unix/Linux command `locale -a` to find a suitable 'locale' for your use of TWiki. A locale that includes a dot followed by a character set is recommended, e.g. `pl_PL.ISO-8859-2` for Poland. Consult your system administrator if you are not sure which locale to use.
-3. In `TWiki.cfg`, set the `$siteLocale` parameter to your chosen locale, e.g. `pl_PL.ISO-8859-2` for Poland.
-4. Check your setup using `testenv` (download the latest `testenv` from TWiki:Support/SupportGuidelines if possible) - this provides some diagnostics for [[I18N]] setup, and in particular checks that your locale can be used successfully.
-5. _(For upgrade of TWiki [[I18N]] sites only:)_ If you were using TWiki:Codev.TWikiRelease01Feb2003 support for [[I18N]], and are using Internet Explorer or Opera, you should re-configure your browser so that it sends URLs encoded with UTF-8 (supported since TWiki:Codev.TWikiRelease01Sep2004). If you are doing a new installation of TWiki, you can ignore this step - no browser reconfiguration is needed for TWiki Release 01-Sep-2004).
- - Internet Explorer 5.0 or higher: in _Tools | Options | Advanced_, check 'always send URLs as UTF-8', then close all IE windows and restart IE.
- - Opera 6.x or higher: in _Preferences | Network | International Web Addresses_, check 'encode all addresses with UTF-8'.
- - **_NOTE:_** This does not mean that TWiki supports UTF-8 as a site character set.
-6. Try out your TWiki by creating pages in the Sandbox web that use international characters in [[WikiWords]] and checking that searching, [[WebIndex]], Ref-By and other features are working OK.
-
-#### <a name="Trouble with _I18N?"></a> Trouble with [[I18N]]?
-
-If international characters in [[WikiWords]] do not seem to work, and you are on Perl 5.6 or higher, you may need to set the `TWiki.cfg` parameter `$localeRegexes` to 0 - this disables some features but enables TWiki to work even if your system has locales that do not work. Then, set the `$upperNational` and `$lowerNational` parameters to the valid upper and lower case accented letters for your locale.
-
-- **_NOTE:_** You will need to do the above workaround for Windows based servers (whether using Cygwin or ActiveState Perl), since Perl locales are not working on Windows as of Feb 2004.
-
-If international characters in [[WikiWords]] aren't working, and you are on Perl 5.005 with working locales, keep `$useLocale` set to 1 and set `$localeRegexes` to 0, then set `$upperNational` and `$lowerNational` - if `testenv` generates the lists of characters for you, your locales are working so there is no need to set `$localeRegexes` to 0 in this case. See the comments in `TWiki.cfg` for more information.
-
-### <a name="Step 5: Configure Site-Wide Emai"></a> Step 5: Configure Site-Wide Email Preferences
-
-- Edit the [[TWikiPreferences]] topic in the TWiki web (by pointing your browser to http://yourdomain.com/twiki/bin/view/TWiki/TWikiPreferences) to set the `WIKIWEBMASTER` email address, and other email settings required for registration and [[WebChangesAlert]] to work:
- - `WIKIWEBMASTER` should be set to the email address of the TWiki administrator
- - `SMTPMAILHOST` is typically set on Windows or other non-Unix/Linux systems, where `sendmail` or similar is not available. When this is set and the Perl module <code>**Net::SMTP**</code> is installed, TWiki will connect to this SMTP server (e.g. `mail.yourdomain.com`) to send email for user registration and [[WebChangesAlerts]]. If you do have a sendmail-type program, leave `SMTPMAILHOST` unset so that the external sendmail program is used instead (defined by <code>**$mailProgram**</code> in <code>**TWiki.cfg**</code>).
- - `SMTPSENDERHOST` is optional, and set to the domain name sending the email (e.g. `twiki.yourdomain.com`). For use where the SMTP server requires that you identify the TWiki server sending mail. If not set, <code>**Net::SMTP**</code> will guess it for you.
-- You may want to set up other [[TWikiPreferences]] later on.
-- To enable the [[WebChangesAlerts]] (email notifications) you need to read about cron in the topic [[TWikiSiteTools]].
-
-### <a name="Step 6: Finish Up from Your Brow"></a> Step 6: Finish Up from Your Browser
-
-- Point your Web browser at `http://yourdomain.com/twiki/bin/view` and start TWiki-ing away!
- - %T% Or, point to `http://yourdomain.com/twiki/` to get the pre-TWiki `index.html` page, with a link to the `view` script. Customize this page if you want a public intro screen with a login link, instead of immediately calling up the .htaccess login dialog by going directly to `view`.
-- Edit the [[WebPreferences]] topic in each web, if necessary: set individual `WEBCOPYRIGHT` messages, and other preferences.
-- Enable email notification of topic changes - [[TWikiSiteTools]] has more.
-- Edit the [[WebNotify]] topic in all webs and add the users you want to notify.
-- Add the TWiki:Main/PoweredByTWikiLogo to your [[Main.WebHome|Main/WebHome]] topic.
-- You can add new `%VARIABLES%`. Define site-level variables in the [[TWikiPreferences]] topic. See also: [[TWikiVariables]].
-
-That's it for the standard installation of TWiki. Read on for server-level customization options.
-
-## <a name="Additional Server-Level Options"></a> Additional Server-Level Options
-
-With your new TWiki installation up and running, you can manage most aspects of your site from the browser interface. Only a few functions require access to the server file system, via Telnet or FTP. You can make these server-level changes during installation, and at any time afterwards.
+You now have a basic, unauthenticated installation running. At this point you can just point your Web browser at `http://yourdomain.com/twiki/bin/view` and start TWiki-ing away!
<a name="AuthenticationOfUsers"></a>
-### <a name="Enabling Authentication of Users"></a> Enabling Authentication of Users
-
-- If TWiki is installed on a non-authenticated server - not using SSL - and you'd like to authenticate users:
- 1. **Rename** file `.htaccess.txt` in the `twiki/bin` directory to `.htaccess` and change it to your needs. The comment at the top of the file explains what need to be done, basically replace `!FILE_path_to_TWiki!` and `!URL_path_to_TWiki!` with paths specific to your installation. _For the details of how this file works, consult the HTTP server documentation (for Apache server: [[1]](http://www.apache.org/docs/mod/directives.html), [[2]](http://systems.mcs.kent.edu/info/web_help/htaccess/))_.
- - %X% **NOTE:** If you had to add a `.cgi` or `.pl` file extension to the `bin` scripts, make sure to do the same for `edit`, `view`, `preview`, and all the other script names in `.htaccess`.
- - %H% The browser should ask for login name and password when you click on the <u>Edit</u> link. In case `.htaccess` does not have the desired effect, you need to enable it: Add "AllowOverride All" to the Directory [[3]](http://httpd.apache.org/docs/mod/core.html#directory) section of `access.conf` for your `twiki/bin` directory.
- - **This applies only if you have root access:** on hosted accounts, you shouldn't have this problem - otherwise, email tech support.
- - %X% **NOTE:** In the TWiki distribution package, the `twiki/data/.htpasswd.txt` file contains several TWiki core team user accounts and a guest user account. You probably want to remove those accounts by deleting the entries in `.htpasswd`. Do not remove the guest user if you want to allow guest logins.
- 2. TWiki now supports several Password file format/encoding methods for Apache. Once you know what method is used by your Appache server, you can configure TWiki to create compatible .htpasswd entries by editing the `$htpasswdFormatFamily`, `$htpasswdEncoding` and `$htpasswdFilename` in the TWiki.cfg file. The supported options are htpasswd:plain, htpasswd:crypt, htpasswd:sha1, htdigest:md5
- 3. **Copy** the [[TWikiRegistrationPub]] topic to [[TWikiRegistration]], overwriting old version of TWikiRegistration. Do that by either editing the topics in theTWiki web, or by renaming the `.txt` and `.txt,v` files in the `twiki/data/TWiki` directory.
-- Customization:
- - You can customize the registration form by deleting or adding input tags. The `name=""` parameter of the input tags must start with: `"Twk0..."` (if this is an optional entry), or `"Twk1..."` (if this is a required entry). This ensures that the fields are carried over into the user home page correctly.
- - You can customize the default user home page in [[NewUserTemplate]]. The same variables get expanded as in the [[template topics|Main/TWikiTemplates#Template_Topics]]
-- Register yourself in the [[TWikiRegistration]] topic.
- - %X% **NOTE:** When a user registers, a new line with the username and encrypted password is added to the `data/.htpasswd` file. The `.htpasswd` file that comes with the TWiki installation includes user accounts for TWiki core team members that are used for testing on TWiki.org. You can edit the file and delete those lines.
-- Create a new topic to check if authentication works.
-- Edit the [[TWikiAdminGroup]] topic in the TWiki:Main web to include users with system administrator status.
-- Edit the [[TWikiPreferences]] topic in the TWiki:TWiki web to set access privileges.
-- Edit the [[WebPreferences]] topic in each web, if necessary: set access priviliges.
-
-### <a name="WYSIWYG Editor"></a> WYSIWYG Editor
-
-At this time, TWiki does not ship with an "what you see is what you get" editor. TWiki:Codev/IntegrateHtmlAreaEditor describes how to integrate an HTML editor.
-
-%X% **NOTE:** User home topics are located in the %WIKITOOLNAME%.Main web - don't try to move them or create them in other webs. From any other web, user signatures have to point to %WIKITOOLNAME%.Main web, using a `Main.UserName` or `%MAINWEB%.UserName` format. (The `%MAINWEB%` variable is an advantage if you ever change the Main web name, but the standard `Main.UserName` is easier for users to enter, which is the bottom line!)
-
-## <a name="TWiki File System Info"></a> TWiki File System Info
-
-See [[Appendix A: TWiki File System|Main/AppendixFileSystem]] for an installed system snapshot and descriptions of all files in the TWiki 01-Sep-2004 distribution.
-
--- TWiki:Main/PeterThoeny - 29 Aug 2004 %BR% -- TWiki:Main/MikeMannix - 16 May 2002
+## <a name="Next Steps"></a> Next Steps
+
+Once you have your TWiki running, you can move on to customise it for your users.
+
+- **Review [[TWikiPreferences]] settings** - read through it and set any additional settings you think you might need (you can click the 'Edit' button near the top to edit the settings in place)
+ - %I% It is recommended to **copy** any settings or variables that you want to customize from [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] and **paste** them into [[Main.TWikiPreferences|Main/TWikiPreferences]]. This will protect your local customizations from being overwritten in later upgrades. See notes at top of [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] for more information.
+- **Customize user home pages** - read and change [[NewUserTemplate]].
+- **Enable authentication** - read [[TWikiUserAuthentication]].
+- **Clear admin notes** - some pages are meant to be customized after choice of authentication - check and update these topics (remove notice):
+ - [[ChangePassword]]
+ - [[ResetPassword]]
+ - [[ChangeEmailAddress]]
+ - [[TWikiRegistration]] fields can be customzied to the needs of your organization
+ - [[TWikiAdminGroup]]
+- **Enable e-mail notification** - read [[TWikiSiteTools#WebNotify]] to get [[WebChangesAlerts]].
+- **Automate update of site statistics** - read [[TWikiSiteTools#WebStatistics]]
+- **Automate removal of expired sessions and lease files** - read [[TWikiScripts#tick_twiki_pl]].
+- **Install Plugins** if needed - TWiki:Plugins is an extensive library of Plugins for TWiki, that enhance functionality in a huge number of ways. A few Plugins are pre-installed in the TWiki distribution. Installation instructions are included in Plugins you download from TWiki:Plugins.PluginPackage on TWiki.org.
+- **Review known issues** - visit TWiki:Codev.KnownIssuesOfTWiki04x00x00 and fix issues that apply to you.
+
+## <a name="Troubleshooting"></a> Troubleshooting
+
+- The first step is to re-run the `configure` script and make sure you have resolved all errors, and are happy that you understand any warnings.
+- TWiki:TWiki.InstallingTWiki on TWiki.org has supplemental documentation that help you install TWiki on different platforms, environments and web hosting sites.
+- If you need help, ask a question in the TWiki:Support web or on TWiki:Codev.TWikiIRC (irc.freenode.net, channel #twiki)
+
+**_Related Topics:_** [[AdminDocumentationCategory]], TWiki:TWiki.InstallingTWiki
--- /dev/null
+# <a name="TWiki Javascripts"></a> TWiki Javascripts
+
+This topic contains javascript files that are included by TWiki templates, and may be used by skin templates and in topics.
+
+**_Related Topics:_** [[TWikiTemplates]], [[TWikiSkins]], [[PatternJavascripts]]
+
+- Set ALLOWTOPICCHANGE = [[TWikiAdminGroup]]
# <a name="TWiki Logos"></a> TWiki Logos
--- [[PeterThoeny]] - 28 Jun 2002
+The official TWiki logo is a big "T" in a speech bubble convenying "working together", and has a "collaborate with TWiki" tag line.
-- Powered by TWiki robot, 121x54: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot121x54.gif" width="121" height="54" alt="twikiRobot121x54.gif" />
+## <a name="TWiki.org Logo Artwork"></a> TWiki.org Logo Artwork
-- Powered by TWiki robot, gray, 121x54: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot121x54a.gif" width="121" height="54" alt="twikiRobot121x54a.gif" />
+<table cellpadding="5">
+ <tr>
+ <td valign="top">
+ <p><code>T-logo-169x130-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 169x130" src="http://www.dementia.org/twiki//view/T-logo-169x130-t.gif" /></p>
+ <p><code>T-logo-87x67-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 87x68" src="http://www.dementia.org/twiki//view/T-logo-87x67-t.gif" /></p>
+ <p><code>T-logo-65x50-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 65x50" src="http://www.dementia.org/twiki//view/T-logo-65x50-t.gif" /></p>
+ <p><code>T-logo-58x45-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 58x50" src="http://www.dementia.org/twiki//view/T-logo-58x45-t.gif" /></p>
+ <p><code>T-logo-52x40-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 52x40" src="http://www.dementia.org/twiki//view/T-logo-52x40-t.gif" /></p>
+ <p><code>T-logo-46x35-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 46x35" src="http://www.dementia.org/twiki//view/T-logo-46x35-t.gif" /></p>
+ <p><code>T-logo-34x26-t.gif</code>: <br /><img alt="T-logo, no text, transparent bg, 34x26" src="http://www.dementia.org/twiki//view/T-logo-34x26-t.gif" /></p>
+ <p><code>T-logo-16x16-t.gif</code>: <br /><img alt="T-logo, transparent bg, 16x16" src="http://www.dementia.org/twiki//view/T-logo-16x16-t.gif" /></p>
+ <p>
+ </p>
+ </td>
+ <td> </td>
+ <td valign="top">
+ <p><code>T-logo-456x130-t.gif</code>: <br /><img alt="T-logo, transparent bg, 456x130" src="http://www.dementia.org/twiki//view/T-logo-456x130-t.gif" /></p>
+ <p><code>T-logo-235x67-t.gif</code>: <br /><img alt="T-logo, transparent bg, 235x67" src="http://www.dementia.org/twiki//view/T-logo-235x67-t.gif" /></p>
+ <p><code>T-logo-175x50-t.gif</code>: <br /><img alt="T-logo, transparent bg, 175x50" src="http://www.dementia.org/twiki//view/T-logo-175x50-t.gif" /></p>
+ <p><code>T-logo-158x45-t.gif</code>: <br /><img alt="T-logo, transparent bg, 158x45" src="http://www.dementia.org/twiki//view/T-logo-158x45-t.gif" /></p>
+ <p><code>T-logo-140x40-t.gif</code>: <br /><img alt="T-logo, transparent bg, 158x45" src="http://www.dementia.org/twiki//view/T-logo-140x40-t.gif" /></p>
+ <p><code>T-logo-124x35-t.gif</code>: <br /><img alt="T-logo, transparent bg, 124x35" src="http://www.dementia.org/twiki//view/T-logo-124x35-t.gif" /></p>
+ <p><code>T-logo-88x31-t.gif</code>: <br /><img alt="T-logo, transparent bg, 88x31" src="http://www.dementia.org/twiki//view/T-logo-88x31-t.gif" /></p>
+ <p><code>T-logo-80x15.gif</code>: <br /><img alt="T-logo, 80x15" src="http://www.dementia.org/twiki//view/T-logo-80x15.gif" /></p>
+ <p>
+ </p>
+ </td>
+ </tr>
+</table>
-- Powered by TWiki robot, button, 131x64: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot131x64.gif" width="131" height="64" alt="twikiRobot131x64.gif" />
+These logos are based on master artwork [T-logo.svg](http://www.dementia.org/twiki//view/T-logo.svg) and [T-logo-3640x1038-b.png](http://www.dementia.org/twiki//view/T-logo-3640x1038-b.png).
-- Powered by TWiki robot, vertical button, 81x119: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot81x119.gif" width="81" height="119" alt="twikiRobot81x119.gif" />
+## <a name="Logo Customization"></a> Logo Customization
-- TWiki robot, small, 88x31: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot88x31.gif" width="88" height="31" alt="twikiRobot88x31.gif" />
+TWiki is shipped with the official TWiki logo in the banner. Site owners may replace the banner logo with their own logo. The logo can be changed in the `WIKILOGOIMG` setting (site-wide in [[TWikiPreferences]], or per web in [[WebPreferences]] of any web).
-- TWiki logo, generic, small, 88x31: <br /><img src="http://www.dementia.org/twiki//view/twikilogo88x31.gif" width="88" height="31" alt="twikilogo88x31.gif" />
+If you use the official TWiki.org artwork on your own site you can link back to TWiki.org. Use this HTML (with any logo file on this page):
-- TWiki robot, black, 46x50: <br /><img src="http://www.dementia.org/twiki//view/twikiRobot46x50.gif" width="46" height="50" alt="twikiRobot46x50.gif" />
+`<a href="http://twiki.org/"><img src="http://www.dementia.org/twiki//view/T-logo-88x31-t.gif" alt="This site is powered by the TWiki collaboration platform" title="This site is powered by the TWiki collaboration platform" border="0" /></a>`
+
+## <a name="Right to use Trademarked Artwork"></a> Right to use Trademarked Artwork
+
+The logo artwork of TWiki.org should be used "as is" in order to get consistent branding for TWiki.
+
+You may NOT use any original artwork from TWiki.org, nor make or use modified versions of such artwork, except under the following conditions:
+
+- You may use the 'collaborate with TWiki' logo on a Web site that is powered by the TWiki collaboration platform.
+- You may use the 'collaborate with TWiki' logo in product description and promotional material IF and ONLY IF such use can in no way be interpreted as anything other than an attribution. Using the TWiki name and artwork in a manner that implies endorsement of a product or service is not allowed.
+
+TWiki™, the TWiki logo and the "Collaborate with TWiki" tagline are a trademarks of TWiki:Main.PeterThoeny. The TWiki logo is Copyright 2005 by TWiki:Main.PeterThoeny, TWiki:Main.ArthurClemens and [[TWikiContributors]].
+
+## <a name="Background and Feedback"></a> Background and Feedback
+
+The logo was created by TWiki:Main.PeterThoeny and TWiki:Main.ArthurClemens in September 2005, based on a lot of feedback from the TWiki community. See history and provide feedback at TWiki:Codev.TWikiLogoDevelopment.
--- /dev/null
+# <a name="Package <code>TWiki::Merge="></a> Package =TWiki::Merge
+
+Support for merging strings
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Merge="> Package TWiki::Merge</a><ul>
+ <li><a href="#StaticMethod <strong>ins_DelMerge</strong> ($a,"> StaticMethod insDelMerge <tt>($a,$b,$sep,$session,$info)</tt></a></li>
+ <li><a href="#StaticMethod <strong>simpleMerge</strong> ($a,$"> StaticMethod simpleMerge <tt>($a,$b,$sep) -> \@arr</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>ins_DelMerge</strong> ($a,"></a> [[StaticMethod]] **insDelMerge** `($a,$b,$sep,$session,$info)`
+
+Perform a merge of two versions of the same text, using HTML tags to mark conflicts.
+
+The granularity of the merge depends on the setting of $sep. For example, if it is `"\\n"`, a line-by-line merge will be done.
+
+Where conflicts exist, they are marked using HTML <del> and <ins> tags. <del> marks content from $a while <ins> marks content from $b.
+
+Non-conflicting content (insertions from either set) are not marked.
+
+The plugins mergeHandler is called for each merge.
+
+## <a name="StaticMethod <strong>simpleMerge</strong> ($a,$"></a> [[StaticMethod]] **simpleMerge** `($a,$b,$sep) -> \@arr`
+
+Perform a merge of two versions of the same text, returning and array of strings representing the blocks in the merged context where each string starts with one of "+", "-" or " " depending on whether it is an insertion, a deletion, or just text. Insertions and deletions alway happen in pairs, as text taken in from either version that does not replace text in the other version will simply be accepted.
+
+The granularity of the merge depends on the setting of $sep. For example, if it is `"\\n"`, a line-by-line merge will be done. $sep characters are retained in the outout.
</ul>
</div>
-<a name="MetaDataDefinition"></a>
+<a name="TWikiMetaData"></a>
# <a name="TWiki Meta Data"></a> TWiki Meta Data
> **Example of Format**
>
-> %META:TOPICINFO{version="1.6" date="976762663" author="PeterThoeny" format="1.0"}%
+> %META:TOPICINFO{version="1.6" date="976762663" author="LastEditorWikiName" format="1.0"}%
> text of the topic
> %META:TOPICMOVED{from="Codev.OldName" to="Codev.NewName"
-> by="JohnTalintyre" date="976762680"}%
+> by="TopicMoverWikiName" date="976762680"}%
> %META:TOPICPARENT{name="NavigationByTopicContext"}%
> %META:FILEATTACHMENT{name="Sample.txt" version="1.3" ... }%
> %META:FILEATTACHMENT{name="Smile.gif" version="1.1" ... }%
## <a name="Viewing Meta Data in Page Source"></a> Viewing Meta Data in Page Source
-When viewing a topic the <code>**Raw Text**</code> link can be clicked to show the text of a topic (i.e., as seen when editing). This is done by adding `raw=on` to URL. `raw=debug` shows the meta data as well as the topic data, ex: [debug view for this topic](http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?raw=debug)
+When viewing a topic the <code>**Raw Text**</code> link can be clicked to show the text of a topic (i.e., as seen when editing). This is done by adding `raw=on` to URL. `raw=debug` shows the meta data as well as the topic data, ex: [[debug view for this topic|%WEB%/%TOPIC%?raw=debug]]
<a name="MetaDataRendering"></a>
Meta Data is rendered with the %META% variable. This is mostly used in the `view`, `preview` and `edit` scripts.
-**_Note:_** Rendering meta data is currently not supported in topic text. As a workaround, use [[FormattedSearch]] on the current topic only to render form fields.
+You can render form fields in topic text by using the FORMFIELD variable. Example:%BR% `%FORMFIELD{"TopicClassification"}%` %BR% For details, see [[TWikiVariables#VarFORMFIELD]].
Current support covers:
At present, there is no Meta Data support for Plugins. However, the format is readily extendable and the `Meta.pm` code that supports the format needs only minor alteration.
--- TWiki:Main.JohnTalintyre - 29 Aug 2001 %BR% -- TWiki:Main.MikeMannix - 03 Dec 2001 %BR% -- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Related Topics:_** [[DeveloperDocumentationCategory]], [[UserDocumentationCategory]]
--- /dev/null
+# <a name="Package <code>TWiki::Meta="></a> Package =TWiki::Meta
+
+Meta-data handling.
+
+A meta-data object is a hash of different types of meta-data (keyed on the type, such as 'FIELD' and 'TOPICINFO').
+
+Each entry in the hash is an array, where each entry in the array contains another hash of the key=value pairs, corresponding to a single meta-datum.
+
+If there may be multiple entries of the same top-level type (i.e. for FIELD and FILEATTACHMENT) then the array hash multiple entries. These types are referred to as "keyed" types. The array entries are keyed with the attribute 'name' which must be in each entry in the array.
+
+For unkeyed types, the array has only one entry.
+
+The module knows nothing about how meta-data is stored. That is entirely the responsibility of the Store module.
+
+Meta-data objects are created by the Store engine when topics are read. They are populated using the `put` method.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Meta="> Package TWiki::Meta</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session,$web"> ClassMethod new <tt>($session,$web,$topic)</tt></a></li>
+ <li><a href="#ClassMethod <strong>web</strong> ()"> ClassMethod web <tt>()</tt></a></li>
+ <li><a href="#ClassMethod <strong>topic</strong> ()"> ClassMethod topic <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>put</strong> ($type,\%args"> ObjectMethod put <tt>($type,\%args)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>putKeyed</strong> ($type,\"> ObjectMethod putKeyed <tt>($type,\%args)</tt></a></li>
+ <li><a href="#ObjectMethod *putAll*"> ObjectMethod putAll <tt></tt></a></li>
+ <li><a href="#ObjectMethod <strong>get</strong> ($type,$key)"> ObjectMethod get <tt>($type,$key) -> \%hash</tt></a></li>
+ <li><a href="#ObjectMethod <strong>find</strong> ($type) -> @"> ObjectMethod find <tt>($type) -> @values</tt></a></li>
+ <li><a href="#StaticMethod *index_ByKey*"> StaticMethod indexByKey <tt></tt></a></li>
+ <li><a href="#ObjectMethod <strong>remove</strong> ($type,$ke"> ObjectMethod remove <tt>($type,$key)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>copyFrom</strong> ($otherM"> ObjectMethod copyFrom <tt>($otherMeta,$type,$nameFilter)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>count</strong> ($type) ->"> ObjectMethod count <tt>($type) -> $integer</tt></a></li>
+ <li><a href="#ObjectMethod <strong>addTOPICINFO</strong> ($re"> ObjectMethod addTOPICINFO <tt>($rev,$time,$user)</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionInfo*"> ObjectMethod getRevisionInfo <tt>($fromrev) -> ($date,$author,$rev,$comment)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>merge</strong> ($otherMeta"> ObjectMethod merge <tt>($otherMeta,$formDef)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>stringify</strong> ($types"> ObjectMethod stringify <tt>($types) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *for_EachSelectedVa"> ObjectMethod forEachSelectedValue <tt>($types,$keys,\&fn,\%options)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getParent</strong> () -> $"> ObjectMethod getParent <tt>() -> $parent</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_FormName</strong> () -"> ObjectMethod getFormName <tt>() -> $formname</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session,$web"></a> [[ClassMethod]] **new** `($session,$web,$topic)`
+
+Construct a new, empty Meta collection.
+
+## <a name="ClassMethod <strong>web</strong> ()"></a> [[ClassMethod]] **web** `()`
+
+Get the web name
+
+## <a name="ClassMethod <strong>topic</strong> ()"></a> [[ClassMethod]] **topic** `()`
+
+Get the topic name
+
+## <a name="ObjectMethod <strong>put</strong> ($type,\%args"></a> [[ObjectMethod]] **put** `($type,\%args)`
+
+Put a hash of key=value pairs into the given type set in this meta.
+
+See the main comment for this package to understand how meta-data is represented.
+
+## <a name="ObjectMethod <strong>putKeyed</strong> ($type,\"></a> [[ObjectMethod]] **putKeyed** `($type,\%args)`
+
+Put a hash of key=value pairs into the given type set in this meta. The entries are keyed by 'name'.
+
+See the main comment for this package to understand how meta-data is represented.
+
+## <a name="ObjectMethod <strong>putAll*"></a><a name="ObjectMethod *putAll</strong> "></a> [[ObjectMethod]] **putAll** ``
+
+Replaces all the items of a given key with a new array This is the logical inverse of the find method
+
+## <a name="ObjectMethod <strong>get</strong> ($type,$key)"></a><a name="ObjectMethod <strong>get</strong> ($type,$key) "></a> [[ObjectMethod]] **get** `($type,$key) -> \%hash`
+
+Find the value of a meta-datum in the map. If the type is keyed, the $key parameter is required to say _which_ entry you want. Otherwise it can be undef.
+
+WARNING SMELL If key is undef but the type is keyed you get the FIRST entry If you want all the keys of a given type use the 'find' method.
+
+The result is a reference to the hash for the item.
+
+## <a name="ObjectMethod <strong>find</strong> ($type) - @v"></a> [[ObjectMethod]] **find** `($type) -> @values`
+
+Get all meta data for a specific type Returns the array stored for the type. This will be zero length if there are no entries.
+
+## <a name="StaticMethod <strong>index_ByKey*"></a><a name="StaticMethod *index_ByKey</strong> "></a> [[StaticMethod]] **indexByKey** ``
+
+See tests/unit/MetaTests.pm for an example
+
+The result is a hash the same as the array provided by find but keyed by the keyName. NB. results are indeterminate if the key you choose is not unique in the find.
+
+Flattens a keyed hash structure, taking only the values. Returns a hash.
+
+See tests/unit/MetaTests.pm for an example
+
+## <a name="ObjectMethod <strong>remove</strong> ($type,$ke"></a> [[ObjectMethod]] **remove** `($type,$key)`
+
+With no type, will remove all the contents of the object.
+
+With a $type but no $key, will remove _all_ items of that type (so for example if $type were FILEATTACHMENT it would remove all of them)
+
+With a $type and a $key it will remove only the specific item.
+
+## <a name="ObjectMethod <strong>copyFrom</strong> ($otherM"></a> [[ObjectMethod]] **copyFrom** `($otherMeta,$type,$nameFilter)`
+
+Copy all entries of a type from another meta data set. This will destroy the old values for that type, unless the copied object doesn't contain entries for that type, in which case it will retain the old values.
+
+If $type is undef, will copy ALL TYPES.
+
+If $nameFilter is defined (an RE), it will copy only data where \{name\} matches $nameFilter.
+
+SMELL: That spec absolutely _STINKS_ !! SMELL: this is a shallow copy
+
+## <a name="ObjectMethod <strong>count</strong> ($type) - $"></a> [[ObjectMethod]] **count** `($type) -> $integer`
+
+Return the number of entries of the given type that are in this meta set
+
+## <a name="ObjectMethod <strong>addTOPICINFO</strong> ($re"></a> [[ObjectMethod]] **addTOPICINFO** `($rev,$time,$user)`
+
+- `$rev` - the revision number
+- `$time` - the time stamp
+- `$user` - the user object
+
+Add TOPICINFO type data to the object, as specified by the parameters.
+
+## <a name="ObjectMethod <strong>get_RevisionInfo*"></a><a name="ObjectMethod *get_RevisionInfo</strong> "></a> [[ObjectMethod]] **getRevisionInfo** `($fromrev) -> ($date,$author,$rev,$comment)`
+
+Try and get revision info from the meta information, or, if it is not present, kick down to the Store module for the same information.
+
+Returns ( $revDate, $author, $rev, $comment )
+
+$rev is an integer revision number.
+
+## <a name="ObjectMethod <strong>merge</strong> ($otherMeta"></a> [[ObjectMethod]] **merge** `($otherMeta,$formDef)`
+
+- `$otherMeta` - a block of meta-data to merge with $this
+- `$formDef` reference to a TWiki::Form that gives the types of the fields in $this
+
+Merge the data in the other meta block.
+
+- File attachments that only appear in one set are preserved.
+- Form fields that only appear in one set are preserved.
+- Form field values that are different in each set are text-merged
+- We don't merge for field attributes or title
+- Topic info is not touched
+- The `mergeable` method on the form def is used to determine if that fields is mergeable. if it isn't, the value currently in meta will _not_ be changed.
+
+## <a name="ObjectMethod <strong>stringify</strong> ($types"></a> [[ObjectMethod]] **stringify** `($types) -> $string`
+
+Return a string version of the meta object. Uses \\n to separate lines. If $types is specified, return only types specified by that RE.
+
+## <a name="ObjectMethod <strong>for_EachSelectedVa"></a> [[ObjectMethod]] \*forEachSelectedValue `($types,$keys,\&fn,\%options)`
+
+Iterate over the values selected by the regular expressions in $types and $keys.
+
+- `$types` - regular expression matching the names of fields to be processed. Will default to qr/^[A-Z]+$/ if undef.
+- `$keys` - regular expression matching the names of keys to be processed. Will default to qr/^[a-z]+$/ if undef.
+
+Iterates over each value, calling `\&fn` on each, and replacing the value with the result of \\&fn.
+
+\\%options will be passed on to $fn, with the following additions:
+
+- `_type` => the type name (e.g. "FILEATTACHMENT")
+- `_key` => the key name (e.g. "user")
+
+## <a name="ObjectMethod <strong>getParent</strong> () - $p"></a> [[ObjectMethod]] **getParent** `() -> $parent`
+
+Gets the TOPICPARENT name.
+
+## <a name="ObjectMethod <strong>get_FormName</strong> () -"></a> [[ObjectMethod]] **getFormName** `() -> $formname`
+
+Returns the name of the FORM, or '' if none.
--- /dev/null
+# <a name="Package <code>TWiki::Net="></a> Package =TWiki::Net
+
+Object that brokers access to network resources.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Net="> Package TWiki::Net</a><ul>
+ <li><a href="#ObjectMethod <strong>getUrl</strong> ($host,$po"> ObjectMethod getUrl <tt>($host,$port,$url,$user,$pass,$header) -> $text</tt></a></li>
+ <li><a href="#set_MailHandler( \fn )"> setMailHandler( \&fn )</a></li>
+ <li><a href="#ObjectMethod <strong>sendEmail</strong> ($text,"> ObjectMethod sendEmail <tt>($text,$retries) -> $error</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ObjectMethod <strong>getUrl</strong> ($host,$po"></a> [[ObjectMethod]] **getUrl** `($host,$port,$url,$user,$pass,$header) -> $text`
+
+Get the text at the other end of a URL
+
+## <a name="set_MailHandler( \fn )"></a> setMailHandler( \\&fn )
+
+- `\&fn` - reference to a function($) (see \_sendEmailBySendmail for proto)
+
+Install a handler function to take over mail sending from the default SMTP or sendmail methods. This is provided mainly for tests that need to be told when a mail is sent, without actually sending it. It may also be useful in the event that someone needs to plug in an alternative mail handling method.
+
+## <a name="ObjectMethod <strong>sendEmail</strong> ($text,"></a> [[ObjectMethod]] **sendEmail** `($text,$retries) -> $error`
+
+- `$text` - text of the mail, including MIME headers
+- `$retries` - number of times to retry the send (default 1)
+
+Send an email specified as MIME format content. Date: ...\\nFrom: ...\\nTo: ...\\nCC: ...\\nSubject: ...\\n\\nMailBody...
--- /dev/null
+# <a name="Package <code>TWiki::_OopsException="></a> Package =TWiki::OopsException
+
+**extends** `Error`
+
+Exception used to raise a request to redirect to an Oops URL. An [[OopsException]] thrown anywhere in the code will redirect the browser to a url based on the `oops` script. `oops` requires a `template` parameter, that is the name of a template file from the `templates` directory. This file will be expanded and the parameter values passed to the exception instantiated. The result will be shown in the browser.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::_OopsException="> Package TWiki::OopsException</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($template,..."> ClassMethod new <tt>($template,...)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>stringify</strong> () -> $"> ObjectMethod stringify <tt>() -> $string</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($template,..."></a> [[ClassMethod]] **new** `($template,...)`
+
+- `template` is the name of an oops template
+
+The remaining parameters are interpreted as key-value pairs. The following keys are used:
+
+- `web` will be used as the web for the oops
+- `topic` will be used as the topic for the oops
+- `def` - is the (optional) name of a TMPL:DEF within the template
+- `keep` - if set, the exception handler should try it's damndest to retain parameter values from the query.
+- `params` is a reference to an array of parameters. These will be substituted for %PARAM1%, %PARAM2% ... %PARAMn% in the template.
+
+## <a name="ObjectMethod <strong>stringify</strong> () - $s"></a> [[ObjectMethod]] **stringify** `() -> $string`
+
+Generates a string representation for the object, mainly for debugging.
- [[TWikiHistory]] has a list of added features in TWiki.
- [[TWikiDocumentation]] is the implementation documentation.
- [[TWikiEnhancementRequests]] is the place where you can add your enhancement requests.
-
--- TWiki:Main.PeterThoeny - 17 Jan 2003
--- /dev/null
+# <a name="Package <code>="></a> Package =
+
+<div>
+ <ul>
+ <li><a href="#Package =="> Package ==</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session,$nam"> ClassMethod new <tt>($session,$name,$module)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session,$nam"></a> [[ClassMethod]] **new** `($session,$name,$module)`
+
+- `$session` - TWiki object
+- `$name` - name of the plugin e.g. [[MyPlugin]]
+- `$module` - (options) name of the plugin class. Default is TWiki::Plugins::$name
<ul>
<li><a href="#TWiki Plugins"> TWiki Plugins</a><ul>
<li><a href="#Overview"> Overview</a></li>
- <li><a href="#Preinstalled Plugins"> Preinstalled Plugins</a></li>
<li><a href="#Installing Plugins"> Installing Plugins</a><ul>
<li><a href="#On-Site Pretesting"> On-Site Pretesting</a></li>
- <li><a href="#Checking that Plugins are Workin"> Checking that Plugins are Working on a Live Server</a></li>
- <li><a href="#A Note on Plugin Performance"> A Note on Plugin Performance</a></li>
+ <li><a href="#Some Notes on Plugin Performance"> Some Notes on Plugin Performance</a></li>
</ul>
</li>
- <li><a href="#Managing Plugins"> Managing Plugins</a><ul>
- <li><a href="#Setting Preferences"> Setting Preferences</a></li>
- <li><a href="#Listing Active Plugins"> Listing Active Plugins</a></li>
+ <li><a href="#Managing Installed Plugins"> Managing Installed Plugins</a><ul>
+ <li><a href="#Enabling Plugins"> Enabling Plugins</a></li>
+ <li><a href="#Plugin Evaluation Order"> Plugin Evaluation Order</a></li>
+ <li><a href="#Plugin-Specific Settings"> Plugin-Specific Settings</a></li>
+ <li><a href="#Listing Active Plugins"> Listing Active Plugins</a><ul>
+ <li><a href="#=%ACTIVATEDPLUGINS%="> %ACTIVATEDPLUGINS%</a></li>
+ <li><a href="#=%PLUGINDESCRIPTIONS%="> %PLUGINDESCRIPTIONS%</a></li>
+ <li><a href="#=%FAILEDPLUGINS%="> %FAILEDPLUGINS%</a></li>
+ </ul>
+ </li>
</ul>
</li>
<li><a href="#The TWiki Plugin API"> The TWiki Plugin API</a><ul>
<li><a href="#Predefined Hooks"> Predefined Hooks</a></li>
<li><a href="#Hints on Writing Fast Plugins"> Hints on Writing Fast Plugins</a></li>
<li><a href="#Plugin Version Detection"> Plugin Version Detection</a></li>
+ <li><a href="#Security"> Security</a></li>
</ul>
</li>
<li><a href="#Creating Plugins"> Creating Plugins</a><ul>
- <li><a href="#The _DefaultPlugin Alternative"> The DefaultPlugin Alternative</a></li>
<li><a href="#Anatomy of a Plugin"> Anatomy of a Plugin</a></li>
<li><a href="#Creating the Perl Module"> Creating the Perl Module </a></li>
+ <li><a href="#Measuring and Improving the Plug"> Measuring and Improving the Plugin Performance</a></li>
<li><a href="#Writing the Documentation Topic"> Writing the Documentation Topic</a></li>
<li><a href="#Packaging for Distribution"> Packaging for Distribution</a></li>
<li><a href="#Publishing for Public Use"> Publishing for Public Use</a></li>
</ul>
</li>
- <li><a href="#Recommended Storage of Plugin Da"> Recommended Storage of Plugin Data</a><ul>
- <li><a href="#Where to store Plugin Internal D"> Where to store Plugin Internal Data</a></li>
- <li><a href="#Where to Store Data for Topics u"> Where to Store Data for Topics using the Plugin</a></li>
+ <li><a href="#Recommended Storage of Plugin Sp"> Recommended Storage of Plugin Specific Data</a><ul>
+ <li><a href="#Plugin Internal Data"> Plugin Internal Data</a></li>
+ <li><a href="#Web Accessible Data"> Web Accessible Data</a></li>
+ </ul>
+ </li>
+ <li><a href="#Maintaining Plugins"> Maintaining Plugins</a><ul>
+ <li><a href="#Discussions and Feedback on Plug"> Discussions and Feedback on Plugins</a></li>
+ <li><a href="#Maintaining Compatibility with E"> Maintaining Compatibility with Earlier TWiki Versions</a></li>
+ <li><a href="#Handling deprecated functions"> Handling deprecated functions</a></li>
</ul>
</li>
</ul>
# <a name="TWiki Plugins"></a> TWiki Plugins
-_Plug-in enhanced feature add-ons, with a Plugin API for developers_
+_Add functionality to TWiki with readily available Plugins; create Plugins based on APIs_
## <a name="Overview"></a> Overview
-You can add Plugins to extend TWiki's functionality, without altering the core program code. A plug-in approach lets you:
+You can add Plugins to extend TWiki functionality, without altering the core code. A plug-in approach lets you:
- add virtually unlimited features while keeping the main TWiki code compact and efficient;
- heavily customize an installation and still do clean updates to new versions of TWiki;
Everything to do with TWiki Plugins - demos, new releases, downloads, development, general discussion - is available at TWiki.org, in the ** TWiki:Plugins ** web.
-## <a name="Preinstalled Plugins"></a> Preinstalled Plugins
+TWiki Plugins are developed and contributed by interested members of the community. Plugins are provided on an 'as is' basis; they are not a part of TWiki, but are independently developed and maintained.
-TWiki comes with a set of Plugins as part of the standard installation.
-
-- [[DefaultPlugin]]: Optionally handles some legacy variables from older versions of TWiki. You can control this option from [[TWikiPreferences]]. (Perl programmers can also [[add rules|Main/WebHome#DefaultPluginAlt]] for simple custom processing.)
-- [[EmptyPlugin]]: Is a fully functional module, minus active code; it does nothing and serves as a template for new Plugin development
-- [[CommentPlugin]]: %COMMENTPLUGIN\_SHORTDESCRIPTION%
-- [[InterwikiPlugin]]: Use it for shorthand linking to remote sites, ex: `TWiki:Plugins` expands to TWiki:Plugins on TWiki.org. You can edit the predefined set of of Wiki-related sites, and add your own
-- [[EditTablePlugin]]: %EDITTABLEPLUGIN\_SHORTDESCRIPTION%
-- [[RenderListPlugin]]: %RENDERLISTPLUGIN\_SHORTDESCRIPTION%
-- [[SlideShowPlugin]]: %SLIDESHOWPLUGIN\_SHORTDESCRIPTION%
-- [[SmiliesPlugin]]: %SMILIESPLUGIN\_SHORTDESCRIPTION%
-- [[SpreadSheetPlugin]]: %SPREADSHEETPLUGIN\_SHORTDESCRIPTION%
-- [[TablePlugin]]: %TABLEPLUGIN\_SHORTDESCRIPTION%
+**_%T% Tip:_** TWiki:TWiki.TWikiPluginsSupplement on TWiki.org has supplemental documentation on TWiki Plugins.
<a name="InstallPlugin"></a>
## <a name="Installing Plugins"></a> Installing Plugins
-Each TWikiPlugin comes with full documentation: step-by-step installation instructions, a detailed description of any special requirements, version details, and a working example for testing.
-
-Most Plugins can be installed in three easy steps, with no programming skills required:
+Each TWiki Plugin comes with its own documentation: step-by-step installation instructions, a detailed description of any special requirements, version details, and a working example for testing. Many Plugins have an install script that automates these steps for you.
-1. **Download** the zip file containing the Plugin, documentation, and any other required files, from TWiki:Plugins.
-2. **Distribute** the files to their proper locations - unzip the zip archive in your TWiki installation directory - if have a standard TWiki installation, this will distribute automatically. Otherwise, place the files according to the directory paths listed on the Plugin top in TWiki:Plugins.
-3. **Check** the demo example on the Plugin topic: if it's working, the installation was fine!
+**Special Requirements:** Some Plugins need certain Perl modules to be preinstalled on the host system. Plugins may also use other resources, like graphics, other modules, applications, and templates. You should be able to find detailed instructions in the Plugin's documentation.
-**Special Requests:** Some Plugins need certain Perl modules to be preinstalled on the host system. Plugins may also use other resources, like graphics, other modules, applications, templates. In these cases, detailed instructions are in the Plugin documentation.
-
-Each Plugin has a standard release page, located in the TWiki:Plugins web at TWiki.org. In addition to the documentation topic (`SomePlugin`), there's a separate development page.
-
-- **Doc page:** Read all available info about the Plugin; download the attached distribution files.
-- **Dev page:** Post feature requests, bug reports and general dev comments; topic title ends in `Dev` (`SomePluginDev`).
-- **User support:** Post installation, how to use type questions (and answers, if you have them) in the TWiki:Support web.
+Each Plugin has a standard release topic, located in the TWiki:Plugins web at TWiki.org. There's usually a number of other related topics, such as a developers page, and an appraisal page.
<a name="PreTesting"></a>
### <a name="On-Site Pretesting"></a> On-Site Pretesting
-To test new Plugins on your installation before making them public, you may want to use one of these two approaches:
-
-- **Method 1:** Safely test on-the-fly by creating separate Production and Test branches in your live TWiki installation.
- - **Duplicate** the `twiki/bin` and `twiki/lib` directories for the Test version, and adjust the paths in the new `lib/TWiki.cfg`. The following directories are shared: `twiki/data`, `twiki/templates` and `twiki/pub`.
- - **Test** Plugins and other new features in the Test installation until you're satisfied.
- - %X% If you modify topics using the new features, live users will likely see unfamiliar new META tags showing up on their pages - to avoid this, create and edit test-only topics to try out new features.
- - **Copy** the modified files to the Production installation. You can update a TWiki installation live and users won't even notice.
+The recommended approach to testing new Plugins before making them public is to create a second local TWiki installation, and test the Plugin there. You can allow selected users access to the test area. Once you are satisifed that it won't compromise your main installation, you can install it there as well.
-- **Method 2:** List the Plugin being tested in the `DISABLEDPLUGINS` variable in [[TWikiPreferences]]. Redefine the `DISABLEDPLUGINS` variable in the `Sandbox` web and do the testing there.
+[[InstalledPlugins]] shows which Plugins are: 1) installed, 2) loading properly, and 3) what TWiki:Codev.PluginHandlers they invoke. Any failures are shown in the Errors section. The <code>[[%FAILEDPLUGINS%|Main/TWikiVariables#VarFAILEDPLUGINS]]</code> variable can be used to debug failures. You may also want to check your webserver error log and the various TWiki log files.
-### <a name="Checking that Plugins are Workin"></a> Checking that Plugins are Working on a Live Server
+### <a name="Some Notes on Plugin Performance"></a> Some Notes on Plugin Performance
-[[InstalledPlugins]] shows which Plugins are: 1) installed, 2) loading properly and 3) what TWiki:Codev.PluginHandlers they invoke. Any failures are shown in the Errors section.
+The performance of the system depends to some extent on the number of Plugins installed and on the Plugin implementation. Some Plugins impose no measurable performance decrease, some do. For example, a Plugin might use many Perl libraries that need to be initialized with each page view (unless you run mod\_perl). You can only really tell the performance impact by installing the Plugin and by measuring the performance with and without the new Plugin. Use the TWiki:Plugins.PluginBenchmarkAddOn, or test manually with the Apache `ab` utility. Example on Unix:%BR% `time wget -qO /dev/null http://www.dementia.org/twiki/view/TWiki/AbcPlugin`
-### <a name="A Note on Plugin Performance"></a> A Note on Plugin Performance
+%T% If you need to install an "expensive" Plugin, and you need its functionality only in one web, you can place the Plugin topic into that web. TWiki will initialize the Plugin only if the Plugin topic is found (which won't be the case for other webs.)
-The performance of the system depends on the number of Plugins installed and on the Plugin implementation. Some Plugins impose no measurable performance decrease, some do. For example, `outsidePREHandler` is an expensive callback function, or a Plugin might use many Perl libraries that need to be initialized with each page view (unless you run mod\_perl). It is recommended to measure the performance with and without a new Plugin. Example for Unix:%BR% `time wget -qO /dev/null http://www.dementia.org/twiki//view/TWiki/AbcPlugin`
+<a name="ManagingPlugins"></a>
-In case you need to install an "expensive" Plugin and you need its functionality only in one web you can place the Plugin topic into that web. TWiki will initialize the Plugin only if the Plugin topic is found (which won't be the case for other webs.)
+## <a name="Managing Installed Plugins"></a> Managing Installed Plugins
-## <a name="Managing Plugins"></a> Managing Plugins
+Some Plugins require additional settings or offer extra options that you have to select. Also, you may want to make a Plugin available only in certain webs, or temporarily disable it. And may want to list all available Plugins in certain topics. You can handle all of these management tasks with simple procedures:
-When you finish [[installing a Plugin|Main/WebHome#InstallPlugin]], you should be able to read the user instructions and go. In fact, some Plugins require additional settings or offer extra options that you have to select. Also, you may want to make a Plugin available only in certain webs, or temporarily disable it. And may want to list all available Plugins in certain topics. You can handle all of these management tasks with simple procedures.
+### <a name="Enabling Plugins"></a> Enabling Plugins
-### <a name="Setting Preferences"></a> Setting Preferences
+Plugins can be enabled and disabled with the [configure](http://www.dementia.org/twiki/configure) script. An installed Plugin needs to be enabled before it can be used.
-Installed Plugins can be **toggled on or off**, site-wide or by web, through TWikiPreferences and individual WebPreferences:
+### <a name="Plugin Evaluation Order"></a> Plugin Evaluation Order
-- All Plugin modules present in the `lib/TWiki/Plugins` directory are activated automatically unless disabled by the `DISABLEDPLUGINS` Preferences variable in TWikiPreferences. You can optionally list the installed Plugins in the `INSTALLEDPLUGINS` Preferences variable. This is useful to define the sequence of Plugin execution, or to specify other webs than the %WIKITOOLNAME% web for the Plugin topics. Settings in [[TWikiPreferences]] are:
- - `Set INSTALLEDPLUGINS = DefaultPlugin, ...`
- - `Set DISABLEDPLUGINS = EmptyPlugin, ...`
+By default, TWiki executes Plugins in alphabetical order on Plugin name. It is possible to change the order, for example to evaluate database variables before the speadsheet CALCs. This can be done with `{PluginsOrder}` in the Plugins section of [configure](http://www.dementia.org/twiki/configure).
-**Plugin execution order** in TWiki is determined by searching Plugin topics in a specific sequence: First, full `web.topicname` name, if specified in `INSTALLEDPLUGINS`; next, the TWiki web is searched; and finally, the current web.
+### <a name="Plugin-Specific Settings"></a> Plugin-Specific Settings
-**Plugin-specific settings** are done in individual Plugin topics. Two settings are standard for each Plugin:
+Plugin-specific settings are done in individual Plugin topics. Two settings are standard for each Plugin:
1. One line description, used to form the bullets describing the Plugins in the [[TextFormattingRules]] topic:
- - `Set SHORTDESCRIPTION = Blah blah woof woof.`
+ - `Set SHORTDESCRIPTION = Create dynamic foo bar reports`
2. Debug Plugin, output can be seen in `data/debug.txt`. Set to 0=off or 1=on:
- `Set DEBUG = 0`
-- The settings can be retrieved as Preferences variables like `%<pluginname>_<var>%`, ex: `%DEFAULTPLUGIN_SHORTDESCRIPTION%` shows the description of the DefaultPlugin.
+- The settings can be retrieved as Preferences variables like `%<pluginname>_<var>%`. For example, `%DEFAULTPLUGIN_SHORTDESCRIPTION%` shows the description of the DefaultPlugin.
### <a name="Listing Active Plugins"></a> Listing Active Plugins
-Plugin status variables let you list all active Plugins wherever needed. There are two list formats:
-
-- The `%ACTIVATEDPLUGINS%` variable lists activated Plugins by name. (This variable is displayed in [[TWikiPreferences]] for debugging use.)
-- The `%PLUGINDESCRIPTIONS%` variable displays a bullet list with a one-line description of each active Plugins. This variable is based on the `%<plugin>_SHORTDESCRIPTION%` Preferences variables of individual topics and is shown in [[TextFormattingRules]].
-
-> **DEMO: Automatically List Active Plugins Using Variables**
->
-> Using `%ACTIVATEDPLUGINS%`:<br /> On this TWiki site, the active Plugins are: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]].
->
-> Using <code>%PLUGINDESCRIPTIONS%</code>:<br /> You can use any of these active TWiki Plugins:
->
-> - [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
-> - [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
-> - [[EditTablePlugin]] <span>(any TWiki, 11646)</span>:
-> - [[InterwikiPlugin]] <span>(Dakar, $Rev: 11935$)</span>:
-> - [[PreferencesPlugin]] <span>(Dakar, 9839)</span>:
-> - [[SlideShowPlugin]] <span>(Any TWiki, $Rev: 12847$)</span>:
-> - [[SmiliesPlugin]] <span>(Dakar, 8154)</span>:
-> - [[TablePlugin]] <span>(1.020, 12339)</span>:
-> - [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
+Plugin status variables let you list all active Plugins wherever needed.
+
+#### <a name="=%ACTIVATEDPLUGINS%="></a> `%ACTIVATEDPLUGINS%`
+
+On this TWiki site, the enabled Plugins are: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]].
+
+#### <a name="=%PLUGINDESCRIPTIONS%="></a> `%PLUGINDESCRIPTIONS%`
+
+- [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
+- [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
+- [[EditTablePlugin]] <span>(any TWiki, 11646)</span>:
+- [[InterwikiPlugin]] <span>(Dakar, $Rev: 11935$)</span>:
+- [[PreferencesPlugin]] <span>(Dakar, 9839)</span>:
+- [[SlideShowPlugin]] <span>(Any TWiki, $Rev: 12847$)</span>:
+- [[SmiliesPlugin]] <span>(Dakar, 8154)</span>:
+- [[TablePlugin]] <span>(1.020, 12339)</span>:
+- [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
+
+#### <a name="=%FAILEDPLUGINS%="></a> `%FAILEDPLUGINS%`
+
+<table border="1">
+ <tr>
+ <th>Plugin</th>
+ <th>Errors</th>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/SpreadSheetPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register SpreadSheetPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/CommentPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register CommentPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/EditTablePlugin]]</td>
+ <td><pre>
+Plugins: could not fully register EditTablePlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/InterwikiPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register InterwikiPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/PreferencesPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register PreferencesPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/SlideShowPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register SlideShowPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/SmiliesPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register SmiliesPlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/TablePlugin]]</td>
+ <td><pre>
+Plugins: could not fully register TablePlugin, no plugin topic
+</pre></td>
+ </tr>
+ <tr valign="top">
+ <td>[[TWiki/TwistyPlugin]]</td>
+ <td><pre>
+Plugins: could not fully register TwistyPlugin, no plugin topic
+</pre></td>
+ </tr>
+</table>
+<table border="1">
+ <tr>
+ <th>Handler</th>
+ <th>Plugins</th>
+ </tr>
+ <tr valign="top">
+ <td>beforeCommonTagsHandler</td>
+ <td>PreferencesPlugin<br />TwistyPlugin</td>
+ </tr>
+ <tr valign="top">
+ <td>beforeSaveHandler</td>
+ <td>CommentPlugin</td>
+ </tr>
+ <tr valign="top">
+ <td>commonTagsHandler</td>
+ <td>SpreadSheetPlugin<br />CommentPlugin<br />EditTablePlugin<br />SlideShowPlugin<br />SmiliesPlugin</td>
+ </tr>
+ <tr valign="top">
+ <td>initPlugin</td>
+ <td>SpreadSheetPlugin<br />CommentPlugin<br />EditTablePlugin<br />InterwikiPlugin<br />PreferencesPlugin<br />SlideShowPlugin<br />SmiliesPlugin<br />TablePlugin<br />TwistyPlugin</td>
+ </tr>
+ <tr valign="top">
+ <td>postRenderingHandler</td>
+ <td>EditTablePlugin<br />PreferencesPlugin<br />TwistyPlugin</td>
+ </tr>
+ <tr valign="top">
+ <td>preRenderingHandler</td>
+ <td>InterwikiPlugin<br />SmiliesPlugin<br />TablePlugin</td>
+ </tr>
+</table>
+
+**9 plugins**
<a name="PluginAPI"></a>
## <a name="The TWiki Plugin API"></a> The TWiki Plugin API
-The Application Programming Interface (API) for TWikiPlugins provides the specifications for hooking into the core TWiki code from your external Perl Plugin module. The Plugin API is new to the Production version of TWiki with the 01-Sep-2001 release.
+The Application Programming Interface (API) for TWiki Plugins provides the specifications for hooking into the core TWiki code from your external Perl Plugin module.
### <a name="Available Core Functions"></a> Available Core Functions
-The [[TWikiFuncModule]] (`lib/TWiki/Func.pm`) implements ALL official Plugin functions. Plugins should ONLY use functions published in this module.
+The [[TWikiFuncDotPm]] module (`lib/TWiki/Func.pm`) describes **all** the interfaces available to Plugins. Plugins should **only** use the interfaces described in this module.
-%X% If you use functions not in `Func.pm`, you run the risk of creating security holes. Also, your Plugin will likely break and require updating when you upgrade to a new version of TWiki.
+**_%X% Note:_** If you use other core functions not described in `Func.pm`, you run the risk of creating security holes. Also, your Plugin will likely break and require updating when you upgrade to a new version of TWiki.
### <a name="Predefined Hooks"></a> Predefined Hooks
-In addition to TWiki core functions, Plugins can use **predefined hooks**, or **call backs**, listed in the `lib/TWiki/Plugins/EmptyPlugin.pm` module.
-
-- All but the initPlugin are disabled. To enable a call back, remove `DISABLE_` from the function name.
-- For best performance, enable only the functions you really need. NOTE: `outsidePREHandler` and `insidePREHandler` are particularly expensive.
-
-Most Plugins use either the `commonTagsHandler` or `startRenderingHandler` for rendering tasks:
+In addition to TWiki core functions, Plugins can use **predefined hooks**, or **callbacks**, as described in the `lib/TWiki/Plugins/EmptyPlugin.pm` module.
-- `commonTagsHandler:` Use it to expand `%XYZPLUGIN%` and `%XYZPLUGIN{...}%` variables
-- `startRenderingHandler:` Use it for your own rendering rules or to overload TWiki's internal rendering like `[[links]]`
+- All but the initPlugin are disabled. To enable a callback, remove `DISABLE_` from the function name.
TWiki:Codev/StepByStepRenderingOrder helps you decide which rendering handler to use.
+<a name="FastPluginHints"></a>
+
### <a name="Hints on Writing Fast Plugins"></a> Hints on Writing Fast Plugins
-- Delay the Plugin initialization to the actual function which is handling the tag. This way all the expensive initialization is done only when needed.
-- For example, use an `eval` block like:%BR% `eval { require IPC::Run }` %BR% `return "<font color=\"red\">SamplePlugin: Can't load required modules ($@)</font>" if $@;`
-- You could return errors as strings to show what happened
+- Delay initialization as late as possible. For example, if your Plugin is a simple syntax processor, you might delay loading extra Perl modules until you actually see the syntax in the text.
+- For example, use an `eval` block like this:%BR% `eval { require IPC::Run }` %BR% `return "<font color=\"red\">SamplePlugin: Can't load required modules ($@)</font>" if $@;`
- You can use a flag to avoid running the initialization twice
+- The TWiki:Plugins.PluginBenchmarkAddOn comes in handy to measure and fine-tune the performance of your Plugin
### <a name="Plugin Version Detection"></a> Plugin Version Detection
- The Plugin initialization code does not register a Plugin that returns FALSE (or that has no `initPlugin` handler).
- `$TWiki::Plugins::VERSION` in the `TWiki::Plugins` module contains the TWiki Plugin API version, currently **1\.11**.
- - You can also use the [[%PLUGINVERSION{}%|Main/TWikiVariables#VarPLUGINVERSION]] variable to query the Plugin API version or the version of installed Plugins.
+ - You can also use the <code>[[%PLUGINVERSION{}%|Main/TWikiVariables#VarPLUGINVERSION]]</code> variable to query the Plugin API version or the version of installed Plugins.
+
+### <a name="Security"></a> Security
+
+- Badly written Plugins can open huge security holes in TWiki. This is especially true if care isn't taken to prevent execution of arbitrary commands on the server.
+- Don't allow sensitive configuration data to be edited by users. it is better to add sensitive configuration options to the `%TWiki::cfg` hash than adding it as preferences in the Plugin topic
+ - See TWiki:Plugins.MailInContrib for an example of this
+ - TWiki:Plugins.BuildContrib can help you with this
+- Always use the TWiki::Sandbox to execute commands.
+- Always audit the Plugins you install, and make sure you are happy with the level of security provided. While every effort is made to monitor Plugin authors activities, at the end of the day they are uncontrolled user contributions.
<a name="CreatePlugins"></a>
With a reasonable knowledge of the Perl scripting language, you can create new Plugins or modify and extend existing ones. Basic plug-in architecture uses an Application Programming Interface (API), a set of software instructions that allow external code to interact with the main program. The [[TWiki Plugin API|Main/WebHome#PluginAPI]] Plugins by providing a programming interface for TWiki.
-<a name="DefaultPluginAlt"></a>
-
-### <a name="The _DefaultPlugin Alternative"></a> The DefaultPlugin Alternative
-
-- **DefaultPlugin** can handle some outdated TWiki variables, found, for example, in sites recently updated from an old version. Settings are in [[DefaultPlugin]] topic. You can also add your own simple custom processing rules here, though in all but very simple cases, writing a new Plugin is preferable.
-
### <a name="Anatomy of a Plugin"></a> Anatomy of a Plugin
A basic TWiki Plugin consists of two elements:
If your Plugin uses its own modules and objects, you must include the name of the Plugin in the package name. For example, write `Package MyFirstPlugin::Attrs;` instead of just `Package Attrs;`. Then call it using:
- use TWiki::Plugins::MyFirstPlugin::Attrs;
- $var = MyFirstPlugin::Attrs->new();
+ use TWiki::Plugins::MyFirstPlugin::Attrs;
+ $var = MyFirstPlugin::Attrs->new();
+
+<a name="MeasurePerformance"></a>
+
+### <a name="Measuring and Improving the Plug"></a> Measuring and Improving the Plugin Performance
+
+A high quality Plugin performs well. You can use the TWiki:Plugins.PluginBenchmarkAddOn to measure your TWiki:Plugins.PluginBenchmarks. The data is needed as part of the Documentation Topic.
+
+See also [[Hints on Writing Fast Plugins|Main/WebHome#FastPluginHints]].
<a name="CreatePluginTopic"></a>
- In the [[GoBox]] enter your Plugin name, for example `MyFirstPlugin`, press enter and create the new topic
- paste & save new Plugin topic on your site
2. **Customize** your Plugin topic.
- - In case you plan to publish your Plugin at TWiki.org, use Interwiki names for author names, like TWiki:Main/admin.
-3. **Save** your topic, for use in [[packaging|Main/WebHome#CreatePluginPackage]] and [[publishing|Main/WebHome#PublishPlugin]] your Plugin.
+ - Important: In case you plan to publish your Plugin on TWiki.org, use Interwiki names for author names and links to TWiki.org topics, such as TWiki:Main/admin. This is important because links should work properly in a Plugin topic installed on any TWiki, not just on TWiki.org.
+3. **Document** the performance data you gathered while [[measuring the performance|Main/WebHome#MeasurePerformance]]
+4. **Save** your topic, for use in [[packaging|Main/WebHome#CreatePluginPackage]] and [[publishing|Main/WebHome#PublishPlugin]] your Plugin.
> **OUTLINE: Doc Topic Contents**
>
### <a name="Packaging for Distribution"></a> Packaging for Distribution
-A minimum Plugin release consists of a Perl module with a [[WikiName]] that ends in `Plugin`, ex: `MyFirstPlugin.pm`, and a documentation page with the same name(`MyFirstPlugin.txt`).
+The TWiki:Plugins.BuildContrib is a powerful build environment that is used by the TWiki project to build TWiki itself, as well as many of the Plugins. You don't **have** to use it, but it is highly recommended!
-1. Distribute the Plugin files in a directory structure that mirrors TWiki. If your Plugin uses additional files, include them ALL:
+If you don't want (or can't) use the BuildContrib, then a minimum Plugin release consists of a Perl module with a [[WikiName]] that ends in `Plugin`, ex: `MyFirstPlugin.pm`, and a documentation page with the same name(`MyFirstPlugin.txt`).
+
+1. Distribute the Plugin files in a directory structure that mirrors TWiki. If your Plugin uses additional files, include them all:
- `lib/TWiki/Plugins/MyFirstPlugin.pm`
- `data/TWiki/MyFirstPlugin.txt`
- `pub/TWiki/MyFirstPlugin/uparrow.gif` [a required graphic]
### <a name="Publishing for Public Use"></a> Publishing for Public Use
-You can release your tested, packaged Plugin to the TWiki community through the TWiki:Plugins web. All Plugins submitted to TWiki.org are available for download and further development in TWiki:Plugins/PluginPackage. Publish your Plugin in these steps:
+You can release your tested, packaged Plugin to the TWiki community through the TWiki:Plugins web. All Plugins submitted to TWiki.org are available for download and further development in TWiki:Plugins/PluginPackage.
+
+Publish your Plugin by following these steps:
1. **Post** the Plugin documentation topic in the TWiki:Plugins/PluginPackage:
- enter the Plugin name in the "How to Create a Plugin" section, for example `MyFirstPlugin`
- - paste in the topic text from [[Creating Plugin Documentation|Main/WebHome#CreatePluginTopic]] and save
+ - paste in the topic text from [[Writing the Documentation Topic|Main/WebHome#CreatePluginTopic]] and save
2. **Attach** the distribution zip file to the topic, ex: `MyFirstPlugin.zip`
3. **Link** from the doc page to a new, blank page named after the Plugin, and ending in `Dev`, ex: `MyFirstPluginDev`. This is the discussion page for future development. (User support for Plugins is handled in TWiki:Support.)
-4. **Put** the Plugin into the CVS repository, see TWiki:Plugins/ReadmeFirst (optional)
+4. **Put** the Plugin into the SVN repository, see TWiki:Plugins/ReadmeFirst (optional)
+
+%N% Once you have done the above steps once, you can use the BuildContrib to upload updates to your Plugin.
Thank you very much for sharing your Plugin with the TWiki community :-)
<a name="RecommendedStorageOfPluginData"></a>
-## <a name="Recommended Storage of Plugin Da"></a> Recommended Storage of Plugin Data
-
-Plugins sometimes need to store data. This can be Plugin internal data like cache data, or generated data for the browser like images. The following is a recommendation where to store the data.
-
-### <a name="Where to store Plugin Internal D"></a> Where to store Plugin Internal Data
-
-In case the Plugin generates data just for internal use, or data which is not specific to a topic, store it in the Plugin's attachment directory.
-
-- The Plugin's attachment directory is `pubdir/Installweb/FooBarPlugin`
- - `Installweb` refers to the name of the web where the Plugin is installed
-- The Plugin's attachment URL is `%PUBURL%/Installweb/FooBarPlugin`
-- The filename should start with an underscore, followed by an identifier, e.g. `_any_name.ext`
- - The leading underscore avoids a nameclash with files attached to the Plugin topic
- - Use only alphanumeric characters, underscores and periods to avoid platform dependency issues and URL issues
- - Do not use subdirectories (rename and delete would fail)
-- Use Plugin API functions documented in [[TWikiFuncModule]] to ensure portability:
- - Use `getPubDir()` to get the attachment root directory
- - Use `getUrlHost()` and `getPubUrlPath()` to build the URL in case you create content for the browser
- - Use `$installWeb` to get the name of the web where the Plugin is installed
- - Create the web directory and topic attachment directory if needed
-- Hint: Package the Plugin at least with one file attachment. This ensures that the attachment directory already exists
-
-### <a name="Where to Store Data for Topics u"></a> Where to Store Data for Topics using the Plugin
-
-In case the Plugin generates data which is specific to a topic, store it in the topic's attachment directory.
-
-- The topic's attachment directory is `pubdir/Webname/TopicName`
-- The topic's attachment URL is `%PUBURL%/Webname/TopicName`
-- The filename should start with an underscore, followed by the Plugin name, an underscore and an identifier, e.g. `_FooBarPlugin_any_name.ext`
- - The leading underscore avoids a nameclash with files attached to the same topic
- - Use only alphanumeric characters, underscores and periods to avoid platform dependency issues and URL issues
- - Do not use subdirectories (rename and delete would fail)
-- Use Plugin API functions documented in [[TWikiFuncModule]] to ensure portability:
- - Use `getPubDir()` to get the attachment root directory
- - Use `getUrlHost()` and `getPubUrlPath()` to build the URL in case you create content for the browser
-
-Example code to build the file name:
-
- sub _make_filename
- {
- my ( $web, $topic, $name ) = @_;
-
- # Create web directory "pub/$web" if needed
- my $dir = TWiki::Func::getPubDir() . "/$web";
- unless( -e "$dir" ) {
- umask( 002 );
- mkdir( $dir, 0775 );
- }
- # Create topic directory "pub/$web/$topic" if needed
- $dir .= "/$topic";
- unless( -e "$dir" ) {
- umask( 002 );
- mkdir( $dir, 0775 );
- }
- return "$dir/_FooBarPlugin_$name";
- }
-
--- TWiki:Main/PeterThoeny - 14 Aug 2004 %BR% -- TWiki:Main/AndreaSterbini - 29 May 2001 %BR% -- TWiki:Main/MikeMannix - 03 Dec 2001
+## <a name="Recommended Storage of Plugin Sp"></a> Recommended Storage of Plugin Specific Data
+
+Plugins sometimes need to store data. This can be Plugin internal data such as cache data, or data generated for browser consumption such as images. Plugins should store data using [[TWikiFuncDotPm]] functions that support saving and loading of topics and attachments.
+
+### <a name="Plugin Internal Data"></a> Plugin Internal Data
+
+You can create a Plugin "work area" using the `TWiki::Func::getWorkArea()` function, which gives you a persistant directory where you can store data files. By default they will not be web accessible. The directory is guaranteed to exist, and to be writable by the webserver user. For convenience, `TWiki::Func::storeFile()` and `TWiki::Func::readFile()` are provided to persistently store and retrieve simple data in this area.
+
+### <a name="Web Accessible Data"></a> Web Accessible Data
+
+**_Topic-specific data_** such as generated images can be stored in the topics attachment area, which is web accessible. Use the `TWiki::Func::saveAttachment()` function to store the data.
+
+Recommendation for file name:
+
+- Prefix the filename with an underscore (the leading underscore avoids a nameclash with files attached to the same topic)
+- Identify where the attachment originated from, typically by including the Plugin name in the file name
+- Use only alphanumeric characters, underscores, dashes and periods to avoid platform dependency issues and URL issues
+- Example: `_FooBarPlugin_img123.gif`
+
+**_Web specific data_** can be stored in the Plugin's attachment area, which is web accessible. Use the `TWiki::Func::saveAttachment()` function to store the data.
+
+Recommendation for file names in Plugin attachment area:
+
+- Prefix the filename with an underscore
+- Include the name of the web in the filename
+- Use only alphanumeric characters, underscores, dashes and periods to avoid platform dependency issues and URL issues
+- Example: `_Main_roundedge-ul.gif`
+
+<a name="MaintainPlugins"></a>
+
+## <a name="Maintaining Plugins"></a> Maintaining Plugins
+
+### <a name="Discussions and Feedback on Plug"></a> Discussions and Feedback on Plugins
+
+Each published Plugin has a Plugin development topic on TWiki.org. Plugin development topics are named after your Plugin and end in `Dev`, such as `MyFirstPluginDev`. The Plugin development topic is a great resource to discuss feature enhancements and to get feedback from the TWiki community.
+
+### <a name="Maintaining Compatibility with E"></a> Maintaining Compatibility with Earlier TWiki Versions
+
+The Plugin interface ([[TWikiFuncDotPm]] functions and handlers) evolve over time. TWiki 4.0 introduced new API functions to address the needs of Plugin authors. It also deprecated some functions. Some Plugins written for earlier TWiki releases using unofficial TWiki internal functions no longer work on the TWiki 4.0 codebase. All this means that some Plugins need to be updated to work on the TWiki 4.0 codebase.
+
+Organizations typically do not upgrade to the latest TWiki for many months. However, many administrators still would like to install the latest versions of a Plugin on their older TWiki installation. This need is fullfilled if Plugins are maintained in a compatible manner.
+
+**_%T% Tip:_** Plugins can be written to be compatible with older and newer TWiki releases. This can be done also for Plugins using unofficial TWiki internal functions of an earlier release that no longer work on the latest TWiki codebase. TWiki:TWiki.TWikiPluginsSupplement#MaintainPlugins has more.
+
+### <a name="Handling deprecated functions"></a> Handling deprecated functions
+
+From time-to-time, the TWiki developers will add new functions to the interface (either to [[TWikiFuncDotPm]], or new handlers). Sometimes these improvements mean that old functions have to be deprecated to keep the code manageable. When this happens, the deprecated functions will be supported in the interface for at least one more TWiki release, and probably longer, though this cannot be guaranteed.
+
+When a plugin defines deprecated handlers, a warning will be shown in the list generated by %FAILEDPLUGINS%. Admins who see these warnings should check TWiki.org and if necessary, contact the plugin author, for an updated version of the plugin.
+
+Updated plugins may still need to define deprecated handlers for compatibility with old TWiki versions. In this case, the plugin package that defines old handlers can suppress the warnings in %FAILEDPLUGINS%.
+
+This is done by defining a map from the handler name to the `TWiki::Plugins` version _in which the handler was first deprecated_. For example, if we need to define the `endRenderingHandler` for compatibility with `TWiki::Plugins` versions before 1.1, we would add this to the plugin:
+
+ package TWiki::Plugins::SinkPlugin;
+ use vars qw( %TWikiCompatibility );
+ $TWikiCompatibility{endRenderingHandler} = 1.1;
+
+If the currently-running TWiki version is 1.1 _or later_, then the _handler will not be called_ and _the warning will not be issued_. TWiki with versions of `TWiki::Plugins` before 1.1 will still call the handler as required.
+
+**_Related Topics:_** [[DeveloperDocumentationCategory]], [[AdminDocumentationCategory]], TWiki:TWiki.TWikiPluginsSupplement
+
+-- **_Contributors:_** TWiki:Main.PeterThoeny, TWiki:Main.AndreaSterbini, TWiki:MainMikeMannix, TWiki:CrawfordCurrie
--- /dev/null
+# <a name="Package <code>TWiki::Plugins="></a> Package =TWiki::Plugins
+
+This module defines the singleton object that handles Plugins loading, initialization and execution.
+
+This class uses Chain of Responsibility (GOF) pattern to dispatch handler calls to registered plugins.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Plugins="> Package TWiki::Plugins</a><ul>
+ <li><a href="#PUBLIC constant $VERSION"> PUBLIC constant $VERSION</a></li>
+ <li><a href="#PUBLIC $SESSION"> PUBLIC $SESSION</a></li>
+ <li><a href="#ClassMethod <strong>new</strong> ($session)"> ClassMethod new <tt>($session)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>load</strong> ($allDisable"> ObjectMethod load <tt>($allDisabled) -> $loginName</tt></a></li>
+ <li><a href="#ObjectMethod <strong>enable</strong> ()"> ObjectMethod enable <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod *get_PluginVersion*"> ObjectMethod getPluginVersion <tt>() -> $number</tt></a></li>
+ <li><a href="#ObjectMethod <strong>addListener</strong> ($com"> ObjectMethod addListener <tt>($command,$handler)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>have_HandlerFor</strong> ("> ObjectMethod haveHandlerFor <tt>($handlerName) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod *registrationHandle"> ObjectMethod registrationHandler <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod *before_CommonTagsH"> ObjectMethod beforeCommonTagsHandler <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod *common_TagsHandler"> ObjectMethod commonTagsHandler <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod *after_CommonTagsHa"> ObjectMethod afterCommonTagsHandler <tt>()</tt></a></li>
+ <li><a href="#ObjectMethd pre_RenderingHandler"> ObjectMethd preRenderingHandler( $text, \%map )</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+Note that as of version 1.026 of this module, TWiki internal methods are _no longer available_ to plugins. Any calls to TWiki internal methods must be replaced by calls via the $SESSION object in this package, or via the Func package. For example, the call:
+
+my $pref = TWiki::getPreferencesValue('URGH');
+
+should be replaced with
+
+my $pref = TWiki::Func::getPreferencesValue('URGH');
+
+and the call
+
+my $t = TWiki::writeWarning($message);
+
+should be replaced with
+
+my $pref = $TWiki::Plugins::SESSION->writeWarning($message);
+
+Methods in other modules such as Store must be accessed through the relevant TWiki sub-object, for example
+
+TWiki::Store::saveTopic(...)
+
+should be replaced with
+
+$TWiki::Plugins::SESSION->\{store\}->saveTopic(...)
+
+Note that calling TWiki internal methods is very very bad practice, and should be avoided wherever practical.
+
+The developers of TWiki reserve the right to change internal methods without warning, unless those methods are clearly marked as PUBLIC. PUBLIC methods are part of the core specification of a module and can be trusted.
+
+## <a name="PUBLIC constant $VERSION"></a> PUBLIC constant $VERSION
+
+This is the version number of the plugins package. Use it for checking if you have a recent enough version.
+
+## <a name="PUBLIC $SESSION"></a> PUBLIC $SESSION
+
+This is a reference to the TWiki session object. It can be used in plugins to get at the methods of the TWiki kernel.
+
+You are _highly_ recommended to only use the methods in the [[Func|Main/TWikiFuncDotPm]] interface, unless you have no other choice, as kernel methods may change between TWiki releases.
+
+## <a name="ClassMethod <strong>new</strong> ($session)"></a> [[ClassMethod]] **new** `($session)`
+
+Construct new singleton plugins collection object. The object is a container for a list of plugins and the handlers registered by the plugins. The plugins and the handlers are carefully ordered.
+
+## <a name="ObjectMethod <strong>load</strong> ($allDisable"></a> [[ObjectMethod]] **load** `($allDisabled) -> $loginName`
+
+Find all active plugins, and invoke the early initialisation. Has to be done _after_ prefs are read.
+
+Returns the user returned by the last `initializeUserHandler` to be called.
+
+If allDisabled is set, no plugin handlers will be called.
+
+## <a name="ObjectMethod <strong>enable</strong> ()"></a> [[ObjectMethod]] **enable** `()`
+
+Initialisation that is done after the user is known.
+
+## <a name="ObjectMethod <strong>get_PluginVersion*"></a> [[ObjectMethod]] \*getPluginVersion `() -> $number`
+
+Returns the $TWiki::Plugins::VERSION number if no parameter is specified, else returns the version number of a named Plugin. If the Plugin cannot be found or is not active, 0 is returned.
+
+## <a name="ObjectMethod <strong>addListener</strong> ($com"></a> [[ObjectMethod]] **addListener** `($command,$handler)`
+
+- =$command\* - name of the event
+- `$handler` - the handler object.
+
+Add a listener to the end of the list of registered listeners for this event. The listener must implement `invoke($command,...)`, which will be triggered when the event is to be processed.
+
+## <a name="ObjectMethod <strong>have_HandlerFor</strong> ("></a> [[ObjectMethod]] **haveHandlerFor** `($handlerName) -> $boolean`
+
+- `$handlerName` - name of the handler e.g. preRenderingHandler
+
+Return: true if at least one plugin has registered a handler of this type.
+
+## <a name="ObjectMethod <strong>registrationHandle"></a> [[ObjectMethod]] \*registrationHandler `()`
+
+Called by the register script
+
+## <a name="ObjectMethod <strong>before_CommonTagsH"></a> [[ObjectMethod]] \*beforeCommonTagsHandler `()`
+
+Called at the beginning (for cache Plugins only)
+
+## <a name="ObjectMethod <strong>common_TagsHandler"></a> [[ObjectMethod]] \*commonTagsHandler `()`
+
+Called after %INCLUDE:"..."%
+
+## <a name="ObjectMethod <strong>after_CommonTagsHa"></a> [[ObjectMethod]] \*afterCommonTagsHandler `()`
+
+Called at the end (for cache Plugins only)
+
+## <a name="ObjectMethd pre_RenderingHandler"></a> [[ObjectMethd]] preRenderingHandler( $text, \\%map )
+
+- `$text` - the text, with the head, verbatim and pre blocks replaced with placeholders
+- `\%removed` - reference to a hash that maps the placeholders to the removed blocks.
+
+Placeholders are text strings constructed using the tag name and a sequence number e.g. 'pre1', "verbatim6", "head1" etc. Placeholders are inserted into the text inside \\1 characters so the text will contain \\1\_pre1\\1 for placeholder pre1.
+
+Each removed block is represented by the block text and the parameters passed to the tag (usually empty) e.g. for
+
+ <pre class='slobadob'>
+ XYZ
+ </pre>
+ the map will contain:
+ <pre>
+ $removed->{'pre1'}{text}: XYZ
+ $removed->{'pre1'}{params}: class="slobadob"
+ </pre>
+
+ Iterating over blocks for a single tag is easy. For example, to prepend a line number to every line of a pre block you might use this code:
+
+ foreach my $placeholder ( keys %$map ) {
+ if( $placeholder =~ /^pre/i ) {
+ my $n = 1;
+ $map->{$placeholder}{text} =~ s/^/$n++/gem;
+ }
+ }
+
+ ---++ ObjectMethod *postRenderingHandler* <tt>(\$text)</tt>
+
+ * =\$text= - a reference to the HTML, with the head, verbatim and pre blocks replaced with placeholders
+
+ ---++ ObjectMethod *startRenderingHandler* <tt>()</tt>
+
+ Called just before the line loop
+
+ *DEPRECATED* Use preRenderingHandler instead. This handler correctly
+ handles verbatim and other TWiki ML block types, and exposes them to
+ the plugin.
+
+ ---++ ObjectMethod *outsidePREHandler* <tt>()</tt>
+
+ Called in line loop outside of <PRE> tag
+
+ *DEPRECATED* Use preRenderingHandler instead.
+ This handler correctly handles pre and other
+ TWiki ML block types, and is called only once
+ instead of line-by-line.
+
+ ---++ ObjectMethod *insidePREHandler* <tt>()</tt>
+
+ Called in line loop inside of <PRE> tag
+
+ *DEPRECATED* Use preRenderingHandler instead.
+ This handler correctly handles pre and other
+ TWiki ML block types, and is called only once
+ instead of line-by-line.
+
+ ---++ ObjectMethod *endRenderingHandler* <tt>()</tt>
+
+ Called just after the line loop
+
+ *DEPRECATED* Use postRenderingHandler instead.
+
+ ---++ ObjectMethod *beforeEditHandler* <tt>()</tt>
+
+ Called by edit
+
+ ---++ ObjectMethod *afterEditHandler* <tt>()</tt>
+
+ Called by edit
+
+ ---++ ObjectMethod *beforeSaveHandler* <tt>()</tt>
+
+ Called just before the save action
+
+ ---++ ObjectMethod *afterSaveHandler* <tt>()</tt>
+
+ Called just after the save action
+
+ ---++ ObjectMethod *mergeHandler* <tt>()</tt>
+
+ Called to handle text merge.
+
+ ---++ ObjectMethod *beforeAttachmentSaveHandler* <tt>($attrHashRef,$topic,$web)</tt>
+
+ This code provides Plugins with the opportunity to alter an uploaded attachment between the upload and save-to-store processes. It is invoked as per other Plugins.
+ * =$attrHashRef= - Hash reference of attachment attributes (keys are indicated below)
+ * =$topic= - | Topic name
+ * =$web= - | Web name
+
+ Keys in $attrHashRef:
+ | *Key* | *Value* |
+ | attachment | Name of the attachment |
+ | tmpFilename | Name of the local file that stores the upload |
+ | comment | Comment to be associated with the upload |
+ | user | Login name of the person submitting the attachment, e.g. 'jsmith' |
+
+ Note: All keys should be used read-only, except for comment which can be modified.
+
+ Example usage:
+
+ <pre>
+ my( $attrHashRef, $topic, $web ) = @_;
+ $$attrHashRef{'comment'} .= " (NOTE: Extracted from blah.tar.gz)";
+ </pre>
+
+ ---++ ObjectMethod *afterAttachmentSaveHandler* <tt>($attachmentAttrHash,$topic,$web,$error)</tt>
+
+ deal with an uploaded attachment between the upload and save-to-store processes. It is invoked as per other plugins.
+
+ * =$attrHashRef= - Hash reference of attachment attributes (keys are indicated below)
+ * =$topic= - | Topic name
+ * =$web= - | Web name
+ * =$error= - | Error string of save action, empty if OK
+
+ Keys in $attrHashRef:
+ | *Key* | *Value* |
+ | attachment | Name of the attachment |
+ | tmpFilename | Name of the local file that stores the upload |
+ | comment | Comment to be associated with the upload |
+ | user | Login name of the person submitting the attachment, e.g. 'jsmith' |
+
+ Note: The hash is *read-only*
+
+ ---++ ObjectMethod *writeHeaderHandler* <tt>() -> $headers</tt>
+
+ Called by TWiki::writePageHeader. *DEPRECATED* do not use!
+
+ *DEPRECATED* Use modifyHeaderHandler instead. it is a lot
+ more flexible, and allows you to modify existing headers
+ as well as add new ones. It also works correctly when
+ multiple plugins want to modify headers.
+
+ ---++ ObjectMethod *modifyHeaderHandler* <tt>(\@headers,$query)</tt>
+
+ ---++ ObjectMethod *redirectCgiQueryHandler* <tt>() -> $result</tt>
+
+ Called by TWiki::redirect
+
+ ---++ ObjectMethod *renderFormFieldForEditHandler* <tt>($name,$type,$size,$value,$attributes,$possibleValues) -> $html</tt>
+
+ This handler is called before built-in types are considered. It generates the HTML text rendering this form field, or false, if the rendering should be done by the built-in type handlers.
+ * =$name= - name of form field
+ * =$type= - type of form field
+ * =$size= - size of form field
+ * =$value= - value held in the form field
+ * =$attributes= - attributes of form field
+ * =$possibleValues= - the values defined as options for form field, if any. May be a scalar (one legal value) or an array (several legal values)
+ Return HTML text that renders this field. If false, form rendering continues by considering the built-in types.
+
+ Note that a common application would be to generate formatting of the
+ field involving generation of javascript. Such usually also requires
+ the insertion of some common javascript into the page header. Unfortunately,
+ there is currently no mechanism to pass that script to where the header of
+ the page is visible. Consequentially, the common javascript may have to
+ be emitted as part of the field formatting and might be duplicated many
+ times throughout the page.
+
+ ---++ ObjectMethod *renderWikiWordHandler* <tt>() -> $result</tt>
+
+ Change how a WikiWord is rendered
+
+ Originated from the TWiki:Plugins.SpacedWikiWordPlugin hack
--- /dev/null
+# <a name="Package <code>TWiki::Plurals="></a> Package =TWiki::Plurals
+
+Handle conversion of plural topic names to singular form.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Plurals="> Package TWiki::Plurals</a><ul>
+ <li><a href="#StaticMethod <strong>singularForm</strong> ($we"> StaticMethod singularForm <tt>($web,$pluralForm) -> $singularForm</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>singularForm</strong> ($we"></a> [[StaticMethod]] **singularForm** `($web,$pluralForm) -> $singularForm`
+
+Try to singularise plural topic name.
+
+- `$web` - the web the topic must be in
+- `$pluralForm` - topic name
+
+Returns undef if no singular form exists, otherwise returns the singular form of the topic
+
+[[I18N]] - Only apply plural processing if site language is English, or if a built-in English-language web (Main, TWiki or Plugins). Plurals apply to names ending in 's', where topic doesn't exist with plural name.
+
+SMELL: this is highly langauge specific, and shoud be overridable on a per-installation basis.
-# <a name="%WIKITOOLNAME% Site-Level Prefer"></a><a name=" %WIKITOOLNAME% Site-Level Prefe"></a> %WIKITOOLNAME% Site-Level Preferences
-
-The following are **_site-level_** settings that affect all users in all webs on this [[TWikiSite]]. They can be selectively overwritten on the **_individual web level_** (see [[WebPreferences]] in each web), **_topic level_** (the topic being rendered), and on the **_user level_** (create preferences in your user account topic in the Main web, ex: Main.admin).
-
-- %X% **NOTE:** You can lock individual settings at the site or web levels using User & Group Access Control - see section below.
-
-<div>
+<form action="http://www.dementia.org/twiki/viewauth/Main/WebHome" enctype="multipart/form-data" method="post" name="editpreferences">
+ <p>
+ </p>
+ <h1><a name="%WIKITOOLNAME% Site-Level Prefer"></a><a name=" %WIKITOOLNAME% Site-Level Prefe"></a> %WIKITOOLNAME% Site-Level Preferences </h1>
+ <p> This topic defines <strong><em>site-level</em></strong> settings that apply to all users and webs on this [[Main/TWikiSite]]. </p>
+ <p><strong><em>%X% Note:</em></strong> This topic should be regarded as read-only, so that upgrades can safely overwrite it without risk to your customizations. </p>
+ <p> Preference settings local to your site should be set in [[Main/TWikiPreferences]] (this topic is pointed to by {LocalSitePreferences}, which is set by the admin in the <code>configure</code> interface). Settings in [[Main/TWikiPreferences]] will override settings in this topic, and should be used for defining custom settings and variables. </p>
+ <p>[[Main/TWikiVariables#PreferencesVariables]] on how to set Preferences Variables. </p>
+ <p>
+ </p><input name="prefsaction" type="submit" value="Edit" /> <em>(Click for form-based editing of existing preferences.)</em><div>
+ <ul>
+ <li><a href="#Default Web Preferences"> Default Web Preferences</a></li>
+ <li><a href="#Default User Settings"> Default User Settings</a></li>
+ <li><a href="#TWiki Platform Settings"> TWiki Platform Settings</a><ul>
+ <li><a href="#Search Settings"> Search Settings</a></li>
+ <li><a href="#E-mail Settings"> E-mail Settings</a></li>
+ <li><a href="#HTTP-EQUIV Settings"> HTTP-EQUIV Settings</a></li>
+ </ul>
+ </li>
+ <li><a href="#Skin Settings"> Skin Settings</a><ul>
+ <li><a href="#PatternSkin"> PatternSkin</a></li>
+ <li><a href="#Skin icons"> Skin icons</a></li>
+ <li><a href="#Legacy support"> Legacy support</a></li>
+ </ul>
+ </li>
+ <li><a href="#Plugins Settings"> Plugins Settings</a></li>
+ <li><a href="#Rendering Shortcuts Settings"> Rendering Shortcuts Settings</a></li>
+ <li><a href="#Miscellaneous Settings"> Miscellaneous Settings</a></li>
+ <li><a href="#Creating New Preference Variable"> Creating New Preference Variables</a></li>
+ <li><a href="#Related Topics"> Related Topics</a></li>
+ </ul>
+ </div>
+ <p><a name="DefaultWebPreferences"></a></p>
+ <h2><a name="Default Web Preferences"></a> Default Web Preferences </h2>
+ <p> %X% <strong>NOTE:</strong> These are just defaults; don't change them here. Instead, add them to the WebPreferences topic in each web </p>
+ <p>
+ </p>
<ul>
- <li><a href="#Default Web Preferences"> Default Web Preferences</a></li>
- <li><a href="#Default User Settings"> Default User Settings</a></li>
- <li><a href="#TWiki Platform Settings"> TWiki Platform Settings</a><ul>
- <li><a href="#Search Settings"> Search Settings</a></li>
- <li><a href="#Email and Proxy Server Settings"> Email and Proxy Server Settings</a></li>
- <li><a href="#Email Link Settings"> Email Link Settings</a></li>
- <li><a href="#HTTP-EQUIV Settings"> HTTP-EQUIV Settings</a></li>
+ <li> List of selected topics in a web (used in menus) <ul>
+ <li> Set WEBTOPICLIST = [[Main/WebChanges]] | [[Main/WebIndex]] | [[Main/WebSearch]] | Go <input name="topic" size="16" type="text" /></li>
</ul>
</li>
- <li><a href="#Skin Settings"> Skin Settings</a><ul>
- <li><a href="#PatternSkin"> PatternSkin</a></li>
- <li><a href="#DragonSkin"> DragonSkin</a></li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Web-specific background color: (is overwritten by web preferences) <ul>
+ <li> Set WEBBGCOLOR = #FFD8AA </li>
</ul>
</li>
- <li><a href="#Plugins Settings"> Plugins Settings</a></li>
- <li><a href="#Miscellaneous Settings"> Miscellaneous Settings</a></li>
- <li><a href="#Access Control Settings"> Access Control Settings</a></li>
- <li><a href="#Preferences Control Settings"> Preferences Control Settings</a></li>
- <li><a href="#Creating New Preference Variable"> Creating New Preference Variables</a></li>
- <li><a href="#Related Topics"> Related Topics</a></li>
</ul>
-</div>
-
-## <a name="Default Web Preferences"></a> Default Web Preferences
-
-%X% **NOTE:** They are typically redefined in individual WebPreferences topics
-
-- List of selected topics in a web - the second line of the upper toolbar (usually overwritten in individual [[WebPreferences]]):
- - Set WEBTOPICLIST = [[Changes|Main/WebChanges]] | [[Index|Main/WebIndex]] | [[Search|Main/WebSearch]] | Go <input name="topic" size="16" type="text" />
-
-- Web specific background color: (is overwritten by web preferences)
- - Set WEBBGCOLOR = #FFD8AA
-
-- Copyright notice:
- - Set WEBCOPYRIGHT = Copyright © 1999-2010 by the contributing authors. \\nAll material on this collaboration platform is the property of the contributing authors. <br /> \\nIdeas, requests, problems regarding %WIKITOOLNAME%? [Send feedback](mailto:?subject=%WIKITOOLNAME% Feedback on %WEB%.%TOPIC%)
-
-- Simplified Copyright notice for the [[WebRss]] feed (don't use any special characters, xml tags or [[WikiWords]])
- - Set WEBRSSCOPYRIGHT = Copyright 2010 by contributing authors
-
-- Exclude web from a `web="all"` search: (Set to `on` for hidden webs; is overwritten by web preferences)
- - Set NOSEARCHALL =
-
-- Prevent automatic linking of [[WikiWords]] and acronyms (if set to `on`); link WikiWords (if empty); can be overwritten by web preferences:
- - Set NOAUTOLINK =
- - **_Note:_** Use the `[[...][...]]` syntax to link topics in case you disabled WikiWord linking. The `<noautolink> ... </noautolink>` syntax can be used to prevents links within a block of text.
-
-- Warn if `%INCLUDE{}%` of topic fails: Fail silently (if empty or `off`); output "Warning: Can't INCLUDE Topic, topic not found" (if set to `on`); else, output specific text (use `$topic` for topic). You can override this setting by web preferences and by a `warn="..."` parameter in `%INCLUDE{}%` :
- - Set INCLUDEWARNING = %RED% **_Note:_** %ENDCOLOR% Included topic [[$topic|Main/Topic]] does not exist yet
-
-## <a name="Default User Settings"></a> Default User Settings
-
-%X% **NOTE:** They are typically redefined in topics of individual [[TWikiUsers]]
-
-- Show tool-tip topic info on mouse-over of [[WikiWord]] links. Setting can be on, off, or customized. An empty setting or off setting disables the tool-tips (for better performance). The setting can contain $summary to show the topic summary, $date for the last change date, $rev for the revision, $username for the login name of the last editor, $wikiname for the WikiName, $wikiusername for Main.WikiName, $topic for the topic name, and $web for the web name
- - Set LINKTOOLTIPINFO = off
- - #Set LINKTOOLTIPINFO = $username - $date - $rev: $summary
-
-- Horizontal size of text edit box: (can be overwritten by user preferences)
- - Set EDITBOXWIDTH = 70
-
-- Vertical size of text edit box: (can be overwritten by user preferences)
- - Set EDITBOXHEIGHT = 15
-
-- Style of text edit box. Set to `width: 99%` for full window width (default; this will overwrite the EDITBOXWIDTH setting), or `width: auto` to disable. This setting works for IE and some other recent browsers. (can be overwritten by user preferences)
- - Set EDITBOXSTYLE = width: 99%
-
-- Default state of the **_Release edit lock_** ([[UnlockTopic]]) check box in preview. Checkbox is initially checked if `Set RELEASEEDITLOCKCHECKBOX = checked="checked"`, or unchecked if empty. If checked, make sure to click on <u>Edit</u> to do more changes; do **not** go back in your browser to the edit page, or you risk that someone else will edit the topic at the same time: (can be overwritten by user preferences)
- - Set RELEASEEDITLOCKCHECKBOX =
-
-- Default state of the **_Minor Changes, Don't Notify_** ([[DontNotify]]) check box in preview. Check box is initially checked if `Set DONTNOTIFYCHECKBOX = checked="checked"`, or unchecked if empty: (can be overwritten by user preferences)
- - Set DONTNOTIFYCHECKBOX =
-
-- Default state of the **_link_** check box in the attach file page. Checkbox is initially checked if `Set ATTACHLINKBOX = checked="checked"`, or unchecked if empty (`Set ATTACHLINKBOX =`). If checked, a link is created to the attached file at the end of the topic: (can be overwritten by user preferences)
- - Set ATTACHLINKBOX =
-
-- Format of file link when the **_link_** check box is checked: (can be overwritten by user preferences)
- - %H% **NOTE:** Keyword <code>**$name**</code> gets expanded to filename; <code>**$comment**</code> to comment; <code>**\\t**</code> to tab (3 spaces for bullets).
- - Set ATTACHEDFILELINKFORMAT = \\t\* [$name](http://www.dementia.org/twiki//view/$name): $comment
-
-- Format of images when the **_link_** check box is checked: (can be overwritten by user preferences)
- - %H% **NOTE:** Keyword <code>**$name**</code> gets expanded to filename; <code>**$comment**</code> to comment; <code>**$size**</code> to <code>**width="..." height="..."**</code> attribute of <code>**img**</code> tag; <code>**\\t**</code> to tab (3 spaces for bullets).
-
- * Set ATTACHEDIMAGEFORMAT = \t* $comment: <br />
- <img src="%ATTACHURLPATH%/$name" alt="$comment" $size />
-
-## <a name="TWiki Platform Settings"></a> TWiki Platform Settings
-
-- TWiki site name:
- - Set WIKITOOLNAME = TWiki
-
-- Image, URL and alternate tooltip text of TWiki logo: (can be overwritten by web preferences)
- - Set WIKILOGOIMG = ![twikiRobot46x50.gif](http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikiRobot46x50.gif)
- - Set WIKILOGOURL = <http://TWiki.org/>
- - Set WIKILOGOALT = TWiki home
-
-- List of %WIKITOOLNAME% webs - on the first line of the upper toolbar (to add a new web, see [[ManagingWebs]] and [[SiteMap]]):
- - Set WIKIWEBLIST = [[Main|Main/WebHome]] | [[TWiki|TWiki/WebHome]] | [[Sandbox|Sandbox/WebHome]]
- - %T% **NOTE:** To automatically list all non-hidden webs in alphabetical order, use the `%WEBLIST{}%` variable instead: <br />
-
-- Maximum size of [[FileAttachments]] in KB, 0 for no limit:
- - Set ATTACHFILESIZELIMIT = 10000
-
-- Broadcast message for skins supporting a %BROADCASTMESSAGE% at the top of the page: (IMPORTANT: Set to empty message if not used; #Comment out unused messages)
- - Set BROADCASTMESSAGE =
- - #Set BROADCASTMESSAGE = <table border="0" cellpadding="3" cellspacing="0" width="100%">
- <tr>
- <td bgcolor="yellow"><font color="red"><strong>NOTE:</strong></font><font size="-1"> Edit and Attach will be disabled today between 05:00 PM and 06:00 PM PDT (00:00 to 01:00 GMT) for a scheduled %WIKITOOLNAME% maintenance. </font></td>
- </tr>
-</table>
- - If you use [[PatternSkin]]:
- - #Set BROADCASTMESSAGE = <div><strong>NOTE:</strong> Edit and Attach will be disabled today between 05:00 PM and 06:00 PM PDT (00:00 to 01:00 GMT) for a scheduled %WIKITOOLNAME% maintenance.</div>
-
-### <a name="Search Settings"></a> Search Settings
-
-- Default type for search, one of: keyword (for search engine like syntax), regex (for [[RegularExpression]] search), or literal (for verbatim search)
- - Set SEARCHDEFAULTTTYPE = keyword
-- Default for `%SEARCH{}%` variable, one of: keyword, regex, or literal
- - Set SEARCHVARDEFAULTTYPE = literal
-- Stop words, e.g., common words and characters to exclude from a keyword search:
- - Set SEARCHSTOPWORDS = a, all, am, an, and, any, as, at, b, be, by, c, d, e, for, from, g, h, how, i, i'm, i.e., in, is, isn't, it, it's, its, j, k, l, m, n, o, of, on, or, p, q, r, s, t, that, that's, the, this, to, u, v, w, was, wasn't, what, what's, when, where, who, who's, will, with, x, y, z
-
-### <a name="Email and Proxy Server Settings"></a> Email and Proxy Server Settings
-
-- TWiki webmaster email address:
- - Set WIKIWEBMASTER = <webmaster@your.company>
-
-- TWiki webmaster name (first name and last name, e.g. `Fred Smith`):
- - Set WIKIWEBMASTERNAME = TWiki Administrator
-
-- Mail host for outgoing mail. This is used for [[WebChangesAlert]] if Perl module <code>**Net::SMTP**</code> is installed. If not, or if `SMTPMAILHOST` is empty, the external sendmail program is used instead (defined by <code>**$mailProgram**</code> in <code>**TWiki.cfg**</code>). Examples: <code>**mail.your.company**</code> or <code>**localhost**</code>
- - Set SMTPMAILHOST = mail
-
-- Mail domain sending mail. SMTP requires that you identify the TWiki server sending mail. If not set, <code>**Net::SMTP**</code> will guess it for you. Ex: <code>**twiki.your.company**</code>
- - Set SMTPSENDERHOST =
-
-- Proxy Server. Some environments require outbound HTTP traffic to go through a proxy server. Set the host in PROXYHOST (example: <code>**proxy.your.company**</code>), and the port number in PROXYPORT (example: <code>**8080**</code>). No proxy is used if PROXYHOST or PROXYPORT is empty.
- - Set PROXYHOST =
- - Set PROXYPORT =
-
-### <a name="Email Link Settings"></a> Email Link Settings
-
-- 'Mail this topic' mailto: link - can be included in topics, templates or skins
- - Set MAILTHISTOPIC = [%MAILTHISTOPICTEXT%](mailto:?subject=WebHome&body=%TOPICURL%)
-
-- 'Mail this topic' link text
- - Set MAILTHISTOPICTEXT = Send a link to this page
-
-- URL for current topic
- - Set TOPICURL = <http://www.dementia.org/twiki//view/%WEB%/WebHome>
-
-### <a name="HTTP-EQUIV Settings"></a> HTTP-EQUIV Settings
-
-- %T% **NOTE:** Changing cache behaviour with these settings should not be necessary and may cause cache-related problems (e.g. TWiki:Codev/BackFromPreviewLosesText or TWiki:Codev/RefreshEditPage). These settings do not affect proxy caches.
-
-- <code>**http-equiv**</code> meta tags for <code>**view**</code>, <code>**rdiff**</code>, <code>**attach**</code>, <code>**search\***</code> scripts:
-
- * #Set HTTP_EQUIV_ON_VIEW =
- * Set HTTP_EQUIV_ON_VIEW = <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%WEB%/WebRss?skin=rss&contenttype=text/xml" />
+ <p>
+ </p>
+ <ul>
+ <li><a href="http://en.wikipedia.org/wiki/Favicon" target="_top">favicon</a>: Attach a <code>favicon.ico</code> to a web's [[Main/WebPreferences]] or add a <code>FAVICON</code> setting to [[Main/WebPreferences]]<ul>
+ <li> Set FAVICON = <a href="http://www.dementia.org/twiki//view/Main/WebPreferences/favicon.ico" target="_top">http://www.dementia.org/twiki//view/Main/WebPreferences/favicon.ico</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Image, URL and alternate tooltip text of web's logo. <ul>
+ <li> Set WEBLOGOIMG = %WIKILOGOIMG% </li>
+ <li> Set WEBLOGOURL = %WIKILOGOURL% </li>
+ <li> Set WEBLOGOALT = %WIKILOGOALT% </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> List this web in the [[TWiki/SiteMap]]: <ul>
+ <li> If yes, set SITEMAPLIST to <code>on</code>, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. %WEB%.Topic links. </li>
+ <li> Set SITEMAPLIST = on </li>
+ <li> Set SITEMAPWHAT = Describe what this web does. </li>
+ <li> Set SITEMAPUSETO = ...to do something. </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Copyright notice: <ul>
+ <li> Set WEBCOPYRIGHT = <span> <a href="http://twiki.org/"><img alt="This site is powered by the TWiki collaboration platform" border="0" height="15" src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/T-logo-80x15.gif" title="This site is powered by the TWiki collaboration platform" width="80" /></a></span>Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors. <br /> Ideas, requests, problems regarding %WIKITOOLNAME%? <a href="mailto:?subject=%WIKITOOLNAME% Feedback on Main.WebHome">Send feedback</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Simplified Copyright notice for the [[Main/WebRss]] feed (don't use any special characters, html tags, entities, wiki markup or [[Main/WikiWords]]) <ul>
+ <li> Set WEBRSSCOPYRIGHT = Copyright 2010 by contributing authors </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Exclude web from a <code>web="all"</code> search: (Set to <code>on</code> for hidden webs; is overwritten by web preferences) <ul>
+ <li> Set NOSEARCHALL = </li>
+ </ul>
+ </li>
+ <li> Prevent automatic linking of [[TWiki/WikiWords]] and acronyms (if set to <code>on</code>); link WikiWords (if empty); can be overwritten by web preferences: <ul>
+ <li> Set NOAUTOLINK = </li>
+ <li><strong><em>Note:</em></strong> Use the <code>[[...][...]]</code> syntax to link topics in case you disabled WikiWord linking. The <code><noautolink> ... </noautolink></code> syntax can be used to prevents links within a block of text. </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Warn if <code>%INCLUDE{}%</code> of topic fails: Fail silently if empty or <code>off</code>. Output warning message (defined in templates/oopsalerts.tmpl) if set to <code>on</code>. Otherwise output specific text (use <code>$topic</code> for topic). You can override this in web preferences, or by using a <code>warn="..."</code> parameter with <code>%INCLUDE{}%</code> : <ul>
+ <li> Set INCLUDEWARNING = on </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <p>
+ </p>
+ <h2><a name="Default User Settings"></a> Default User Settings </h2>
+ <p> %X% <strong>NOTE:</strong> They are typically redefined in topics of individual [[Main/TWikiUsers]]</p>
+ <p>
+ </p>
+ <ul>
+ <li> Show tool-tip topic info on mouse-over of [[Main/WikiWord]] links. Setting can be on, off, or customized. An empty setting or off setting disables the tool-tips (for better performance). The setting can contain $summary to show the topic summary, $date for the last change date, $rev for the revision, $username for the login name of the last editor, $wikiname for the WikiName, $wikiusername for Main.WikiName, $topic for the topic name, and $web for the web name <ul>
+ <li> Set LINKTOOLTIPINFO = off </li>
+ <li> #Set LINKTOOLTIPINFO = $username - $date - $rev: $summary </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Some skins have two editors available; the default editor, and a second editor which is usually a WYSIWYG editor (the second editor is used by hitting the WYSIWYG link in <code>pattern</code> or <code>classic</code> skins). If COMPOSER is not set, the second editor will work the same as the <em>default</em> editor. If the WysiwygPlugin is installed and it is set to 'kupu' (the default), then the <strong>Kupu</strong> WYSIWYG editor will be enabled. You can change the setting to use any editor that is enabled by setting the <code>cover</code> parameter on the edit URL. <ul>
+ <li> Set COMPOSER = kupu </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Horizontal size of text edit box: (can be overwritten by user preferences) <ul>
+ <li> Set EDITBOXWIDTH = 70 </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Vertical size of text edit box: (can be overwritten by user preferences) <ul>
+ <li> Set EDITBOXHEIGHT = 22 </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Style of text edit box. Set to <code>width: 99%</code> for full window width (default; this will overwrite the EDITBOXWIDTH setting), or <code>width: auto</code> to disable. This setting works for IE and some other recent browsers. (can be overwritten by user preferences) <ul>
+ <li> Set EDITBOXSTYLE = width: 99% </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Default state of the <strong><em>Force New Revision</em></strong> ([[Main/ForceNewRevision]]) check box in preview. Check box is initially checked if <code>Set FORCENEWREVISIONCHECKBOX = checked="checked"</code>, or unchecked if empty: (can be overwritten by user preferences) <ul>
+ <li> Set FORCENEWREVISIONCHECKBOX = </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Default state of the <strong><em>Minor Changes, Don't Notify</em></strong> ([[Main/DontNotify]]) check box in preview. Check box is initially checked if <code>Set DONTNOTIFYCHECKBOX = checked="checked"</code>, or unchecked if empty: (can be overwritten by user preferences) <ul>
+ <li> Set DONTNOTIFYCHECKBOX = </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Default state of the <strong><em>link</em></strong> check box in the attach file page. Checkbox is initially checked if <code>Set ATTACHLINKBOX = checked="checked"</code>, or unchecked if empty (<code>Set ATTACHLINKBOX =</code>). If checked, a link is created to the attached file at the end of the topic: (can be overwritten by user preferences) <ul>
+ <li> Set ATTACHLINKBOX = </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Format of file link when the <strong><em>link</em></strong> check box is checked: (can be overwritten by user preferences) <ul>
+ <li> %H% <strong>NOTE:</strong> Keyword <code><b>$name</b></code> gets expanded to filename; <code><b>$comment</b></code> to comment; <code><b>\t</b></code> to tab (3 spaces for bullets). </li>
+ <li> Set ATTACHEDFILELINKFORMAT = \n * <a href="http://www.dementia.org/twiki//view/$name" target="_top">$name</a>: $comment </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Format of images when the <strong><em>link</em></strong> check box is checked: (can be overwritten by user preferences) <ul>
+ <li> %H% <strong>NOTE:</strong> Keyword <code><b>$name</b></code> gets expanded to filename; <code><b>$comment</b></code> to comment; <code><b>$size</b></code> to <code><b>width="..." height="..."</b></code> attribute of <code><b>img</b></code> tag; <code><b>\t</b></code> to tab and <code><b>\n</b></code> to linefeed (3 spaces for bullets). </li>
+ <li> Set ATTACHEDIMAGEFORMAT = \n * $comment: <br />\n <img $size="$size" alt="$name" src="http://www.dementia.org/twiki//view/$name" /></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <h2><a name="TWiki Platform Settings"></a> TWiki Platform Settings </h2>
+ <p>
+ </p>
+ <ul>
+ <li> TWiki site name: <ul>
+ <li> Set WIKITOOLNAME = TWiki </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Image, URL and alternate tooltip text of the logo <strong>for this installation</strong>: you should change these settings for your site, or they can be overwridden in WebPreferences for individual webs by defining these variables there. <ul>
+ <li> Set WIKILOGOIMG = <img alt="T-logo-140x40-t.gif" src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/T-logo-140x40-t.gif" /></li>
+ <li> Set WIKILOGOURL = <a href="http://TWiki.org/" target="_top">http://TWiki.org/</a></li>
+ <li> Set WIKILOGOALT = Powered by %WIKITOOLNAME% </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Home page of this site <ul>
+ <li> Set WIKIHOMEURL = <a href="http://www.dementia.org/twiki/view" target="_top">http://www.dementia.org/twiki/view</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> List of %WIKITOOLNAME% webs - on the first line of the upper toolbar (to add a new web, see [[Main/ManagingWebs]] and [[TWiki/SiteMap]]): <ul>
+ <li> Set WIKIWEBLIST = [[Main/WebHome]] | [[TWiki/WebHome]] | [[Sandbox/WebHome]]</li>
+ <li> %T% <strong>NOTE:</strong> To automatically list all non-hidden webs in alphabetical order, use the <code>%WEBLIST{}%</code> variable instead: <br />
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <p>
+ </p>
+ <ul>
+ <li> Maximum size of [[TWiki/FileAttachments]] in KB, 0 for no limit: <ul>
+ <li> Set ATTACHFILESIZELIMIT = 10000 </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Broadcast message for skins supporting a %BROADCASTMESSAGE% at the top of the page: (IMPORTANT: Set to empty message if not used; #Comment out unused messages) <ul>
+ <li> Set BROADCASTMESSAGE = </li>
+ <li> #Set BROADCASTMESSAGE = <table border="0" cellpadding="3" cellspacing="0" width="100%">
+ <tr>
+ <td bgcolor="yellow"><font color="red"><strong>NOTE:</strong></font><font size="-1"> Edit and Attach will be disabled today between 05:00 PM and 06:00 PM PDT (00:00 to 01:00 GMT) for a scheduled %WIKITOOLNAME% maintenance. </font></td>
+ </tr>
+ </table>
+ </li>
+ <li> If you use [[Main/PatternSkin]]: </li>
+ <li> #Set BROADCASTMESSAGE = <div><strong>NOTE:</strong> Edit and Attach will be disabled today between 05:00 PM and 06:00 PM PDT (00:00 to 01:00 GMT) for a scheduled %WIKITOOLNAME% maintenance.</div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> Users or groups allowed to [[TWiki/ManagingWebs]]: (ex: [[Main/TWikiAdminGroup]]) </li>
+ <li><strong>This has been disabled for the TWiki-4.0.0 release due to a potential security hole - you must be in the [[Main/TWikiAdminGroup]] to create a web</strong><ul>
+ <li> Set ALLOWWEBMANAGE = [[Main/TWikiAdminGroup]]</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <h3><a name="Search Settings"></a> Search Settings </h3>
+ <p>
+ </p>
+ <ul>
+ <li> Default type for search, one of: keyword (for search engine like syntax), regex (for [[Main/RegularExpression]] search), or literal (for verbatim search) <ul>
+ <li> Set SEARCHDEFAULTTTYPE = keyword </li>
+ </ul>
+ </li>
+ <li> Default for <code>%SEARCH{}%</code> variable, one of: keyword, regex, or literal <ul>
+ <li> Set SEARCHVARDEFAULTTYPE = literal </li>
+ </ul>
+ </li>
+ <li> Stop words, e.g., common words and characters to exclude from a keyword search: <ul>
+ <li> Set SEARCHSTOPWORDS = a, all, am, an, and, any, as, at, b, be, by, c, d, e, for, from, g, h, how, i, i'm, i.e., in, is, isn't, it, it's, its, j, k, l, m, n, o, of, on, or, p, q, r, s, t, that, that's, the, this, to, u, v, w, was, wasn't, what, what's, when, where, who, who's, will, with, x, y, z </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <h3><a name="E-mail Settings"></a> E-mail Settings </h3>
+ <p>
+ </p>
+ <ul>
+ <li> TWiki administrator e-mail address: <ul>
+ <li> Set WIKIWEBMASTER = <a href="mailto:webmaster@example.com">webmaster@example.com</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> TWiki administrator name (first name and last name, e.g. <code>Fred Smith</code>): <ul>
+ <li> Set WIKIWEBMASTERNAME = TWiki Administrator </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> 'Mail this topic' mailto: link - can be included in topics, templates or skins <ul>
+ <li> Set MAILTHISTOPIC = <a href="mailto:?subject=WebHome&body=%TOPICURL%">%MAILTHISTOPICTEXT%</a></li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> 'Mail this topic' link text <ul>
+ <li> Set MAILTHISTOPICTEXT = Send a link to this page </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li> URL for current topic <ul>
+ <li> Set TOPICURL = [[%WEB%/WebHome]]</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ </p>
+ <p>
+ </p>
+ <h3><a name="HTTP-EQUIV Settings"></a> HTTP-EQUIV Settings </h3>
+ <p>
+ </p>
+ <ul>
+ <li> %T% <strong>NOTE:</strong> Changing cache behaviour with these settings should not be necessary and may cause cache-related problems (e.g. TWiki:Codev.BackFromPreviewLosesText or TWiki:Codev.RefreshEditPage). These settings do not affect proxy caches. </li>
+ <li><strong>NOTE:</strong> The current values of these preferences are not displayed in view mode (values are <code><link></code>-tags). </li>
+ </ul>
+ <p>
+ </p>
+ <ul>
+ <li><code><b>http-equiv</b></code> meta tags for <code><b>view</b></code>, <code><b>rdiff</b></code>, <code><b>attach</b></code>, <code><b>search*</b></code> scripts: <ul>
+ <li> #Set HTTP_EQUIV_ON_VIEW = </li>
+ <li> Set HTTP_EQUIV_ON_VIEW = </li>
+ </ul>
+ </li>
+ </ul>
+</form>
- <code>**http-equiv**</code> meta tags for <code>**edit**</code> script:
-
- * Set HTTP_EQUIV_ON_EDIT =
+ - Set HTTP\_EQUIV\_ON\_EDIT =
- <code>**http-equiv**</code> meta tags for <code>**preview**</code> script:
-
- * Set HTTP_EQUIV_ON_PREVIEW =
+ - Set HTTP\_EQUIV\_ON\_PREVIEW =
## <a name="Skin Settings"></a> Skin Settings
### <a name="PatternSkin"></a> [[PatternSkin]]
-- Using attachments for styles
+- Default TWiki styles
- Set TWIKILAYOUTURL = <http://www.dementia.org/twiki//view/TWiki/PatternSkin/layout.css>
- Set TWIKISTYLEURL = <http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css>
+ - Set TWIKICOLORSURL = <http://www.dementia.org/twiki//view/TWiki/PatternSkin/colors.css>
+
+- Custom overriding styles (enabled pr. default but empty, to prevent browsers from fetching %USERLAYOUTURL%-style URLs)
+ - Set USERLAYOUTURL =
+ - Set USERSTYLEURL =
+ - Set USERCOLORSURL =
+
+- **PatternSkin header settings**
+ - Set WEBHEADERART = ![TWiki\_header.gif](http://www.dementia.org/twiki//view/TWiki/PatternSkin/TWiki_header.gif)
+ - Set WEBHEADERBGCOLOR = #ffffff
-### <a name="DragonSkin"></a> [[DragonSkin]]
+### <a name="Skin icons"></a> Skin icons
-- Theme: (gray, monochrome, tabstyle)
- - Set DS\_THEME = gray
-- Quicklinks headings:
- - Set DS\_QUICKLINKSHEADING =
-- Quicklinks submenu:
- - Set DS\_QUICKLINKS =
+- Topic containing the icon graphics library. Icons can easily be rendered with `%ICON{name}%`.
+ - Set ICONTOPIC = [[TWikiDocGraphics]]
+
+### <a name="Legacy support"></a> Legacy support
+
+- Support for legacy "EDITTOPIC", used to be hard-coded, now replaced by TMPL:P conditional instantiation
+ - Set EDITURL = <http://www.dementia.org/twiki/edit/%WEB%/%TOPIC%?t=1277827044>
+ - Set EDITTOPIC = [Edit](%EDITURL% Edit Topic - deprecated usage - please see release notes)
## <a name="Plugins Settings"></a> Plugins Settings
-- [[TWikiPlugins]] configuration: All plugin modules that exist in the `lib/TWiki/Plugins` directory are activated automatically unless disabled by DISABLEDPLUGINS. You can optionally list the installed plugins in INSTALLEDPLUGINS. This is useful to define the sequence of plugin execution, or to specify other webs then the TWiki web for the plugin topics. Specify plugins as a comma separated list of topics.
- - Set INSTALLEDPLUGINS = [[DefaultPlugin]], [[SpreadSheetPlugin]]
- - Set DISABLEDPLUGINS = [[EmptyPlugin]]
- - Currently activated plugins: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]]
- - %T% **NOTE:** You can enable/disable all plugins with the <code>**$disableAllPlugins**</code> flag in the <code>**lib/TWiki.cfg**</code> file.
+- You can enable/disable Plugins using the [configure](http://www.dementia.org/twiki/configure) interface.
+- Currently activated Plugins: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]]
+- %T% **NOTE:** You can enable/disable Plugins by passing a comma-separated list of Plugin names in the `debugenableplugins` url parameter; for example, [[http://www.dementia.org/twiki/view/%WEB%/%TOPIC%?debugenableplugins=SmiliesPlugin|%WEB%/%TOPIC%?debugenableplugins=SmiliesPlugin]] will display this topic with all Plugins disabled except the [[SmiliesPlugin]].
+- Detailed diagnostics can be found in [[InstalledPlugins]]
+- Legacy settings:
+ - Set DISABLEDPLUGINS = The DISABLEDPLUGINS variable is no longer supported
+ - Set INSTALLEDPLUGINS = The INSTALLEDPLUGINS variable is no longer supported. You can set the Plugins execution order using the [configure](http://www.dementia.org/twiki/configure) interface.
-## <a name="Miscellaneous Settings"></a> Miscellaneous Settings
+## <a name="Rendering Shortcuts Settings"></a> Rendering Shortcuts Settings
- Line break:
- Set BR = <br />
<a name="DocGraphics"></a>
-- Graphics used in TWiki documentation - view all images in [[TWikiDocGraphics]]. _(There are various ways to set up common icons as text variables. This is simply one quick approach.)_:
- - Set H = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/help.gif" width="16" height="16" alt="HELP" />
- - Set I = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/tip.gif" width="16" height="16" alt="IDEA!" />
- - Set M = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/arrowright.gif" width="16" height="16" alt="MOVED TO..." />
- - Set N = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/new.gif" width="28" height="8" alt="NEW" />
- - Set P = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/pencil.gif" width="16" height="16" alt="REFACTOR" />
- - Set Q = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/help.gif" width="16" height="16" alt="QUESTION?" />
- - Set S = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/starred.gif" width="16" height="16" alt="PICK" />
- - Set T = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/tip.gif" width="16" height="16" alt="TIP" />
- - Set U = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/updated.gif" width="56" height="8" alt="UPDATED" />
- - Set X = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/warning.gif" width="16" height="16" alt="ALERT!" />
- - Set Y = <img src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/choice-yes.gif" width="16" height="16" alt="DONE" />
+- Graphics used in TWiki documentation - view all images in %ICONTOPIC%. _(There are various ways to set up common icons as text variables. This is simply one quick approach.)_:
+ - Set H = <img src="http://www.dementia.org/twiki//view/Main/WebHome/help.gif" width="16" height="16" alt="HELP" title="HELP" />
+ - Set I = <img src="http://www.dementia.org/twiki//view/Main/WebHome/tip.gif" width="16" height="16" alt="IDEA!" title="IDEA!" />
+ - Set M = <img src="http://www.dementia.org/twiki//view/Main/WebHome/arrowright.gif" width="16" height="16" alt="MOVED TO..." title="MOVED TO..." />
+ - Set N = <img src="http://www.dementia.org/twiki//view/Main/WebHome/new.gif" width="30" height="16" alt="NEW" title="NEW" />
+ - Set P = <img src="http://www.dementia.org/twiki//view/Main/WebHome/pencil.gif" width="16" height="16" alt="REFACTOR" title="REFACTOR" />
+ - Set Q = <img src="http://www.dementia.org/twiki//view/Main/WebHome/help.gif" width="16" height="16" alt="QUESTION?" title="QUESTION?" />
+ - Set S = <img src="http://www.dementia.org/twiki//view/Main/WebHome/starred.gif" width="16" height="16" alt="PICK" title="PICK" />
+ - Set T = <img src="http://www.dementia.org/twiki//view/Main/WebHome/tip.gif" width="16" height="16" alt="TIP" title="TIP" />
+ - Set U = <img src="http://www.dementia.org/twiki//view/Main/WebHome/updated.gif" width="55" height="16" alt="UPDATED" title="UPDATED" />
+ - Set X = <img src="http://www.dementia.org/twiki//view/Main/WebHome/warning.gif" width="16" height="16" alt="ALERT!" title="ALERT!" />
+ - Set Y = <img src="http://www.dementia.org/twiki//view/Main/WebHome/choice-yes.gif" width="16" height="16" alt="DONE" title="DONE" />
+
+## <a name="Miscellaneous Settings"></a> Miscellaneous Settings
- Background color of non existing topic: ( default `cornsilk` or `#FFFFCE` )
- Set NEWTOPICBGCOLOR = #FFFFCE
- [[PreviewBackground]] image:
- Set PREVIEWBGIMAGE = ![preview2bg.gif](http://www.dementia.org/twiki//view/TWiki/PreviewBackground/preview2bg.gif)
-## <a name="Access Control Settings"></a> Access Control Settings
-
-- Users or groups allowed to change or rename this %TOPIC% topic: (ex: [[TWikiAdminGroup]])
- - Set ALLOWTOPICCHANGE =
- - Set ALLOWTOPICRENAME = [[TWikiAdminGroup]]
-
-- Users or groups allowed to [[create new webs|TWiki/ManagingWebs]]: (ex: [[TWikiAdminGroup]])
- - Set ALLOWWEBMANAGE = [[TWikiAdminGroup]]
-
-## <a name="Preferences Control Settings"></a> Preferences Control Settings
-
-- Allow topic level preferences, on or off: If set to `on`, topic preferences will be read, and will override any web- or site-level preferences not set as `FINALPREFERENCES`. By default, user preferences will override topic preferences.
- - Set READTOPICPREFS = on
-
-- Topic level overrides user level preferences, on or off: If set to `on`, topic preferences will override user preferences. The user can in turn override this behavior by setting further `FINALPREFERENCES` in his or her user topic.
- - Set TOPICOVERRIDESUSER = off
-
-- Site-level preferences that are **not** allowed to be overridden by [[WebPreferences]] and user preferences:
- - Set FINALPREFERENCES = ATTACHFILESIZELIMIT, PREVIEWBGIMAGE, WIKITOOLNAME, WIKIWEBMASTER, SMTPMAILHOST, SMTPSENDERHOST, ALLOWWEBMANAGE, READTOPICPREFS, TOPICOVERRIDESUSER
-
## <a name="Creating New Preference Variable"></a> Creating New Preference Variables
You can introduce new VARIABLES and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
- Preferences are used as [[TWikiVariables]] by enclosing the name in percent signs: <code>**%**</code>. Example:
- When you write variable <code>**%WEBBGCOLOR%**</code>, it gets expanded to `%WEBBGCOLOR%` .
-- %X% The sequential order of the preference settings is significant. Define preferences that use other preferences FIRST. For example, set <code>**WEBCOPYRIGHT**</code> before <code>**WIKIWEBMASTER**</code> since the copyright notice uses the webmaster email address.
+- %X% The sequential order of the preference settings is significant. Define preferences that use other preferences FIRST. For example, set <code>**WEBCOPYRIGHT**</code> before <code>**WIKIWEBMASTER**</code> since the copyright notice uses the TWiki administrator e-mail address.
+- %X% In order to protect your custom variables from being overwritten when upgrading the [[TWiki.%TOPIC%|TWiki/TOPIC]] topic, it is recommended that custom variables are defined in [[Main.%TOPIC%|Main/TOPIC]].
## <a name="Related Topics"></a> Related Topics
-- [[WebPreferences]] has preferences of the %WIKITOOLNAME%.%WEB% web.
+- [[WebPreferences]] has preferences of the %WEB% web.
- [[TWikiUsers]] has a list of user topics. User topics can have optional user preferences.
- [[TWikiVariables]] has a list of common `%VARIABLES%`.
- [[TWikiAccessControl]] explains how to restrict access by users or groups.
+- TWiki:Plugins.PreferencesPlugin makes editing preferences a snap.
-**_Note_**: Can't edit? [View raw topic](http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?raw=on)
+**_Note_**: Can't edit? [[View raw topic|%WEB%/%TOPIC%?raw=on]]
--- /dev/null
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Name </strong></th>
+ <th bgcolor="#99CCCC"><strong> Type </strong></th>
+ <th bgcolor="#99CCCC"><strong> Size </strong></th>
+ <th bgcolor="#99CCCC"><strong> Value </strong></th>
+ <th bgcolor="#99CCCC"><strong> Tooltip message </strong></th>
+ <th bgcolor="#99CCCC"><strong> Attributes </strong></th>
+ </tr>
+ <tr>
+ <td> WEBBGCOLOR </td>
+ <td> text </td>
+ <td> 20 </td>
+ <td> #FFD8AA </td>
+ <td> HTML Color </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> FAVICON </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://www.dementia.org/twiki//view/%WEB%/WebPreferences/favicon.ico" target="_top">http://www.dementia.org/twiki//view/%WEB%/WebPreferences/favicon.ico</a></td>
+ <td> URL of an icon image </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> NEWTOPICBGCOLOR </td>
+ <td> text </td>
+ <td> 20 </td>
+ <td> #FFFFCE </td>
+ <td> HTML Color </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> NEWTOPICFONTCOLOR </td>
+ <td> text </td>
+ <td> 20 </td>
+ <td> #0000FF </td>
+ <td> HTML Color </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBCOPYRIGHT </td>
+ <td> textarea </td>
+ <td> </td>
+ <td> Copyright © 1999-2010 by the contributing authors. \nAll material on this collaboration platform is the property of the contributing authors. <br /> \nIdeas, requests, problems regarding %WIKITOOLNAME%? <a href="mailto:?subject=%WIKITOOLNAME% Feedback on %WEB%.%TOPIC%">Send feedback</a></td>
+ <td> Long form copyright </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBRSSCOPYRIGHT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> Copyright 2010 by contributing authors </td>
+ <td> Short form copyright </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> NOSEARCHALL </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> off,on </td>
+ <td> Exclude web from a <code>web="all"</code> search </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> NOAUTOLINK </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> off,on </td>
+ <td> Boolean </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> INCLUDEWARNING </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> on, off </td>
+ <td> Boolean </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> LINKTOOLTIPINFO </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> Format of tooltip info </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> EDITBOXWIDTH </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> 70 </td>
+ <td> Horizontal size of text edit box. </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> EDITBOXHEIGHT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> 15 </td>
+ <td> Vertical size of text edit box. </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> EDITBOXSTYLE </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> width: 99% </td>
+ <td> CSS style </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> PREVIEWBGIMAGE </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><img alt="preview2bg.gif" src="http://www.dementia.org/twiki//view/TWiki/PreviewBackground/preview2bg.gif" /></td>
+ <td> Image URL </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> FORCENEWREVISIONCHECKBOX </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> , checked="checked" </td>
+ <td> Select checked to enable </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> DONTNOTIFYCHECKBOX </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> ,checked="checked" </td>
+ <td> Select checked to enable </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> ATTACHLINKBOX </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> ,checked="checked" </td>
+ <td> Select checked to enable </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> ATTACHEDFILELINKFORMAT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> \t* <a href="http://www.dementia.org/twiki//view/$name" target="_top">$name</a>: $comment </td>
+ <td> Text </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> ATTACHEDIMAGEFORMAT </td>
+ <td> textarea </td>
+ <td> </td>
+ <td> \t* $comment: <br /><img $size="$size" alt="$comment" src="http://www.dementia.org/twiki//view/$name" /></td>
+ <td> Text </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKITOOLNAME </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> TWiki </td>
+ <td> Site name </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBLOGONAME </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> T-logo-158x45.gif </td>
+ <td> Filename of a logo image </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBLOGOIMG </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://www.dementia.org/twiki//view/Main/WebPreferences/%WEBLOGONAME%" target="_top">http://www.dementia.org/twiki//view/Main/WebPreferences/%WEBLOGONAME%</a></td>
+ <td> URL of a logo image </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBLOGOURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://www.dementia.org/twiki//view/Main/WebHome" target="_top">http://www.dementia.org/twiki//view/Main/WebHome</a></td>
+ <td> URL under the logo </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBLOGOALT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> Home </td>
+ <td> Logo tooltip text of the logo </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKILOGOIMG </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><img alt="horzTWiki.gif" src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/horzTWiki.gif" /></td>
+ <td> URL of a logo image </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKILOGOURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://TWiki.org/" target="_top">http://TWiki.org/</a></td>
+ <td> URL under the logo </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKILOGOALT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> Powered by TWiki </td>
+ <td> Logo tooltip text of the logo </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKIWEBLIST </td>
+ <td> textarea </td>
+ <td> </td>
+ <td>[[Main/WebHome]]</td>
+ <td align="center">[[TWiki/WebHome]]</td>
+ <td align="right">[[Sandbox/WebHome]]</td>
+ <td> </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> ATTACHFILESIZELIMIT </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> 3000 </td>
+ <td> Maximum size of attachments in KB, 0 for no limit </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> BROADCASTMESSAGE </td>
+ <td> textarea </td>
+ <td> </td>
+ <td> </td>
+ <td> Broadcast message on every page, for skins that support it. </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> SEARCHDEFAULTTTYPE </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> keyword,literal,regex </td>
+ <td> Default type for search </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> SEARCHVARDEFAULTTYPE </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> keyword,literal,regex </td>
+ <td> Default for <code>%SEARCH{}%</code> variable </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> SEARCHSTOPWORDS </td>
+ <td> textarea </td>
+ <td> </td>
+ <td> a, all, am, an, and, any, as, at, b, be, by, c, d, e, for, from, g, h, how, i, i'm, i.e., in, is, isn't, it, it's, its, j, k, l, m, n, o, of, on, or, p, q, r, s, t, that, that's, the, this, to, u, v, w, was, wasn't, what, what's, when, where, who, who's, will, with, x, y, z </td>
+ <td> Stop words, e.g., common words and characters to exclude from a keyword search </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKIWEBMASTER </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="mailto:webmaster@example.com">webmaster@example.com</a></td>
+ <td> TWiki administrator e-mail address </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WIKIWEBMASTERNAME </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> TWiki Administrator </td>
+ <td> TWiki administrator name (first name and last name, e.g. <code>Fred Smith</code>) </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> HTTP_EQUIV_ON_VIEW </td>
+ <td> textarea </td>
+ <td> 30x1 </td>
+ <td>
+ </td>
+ </tr>
+</table>
+<table>
+ <tr>
+ <td> http-equiv== meta tags for <code><b>view</b></code>, <code><b>rdiff</b></code>, <code><b>attach</b></code>, <code><b>search*</b></code> scripts </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> HTTP_EQUIV_ON_EDIT </td>
+ <td> textarea </td>
+ <td> 30x1 </td>
+ <td> = </td>
+ <td> http-equiv== meta tags for <code><b>edit</b></code> script </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> HTTP_EQUIV_ON_PREVIEW </td>
+ <td> textarea </td>
+ <td> 30x1 </td>
+ <td> = </td>
+ <td> http-equiv== meta tags for <code><b>preview</b></code> script </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> SKIN </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> pattern </td>
+ <td> Skin overriding the default TWiki templates. </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> WEBTOPICLIST </td>
+ <td> textarea </td>
+ <td> 40x3 </td>
+ <td>[[Main/WebChanges]]</td>
+ <td align="center">[[Main/WebIndex]]</td>
+ <td align="center">[[Main/WebSearch]]</td>
+ <td align="right"> Go <input name="topic" size="16" type="text" /></td>
+ <td> Usually a list of topics </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> TWIKILAYOUTURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://www.dementia.org/twiki//view/TWiki/PatternSkin/layout.css" target="_top">http://www.dementia.org/twiki//view/TWiki/PatternSkin/layout.css</a></td>
+ <td> URL of a CSS </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> TWIKISTYLEURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td><a href="http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css" target="_top">http://www.dementia.org/twiki//view/TWiki/PatternSkin/style.css</a></td>
+ <td> URL of a CSS </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> USERLAYOUTURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> URL of a CSS </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> USERSTYLEURL </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> URL of a CSS </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> DS_THEME </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> gray </td>
+ <td> Theme: (gray, monochrome, tabstyle </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> DS_QUICKLINKSHEADING </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> Quicklinks headings </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> DS_QUICKLINKS </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> Quicklinks submenu </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> DISABLEDPLUGINS </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td>[[Main/EmptyPlugin]], [[Main/DefaultPlugin]], [[Main/TestFixturePlugin]]</td>
+ <td> Comma-separated list </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> INSTALLEDPLUGINS </td>
+ <td> text </td>
+ <td> 30 </td>
+ <td> </td>
+ <td> Plugin execution order, comma-separated list </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> READTOPICPREFS </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> on,off </td>
+ <td> Boolean </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> TOPICOVERRIDESUSER </td>
+ <td> select </td>
+ <td> 1 </td>
+ <td> on, off </td>
+ <td> Boolean </td>
+ <td> S </td>
+ </tr>
+ <tr>
+ <td> FINALPREFERENCES </td>
+ <td> textarea </td>
+ <td> 60x5 </td>
+ <td> ATTACHFILESIZELIMIT, PREVIEWBGIMAGE, WIKITOOLNAME, WIKIWEBMASTER, SMTPMAILHOST, SMTPSENDERHOST, ALLOWWEBMANAGE, READTOPICPREFS, TOPICOVERRIDESUSER </td>
+ <td> Multiple select </td>
+ <td> S </td>
+ </tr>
+</table>
--- /dev/null
+# <a name="Package <code>TWiki::Prefs="></a> Package =TWiki::Prefs
+
+The Prefs class is a singleton that implements management of preferences. It uses a stack of TWiki::Prefs::PrefsCache objects to store the preferences for global, web, user and topic contexts, and provides the means to look up preferences in these.
+
+Preferences from different places stack on top of each other, so there are global preferences, then site, then web (and subweb and subsubweb), then topic, included topic and so on. Each level of the stack is tagged with a type identifier.
+
+The module also maintains a separate of the preferences found in every topic and web it reads. This supports the lookup of preferences for webs and topics that are not on the stack, and must not be chained in (you can't allow a user to override protections from their home topic!)
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Prefs="> Package TWiki::Prefs</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session[,$ca"> ClassMethod new <tt>($session[,$cache])</tt></a></li>
+ <li><a href="#ObjectMethod *push_GlobalPrefere"> ObjectMethod pushGlobalPreferences <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>pushPreferences</strong> ("> ObjectMethod pushPreferences <tt>($web,$topic,$type)</tt></a></li>
+ <li><a href="#ObjectMethod *push_WebPreference"> ObjectMethod pushWebPreferences <tt>($web)</tt></a></li>
+ <li><a href="#ObjectMethod *push_PreferencesVa"> ObjectMethod pushPreferencesValues <tt>($type,\%values)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>mark</strong> ()"> ObjectMethod mark <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>resetTo</strong> ($mark)"> ObjectMethod resetTo <tt>($mark)</tt></a></li>
+ <li><a href="#ObjectMethod *get_PreferencesVal"> ObjectMethod getPreferencesValue <tt>($key) -> $value</tt></a></li>
+ <li><a href="#ObjectMethod <strong>isFinalised</strong> ($key"> ObjectMethod isFinalised <tt>($key)</tt></a></li>
+ <li><a href="#ObjectMethod *get_TopicPreferenc"> ObjectMethod getTopicPreferencesValue <tt>($key,$web,$topic) -> $value</tt></a></li>
+ <li><a href="#get_TextPreferencesValue( $key,"> getTextPreferencesValue( $key, $text, $web, $topic ) -> $value</a></li>
+ <li><a href="#ObjectMethod *get_WebPreferences"> ObjectMethod getWebPreferencesValue <tt>($key,$web) -> $value</tt></a></li>
+ <li><a href="#ObjectMethod stringify() -> $tex">ObjectMethod stringify() -> $text</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session[,$ca"></a> [[ClassMethod]] **new** `($session[,$cache])`
+
+Creates a new Prefs object. If $cache is defined, it will be pushed onto the stack.
+
+## <a name="ObjectMethod <strong>push_GlobalPrefere"></a> [[ObjectMethod]] \*pushGlobalPreferences `()`
+
+Add global preferences to this preferences stack.
+
+## <a name="ObjectMethod <strong>pushPreferences</strong> ("></a> [[ObjectMethod]] **pushPreferences** `($web,$topic,$type)`
+
+- `$web` - web to read from
+- `$topic` - topic to read
+- `$type` - DEFAULT, SITE, USER, SESSION, WEB, TOPIC or PLUGIN
+- `$prefix` - key prefix for all preferences (used for plugins)
+
+Reads preferences from the given topic, and pushes them onto the preferences stack.
+
+## <a name="ObjectMethod <strong>push_WebPreference"></a> [[ObjectMethod]] \*pushWebPreferences `($web)`
+
+Pushes web preferences. Web preferences for a particular web depend on the preferences of all containing webs.
+
+## <a name="ObjectMethod <strong>push_PreferencesVa"></a> [[ObjectMethod]] \*pushPreferencesValues `($type,\%values)`
+
+Push a new preference level using type and values given
+
+## <a name="ObjectMethod <strong>mark</strong> ()"></a> [[ObjectMethod]] **mark** `()`
+
+Return a marker representing the current top of the preferences stack. Used to remember the stack when new web and topic preferences are pushed during a topic include.
+
+## <a name="ObjectMethod <strong>resetTo</strong> ($mark)"></a> [[ObjectMethod]] **resetTo** `($mark)`
+
+Resets the preferences stack to the given mark, to recover after a topic include.
+
+## <a name="ObjectMethod <strong>get_PreferencesVal"></a> [[ObjectMethod]] \*getPreferencesValue `($key) -> $value`
+
+- =$key - key to look up
+
+Returns the value of the preference `$key`, or undef.
+
+Looks up local preferences when the level topic is the same as the current web,topic in the session.
+
+## <a name="ObjectMethod <strong>isFinalised</strong> ($key"></a> [[ObjectMethod]] **isFinalised** `($key)`
+
+Return true if $key is finalised somewhere in the prefs stack
+
+## <a name="ObjectMethod <strong>get_TopicPreferenc"></a> [[ObjectMethod]] \*getTopicPreferencesValue `($key,$web,$topic) -> $value`
+
+Recover a preferences value that is defined in a specific topic. Does not recover web, user or global settings.
+
+Intended for use in protections mechanisms, where the order doesn't match the prefs stack.
+
+## <a name="get_TextPreferencesValue( $key,"></a><a name="get_TextPreferencesValue( $key, "></a> getTextPreferencesValue( $key, $text, $web, $topic ) -> $value
+
+Get a preference value from the settings in the text. The parsed values are cached against the web, topic.
+
+## <a name="ObjectMethod <strong>get_WebPreferences"></a> [[ObjectMethod]] \*getWebPreferencesValue `($key,$web) -> $value`
+
+Recover a preferences value that is defined in the webhome topic of a specific web.. Does not recover user or global settings, but does recover settings from containing webs.
+
+Intended for use in protections mechanisms, where the order doesn't match the prefs stack.
+
+## <a name="ObjectMethod stringify() - $text"></a> [[ObjectMethod]] stringify() -> $text
+
+Generate a TML-formatted version of the current preferences
--- /dev/null
+# <a name="Package <code>TWiki::Prefs::Parser="></a> Package =TWiki::Prefs::Parser
+
+This Prefs-internal class is used to parse \* Set and \* Local statements from arbitrary text, and extract settings from meta objects. It is used by [[TopicPrefs]] to parse preference settings from topics.
+
+This class does no validation or duplicate-checking on the settings; it simply returns the recognized settings in the order it sees them in.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Prefs::Parser="> Package TWiki::Prefs::Parser</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> () -> topicpar"> ClassMethod new <tt>() -> topicparserobject</tt></a></li>
+ <li><a href="#ObjectMethod <strong>parseText</strong> ($text,"> ObjectMethod parseText <tt>($text,$prefs)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>parseMeta</strong> ($metaO"> ObjectMethod parseMeta <tt>($metaObject,$prefs)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> () - topicpars"></a> [[ClassMethod]] **new** `() -> topicparserobject`
+
+Construct a new parser object.
+
+## <a name="ObjectMethod <strong>parseText</strong> ($text,"></a> [[ObjectMethod]] **parseText** `($text,$prefs)`
+
+Parse settings from text and add them to the preferences in $prefs
+
+## <a name="ObjectMethod <strong>parseMeta</strong> ($metaO"></a> [[ObjectMethod]] **parseMeta** `($metaObject,$prefs)`
+
+Traverses through all PREFERENCE attributes of the meta object, creating one setting named with $settingPrefPrefix . 'title' for each. It also creates an entry named with the field 'name', which is a cleaned-up, space-removed version of the title.
+
+Settings are added to the $prefs passed.
--- /dev/null
+# <a name="Package <code>TWiki::Prefs::_PrefsCac"></a> Package =TWiki::Prefs::PrefsCache
+
+The [[PrefsCache]] package holds a cache of topics that have been read in, using the [[TopicPrefs]] class. These functions manage that cache.
+
+We maintain 2 hashes of values:
+
+- \{locals\} Contains all locals at this level. Locals are values that only apply when the current topic is the topic where the local is defined. The variable names are decorated with the locality where they apply.
+- \{values\} contains all sets, locals, and all values inherited from the parent level
+
+As each cache level is built, the values are copied down from the parent cache level. This sounds monstrously inefficient, but in fact perl does this a lot better than doing a multi-level lookup when a value is referenced. This is especially important when many prefs lookups may be done in a session, for example when searching.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Prefs::_PrefsCac"> Package TWiki::Prefs::PrefsCache</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($prefs,$paren"> ClassMethod new <tt>($prefs,$parent,$type,$web,$topic,$prefix)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>finalise</strong> ($parent"> ObjectMethod finalise <tt>($parent)</tt></a></li>
+ <li><a href="#ObjectMethod *load_PrefsFromTopi"> ObjectMethod loadPrefsFromTopic <tt>($web,$topic,$keyPrefix)</tt></a></li>
+ <li><a href="#ObjectMethod *load_PrefsFromText"> ObjectMethod loadPrefsFromText <tt>($text,$web,$topic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>insert</strong> ($type,$ke"> ObjectMethod insert <tt>($type,$key,$val)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>stringify</strong> ($html,"> ObjectMethod stringify <tt>($html,\%shown) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($prefs,$paren"></a> [[ClassMethod]] **new** `($prefs,$parent,$type,$web,$topic,$prefix)`
+
+Creates a new Prefs object.
+
+- `$prefs` - controlling TWiki::Prefs object
+- `$parent` - the [[PrefsCache]] object to use to initialise values from
+- `$type` - Type of prefs object to create, see notes.
+- `$web` - web containing topic to load from (required is `$topic` is set)
+- `$topic` - topic to load from
+- `$prefix` - key prefix for all preferences (used for plugins)
+
+If the specified topic is not found, returns an empty object.
+
+## <a name="ObjectMethod <strong>finalise</strong> ($parent"></a> [[ObjectMethod]] **finalise** `($parent)`
+
+Finalise preferences in this cache, by freezing any preferences listed in FINALPREFERENCES at their current value.
+
+- $parent = object that supports getPreferenceValue
+
+## <a name="ObjectMethod <strong>load_PrefsFromTopi"></a> [[ObjectMethod]] \*loadPrefsFromTopic `($web,$topic,$keyPrefix)`
+
+Loads preferences from a topic. All settings loaded are prefixed with the key prefix (default '').
+
+## <a name="ObjectMethod <strong>load_PrefsFromText"></a> [[ObjectMethod]] \*loadPrefsFromText `($text,$web,$topic)`
+
+Loads preferences from a topic. All settings loaded are prefixed with the key prefix (default '').
+
+## <a name="ObjectMethod <strong>insert</strong> ($type,$ke"></a> [[ObjectMethod]] **insert** `($type,$key,$val)`
+
+Adds a key-value pair of the given type to the object. Type is Set or Local. Callback used for the Prefs::Parser object, or can be used to add arbitrary new entries to a prefs cache.
+
+Note that attempts to redefine final preferences will be ignored.
+
+## <a name="ObjectMethod <strong>stringify</strong> ($html,"></a> [[ObjectMethod]] **stringify** `($html,\%shown) -> $text`
+
+Generate an (HTML if $html) representation of the content of this cache.
--- /dev/null
+# <a name="TWiki Reference Manual"></a> TWiki Reference Manual
+
+_Documentation for webmasters, system administrators, project managers, team leaders, and all other users of the TWiki Enterprise Collaboration Platform._
+
+All manual sections in one big page:
+
+- [[TWiki Documentation|Main/TWikiDocumentation]] (960k)
+
+Manual sections in separate pages:
+
+1. [[TWiki System Requirements|Main/TWikiSystemRequirements]]
+2. [[TWiki Installation Guide|Main/TWikiInstallationGuide]]
+3. [[TWiki Upgrade Guide|Main/TWikiUpgradeGuide]]
+4. [[TWiki User Authentication|Main/TWikiUserAuthentication]]
+5. [[TWiki Access Control|Main/TWikiAccessControl]]
+6. [[Text Formatting Rules|Main/TextFormattingRules]]
+7. [[TWiki Variables|Main/TWikiVariables]]
+8. [[Formatted Search|Main/FormattedSearch]]
+9. [[File Attachment|Main/FileAttachment]]
+10. [[TWiki Forms|Main/TWikiForms]]
+11. [[TWiki Templates|Main/TWikiTemplates]]
+12. [[TWiki Skins (visual layout)|Main/TWikiSkins]]
+13. [[TWiki MetaData|Main/TWikiMetaData]]
+14. [[TWiki Plugins|Main/TWikiPlugins]]
+15. [[TWiki::Func Module|Main/TWikiFuncDotPm]]
+16. [[TWiki CGI and Command Line Scripts|Main/TWikiScripts]]
+17. [[TWiki Site Tools|Main/TWikiSiteTools]]
+18. [[Managing Topics|Main/ManagingTopics]]
+19. [[Managing Webs|Main/ManagingWebs]]
+20. [[Managing Users|Main/ManagingUsers]]
+
+- **Appendices**
+ - [[A: TWiki Development Timeline|Main/TWikiHistory]]
+ - [[B: Encode URLs With UTF8|Main/AppendixEncodeURLsWithUTF8]]
+ - [[C: TWiki CSS|Main/TWikiCss]]
+
+%T% **ADMINS:** In less than an hour, you can read through and customize the [[User's Guide|Main/TWikiUsersGuide]] to reflect the exact feature set enabled on your own TWiki site. See also other enhancement pages:
+
+- TWiki:TWiki.TWikiAdminCookBook: Some tips that can be applied **before installation**
+- [[InstantEnhancements]]: Simple tips (using just browser, no install needed) and quick (max couple of minutes).
+- [[AdminToolsCategory]]: Topics an admin typically needs, all in one page
+
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]], [[DeveloperDocumentationCategory]]
-To edit pages on this %WIKITOOLNAME% Collaborative Web, you must have a registered user name in [[WikiNotation]].
+# <a name="Registration"></a> Registration
+
+To edit pages on this [[TWikiSite]], you must have a registered user name and password.
+
+- %H% **Note:** Registered users can [[ChangePasswords]] and [[ResetPasswords]].
To register as a new user, simply fill out this form:
-<form action="http://www.dementia.org/twiki//register/Main/WebHome" method="post">
- <table border="1">
- <tr>
- <td align="right"> First & last name: </td>
- <td><input />="/>" <code="<code" name="Twk1Name" onblur="var sIn = this.value; var sOut = ''; var chgUpper = true; for ( var i = 0; i < sIn.length; i++ ) { var ch = sIn.charAt( i ); var ch2 = ''; if((ch=='à')||(ch=='á')||(ch=='â')||(ch=='ã')||(ch=='å') ) { ch = 'a'; } if( (ch=='è')||(ch=='é')||(ch=='ê') ) { ch = 'e'; } if( ch=='ç') { ch = 'c'; } if( ch=='ñ') { ch = 'n'; } if( (ch=='ò')||(ch=='ó')||(ch=='ô') ) { ch = 'o'; } if( ch=='ä') { ch = 'a'; ch2 = 'e'; } if( ch=='ö') { ch = 'o'; ch2 = 'e'; } if( (ch=='ù')||(ch=='ú')||(ch=='û') ) { ch = 'o'; } if( ch=='ü') { ch = 'u'; ch2 = 'e'; } if( ch=='Ä') { ch = 'A'; ch2 = 'e'; } if( ch=='Ö') { ch = 'O'; ch2 = 'e'; } if( ch=='Ü') { ch = 'U'; ch2 = 'e'; } if( ch=='ß') { ch = 's'; ch2 = 's'; } if( ((ch>='a')&&(ch<='z')) || ((ch>='A')&&(ch<='Z')) ) { if( chgUpper ) { ch = ch.toUpperCase(); chgUpper = false; } sOut+=ch; if( ch2!='') { sOut+=ch2; } } else { if( ch==' ' ) { chgUpper = true; } } } this.form.Twk1WikiName.value=sOut;" size="40" type="text" value="" /><font color="red">**</font></td>
- </tr>
- <tr>
- <td align="right"> Your [[Main/WikiName]]: </td>
- <td><input name="Twk1WikiName" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> Intranet login name: </td>
- <td><input name="Twk1LoginName" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> Email address: </td>
- <td><input name="Twk1Email" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right"> Phone: </td>
- <td><input name="Twk0Phone" size="40" type="text" value="" /></td>
- </tr>
- <tr>
- <td align="right"> Department: </td>
- <td><input name="Twk0Department" size="40" type="text" value="" /></td>
- </tr>
- <tr>
- <td align="right"> Office location: </td>
- <td><select name="Twk1Location" size="1"><option selected value="">Select...</option>
- <option>SanJoseOffice</option>
- <option>LondonOffice</option>
- <option>TokyoOffice</option>
- <option value="(Please specify office location)">Other</option></select> <code><font color="red">**</font></code></td>
- </tr>
- <tr>
- <td align="right" valign="top"> Comments : <br /> (optional) </td>
- <td>
- <textarea cols="38" name="Twk0Comment" rows="4" wrap="virtual">
- </textarea>
- </td>
- </tr>
- <tr>
- <td align="right" valign="top"> <input name="TopicName" type="hidden" value="%TOPIC%" /></td>
- <td><input type="submit" value=" Submit " /> (Fields marked <code><font color="red">**</font></code> are required) </td>
- </tr>
- </table>
-</form>
-
-**_Submitting the form will automatically:_**
-
-- Create an account for you, so that you can start editing pages using your [[WikiName]].
+**Important:** the information provided in this form will be stored in a database on the TWiki server. This database is accessible to anyone who can access the server through the web (though passwords will be encrypted, and e-mail addresses will be obfusticated to help prevent spamming). Your country, or the country where the server is hosted, may have Data Protection laws governing the maintenance of such databases. If you are in doubt, you should contact [](mailto:?subject=Data%20Protection%20Policy) for details of the Data Protection Policy of this TWiki server before registering.
+
+<div>
+ <form action="http://www.dementia.org/twiki/register/Main/WebHome" method="post">
+ <table border="1">
+ <tr>
+ <td align="right"> First Name: </td>
+ <td><input name="Twk1FirstName" onblur="this.form.Twk1WikiName.value=capitalise(this.value)+capitalise(this.form.Twk1LastName.value)" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td align="right"> Last Name: </td>
+ <td><input name="Twk1LastName" onblur="this.form.Twk1WikiName.value=capitalise(this.form.Twk1FirstName.value)+capitalise(this.value)" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td align="right"> (identifies you to others) [[Main/WikiName]]: </td>
+ <td><input name="Twk1WikiName" onblur="" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"> E-mail address: </td>
+ <td><input name="Twk1Email" size="40" type="text" value="" /> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td> %BESPOKE_PASSWORD% </td>
+ </tr>
+ <tr>
+ <td align="right"> Organisation name: </td>
+ <td><input name="Twk0OrganisationName" size="40" type="text" value="" /></td>
+ </tr>
+ <tr>
+ <td align="right"> Organisation URL: </td>
+ <td><input name="Twk0OrganisationURL" onblur="if(this.value=='http://') { this.value='' }" onfocus="if(this.value=='') { this.value='http://' }" size="40" type="text" /></td>
+ </tr>
+ <tr>
+ <td align="right"> Country: </td>
+ <td><select name="Twk1Country" size="1"><option selected value="">Select...</option>
+ <option>USA</option>
+ <option>Albania</option>
+ <option>Algeria</option>
+ <option>Andorra</option>
+ <option>Angola</option>
+ <option>Argentina</option>
+ <option>Armenia</option>
+ <option>Aruba</option>
+ <option>Australia</option>
+ <option>Austria</option>
+ <option>Azerbaijan</option>
+ <option>Bahrain</option>
+ <option>Bangladesh</option>
+ <option>Belarus</option>
+ <option>Belgium</option>
+ <option>Belize</option>
+ <option>Benin</option>
+ <option>Bolivia</option>
+ <option>Bosnia and Hercegovina</option>
+ <option>Brazil</option>
+ <option>Bulgaria</option>
+ <option>Burundi</option>
+ <option>Cambodia</option>
+ <option>Cameroon</option>
+ <option>Canada</option>
+ <option>Central African Republic</option>
+ <option>Chile</option>
+ <option>China</option>
+ <option>Colombia</option>
+ <option>Congo</option>
+ <option>Costa Rica</option>
+ <option>Croatia</option>
+ <option>Cuba</option>
+ <option>Cyprus</option>
+ <option>Czech Republic</option>
+ <option>Denmark</option>
+ <option>Ecuador</option>
+ <option>Egypt</option>
+ <option>El Salvador</option>
+ <option>Estonia</option>
+ <option>Ethiopia</option>
+ <option>Fiji</option>
+ <option>Finland</option>
+ <option>France</option>
+ <option>Georgia</option>
+ <option>Germany</option>
+ <option>Gibraltar</option>
+ <option>Greece</option>
+ <option>Guam</option>
+ <option>Guatemala</option>
+ <option>Haiti</option>
+ <option>Hong Kong</option>
+ <option>Hungary</option>
+ <option>Iceland</option>
+ <option>India</option>
+ <option>Indonesia</option>
+ <option>Iran</option>
+ <option>Iraq</option>
+ <option>Ireland</option>
+ <option>Israel</option>
+ <option>Italy</option>
+ <option>Japan</option>
+ <option>Jordan</option>
+ <option>Kazakstan</option>
+ <option>Kenya</option>
+ <option>Korea</option>
+ <option>Kuwait</option>
+ <option>Kyrgyz Rebublic</option>
+ <option>Laos</option>
+ <option>Latvia</option>
+ <option>Lebanon</option>
+ <option>Liberia</option>
+ <option>Liechtenstein</option>
+ <option>Lithuania</option>
+ <option>Luxembourg</option>
+ <option>Libya</option>
+ <option>Macao</option>
+ <option>Macedonia</option>
+ <option>Malaysia</option>
+ <option>Malawi</option>
+ <option>Malta</option>
+ <option>Mexico</option>
+ <option>Moldova</option>
+ <option>Monaco</option>
+ <option>Morocco</option>
+ <option>Mozambique</option>
+ <option>Namibia</option>
+ <option>Nepal</option>
+ <option>Netherlands</option>
+ <option>New Zealand</option>
+ <option>Nicaragua</option>
+ <option>Nigeria</option>
+ <option>Norway</option>
+ <option>Oman</option>
+ <option>Pakistan</option>
+ <option>Panama</option>
+ <option>Paraguay</option>
+ <option>Peru</option>
+ <option>Philippines</option>
+ <option>Poland</option>
+ <option>Portugal</option>
+ <option>Romania</option>
+ <option>Russia</option>
+ <option>Saudi Arabia</option>
+ <option>Senegal</option>
+ <option>Singapore</option>
+ <option>Slovakia</option>
+ <option>Slovenia</option>
+ <option>South Africa</option>
+ <option>Spain</option>
+ <option>Sri Lanka</option>
+ <option>Suriname</option>
+ <option>Sweden</option>
+ <option>Switzerland</option>
+ <option>Syria</option>
+ <option>Taiwan</option>
+ <option>Tanzania</option>
+ <option>Thailand</option>
+ <option>Tajikistan</option>
+ <option>Tunisia</option>
+ <option>Turkey</option>
+ <option>Turkmenistan</option>
+ <option>Uganda</option>
+ <option>Ukraine</option>
+ <option>United Arab Emirates</option>
+ <option>United Kingdom</option>
+ <option>Uruguay</option>
+ <option>USA</option>
+ <option>Uzbekistan</option>
+ <option>Vatican City</option>
+ <option>Venezuela</option>
+ <option>Vietnam</option>
+ <option>Yemen</option>
+ <option>Yugoslavia</option>
+ <option>Zaire</option>
+ <option>Zambia</option>
+ <option>Zimbabwe</option>
+ <option value="Other Country">Other Country</option></select> <code><font color="red">**</font></code></td>
+ </tr>
+ <tr>
+ <td align="right" valign="top"> Comments:<br /> (optional) </td>
+ <td>
+ <textarea cols="38" name="Twk0Comment" rows="4" wrap="virtual">
+ </textarea>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ </td>
+ <td><span>Fields marked <code><font color="red">**</font></code> are required</span></td>
+ </tr>
+ <tr>
+ <td align="right" valign="top"> <input name="topic" type="hidden" value="%TOPIC%" /><input name="action" type="hidden" value="register" /></td>
+ <td><input type="submit" value=" Submit " /></td>
+ </tr>
+ </table>
+ </form>
+</div>
+
+When %WIKITOOLNAME% receives the form, it will mail an account activation code to the e-mail address you gave above. Enter that activation code in the following screen, or follow the link in the e-mail, to activate your account. Once your account is activated, %WIKITOOLNAME% will:
+
+- Finish creating an account for you, so that you can start editing pages using your [[WikiName]].
- Create your personal %WIKITOOLNAME% topic using your [[WikiName]] as topic name, and add the data you submitted to the topic.
- Add your name to the list of users in the [[TWikiUsers]] topic in the Main web.
-- Send you a confirmation of your registration by email.
+- Send you a confirmation of your registration by e-mail.
+
+Once registered you can login using your %LOGIN\_METHOD\_IN\_THIS\_SITE% and password.
-Once registered you can login using your [[WikiName]] and password.
+If you have any questions about registration, send an e-mail to [](mailto:?subject=%TOPIC% Question).
-If you have any questions about registration, send an email to [](mailto:?subject=%TOPIC% Question).
+<table bgcolor="yellow">
+ <tr>
+ <td><strong><em>Note to administrator:</em></strong> The form fields can be customized to the needs of your organization. See also [[Main/TWikiUserAuthentication]]. In case you are registering users through other means, replace this topic with a note describing how to get registered in TWiki. In any case, remove this note. </td>
+ </tr>
+</table>
--- /dev/null
+# <a name="Package <code>TWiki::Render="></a> Package =TWiki::Render
+
+This module provides most of the actual HTML rendering code in TWiki.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Render="> Package TWiki::Render</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session)"> ClassMethod new <tt>($session)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>renderParent</strong> ($we"> ObjectMethod renderParent <tt>($web,$topic,$meta,$params) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>renderMoved</strong> ($web"> ObjectMethod renderMoved <tt>($web,$topic,$meta,$params) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *render_FormField*"> ObjectMethod renderFormField <tt>($web,$topic,$meta,$params) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>make_AnchorName</strong> ("> ObjectMethod makeAnchorName <tt>($anchorName,$compatibilityMode) -> $anchorName</tt></a></li>
+ <li><a href="#ObjectMethod <strong>internalLink</strong> ($th"> ObjectMethod internalLink <tt>($theWeb,$theTopic,$theLinkText,$theAnchor,$doLink,$doKeepWeb) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod <strong>renderFORMFIELD</strong> ("> ObjectMethod renderFORMFIELD <tt>(%params,$topic,$web) -> $html</tt></a></li>
+ <li><a href="#ObjectMethod *get_RenderedVersio"> ObjectMethod getRenderedVersion <tt>($text,$theWeb,$theTopic) -> $html</tt></a></li>
+ <li><a href="#StaticMethod *verbatim_CallBack*"> StaticMethod verbatimCallBack <tt></tt></a></li>
+ <li><a href="#ObjectMethod <strong>_TML2PlainText</strong> ($"> ObjectMethod TML2PlainText <tt>($text,$web,$topic,$opts) -> $plainText</tt></a></li>
+ <li><a href="#ObjectMethod *protect_PlainText*"> ObjectMethod protectPlainText <tt>($text) -> $tml</tt></a></li>
+ <li><a href="#ObjectMethod *make_TopicSummary*"> ObjectMethod makeTopicSummary <tt>($theText,$theTopic,$theWeb,$theFlags) -> $tml</tt></a></li>
+ <li><a href="#ObjectMethod *take_OutProtected*"> ObjectMethod takeOutProtected <tt>(\$text,$re,\%map) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *put_BackProtected*"> ObjectMethod putBackProtected <tt>(\$text,\%map,$tag,$newtag,$callBack) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>take_OutBlocks</strong> (\"> ObjectMethod takeOutBlocks <tt>(\$text,$tag,\%map) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>put_BackBlocks</strong> (\"> ObjectMethod putBackBlocks <tt>(\$text,\%map,$tag,$newtag,$callBack) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *render_RevisionInf"> ObjectMethod renderRevisionInfo <tt>($web,$topic,$meta,$rev,$format) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *summariseChanges*"> ObjectMethod summariseChanges <tt>($user,$web,$topic,$orev,$nrev,$tml) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>for_EachLine</strong> ($te"> ObjectMethod forEachLine <tt>($text,\&fn,\%options) -> $newText</tt></a></li>
+ <li><a href="#StaticMethod *replace_TopicRefer"> StaticMethod replaceTopicReferences <tt>($text,\%options) -> $text</tt></a></li>
+ <li><a href="#StaticMethod *replace_WebReferen"> StaticMethod replaceWebReferences <tt>($text,\%options) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *replace_WebInterna"> ObjectMethod replaceWebInternalReferences <tt>(\$text,\%meta,$oldWeb,$oldTopic)</tt></a></li>
+ <li><a href="#StaticMethod *render_FormFieldAr"> StaticMethod renderFormFieldArg <tt>($meta,$args) -> $text</tt></a></li>
+ <li><a href="#StaticMethod <strong>breakName</strong> ($text,"> StaticMethod breakName <tt>($text,$args) -> $text</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session)"></a> [[ClassMethod]] **new** `($session)`
+
+Creates a new renderer with initial state from preference values (NEWTOPICBGCOLOR, NEWTOPICFONTCOLOR NEWTOPICLINKSYMBOL LINKTOOLTIPINFO)
+
+## <a name="ObjectMethod <strong>renderParent</strong> ($we"></a> [[ObjectMethod]] **renderParent** `($web,$topic,$meta,$params) -> $text`
+
+Render parent meta-data
+
+## <a name="ObjectMethod <strong>renderMoved</strong> ($web"></a> [[ObjectMethod]] **renderMoved** `($web,$topic,$meta,$params) -> $text`
+
+Render moved meta-data
+
+## <a name="ObjectMethod <strong>render_FormField*"></a><a name="ObjectMethod *render_FormField</strong> "></a> [[ObjectMethod]] **renderFormField** `($web,$topic,$meta,$params) -> $text`
+
+Render meta-data for a single formfield
+
+## <a name="ObjectMethod <strong>make_AnchorName</strong> ("></a> [[ObjectMethod]] **makeAnchorName** `($anchorName,$compatibilityMode) -> $anchorName`
+
+- `$anchorName` -
+- `$compatibilityMode` -
+
+Build a valid HTML anchor name
+
+## <a name="ObjectMethod <strong>internalLink</strong> ($th"></a> [[ObjectMethod]] **internalLink** `($theWeb,$theTopic,$theLinkText,$theAnchor,$doLink,$doKeepWeb) -> $html`
+
+Generate a link.
+
+SMELL: why can topic be spaced out? is this to support auto squishing of [[Spaced Topic Naming|Main/SpacedTopicNaming]]? and [[lowercase Spaced Topic Naming|Main/LowercaseSpacedTopicNaming]]
+
+- `$theWeb` - the web containing the topic
+- `$theTopic` - the topic to be lunk
+- `$theLinkText` - text to use for the link
+- `$theAnchor` - the link anchor, if any
+- `$doLinkToMissingPages` - boolean: false means suppress link for non-existing pages
+- `$doKeepWeb` - boolean: true to keep web prefix (for non existing Web.TOPIC)
+
+Called by \_handleWikiWord and \_handleSquareBracketedLink and by Func::internalLink
+
+Calls \_renderWikiWord, which in turn will use Plurals.pm to match fold plurals to equivalency with their singular form
+
+SMELL: why is this available to Func?
+
+## <a name="ObjectMethod <strong>renderFORMFIELD</strong> ("></a> [[ObjectMethod]] **renderFORMFIELD** `(%params,$topic,$web) -> $html`
+
+Returns the fully rendered expansion of a tag.
+
+## <a name="ObjectMethod <strong>get_RenderedVersio"></a> [[ObjectMethod]] \*getRenderedVersion `($text,$theWeb,$theTopic) -> $html`
+
+The main rendering function.
+
+## <a name="StaticMethod <strong>verbatim_CallBack*"></a> [[StaticMethod]] \*verbatimCallBack ``
+
+Callback for use with putBackBlocks that replaces < and > by their HTML entities &lt; and &gt;
+
+## <a name="ObjectMethod <strong>_TML2PlainText</strong> ($"></a> [[ObjectMethod]] **TML2PlainText** `($text,$web,$topic,$opts) -> $plainText`
+
+Clean up TWiki text for display as plain text without pushing it through the full rendering pipeline. Intended for generation of topic and change summaries. Adds nop tags to prevent TWiki subsequent rendering; nops get removed at the very end.
+
+Defuses TML.
+
+$opts:
+
+- showvar - shows %VAR% names if not expanded
+- expandvar - expands %VARS%
+- nohead - strips ---+ headings at the top of the text
+- showmeta - does not filter meta-data
+
+## <a name="ObjectMethod <strong>protect_PlainText*"></a> [[ObjectMethod]] \*protectPlainText `($text) -> $tml`
+
+Protect plain text from expansions that would normally be done duing rendering, such as wikiwords. Topic summaries, for example, have to be protected this way.
+
+## <a name="ObjectMethod <strong>make_TopicSummary*"></a> [[ObjectMethod]] \*makeTopicSummary `($theText,$theTopic,$theWeb,$theFlags) -> $tml`
+
+Makes a plain text summary of the given topic by simply trimming a bit off the top. Truncates to $TMTRUNC chars or, if a number is specified in $theFlags, to that length.
+
+## <a name="ObjectMethod <strong>take_OutProtected*"></a> [[ObjectMethod]] \*takeOutProtected `(\$text,$re,\%map) -> $text`
+
+- `$text` - Text to process
+- `$re` - Regular expression that matches tag expressions to remove
+- `\%map` - Reference to a hash to contain the removed blocks
+
+Return value: $text with blocks removed
+
+used to extract from $text comment type tags like <!DOCTYPE blah>
+
+WARNING: if you want to take out <!-- comments --> you _will_ need to re-write all the takeOuts to use a different placeholder
+
+## <a name="ObjectMethod <strong>put_BackProtected*"></a> [[ObjectMethod]] \*putBackProtected `(\$text,\%map,$tag,$newtag,$callBack) -> $text`
+
+Return value: $text with blocks added back
+
+- `\$text` - reference to text to process
+- `\%map` - map placeholders to blocks removed by takeOutBlocks
+
+Reverses the actions of takeOutProtected.
+
+## <a name="ObjectMethod <strong>take_OutBlocks</strong> (\"></a> [[ObjectMethod]] **takeOutBlocks** `(\$text,$tag,\%map) -> $text`
+
+- `$text` - Text to process
+- `$tag` - XHTML-style tag.
+- `\%map` - Reference to a hash to contain the removed blocks
+
+Return value: $text with blocks removed
+
+Searches through $text and extracts blocks delimited by a tag, appending each onto the end of the @buffer and replacing with a token string which is not affected by TWiki rendering. The text after these substitutions is returned.
+
+Parameters to the open tag are recorded.
+
+This is _different_ to takeOutProtected, because it requires tags to be on their own line. it also supports a callback for post- processing the data before re-insertion.
+
+## <a name="ObjectMethod <strong>put_BackBlocks</strong> (\"></a> [[ObjectMethod]] **putBackBlocks** `(\$text,\%map,$tag,$newtag,$callBack) -> $text`
+
+Return value: $text with blocks added back
+
+- `\$text` - reference to text to process
+- `\%map` - map placeholders to blocks removed by takeOutBlocks
+- `$tag` - Tag name processed by takeOutBlocks
+- `$newtag` - Tag name to use in output, in place of $tag. If undefined, uses $tag.
+- `$callback` - Reference to function to call on each block being inserted (optional)
+
+Reverses the actions of takeOutBlocks.
+
+Each replaced block is processed by the callback (if there is one) before re-insertion.
+
+Parameters to the outermost cut block are replaced into the open tag, even if that tag is changed. This allows things like <verbatim class=''> to be mapped to <pre class=''>
+
+Cool, eh what? Jolly good show.
+
+And if you set $newtag to '', we replace the taken out block with the valuse itself
+
+- which i'm using to stop the rendering process, but then at the end put in the html directly (for tag. ---++ ObjectMethod \*renderRevisionInfo\* `($web,$topic,$meta,$rev,$format) -> $string` Obtain and render revision info for a topic. \* =$web= - the web of the topic \* =$topic= - the topic \* =$meta= if specified, get rev info from here. If not specified, or meta contains rev info for a different version than the one requested, will reload the topic \* =$rev= - the rev number, defaults to latest rev \* =$format= - the render format, defaults to =$rev - $time - $wikiusername= =$format= can contain the following keys for expansion: | =$web= | the web name | | =$topic= | the topic name | | =$rev= | the rev number | | =$date= | the date of the rev (no time) | | =$time= | the full date and time of the rev | | =$comment= | the comment | | =$username= | the login of the saving user | | =$wikiname= | the wikiname of the saving user | | =$wikiusername= | the web.wikiname of the saving user | ---++ ObjectMethod \*summariseChanges\* `($user,$web,$topic,$orev,$nrev,$tml) -> $text` \* =$user= - user (null to ignore permissions) \* =$web= - web \* =$topic= - topic \* =$orev= - older rev \* =$nrev= - later rev \* =$tml= - if true will generate renderable TML (i.e. HTML with NOPs. if false will generate a summary suitable for use in plain text (mail, for example) Generate a (max 3 line) summary of the differences between the revs. If there is only one rev, a topic summary will be returned. If =$tml= is not set, all HTML will be removed. In non-tml, lines are truncated to 70 characters. Differences are shown using + and - to indicate added and removed text. ---++ ObjectMethod \*forEachLine\* `($text,\&fn,\%options) -> $newText` Iterate over each line, calling =\\&fn= on each. \\%options may contain: \* =pre= => true, will call fn for each line in pre blocks \* =verbatim= => true, will call fn for each line in verbatim blocks \* =noautolink= => true, will call fn for each line in =noautolink= blocks The spec of \\&fn is sub fn( \\$line, \\%options ) -> $newLine; the %options hash passed into this function is passed down to the sub, and the keys =in\_pre=, =in\_verbatim= and =in\_noautolink= are set boolean TRUE if the line is from one (or more) of those block types. The return result replaces $line in $newText. ---++ StaticMethod \*replaceTopicReferences\* `($text,\%options) -> $text` Callback designed for use with forEachLine, to replace topic references. \\%options contains: \* =oldWeb= => Web of reference to replace \* =oldTopic= => Topic of reference to replace \* =spacedTopic= => RE matching spaced out oldTopic \* =newWeb= => Web of new reference \* =newTopic= => Topic of new reference \* =inWeb= => the web which the text we are presently processing resides in \* =fullPaths= => optional, if set forces all links to full web.topic form For a usage example see TWiki::UI::Manage.pm ---++ StaticMethod \*replaceWebReferences\* `($text,\%options) -> $text` Callback designed for use with forEachLine, to replace web references. \\%options contains: \* =oldWeb= => Web of reference to replace \* =newWeb= => Web of new reference For a usage example see TWiki::UI::Manage.pm ---++ ObjectMethod \*replaceWebInternalReferences\* `(\$text,\%meta,$oldWeb,$oldTopic)` Change within-web wikiwords in $$text and $meta to full web.topic syntax. \\%options must include topics => list of topics that must have references to them changed to include the web specifier. ---++ StaticMethod \*renderFormFieldArg\* `($meta,$args) -> $text` Parse the arguments to a $formfield specification and extract the relevant formfield from the given meta data. ---++ StaticMethod \*breakName\* `($text,$args) -> $text` \* =$text= - text to "break" \* =$args= - string of format (\\d+)([,\\s\*]\\.\\.\\.)?) Hyphenates $text every $1 characters, or if $2 is "..." then shortens to $1 characters and appends "..." (making the final string $1+3 characters long) \_Moved from Search.pm because it was obviously unhappy there, as it is a rendering function\_
--- /dev/null
+# <a name="Package <code>TWiki::Sandbox="></a> Package =TWiki::Sandbox
+
+This object provides an interface to the outside world. All calls to system functions, or handling of file names, should be brokered by this object.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Sandbox="> Package TWiki::Sandbox</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($os,$realOS)"> ClassMethod new <tt>($os,$realOS)</tt></a></li>
+ <li><a href="#StaticMethod *untaintUnchecked*"> StaticMethod untaintUnchecked <tt>($string) -> $untainted</tt></a></li>
+ <li><a href="#StaticMethod *normalize_FileName"> StaticMethod normalizeFileName <tt>($string) -> $filename</tt></a></li>
+ <li><a href="#ObjectMethod <strong>sysCommand</strong> ($temp"> ObjectMethod sysCommand <tt>($template,@params) -> ($data,$exit)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($os,$realOS)"></a> [[ClassMethod]] **new** `($os,$realOS)`
+
+Construct a new sandbox suitable for $os, setting flags for platform features that help. $realOS distinguishes Perl variants on platforms such as Windows.
+
+## <a name="StaticMethod <strong>untaintUnchecked*"></a><a name="StaticMethod *untaintUnchecked</strong> "></a> [[StaticMethod]] **untaintUnchecked** `($string) -> $untainted`
+
+Untaints $string without any checks (dangerous). If $string is undefined, return undef.
+
+The intent is to use this routine to be able to find all untainting places using grep.
+
+## <a name="StaticMethod <strong>normalize_FileName"></a> [[StaticMethod]] \*normalizeFileName `($string) -> $filename`
+
+STATIC Errors out if $string contains filtered characters.
+
+The returned string is not tainted, but it may contain shell metacharacters and even control characters.
+
+## <a name="ObjectMethod <strong>sysCommand</strong> ($temp"></a> [[ObjectMethod]] **sysCommand** `($template,@params) -> ($data,$exit)`
+
+Invokes the program described by $template and @params, and returns the output of the program and an exit code. STDOUT is returned. STDERR is THROWN AWAY.
+
+The caller has to ensure that the invoked program does not react in a harmful way to the passed arguments. sysCommand merely ensures that the shell does not interpret any of the passed arguments.
--- /dev/null
+<div>
+ <ul>
+ <li><a href="#TWiki CGI and Command Line Scrip"> TWiki CGI and Command Line Scripts</a><ul>
+ <li><a href="#CGI Scripts"> CGI Scripts</a><ul>
+ <li><a href="#General Information"> General Information</a><ul>
+ <li><a href="#CGI environment"> CGI environment</a></li>
+ <li><a href="#Command-line"> Command-line</a></li>
+ <li><a href="#Common parameters"> Common parameters</a></li>
+ </ul>
+ </li>
+ <li><a href="#=attach="> attach</a></li>
+ <li><a href="#=changes="> changes</a></li>
+ <li><a href="#=configure="> configure</a></li>
+ <li><a href="#=edit="> edit</a></li>
+ <li><a href="#=login="> login</a></li>
+ <li><a href="#=logon="> logon</a></li>
+ <li><a href="#=manage="> manage</a><ul>
+ <li><a href="#=action=createweb="> action=createweb</a></li>
+ <li><a href="#=action=delete_UserAccount="> action=deleteUserAccount</a></li>
+ <li><a href="#=action=editSettings="> action=editSettings</a></li>
+ <li><a href="#=action=bulkRegister="> action=bulkRegister</a></li>
+ <li><a href="#=action=saveSettings="> action=saveSettings</a></li>
+ </ul>
+ </li>
+ <li><a href="#=oops="> oops</a></li>
+ <li><a href="#=passwd="> passwd</a><ul>
+ <li><a href="#=action=changePassword="> action=changePassword</a></li>
+ </ul>
+ </li>
+ <li><a href="#=preview="> preview</a></li>
+ <li><a href="#=rdiff="> rdiff</a></li>
+ <li><a href="#=register="> register</a></li>
+ <li><a href="#=rename="> rename</a></li>
+ <li><a href="#=resetpasswd="> resetpasswd</a></li>
+ <li><a href="#=rest="> rest</a><ul>
+ <li><a href="#Invocation Examples"> Invocation Examples</a></li>
+ </ul>
+ </li>
+ <li><a href="#=save="> save</a></li>
+ <li><a href="#=search="> search</a></li>
+ <li><a href="#=statistics="> statistics</a></li>
+ <li><a href="#=twiki="> twiki</a></li>
+ <li><a href="#=upload="> upload</a></li>
+ <li><a href="#=view="> view</a></li>
+ <li><a href="#=viewfile="> viewfile</a></li>
+ </ul>
+ </li>
+ <li><a href="#Command Line Scripts"> Command Line Scripts</a><ul>
+ <li><a href="#=geturl.pl="> geturl.pl</a></li>
+ <li><a href="#=rewriteshebang.pl="> rewriteshebang.pl</a></li>
+ <li><a href="#=tick_twiki.pl="> tick_twiki.pl</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+# <a name="TWiki CGI and Command Line Scrip"></a> TWiki CGI and Command Line Scripts
+
+_Programs on the TWiki server performing actions such as rendering, saving and renaming topics._
+
+The TWiki scripts are located in the `twiki/bin` and `twiki/tools` directories. This topic describes the interfaces to some of those scripts. All scripts in the `twiki/bin` directory can be called from the CGI ([Common Gateway Interface](http://en.wikipedia.org/wiki/Common_Gateway_Interface)) environment or from the command line. The scripts in the `twiki/tools` directory can only be called from the command line.
+
+## <a name="CGI Scripts"></a> CGI Scripts
+
+Details on CGI scripts located in the `twiki/bin` directory.
+
+### <a name="General Information"></a> General Information
+
+#### <a name="CGI environment"></a> CGI environment
+
+In the CGI environment parameters are passed to the scripts via the URL and URL parameters. Environment variables are also used to determine the user performing the action. If the environment is not set up, the default TWiki user is used (usually `guest`).
+
+#### <a name="Command-line"></a> Command-line
+
+You **must** be cd'd to the `twiki/bin` directory to run the scripts from the command line. To avoid issues with file permissions, run the scripts as the web server user such as `nobody` or `www`.
+
+Parameters are passed using '-name' - for example,
+
+ $ cd /usr/local/twiki/bin
+ $ save -topic MyWeb.MyTopic -user admin -action save -text "New text of the topic"
+
+All parameters require a value.
+
+#### <a name="Common parameters"></a> Common parameters
+
+All the scripts accept a number of common parameters. The first two components of the URL after the script name are taken as the web and the topic, respectively. Standard URL parameters are:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>topic</code></td>
+ <td> If this is set to a URL, TWiki will immediately redirect to that URL. Otherwise it overrides the URL and is taken as the topic name (you can pass Web.TopicName) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>user</code></td>
+ <td> Command-line only; set the name of the user performing the action. Note: this usage is inherently insecure, as it bypasses webserver login constraints. For this reason only authorised users should be allowed to execute scripts from the command line. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>skin</code></td>
+ <td> Overrides the default skin path (see [[Main/TWikiSkins]]) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>cover</code></td>
+ <td> Specifies temporary skin path to prepend to the skin path for this script only (see [[Main/TWikiSkins]]) </td>
+ <td> </td>
+ </tr>
+</table>
+
+### <a name="=attach="></a> `attach`
+
+Despite the name, this script doesn't actually attach a file to a topic - for that, use `upload`. This script is part of the transactions sequence executed when a file is uploaded from the browser. it just generates the "new attachment" page for a topic.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>filename</code></td>
+ <td> Name of existing attachment (if provided, this is a "manage attachment" action) </td>
+ <td> none (in which case this is a "new attachment" action) </td>
+ </tr>
+</table>
+
+### <a name="=changes="></a> `changes`
+
+Shows all the changes in the given web.
+
+The `changes` script can receive one parameter:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>minor</code></td>
+ <td> If 0, show only major changes. If 1, show all the changes (both minor and major) </td>
+ <td> 0 </td>
+ </tr>
+</table>
+
+The main difference between invoking this script and using [[WebChanges]] is that [[WebChanges]] is based on a `%SEARCH%`, while this script reads the `changes` file in each web, making it much faster.
+
+**NOTE**: The result from `changes` script and the topic [[WebChanges]] can be different, if the `changes` file is deleted from a web. In particular, in new installations the `changes` script will return no results while the [[WebChanges]] topic will.
+
+### <a name="=configure="></a> `configure`
+
+`configure` is the browser script used for inspection and configuration of the TWiki configuration. None of the parameters to this script are useable for any purpose except `configure`.
+
+### <a name="=edit="></a> `edit`
+
+The `edit` scipt understands the following parameters, typically supplied by HTML input fields:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>action</code></td>
+ <td> Optional. Use the editaction template instead of the standard edit. If action=text, then hide the form. If action=form hide the normal text area and only edit the form. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>onlynewtopic</code></td>
+ <td> If set, error if topic already exists </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>onlywikiname</code></td>
+ <td> If set, error if topic name is not a [[Main/WikiWord]]</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>templatetopic</code></td>
+ <td> The name of the template topic, copied to get the initial content </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>text</code></td>
+ <td> Initial text for the topic </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>topicparent</code></td>
+ <td> The parent topic </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>formtemplate</code></td>
+ <td> Name of the form to instantiate in the topic. Overrides the form set in the <code>templatetopic</code> if defined. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>contenttype</code></td>
+ <td> Optional parameter that defines the application type to write into the CGI header. Defaults to <code>text/html</code>. May be used to invoke alternative client applications </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>anyname</code></td>
+ <td> Any parameter can passed to the new topic; if the template topic contains <code>%URLPARAM{"anyname"}%</code>, it will be replaced by its value </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>breaklock</code></td>
+ <td> If set, any lease conflicts will be ignored, and the edit will proceed even if someone is already editing the topic. </td>
+ <td> </td>
+ </tr>
+</table>
+
+Form field values are passed in parameters named 'field' - for example, if I have a field `Status` the parameter name is `Status`.
+
+1. The first sequence of ten or more `X` characters in the topic name will be converted on save to a number such that the resulting topic name is unique in the target web.
+
+NOTE: most skins support the definition of `EDIT_SKIN`, which is used as the value of the `cover` parameter in `edit` URLs. This allows you to override the default edit skin on a web, topic or user basis.
+
+### <a name="=login="></a> `login`
+
+Used for logging in when TWiki login is being used (e.g TemplateLoginManager).
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>origurl</code></td>
+ <td> URL that was being accessed when an access violation occurred. the login process will redirect to this URL if it is successful </td>
+ <td> none </td>
+ </tr>
+ <tr>
+ <td><code>username</code></td>
+ <td> username of user logging in </td>
+ <td> none </td>
+ </tr>
+ <tr>
+ <td><code>password</code></td>
+ <td> password of user logging in </td>
+ <td> none </td>
+ </tr>
+</table>
+
+### <a name="=logon="></a> `logon`
+
+Used for logging in when Web Server authentication is being used (e.g. ApacheLoginManager). The script does nothing; it is purely a placeholder for triggering the login process. The webserver will be set up to require a valid user to access this script, thus triggering the webserver login process.
+
+### <a name="=manage="></a> `manage`
+
+Performs a range of management functions.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>action</code></td>
+ <td> One of <code>createweb</code>, <code>deleteUserAccount</code>, <code>editSettings</code> or <code>saveSettings</code></td>
+ <td> none </td>
+ </tr>
+</table>
+
+#### <a name="=action=createweb="></a> `action=createweb`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>newweb</code></td>
+ <td> Name of the new web </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>baseweb</code></td>
+ <td> Name of the web to copy to create the new web </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>webbgcolor</code></td>
+ <td> value for WEBBGCOLOR </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>sitemapwhat</code></td>
+ <td> Value for SITEMAPWHAT </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>sitemapuseto</code></td>
+ <td> Value for SITEMAPUSETO </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>nosearchall</code></td>
+ <td> Value for NOSEARCHALL </td>
+ <td> '' </td>
+ </tr>
+</table>
+
+#### <a name="=action=delete_UserAccount="></a> `action=deleteUserAccount`
+
+Unregisters (removes) the currently logged-in user.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>password</code></td>
+ <td> Users' password </td>
+ <td> none </td>
+ </tr>
+</table>
+
+#### <a name="=action=editSettings="></a> `action=editSettings`
+
+No parameters
+
+#### <a name="=action=bulkRegister="></a> `action=bulkRegister`
+
+See [[BulkRegistration]].
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>OverwriteHomeTopics</code></td>
+ <td> Whether to overwrite existing home topics or not </td>
+ <td> false </td>
+ </tr>
+ <tr>
+ <td><code>EmailUsersWithDetails</code></td>
+ <td> Whether to mail registered users or not </td>
+ <td> false </td>
+ </tr>
+ <tr>
+ <td><code>LogTopic</code></td>
+ <td> Topic to save the log in </td>
+ <td> Same as topic name, with 'Result' appended. </td>
+ </tr>
+</table>
+
+#### <a name="=action=saveSettings="></a> `action=saveSettings`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>text</code></td>
+ <td> Text of the topic </td>
+ <td> '' </td>
+ </tr>
+ <tr>
+ <td><code>originalrev</code></td>
+ <td> Revision that the edit started on </td>
+ <td> Most recent revision </td>
+ </tr>
+</table>
+
+All other parameters may be interpreted as form fields, depending on the current form definition in the topic.
+
+### <a name="=oops="></a> `oops`
+
+This script is mainly used for rendering pages containing error messages, though it is also used for some functional actions such as manage pages (move topic etc).
+
+`oops` templates are used with the `oops` script to generate system messages. This is done to make internationalisation or other local customisations simple.
+
+The `oops` script supports the following parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>template</code></td>
+ <td> Name of the template file to display </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>def</code></td>
+ <td> Optional, can be set to the name of a single definition within <code>template</code>. This definition will be instantiated in the <code>template</code> wherever <code>%INSTANTIATE%</code> is seen. This lets you use a single template file for many messages. For an example, see <code>oopsmanagebad.tmpl</code>. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>paramN</code></td>
+ <td> Where N is an integer from 1 upwards. These values will be substituted into <code>template</code> for <code>%PARAM1%</code> etc. </td>
+ <td> </td>
+ </tr>
+</table>
+
+### <a name="=passwd="></a> `passwd`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>action</code></td>
+ <td> one of <code>changePassword</code> or <code>resetPassword</code></td>
+ <td> none </td>
+ </tr>
+</table>
+
+Other parameters as described under `manage`, `action=changePassword`.
+
+#### <a name="=action=changePassword="></a> `action=changePassword`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>username</code></td>
+ <td> Username </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>oldpassword</code></td>
+ <td> Existing password (plain text) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>password</code></td>
+ <td> New password (plain text) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>passwordA</code></td>
+ <td> New password confirmation (plain text) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>TopicName</code></td>
+ <td> ? </td>
+ <td> </td>
+ </tr>
+</table>
+
+### <a name="=preview="></a> `preview`
+
+This script is _deprecated_. Its functions are covered by the `save` script.
+
+### <a name="=rdiff="></a> `rdiff`
+
+Renders the differences between version of a TWiki topic
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td> rev1 </td>
+ <td> the higher revision </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> rev2 </td>
+ <td> the lower revision </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> render </td>
+ <td> the rendering style {sequential, sidebyside, raw, debug} </td>
+ <td> DIFFRENDERSTYLE, <code>sequential</code></td>
+ </tr>
+ <tr>
+ <td> type </td>
+ <td> history, diff, last} history diff, version to version, last version to previous </td>
+ <td><code>diff</code></td>
+ </tr>
+ <tr>
+ <td> context </td>
+ <td> number of lines of context </td>
+ <td> </td>
+ </tr>
+</table>
+
+TODO:
+
+- add a \{word\} render style
+
+### <a name="=register="></a> `register`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>action</code></td>
+ <td><code>register</code> or <code>verify</code> or <code>resetPassword</code> or <code>approve</code></td>
+ <td> </td>
+ </tr>
+</table>
+
+### <a name="=rename="></a> `rename`
+
+Used for renaming topics.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>skin</code></td>
+ <td> skin(s) to use </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>newweb</code></td>
+ <td> new web name </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>newtopic</code></td>
+ <td> new topic name </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>breaklock</code></td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>attachment</code></td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>confirm</code></td>
+ <td> if defined, requires a second level of confirmation </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>currentwebonly</code></td>
+ <td> if defined, searches current web only for links to this topic </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>nonwikiword</code></td>
+ <td> if defined, a non-wikiword is acceptable for the new topic name </td>
+ <td> </td>
+ </tr>
+</table>
+
+### <a name="=resetpasswd="></a> `resetpasswd`
+
+Reset the password for a single or multiple users
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>LoginName</code></td>
+ <td><strong>list</strong> of usernames to reset </td>
+ <td> none - error if not set </td>
+ </tr>
+ <tr>
+ <td><code>Introduction</code></td>
+ <td> message to be sent alongside the reset, most often used to announce to the user that they have been given an account. </td>
+ <td> '' </td>
+ </tr>
+</table>
+
+This is used by [[BulkResetPassword]] and [[ResetPassword]]. Only users belonging to the [[TWikiAdminGroup]] can provide a list of [[LoginNames]], non-admins can only provide a single [[LoginName]].
+
+[[BulkRegistration]] provides the means to create multiple accounts but it does not announce those accounts to the users who own them. [[BulkResetPassword]] is used to assign the passwords, the Introduction is used to explain why they are receiving the mail.
+
+### <a name="=rest="></a> `rest`
+
+This REST ([Representational State Transfer](http://en.wikipedia.org/wiki/REST)) script can be invoked via http in a similar way as the view script (see **Invocation Examples**, below) to execute a function that is associated to a "subject" and a "verb" (see below). It'll print the result directly to the stream unless the `endPoint` parameter is specified, in which case the control is redirected to the given topic.
+
+The `rest` script itself uses one parameter:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>endPoint</code></td>
+ <td> Where to redirect the response once the request is served, in the form "Web.Topic" </td>
+ </tr>
+</table>
+
+Any additional parameters are passed directly to the function (i.e: The function can get any other parameter using the CGI $query object)
+
+#### <a name="Invocation Examples"></a> Invocation Examples
+
+The `rest` script assumes that it will be called with URL in the form:
+
+`http://my.host/bin/rest/<subject>/<verb>`
+
+where `<subject>` must be the [[WikiWord]] name of one of the installed [[TWikiPlugins]], and the `<verb>` is the alias for the function registered using the `registerRESTHandler`. The `<subject>` and `<verb>` are then used to lookup and call the registered function.
+
+Functions outside the Plugins also can be registered, but please consider the security implications of allowing URL access, as functions can sidestep TWiki Authentication & Authorisation settings.
+
+`<subject>` and `<verb>` are checked for illegal characters exactly in the same way as the web and topic names.
+
+As an example, the [[EmptyPlugin]] has registered a function to be used with the `rest` script under the subject **EmptyPlugin** and the verb **example**. Click below to see the `rest` script in action (run as [[TWikiGuest]]).
+
+[Call the Plugin](http://www.dementia.org/twiki/rest/EmptyPlugin/example?debugenableplugin=EmptyPlugin)
+
+You can also call the function from the command line, but this will be run as the [[TWikiAdminGroup]] (as it is assumed that shell access is secure) - eg:
+
+ ./rest EmptyPlugin.example
+
+Note that for calls to Plugins, they must be enabled in `configure`.
+
+### <a name="=save="></a> `save`
+
+The `save` script performs a range of save-related functions, as selected by the `action` parameter.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>action_save=1</code></td>
+ <td><strong>default</strong>; save, return to view, dontnotify is OFF </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_quietsave=1</code></td>
+ <td> save, and return to view, <code>dontnotify</code> is ON </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_checkpoint</code></td>
+ <td> save and redirect to the edit script, <code>dontnotify</code> is ON </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_cancel</code></td>
+ <td> exit without save, return to view </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_preview</code></td>
+ <td> preview edited text </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_addform</code></td>
+ <td> Redirect to the "change form" page. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_replaceform...</code></td>
+ <td> Redirect to the "change form" page. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_delRev</code></td>
+ <td><strong>Administrators only</strong> delete the most recent revision of the topic - all other parameters are ignored. You have to be a member of [[Main/TWikiAdminGroup]] to use this, and not all store implementations will support it. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>action_repRev</code></td>
+ <td><strong>Administrators only</strong> replace the text of the most recent revision of the topic with the text in the <code>text</code> parameter. <code>text</code> must included embedded meta-data tags. All other parameters are ignored. You have to be a member of [[Main/TWikiAdminGroup]] to use this, and not all store implementations will support it. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>onlynewtopic</code></td>
+ <td> If set, error if topic already exists </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>onlywikiname</code></td>
+ <td> If set, error if topic name is not a [[Main/WikiWord]]</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>dontnotify</code></td>
+ <td> if defined, suppress change notification </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>templatetopic</code></td>
+ <td> Name of a topic to use as a template for the text and form </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>text</code></td>
+ <td> New text of the topic </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>forcenewrevision</code></td>
+ <td> if set, forces a revision even if TWiki thinks one isn't needed </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>topicparent</code></td>
+ <td> If 'none' remove any current topic parent. If the name of a topic, set the topic parent to this. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>formtemplate</code></td>
+ <td> if defined, use the named template for the form </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>editaction</code></td>
+ <td> When action is <code>checkpoint</code>, <code>add form</code> or <code>replace form...</code>, this is used as the <code>action</code> parameter to the <code>edit</code> script that is redirected to after the save is complete. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>originalrev</code></td>
+ <td> Revision on which the edit started. </td>
+ <td> </td>
+ </tr>
+</table>
+
+Any errors will cause a redirect to an `oops` page.
+
+The parameters are interpreted in according to the following rules.
+
+1. The first sequence of ten or more `X` characters in the topic name will be converted to a number such that the resulting topic name is unique in the target web.
+2. When the action is `save`, `checkpoint`, `quietsave`, or `preview`:
+ 1. The new text is taken from the `text` parameter, if it is defined,
+ - otherwise it is taken from the `templatetopic`, if it is defined,
+ - otherwise it is taken from the previous version of the topic, if any,
+ 2. The name of the new form is taken from the `formtemplate`, if defined
+ - otherwise it is taken from the `templatetopic`, if defined,
+ - otherwise it is taken from the previous version of the topic, if any,
+ - otherwise no form is attached.
+ 3. The value for each field in the form is taken from the query, if it is defined
+ - otherwise it is taken from the `templatetopic`, if defined,
+ - otherwise it is taken from the previous version of the topic, if any,
+ - otherwise it defaults to the empty string.
+
+Merging is only enabled if the topic text comes from `text` and `originalrev` is > 0 and is not the same as the revision number of the most recent revision. If merging is enabled both the topic and the meta-data are merged.
+
+Form field values are passed in parameters named 'field' - for example, if I have a field `Status` the parameter name is `Status`.
+
+### <a name="=search="></a> `search`
+
+CGI gateway to the `%SEARCH%` functionality driven by the following CGI parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default: </strong></th>
+ </tr>
+ <tr>
+ <td><code>"text"</code></td>
+ <td> Search term. Is a keyword search, literal search or regular expression search, depending on the <code>type</code> parameter. [[Main/SearchHelp]] has more </td>
+ <td> required </td>
+ </tr>
+ <tr>
+ <td><code>search="text"</code></td>
+ <td> (Alternative to above) </td>
+ <td> N/A </td>
+ </tr>
+ <tr>
+ <td><code>web="Name"</code><br /><code>web="Main, Know"</code><br /><code>web="all"</code></td>
+ <td> Comma-separated list of webs to search. The special word <code>all</code> means all webs that doe <strong>not</strong> have the <code>NOSEARCHALL</code> variable set to <code>on</code> in their [[Main/WebPreferences]]. You can specifically <strong>exclude</strong> webs from an <code>all</code> search using a minus sign - for example, <code>web="all,-Secretweb"</code>. </td>
+ <td> Current web </td>
+ </tr>
+ <tr>
+ <td><code>topic="WebPreferences"</code><br /><code>topic="*Bug"</code></td>
+ <td> Limit search to topics: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. </td>
+ <td> All topics in a web </td>
+ </tr>
+ <tr>
+ <td><code>excludetopic="Web*"</code><br /><code>excludetopic="WebHome, WebChanges"</code></td>
+ <td> Exclude topics from search: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. </td>
+ <td> None </td>
+ </tr>
+ <tr>
+ <td><code>type="keyword"</code><br /><code>type="literal"</code><br /><code>type="regex"</code></td>
+ <td> Do a keyword search like <code>soap "web service" -shampoo</code>; a literal search like <code>web service</code>; or [[Main/RegularExpression]] search like <code>soap;web service;!shampoo</code></td>
+ <td><code>%SEARCHVAR- DEFAULTTYPE%</code> [[Main/TWikiPreferences]] setting (%SEARCHVARDEFAULTTYPE%) </td>
+ </tr>
+ <tr>
+ <td><code>scope="topic"</code><br /><code>scope="text"</code><br /><code>scope="all"</code></td>
+ <td> Search topic name (title); the text (body) of topic; or all (both) </td>
+ <td><code>"text"</code></td>
+ </tr>
+ <tr>
+ <td><code>order="topic"</code><br /><code>order="created"</code><br /><code>order="modified"</code><br /><code>order="editby"</code><br /><code>order=<br /> "formfield(name)"</code></td>
+ <td> Sort the results of search by the topic names, topic creation time, last modified time, last editor, or named field of [[Main/TWikiForms]]. The sorting is done web by web; in case you want to sort across webs, create a [[Main/FormattedSearch]] table and sort it with [[Main/TablePlugin]]'s initsort </td>
+ <td> Sort by topic name </td>
+ </tr>
+ <tr>
+ <td><code>limit="all"</code><br /><code>limit="16"</code></td>
+ <td> Limit the number of results returned. This is done after sorting if <code>order</code> is specified </td>
+ <td> All results </td>
+ </tr>
+ <tr>
+ <td><code>date="..."</code></td>
+ <td> limits the results to those pages with latest edit time in the given [[Main/TimeInterval]]. </td>
+ <td> All results </td>
+ </tr>
+ <tr>
+ <td><code>reverse="on"</code></td>
+ <td> Reverse the direction of the search </td>
+ <td> Ascending search </td>
+ </tr>
+ <tr>
+ <td><code>casesensitive="on"</code></td>
+ <td> Case sensitive search </td>
+ <td> Ignore case </td>
+ </tr>
+ <tr>
+ <td><code>bookview="on"</code></td>
+ <td>[[Main/BookView]] search, e.g. show complete topic text </td>
+ <td> Show topic summary </td>
+ </tr>
+ <tr>
+ <td><code>nonoise="on"</code></td>
+ <td> Shorthand for <code>nosummary="on" nosearch="on" nototal="on" zeroresults="off" noheader="on" noempty="on"</code></td>
+ <td> Off </td>
+ </tr>
+ <tr>
+ <td><code>nosummary="on"</code></td>
+ <td> Show topic title only </td>
+ <td> Show topic summary </td>
+ </tr>
+ <tr>
+ <td><code>nosearch="on"</code></td>
+ <td> Suppress search string </td>
+ <td> Show search string </td>
+ </tr>
+ <tr>
+ <td><code>noheader="on"</code></td>
+ <td> Suppress search header <br /><span style="background: #FFB0B0"> <strong>Topics: Changed: By:</strong> </span></td>
+ <td> Show search header </td>
+ </tr>
+ <tr>
+ <td><code>nototal="on"</code></td>
+ <td> Do not show number of topics found </td>
+ <td> Show number </td>
+ </tr>
+ <tr>
+ <td><code>zeroresults="off"</code></td>
+ <td> Suppress all output if there are no hits </td>
+ <td><code>zeroresults="on"</code>, displays: "Number of topics: 0" </td>
+ </tr>
+ <tr>
+ <td><code>noempty="on"</code></td>
+ <td> Suppress results for webs that have no hits. </td>
+ <td> Show webs with no hits </td>
+ </tr>
+ <tr>
+ <td><code>header="..."</code><br /><code>format="..."</code></td>
+ <td> Custom format results: see <strong>[[Main/FormattedSearch]]</strong> for usage, variables & examples </td>
+ <td> Results in table </td>
+ </tr>
+ <tr>
+ <td><code>expandvariables="on"</code></td>
+ <td> Expand variables before applying a [[Main/FormattedSearch]] on a search hit. Useful to show the expanded text, e.g. to show the result of a [[Main/SpreadSheetPlugin]] <code>%CALC{}%</code> instead of the formula </td>
+ <td> Raw text </td>
+ </tr>
+ <tr>
+ <td><code>multiple="on"</code></td>
+ <td> Multiple hits per topic. Each hit can be [[Main/FormattedSearch]]. The last token is used in case of a regular expression ";" <em>and</em> search </td>
+ <td> Only one hit per topic </td>
+ </tr>
+ <tr>
+ <td><code>nofinalnewline="on"</code></td>
+ <td> If <code>on</code>, the search variable does not end in a line by itself. Any text continuing immediately after the search tag on the same line will be rendered as part of the table generated by the search, if appropriate. </td>
+ <td><code>off</code></td>
+ </tr>
+ <tr>
+ <td><code>separator=", "</code></td>
+ <td> Line separator between hits </td>
+ <td> Newline <code>"$n"</code></td>
+ </tr>
+</table>
+
+### <a name="=statistics="></a> `statistics`
+
+Refresh the [[WebStatistics]] topics in range of webs.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>webs</code></td>
+ <td><strong>list</strong> of webs to run stats on </td>
+ <td> none </td>
+ </tr>
+</table>
+
+### <a name="=twiki="></a> `twiki`
+
+Single-script interface to the functionality of all the other scripts. Experimental, not for production use. Read the code if you want to know more.
+
+### <a name="=upload="></a> `upload`
+
+Uploads an attachment to a topic. The HTTP request is expected to be in `multipart/form-data` format.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>hidefile</code></td>
+ <td> if defined, will not show file in attachment table </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>filepath</code></td>
+ <td> local (client) path name of the file being uploaded. This is used to look up the data for the file in the HTTP query. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>filename</code></td>
+ <td> deprecated, do not use </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>filecomment</code></td>
+ <td> Comment to associate with file in attachment table </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>createlink</code></td>
+ <td> if defined, will create a link to file at end of topic </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>changeproperties</code></td>
+ <td> if defined, this is a property change operation <strong>only</strong> - no file will be uploaded. </td>
+ <td> null </td>
+ </tr>
+</table>
+
+You can use a tool like `curl` to upload files from the command line using this script.
+
+### <a name="=view="></a> `view`
+
+Used for viewing topics.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>raw=on</code></td>
+ <td> Shows the text of the topic in a scrollable textarea </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>raw=debug</code></td>
+ <td> As <code>raw=on</code>, but also shows the metadata (forms etc) associated with the topic. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>raw=text</code></td>
+ <td> Shows only the source of the topic, as plain text (Content-type: text/plain). Only shows the body text, <strong>not</strong> the form or other meta-data. </td>
+ </tr>
+ <tr>
+ <td><code>raw=all</code></td>
+ <td> Shows only the source of the topic, as plain text (Content-type: text/plain), <strong>with embedded meta-data</strong>. This may be useful if you want to extract the source of a topic to a local file on disc. </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>contenttype</code></td>
+ <td> Allows you to specify a different <strong>Content-Type:</strong> (e.g. <code>contenttype=text/plain</code>) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>rev</code></td>
+ <td> Revision to view (e.g. <code>rev=45</code>) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>template</code></td>
+ <td> Allows you to specify a different skin template, overriding the 'view' template the view script would normally use. The default template is <code>view</code>. For example, you could specify [[%WEB%/%TOPIC%?template=edit]]. This is mainly useful when you have specialised templates for a TWiki Application. </td>
+ <td> </td>
+ </tr>
+</table>
+
+%X% For historical reasons, the view script has a special interpretation of the `text` skin. In earlier TWiki versions the `skin=text` parameter was used like this: `http://.../view/MyWeb/MyTopic?skin=text&contenttype=text/plain&raw=on` which shows the topic as plain text; useful for those who want to download plain text for the topic. Using `skin=text` this way is **DEPRECATED**, use `raw=text` instead.
+
+### <a name="=viewfile="></a> `viewfile`
+
+Used for viewing attachments. Normally, a site will publish the attachments (`pub`) directory using a URL. However if it contains sensitive information, you will want to protect attachments using [[TWikiAccessControls]]. In this case, you can use the `viewfile` script to give access to attachments while still checking access controls.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default </strong></th>
+ </tr>
+ <tr>
+ <td><code>filename</code></td>
+ <td> name of attachment </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>rev</code></td>
+ <td> Revision to view </td>
+ <td> </td>
+ </tr>
+</table>
+
+## <a name="Command Line Scripts"></a> Command Line Scripts
+
+Details on command line scripts located in the `twiki/tools` directory.
+
+### <a name="=geturl.pl="></a> `geturl.pl`
+
+This is a very simple script to get the content of a web site. It is marked as _deprecated_ and might be removed (or enhanced) in a future TWiki release. Its functions are covered by the standard `wget` and `curl` commands.
+
+- Usage: `geturl <host> <path> [<port> [<header>]]`
+- Example: `geturl some.domain /some/dir/file.html 80`
+- Will get: `http://some.domain:80/some/dir/file.html`
+
+### <a name="=rewriteshebang.pl="></a> `rewriteshebang.pl`
+
+Simple script to rewrite the `#!/usr/bin/perl` shebang lines specific to your local Perl installation. It will rewrite the first line of all your TWiki cgi scripts so they use a different shebang line. Use it if your perl is in a non-standard location, or you want to use a different interpreter (such as 'speedy').
+
+### <a name="=tick_twiki.pl="></a> `tick_twiki.pl`
+
+This script executes a number of non-essential regular administration tasks that will help keep your TWiki healthy and happy, such as removing expired sessions and lease files.
+
+It is intended to be run as a cron job or a scheduled task once a week. Example crontab entry:%BR% `0 0 * * 0 cd /usr/twiki/bin && perl ../tools/tick_twiki.pl`
+
+**_Note:_** The script has to be run by a user who can write files created by the webserver user.
+
+**_Related Topics:_** [[AdminDocumentationCategory]], [[DeveloperDocumentationCategory]]
--- /dev/null
+# <a name="Package <code>TWiki::Search="></a> Package =TWiki::Search
+
+This module implements all the search functionality.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Search="> Package TWiki::Search</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session)"> ClassMethod new <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>get_TextPattern</strong> ("> StaticMethod getTextPattern <tt>($text,$pattern)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>searchWeb</strong> (...)"> ObjectMethod searchWeb <tt>(...)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session)"></a> [[ClassMethod]] **new** `($session)`
+
+Constructor for the singleton Search engine object.
+
+## <a name="StaticMethod <strong>get_TextPattern</strong> ("></a> [[StaticMethod]] **getTextPattern** `($text,$pattern)`
+
+Sanitise search pattern - currently used for [[FormattedSearch]] only
+
+## <a name="ObjectMethod <strong>searchWeb</strong> (...)"></a> [[ObjectMethod]] **searchWeb** `(...)`
+
+Search one or more webs according to the parameters.
+
+If `_callback` is set, that means the caller wants results as soon as they are ready. =\_callback\_ should be set to a reference to a function which takes `_cbdata` as the first parameter and remaining parameters the same as 'print'.
+
+If `_callback` is set, the result is always undef. Otherwise the result is a string containing the rendered search results.
+
+If `inline` is set, then the results are **not** decorated with the search template head and tail blocks.
+
+SMELL: If `format` is set, `template` will be ignored.
+
+SMELL: If `regex` is defined, it will force type='regex'
+
+SMELL: If `template` is defined `bookview` will not work
+
+SMELL: it seems that if you define `_callback` or `inline` then you are responsible for converting the TML to HTML yourself!
+
+FIXME: `callback` cannot work with format parameter (consider format='| $topic |'
- documents and other files can be uploaded and downloaded
- all you need is a Web browser and any available network connection
-### <a name="TWiki is an UNUSUAL Web-based co"></a> TWiki is an UNUSUAL Web-based collaboration platform
+## <a name="TWiki is an UNUSUAL Web-based co"></a> TWiki is an UNUSUAL Web-based collaboration platform
- There's no doubt that, to most people, TWiki at first seems almost the opposite of how the Web and online communications "normally" work. Why?
- TWiki operates like a whiteboard for the Web - it lets you and all other users write, place pictures and post links, anywhere on any page.
- Not only that, everyone can EDIT anything, anywhere on a page.
- At first, this may seem "too" open - it soon becomes second-nature, allowing you the freedom to edit and update the way you want to.
-### <a name="TWiki is a powerful Web enhancem"></a> TWiki is a powerful Web enhancement...
+## <a name="TWiki is a powerful Web enhancem"></a> TWiki is a powerful Web enhancement...
- TWiki's parsing engine is written in Perl. It reads a text file, and converts TWiki shorthand into standard HTML, on the fly. The point is to:
- make adding and editing text simple _(How simple? Click on the **Edit** link at the bottom of the page...)_
- TWiki is one of many [[WikiWikiClones]], based on Ward Cunningham's original [Wiki Wiki Web](http://c2.com/).
-### <a name=""TWiki" stands for..."></a> "TWiki" stands for...
+## <a name=""TWiki" stands for..."></a> "TWiki" stands for...
- _Wiki wiki_ means "quick" in Hawaiian. The shuttle at Honolulu Airport is called the _wiki wiki_ bus, which is where the original Wiki web got its name.
-- _TWiki_ is short for _TakeFive Wiki_, the name of the company where its founder worked. (It was later discovered that _Twiki_ is also the name of an AI robot that co-starred in the [_Buck Rogers..._](http://www.buck-rogers.com/) movie and TV series from 1979 - see TWiki in the logo.)
+- _TWiki_ is short for _TakeFive Wiki_, the name of the company where its founder Peter Thoeny worked. (It was later discovered that _Twiki_ is also the name of an AI robot that co-starred in the [_Buck Rogers_](http://www.buck-rogers.com/) movie and TV series from 1979.)
-### <a name="Selected TWiki Topics..."></a> Selected TWiki Topics...
+## <a name="Selected TWiki Topics..."></a> Selected TWiki Topics...
+- [[WelcomeGuest]] is a fast track guide to TWiki
- [[TWikiSite]] provides a basic big picture overview of the TWiki platform
- [[TWikiTopics]] is a quick and concentrated look at the TWiki core
- [[TWikiPlannedFeatures]] lists approved additions to future TWiki versions.
- [[WikiCulture]] looks at the unique type of collaboration Wiki systems offer.
- [[WikiReferences]] links to articles and books about collaboration and Wiki technology.
-> %X% If you have to log-in to use TWiki, for example, if Twiki is running on an intranet, it automatically signs pages you edit and create with your
+> %X% If you have to log-in to use TWiki, for example, if TWiki is running on an intranet, it automatically signs pages you edit and create with your
>
> [[WikiName]]
>
>
> .
-TWiki<sup>TM</sup> is a trademark of [[PeterThoeny]] - originator and lead developer.
+## <a name="Disclaimer"></a> Disclaimer
+- TWiki™, the TWiki logo and the "Collaborate with TWiki" tagline are trademarks of TWiki:Main.PeterThoeny - founder of TWiki.
- TWiki is developed as Free Software under the [[GNU/GPL|Main/GnuGeneralPublicLicense]]
- TWiki has its root in the GPLed JosWiki. Many thanks to Markus Peter and Dave Harris for creating JosWiki!
-- TWiki's home address is <http://twiki.org/>.
-- Source code is available upon request: see <http://twiki.org/download.html>.
-- [[WelcomeGuest]] is a fast track guide to TWiki.
-- This site is powered by TWiki version **TWiki-4.1.2, Sat, 03 Mar 2007, build 13046**.
+- TWiki's home address is <http://twiki.org/>
+- The latest TWiki release is available from <http://twiki.org/download.html>
+- This site is powered by TWiki version **TWiki-4.1.2, Sat, 03 Mar 2007, build 13046**
--- TWiki:Main.MikeMannix - 12 May 2002 %BR% -- TWiki:Main.PeterThoeny - 16 Dec 2003
+**_Related Topics:_** [[UserDocumentationCategory]]
<div>
<ul>
<li><a href="#TWiki Site Tools"> TWiki Site Tools</a><ul>
- <li><a href="#WebNotify Recent Changes Alert"> WebNotify Recent Changes Alert</a><ul>
- <li><a href="#Configuring Outgoing Mail"> Configuring Outgoing Mail</a></li>
- <li><a href="#Setting the Automatic Email Sche"> Setting the Automatic Email Schedule</a></li>
+ <li><a href="#WebNotify - recent changes alert"> WebNotify - recent changes alert</a></li>
+ <li><a href="#WebSearch - search TWiki site"> WebSearch - search TWiki site</a></li>
+ <li><a href="#WebChanges - what's new"> WebChanges - what's new</a></li>
+ <li><a href="#WebIndex - list of topics"> WebIndex - list of topics</a></li>
+ <li><a href="#WebStatistics - site statistics"> WebStatistics - site statistics</a><ul>
+ <li><a href="#Configuring for automatic operat"> Configuring for automatic operation</a></li>
+ <li><a href="#Generating statistics manually b"> Generating statistics manually by URL</a></li>
</ul>
</li>
- <li><a href="#WebStatistics Site Usage Log"> WebStatistics Site Usage Log</a><ul>
- <li><a href="#Configuring for Automatic Operat"> Configuring for Automatic Operation</a></li>
- <li><a href="#Generating Statistics Manually b"> Generating Statistics Manually by URL</a></li>
- <li><a href="#Log File Details"> Log File Details</a></li>
- </ul>
- </li>
- <li><a href="#WebSearch"> WebSearch</a><ul>
- <li><a href="#WebChanges"> WebChanges</a></li>
- <li><a href="#WebIndex"> WebIndex</a></li>
+ <li><a href="#Log Files"> Log Files</a></li>
+ <li><a href="#E-mail"> E-mail</a><ul>
+ <li><a href="#Configuring outgoing mail"> Configuring outgoing mail</a></li>
+ <li><a href="#Setting the automatic e-mail sch"> Setting the automatic e-mail schedule</a></li>
</ul>
</li>
+ <li><a href="#Site Permissions"> Site Permissions</a></li>
</ul>
</li>
</ul>
_Utilities for searching, navigation, and monitoring site activity_
-[[TWikiSiteTools]] include utilities for navigating, searching and keeping up with site activity. Preferences can be configured by web or site-wide. You are currently in the **TWiki** web. In particular, TWiki provides two highly configurable, automated site monitoring tools, **WebNotify**, to email alerts when topics are edited, and **WebStats**, to generate detailed activity reports.
+TWiki Site Tools include utilities for navigating, searching and keeping up with site activity. Preferences can be configured by web or site-wide. You are currently in the **TWiki** web. In particular, TWiki provides two highly configurable, automated site monitoring tools, **WebNotify**, to e-mail alerts when topics are edited, and **WebStatistics**, to generate detailed activity reports.
+
+<a name="WebNotify"></a>
-## <a name="WebNotify Recent Changes Alert"></a><a name="_WebNotify Recent Changes Alert"></a> WebNotify Recent Changes Alert
+## <a name="WebNotify - recent changes alert"></a><a name="_WebNotify - recent changes aler"></a> WebNotify - recent changes alert
-Each TWiki web has an automatic email alert service that sends a list of recent changes on a preset schedule, like once a day. Users can subscribe and unsubscribe using [[WebNotify]] in each web. The Perl script `mailnotify` is called by a background process at regular intervals. The script sends an automated email to subscribed users if topics were changed in a web since the script was last run.
+Each TWiki web has an automatic e-mail alert service that sends a list of recent changes on a preset schedule, like once a day. Users can subscribe and unsubscribe using [[WebNotify]] in each web. The Perl script `mailnotify` is called by a background process at regular intervals. The script sends an automated e-mail to subscribed users if topics were changed in a web since the script was last run.
- You can create a [[WebNotify]] link using [[TWikiVariables]] with <code>**%NOTIFYTOPIC%**</code>
-You can also use `%MAINWEB%` instead of `Main`, but this is not necessary even if you have renamed the main web by configuring `$mainWebname` in `TWiki.cfg`.
+You can also use `%MAINWEB%` instead of `Main`, but this is not necessary even if you have renamed the main web by configuring `{MainWebName}` in [configure](http://www.dementia.org/twiki/configure).
-### <a name="Configuring Outgoing Mail"></a> Configuring Outgoing Mail
+<a name="WebSearch"></a>
-%WIKITOOLNAME% will use the <code>**Net::SMTP**</code> module if it is installed on your system. Set this with the <code>**SMTPMAILHOST**</code> variable in [[TWikiPreferences]].
+## <a name="WebSearch - search TWiki site"></a><a name="_WebSearch - search TWiki site"></a> WebSearch - search TWiki site
-The notify e-mail uses the default `changes.tmpl` template, or a skin if activated in the [[TWikiPreferences]].
+[[WebSearch]] is an extremely fast and flexible search facility, part of the core TWiki feature set. [[WebSearchAdvanced]] offers more options, including:
+
+- topic title or full-text search
+- regular expressions
+- search within web or site-wide
+- index-style A-Z alphabetical listing sorted topic title
+- many more
-mailnotify also relies on two hidden files in each `TWiki/data/[web]` directory: `.changes` and `.mailnotify.` Make sure both are writable by your web server process. `.changes` contains a list of changes; go ahead and make this empty. `.mailnotify` contains a timestamp of the last time notification was done.
+See also: [[SearchHelp]] for help; [[TWikiVariables]] and [[FormattedSearch]] for including hard-coded searches in text.
-You can use an external mail program, like <code>**sendmail**</code>, if the `Net::SMTP` module is not installed. Set the program path in <code>**$mailProgram**</code> in <code>**TWiki.cfg**</code>.
+<a name="WebChanges"></a>
-- %H% Net::SMTP can be easily disabled (ex: if there is an installation error) by setting <code>**SMTPMAILHOST**</code> in [[TWikiPreferences]] to an empty value.
+## <a name="WebChanges - what's new"></a><a name="_WebChanges - what's new"></a> WebChanges - what's new
-- %T% You can set a separate <code>**SMTPSENDERHOST**</code> variable to define the mail sender host (some SMTP installations require this).
+To check for the most recently edited topics while on-site, use the [[WebChanges]] link, usually located in the toolbar. It lists the most recently modified topics, newest first, along with the first couple of lines of the page content.
-### <a name="Setting the Automatic Email Sche"></a> Setting the Automatic Email Schedule
+This is simply a preset `SEARCH`. The number of topics listed by the `limit` parameter.:
-**For Unix platforms:** Edit the `cron` table so that `mailnotify` is called in an interval of your choice. Please consult `man crontab` of how to modify the table that schedules program execution at certain intervals. Example:
+> %SEARCH{ ".*" web="%INCLUDINGWEB%" regex="on" nosearch="on" order="modified"%BR% reverse="on" limit="50" }%
- % crontab -e
- 0 2 * * * (cd /path/to/twiki/bin; ./mailnotify -q)
+<a name="WebIndex"></a>
-The above line will run mailnotify nightly at 02:00. The `-q` switch suppresses all normal output.
+## <a name="WebIndex - list of topics"></a><a name="_WebIndex - list of topics"></a> WebIndex - list of topics
-**For ISP installations:** Many ISPs don't allow hosted accounts direct cron access, as it's often used for things that can heavily load the server. Workaround scripts are available.
+[[WebIndex]] lists all web topics in alphabetical order, with the first couple of lines of text. This is simply a preset `SEARCH`:
-**On Windows NT/2000:** You can use a scheduled task if you have administrative privileges. **_Note:_** AT on an NT machine is pretty limited. Microsoft lists several third-party [replacements](http://www.microsoft.com/ntserver/partners/findoffering/serversolutions/Maintnce.asp#cron). TWiki:Codev/CronTabWin is a free scheduler for Windows.
+> %SEARCH{ "\.*" scope="topic" regex="on" nosearch="on" }%
-## <a name="WebStatistics Site Usage Log"></a><a name="_WebStatistics Site Usage Log"></a> WebStatistics Site Usage Log
+<a name="WebStatistics"></a>
+
+## <a name="WebStatistics - site statistics"></a><a name="_WebStatistics - site statistics"></a> WebStatistics - site statistics
You can generate a listing manually, or on an automated schedule, of visits to individual pages, on a per web basis. Compiled as a running total on a monthly basis. Includes totals for Topic Views, Topic Saves, Attachment Uploads, Most Popular Topics with number of views, and Top Contributors showing total of saves and attachment uploads. Previous months are saved.
- You can create a [[WebStatistics]] link using [[TWikiVariables]] with <code>**%STATISTICSTOPIC%**</code>
-### <a name="Configuring for Automatic Operat"></a> Configuring for Automatic Operation
+### <a name="Configuring for automatic operat"></a> Configuring for automatic operation
- You can automatically generate usage statistics for all webs. To enable this:
- - Make sure variable `$doLogTopicView, $doLogTopicSave and $doLogTopicUpload` in `TWiki.cfg` are set. This will generate log file entries (see below).
+ - Make sure variable **\{Log\}\{view\}**, **\{Log\}\{save\}** and \*\{Log\}\{upload\} in are set in [configure](http://www.dementia.org/twiki/configure). This will generate log file entries (see below).
- The [[WebStatistics]] topic must be present in all webs where you want to have statistics. You can use the topic in the Main web as a template.
- Call the `twiki/bin/statistics` script from a cron job, once a day is recommended. This will update the [[WebStatistics]] topics in all webs.
- - **_Attention:_** The script must run as the same user as the CGI scripts are running, which is user `nobody` on many systems. Example crontab entry: <br />`0 0 * * * (cd /path/to/TWiki/bin; ./statistics >/dev/null 2>&1)`
- - There is a workaround in case you can't run the script as user `nobody` : Run the utility `twiki/bin/geturl` in your cron job and specify the URL of the `twiki/bin/statistics` script as a parameter. Example: <br />`0 0 * * * (cd /path/to/TWiki/bin; ./geturl mydomain.com /urlpath/to/TWiki/bin/statistics >/dev/null 2>&1)`
+ - **_Attention:_** The script must run as the same user as the CGI scripts are running, which is user `nobody` on many systems. Example crontab entry: %BR% `0 0 * * * (cd /path/to/twiki/bin; ./statistics >/dev/null 2>&1)`
+ - There is a workaround in case you can't run the script as user `nobody` : Run the utility `twiki/bin/geturl` in your cron job and specify the URL of the `twiki/bin/statistics` script as a parameter. Example: %BR% `0 0 * * * (cd /path/to/twiki/bin; ./geturl mydomain.com /urlpath/to/twiki/bin/statistics >/dev/null 2>&1)`
-### <a name="Generating Statistics Manually b"></a> Generating Statistics Manually by URL
+### <a name="Generating statistics manually b"></a> Generating statistics manually by URL
- The `twiki/bin/statistics` script can also be executed as a CGI script, just enter the URL in your browser. Examples:
- - Update current month for all webs: <br />`http://mydomain.com/twiki/bin/statistics`
- - Update current month for Main web only: <br />`http://mydomain.com/twiki/bin/statistics/Main`
- - Update January 2000 for Main web: <br />`http://mydomain.com/twiki/bin/statistics/Main?logdate=200001`
+ - Update current month for all webs: %BR% `http://www.dementia.org/twiki/statistics`
+ - Update current month for Main web only: %BR% `http://www.dementia.org/twiki/statistics/Main`
+ - Update January 2000 for Main web: %BR% `http://www.dementia.org/twiki/statistics/Main?logdate=201006`
+
+<a name="LogFiles"></a>
-### <a name="Log File Details"></a> Log File Details
+## <a name="Log Files"></a> Log Files
-TWiki generates monthly log files which are used by the statistics
+TWiki generates monthly log files which are used by the statistics script
-- The log directory is defined by the `$logDir` variable in TWiki.cfg
+- The log file is defined by the **\{LogFileName\}** setting in [configure](http://www.dementia.org/twiki/configure)
- The file name is `log<year><month>.txt`
-- Example path name: `twiki/data/log201006.txt`
+- Example path name: `twiki/logs/log201006.txt`
- Each access gets logged as: %BR% `| <time> | <wikiusername> | <action> | <web>.<topic> | <extra info> | <IP address> |`
-- Example log entry: %BR% `| 29 Jun 2010 - 11:48 | Main.TWikiGuest | view | TWiki.WebRss | | 66.124.232.02 |`
-- Actions are logged if enabled in TWiki.cfg by the `$doLogTopic<action>` flags
+- Example log entry: %BR% <code>| 29 Jun 2010 - 11:57 | [[TWikiGuest]] | view | [[WebRss]] | | 66.124.232.02 |</code>
+- Actions are logged if enabled in [configure](http://www.dementia.org/twiki/configure) by the **\{Log\}\{_action_\}** flags
- Logged actions: <table border="1" cellpadding="0" cellspacing="0">
<tr>
<th bgcolor="#99CCCC"><strong> Script </strong></th>
<td> when editing non-existing topic: <code>(not exist)</code></td>
</tr>
<tr>
- <td> register </td>
- <td><code>register</code></td>
- <td> E-mail address </td>
+ <td> rdiff </td>
+ <td><code>rdiff</code></td>
+ <td> higher and lower revision numbers: <code>4 3</code></td>
</tr>
<tr>
- <td> save </td>
- <td><code>save</code></td>
- <td> when replacing existing revision: <code>repRev 1.3</code> %BR% when user checks the minor changes box: <code>dontNotify</code></td>
+ <td> register </td>
+ <td><code>regstart</code></td>
+ <td> WikiUserName, e-Mail address, [[Main/LoginName]]: <code>user attempts to register</code></td>
</tr>
<tr>
- <td> search </td>
- <td><code>search</code></td>
- <td> search string </td>
+ <td> register </td>
+ <td><code>register</code></td>
+ <td> E-mail address: <code>user successfully registers</code></td>
</tr>
<tr>
- <td> rdiff </td>
- <td><code>rdiff</code></td>
- <td><code>1.4 1.3</code></td>
+ <td> register </td>
+ <td><code>bulkregister</code></td>
+ <td> WikiUserName of new, e-mail address, admin ID </td>
</tr>
<tr>
<td> rename </td>
<td> when moving attachment: <code>Attachment filename moved to Newweb.NewTopic</code></td>
</tr>
<tr>
+ <td> passwd </td>
+ <td><code>resetpasswd</code></td>
+ <td>[[Main/LoginName]], [[Main/WikiName]], E-mail address, success code from addUserPassword </td>
+ </tr>
+ <tr>
+ <td> passwd </td>
+ <td><code>changepasswd</code></td>
+ <td>[[Main/LoginName]], [[Main/WikiName]]</td>
+ </tr>
+ <tr>
+ <td> save </td>
+ <td><code>save</code></td>
+ <td> when replacing existing revision: <code>repRev 3</code> %BR% when user checks the minor changes box: <code>dontNotify</code></td>
+ </tr>
+ <tr>
+ <td> search </td>
+ <td><code>search</code></td>
+ <td> search string </td>
+ </tr>
+ <tr>
<td> upload </td>
<td><code>upload</code></td>
<td> filename </td>
<tr>
<td> view </td>
<td><code>view</code></td>
- <td> when viewing non-existing topic: <code>(not exist)</code> %BR% when viewing previous topic revision: <code>r1.3</code></td>
+ <td> when viewing non-existing topic: <code>(not exist)</code> %BR% when viewing previous topic revision: <code>r3</code></td>
</tr>
</table>
-## <a name="WebSearch"></a><a name="_WebSearch"></a> WebSearch
+<a name="ConfigureEmail"></a>
-[[WebSearch]] is an extremely fast and flexible search facility, part of the core TWiki feature set. Options include:
+## <a name="E-mail"></a> E-mail
-- topic title or full-text search
-- regular expressions
-- search within web or site-wide
-- index-style A-Z alphabetical listing sorted topic title
-- many more
+### <a name="Configuring outgoing mail"></a> Configuring outgoing mail
-See also: [[TWikiVariables]] for including hard-coded searches in text.
+Outgoing mail is required for [[TWikiRegistration]] and for [[recent changes alert|Main/WebHome#WebNotify]].
-### <a name="WebChanges"></a><a name="_WebChanges"></a> WebChanges
+TWiki will use the <code>**Net::SMTP**</code> module if it is installed on your system. Set this with the <code>**SMTPMAILHOST**</code> variable in [[TWikiPreferences]].
-To check for the most recently edited topics while on-site, use the [[WebChanges]] link, usually located on the upper toolbar. It lists the most recently modified topics, newest first, along with the first couple of lines of the page content.
+The notify e-mail uses the default `changes.tmpl` template, or a skin if activated in the [[TWikiPreferences]].
-This is simply a preset `SEARCH`. The number of topics listed by the `limit` parameter.:
+mailnotify also relies on two hidden files in each `twiki/data/Web` directory: `.changes` and `.mailnotify.` Make sure both are writable by your web server process. `.changes` contains a list of changes; go ahead and make this empty. `.mailnotify` contains a timestamp of the last time notification was done.
-> <pre>
-> %SEARCH{".*" web="%INCLUDINGWEB%" regex="on" nosearch="on" order="modified" <br />reverse="on" limit="50"}%
-> </pre>
+You can use an external mail program, such as <code>**sendmail**</code>, if the `Net::SMTP` module is not installed. Set the program path in <code>**\{MailProgram\}**</code> in [configure](http://www.dementia.org/twiki/configure).
-### <a name="WebIndex"></a><a name="_WebIndex"></a> WebIndex
+- %H% Net::SMTP can be easily disabled (if there is an installation error) by setting <code>**SMTPMAILHOST**</code> in [[TWikiPreferences]] to an empty value.
-[[WebIndex]] lists all web topics in alphabetical order, with the first couple of lines of text. This is simply a preset `SEARCH`:
+- %T% You can set a separate <code>**SMTPSENDERHOST**</code> variable to define the mail sender host (some SMTP installations require this).
+
+### <a name="Setting the automatic e-mail sch"></a> Setting the automatic e-mail schedule
+
+**For Unix platforms:** Edit the `cron` table so that `mailnotify` is called in an interval of your choice. Please consult `man crontab` of how to modify the table that schedules program execution at certain intervals. Example:
+
+ % crontab -e
+ 0 2 * * * (cd /path/to/twiki/bin; ./mailnotify -q)
+
+The above line will run mailnotify nightly at 02:00. The `-q` switch suppresses all normal output.
+
+**For ISP installations:** Many ISPs don't allow hosted accounts direct cron access, as it's often used for things that can heavily load the server. Workaround scripts are available.
+
+**On Windows:** You can use a scheduled task if you have administrative privileges. TWiki:Codev/CronTabWin is a free scheduler for Windows.
+
+## <a name="Site Permissions"></a> Site Permissions
-> %SEARCH{"\.*" scope="topic" regex="on" nosearch="on"}%
+- [[TWikiAccessControl]] describes how to restrict read and write access to topics and webs, by users and groups
+- [[SitePermissions]] lists the permissions settings of the webs on this TWiki site
--- TWiki:Main.MikeMannix - 01 Dec 2001 %BR% -- TWiki:Main.PeterThoeny - 28 Aug 2004
+**_Related Topics:_** [[AdminDocumentationCategory]], [[AdminToolsCategory]]
<div>
<h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </div>
+**_Tip:_** Additional skins can be downloaded from TWiki:Plugins.SkinPackage
+
**_Note:_** [[TWikiSkins]] describes how to install and activate a skin
--- TWiki:Main.PeterThoeny - 25 Jul 2004
+**_Related Topics:_** [[TWikiSkins]], [[AdminDocumentationCategory]], [[UserDocumentationCategory]]
<ul>
<li><a href="#TWiki Skins"> TWiki Skins</a><ul>
<li><a href="#Overview"> Overview</a></li>
+ <li><a href="#Changing the default TWiki skin"> Changing the default TWiki skin</a></li>
<li><a href="#Defining Skins"> Defining Skins</a></li>
<li><a href="#Variables in Skins"> Variables in Skins</a><ul>
<li><a href="#The "Go" Box and Navigation Box"> The "Go" Box and Navigation Box</a></li>
<li><a href="#Packaging and Publishing Skins"> Packaging and Publishing Skins</a></li>
<li><a href="#Browsing Installed Skins"> Browsing Installed Skins</a></li>
<li><a href="#Activating Skins"> Activating Skins</a></li>
+ <li><a href="#Hard-Coded Skins"> Hard-Coded Skins</a></li>
</ul>
</li>
</ul>
# <a name="TWiki Skins"></a> TWiki Skins
-_Skins overlay regular templates with alternate header/footer layouts; topic text is not affected_
+_Skins overlay regular templates to give different looks and feels to TWiki screens._
## <a name="Overview"></a> Overview
-Skins are customized [[TWikiTemplates]] files. You can use skins to change the look of a %WIKITOOLNAME% topic, for example, the layout of the header and footer. Rendered text between header and footer does **_not_** change. You can also use skins to define an alternate view, like a view optimized for printing.
+TWiki uses [[TWikiTemplates]] files as the basis of all the screens it uses to interact with users. Each screen has an associated template file that contains the basic layout of the screen. This is then filled in by the code to generate what you see in the browser.
-## <a name="Defining Skins"></a> Defining Skins
+TWiki ships with a default set of template files that give a basic look-and-feel. TWiki also includes support for _skins_ that can be selected to give different, more sophisticated, look and feels. A default TWiki installation will usually start up with the [[PatternSkin]] already selected. Skins may also be defined by third parties and loaded into a TWiki installation to give more options. To see how TWiki looks when **no** skin is selected, [[view this topic with a non-existant skin|%WEB%/%TOPIC%?skin=not_a_skin]].
+
+Topic text is not affected by the choice of skin, though a skin can be defined to use a CSS (Cascading Style Sheet), which can sometimes give a radically different appearance to the text.
+
+**_%T% Tip:_** TWiki:TWiki.TWikiSkinsSupplement on TWiki.org has supplemental documentation on TWiki Skins.
+
+## <a name="Changing the default TWiki skin"></a> Changing the default TWiki skin
-Skin files are located in the `twiki/templates` directory and are named with the syntax: <code>**<scriptname>.<skin>.tmpl**</code>. For example, the **Printable** skin for the `view` template is `view.print.tmpl`.
+TWiki default ships with the skin [[PatternSkin]] activated. If you want to modify the layout, colors or even the templates to suit your own needs, have a look first at the topics [[PatternSkinCustomization]] and [[PatternSkinCssCookbook]].
-Use the existing [[TWikiTemplates]] (like `view.tmpl`) or skin files as a base for your own skin, name it for example `view.myskin.tmpl`.
+## <a name="Defining Skins"></a> Defining Skins
+
+You may want to define your own skin, for example to comply with corporate web guidelines, or because you have a aesthetic vision that you want to share.
+
+The [[TWikiTemplates]] files used for skins are located in the `twiki/templates` directory and are named according to the skin: <code>**<scriptname>.<skin>.tmpl**</code>. For example, the template used for pages generated by the `view` script with the `print` skin selected is `view.print.tmpl` (this is how the **Printable** control is implemented). Skin files may also be defined in TWiki topics - see [[TWikiTemplates]] for details.
+
+To start creating a new skin, copy the default [[TWikiTemplates]] (like `view.tmpl`), or copy an existing skin to use as a base for your own skin. You should only need to copy the files you intend to customise, as TWiki can be configured to fall back to another skin if a template is not defined in your skin. Name the files as described above (for example `view.myskin.tmpl`.
+
+**_%X% Note:_** Two skin names have _reserved_ meanings; `text` skin, and skin names starting with `rss` have [[hard-coded meanings|Main/WebHome#HardCodedSkins]].
+
+The following template files are used for TWiki screens, and are referenced in the TWiki core code. If a skin doesn't define its own version of a template file, then TWiki will fall back to the next skin in the skin path, or finally, to the default version of the template file.
+
+(Certain template files are expected to provide certain TMPL:DEFs - these are listed in sub-bullets)
+
+- `addform` - used to select a new form for a topic
+- `attachagain` - used when refreshing an existing attachment
+- `attachnew` - used when attaching a new file to a topic
+- `attachtables` - defines the format of attachments at the bottom of the standard topic view
+ - `ATTACH:files:footer`, `ATTACH:files:header`, `ATTACH:files:row`, `ATTACH:versions:footer`, `ATTACH:versions:header`, `ATTACH:versions:row`
+- `changeform` - used to change the form in a topic
+- `changes` - used by the `changes` script
+- `edit` - used for the edit screen
+- `form`
+- `formtables` - used to defined the format of forms
+ - `FORM:display:footer`, `FORM:display:header`, `FORM:display:row`
+- `login` - used for loggin in when using the TemplateLoginManager
+ - `LOG_IN`, `LOG_IN_BANNER`, `LOG_OUT`, `LOGGED_IN_BANNER`, `NEW_USER_NOTE`, `UNRECOGNISED_USER`
+- `moveattachment` - used when moving an attachment
+- `oopsaccessdenied` - used to format Access Denied messages
+ - `no_such_topic`, `no_such_web`, `only_group`, `topic_access`
+- `oopsattention` - used to format Attention messages
+ - `already_exists`, `bad_email`, `bad_ver_code`, `bad_wikiname`, `base_web_missing`, `confirm`, `created_web`, `delete_err`, `invalid_web_color`, `invalid_web_name`, `in_a_group`, `mandatory_field`, `merge_notice`, `missing_action`, `missing_fields`, `move_err`, `missing_action`, `no_form_def`, `no_users_to_reset`, `notwikiuser`, `oversized_upload`, `password_changed`, `password_mismatch`, `problem_adding`, `remove_user_done`, `rename_err`, `rename_not_wikiword`, `rename_topic_exists`, `rename_web_err`, `rename_web_exists`, `rename_web_prerequisites`, `reset_bad`, `reset_ok`, `save_error`, `send_mail_error`, `thanks`, `topic_exists`, `unrecognized_action`, `upload_name_changed`, `web_creation_error`, `web_exists`, `web_missing`, `wrong_password`, `zero_size_upload`
+- `oopschangelanguage` - used to prompt for a new language when internationalisation is enabled
+- `oopslanguagechanged` - used to confirm a new language when internationalisation is enabled
+- `oopsleaseconflict` - used to format lease Conflict messages
+ - `lease_active`, `lease_old`
+- `preview` - used for previewing edited topics before saving
+- `rdiff` - used for viewing topic differences
+- `registernotify` - used by the user registration system
+- `registernotifyadmin` - used by the user registration system
+- `rename` - used when renaming a topic
+- `renameconfirm` - used when renaming a topic
+- `renamedelete` - used when renaming a topic
+- `renameweb` - used when renaming a web
+- `renamewebconfirm` - used when renaming a web
+- `renamewebdelete` - used when renaming a web
+- `searchbookview` - used to format inline search results in book view
+- `searchformat` - used to format inline search results
+- `search` - used by the `search` CGI script
+- `settings`
+- `view` - used by the `view` CGI script
+
+`twiki.tmpl` is a master template conventionally used by other templates, but not used directly by code.
+
+**_%X% Note:_** You are strongly recommended **not** to `TMPL:INCLUDE` the default templates, or templates from other skins, when you are defining your own skin. If you do, you run the risk that the included file might change and break your skin.
## <a name="Variables in Skins"></a> Variables in Skins
<th bgcolor="#99CCCC"><strong> Expanded to: </strong></th>
</tr>
<tr>
+ <td><code>%WEBLOGONAME%</code></td>
+ <td> Filename of web logo </td>
+ </tr>
+ <tr>
+ <td><code>%WEBLOGOIMG%</code></td>
+ <td> Image URL of web logo </td>
+ </tr>
+ <tr>
+ <td><code>%WEBLOGOURL%</code></td>
+ <td> Link of web logo </td>
+ </tr>
+ <tr>
+ <td><code>%WEBLOGOALT%</code></td>
+ <td> Alt text of web logo </td>
+ </tr>
+ <tr>
<td><code>%WIKILOGOURL%</code></td>
<td> Link of page logo </td>
</tr>
</tr>
<tr>
<td><code>%WEBBGCOLOR%</code></td>
- <td> Web specific background color, defined in the [[Main/WebPreferences]]</td>
+ <td> Web-specific background color, defined in the [[Main/WebPreferences]]</td>
</tr>
<tr>
<td><code>%WIKITOOLNAME%</code></td>
<td> The script URL of TWiki </td>
</tr>
<tr>
+ <td><code>%SCRIPTURLPATH%</code></td>
+ <td> The script URL path </td>
+ </tr>
+ <tr>
<td><code>%SCRIPTSUFFIX%</code></td>
<td> The script suffix, ex: <code>.pl</code>, <code>.cgi</code></td>
</tr>
<tr>
<td><code>%WEB%</code></td>
- <td> The name of the current web. <strong><em>Note:</em></strong> It is recommended to URL-encode the variable in form actions with <code>%INTURLENCODE{"%WEB%"}%</code> for proper handling in an internationalized environment </td>
+ <td> The name of the current web. </td>
</tr>
<tr>
<td><code>%TOPIC%</code></td>
- <td> The name of the current topic. <strong><em>Note:</em></strong> It is recommended to URL-encode the variable in form actions with <code>%INTURLENCODE{"%TOPIC%"}%</code> for proper handling in an internationalized environment </td>
+ <td> The name of the current topic. </td>
</tr>
<tr>
<td><code>%WEBTOPICLIST%</code></td>
</tr>
<tr>
<td><code>%BROADCASTMESSAGE%</code></td>
- <td> Broadcast message at the beginning of your view template, can be used to alert users of scheduled downtimes; is set in [[Main/TWikiPreferences]]</td>
+ <td> Broadcast message at the beginning of your view template, can be used to alert users of scheduled downtimes; can be set in [[Main/TWikiPreferences]]</td>
</tr>
</table>
### <a name="The "Go" Box and Navigation Box"></a> The "Go" Box and Navigation Box
-The `%WEBTOPICLIST%` includes a "Go" box to jump to a topic. The box also understand URLs, e.g. you can type <http://www.google.com/> to jump to an external web site. The feature is handy if you build a skin that has a select box of frequently used links, like Intranet home, employee database, sales database and such. A little JavaScript gets into action on the onSelect method of the select tag to fill the selected URL into the "Go" box field, then submits the form.
+The default `%WEBTOPICLIST%` includes a "Go" box, also called "Jump" box, to jump to a topic. The box also understands URLs, e.g. you can type <http://www.google.com/> to jump to an external web site. The feature is handy if you build a skin that has a select box of frequently used links, like Intranet home, employee database, sales database and such. A little JavaScript gets into action on the onSelect method of the select tag to fill the selected URL into the "Go" box field, then submits the form.
Here is an example form that has a select box and the "Go" box for illustration purposes. You need to have JavaScript enabled for this to work:
-<form action="http://www.dementia.org/twiki//view/%WEB%/%TOPIC%" name="sample">
+<form action="http://www.dementia.org/twiki/view/%WEB%/%TOPIC%" name="sample">
<table border="3">
<tr>
<td><select name="sel" onchange="this.form.topic.value=this.options[this.selectedIndex].value; this.form.submit()"><option selected value="">Navigate...</option>
## <a name="Using Cascading Style Sheets"></a> Using Cascading Style Sheets
-Although work is underway at TWiki:Codev.CssClassNames, the regular templates files currently do not use style sheets. Many skin developers, however, choose to use them; it helps in separating style from content.
-
-Example: To use a style sheet for the broadcast message, add this to `view.myskin.tmpl`:
+CSS is used by [[PatternSkin]], the TWiki skin that is selected in new installations. See that skin topic for information how CSS is used.
- <style type="text/css">
- .broadcastmessage {
- background: yellow; display:block;
- border-style:solid;border-width: 2px;border-color:red;
- }
- .broadcastmessage strong {color: red}
- </style>
+CSS files are gererally attachments to the skin topic that are included in the the skin templates - in the case of [[PatternSkin]] in the template `css.pattern.tmpl`.
-Then add a div tag to the `%BROADCASTMESSAGE%` variable located after the `#PageTop` anchor or after the opening form tag:
+Write in your main template:
- <div class="broadcastmessage"> %BROADCASTMESSAGE% </div>
+ <style type='text/css' media='all'>@import url('%PUBURLPATH%/%TWIKIWEB%/MySkin/mystyle.css');</style>
## <a name="Attachment Tables"></a> Attachment Tables
-Controlling the look and feel of attachment tables is a little bit more complex than for the rest of a skin. By default the attachment table is a standard TWiki table, and the look is controlled in the same ay as other tables. In a very few cases you may want to change the _content_ of the table as well.
+Controlling the look and feel of attachment tables is a little bit more complex than for the rest of a skin. By default, the attachment table is a standard TWiki table, and the look is controlled in the same way as other tables. In a very few cases you may want to change the _content_ of the table as well.
-The format of standard attachment tables is defined through the use of special _TWiki template macros_ which by default are defined in the `templates/twiki.tmpl` template using the `%TMPL:DEF` macro syntax described in [[TWikiTemplates]]. These macros are:
+The format of standard attachment tables is defined through the use of special _TWiki template macros_ which by default, are defined in the `attachtables.tmpl` template using the `%TMPL:DEF` macro syntax described in [[TWikiTemplates]]. These macros are:
<table border="1" cellpadding="0" cellspacing="0">
<tr>
</tr>
</table>
-The format of tables of file versions in the Upload screen are also formattable, using the macros:
+The format of tables of file versions in the Upload screen can also be changed, using the macros:
<table border="1" cellpadding="0" cellspacing="0">
<tr>
</tr>
<tr>
<td><code>%A_REV%</code></td>
- <td> Revision of this file e.g. "1.1" </td>
+ <td> Revision of this file </td>
</tr>
<tr>
<td><code>%A_ICON%</code></td>
</tr>
</table>
-Note: it is easy to change the look and feel for an entire site by editing the `twiki.tmpl` template file. However, to simplify upgrading, you should avoid doing this. Instead, write a skin-specific template file e.g. `attach.myskin.tmpl` and use `%TMPL:INCLUDE{attach.myskin.tmpl}%` to include it in each of your skin files. As long as it it included _after_ twiki.tmpl, your macro definitions will override the defaults defined there.
-
## <a name="Packaging and Publishing Skins"></a> Packaging and Publishing Skins
See TWiki:Plugins/SkinPackagingHowTo and TWiki:Plugins/SkinDeveloperFAQ
## <a name="Browsing Installed Skins"></a> Browsing Installed Skins
-You can try all installed skins in [[TWikiSkinBrowser]].
+You can try out all installed skins in the [[TWikiSkinBrowser]].
## <a name="Activating Skins"></a> Activating Skins
-A skin can be activated in two ways:
+TWiki uses a _skin search path_, which lets you combine skins additively. The skin path is defined using a combination of [[TWikiVariables]] and URL parameters.
+
+TWiki works by asking for a template for a particular function - for example, 'view'. The detail of how templates are searched for is described in [[TWikiTemplates]], but in summary, the templates directory is searched for a file called `view.`_skin_`.tmpl`, where _skin_ is the name of the skin e.g. `pattern`. If no template is found, then the fallback is to use `view.tmpl`. Each skin on the path is searched for in turn. For example, if you have set the skin path to `local,pattern` then `view.local.tmpl` will be searched for first, then `view.pattern.tmpl` and finally `view.tmpl`.
+
+The basic skin is defined by a `SKIN` setting:
+
+- `Set SKIN = catskin, bearskin`
+
+You can also add a parameter to the URL, such as `?skin=catskin, bearskin`. Example activation of [[PrintSkin]] that generates a printable page:
+
+- [[http://www.dementia.org/twiki/view/%WEB%/%TOPIC%?skin=print|%WEB%/%TOPIC%?skin=print]]
+
+Setting `SKIN` (or the `?skin` parameter in the URL) replaces the existing skin path setting. You can also _extend_ the existing skin path as well, using _covers_.
+
+- `Set COVER = ruskin`
+
+This pushes a different skin to the front of the skin search path (so for our example above, that final skin path will be `ruskin, catskin, bearskin`). There is also an equivalent `cover` URL parameter.
+
+The full skin path is built up as follows: `SKIN` setting (or `?skin` if it is set), then `COVER` setting is added, then `?cover`.
+
+<a name="HardCodedSkins"></a>
+
+## <a name="Hard-Coded Skins"></a> Hard-Coded Skins
-- Define the `SKIN` Preference variable in [[TWikiPreferences]], one of the [[WebPreferences]], or in a user - Main.admin - topic.
- - `Set SKIN = print`
+The `text` skin is reserved for TWiki internal use.
-- Add `?skin=name` to the URL, for this example:
- - <http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?skin=print> (for the print view skin)
- - <http://www.dementia.org/twiki//view/%WEB%/%TOPIC%?skin=plain> (for the plain view skin that has no header and footer)
+Skin names starting with `rss` also have a special meaning; if one or more of the skins in the skin path starts with 'rss' then 8-bit characters will be encoded as XML entities in the output, and the `content-type` header will be forced to `text/xml`.
-The <code>**?skin=name**</code> URL parameter overrides the SKIN Preference value.
+**_Related Topics:_** [[TWikiSkinBrowser]], [[AdminDocumentationCategory]], [[DeveloperDocumentationCategory]], TWiki:TWiki.TWikiSkinsSupplement
--- TWiki:Main.PeterThoeny - 25 Jul 2004 %BR% -- TWiki:Main.CrawfordCurrie - 30 Jun 2004 %BR%
+-- **_Contributors:_** TWiki:Main.PeterThoeny, TWiki:Main.MikeMannix, TWiki:Main.CrawfordCurrie
--- /dev/null
+# <a name="Package <code>TWiki::Store="></a> Package =TWiki::Store
+
+This module hosts the generic storage backend. This module provides the interface layer between the "real" store provider - which is hidden behind a handler - and the rest of the system. it is responsible for checking for topic existance, access permissions, and all the other general admin tasks that are common to all store implementations.
+
+This module knows nothing about how the data is actually _stored_ - that knowledge is entirely encapsulated in the handlers.
+
+The general contract for methods in the class requires that errors are signalled using exceptions. TWiki::AccessControlException is used for access control exceptions, and Error::Simple for all other types of error.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Store="> Package TWiki::Store</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ()"> ClassMethod new <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>readTopic</strong> ($user,"> ObjectMethod readTopic <tt>($user,$web,$topic,$version) -> ($metaObject,$text)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>read_TopicRaw</strong> ($u"> ObjectMethod readTopicRaw <tt>($user,$web,$topic,$version) -> $topicText</tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveAttachment</strong> ($"> ObjectMethod moveAttachment <tt>($oldWeb,$oldTopic,$oldAttachment,$newWeb,$newTopic,$newAttachment,$user)</tt></a></li>
+ <li><a href="#ObjectMethod *get_AttachmentStre"> ObjectMethod getAttachmentStream <tt>($user,$web,$topic,$attName) -> \*STREAM</tt></a></li>
+ <li><a href="#ObjectMethod *get_AttachmentList"> ObjectMethod getAttachmentList <tt>($web,$topic)</tt></a></li>
+ <li><a href="#ObjectMethod *attachmentExists*"> ObjectMethod attachmentExists <tt>($web,$topic,$att) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod *_remove_AutoAttach"> ObjectMethod _removeAutoAttachmentsFromMeta <tt></tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveTopic</strong> ($oldWe"> ObjectMethod moveTopic <tt>($oldWeb,$oldTopic,$newWeb,$newTopic,$user)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveWeb</strong> ($oldWeb,"> ObjectMethod moveWeb <tt>($oldWeb,$newWeb,$user)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>readAttachment</strong> ($"> ObjectMethod readAttachment <tt>($user,$web,$topic,$attachment,$theRev) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionNumber"> ObjectMethod getRevisionNumber <tt>($web,$topic,$attachment) -> $integer</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_WorkArea</strong> ($ke"> ObjectMethod getWorkArea <tt>($key) -> $directorypath</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionDiff*"> ObjectMethod getRevisionDiff <tt>($web,$topic,$rev1,$rev2,$contextLines) -> \@diffArray</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionInfo*"> ObjectMethod getRevisionInfo <tt>($web,$topic,$rev,$attachment) -> ($date,$user,$rev,$comment)</tt></a></li>
+ <li><a href="#StaticMethod <strong>dataEncode</strong> ($unco"> StaticMethod dataEncode <tt>($uncoded) -> $coded</tt></a></li>
+ <li><a href="#StaticMethod <strong>dataDecode</strong> ($enco"> StaticMethod dataDecode <tt>($encoded) -> $decoded</tt></a></li>
+ <li><a href="#ObjectMethod <strong>saveTopic</strong> ($user,"> ObjectMethod saveTopic <tt>($user,$web,$topic,$text,$meta,$options)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>saveAttachment</strong> ($"> ObjectMethod saveAttachment <tt>($web,$topic,$attachment,$user,$opts)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>repRev</strong> ($user,$we"> ObjectMethod repRev <tt>($user,$web,$topic,$text,$meta,$options)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>delRev</strong> ($user,$we"> ObjectMethod delRev <tt>($user,$web,$topic,$text,$meta,$options)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>lockTopic</strong> ($web,$"> ObjectMethod lockTopic <tt>($web,$topic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>unlockTopic</strong> ($use"> ObjectMethod unlockTopic <tt>($user,$web,$topic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>webExists</strong> ($web)"> ObjectMethod webExists <tt>($web) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>topicExists</strong> ($web"> ObjectMethod topicExists <tt>($web,$topic) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_TopicParent</strong> ("> ObjectMethod getTopicParent <tt>($web,$topic) -> $string</tt></a></li>
+ <li><a href="#ObjectMethod *get_TopicLatestRev"> ObjectMethod getTopicLatestRevTime <tt>($web,$topic) -> $epochSecs</tt></a></li>
+ <li><a href="#ObjectMethod <strong>read_MetaData</strong> ($w"> ObjectMethod readMetaData <tt>($web,$name) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>save_MetaData</strong> ($w"> ObjectMethod saveMetaData <tt>($web,$name) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_TopicNames</strong> ($"> ObjectMethod getTopicNames <tt>($web) -> @topics</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_ListOfWebs</strong> ($"> ObjectMethod getListOfWebs <tt>($filter) -> @webNames</tt></a></li>
+ <li><a href="#ObjectMethod <strong>createWeb</strong> ($user,"> ObjectMethod createWeb <tt>($user,$newWeb,$baseWeb,$opts)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>removeWeb</strong> ($user,"> ObjectMethod removeWeb <tt>($user,$web)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_DebugText</strong> ($m"> ObjectMethod getDebugText <tt>($meta,$text) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>clean_UpRevID</strong> ($r"> ObjectMethod cleanUpRevID <tt>($rev) -> $integer</tt></a></li>
+ <li><a href="#ObjectMethod <strong>copyTopic</strong> ($user,"> ObjectMethod copyTopic <tt>($user,$fromweb,$fromtopic,$toweb,$totopic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>search_MetaData</strong> ("> ObjectMethod searchMetaData <tt>($params) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *search_InWebConten"> ObjectMethod searchInWebContent <tt>($searchString,$web,\@topics,\%options) -> \%map</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionAtTime"> ObjectMethod getRevisionAtTime <tt>($web,$topic,$time) -> $rev</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getLease</strong> ($web,$t"> ObjectMethod getLease <tt>($web,$topic) -> $lease</tt></a></li>
+ <li><a href="#ObjectMethod <strong>setLease</strong> ($web,$t"> ObjectMethod setLease <tt>($web,$topic,$user,$length)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>clearLease</strong> ($web,"> ObjectMethod clearLease <tt>($web,$topic)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ()"></a> [[ClassMethod]] **new** `()`
+
+Construct a Store module, linking in the chosen sub-implementation.
+
+## <a name="ObjectMethod <strong>readTopic</strong> ($user,"></a> [[ObjectMethod]] **readTopic** `($user,$web,$topic,$version) -> ($metaObject,$text)`
+
+Reads the given version of a topic and it's meta-data. If the version is undef, then read the most recent version. The version number must be an integer, or undef for the latest version.
+
+If $user is defined, view permission will be required for the topic read to be successful. Access control violations are flagged by a TWiki::AccessControlException. Permissions are checked for the user name passed in.
+
+If the topic contains a web specification (is of the form Web.Topic) the web specification will override whatever is passed in $web.
+
+The metadata and topic text are returned separately, with the metadata in a TWiki::Meta object. (The topic text is, as usual, just a string.)
+
+## <a name="ObjectMethod <strong>read_TopicRaw</strong> ($u"></a> [[ObjectMethod]] **readTopicRaw** `($user,$web,$topic,$version) -> $topicText`
+
+Reads the given version of a topic, without separating out any embedded meta-data. If the version is undef, then read the most recent version. The version number must be an integer or undef.
+
+If $user is defined, view permission will be required for the topic read to be successful. Access control violations are flagged by a TWiki::AccessControlException. Permissions are checked for the user name passed in.
+
+If the topic contains a web specification (is of the form Web.Topic) the web specification will override whatever is passed in $web.
+
+SMELL: DO NOT CALL THIS METHOD UNLESS YOU HAVE NO CHOICE. This method breaks encapsulation of the store, as it assumes meta is stored embedded in the text. Other implementors of store will be forced to insert meta-data to ensure correct operation of View raw=debug and the 'repRev' mode of Edit.
+
+$web and $topic _must_ be untainted.
+
+## <a name="ObjectMethod <strong>moveAttachment</strong> ($"></a> [[ObjectMethod]] **moveAttachment** `($oldWeb,$oldTopic,$oldAttachment,$newWeb,$newTopic,$newAttachment,$user)`
+
+Move an attachment from one topic to another.
+
+The caller to this routine should check that all topics are valid.
+
+All parameters must be defined, and must be untainted.
+
+## <a name="ObjectMethod <strong>get_AttachmentStre"></a> [[ObjectMethod]] \*getAttachmentStream `($user,$web,$topic,$attName) -> \*STREAM`
+
+- `$user` - the user doing the reading, or undef if no access checks
+- `$web` - The web
+- `$topic` - The topic
+- `$attName` - Name of the attachment
+
+Open a standard input stream from an attachment.
+
+If $user is defined, view permission will be required for the topic read to be successful. Access control violations and errors will cause exceptions to be thrown.
+
+Permissions are checked for the user name passed in.
+
+## <a name="ObjectMethod <strong>get_AttachmentList"></a> [[ObjectMethod]] \*getAttachmentList `($web,$topic)`
+
+returns @($attachmentName => [stat]) for any given web, topic
+
+## <a name="ObjectMethod <strong>attachmentExists*"></a><a name="ObjectMethod *attachmentExists</strong> "></a> [[ObjectMethod]] **attachmentExists** `($web,$topic,$att) -> $boolean`
+
+Determine if the attachment already exists on the given topic
+
+## <a name="ObjectMethod <strong>_remove_AutoAttach"></a> [[ObjectMethod]] \*\_removeAutoAttachmentsFromMeta ``
+
+This is where we are going to remove from meta any entry that is marked as an automatic attachment.
+
+## <a name="ObjectMethod <strong>moveTopic</strong> ($oldWe"></a> [[ObjectMethod]] **moveTopic** `($oldWeb,$oldTopic,$newWeb,$newTopic,$user)`
+
+All parameters must be defined and must be untainted.
+
+## <a name="ObjectMethod <strong>moveWeb</strong> ($oldWeb,"></a> [[ObjectMethod]] **moveWeb** `($oldWeb,$newWeb,$user)`
+
+Move a web.
+
+All parrameters must be defined and must be untainted.
+
+## <a name="ObjectMethod <strong>readAttachment</strong> ($"></a> [[ObjectMethod]] **readAttachment** `($user,$web,$topic,$attachment,$theRev) -> $text`
+
+Read the given version of an attachment, returning the content.
+
+View permission on the topic is required for the read to be successful. Access control violations are flagged by a TWiki::AccessControlException. Permissions are checked for the user passed in.
+
+If $theRev is not given, the most recent rev is assumed.
+
+## <a name="ObjectMethod <strong>get_RevisionNumber"></a> [[ObjectMethod]] \*getRevisionNumber `($web,$topic,$attachment) -> $integer`
+
+Get the revision number of the most recent revision. Returns the integer revision number or '' if the topic doesn't exist.
+
+WORKS FOR ATTACHMENTS AS WELL AS TOPICS
+
+## <a name="ObjectMethod <strong>get_WorkArea</strong> ($ke"></a> [[ObjectMethod]] **getWorkArea** `($key) -> $directorypath`
+
+Gets a private directory uniquely identified by $key. The directory is intended as a work area for plugins. The directory will exist.
+
+## <a name="ObjectMethod <strong>get_RevisionDiff*"></a><a name="ObjectMethod *get_RevisionDiff</strong> "></a> [[ObjectMethod]] **getRevisionDiff** `($web,$topic,$rev1,$rev2,$contextLines) -> \@diffArray`
+
+Return reference to an array of [ diffType, $right, $left ]
+
+- `$web` - the web
+- `$topic` - the topic
+- `$rev1` Integer revision number
+- `$rev2` Integer revision number
+- `$contextLines` - number of lines of context required
+
+## <a name="ObjectMethod <strong>get_RevisionInfo*"></a><a name="ObjectMethod *get_RevisionInfo</strong> "></a> [[ObjectMethod]] **getRevisionInfo** `($web,$topic,$rev,$attachment) -> ($date,$user,$rev,$comment)`
+
+Get revision info of a topic.
+
+- `$web` Web name, optional, e.g. `'Main'`
+- `$topic` Topic name, required, e.g. `'TokyoOffice'`
+- `$rev` revision number. If 0, undef, or out-of-range, will get info about the most recent revision.
+- `$attachment` attachment filename; undef for a topic
+
+Return list with: ( last update date, last user object, =
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> $date </td>
+ <td> in epochSec </td>
+ </tr>
+ <tr>
+ <td> $user </td>
+ <td> user <strong>object</strong></td>
+ </tr>
+ <tr>
+ <td> $rev </td>
+ <td> the revision number </td>
+ </tr>
+ <tr>
+ <td> $comment </td>
+ <td> WHAT COMMENT? </td>
+ </tr>
+</table>
+
+e.g. =( 1234561, 'phoeny', 5, 'no comment' )
+
+NOTE NOTE NOTE if you are working within the TWiki code DO NOT USE THIS FUNCTION FOR GETTING REVISION INFO OF TOPICS - use TWiki::Meta::getRevisionInfo instead. This is essential to allow clean transition to a topic object model later, and avoids the risk of confusion coming from meta and Store revision information being out of step. (it's OK to use it for attachments)
+
+## <a name="StaticMethod <strong>dataEncode</strong> ($unco"></a> [[StaticMethod]] **dataEncode** `($uncoded) -> $coded`
+
+Encode meta-data fields, escaping out selected characters. The encoding is chosen to avoid problems with parsing the attribute values, while minimising the number of characters encoded so searches can still work (fairly) sensibly.
+
+The encoding has to be exported because TWiki (and plugins) use encoded field data in other places e.g. RDiff, mainly as a shorthand for the properly parsed meta object. Some day we may be able to eliminate that....
+
+## <a name="StaticMethod <strong>dataDecode</strong> ($enco"></a> [[StaticMethod]] **dataDecode** `($encoded) -> $decoded`
+
+Decode escapes in a string that was encoded using dataEncode
+
+The encoding has to be exported because TWiki (and plugins) use encoded field data in other places e.g. RDiff, mainly as a shorthand for the properly parsed meta object. Some day we may be able to eliminate that....
+
+## <a name="ObjectMethod <strong>saveTopic</strong> ($user,"></a> [[ObjectMethod]] **saveTopic** `($user,$web,$topic,$text,$meta,$options)`
+
+- `$user` - user doing the saving (object)
+- `$web` - web for topic
+- `$topic` - topic to atach to
+- `$text` - topic text
+- `$meta` - topic meta-data
+- `$options` - Ref to hash of options
+
+`$options` may include:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>dontlog</code></td>
+ <td> don't log this change in twiki log </td>
+ </tr>
+ <tr>
+ <td><code>hide</code></td>
+ <td> if the attachment is to be hidden in normal topic view </td>
+ </tr>
+ <tr>
+ <td><code>comment</code></td>
+ <td> comment for save </td>
+ </tr>
+ <tr>
+ <td><code>file</code></td>
+ <td> Temporary file name to upload </td>
+ </tr>
+ <tr>
+ <td><code>minor</code></td>
+ <td> True if this is a minor change (used in log) </td>
+ </tr>
+ <tr>
+ <td><code>savecmd</code></td>
+ <td> Save command </td>
+ </tr>
+ <tr>
+ <td><code>forcedate</code></td>
+ <td> grr </td>
+ </tr>
+ <tr>
+ <td><code>unlock</code></td>
+ <td> </td>
+ </tr>
+</table>
+
+Save a new revision of the topic, calling plugins handlers as appropriate.
+
+## <a name="ObjectMethod <strong>saveAttachment</strong> ($"></a> [[ObjectMethod]] **saveAttachment** `($web,$topic,$attachment,$user,$opts)`
+
+- `$user` - user doing the saving
+- `$web` - web for topic
+- `$topic` - topic to atach to
+- `$attachment` - name of the attachment
+- `$opts` - Ref to hash of options
+
+`$opts` may include:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>dontlog</code></td>
+ <td> don't log this change in twiki log </td>
+ </tr>
+ <tr>
+ <td><code>comment</code></td>
+ <td> comment for save </td>
+ </tr>
+ <tr>
+ <td><code>hide</code></td>
+ <td> if the attachment is to be hidden in normal topic view </td>
+ </tr>
+ <tr>
+ <td><code>stream</code></td>
+ <td> Stream of file to upload </td>
+ </tr>
+ <tr>
+ <td><code>file</code></td>
+ <td> Name of a file to use for the attachment data. ignored is stream is set. </td>
+ </tr>
+ <tr>
+ <td><code>filepath</code></td>
+ <td> Client path to file </td>
+ </tr>
+ <tr>
+ <td><code>filesize</code></td>
+ <td> Size of uploaded data </td>
+ </tr>
+ <tr>
+ <td><code>filedate</code></td>
+ <td> Date </td>
+ </tr>
+</table>
+
+Saves a new revision of the attachment, invoking plugin handlers as appropriate.
+
+If file is not set, this is a properties-only save.
+
+## <a name="ObjectMethod <strong>repRev</strong> ($user,$we"></a> [[ObjectMethod]] **repRev** `($user,$web,$topic,$text,$meta,$options)`
+
+Replace last (top) revision with different text.
+
+Parameters and return value as saveTopic, except
+
+- `$options` - as for saveTopic, with the extra option:
+ - `timetravel` - if we want to force the deposited revision to look as much like the revision specified in `$rev` as possible.
+
+Used to try to avoid the deposition of 'unecessary' revisions, for example where a user quickly goes back and fixes a spelling error.
+
+Also provided as a means for administrators to rewrite history (timetravel).
+
+It is up to the store implementation if this is different to a normal save or not.
+
+## <a name="ObjectMethod <strong>delRev</strong> ($user,$we"></a> [[ObjectMethod]] **delRev** `($user,$web,$topic,$text,$meta,$options)`
+
+Parameters and return value as saveTopic.
+
+Provided as a means for administrators to rewrite history.
+
+Delete last entry in repository, restoring the previous revision.
+
+It is up to the store implementation whether this actually does delete a revision or not; some implementations will simply promote the previous revision up to the head.
+
+## <a name="ObjectMethod <strong>lockTopic</strong> ($web,$"></a> [[ObjectMethod]] **lockTopic** `($web,$topic)`
+
+Grab a topic lock on the given topic. A topic lock will cause other processes that also try to claim a lock to block. A lock has a maximum lifetime of 2 minutes, so operations on a locked topic must be completed within that time. You cannot rely on the lock timeout clearing the lock, though; that should always be done by calling unlockTopic. The best thing to do is to guard the locked section with a try..finally clause. See man Error for more info.
+
+Topic locks are used to make store operations atomic. They are _note_ the locks used when a topic is edited; those are Leases (see `getLease`)
+
+## <a name="ObjectMethod <strong>unlockTopic</strong> ($use"></a> [[ObjectMethod]] **unlockTopic** `($user,$web,$topic)`
+
+Release the topic lock on the given topic. A topic lock will cause other processes that also try to claim a lock to block. It is important to release a topic lock after a guard section is complete. This should normally be done in a 'finally' block. See man Error for more info.
+
+Topic locks are used to make store operations atomic. They are _note_ the locks used when a topic is edited; those are Leases (see `getLease`)
+
+## <a name="ObjectMethod <strong>webExists</strong> ($web)"></a><a name="ObjectMethod <strong>webExists</strong> ($web) "></a> [[ObjectMethod]] **webExists** `($web) -> $boolean`
+
+Test if web exists
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+A web _has_ to have a home topic to be a web.
+
+## <a name="ObjectMethod <strong>topicExists</strong> ($web"></a> [[ObjectMethod]] **topicExists** `($web,$topic) -> $boolean`
+
+Test if topic exists
+
+- `$web` - Web name, optional, e.g. `'Main'`
+- `$topic` - Topic name, required, e.g. `'TokyoOffice'`, or `"Main.TokyoOffice"`
+
+## <a name="ObjectMethod <strong>get_TopicParent</strong> ("></a> [[ObjectMethod]] **getTopicParent** `($web,$topic) -> $string`
+
+Get the name of the topic parent. Needs to be fast because of use by Render.pm.
+
+## <a name="ObjectMethod <strong>get_TopicLatestRev"></a> [[ObjectMethod]] \*getTopicLatestRevTime `($web,$topic) -> $epochSecs`
+
+Get an approximate rev time for the latest rev of the topic. This method is used to optimise searching. Needs to be as fast as possible.
+
+## <a name="ObjectMethod <strong>read_MetaData</strong> ($w"></a> [[ObjectMethod]] **readMetaData** `($web,$name) -> $text`
+
+Read a named meta-data string. If web is given the meta-data is stored alongside a web.
+
+## <a name="ObjectMethod <strong>save_MetaData</strong> ($w"></a> [[ObjectMethod]] **saveMetaData** `($web,$name) -> $text`
+
+Write a named meta-data string. If web is given the meta-data is stored alongside a web.
+
+## <a name="ObjectMethod <strong>get_TopicNames</strong> ($"></a> [[ObjectMethod]] **getTopicNames** `($web) -> @topics`
+
+Get list of all topics in a web
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+Return a topic list, e.g. `( 'WebChanges', 'WebHome', 'WebIndex', 'WebNotify' )`
+
+## <a name="ObjectMethod <strong>get_ListOfWebs</strong> ($"></a> [[ObjectMethod]] **getListOfWebs** `($filter) -> @webNames`
+
+Gets a list of webs, filtered according to the spec in the $filter, which may include one of:
+
+1. 'user' (for only user webs)
+2. 'template' (for only template webs)
+
+$filter may also contain the word 'public' which will further filter webs on whether NOSEARCHALL is specified for them or not. 'allowed' filters out webs that the user is denied access to by a \*WEBVIEW.
+
+If $TWiki::cfg\{EnableHierarchicalWebs\} is set, will also list sub-webs recursively.
+
+## <a name="ObjectMethod <strong>createWeb</strong> ($user,"></a> [[ObjectMethod]] **createWeb** `($user,$newWeb,$baseWeb,$opts)`
+
+$newWeb is the name of the new web.
+
+$baseWeb is the name of an existing web (a template web). If the base web is a system web, all topics in it will be copied into the new web. If it is a normal web, only topics starting with 'Web' will be copied. If no base web is specified, an empty web (with no topics) will be created. If it is specified but does not exist, an error will be thrown.
+
+$opts is a ref to a hash that contains settings to be modified in the web preferences topic in the new web.
+
+## <a name="ObjectMethod <strong>removeWeb</strong> ($user,"></a> [[ObjectMethod]] **removeWeb** `($user,$web)`
+
+- `$user` - user doing the removing (for the history)
+- `$web` - web being removed
+
+Destroy a web, utterly. Removed the data and attachments in the web.
+
+Use with great care!
+
+The web must be a known web to be removed this way.
+
+## <a name="ObjectMethod <strong>get_DebugText</strong> ($m"></a> [[ObjectMethod]] **getDebugText** `($meta,$text) -> $text`
+
+Generate a debug text form of the text/meta, for use in debug displays, by annotating the text with meta informtion.
+
+## <a name="ObjectMethod <strong>clean_UpRevID</strong> ($r"></a> [[ObjectMethod]] **cleanUpRevID** `($rev) -> $integer`
+
+Cleans up (maps) a user-supplied revision ID and converts it to an integer number that can be incremented to create a new revision number.
+
+This method should be used to sanitise user-provided revision IDs.
+
+## <a name="ObjectMethod <strong>copyTopic</strong> ($user,"></a> [[ObjectMethod]] **copyTopic** `($user,$fromweb,$fromtopic,$toweb,$totopic)`
+
+Copy a topic and all it's attendant data from one web to another.
+
+SMELL: Does not fix up meta-data!
+
+## <a name="ObjectMethod <strong>search_MetaData</strong> ("></a> [[ObjectMethod]] **searchMetaData** `($params) -> $text`
+
+Search meta-data associated with topics. Parameters are passed in the $params hash, which may contain:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>type</code></td>
+ <td><code>topicmoved</code>, <code>parent</code> or <code>field</code></td>
+ </tr>
+ <tr>
+ <td><code>topic</code></td>
+ <td> topic to search for, for <code>topicmoved</code> and <code>parent</code></td>
+ </tr>
+ <tr>
+ <td><code>name</code></td>
+ <td> form field to search, for <code>field</code> type searches. May be a regex. </td>
+ </tr>
+ <tr>
+ <td><code>value</code></td>
+ <td> form field value. May be a regex. </td>
+ </tr>
+ <tr>
+ <td><code>title</code></td>
+ <td> Title prepended to the returned search results </td>
+ </tr>
+ <tr>
+ <td><code>default</code></td>
+ <td> defualt value if there are no results </td>
+ </tr>
+ <tr>
+ <td><code>web</code></td>
+ <td> web to search in, default is all webs </td>
+ </tr>
+</table>
+
+The idea is that people can search for meta-data values without having to be aware of how or where meta-data is stored.
+
+SMELL: should be replaced with a proper SQL-like search, c.f. [[DBCacheContrib]].
+
+## <a name="ObjectMethod <strong>search_InWebConten"></a> [[ObjectMethod]] \*searchInWebContent `($searchString,$web,\@topics,\%options) -> \%map`
+
+Search for a string in the content of a web. The search must be over all content and all formatted meta-data, though the latter search type is deprecated (use searchMetaData instead).
+
+- `$searchString` - the search string, in egrep format if regex
+- `$web` - The web to search in
+- `\@topics` - reference to a list of topics to search
+- `\%options` - reference to an options hash
+
+The `\%options` hash may contain the following options:
+
+- `type` - if `regex` will perform a egrep-syntax RE search (default '')
+- `casesensitive` - false to ignore case (defaulkt true)
+- `files_without_match` - true to return files only (default false)
+
+The return value is a reference to a hash which maps each matching topic name to a list of the lines in that topic that matched the search, as would be returned by 'grep'. If `files_without_match` is specified, it will return on the first match in each topic (i.e. it will return only one match per topic, and will not return matching lines).
+
+## <a name="ObjectMethod <strong>get_RevisionAtTime"></a> [[ObjectMethod]] \*getRevisionAtTime `($web,$topic,$time) -> $rev`
+
+- `$web` - web for topic
+- `$topic` - topic
+- `$time` - time (in epoch secs) for the rev
+
+Get the revision number of a topic at a specific time. Returns a single-digit rev number or undef if it couldn't be determined (either because the topic isn't that old, or there was a problem)
+
+## <a name="ObjectMethod <strong>getLease</strong> ($web,$t"></a> [[ObjectMethod]] **getLease** `($web,$topic) -> $lease`
+
+- `$web` - web for topic
+- `$topic` - topic
+
+If there is an lease on the topic, return the lease, otherwise undef. A lease is a block of meta-information about a topic that can be recovered (this is a hash containing `user`, `taken` and `expires`). Leases are taken out when a topic is edited. Only one lease can be active on a topic at a time. Leases are used to warn if another user is already editing a topic.
+
+## <a name="ObjectMethod <strong>setLease</strong> ($web,$t"></a> [[ObjectMethod]] **setLease** `($web,$topic,$user,$length)`
+
+Take out an lease on the given topic for this user for $length seconds.
+
+See `getLease` for more details about Leases.
+
+## <a name="ObjectMethod <strong>clearLease</strong> ($web,"></a> [[ObjectMethod]] **clearLease** `($web,$topic)`
+
+Cancel the current lease.
+
+See `getLease` for more details about Leases.
--- /dev/null
+# <a name="Package <code>TWiki::Store::_RcsFile="></a> Package =TWiki::Store::RcsFile
+
+This class is PACKAGE PRIVATE to Store, and should never be used from anywhere else. Base class of implementations of stores that manipulate RCS format files.
+
+The general contract of the methods on this class and its subclasses calls for errors to be signalled by Error::Simple exceptions.
+
+Refer to Store.pm for models of usage.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Store::_RcsFile="> Package TWiki::Store::RcsFile</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session,$web"> ClassMethod new <tt>($session,$web,$topic,$attachment)</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionInfo*"> ObjectMethod getRevisionInfo <tt>($version) -> ($rev,$date,$user,$comment)</tt></a></li>
+ <li><a href="#ObjectMethod *get_LatestRevision"> ObjectMethod getLatestRevision <tt>() -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *get_LatestRevision"> ObjectMethod getLatestRevisionTime <tt>() -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>read_MetaData</strong> ($n"> ObjectMethod readMetaData <tt>($name) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_WorkArea</strong> ($ke"> ObjectMethod getWorkArea <tt>($key) -> $directorypath</tt></a></li>
+ <li><a href="#ObjectMethod <strong>save_MetaData</strong> ($w"> ObjectMethod saveMetaData <tt>($web,$name) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_TopicNames</strong> ()"> ObjectMethod getTopicNames <tt>() -> @topics</tt></a></li>
+ <li><a href="#ObjectMethod <strong>get_WebNames</strong> () -"> ObjectMethod getWebNames <tt>() -> @webs</tt></a></li>
+ <li><a href="#ObjectMethod *search_InWebConten"> ObjectMethod searchInWebContent <tt>($searchString,$web,\@topics,\%options) -> \%map</tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveWeb</strong> ($newWeb)"> ObjectMethod moveWeb <tt>($newWeb)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getRevision</strong> ($ver"> ObjectMethod getRevision <tt>($version) -> $text</tt></a></li>
+ <li><a href="#ObjectMethod *stored_DataExists*"> ObjectMethod storedDataExists <tt>() -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getTimestamp</strong> () -"> ObjectMethod getTimestamp <tt>() -> $integer</tt></a></li>
+ <li><a href="#ObjectMethod *restore_LatestRevi"> ObjectMethod restoreLatestRevision <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>removeWeb</strong> ($web)"> ObjectMethod removeWeb <tt>($web)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveTopic</strong> ($newWe"> ObjectMethod moveTopic <tt>($newWeb,$newTopic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>copyTopic</strong> ($newWe"> ObjectMethod copyTopic <tt>($newWeb,$newTopic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>moveAttachment</strong> ($"> ObjectMethod moveAttachment <tt>($newWeb,$newTopic,$newAttachment)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>copyAttachment</strong> ($"> ObjectMethod copyAttachment <tt>($newWeb,$newTopic)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>is_AsciiDefault</strong> ("> ObjectMethod isAsciiDefault <tt>() -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>setLock</strong> ($lock,$u"> ObjectMethod setLock <tt>($lock,$user)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>isLocked</strong> () -> ($"> ObjectMethod isLocked <tt>() -> ($user,$time)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>setLease</strong> ($lease)"> ObjectMethod setLease <tt>($lease)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getLease</strong> () -> $l"> ObjectMethod getLease <tt>() -> $lease</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getStream</strong> () -> \"> ObjectMethod getStream <tt>() -> \*STREAM</tt></a></li>
+ <li><a href="#ObjectMethod <strong>numRevisions</strong> () -"> ObjectMethod numRevisions <tt>() -> $integer</tt></a></li>
+ <li><a href="#ObjectMethod <strong>initBinary</strong> ()"> ObjectMethod initBinary <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>initText</strong> ()"> ObjectMethod initText <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod *add_RevisionFromTe"> ObjectMethod addRevisionFromText <tt>($text,$comment,$user,$date)</tt></a></li>
+ <li><a href="#ObjectMethod *add_RevisionFromSt"> ObjectMethod addRevisionFromStream <tt>($fh,$comment,$user,$date)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>replaceRevision</strong> ("> ObjectMethod replaceRevision <tt>($text,$comment,$user,$date)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>deleteRevision</strong> ()"> ObjectMethod deleteRevision <tt>()</tt></a></li>
+ <li><a href="#ObjectMethod <strong>revisionDiff</strong> ($re"> ObjectMethod revisionDiff <tt>($rev1,$rev2,$contextLines) -> \@diffArray</tt></a></li>
+ <li><a href="#ObjectMethod *get_RevisionAtTime"> ObjectMethod getRevisionAtTime <tt>($time) -> $rev</tt></a></li>
+ <li><a href="#ObjectMethod *get_AttachmentAttr"> ObjectMethod getAttachmentAttributes <tt>($web,$topic,$attachment)</tt></a></li>
+ <li><a href="#ObjectMethod *get_AttachmentList"> ObjectMethod getAttachmentList <tt>($web,$topic)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session,$web"></a> [[ClassMethod]] **new** `($session,$web,$topic,$attachment)`
+
+Constructor. There is one object per stored file.
+
+Note that $web, $topic and $attachment must be untainted!
+
+## <a name="ObjectMethod <strong>get_RevisionInfo*"></a><a name="ObjectMethod *get_RevisionInfo</strong> "></a> [[ObjectMethod]] **getRevisionInfo** `($version) -> ($rev,$date,$user,$comment)`
+
+- `$version` if 0 or undef, or out of range (version number > number of revs) will return info about the latest revision.
+
+Returns (rev, date, user, comment) where rev is the number of the rev for which the info was recovered, date is the date of that rev (epoch s), user is the login name of the user who saved that rev, and comment is the comment associated with the rev.
+
+Designed to be overridden by subclasses, which can call up to this method if file-based rev info is required.
+
+## <a name="ObjectMethod <strong>get_LatestRevision"></a> [[ObjectMethod]] \*getLatestRevision `() -> $text`
+
+Get the text of the most recent revision
+
+## <a name="ObjectMethod <strong>get_LatestRevision"></a> [[ObjectMethod]] \*getLatestRevisionTime `() -> $text`
+
+Get the time of the most recent revision
+
+## <a name="ObjectMethod <strong>read_MetaData</strong> ($n"></a> [[ObjectMethod]] **readMetaData** `($name) -> $text`
+
+Get a meta-data block for this web
+
+## <a name="ObjectMethod <strong>get_WorkArea</strong> ($ke"></a> [[ObjectMethod]] **getWorkArea** `($key) -> $directorypath`
+
+Gets a private directory uniquely identified by $key. The directory is intended as a work area for plugins.
+
+The standard is a directory named the same as "key" under $TWiki::cfg\{RCS\}\{WorkAreaDir\}
+
+## <a name="ObjectMethod <strong>save_MetaData</strong> ($w"></a> [[ObjectMethod]] **saveMetaData** `($web,$name) -> $text`
+
+Write a named meta-data string. If web is given the meta-data is stored alongside a web.
+
+## <a name="ObjectMethod <strong>get_TopicNames</strong> ()"></a> [[ObjectMethod]] **getTopicNames** `() -> @topics`
+
+Get list of all topics in a web
+
+- `$web` - Web name, required, e.g. `'Sandbox'`
+
+Return a topic list, e.g. `( 'WebChanges', 'WebHome', 'WebIndex', 'WebNotify' )`
+
+## <a name="ObjectMethod <strong>get_WebNames</strong> () -"></a> [[ObjectMethod]] **getWebNames** `() -> @webs`
+
+Gets a list of names of subwebs in the current web
+
+## <a name="ObjectMethod <strong>search_InWebConten"></a> [[ObjectMethod]] \*searchInWebContent `($searchString,$web,\@topics,\%options) -> \%map`
+
+Search for a string in the content of a web. The search must be over all content and all formatted meta-data, though the latter search type is deprecated (use searchMetaData instead).
+
+- `$searchString` - the search string, in egrep format if regex
+- `$web` - The web to search in
+- `\@topics` - reference to a list of topics to search
+- `\%options` - reference to an options hash
+
+The `\%options` hash may contain the following options:
+
+- `type` - if `regex` will perform a egrep-syntax RE search (default '')
+- `casesensitive` - false to ignore case (defaulkt true)
+- `files_without_match` - true to return files only (default false)
+
+The return value is a reference to a hash which maps each matching topic name to a list of the lines in that topic that matched the search, as would be returned by 'grep'. If `files_without_match` is specified, it will return on the first match in each topic (i.e. it will return only one match per topic, and will not return matching lines).
+
+## <a name="ObjectMethod <strong>moveWeb</strong> ($newWeb)"></a> [[ObjectMethod]] **moveWeb** `($newWeb)`
+
+Move a web.
+
+## <a name="ObjectMethod <strong>getRevision</strong> ($ver"></a> [[ObjectMethod]] **getRevision** `($version) -> $text`
+
+Get the text for a given revision. The version number must be an integer.
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>stored_DataExists*"></a> [[ObjectMethod]] \*storedDataExists `() -> $boolean`
+
+Establishes if there is stored data associated with this handler.
+
+## <a name="ObjectMethod <strong>getTimestamp</strong> () -"></a> [[ObjectMethod]] **getTimestamp** `() -> $integer`
+
+Get the timestamp of the file Returns 0 if no file, otherwise epoch seconds
+
+## <a name="ObjectMethod <strong>restore_LatestRevi"></a> [[ObjectMethod]] \*restoreLatestRevision `()`
+
+Restore the plaintext file from the revision at the head.
+
+## <a name="ObjectMethod <strong>removeWeb</strong> ($web)"></a> [[ObjectMethod]] **removeWeb** `($web)`
+
+- `$web` - web being removed
+
+Destroy a web, utterly. Removed the data and attachments in the web.
+
+Use with great care! No backup is taken!
+
+## <a name="ObjectMethod <strong>moveTopic</strong> ($newWe"></a> [[ObjectMethod]] **moveTopic** `($newWeb,$newTopic)`
+
+Move/rename a topic.
+
+## <a name="ObjectMethod <strong>copyTopic</strong> ($newWe"></a> [[ObjectMethod]] **copyTopic** `($newWeb,$newTopic)`
+
+Copy a topic.
+
+## <a name="ObjectMethod <strong>moveAttachment</strong> ($"></a> [[ObjectMethod]] **moveAttachment** `($newWeb,$newTopic,$newAttachment)`
+
+Move an attachment from one topic to another. The name is retained.
+
+## <a name="ObjectMethod <strong>copyAttachment</strong> ($"></a> [[ObjectMethod]] **copyAttachment** `($newWeb,$newTopic)`
+
+Copy an attachment from one topic to another. The name is retained.
+
+## <a name="ObjectMethod <strong>is_AsciiDefault</strong> ("></a> [[ObjectMethod]] **isAsciiDefault** `() -> $boolean`
+
+Check if this file type is known to be an ascii type file.
+
+## <a name="ObjectMethod <strong>setLock</strong> ($lock,$u"></a> [[ObjectMethod]] **setLock** `($lock,$user)`
+
+Set a lock on the topic, if $lock, otherwise clear it. $user is a wikiname.
+
+SMELL: there is a tremendous amount of potential for race conditions using this locking approach.
+
+## <a name="ObjectMethod <strong>isLocked</strong> () - ($u"></a> [[ObjectMethod]] **isLocked** `() -> ($user,$time)`
+
+See if a twiki lock exists. Return the lock user and lock time if it does.
+
+## <a name="ObjectMethod <strong>setLease</strong> ($lease)"></a> [[ObjectMethod]] **setLease** `($lease)`
+
+- `$lease` reference to lease hash, or undef if the existing lease is to be cleared.
+
+Set an lease on the topic.
+
+## <a name="ObjectMethod <strong>getLease</strong> () - $le"></a> [[ObjectMethod]] **getLease** `() -> $lease`
+
+Get the current lease on the topic.
+
+## <a name="ObjectMethod <strong>getStream</strong> () - \*"></a> [[ObjectMethod]] **getStream** `() -> \*STREAM`
+
+Return a text stream that will supply the text stored in the topic.
+
+## <a name="ObjectMethod <strong>numRevisions</strong> () -"></a> [[ObjectMethod]] **numRevisions** `() -> $integer`
+
+Must be provided by subclasses.
+
+Find out how many revisions there are. If there is a problem, such as a nonexistent file, returns 0.
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>initBinary</strong> ()"></a> [[ObjectMethod]] **initBinary** `()`
+
+Initialise a binary file.
+
+Must be provided by subclasses.
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>initText</strong> ()"></a> [[ObjectMethod]] **initText** `()`
+
+Initialise a text file.
+
+Must be provided by subclasses.
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>add_RevisionFromTe"></a> [[ObjectMethod]] \*addRevisionFromText `($text,$comment,$user,$date)`
+
+Add new revision. Replace file with text.
+
+- `$text` of new revision
+- `$comment` checkin comment
+- `$user` is a wikiname.
+- `$date` in epoch seconds; may be ignored
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>add_RevisionFromSt"></a> [[ObjectMethod]] \*addRevisionFromStream `($fh,$comment,$user,$date)`
+
+Add new revision. Replace file with contents of stream.
+
+- `$fh` filehandle for contents of new revision
+- `$comment` checkin comment
+- `$user` is a wikiname.
+- `$date` in epoch seconds; may be ignored
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>replaceRevision</strong> ("></a> [[ObjectMethod]] **replaceRevision** `($text,$comment,$user,$date)`
+
+Replace the top revision.
+
+- `$text` is the new revision
+- `$date` is in epoch seconds.
+- `$user` is a wikiname.
+- `$comment` is a string
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>deleteRevision</strong> ()"></a> [[ObjectMethod]] **deleteRevision** `()`
+
+Delete the last revision - do nothing if there is only one revision
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>revisionDiff</strong> ($re"></a> [[ObjectMethod]] **revisionDiff** `($rev1,$rev2,$contextLines) -> \@diffArray`
+
+rev2 newer than rev1. Return reference to an array of [ diffType, $right, $left ]
+
+**Virtual method** - must be implemented by subclasses
+
+!!!getRevision!!!
+
+## <a name="ObjectMethod <strong>get_RevisionAtTime"></a> [[ObjectMethod]] \*getRevisionAtTime `($time) -> $rev`
+
+Get a single-digit version number for the rev that was alive at the given epoch-secs time, or undef it none could be found.
+
+**Virtual method** - must be implemented by subclasses
+
+## <a name="ObjectMethod <strong>get_AttachmentAttr"></a> [[ObjectMethod]] \*getAttachmentAttributes `($web,$topic,$attachment)`
+
+returns [stat] for any given web, topic, $attachment SMELL - should this return a hash of arbitrary attributes so that SMELL + attributes supported by the underlying filesystem are supported SMELL + (eg: windows directories supporting photo "author", "dimension" fields)
+
+sub \_constructAttributesForAutoAttached as long as stat is defined, return an emulated set of attributes for that attachment.
+
+## <a name="ObjectMethod <strong>get_AttachmentList"></a> [[ObjectMethod]] \*getAttachmentList `($web,$topic)`
+
+returns \{\} of filename => \{ key => value, key2 => value \} for any given web, topic Ignores files starting with \_ or ending with ,v
--- /dev/null
+# <a name="Package <code>TWiki::Store::_RcsLite="></a> Package =TWiki::Store::RcsLite
+
+**extends** <tt>[[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]]</tt>
+
+This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
+
+Simple replacement for RCS. Doesn't support:
+
+- branches
+- locking
+
+Neither of which are used (or needed) by TWiki.
+
+This module doesn't know anything about the content of the topic
+
+There is one of these object for each file stored under RCSLite.
+
+This object is PACKAGE PRIVATE to Store, and should NEVER be used from anywhere else.
+
+FIXME:
+
+- need to tidy up dealing with \\n for differences
+- still have difficulty on line ending at end of sequences, consequence of doing a line based diff
+
+## <a name="File format"></a> File format
+
+ rcstext ::= admin {delta}* desc {deltatext}*
+ admin ::= head {num};
+ { branch {num}; }
+ access {id}*;
+ symbols {sym : num}*;
+ locks {id : num}*; {strict ;}
+ { comment {string}; }
+ { expand {string}; }
+ { newphrase }*
+ delta ::= num
+ date num;
+ author id;
+ state {id};
+ branches {num}*;
+ next {num};
+ { newphrase }*
+ desc ::= desc string
+ deltatext ::= num
+ log string
+ { newphrase }*
+ text string
+ num ::= {digit | .}+
+ digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+ id ::= {num} idchar {idchar | num }*
+ sym ::= {digit}* idchar {idchar | digit }*
+ idchar ::= any visible graphic character except special
+ special ::= $ | , | . | : | ; | @
+ string ::= @{any character, with @ doubled}*@
+ newphrase ::= id word* ;
+ word ::= id | num | string | :
+
+Identifiers are case sensitive. Keywords are in lower case only. The sets of keywords and identifiers can overlap. In most environments RCS uses the ISO 8859/1 encoding: visible graphic characters are codes 041-176 and 240-377, and white space characters are codes 010-015 and 040.
+
+Dates, which appear after the date keyword, are of the form Y.mm.dd.hh.mm.ss, where Y is the year, mm the month (01-12), dd the day (01-31), hh the hour (00-23), mm the minute (00-59), and ss the second (00-60). Y contains just the last two digits of the year for years from 1900 through 1999, and all the digits of years thereafter. Dates use the Gregorian calendar; times use UTC.
+
+The newphrase productions in the grammar are reserved for future extensions to the format of RCS files. No newphrase will begin with any keyword already in use.
+
+Revisions consist of a sequence of 'a' and 'd' edits that need to be applied to rev N+1 to get rev N. Each edit has an offset (number of lines from start) and length (number of lines). For 'a', the edit is followed by length lines (the lines to be inserted in the text). For example:
+
+d1 3 means "delete three lines starting with line 1 a4 2 means "insert two lines at line 4' xxxxxx is the new line 4 yyyyyy is the new line 5
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Store::_RcsLite="> Package TWiki::Store::RcsLite</a><ul>
+ <li><a href="#File format"> File format</a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
--- /dev/null
+# <a name="Package <code>TWiki::Store::_RcsWrap="></a> Package =TWiki::Store::RcsWrap
+
+**extends** <tt>[[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]]</tt>
+
+This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
+
+Wrapper around the RCS commands required by TWiki. There is one of these object for each file stored under RCS.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Store::_RcsWrap="> Package TWiki::Store::RcsWrap</a><ul>
+ <li><a href="#StaticMethod *parse_RevisionDiff"> StaticMethod parseRevisionDiff <tt>($text) -> \@diffArray</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>parse_RevisionDiff"></a> [[StaticMethod]] \*parseRevisionDiff `($text) -> \@diffArray`
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> Description: </td>
+ <td> parse the text into an array of diff cells </td>
+ </tr>
+ <tr>
+ <td> #Description: </td>
+ <td> unlike Algorithm::Diff I concatinate lines of the same diffType that are sqential (this might be something that should be left up to the renderer) </td>
+ </tr>
+ <tr>
+ <td> Parameter: <code>$text</code></td>
+ <td> currently unified or rcsdiff format </td>
+ </tr>
+ <tr>
+ <td> Return: <code>\@diffArray</code></td>
+ <td> reference to an array of [ diffType, $right, $left ] </td>
+ </tr>
+ <tr>
+ <td> TODO: </td>
+ <td> move into [[Main/RcsFile]] and add indirection in Store </td>
+ </tr>
+</table>
<div>
<ul>
<li><a href="#TWiki System Requirements"> TWiki System Requirements</a><ul>
- <li><a href="#Server Requirements"> Server Requirements</a></li>
+ <li><a href="#Server Requirements"> Server Requirements</a><ul>
+ <li><a href="#Required CPAN Modules"> Required CPAN Modules</a></li>
+ <li><a href="#Optional CPAN Modules"> Optional CPAN Modules</a></li>
+ </ul>
+ </li>
<li><a href="#Client Requirements"> Client Requirements</a></li>
- <li><a href="#Known Issues"> Known Issues</a></li>
+ <li><a href="#Important note about TWiki Plugi"> Important note about TWiki Plugins</a></li>
</ul>
</li>
</ul>
# <a name="TWiki System Requirements"></a> TWiki System Requirements
-_Server and client requirements for TWiki 01-Sep-2004_
+_Server and client requirements_
-Low client and server requirements are core features that keep TWiki widely deployable, particularly across a range of browser platforms and versions.
+Low client and server base requirements are core features that keep TWiki widely deployable, particularly across a range of browser platforms and versions. Many [[Plugins|TWiki:Plugins/PluginPackage]] and [[contrib modules|TWiki:Plugins/ContribPackage]] exist which enhance and expand TWiki's capabilities; they may have additional requirements.
## <a name="Server Requirements"></a> Server Requirements
</tr>
<tr>
<td> Perl </td>
- <td> 5.005_03 or higher (5.6.1 recommended, 5.8.x does work in most cases, but see TWiki:Codev.IssuesWithPerl5dot8) </td>
- </tr>
- <tr>
- <td> Non-standard Perl modules </td>
- <td> %BULLET% Unix: <code>Net::SMTP</code> (or <code>sendmail</code>) %BB% Windows: <code>Net::SMTP</code>, <code>MIME::Base64</code>, <code>Digest::SHA1</code> %BB% Internationalisation: <code>Unicode::MapUTF8</code> <font size="-1">(only for non-ISO-8859-1 sites using TWiki:Codev.EncodeURLsWithUTF8 with Perl 5.6 or lower)</font></td>
+ <td> 5.005_03 or higher (5.8.4 or higher is recommended) </td>
</tr>
<tr>
<td> RCS </td>
- <td> 5.7 or higher (including GNU <code>diff</code>) %BR% Optional, but the all-Perl RCS replacement is not currently recommended for live sites - see TWiki:Codev.RcsLite </td>
+ <td> 5.7 or higher (including GNU <code>diff</code>) %BR% Optional, TWiki includes a pure perl implementation of RCS that can be used instead (although it's slower) </td>
</tr>
<tr>
<td> GNU <code>diff</code></td>
</tr>
<tr>
<td> Web server </td>
- <td> Apache 1.3 is well supported; Apache 2.0 is <strong>not</strong> recommended yet (see TWiki:Codev.IssuesWithApache2dot0). %BR% For other servers, CGI support, authentication, extended path info required; also, the <code>register</code> script is likely to need significant changes </td>
+ <td> Apache is well supported; see TWiki:TWiki.InstallingTWiki#OtherWebServers for other servers </td>
+ </tr>
+</table>
+
+### <a name="Required CPAN Modules"></a> Required CPAN Modules
+
+The following Perl modules are used by TWiki:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Module </strong></th>
+ <th bgcolor="#99CCCC"><strong> Preferred version </strong></th>
+ </tr>
+ <tr>
+ <td> Algorithm::Diff (included) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> CGI::Carp </td>
+ <td> >=1.26 </td>
+ </tr>
+ <tr>
+ <td> Config </td>
+ <td> >=0 </td>
+ </tr>
+ <tr>
+ <td> Cwd </td>
+ <td> >=3.05 </td>
+ </tr>
+ <tr>
+ <td> Data::Dumper </td>
+ <td> >=2.121 </td>
+ </tr>
+ <tr>
+ <td> Error (included) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> File::Copy </td>
+ <td> >=2.06 </td>
+ </tr>
+ <tr>
+ <td> File::Find </td>
+ <td> >=1.05 </td>
+ </tr>
+ <tr>
+ <td> File::Spec </td>
+ <td> >=3.05 </td>
+ </tr>
+ <tr>
+ <td> FileHandle </td>
+ <td> >=2.01 </td>
+ </tr>
+ <tr>
+ <td> IO::File </td>
+ <td> >=1.10 </td>
+ </tr>
+ <tr>
+ <td> Text::Diff (included) </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> Time::Local </td>
+ <td> >=1.11 </td>
+ </tr>
+</table>
+
+### <a name="Optional CPAN Modules"></a> Optional CPAN Modules
+
+The following Perl modules may be used by TWiki:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Module </strong></th>
+ <th bgcolor="#99CCCC"><strong> Preferred version </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description </strong></th>
+ </tr>
+ <tr>
+ <td> CGI::Cookie </td>
+ <td> >=1.24 </td>
+ <td> Used for session support </td>
+ </tr>
+ <tr>
+ <td> CGI::Session </td>
+ <td> >=3.95 </td>
+ <td> Used for session support </td>
+ </tr>
+ <tr>
+ <td> Digest::base </td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> Digest::SHA1 </td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td> Jcode </td>
+ <td> </td>
+ <td> Used for [[Main/I18N]] support with perl 5.6 </td>
+ </tr>
+ <tr>
+ <td> Locale::Maketext::Lexicon </td>
+ <td> >=0 </td>
+ <td> Used for [[Main/I18N]] support </td>
+ </tr>
+ <tr>
+ <td> Net::SMTP </td>
+ <td> >=2.29 </td>
+ <td> Used for sending mail </td>
+ </tr>
+ <tr>
+ <td> Unicode::Map </td>
+ <td> </td>
+ <td> Used for [[Main/I18N]] support with perl 5.6 </td>
+ </tr>
+ <tr>
+ <td> Unicode::Map8 </td>
+ <td> </td>
+ <td> Used for [[Main/I18N]] support with perl 5.6 </td>
+ </tr>
+ <tr>
+ <td> Unicode::MapUTF8 </td>
+ <td> </td>
+ <td> Used for [[Main/I18N]] support with perl 5.6 </td>
+ </tr>
+ <tr>
+ <td> Unicode::String </td>
+ <td> </td>
+ <td> Used for [[Main/I18N]] support with perl 5.6 </td>
+ </tr>
+ <tr>
+ <td> URI </td>
+ <td> </td>
+ <td> Used for configure </td>
</tr>
</table>
-%X% **\*** _Current documentation mainly covers Linux and Apache installations. See [[WindowsInstallCookbook]] for a Windows installation guide. See TWiki:Codev.TWikiOn for help with installation on various platforms including Unix, MacOS X, Apache `mod_perl`, web hosts, etc._
+Most of them will probably already be available in your installation. You can check version numbers with the `configure` script, or if you're still trying to get to that point, check from the command line like this:
+
+ perl -e 'use FileHandle; print $FileHandle::VERSION."\n"'
<a name="ClientRequirements"></a>
## <a name="Client Requirements"></a> Client Requirements
-The TWiki [[standard installation|Main/TWikiInstallationGuide]] has extremely low browser requirements:
+The TWiki [[standard installation|Main/TWikiInstallationGuide]] has relatively low browser requirements:
- HTML 3.2 compliant
-- generates XHTML 1.0 pages that are compatible with HTML 3.2
-- minimal use of JavaScript in the user interface (degrades gracefully)
-- no cookies
-- no CSS (if the [[ClassicSkin]] is used)
+- Cookies, if persistent sessions are required
+
+CSS and Javascript are used in most skins, although there is a low-fat skin (Classic skin) available that minimises these requirements. Some skins will require more recent releases of browsers. The default skin (Pattern) is tested on IE 6, Safari, and Mozilla 5.0 based browsers (such as Firefox).
-You can easily add functionality, by customizing [[TWikiTemplates]], for one, while tailoring the browser requirements to your situation.
+You can easily select a balance of browser capability versus look and feel. Try the installed skins at [[TWikiSkinBrowser]] and more at TWiki:Plugins.SkinPackage.
-## <a name="Known Issues"></a> Known Issues
+## <a name="Important note about TWiki Plugi"></a> Important note about TWiki Plugins
-- The [[TWikiPlugins]] feature currently does not have compatibility guidelines for developers. Plugins can require just about anything - browser-specific functions, stylesheets (CSS), Java applets, cookies, specific Perl modules,... - check the individual Plugin specs.
- - %H% Plugins included in the TWiki distribution do not add requirements.
+- Plugins can require just about anything - browser-specific functions, stylesheets (CSS), Java applets, cookies, specific Perl modules,... - check the individual Plugin specs.
+ - **_%T% Note:_** Plugins included in the TWiki distribution do not add requirements, except for the [[CommentPlugin]] which requires Perl 5.6.1.
--- TWiki:Main.MikeMannix - 12 Jan 2002 %BR% -- TWiki:Main.PeterThoeny - 15 Aug 2004
+**_Related Topics:_** [[AdminDocumentationCategory]]
<ul>
<li><a href="#TWiki Templates"> TWiki Templates</a><ul>
<li><a href="#Overview"> Overview</a></li>
- <li><a href="#Major changes from the previous"> Major changes from the previous template system</a></li>
- <li><a href="#How Template Variables Work"> How Template Variables Work</a></li>
- <li><a href="#Types of Template"> Types of Template</a><ul>
- <li><a href="#Master Templates"> Master Templates</a></li>
- <li><a href="#HTML Page Templates"> HTML Page Templates</a></li>
- <li><a href="#Template Topics"> Template Topics</a><ul>
- <li><a href="#Edit Template Topics and Variabl"> Edit Template Topics and Variable Expansion</a></li>
- <li><a href="#Template Topics in Action"> Template Topics in Action</a></li>
- </ul>
- </li>
+ <li><a href="#The TWiki Template System"> The TWiki Template System</a><ul>
+ <li><a href="#How Template Directives Work"> How Template Directives Work</a></li>
+ <li><a href="#Finding Templates"> Finding Templates</a></li>
</ul>
</li>
- <li><a href="#Templates by Example"> Templates by Example</a><ul>
+ <li><a href="#Master Templates"> Master Templates</a></li>
+ <li><a href="#HTML Page Templates"> HTML Page Templates</a></li>
+ <li><a href="#Template Topics"> Template Topics</a><ul>
+ <li><a href="#Edit Template Topics and Variabl"> Edit Template Topics and Variable Expansion</a></li>
+ <li><a href="#Template Topics in Action"> Template Topics in Action</a></li>
+ <li><a href="#Automatically Generated Topicnam"> Automatically Generated Topicname</a></li>
+ </ul>
+ </li>
+ <li><a href="#Master Templates by Example"> Master Templates by Example</a><ul>
<li><a href="#Base template oopsbase.tmpl"> Base template oopsbase.tmpl</a></li>
<li><a href="#Test template oopstest.tmpl"> Test template oopstest.tmpl</a></li>
<li><a href="#Sample screen shot of oopstest.t"> Sample screen shot of oopstest.tmpl</a></li>
</ul>
</li>
- <li><a href="#Known Issues"> Known Issues</a></li>
</ul>
</li>
</ul>
## <a name="Overview"></a> Overview
-The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML markup for template-specific content. Templates are used to define [[page layout|Main/WebHome#HtmlTemplates]], and also to supply [[default content|Main/WebHome#TemplateTopics]] for new pages.
+There are three types of template:
+
+- **Master Templates**: Define blocks of text for use in other templates
+- **HTML Page Templates**: Define the layout of %WIKITOOLNAME% pages
+- **Template Topics**: Define default text when you create a new topic
-## <a name="Major changes from the previous"></a><a name="Major changes from the previous "></a> Major changes from the previous template system
+All three types of template use the TWiki template system.
-Where the old templates were each complete HTML documents, the new templates are defined using variables to include template parts from a master file. You can now change one instance of a common element to update all occurrences; previously, every affected template had to be updated. This simplifies the conversion of templates into XHTML format, and provides a more versatile solution for templates and for [[TWikiSkins]]. The new system:
+## <a name="The TWiki Template System"></a> The TWiki Template System
-- separates a set of common template parts into a base template that is included by all of the related templates;
-- defines common variables, like a standard separator (ex: "|"), in the base template;
-- defines variable text in the individual templates and passes it back to the base template.
+_Templates_ are plain text with embedded _template directives_ that tell TWiki how to compose blocks of text together to create something new.
<a name="TemplateVariables"></a>
-## <a name="How Template Variables Work"></a> How Template Variables Work
+### <a name="How Template Directives Work"></a> How Template Directives Work
-- Special template directives (or preprocessor commands) are embedded in normal templates.
-- All template preprocessing is done in `&TWiki::Store::readTemplate()` so that the caller simply gets an expanded template file (the same as before).
+- Template directives are embedded in templates.
- Directives are of the form <code>**%TMPL:<key>%**</code> and <code>**%TMPL:<key>\{"attr"\}%**</code>.
- Directives:
- - <code>**%TMPL:INCLUDE\{"file"\}%**</code>: Includes a template file. The template directory of the current web is searched first, then the templates root (`twiki/templates`).
- - <code>**%TMPL:DEF\{"var"\}%**</code>: Define a variable. Text between this and the END directive is not returned, but put into a hash for later use.
- - <code>**%TMPL:END%**</code>: Ends variable definition.
- - <code>**%TMPL:P\{"var"\}%**</code>: Prints a previously defined variable.
-- Variables live in a global name space: there is no parameter passing.
+ - <code>**%TMPL:INCLUDE\{"file"\}%**</code>: Includes a template file. The file is found as described [[below|Main/WebHome#FindingTemplates]].
+ - <code>**%TMPL:DEF\{"block"\}%**</code>: Define a block. Text between this and the `%TMPL:END%` directive is not used in-place, but is saved for later use with `%TMPL:P`. Leading and trailing whitespace is ignored.
+ - <code>**%TMPL:END%**</code>: Ends a block definition.
+ - <code>**%TMPL:P\{"var"\}%**</code>: Includes a previously defined block.
+ - <code>**%\{...\}%**</code>: is a comment.
- Two-pass processing lets you use a variable before or after declaring it.
- Templates and [[TWikiSkins]] work transparently and interchangeably. For example, you can create a skin that overloads only the `twiki.tmpl` master template, like `twiki.print.tmpl`, that redefines the header and footer.
- %H% Use of template directives is optional: templates work without them.
-- %X% **NOTE:** Template directives work only for templates: they do not get processed in topic text.
+- %X% **NOTE:** Template directives work only for templates: they do not get processed in normal topic text.
-## <a name="Types of Template"></a> Types of Template
+TMPL:P also supports simple parameters. For example, given the definition `%TMPL:DEF{"x"}% x%P%z%TMPL:END%` then `%TMPL:P{"x" P="y"}%` will expand to `xyz`.
-There are three types of template:
+Note that parameters can simply be ignored; for example=%TMPL:P\{"x"\}%= will expand to x%P%z.
+
+Any alphanumeric characters can be used in parameter names. You are highly recommended to use parameter names that cannot be confused with [[TWikiVariables]].
+
+Note that three parameter names, `context`, `then` and `else` are **reserved**. They are used to support a limited form of "if" condition that you can use to select which of two templates to use, based on a _context identifier_:
+
+ %TMPL:DEF{"link_inactive"}%<input type="button" disabled value="Link>%TMPL:END%
+ %TMPL:DEF{"link_active"}%<input type="button" onclick="link()" value="Link" />%TMPL:END%
+ %TMPL:P{context="inactive" then="inactive_link" else="active_link"}% for %CONTEXT%
+
+When the "inactive" context is set, then this will expand the "link\_inactive" template; otherwise it will expand the "link\_active" template. See [[IfStatements]] for details of supported context identifiers.
+
+### <a name="Finding Templates"></a> Finding Templates
+
+Templates are stored either in the <code>**twiki/templates**</code> directory, or can also be read from user topics. As an example, <code>**twiki/templates/view.tmpl**</code> is the default template file for the <code>**twiki/bin/view**</code> script.
+
+Templates that are included using `%TMPL:INCLUDE%` are also found using the same search algorithm, unless you explicitly put `'.tmpl'` at the end of the template name. In this case, the string is assumed to be the full name of a template in the `templates` directory, and the algorithm isn't used.
+
+TWiki uses the following search order to determine which template file or topic to use for a particular script. The _skin path_ is set as described in [[TWikiSkins]].
-- **Master Template**: Stores common parts; included by other templates
-- **HTML Page Templates**: Defines the layout of %WIKITOOLNAME% pages
-- **Template Topics**: Defines default text when you create a new topic
+> 1. templates/%RED%web%ENDCOLOR%/%RED%script%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl for each %RED%skin%ENDCOLOR% on the skin path
+> - %X% this usage is supported **for compatibility only** and is **deprecated**. Store web-specific templates in TWiki topics instead.
+> 2. templates/%RED%script%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl for each %RED%skin%ENDCOLOR% on the skin path
+> 3. templates/%RED%web%ENDCOLOR%/%RED%script%ENDCOLOR%.tmpl
+> - %X% this usage is supported **for compatibility only** and is **deprecated**. Store web-specific templates in TWiki topics instead.
+> 4. templates/%RED%script%ENDCOLOR%.tmpl
+> 5. The TWiki topic %RED%web%ENDCOLOR%.%RED%topic%ENDCOLOR% if the template name can be parsed into %RED%web%ENDCOLOR%.%RED%topic%ENDCOLOR%
+> 6. The TWiki topic %RED%web%ENDCOLOR%.%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template for each %RED%skin%ENDCOLOR% on the skin path
+> 7. The TWiki topic %RED%web%ENDCOLOR%.%RED%Script%ENDCOLOR%Template
+> 8. The TWiki topic TWiki.%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template for each %RED%skin%ENDCOLOR% on the skin path
+> 9. The TWiki topic TWiki.%RED%Script%ENDCOLOR%Template
+>
+> **Legend:**
+>
+> - %RED%script%ENDCOLOR% refers to the script name, e.g `view`, `edit`
+> - %RED%Script%ENDCOLOR% refers to the same, but with the first character capitalized, e.g `View`
+> - %RED%skin%ENDCOLOR% refers to a skin name, e.g `dragon`, `pattern`. All skins are checked at each stage, in the order they appear in the skin path.
+> - %RED%Skin%ENDCOLOR% refers to the same, but with the first character capitalized, e.g `Dragon`
+> - %RED%web%ENDCOLOR% refers to the current web
+
+For example, the `example` template file will be searched for in the following places, when the current web is `Thisweb` and the skin path is `print,pattern`:
+
+1. `templates/Thisweb/example.print.tmpl` _deprecated; don't rely on it_
+2. `templates/Thisweb/example.pattern.tmpl` _deprecated; don't rely on it_
+3. `templates/example.print.tmpl`
+4. `templates/example.pattern.tmpl`
+5. `templates/Thisweb/example.tmpl` _deprecated; don't rely on it_
+6. `templates/example.tmpl`
+7. `Thisweb.PrintSkinExampleTemplate`
+8. `Thisweb.PatternSkinExampleTemplate`
+9. `Thisweb.ExampleTemplate`
+10. `TWiki.PrintSkinExampleTemplate`
+11. `TWiki.PatternSkinExampleTemplate`
+12. `TWiki.ExampleTemplate`
+
+Template names are usually derived from the name of the currently executing script; however it is also possible to override these settings in the `view` and `edit` scripts, for example when a topic-specific template is required. Two preference variables can be user to override the templates used:
+
+- `VIEW_TEMPLATE` sets the template to be used for viewing a topic
+- `EDIT_TEMPLATE` sets the template for editing a topic.
+
+If these preferences are set locally (using _Local_ instead of _Set_) for a topic, in [[WebPreferences]], in [[Main.TWikiPreferences|Main/TWikiPreferences]], or [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] (using _Set_), the indicated templates will be chosen for `view` and `edit` respectively. The template search order is as specified above.
-### <a name="Master Templates"></a> Master Templates
+## <a name="Master Templates"></a> Master Templates
-Common parts, appearing in two or more templates, can be defined in a master template and then shared by others: <code>**twiki.tmpl**</code> is the default master template.
+Master templates use the block definition directives (`%TMPL:DEF` and `%TMPL:END%`) to define common sections that appear in two or more other templates. <code>**twiki.tmpl**</code> is the default master template.
> <table border="1" cellpadding="0" cellspacing="0">
> <tr>
<a name="HtmlTemplates"></a>
-### <a name="HTML Page Templates"></a> HTML Page Templates
-
-TWiki uses HTML template files for all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
-
-Templates are stored either in the <code>**twiki/templates**</code> directory or in user topics. As an example, <code>**twiki/templates/view.tmpl**</code> is the template file for the <code>**twiki/bin/view**</code> script.
-
-%H% Templates can be overloaded by individual webs.
-
-%H% [[TWikiSkins]] can overload the standard templates.
-
-TWiki uses the following search order to determine which template to use:
-
-> <table border="1" cellpadding="0" cellspacing="0">
-> <tr>
-> <th bgcolor="#99CCCC"><strong> If a skin is specified </strong></th>
-> <th bgcolor="#99CCCC"><strong> If no skin is specified </strong></th>
-> </tr>
-> <tr>
-> <td><code>templates/%WEB%/%RED%script.%RED%skin%ENDCOLOR%.tmpl</code></td>
-> <td><code>templates/%WEB%/%RED%script%ENDCOLOR%.tmpl</code></td>
-> </tr>
-> <tr>
-> <td><code>templates/%RED%script%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl</code></td>
-> <td><code>templates/%RED%script%ENDCOLOR%.tmpl</code></td>
-> </tr>
-> <tr>
-> <td><code>data/%WEB%/%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template.txt</code></td>
-> <td><code>data/%WEB%/%RED%Script%ENDCOLOR%Template.txt</code></td>
-> </tr>
-> <tr>
-> <td><code>data/TWiki/%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template.txt</code></td>
-> <td><code>data/TWiki/%RED%Script%ENDCOLOR%Template.txt</code></td>
-> </tr>
-> <tr>
-> <td colspan="2"><strong>Legend:</strong> %BB% %RED%script%ENDCOLOR% refers to the script name, e.g <code>view</code>, <code>edit</code> %BB% %RED%Script%ENDCOLOR% refers to the same, but with the first character capitalized, e.g <code>View</code> %BB% %RED%skin%ENDCOLOR% refers to the skin name, e.g <code>dragon</code>, <code>pattern</code> %BB% %RED%Skin%ENDCOLOR% refers to the same, but with the first character capitalized, e.g <code>Dragon</code> %BB% <code>%WEB%</code> refers to the current web </td>
-> </tr>
-> </table>
+## <a name="HTML Page Templates"></a> HTML Page Templates
-Additionally (and primarily for use in `%TMPL:INCLUDE{}%`) the template name may be a wiki topic name, specified as `%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%`, in which case the search is:
+HTML page templates are files of HTML mixed with template directives that tell TWiki how to build up an HTML page. As described above, the template system supports the use of 'include' directives that let you re-use the same sections of HTML - such as headers and footers - in several different places.
-> <table border="1" cellpadding="0" cellspacing="0">
-> <tr>
-> <th bgcolor="#99CCCC"><strong> If a skin is specified </strong></th>
-> <th bgcolor="#99CCCC"><strong> If no skin is specified </strong></th>
-> </tr>
-> <tr>
-> <td><code>templates/%RED%web%ENDCOLOR%/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl</code></td>
-> <td><code>templates/%RED%web%ENDCOLOR%/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.tmpl</code></td>
-> </tr>
-> <tr>
-> <td><code>templates/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl</code></td>
-> <td><code>templates/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.tmpl</code></td>
-> </tr>
-> <tr>
-> <td align="center" colspan="2"><code>data/%RED%Web%ENDCOLOR%/%RED%Topic%ENDCOLOR%.txt</code></td>
-> </tr>
-> </table>
-
-If %RED%Web%ENDCOLOR% is not specified in the INCLUDE, it defaults to TWiki, and the search to the first type.
+TWiki uses HTML page templates when composing the output from all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
-Special variables are used in templates, especially in `view`, to display [[meta data|Main/TWikiMetaData#MetaDataRendering]].
+HTML page templates are also used in the definition of [[TWikiSkins]].
<a name="TemplateTopics"></a>
-### <a name="Template Topics"></a> Template Topics
+## <a name="Template Topics"></a> Template Topics
Template topics define the default text for new topics. There are three types of template topic:
> </tr>
> </table>
-All template topics are located in the TWiki web. The [[WebTopicEditTemplate]] can be overloaded. When you create a new topic, TWiki locates a topic to use as a content template according to the following search order:
+When you create a new topic, TWiki locates a topic to use as a content template according to the following search order:
-1. A topic name specified by the `templatetopic` CGI parameter.
+1. A topic name specified by the `templatetopic` CGI parameter
+ - if no web is specified, the current web is searched first and then the TWiki web
2. WebTopicEditTemplate in the current web
3. WebTopicEditTemplate in the TWiki web
-#### <a name="Edit Template Topics and Variabl"></a> Edit Template Topics and Variable Expansion
+<a name="TemplateTopicsVars"></a>
+
+### <a name="Edit Template Topics and Variabl"></a> Edit Template Topics and Variable Expansion
The following variables get expanded when a user creates a new topic based on a template topic:
> </tr>
> <tr>
> <td><code>%DATE%</code></td>
-> <td> Current date, e.g. <code>29 Jun 2010</code></td>
+> <td> Signature format date. See [[Main/TWikiVariables#VarDATE]]</td>
> </tr>
> <tr>
-> <td><code>%USERNAME%</code></td>
-> <td> Login name, e.g. <code>jsmith</code></td>
+> <td><code>%GMTIME%</code></td>
+> <td> Date/time. See [[Main/TWikiVariables#VarGMTIME]]</td>
> </tr>
> <tr>
-> <td><code>%WIKINAME%</code></td>
-> <td>[[Main/WikiName]] of user, e.g. <code>JohnSmith</code></td>
+> <td><code>%GMTIME{...}%</code></td>
+> <td> Formatted date/time. See [[Main/TWikiVariables#VarGMTIME2]]</td>
> </tr>
> <tr>
-> <td><code>%WIKIUSERNAME%</code></td>
-> <td> User name, e.g. <code>Main.JohnSmith</code></td>
+> <td><code>%NOP%</code></td>
+> <td> A no-operation variable that gets removed. Useful to prevent a SEARCH from hitting an edit template topic; also useful to escape a variable like <code>%URLPARAM%NOP%{...}%</code></td>
+> </tr>
+> <tr>
+> <td><code>%STARTSECTION{type="templateonly"}%%BR%...%BR%%ENDSECTION{type="templateonly"}%</code></td>
+> <td> Text that gets removed when a new topic based on the template is created. See notes below. </td>
+> </tr>
+> <tr>
+> <td><code>%SERVERTIME%</code></td>
+> <td> Date/time. See [[Main/TWikiVariables#VarSERVERTIME]]</td>
+> </tr>
+> <tr>
+> <td><code>%SERVERTIME{...}%</code></td>
+> <td> Formatted date/time. See [[Main/TWikiVariables#VarSERVERTIME2]]</td>
+> </tr>
+> <tr>
+> <td><code>%USERNAME%</code></td>
+> <td> Login name of user who is instantiating the new topic, e.g. admin </td>
> </tr>
> <tr>
> <td><code>%URLPARAM{"name"}%</code></td>
> <td> Value of a named URL parameter </td>
> </tr>
> <tr>
-> <td><code>%NOP%</code></td>
-> <td> A no-operation variable that gets removed. Useful to prevent a SEARCH from hitting an edit template topic; also useful to escape a variable like <code>%URLPARAM%NOP%{...}%</code></td>
+> <td><code>%WIKINAME%</code></td>
+> <td>[[Main/WikiName]] of user who is instantiating the new topic, e.g. admin </td>
> </tr>
> <tr>
-> <td><code>%NOP{ ... }%</code></td>
-> <td> A no-operation text that gets removed. Useful to write-protect an edit template topic, but not the topics based this template topic. See notes below. Example:%BR% <code>%NOP{%BR% * Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup%BR% }%</code></td>
+> <td><code>%WIKIUSERNAME%</code></td>
+> <td> User name of user who is instantiating the new tpoic, e.g. Main.admin </td>
> </tr>
> </table>
-**_Notes:_**
+`%STARTSECTION{type="templateonly"}%%BR%...%BR%%ENDSECTION{type="templateonly"}%` markers are used to embed text that you _do not_ want expanded when a new topic based on the template topic is created. For example, you might want to write in the template topic:
+
+ %STARTSECTION{type="templateonly"}%
+ This template can only be changed by:
+ * Set ALLOWTOPICCHANGE = %MAINWEB%.TWikiAdminGroup
+ %ENDSECTION{type="templateonly"}%
+
+This will restrict who can edit the template topic, but will get removed when a new topic based on that template topic is created.
-- Unlike other variables, `%NOP{ ... }%` can span multiple lines.
-- The scan for the closing `}%` pattern is "non-greedy", that is, it stops at the first occurance. That means, you need to escape variables with parameters located inside `%NOP{ ... }%`: Insert a `%NOP%` between `}` and `%`. Silly example: `%NOP{ %GMTIME{"$year"}%NOP%% }%`.
+`%NOP%` can be used to prevent expansion of TWiki variables that would otherwise be expanded during topic creation e.g.i escape `%nop>SERVERTIME%` with `%SER%NOP%VERTIME%`.
All other variables are unchanged, e.g. are carried over "as is" into the new topic.
-#### <a name="Template Topics in Action"></a> Template Topics in Action
+### <a name="Template Topics in Action"></a> Template Topics in Action
Here is an example for creating new topics based on a specific template topic:
-<form action="http://www.dementia.org/twiki//edit/%WEB%/" name="new">
+<form action="http://www.dementia.org/twiki/edit/%WEB%/" name="new">
<ul>
- <li> New example topic: <input name="topic" size="23" type="text" value="ExampleTopic2010x06x29" /> <input name="templatetopic" type="hidden" value="ExampleTopicTemplate" /> <input name="topicparent" type="hidden" value="%TOPIC%" /> <input name="onlywikiname" type="hidden" value="on" /> <input name="onlynewtopic" type="hidden" value="on" /> <input type="submit" value="Create" /> (date format is YYYYxMMxDD) </li>
+ <li> New example topic: <input name="topic" size="26" type="text" value="ExampleTopic2010x06x29" /> <input type="submit" value="Create" /> <input name="templatetopic" type="hidden" value="ExampleTopicTemplate" /> <input name="topicparent" type="hidden" value="%TOPIC%" /> <input name="onlywikiname" type="hidden" value="on" /> <input name="onlynewtopic" type="hidden" value="on" /> (date format is YYYYxMMxDD) </li>
</ul>
</form>
The above form asks for a topic name. A hidden input tag named <code>**templatetopic**</code> specifies [[ExampleTopicTemplate]] as the template topic to use. Here is the HTML source of the form:
- <form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%"}%/">
+ <form name="new" action="%SCRIPTURLPATH{edit}%/%WEB%/">
* New example topic:
- <input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="23" />
+ <input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="26" />
<input type="hidden" name="templatetopic" value="ExampleTopicTemplate" />
<input type="hidden" name="topicparent" value="%TOPIC%" />
<input type="hidden" name="onlywikiname" value="on" />
<input type="hidden" name="onlynewtopic" value="on" />
- <input type="submit" value="Create" />
+ <input type="submit" value="Create" />
(date format is <nop>YYYYxMMxDD)
</form>
-The `edit` scipt understands the following parameters, typically supplied by HTML input fields:
-
-> <table border="1" cellpadding="0" cellspacing="0">
-> <tr>
-> <th bgcolor="#99CCCC"><strong> Parameter: </strong></th>
-> <th bgcolor="#99CCCC"><strong> Description: </strong></th>
-> </tr>
-> <tr>
-> <td><code>topic</code></td>
-> <td> Name of topic to create. Can be set in a text field, or is set programmatically (e.g. with a sequential number) </td>
-> </tr>
-> <tr>
-> <td><code>onlywikiname</code></td>
-> <td> If set, TWiki will complain if the topic name is not a [[Main/WikiWord]]</td>
-> </tr>
-> <tr>
-> <td><code>onlynewtopic</code></td>
-> <td> If set, TWiki will complain if a topic of the same name already exists </td>
-> </tr>
-> <tr>
-> <td><code>templatetopic</code></td>
-> <td> The name of the template topic, e.g. topic used to copy the initial content </td>
-> </tr>
-> <tr>
-> <td><code>topicparent</code></td>
-> <td> Sets the parent topic </td>
-> </tr>
-> <tr>
-> <td><code>TopicClassification</code></td>
-> <td> Assuming the template topic has a form with a field called "TopicClassification", it will set the value of the field </td>
-> </tr>
-> <tr>
-> <td><code>contenttype</code></td>
-> <td> Optional parameter that defines the application type to write into the CGI header. Defaults to <code>text/html</code>. May be used to invoke alternative client applications </td>
-> </tr>
-> <tr>
-> <td><code>anyname</code></td>
-> <td> Any parameter can passed to the new topic; if the template topic contains <code>%URLPARAM{"anyname"}%</code>, it will be replaced by its value </td>
-> </tr>
-> </table>
+See [[TWikiScripts]] for details of the parameters that the `edit` script understands.
%T% **TIP:** You can use the `%WIKIUSERNAME%` and `%DATE%` variables in your topic templates to include the signature of the person creating a new topic. The variables are expanded into fixed text when a new topic is created. The standard signature is: <br /><code>**-- %WIKIUSERNAME% - %DATE%**</code>
-## <a name="Templates by Example"></a> Templates by Example
+<a name="AutomaticallyGeneratedTopicname"></a>
+
+### <a name="Automatically Generated Topicnam"></a> Automatically Generated Topicname
+
+If you want to make a TWiki application where you need automatically generated unique topicnames, you can use 10 X's in the edit / save URL, and they will be replaced on topic save with a count value. For example, BugIDXXXXXXXXXX will result in topics named BugID0, BugID1, BugID2 etc.
+
+Example link to create a new topic:%BR%
-Attached is an example of an oops based template `oopsbase.tmpl` and an example oops dialog `oopstest.tmpl` based on the base template. %A% **NOTE:** This isn't the release version, just a quick, simple demo.
+ [[%SCRIPTURLPATH{"edit"}%/%WEB%/BugIDXXXXXXXXXX?templatetopic=BugTemplate&topicparent=%TOPIC%&t=%SERVERTIME{"$day$hour$min$sec"}%][Create new item]]=
+
+## <a name="Master Templates by Example"></a> Master Templates by Example
+
+Attached is an example of an oops based template `oopsbase.tmpl` and an example oops dialog `oopstest.tmpl` based on the base template. %T% **NOTE:** This isn't the release version, just a quick, simple demo.
### <a name="Base template oopsbase.tmpl"></a> Base template oopsbase.tmpl
> <html>
> <head>
> <title> %WIKITOOLNAME% . %WEB% . %TOPIC% %.TMPL:P{"titleaction"}%</title>
-> <base href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%">
+> <base href="%SCRIPTURLPATH{"view"}%/%WEB%/%TOPIC%">
> <meta name="robots" content="noindex">
> </head>
> <body bgcolor="#FFFFFF">
> %TMPL:INCLUDE{"oopsbase"}%
> </pre></td>
> </tr>
-> <tr>
-> <td> </table > </td>
-> </tr>
> </table>
### <a name="Sample screen shot of oopstest.t"></a> Sample screen shot of oopstest.tmpl
> </tr>
> </table>
-## <a name="Known Issues"></a> Known Issues
-
-- A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a `.tmpl` filename extension - it contained unresolved `%VARIABLES%`, but could still be previewed directly in a browser.
-
--- TWiki:Main.CrawfordCurrie - 30 Jun 2004 %BR% -- TWiki:Main.PeterThoeny - 15 Aug 2004 %BR% -- TWiki:Main.MikeMannix - 14 Sep 2001 %BR% -- TWiki:Main.DavidLeBlanc - 11 Mar 2002
+**_Related Topics:_** [[TWikiSkins]], [[DeveloperDocumentationCategory]], [[AdminDocumentationCategory]]
--- /dev/null
+# <a name="Package <code>TWiki::Templates="></a> Package =TWiki::Templates
+
+Support for the TWiki template language.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Templates="> Package TWiki::Templates</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session)"> ClassMethod new <tt>($session)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>haveTemplate</strong> ($na"> ObjectMethod haveTemplate <tt>($name) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>expandTemplate</strong> ($"> ObjectMethod expandTemplate <tt>($params) -> $string</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+The following tokens are supported by this language:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> %TMPL:P% </td>
+ <td> Instantiates a previously defined template </td>
+ </tr>
+ <tr>
+ <td> %TMPL:DEF% </td>
+ <td> Opens a template definition </td>
+ </tr>
+ <tr>
+ <td> %TMPL:END% </td>
+ <td> Closes a template definition </td>
+ </tr>
+ <tr>
+ <td> %TMPL:INCLUDE% </td>
+ <td> Includes another file of templates </td>
+ </tr>
+</table>
+
+Note; the template cache does not get reset during initialisation, so the haveTemplate test will return true if a template was loaded during a previous run when used with mod\_perl or speedycgi. Frustrating for the template author, but they just have to switch off the accelerators during development.
+
+This is to all intents and purposes a singleton object. It could easily be coverted into a true singleton (template manager).
+
+## <a name="ClassMethod <strong>new</strong> ($session)"></a> [[ClassMethod]] **new** `($session)`
+
+Constructor. Creates a new template database object.
+
+- $session - session (TWiki) object
+
+## <a name="ObjectMethod <strong>haveTemplate</strong> ($na"></a> [[ObjectMethod]] **haveTemplate** `($name) -> $boolean`
+
+Return true if the template exists and is loaded into the cache
+
+## <a name="ObjectMethod <strong>expandTemplate</strong> ($"></a> [[ObjectMethod]] **expandTemplate** `($params) -> $string`
+
+Expand the template specified in the parameter string using `tmplP`.
+
+Examples:
+
+ $tmpls->expandTemplate('"blah");
+ $tmpls->expandTemplate('context="view" then="sigh" else="humph"');
+
+ ---++ ObjectMethod *tmplP* <tt>($attrs) -> $string</tt>
+
+ Return value expanded text of the template, as found from looking
+ in the register of template definitions. The attrs can contain a template
+ name in _DEFAULT, and / or =context=, =then= and =else= values.
+
+ Recursively expands any contained TMPL:P tags.
+
+ Note that it would be trivial to add template parameters to this,
+ simply by iterating over the other parameters (other than _DEFAULT, context,
+ then and else) and doing a s/// in the template for that parameter value. This
+ would add considerably to the power of templates. There is already code
+ to do this in the MacrosPlugin.
+
+ ---++ ObjectMethod *readTemplate* <tt>($name,$skins,$web) -> $text</tt>
+
+ Return value: expanded template text
+
+ Reads a template, constructing a candidate name for the template thus
+ 0 looks for file =$name.$skin.tmpl= (for each skin)
+ 0 in =templates/$web=
+ 0 in =templates=, look for
+ 0 looks for file =$name.tmpl=
+ 0 in =templates/$web=
+ 0 in =templates=, look for
+ 0 if a template is not found, tries in this order
+ 0 parse =$name= into a web name (default to $web) and a topic name and looks for this topic
+ 0 looks for topic =${skin}Skin${name}Template=
+ 0 in $web (for each skin)
+ 0 in =TWiki::cfg{SystemWebName}= (for each skin)
+ 0 looks for topic =${name}Template=
+ 0 in $web (for each skin)
+ 0 in =TWiki::cfg{SystemWebName}= (for each skin)
+ In the event that the read fails (template not found, access permissions fail)
+ returns the empty string ''.
+
+ =$skin=, =$web= and =$name= are forced to an upper-case first character
+ when composing user topic names.
+
+ If template text is found, extracts include statements and fully expands them.
+ Also extracts template definitions and adds them to the
+ list of loaded templates, overwriting any previous definition.
--- /dev/null
+# <a name="Package <code>TWiki::Time="></a> Package =TWiki::Time
+
+Time handling functions.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Time="> Package TWiki::Time</a><ul>
+ <li><a href="#StaticMethod <strong>parseTime</strong> ($szDat"> StaticMethod parseTime <tt>($szDate) -> $iSecs</tt></a></li>
+ <li><a href="#StaticMethod <strong>formatTime</strong> ($epoc"> StaticMethod formatTime <tt>($epochSeconds,$formatString,$outputTimeZone) -> $value</tt></a></li>
+ <li><a href="#StaticMethod <strong>formatDelta</strong> ($s)"> StaticMethod formatDelta <tt>($s) -> $string</tt></a></li>
+ <li><a href="#StaticMethod <strong>parseInterval</strong> ($s"> StaticMethod parseInterval <tt>($szInterval) -> [$iSecs,$iSecs]</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>parseTime</strong> ($szDat"></a> [[StaticMethod]] **parseTime** `($szDate) -> $iSecs`
+
+Convert string date/time to seconds since epoch.
+
+- `$sDate` - date/time string
+
+Handles the following formats:
+
+- 31 Dec 2001 - 23:59
+- 2001/12/31 23:59:59
+- 2001.12.31.23.59.59
+- 2001/12/31 23:59
+- 2001.12.31.23.59
+- 2001-12-31T23:59:59Z
+- 2001-12-31T23:59:59+01:00
+- 2001-12-31T23:59Z
+- 2001-12-31T23:59+01:00
+
+If the date format was not recognised, will return 0.
+
+## <a name="StaticMethod <strong>formatTime</strong> ($epoc"></a> [[StaticMethod]] **formatTime** `($epochSeconds,$formatString,$outputTimeZone) -> $value`
+
+- `$epochSeconds` epochSecs GMT
+- `$formatString` twiki time date format, default `$day $month $year - $hour:$min`
+- `$outputTimeZone` timezone to display, `gmtime` or `servertime`, default is whatever is set in $TWiki::cfg\{DisplayTimeValues\}
+
+`$formatString` supports:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> $seconds </td>
+ <td> secs </td>
+ </tr>
+ <tr>
+ <td> $minutes </td>
+ <td> mins </td>
+ </tr>
+ <tr>
+ <td> $hours </td>
+ <td> hours </td>
+ </tr>
+ <tr>
+ <td> $day </td>
+ <td> date </td>
+ </tr>
+ <tr>
+ <td> $wday </td>
+ <td> weekday name </td>
+ </tr>
+ <tr>
+ <td> $dow </td>
+ <td> day number (0 = Sunday) </td>
+ </tr>
+ <tr>
+ <td> $week </td>
+ <td> week number </td>
+ </tr>
+ <tr>
+ <td> $month </td>
+ <td> month name </td>
+ </tr>
+ <tr>
+ <td> $mo </td>
+ <td> month number </td>
+ </tr>
+ <tr>
+ <td> $year </td>
+ <td> 4-digit year </td>
+ </tr>
+ <tr>
+ <td> $ye </td>
+ <td> 2-digit year </td>
+ </tr>
+ <tr>
+ <td> $http </td>
+ <td> ful HTTP header format date/time </td>
+ </tr>
+ <tr>
+ <td> $email </td>
+ <td> full email format date/time </td>
+ </tr>
+ <tr>
+ <td> $rcs </td>
+ <td> full RCS format date/time </td>
+ </tr>
+ <tr>
+ <td> $epoch </td>
+ <td> seconds since 1st January 1970 </td>
+ </tr>
+</table>
+
+## <a name="StaticMethod <strong>formatDelta</strong> ($s)"></a><a name="StaticMethod <strong>formatDelta</strong> ($s) "></a> [[StaticMethod]] **formatDelta** `($s) -> $string`
+
+Format a time in seconds as a string. For example, "1 day, 3 hours, 2 minutes, 6 seconds"
+
+## <a name="StaticMethod <strong>parseInterval</strong> ($s"></a> [[StaticMethod]] **parseInterval** `($szInterval) -> [$iSecs,$iSecs]`
+
+Convert string representing a time interval to a pair of integers representing the amount of seconds since epoch for the start and end extremes of the time interval.
+
+- `$szInterval` - time interval string
+
+in yacc syntax, grammar and actions:
+
+ interval ::= date { $$.start = fillStart($1); $$.end = fillEnd($1); }
+ | date '/' date { $$.start = fillStart($1); $$.end = fillEnd($3); }
+ | 'P' duration '/' date { $$.start = fillEnd($4)-$2; $$.end = fillEnd($4); }
+ | date '/' 'P' duration { $$.start = fillStart($1); $$.end = fillStart($1)+$4; }
+ ;
+
+an `interval` may be followed by a timezone specification string (this is not supported yet).
+
+`duration` has the form (regular expression):
+
+ P(<number><nameOfDuration>)+
+
+nameOfDuration may be one of:
+
+- y(year), m(month), w(week), d(day), h(hour), M(minute), S(second)
+
+`date` follows ISO8601 and must include hypens. (any amount of trailing elements may be omitted and will be filled in differently on the differents ends of the interval as to include the longest possible interval):
+
+- 2001-01-01T00:00:00
+- 2001-12-31T23:59:59
+
+timezone is optional and not supported yet.
+
+If the format is not recognised, will return empty interval [0,0].
+
+TODO: timezone testing, especially on non valid strings
--- /dev/null
+# <a name="The Go Box as a browser"></a> The Go Box as a browser
+
+The go box (also called jump box) is not only a tool to allow you to jump from page to page, you can use the Go Box to search for documents. If you do not know the entire name of the TWiki topic you are looking, partially putting in the topic name in the [[GoBox]] will result in a literal search in the TWiki topics.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 10 Jan 2005
--- /dev/null
+# <a name="WebChanges to see recent activit"></a><a name="_WebChanges to see recent activi"></a> WebChanges to see recent activity
+
+Each TWiki web has a [[WebChanges]] topic that lists recent activity from all editors of the web. This page can be useful when looking for recently contributed content of a colleague.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 11 Jan 2005
--- /dev/null
+# <a name="Raw Text link"></a> Raw Text link
+
+At the bottom of the page next to **Edit** and **Attach**, there is a **Raw Text** link that allows one to easily see how the TWiki topic looks in its raw form. This allows you to see and copy raw text without the need to edit and lock a topic.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 17 Jan 2005
--- /dev/null
+# <a name="E-mail alert of topic changes"></a> E-mail alert of topic changes
+
+Subscribing to [[WebNotify]] will enable TWiki to send you details of changes made on topics in a certain web. You can choose to be notified of changes in an entire web or just a subset of topics in a web. Each web has its own [[WebNotify]] subscription.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 19 Jan 2005
--- /dev/null
+# <a name="Re-parenting a topic"></a> Re-parenting a topic
+
+The breadcrumb displayed with a particular TWiki topic is constructed with a topic's **Parent**. On the footer to each page there is a link called **More**. Within this page there is a topic action that will allow you to select a new parent for the page.
+
+To re-parent a page:
+
+1. Select a new topic from the list of topics to be the topic's parent
+2. Click on the **Edit** button below the list of topics
+3. Click on the **Save** button
+
+You will notice that the breadcrumb will now reflect the new parent.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 19 Jan 2005
--- /dev/null
+# <a name="Creating a Table of Contents"></a> Creating a Table of Contents
+
+The [[TWikiVariables]] `%TOC%` will automatically create a table of contents for a topic based on the headers of the topic. To exclude a heading from a `%TOC%` add `!!` to the end of the syntax for a header, e.g. write `---+!!` for a `---+` heading.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 19 Jan 2005
--- /dev/null
+# <a name="Linking to a file attachment"></a> Linking to a file attachment
+
+One can create a link to a file attachment using one of the following [[TWikiVariables]], `%ATTACHURL%` or `%PUBURL%`.
+
+`%ATTACHURL%` is the full URL for attachments in the current topic. For example:
+
+`%ATTACHURL%/image.gif`
+
+To link to a file attachment in another topic, use the `%PUBURL%` variable. For example:
+
+`%PUBURL%/%WEB%/OtherTopic/image.gif`
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Escaping TWiki rendering"></a> Escaping TWiki rendering
+
+Use the verbatim tag to surround code excerpts and other formatted text with `<verbatim>` and `</verbatim>` tags. Each tag must be on a line by itself.
+
+For Example:
+
+ <verbatim>
+ | *Header1* | *Header1* |
+ | Data1 | Data2 |
+ </verbatim>
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Disabling links in large blocks"></a><a name="Disabling links in large blocks "></a> Disabling links in large blocks of text
+
+You can disable automatic linking of [[WikiWords]] by surrounding the text with `<noautolink>` and `</noautolink>` tags. Each tag must be on a line by itself.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Disabling individual _WikiWords"></a> Disabling individual WikiWords
+
+Prevent a [[WikiWord]] from being linked by prefixing it with an exclamation point.
+
+Example: To escape `SunOs` write `!SunOs` to get SunOs.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Server side include"></a> Server side include
+
+To include the contents of a web page or TWiki topic, use `%INCLUDE{"page"}%`.
+
+Examples:
+
+- `%INCLUDE{"http://www.google.com/"}%`
+- `%INCLUDE{"TWiki.WebHome"}%`
+- `%INCLUDE{"WebHome"}%`
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="WikiWords for linking"></a><a name="_WikiWords for linking"></a> WikiWords for linking
+
+WikiWords are capitalized words, run together, such as **WebPreferences** and **CollaborationPlatform**. Using a lot of WikiWords creates a good browsing experience for the reader. %WIKITOOLNAME% links WikiWords automatically to topics of that name.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="Preference settings"></a> Preference settings
+
+TWiki has four levels of preferences settings:
+
+1. Site-level settings: [[TWikiPreferences]]
+ - Site name, proxy settings, access control, skin
+2. Web-level settings: located in each Web, e.g. [[WebPreferences]]
+ - Web specific access control, navigation links, colors
+3. User-level settings: In each user's home page, e.g. Main.admin
+ - Edit Box Parameters
+ - Horizontal size of text edit box:
+ - Set EDITBOXWIDTH = 70
+ - Vertical size of text edit box:
+ - Set EDITBOXHEIGHT = 15
+4. Topic-level settings: Affecting current topic, for web applications
+
+Preferences can be overridden by the next level down.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="File attachments"></a> File attachments
+
+One can attach files to any topic. The action of attaching a file to a topic is similar to attaching a file to an e-mail. The link to attach a file is located at the end of the topic.
+
+Features:
+
+- Browse file to upload
+- "Link" checkbox - to inline images
+- "Hide file" checkbox
+- Version control
+- "manage" link to see older revisions and to change properties
+
+[[More Information...|Main/FileAttachment]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="Breadcrumb"></a> Breadcrumb
+
+The breadcrumb of a topic shows you page hierarchy. It is constructed using a topic's parent setting.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="TWiki Skins"></a> TWiki Skins
+
+Skins overlay regular templates with alternate header/footer layouts. You can use Skins to change the look of a TWiki topic, for example, the layout of the header and footer. Rendered text between header and footer does not change. You can also use Skins to define an alternate view, like a view optimized for printing.
+
+To see the installed [[TWikiSkins]], see [[TWikiSkinBrowser]].
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="Revision control"></a> Revision control
+
+TWiki has "Soft security" - anyone can change anything, but changes are logged. There is a complete audit trail:
+
+- Version
+- Date of last revision
+- Person who made change
+
+is recorded. At the footer of each topic one can click on previous versions. One can also see the differences between revisions by clicking on the <u>></u> sign located between revisions of a topic.
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="Inline search"></a> Inline search
+
+To embed a search in a topic, use the `%SEARCH{ <parameters> }%` TWiki Variable. The search variable is used by many TWiki based applications.
+
+[[More Information...|Main/TWikiVariables#VarSEARCH]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 01 Feb 2005
--- /dev/null
+# <a name="Commenting with hidden text"></a> Commenting with hidden text
+
+To hide sections of a TWiki topic, use HTML comments.
+
+Example comment within a sentence:
+
+`Visible <!--- and hidden ---> text`
+
+Example spanning multiple lines:
+
+ <!--
+ * Useful to hide settings:
+ * Set EXAMPLE = This is hidden
+ -->
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="InterwikiPlugin links"></a><a name="_InterwikiPlugin links"></a> InterwikiPlugin links
+
+The [[InterwikiPlugin]] automatically links `ExternalSite:Page` text to external sites based on aliases defined in the [[InterWikis]] topic. This enables people to "shortcut" long URLs.
+
+[[More information...|Main/InterwikiPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="SmiliesPlugin emoticons"></a><a name="_SmiliesPlugin emoticons"></a> SmiliesPlugin emoticons
+
+Smilies are common in e-mail messages and bulletin board posts. They are used to convey an emotion, such as a smile `:-)` :-) or a frown `:-(` :-( . This plugin automatically converts certain smilies to a nice small icon.
+
+[[More smilies...|Main/SmiliesPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Edit tables with _EditTablePlugi"></a> Edit tables with EditTablePlugin
+
+The [[EditTablePlugin]] allows you to edit TWiki tables using edit fields and drop down boxes. Tables have an [ Edit table ] button if preceeded by an `%EDITTABLE{...}%` variable. Each column can be a text field, a drop down box, a date field, etc. Multiple tables per topic are editable, but only one at a time can be edited.
+
+Example:
+
+Syntax: `%EDITTABLE{ format="| row, -1 | text, 20, init | select, 1, one, two, three, four | radio, 3,:-),:-I,:-( | label, 0, %SERVERTIME{"$day $mon $year $hour:$min"}% |" changerows="on" }%` <a name="edittable1"></a>
+
+<div>
+ <form action="http://www.dementia.org/twiki/viewauth#edittable1" method="post" name="edittable1"><input name="ettablenr" type="hidden" value="1" /> <input name="etedit" type="hidden" value="on" /><table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Nr </strong></th>
+ <th bgcolor="#99CCCC"><strong> Text field </strong></th>
+ <th bgcolor="#99CCCC"><strong> Drop down </strong></th>
+ <th bgcolor="#99CCCC"><strong> Mood </strong></th>
+ <th bgcolor="#99CCCC"><strong> Timestamp </strong></th>
+ </tr>
+ <tr>
+ <td> 1 </td>
+ <td> hello table </td>
+ <td> one </td>
+ <td> :-) </td>
+ <td> 26 Jun 2002 12:30 </td>
+ </tr>
+ <tr>
+ <td> 2 </td>
+ <td> </td>
+ <td> two </td>
+ <td> :-( </td>
+ <td> 27 Jun 2002 12:40 </td>
+ </tr>
+ </table><input name="etrows" type="hidden" value="3" /> <input type="submit" value="Edit table" /></form>
+</div>
+
+[[More Information...|Main/EditTablePlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 01 Feb 2005
--- /dev/null
+# <a name="Control table attributes with _T"></a> Control table attributes with TablePlugin
+
+The [[TablePlugin]] gives extra control of table display:
+
+- Allows sorting
+- Changing table properties like border width, cell spacing and cell padding
+- Changing background color and text color for header cells
+- Changing background color and text color for data cells - colors can _alternate_
+- Table attributes can be set and overridden in this order:
+ - Default `TABLEATTRIBUTES` Plugin setting in this topic
+ - A `TABLEATTRIBUTES` preferences setting on site-level ([[TWikiPreferences]]), web-level (any [[WebPreferences]]), or topic level. For example:
+ - `Set TABLEATTRIBUTES = tableborder="0" cellpadding="1" ...`
+
+To change table characteristics place `%TABLE{...}%` before the table.
+
+[[More Information...|Main/TablePlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 30 Jan 2005
--- /dev/null
+# <a name="Comment box with _CommentPlugin"></a> Comment box with CommentPlugin
+
+The [[CommentPlugin]] allows users to quickly post comments to a page without an edit/preview/save cycle.
+
+Write `%COMMENT{ attributes }%` or simply `%COMMENT%` anywhere in a TWiki topic.
+
+Example:
+
+<form name="disabled">
+ <table>
+ <tr valign="middle">
+ <td>
+ <textarea cols="40" name="comment" onblur="if(this.value=='')this.value=''" onfocus="if(this.value=='')this.value=''" rows="3" wrap="soft">This non-working example is for demonstration purposes only</textarea>
+ </td>
+ <td><input disabled type="submit" value="Add comment" /></td>
+ </tr>
+ </table>
+</form>
+
+[[More Information...|Main/CommentPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="SpreadSheetPlugin for dynamic co"></a><a name="_SpreadSheetPlugin for dynamic c"></a> SpreadSheetPlugin for dynamic content
+
+Over 60 formulae are available through the [[SpreadSheetPlugin]].
+
+For Example:
+
+- `$AVERAGE()`
+- `$IF()`
+- `$REPLACE()`
+- `$TIME()`
+
+A formula can be placed anywhere in a topic. not just in a TWiki table.
+
+Example:
+
+To space out [[WikiWords]], write:
+
+`%CALC{"$PROPERSPACE(TWikiGuest)"}%`
+
+to get:
+
+`TWiki Guest`
+
+[[More Information...|Main/SpreadSheetPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 01 Feb 2005
--- /dev/null
+# <a name="SlideShowPlugin for presentation"></a><a name="_SlideShowPlugin for presentatio"></a> SlideShowPlugin for presentations
+
+Use the [[SlideShowPlugin]] to convert a topic with headings and bullets into a slideshow presentation.
+
+This Plugin is useful for organizations that already have lots of content in TWiki: It is easy to create a web based presentation that contains many links to related content and to show live data of TWiki applications. The Plugin does not try to compete with the bells and whistles of the other presentation program, but the markup of TWiki and other Plugins like TWiki:Plugins/ChartPlugin, TWiki:Plugins.GaugePlugin, TWiki:Plugins.SpreadSheetPlugin, TWiki:Plugins.TWikiDrawPlugin can be used to create an appealing presentation.
+
+[[More Information...|Main/SlideShowPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 01 Feb 2005
--- /dev/null
+# <a name="Custom rendered bullets"></a> Custom rendered bullets
+
+The [[RenderListPlugin]] can render bulleted lists in a variety of different ways.
+
+Use `%RENDERLIST{ parameters }%` before any bulleted list.
+
+[[More Information...|Main/RenderListPlugin]]
+
+[[See More Tips...|Main/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="Keyword search"></a> Keyword search
+
+Interactive [[search|Main/WebSearch]] is a keyword search by default. For example, to search for all topics that contain "SOAP", "WSDL", a literal "web service", but not "shampoo", enter this:
+
+`soap +wsdl "web service" -shampoo`
+
+More [[search help|Main/SearchHelp]]
+
+[[See More Tips...|TWiki/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PeterThoeny - 06 Feb 2005
--- /dev/null
+# <a name="RSS news feed of topic changes"></a> RSS news feed of topic changes
+
+You can use an RSS news reader to find out what is new in a TWiki web. This complements [[WebChanges]] that shows recent changes in a web, and [[WebNotify]] where people can subscribe to get notified of recent changes by e-mail.
+
+For the Main web, point your RSS news reader to:
+
+<code> <http://www.dementia.org/twiki//view/Main/WebRss> </code>
+
+For other TWiki webs, replace `/Main/` with the name of the web:
+
+**_See also:_**
+
+- [[WebRssBase]] - help on TWiki RSS news feeds
+- TWiki:Codev/TWikiSyndication - TWiki RSS news feed documentation
+
+[[See More Tips...|TWiki/TWikiTipsOfTheDay]]
+
+-- TWiki:Main.PeterThoeny - 06 Feb 2005
--- /dev/null
+# <a name="TWiki Tips"></a> TWiki Tips
+
+TWiki Tips are tips and hints contributed by TWiki users. Use this form to search for tips. You can contribute new tips [[here|Main/TWikiTipsOfTheDayAddNew]].
+
+<form action="http://www.dementia.org/twiki//view/%WEB%/%TOPIC%"> Search (perl regular expression): <input name="searchfor" size="100" type="text" value="Enter search keywords here" /></form>
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+Total: tips
+
+**_See also:_** [[TWiki Tips Of The Day Administration|Main/TWikiTipsOfTheDayAdmin]]
--- /dev/null
+# <a name="TWiki Tips Of The Day"></a> TWiki Tips Of The Day
+
+These are all tips of the day. They are located in the TWiki web (official TWiki tips) and Main web (custom tips).
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+Total: tips
+
+**_See also:_** [[TWiki Tips Of The Day Administration|Main/TWikiTipsOfTheDayAdmin]]
+
+-- TWiki:Main.PaulineCheung - 06 Jan 2005
--- /dev/null
+# <a name="Add New TWiki Tip Of The Day"></a> Add New TWiki Tip Of The Day
+
+There are **Custom Tips** maintained on your local %WIKITOOLNAME% installation, **Official TWiki Tips** maintained on the TWiki.org web site, and **Plugin Tips** maintained by Plugin authors.
+
+## <a name="Add a Custom %WIKITOOLNAME% Tip"></a> Add a Custom %WIKITOOLNAME% Tip
+
+Custom tips are located in the Main web. You can add custom tips that are specific to your TWiki installation and to your organization in general.
+
+<form action="http://www.dementia.org/twiki//edit/Main/" name="newlocal"><input name="topic" type="hidden" value="TWikiCustomTip002" /> <input name="onlynewtopic" type="hidden" value="on" /> <input name="templatetopic" type="hidden" value="TWiki.TWikiTipsOfTheDayTemplate" /> New Custom Tip: TWikiCustomTip002 <input type="submit" value="Create" /></form>
+
+## <a name="Add an Official TWiki Tip"></a> Add an Official TWiki Tip
+
+Official TWiki tips are located in the TWiki web. Please do not submit new tips on your local TWiki installation since they will get lost on a TWiki upgrade. Visit TWiki:TWiki.TWikiTipsOfTheDayAddNew to contribute official TWiki tips.
+
+<form action="http://www.dementia.org/twiki//edit/%WEB%/" name="new"><input name="topic" type="hidden" value="TWikiTip002" /> <input name="onlynewtopic" type="hidden" value="on" /> <input name="topicparent" type="hidden" value="TWikiTipsOfTheDay" /> <input name="templatetopic" type="hidden" value="TWikiTipsOfTheDayTemplate" /> New Official TWiki Tip: TWikiTip002 <input type="hidden" value="Create" /></form>
+
+## <a name="Add a TWiki Tip for a Plugin"></a> Add a TWiki Tip for a Plugin
+
+If you are a Plugin author you can ship your TWiki:Plugins.PluginPackage with one (or more) tip of the day topic. Create the Plugin tip of the day topic here, then package it with your Plugin.
+
+<form action="http://www.dementia.org/twiki//edit/%WEB%/" name="new"><input name="onlynewtopic" type="hidden" value="on" /> <input name="topicparent" type="hidden" value="TWikiTipsOfTheDay" /> <input name="templatetopic" type="hidden" value="TWikiTipsOfTheDayTemplate" /> New Plugin Tip: <input name="topic" size="30" type="text" value="TWikiTipForMyOwnPlugin" /> <input type="submit" value="Create" /> (replace <code>MyOwnPlugin</code> with the name of your Plugin) </form>
+
+**_Related:_** [[TWikiTipsOfTheDay]], [[TWikiTipsOfTheDayAdmin]], [[TWikiTipsOfTheDayTemplate]]
+
+-- TWiki:Main.PaulineCheung - 18 Jan 2005
--- /dev/null
+# <a name="TWiki Tip Of The Day Administrat"></a> TWiki Tip Of The Day Administration
+
+## <a name="Adminstrative Pages"></a> Adminstrative Pages
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>[[Main/TWikiTipsOfTheDay]] <a href="http://www.dementia.org/twiki//edit/%WEB%/TWikiTipsOfTheDay?t=115749" target="_top"><img alt="Edit topic" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/edittopic.gif" width="16" /></a> [[Main/TWikiTipsOfTheDay]]</td>
+ <td> Aggregated List of All Tips, from Main and TWiki. </td>
+ </tr>
+ <tr>
+ <td>[[Main/TWikiTipsOfTheDayAddNew]] <a href="http://www.dementia.org/twiki//edit/%WEB%/TWikiTipsOfTheDayAddNew?t=115749" target="_top"><img alt="Edit topic" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/edittopic.gif" width="16" /></a> [[Main/TWikiTipsOfTheDayAddNew]]</td>
+ <td> Add A New Tip </td>
+ </tr>
+ <tr>
+ <td>[[Main/TWikiTipsOfTheDayInclude]] <a href="http://www.dementia.org/twiki//edit/%WEB%/TWikiTipsOfTheDayInclude?t=115749" target="_top"><img alt="Edit topic" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/edittopic.gif" width="16" /></a> [[Main/TWikiTipsOfTheDayInclude]]</td>
+ <td> This topic generates the random tip to display. It gets included to the focus box. </td>
+ </tr>
+ <tr>
+ <td>[[Main/TWikiTipsOfTheDayTemplate]] <a href="http://www.dementia.org/twiki//edit/%WEB%/TWikiTipsOfTheDayTemplate?t=115749" target="_top"><img alt="Edit topic" border="0" height="16" src="http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/edittopic.gif" width="16" /></a> [[Main/TWikiTipsOfTheDayTemplate]]</td>
+ <td> Template for new TWiki Tips </td>
+ </tr>
+</table>
+
+## <a name="Focus Box Example"></a> Focus Box Example
+
+<table border="0" width="200px">
+ <tr>
+ <td>
+ <p>
+ </p>
+ </td>
+ </tr>
+</table>
+
+-- TWiki:Main.PaulineCheung - 29 Jan 2005
--- /dev/null
+# <a name="TWiki Tips Of the Day Include"></a> TWiki Tips Of the Day Include
+
+This Page randomly picks a Tip of the day to display. The [[WebHome]] includes the part between the horizontal rules.
+
+----
+
+<div>
+ <div><strong><img align="top" alt="tip" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/tip.gif" width="16" /> TWiki Tip of the Day</strong><div>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) </div>
+ </div>
+</div>
+
+----
+
+**_See also:_** [[TWikiTipsOfTheDay]], [[TWikiTipsOfTheDayAdmin]]
--- /dev/null
+# <a name="Heading"></a> Heading
+
+Quick Summary with link to more information.
+
+[[See More Tips...|TWiki/TWikiTipsOfTheDay]]
+
+-- Main.admin - 29 Jun 2010
- name
- instantly identify what the topic is about
- - link to it from other topics just by typing it in it's [[WikiWord]]
+ - link to it from other topics just by typing in its [[WikiWord]]
- content
- edited by simply clicking the [[edit link|Main/WebHome#PageBottom]]
- - enter plain text, leaving a blank space between paragraphs like email (all you need)
- - enter simple TWiki shorthand to represent complex HTML and special TWiki tags
+ - enter plain text, leaving a blank space between paragraphs like e-mail (all you need)
+ - enter simple TWiki shorthand to represent complex HTML and special TWiki variables
- enter HTML if you are familiar with it
- include links to other topics, URLs, Web sites, files, images, sounds, or anything else you can put on a regular Web page
- handy pop-up quick reference
- fully configurable look and feel
- apply skins across an entire TWiki web, or to a single displayed page
- use included skins and easily create new ones
- - try the <code>**[Printable]**</code> skin below: stripped down headers and footers suitable for clean hard copy
+ - try the <code>**Printable**</code> skin below: stripped down headers and footers suitable for clean hard copy
- plug-ins
- new feature packages
- developer community evolving existing and new capabilities
The color-coded toolbar at the bottom of every topic displays a series of links, including:
-- <code>**[Attach]**</code> - pops a new screen for [[FileAttachments]]
-- <code>**[Ref-By]**</code> - displays all the TWiki topics with links to the current topic
-- <code>**[Diffs]**</code> - generates a page showing every change made to the current topic, with names, dates, and changes made (diffs)
-- <code>**r1.3 | > | r1.2**</code> _(ex)_ - view most recent revision and changes
-- <code>**[More]**</code> - opens up a new screen containing additional controls
+- <code>**Attach**</code> - pops a new screen for [[FileAttachments]]
+- <code>**Backlinks**</code> - displays all the TWiki topics with links to the current topic
+- <code>**History**</code> - generates a page showing every change made to the current topic, with names, dates, and changes made (diffs)
+- <code>**r3 > r2 > r1**</code> - view most recent revision and changes
+- <code>**More**</code> - opens up a new screen containing additional controls
It looks complicated, but the basics you need to begin with are very simple to use. The flexible and optional features are ready when you care to learn about them - the only way to confuse yourself or your site set-up and users is by using features you really don't need. Unlike the usual expensive, complex collaboration and project management packages, TWiki is fully functional and effective just by typing in text and making [[WikiWord]] links. All the additional features are there, but only if you need them!
- Any problems are listed - take note, and you can fix them later.
- If a linked topic can't be updated (it may be locked because someone's editing it), an alert will appear. You can update missed topics later by again pressing <code>**Rename/move**</code>.
-%H% Deleting means moving a topic to the Trash web. Since all webs share the one Trash, name conflicts may come up.
+**_%H% Note:_** Deleting means moving a topic to the Trash web. Since all webs share the one Trash, name conflicts may come up.
<a name="RevisionRollback"></a>
4. Select either the portion of that version you want to reclaim or the entire text of the topic if you want to revert completely to that version. Select `Copy` under your browser's `Edit` menu.
5. Return to the most recent version of the topic and select `Edit` from the topic commands.
6. Either paste in the portion of the topic you wish to reclaimed or replace the entire text with the text you copied from the earlier version.
-7. Preview and save the topic.
+7. Save the topic.
See: [[ManagingTopics|Main/TWikiDocumentation#Managing_Topics]] for more details.
--- TWiki:MikeMannix - 22 May 2002 %BR% -- TWiki:Main.GrantBow - 17 Jan 2003 %BR%
+----
+
+**_Related Topics:_** [[UserDocumentationCategory]], [[AdminDocumentationCategory]]
<li><a href="#1. Get set..."> 1. Get set...</a></li>
<li><a href="#2. Take a quick tour..."> 2. Take a quick tour...</a></li>
<li><a href="#3. Open a private account..."> 3. Open a private account...</a></li>
- <li><a href="#4. Check out TWiki users, groups"> 4. Check out TWiki users, groups, offices...</a></li>
+ <li><a href="#4. Check out TWiki users, groups"> 4. Check out TWiki users, groups.</a></li>
<li><a href="#5. Test the page controls..."> 5. Test the page controls...</a></li>
<li><a href="#6. Change a page, and create a n"> 6. Change a page, and create a new one...</a></li>
<li><a href="#7. Use your browser to upload fi"> 7. Use your browser to upload files as page attachments...</a></li>
- <li><a href="#8. Get email alerts whenever pag"> 8. Get email alerts whenever pages are changed...</a></li>
+ <li><a href="#8. Get e-mail alerts whenever pa"> 8. Get e-mail alerts whenever pages are changed...</a></li>
</ul>
</li>
</ul>
>
> - Go to the [[TWikiRegistration]] page to create your TWiki account. Fill in a couple of lines and you're set!
>
-> ## <a name="4. Check out TWiki users, groups"></a> 4. Check out TWiki users, groups, offices...
+> ## <a name="4. Check out TWiki users, groups"></a> 4. Check out TWiki users, groups.
>
> - Go to the [[TWikiUsers]] topic in the TWiki.Main web; it has a list of all users of TWiki. Your [[WikiName]] will be in this list after you register.
-> - Go to the [[TWikiGroups]] topic in the TWiki.Main web; it has a list of groups which can be used to define fine grained [[TWikiAccessControl]] in TWiki.
-> - Go to the [[OfficeLocations]] topic in the TWiki.Main web; it has a sample list of corporate offices. This type of set-up can be used for departments, client companies, or any other type of organizational divisions.
+> - Go to the [[TWikiGroups]] topic in the Main web; it has a list of groups which can be used to define fine grained [[TWikiAccessControl]] in TWiki.
>
> ## <a name="5. Test the page controls..."></a> 5. Test the page controls...
>
-> Go to the
->
-> [[bottom of the page|Main/WebHome#PageBottom]]
->
-> to see what you can do. The color-coded control strip has a collection of action links:
+> The color-coded control strips at the top and/or bottom of the page has a collection of action links. Different skins show different links, but most will have some or all of::
>
-> - <code>**[Edit]**</code> - add to or edit the topic (discussed later)
-> - <code>**[Attach]**</code> - attach files to a topic (discussed later)
-> - <code>**[Ref-By]**</code> - find out what other topics link to this topic (reverse link)
-> - <code>**[Printable]**</code> - goes to a stripped down version of the page, good for printing
-> - <code>**[Diffs]**</code> - topics are under revision control - `[Diffs]` shows you the complete change history of the topic, ex: who changed what and when.
-> - <code>**[r1.3 | > | r1.2 | > | r1.1]**</code> - view a previous version of the topic or the difference between two versions.
-> - <code>**[More]**</code> - additional controls, like <code>**[Rename/move]**</code>, version control and setting the topic's parent.
+> - <code>**Edit**</code> - add to or edit the topic (discussed later)
+> - <code>**Raw View**</code> - show the source text without editing the topic
+> - <code>**Attach**</code> - attach files to a topic (discussed later)
+> - <code>**Backlinks**</code> - find out what other topics link to this topic (reverse link)
+> - <code>**Printable**</code> - goes to a stripped down version of the page, good for printing
+> - <code>**History**</code> - topics are under revision control - `History` shows you the complete change history of the topic, for example, who changed what and when
+> - <code>**r3 > r2 > r1**</code> - view a previous version of the topic or the difference between two versions
+> - <code>**More**</code> - additional controls, such as rename/move, version control and setting the topic's parent.
>
> ## <a name="6. Change a page, and create a n"></a> 6. Change a page, and create a new one...
>
>
> . This is the sandbox web, where you can make changes and try it all out at will.
>
-> - Click the <code>**[Edit]**</code> link. You are now in edit mode and you can see the source of the page. (Go to a different topic like [[TestTopic3]] in case you see a "Topic is locked by an other user" warning.)
+> - Click the <code>**Edit**</code> link. You are now in edit mode and you can see the source of the page. (Go to a different topic like Sandbox.adminSandbox if you see a "Topic is being edited by an other user" warning.)
> - Look at the text in edit mode and compare it with the rendered page (move back and forth in your browser.)
+> - **_%T% Tip:_** When you only want to see the source code of a topic click the <code>**Raw View**</code> link.
> - Notice how [[WikiWords]] are linked automatically; there is no link if you look at the text in edit mode.
> - Now, create a new topic - your own test page:
-> 1. In edit mode, enter a new text with a [[WikiWord]], ex: <br />`This is YourOwnSandBox topic.`
+> 1. In edit mode, enter a new text with a [[WikiWord]], for example: <br />`This is adminSandbox topic.`
> 2. Preview and save the topic. The name appears, highlighted, with a linked question mark at the end. This means that the topic doesn't exist yet.
> 3. Click on the question mark. Now you're in edit mode of the new topic.
-> 4. Type some text, basically, like you write an email.
+> 4. Type some text, basically, like you write an e-mail.
> 5. A signature with your name is already entered by default. **_NOTE:_** The `Main.` in front of your name means that you have a link from the current web to your personal topic located in the Main web.
> 6. Preview and save the topic...
-> - Learn about text formatting. You can enter text in [[TWikiShorthand]], a very simple markup language. Follow the [[TWikiShorthand]] link to see how, then:
+> - Learn about text formatting. You can enter text in TWikiShorthand, a very simple markup language. Follow the [[TWikiShorthand]] link to see how, then:
> 1. Go back to your sandbox topic end edit it.
> 2. Enter some text in [[TWikiShorthand]]: **bold** text, _italic_ text, **_bold italic_** text, a bullet list, tables, paragraphs, etc. **_Hint:_** If you need help, click on the [[TextFormattingRules]] link located below the text box in edit mode.
> 3. Preview and save the topic.
>
> type of file to a topic - documents, images, programs, whatever - where they can be opened, viewed, or downloaded.
>
-> - Attaching files is just like including a file with an email.
+> - Attaching files is just like including a file with an e-mail.
> 1. Go back to your sandbox topic and click on the <code>**[Attach]**</code> link at the bottom.
> 2. Click <code>**[Browse]**</code> to find a file on your PC that you'd like to attach; enter an optional comment; leave everything else unchecked.
> 3. Click <code>**[Upload file]**</code>, then scroll to the end of the page to see the new attachment listing.
> - Do this again - this time, upload a GIF, JPG or PNG image file.
> - Check the <code>**[Link:]**</code> box to _Create a link to the attached file at the end of the topic_. The image will show up at the bottom of the topic.
> - To move the image, edit the topic and place the last line (containing `%ATTACHURL%`) anywhere on the page.
-> - If you have a GIF, JPG or PNG image of yourself, your cat, your sprawling family estate...why not upload it now to personalize your account page: Main.admin?
+> - If you have a GIF, JPG or PNG image of yourself, your cat, your sprawling family estate...why not upload it now to personalize your account page Main.admin?
>
-> ## <a name="8. Get email alerts whenever pag"></a> 8. Get email alerts whenever pages are changed...
+> ## <a name="8. Get e-mail alerts whenever pa"></a> 8. Get e-mail alerts whenever pages are changed...
>
> [[WebNotify]]
>
-> is a subscription service that automatically notifies you by email when topics change in a TWiki web. This is a convenience service - for many people, checking email is easier than checking the Web.
+> is a subscription service that automatically notifies you by e-mail when topics change in a TWiki web. This is a convenience service - for many people, checking e-mail is easier than checking the Web.
>
> - If you're using TWiki to collaborate on a project, it's important to know when anyone on your team posts an update. If you're following a specific discussion, it's convenient to know when there's new input.
-> - Alerts are emailed as links to individual topics that've been changed in a set period: each day, every hour, whatever is configured for your system.
+> - Alerts are e-mailed as links to individual topics that've been changed in a set period: each day, every hour, whatever is configured for your system.
> - It's strongly recommended that you try out the service by subscribing to each TWiki web that's relevant to you. You can subscribe and unsubscribe instantly, on a per web basis using [[WebNotify]].
That's it! You're now equipped with all the TWiki essentials. You are ready to roll.
-**_NOTE:_** When first using TWiki, it will probably seem strange to be able to change other people's postings - we're used to _separating_ individual messages, with email, message boards, non-Wiki collaboration platforms. **_Don't worry about it._** You can't accidentally delete important stuff - you can always check previous versions, and copy-and-paste from them if you want to undo any changes. After a short while, TWiki-style free-form communication becomes second-nature. You'll expect it everywhere!
+**_NOTE:_** When first using TWiki, it will probably seem strange to be able to change other people's postings - we're used to _separating_ individual messages, with e-mail, message boards, non-Wiki collaboration platforms. **_Don't worry about it._** You can't accidentally delete important stuff - you can always check previous versions, and copy-and-paste from them if you want to undo any changes. After a short while, TWiki-style free-form communication becomes second-nature. You'll expect it everywhere!
--- [[MikeMannix]] - 01 Dec 2001
+**_Related Topics:_** [[UserDocumentationCategory]]
--- /dev/null
+# <a name="Package <code>TWiki::UI::_ChangeForm="></a> Package =TWiki::UI::ChangeForm
+
+Service functions used by the UI packages
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::_ChangeForm="> Package TWiki::UI::ChangeForm</a><ul>
+ <li><a href="#ClassMethod <strong>generate</strong> ($session"> ClassMethod generate <tt>($session,$theWeb,$theTopic,$editaction)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>generate</strong> ($session"></a> [[ClassMethod]] **generate** `($session,$theWeb,$theTopic,$editaction)`
+
+Generate the page that supports selection of the form.
--- /dev/null
+# <a name="Package <code>TWiki::UI="></a> Package =TWiki::UI
+
+Service functions used by the UI packages
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI="> Package TWiki::UI</a><ul>
+ <li><a href="#StaticMethod <strong>run</strong> (\method)"> StaticMethod run <tt>(\&method)</tt></a></li>
+ <li><a href="#StaticMethod <strong>check_WebExists</strong> ("> StaticMethod checkWebExists <tt>($session,$web,$topic,$op)</tt></a></li>
+ <li><a href="#StaticMethod <strong>topicExists</strong> ($ses"> StaticMethod topicExists <tt>($session,$web,$topic,$op)=>boolean</tt></a></li>
+ <li><a href="#StaticMethod <strong>checkMirror</strong> ($ses"> StaticMethod checkMirror <tt>($session,$web,$topic)</tt></a></li>
+ <li><a href="#StaticMethod <strong>checkAccess</strong> ($web"> StaticMethod checkAccess <tt>($web,$topic,$mode,$user)</tt></a></li>
+ <li><a href="#StaticMethod *read_TemplateTopic"> StaticMethod readTemplateTopic <tt>($session,$theTopicName) -> ($meta,$text)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>run</strong> (\method)"></a> [[StaticMethod]] **run** `(\&method)`
+
+Entry point for execution of a UI function. The parameter is a reference to the method.
+
+## <a name="StaticMethod <strong>check_WebExists</strong> ("></a> [[StaticMethod]] **checkWebExists** `($session,$web,$topic,$op)`
+
+Check if the web exists. If it doesn't, will throw an oops exception. $op is the user operation being performed.
+
+## <a name="StaticMethod <strong>topicExists</strong> ($ses"></a> [[StaticMethod]] **topicExists** `($session,$web,$topic,$op)=>boolean`
+
+Check if the given topic exists, throwing an [[OopsException]] if it doesn't. $op is the user operation being performed.
+
+## <a name="StaticMethod <strong>checkMirror</strong> ($ses"></a> [[StaticMethod]] **checkMirror** `($session,$web,$topic)`
+
+Checks if this web is a mirror web, throwing an [[OopsException]] if it is.
+
+## <a name="StaticMethod <strong>checkAccess</strong> ($web"></a> [[StaticMethod]] **checkAccess** `($web,$topic,$mode,$user)`
+
+Check if the given mode of access by the given user to the given web.topic is permissible, throwing a TWiki::OopsException if not.
+
+## <a name="StaticMethod <strong>read_TemplateTopic"></a> [[StaticMethod]] \*readTemplateTopic `($session,$theTopicName) -> ($meta,$text)`
+
+Read a topic from the TWiki web, or if that fails from the current web.
--- /dev/null
+# <a name="Package <code>TWiki::UI::Edit="></a> Package =TWiki::UI::Edit
+
+Edit command handler
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Edit="> Package TWiki::UI::Edit</a><ul>
+ <li><a href="#StaticMethod <strong>edit</strong> ($session)"> StaticMethod edit <tt>($session)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>edit</strong> ($session)"></a> [[StaticMethod]] **edit** `($session)`
+
+Edit command handler. This method is designed to be invoked via the `TWiki::UI::run` method. Most parameters are in the CGI query:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>cmd</code></td>
+ <td> Undocumented save command, passed on to save script </td>
+ </tr>
+ <tr>
+ <td><code>onlywikiname</code></td>
+ <td> if defined, requires a wiki name for the topic name if this is a new topic </td>
+ </tr>
+ <tr>
+ <td><code>onlynewtopic</code></td>
+ <td> if defined, and the topic exists, then moans </td>
+ </tr>
+ <tr>
+ <td><code>formtemplate</code></td>
+ <td> name of the form for the topic; will replace existing form </td>
+ </tr>
+ <tr>
+ <td><code>templatetopic</code></td>
+ <td> name of the topic to copy if creating a new topic </td>
+ </tr>
+ <tr>
+ <td><code>skin</code></td>
+ <td> skin(s) to use </td>
+ </tr>
+ <tr>
+ <td><code>topicparent</code></td>
+ <td> what to put in the topic prent meta data </td>
+ </tr>
+ <tr>
+ <td><code>text</code></td>
+ <td> text that will replace the old topic text if a formtemplate is defined (what the heck is this for?) </td>
+ </tr>
+ <tr>
+ <td><code>contenttype</code></td>
+ <td> optional parameter that defines the application type to write into the CGI header. Defaults to text/html. </td>
+ </tr>
+ <tr>
+ <td><code>action</code></td>
+ <td> Optional. If supplied, use the edit${action} template instead of the standard edit template. An empty value means edit both form and text, "form" means edit form only, "text" means edit text only </td>
+ </tr>
+</table>
--- /dev/null
+# <a name="Package <code>TWiki::UI::Manage="></a> Package =TWiki::UI::Manage
+
+UI functions for web, topic and user management
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Manage="> Package TWiki::UI::Manage</a><ul>
+ <li><a href="#StaticMethod <strong>manage</strong> ($session)"> StaticMethod manage <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>rename</strong> ($session)"> StaticMethod rename <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>move</strong> ($session,$o"> StaticMethod move <tt>($session,$oldWeb,$oldTopic,$newWeb,$newTopic,$attachment,\@refs)</tt></a></li>
+ <li><a href="#StaticMethod *get_ReferringTopic"> StaticMethod getReferringTopics <tt>($session,$web,$topic,$allWebs) -> \%matches</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>manage</strong> ($session)"></a> [[StaticMethod]] **manage** `($session)`
+
+`manage` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+## <a name="StaticMethod <strong>rename</strong> ($session)"></a> [[StaticMethod]] **rename** `($session)`
+
+`rename` command handler. This method is designed to be invoked via the `TWiki::UI::run` method. Rename the given topic. Details of the new topic name are passed in CGI parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>skin</code></td>
+ <td> skin(s) to use </td>
+ </tr>
+ <tr>
+ <td><code>newweb</code></td>
+ <td> new web name </td>
+ </tr>
+ <tr>
+ <td><code>newtopic</code></td>
+ <td> new topic name </td>
+ </tr>
+ <tr>
+ <td><code>breaklock</code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>attachment</code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>confirm</code></td>
+ <td> if defined, requires a second level of confirmation </td>
+ </tr>
+ <tr>
+ <td><code>currentwebonly</code></td>
+ <td> if defined, searches current web only for links to this topic </td>
+ </tr>
+ <tr>
+ <td><code>nonwikiword</code></td>
+ <td> if defined, a non-wikiword is acceptable for the new topic name </td>
+ </tr>
+</table>
+
+!!!rename!!!
+
+## <a name="StaticMethod <strong>move</strong> ($session,$o"></a> [[StaticMethod]] **move** `($session,$oldWeb,$oldTopic,$newWeb,$newTopic,$attachment,\@refs)`
+
+Move the given topic, or an attachment in the topic, correcting refs to the topic in the topic itself, and in the list of topics (specified as web.topic pairs) in the \\@refs array.
+
+- `$session` - reference to session object
+- `$oldWeb` - name of old web - must be untained
+- `$oldTopic` - name of old topic - must be untained
+- `$newWeb` - name of new web - must be untained
+- `$newTopic` - name of new topic - must be untained
+- `$attachment` - name of the attachment to move (from oldtopic to newtopic) (undef to move the topic) - must be untaineted
+- `\@refs` - array of webg.topics that must have refs to this topic converted
+
+Will throw TWiki::OopsException or TWiki::AccessControlException on an error.
+
+## <a name="StaticMethod <strong>get_ReferringTopic"></a> [[StaticMethod]] \*getReferringTopics `($session,$web,$topic,$allWebs) -> \%matches`
+
+- `$session` - the session
+- `$web` - web to search for
+- `$topic` - topic to search for
+- `$allWebs` - 0 to search $web only. 1 to search all webs _except_ $web.
+
+Returns a hash that maps the web.topic name to a summary of the lines that matched. Will _not_ return $web.$topic in the list
--- /dev/null
+# <a name="Package <code>TWiki::UI::Oops="></a> Package =TWiki::UI::Oops
+
+UI delegate for oops function
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Oops="> Package TWiki::UI::Oops</a><ul>
+ <li><a href="#StaticMethod <strong>oops_cgi</strong> ($sessio"> StaticMethod oops_cgi <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>oops</strong> ($session,$w"> StaticMethod oops <tt>($session,$web,$topic,$query,$keep)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>oops_cgi</strong> ($sessio"></a> [[StaticMethod]] **oops\_cgi** `($session)`
+
+`oops` command handler. This method is designed to be invoked via the `TWiki::UI::run` method. CGI parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>template</code></td>
+ <td> name of template to use </td>
+ </tr>
+ <tr>
+ <td><code>paramN</code></td>
+ <td> Parameter for expansion of template </td>
+ </tr>
+</table>
+
+%PARAMn% tags will be expanded in the template using the 'paramN' values in the query.
+
+## <a name="StaticMethod <strong>oops</strong> ($session,$w"></a> [[StaticMethod]] **oops** `($session,$web,$topic,$query,$keep)`
+
+The body of an oops script call, abstracted out so it can be called for the case where an oops is required, but all the parameters in the query must be saved for passing on to another URL invoked from a form in the template. If $keep is defined, it must be a reference to a hash (usually an oopsexception) that defines the parameters to the script (template, def etc). In this case, all the parameters in the `$query` are added as hiddens into the expanded template.
--- /dev/null
+# <a name="Package <code>TWiki::UI::RDiff="></a> Package =TWiki::UI::RDiff
+
+UI functions for diffing.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::RDiff="> Package TWiki::UI::RDiff</a><ul>
+ <li><a href="#StaticMethod <strong>diff</strong> ($session,$w"> StaticMethod diff <tt>($session,$web,$topic,$query)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>diff</strong> ($session,$w"></a> [[StaticMethod]] **diff** `($session,$web,$topic,$query)`
+
+`diff` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+Renders the differences between version of a [[TwikiTopic]]
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> topic </td>
+ <td> topic that we are showing the differences of </td>
+ </tr>
+ <tr>
+ <td> rev1 </td>
+ <td> the higher revision </td>
+ </tr>
+ <tr>
+ <td> rev2 </td>
+ <td> the lower revision </td>
+ </tr>
+ <tr>
+ <td> render </td>
+ <td> the rendering style {sequential, sidebyside, raw, debug} </td>
+ <td> (preferences) DIFFRENDERSTYLE, <code>sequential</code></td>
+ </tr>
+ <tr>
+ <td> type </td>
+ <td> {history, diff, last} history diff, version to version, last version to previous </td>
+ <td><code>history</code></td>
+ </tr>
+ <tr>
+ <td> context </td>
+ <td> number of lines of context </td>
+ </tr>
+ <tr>
+ <td> skin </td>
+ <td> the skin(s) to use to display the diff </td>
+ </tr>
+</table>
+
+TODO:
+
+- add a \{word\} render style
+- move the common CGI param handling to one place
+- move defaults somewhere
--- /dev/null
+# <a name="Package <code>TWiki::UI::Register="></a> Package =TWiki::UI::Register
+
+User registration handling.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Register="> Package TWiki::UI::Register</a><ul>
+ <li><a href="#StaticMethod <strong>register_cgi</strong> ($se"> StaticMethod register_cgi <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>passwd_cgi</strong> ($sess"> StaticMethod passwd_cgi <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>bulkRegister</strong> ($se"> StaticMethod bulkRegister <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod *register_AndNext*"> StaticMethod registerAndNext <tt>($session,$tempUserDir)</tt></a></li>
+ <li><a href="#StaticMethod <strong>register</strong> ($sessio"> StaticMethod register <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>resetPassword</strong> ($s"> StaticMethod resetPassword <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>changePassword</strong> ($"> StaticMethod changePassword <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod *verify_EmailAddres"> StaticMethod verifyEmailAddress <tt>($session,$tempUserDir)</tt></a></li>
+ <li><a href="#StaticMethod *finish*"> StaticMethod finish <tt></tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>register_cgi</strong> ($se"></a> [[StaticMethod]] **register\_cgi** `($session)`
+
+`register` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+## <a name="StaticMethod <strong>passwd_cgi</strong> ($sess"></a> [[StaticMethod]] **passwd\_cgi** `($session)`
+
+`passwd` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+## <a name="StaticMethod <strong>bulkRegister</strong> ($se"></a> [[StaticMethod]] **bulkRegister** `($session)`
+
+Called by [[ManageCgiScript]]::bulkRegister (requires authentication) with topic = the page with the entries on it.
+
+1. Makes sure you are an admin user ;)
+2. Calls TWiki::Data::DelimitedFile (delimiter => '|', content =>textReadFromTopic)
+3. ensures requiredFieldsPresent()
+4. starts a log file
+5. calls registerSingleBulkUser() for each row
+6. writes output to log file, sets [[TWiki.TOPICPARENT|TWiki/TOPICPARENT]] back to page with entries on it.
+7. redirects to log file
+
+## <a name="StaticMethod <strong>register_AndNext*"></a><a name="StaticMethod *register_AndNext</strong> "></a> [[StaticMethod]] **registerAndNext** `($session,$tempUserDir)`
+
+This is called when action = register or action = ""
+
+It calls register and either Verify or Finish.
+
+Hopefully we will get workflow integrated and rewrite this to be table driven
+
+## <a name="StaticMethod <strong>register</strong> ($sessio"></a> [[StaticMethod]] **register** `($session)`
+
+This is called through: [[TWikiRegistration]] -> [[RegisterCgiScript]] -> here
+
+1. gets rows and fields from the query
+2. calls \_validateRegistration() to ensure required fields correct, else [[OopsException]]
+
+## <a name="StaticMethod <strong>resetPassword</strong> ($s"></a> [[StaticMethod]] **resetPassword** `($session)`
+
+Generates a password. Mails it to them and asks them to change it. Entry point intended to be called from TWiki::UI::run
+
+## <a name="StaticMethod <strong>changePassword</strong> ($"></a> [[StaticMethod]] **changePassword** `($session)`
+
+Change the user's password and/or email. Details of the user and password are passed in CGI parameters.
+
+1. Checks required fields have values
+2. get wikiName and userName from getUserByEitherLoginOrWikiName(username)
+3. check passwords match each other, and that the password is correct, otherwise 'wrongpassword'
+4. TWiki::User::updateUserPassword
+5. 'oopschangepasswd'
+
+The [[NoPasswdUser]] case is not handled
+
+## <a name="StaticMethod <strong>verify_EmailAddres"></a> [[StaticMethod]] \*verifyEmailAddress `($session,$tempUserDir)`
+
+This is called: on receipt of the activation password -> [[RegisterCgiScript]] -> here
+
+1. calls \_reloadUserContext(activation password)
+2. throws oops if appropriate
+3. calls emailRegistrationConfirmations
+4. still calls 'oopssendmailerr' if a problem, but this is not done uniformly
+
+## <a name="StaticMethod <strong>finish*"></a><a name="StaticMethod *finish</strong> "></a> [[StaticMethod]] **finish** ``
+
+Presently this is called in [[RegisterCgiScript]] directly after a call to verify. The separation is intended for the [[RegistrationApprovals]] functionality
+
+1. calls \_reloadUserContext (throws oops if appropriate)
+2. calls newUserFromTemplate()
+3. if using the htpasswdFormatFamily, calls \_addUserToPasswordSystem
+4. calls the misnamed [[RegistrationHandler]] to set cookies
+5. calls addUserToTWikiUsersTopic
+6. writes the logEntry (if wanted :/)
+7. redirects browser to 'oopsregthanks'
+
+reloads the context by code these two are separate in here to ease the implementation of administrator approval
+
+generate user entry If a password exists (either in Data\{PasswordA\} or data\{CryptPassword\}, use it. Otherwise generate a random one, and store it back in the user record.
--- /dev/null
+# <a name="Package <code>TWiki::UI::Save="></a> Package =TWiki::UI::Save
+
+UI delegate for save function
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Save="> Package TWiki::UI::Save</a><ul>
+ <li><a href="#StaticMethod <strong>save</strong> ($session)"> StaticMethod save <tt>($session)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>save</strong> ($session)"></a> [[StaticMethod]] **save** `($session)`
+
+Command handler for `save` command. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+See [[TWikiScripts]] for details of parameters.
+
+Note: `cmd` has been deprecated in favour of `action`. It will be deleted at some point.
--- /dev/null
+# <a name="Package <code>TWiki::UI::Search="></a> Package =TWiki::UI::Search
+
+UI functions for searching.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Search="> Package TWiki::UI::Search</a><ul>
+ <li><a href="#StaticMethod <strong>search</strong> ($session)"> StaticMethod search <tt>($session)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>search</strong> ($session)"></a> [[StaticMethod]] **search** `($session)`
+
+Perform a search as dictated by CGI parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> Parameter: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Default: </strong></th>
+ </tr>
+ <tr>
+ <td><code>"text"</code></td>
+ <td> Search term. Is a keyword search, literal search or regular expression search, depending on the <code>type</code> parameter. [[Main/SearchHelp]] has more </td>
+ <td> required </td>
+ </tr>
+ <tr>
+ <td><code>search="text"</code></td>
+ <td> (Alternative to above) </td>
+ <td> N/A </td>
+ </tr>
+ <tr>
+ <td><code>web="Name"</code><br /><code>web="Main, Know"</code><br /><code>web="all"</code></td>
+ <td> Comma-separated list of webs to search. The special word <code>all</code> means all webs that doe <strong>not</strong> have the <code>NOSEARCHALL</code> variable set to <code>on</code> in their [[Main/WebPreferences]]. You can specifically <strong>exclude</strong> webs from an <code>all</code> search using a minus sign - for example, <code>web="all,-Secretweb"</code>. </td>
+ <td> Current web </td>
+ </tr>
+ <tr>
+ <td><code>topic="WebPreferences"</code><br /><code>topic="*Bug"</code></td>
+ <td> Limit search to topics: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. </td>
+ <td> All topics in a web </td>
+ </tr>
+ <tr>
+ <td><code>excludetopic="Web*"</code><br /><code>excludetopic="WebHome, WebChanges"</code></td>
+ <td> Exclude topics from search: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. </td>
+ <td> None </td>
+ </tr>
+ <tr>
+ <td><code>type="keyword"</code><br /><code>type="literal"</code><br /><code>type="regex"</code></td>
+ <td> Do a keyword search like <code>soap "web service" -shampoo</code>; a literal search like <code>web service</code>; or [[Main/RegularExpression]] search like <code>soap;web service;!shampoo</code></td>
+ <td><code>%SEARCHVAR- DEFAULTTYPE%</code> [[Main/TWikiPreferences]] setting (%SEARCHVARDEFAULTTYPE%) </td>
+ </tr>
+ <tr>
+ <td><code>scope="topic"</code><br /><code>scope="text"</code><br /><code>scope="all"</code></td>
+ <td> Search topic name (title); the text (body) of topic; or all (both) </td>
+ <td><code>"text"</code></td>
+ </tr>
+ <tr>
+ <td><code>order="topic"</code><br /><code>order="created"</code><br /><code>order="modified"</code><br /><code>order="editby"</code><br /><code>order=<br /> "formfield(name)"</code></td>
+ <td> Sort the results of search by the topic names, topic creation time, last modified time, last editor, or named field of [[Main/TWikiForms]]. The sorting is done web by web; in case you want to sort across webs, create a [[Main/FormattedSearch]] table and sort it with [[Main/TablePlugin]]'s initsort </td>
+ <td> Sort by topic name </td>
+ </tr>
+ <tr>
+ <td><code>limit="all"</code><br /><code>limit="16"</code></td>
+ <td> Limit the number of results returned. This is done after sorting if <code>order</code> is specified </td>
+ <td> All results </td>
+ </tr>
+ <tr>
+ <td><code>date="..."</code></td>
+ <td> limits the results to those pages with latest edit time in the given [[Main/TimeInterval]]. </td>
+ <td> All results </td>
+ </tr>
+ <tr>
+ <td><code>reverse="on"</code></td>
+ <td> Reverse the direction of the search </td>
+ <td> Ascending search </td>
+ </tr>
+ <tr>
+ <td><code>casesensitive="on"</code></td>
+ <td> Case sensitive search </td>
+ <td> Ignore case </td>
+ </tr>
+ <tr>
+ <td><code>bookview="on"</code></td>
+ <td>[[Main/BookView]] search, e.g. show complete topic text </td>
+ <td> Show topic summary </td>
+ </tr>
+ <tr>
+ <td><code>nonoise="on"</code></td>
+ <td> Shorthand for <code>nosummary="on" nosearch="on" nototal="on" zeroresults="off" noheader="on" noempty="on"</code></td>
+ <td> Off </td>
+ </tr>
+ <tr>
+ <td><code>nosummary="on"</code></td>
+ <td> Show topic title only </td>
+ <td> Show topic summary </td>
+ </tr>
+ <tr>
+ <td><code>nosearch="on"</code></td>
+ <td> Suppress search string </td>
+ <td> Show search string </td>
+ </tr>
+ <tr>
+ <td><code>noheader="on"</code></td>
+ <td> Suppress search header <br /><span style="background: #FFB0B0"> <strong>Topics: Changed: By:</strong> </span></td>
+ <td> Show search header </td>
+ </tr>
+ <tr>
+ <td><code>nototal="on"</code></td>
+ <td> Do not show number of topics found </td>
+ <td> Show number </td>
+ </tr>
+ <tr>
+ <td><code>zeroresults="off"</code></td>
+ <td> Suppress all output if there are no hits </td>
+ <td><code>zeroresults="on"</code>, displays: "Number of topics: 0" </td>
+ </tr>
+ <tr>
+ <td><code>noempty="on"</code></td>
+ <td> Suppress results for webs that have no hits. </td>
+ <td> Show webs with no hits </td>
+ </tr>
+ <tr>
+ <td><code>header="..."</code><br /><code>format="..."</code></td>
+ <td> Custom format results: see <strong>[[Main/FormattedSearch]]</strong> for usage, variables & examples </td>
+ <td> Results in table </td>
+ </tr>
+ <tr>
+ <td><code>expandvariables="on"</code></td>
+ <td> Expand variables before applying a [[Main/FormattedSearch]] on a search hit. Useful to show the expanded text, e.g. to show the result of a [[Main/SpreadSheetPlugin]] <code>%CALC{}%</code> instead of the formula </td>
+ <td> Raw text </td>
+ </tr>
+ <tr>
+ <td><code>multiple="on"</code></td>
+ <td> Multiple hits per topic. Each hit can be [[Main/FormattedSearch]]. The last token is used in case of a regular expression ";" <em>and</em> search </td>
+ <td> Only one hit per topic </td>
+ </tr>
+ <tr>
+ <td><code>nofinalnewline="on"</code></td>
+ <td> If <code>on</code>, the search variable does not end in a line by itself. Any text continuing immediately after the search tag on the same line will be rendered as part of the table generated by the search, if appropriate. </td>
+ <td><code>off</code></td>
+ </tr>
+ <tr>
+ <td><code>separator=", "</code></td>
+ <td> Line separator between hits </td>
+ <td> Newline <code>"$n"</code></td>
+ </tr>
+</table>
--- /dev/null
+# <a name="Package <code>TWiki::UI::Statistics="></a> Package =TWiki::UI::Statistics
+
+Statistics extraction and presentation
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Statistics="> Package TWiki::UI::Statistics</a><ul>
+ <li><a href="#StaticMethod <strong>statistics</strong> ($sess"> StaticMethod statistics <tt>($session)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>statistics</strong> ($sess"></a> [[StaticMethod]] **statistics** `($session)`
+
+`statistics` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+Generate statistics topic. If a web is specified in the session object, generate [[WebStatistics]] topic update for that web. Otherwise do it for all webs
--- /dev/null
+# <a name="Package <code>TWiki::UI::Upload="></a> Package =TWiki::UI::Upload
+
+UI delegate for attachment management functions
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::Upload="> Package TWiki::UI::Upload</a><ul>
+ <li><a href="#StaticMethod <strong>attach</strong> ($session)"> StaticMethod attach <tt>($session)</tt></a></li>
+ <li><a href="#StaticMethod <strong>upload</strong> ($session)"> StaticMethod upload <tt>($session)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>attach</strong> ($session)"></a> [[StaticMethod]] **attach** `($session)`
+
+`upload` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+Attach a file to a topic. CGI parameters are:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>filename</code></td>
+ <td> Name of attachment </td>
+ </tr>
+ <tr>
+ <td><code>skin</code></td>
+ <td> Skin(s) to use in presenting pages </td>
+ </tr>
+</table>
+
+## <a name="StaticMethod <strong>upload</strong> ($session)"></a> [[StaticMethod]] **upload** `($session)`
+
+`upload` command handler. This method is designed to be invoked via the `TWiki::UI::run` method. CGI parameters, passed in $query:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>hidefile</code></td>
+ <td> if defined, will not show file in attachment table </td>
+ </tr>
+ <tr>
+ <td><code>filepath</code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>filename</code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code>filecomment</code></td>
+ <td> Comment to associate with file in attachment table </td>
+ </tr>
+ <tr>
+ <td><code>createlink</code></td>
+ <td> if defined, will create a link to file at end of topic </td>
+ </tr>
+ <tr>
+ <td><code>changeproperties</code></td>
+ <td> </td>
+ </tr>
+</table>
--- /dev/null
+# <a name="Package <code>TWiki::UI::View="></a> Package =TWiki::UI::View
+
+UI delegate for view function
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::UI::View="> Package TWiki::UI::View</a><ul>
+ <li><a href="#StaticMethod <strong>view</strong> ($session,$w"> StaticMethod view <tt>($session,$web,$topic,$scruptUrl,$query)</tt></a></li>
+ <li><a href="#StaticMethod <strong>viewfile</strong> ($sessio"> StaticMethod viewfile <tt>($session,$web,$topic,$query)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="StaticMethod <strong>view</strong> ($session,$w"></a> [[StaticMethod]] **view** `($session,$web,$topic,$scruptUrl,$query)`
+
+`view` command handler. This method is designed to be invoked via the `TWiki::UI::run` method.
+
+Generate a complete HTML page that represents the viewed topics. The view is controlled by CGI parameters as follows:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>rev</code></td>
+ <td> topic revision to view </td>
+ </tr>
+ <tr>
+ <td><code>raw</code></td>
+ <td> no format body text if set </td>
+ </tr>
+ <tr>
+ <td><code>skin</code></td>
+ <td> comma-separated list of skin(s) to use </td>
+ </tr>
+ <tr>
+ <td><code>contenttype</code></td>
+ <td> Allows you to specify an alternate content type </td>
+ </tr>
+</table>
+
+## <a name="StaticMethod <strong>viewfile</strong> ($sessio"></a> [[StaticMethod]] **viewfile** `($session,$web,$topic,$query)`
+
+`viewfile` command handler. This method is designed to be invoked via the `TWiki::UI::run` method. Command handler for viewfile. View a file in the browser. Some parameters are passed in CGI query:
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><code>filename</code></td>
+ <td> Attachment to view </td>
+ </tr>
+ <tr>
+ <td><code>rev</code></td>
+ <td> Revision to view </td>
+ </tr>
+</table>
<li><a href="#TWiki Upgrade Guide"> TWiki Upgrade Guide</a><ul>
<li><a href="#Overview"> Overview</a></li>
<li><a href="#Upgrade Requirements"> Upgrade Requirements</a></li>
- <li><a href="#Major Changes Compared to TWiki"> Major Changes Compared to TWiki 01-Feb-2003</a></li>
- <li><a href="#Automated Upgrade Procedure from"> Automated Upgrade Procedure from 01-Feb-2003 to 01-Sep-2004 Release</a></li>
- <li><a href="#Manual Upgrade Procedure from 01"> Manual Upgrade Procedure from 01-Feb-2003 to 01-Sep-2004 Release</a></li>
- <li><a href="#Known Issues"> Known Issues</a></li>
+ <li><a href="#Major Changes Compared to TWiki"> Major Changes Compared to TWiki Release 01-Sep-2004</a></li>
+ <li><a href="#Automated Upgrade Procedure"> Automated Upgrade Procedure</a></li>
+ <li><a href="#Manual Upgrade Procedure"> Manual Upgrade Procedure</a></li>
+ <li><a href="#Upgrading a Beta"> Upgrading a Beta</a></li>
</ul>
</li>
</ul>
# <a name="TWiki Upgrade Guide"></a> TWiki Upgrade Guide
-_Upgrade from the previous TWiki 01-Feb-2003 production release to TWiki 01-Sep-2004_
+_Upgrade from the previous TWiki 01-Sep-2004 Prodcution Release to TWiki-4.0.0_
## <a name="Overview"></a> Overview
-This guide describes how to upgrade from TWiki 01-Feb-2003 to TWiki 01-Sep-2004. This is a major new release. You can chose between an automated upgrade using a script or a manual update.
+TWiki-4.0.0 is a major new release. You can chose between an automated upgrade using a script or a manual update.
## <a name="Upgrade Requirements"></a> Upgrade Requirements
- Please review the [[AdminSkillsAssumptions]] before you upgrade TWiki
-- To upgrade from a 01-Feb-2003 standard installation to the latest 01-Sep-2004 TWiki Production Release, follow the instructions below
-- **_NOTE:_** To upgrade from a **pre-01-Feb-2003** TWiki, start with [[TWikiUpgradeTo01Feb2003]]
-- To upgrade from a Beta of the new release, or if you made custom modifications to the application, read through all new reference documentation, then use the procedure below as a guideline
+- Review TWiki:TWiki.TWikiUpgradeTo04x00x00 for latest information and experience notes.
+- To upgrade from a release prior to TWiki Release 01-Sep-2004, start with TWiki:TWiki.UpgradingTWiki on TWiki.org
+- To upgrade from a standard TWiki Release 01-Sep-2004 to the latest TWiki-4.0.0 Production Release, follow the instructions below
+- Once the upgrade has been applied, an existing earlier installation will still be able to read all the topics, but should not be used to write. Make sure you take a backup!
+- Not all Plugins written for TWiki Release 01-Sep-2004 are fully supported with Dakar. Make sure the Plugins you use can be upgraded as well!
-## <a name="Major Changes Compared to TWiki"></a><a name="Major Changes Compared to TWiki "></a> Major Changes Compared to TWiki 01-Feb-2003
+## <a name="Major Changes Compared to TWiki"></a><a name="Major Changes Compared to TWiki "></a> Major Changes Compared to TWiki Release 01-Sep-2004
-- Automatic upgrade script, and easier first-time installation
-- Attractive new skins, using a standard set of CSS classes, and a [[TWikiSkinBrowser]] to help you choose
-- New easier-to-use save options
-- Many improvements to SEARCH
-- Improved support for internationalisation
-- Better topic management screens
-- More pre-installed Plugins: [[CommentPlugin]], [[EditTablePlugin]], [[RenderListPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[SpreadSheetPlugin]], [[TablePlugin]]
-- Improved Plugins API and more Plugin callbacks
-- Better support for different authentication methods
-- Many user interface and usability improvements
-- And many more enhancements, see the complete change log at [[TWikiHistory]]
+See [[TWikiReleaseNotes04x00x00]].
-## <a name="Automated Upgrade Procedure from"></a> Automated Upgrade Procedure from 01-Feb-2003 to 01-Sep-2004 Release
+## <a name="Automated Upgrade Procedure"></a> Automated Upgrade Procedure
-With the 01-Sep-2004 Release, for the first time, comes a helper script for upgrading from a previous version. This feature is currently at beta stage, it has only been sanity tested under Unix. It should be worth giving it a try, it won't mess up your existing TWiki installation because it leaves that untouched.
+If you would prefer to do things manually, **or if you made custom modifications to distributed files** (except topics), then skip to the [[manual upgrade procedure|Main/WebHome#ManualUpgradeProcedure]] below.
-If you would prefer to do things manually than trust a beta script, skip to the [[manual upgrade procedure|Main/WebHome#ManualUpgradeProcedure]] below.
+The upgrade script is called `"UpgradeTwiki"`, and is found in the root of the distribution. It can be run by any user, though you will need to make sure you correct the permissions so that the webserver user can write all files in the new installation when you have finished. The upgrade script does **not** write to your existing installation.
-The upgrade script is called `"UpgradeTwiki"`, and is found in the root of the distribution.
+The upgrade script will upgrade the **TWiki core only**. Plugins will need to be upgraded separately.
+
+Note: To upgrade from a Beta, **do not** use UpgradeTWiki. Instead follow the steps outlined in [[Upgrading a Beta|Main/WebHome#Upgrading_a_Beta]], below.
It will:
- Create a new TWiki installation, placing the files from the distribution there as appropriate
-- Where possible, merge the changes you've made in your existing topics into the new twiki
+- Where possible, merge the changes you've made in your existing topics and attachments into the new twiki
- Where not possible, it will tell you, and you can inspect those differences manually
- Create new configuration files for the new TWiki based on your existing configuation information
- Set the permissions in the new TWiki so that it should work straight away
To perform the upgrade, you need to:
-- Check first if there is a newer `UpgradeTwiki` script available, see TWiki:Codev.UpgradeTwiki
+- Check first if there is a newer `UpgradeTwiki` script available, see TWiki:Codev.UpgradeTWiki
- Create a new directory for your new installation: Let's call this `distro/`
- Put the distribution zip file in `distro/`
- Unzip it
- Choose a directory for the new installation. I will call this `new_twiki`. This directory must not already exist.
-- Change directory to `distro/` and run: %BR% `./UpgradeTwiki <full path to new_twiki>`
+- Change directory to `distro/` and run: %BR% `./UpgradeTwiki <full path to existing_twiki's setlib.cfg> <full path to new_twiki>`
+- confirm your system settings by pointing your browser to `cgi-bin/configure`
Assuming all goes well, `UpgradeTwiki` will give you the final instructions.
+Visit TWiki:Codev.KnownIssuesOfTWiki04x00x00 and fix known issues that apply to you.
+
There are a few points worth noting:
- `UpgradeTwiki` may not be able to merge all the changes you made in your existing TWiki into the new installation, but it will tell you which ones it couldn't deal with
- `UpgradeTwiki` creates the new installation in a new directory tree. It makes a complete copy of all your existing data, so:
- Clearly you need to point it to a location where there is enough space
- If you have symlinks under your `data/` directory in your existing installation, these are reproduced as actual directories in the new structure. It is up to you to pull these sub-directories out again and re-symlink as needed
-- `UpgradeTwiki` doesn't deal with custom templates or Plugins, you will have to reinstall these in the new installation
-- If you have done tricky stuff with $OS in your existing `TWiki.cfg` file, then you will need to manually examine the new `TWiki.cfg` file and possibly put your tricky changes in there manually
+- `UpgradeTwiki` doesn't deal with custom templates or Plugins, you will have to reinstall these in the new installation.
-If you use it, and would be kind enough to add your experiences to TWiki:Codev.UpgradeTwiki, it would be much appreciated. The report of your experience will help to make `UpgradeTwiki` more robust.
+If you use it, and would be kind enough to add your experiences to TWiki:Codev.UpgradeTWiki, it would be much appreciated. The report of your experience will help to make `UpgradeTwiki` more robust.
<a name="ManualUpgradeProcedure"></a>
-## <a name="Manual Upgrade Procedure from 01"></a> Manual Upgrade Procedure from 01-Feb-2003 to 01-Sep-2004 Release
-
-The following steps describe the upgrade assuming that `$TWIKIROOT` is the root of your current 01-Feb-2003 release. As written this will require some downtime. A process for switching over without downtime is described at the end of this section.
-
-1. **Back up and prepare**:
- - Back up all existing TWiki directories `$TWIKIROOT/bin`, `$TWIKIROOT/pub`, `$TWIKIROOT/data`, `$TWIKIROOT/templates`, `$TWIKIROOT/lib`
- - Create a temporary directory and unpack the ZIP file there
-2. **Update files in TWiki root**:
- - Overwrite all `*.html` and `*.txt` files in `$TWIKIROOT` with the new ones
-3. **Update template files**:
- - Overwrite all template files in `$TWIKIROOT/templates` with the new ones
- - If you have customized your templates, make sure to merge those changes back to the new files
- - If you have customized skins or loaded new skins, make sure to merge or apply those changes to the new files
- - Change to **view** templates and skins:
- - Add `%BROADCASTMESSAGE%` somewhere on the top of the rendered HTML page (see the new `view.tmpl` for reference)
- - Changes to **edit** templates and skins:
- - Change the form action from `preview` to `save`: %BR% <code><form name="main" action="%SCRIPTURLPATH%/**save**%SCRIPTSUFFIX%/%WEB%/%TOPIC%" method="post"></code>
- - Change the topic action to the following: %BR% `%TMPL:DEF{"topicaction"}%` %BR% `<input type="submit" name="action" value="Cancel" id="cancel" />` %BR% `<input type="submit" name="action" value="Preview" id="preview" />` %BR% `<input type="submit" name="action" value="Checkpoint" id="checkpoint" />` %BR% `<input type="submit" name="action" value="QuietSave" id="quietsave" />` %BR% `<input type="submit" name="action" value="Save" id="save" />%TMPL:END%`
-4. **Update script files**:
- - Overwrite all script files in `$TWIKIROOT/bin` with the new ones.
- - If necessary, rename the scrips to include the required extension, e.g. `.cgi`
- - Edit `$TWIKIROOT/bin/setlib.cfg` and point `$twikiLibPath` to the **_absolute_** file path of `$TWIKIROOT/lib`
- - Edit your existing `$TWIKIROOT/bin/.htaccess` file to include a directive for the new `rdiffauth` script:%BR% `<Files "rdiffauth">` %BR% ` require valid-user` %BR% `</Files>`
- - Pay attention to the file and directory permissions, the scripts need to be executable, e.g. `chmod 775 $TWIKIROOT/bin/*`
- - Certain hosted environments require a `755` (do so if you get a "Premature end of script headers" messages in the Apache error log)
- - For Windows hosts, make sure the correct path to the perl interpreter is changed in the first line of every script file. See also [[WindowsInstallCookbook|Main/WindowsInstallCookbook#Editing_the_CGI_scripts]]
-5. **Update library files**:
- - Overwrite the `TWiki.cfg` configuration file in `$TWIKIROOT/lib` with the new one
- - Restore the configuration values from the backup. You typically need to configure just the ones in the section "variables that need to be changed when installing on a new server"
- - Overwrite the `TWiki.pm` library in `$TWIKIROOT/lib` with the new one
- - Copy and overwrite all subdirectories below `$TWIKIROOT/lib` with the new ones. Make sure to preserve any extra Plugins you might have in `$TWIKIROOT/lib/TWiki/Plugins`
- - Pay attention to the file and directory permissions, the library files should not be executable but the directory files should be, e.g. ``chmod 664 `find -type f $TWIKIROOT/lib``` (for files) and ``chmod 775 `find -type d $TWIKIROOT/lib``` (for directories)
-6. **Update data files**:
- - Run the `bin/testenv` script from the browser (e.g. `http://localhost/bin/testenv`) to verify if the cgi-scripts are running as user `nobody`. In case not:
- - The `*,v` RCS repository files delivered with the installation package are locked by user `nobody` and need to be changed to the user of your cgi-scripts, for example `www-data`
- - Run the `testenv` script from your browser; in the %BROWN% **Fix** %ENDCOLOR% line you can <u>relock</u> all the rcs files **(recommended)**
- - Alternatively, execute the shell script commands described in [[TWikiInstallationGuide#StepTwo]]
- - In the temporary `twiki/data/TWiki` directory where you unzipped the installation package:
- - Remove the files you do **not** want to upgrade: `InterWikis.*`, `TWikiRegistration.*`, `TWikiRegistrationPub.*`, `WebPreferences.*`, `WebStatistics.*` and all `WebTopic*` files
- - Rename in the temporary directory the file `$TWIKIROOT/data/TWiki/TWikiPreferences.*` to `TWikiPreferencesSave.*`.
- - Move all remaining `*.txt` and `*.txt,v` files from the temporary `data/TWiki` directory to your `$TWIKIROOT/data/TWiki` directory, overwriting the existing ones
- - Merge your original `TWikiPreferencesSave.txt` settings into `$TWIKIROOT/data/TWiki/TWikiPreferences.txt`. Notable changes are:
- - New WIKIWEBMASTERNAME setting to avoid notifications being trapped by spam filters
- - New ATTACHFILESIZELIMIT setting for maximum size of [[FileAttachments]] in KB, 0 for no limit
- - New READTOPICPREFS and TOPICOVERRIDESUSER settings to allow override Preference settings in topics
- - Changed FINALPREFERENCES:
- - Set FINALPREFERENCES = PREVIEWBGIMAGE, WIKITOOLNAME, WIKIWEBMASTER, SMTPMAILHOST, SMTPSENDERHOST, ALLOWWEBMANAGE, READTOPICPREFS, TOPICOVERRIDESUSER
- - Move the `data/_default` directory from the temporary location to your `$TWIKIROOT/data` directory
- - Make sure that the directories and files below `$TWIKIROOT/data` are writable by your cgi-script user
-7. **Adapt the other webs (all other than `TWiki` and `_default`)**:
- - Add [[WebLeftBar]] topic. See [[WebLeftBarExample]] for a clean example, and [[WebLeftBarCookbook]] for more information. ([[WebLeftBar]] is used by the [[PatternSkin]] skin)
- - Add [[WebSearchAdvanced]] topic, which has this one line: %BR% `%INCLUDE{"%TWIKIWEB%.WebSearchAdvanced"}%`
- - Consider changing [[WebPreferences]] settings:
- - New NOAUTOLINK setting to prevent automatic linking of [[WikiWords]] and acronyms
- - Changed FINALPREFERENCES:
- - Set FINALPREFERENCES = NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
-8. **Update pub files**:
- - Move all subdirectories below `pub/TWiki` from your temporary directory into your `$TWIKIROOT/pub/TWiki` directory
- - Make sure that the directories and files below `$TWIKIROOT/pub/TWiki` are writable by your cgi-script user
- - Move all files in `pub/icn` directory from the temporary location to your `$TWIKIROOT/pub/icn` directory
-9. **Verify installation**:
- - Execute the `$TWIKIROOT/bin/testenv` script from your browser (e.g. `http://localhost/bin/testenv`) to see if it reports any issues; address any potential problems
- - Test your updated TWiki installation to see if you can view, create, edit and rename topics; upload and move attachments; register users
- - Test if the installed Plugins work as expected. You should see the list of installed Plugins in [[TWiki.WebHome|TWiki/WebHome]]
-
-**Note:** These steps assume a downtime during the time of upgrade. You could install the new version in parallel to the existing one and switch over in an instant without affecting the users. As a guideline, install the new version into `$TWIKIROOT/bin1`, `$TWIKIROOT/lib1`, `$TWIKIROOT/templates1`, `$TWIKIROOT/data/TWiki1` (from `data/TWiki`), `$TWIKIROOT/pub/TWiki1` (from `pub/TWiki`), and configure `TWiki.cfg` to point to the same data and pub directory like the existing installation. Once tested and ready to go, reconfigure `$TWIKIROOT/bin1/setlib.cfg` and `$TWIKIROOT/lib1/TWiki.cfg`, then rename `$TWIKIROOT/bin` to `$TWIKIROOT/bin2`, `$TWIKIROOT/bin1` to `$TWIKIROOT/bin`. Do the same with the `lib`, `templates` and `data/TWiki` directories.
-
-## <a name="Known Issues"></a> Known Issues
-
-- Check TWiki:Codev/KnownIssuesOfTWiki01Sep2004 for known issues of TWiki 01-Sep-2004 production release
-
--- TWiki:Main.PeterThoeny - 29 Aug 2004 %BR%
+## <a name="Manual Upgrade Procedure"></a> Manual Upgrade Procedure
+
+The following steps are a rough guide to upgrading only. It is impossible to give detailed instructions, as what you have to do may depend on whether you can configure the webserver or not, and how much you have changed distributed files in your current TWiki release.
+
+1. Follow the installation instructions, and install the new release in a new directory.
+2. Copy your local webs over to the data and pub directories of the new install
+ - You could also use softlinks to link the web directories in data and pub to the old installation area
+3. Unlock the rcs files in data and pub directories from the old installation using the following shell commands:
+ - `find data -name '*,v' -exec rcs -r -u -M '{}' \;`
+ - `find pub -name '*,v' -exec rcs -r -u -M '{}' \;`
+4. Examine your old TWiki.cfg, and for each local setting, set the corresponding value in the `configure` interface for the new install.
+ - If you can't use `configure`, then copy the **new** `TWiki.cfg` to `LocalSite.cfg`, and edit `LocalSite.cfg`. Remove all the settings that you didn't change in your previous install, and change the remaining settings to the values from your **old** TWiki.cfg.
+5. Transfer any customized and local settings from [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] to the topic pointed at by \{LocalSitePreferences\} ([[Main.TWikiPreferences|Main/TWikiPreferences]]). This avoids having to write over files in the distribution.
+6. If you changed any of the topics in the original TWiki distribution, you will have to transfer your changes to the new install manually. There is no simple way to do this, though the following procedure may help:
+ 1. Install a copy of the original TWiki release you were using in a temporary directory
+ 2. Use 'diff' to find changed files, and transfer the changes into the new Dakar install.
+ 3. Install updated plugins into your new area.
+7. Point your webserver at the new install.
+8. Visit TWiki:Codev.KnownIssuesOfTWiki04x00x00 and fix known issues that apply to you.
+
+You are **highly** recommended **not** to change any distributed files if you can avoid it, to simplify future upgrades!
+
+## <a name="Upgrading a Beta"></a> Upgrading a Beta
+
+**If** you followed the recommendations and avoided modifying any distributed files, then this is quite straightforward:
+
+1. Follow the installation instructions, and install the new release in a new directory.
+2. Copy your local webs over to the data and pub directories of the new install
+3. Copy over your `bin/setlib.cfg` and `lib/LocalLib.cfg` files
+4. Point your webserver at the new install.
+
+**If** you changed any of the distributed files, you will have to continue from Step 5 above.
+
+**_Related Topics:_** [[AdminDocumentationCategory]], TWiki:TWiki.UpgradingTWiki
<div>
<ul>
<li><a href="#TWiki User Authentication"> TWiki User Authentication</a><ul>
- <li><a href="#Authentication Options"> Authentication Options</a><ul>
- <li><a href="#Partial Authentication"> Partial Authentication</a></li>
+ <li><a href="#Overview"> Overview</a></li>
+ <li><a href="#Password Management"> Password Management</a></li>
+ <li><a href="#New User Registration"> New User Registration</a></li>
+ <li><a href="#Login Management"> Login Management</a><ul>
+ <li><a href="#No Login"> No Login</a></li>
+ <li><a href="#Template Login"> Template Login</a><ul>
+ <li><a href="#Enabling Template Login"> Enabling Template Login</a></li>
+ </ul>
+ </li>
+ <li><a href="#Apache Login"> Apache Login</a><ul>
+ <li><a href="#Enabling Apache Login using =mod"> Enabling Apache Login using mod_auth</a></li>
+ <li><a href="#Logons via bin/logon"> Logons via bin/logon</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="#Sessions"> Sessions</a><ul>
+ <li><a href="#Getting, Setting, and Clearing S"> Getting, Setting, and Clearing Session Variables</a></li>
+ <li><a href="#Cookies and Transparent Session"> Cookies and Transparent Session IDs</a></li>
</ul>
</li>
<li><a href="#TWiki Username vs. Login Usernam"> TWiki Username vs. Login Username</a></li>
<li><a href="#Changing Passwords"> Changing Passwords</a></li>
+ <li><a href="#Changing E-mail Addresses"> Changing E-mail Addresses</a></li>
+ <li><a href="#Controlling access to individual"> Controlling access to individual scripts</a></li>
+ <li><a href="#How to choose an authentication"> How to choose an authentication method</a></li>
</ul>
</li>
</ul>
_TWiki site access control and user activity tracking options_
-TWiki does not authenticate users internally, it depends on the `REMOTE_USER` environment variable. This variable is set when you enable Basic Authentication (.htaccess) or SSL "secure server" authentication (https protocol).
+## <a name="Overview"></a> Overview
-TWiki uses visitor identification to keep track of who made changes to topics at what time and to manage a wide range of personal site settings. This gives a complete audit trail of changes and activity.
+Authentication, or "login", is the process by which a user lets TWiki know who they are.
-## <a name="Authentication Options"></a> Authentication Options
+Authentication isn't just to do with access control. TWiki uses authentication to identify users, so it can keep track of who made changes, and manage a wide range of personal settings. With authentication enabled, users can personalise TWiki and contribute as recognised individuals, instead of shadows.
-No special installation steps are required if the server is already authenticated. If it isn't, you have these options for controlling user access:
+TWiki authentication is very flexible, and can either stand alone or integrate with existing authentication schemes. You can set up TWiki to require authentication for every access, or only for changes. Authentication is also essential for access control.
-1. **No login at all:** Forget about authentication to make your site completely public - anyone can browse and edit freely, in classic Wiki mode. All visitors are assigned the [[TWikiGuest]] default identity, so you can't track individual user activity.
- - **How:** Default, no web server configuration necessary
-2. **No login to view; require login to edit:** Keeping track of who changed what and when, while keeping view access unrestricted is desirable in most TWiki deployments. This option is not suitable if you need [[TWikiAccessControl]] for view restricted content since TWiki does not know who a user is when looking at content.
- - **How:** Use Basic Authentication to control access by protecting key scripts: `attach`, `edit`, `installpasswd`, `manage`, `preview`, `rename`, `save`, `upload`. The [[TWikiInstallationGuide]] has step-by-step instructions.
-3. **No login to view _unless necessary_; require login to edit:** You prefer not to bother the user with login for unrestricted content, but you need [[TWikiAccessControl]] for view restricted content. There are two ways to accomplish this:
- - **How 1:** Use Basic Authentication with Partial Authentication (described below)
- - **How 2:** Use one of the Session TWiki:Plugins where you give the user the option to login and logout.
-4. **Require login to view and edit:** Most restrictive, but TWiki knows who the user is at all times. There are two ways to accomplish this:
- - **How 1:** Use Basic Authentication to authenticate the whole `twiki/bin` directory. Consult your web server documentation.
- - **How 1:** Use SSL (Secure Sockets Layer; HTTPS) to authenticate and secure the whole server. Consult your web server documentation.
+**Quick Authentication Test** - Use the %WIKIUSERNAME% variable to return your current identity:
-### <a name="Partial Authentication"></a> Partial Authentication
+- You are Main.admin
-**Tracking by IP address** is an experimental feature, enabled in `lib/TWiki.cfg`. It lets you combine open access to some functions, with authentication on others, with full user activity tracking:
+TWiki user authentication is split into three sections; password management, user registration, and login management. Password management deals with how users are recognised (authenticated). Registration deals with how new users are added to the wiki. Login management deals with how users log in.
-- Normally, the <code>**REMOTE\_USER**</code> environment variable is set for the scripts that are under authentication. If, for example, the <code>**edit**</code>, <code>**save**</code> and <code>**preview**</code> scripts are authenticated, but not <code>**view**</code>, you would get your [[WikiName]] in <code>**preview**</code> for the <code>**%WIKIUSERNAME%**</code> variable, but <code>**view**</code> will show <code>**TWikiGuest**</code> instead of your WikiName.
-- TWiki can be configured to remember the IP address/username pair whenever an authentication happens (edit topic, attach file). Once remembered, the non-authenticated scripts, like <code>**view**</code>, will show the correct username instead of [[TWikiGuest]].
-- Enable this feature by setting the <code>**$doRememberRemoteUser**</code> flag in `TWiki.cfg`. TWiki then persistently stores the IP address/username pairs in the file, `$remoteUserFilename`, which is `"$dataDir/remoteusers.txt"` by default.
-- Copy the `view` script to `viewauth` (or better, create a symbolic link)
-- Add `viewauth` to the list of authenticated scripts in the `twiki/bin/.htaccess` file. The `view` script should not be listed in the `.htaccess` file.
-- %X% This approach can fail if the IP address changes due to dynamically assigned IP addresses or proxy servers.
+Once a user is logged on, they are remembered using a "session id" stored in a cookie in the browser (or by other less elegant means if the user has disabled cookies). This avoids them having to log on again and again.
-**Quick Authentication Test** - Use the %WIKIUSERNAME% variable to return your current identity:
+Please note [[FileAttachments]] are not protected by TWiki User Authentication.
-- You are Main.admin
+**_%T% Tip:_** TWiki:TWiki.TWikiUserAuthenticationSupplement on TWiki.org has supplemental documentation on user authentication.
+
+## <a name="Password Management"></a> Password Management
+
+As shipped, TWiki supports the Apache 'htpasswd' password manager. This manager supports the use of `.htpasswd` files on the server. These files can be unique to TWiki, or can be shared with other applications (such as an Apache webserver). A variety of password encodings are supported for flexibility when re-using existing files. See the descriptive comments in the Security Settings section of the [ `configure` ](http://www.dementia.org/twiki/configure) interface for more details.
+
+## <a name="New User Registration"></a> New User Registration
+
+New user registration uses the password manager to set and change passwords. It is also responsible for the new user verification process. the registration process supports **single user registration** via the [[TWikiRegistration]] page, and **bulk user registration** via the [[BulkRegistration]] page (for admins only).
+
+The registration process is responsible for creating user topics.
+
+## <a name="Login Management"></a> Login Management
+
+Login management controls the way users have to log in. There are three basic options; no login, login via a TWiki login page, and login using the webserver authentication support.
+
+You can select your chosen login through the Security Settings pane in the `configure` interface.
+
+### <a name="No Login"></a> No Login
+
+Does exactly what it says on the tin. Forget about authentication to make your site completely public - anyone can browse and edit freely, in classic Wiki style. All visitors are given the [[TWikiGuest]] default identity, so you can't track individual user activity.
+
+**_%X% Note:_** This setup is not recommended on public websites for security reasons; anyone would be able to change system settings and perform tasks usually restricted to the [[TWikiAdminGroup]].
+
+### <a name="Template Login"></a> Template Login
+
+Template Login asks for a username and password in a web page, and processes them using whatever Password Manager you choose. Users can log in and log out.
+
+#### <a name="Enabling Template Login"></a> Enabling Template Login
+
+1. Use the [ `configure` ](http://www.dementia.org/twiki/configure) interface to
+ 1. enable the `TemplateLogin` login manager (on the Security Settings pane).
+ 2. select the appropriate password manager for your system, or provide your own.
+2. Register yourself in the [[TWikiRegistration]] topic. <br /> %H% Check that the password manager recongises the new user. If you are using `.htpasswd` files, check that a new line with the username and encrypted password is added to the `.htpasswd` file. If not, you probably got a path wrong, or the permissions may not allow the webserver user to write to that file.
+3. Create a new topic to check if authentication works.
+4. **Edit the [[TWikiAdminGroup]] topic in the Main web to include users with system administrator status.**<br /> %X% **This is a very important step**, as users in this group can access _all_ topics, independent of TWiki access controls.
+
+[[TWikiAccessControl]] has more information on setting up access controls.
+
+%X% At this time [[TWikiAccessControls]] cannot control access to files in the `pub` area, unless they are only accessed through the `viewfile` script. If your `pub` directory is set up in the webserver to allow open access you may want to add `.htaccess` files in there to restrict access.
+
+%T% You can create a custom version of the [[TWikiRegistration]] form by deleting or adding input tags. The `name=""` parameter of the input tags must start with: `"Twk0..."` (if this is an optional entry), or `"Twk1..."` (if this is a required entry). This ensures that the fields are carried over into the user home page correctly.
+
+%T% You can customize the default user home page in [[NewUserTemplate]]. The same variables get expanded as in the [[template topics|Main/TWikiTemplates#Template_Topics]]
+
+### <a name="Apache Login"></a> Apache Login
+
+Using this method TWiki does not authenticate users internally. Instead it depends on the `REMOTE_USER` environment variable, which is set when you enable authentication in the webserver.
+
+The advantage of this scheme is that if you have an existing website authentication scheme using Apache modules such as `mod_auth_ldap` or `mod_auth_mysql` you can just plug in directly to them.
+
+The disadvantage is that because the user identity is cached in the browser, you can log in, but you can't log out again unless you restart the browser.
+
+TWiki maps the `REMOTE_USER` that was used to log in to the webserver to a [[WikiName]] using the table in [[TWikiUsers]]. This table is updated whenever a user registers, so users can choose not to register (in which case their webserver login name is used for their signature) or register (in which case that login name is mapped to their [[WikiName]]).
+
+The same private `.htpasswd` file used in TWiki Template Login can be used to authenticate Apache users, using the Apache Basic Authentication support. This allows the TWiki registration support to maintain usernames and passwords.
+
+#### <a name="Enabling Apache Login using <code>mod"></a> Enabling Apache Login using =mod\_auth
+
+You can use any other Apache authentication module that sets REMOTE\_USER.
+
+1. Use [configure](http://www.dementia.org/twiki/configure#LoginManager) to select the `ApacheLogin` login manager.
+2. Use [configure](http://www.dementia.org/twiki/configure#PasswordManager) to set up TWiki to create the right kind of `.htpasswd` entries.
+3. Create a `.htaccess` file in the `twiki/bin` directory.<br />%H% There is an template for this file in `twiki/bin/.htaccess.txt` that you can copy and change. The comments in the file explain what need to be done.<br />%H% If you got it right, the browser should now ask for login name and password when you click on the <u>Edit</u>. If `.htaccess` does not have the desired effect, you may need to "AllowOverride All" for the directory in `httpd.conf` (if you have root access; otherwise, e-mail web server support) <br /> %X% At this time [[TWikiAccessControls]] do not control access to files in the `pub` area, unless they are only accessed through the `viewfile` script. If your `pub` directory is set up to allow open access you may want to add `.htaccess` files in there as well to restrict access
+4. You can create a custom version of [[TWikiRegistration]] by deleting or adding input tags. The `name=""` parameter of the input tags must start with: `"Twk0..."` (if this is an optional entry), or `"Twk1..."` (if this is a required entry). This ensures that the fields are carried over into the user home page correctly. <br />You can customize the default user home page in [[NewUserTemplate]]. The same variables get expanded as in the [[template topics|Main/TWikiTemplates#Template_Topics]]
+5. Register yourself in the [[TWikiRegistration]] topic. <br /> %H% Check that a new line with the username and encrypted password is added to the `.htpasswd` file. If not, you may have got a path wrong, or the permissions may not allow the webserver user to write to that file.
+6. Create a new topic to check if authentication works.
+7. **Edit the [[TWikiAdminGroup]] topic in the Main web to include users with system administrator status.**<br /> %X% **This is a very important step**, as users in this group can access _all_ topics, independent of TWiki access controls.
+
+[[TWikiAccessControl]] has more information on setting up access controls.
+
+#### <a name="Logons via bin/logon"></a> Logons via bin/logon
+
+Any time a user enters a page that needs authentication, they will be forced to log on. It may be convenient to have a "logon" as well, to give the system a chance to identify the user and retrieve their personal settings. It may be convenient to force them to log on.
+
+The <code>**bin/logon**</code> script accomplishes this. The <code>**bin/logon**</code> script must be setup in the <code>**bin/.htaccess**</code> file to be a script which requires a `valid user`. However, once authenticated, it will simply redirect the user to the view URL for the page from which the `logon` script was linked.
+
+## <a name="Sessions"></a> Sessions
+
+TWiki uses the CPAN:CGI::Session and CPAN:CGI::Cookie modules to track sessions using cookies. These modules are de facto standards for session management among Perl programmers. If you can't use Cookies for any reason, CPAN:CGI::Session also supports session tracking using the client IP address. See [[How to choose an authentication method|Main/WebHome#HowTo]] for a discussion of the pros and cons of the various authentication methods.
+
+There are a number of [[TWikiVariables]] available that you can use to interrogate your current session. You can even add your own session variables to the TWiki cookie. Session variables are referred to as "sticky" variables.
+
+### <a name="Getting, Setting, and Clearing S"></a> Getting, Setting, and Clearing Session Variables
+
+You can get, set, and clear session variables from within TWiki web pages or by using script parameters. This allows you to use the session as a personal "persistent memory space" that is not lost until the web browser is closed. Also note that if a session variable has the same name as a TWiki preference, the session variables value takes precedence over the TWiki preference. **This allows for per-session preferences.**
+
+To make use of these features, use the tags:
+
+ %SESSION_VARIABLE{ "varName" }%
+ %SESSION_VARIABLE{ "varName" set="varValue" }%
+ %SESSION_VARIABLE{ "varName" clear="" }%
+
+### <a name="Cookies and Transparent Session"></a><a name="Cookies and Transparent Session "></a> Cookies and Transparent Session IDs
+
+TWiki normally uses cookies to store session information on a client computer. Cookies are a common way to pass session information from client to server. TWiki cookies simply hold a unique session identifier that is used to look up a database of session information on the TWiki server.
+
+For a number of reasons, it may not be possible to use cookies. In this case, TWiki has a fallback mechanism; it will automatically rewrite every internal URL it sees on pages being generated to one that also passes session information.
## <a name="TWiki Username vs. Login Usernam"></a> TWiki Username vs. Login Username
-This section applies only if your TWiki site is installed on a server that is both **authenticated** and on an **intranet**.
+This section applies only if you are using authentication with existing login names (i.e. mapping from login names to [[WikiNames]]).
%WIKITOOLNAME% internally manages two usernames: Login Username and TWiki Username.
- **TWiki Username:** Your name in [[WikiNotation]], ex: <code>**PeterThoeny**</code>, is recorded when you register using [[TWikiRegistration]]; doing so also generates a personal home page in the Main web.
-TWiki can automatically map an Intranet (Login) Username to a TWiki Username, provided that the username pair exists in the [[TWikiUsers]] topic. This is also handled automatically when you register.
-
-- %X% In the original TWiki distribution, in <code>**twiki/data**</code>, there are two registration form topics, [[TWikiRegistration]] and [[TWikiRegistrationPub]]. The original form includes an intranet Login Username field. For Basic Authentication, the original form is replaced by the Pub version. If you started using TWiki on Basic Authentication and want to change, you have to switch back forms for future use, and manually correct the existing entries, by editing [[TWikiUsers]], adding the Login Username for each member - `PeterThoeny - pthoeny - 01 Jan 1999` - and also in the <code>**.htpasswd**</code> file, where you can either replace the [[WikiNames]] or duplicate the entries and have both, so both usernames will work.
+TWiki can automatically map an Intranet (Login) Username to a TWiki Username if the \{AllowLoginName\} is enabled in `configure`. The default is to use your [[WikiName]] as a login name.
> **_NOTE:_**
>
> **To correctly enter a [[WikiName]]**
>
-> - your own or someone else's - be sure to include the Main web name in front of the Wiki username, followed by a period, and no spaces. Ex:
+> - your own or someone else's - be sure to include the Main web name in front of the Wiki username, followed by a period, and no spaces, for example
+>
+> <code>**Main.WikiUsername**</code>
>
-> <div>
-> <center><code><b>Main.WikiUsername</b></code> or <code><b>%MAINWEB%.WikiUsername</b></code></center>
-> </div>
+> or
>
-> This points
+> <code>**%MAINWEB%.WikiUsername**</code>
>
-> <code>**WikiUser**</code>
+> . This points
>
-> to the %WIKITOOLNAME%.Main web, where user registration pages are stored, no matter which web it's entered in. Without the web prefix, the name appears as a
+> <code>**WikiUsername**</code>
+>
+> to the Main web, where user home pages are located, no matter which web it's entered in. Without the web prefix, the name appears as a
>
> [[NewTopic]]
>
## <a name="Changing Passwords"></a> Changing Passwords
-Change and reset passwords using forms on regular pages. Use [[TWikiAccessControl]] to restrict use as required.
+If your \{PasswordManager\} supports password changing, you can change and reset passwords using forms on regular pages.
-- The [[ChangePassword]] form ( <code>**TWiki/ChangePassword**</code> ):
+- The [[ChangePassword]] form ( <code>**TWiki/ChangePassword**</code> )
+- The [[ResetPassword]] form ( <code>**TWiki/ResetPassword**</code> )
->
+<a name="ChangingEmails"></a>
-- The [[ResetPassword]] form ( <code>**TWiki/ResetPassword**</code> ):
+## <a name="Changing E-mail Addresses"></a> Changing E-mail Addresses
->
+If the active \{PasswordManager\} supports storage and retrieval of user e-mail addresses, you can change your e-mail using a regular page. As shipped, this is true only for the Apache 'htpasswd' password manager.
+
+- The [[ChangeEmailAddress]] form ( <code>**TWiki/ChangeEmailAddress**</code> )
+
+<a name="IndividualScripts"></a>
+
+## <a name="Controlling access to individual"></a> Controlling access to individual scripts
+
+You may want to add or remove scripts from the list of scripts that require authentication. The method for doing this is different for each of Template Login and Apache Login.
+
+- For Template Login, update the \{AuthScripts\} list using `configure`
+- For Apache Login, add/remove the script from `.htaccess`
+
+<a name="HowTo"></a>
+
+## <a name="How to choose an authentication"></a><a name="How to choose an authentication "></a> How to choose an authentication method
+
+One of the key features of TWiki is that it is possible to add HTML to topics. No authentication method is 100% secure on a website where end users can add HTML, as there is always a risk that a malicious user can add code to a topic that gathers user information, such as session IDs. The TWiki developers have been forced to make certain tradeoffs, in the pursuit of efficiency, that may be exploited by a hacker.
+
+This section discusses some of the known risks. You can be sure that any potential hackers have read this section as well!
+
+Firstly, the **most secure** method is without doubt to use the webserver authentication support, with Sessions turned **off**.
+
+The **second most secure method** is to use TWiki's internal authentication with Sessions turned **off**. This method is less secure than using the webserver because passwords are sent in **plain text** and can therefore be intercepted in transit.
+
+As soon as you allow the server to maintain information about a logged-in user, you open a door to potential attacks. There are a variety of ways a malicious user can pervert TWiki to obtain another users session ID, the most common of which is known as a [cross-site scripting](http://www.perl.com/pub/a/2002/02/20/css.html) attack. Once a hacker has an SID they can pretend to be that user.
+
+To help prevent these sorts of attacks, TWiki supports **IP matching**, which ensures that the IP address of the user requesting a specific session is the same as the IP address of the user who created the session. This works well as long as IP addresses are unique to each client, and as long as the IP address of the client can't be faked.
+
+The **third most secure** method is to use sessions with IP matching (\{UseIPMatching\} switched on). Shorter session expiry times are more secure (\{Sessions\}\{ExpireAfter\}). The default session lifetime is 6 hours, which is quite a long lifetime for a session.
+
+Session IDs are usually stored by TWiki in cookies, which are stored in the client browser. Cookies work well, but not all environments or users permit cookies to be stored in browsers. So TWiki also supports two other methods of determining the session ID. The first method uses the client IP address to determine the session ID. The second uses a rewriting method that rewrites local URLs in TWiki pages to include the session ID in the URL.
+
+The first method works well as long as IP addresses are **unique** to each individual client, and client IP addresses can't be faked by a hacker. If IP addresses are unique and can't be faked, it is almost as secure as cookies + IP matching, so it ranks as the **fourth most secure method**.
+
+If you have to turn IP matching off, and cookies can't be relied on, then you may have to rely on the second method, URL rewriting. This method exposes the session IDs very publicly, so should be regarded as the **least secure method**.
+
+See TWiki:TWiki.SecuringTWikiSite for more information.
+
+**_Related Topics:_** [[AdminDocumentationCategory]], [[TWikiAccessControl]], TWiki:TWiki.TWikiUserAuthenticationSupplement, TWiki:TWiki.SecuringTWikiSite
--- TWiki:Main.MikeMannix - 19 May 2002 %BR% -- TWiki:Main.PeterThoeny - 25 Apr 2004
+-- **_Contributors:_** TWiki:Main.PeterThoeny, TWiki:Main.MikeMannix, TWiki:Main.CrawfordCurrie
--- /dev/null
+# <a name="Package <code>TWiki::Users::_ApacheHt"></a> Package =TWiki::Users::ApacheHtpasswdUser
+
+**extends** <tt>[[TWiki::Users::Password |Main/TWikiUsersPasswordDotPm]]</tt>
+
+Password manager that uses Apache::HtPasswd to manage users and passwords.
+
+Subclass of [[ TWiki::Users::Password |Main/TWikiUsersPasswordDotPm]]. See documentation of that class for descriptions of the methods of this class.
+
+Duplicates functionality of [[ =TWiki::Users::HtPasswdUser=|Main/TWikiUsersHtPasswdUserDotPm]]; provided mainly as an example of how to write a new password manager.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Users::_ApacheHt"> Package TWiki::Users::ApacheHtpasswdUser</a></li>
+ </ul>
+</div>
--- /dev/null
+# <a name="Package <code>TWiki::Users="></a> Package =TWiki::Users
+
+Singleton object that handles mapping of users to wikinames and vice versa, and user authentication checking.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Users="> Package TWiki::Users</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session,$imp"> ClassMethod new <tt>($session,$impl)</tt></a></li>
+ <li><a href="#ObjectMethod <strong>findUser</strong> ($name[,"> ObjectMethod findUser <tt>($name[,$wikiname][,$nocreate]) -> $userObject</tt></a></li>
+ <li><a href="#ObjectMethod <strong>createUser</strong> ($logi"> ObjectMethod createUser <tt>($login,$wikiname) -> $userobject</tt></a></li>
+ <li><a href="#ObjectMethod *add_UserToTWikiUse"> ObjectMethod addUserToTWikiUsersTopic <tt>($user) -> $topicName</tt></a></li>
+ <li><a href="#ObjectMethod *initialize_RemoteU"> ObjectMethod initializeRemoteUser <tt>($remoteUser) -> $loginName</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session,$imp"></a> [[ClassMethod]] **new** `($session,$impl)`
+
+Construct the user management object
+
+## <a name="ObjectMethod <strong>findUser</strong> ($name[,"></a> [[ObjectMethod]] **findUser** `($name[,$wikiname][,$nocreate]) -> $userObject`
+
+- `$name` - login name or wiki name
+- `$wikiname` - optional, wikiname for created user
+- `$nocreate` - optional, disable creation of user object for user not found in [[TWikiUsers]]
+
+Find the user object corresponding to `$name`, which may be either a login name or a wiki name. The name is looked up in the [[TWikiUsers]] topic. If `$name` is found (either in the list of login names or the list of wiki names) the corresponding user object is returned. In this case `$wikiname` is ignored.
+
+If they are not found, and `$nocreate` is true, then return undef.
+
+If `$nocreate` is false, then a user object is returned even if the user is not listed in [[TWikiUsers]].
+
+If `$nocreate` is false, and no `$wikiname` is given, then the `$name` is used for both login name and wiki name.
+
+If nocreate is off, then a default user will be created with their wikiname set the same as their login name. This user/wiki name pair can be overridden by a later createUser call when the correct wikiname is known, if necessary.
+
+## <a name="ObjectMethod <strong>createUser</strong> ($logi"></a> [[ObjectMethod]] **createUser** `($login,$wikiname) -> $userobject`
+
+Create a user, and insert them in the maps (overwriting any current entry). Use this instead of findUser when you want to be sure you are not going to pick up any default user created by findUser. All parameters are required.
+
+## <a name="ObjectMethod <strong>add_UserToTWikiUse"></a> [[ObjectMethod]] \*addUserToTWikiUsersTopic `($user) -> $topicName`
+
+Add a user to the [[TWikiUsers]] topic. This is a topic that maps from usernames to wikinames. It is maintained by Register.pm, or manually outside TWiki.
+
+## <a name="ObjectMethod <strong>initialize_RemoteU"></a> [[ObjectMethod]] \*initializeRemoteUser `($remoteUser) -> $loginName`
+
+Return value: $remoteUser
+
+Acts as a filter for $remoteUser. If set, $remoteUser is filtered for insecure characters and untainted.
+
+If not user is passed, the remote user defaults to $cfg\{DefaultUserLogin\} (usually 'guest').
+
+If we got here via an authentication status failure, then the remote user is set to blank, effectively signalling an illegal access.
+
+If no remote user name was passed in, the user defaults to $cfg\{DefaultUserLogin\}.
--- /dev/null
+# <a name="TWiki User's Guide"></a> TWiki User's Guide
+
+_Documentation for TWiki users._
+
+- **TWiki Quick Start**
+ - [[WelcomeGuest]]: A fast track intro covering all the basics
+ - [[ATasteOfTWiki]]: A short introduction training course for beginners
+ - [[TWikiRegistration]]: Sign up so you can edit pages and select options
+
+- **One-Page Primers**
+ - [[TWikiSite]]: Ultra-compact, 2-minute TWiki primer
+ - [[TWikiTutorial]]: A compact, 20-minute TWiki primer
+ - [[TWikiTopics]]: Customize, rename, move, or delete TWiki topics
+ - [[SearchHelp]]: Tips and help on search
+ - [[GoodStyle]]: Working tips for an open collaboration environment
+ - [[TWikiShorthand]]: All of the TWiki shorthand basics
+ - [[TextFormattingRules]]: Scan all TWiki text formatting rules on one page
+ - [[TWikiVariables]]: How to easily embed text, graphics, dynamic content
+ - [[FileAttachments]]: Browser-upload files for distribution or display
+ - [[WebChangesAlert]]: Get e-mail alerts linking to the latest page changes
+ - [[TWikiGlossary]]: A simple glossary of TWiki terms
+
+- **TWiki Help FAQs**
+ - [[TWikiFAQ]]: The first things people ask about TWiki
+ - [[TextFormattingFAQ]]: Common how-to questions about posting in TWiki
+ - Frequent users should also browse the full [[Reference Manual|Main/TWikiReferenceManual]]!
+
+- **Help on [[InstalledPlugins]]**
+
+> - [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
+> - [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
+> - [[EditTablePlugin]] <span>(any TWiki, 11646)</span>:
+> - [[InterwikiPlugin]] <span>(Dakar, $Rev: 11935$)</span>:
+> - [[PreferencesPlugin]] <span>(Dakar, 9839)</span>:
+> - [[SlideShowPlugin]] <span>(Any TWiki, $Rev: 12847$)</span>:
+> - [[SmiliesPlugin]] <span>(Dakar, 8154)</span>:
+> - [[TablePlugin]] <span>(1.020, 12339)</span>:
+> - [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
--- /dev/null
+# <a name="Package <code>TWiki::Users::Password="></a> Package =TWiki::Users::Password
+
+Base class of all password handlers. Default behaviour is no passwords, so anyone can be anyone they like.
+
+The methods of this class should be overridded by subclasses that want to implement other password handling methods.
+
+<div>
+ <ul>
+ <li><a href="#Package =TWiki::Users::Password="> Package TWiki::Users::Password</a><ul>
+ <li><a href="#ClassMethod <strong>new</strong> ($session) ->"> ClassMethod new <tt>($session) -> $object</tt></a></li>
+ <li><a href="#ObjectMethod <strong>fetchPass</strong> ($login"> ObjectMethod fetchPass <tt>($login) -> $passwordE</tt></a></li>
+ <li><a href="#ObjectMethod <strong>checkPassword</strong> ($u"> ObjectMethod checkPassword <tt>($user,$passwordU) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>deleteUser</strong> ($user"> ObjectMethod deleteUser <tt>($user) -> $boolean</tt></a></li>
+ <li><a href="#ObjectMethod <strong>passwd</strong> ($user,$ne"> ObjectMethod passwd <tt>($user,$newPassU,$oldPassU) -> $boolean</tt></a></li>
+ <li><a href="#encrypt( $user, $passwordU, $fre"> encrypt( $user, $passwordU, $fresh ) -> $passwordE</a></li>
+ <li><a href="#ObjectMethod <strong>error</strong> () -> $stri"> ObjectMethod error <tt>() -> $string</tt></a></li>
+ <li><a href="#ObjectMethod <strong>getEmails</strong> ($user)"> ObjectMethod getEmails <tt>($user) -> @emails</tt></a></li>
+ <li><a href="#ObjectMethod <strong>setEmails</strong> ($user,"> ObjectMethod setEmails <tt>($user,@emails)</tt></a></li>
+ </ul>
+ </li>
+ </ul>
+</div>
+
+## <a name="ClassMethod <strong>new</strong> ($session) - $"></a> [[ClassMethod]] **new** `($session) -> $object`
+
+Constructs a new password handler of this type, referring to $session for any required TWiki services.
+
+## <a name="ObjectMethod <strong>fetchPass</strong> ($login"></a> [[ObjectMethod]] **fetchPass** `($login) -> $passwordE`
+
+Implements TWiki::Password
+
+Returns encrypted password if succeeds. Returns 0 if login is invalid. Returns undef otherwise.
+
+## <a name="ObjectMethod <strong>checkPassword</strong> ($u"></a> [[ObjectMethod]] **checkPassword** `($user,$passwordU) -> $boolean`
+
+Finds if the password is valid for the given login.
+
+Returns 1 on success, undef on failure.
+
+## <a name="ObjectMethod <strong>deleteUser</strong> ($user"></a> [[ObjectMethod]] **deleteUser** `($user) -> $boolean`
+
+Delete users entry.
+
+Returns 1 on success, undef on failure.
+
+## <a name="ObjectMethod <strong>passwd</strong> ($user,$ne"></a> [[ObjectMethod]] **passwd** `($user,$newPassU,$oldPassU) -> $boolean`
+
+If the $oldPassU is undef, it will try to add the user, failing if they are already there.
+
+If the $oldPassU matches matches the login's password, then it will replace it with $newPassU.
+
+If $oldPassU is not correct and not 1, will return 0.
+
+If $oldPassU is 1, will force the change irrespective of the existing password, adding the user if necessary.
+
+Otherwise returns 1 on success, undef on failure.
+
+## <a name="encrypt( $user, $passwordU, $fre"></a> encrypt( $user, $passwordU, $fresh ) -> $passwordE
+
+Will return an encrypted password. Repeated calls to encrypt with the same user/passU will return the same passE.
+
+However if the passU is changed, and subsequently changed _back_ to the old user/passU pair, then the old passE is no longer valid.
+
+If $fresh is true, then a new password not based on any pre-existing salt will be used. Set this if you are generating a completely new password.
+
+## <a name="ObjectMethod <strong>error</strong> () - $strin"></a> [[ObjectMethod]] **error** `() -> $string`
+
+Return any error raised by the last method call, or undef if the last method call succeeded.
+
+## <a name="ObjectMethod <strong>getEmails</strong> ($user)"></a> [[ObjectMethod]] **getEmails** `($user) -> @emails`
+
+Fetch the email address(es) for the given username. Default behaviour is to look up the users' personal topic.
+
+## <a name="ObjectMethod <strong>setEmails</strong> ($user,"></a> [[ObjectMethod]] **setEmails** `($user,@emails)`
+
+Set the email address(es) for the given username in the user topic.
<div>
<ul>
<li><a href="#TWiki Variables"> TWiki Variables</a><ul>
+ <li><a href="#Using Variables"> Using Variables</a></li>
+ <li><a href="#Preferences Variables"> Preferences Variables</a><ul>
+ <li><a href="#Setting Preferences Variables"> Setting Preferences Variables</a></li>
+ <li><a href="#Access Control Variables"> Access Control Variables</a></li>
+ <li><a href="#Local values for variables"> Local values for variables</a></li>
+ <li><a href="#Frequently Used Preferences Vari"> Frequently Used Preferences Variables</a></li>
+ </ul>
+ </li>
<li><a href="#Predefined Variables"> Predefined Variables</a></li>
- <li><a href="#Preferences Variables"> Preferences Variables</a></li>
- <li><a href="#Setting Preferences"> Setting Preferences</a></li>
- <li><a href="#Creating Custom Variables"> Creating Custom Variables</a></li>
</ul>
</li>
</ul>
_Special text strings expand on the fly to display user data or system info_
-TWikiVariables are text strings - `%VARIABLE%` - that expand into content whenever a page is rendered for viewing. `VARIABLES` are replaced by data, either user-entered or automatically generated by TWiki (like the date, or the current username). There are predefined variables, and Preference variables that you can configure. You can also define custom variables, with new names and values.
+TWikiVariables are text strings - `%VARIABLE%` or `%VARIABLE{ parameter="value" }%` - that expand into content whenever a topic is rendered for viewing. There are two types of variables:
-**_Notes:_**
+1. Preferences variables: Can be defined and changed by the user
+2. Predefined variables: Defined by the TWiki system or by Plugins (for example, the [[SpreadSheetPlugin]] introduces a `%CALC{}%` variable)
-- To leave a variable unexpanded, precede it with an exclamation point, e.g. type `!%TOPIC%` to get %TOPIC%.
-- Variables are expanded relative to the topic they are _used_ in, not the topic they are _defined_ in.
+## <a name="Using Variables"></a> Using Variables
-## <a name="Predefined Variables"></a> Predefined Variables
-
-Most predefined variables return values that were either set in the <code>**lib/twiki.cfg**</code> file, when TWiki was installed, or taken from server info (like current username, or date and time). Many of the variables let you format the appearance of the display results.
+To use a variable type its name. For example,
-- %T% **Take the time to thoroughly read through ALL preference variables.** If you actively configure your site, review variables periodically. They cover a wide range of functions, and it can be easy to miss the one perfect variable for something you have in mind. For example, see <code>**%INCLUDINGTOPIC%**</code>, <code>**%INCLUDE%**</code>, and the mighty <code>**%SEARCH%**</code>.
+- type `%T%` to get %T% (a preferences variable)
+- type `%TOPIC%` to get `%TOPIC%` (a predefined variable)
+- type `%CALC{ "$UPPER(Text)" }%` to get `TEXT` (a variable defined by Plugin)
-This version of TWiki - TWiki-4.1.2, Sat, 03 Mar 2007, build 13046 - expands the following variables (enclosed in <code>**%**</code> percent signs):
+**_Note:_**
-**_Note:_** Above text is included from [[TWikiVariablesAtoM]] and [[TWikiVariablesNtoZ]]
+- To leave a variable unexpanded, precede it with an exclamation point, e.g. type `!%TOPIC%` to get `%TOPIC%`
+- Variables are expanded relative to the topic they are _used_ in, not the topic they are _defined_ in
+- Type `%ALLVARIABLES%` to get a full listing of all variables defined for a particular topic
-<a name="PreferencesVariables"></a>
+<a name="SettingPrefs"></a> <a name="PreferencesVariables"></a>
## <a name="Preferences Variables"></a> Preferences Variables
-Additional variables are defined in the preferences topics:
-
-- site-level ( **_SL_** ) in [[TWikiPreferences]]
-- web-level ( **_WL_** ) in [[WebPreferences]] of each web
-- user level ( **_UL_** ) in individual user topics
-
-<table align="center" border="1" cellpadding="2" cellspacing="0" style="background-color: #f5f5f5">
- <tr>
- <th width="160"> Variable: </th>
- <th> Level: </th>
- <th> What: </th>
- <th>Expands to:</th>
- </tr>
- <tr>
- <td><code>%ALLOWTOPICCHANGE%</code></td>
- <td><strong><em>(any topic)</em></strong></td>
- <td> List of users and groups who are <strong>allowed</strong> to change the current topic. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %ALLOWTOPICCHANGE% </td>
- </tr>
- <tr>
- <td><code>%ALLOWTOPICRENAME%</code></td>
- <td><strong><em>(any topic)</em></strong></td>
- <td> List of users and groups who are <strong>allowed</strong> to rename the current topic. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %ALLOWTOPICRENAME% </td>
- </tr>
- <tr>
- <td><code>%ALLOWWEBCHANGE%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> List of users and groups who are <strong>allowed</strong> to change topics in the %WIKITOOLNAME% web. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %ALLOWWEBCHANGE% </td>
- </tr>
- <tr>
- <td><code>%ALLOWWEBRENAME%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> List of users and groups who are <strong>allowed</strong> to rename topics in the %WIKITOOLNAME% web. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %ALLOWWEBRENAME% </td>
- </tr>
- <tr>
- <td><code>%ATTACHLINKBOX%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Default state of the link check box in the attach file page. Check box is initially checked if value is set to <code>CHECKED</code> , unchecked if empty. If checked, a link is created to the attached file at the end of the topic. Value is: <b><code>%ATTACHLINKBOX%</code></b></td>
- <td> %ATTACHLINKBOX% </td>
- </tr>
- <tr>
- <td><code>%DENYTOPICCHANGE%</code></td>
- <td><strong><em>(any topic)</em></strong></td>
- <td> List of users and groups who are <strong>not allowed</strong> to change the current topic. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %DENYTOPICCHANGE% </td>
- </tr>
- <tr>
- <td><code>%DENYTOPICRENAME%</code></td>
- <td><strong><em>(any topic)</em></strong></td>
- <td> List of users and groups who are <strong>not allowed</strong> to rename the current topic. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %DENYTOPICRENAME% </td>
- </tr>
- <tr>
- <td><code>%DENYWEBCHANGE%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> List of users and groups who are <strong>not allowed</strong> to change topics in the %WIKITOOLNAME% web. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %DENYWEBCHANGE% </td>
- </tr>
- <tr>
- <td><code>%DENYWEBRENAME%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> List of users and groups who are <strong>not allowed</strong> to rename topics in the %WIKITOOLNAME% web. (More in [[Main/TWikiAccessControl]]) </td>
- <td> %DENYWEBRENAME% </td>
- </tr>
- <tr>
- <td><code>%DONTNOTIFYCHECKBOX%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Default state of the "Minor Changes, Don't Notify" ([[Main/DontNotify]]) check box in preview. Check box is initially checked if <code>Set DONTNOTIFYCHECKBOX = checked="checked"</code>, or unchecked if empty. Value is: <b><code>%DONTNOTIFYCHECKBOX%</code></b></td>
- <td> %DONTNOTIFYCHECKBOX% </td>
- </tr>
- <tr>
- <td><code>%EDITBOXHEIGHT%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Vertical size of edit box, is <b> <code>%EDITBOXHEIGHT%</code> </b></td>
- <td> %EDITBOXHEIGHT% </td>
- </tr>
- <tr>
- <td><code>%EDITBOXWIDTH%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Horizontal size of edit box, is <b> <code>%EDITBOXWIDTH%</code> </b></td>
- <td> %EDITBOXWIDTH% </td>
- </tr>
- <tr>
- <td><code>%EDITBOXSTYLE%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Style of text edit box. Set to <code>width: 99%</code> for full window width (default; overwrites the EDITBOXWIDTH setting), or <code>width: auto</code> to disable. Value is: <b><code>%EDITBOXSTYLE%</code></b></td>
- <td> %EDITBOXSTYLE% </td>
- </tr>
- <tr>
- <td><code>%FINALPREFERENCES%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>WL</em></strong></td>
- <td> List of preferences that are not allowed to be overridden by next level preferences</td>
- <td> %FINALPREFERENCES% </td>
- </tr>
- <tr>
- <td><code>%HTTP_EQUIV_ON_EDIT%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> http-equiv meta tags for edit script. </td>
- <td> %HTTP_EQUIV_ON_EDIT% </td>
- </tr>
- <tr>
- <td><code>%HTTP_EQUIV_ON_PREVIEW%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> http-equiv meta tags for preview script. </td>
- <td> %HTTP_EQUIV_ON_PREVIEW% </td>
- </tr>
- <tr>
- <td><code>%HTTP_EQUIV_ON_VIEW%</code></td>
- <td><strong><em>SL</em></strong></td>
- <td> http-equiv meta tags for view, rdiff, attach, search* scripts. </td>
- <td> %HTTP_EQUIV_ON_VIEW% </td>
- </tr>
- <tr>
- <td><code>%NEWTOPICBGCOLOR%</code></td>
- <td><strong><em>SL</em></strong> , <em>UL</em></td>
- <td> Background color of non existing topic. ( <strong><em>UL</em></strong> needs authentication for topic views ) </td>
- <td> %NEWTOPICBGCOLOR% </td>
- </tr>
- <tr>
- <td><code>%NEWTOPICFONTCOLOR%</code></td>
- <td><strong><em>SL</em></strong> , <em>UL</em></td>
- <td> Font color of non existing topic. ( <strong><em>UL</em></strong> needs authentication for topic views ) </td>
- <td> %NEWTOPICFONTCOLOR% </td>
- </tr>
- <tr>
- <td><code>%NOSEARCHALL%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> Exclude web from a <code>web="all"</code> search (set variable to <code>on</code> for hidden webs) </td>
- <td> %NOSEARCHALL% </td>
- </tr>
- <tr>
- <td><code>%RELEASEEDITLOCKCHECKBOX%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>UL</em></strong></td>
- <td> Default state of the "Release edit lock" ([[Main/UnlockTopic]]) check box in preview. Checkbox is initially checked if <code>Set RELEASEEDITLOCKCHECKBOX = checked="checked"</code>, or unchecked if empty. If checked, make sure to click on <u>Edit</u> to do more changes; do <strong>not</strong> go back in your browser to the edit page, or you risk that someone else will edit the topic at the same time! Value is: <b><code>%RELEASEEDITLOCKCHECKBOX%</code></b></td>
- <td> %RELEASEEDITLOCKCHECKBOX% </td>
- </tr>
- <tr>
- <td><code>%WEBBGCOLOR%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> Background color of web </td>
- <td> %WEBBGCOLOR% </td>
- </tr>
- <tr>
- <td><code>%WEBCOPYRIGHT%</code></td>
- <td><strong><em>SL</em></strong> , <strong><em>WL</em></strong></td>
- <td> Copyright notice (bottom right corner of topics) </td>
- <td> %WEBCOPYRIGHT% </td>
- </tr>
- <tr>
- <td><code>%WEBTOPICLIST%</code></td>
- <td><strong><em>WL</em></strong></td>
- <td> Common links of web (second line of topics) </td>
- <td> %WEBTOPICLIST% </td>
- </tr>
- <tr>
- <td><code>%WIKIWEBLIST%</code></td>
- <td><strong><em>SL</em></strong></td>
- <td> List of %WIKITOOLNAME% webs (in upper right corner of topics) </td>
- <td> %WIKIWEBLIST% </td>
- </tr>
- <tr>
- <td><code>%WIKIWEBMASTER%</code></td>
- <td><strong><em>SL</em></strong></td>
- <td> Webmaster email address (sender of email notifications) , is <b></b></td>
- <td> </td>
- </tr>
-</table>
-
-**_Note:_** There are some more useful variables defined in the [[TWikiPreferences]] like `%BR%` for line break, colors like `%RED%` for colored text and small icons like `%H%` for a %H% Help icon.
-
-<a name="SettingPrefs"></a>
-
-## <a name="Setting Preferences"></a> Setting Preferences
-
-- The syntax for Preferences Variables is the same anywhere in TWiki (on its own TWiki bullet line, including nested bullets): <br />[multiple of 3 spaces] \* [space] Set [space] VARIABLENAME [space] = [value]<br />**_Examples:_**
-- <code>**Set VARIABLENAME = value**</code>
- - <code>**Set VARIABLENAME = value**</code>
-
-## <a name="Creating Custom Variables"></a> Creating Custom Variables
-
-- You can add your own Preference Variables for us across an entire site or a single web, using the standard [[Preferences syntax|Main/WebHome#SettingPrefs]]. Whatever you include in your Variable will be expanded on display, exactly as if it had been entered directly. You can place formatted text, page links, image paths.
-
-> **Example: Create a custom logo variable the %WEB% web**
+Unlike predefined variables, preferences variables can be defined by the user in various places.
+
+### <a name="Setting Preferences Variables"></a> Setting Preferences Variables
+
+You can set variables in all the following places:
+
+1. local site level in [[TWikiPreferences]]
+2. user level in individual user topics in Main web
+3. web level in [[WebPreferences]] of each web
+4. topic level in topics in webs
+5. plugin topics (see [[TWikiPlugins]])
+6. session variables (if sessions are enabled)
+
+Settings at higher-numbered levels override settings of the same variable at lower numbered levels, unless the variable was included in the setting of FINALPREFERENCES at a lower-numbered level, in which case it is locked at the value it has at that level.
+
+The syntax for setting Variables is the same anywhere in TWiki (on its own TWiki bullet line, including nested bullets): <br />`[multiple of 3 spaces] * [space] Set [space] VARIABLENAME [space] = [space] value`
+
+> **Examples:**
+>
+> - <code>**Set VARIABLENAME = value**</code>
+> - <code>**Set VARIABLENAME = value**</code>
+
+Spaces between the = sign and the value will be ignored. You can split a value over several lines by indenting following lines with spaces - as long as you don't try to use \* as the first character on the following line.
+
+> **Example:**
+>
+> * Set VARIABLENAME = value starts here
+> and continues here
+
+Whatever you include in your Variable will be expanded on display, exactly as if it had been entered directly.
+
+> **Example: Create a custom logo variable**
>
> <br />
>
-> - To place a logo anywhere in a web by typing <code>**%MYLOGO%**</code>, define the Variable on the web's [[WebPreferences]] page, and upload a logo file, ex: `mylogo.gif`. You can upload by [[attaching the file|Main/FileAttachment]] to [[WebPreferences]], or, to avoid clutter, to any other topic in the same web, ex: `LogoTopic`:
-> - <code>**Set MYLOGO = %PUBURL%/TWiki/LogoTopic/mylogo.gif**</code>
+> - To place a logo anywhere in a web by typing <code>**%MYLOGO%**</code>, define the Variable on the web's [[WebPreferences]] topic, and upload a logo file, ex: `mylogo.gif`. You can upload by [[attaching the file|Main/FileAttachment]] to [[WebPreferences]], or, to avoid clutter, to any other topic in the same web, e.g. `LogoTopic`. Sample variable setting in [[WebPreferences]]:
+> - <code>**Set MYLOGO = %PUBURL%/%WEB%/LogoTopic/mylogo.gif**</code>
+
+You can also set preferences variables on a topic by clicking the link `Edit topic preference settings` under `More topic actions`. Preferences set in this manner are not visible in the topic text, but take effect nevertheless.
+
+### <a name="Access Control Variables"></a> Access Control Variables
+
+These are special types of preferences variables to control access to content. [[TWikiAccessControl]] explains these security settings in detail.
+
+### <a name="Local values for variables"></a> Local values for variables
+
+Certain topics (a users home topic, web site and default preferences topics) have a problem; variables defined in those topics can have two meanings. For example, consider a user topic. A user may want to use a double-height edit box when they are editing their home topic - but **only** when editing their home topic. The rest of the time, they want to have a normal edit box. This separation is achieved using `Local` in place of `Set` in the variable definition. For example, if the user sets the following in their home topic:
+
+ * Set EDITBOXHEIGHT = 10
+ * Local EDITBOXHEIGHT = 20
+
+Then when they are editing any other topic, they will get a 10 high edit box. However when they are editing their home topic, they will get a 20 high edit box. `Local` can be used wherever a preference needs to take a different value depending on where the current operation is being performed.
+
+Use this powerful feature with great care! `%ALLVARIABLES%` can be used to get a listing of the values of all variables in their evaluation order, so you can see variable scope if you get confused.
+
+### <a name="Frequently Used Preferences Vari"></a> Frequently Used Preferences Variables
+
+The following preferences variables are frequently used. They are defined in [[TWikiPreferences#Miscellaneous_Settings]]:
+
+- `%BR%` - line break
+- `%BULLET%` - bullet sign
+- `%BB%` - line break and bullet combined
+- `%BB2%` - indented line break and bullet
+- `%RED% text %ENDCOLOR%` - colored text (also `%YELLOW%`, `%ORANGE%`, `%PINK%`, `%PURPLE%`, `%TEAL%`, `%NAVY%`, `%BLUE%`, `%AQUA%`, `%LIME%`, `%GREEN%`, `%OLIVE%`, `%MAROON%`, `%BROWN%`, `%BLACK%`, `%GRAY%`, `%SILVER%`, `%WHITE%`)
+- `%H%` - %H% Help icon
+- `%I%` - %I% Idea icon
+- `%M%` - %M% Moved to icon
+- `%N%` - %N% New icon
+- `%P%` - %P% Refactor icon
+- `%Q%` - %Q% Question icon
+- `%S%` - %S% Pick icon
+- `%T%` - %T% Tip icon
+- `%U%` - %U% Updated icon
+- `%X%` - %X% Alert icon
+- `%Y%` - %Y% Done icon
+
+There are additional useful preferences variables defined in [[TWikiPreferences]], in [[Main.TWikiPreferences|Main/TWikiPreferences]], and in [[WebPreferences]] of every web.
+
+<a name="PreDef"></a>
+
+## <a name="Predefined Variables"></a> Predefined Variables
+
+Most predefined variables return values that were either set in the configuration when TWiki was installed, or taken from server info (such as current username, or date and time). Some, like `%SEARCH%`, are powerful and general tools.
--- TWiki:Main.PeterThoeny - 14 Aug 2004 <br /> -- TWiki:Main.MikeMannix - 12 May 2002
+- %X% Predefined variables can be overridden by [[preferences variables|Main/WebHome#PreferencesVariables]]
+- %X% Plugins may extend the set of predefined variables (see individual Plugins topics for details)
+- %T% **Take the time to thoroughly read through ALL preference variables.** If you actively configure your site, review variables periodically. They cover a wide range of functions, and it can be easy to miss the one perfect variable for something you have in mind. For example, see `%INCLUDINGTOPIC%`, `%INCLUDE%`, and the mighty `%SEARCH%`.
-Crawford split up this topic into included [[TWikiVariablesAtoM]] and [[TWikiVariablesNtoZ]].
+This version of TWiki - TWiki-4.1.2, Sat, 03 Mar 2007, build 13046 - predefines the following variables:
--- [[PeterThoeny]] - 26 Jul 2004
+**_Related Topics:_** [[UserDocumentationCategory]]
- A `TABLEATTRIBUTES` preferences setting on site-level ([[TWikiPreferences]]) or web-level (any [[WebPreferences]]), e.g.
- `Set TABLEATTRIBUTES = tableborder="0" cellpadding="1" ...`
- Before a table using `%TABLE{...}%`
+- Row spans
## <a name="Sorting"></a> Sorting
- number is digits, with optional decimal point
- otherwise treated as text
+## <a name="Row spans"></a> Row spans
+
+Table cells with a single caret indicate follow-up rows of multi-row spans. For example,
+
+<table width="100%">
+ <tr>
+ <td><pre>
+| One One | One Two | One Three |
+| ^ | Two Two | Two Three |
+| Three One | ^ | Three Three |
+</pre></td>
+ <td align="right">
+ <table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <td bgcolor="#ecf2f8" rowspan="2" style=""> One One </td>
+ <td bgcolor="#ecf2f8" style=""> One Two </td>
+ <td bgcolor="#ecf2f8" style=""> One Three </td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" rowspan="2" style=""> Two Two </td>
+ <td bgcolor="#ffffff" style=""> Two Three </td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> Three One </td>
+ <td bgcolor="#ecf2f8" style=""> Three Three </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
## <a name="%TOPIC% Global Settings"></a> %TOPIC% Global Settings
Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%<plugin>\_<setting>%**</code>, for example, <code>**%INTERWIKIPLUGIN\_SHORTDESCRIPTION%**</code>
- Set DEBUG to 1 to get debug messages in `data/debug.txt`. Default: `0`
- Set DEBUG = 0
-- Make sortable:
- - #Set SORT = attachments
- - Set SORT = all
+- Make all tables in a topic sortable. If this is set to `all`, all tables that have a header row (including those that do not have %TABLE before them) will be made sortable. If set to `none`, only tables with %TABLE will be sortable. Topic rendering is faster if this is set to `none`.
- #Set SORT = none
+ - Set SORT = all
- Default table attributes:
- - Set TABLEATTRIBUTES = tableborder="1" cellpadding="0" cellspacing="1" headerbg="#99CCCC" databg="#FFFFCC, #FFFFFF"
+ - Set TABLEATTRIBUTES = tableborder="0" cellpadding="1" cellspacing="1" headerbg="#dadada" headercolor="#000000" databg="#eaeaea, #ffffff"
+ - Classic skin table attributes:
+ - #Set TABLEATTRIBUTES = tableborder="1" cellpadding="0" cellspacing="1" headerbg="#99CCCC" databg="#FFFFCC, #FFFFFF"
## <a name="Table Attributes"></a> Table Attributes
<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Argument</font></a></th>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Comment</font></a></th>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Example</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Argument</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Comment</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Example</font></a></th>
</tr>
<tr>
<td bgcolor="#ecf2f8" style=""><code>sort</code></td>
</tr>
<tr>
<td bgcolor="#ffffff" style=""><code>tablewidth</code></td>
- <td bgcolor="#ffffff" style=""> Table width: Percentage of window width, or absolute pixel value. Default is unspecified </td>
+ <td bgcolor="#ffffff" style=""> Table width: Percentage of window width, or absolute pixel value. Default is unspecified. </td>
<td bgcolor="#ffffff" style=""><code>tablewidth="100%"</code></td>
</tr>
<tr>
<td bgcolor="#ecf2f8" style=""><code>columnwidths</code></td>
- <td bgcolor="#ecf2f8" style=""> Column widths: Comma delimited list of column widths, percentage or absolute pixel value. Default is unspecified </td>
+ <td bgcolor="#ecf2f8" style=""> Column widths: Comma delimited list of column widths, percentage or absolute pixel value. Default is unspecified. </td>
<td bgcolor="#ecf2f8" style=""><code>columnwidths="80%, 20%"</code></td>
</tr>
<tr>
<td bgcolor="#ecf2f8" style=""> Number of footer rows to exclude from sort; default <code>"0"</code></td>
<td bgcolor="#ecf2f8" style=""><code>footerrows="1"</code></td>
</tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><code>id</code></td>
+ <td bgcolor="#ffffff" style=""> Table identifier string. Default is unspecified. </td>
+ <td bgcolor="#ffffff" style=""><code>id="userTable"</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""><code>summary</code></td>
+ <td bgcolor="#ecf2f8" style=""> Table summary used by screenreaders: A summary of what the table presents. It should provide an orientation for someone who listens to the table. Default is unspecified. </td>
+ <td bgcolor="#ecf2f8" style=""><code>summary="List of subscribed users"</code></td>
+ </tr>
+ <tr>
+ <td bgcolor="#ffffff" style=""><code>caption</code></td>
+ <td bgcolor="#ffffff" style=""> Table caption: A title that will be displayed just above the table. Default is unspecified. </td>
+ <td bgcolor="#ffffff" style=""><code>caption="Users"</code></td>
+ </tr>
</table>
The `%TABLE{...}%` settings override `TABLEATTRIBUTES` preferences settings, which override the `TABLEATTRIBUTES` Plugin settings.
### <a name="Use of %TABLE{...}%"></a> Use of %TABLE\{...\}%
-Line before table: `%TABLE{ sort="on" tableborder="0" cellpadding="1" cellspacing="3" headerbg="#000099" headercolor="#FFFFCC" databg="#C8CB8F, #DBDDB5" headerrows="2" footerrows="1" }%`
+Line before table: `%TABLE{ sort="on" tableborder="0" cellpadding="1" cellspacing="3" headerbg="#D5CCB1" headercolor="#666666" databg="#FAF0D4, #F3DFA8" headerrows="2" footerrows="1" }%`
<table border="0" cellpadding="1" cellspacing="3" style="border-width: 0px">
<tr>
- <th bgcolor="#000099" colspan="6" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Table with two Header Rows and Footer Row </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" colspan="6" maxcols="0" style=""><span><font color="#666666"> <strong> Table with two Header Rows and Footer Row </strong> </font></span></th>
</tr>
<tr>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">Num</font></a></th>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">Status</font></a></th>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">Action</font></a></th>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">Who</font></a></th>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=4;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">When</font></a></th>
- <th bgcolor="#000099" maxcols="0" style=""><a href="http://localhost?sortcol=5;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#FFFFCC">Progress</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">Num</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">Status</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">Action</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=3;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">Who</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=4;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">When</font></a></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><a href="http://localhost?sortcol=5;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#666666">Progress</font></a></th>
</tr>
<tr>
- <td bgcolor="#C8CB8F" style=""> 1 </td>
- <td bgcolor="#C8CB8F" style=""> C </td>
- <td bgcolor="#C8CB8F" style=""> Chose new colours </td>
- <td bgcolor="#C8CB8F" style=""> John </td>
- <td bgcolor="#C8CB8F" style=""> 1-Dec-02 </td>
- <td bgcolor="#C8CB8F" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> 1 </td>
+ <td bgcolor="#FAF0D4" style=""> C </td>
+ <td bgcolor="#FAF0D4" style=""> Chose new colours </td>
+ <td bgcolor="#FAF0D4" style=""> John </td>
+ <td bgcolor="#FAF0D4" style=""> 1-Dec-02 </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
</tr>
<tr>
- <td bgcolor="#DBDDB5" style=""> 2 </td>
- <td bgcolor="#DBDDB5" style=""> X </td>
- <td bgcolor="#DBDDB5" style=""> Release </td>
- <td bgcolor="#DBDDB5" style=""> John </td>
- <td bgcolor="#DBDDB5" style=""> 1-Apr-02 </td>
- <td bgcolor="#DBDDB5" style=""> </td>
+ <td bgcolor="#F3DFA8" style=""> 2 </td>
+ <td bgcolor="#F3DFA8" style=""> X </td>
+ <td bgcolor="#F3DFA8" style=""> Release </td>
+ <td bgcolor="#F3DFA8" style=""> John </td>
+ <td bgcolor="#F3DFA8" style=""> 1-Apr-02 </td>
+ <td bgcolor="#F3DFA8" style=""> </td>
</tr>
<tr>
- <td bgcolor="#C8CB8F" style=""> 3 </td>
- <td bgcolor="#C8CB8F" style=""> </td>
- <td bgcolor="#C8CB8F" style=""> Get feedback </td>
- <td bgcolor="#C8CB8F" style=""> Anne </td>
- <td bgcolor="#C8CB8F" style=""> 1-Feb-02 </td>
- <td bgcolor="#C8CB8F" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> 3 </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> Get feedback </td>
+ <td bgcolor="#FAF0D4" style=""> Anne </td>
+ <td bgcolor="#FAF0D4" style=""> 1-Feb-02 </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
</tr>
<tr>
- <td bgcolor="#DBDDB5" style=""> 12 </td>
- <td bgcolor="#DBDDB5" style=""> C </td>
- <td bgcolor="#DBDDB5" style=""> Spec error handling </td>
- <td bgcolor="#DBDDB5" style=""> Jack </td>
- <td bgcolor="#DBDDB5" style=""> 1-Dec-02 </td>
- <td bgcolor="#DBDDB5" style=""> </td>
+ <td bgcolor="#F3DFA8" style=""> 12 </td>
+ <td bgcolor="#F3DFA8" style=""> C </td>
+ <td bgcolor="#F3DFA8" style=""> Spec error handling </td>
+ <td bgcolor="#F3DFA8" style=""> Jack </td>
+ <td bgcolor="#F3DFA8" style=""> 1-Dec-02 </td>
+ <td bgcolor="#F3DFA8" style=""> </td>
</tr>
<tr>
- <td bgcolor="#C8CB8F" style=""> 5 </td>
- <td bgcolor="#C8CB8F" style=""> </td>
- <td bgcolor="#C8CB8F" style=""> Abc </td>
- <td bgcolor="#C8CB8F" style=""> John </td>
- <td bgcolor="#C8CB8F" style=""> </td>
- <td bgcolor="#C8CB8F" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> 5 </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> Abc </td>
+ <td bgcolor="#FAF0D4" style=""> John </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
+ <td bgcolor="#FAF0D4" style=""> </td>
</tr>
<tr>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Num </strong> </font></span></th>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Status </strong> </font></span></th>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Action </strong> </font></span></th>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Who </strong> </font></span></th>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> When </strong> </font></span></th>
- <th bgcolor="#000099" maxcols="0" style=""><span><font color="#FFFFCC"> <strong> Progress </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> Num </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> Status </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> Action </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> Who </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> When </strong> </font></span></th>
+ <th bgcolor="#D5CCB1" maxcols="0" style=""><span><font color="#666666"> <strong> Progress </strong> </font></span></th>
</tr>
</table>
<table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">When</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">When</font></a></th>
</tr>
<tr>
<td bgcolor="#ecf2f8" style=""> 1-Jan-2004 </td>
## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
-**Note:** You do not need to install anything on the browser to use this plugin. Below installation instructions are for the administrator who needs to install this plugin on the TWiki server.
+This plugin is pre-installed with your TWiki release. You should not have to install it other than to do an upgrade.
- Download the ZIP file from the Plugin web (see below)
- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File:</font></a></th>
- <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=4;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description:</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">File:</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=5;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Description:</font></a></th>
</tr>
<tr>
<td bgcolor="#ecf2f8" style=""><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
<td bgcolor="#ffffff" style=""> Up arrow </td>
</tr>
</table>
+- (Dakar) Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
- Test if the plugin is correctly installed:
- Check above example if the table renders as expected
- Try click on heading to sort. Other tables should also be sortable
</tr>
<tr>
<td align="right" bgcolor="#ffffff" style=""> Plugin Version: </td>
- <td bgcolor="#ffffff" style=""> 01 Aug 2004 </td>
+ <td bgcolor="#ffffff" style=""> 1.014 </td>
</tr>
<tr>
<td align="right" bgcolor="#ecf2f8" style=""> Change History: </td>
<td bgcolor="#ecf2f8" style=""> </td>
</tr>
<tr>
+ <td align="right" bgcolor="#ffffff" style=""> 13 Dec 2005 </td>
+ <td bgcolor="#ffffff" style=""> AC: Added support for id, summary and caption </td>
+ </tr>
+ <tr>
+ <td align="right" bgcolor="#ecf2f8" style=""> 5 Mar 2005 </td>
+ <td bgcolor="#ecf2f8" style=""> 1.014: Crawford Currie eliminated deprecated handlers for Dakar </td>
+ </tr>
+ <tr>
<td align="right" bgcolor="#ffffff" style=""> 01 Aug 2004: </td>
<td bgcolor="#ffffff" style=""> AC: Added CSS support for first column and ascending/descending table headers </td>
</tr>
</table>
**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]], [[StandardColors]]
-
--- TWiki:Main/JohnTalintyre - 07 Oct 2001 <br /> -- TWiki:Main/PeterThoeny - 01 Aug 2004 <br />
## <a name="Purpose"></a> Purpose
-Template webs were created to act as templates in creating webs. It is now possible to creation webs via the [[ManagingWebs]] topic. In the not so distant past TWiki webs were created by hand. The data directory contains the different webs such as **Main** and **TWiki**. A web that begins with an underscore "\_" character is considered invisible and a template. All files in the **\_default** (or any other web that begins with an underscore) template web will be copied into your new web. The [[_default|_default/WebHome]] web template contains the following topics: `WebHome, WebChanges, WebIndex, WebNotify, WebPreferences, WebSearch, WebStatistics and WebTopicList.`
+Template webs were created to act as templates in creating webs. It is now possible to create webs via the [[ManagingWebs]] topic. In the not so distant past TWiki webs were created by hand. The data directory contains the different webs such as **Main** and **TWiki**. A web that begins with an underscore "\_" character is considered invisible and a template. All files in the **\_default** (or any other web that begins with an underscore) template web will be copied into your new web. The [[_default|_default/WebHome]] web template contains the following topics: `WebHome, WebChanges, WebIndex, WebNotify, WebPreferences, WebSearch, WebStatistics and WebTopicList.`
## <a name="Customizing"></a> Customizing
The web template is useful for administrators to design for creating webs of a certain type. Departmental webs can at least begin with a similar look and feel.
Simply create a web with an underscore for the first character. These can be used by authorized users to create webs from this template.
-
--- TWiki:Main.GrantBow - 16 Jan 2003 %BR% -- TWiki:Main.PeterThoeny - 15 Aug 2004
Windows **Notepad** is a simple text editor, designed to be small and fast loading, for taking quick notes.
--- TWiki:Main.MikeMannix - 12 May 2002
+**_Related Topics:_** [[UserDocumentationCategory]]
The `pre` tag is standard HTML; `verbatim` is a special TWiki tag that forces text to fixed font mode, and also prevents other tags and TWiki shortcuts from being expanded.
+**NOTE:** VARIABLES are still Set within verbatim tags (this is a historical peculiarity)
+
----
### <a name="How do I create tables?"></a> How do I create tables?
**1\. Use Wiki rule with "|" vertical bars**
-- Example text: <br />`| cell A1 | cell B1 | cell C1 |`<br />`| cell A2 | cell B2 | cell C2 |`
+- Example text: %BR% `| cell A1 | cell B1 | cell C1 |` %BR% `| cell A2 | cell B2 | cell C2 |`
- Example output: <table border="1" cellpadding="0" cellspacing="0">
<tr>
<td> cell A1 </td>
### <a name="Can I include images on a page?"></a> Can I include images on a page?
-Yes. The easiest way is to [[attach|Main/FileAttachment]] a GIF, JPG or PNG file to a topic and then to place it with: `%ATTACHURL%/myImage.gif`. This works only for the page that the image is attached to.
+Yes. The easiest way is to [[attach|Main/FileAttachment]] a GIF, JPG or PNG file to a topic and then to place it with: `%ATTACHURL%/myImage.gif`. This works only for the topic where the image is attached to.
-To place an image on any page, ther are two ways of including inline images.
+To place an image on any topic, there are two ways of including inline images.
**1\. Using URL ending in .gif, .jpg, .jpeg, .png**
This is a simple and automatic way of including inline images. Simply write the URL of the image file, this will create the inline image for you. **_NOTE:_** The images must be [[accessible|Main/WebHome#ImgUpload]] as a URL.
-- **_You enter:_** ` TWiki http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikilogo88x31.gif logo.`<br />**_Result:_** TWiki ![twikilogo88x31.gif](http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikilogo88x31.gif) logo.
+- **_You enter:_** ` %PUBURL%/TWiki/TWikiLogos/T-logo-80x15.gif logo.`<br />**_Result:_** ![T-logo-80x15.gif](http://www.dementia.org/twiki//view/TWiki/TWikiLogos/T-logo-80x15.gif) logo.
<a name="ImgUpload"></a> You can upload images directly to your server with FTP access. You can also [[attach|Main/FileAttachment]] image files to a topic - you could even create a dedicated image topic, like `ImageLibrary` - and then link to the images directly:
-- Attach `pic.gif` to `Someweb.SomeTopic`<br /> Display with <code>http://www.dementia.org/twiki//view/Someweb/SomeTopic/pic.gif</code>
+- Attach `pic.gif` to `Someweb.SomeTopic`<br /> Display with `%PUBURL%/Someweb/SomeTopic/pic.gif`
**2\. Using <img> tag**
-This is a manual process where you have more control over the rendering of the image. Use the <img> tag of HTML to include GIF, JPG and PNG files. **Note:** The display of the topic is faster if you include the `WIDTH` and `HEIGHT` parameters that have the actual image size. <http://www.htmlhelp.com/reference/wilbur/special/img.html> has more on inline images.
+This is a manual process where you have more control over the rendering of the image. Use the <img> tag of HTML to include GIF, JPG and PNG files. **Note:** The rendering of the topic is faster if you include the `width` and `height` parameters that have the actual image size. <http://www.htmlhelp.com/reference/wilbur/special/img.html> has more on inline images.
-- **_You enter:_** `TWiki <img src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikilogo88x31.gif" width="88" height="31" border="0" alt="logo" /> logo.`<br />**_Result:_**<br /> TWiki <img src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikilogo88x31.gif" width="88" height="31" alt="logo" /> logo.
+- **_You enter:_** ` <img src="%PUBURLPATH%/TWiki/TWikiLogos/T-logo-80x15.gif" width="80" height="15" border="0" alt="logo" /> logo.`<br />**_Result:_**<br /><img src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/T-logo-80x15.gif" width="80" height="15" alt="logo" /> logo.
----
The code is the _hexadecimal RGB color code_, which is simply Red, Green and Blue values in hex notation (base 16, 0-F). For pure red, the RGB components are 255-0-0 - full red (255), no green or blue. That's FF-0-0 in hex, or `"#ff0000"` for Web page purposes. [[StandardColors]] lists basic colors.
----
-
--- TWiki:Main.PeterThoeny - 15 Aug 2004 %BR% -- TWiki:Main.MikeMannix - 14 Sep 2001 %BR%
<li><a href="#TWiki Text Formatting"> TWiki Text Formatting</a><ul>
<li><a href="#TWiki Editing Shorthand"> TWiki Editing Shorthand</a></li>
<li><a href="#Using HTML"> Using HTML</a><ul>
- <li><a href="#HTML and TWiki Usability"> HTML and TWiki Usability</a></li>
- <li><a href="#TWiki HTML Rendering"> TWiki HTML Rendering</a></li>
- <li><a href="#TWiki and _JavaScript"> TWiki and JavaScript</a></li>
+ <li><a href="#Script tags"> Script tags</a></li>
</ul>
</li>
<li><a href="#Hyperlinks"> Hyperlinks</a><ul>
# <a name="TWiki Text Formatting"></a> TWiki Text Formatting
-Working in TWiki is as easy as typing in text - **exactly like email**. You don't need to know HTML, though you can use it if you prefer. Links to topics are created automatically when you enter [[WikiWords]]. And TWiki shorthand gives you all the power of HTML with a simple coding system that takes no time to learn. It's all laid out below - refer back to this page in a pop-up window from the **Edit** screen.
+Working in TWiki is as easy as typing in text. You don't need to know HTML, though you can use it if you prefer. Links to topics are created automatically when you enter [[WikiWords]]. And TWiki shorthand gives you all the power of HTML with a simple coding system that takes no time to learn. It's all laid out below.
<a name="TWikiShorthand"></a>
## <a name="TWiki Editing Shorthand"></a> TWiki Editing Shorthand
-<table bgcolor="#000000" border="1" cellpadding="3" cellspacing="1">
+<table bgcolor="#ffffff" border="1" cellpadding="3">
<tr bgcolor="#ffffff">
- <td><strong>Formatting Command:</strong></td>
- <td><strong>Example: You write:</strong></td>
- <td><strong>You get:</strong></td>
+ <th width="50%"> Formatting Command: </th>
+ <th width="25%"> You write: </th>
+ <th width="25%"> You get: </th>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Paragraphs:</strong> %BR% Blank lines will create new paragraphs. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Paragraphs:</strong> %BR% Blank lines will create new paragraphs. </td>
+ <td><pre>
1st paragraph
2nd paragraph
-</pre> </font></span></td>
- <td valign="top"> 1st paragraph <p> 2nd paragraph </p>
+</pre></td>
+ <td> 1st paragraph <p> 2nd paragraph </p>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Headings:</strong> %BR% At least three dashes at the beginning of a line, followed by plus signs and the heading text. One plus creates a level 1 heading (most important), two pluses a level 2 heading; the maximum is level 6. <strong><em>Note:</em></strong> A Table of Content can be created automatically with the <code>%TOC%</code> variable, see [[Main/TWikiVariables]]. Any heading text after <code>!!</code> is excluded from the TOC; for example, write <code>---+!! text</code> if you do not want to list a header in the TOC. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Headings:</strong> %BR% Three or more dashes at the beginning of a line, followed by plus signs and the heading text. One plus creates a top level heading, two pluses a second level heading, etc. The maximum heading depth is 6. <p> You can create a table of contents with the [[Main/TWikiVariables#VarTOC]] variable. If you want to <strong>exclude</strong> a heading from the TOC, put <code>!!</code> after the <code>---+</code>. </p>
+ <p> %X% Empty headings are allowed, but won't appear in the table of contents. </p>
+ </td>
+ <td><pre>
---++ Sushi
-
---+++ Maguro
-</pre> </font></span></td>
- <td valign="top">
+---+++!! Not in TOC
+</pre></td>
+ <td>
<h2>Sushi</h2>
- <p>
- </p>
<h3>Maguro</h3>
+ <h3>Not in TOC</h3>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Bold Text:</strong> %BR% Words get <strong>bold</strong> by enclosing them in <code>*</code> asterisks. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Bold Text:</strong> %BR% Words get shown in <strong>bold</strong> by enclosing them in <code>*</code> asterisks. </td>
+ <td><pre>
*Bold*
-</pre> </font></span></td>
- <td valign="top"><strong>Bold</strong></td>
+</pre></td>
+ <td><strong>Bold</strong></td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Italic Text:</strong> %BR% Words get <em>italic</em> by enclosing them in <code>_</code> underscores. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Italic Text:</strong> %BR% Words get shown in <em>italic</em> by enclosing them in <code>_</code> underscores. </td>
+ <td><pre>
_Italic_
-</pre> </font></span></td>
- <td valign="top"><em>Italic</em></td>
+</pre></td>
+ <td><em>Italic</em></td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Bold Italic:</strong> %BR% Words get <em>_bold italic</em> by enclosing them in <code>_</code> double-underscores. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Bold Italic:</strong> %BR% Words get shown in <strong><em>bold italic</em></strong> by enclosing them in <code>__</code> double-underscores. </td>
+ <td><pre>
__Bold italic__
-</pre> </font></span></td>
- <td valign="top"><strong><em>Bold italic</em></strong></td>
+</pre></td>
+ <td><strong><em>Bold italic</em></strong></td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Fixed Font:</strong> %BR% Words get shown in <code>fixed font</code> by enclosing them in <code>=</code> equal signs. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Fixed Font:</strong> %BR% Words get shown in <code>fixed font</code> by enclosing them in <code>=</code> equal signs. </td>
+ <td><pre>
=Fixed font=
-</pre> </font></span></td>
- <td valign="top"><code>Fixed font</code><p>
+</pre></td>
+ <td><code>Fixed font</code><p>
</p>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Bold Fixed Font:</strong> %BR% Words get shown in <code><b>bold fixed font</b></code> by enclosing them in <code><b></b></code> double equal signs. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Bold Fixed Font:</strong> %BR% Words get shown in <code><b>bold fixed font</b></code> by enclosing them in <code><b></b></code> double equal signs. </td>
+ <td><pre>
==Bold fixed==
-</pre> </font></span></td>
- <td valign="top"><code><b>Bold fixed</b></code></td>
+</pre></td>
+ <td><code><b>Bold fixed</b></code></td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong><em>Note:</em></strong> Make sure there is no space between the text and the bold, italic, or other indicators (<code>* _ __ = ==</code>). </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td> %T% You can follow the closing bold, italic, or other (<code>* _ __ = ==</code>) indicator with normal punctuation, such as commas and full stops. <p> %X% Make sure there is no space between the text and the indicators. </p>
+ </td>
+ <td><pre>
_This works_,
-_this not _
-</pre> </font></span></td>
- <td valign="top"><em>This works</em>,%BR% _this not _ </td>
+_this does not _
+</pre></td>
+ <td><em>This works</em>,%BR% _this does not _ </td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Verbatim Mode:</strong> %BR% Surround code excerpts and other formatted text with <code><verbatim></code> and <code></verbatim></code> tags. %BR% <strong><em>Note:</em></strong> Use <code><pre></code> and <code></pre></code> tags instead if you want that HTML code is interpreted. %BR% <strong><em>Note:</em></strong> Each tag must be on a line by itself. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Verbatim (Literal) Text:</strong> %BR% Surround code excerpts and other formatted text with <code><verbatim></code> and <code></verbatim></code> tags.%BR% %T% <code>verbatim</code> tags disable HTML code. Use <code><pre></code> and <code></pre></code> tags instead if you want the HTML code within the tags to be interpreted.%BR% <strong><em>%X% NOTE:</em></strong> Preferences variables (* Set NAME = value) are set within verbatim tags. </td>
+ <td><pre>
<verbatim>
class CatAnimal {
void purr() {
- <code here>
+ <code here>
}
}
</verbatim>
-</pre> </font></span></td>
- <td valign="top"><pre>
+</pre></td>
+ <td><pre>
class CatAnimal {
void purr() {
<code here>
}
</pre></td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Separator:</strong> %BR% At least three dashes at the beginning of a line. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Separator (Horizontal Rule):</strong> %BR% Three or more three dashes at the beginning of a line.. </td>
+ <td><pre>
-------
-</pre> </font></span></td>
- <td valign="top">
+</pre></td>
+ <td>
<hr />
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>List Item:</strong> %BR% Three spaces, an asterisk, and another space. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
- * bullet item
-</pre> </font></span></td>
- <td valign="top">
- <ul>
- <li> bullet item </li>
- </ul>
- </td>
- </tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Nested List Item:</strong> %BR% Six, nine, ... spaces, an asterisk, and another space. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
- * level 1
- * level 2
-</pre> </font></span></td>
- <td valign="top">
+ <tr valign="top">
+ <td><strong>Bulleted List:</strong> %BR% Multiple of three spaces, an asterisk, and another space.%BR% %H% For all the list types, you can break a list item over several lines by indenting lines after the first one by <strong>at least 3 spaces</strong>. </td>
+ <td><pre>
+ * level 1
+ * level 2
+ * back on 1
+ * A bullet
+ broken over
+ three lines
+ * last bullet
+</pre></td>
+ <td>
<ul>
<li> level 1 <ul>
<li> level 2 </li>
</ul>
</li>
+ <li> back on 1 </li>
+ <li> A bullet broken over three lines </li>
+ <li> last bullet </li>
</ul>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Ordered List:</strong> %BR% Three spaces, a number, a dot, and another space. Several types are available besides a number: <table border="1" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td><strong>Numbered List:</strong> %BR% Multiple of three spaces, a type character, a dot, and another space. Several types are available besides a number: <table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
<tr>
- <th bgcolor="#99CCCC"><strong> Type </strong></th>
- <th bgcolor="#99CCCC"><strong> Generated Style </strong></th>
- <th bgcolor="#99CCCC"><strong> Sample Sequence </strong></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Type</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Generated Style</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=1;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">Sample Sequence</font></a></th>
</tr>
<tr>
- <td> 1. </td>
- <td> Arabic numerals </td>
- <td> 1, 2, 3, 4... </td>
+ <td bgcolor="#ecf2f8" style=""> 1. </td>
+ <td bgcolor="#ecf2f8" style=""> Arabic numerals </td>
+ <td bgcolor="#ecf2f8" style=""> 1, 2, 3, 4... </td>
</tr>
<tr>
- <td> A. </td>
- <td> Uppercase letters </td>
- <td> A, B, C, D... </td>
+ <td bgcolor="#ffffff" style=""> A. </td>
+ <td bgcolor="#ffffff" style=""> Uppercase letters </td>
+ <td bgcolor="#ffffff" style=""> A, B, C, D... </td>
</tr>
<tr>
- <td> a. </td>
- <td> Lowercase letters </td>
- <td> a, b, c, d... </td>
+ <td bgcolor="#ecf2f8" style=""> a. </td>
+ <td bgcolor="#ecf2f8" style=""> Lowercase letters </td>
+ <td bgcolor="#ecf2f8" style=""> a, b, c, d... </td>
</tr>
<tr>
- <td> I. </td>
- <td> Uppercase Roman Numerals </td>
- <td> I, II, III, IV... </td>
+ <td bgcolor="#ffffff" style=""> I. </td>
+ <td bgcolor="#ffffff" style=""> Uppercase Roman Numerals </td>
+ <td bgcolor="#ffffff" style=""> I, II, III, IV... </td>
</tr>
<tr>
- <td> i. </td>
- <td> Lowercase Roman Numerals </td>
- <td> i, ii, iii, iv... </td>
+ <td bgcolor="#ecf2f8" style=""> i. </td>
+ <td bgcolor="#ecf2f8" style=""> Lowercase Roman Numerals </td>
+ <td bgcolor="#ecf2f8" style=""> i, ii, iii, iv... </td>
</tr>
</table>
- <p>
- </p>
</td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
- 1. Sushi
- 1. Dim Sum
-
- A. Sushi
- A. Dim Sum
-
- i. Sushi
- i. Dim Sum
-</pre> </font></span></td>
- <td valign="top">
+ <td><pre>
+ 1. Sushi
+ 1. Dim Sum
+ 1. Fondue
+
+ A. Sushi
+ A. Dim Sum
+ A. Fondue
+
+ i. Sushi
+ i. Dim Sum
+ i. Fondue
+</pre></td>
+ <td>
<ol>
<li> Sushi </li>
<li> Dim Sum </li>
+ <li> Fondue </li>
</ol>
<p>
</p>
<ol>
<li type="A"> Sushi </li>
<li type="A"> Dim Sum </li>
+ <li type="A"> Fondue </li>
</ol>
<p>
</p>
<ol>
<li type="i"> Sushi </li>
<li type="i"> Dim Sum </li>
+ <li type="i"> Fondue </li>
</ol>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Definition List:</strong> %BR% Three spaces, a dollar sign, the term, a colon, a space, followed by the definition. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
- $ Sushi: Japan
- $ Dim Sum: S.F.
-</pre> </font></span></td>
- <td valign="top">
+ <tr valign="top">
+ <td><strong>Definition List:</strong> %BR% Three spaces, a dollar sign, the term, a colon, a space, followed by the definition. </td>
+ <td><pre>
+ $ Sushi: Japan
+ $ Dim Sum: S.F.
+</pre></td>
+ <td>
<dl>
<dt> Sushi </dt>
<dd> Japan </dd>
</dl>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Table:</strong> %BR% Any number of lines of text. Each line is one row of the table consisting of one or more cells. Each cell starts and ends with a vertical bar '|'. Any spaces at the beginning of a line are ignored.%BR% <strong><em>Notes:</em></strong> %BB% <code>| *bold* |</code> cells are displayed as table headers.%BB% <code>| center-spaced |</code> cells are displayed center aligned.%BB% <code>| right-spaced |</code> cells are displayed right aligned.%BB% <code>| 2 colspan ||</code> cells are displayed as multi-span columns (i.e., a cell with no text spans a column).%BB% <code>|^|</code> cells with a caret indicate follow-up rows of multi-span rows (this functionality is provided by [[Main/TablePlugin]]).%BB% If a row contains a large amount of text, and you want it to be more readable while editing the table, split the row into multiple text lines by ending each line with a backslash character <code>'\'</code>.%BB% Table cells wrap automatically as determined by the browser. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Table:</strong> %BR% Each row of the table is a line containing of one or more cells. Each cell starts and ends with a vertical bar '|'. Any spaces at the beginning of a line are ignored. <ul>
+ <li><code>| *bold* |</code> header cell with text in asterisks </li>
+ <li><code>| center-aligned |</code> cell with at least two, and equal number of spaces on either side </li>
+ <li><code>| right-aligned |</code> cell with more spaces on the left </li>
+ <li><code>| 2 colspan ||</code> and multi-span columns with multiple <tt>|</tt>'s right next to each other </li>
+ <li><code>|^|</code> cell with caret indicating follow-up row of multi-span rows </li>
+ <li> You can split rows over multiple lines by putting a backslash <code>'\'</code> at the end of each line </li>
+ <li> Contents of table cells wrap automatically as determined by the browser </li>
+ </ul> %T% The [[TWiki/TablePlugin]] provides the <code>|^|</code> multiple-span row functionality and additional rendering features </td>
+ <td><pre>
| *L* | *C* | *R* |
-| A2 | 2 | 2 |
-| A3 | 3 | 3 |
+| A2 | B2 | C2 |
+| A3 | B3 | C3 |
| multi span |||
-| A4-6 | four | four |
-|^| five | five |
-
+| A5-7 | 5 | 5 |
|^| six | six |
-</pre> </font></span></td>
- <td valign="top">
- <table border="1" cellpadding="0" cellspacing="0">
+|^| seven | seven |
+| split\
+ | over\
+ | 3 lines |
+| A9 | B9 | C9 |
+</pre></td>
+ <td>
+ <table border="1" cellpadding="0" cellspacing="0" style="border-width: 1px">
+ <tr>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=0;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">L</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=1;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">C</font></a></th>
+ <th bgcolor="#6b7f93" maxcols="0" style=""><a href="http://localhost?sortcol=2;table=2;up=0#sorted_table" rel="nofollow" title="Sort by this column"><font color="#ffffff">R</font></a></th>
+ </tr>
+ <tr>
+ <td bgcolor="#ecf2f8" style=""> A2 </td>
+ <td align="center" bgcolor="#ecf2f8" style=""> B2 </td>
+ <td align="right" bgcolor="#ecf2f8" style=""> C2 </td>
+ </tr>
<tr>
- <th bgcolor="#99CCCC"><strong> L </strong></th>
- <th bgcolor="#99CCCC"><strong> C </strong></th>
- <th bgcolor="#99CCCC"><strong> R </strong></th>
+ <td bgcolor="#ffffff" style=""> A3 </td>
+ <td align="center" bgcolor="#ffffff" style=""> B3 </td>
+ <td align="right" bgcolor="#ffffff" style=""> C3 </td>
</tr>
<tr>
- <td> A2 </td>
- <td align="center"> 2 </td>
- <td align="right"> 2 </td>
+ <td bgcolor="#ecf2f8" colspan="3" style=""> multi span </td>
</tr>
<tr>
- <td> A3 </td>
- <td align="center"> 3 </td>
- <td align="right"> 3 </td>
+ <td bgcolor="#ffffff" rowspan="3" style=""> A5-7 </td>
+ <td align="center" bgcolor="#ffffff" style=""> 5 </td>
+ <td align="right" bgcolor="#ffffff" style=""> 5 </td>
</tr>
<tr>
- <td colspan="3"> multi span </td>
+ <td bgcolor="#ecf2f8" style=""> six </td>
+ <td bgcolor="#ecf2f8" style=""> six </td>
</tr>
<tr>
- <td> A4-6 </td>
- <td> four </td>
- <td> four </td>
+ <td bgcolor="#ffffff" style=""> seven </td>
+ <td bgcolor="#ffffff" style=""> seven </td>
</tr>
<tr>
- <td> ^ </td>
- <td> five </td>
- <td> five </td>
+ <td bgcolor="#ecf2f8" style=""> split </td>
+ <td bgcolor="#ecf2f8" style=""> over </td>
+ <td bgcolor="#ecf2f8" style=""> 3 lines </td>
</tr>
<tr>
- <td> ^ </td>
- <td> six </td>
- <td> six </td>
+ <td bgcolor="#ffffff" style=""> A9 </td>
+ <td align="center" bgcolor="#ffffff" style=""> B9 </td>
+ <td align="right" bgcolor="#ffffff" style=""> C9 </td>
</tr>
</table>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>WikiWord Links:</strong> %BR% CapitalizedWordsStuckTogether (or [[Main/WikiWords]]) will produce a link automatically. %BR% <strong><em>Note:</em></strong> In case you want to link to a topic in a different %WIKITOOLNAME% web write <code>Otherweb.TopicName</code>. (The link label is the the name of the web in case the is WebHome, else it is the topic name) </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
-WebNotify
+ <tr valign="top">
+ <td><strong>WikiWord Links:</strong> %BR% CapitalizedWordsStuckTogether (or [[Main/WikiWords]]) will produce a link automatically if preceded by whitespace or parenthesis. %BR% %T% If you want to link to a topic in a different web write <code>Otherweb.TopicName</code>. %BR% %H% The link label excludes the name of the web, e.g. only the topic name is shown. As an exception, the name of the web is shown for the WebHome topic. <p> It's generally a good idea to use the [[Main/TWikiVariables]] %TWIKIWEB% and %MAINWEB% instead of TWiki and Main. </p>
+ </td>
+ <td><pre>
+WebStatistics
+
+Sandbox.WebNotify
-Main.TWikiUsers
-</pre> </font></span></td>
- <td valign="top">[[Main/WebNotify]]<p>[[Main/TWikiUsers]]</p>
+Sandbox.WebHome
+</pre></td>
+ <td>[[Main/WebStatistics]]<p>[[Sandbox/WebNotify]]</p>
+ <p>[[Sandbox/WebHome]]</p>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><a name="SquareBrackets"></a> <strong>Forced Links:</strong> %BR% You can create a forced internal link by enclosing words in double square brackets. %BR% <strong><em>Note:</em></strong> Text within the brackets may contain optional spaces; the topic name is formed by capitalizing the initial letter and by removing the spaces; for example, <code>[[text formatting FAQ]]</code> links to topic [[Main/TextFormattingFAQ]]. You can also refer to a different web and use anchors. %BR% <strong><em>Note:</em></strong> To "escape" double square brackets that would otherwise be a correct link, prefix the leading left square brackets with an exclamation point, that is, begin with <code>![[....</code></td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Anchors:</strong> %BR% You can define a reference inside a TWiki topic (called an anchor name) and link to that. To <strong><em>define</em></strong> an anchor write <code>#AnchorName</code> at the beginning of a line. The anchor name must be a [[Main/WikiWord]]. To <strong><em>link to</em></strong> an anchor name use the <code>[[MyTopic#MyAnchor]]</code> syntax. You can omit the topic name if you want to link within the same topic. </td>
+ <td><pre>
+[[WikiWord#NotThere]]
+
+[[#MyAnchor][Jump]]
+
+#MyAnchor To here
+</pre></td>
+ <td>[[Main/WikiWord#NotThere]]<p>[[Main/WebHome#MyAnchor]]</p>
+ <p><a name="MyAnchor"></a> To here </p>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td><a name="HeRe"></a> <strong>Forced Links:</strong> %BR% You can create a forced internal link by enclosing words in double square brackets. %BR% Text within the brackets may contain optional spaces; the topic name is formed by capitalizing the initial letter and by removing the spaces; for example, <code>[[text formatting FAQ]]</code> links to topic [[Main/TextFormattingFAQ]]. You can also refer to a different web and use anchors. %BR% %T% To "escape" double square brackets that would otherwise make a link, prefix the leading left square bracket with an exclamation point. </td>
+ <td><pre>
[[wiki syntax]]
[[Main.TWiki users]]
escaped:
![[wiki syntax]]
-</pre> </font></span></td>
- <td valign="top">[[Main/WikiSyntax]]<p>[[Main/TWikiUsers]]</p>
+</pre></td>
+ <td>[[Main/WikiSyntax]]<p>[[Main/TWikiUsers]]</p>
<p> escaped: [[wiki syntax]] </p>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Specific Links:</strong> %BR% Create a link where you can specify the link text and the link reference separately, using nested square brackets like <code>[[reference][text]]</code>. Internal link references (e.g. [[Main/WikiSyntax]]) and external link references (e.g. <a href="http://TWiki.org/" target="_top">http://TWiki.org/</a>) are supported. %BR% <strong><em>Note:</em></strong> The same <strong><em>Forced Links</em></strong> rules apply for internal link references. %BR% <strong><em>Note:</em></strong> For external link references, you can simply use a space instead of <code>][</code> to separate the link URL from the descriptive text. %BR% <strong><em>Note:</em></strong> Anchor names can be added as well, like <code>[[WebHome#MyAnchor][go home]]</code> and <code>[[http://gnu.org/#Action][GNU Action]]</code>. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
-[[WikiSyntax][syntax]]
+ <tr valign="top">
+ <td><strong>Specific Links:</strong> %BR% You can create a link where you specify the link text and the URL separately using nested square brackets <code>[[reference][text]]</code>. Internal link references (e.g. [[Main/WikiSyntax]]) and URLs (e.g. <a href="http://TWiki.org/" target="_top">http://TWiki.org/</a>) are both supported. The rules described under <strong><em>Forced Links</em></strong> apply for internal link references. %BR% %T% Anchor names can be added as well, to create a link to a specific place in a topic. </td>
+ <td><pre>
+[[WikiSyntax][wiki syntax]]
[[http://gnu.org][GNU]]
-
-[[http://xml.org XML]]
-</pre> </font></span></td>
- <td valign="top">[[Main/WikiSyntax]]<p><a href="http://gnu.org" target="_top">GNU</a></p>
- <p><a href="http://xml.org" target="_top">XML</a></p>
- </td>
- </tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Anchors:</strong> %BR% You can define a link reference inside a %WIKITOOLNAME% topic (called an anchor name) and link to that. To <strong><em>define</em></strong> an anchor write <code>#AnchorName</code> at the beginning of a line. The anchor name must be a [[Main/WikiWord]]. To <strong><em>link to</em></strong> an anchor name use the <code>[[MyTopic#MyAnchor]]</code> syntax. You can omit the topic name if you want to link within the same topic. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
-[[WikiWord#NotThere]]
-
-[[#MyAnchor][Jump]]
-
-#MyAnchor To here
-</pre> </font></span></td>
- <td valign="top">[[Main/WikiWord#NotThere]]<p>[[Main/WebHome#MyAnchor]]</p>
- <p><a name="MyAnchor"></a> To here </p>
+</pre></td>
+ <td>[[Main/WikiSyntax]]<p><a href="http://gnu.org" target="_top">GNU</a></p>
</td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Prevent a Link:</strong> %BR% Prevent a [[Main/WikiWord]] from being linked by prepending it with an exclamation point. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Prevent a Link:</strong> %BR% Prevent a [[Main/WikiWord]] from being linked by prepending it with an exclamation point. </td>
+ <td><pre>
!SunOS
-</pre> </font></span></td>
- <td valign="top"> SunOS </td>
+</pre></td>
+ <td> SunOS </td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Disable Links:</strong> %BR% You can disable automatic linking of [[Main/WikiWords]] by surrounding text with <code><noautolink></code> and <code></noautolink></code> tags. %BR% <strong><em>Note:</em></strong> Each tag must be on a line by itself. %BR% <strong><em>Note:</em></strong> This also works for TWiki tables, but only if you add a blank line between the end of the table and the closing <code></noautolink></code> tag (known issue of the [[Main/TablePlugin]]). </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
+ <tr valign="top">
+ <td><strong>Disable Links:</strong> %BR% You can disable automatic linking of [[Main/WikiWords]] by surrounding text with <code><noautolink></code> and <code></noautolink></code> tags.%BR% %H% It is possible to turn off all auto-linking with a NOAUTOLINK preferences setting. </td>
+ <td><pre>
<noautolink>
RedHat &
SuSE
</noautolink>
-</pre> </font></span></td>
- <td valign="top"> RedHat & SuSE </td>
+</pre></td>
+ <td> RedHat & SuSE </td>
</tr>
- <tr bgcolor="#ffffff">
- <td valign="top"><strong>Mailto: Links:</strong> %BR% To create 'mailto:' links that have more descriptive link text, specify subject lines or message bodies, or omit the email address, you can write <code>[[mailto:user@domain descriptive text]]</code>. </td>
- <td valign="top"><span style="background: #FFFFCC"><font color="#990000"> <pre>
-[[mailto:a@z.com Mail]]
+ <tr valign="top">
+ <td><strong>Mailto Links:</strong> %BR% E-mail addresses are linked automatically. To create e-mail links that have more descriptive link text, specify subject lines or message bodies, or omit the e-mail address, you can write <code>[[mailto:user@domain][descriptive text]]</code>. </td>
+ <td><pre>
+a@b.com
+
+[[mailto:a@b.com]\
+[Mail]]
-[[mailto:?subject=Hi Hi]]
-</pre> </font></span></td>
- <td valign="top"><a href="mailto:a@z.com">Mail</a><p><a href="mailto:?subject=Hi">Hi</a></p>
+[[mailto:?subject=\
+Hi][Hi]]
+</pre></td>
+ <td><a href="mailto:a@b.com">a@b.com</a><p><a href="mailto:a@b.com">Mail</a></p>
+ <p><a href="mailto:?subject=Hi">Hi</a></p>
</td>
</tr>
</table>
## <a name="Using HTML"></a> Using HTML
-You can use just about any HTML tag without a problem - however, there are a few usability and technical considerations to keep in mind.
+You can use just about any HTML tag without a problem. You can add HTML if there is no TWiki equivalent, for example, write `<strike>deleted text</strike>` to get <strike>deleted text</strike>.
-### <a name="HTML and TWiki Usability"></a> HTML and TWiki Usability
+%X% There are a few usability and technical considerations to keep in mind:
-- %T% **TIP:** On collaboration pages, it's preferable NOT to use HTML, and to use [[TWiki shorthand|Main/WebHome#TWikiShorthand]] instead - this keeps the text uncluttered and easy to edit.
-- %X% **NOTE:** TWiki is designed to work with a wide range of browsers and computer platforms, holding to HTML 4.0 and XHTML 1.0 compatibility in the standard installation - adding raw HTML, particularly browser-specific tags (or any other mark-up that doesn't degrade well) will reduce compatibility.
-- Recommondations when using HTML:
- - Use [XHTML 1.0 Transitional](http://www.w3.org/TR/xhtml1/) syntax
- - Do not span a tag over more then one line
- - Remove all empty lines. TWiki inserts `<p />` paragraph tags on empty lines, which causes problems if done between tags that do not allow paragraph tags, like for example between table tags.
+- On collaboration pages, it's better **not** to use HTML, but to use [[TWiki shorthand|Main/WebHome#TWikiShorthand]] instead - this keeps the text uncluttered and easy to edit.
+- If you use HTML use [XHTML 1.0 Transitional](http://www.w3.org/TR/xhtml1/) syntax.
+- %X% Script tags may be filtered out, at the discretion of your TWiki administrator.
-### <a name="TWiki HTML Rendering"></a> TWiki HTML Rendering
+Recommendations when pasting HTML from other sources:
-- TWiki converts shorthand notation to XHTML 1.0 for display. To copy a fully marked-up page, simply view source in your browser and save the contents.
- - %T% If you need to save HTML frequently, you may want to check out TWiki:Plugins/GenHTMLAddon - it will "generate a directory containing rendered versions of a set of TWiki pages together with any attached files."
-- %X% **NOTE:** The opening and closing angle brackets - <code>**<...>**</code> - of an HTML tag **_must be on the same line_**, or the tag will be broken.
- - This feature allows you to enter an unclosed angle bracket - as a greater than or less than symbol - and have it automatically rendered as if you had entered its HTML character, `<`, ex: <code>**a < b**</code>
- - %T% If you're pasting in preformatted HTML text and notice problems, check the file in a text processor with no text wrap. Also, save without hard line breaks on text wrap, in your HTML editing program.
+- Copy only text between `<body>` and `</body>` tags.
+- Remove all empty lines. TWiki inserts `<p />` paragraph tags on empty lines, which causes problems if done between HTML tags that do not allow paragraph tags, like for example between table tags.
+- Remove leading spaces. TWiki might interpret some text as lists.
+- Do not span a tag over more than one line. TWiki requires that the opening and closing angle brackets - <code>**<...>**</code> - of an HTML tag are on the same line, or the tag will be broken.
+- In your HTML editing program, save without hard line breaks on text wrap.
-### <a name="TWiki and _JavaScript"></a> TWiki and JavaScript
+%T% TWiki converts shorthand notation to HTML for display. To copy a fully marked-up page, simply view the source in your browser and save the contents. If you need to save HTML frequently, you may want to check out TWiki:Plugins/PublishAddOn.
-You can use JavaScript for your TWiki applications. Since TWiki rendering might interfere with JavaScript code you need to escape it with HTML comments and `<pre>` tags:
+### <a name="Script tags"></a> Script tags
- <script type="text/javascript">
- <!-- Hide JavaScript and <pre> escape TWiki rendering
- ... put your JavaScript code here...
- // Stop hiding and stop </pre> escaping TWiki rendering -->
- </script>
+You can use HTML `<script>` tags for your TWiki applications. However note that your TWiki administrator can disable `<script>` in topics, and may have chosen to do so for security considerations. TWiki markup and [[TWikiVariables]] are **not** expanded inside script tags.
## <a name="Hyperlinks"></a> Hyperlinks
-Being able to create links without any formatting required is a core TWiki feature, made possible with [[WikiWords]]. New TWiki linking rules are a simple extension of the syntax that provide a new set of flexible options.
+Being able to create links without any special formatting is a core TWiki feature, made possible with [[WikiWords]] and inline URLs.
### <a name="Internal Links"></a> Internal Links
-- [[GoodStyle]] is a [[WikiWord]] that links to the GoodStyle topic located in the current %WIKITOOLNAME% web.
+- [[GoodStyle]] is a [[WikiWord]] that links to the GoodStyle topic located in the current web.
- [[NotExistingYet]] is a topic waiting to be written. Create the topic by clicking on the **?**. (Try clicking, but then, **Cancel** - creating the topic would wreck this example!)
- `http://...`, `https://...`, `ftp://...`, `gopher://...`, `news://...`, `file://...`, `telnet://...` and `mailto:...@...` are linked automatically.
-- Email addresses like `name@domain.com` are linked automatically.
+- E-mail addresses like `name@domain.com` are linked automatically.
- `[[Square bracket rules]]` let you easily create [[non-WikiWord links|Main/WebHome#SquareBrackets]].
- You can also write `[[http://yahoo.com Yahoo home page]]` as an easier way of doing external links with descriptive text for the link, such as [Yahoo home page](http://yahoo.com/).
## <a name="TWiki Variables"></a> TWiki Variables
-Variables are names that are enclosed in percent signs `%` that are expanded on the fly.
+TWiki Variables are names that are enclosed in percent signs `%` that are expanded on the fly.
- `%TOC%` : Automatically generates a table of contents based on headings in a topic - see the top of this page for an example.
- `%ATTACHURL%` : The attachment URL of the current topic. Example usage: If you attach a file to a topic you can refer to it as <code>**%ATTACHURL%/image.gif**</code> to show the URL of the file or the image in your text.
-- `%INCLUDE{"SomeTopic"}%` : Server side include, includes another topic. The current %WIKITOOLNAME% web is the default web. Example: <code>**%INCLUDE\{"TWiki.SiteMap"\}%**</code>
+- `%INCLUDE{"SomeTopic"}%` : Server side include, includes another topic. The current web is the default web. Example: <code>**%INCLUDE\{"TWiki.SiteMap"\}%**</code>
-- `%SEARCH{"sushi"}%` : Inline search showing the search result embedded in a topic. [[FormattedSearch]] gives you control over formatting, used to create web-based applications.
+- `%SEARCH{"sushi"}%` : Inline search showing the search result embedded in a topic. [[FormattedSearch]] gives you control over formatting, useful for creating web-based applications.
-- [[TWikiPreferences]] defines site-wide variables. Among others:
- - **Line break:** Write <code><span><font>%BR%</font></span></code> to start a new line.
- - **Colored text:** Write: <code><span><font> %RED% Red %ENDCOLOR% and %BLUE% blue %ENDCOLOR% colors</font></span></code> to get: %RED% Red %ENDCOLOR% and %BLUE% blue %ENDCOLOR% colors.
- - **Documentation Graphics:** Write: <code><span><font> %H% Help, %T% Tip, %X% Alert</font></span></code> to get: %H% Help, %T% Tip, %X% Alert. For more info see [[TWikiDocGraphics]].
+- [[TWikiPreferences]] defines some site-wide variables. Among others:
+ - **Line break:** Write `%BR%` to start a new line.
+ - **Colored text:** Write: `%RED% Red %ENDCOLOR% and %BLUE% blue %ENDCOLOR% colors` to get: %RED% Red %ENDCOLOR% and %BLUE% blue %ENDCOLOR% colors.
+ - **Documentation Graphics:** Write: `%H% Help, %T% Tip, %X% Alert` to get: %H% Help, %T% Tip, %X% Alert. For more info see [[TWikiDocGraphics]].
- There are many more variables, see **[[TWikiVariables]]**.
-- To "escape" a variable, prefix it with an exclamation point. Write: <code><span><font> !%SOMEVARIABLE% </font></span></code> to get: %SOMEVARIABLE%.
+- To "escape" a variable, prefix it with an exclamation mark. Write: `!%SOMEVARIABLE%` to get: %SOMEVARIABLE%.
## <a name="TWikiPlugin Formatting Extension"></a><a name="_TWikiPlugin Formatting Extensio"></a> TWikiPlugin Formatting Extensions
-Plugins provide additional text formatting capabilities and can extend the functionality of %WIKITOOLNAME% into many other areas. For example, the optional [SpreadSheetPlugin](http://twiki.org/cgi-bin/view/Plugins/SpreadSheetPlugin) lets you create a spreadsheet with the same basic notation used in TWiki tables.
+Plugins can extend the functionality of TWiki into many other areas. There are a huge number of TWiki plugins available from the [Plugins](http://twiki.org/cgi-bin/view/Plugins) web on TWiki.org.
-Available Plugins are located in the [Plugins](http://twiki.org/cgi-bin/view/Plugins) web on TWiki.org. Currently enabled plugins on this TWiki installation, as listed by `%PLUGINDESCRIPTIONS%`:
+Currently enabled plugins on this TWiki installation, as listed by `%PLUGINDESCRIPTIONS%`:
- [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
- [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
- **Q:** Why is the `'&'` character sometimes not displayed?
- **A:** The `'&'` character has a special meaning in HTML, it starts a so called character entity, i.e. `'©'` is the `©` copyright character. You need to escape `'&'` to see it as it is, so write `'&'` instead of `'&'`. <br /> Example: Type `'This & that'` to get `'This & that'`.
-
--- TWiki:Main.MikeMannix - 02 Dec 2001 <br /> -- TWiki:Main.PeterThoeny - 01 Aug 2004
Tim Berners-Lee invented the World Wide Web while working at CERN in 1989. See his biography at <http://www.w3.org/People/Berners-Lee/>
-
--- TWiki:Main.PeterThoeny - 12 Jan 2003
--- /dev/null
+# <a name="Tips Contrib Package"></a><a name=" Tips Contrib Package"></a> Tips Contrib Package
+
+Displays a rotating "TWiki Tip of the Day" to help familiarize new users with TWiki features. Includes an application for creating custom tips for local installation.
+
+<div>
+ <ul>
+ <li><a href="#Summary of Contents"> Summary of Contents</a></li>
+ <li><a href="#Detailed Documentation"> Detailed Documentation</a></li>
+ <li><a href="#Settings"> Settings</a></li>
+ <li><a href="#CSS used by _TipsContrib"> CSS used by TipsContrib</a></li>
+ <li><a href="#Installation Instructions"> Installation Instructions</a></li>
+ <li><a href="#Contrib Info"> Contrib Info</a></li>
+ </ul>
+</div>
+
+## <a name="Summary of Contents"></a> Summary of Contents
+
+- Set on `TWikiTip` topics providing brief lessons on TWiki features. See [[TWikiTips]].
+- Set of topics for creating and managing `TWikiTipXXX` topics. See [[TWikiTipsOfTheDayAdmin]].
+
+## <a name="Detailed Documentation"></a> Detailed Documentation
+
+- See [[TWikiTipsOfTheDayAdmin]] for instructions on managing and displaying tips.
+- See [[TWikiTipsOfTheDayAddNew]] for instructions for adding new custom tips.
+
+## <a name="Settings"></a> Settings
+
+This extension requires no settings. See [[TWikiTipsOfTheDayAdmin]] for administration details.
+
+- One line description:
+- Set SHORTDESCRIPTION = Displays rotating list of "TWiki Tip-of-the-day"
+
+## <a name="CSS used by _TipsContrib"></a> CSS used by TipsContrib
+
+- .tipsOfTheDay - overall container
+- .tipsOfTheDayContents - container for tipsOfTheDayHeader and tipsOfTheDayText
+- strong.tipsOfTheDayHeader - header that says "TWiki Tip of the Day"
+- .tipsOfTheDayText - the tip; contains title and tip summary and link "Read on"
+- .tipsOfTheDayTitle - title of the tip; the link to the tip topic
+
+## <a name="Installation Instructions"></a> Installation Instructions
+
+**_Note:_** You do not need to install anything on the browser to use this contrib package. The following instructions are for the administrator who installs the package on the server where TWiki is running.
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> File: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Contrib/TipsContrib.pm</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TipsContrib.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip001.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip002.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip003.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip004.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip005.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip006.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip007.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip008.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip009.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip010.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip011.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip012.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip013.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip014.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip015.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip016.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip017.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip018.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip019.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip020.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip021.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip022.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip023.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip024.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip025.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip026.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip027.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip028.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTip029.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTips.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTipsOfTheDay.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTipsOfTheDayAddNew.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTipsOfTheDayAdmin.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTipsOfTheDayInclude.txt</b></code></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TWikiTipsOfTheDayTemplate.txt</b></code></td>
+ <td> </td>
+ </tr>
+</table>
+
+## <a name="Contrib Info"></a> Contrib Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Author: </td>
+ <td> TWiki:Main.PeterThoeny </td>
+ </tr>
+ <tr>
+ <td align="right"> Copyright ©: </td>
+ <td> Copyright 2005 Peter Thoeny. All Rights Reserved. </td>
+ </tr>
+ <tr>
+ <td align="right"> License: </td>
+ <td> GPL (<a href="http://www.gnu.org/copyleft/gpl.html" target="_top">GNU General Public License</a>) </td>
+ </tr>
+ <tr>
+ <td align="right"> Dependencies: </td>
+ <td> none </td>
+ </tr>
+ <tr>
+ <td align="right"> Version: </td>
+ <td> 8670 </td>
+ </tr>
+ <tr>
+ <td align="right"> Change History: </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td align="right"> 10 Oct 2005: </td>
+ <td> Initial version - Packaging by TWiki:Main.LynnwoodBrown </td>
+ </tr>
+ <tr>
+ <td align="right"> Home: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]]
+
+-- TWiki:Main.LynnwoodBrown - 23:00:23 01 February 2006
--- /dev/null
+# <a name="%TOPIC%"></a><a name=" %TOPIC%"></a> %TOPIC%
+
+<div>
+ <ul>
+ <li><a href="#Summary"> Summary</a><ul>
+ <li><a href="#Customization"> Customization</a></li>
+ <li><a href="#Settings"> Settings</a></li>
+ </ul>
+ </li>
+ <li><a href="#Installation Instructions"> Installation Instructions</a></li>
+ <li><a href="#Demo Text"> Demo & Text</a></li>
+ <li><a href="#Contrib Info"> Contrib Info</a></li>
+ </ul>
+</div>
+
+# <a name="Summary"></a> Summary
+
+This contrib packages in a convenient way the Javascript library and the CSS file needed to implement TWisty Sections.
+
+To use the libraries, you must place the following scriplet either in the head section of the page (by modifying the [[TWikiSkins]]) or putting it somewhere in the topic:
+
+ <style type="text/css" media="all">
+ @import url("%PUBURLPATH%/TWiki/TwistyContrib/twist.css");
+ </style>
+
+ <script type="text/javascript" src="%PUBURLPATH%/TWiki/TwistyContrib/twist.js"></script>
+
+It's recommended to use the TWiki:Plugins.TwistyPlugin, as it eases the deployment and use of this contrib.
+
+%RED%Caution: If the previous scriplet is put in the HEAD section of the page or the TWiki:Plugins.TwistyPlugin is used, it won't work if the `<body onload="">` manager is set by the skin. Check the [twist.js](http://www.dementia.org/twiki//view/twist.js) file for an idea on how to register an eventmanager for the onload event without overwriting the previous one.%ENDCOLOR%
+
+This Contrib should work in all versions of TWiki. It has been tested against TWiki:Codev.CairoRelease and TWiki:Codev.DakarRelease.
+
+## <a name="Customization"></a> Customization
+
+Skins can customize the color of the twisty placeholder by modifiying the `.twistyPlaceholder` style.
+
+## <a name="Settings"></a> Settings
+
+- Name of the perl package
+ - Set STUB = TWiki::Contrib::TwistyContrib
+
+- One line description:
+ - Set SHORTDESCRIPTION = Placeholder for the twisty javascript library.
+
+# <a name="Installation Instructions"></a> Installation Instructions
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your ($TWIKI\_ROOT) directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> File: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/TwistyContrib.txt</b></code></td>
+ <td> NEW </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Contrib/TwistyContrib.pm</b></code></td>
+ <td> NEW </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/TwistyContrib/toggle-optm-jsoff-sep.html</b></code></td>
+ <td> NEW </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/TwistyContrib/twist.css</b></code></td>
+ <td> NEW </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/TwistyContrib/twist.js</b></code></td>
+ <td> NEW </td>
+ </tr>
+</table>
+
+- Optionally, run <code>**%TOPIC%\_installer**</code> to automatically check and install other TWiki modules that this module depends on. You can also do this step manually.
+- Alternatively, manually make sure the dependencies listed in the table below are resolved. None
+
+# <a name="Demo Text"></a> Demo & Text
+
+If the contrib is properly installed (and Javascript is enabled in your browser!), then you should see some folding sections below. Look at [[http://www.dementia.org/twiki/view/%WEB%.%TOPIC%?raw=on|%WEB%.%TOPIC%?raw=on]] to see how it's done.
+
+<span> </span>
+
+<button> Unfold </button>
+
+<span> </span>
+
+<button> Fold </button>
+<div id="demotoggle">
+ <hr /> Click on the button above to fold this section. <hr />
+</div>
+
+<span> [Expand...](#) <span>Hamlet is without question the most famous play in the English language...</span> </span> <span> [Collapse...](#) </span>
+
+<div id="no_1toggle"> Hamlet is without question the most famous play in the English language. Probably written in 1601 or 1602, the tragedy is a milestone in Shakespeare's dramatic development; the playwright achieved artistic maturity in this work through his brilliant depiction of the hero's struggle with two opposing forces: moral integrity and the need to avenge his father's murder. <p><span id="no_2show"> <a href="#">More...</a> </span> <span id="no_2hide"> <a href="#">Hide more</a> </span></p>
+ <p>
+ </p>
+</div>
+
+<div id="no_2toggle"> For more Shakespeare plays, see Wikipedia:WilliamShakespeare </div>
+
+# <a name="Contrib Info"></a> Contrib Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td> Authors: </td>
+ <td> Javascript created by TWiki:Main.SamHasler, Contrib packaged by TWiki:Main.RafaelAlvarez </td>
+ </tr>
+ <tr>
+ <td> Copyright ©: </td>
+ <td> 2005 Sam Hasler and Rafael Alvarez </td>
+ </tr>
+ <tr>
+ <td> License: </td>
+ <td><a href="http://www.gnu.org/copyleft/gpl.html" target="_top">GPL</a></td>
+ </tr>
+ <tr>
+ <td> Dependencies: </td>
+ <td> None </td>
+ </tr>
+ <tr>
+ <td> 12/09/2005 </td>
+ <td> 1.000 First Version </td>
+ </tr>
+ <tr>
+ <td align="right"> Home: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Appraisal: </td>
+ <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Appraisal</a></td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]]
--- /dev/null
+# <a name="A List of TWiki User Documentati"></a> A List of TWiki User Documentation
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
--- /dev/null
+# <a name="A List of TWiki User Tools"></a> A List of TWiki User Tools
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
--- /dev/null
+# <a name="ATOM News Feeds"></a> ATOM News Feeds
+
+## <a name="Find out What's New"></a> Find out What's New
+
+There are several ways to find out what's new in each TWiki web:
+
+1. Visit [[WebChanges]] to see recent changes
+2. Subscribed in [[WebNotify]] get notified of recent changes by e-mail
+3. Use a news readers such as TWiki:Plugins/HeadlinesPlugin to display the recent changes
+ - The source can be a RSS 1.0 feed ([[WebRss]]) or ATOM 1.0 feed ([[WebAtom]])
+ - Learn more on RSS at [[WebRssBase]] and TWiki:Codev/TWikiSyndication
+ - Learn more on ATOM at TWiki:Codev/AtomSyndication
+
+## <a name="ATOM Feed Usage"></a> ATOM Feed Usage
+
+- The URL for an RSS feed is `http://www.dementia.org/twiki/view/<web>/WebAtom`
+- For this %WEB% web it is [[http://www.dementia.org/twiki/view/%WEB%/WebAtom|%WEB%/WebAtom]]
+- You can also create a custom feed based on a search. Add a `search=value` parameter to the URL, e.g. <http://www.dementia.org/twiki//view/%WEB%/WebAtom?search=plugin> is a what's new feed about Plugins.
+
+## <a name="ATOM Feed Internals"></a> ATOM Feed Internals
+
+Each web has a [[WebAtom]] topic which includes part of this %TOPIC% topic. This topic is the base for the ATOM feed and generates an [[WebAtom]] 1.0 feed for TWiki:Codev/AtomSyndication.
+
+The [[WebAtom]] topic in each web contains the following text:
+
+----
+
+ <title><nop>%WIKITOOLNAME%'s <nop>%INCLUDINGWEB% web</title>
+ <subtitle>(the description of the web, plain text with no markup and no wikiwords). TWiki is an Enterprise Collaboration Platform.</subtitle>
+ %INCLUDE{"%TWIKIWEB%.WebAtomBase"}% <!--
+ * Set SKIN = rss
+ -->
+
+----
+
+Below part is included by each WebAtom topic:
+
+----
+
+ %STARTINCLUDE%<link rel="self" type="application/atom+xml" href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%/%HOMETOPIC%"/>
+ <id>%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%</id>
+ <rights>%WEBRSSCOPYRIGHT%</rights>%CALC{$SET(c,0)}%
+ %SEARCH{"%URLPARAM{"search" default=".*" }%" web="%INCLUDINGWEB%" regex="on" nosearch="on" order="modified" reverse="on" nototal="on" limit="16" format="$percntCALC{$IF($GET(c)>0, , <updated>$isodate</updated>$CHAR(10))$SETM(c, +1)}$percnt<entry>$n <title>$topic</title>$n <link rel=\"alternate\" type=\"text/html\" href=\"%SCRIPTURL%/view%SCRIPTSUFFIX%/$web/$topic?t=$isodate\"/>$n <id>%SCRIPTURL%/view%SCRIPTSUFFIX%/$web/$topic</id>$n <updated>$isodate</updated>$n <summary>$summary (last changed by <nop>$wikiname)</summary>$n <author>$n <name><nop>$wikiname</name></author>$n</entry>"}%
+ %STOPINCLUDE%
+
+----
+
+**_See also_**: [[WebRssBase]], TWiki:Codev/AtomSyndication
Incorrect format of search template (missing sections? There should be 4 %SPLIT% tags)
-- See [100](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?search=%5C.*&scope=topic&order=modified&reverse=on®ex=on&nosearch=on&limit=100), [200](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?search=%5C.*&scope=topic&order=modified&reverse=on®ex=on&nosearch=on&limit=200), [400](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?search=%5C.*&scope=topic&order=modified&reverse=on®ex=on&nosearch=on&limit=400), [800](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?search=%5C.*&scope=topic&order=modified&reverse=on®ex=on&nosearch=on&limit=800) most recent changes
-- See [all](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/SearchResult?search=%5C.*&scope=topic&order=modified&reverse=on®ex=on&nosearch=on) changes
+- See [100](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?search=%5C.*;scope=topic;order=modified;reverse=on;regex=on;nosearch=on;limit=100), [200](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?search=%5C.*;scope=topic;order=modified;reverse=on;regex=on;nosearch=on;limit=200), [400](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?search=%5C.*;scope=topic;order=modified;reverse=on;regex=on;nosearch=on;limit=400), [800](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?search=%5C.*;scope=topic;order=modified;reverse=on;regex=on;nosearch=on;limit=800) most recent changes
+- See [all](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/SearchResult?search=%5C.*;scope=topic;order=modified;reverse=on;regex=on;nosearch=on) changes
-## <a name="Web Changes Notification Service"></a> Web Changes Notification Service
+### <a name="Web Changes Notification Service"></a> Web Changes Notification Service
-Each TWiki web has an automatic email notification service that sends you an email with links to all of the topics modified since the last alert.
+Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
-### <a name="Subscription"></a> Subscription
+**_Note for System Administrators:_** Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the [[MailerContrib]] topic for details of how to set up this service.
-You can subscribe and unsubscribe yourself in [[WebNotify]] on each web. Please keep the list in alphabetical order so that names can be found easily.
-
-**_Format:_** TWiki handles entries in bullet list (`<space><space><space>*`) format containing the [[WikiName]] of a user; a WikiName with e-mail address; or a [[TWikiGroup|Main/TWikiGroups]]. Examples:
-
-- `Main.FredBloggs`
-- `Main.FredBloggs - secondary@home.com`
-- `Main.EngineeringGroup`
-
-The first entry is the default form, the notification gets sent to the e-mail address specified in the user's home page. The second entry lists an alternative e-mail address. The third entry specifies a group, the notification gets sent to each member of the group.
-
-### <a name="E-mail Alerts"></a> E-mail Alerts
-
-The frequency of alerts is set by the TWiki site administrator: It could be once a day, every hour, whatever works for the particular web. On TWiki.org, alerts are sent once a day.
-
-See [[TWikiSiteTools]] for information on how to setup the alerts.
-
--- TWiki:Main.MikeMannix - 20 Nov 2001 %BR% -- [[PeterThoeny]] - 28 Aug 2004
+**_Note:_** If you prefer a news feed, point your reader to %INCLUDINGWEB%.WebRss (for RSS 1.0 feeds) or %INCLUDINGWEB%.WebAtom (for ATOM 1.0 feeds). Learn more at [[WebRssBase]] and [[WebAtomBase]], respectively.
-<table>
- <tr>
- <td valign="top"><strong>Welcome to TWiki:</strong> a flexible, powerful, secure, yet simple web-based collaboration platform. Use TWiki to run a project development space, a document management system, a knowledge base or any other groupware tool on either an intranet or on the Internet. <p> This is the place to learn about TWiki features, find where to download it, and try it out for yourself... </p>
- </td>
- <td width="25"> </td>
- <td align="center" valign="top" width="200"><a href="http://TWiki.org/"><img alt="Powered by TWiki" border="0" height="64" src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikiRobot131x64.gif" width="131" /></a><br /> The official TWiki<sup>TM</sup><br /> site is <a href="http://twiki.org/" target="_top">http://twiki.org/</a></td>
- </tr>
-</table>
-<div>
- <ul>
- <li><a href="#TWiki User's Guide"> TWiki User's Guide</a></li>
- <li><a href="#TWiki Reference Manual"> TWiki Reference Manual</a></li>
- <li><a href="#TWikiSiteTools"> TWikiSiteTools</a></li>
- </ul>
-</div>
-<table>
- <tr valign="top">
- <td><a name="UsersGuide"></a><h2><a name="TWiki User's Guide"></a> TWiki User's Guide </h2>
- <p><em>Documentation for TWiki users.</em></p>
- <p>
- </p>
- <ul>
- <li><strong>TWiki Quick Start</strong> - the fast track approach <ul>
- <li>[[Main/WelcomeGuest]]: A fast track intro covering all the basics </li>
- <li>[[Main/ATasteOfTWiki]]: A short introduction training course for beginners </li>
- <li>[[Main/TWikiRegistration]]: Sign up so you can edit pages and select options </li>
- </ul>
- </li>
- </ul>
- <p>
- </p>
- <ul>
- <li><strong>One-Page Primers</strong> cover TWiki basics <ul>
- <li>[[Main/TWikiTutorial]]: A compact, 20-minute TWiki primer </li>
- <li>[[Main/TWikiSite]]: Instant overview - first, there was Wiki </li>
- <li>[[Main/TWikiTopics]]: Customize, rename, move, or delete TWiki topics </li>
- <li>[[Main/SearchHelp]]: Tips and help on search </li>
- <li>[[Main/GoodStyle]]: Working tips for an open collaboration environment </li>
- <li>[[Main/TWikiShorthand]]: All of the TWiki shorthand basics </li>
- <li>[[Main/TextFormattingRules]]: Scan all TWiki text formatting rules on one page </li>
- <li>[[Main/TWikiVariables]]: How to easily embed text, graphics, dynamic content </li>
- <li>[[Main/FileAttachments]]: Browser-upload files for distribution or display </li>
- <li>[[Main/WebChangesAlert]]: Get email alerts linking to the latest page changes </li>
- <li>[[Main/TWikiGlossary]]: A simple glossary of TWiki terms </li>
- </ul>
- </li>
- </ul>
- <p>
- </p>
- <ul>
- <li><strong>TWiki Help FAQs</strong><ul>
- <li>[[Main/TWikiFAQ]]: The first things people ask about TWiki </li>
- <li>[[Main/TextFormattingFAQ]]: Common how-to questions about posting in TWiki </li>
- <li> Frequent users should also browse the full [[Main/WebHome#ReferenceManual]]! </li>
- </ul>
- </li>
- </ul>
- <p>
- </p>
- </td>
- <td width="25"> </td>
- <td align="left" valign="top" width="200">
- <form action="http://www.dementia.org/twiki//search/%WEB%/"><input name="search" size="22" type="text" /><br /><input type="submit" value="Search Docs" /><br /><font size="-2">More options in [[Main/WebSearch]]</font></form>
- </td>
- </tr>
-</table>
-
-- **Help on Installed Plugins**
+<div style="float: right; width: 255px; padding: 1em; text-align: center"><a href="http://twiki.org"><img alt="Collaborate with TWiki -- visit TWiki.org" border="0" height="67" src="http://www.dementia.org/twiki//view/TWiki/TWikiLogos/T-logo-235x67-t.gif" style="margin: .3em 0" title="Collaborate with TWiki -- visit TWiki.org" width="235" /></a><br />The official TWiki site is <a href="http://twiki.org"><span>twiki.org</span></a></div>
-> - [[SpreadSheetPlugin]] <span>(any TWiki, 10197)</span>:
-> - [[CommentPlugin]] <span>(Dakar, 11359)</span>: Allows users to quickly post comments to a page without an edit/preview/save cycle
-> - [[EditTablePlugin]] <span>(any TWiki, 11646)</span>:
-> - [[InterwikiPlugin]] <span>(Dakar, $Rev: 11935$)</span>:
-> - [[PreferencesPlugin]] <span>(Dakar, 9839)</span>:
-> - [[SlideShowPlugin]] <span>(Any TWiki, $Rev: 12847$)</span>:
-> - [[SmiliesPlugin]] <span>(Dakar, 8154)</span>:
-> - [[TablePlugin]] <span>(1.020, 12339)</span>:
-> - [[TwistyPlugin]] <span>(1.2.0, $Rev: 12154$)</span>:
+# <a name="Welcome to the %WEB% Web"></a><a name=" Welcome to the %WEB% Web"></a> Welcome to the %WEB% Web
-<a name="ReferenceManual"></a>
+_The place to learn about TWiki features and perform TWiki system maintenance._
-## <a name="TWiki Reference Manual"></a> TWiki Reference Manual
+TWiki is a flexible, powerful, secure, yet simple web-based collaboration platform. Use TWiki to run a project development space, a document management system, a knowledge base or any other groupware tool on either an intranet or on the Internet.
-_Documentation for webmasters, system administrators, project managers, team leaders, and all other users of the TWiki advanced online collaboration platform._
+## <a name="TWiki Documentation and Configur"></a> TWiki Documentation and Configuration
-- All manual sections in one big page:
- - [[TWiki Documentation|Main/TWikiDocumentation]] (560k)
-- Manual sections in separate pages:
- 1. [[TWiki System Requirements|Main/TWikiSystemRequirements]]
- 2. [[TWiki Installation Guide|Main/TWikiInstallationGuide]]
- 3. [[Windows Install Cookbook|Main/WindowsInstallCookbook]]
- 4. [[TWiki Upgrade Guide|Main/TWikiUpgradeGuide]]
- 5. [[TWiki User Authentication|Main/TWikiUserAuthentication]]
- 6. [[TWiki Access Control|Main/TWikiAccessControl]]
- 7. [[Text Formatting Rules|Main/TextFormattingRules]]
- 8. [[TWiki Variables|Main/TWikiVariables]]
- 9. [[File Attachment|Main/FileAttachment]]
- 10. [[TWiki Forms|Main/TWikiForms]]
- 11. [[TWiki Templates|Main/TWikiTemplates]]
- 12. [[TWiki Skins|Main/TWikiSkins]]
- 13. [[Formatted Search|Main/FormattedSearch]]
- 14. [[TWiki MetaData|Main/TWikiMetaData]]
- 15. [[TWiki Plugins|Main/TWikiPlugins]]
- 16. [[TWiki::Func Module Documentation|Main/TWikiFuncModule]]
- 17. [[TWiki Site Tools|Main/TWikiSiteTools]]
- 18. [[Managing Topics|Main/ManagingTopics]]
- 19. [[Managing Webs|Main/ManagingWebs]]
- 20. [[Managing Users|Main/ManagingUsers]]
- - **Appendices**
- - [[A. TWiki File System|Main/AppendixFileSystem]]
- - [[B. TWiki CSS|Main/TWikiCss]]
- - [[C. Encode URLs With UTF8|Main/AppendixEncodeURLsWithUTF8]]
- - [[D. TWiki Development Timeline|Main/TWikiHistory]]
-
-- %T% **ADMINS:** In less than an hour, you can read through and customize the [[User's Guide|Main/WebHome#UsersGuide]] to reflect the exact feature set enabled on your own TWiki site. See also other enhancement pages:
- - [[TWikiAdminCookBook]]: Some tips that can be applied **before installation**
- - [[InstantEnhancements]]: Simple tips (using just browser, no install needed) and quick (max couple of minutes).
- - [[AdminTools]]: Topics an admin typically needs, all in one page
+<div style="float: right; width: 255px; padding: 1em">
+</div>
-## <a name="TWikiSiteTools"></a><a name="_TWikiSiteTools"></a> TWikiSiteTools
+- [[Welcome Guest|Main/WelcomeGuest]] - look here first
+- [[Tutorial|Main/TWikiTutorial]] - 20 minutes TWiki tutorial
+- [[User's Guide|Main/TWikiUsersGuide]] - documentation for TWiki users
+- [[Frequently Asked Questions|Main/TWikiFAQ]] - about TWiki
+- [[Reference Manual|Main/TWikiReferenceManual]] - documentation for system administrators
+- [[Admin Tools|Main/AdminToolsCategory]] - manage the TWiki site
+- [[TWiki-4.0.0 Release Notes|Main/TWikiReleaseNotes04x00x00]] - describes what's new in this release
-- [[TWikiSiteTools]] include utilities for navigation and for monitoring TWiki web and site-wide activity.
+## <a name="%WEB% Web Utilities"></a> %WEB% Web Utilities
-- [[TWikiPreferences]]: %WIKITOOLNAME% site-wide preferences
-- [[InstalledPlugins]]: currently available TWiki add-on features
+<form action="http://www.dementia.org/twiki/search/%WEB%/">
+ <ul>
+ <li><input name="search" size="22" type="text" /> <input type="submit" value="Search" /> - [[Main/WebSearchAdvanced]]</li>
+ <li>[[Main/WebTopicList]] - all topics in alphabetical order </li>
+ <li>[[Main/WebChanges]] - recent topic changes in this web </li>
+ <li>[[Main/WebNotify]] - subscribe to an e-mail alert sent when topics change </li>
+ <li>[[Main/WebRss]], [[Main/WebAtom]] - RSS and ATOM news feeds of topic changes </li>
+ <li>[[Main/WebStatistics]] - listing popular topics and top contributors </li>
+ <li>[[Main/WebPreferences]] - preferences of this web </li>
+ </ul>
+</form>
-- The [[SiteMap]]: A color-coded directory of available webs that can be easily included on any page _(below)_
+## <a name="Disclaimer"></a> Disclaimer
-- TWiki<sup>TM</sup> is a trademark of [[PeterThoeny]]
- - **_Note_**: Twiki (with a lower case "w") is a robot character in the _Buck Rogers<sup>TM</sup> in the 25th Century_ TV series. TWiki (with an upper case "W") is not affiliated with the Dillie Family Trust, the registered trademark owner of the _Buck Rogers_ name
+- TWiki™, the [[TWiki logo|Main/TWikiLogos]] and the "Collaborate with TWiki" tagline are trademarks of [Peter Thoeny](http://twiki.org/cgi-bin/view/Main/PeterThoeny)
+- **_Note_**: Twiki (with a lower case "w") is a robot character from the _Buck Rogers™ in the 25th Century_ TV series. TWiki (with an upper case "W") is not affiliated with the Dille Family Trust, the registered trademark owner of the _Buck Rogers_ name
- TWiki is developed as Free Software under the [[GNU/GPL|Main/GnuGeneralPublicLicense]]
- This site is running TWiki version **TWiki-4.1.2, Sat, 03 Mar 2007, build 13046**, Plugin API version **1\.11**
-- Get the current version from [TWiki.org Downloads](http://TWiki.org/download.html)<br />![twikiRobot88x31.gif](http://www.dementia.org/twiki//view/TWiki/TWikiLogos/twikiRobot88x31.gif)
+- Get the latest version from [TWiki.org downloads](http://TWiki.org/download.html)
-- **[[TWiki|Main/WIKILOGOURL]]**
+----
-- **[[Welcome|TWiki/WelcomeGuest]]**
-- **[[Register|TWiki/TWikiRegistration]]**
+- **[[ %INCLUDINGWEB% Web|INCLUDINGWEB/WebHome]]**
+- [[ Users|Main/TWikiUsers]]
+- [[ Groups|Main/TWikiGroups]]
+- [[ Index|Main/WebTopicList]]
+- [[ Search|INCLUDINGWEB/WebSearch]]
+- [[ Changes|Main/WebChanges]]
+- [[ Notifications|Main/WebNotify]]
+- [[ Statistics|Main/WebStatistics]]
+- [[ Preferences|Main/WebPreferences]]
----
-- **%INCLUDINGWEB% Web**
-- [[%INCLUDINGWEB% Web Home|Main/WebHome]]
-- [[Changes|Main/WebChanges]]
-- [[Topics|Main/WebTopicList]]
-- [[Index|Main/WebIndex]]
-- [[Search|Main/WebSearch]]
+- **User Reference**
+- [[ATasteOfTWiki]]
+- [[TextFormattingRules]]
+- [[TWikiVariables]]
+- [[FormattedSearch]]
+- [[TWikiDocGraphics]]
+- [[TWikiSkinBrowser]]
+- [[InstalledPlugins]]
----
-- **TWiki Webs**
+- **Admin Maintenance**
+- [[Reference Manual|Main/TWikiReferenceManual]]
+- [[AdminToolsCategory]]
+- [[InterWikis]]
+- [[ManagingWebs]]
+- [[TWikiSiteTools]]
+- [[TWikiPreferences]]
+- [[WebPreferences]]
+
+----
-<div><a href="http://www.dementia.org/twiki//edit/Main/adminLeftBar?templatetopic=TWiki.WebLeftBarPersonalTemplate">Create</a> personal sidebar </div>
+- **Categories**
+- [[Admin Documentation|Main/AdminDocumentationCategory]]
+- [[Admin Tools|Main/AdminToolsCategory]]
+- [[Developer Doc|Main/DeveloperDocumentationCategory]]
+- [[User Documentation|Main/UserDocumentationCategory]]
+- [[User Tools|Main/UserToolsCategory]]
+
+----
**Instructions and tips how to use [[WebLeftBarPersonalTemplate]]**.
-WebLeftBarPersonalTemplate is a topic template to create a personal left bar block for each user. The personal topic, <user>LeftBar is included in [[WebLeftBar]], the left menu used in [[PatternSkin]]. It is only visible to you. You can put links to frequently visited topics there, or a dynamically generated list of topics.
+WebLeftBarPersonalTemplate is a topic template to create a personal left bar block for each user. The personal topic, <user>LeftBar is included in the left bar. Its contents are only visible to you. You may put there whatever suits you - links to frequently visited topics, or a dynamically generated list of topics.
Each link is an item in a bullet list. So it can look like this:
- [[WebIndex]]
- [[WebChanges]]
-(but with _your_ personal topics).
+(or use your own personal topics).
-The list is formatted with CSS, and the bullets themselves are not displayed, and also indents are flattened. To get an idea of the actual look, see the list above formatted as in the left bar (you need to have [[PatternSkin]] set to on):
+The list is formatted with CSS. To get an idea of the actual look, see the list above formatted as in the left bar (you need to have `SKIN` set to [[PatternSkin]]):
-<div style="position: relative; top: 0; left: 0">
+<div style="position: relative; top: 0; left: 0; padding: 0; margin: 0; border: 0">
<div>
- <div>
- <ul>
- <li><strong>My links</strong><ul>
- <li>[[Main/WebHome]]</li>
- <li>[[Main/WebIndex]]</li>
- <li>[[Main/WebChanges]]</li>
- </ul>
- </li>
- </ul>
- </div>
+ <ul>
+ <li><strong>My links</strong><ul>
+ <li>[[Main/WebHome]]</li>
+ <li>[[Main/WebIndex]]</li>
+ <li>[[Main/WebChanges]]</li>
+ </ul>
+ </li>
+ </ul>
</div>
</div>
By default the <user>LeftBar topic has an edit link. In case you loose the edit link line of text, here's a copy:
- <div class="twikiSmall"><a href="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%WEB%/%TOPIC%?t=%GMTIME{"$year$mo$day$hours$minutes$seconds"}%">edit</a></div>
-
--- [[ArthurClemens]] - 15 Aug 2004
+ <div class="twikiSmall"><a href="%SCRIPTURLPATH{"edit"}%/%WEB%/%TOPIC%?t=%GMTIME{"$year$mo$day$hours$minutes$seconds"}%">edit</a></div>
- **Webs**
-<div><a href="http://www.dementia.org/twiki//edit/Main/adminLeftBar?templatetopic=TWiki.WebLeftBarPersonalTemplate">Create</a> personal sidebar </div>
+<div><a href="http://www.dementia.org/twiki/edit/Main/adminLeftBar?templatetopic=TWiki.WebLeftBarPersonalTemplate">Create personal sidebar</a></div>
--- /dev/null
+<div> Hello [[Main/Admin]]!%BR%[[Main/WebHome?logout=1]]<div><a href="http://www.dementia.org/twiki/edit/Main/adminLeftBar?templatetopic=TWiki.WebLeftBarPersonalTemplate&topicparent=admin">Create personal sidebar</a></div>
+</div>
Customise this topic; samples and ideas available at TWiki:TWiki.WebLeftBarCookbook.
-- **My links**
+**My links:**
+
- [[My home page|Main/Admin]]
-- [![Show me topics of interest](http://www.dementia.org/twiki//view/TWiki/TWikiDocGraphics/stargold.gif)](http://www.dementia.org/twiki//search/Codev/?search=InterestedParties.*admin®ex=on)
+- [My %INCLUDINGWEB% activities](http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?search=admin;order=modified;limit=50;reverse=on)
+-
-<div><a href="http://www.dementia.org/twiki//edit/%WEB%/%TOPIC%?t=20100629154751">edit</a></div>
+[edit](http://www.dementia.org/twiki/edit/%WEB%/%TOPIC%?t=%GMTIME{)
--- /dev/null
+<div>
+ <form action="http://www.dementia.org/twiki/view/Main/WebHome" name="jumpForm">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <th><input name="topic" onfocus="clearDefaultandCSS(this);" size="16" type="text" value="Jump" /></th>
+ <th> </th>
+ <th width="16"><input align="middle" src="http://www.dementia.org/twiki//view/Main/WebHome/arrowright.gif" title="Jump" type="image" /></th>
+ </tr>
+ </table>
+ </form>
+ <form action="http://www.dementia.org/twiki/view/%INCLUDINGWEB%/WebSearch" name="quickSearchForm">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <th><input name="search" onfocus="clearDefaultandCSS(this);" size="16" type="text" value="Search" /></th>
+ <th> </th>
+ <th width="16"><input align="middle" src="http://www.dementia.org/twiki//view/Main/WebHome/searchtopic.gif" title="Search" type="image" /></th>
+ </tr>
+ </table>
+ </form>
+</div>
--- /dev/null
+- **Webs**
-## <a name="%WEB% Web Preferences"></a> %WEB% Web Preferences
+# <a name="%WEB% Web Preferences"></a><a name=" %WEB% Web Preferences"></a> %WEB% Web Preferences
-The following settings are **_web preferences_** of the [[%WEB%|WEB/WebHome]] web. These preferences overwrite the **_site-level preferences_** in [[TWikiPreferences]], and can be overwritten by **_user preferences_** (your personal topic, eg: [[TWikiGuest]] in the [[Main|Main/WebHome]] web).
+The following settings are **_web preferences_** of the [[%WEB%|WEB/WebHome]] web. These preferences overwrite the **_site-level preferences_** in [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]] and [[Main.TWikiPreferences|Main/TWikiPreferences]], and can be overwritten by **_user preferences_** (your personal topic, eg: [[TWikiGuest]] in the [[Main|Main/WebHome]] web).
-**_Preferences:_**
+<div>
+ <ul>
+ <li><a href="#Web Preferences Settings"> Web Preferences Settings</a></li>
+ </ul>
+</div>
-- List of topics of the %WIKITOOLNAME%.%WEB% web:
- - Set WEBTOPICLIST = [[Welcome|Main/WelcomeGuest]] | [[Register|Main/TWikiRegistration]] | [[Changes|Main/WebChanges]] | [[Topics|Main/WebTopicList]] | [[Index|Main/WebIndex]] | [[Search|Main/WebSearch]] | Go <input name="topic" size="16" type="text" />
+## <a name="Web Preferences Settings"></a> Web Preferences Settings
-- Web specific background color: (Pick a lighter one of the [[StandardColors]])
- - Set WEBBGCOLOR = #FFD8AA
+These settings override the defaults for this web only. See [[full list of defaults with explanation|TWiki/TWikiPreferences#DefaultWebPreferences]].
-- List this web in the [[SiteMap]]:
- - If yes, Set SITEMAPLIST = `on`, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. %WEB%.Topic links.
+- Web settings:
+ - Set WEBTOPICLIST = [[Welcome|Main/WelcomeGuest]] | [[Register|Main/TWikiRegistration]] | [[Changes|Main/WebChanges]] | [[Topics|Main/WebTopicList]] | [[Index|Main/WebIndex]] | [[Search|Main/WebSearch]] | Go <input name="topic" size="16" type="text" />
+ - Set WEBBGCOLOR = #FFD8AA
+ - Set WEBHEADERART = ![Dakar.gif](http://www.dementia.org/twiki//view/TWiki/WebPreferences/Dakar.gif)
- Set SITEMAPLIST = on
- Set SITEMAPWHAT = [[Welcome|WEB/WelcomeGuest]], [[Registration|WEB/TWikiRegistration]], and other %WEB%.StartingPoints; TWiki history & Wiki style; All the docs...
- Set SITEMAPUSETO = ...discover TWiki details, and how to start your own site.
-- Exclude web from a `web="all"` search: (Set to `on` for hidden webs)
- - Set NOSEARCHALL =
-
-- Prevent automatic linking of [[WikiWords]] and acronyms (if set to `on`); link WikiWords (if empty); can be overwritten by web preferences:
- - Set NOAUTOLINK =
- - **_Note:_** Use the `[[...][...]]` syntax to link topics in case you disabled WikiWord linking. The `<noautolink> ... </noautolink>` syntax can be used to prevents links within a block of text.
+- Default template for **new topics** for this web:
+ - [[WebTopicEditTemplate]]: Site-level default topic template
-- Default template for new topics and form(s) for this web:
- - [[WebTopicEditTemplate]]: Site-level default template for new topics
- - [[TWikiForms]]: How to enable form(s)
- - Set WEBFORMS =
+- Comma separated list of **forms** that can be attached to topics in this web. See [[TWikiForms]] for more information.
+ - Set WEBFORMS = [[TWikiPreferencesForm]]
-- Users or groups who **_are not_** / **_are_** allowed to **_view_** / **_change_** / **_rename_** topics in the %WEB% web: (See [[TWikiAccessControl]])
- - Set DENYWEBVIEW =
- - Set ALLOWWEBVIEW =
- - Set DENYWEBCHANGE =
- - Set ALLOWWEBCHANGE =
- - Set DENYWEBRENAME =
- - Set ALLOWWEBRENAME =
+- Users or groups who **_are not_** / **_are_** allowed to **_view_** / **_change_** / **_rename_** topics in the %WEB% web: (See [[TWikiAccessControl]]).
+ - #Set DENYWEBVIEW =
+ - #Set ALLOWWEBVIEW =
+ - #Set DENYWEBCHANGE =
+ - Set ALLOWWEBCHANGE = [[TWikiAdminGroup]]
+ - #Set DENYWEBRENAME =
+ - Set ALLOWWEBRENAME = [[TWikiAdminGroup]]
-- Users or groups allowed to change or rename this %TOPIC% topic: (I.e. [[TWikiAdminGroup]])
- - Set ALLOWTOPICCHANGE =
+- Users or groups allowed to change or rename this %TOPIC% topic: (e.g., [[TWikiAdminGroup]])
+ - Set ALLOWTOPICCHANGE = [[TWikiAdminGroup]]
- Set ALLOWTOPICRENAME = [[TWikiAdminGroup]]
-- Web preferences that are **not** allowed to be overridden by user preferences:
- - Set FINALPREFERENCES = NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
-
-**_Notes:_**
-
-- A preference is defined as: <br />`6 spaces * Set NAME = value`<br /> Example:
- - Set WEBBGCOLOR = #FFFFC0
-- Preferences are used as [[TWikiVariables]] by enclosing the name in percent signs. Example:
- - When you write variable `%WEBBGCOLOR%` , it gets expanded to `%WEBBGCOLOR%` .
-- The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set `WEBCOPYRIGHT` before `WIKIWEBMASTER` since `%WEBCOPYRIGHT%` uses the `%WIKIWEBMASTER%` variable.
-- You can introduce new preferences variables and use them in your topics and templates. There is no need to change the %WIKITOOLNAME% engine (Perl scripts).
-
-**_Related Topics:_**
-
-- [[TWikiPreferences]] has site-level preferences.
-- [[TWikiUsers]] has a list of user topics. User topics can have optional user preferences.
-- [[TWikiVariables]] has a list of common `%VARIABLES%`.
-- [[TWikiAccessControl]] explains how to restrict access by users or groups.
+- Web preferences that are **not** allowed to be overridden by user or topic preferences:
+ - Set FINALPREFERENCES = NOSEARCHALL, ATTACHFILESIZELIMIT, WIKIWEBMASTER, WEBCOPYRIGHT, WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME, ALLOWWEBMANAGE, DENYWEBMANAGE
--- /dev/null
+## <a name="Help on Preferences"></a> Help on Preferences
+
+- A preference setting is defined by: <br />`3 or 6 spaces * Set NAME = value`<br /> Example:
+ - Set WEBBGCOLOR = #FFFFC0
+- A preferences setting can be disabled with a # sign. Remove the # sign to enable a local customisation. Example:%BR%
+ - #Set DENYWEBCHANGE = [[UnknownUser]]
+- Preferences are used as [[TWikiVariables]] by enclosing the name in percent signs. Example:
+ - When you write variable `%WEBBGCOLOR%` , it gets expanded to `%WEBBGCOLOR%`
+- The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set `WEBCOPYRIGHT` before `WIKIWEBMASTER` since `%WEBCOPYRIGHT%` uses the `%WIKIWEBMASTER%` variable.
+- You can introduce your own preferences variables and use them in your topics and templates.
+
+## <a name="Related Topics"></a> Related Topics
+
+- [[TWiki.TWikiPreferences|TWiki/TWikiPreferences]], [[Main.TWikiPreferences|Main/TWikiPreferences]] - site-level preferences
+- [[TWikiUsers]] - list of user topics. User topics can have optional user preferences
+- [[TWikiVariables]] - list of common `%VARIABLES%`
+- [[TWikiAccessControl]] - explains how to restrict access by users or groups
+
+## <a name="Tools"></a> Tools
-http://www.dementia.org/twiki//view/%WEB% The Documentation Web of TWiki. TWiki is a Web-Based Collaboration Platform for the Corporate World.
+http://www.dementia.org/twiki/view/%WEB% The Documentation Web of TWiki. TWiki is an Enterprise Collaboration Platform.
-## <a name="How to Find out What's New?"></a> How to Find out What's New?
+# <a name="RSS News Feeds"></a> RSS News Feeds
-There are three ways to find out what's new in each TWiki web:
+## <a name="Find out What's New"></a> Find out What's New
-1. [[WebChanges]] shows recent changes
-2. People subscribed in [[WebNotify]] get notified of recent changes by e-mail
-3. A news feed can be exported in RSS 1.0 format for TWiki:Codev/TWikiSyndication. RSS news readers like TWiki:Plugins/HeadlinesPlugin can display the recent changes
+There are several ways to find out what's new in each TWiki web:
+
+1. Visit [[WebChanges]] to see recent changes
+2. Subscribed in [[WebNotify]] get notified of recent changes by e-mail
+3. Use a news readers such as TWiki:Plugins/HeadlinesPlugin to display the recent changes
+ - The source can be a RSS 1.0 feed ([[WebRss]]) or ATOM 1.0 feed ([[WebAtom]])
+ - Learn more on RSS at TWiki:Codev/TWikiSyndication
+ - Learn more on ATOM at [[WebAtomBase]] and TWiki:Codev/AtomSyndication
## <a name="RSS Feed Usage"></a> RSS Feed Usage
-- The URL for an RSS feed is `http://www.dementia.org/twiki//view/<web>/WebRss?skin=rss`
-- For this %WEB% web it is <http://www.dementia.org/twiki//view/%WEB%/WebRss?skin=rss> (or [http://www.dementia.org/twiki//view/Main/WebRss?skin=rss&contenttype=text/plain](http://www.dementia.org/twiki//view/Main/WebRss?skin=rss&contenttype=text/plain) for plain text RSS)
-- You can also create a custom feed based on a search. Add a `search=value` parameter to the URL, e.g. [http://www.dementia.org/twiki//view/%WEB%/WebRss?skin=rss&search=plugin](http://www.dementia.org/twiki//view/%WEB%/WebRss?skin=rss&search=plugin) is a what's new feed about Plugins.
+- The URL for an RSS feed is `http://www.dementia.org/twiki/view/<web>/WebRss`
+- For this %WEB% web it is [[http://www.dementia.org/twiki/view/%WEB%/WebRss|%WEB%/WebRss]]
+- You can also create a custom feed based on a search. Add a `search=value` parameter to the URL, e.g. [[http://www.dementia.org/twiki/view/%WEB%/WebRss?search=plugin|%WEB%/WebRss?search=plugin]] is a what's new feed about Plugins.
## <a name="RSS Feed Internals"></a> RSS Feed Internals
----
- <channel rdf:about="%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%">
- <title>%WIKITOOLNAME%'s %INCLUDINGWEB% web</title>
- <link>%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%</link>
- <description>(the description of the web). TWiki is a Web-Based Collaboration Platform for the Corporate World.</description>
- %INCLUDE{"%TWIKIWEB%.WebRssBase"}%
+ <channel rdf:about="%SCRIPTURL{"view"}%/%INCLUDINGWEB%">
+ <title>%WIKITOOLNAME%'s <nop>%INCLUDINGWEB% web</title>
+ <link>%SCRIPTURL{"view"}%/%INCLUDINGWEB%</link>
+ <description>(the description of the web). TWiki is a Web-Based Collaboration Platform for the Enterprise.</description>
+ %INCLUDE{"TWiki.WebRssBase"}% <!--
+ * Set SKIN = rss
+ -->
----
<dc:publisher>%WIKIWEBMASTERNAME% [%WIKIWEBMASTER%]</dc:publisher>
<dc:creator>%WIKIWEBMASTERNAME% [%WIKIWEBMASTER%]</dc:creator>
<dc:source>%WIKITOOLNAME%</dc:source>
- <wiki:interwiki>
- <rdf:Description link="%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%/">
- <rdf:value>TWiki.%INCLUDINGWEB%</rdf:value>
- </rdf:Description>
- </wiki:interwiki>
<items>
<rdf:Seq>
- %SEARCH{"%URLPARAM{"search" default=".*" }%" web="%INCLUDINGWEB%" regex="on" nosearch="on" order="modified" reverse="on" nototal="on" limit="16" format=" <rdf:li rdf:resource=\"%SCRIPTURL%/view%SCRIPTSUFFIX%/$web/$topic\" />"}%
+ %SEARCH{"%URLPARAM{"search" default=".*" }%" web="%INCLUDINGWEB%" excludetopic="WebStatistics" regex="on" nosearch="on" order="modified" reverse="on" nototal="on" limit="16" format=" <rdf:li rdf:resource=\"%SCRIPTURL{"view"}%/$web/$topic\" />"}%
</rdf:Seq>
</items>
</channel>
<image rdf:about="%WIKILOGOIMG%">
<title>%WIKILOGOALT%.%INCLUDINGWEB%</title>
- <link>%SCRIPTURL%/view%SCRIPTSUFFIX%/%INCLUDINGWEB%</link>
+ <link>%SCRIPTURL{"view"}%/%INCLUDINGWEB%</link>
<url>%WIKILOGOIMG%</url>
</image>
- %SEARCH{"%URLPARAM{"search" default=".*" }%" web="%INCLUDINGWEB%" regex="on" nosearch="on" order="modified" reverse="on" nototal="on" limit="16" format="<item rdf:about=\"%SCRIPTURL%/view%SCRIPTSUFFIX%/$web/$topic\">$n <title>$topic</title>$n <link>%SCRIPTURL%/view%SCRIPTSUFFIX%/$web/$topic?t=$isodate</link>$n <description>$summary (last changed by <nop>$wikiname)</description>$n <dc:date>$isodate</dc:date>$n <dc:contributor>$n <rdf:Description link=\"%SCRIPTURL%/view%SCRIPTSUFFIX%?topic=$wikiusername\">$n <rdf:value>$username</rdf:value>$n </rdf:Description>$n </dc:contributor>$n <wiki:version>$rev</wiki:version>$n <wiki:status>updated</wiki:status>$n <wiki:importance>major</wiki:importance>$n <wiki:diff>%SCRIPTURL%/rdiff%SCRIPTSUFFIX%/$web/$topic</wiki:diff>$n <wiki:history>%SCRIPTURL%/rdiff%SCRIPTSUFFIX%/$web/$topic</wiki:history>$n</item>"}%
+ %SEARCH{"%URLPARAM{"search" default=".*" }%" web="%INCLUDINGWEB%" excludetopic="WebStatistics" regex="on" nosearch="on" order="modified" reverse="on" nototal="on" limit="16" format="<item rdf:about=\"%SCRIPTURL{"view"}%/$web/$topic\">$n <title>$topic</title>$n <link>%SCRIPTURL{"view"}%/$web/$topic?t=$isodate</link>$n <description>$summary (last changed by <nop>$wikiname)</description>$n <dc:date>$isodate</dc:date>$n <dc:contributor>$n <rdf:Description link=\"%SCRIPTURL{"view"}%?topic=$wikiusername\">$n <rdf:value>$username</rdf:value>$n </rdf:Description>$n </dc:contributor>$n</item>"}%
%STOPINCLUDE%
----
-**_See also_**: TWiki:Codev/RichSiteSummary, TWiki:Codev/TWikiSyndication
-
--- TWiki:Main.PeterThoeny - 02 Sep 2003
+**_See also_**: [[WebAtomBase]], TWiki:Codev/RichSiteSummary, TWiki:Codev/TWikiSyndication
-<form action="http://www.dementia.org/twiki//view/%INCLUDINGWEB%/%INCLUDINGTOPIC%">
- <table border="0" cellpadding="0" cellspacing="3">
- <tr>
- <td><input name="search" size="32" type="text" value="" /><input type="submit" value="Search" />%BR% <input id="web" name="web" type="checkbox" /><label for="web">All public webs</label>
- </td>
- <td>
- <ul>
- <li>[[Main/SearchHelp]]</li>
- <li>[[INCLUDINGWEB/WebSearchAdvanced]]</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><input checked id="textbody" name="scope" type="radio" value="text" /><label for="textbody">Text body </label><input id="topictitle" name="scope" type="radio" value="topic" /><label for="topictitle">Topic title </label><input id="both" name="scope" type="radio" value="all" /><label for="both">Both </label>
- </td>
- </tr>
- </table>
-</form>
+# <a name="Web Search"></a> Web Search
# <a name="TWiki Installation Error"></a> TWiki Installation Error
Incorrect format of search template (missing sections? There should be 4 %SPLIT% tags)
-- **[Topic index](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*)**: List of %INCLUDINGWEB% topics in alphabetical order. <br />**|[All](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*)|[A](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ea)|[B](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eb)|[C](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ec)|[D](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ed)|[E](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ee)|[F](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ef)|[G](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eg)|[H](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eh)|[I](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ei)|[J](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ej)|[K](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ek)|[L](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5El)|[M](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Em)|[N](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5En)|[O](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eo)|[P](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ep)|[Q](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eq)|[R](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Er)|[S](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Es)|[T](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Et)|[U](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eu)|[V](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ev)|[W](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ew)|[X](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ex)|[Y](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ey)|[Z](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ez)| <br /> | [All](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&bookview=on&search=\.*)** topics in [[BookView]] **|**
+<a name="twikiSearchForm"></a>
-- **Jump to topic**: If you already know the name of the topic, enter the name of the topic into the [[GoBox]] at the top
+<div>
+ <form action="http://www.dementia.org/twiki/view/%INCLUDINGWEB%/%INCLUDINGTOPIC%">
+ <table border="0" cellpadding="0" cellspacing="0" id="twikiSearchTable">
+ <tr>
+ <td colspan="2">
+ <div><input name="search" size="40" type="text" value="" /> <input type="submit" value="Search" /></div>
+ <div><span> [[INCLUDINGWEB/WebSearchAdvanced]] | [[TWiki/SearchHelp]]</span></div>
+ <br />
+ <div style="padding: 1em 0 0 0">TIP: to search for all topics that contain <code>"SOAP"</code>, <code>"WSDL"</code>, a literal <code>"web service"</code>, but not <code>"shampoo"</code>, write: <code>soap wsdl "web service" -shampoo</code></div>
+ </td>
+ </tr>
+ <tr>
+ <th>Search where:</th>
+ <td><input checked id="textbody" name="scope" type="radio" value="text" /><label for="textbody"> Text body</label> <input id="topictitle" name="scope" type="radio" value="topic" /><label for="topictitle"> Topic title</label> <input id="both" name="scope" type="radio" value="all" /><label for="both"> Both body and title</label>
+ <hr /><input id="web" name="web" type="checkbox" /><label for="web"> All public webs</label><span>(otherwise search %INCLUDINGWEB% Web only)</span></td>
+ </tr>
+ </table>
+ </form>
+</div>
-- ** [[WebChanges]]**: Find out what topics in %INCLUDINGWEB% have changed recently
-
-- **[[How to edit text|TWiki/GoodStyle]]**:
- - Make changes to topics in [[GoodStyle]],
- - Learn the [[TextFormattingRules]], and
- - Have a look at the [[TextFormattingFAQ]]
+<div><strong>Other search options:</strong><ul>
+ <li><img align="top" alt="arrowright" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/arrowright.gif" width="16" /> If you already know the name of the topic, enter the name of the topic into the [[TWiki/GoBox]] at the top </li>
+ <li><img align="top" alt="indexlist" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/indexlist.gif" width="16" /> <a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*">List all topics in the %INCLUDINGWEB% web in alphabetical order</a></li>
+ <li><img align="top" alt="filter" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/filter.gif" width="16" /> List topics that start with the letter: <a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ea">A</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eb">B</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ec">C</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ed">D</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ee">E</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ef">F</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eg">G</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eh">H</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ei">I</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ej">J</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ek">K</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5El">L</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Em">M</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5En">N</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eo">O</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ep">P</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eq">Q</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Er">R</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Es">S</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Et">T</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eu">U</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ev">V</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ew">W</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ex">X</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ey">Y</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ez">Z</a></li>
+ <li><img align="top" alt="recentchanges" border="0" height="16" src="http://www.dementia.org/twiki//view/Main/WebHome/recentchanges.gif" width="16" /> [[INCLUDINGWEB/WebChanges]]</li>
+ </ul>
+</div>
-<form action="http://www.dementia.org/twiki//search/%INCLUDINGWEB%/">
- <ul>
- <li><b>Advanced search</b>: <table border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td><input checked name="scope" type="radio" value="text" /> Topic text (body) </td>
- <td> Search </td>
- <td><select name="web"><option value="all">all public</option>
- <option>%INCLUDINGWEB%</option></select></td>
- </tr>
- </table>
- </li>
- </ul>
- <p> web(s) </p>
- <table>
- <tr>
- <td><input name="scope" type="radio" value="topic" /> Topic name </td>
- <td> Sort by </td>
- <td><select name="order"><option value="topic">Topic name</option>
- <option value="modified">Last modified time</option>
- <option value="editby">Last editor</option></select> in <input name="reverse" type="checkbox" /> reversed order </td>
- </tr>
- </table><input name="search" size="32" type="text" /> <input type="submit" value="Search text" /><br />
- <table>
- <tr>
- <td> Make search: </td>
- <td><input name="casesensitive" type="checkbox" /> Case sensitive </td>
- <td><input name="regex" type="checkbox" /> [[TWiki/RegularExpression]] search (semicolon ';' for <em>and</em>) </td>
- </tr>
- <tr>
- <td> Don't show: </td>
- <td><input name="nosearch" type="checkbox" /> search string </td>
- <td><input name="nosummary" type="checkbox" /> summaries <input name="nototal" type="checkbox" /> total matches </td>
- </tr>
- <tr>
- <td> Do show: </td>
- <td><input name="bookview" type="checkbox" /> [[TWiki/BookView]]</td>
- <td><input name="showlock" type="checkbox" /> locked topic <input name="limit" size="5" type="text" value="all" /> topics (result count) </td>
- </tr>
- </table>
-</form>
+# <a name="Advanced Search"></a> Advanced Search
-- **[Topic index](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*)**: List of %INCLUDINGWEB% topics in alphabetical order. <br />**|[All](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*)|[A](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ea)|[B](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eb)|[C](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ec)|[D](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ed)|[E](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ee)|[F](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ef)|[G](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eg)|[H](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eh)|[I](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ei)|[J](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ej)|[K](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ek)|[L](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5El)|[M](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Em)|[N](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5En)|[O](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eo)|[P](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ep)|[Q](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eq)|[R](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Er)|[S](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Es)|[T](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Et)|[U](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eu)|[V](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ev)|[W](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ew)|[X](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ex)|[Y](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ey)|[Z](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ez)| <br /> | [All](http://www.dementia.org/twiki//search/%INCLUDINGWEB%/?scope=topic®ex=on&bookview=on&search=\.*)** topics in [[BookView]] **|**
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
-- **Jump to topic**: If you already know the name of the topic, enter the name of the topic into the [[GoBox]] at the top
+Incorrect format of search template (missing sections? There should be 4 %SPLIT% tags)
-- ** [[WebChanges]]**: Find out what topics in %INCLUDINGWEB% have changed recently
+<a name="twikiSearchForm"></a>
-- **[[How to edit text|TWiki/GoodStyle]]**:
- - Make changes to topics in [[GoodStyle]],
- - Learn the [[TextFormattingRules]], and
- - Have a look at the [[TextFormattingFAQ]]
+<div>
+ <form action="http://www.dementia.org/twiki/view/%INCLUDINGWEB%/%INCLUDINGTOPIC%">
+ <table border="0" cellpadding="0" cellspacing="0" id="twikiSearchTable">
+ <tr>
+ <td colspan="2"><input name="search" size="40" type="text" value="" /> <input type="submit" value="Search" /><span> [[INCLUDINGWEB/WebSearch]] | [[TWiki/SearchHelp]]</span><div style="padding: 1em 0 0 0">TIP: to search for all topics that contain <code>"SOAP"</code>, <code>"WSDL"</code>, a literal <code>"web service"</code>, but not <code>"shampoo"</code>, write: <code>soap wsdl "web service" -shampoo</code></div>
+ </td>
+ </tr>
+ <tr>
+ <th>Search where:</th>
+ <td><input checked id="textbody" name="scope" type="radio" value="text" /><label for="textbody"> Text body</label>
+ <br /><input id="topictitle" name="scope" type="radio" value="topic" /><label for="topictitle"> Topic title</label>
+ <br /><input id="both" name="scope" type="radio" value="all" /><label for="both"> Both body and title</label>
+ <hr /><input id="web" name="web" type="checkbox" /><label for="web"> All public webs</label><span>(otherwise search %INCLUDINGWEB% Web only)</span></td>
+ </tr>
+ <tr>
+ <th>Sort results by:</th>
+ <td><input checked id="topic" name="order" type="radio" value="topic" /><label for="topic"> Topic name</label>
+ <br /><input id="modified" name="order" type="radio" value="modified" /><label for="modified"> Last modified time</label>
+ <br /><input id="editby" name="order" type="radio" value="editby" /><label for="editby"> Last editor</label>
+ <hr /><input id="reverse" name="reverse" type="checkbox" /><label for="reverse"> In reversed order</label>
+ </td>
+ </tr>
+ <tr>
+ <th>Make search:</th>
+ <td><input id="casesensitive" name="casesensitive" type="checkbox" /><label for="casesensitive"> Case sensitive</label>
+ <br /><input id="regex" name="regex" type="checkbox" /><label for="regex"> Regular expression search</label><span>(semicolon <code>;</code> for and) [[TWiki/RegularExpression]]</span></td>
+ </tr>
+ <tr>
+ <th><b>Don't show:</b></th>
+ <td><input id="nosearch" name="nosearch" type="checkbox" /><label for="nosearch"> Search string</label>
+ <br /><input id="nosummary" name="nosummary" type="checkbox" /><label for="nosummary"> Summaries</label>
+ <br /><input id="nototal" name="nototal" type="checkbox" /><label for="nototal"> Total matches</label>
+ </td>
+ </tr>
+ <tr>
+ <th>Do show:</th>
+ <td><input id="bookview" name="bookview" type="checkbox" /><label for="bookview"> BookView</label><span>[[TWiki/BookView]]</span></td>
+ </tr>
+ <tr>
+ <th>Limit results to:</th>
+ <td><input id="limit" name="limit" size="3" type="text" value="all" /><label for="limit"> Topics per web </label><span>(<code>all</code> to show all topics)</span></td>
+ </tr>
+ </table>
+ </form>
+</div>
--- TWiki:Main.PeterThoeny - 18 Jan 2004
+<div><strong>Other search options:</strong><ul>
+ <li> If you already know the name of the topic, enter the name of the topic into the [[TWiki/GoBox]] at the top </li>
+ <li><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=\.*">List all topics in the %INCLUDINGWEB% web in alphabetical order</a></li>
+ <li> List topics that start with the letter: <a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ea">A</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eb">B</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ec">C</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ed">D</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ee">E</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ef">F</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eg">G</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eh">H</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ei">I</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ej">J</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ek">K</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5El">L</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Em">M</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5En">N</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eo">O</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ep">P</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eq">Q</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Er">R</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Es">S</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Et">T</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Eu">U</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ev">V</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ew">W</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ex">X</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ey">Y</a><span> | </span><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&search=%5Ez">Z</a></li>
+ <li><a href="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/?scope=topic®ex=on&bookview=on&search=\.*">All topics in BookView</a> <span>([[TWiki/BookView]])</span></li>
+ <li>[[INCLUDINGWEB/WebChanges]]</li>
+ </ul>
+</div>
# <a name="Web Site Tools"></a> Web Site Tools
-<form action="http://www.dementia.org/twiki//search/%INCLUDINGWEB%/SearchResult">
+<form action="http://www.dementia.org/twiki/search/%INCLUDINGWEB%/SearchResult">
<ul>
- <li><input name="search" size="32" type="text" /> <input type="submit" value="Search" /> (More options in [[INCLUDINGWEB/WebSearch]]) </li>
+ <li><input name="search" size="32" type="text" /> <input type="submit" value="Search" /> (More options in [[INCLUDINGWEB/WebSearch]]) </li>
<li>[[INCLUDINGWEB/WebChanges]]: Display recent changes to the %INCLUDINGWEB% web </li>
<li>[[INCLUDINGWEB/WebIndex]]: List all %INCLUDINGWEB% topics in alphabetical order. See also the faster [[INCLUDINGWEB/WebTopicList]]</li>
<li>[[INCLUDINGWEB/WebNotify]]: Subscribe to an e-mail alert sent when something changes in the %INCLUDINGWEB% web </li>
- The list above provides the [[TWikiSiteTools]] used to navigate, search and maintain a particular web. It is included within other topics using the following directive:
`%INCLUDE{"%TWIKIWEB%.WebSiteTools"}%`
-- [List](http://www.dementia.org/twiki//search/%WEB%?scope=text&web=all®ex=on&search=INCLUDE.*WebSiteTools&casesensitive=on&nosummary=on¬otal=on) all topics which include this WebSiteTools topic.
+- [List](http://www.dementia.org/twiki/search/%WEB%?scope=text&web=all®ex=on&search=INCLUDE.*WebSiteTools&casesensitive=on&nosummary=on¬otal=on) all topics which include this WebSiteTools topic.
<td>
</td>
</tr>
- <tr>
- <td> Aug 2004 </td>
- <td align="right"> 693 </td>
- <td align="right"> 218 </td>
- <td align="right"> 39 </td>
- <td> 52 [[Main/PatternSkin]]<br /> 23 [[Main/WebHome]]<br /> 15 [[Main/TWikiPreferences]]<br /> 14 [[Main/PatternSkinCss]]<br /> 13 [[Main/SmiliesPlugin]]<br /> 10 [[Main/TWikiDocGraphics]]<br /> 10 [[Main/WebChanges]]<br /> 10 [[Main/SiteMap]]<br /> 9 [[Main/WebLeftBar]]<br /> 9 [[Main/WindowsInstallCookbook]]<br /> 8 [[Main/PatternSkinPalette]]</td>
- <td> 175 [[Main/PeterThoeny]]<br /> 82 [[Main/ArthurClemens]]</td>
- </tr>
</table>
**_Notes:_**
-- Do not edit this topic, it is updated automatically. (You can also [force](http://www.dementia.org/twiki//statistics/%WEB%) an update)
+- Do not edit this topic; it is updated automatically. (You can also [force](http://www.dementia.org/twiki/statistics/%WEB%) an update)
- [[TWikiDocumentation]] tells you how to enable the automatic updates of the statistics.
- Suggestion: You could archive this topic once a year and delete the previous year's statistics from the table.
-<div><a href="%WIKILOGOURL%"><img alt="Home" border="0" src="%WIKILOGOIMG%" /></a></div>
-<div>
- <table border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td>
- <label for="go">Jump: </label><input id="go" name="topic" size="16" type="text" /></td>
- </tr>
- </table>
-</div>
+<span>[![%WEBLOGOALT%](%WEBLOGOIMG%)](%WEBLOGOURL%)</span>
--- /dev/null
+<form action="http://www.dementia.org/twiki/edit/Main/" name="new">
+ <h1><a name="Create New Topic in Main Web"></a> Create New Topic in Main Web </h1>
+ <table>
+ <tr>
+ <td> Topic name: </td>
+ <td><input --="--" />="/>" <!--="<!--" a="a" and="and" button="button" callable="callable" click="click" file="file" it="it" js="JS" make="make" move="move" name="topic" of="of" on="on" onblur="var sIn = this.value; var sOut = ''; var chgUpper = true; for ( var i = 0; i < sIn.length; i++ ) { var ch = sIn.charAt( i ); var ch2 = ''; if((ch=='à')||(ch=='á')||(ch=='â')||(ch=='ã')||(ch=='å') ) { ch = 'a'; } if( (ch=='è')||(ch=='é')||(ch=='ê') ) { ch = 'e'; } if( ch=='ç') { ch = 'c'; } if( ch=='ñ') { ch = 'n'; } if( (ch=='ò')||(ch=='ó')||(ch=='ô') ) { ch = 'o'; } if( ch=='ä') { ch = 'a'; ch2 = 'e'; } if( ch=='ö') { ch = 'o'; ch2 = 'e'; } if( (ch=='ù')||(ch=='ú')||(ch=='û') ) { ch = 'o'; } if( ch=='ü') { ch = 'u'; ch2 = 'e'; } if( ch=='Ä') { ch = 'A'; ch2 = 'e'; } if( ch=='Ö') { ch = 'O'; ch2 = 'e'; } if( ch=='Ü') { ch = 'U'; ch2 = 'e'; } if( ch=='ß') { ch = 's'; ch2 = 's'; } if( ((ch>='a')&&(ch<='z')) || ((ch>='A')&&(ch<='Z')) ) { if( chgUpper ) { ch = ch.toUpperCase(); chgUpper = false; } sOut+=ch; if( ch2!='') { sOut+=ch2; } } else { if( ch==' ' ) { chgUpper = true; } } } this.form.topic.value=sOut;" separate="separate" size="40" the="the" to="to" todo:="TODO:" too="too" type="text" value="" /> <input type="submit" value="Create" /></td>
+ </tr>
+ <tr>
+ <td> Topic parent: </td>
+ <td><select name="topicparent" size="10"><option selected value="">(no parent, orphaned topic)</option>
+ <h1><a name="TWiki Installation Error"></a> TWiki Installation Error </h1>Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) <option value="">(no parent, orphaned topic)</option></select></td>
+ </tr>
+ </table><input name="templatetopic" type="hidden" value="WebTopicEditTemplate" /> <input name="onlywikiname" type="hidden" value="on" /> <input name="onlynewtopic" type="hidden" value="on" /></form>
+
+To create a new topic, enter a [[WikiWord]] for the topic name, select a topic parent and click 'Create.'
+
+Once you have created the topic, consider adding links in related topics to the new topic so that there are more ways people can discover it.
## <a name="NOTE: This Wiki topic does not e"></a> NOTE: This Wiki topic does not exist yet
-### <a name="If you used the "Go" feature to"></a><a name="If you used the "Go" feature to "></a> If you used the "Go" feature to jump to this page:
+### <a name="If you used the "Jump" feature t"></a> If you used the "Jump" feature to jump to this page:
- Make sure you spelled the [[WikiWord]] correctly and try again. Remember, a WikiWord is case sensitive
- Similar topics in this web (if any):
# TWiki Installation Error
-Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) [...](http://www.dementia.org/twiki//search/%WEB%/?scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
-- [Search](http://www.dementia.org/twiki//search/%WEB%/?web=all&scope=topic&nosummary=on¬otal=on&search=%TOPIC%) for similar topics in all public webs
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) [...](http://www.dementia.org/twiki/search/%WEB%/?scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
+- [Search for similar topics in all public webs](http://www.dementia.org/twiki/search/%WEB%/?web=all&scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
+
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
+
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
### <a name="If you intend to do a full text"></a><a name="If you intend to do a full text "></a> If you intend to do a full text search:
-<form action="http://www.dementia.org/twiki//search/%WEB%/" name="search">
+<form action="http://www.dementia.org/twiki/search/%WEB%/" name="search">
<ul>
- <li> Use the <a href="WebSearch">Search</a> link on top of this page, or do a simple </li>
- <li><input name="search" size="32" type="text" value="%TOPIC%" /> <input type="submit" value="Search" /> <input name="scope" type="hidden" value="text" /> <input name="ignorecase" type="hidden" value="on" /> (More options in [[Main/WebSearch]]) </li>
+ <li> Use the [[Main/WebSearch]] link on top of this page, or do a simple </li>
+ <li><input name="search" size="32" type="text" value="%TOPIC%" /> <input type="submit" value="Search" /> <input name="scope" type="hidden" value="text" /> <input name="ignorecase" type="hidden" value="on" /> (More options in [[Main/WebSearch]]) </li>
</ul>
</form>
## <a name="NOTE: This Wiki topic does not e"></a> NOTE: This Wiki topic does not exist yet
-### <a name="If you used the "Go" feature to"></a><a name="If you used the "Go" feature to "></a> If you used the "Go" feature to jump to this page:
+### <a name="If you used the "Jump" feature t"></a><a name=" If you used the "Jump" feature "></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/arrowright.gif" width="16" height="16" alt="arrowright" /> If you used the "Jump" feature to jump to this page:
- Make sure you spelled the [[WikiWord]] correctly and try again. Remember, a WikiWord is case sensitive
- Similar topics in this web (if any):
# TWiki Installation Error
-Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) [...](http://www.dementia.org/twiki//search/%WEB%/?scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
-- [Search](http://www.dementia.org/twiki//search/%WEB%/?web=all&scope=topic&nosummary=on¬otal=on&search=%TOPIC%) for similar topics in all public webs
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags) [...](http://www.dementia.org/twiki/search/%WEB%/?scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
+- [Search for similar topics in all public webs](http://www.dementia.org/twiki/search/%WEB%/?web=all&scope=topic&nosummary=on¬otal=on&search=%TOPIC%)
-### <a name="If you intend to do a full text"></a><a name="If you intend to do a full text "></a> If you intend to do a full text search:
+# <a name="TWiki Installation Error"></a> TWiki Installation Error
-<form action="http://www.dementia.org/twiki//search/%WEB%/" name="search">
+Incorrect format of searchformat template (missing sections? There should be 4 %SPLIT% tags)
+
+### <a name="If you intend to do a full text"></a><a name=" If you intend to do a full text"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/searchtopic.gif" width="16" height="16" alt="searchtopic" /> If you intend to do a full text search:
+
+<form action="http://www.dementia.org/twiki/search/%WEB%/" name="search">
<ul>
- <li> Use the <a href="WebSearch">Search</a> link on top of this page, or do a simple </li>
- <li><input name="search" size="32" type="text" value="%TOPIC%" /> <input type="submit" value="Search" /> <input name="scope" type="hidden" value="text" /> <input name="ignorecase" type="hidden" value="on" /> (More options in [[Main/WebSearch]]) </li>
+ <li> Use the [[Main/WebSearch]] link on top of this page, or do a simple </li>
+ <li><input name="search" size="32" type="text" value="%TOPIC%" /> <input type="submit" value="Search" /> <input name="scope" type="hidden" value="text" /> <input name="ignorecase" type="hidden" value="on" /> (More options in [[Main/WebSearch]]) </li>
</ul>
</form>
-### <a name="If you would like to create this"></a> If you would like to create this page:
+### <a name="If you would like to create this"></a><a name=" If you would like to create thi"></a> <img src="http://www.dementia.org/twiki//view/Main/WebHome/newtopic.gif" width="16" height="16" alt="newtopic" /> If you would like to create this page:
-- Continue to [**Create the new page**](http://www.dementia.org/twiki//edit/%WEB%/%TOPIC%)
+- Continue to **[create topic %TOPIC%](http://www.dementia.org/twiki/edit/%WEB%/%TOPIC%)**
**How TWiki Works**
1. **Browse.** This is a site like other sites. Read and follow interesting links.
- - **web:** A [[TWikiSite]] is divided into webs, each one represents an area for collaboration. Your site has the following webs: %WIKIWEBLIST%
- - **topic:** Each web is made up of hyperlinked topics ([[TWikiTopics]]) that appear in your browser.
- - **WebChanges:** in each TWiki web to find what's new
-2. **Write.** Speak your mind! From your browser you can change or add to anything you see in a TWiki topic. Use regular text, HTML or [[TWikiShorthand]]. To contribute:
+ - **Web:** A [[TWikiSite]] is divided into webs, each one represents an area for collaboration. This site has the following webs:
+ - **Topic:** Each web is made up of hyperlinked [[topics|Main/TWikiTopics]] that appear in your browser.
+ - **WebChanges:** In each TWiki web to find what's new
+2. **Write.** Speak your mind! From your browser you can change or add to anything you see in a TWiki topic. Use regular text or [[TWikiShorthand]]. To contribute:
- **Create An Account.** To be able to edit or write new content, you'll need to create an account for yourself. It's simple, and only takes a minute. [[TWikiRegistration]] This will also create your personal home page.
- click <code>**Edit**</code> at the bottom of any topic and make your changes
- click <code>**[ Preview Changes ]**</code> at the bottom to verify the topic (use your brower's <code>**Back**</code> button if necessary)
4. **Experiment.** Edit your personal page or visit the [[Sandbox|Sandbox/WebHome]] web.
1. **Link.** To link to another topic, start by editing an existing topic.
- To create a link to an existing topic type its <code>**JoinCapitalizedWords**</code> name. [[WikiWords]] (two or more capitalized words run together) link automatically.
- - To create a link to a new topic, enter a newly <code>**UsedPhrase**</code>.
- - When previewing, the links show and "<u>?</u>" (question marks) are used to create topics.
- - Another way to create a topic is to type its [[WikiWord]] in the Go box or URL.
- 2. **Topic history.** click <code>**Diffs**</code> at the bottom of a topic
- 3. **Attach files.** click <code>**Attach**</code> to upload and attach any type of file.
+ 2. **Create a new topic.** To create a new topic, start by editing an existing topic.
+ - In an existing topic, create a link to a new topic, entering a newly <code>**UsedPhrase**</code> as a WikiWord.
+ - After saving the existing topic you will see a question mark link "<u>?</u>" behind the WikiWord.
+ - Click on the question mark to create the new topic.
+ 3. **Topic history.** Click <code>**History**</code> at the bottom of a topic
+ 4. **Attach files.** Click <code>**Attach**</code> to upload and attach any type of file.
5. **Organize.** You can learn to use [[TWikiForms]] and [[FormattedSearch]]es to include topic information - for example, classify pages by subject, status, or date.
-6. **Learn more.** [[TWikiTutorial]] is a 20-minute tour of TWiki essentials. [[ATasteOfTWiki]] is a short introduction training course for beginners. [[WikiReferences]] links to selected articles and books about Wiki technology and online collaboration.
+6. **Learn more.** [[TWikiTutorial]] is a 20-minute tour of TWiki essentials. [[ATasteOfTWiki]] is a short introduction training course for beginners. [[WikiReferences]] links to selected articles and books about wiki technology and online collaboration.
-<table>
+<table width="100%">
<tr valign="top">
- <td width="40%"><strong>Starting Points</strong><p>
+ <td width="40%">
+ <h2><a name="Starting Points"></a> Starting Points </h2>
+ <p>
</p>
<ul>
<li><strong>[[Main/TWikiTutorial]]</strong> - familiarize yourself with TWiki </li>
<p>
</p>
</td>
- <td width="60%"><strong>TWiki Highlights</strong><p>
+ <td> </td>
+ <td>
+ <h2><a name="TWiki Highlights"></a> TWiki Highlights </h2>
+ <p>
</p>
<ul>
<li><strong>Web browser</strong> used to create and edit topics </li>
<li><strong>Search</strong> topic names or full-text (regular expressions available) </li>
<li><strong>Revision control</strong> for changes (who, what, when) for topics and attachments </li>
<li><strong>Access control</strong> using users and groups </li>
- <li><strong>Email notification</strong> of topic changes </li>
- <li><strong>File attachments</strong> upload and download any file to any topic similar to email attachments </li>
+ <li><strong>E-mail notification</strong> of topic changes </li>
+ <li><strong>File attachments</strong> upload and download any file to any topic similar to e-mail attachments </li>
<li><strong>Warnings</strong> for simultaneous topic editing </li>
<li><strong>Plug-in</strong> via TWiki's flexible architecture using templates, skins, plug-ins and add-ons to customize everything </li>
<li><strong>Development</strong> active with growing set of features in TWiki releases and plug-ins </li>
--- /dev/null
+## <a name="FAQ:"></a> FAQ:
+
+What does the "T" in TWiki stand for?
+
+## <a name="Answer:"></a> Answer:
+
+TWiki is short for TakeFive Wiki, the name of the company where its founder [[Peter Thoeny|TWiki:Main/PeterThoeny]] worked. Peter first named the platform [[T5Wiki]], then shortened it to TWiki (pronounced _twee-kee_).
+
+It was later discovered that Twiki is also the name of an AI robot that co-starred in the [Buck Rogers](http://www.buck-rogers.com/) movie and TV series from 1979.
+
+**_Related topics:_** [[TWikiSite]], [[WelcomeGuest]], [[GoodStyle]], [[WikiSyntax]], [[TWikiFAQ]]
+
+**_Back to:_** [[TWikiFAQ]]
## <a name="Answer:"></a> Answer:
-A set of pages of information that are open and free for anyone to edit as they wish. They are stored in a server and managed using some software. The system creates cross-reference hyperlinks between pages automatically. See [[WelcomeGuest]] and [[TWikiSite]] for more information.
+A set of pages of information that are open and free for anyone to edit as they wish. They are stored in a server and managed using some software. The system creates cross-reference hyperlinks between pages automatically.
-**_Back to:_** [[TWikiFAQ]]
+**_Related topics:_** [[TWikiSite]], [[WelcomeGuest]], [[GoodStyle]], [[WikiSyntax]], [[TWikiFAQ]], [[WikiCulture]], [[WabiSabi]]
--- TWiki:Main.PeterThoeny - 26 Nov 2000
+**_Back to:_** [[TWikiFAQ]]
## <a name="Answer:"></a> Answer:
-%WIKITOOLNAME% is one of many [[WikiWikiClones]], the first one was built by Ward Cunningham. Collaborating the Wiki way is different from other collaboration tools like Usenet. A distinct **_Wiki culture_** forms around these tools:
+TWiki is one of many [[WikiWikiClones]], the first one was built by Ward Cunningham. Collaborating the Wiki way is different from other collaboration tools like Usenet. A distinct **_Wiki culture_** forms around these tools:
- Any and all information can be deleted by anyone. Wiki pages represent nothing but discussion and consensus because it's much easier to delete flames, spam and trivia than to indulge them. What remains is naturally meaningful.
(quoted from _WhyWikiWorks_ at Ward's original Wiki system, the Portland Pattern Repository, Wiki:WhyWikiWorks)
-**_Related topics:_** [[TWikiSite]], [[WelcomeGuest]], [[GoodStyle]], [[WikiSyntax]], [[TWikiFAQ]], [[WabiSabi]], [[TWikiAccessControl]]
+**_Related topics:_** [[TWikiSite]], [[WelcomeGuest]], [[GoodStyle]], [[WikiSyntax]], [[TWikiFAQ]], [[WhatIsWikiWiki]], [[WabiSabi]], [[TWikiAccessControl]]
**_Back to:_** [[TWikiFAQ]]
-
--- TWiki:Main.PeterThoeny - 09 Apr 2002
+# <a name="Wiki name"></a> Wiki name
+
Your name, usually your first and last name connected without a space.
For example, Tim Berners-Lee's WikiName is [[TimBernersLee]].
-%X% Your name is also a potentially valid [[WikiWord]] when used within a topic, however the home pages of registered users on this site are stored in the **Main** TWiki web. Prepend <code>**Main.**</code> when you sign your username in a topic - write <code>**Main.admin**</code> to link to Main.admin, your personal topic page in the Main TWiki web. This will ensure that your personal topic page is linked to at it's location in the Main TWiki web. For convenience, your signature is also provided to you for copying and pasting when editing a topic.
+%X% Your name is also a potentially valid [[WikiWord]] when used within a topic. However the home pages of registered users on this site are stored in the **Main** web. When you sign your username in a topic, prefix it with `Main.` (including the dot). That is, write <code>**Main.admin**</code> to link to Main.admin, your personal home page in the Main web. For convenience, your signature is also provided for copying and pasting when editing a topic.
-%Y% Though rarely used in common practice, you can use the special <code>**%MAINWEB%**</code> [[variable|Main/TWikiVariables]] to prepend to user names, for example, <code>**%MAINWEB%.admin**</code>.
+%Y% Though rarely used in common practice, you can use the special <code>**%MAINWEB%**</code> [[variable|Main/TWikiVariables]] prefix for user names, for example, <code>**%MAINWEB%.admin**</code>.
-Wiki links topics automatically when you use the [[WikiWord]] notation.
+Wiki links topics automatically when you use [[WikiWord]] notation.
- Book: The Wiki Way, Quick Collaboration on the Web; by Bo Leuf and Ward Cunningham; Addison-Wesley Pub Co; ISBN:020171499X
-- Presentation: Wiki, a Shared Blog for the Corporate World; by Peter Thoeny; LinuxWorld; 05 Aug 2004; <http://TWiki.org/cgi-bin/view/Codev/TWikiPresentation05Aug2004>
+- Book: Wiki Tools: Web Collaboration; by Anja Ebersbach, Markus Glaser, Richard Heigl; Springer; ISBN:3540259953 (the book is about TWiki and MediaWiki; German version is ["WikiTools: Kooperation im Web"](http://www.wiki-tools.de/))
+
+- Presentation: Wiki Collaboration and Wiki Applications for the Enterprise; by Peter Thoeny; LinuxWorld; 11 Aug 2005; <http://TWiki.org/cgi-bin/view/Codev/TWikiPresentation11Aug2005>
+
+- Article: Team Builder - the TWiki wiki and the enterprise; by Peter Thoeny; Linux-Magazine UK; 05 May 2005; <http://www.linux-magazine.com/issue/55>
- Article: 'Wiki' May Alter How Employees Work Together; by Kara Swisher; Wall Street Journal; 29 Jul 2004; <http://online.wsj.com/article/0,,SB109105974578777189,00.html> (subscription required)
- Directory: Google.com > Reference > Knowledge Management; [http://directory.google.com/Top/Reference/Knowledge\_Management/](http://directory.google.com/Top/Reference/Knowledge_Management/)
+- Book: Enabling Knowledge Creation: How to Unlock the Mystery of Tacit Knowledge and Release the Power of Innovation; by Georg von Krogh, Kazuo Ichijo, Ikujiro Nonaka; Oxford University Press; ISBN:0195126165
+
- Book: The Knowledge Management Toolkit: Practical Techniques for Building a Knowledge Management System; by Amrit Tiwana; Prentice Hall PTR; ISBN:0130128538
- Book: The Knowing-Doing Gap: How Smart Companies Turn Knowledge into Action; by Jeffrey Pfeffer and Robert I. Sutton; Harvard Business School Pr; ISBN:1578511240
+- Book: Survival of the Smartest: Managing Information for Rapid Action and World-Class Performance; by Haim Mendelson, Johannes Ziegler; Wiley; ISBN:0471295604
+
## <a name="Extreme Programming"></a> Extreme Programming
- Book: Extreme Programming Examined; by Giancarlo Succi and Michele Marchesi; Addison-Wesley Pub Co; ISBN:0201710404
- Book: Extreme Programming in Practice; by James W. Newkirk and Robert C. Martin; Addison-Wesley Pub Co; ISBN:0201709376
- Book: Extreme Programming Explored; by William C. Wake and Bill Wake; Addison-Wesley Pub Co; ISBN:0201733978
-
--- TWiki:Main.PeterThoeny - 15 Aug 2004
- For an external link, type the full URL: `http://twiki.org/`.
-- To prevent a WikiWord from becoming a link, type `<nop>` first, <code>**<nop>NoLinkPlease**</code>.
+- To prevent a WikiWord from becoming a link, type `<nop>` or an exclamation point first: <code>**<nop>NoLinkPlease**</code> or <code>**!NoLinkPlease**</code>.
- To indent with a bullet, enter `[space][space][space][asterisk][space]`.
- Use multiples of 3 spaces to start **nested bullets**.
- That's 3-6-9-...
-1. Start items in a **numbered list** with `[space][space][space][1][space]`.
-2. The "1" (or **any number**) will be replaced by the correct number, in order.
-3. To add a new paragraph without restarting list numbering, use the %BR% variable, like below:%BR% Text added (in new paragraph)
-4. and list numbering continues.
+- To create a numbered list:
+ 1. Start items in a **numbered list** with `[space][space][space][1][space]`.
+ 2. The "1" (or **any number**) will be replaced by the correct number, in order.
+ 3. To add a new paragraph without restarting list numbering, use the %BR% variable, like below:%BR% Text added (in new paragraph)
+ 4. and list numbering continues.
- Always start **counting** spaces for bullets and such from the beginning of a new line.
-- To include an image, type its URL. You also can Attach an image to the page and display it with text <br />`%ATTACHURL%/yourimagefilename.jpg` .
+- To include an image, type its URL. You also can Attach an image to the page and display it with text <br />`%ATTACHURL%/yourimagefilename.jpg`
- To display a word or phrase in `MONOSPACED TYPE`, put it in equal signs: `=like this=`. <br />Use `==two==` for bold: <code>**bold mono**</code>.
-- Use <code>**<verbatim>**</code> to enclose code excerpts, filenames, and other unformatted text, with the opening and closing tags on their own separate lines:
-
-> <pre>
-> <b><verbatim></b>
-> unformatted text!
-> <b></verbatim></b>
-> </pre>
+- Use <code>**<verbatim>**</code> to enclose code excerpts, filenames, and other unformatted text:%BR% <code>**<verbatim>**</code> %BR% `unformatted text!` %BR% <code>**</verbatim>**</code> %BR%%BR% **_%X% NOTE:_** VARIABLES can be set within verbatim tags, that is, they are not disabled
- Three (or more) consecutive **hyphens** expand into a horizontal rule:%BR% `---`
+- Follow [[GoodStyle]] recommendations when editing topics.
+
- See [[TextFormattingRules]] for the complete set of formatting rules.
-This page provides online help for new users of TWiki, when editing a page - the area between the horizontal lines is included just below the text input area. You can customize this based on your site's particular needs, e.g. if there's some formatting that your users need a lot.
+This page provides online help for new users of TWiki when editing a page. If there's some formatting that your contributors use often, you can customize this for your site's particular needs.
-Keeping this help text short and simple is important since this page is aimed at new users. It does include pop-up links for more detailed help - you will need to test these links from within the Edit page for their JavaScript code to work correctly.
+Keeping this help text short and simple is important since this page is aimed at new users. It does include pop-up links for more detailed help.
----
- **links** use topic name or URL: `WebHome`, `http://yahoo.com`, or `[[http://yahoo.com/][link to Yahoo]]`
- **monospaced** put word/phrase in equal signs: `=your words=`
- **paragraphs** separate with blank line
-- [More formatting help](http://www.dementia.org/twiki//view/TWiki/TextFormattingRules) and [hints on good style](http://www.dementia.org/twiki//view/TWiki/GoodStyle)
+- [[More formatting help|TWiki/TextFormattingRules]] and [[hints on good style|TWiki/GoodStyle]]
----
-
--- TWiki:Main.ArthurClemens - 10 Sep 2003 %BR% -- TWiki:Main.RichardDonkin - 11 Sep 2003 %BR% -- TWiki:Main.RandyKramer - 11 Sep 2003 %BR% -- TWiki:Main.PeterThoeny - 25 Sep 2003
-A WikiWord consists of two or more words with initial capitals, run together.
+# <a name="What is a _WikiWord?"></a><a name=" What is a _WikiWord?"></a> What is a WikiWord?
+
+A WikiWord consists of two or more words with initial capitals, run together. **WikiWords are topic names.** A TWiki topic name always has a fixed format: two or more words with initial capitals, run together. Like the name of the current topic: **WikiWord**. When you type the name of a topic, you create a link to that topic. You type `WebHome` and on saving the page this becomes [[WebHome]]. It's as easy as that.
When you type a WikiWord, you establish a hyperlink. It's as easy as that.
+WikiWord linking is easy to use:
+
+- You don't have to know the full path to where the topic is stored - you just type the name
+- You don't need to write HTML
+- Without HTML, the topic text is easier to read when editing
+- Easy linking leads to interesting texts with links placed in context
+
WikiWords are styled like this because:
- It makes Wiki hyperlinks instantly recognizable
- It avoids the need to fiddle with HTML tags
- It avoids over-general topics because at least two words are required
-**Syntax of a WikiWord**
+## <a name="Syntax of a _WikiWord"></a> Syntax of a WikiWord
- Uppercase letter(s)
- Lowercase letter(s)
- Uppercase letter(s)
- Optional lowercase or uppercase letter(s) or number(s)
-**Good examples for WikiWords:**
+## <a name="Good examples of _WikiWords"></a> Good examples of WikiWords
- [[WikiWord]]
- [[GoodStyle]]
+- [[VersionFiveDotThree]]
+- [[ReleaseVersion5dot3]]
- [[AVeryLongWikiTopicNameIsAlsoPossible]]: wherever an uppercase or lowercase letter is allowed, a group of letters of the same case is allowed
- [[YearTwoThousand]]
-**Bad examples for WikiWords:**
+## <a name="Bad examples of _WikiWords:"></a> Bad examples of WikiWords:
- Web: Name without the uppercase letter(s), lowercase letter(s), uppercase letter(s) sequence
- [[T5Wiki]]: Name with number before the uppercase, lowercase, uppercase sequence
- [[Md5sumsAfterBurning]]: Name with number before the uppercase, lowercase, uppercase sequence
- Know-How: Name with dashes in between
-**Hints**
+## <a name="Variations in linking"></a> Variations in linking
+
+When you write the name of a topic, it becomes a link. There are more ways
+
+- To write a custom **link label**, use bracket notation: `[[TWikiAccessControl][access control]]` - this becomes: [[access control|Main/TWikiAccessControl]]
+- To link to a topic in **another web**, write: `Sandbox.WebSearch` - this becomes: [[WebSearch]]
+- To show the web name in the link use bracket notation: `[[Sandbox.WebHome]]` - this becomes: [[Sandbox.WebHome|Sandbox/WebHome]]
+- To link to a topic on **another Wiki site**, use: `TWiki:Main/WebHome` - this becomes: TWiki:Main/WebHome (sites are defined in the [[InterwikiPlugin]])
+- To link to a part on the **same page**, write a dash and the name of the header, with spaces replaced by underscores (and `!` removed): `[[#Good_examples_of_WikiWords]]` becomes: [[#Good_examples_of_WikiWords|Main/WebHome#Good_examples_of_WikiWords]]. You can also link to a part on another page: `TWiki.WebHome#Disclaimer` becomes: [[WebHome#Disclaimer]].
+
+## <a name="Hints"></a> Hints
- Insert WikiWords wherever you can. Rich linking helps to make a Wiki successful.
- Be specific. All topics in a web share one name space. For example, instead of `FunctionalSpec` write `BreadSlicerFunctionalSpec` because other projects might also have a functional spec topic.
-- %H% To stop a WikiWord from being turned into a hyperlink, insert the text `<nop>` immediately before the WikiWord.
-- It is recommended to create topics with singular names. Plural WikiWords are automatically linked to the singular topic, i.e. the link [[WikiWords]] links to the topic [[WikiWord]].
+- To stop a WikiWord from being turned into a hyperlink, insert an exclamation point immediately before the WikiWord. For example, write `!SunOS` to get SunOS.
+- Create topics with singular names. Plural WikiWords are automatically linked to the singular topic, i.e. the link [[WikiWords]] links to the topic [[WikiWord]].
- Sometimes you have to be creative to find a good WikiName. Examples:
- To create a topic about the the **Bread Slicer 1.2** product, use `BreadSlicer1dot2` or `BreadSlicer1pt2`, but not `BreadSlicer1.2`.
- To create a topic about **year 2000**, you could go for `YearTwoK` or `YearTwoThousand`, but not `Year2K` or `Y2K` or `Y2000`.
- Turn acronyms into WikiWords, i.e. take `FaqIndex` for a "FAQ index" topic.
-- You can specify any link label by using double square brackets, e.g. write `[[TWikiAccessControl][access control]]` to get a link to [[TWikiAccessControl]] that looks like [[access control|Main/TWikiAccessControl]].
-- %X% The topic is assumed to be in the current TWiki web. Prepending the name of a TWiki web and a period links to a topic in another web.
+- It is possible to turn off the auto-linking of WikiWords and to rely only on the bracket notation. See NOAUTOLINK setting in [[TWikiPreferences#Default_Web_Preferences]].
+- %X% When linking to a WebHome topic _in another web_, the link will be rendered as the name of the web, e.g. `Sandbox.WebHome` becomes [[Sandbox|Sandbox/WebHome]].
**_Related Topics:_** [[WikiSyntax]], [[TextFormattingRules]]
--- /dev/null
+# <a name="Wysiwyg Plugin"></a><a name=" Wysiwyg Plugin"></a> Wysiwyg Plugin
+
+Support for the integration of WYSIWYG (What-You-See-Is-What-You-Get) editors. Comes bundled with a complete integration of the feature-rich [Kupu](http://kupu.oscom.org) editor.
+
+![Screenshot](http://www.dementia.org/twiki//view/screenshot.jpg)
+
+The plugin is a generic framework that supports editing of TWiki topics using any browser-based HTML editor. It works by transforming TML (TWiki Meta Language) into HTML for the editor and then transforming HTML back into TML on save. These steps can be separated to support the import of HTML from external sources such as existing web pages.
+
+The plugin should operate with TWiki20040904 as well as TWiki-4.0.0 and later.
+
+**Caveat**: [[WysiwygPlugin]] is designed for editing TWiki topics, not as a general purpose HTML editor. It will work fine on topics that contain text, TML formatting, and most HTML. However, because of the complexity of transforming TML into HTML and back, complex TML, and mixing HTML and TML may not give the results you expect. You are recommended to use the standard browser textarea editor for editing existing topics that contain mixed HTML and TML, or complex %TML%-type variables.
+
+<div>
+ <ul>
+ <li><a href="#Features"> Features</a></li>
+ <li><a href="#Details"> Details</a><ul>
+ <li><a href="#What's in the package"> What's in the package</a></li>
+ <li><a href="#How to use the editor"> How to use the editor</a><ul>
+ <li><a href="#Kupu Notes"> Kupu Notes</a></li>
+ </ul>
+ </li>
+ <li><a href="#How it works"> How it works</a></li>
+ <li><a href="#Using the translators from Perl"> Using the translators from Perl scripts</a></li>
+ </ul>
+ </li>
+ <li><a href="#Plugin Installation Instructions"> Plugin Installation Instructions</a></li>
+ <li><a href="#Plugin Configuration Settings"> Plugin Configuration Settings</a></li>
+ <li><a href="#Other Settings"> Other Settings</a><ul>
+ <li><a href="#TWiki._WysiwygPluginIcons"> TWiki.WysiwygPluginIcons</a></li>
+ <li><a href="#TWiki._WysiwygPluginStrings"> TWiki.WysiwygPluginStrings</a></li>
+ <li><a href="#TWiki._WysiwygPluginLocalHelp"> TWiki.WysiwygPluginLocalHelp</a></li>
+ <li><a href="#Editor control"> Editor control</a></li>
+ </ul>
+ </li>
+ <li><a href="#Known Issues"> Known Issues</a><ul>
+ <li><a href="#Incompatible with "non-standard""> Incompatible with "non-standard" syntax</a></li>
+ <li><a href="#Can't <strong>undo</strong> all functions (Kupu"> Can't undo all functions (Kupu + browser)</a></li>
+ <li><a href="#Overlapping styles (_WysiwygPlug"> Overlapping styles (WysiwygPlugin)</a></li>
+ <li><a href="#Support for PRE"> Support for PRE</a></li>
+ </ul>
+ </li>
+ <li><a href="#Plugin Info"> Plugin Info</a></li>
+ </ul>
+</div>
+
+## <a name="Features"></a> Features
+
+- Supports the input of malformed HTML
+- Full round-trip (TML -> XHTML -> TWiki syntax)
+- Framework is editor agnostic
+- Customised [Kupu](http://kupu.oscom.org) editor included
+
+## <a name="Details"></a> Details
+
+### <a name="What's in the package"></a> What's in the package
+
+The package includes the following pieces:
+
+- TML (TWiki syntax) to HTML translator
+- HTML to TML translator (with stand-alone script)
+- Generic TWiki plugin for automating the translation during editing
+- [Kupu](http://kupu.oscom.org) editor integration, implemented as a TWiki skin
+
+### <a name="How to use the editor"></a> How to use the editor
+
+Basic help for most of the functions in the toolbar is available by "hovering" the mouse over the button. Some functions require a bit more explanation:
+
+- "Insert No-Op" inserts a <nop> region. Any TWiki syntax such as wikiwords or variables inside the region will be disabled in the rgeion. $lt;nop> regions may not extend over line breaks.
+- The rightmost drop-down will give you a menu of TWiki variables that can be inserted. Any of these variables can be edited after they have been placed in the text, for example to add parameters.
+- "Insert a [[WikiWord]]" will give you a menu of topics in the _current web_ that can be inserted. Topics are inserted as links, though typing wikiwords in plain text will work just as well.
+- Watch out for the <> button on the right of the toolbar. It lets you switch into an HTML view, which can be very useful when you can't get your formatting right.
+- In TWiki, a totally empty table cell causes the cell to be merged with the cell immediately to the left. To make this effect more transparent in the editor, these empty cells are shown with the text "%SPAN%" in them. In Kupu, if you add %SPAN% to a table cell, then all the rest of the content will be thrown away and the cell will be converted to an empty table cell. Note that this only applies to tables that are converted to TWiki syntax.
+
+#### <a name="Kupu Notes"></a> Kupu Notes
+
+The version of Kupu shipped with this plugin is an uncustomised basic Kupu release. All the TWiki customisation is done as plugins and extensions to Kupu - the basic kupu code is shipped completely intact.
+
+### <a name="How it works"></a> How it works
+
+The plugin works by translating the topic text into HTML, which is then fed to the editor. The edited HTML is then run through the reverse translation before saving to the topic. TWiki syntax is used in preference to HTML in the stored topic wherever possible, though HTML may be used if the translator can't find a suitable TML equivalent..
+
+The default rendering that TWiki uses to generate HTML for browsers is 'lossy' - information in the TWiki syntax is lost in the HTML output, and a round-trip (recovering the original TWiki syntax from the HTML) is impossible. To solve this problem the plugin instead uses its own translation of TWiki syntax to pure XHTML. The generated XHTML is annotated with CSS classes that support the accurate recovery of the original TWiki syntax.
+
+_(before you ask the obvious question, yes, the translator **could** be used to replace the TWiki rendering pipeline for generating HTML pages. In fact, the translator is taken almost directly from the implementation of the rendering pipeline for the TWiki 'Dakar' release)_
+
+Translation of the HTML back to TWiki syntax uses the CPAN:HTML::Parser. This parser is used in preference to a more modern XML parser, because the HTML may not generate fully compliant XHTML. A strict parser would risk losing content. CPAN:HTML::Parser is better at handling malformed syntax.
+
+There is also the advantage that the translator can be used to import HTML from other sources - for example, existing web pages. Due to the simple nature of TWiki syntax and the complexity of HTML, this translation is lossy - i.e there will be HTML features that can be entered by editors that will be lost in this translation step. This is especially noticeable with HTML tables.
+
+### <a name="Using the translators from Perl"></a><a name="Using the translators from Perl "></a> Using the translators from Perl scripts
+
+Both translators can be used directly from Perl scripts, for example to build your own stand-alone translators.
+
+An example stand-alone convertor script for HTML to TWiki is included in the installation. It can be found in the top-level `tools` directory and is called `html2tml.pl`.
+
+## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <th bgcolor="#99CCCC"><strong> File: </strong></th>
+ <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/WC.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Leaf.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Node.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin/HTML2TML.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>lib/TWiki/Plugins/WysiwygPlugin/TML2HTML.pm</b></code></td>
+ <td> Perl module </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/WysiwygPlugin.txt</b></code></td>
+ <td> Documentation and settings </td>
+ </tr>
+ <tr>
+ <td><code><b>data/TWiki/WysiwygPluginTopicLister.txt</b></code></td>
+ <td> Special AJAX topic </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/kuputwiki.css</b></code></td>
+ <td> Kupu customisation </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/twikitools.js</b></code></td>
+ <td> Kupu customisation </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/kupuinit.js</b></code></td>
+ <td> Kupu customisation </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/kupustart.js</b></code></td>
+ <td> Kupu customisation </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/bold.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/cancel.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/code.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/definition-list.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/exthyperlink.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/help.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/indent.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/inthyperlink.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/italic.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/new-attachment.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/new-image.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/nop.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/ordered-list.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/outdent.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/redo.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/remove.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/save.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/separator.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/smiley.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/strings.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/table.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/text-color.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/undo.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/unordered-list.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/vars.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/verbatim.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/verbatim-watermark.png</b></code></td>
+ <td> Watermark </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/screenshot.jpg</b></code></td>
+ <td> Screen shot </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/view-source.png</b></code></td>
+ <td> Button image </td>
+ </tr>
+ <tr>
+ <td><code><b>templates/edit.kupu.tmpl</b></code></td>
+ <td> Template for an edit using kupu </td>
+ </tr>
+ <tr>
+ <td><code><b>templates/view.kupuxml.tmpl</b></code></td>
+ <td> Template for AJAX data </td>
+ </tr>
+ <tr>
+ <td><code><b>templates/attachtables.kupu.tmpl</b></code></td>
+ <td> Attachment table rendering for editor </td>
+ </tr>
+ <tr>
+ <td><code><b>templates/view.kupu.tmpl</b></code></td>
+ <td> Template for a kupu skin view, used by the editor </td>
+ </tr>
+ <tr>
+ <td><code><b>tools/html2tml.pl</b></code></td>
+ <td> Stand-alone convertor script </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/Extensions/Install.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/Makefile</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/README.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/exit.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/kupudrawerstyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/kupumacros.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/kupustyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/lenya.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/lenya.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/toolbar.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/toolboxes.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/kupu/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/content2edit.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/imagedrawer.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/imagelibraries.xml.jx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/kupudrawerstyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/libraries.xml.jx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/linkdrawer.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/linklibraries.xml.jx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/publication_image_library.xml.jx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/drawers/sitetree_link_library.xml.jx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/i18n.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/emblem-generic.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/exit.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/page-image.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/pub-image.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/right_arrow.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/images/sitetree-link.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/kupumacros.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/kupusave.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/page2kupu.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/pageassets2kupulibrary.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/apache-lenya/lenya/sitetree2kupulibrary.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/cnf/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/cnf/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/cnf/toolboxes.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/cnf/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/cnf/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/fulldoc.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupu-pox.cgi</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupu.cgi</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupu.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupu.pox</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupu.pox.jspx</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupubasetools.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupubeforeunload.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupublank.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucleanupexpressions.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucnf.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucnftable.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucontentfilters.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucontentstyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupucontextmenu.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/allimages.xml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/drawer.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/drawer.xsl.metadata</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/imagelibrary.xml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/kupubuttons.xml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/linklibrary.xml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos.xml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/bitflux_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/bitflux_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/bubnbros.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/bubnbros_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/codespeak_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/codespeak_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/diver_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/diver_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/eth_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/eth_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/infrae_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/infrae_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/kupu_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/kupu_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/lenya_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/lenya_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/opensource.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/opensource_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/oscom4_banner.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/oscom4_banner_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/oscom_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/oscom_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/plone_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/plone_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/pypy_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/pypy_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/silva_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/silva_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/twiki_logo.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/twiki_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/zea_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/zea_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/zope_logo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawers/logos/zope_logo_preview.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupudrawerstyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupueditor.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuform.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuhelpers.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/background-color.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/bold.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/bold.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/buttons.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/caret.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/closed.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/copy.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/create-new.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/cut.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/definitionlist.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/document.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/exit.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/exthyperlink.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/folder.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/fonts.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/format.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/hr.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/image.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/indent.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/indent.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/inthyperlink.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/italic.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/italic.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/justify-center.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/justify-full.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/justify-left.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/justify-right.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/kupu_icon.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/kupulibrary.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/kupusearch_icon.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/larger-text.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/link.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/opened.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/ordered-list.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/outdent.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/paste.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/redo-disabled.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/redo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/remove.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/save.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/size.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/smaller-text.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/space.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/strikethrough.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/subscript.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/superscript.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/table.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/text-check.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/text-color.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/toolbarbg_blue.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/toolbarbg_green.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/toolbarbg_purple.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/toolbarbg_wood.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/underline.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/underline.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/undo-disabled.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/undo.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/unlink.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/unordered-list.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/view-source.png</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/zoom-in.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuimages/zoom-out.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinit_experimental.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinit_form.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinit_genericelements.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinit_multi.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuinspector.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuloggers.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupumacros.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupumulti.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupumultieditor.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupunoi18n.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupupopups/image.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupupopups/link.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupusaveonpart.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupusourceedit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupuspellchecker.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupustart.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupustart_form.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupustart_multi.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kupustyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/kuputoolcollapser.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/sarissa.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/sarissa_ieemu_xpath.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/common/spellcheck.cgi</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/config.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/configure.zcml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/colorchooser.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/contextmenu.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/drawers.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/form.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/html.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/save.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/saveonpart.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/sourceedit.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/spellchecker.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/toolbar.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/toolboxes.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/default/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-apache-lenya.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-cnf.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-form.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-multi.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-plone.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-silva.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist-zope2.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/dist.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/BEFOREUNLOAD.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/CHANGES.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/CONTRIBUTING.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/CREDITS.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/CUSTOMIZING.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/EXTENDING.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/FAQ.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/IMAGEUPLOADER.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/INSTALL.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/JSAPI.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/LIBRARIES.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/LICENSE.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/OLDBROWSERS.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/PLONE2.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/README.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/STYLEGUIDE.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/TEMPLATE-SYSTEM.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/TODO.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/ZOPE2.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/default.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/docutils.conf</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/doc/file-template</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/form/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/form/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/form/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/form/save.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-cs.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-da.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-de.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-el.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-eo.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-fi.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-fr.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-he.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-ja.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-nl.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-pt-br.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-pt.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-sr-Latn.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-sr.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-zh-cn.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu-zh.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupu.pot</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupuconfig-da.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupuconfig-fr.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupuconfig-ja.po</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/i18n/kupuconfig.pot</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/kupu-i18nextract-sa-diff.patch</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/kupu_icon.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/make-jspx.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/make.bat</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/make.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/multi/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/multi/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/multi/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/multi/save.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/multi/toolboxes.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/ReftextField.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/TODO.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/beforeunload.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/drawers.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/html2captioned.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/interfaces.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu2html.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_config.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/contentUsesKupu.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/convertContentForKupu.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/emptypage.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuGetResourceTypes.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuInfoForBrains.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuMyItems.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuRecentItems.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuSearch.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuUploadImage.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuUploadImage.py.metadata</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupu_wysiwyg_support.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupublank.html.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupucollection.xml.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupucollection.xml.pt.metadata</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupulibraries.xml.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupumyitems.xml.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuplone.css.dtml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuploneeditor.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuploneinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupuploneui.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupurecentitems.xml.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupusaveonpart.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/kupusearch.xml.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/anchor.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/bgcolor.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/bold.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/center.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/definitionlist.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/delete_icon.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/hr.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/hyperlink.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/indent.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/italic.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/left_just.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/list.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/numbered_list.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/outdent.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/redo.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/right_just.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/space.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/strikethrough.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/subscript.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/superscript.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/table.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/textcolor.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/tools.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/underline.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/undo.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/unformat.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/plonekupuimages/view-source.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/resolveuid.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/sample-kupu-customisation-policy.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/kupu_plone_layer/wysiwyg_support.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/libraries.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/librarytool.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/permissions.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/plonelibrarytool.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/resource_types.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/scanner.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/sourceedit.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/framework.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/baduid.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/linked.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/minimal.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/notcaptioned.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/notquoted.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/input/simple.in</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/baduid.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/linked.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/minimal.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/notcaptioned.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/notquoted.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/output/simple.out</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/runalltests.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/runme.cmd</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/test_browserSupportsKupu.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/test_html2captioned.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/test_librarymanager.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/tests/test_resourcetypemapper.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/toolbar.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/wysiwyg_support.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/plone/zmi_docs.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/python/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/python/nationalizer.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/python/spellcheck.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/refresh.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/roundup/kupuinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/roundup/kupustyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/closed_arrow.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/contextmenu.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/drawers.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/imagedrawer.xsl.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/kupudrawerstyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/kupumacros.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/kupusilvainit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/kupusilvatools.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/librarydrawer.xsl</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/opened_arrow.gif</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/saveonpart.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/toolbar.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/toolboxes.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/silva/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/run_tests.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_beforeunload.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupubasetools.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupueditor.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupuhelpers.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupuinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_plone.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_xhtml.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tools/compress.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tools/convert_to_utf-8.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tools/makepox.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/version.txt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/Makefile</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/browser.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/dist.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/empty.html</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/kupuinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/kupustart.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/kupustyles.css</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/make.bat</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/widgeteer/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/addKupuEditor.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/body.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/contextmenu.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/drawers.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/example.pt</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/head.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/html.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/include.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/saveonpart.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/sourceedit.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/wire.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope2/xmlconfig.kupu</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/browser/__init__.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/browser/configure.zcml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/configure.zcml</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/field.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/zope3/interfaces.py</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupubasetools.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupueditor.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupuhelpers.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+ <tr>
+ <td><code><b>pub/TWiki/WysiwygPlugin/_kupu/tests/test_kupuinit.js</b></code></td>
+ <td> Kupu 1.3.2 </td>
+ </tr>
+</table>
+
+- Run <code>**%TOPIC%\_installer**</code> to automatically check and install other modules that this module depends on. You can also do this step manually. Dependencies: <table border="1">
+ <tr>
+ <th>Name</th>
+ <th>Version</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td align="left">HTML::Parser</td>
+ <td align="left">Required. Available from <a href="http://cpan.uwinnipeg.ca/search?query=HTML%3A%3AParser&mode=dist" target="_top">CPAN</a>.</td>
+ </tr>
+ <tr>
+ <td align="left">HTML::Entities</td>
+ <td align="left">Required. Available from <a href="http://cpan.uwinnipeg.ca/search?query=HTML%3A%3AEntities&mode=dist" target="_top">CPAN</a>.</td>
+ </tr>
+</table>
+- (Dakar) Visit `configure` in your TWiki installation, and enable the plugin in the \{Plugins\} section.
+- To enable the editor in one of your skins, add the following link to the skin alongside or in place of the existing 'edit' link:<br />`<a href="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%WEB%/%TOPIC%?skin=kupu">Kupu</a>`<br />As you can see this is just a standard edit link with the 'kupu' skin in place of the usual edit skin. Here it is for this topic: [Kupu](http://www.dementia.org/twiki//edit/%WEB%/%TOPIC%?skin=kupu). Try clicking on it, but _do not save_!
+
+**If you want to set up Kupu as your default editor**, then you can set the `EDIT_SKIN` TWiki variable wherever you want.
+
+- Set EDIT\_SKIN = kupu
+
+Set it in a user topic to set it for one user. Set it in [[WebPreferences]] to set it for a single web. Or set it in your global TWiki preferences to set it for your whole site!
+
+## <a name="Plugin Configuration Settings"></a> Plugin Configuration Settings
+
+- Set SHORTDESCRIPTION = Translator framework and WYSIWYG editor for TWiki topics
+- The name of the skin used to invoke a Wysiwyg editor.
+ - Set WYSIWYGSKIN = kupu
+- Web/Topic name of a help page. Change this to point to your local version of the help page, which is brought up when the .
+ - Set HELPPAGE = TWiki/WysiwygPlugin
+
+## <a name="Other Settings"></a> Other Settings
+
+The editor template includes a number of files that can be used for other settings. These files are **not** defined in the distribution, so that you can create your own local content.
+
+### <a name="TWiki._WysiwygPluginIcons"></a> TWiki.WysiwygPluginIcons
+
+You can define a list of icons that will be available in the Kupu editor when the ![smiley.png](http://www.dementia.org/twiki//view/smiley.png) toolbar button is pressed. This topic has to contain a list of <IMG> tags. If present, the 'alt' text will be used in place of the <IMG> tag when translating from HTML to TML. Example:
+
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/tip.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/warning.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/pencil.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/choice-yes.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/updated.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/help.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/new.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/starred.gif" />
+ <img src="%PUBURL%/TWiki/TWikiDocGraphics/arrowright.gif" />
+
+### <a name="TWiki._WysiwygPluginStrings"></a> TWiki.WysiwygPluginStrings
+
+You can also define a list of strings that will be available for insertion in topics using the ![strings.png](http://www.dementia.org/twiki//view/strings.png) toolbar button. This topic has to contain a list of HTML 'option' tags. Example:
+
+ <option value='-- <nop>%WIKIUSERNAME% - %DATE%'>Signature</option>
+ <option value="%<nop>WIKINAME%">Wiki name (variable)</option>
+ <option value='%<nop>SEARCH{"search for"}%'>Inline search (variable)</option>
+ <option value='%<nop>INCLUDE{"topic or url"}%'>Include (variable)</option>
+ <option value="%<nop>TOC%"> Table of Contents (variable)</option>
+ <option value="%<nop>TOPIC%">Topic (variable)</option>
+ <option value="%<nop>WEB%">Web (variable)</option>
+ <option value="%<nop>DATE%"> Date (variable)</option>
+
+The bit between the > < `value` defines text in the drop-down box in the editor, and the `value` defines the actual string inserted in the topic.
+
+### <a name="TWiki._WysiwygPluginLocalHelp"></a> TWiki.WysiwygPluginLocalHelp
+
+If it exists, the contents of this topic will be included and shown on the edit screen below the status bar. It is intended to be used for site-specific quick help information.
+
+### <a name="Editor control"></a> Editor control
+
+The global TWiki Variable `WYSIWYG_EXCLUDE` can be set to make the plugin sensitive to what is in a topic before allowing it to be edited. You can set it up to refuse to edit if
+
+- some or all of HTML tags (e.g. `<br />` or `<div>`), or
+- simple variables (e.g. `%VAR%`) or
+- calls (e.g. `%VARIABLE{...}%`)
+- PRE blocks (`<pre>`)
+- HTML comments (`<!--` ... `-->`)
+
+are used in the topic. If the plugin detects an excluded construct in the topic, it will redirect to the default editor. Comma-separated list of one or more of `html`, `variables`, `calls`, `pre` or `comments` e.g.
+
+- `Set WYSIWYG_EXCLUDE = variables,calls` (inactive; you need to remove monospacing from this setting to enable it)
+
+If you are using this plugin with TWiki-4.0.0 or later with `pattern` skin, the `%COMPOSER%` global TWiki variable is used to control the skin used for the WYSIWYG editor link. You can define this variable to the empty string to disable WYSIWYG editing on a site, per-web, per-user or per-topic basis.
+
+## <a name="Known Issues"></a> Known Issues
+
+Most of the known problems with the plugin are actually problems with the Kupu editor or the browser rather than the plugin.
+
+### <a name="Incompatible with "non-standard""></a> Incompatible with "non-standard" syntax
+
+[[WysiwygPlugin]] is Incompatible with plugins that expand non-standard syntax e.g. TWiki:Plugins.MathModePlugin ([[WysiwygPlugin]])
+
+Plugins that extend the syntax using TWiki variables, such as `%MYVARIABLE%`, should work fine.
+
+### <a name="Can't <strong>undo</strong> all functions (Kupu"></a> Can't **undo** all functions (Kupu + browser)
+
+Due to limitations in the browser support for editing, not all functions can be undone. Also, the undo buffer can be cleared unexpectedly during editing, especially when using Internet Explorer.
+
+### <a name="Overlapping styles (_WysiwygPlug"></a> Overlapping styles ([[WysiwygPlugin]])
+
+Because TWiki uses a "best guess" approach to some formatting, it allows overlapping of tags in a way forbidden by HTML, it is impossible to guarantee 100% that formating in the original TWiki document will still be there when the same document is loaded and then saved through the [[WysiwygPlugin]]. The most obvious case of this is to do with styles. For example, the sentence
+
+ *bold _bold-italic* italic_
+
+is legal in TML, but in HTML is represented by
+
+ <strong>bold <em>bold-italic</em></strong> <em>italic</em>
+
+which gets translated back to TML as
+
+ *bold _bold-italic_* _italic_
+
+which is correct by construction, but does not render correctly in TWiki. This problem is unfortunately unavoidable due to the way TWiki syntax works.
+
+### <a name="Support for PRE"></a> Support for PRE
+
+Because of limitations in the browsers, the editor does not support PRE blocks. All PRE blocks will be converted to TWiki verbatim blocks on save. This can cause some confusion, especially when editor formatting controls (such as "bold") have been used to format text in a PRE block. Users are advised to use only plain text in PRE (verbatim) blocks.
+
+## <a name="Plugin Info"></a> Plugin Info
+
+This plugin is heavily based on the TWiki::Plugins.KupuEditorAddOn, and the authors of that add-on are therefore also credited as authors of this plugin.
+
+<table border="1" cellpadding="0" cellspacing="0">
+ <tr>
+ <td align="right"> Plugin Authors: </td>
+ <td> TWiki:Main.CrawfordCurrie <a href="http://www.c-dot.co.uk" target="_top">http://www.c-dot.co.uk</a> (from original work by TWiki:Main.RomainRaugi, TWiki:Main.DamienMandrioli, TWiki:Main.FredericLuddeni, and TWiki:Main.ColasNahaboo) </td>
+ </tr>
+ <tr>
+ <td> Copyright </td>
+ <td> © ILOG 2005 <a href="http://www.ilog.fr" target="_top">http://www.ilog.fr</a></td>
+ </tr>
+ <tr>
+ <td align="right"> Plugin Version: </td>
+ <td> 8670 </td>
+ </tr>
+ <tr>
+ <td colspan="2"> Change History: </td>
+ </tr>
+ <tr>
+ <td align="right"> Dependencies: </td>
+ <td>
+ <table border="1">
+ <tr>
+ <th>Name</th>
+ <th>Version</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td align="left">HTML::Parser</td>
+ <td align="left">Required. Available from <a href="http://cpan.uwinnipeg.ca/search?query=HTML%3A%3AParser&mode=dist" target="_top">CPAN</a>.</td>
+ </tr>
+ <tr>
+ <td align="left">HTML::Entities</td>
+ <td align="left">Required. Available from <a href="http://cpan.uwinnipeg.ca/search?query=HTML%3A%3AEntities&mode=dist" target="_top">CPAN</a>.</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"> Perl Version: </td>
+ <td> 5.0 </td>
+ </tr>
+ <tr>
+ <td align="right"> Plugin Home: </td>
+ <td> TWiki:Plugins/%TOPIC% </td>
+ </tr>
+ <tr>
+ <td align="right"> Feedback: </td>
+ <td> TWiki:Plugins/%TOPIC%Dev </td>
+ </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
+
+-- TWiki:Main/CrawfordCurrie - 23:00:26 01 February 2006
----
-- The description above briefly explains how a background color corresponds to a particular web. It is included within other topics using the following directive:
+- The description above briefly explains how a background color corresponds to a particular web. It can be included within other topics using the following directive:
`%INCLUDE{"%TWIKIWEB%.YouAreHere"}%`
-- [List](http://www.dementia.org/twiki//search/%WEB%?scope=text®ex=on&web=all&search=INCLUDE.*YouAreHere&casesensitive=on&nosummary=on¬otal=on) all topics which include this topic.
+- [List](http://www.dementia.org/twiki/search/%WEB%?scope=text®ex=on&web=all&search=INCLUDE.*YouAreHere&casesensitive=on&nosummary=on¬otal=on) all topics which include this topic.