view src/nabble/view/lib/help/Help.jmp @ 47:72765b66e2c3

remove mailing list code
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 18 Jun 2021 17:44:24 -0600
parents 7ecd1a4ef557
children
line wrap: on
line source

<%
package nabble.view.lib.help;

import fschmidt.html.Html;
import fschmidt.util.java.HtmlUtils;
import nabble.model.Lucene;
import nabble.model.Message;
import nabble.naml.compiler.CompileException;
import nabble.naml.compiler.Template;
import nabble.naml.compiler.Program;
import nabble.naml.compiler.TemplatePrintWriter;
import nabble.naml.namespaces.BasicNamespace;
import nabble.view.lib.Jtp;
import nabble.view.lib.Shared;
import nabble.view.web.template.HtmlListNamespace;
import nabble.modules.ModuleManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public abstract class Help {
	private static final Logger logger = LoggerFactory.getLogger(Help.class);

	private static final Map<Integer,Help> map = new HashMap<Integer,Help>();
	public final int id;
	public final String question;

	Help(int id,String question) {
		this.id = id;
		this.question = question;
		if( map.put(id,this) != null )
			throw new RuntimeException("duplicate id");
	}

	public abstract String answer();
	public String getMetaDescription() { return null; }
	public String getMetaKeywords() { return null; }

	public String path() {
		return "/help/Answer.jtp?id=" + id;
	}

	public String url() {
		return Jtp.defaultContextUrl()+path();
	}

	public String link() {
		return %><a href="<%=url()%>"><%=question%></a><%;
	}

	public String url(HttpServletRequest request) throws IOException {
		return url();
	}

	public String link(HttpServletRequest request) throws IOException {
		return link();
	}

	public static Help getHelp(int id) {
		return map.get(id);
	}

	public static final Help what = new Help(
		1, %>What is Nabble?<%){public String answer(){return %>
		<p>
		Nabble wants to improve public discussions on the web and provide useful embeddable applications to end users.
		This includes forums, user groups, message boards, photo galleries, newspapers, blogs, etc.  There are many vibrant discussions in these places, so are problems such as cluttered UI, broken search, moderation, and cataloging. Nabble wants to be a place where your discussion can grow and be free of these problems.
		</p>
	<%;}};
	public static final Help free = new Help(
		2, %>Is Nabble really free?<%){public String answer(){return %>
		<p>
		Yes. Nabble is absolutely free and will remain free to the users. This includes the end users
		and webmasters. If your website uses Nabble as a hosted forum,
		be assured that there is no limit on traffic or disk space, no hosting fees, no pay-for versions or label schemes.
		Nabble is just free.
		</p>
	<%;}};
	public static final Help sell = new Help(
		10, %>Can Nabble sell the data?<%){public String answer(){return %>
		<p>
		It's like asking can Google sell the web pages in its index?
		Absolutely not. A message belongs to its author. Besides, an email address is sacred.
		</p>
	<%;}};
	public static final Help delpost = new Help(
		13, %>How do I delete my posts?<%){public String answer(){return %>
		<p>
		Log in to (or register with) Nabble and then you can find and delete your posts on Nabble.
		</p>
	<%;}};
	public static final Help moderation = new Help(
		16, %>How do I remove SPAM or bad users from my forum?<%){public String answer(){return %>
		<p>
			SPAM and bad posts are common problems for forums.
			With Nabble, forum owners can easily remove unwanted messages and ban bad users.
			Both actions are available in the dropdown menu close to the message.
		</p>
		<p>
			We should remember that anonymous users can't be banned.
			However, you can disable anonymous posts for your forum by accessing the <b>Options > Users > Control anonymous users</b> action in the forum options menu.
		</p>
	<%;}};
	public static final Help stopAlert = new Help(
		19, %>How do I stop an email alert?<%){public String answer(){return %>
		<p>
		At the end of an email alert, there is always a link to stop it. Click that link and you will no longer be alerted.
	<%;}};
	public static final Help restrictions = new Help(
		20, %>How do I control who can view and post in my forum? <%){public String answer(){return %>
		<p>
			Under the "Options" menu, under "Users", is the option "Who can view & post".
			This page controls who can view and post in this forum.  But if this forum has a parent forum
			and if the parent forum has restrictions, then those restriction will also apply.
			This means that restrictions are only added as you go down your forum hierarchy.
			This makes sense because when you set restrictions, you assume that they will apply to
			all sub-forums as well.
		</p>
		<p>
			Let's look at a few examples.  Suppose you have a forum hierarchy and want to ban anonymous users
			throughout. You would go to the top forum and select that only registered users can create new topics and replies:
		</p>
		<p><img src="/images/help/registered_only.png" width=505 height=108 style="padding-left:2em"/></p>
		<p>
			Now suppose that under the top forum, you have an "Official Business" forum where only members of
			a group should be allowed to post.  You would select that only members can create new topics and replies:
		</p>
		<p><img src="/images/help/members_only.png" width=505 height=108 style="padding-left:2em"/></p>
		<p>
			You would then authorize the right members for that "Official Business" forum only.
		</p>
		<p>
			Now suppose that under that forum, you have an "Announcements" forum where only the organizer should
			post.  The organizer should create that forum and select again that only members can post and reply in that forum,
			but this time not authorize anyone else.  Now only the owner of the "Announcements" forum is authorized
			to post there.  But suppose you want to allow members to comment on announcements but not to
			make announcements.  Then instead of members can create new topics, but let everyone reply.
			Note that "Everyone" means everyone who would otherwise be allowed to post.  So now within the "Announcements" forum,
			only the owner can create threads, but all members can reply to those threads.
		</p>
	<%;}};
	public static final Help listSpam = new Help(
		22, %>My list received spam from Nabble. What do I do to prevent it from happening again?<%){public String answer(){return %>
		<p>
		We hate spam. We sincerely apologize if a spam comes to your list through Nabble.
		</p>
		<p>
		Please let us know through the <a href="<%=Jtp.supportUrl()%>">support forum</a> if you see or suspect spam. We will take actions immediately.
		</p>
		<p>
		Forum owners can also <a href="<%=Help.moderation.url()%>" target="_top" rel="nofollow">delete spam and ban bad users</a>.
		</p>
	<%;}};
	public static final Help cataloging = new Help(
		24, %>What's the right way to organize forums and messages?<%){public String answer(){return %>
		<p>
			Nabble offers a flexible way to organize forums and messages.
		</p>
		<p>
			An active forum is great, but its many users and diverse interests often drive the discussion off topic. Nabble tries to address this problem by allowing users to easily create child forums. A child forum structure helps to keep messages focused and properly categorized. The hierarchy is displayed at the parent level for easy drill down. Users who want to ignore off-topic discussions can drill down to the relevant child; and the users who don't mind reading all the messages can still do it at the parent forum level.
		</p>
		<h3>Create a child forum only when it is truly needed</h3>
		<p>
			Creating child forums is a powerful way to add a structure to your discussion, but you should be careful to avoid overdoing it. For example, if you are in a new forum with few messages and users, why bother creating a fancy structure? No matter how well structured, a forum without users is still a dead forum. What's more, a structure that goes too wide or too deep could get people confused as to where to visit or post, thus making it difficult for them to join the discussion. We recommend that you create child forums only when it is truly needed.
		</p>
		<h3>Force users to select a child forum to post</h3>
		<p>
			After you have created child forums, you may find users ignore it when they post, and most of the messages continue to get posted at the parent level. In such cases, don't just blame the users. Take a good look at your design and ask, does it make sense? Is it clear and easy to follow? Is the hierarchy too wide or too deep? If you feel certain that the structure is sound, and that you and a few other forum members support it, then you can use the "Who Can View & Post" feature to <a href="<%=Help.restrictions.url()%>">make the parent forum read-only</a>. This means that a user cannot post a new message in the parent forum. They will be prompted to drill down to a child forum to post there.
		</p>
		<h3>Keep the hierarchy efficient</h3>
		<p>
			You can build an elaborate structure by using a combination of parent and child categories and forums, but don't overdo it. The goal of a hierarchy is to help users navigate. Does yours help people get to the right forum quickly? For example, if a category has only one child forum under it, then it is a waste, because it just means a useless extra click for navigation.
		</p>
	<%;}};
	public static final Help password = new Help(
		25, %>How does Nabble store passwords?<%){public String answer(){return %>
		<p>
			Nabble does not store your password in plain text. Only a cryptographic digest of you password is kept in our database. This is why if you forget your password we cannot email it back to you. But if you do forget it, we can always email you a link which allows you to reset your password and pick a new one.
		</p>
		<p>
			It is a good security practice, however, to use different passwords for different websites, so please do not choose a password that you already use elsewhere.
		</p>
	<%;}};
	public static final Help seo = new Help(
		27, %>Is my application optimized for search engines?<%){public String answer(){return %>
		<p>
		Yes. Nabble's content pages are designed with SEO (Search Engine Optimization) in mind.
		Our SEO effort goes further beyond the usual tags and headers to advanced techniques such as URL encoding and PageRank distribution.
		</p>
	<%;}};
	public static final Help search = new Help(
		31, %>What search features does Nabble provide?<%){public String answer(){return %>
		<p>
		Nabble allows many flavors of specific search.
		</p>
		<ul>
		<li>You can search entire Nabble (with the help of Google Search).
		<li>You can search within an application (e.g., forum, photo gallery, newspaper, blog) to include all subcategories below.
		<li>You can narrow your search result by date.
		<li>You can search messages by user. Click a user name link to go to the user's profile page, search from there. Then you can narrow your search result by date, by category, or by both.
		<li>Nabble search supports keyword stemming, i.e. search, searching, searched, searches...
		</ul>

		<h2>Examples</h2>

		<p>
		<table class="search-tips-table" style="
			width: 100%;
			border-collapse: collapse;
		">
		<style type="text/css">
		.nabble .search-tips-table th {
			text-align: left;
			font-weight: bold;
			padding: .5em;
			vertical-align: top;
		}
		.nabble .search-tips-table td {
			padding: .3em;
			border-bottom-width: 1px;
			border-bottom-style: solid;
			vertical-align: top;
		}
		</style>
		<tr>
			<th>Your search</th>
			<th>What will search results show</th>
		</tr>
		<tr>
			<td class="info-message"><code class="important">hello world</code></td>

			<td class="info-message">Messages with both <code class="important">hello</code> and <code class="important">world</code></td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">"hello world"</code></td>
			<td class="info-message">Messages with the phrase <code class="important">hello world</code></td>

		</tr>
		<tr>
			<td class="info-message"><code class="important">hello OR world</code></td>
			<td class="info-message">Messages with either <code class="important">hello</code> or <code class="important">world</code></td>
		</tr>
		<tr>

			<td class="info-message"><code class="important">hello AND world</code></td>
			<td class="info-message">Messages with <code class="important">hello</code> and <code class="important">world</code>; same as entering <code class="important">hello world</code></td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">"hello world" lucene</code></td>

			<td class="info-message">Messages with both the phrase <code class="important">hello world</code> and <code class="important">lucene</code></td>
		</tr>


		<tr>
			<td class="info-message"><code class="important">hello NOT world</code></td>
			<td class="info-message">Messages that have <code class="important">hello</code>, but do not have <code class="important">world</code></td>

		</tr>
		<tr>
			<td class="info-message"><code class="important">("hello world" lucene) OR apache</code></td>
			<td class="info-message">Messages with either both <code class="important">hello world</code> and <code class="important">lucene</code>, or <code class="important">apache</code></td>
		</tr>


		<tr>
			<td class="info-message"><code class="important">lucene NOT "hello world"</code></td>
			<td class="info-message">Messages with <code class="important">lucene</code>, but not the phrase <code class="important">hello world</code></td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">hello*</code></td>

			<td class="info-message">Messages that have words that begin with <code class="important">hello</code>. For example, <code class="important">hello</code>, <code class="important">helloworld</code>, and <code class="important">hellooooooo</code>. * is a wildcard and matches 0 or more characters.</td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">par?</code></td>

			<td class="info-message">Messages that have words such as <code class="important">park</code>, <code class="important">part</code>, <code class="important">para</code>, and so forth. ? is a 1-character wildcard and matches 1 and only 1 character.</td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">subject:"hello world"</code></td>
			<td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">subject</code> only.</td>

		</tr>
		<tr>
			<td class="info-message"><code class="important">subject:(hello world)</code></td>
			<td class="info-message">Messages with <code class="important">hello</code> and <code class="important">world</code> in its <code class="important">subject</code> only. Note the use of () to groups words together, rather than "" which denote a phrase.</td>
	    </tr>
		<tr>
			<td class="info-message"><code class="important">message:"hello world"</code></td>
			<td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">message body</code> only.</td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">author:"Erik Hatcher"</code></td>
			<td class="info-message">Messages of <code class="important">Erik Hatcher</code> only.</td>
		</tr>
		<tr>
			<td class="info-message"><code class="important">roam~</code></td>
			<td class="info-message">Messages with <code class="important">foam</code>, <code class="important">roam</code>, and so forth. In essence, messages that match or sound like <code class="important">roam</code>.</td>
		</tr>
		</table>
		</p>

		<a name="search1"><h2>Search Using Words or Phrases </h2></a>
		<p>You may search Nabble using a single-word (e.g., "test" or "hello") or use a group of words or a phrase surrounded by double quotes (e.g., "hello dolly"). When searching by a group of words or a phrase, Nabble will return only those items that have both the words present. </p>

		<a name="search2"><h2>Boolean Searches</h2></a>
		<p>Boolean operators allow combining of search terms using logical operators such as AND, OR, and NOT. Please note that the Boolean operators must be all caps as in the examples below:</p>

		<ul>
			<li>To search for documents that contain "debian linux" and "java" use: "debian linux" AND java </li>
			<li>To search for documents that contain either "jetty" or "resin" use: jetty OR resin </li>
			<li>To search for documents that contain "linux" but not "kernel" use: linux NOT kernel </li>
			<li>To search for documents that contain "lucene" or "nutch" but not "apache" use: (lucene OR nutch) NOT apache </li>
		</ul>

		<a name="search3"><h2>Search Messages, Subjects, Authors</h2></a>
		<p>You can limit your search to either the message text, the subject of the message, the author name, the name of the forum, and/or the topic of the discussion by using the syntax shown in examples below: </p>

		<ul>
			<li>subject:"lord of the rings" message:film </li>
			<li>author:"doug cutting" message:lucene </li>
		</ul>

		<p>If you don't specify the type of search, it will search all -- message, subject, author. </p>

		<a name="search4"><h2>Wildcard Searches </h2></a>
		<p>Nabble allows you to do both single and multiple character wildcard searches. </p>

		<ul>
			<li>To perform a single character wildcard search use the "?" symbol. The single character wildcard search looks for terms that match that with the single character replaced. For example, to search for "text" or "test" you can use: te?t </li>
			<li>To perform a multiple character wildcard search use the "*" symbol. Multiple character wildcard searches looks for 0 or more characters. For example, to search for photo, photography, photographer, you can use: photo* </li>
			<li>You can also use the wildcard searches in the middle of a term.</li>
		</ul>

		<p><strong>Note:</strong> You cannot use a * or ? symbol as the first character of a search. Also if your wildcard search will result in too many matches, it cannot be processed.</p>

		<a name="search5"><h2>Fuzzy Searches</h2> </a>
		<p>To do a fuzzy search use the tilde, "~", symbol at the end of a single word search. For example to search for a term similar in spelling to "roam" use the fuzzy search: roam~ </p>

		<p>This search will find terms like foam and roams. </p>

		<a name="search6"><h2>Proximity Searches </h2></a>
		<p>Nabble supports proximity search -- that is, finding words that are a within a specific distance away from each other. To do a proximity search use the tilde, "~", symbol at the end of a Phrase. For example to search for a "apache" and "jakarta" within 10 words of each other in a document use: "jakarta apache"~10 </p>

	<%;}};
	public static final Help embed_what_how = new Help(
		36, %>Embeddable Forum, Photo Gallery, News, Blog & Other Apps!<%){
		public String getMetaDescription() { return "Nabble has different embeddable applications, including free forum, photo gallery, news, blog and much more! All applications have no installation, no HTML hassle, just copy and paste of a small javascript code."; }
		public String getMetaKeywords() { return "free, embeddable, forum, photo gallery, newspaper, blog, easy, embedding, embedded, embed my forum, hosted, website, site, HTML"; }
		public String answer(){return %>

		<h2>All Nabble apps are naturally embeddable!</h2>

		<p>Yes, with Nabble, you get an embeddable forum, embeddable photo gallery, embeddable news & embeddable blog... and there are more to come!</p>
		<p>All these embeddable apps are fully featured web applications. They all have full text search, user profile and access control, email subscription and integration, XML feed, moderation, CSS customization, unlimited uploading of pictures and files, threading, cataloging ... What's more, embedding a Nabble app is as easy as embedding a YouTube video - you just copy and paste a line of javascript code into your HTML page.</p>
		<p>You may have seen some embeddable widgets, but Nabble's "embeddability" is far more advanced. A widget runs in a fixed frame, making the content either underflows or overflows (frame scrolling is your only option). In contrast, a Nabble embeddable app adjusts its height automatically and always fit seamlessly into your site.</p>

		<p>All you have to do is go to your application, click on "Options > Embedding options" and you will see a text area with a code snippet.</p>
		<p>Copy and paste that snippet into your HTML web page. Now open the page and you will see that your forum loads up seamlessly. No installation, no HTML hassle, just copy and paste.</p>
		<p><b>Embedding may have issues with third-party cookies.</b>  This can be a problem if the user has disabled third-party cookies or if they are using Safari.  To avoid problems, we suggest that you use a <a href="<%=Help.domain_names.url()%>">custom domain</a> for Nabble that matches your domain.  For example, if your website is www.your-domain.com, you could use forum.your-domain.com for Nabble.  This ensures that Nabble's cookies aren't considered third-party by the browser.</p>
		<p>Users will browse, search, post, and navigate without ever leaving your page. Your embedded application works as if it were custom built, installed, and visually integrated with your website.</p>
		<p>Try this feature by creating a new application (e.g., forum, photo gallery, newspaper, blog, etc.) or using any Nabble forum that allows embedding. It is dead easy and seamless.</p>
		<%;}};

		public static final Help embed_permalinks = new Help(
		38, %>How do I link to a page in an embedded application?<%){public String answer(){return %>
		<p>
		You will notice that when you navigate through an embedded application (e.g., forum, photo gallery, blog, etc), the URL in the browser doesn't change.
		To get the URL of a specific page, such as a thread or a post, in an embedded application, look on the top-right corner of each page for <b>Permalinks</b>.</p>
		<p><img src="/images/help/help_embed_permalink.png" style="padding-left:2em"/></p>
		<p>When you click on the "Permalink" link, you will see the page URL in a text field. All you have to do is click on the URL to
		select it, and then copy it (e.g., ctrl+c).</p>
		<p><img src="/images/help/help_embed_permalink2.png" style="padding-left:2em"/></p>
		Even though the URL points to the <i>nabble.com</i> domain, the browser will redirect to the embedding page so that it will look
		exactly like it was when you first got the permalink (you should <a href="<%=Help.embed_redirect.url()%>">enable this option</a> to work).
		</p>
	<%;}};
	public static final Help embed_skin = new Help(
		39, %>How can I customize the appearance of my embeddable application?<%){
		public String getMetaDescription() { return "All Nabble applications are fully customizable. You can easily change the CSS stylesheet of your embeddable forum, photo gallery, newspaper, or blog."; }
		public String getMetaKeywords() { return "customizable, embeddable, forum, photo gallery, newspaper, blog, css, skins, examples, simple, easy"; }
		public String answer(){return %>
		<p>
			Go to "Options > Editor > Change appearance" link in your application.
			This screen has easy options to customize the basic look of your application:
		</p>
		<p><img src="/images/help/help_style_easy.png" style="padding-left:2em" alt="Here you can customize details about your application"/></p>
		<p>
			If you want a more detailed customization, you can go to the "Look and Feel" section in order to provide a custom CSS (Cascading Style Sheets) text for your application.
		</p>
		<p><img src="/images/help/help_style_tab.png" style="padding-left:2em"/></p>
		<p>As you can see in the image above, Nabble has some predefined styles ready for you. You can simply click on them to get their CSS into the text area.
			After that, you can modify the text the way you want. This is a valuable source of examples that you can also use to learn more about Nabble's style.</p>
		<h2>How to write your custom CSS</h2>
		<p>
			If you want to change the appearance of your application, you have to override <a href="<%=Shared.getCssPath()%>">Nabble's style</a>.
			The <b>cheat table</b> below can easily guide you through this process. Learn how each style is defined and change them as you want.
			Since colors may require hexadecimal codes, you can use a tool like <a href="http://www.colorpicker.com/" target="_new" rel="nofollow">Color Picker</a> to help you in this sense.
		</p>
		<p class="medium-border-color info-message" style="padding:.7em;border-width:1px;border-style:solid;">If you want to import an external CSS file, you should use the following command:<br/><font face=monospace size=3>@import url("http://www.example.com/file.css");</font></p>
		<style>
			.nabble .item-small { font-size:90%; }
			.nabble .color-box { border:1px solid #000000; }
		</style>
		<table class="editor-table" cellpadding="5" style="font-size:90%;">
			<tr class="shaded-bg-color">
				<td>Item to Change</td>
				<td>Default Value</td>
				<td>How to Change (Example)</td>
			</tr>
			<tr>
				<td><b>Font</b><div class="item-small">Font family and its size.</div></td>
				<td>Verdana 0.84em</td>
				<td>
					body, input, button, textarea, select {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;font-family: <b>Tahoma</b>;<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;font-size: <b>0.8em</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Background Color</b><div class="item-small">Background of the pages.</div></td>
				<td><span class="color-box" style="background-color:#FFFFFF">&nbsp;&nbsp;&nbsp;</span> FFFFFF (white)</td>
				<td>
					body, .nabble, .nabble .no-bg-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Text Color</b><div class="item-small">Color of texts (paragraphs, etc.).</div></td>
				<td><span class="color-box" style="background-color:#000000">&nbsp;&nbsp;&nbsp;</span> 000000 (black)</td>
				<td>
					.nabble,<br/>
					.nabble table,<br/>
					.nabble .info-message th,<br/>
					.nabble .message-text, .small,<br/>
					.nabble .editor-table td, p, form,<br/>
					small, ul, table td, .breadcrumbs {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
					}<br/>
				</td>
			</tr>
			<tr>
				<td><b>Link Color</b><div class="item-small">Color of unvisited links.</div></td>
				<td><span class="color-box" style="background-color:#0000EE">&nbsp;&nbsp;&nbsp;</span> 0000EE</td>
				<td>
					.nabble a:link,<br/>
					.nabble a.not-visited-link {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Link Color (Visited)</b><div class="item-small">Color of visited links.</div></td>
				<td><span class="color-box" style="background-color:#551A8B">&nbsp;&nbsp;&nbsp;</span> 551A8B</td>
				<td>
					.nabble a:visited,<br/>
					.nabble a.visited-link {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Header Text Color (H1)</b><div class="item-small">Color of header texts (big titles, etc.).</div></td>
				<td><span class="color-box" style="background-color:#333333">&nbsp;&nbsp;&nbsp;</span> 333333</td>
				<td>
					.nabble h1 {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
					}
				</td>
			</tr>
			<tr>
				<td><b>Header Text Color (H2)</b><div class="item-small">Color of small header texts.</div></td>
				<td><span class="color-box" style="background-color:#000000">&nbsp;&nbsp;&nbsp;</span> 000000</td>
				<td>
					.nabble h2 {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
					}
				</td>
			</tr>
			<tr>
				<td><b>Important Text</b><div class="item-small">Color of important texts.</div></td>
				<td><span class="color-box" style="background-color:#cc0000">&nbsp;&nbsp;&nbsp;</span> CC0000</td>
				<td>
					.nabble .important {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
					}
				</td>
			</tr>
            <tr>
				<td><b>Form Label Text</b><div class="item-small">Color of labels on forms and other special places.</div></td>
				<td><span class="color-box" style="background-color:#666666">&nbsp;&nbsp;&nbsp;</span> 666666</td>
				<td>
					.nabble th,<br/>
					.nabble .form-label,<br/>
					.nabble .weak-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
				<tr>
				<td><b>Light Background</b><div class="item-small">Color of light backgrounds, which are used in some areas of the screen.</div></td>
				<td><span class="color-box" style="background-color:#F5F5F5">&nbsp;&nbsp;&nbsp;</span> F5F5F5</td>
				<td>
					.nabble .light-bg-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Shaded Background</b><div class="item-small">Color of shaded backgrounds, which are used in some areas of the screen.</div></td>
				<td><span class="color-box" style="background-color:#EEEEEE">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
				<td>
					.nabble .shaded-bg-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Dark Background</b><div class="item-small">Color of dark backgrounds, which are used in some areas of the screen.</div></td>
				<td><span class="color-box" style="background-color:#DDDDDD">&nbsp;&nbsp;&nbsp;</span> DDDDDD</td>
				<td>
					.nabble .dark-bg-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Error Message</b><div class="item-small">Color of error messages.</div></td>
				<td><span class="color-box" style="border-color:#cc3300;background-color:#ffffcc">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>
				<td>
					.nabble .error-message {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Info Message</b><div class="item-small">Color of info messages.</div></td>
				<td><span class="color-box" style="border-color:#ffcc33;background-color:#ffffcc">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>
				<td>
					.nabble .info-message {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Highlight</b><div class="item-small">Color of highlights, which are used to catch user's attention.</div></td>
				<td><span class="color-box" style="background-color:#ffff99">&nbsp;&nbsp;&nbsp;</span> FFFF66</td>
				<td>
					.nabble .highlight {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Light Border Color</b><div class="item-small">Color of the light border, which is used to separate areas on the screen.</div></td>
				<td><span class="color-box" style="background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
				<td>
					.nabble .light-border-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Medium Border Color</b><div class="item-small">Color of the medium border, which is used to separate areas on the screen.</div></td>
				<td><span class="color-box" style="background-color:#cccccc">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>
				<td>
					.nabble .medium-border-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Dark Border Color</b><div class="item-small">Color of the dark border, which is used to separate areas on the screen.</div></td>
				<td><span class="color-box" style="background-color:#666666">&nbsp;&nbsp;&nbsp;</span> 666666</td>
				<td>
					.nabble .dark-border-color {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Dropdown Colors</b><div class="item-small">Colors of the dropdown box.</div></td>
				<td><span class="color-box" style="border-color:#cccccc;background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>
				<td>
					span.dropdown table {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Dropdown Item Colors</b><div class="item-small">Colors of each dropdown item.</div></td>
				<td>
					<span class="color-box" style="background-color:#0000EE">&nbsp;&nbsp;&nbsp;</span> 0000EE (foreground / normal and hover)<br/><br/>
					<span class="color-box" style="background-color:transparent">&nbsp;&nbsp;&nbsp;</span> Transparent (background normal)<br/><br/>
					<span class="color-box" style="background-color:#dddddd">&nbsp;&nbsp;&nbsp;</span> DDDDDD (background hover)
				</td>
				<td>
					<i>/* Normal */</i><br/>
					span.dropdown-item {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Date Color</b><div class="item-small">Color used to display dates of messages.</div></td>
				<td><span class="color-box" style="background-color:#6a6a6a">&nbsp;&nbsp;&nbsp;</span> 6A6A6A</td>
				<td>
					span.post-date {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Author Color</b><div class="item-small">Color used to display the author name on messages.</div></td>
				<td><span class="color-box" style="background-color:#116611">&nbsp;&nbsp;&nbsp;</span> 116611</td>
				<td>
					span.post-author {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Subject Color</b><div class="item-small">Color used to display subjects of messages.</div></td>
				<td><span class="color-box" style="background-color:#111166">&nbsp;&nbsp;&nbsp;</span> 111166</td>
				<td>
					.post-subject {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
            <tr>
				<td><b>Message Preview Color</b><div class="item-small">Color used to display the message preview line (snippets).</div></td>
				<td><span class="color-box" style="background-color:#909090">&nbsp;&nbsp;&nbsp;</span> 909090</td>
				<td>
					span.post-snippet {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Post Hover Color</b><div class="item-small">Color used to highlight a post when the user moves the mouse over it.</div></td>
				<td><span class="color-box" style="background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
				<td>
					.post-hover {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>
					}
				</td>
			</tr>
			<tr>
				<td><b>Post Box</b><div class="item-small">Box where the post is displayed.</div></td>
				<td><span class="color-box" style="background-color:#D9D9D9">&nbsp;&nbsp;&nbsp;</span> D9D9D9</td>
				<td>
					div.post-border {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
					}<br/>
				</td>
			</tr>
			<tr>
				<td><b>Relationship Lines</b><div style="font-size:80%">Lines that connect parents and children posts. This item requires images for the lines.</div></td>
				<td>N/A</td>
				<td>
					span.connect-line {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
					}<br/>
					<br/>
					span.connect-end {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
					}<br/>
					<br/>
					td.connect-end {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
					}<br/>
					<br/>
					td.connect-node {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
					}<br/>
					<br/>
					td.connect-node-closed {<br/>
					&nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
					}
				</td>
			</tr>
		</table>
	<%;}};
	public static final Help embed_redirect = new Help(
		40, %>Is my embedded application also available on Nabble's website?<%){public String answer(){return %>
		<p>
		Yes, but you have the option to redirect all visits to your website. In this case,
		when someone tries to access your application or posts, the browser will redirect to
		your website and the desired page will be displayed. This option allows our search
		engine to find messages from your application, but users will be redirected if they try
		to open those messages.
		 </p>
		<p>
		To configure this option, go to the page where your application is embedded in and click
		on <i>"Options > Embedding options"</i>:
		</p>
		<p><img src="/images/help/help_embed_default.png" style="padding-left:2em"/></p>
	<%;}};

	private static class Lazy {
		private static final String[] examples = new String[]{
			"<quote>some text</quote>",
			"<quote author='Bob'>some text</quote>",
			"<email>someone@nabble.com</email>",
			"<raw>\nuninterpreted HTML like <a href='#'>link</a>\n</raw>",
		};
		private static final String exampleRows;
		static {
			StringBuilder buf = new StringBuilder();
			for( String example : examples ) {
				buf.append( %>
					<tr>
						<td class="medium-border-color"><%=HtmlUtils.htmlEncode(example)%></td>
						<td class="second medium-border-color"><%=getHtml(example)%></td>
					</tr>
				<% );
			}
			exampleRows = buf.toString();
		}
	}

	private static String getHtml(String text) {
		try {
			Html html = new Html(text);
			HtmlListNamespace ns = new HtmlListNamespace(html,null, nabble.model.Message.Format.HTML);
			Program program = Program.getInstance(ModuleManager.getGenericModules());
			Template template = program.getTemplate( "process_message_html",
				BasicNamespace.class, HtmlListNamespace.class
			);
			template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(),
				new BasicNamespace(template), ns
			);
			return ns.toString();
		} catch(CompileException e) {
			logger.error("",e);
			throw new RuntimeException(e);
		}
	}

	public static final Help formatting = new Help(
		41, %>How are messages formatted?<%){public String answer(){return %>
		<p>For formatting, we use standard HTML tags.</p>

		<p>By default, your message is assumed to be text.  In this case, we will process some HTML tags but we will generally show your text as your entered it.  If you check the "Message is in HTML Format" checkbox, then you can enter HTML.</p>

		<p>We support some special tags which we process. Here is how they are used:</p>

		<p>
		<style type="text/css">
			table.type-examples {
				border-collapse:collapse;
			}
			table.type-examples td {
				padding: .5em;
				border-bottom-width:1px;
				border-bottom-style: solid;
			}
			table.type-examples td.second {
				border-left-width:1px;
				border-left-style: solid;
			}
		</style>
		<table class="type-examples">
			<tr>
				<td class="shaded-bg-color medium-border-color"><b>You Type</b></td>
				<td class="second shaded-bg-color medium-border-color"><b>We Show</b></td>
			</tr>
			<%=Lazy.exampleRows%>
		</table>
		</p>
	<%;}};

	public static final Help anonymous = new Help(
		42, %>What are anonymous users?<%){public String answer(){return %>
		<p>
			Anonymous users are users that didn't register with Nabble.
			All Nabble requires from them is a name that is displayed together with the message.
			Forums that allow anonymous users tend to have more participation, but they might generate confusion when users provide false or deceiving names.
			As the forum owner, you can always remove those messages from the forum.
		</p>
		<p>If you don't want anonymous users in your forum, you can disable them by accessing <b>Options > Users > Control anonymous users</b>.</p>
	<%;}};

	public static final Help mixed = new Help(
		43, %>How can I fix a mixed bulletin board?<%){public String answer(){return %>
		<p>
			In traditional forums, a bulleting board only shows subcategories where users are allowed to post messages.
			With Nabble, any forum can be displayed as a bulletin board and this might create a strange board with threads and forums mixed in the same list.
			This situation is not easy to create since Nabble doesn't allow users to post new topics under a board,
			but you could face this problem if you change a regular forum into a bulletin board format or move threads directly to the board.
		</p>
		<p>
			A mixed board generally isn't a good idea and should be fixed in order to avoid confusion.
			Note that Nabble doesn't hide threads in that view because this would increase the confusion among users.
			It is the forum owner's responsibility to keep the forum clean and organized.
		</p>
		<h3>How to fix it?</h3>
		<p>
			If your forum has a mixed bulletin board, do the following:
		</p>
		<ol>
			<li style="padding-bottom:.3em">If you have just a few threads under the board, you can move them one by one to the appropriate sub-forum.</li>
			<li>
				If the number of threads is high and moving one by one is inefficient, you should create a new board and move the current forum as a sub-forum of it.
				You might have to move other sub-forums around in order to rebuild the bulletin board.
			</li>
		</ol>
	<%;}};

	public static final Help embed_js_options = new Help(
		48, %>Can I change other behaviors of an embedded forum?<%){public String answer(){return %>
		<p>
			Yes. Besides the <a href="<%=Help.embed_redirect.url()%>" rel="nofollow">redirect option</a>, we have a few options that you can use to change other behaviors of your embedded forum.
			These options must be set as javascript variables in your HTML page (place them before the embedding code).
			For example, you can add the following code to your page:
		</p>
		<div style="font-family:monospace;margin:1em;">
			&lt;script type="text/javascript"><br>
			&nbsp;&nbsp;&nbsp;nabble_width = "500px";<br>
			&nbsp;&nbsp;&nbsp;nabble_ignore_scroll = true;<br>
			&nbsp;&nbsp;&nbsp;nabble_ignore_title = true;<br>
			&lt;/script><br>
		</div>
		<style type="text/css">
			table.info td {
				padding: .5em;
			}
			tr.header td {
				font-weight:bold;
				padding: .1em .5em;
			}
		</style>
		<table class="info">
			<tr class="header">
				<td class="shaded-bg-color">Variable</td>
				<td class="shaded-bg-color">Description</td>
			</tr>
			<tr>
				<td>nabble_width</td>
				<td>
					Use this variable if you want to have an embedded forum with fixed width.
					The default value is "100%" and you can change it according to standard CSS rules
					(e.g., "50%", "10em", "500px").
				</td>
			</tr>
			<tr>
				<td>nabble_ignore_scroll</td>
				<td>
					Set this variable to <b>true</b> if you don't want the embedded forum to
					scroll to specific posts or messages. By default, the embedded forum will
					eventually scroll the page to specific messages depending on the user navigation
					and clicked links.
				</td>
			</tr>
			<tr>
				<td>nabble_scroll_top</td>
				<td>
					Set this variable to <b>true</b> if you want the embedded forum to
					scroll to the top of your HTML page whenever the user navigates through the forum.
					By default, the forum will scroll to its top, which is not necessarily the top of your
					HTML page.
				</td>
			</tr>
			<tr>
				<td>nabble_ignore_title</td>
				<td>
					Set this variable to <b>true</b> if you don't want the embedded forum to
					change the title of your HTML page. By default, the embedded forum will
					set the title of your page with the forum name.
				</td>
			</tr>
		</table>
	<%;}};

	public static final Help online = new Help(
		49, %>Is it possible to show which users are online?<%){
		public String getMetaDescription() { return "Nabble applications display who is online when you browse forums, photo galleries, newspapers and blogs."; }
		public String getMetaKeywords() { return "online users, forum, photo gallery, newspaper, blog, free forum, free blog, free photo gallery"; }
		public String answer(){return %>
		<p>
			Yes, all Nabble applications (e.g., forum, photo gallery, newspaper, blog, etc.) have this feature.
			Online users have a green circle at the bottom right corner of their avatars.
		</p>
	<%;}};

	public static final Help domain_names = new Help(
		51, %>Can I access my forum with my own domain name?<%){
		public String answer(){return %>
		<p>
			Yes. Nabble allows you to change the domain name configuration of your application (e.g., forum, gallery, blog, news, etc.)
			by clicking on "Options > Editor > Change domain name". If you decide to use your own domain name, you will have to change
			its DNS configuration and make it resolve to the Nabble server where your forum is located (you can find instructions on the configuration screen).
		</p>
		<p>
			There are some advantages about custom domain names that you should be aware of. One of them is that you can &ndash; for example &ndash;
			use Google Custom Search to let users search your forum and your website at the same time. Another advantage is that Nabble will allow you
			to run custom JavaScript code in your pages <i>(to be implemented / Templates feature)</i>.
		</p>
	<%;}};

	public static final Help inactivity_deletion = new Help(
		53, %>Will Nabble delete my forum, posts or anything I have created?<%){
		public String answer(){return %>
		<p>
			Nabble has a garbage collector process that searches for <b>inactive</b> forums, topics or messages
			in the database. If you receive an email with forums scheduled for deletion, you have to first understand
			why they are in that list. The most common cases are:
		</p>
		<p>
			<b>(1) Your forum hasn't been viewed by anyone recently</b>:
			If your forum is not dead, you can just save it from deletion by following the
			instructions on its page.
		</p>
		<p>
			<b>(2) Your post was removed from the forum</b>: the forum owner (or some other user
			that you replied to) might have moved your post (and replies) out of the forum. This is different from
			physical deletion. When a post is removed from a forum, it still exists in Nabble's database and can be found in
			the author's profile page. Such messages are not part of any forum and are probably not read by anyone.
			So you shouldn't care much about those messages.
		</p>

		<p class="shaded-bg-color" style="padding:.5em">
			In summary, only root nodes are checked for deletion.
			This means that only threads that have been removed or inactive root level forums will be caught by the garbage collector process.
		</p>

		<h2>Each visit counts</h2>
		<p>Threads inside an active forum will NOT be scheduled for deletion, even if they don't get any visits for a long time
		(although other threads in the same forum must get visits in order to keep the forum active). <b>So each visit adds activity
		points to the whole structure</b>. On the other hand, when a post or any node is removed from the structure,
		it will become a separated structure with its own activity level.</p>

		<h2>How deletion works</h2>
		<p>If your forum gets deleted, the threads under it are not immediately deleted.
		What happens is that after the forum is deleted, these threads become top level independent nodes and
		then they are subject to the same deletion process after some weeks.  So if a forum owner allows his forum
		to be deleted, thread starters can still save their threads.</p>

		<p class="shaded-bg-color" style="padding:.5em;font-weight:bold">In any case, you can save your forums, topics and messages from deletion by following the
		instructions on their page. You should also know that you can download the archives of your application
		by clicking on "Options > Download archives" (if you are the administrator).
		<a href="<%=Help.export.url()%>">Click here</a> for more information.</p>
	<%;}};

	public static final Help export = new Help(
		54, %>Can I export my forum to a standard format?<%){
		public String answer(){return %>
		<p>Yes, Nabble can export your forum data, subcategories and messages to the standard XML format.
			You can download these files by clicking on "Options > Download archives". You will realize that Nabble
			doesn't have these files ready for you, so first you will have to build them. This process may take some
			minutes or even hours depending on the size of your application. You will receive an email when this process
			has finished.</p>
		<p>To make downloading easier, Nabble groups XML files into zip archives. Each zip archive contains thousands
			of XML files, where each file represents a node in the forum structure (<a href="<%=Jtp.homeContextUrl()%>/back-end.html">learn more</a>).
			Below you can find the description of each field in the XML file, which may help you in creating a parser for this information.</p>

			<table class="editor-table" cellpadding="5" style="font-size:90%;">
			<tr class="shaded-bg-color">
			<th align="left">Field</th>
			<th align="left">Description</th>
			</tr>
			<tr>
			<td>exportId</td>
			<td>ID of the node represented by the XML file. This ID may be referenced by other XML files as a way to express relationship.</td>
			</tr>
			<tr>
			<td>kind</td>
			<td>Kind of the node ("APP" for applications or "POST" for messages).</td>
			</tr>
			<tr>
			<td>ownerEmail</td>
			<td>Email of the user who created the node represented by the XML file.</td>
			</tr>
			<tr>
			<td>ownerName</td>
			<td>Name of the user who created the node represented by the XML file.</td>
			</tr>
			<tr>
			<td>ownerAnonymousId</td>
			<td>If the node was created by an anonymous user, this ID will identify this user (anonymous users are not registered and thus have no email information).</td>
			</tr>
			<tr>
			<td>subject</td>
			<td>Title/subject of this node.</td>
			</tr>
			<tr>
			<td>message</td>
			<td>Message contents of this node.</td>
			</tr>
			<tr>
			<td>msgFmt</td>
			<td>Format of the message (m=mail, h=html or t=text).</td>
			</tr>
			<tr>
			<td>parentId</td>
			<td>ID of the parent node.</td>
			</tr>
			<tr>
			<td>whenCreated</td>
			<td>Date/Time when the node was created (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>
			</tr>
			<tr>
			<td>hasReplyAlert</td>
			<td>true/false if user wants to receive new replies by email.</td>
			</tr>
			<tr>
			<td>whenUpdated</td>
			<td>Date/Time when the node was updated (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>
			</tr>
			<tr>
			<td>restriction</td>
			<td>Type of restriction for this node (i.e., indicates who can view and post messages under this node): NONE, REGISTERED, PROTECTED_CHILDREN, REGISTERED_PROTECTED_CHILDREN, PROTECTED, PRIVATE, PROTECTED_READ_ONLY, PRIVATE_READ_ONLY.</td>
			</tr>
			<tr>
			<td>type</td>
			<td>Node/Application type (FORUM, BOARD, CATEGORY, NEWS, GALLERY, BLOG, COMMENT)</td>
			</tr>
			<tr>
			<td>customStyle</td>
			<td>Custom CSS stylesheet created for this node.</td>
			</tr>
			<tr>
			<td>pin</td>
			<td>Order of this node in the pinned list of the parent node.</td>
			</tr>
			<tr>
			<td>files</td>
			<td>Files attached to this node. Creates one entry for each file. Contents are byte arrays encrypted using Base64 encoding.</td>
			</tr>
			</table>
	<%;}};

	public static final Help pinned_subapps = new Help(
		55, %>What is the difference between pinned and unpinned sub-forums?<%){
		public String answer(){return %>
			<p>
				Before addressing this question, you have to understand how things work in the background.
				Essentially, Nabble has a node-architecture that resembles a file system, where forums (and other apps)
				are like folders and posts are like files. Forums and posts can be pinned to their parent in order to always
				be displayed on top. Here is an illustration:
			</p>

			<p><img src="/images/help/help_node_structure.png" style="padding-left:2em"/></p>

			<p>
				Only forum owners can pin sub-forums and topics. Actually, sub-forums created by owners are automatically
				pinned, and this makes a big difference to the forum structure. Nabble gives more priority to pinned
				sub-forums when it comes to how the forum front page looks. Unpinned sub-forums (also called
				<b>floating sub-forums</b>) are not part of the real forum structure and they float like normal topics.
				Here is a screenshot:
			</p>

			<p><img src="/images/help/help_sub_forums.png" style="padding-left:2em"/></p>

			<p>
				As you can see, floating sub-forums aren't much different than normal topics (except they have a folder
				icon close to them). When they receive new posts, they jump to the top just like other topics that receive
				new replies.
			</p>
	<%;}};

	public static final Help mixed_lengths = new Help(
		56, %>How can I customize the "Mixed" application type?<%){
		public String answer(){return %>
		<p>
			If you have an app with the Mixed type and you want to customize the number of topics in the front page, first click on "Options > Application > Change appearance".
			In the "Preferences" group, there is a field for the number of topics in the mixed style:<br/><br/>
			<img src="/images/help/mixed_lengths.png" alt="topics configuration for mixed app type"/>
			<br/><br/>
			Enter a comma-separated list of values that represent how many topics each section of the mixed view should display.<br>
			<b>1st value</b> = number of topics to be displayed for the current application<br>
			<b>2nd value</b> = number of topics to be displayed for the first subcategory<br>
			<b>3rd value</b> = number of topics to be displayed for the second subcategory<br>
			and so on...<br>
			The <b>last number</b> is used for all other sections.<br>
			<div class="important">(All values must range from 1 to 20)</div>
			<br>Some examples:<br>
			<b>6</b> = All sections will display 6 topics.<br>
			<b>6,3</b> = 6 topics for the current application, 3 topics for all subcategories.<br>
			<b>6,7,6</b> = 6 topics for the current application, 7 topics for the fist subcategory and 6 topics for all other subcategories.<br>
			<b>6,5,5,5,6</b> = 6 topics for the current application, 5 topics for the first three subcategories and 6 topics for all other subcategories.<br>
		</p>
	<%;}};

	public static void index() {
		Lucene.addHelp(map.values());
	}
}
%>