Mercurial Hosting > nabble
annotate src/nabble/view/lib/help/Help.jmp @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 72765b66e2c3 |
children |
rev | line source |
---|---|
0 | 1 <% |
2 package nabble.view.lib.help; | |
3 | |
4 import fschmidt.html.Html; | |
5 import fschmidt.util.java.HtmlUtils; | |
6 import nabble.model.Lucene; | |
7 import nabble.model.Message; | |
8 import nabble.naml.compiler.CompileException; | |
9 import nabble.naml.compiler.Template; | |
10 import nabble.naml.compiler.Program; | |
11 import nabble.naml.compiler.TemplatePrintWriter; | |
12 import nabble.naml.namespaces.BasicNamespace; | |
13 import nabble.view.lib.Jtp; | |
14 import nabble.view.lib.Shared; | |
15 import nabble.view.web.template.HtmlListNamespace; | |
16 import nabble.modules.ModuleManager; | |
17 import org.slf4j.Logger; | |
18 import org.slf4j.LoggerFactory; | |
19 | |
20 import javax.servlet.http.HttpServletRequest; | |
21 import java.io.IOException; | |
22 import java.util.Collections; | |
23 import java.util.HashMap; | |
24 import java.util.Map; | |
25 | |
26 | |
27 public abstract class Help { | |
28 private static final Logger logger = LoggerFactory.getLogger(Help.class); | |
29 | |
30 private static final Map<Integer,Help> map = new HashMap<Integer,Help>(); | |
31 public final int id; | |
32 public final String question; | |
33 | |
34 Help(int id,String question) { | |
35 this.id = id; | |
36 this.question = question; | |
37 if( map.put(id,this) != null ) | |
38 throw new RuntimeException("duplicate id"); | |
39 } | |
40 | |
41 public abstract String answer(); | |
42 public String getMetaDescription() { return null; } | |
43 public String getMetaKeywords() { return null; } | |
44 | |
45 public String path() { | |
46 return "/help/Answer.jtp?id=" + id; | |
47 } | |
48 | |
49 public String url() { | |
50 return Jtp.defaultContextUrl()+path(); | |
51 } | |
52 | |
53 public String link() { | |
54 return %><a href="<%=url()%>"><%=question%></a><%; | |
55 } | |
56 | |
57 public String url(HttpServletRequest request) throws IOException { | |
58 return url(); | |
59 } | |
60 | |
61 public String link(HttpServletRequest request) throws IOException { | |
62 return link(); | |
63 } | |
64 | |
65 public static Help getHelp(int id) { | |
66 return map.get(id); | |
67 } | |
68 | |
69 public static final Help what = new Help( | |
70 1, %>What is Nabble?<%){public String answer(){return %> | |
71 <p> | |
72 Nabble wants to improve public discussions on the web and provide useful embeddable applications to end users. | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
73 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. |
0 | 74 </p> |
75 <%;}}; | |
76 public static final Help free = new Help( | |
77 2, %>Is Nabble really free?<%){public String answer(){return %> | |
78 <p> | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
79 Yes. Nabble is absolutely free and will remain free to the users. This includes the end users |
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
80 and webmasters. If your website uses Nabble as a hosted forum, |
0 | 81 be assured that there is no limit on traffic or disk space, no hosting fees, no pay-for versions or label schemes. |
82 Nabble is just free. | |
83 </p> | |
84 <%;}}; | |
85 public static final Help sell = new Help( | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
86 10, %>Can Nabble sell the data?<%){public String answer(){return %> |
0 | 87 <p> |
88 It's like asking can Google sell the web pages in its index? | |
89 Absolutely not. A message belongs to its author. Besides, an email address is sacred. | |
90 </p> | |
91 <%;}}; | |
92 public static final Help delpost = new Help( | |
93 13, %>How do I delete my posts?<%){public String answer(){return %> | |
94 <p> | |
95 Log in to (or register with) Nabble and then you can find and delete your posts on Nabble. | |
96 </p> | |
97 <%;}}; | |
98 public static final Help moderation = new Help( | |
99 16, %>How do I remove SPAM or bad users from my forum?<%){public String answer(){return %> | |
100 <p> | |
101 SPAM and bad posts are common problems for forums. | |
102 With Nabble, forum owners can easily remove unwanted messages and ban bad users. | |
103 Both actions are available in the dropdown menu close to the message. | |
104 </p> | |
105 <p> | |
106 We should remember that anonymous users can't be banned. | |
107 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. | |
108 </p> | |
109 <%;}}; | |
110 public static final Help stopAlert = new Help( | |
111 19, %>How do I stop an email alert?<%){public String answer(){return %> | |
112 <p> | |
113 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. | |
114 <%;}}; | |
115 public static final Help restrictions = new Help( | |
116 20, %>How do I control who can view and post in my forum? <%){public String answer(){return %> | |
117 <p> | |
118 Under the "Options" menu, under "Users", is the option "Who can view & post". | |
119 This page controls who can view and post in this forum. But if this forum has a parent forum | |
120 and if the parent forum has restrictions, then those restriction will also apply. | |
121 This means that restrictions are only added as you go down your forum hierarchy. | |
122 This makes sense because when you set restrictions, you assume that they will apply to | |
123 all sub-forums as well. | |
124 </p> | |
125 <p> | |
126 Let's look at a few examples. Suppose you have a forum hierarchy and want to ban anonymous users | |
127 throughout. You would go to the top forum and select that only registered users can create new topics and replies: | |
128 </p> | |
129 <p><img src="/images/help/registered_only.png" width=505 height=108 style="padding-left:2em"/></p> | |
130 <p> | |
131 Now suppose that under the top forum, you have an "Official Business" forum where only members of | |
132 a group should be allowed to post. You would select that only members can create new topics and replies: | |
133 </p> | |
134 <p><img src="/images/help/members_only.png" width=505 height=108 style="padding-left:2em"/></p> | |
135 <p> | |
136 You would then authorize the right members for that "Official Business" forum only. | |
137 </p> | |
138 <p> | |
139 Now suppose that under that forum, you have an "Announcements" forum where only the organizer should | |
140 post. The organizer should create that forum and select again that only members can post and reply in that forum, | |
141 but this time not authorize anyone else. Now only the owner of the "Announcements" forum is authorized | |
142 to post there. But suppose you want to allow members to comment on announcements but not to | |
143 make announcements. Then instead of members can create new topics, but let everyone reply. | |
144 Note that "Everyone" means everyone who would otherwise be allowed to post. So now within the "Announcements" forum, | |
145 only the owner can create threads, but all members can reply to those threads. | |
146 </p> | |
147 <%;}}; | |
148 public static final Help listSpam = new Help( | |
149 22, %>My list received spam from Nabble. What do I do to prevent it from happening again?<%){public String answer(){return %> | |
150 <p> | |
151 We hate spam. We sincerely apologize if a spam comes to your list through Nabble. | |
152 </p> | |
153 <p> | |
154 Please let us know through the <a href="<%=Jtp.supportUrl()%>">support forum</a> if you see or suspect spam. We will take actions immediately. | |
155 </p> | |
156 <p> | |
157 Forum owners can also <a href="<%=Help.moderation.url()%>" target="_top" rel="nofollow">delete spam and ban bad users</a>. | |
158 </p> | |
159 <%;}}; | |
160 public static final Help cataloging = new Help( | |
161 24, %>What's the right way to organize forums and messages?<%){public String answer(){return %> | |
162 <p> | |
163 Nabble offers a flexible way to organize forums and messages. | |
164 </p> | |
165 <p> | |
166 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. | |
167 </p> | |
168 <h3>Create a child forum only when it is truly needed</h3> | |
169 <p> | |
170 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. | |
171 </p> | |
172 <h3>Force users to select a child forum to post</h3> | |
173 <p> | |
174 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. | |
175 </p> | |
176 <h3>Keep the hierarchy efficient</h3> | |
177 <p> | |
178 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. | |
179 </p> | |
180 <%;}}; | |
181 public static final Help password = new Help( | |
182 25, %>How does Nabble store passwords?<%){public String answer(){return %> | |
183 <p> | |
184 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. | |
185 </p> | |
186 <p> | |
187 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. | |
188 </p> | |
189 <%;}}; | |
190 public static final Help seo = new Help( | |
191 27, %>Is my application optimized for search engines?<%){public String answer(){return %> | |
192 <p> | |
193 Yes. Nabble's content pages are designed with SEO (Search Engine Optimization) in mind. | |
194 Our SEO effort goes further beyond the usual tags and headers to advanced techniques such as URL encoding and PageRank distribution. | |
195 </p> | |
196 <%;}}; | |
197 public static final Help search = new Help( | |
198 31, %>What search features does Nabble provide?<%){public String answer(){return %> | |
199 <p> | |
200 Nabble allows many flavors of specific search. | |
201 </p> | |
202 <ul> | |
203 <li>You can search entire Nabble (with the help of Google Search). | |
204 <li>You can search within an application (e.g., forum, photo gallery, newspaper, blog) to include all subcategories below. | |
205 <li>You can narrow your search result by date. | |
206 <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. | |
207 <li>Nabble search supports keyword stemming, i.e. search, searching, searched, searches... | |
208 </ul> | |
209 | |
210 <h2>Examples</h2> | |
211 | |
212 <p> | |
213 <table class="search-tips-table" style=" | |
214 width: 100%; | |
215 border-collapse: collapse; | |
216 "> | |
217 <style type="text/css"> | |
218 .nabble .search-tips-table th { | |
219 text-align: left; | |
220 font-weight: bold; | |
221 padding: .5em; | |
222 vertical-align: top; | |
223 } | |
224 .nabble .search-tips-table td { | |
225 padding: .3em; | |
226 border-bottom-width: 1px; | |
227 border-bottom-style: solid; | |
228 vertical-align: top; | |
229 } | |
230 </style> | |
231 <tr> | |
232 <th>Your search</th> | |
233 <th>What will search results show</th> | |
234 </tr> | |
235 <tr> | |
236 <td class="info-message"><code class="important">hello world</code></td> | |
237 | |
238 <td class="info-message">Messages with both <code class="important">hello</code> and <code class="important">world</code></td> | |
239 </tr> | |
240 <tr> | |
241 <td class="info-message"><code class="important">"hello world"</code></td> | |
242 <td class="info-message">Messages with the phrase <code class="important">hello world</code></td> | |
243 | |
244 </tr> | |
245 <tr> | |
246 <td class="info-message"><code class="important">hello OR world</code></td> | |
247 <td class="info-message">Messages with either <code class="important">hello</code> or <code class="important">world</code></td> | |
248 </tr> | |
249 <tr> | |
250 | |
251 <td class="info-message"><code class="important">hello AND world</code></td> | |
252 <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> | |
253 </tr> | |
254 <tr> | |
255 <td class="info-message"><code class="important">"hello world" lucene</code></td> | |
256 | |
257 <td class="info-message">Messages with both the phrase <code class="important">hello world</code> and <code class="important">lucene</code></td> | |
258 </tr> | |
259 | |
260 | |
261 <tr> | |
262 <td class="info-message"><code class="important">hello NOT world</code></td> | |
263 <td class="info-message">Messages that have <code class="important">hello</code>, but do not have <code class="important">world</code></td> | |
264 | |
265 </tr> | |
266 <tr> | |
267 <td class="info-message"><code class="important">("hello world" lucene) OR apache</code></td> | |
268 <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> | |
269 </tr> | |
270 | |
271 | |
272 <tr> | |
273 <td class="info-message"><code class="important">lucene NOT "hello world"</code></td> | |
274 <td class="info-message">Messages with <code class="important">lucene</code>, but not the phrase <code class="important">hello world</code></td> | |
275 </tr> | |
276 <tr> | |
277 <td class="info-message"><code class="important">hello*</code></td> | |
278 | |
279 <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> | |
280 </tr> | |
281 <tr> | |
282 <td class="info-message"><code class="important">par?</code></td> | |
283 | |
284 <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> | |
285 </tr> | |
286 <tr> | |
287 <td class="info-message"><code class="important">subject:"hello world"</code></td> | |
288 <td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">subject</code> only.</td> | |
289 | |
290 </tr> | |
291 <tr> | |
292 <td class="info-message"><code class="important">subject:(hello world)</code></td> | |
293 <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> | |
294 </tr> | |
295 <tr> | |
296 <td class="info-message"><code class="important">message:"hello world"</code></td> | |
297 <td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">message body</code> only.</td> | |
298 </tr> | |
299 <tr> | |
300 <td class="info-message"><code class="important">author:"Erik Hatcher"</code></td> | |
301 <td class="info-message">Messages of <code class="important">Erik Hatcher</code> only.</td> | |
302 </tr> | |
303 <tr> | |
304 <td class="info-message"><code class="important">roam~</code></td> | |
305 <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> | |
306 </tr> | |
307 </table> | |
308 </p> | |
309 | |
310 <a name="search1"><h2>Search Using Words or Phrases </h2></a> | |
311 <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> | |
312 | |
313 <a name="search2"><h2>Boolean Searches</h2></a> | |
314 <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> | |
315 | |
316 <ul> | |
317 <li>To search for documents that contain "debian linux" and "java" use: "debian linux" AND java </li> | |
318 <li>To search for documents that contain either "jetty" or "resin" use: jetty OR resin </li> | |
319 <li>To search for documents that contain "linux" but not "kernel" use: linux NOT kernel </li> | |
320 <li>To search for documents that contain "lucene" or "nutch" but not "apache" use: (lucene OR nutch) NOT apache </li> | |
321 </ul> | |
322 | |
323 <a name="search3"><h2>Search Messages, Subjects, Authors</h2></a> | |
324 <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> | |
325 | |
326 <ul> | |
327 <li>subject:"lord of the rings" message:film </li> | |
328 <li>author:"doug cutting" message:lucene </li> | |
329 </ul> | |
330 | |
331 <p>If you don't specify the type of search, it will search all -- message, subject, author. </p> | |
332 | |
333 <a name="search4"><h2>Wildcard Searches </h2></a> | |
334 <p>Nabble allows you to do both single and multiple character wildcard searches. </p> | |
335 | |
336 <ul> | |
337 <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> | |
338 <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> | |
339 <li>You can also use the wildcard searches in the middle of a term.</li> | |
340 </ul> | |
341 | |
342 <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> | |
343 | |
344 <a name="search5"><h2>Fuzzy Searches</h2> </a> | |
345 <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> | |
346 | |
347 <p>This search will find terms like foam and roams. </p> | |
348 | |
349 <a name="search6"><h2>Proximity Searches </h2></a> | |
350 <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> | |
351 | |
352 <%;}}; | |
353 public static final Help embed_what_how = new Help( | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
354 36, %>Embeddable Forum, Photo Gallery, News, Blog & Other Apps!<%){ |
0 | 355 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."; } |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
356 public String getMetaKeywords() { return "free, embeddable, forum, photo gallery, newspaper, blog, easy, embedding, embedded, embed my forum, hosted, website, site, HTML"; } |
0 | 357 public String answer(){return %> |
358 | |
359 <h2>All Nabble apps are naturally embeddable!</h2> | |
360 | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
361 <p>Yes, with Nabble, you get an embeddable forum, embeddable photo gallery, embeddable news & embeddable blog... and there are more to come!</p> |
0 | 362 <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> |
363 <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> | |
364 | |
365 <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> | |
366 <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> | |
367 <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> | |
368 <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> | |
369 <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> | |
370 <%;}}; | |
371 | |
372 public static final Help embed_permalinks = new Help( | |
373 38, %>How do I link to a page in an embedded application?<%){public String answer(){return %> | |
374 <p> | |
375 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. | |
376 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> | |
377 <p><img src="/images/help/help_embed_permalink.png" style="padding-left:2em"/></p> | |
378 <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 | |
379 select it, and then copy it (e.g., ctrl+c).</p> | |
380 <p><img src="/images/help/help_embed_permalink2.png" style="padding-left:2em"/></p> | |
381 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 | |
382 exactly like it was when you first got the permalink (you should <a href="<%=Help.embed_redirect.url()%>">enable this option</a> to work). | |
383 </p> | |
384 <%;}}; | |
385 public static final Help embed_skin = new Help( | |
386 39, %>How can I customize the appearance of my embeddable application?<%){ | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
387 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."; } |
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
388 public String getMetaKeywords() { return "customizable, embeddable, forum, photo gallery, newspaper, blog, css, skins, examples, simple, easy"; } |
0 | 389 public String answer(){return %> |
390 <p> | |
391 Go to "Options > Editor > Change appearance" link in your application. | |
392 This screen has easy options to customize the basic look of your application: | |
393 </p> | |
394 <p><img src="/images/help/help_style_easy.png" style="padding-left:2em" alt="Here you can customize details about your application"/></p> | |
395 <p> | |
396 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. | |
397 </p> | |
398 <p><img src="/images/help/help_style_tab.png" style="padding-left:2em"/></p> | |
399 <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. | |
400 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> | |
401 <h2>How to write your custom CSS</h2> | |
402 <p> | |
403 If you want to change the appearance of your application, you have to override <a href="<%=Shared.getCssPath()%>">Nabble's style</a>. | |
404 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. | |
405 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. | |
406 </p> | |
407 <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> | |
408 <style> | |
409 .nabble .item-small { font-size:90%; } | |
410 .nabble .color-box { border:1px solid #000000; } | |
411 </style> | |
412 <table class="editor-table" cellpadding="5" style="font-size:90%;"> | |
413 <tr class="shaded-bg-color"> | |
414 <td>Item to Change</td> | |
415 <td>Default Value</td> | |
416 <td>How to Change (Example)</td> | |
417 </tr> | |
418 <tr> | |
419 <td><b>Font</b><div class="item-small">Font family and its size.</div></td> | |
420 <td>Verdana 0.84em</td> | |
421 <td> | |
422 body, input, button, textarea, select {<br/> | |
423 font-family: <b>Tahoma</b>;<br/> | |
424 font-size: <b>0.8em</b>;<br/> | |
425 } | |
426 </td> | |
427 </tr> | |
428 <tr> | |
429 <td><b>Background Color</b><div class="item-small">Background of the pages.</div></td> | |
430 <td><span class="color-box" style="background-color:#FFFFFF"> </span> FFFFFF (white)</td> | |
431 <td> | |
432 body, .nabble, .nabble .no-bg-color {<br/> | |
433 background-color: <b>#<color></b>;<br/> | |
434 } | |
435 </td> | |
436 </tr> | |
437 <tr> | |
438 <td><b>Text Color</b><div class="item-small">Color of texts (paragraphs, etc.).</div></td> | |
439 <td><span class="color-box" style="background-color:#000000"> </span> 000000 (black)</td> | |
440 <td> | |
441 .nabble,<br/> | |
442 .nabble table,<br/> | |
443 .nabble .info-message th,<br/> | |
444 .nabble .message-text, .small,<br/> | |
445 .nabble .editor-table td, p, form,<br/> | |
446 small, ul, table td, .breadcrumbs {<br/> | |
447 color: <b>#<color></b>;<br/> | |
448 }<br/> | |
449 </td> | |
450 </tr> | |
451 <tr> | |
452 <td><b>Link Color</b><div class="item-small">Color of unvisited links.</div></td> | |
453 <td><span class="color-box" style="background-color:#0000EE"> </span> 0000EE</td> | |
454 <td> | |
455 .nabble a:link,<br/> | |
456 .nabble a.not-visited-link {<br/> | |
457 color: <b>#<color></b>;<br/> | |
458 } | |
459 </td> | |
460 </tr> | |
461 <tr> | |
462 <td><b>Link Color (Visited)</b><div class="item-small">Color of visited links.</div></td> | |
463 <td><span class="color-box" style="background-color:#551A8B"> </span> 551A8B</td> | |
464 <td> | |
465 .nabble a:visited,<br/> | |
466 .nabble a.visited-link {<br/> | |
467 color: <b>#<color></b>;<br/> | |
468 } | |
469 </td> | |
470 </tr> | |
471 <tr> | |
472 <td><b>Header Text Color (H1)</b><div class="item-small">Color of header texts (big titles, etc.).</div></td> | |
473 <td><span class="color-box" style="background-color:#333333"> </span> 333333</td> | |
474 <td> | |
475 .nabble h1 {<br/> | |
476 color: <b>#<color></b>;</br> | |
477 } | |
478 </td> | |
479 </tr> | |
480 <tr> | |
481 <td><b>Header Text Color (H2)</b><div class="item-small">Color of small header texts.</div></td> | |
482 <td><span class="color-box" style="background-color:#000000"> </span> 000000</td> | |
483 <td> | |
484 .nabble h2 {<br/> | |
485 color: <b>#<color></b>;</br> | |
486 } | |
487 </td> | |
488 </tr> | |
489 <tr> | |
490 <td><b>Important Text</b><div class="item-small">Color of important texts.</div></td> | |
491 <td><span class="color-box" style="background-color:#cc0000"> </span> CC0000</td> | |
492 <td> | |
493 .nabble .important {<br/> | |
494 color: <b>#<color></b>;</br> | |
495 } | |
496 </td> | |
497 </tr> | |
498 <tr> | |
499 <td><b>Form Label Text</b><div class="item-small">Color of labels on forms and other special places.</div></td> | |
500 <td><span class="color-box" style="background-color:#666666"> </span> 666666</td> | |
501 <td> | |
502 .nabble th,<br/> | |
503 .nabble .form-label,<br/> | |
504 .nabble .weak-color {<br/> | |
505 color: <b>#<color></b>;<br/> | |
506 } | |
507 </td> | |
508 </tr> | |
509 <tr> | |
510 <td><b>Light Background</b><div class="item-small">Color of light backgrounds, which are used in some areas of the screen.</div></td> | |
511 <td><span class="color-box" style="background-color:#F5F5F5"> </span> F5F5F5</td> | |
512 <td> | |
513 .nabble .light-bg-color {<br/> | |
514 background-color: <b>#<color></b>;<br/> | |
515 } | |
516 </td> | |
517 </tr> | |
518 <tr> | |
519 <td><b>Shaded Background</b><div class="item-small">Color of shaded backgrounds, which are used in some areas of the screen.</div></td> | |
520 <td><span class="color-box" style="background-color:#EEEEEE"> </span> EEEEEE</td> | |
521 <td> | |
522 .nabble .shaded-bg-color {<br/> | |
523 background-color: <b>#<color></b>;<br/> | |
524 } | |
525 </td> | |
526 </tr> | |
527 <tr> | |
528 <td><b>Dark Background</b><div class="item-small">Color of dark backgrounds, which are used in some areas of the screen.</div></td> | |
529 <td><span class="color-box" style="background-color:#DDDDDD"> </span> DDDDDD</td> | |
530 <td> | |
531 .nabble .dark-bg-color {<br/> | |
532 background-color: <b>#<color></b>;<br/> | |
533 } | |
534 </td> | |
535 </tr> | |
536 <tr> | |
537 <td><b>Error Message</b><div class="item-small">Color of error messages.</div></td> | |
538 <td><span class="color-box" style="border-color:#cc3300;background-color:#ffffcc"> </span> FFFFCC</td> | |
539 <td> | |
540 .nabble .error-message {<br/> | |
541 border-color:<b>#<color></b>;<br/> | |
542 background-color: <b>#<color></b>;<br/> | |
543 } | |
544 </td> | |
545 </tr> | |
546 <tr> | |
547 <td><b>Info Message</b><div class="item-small">Color of info messages.</div></td> | |
548 <td><span class="color-box" style="border-color:#ffcc33;background-color:#ffffcc"> </span> FFFFCC</td> | |
549 <td> | |
550 .nabble .info-message {<br/> | |
551 border-color:<b>#<color></b>;<br/> | |
552 background-color: <b>#<color></b>;<br/> | |
553 } | |
554 </td> | |
555 </tr> | |
556 <tr> | |
557 <td><b>Highlight</b><div class="item-small">Color of highlights, which are used to catch user's attention.</div></td> | |
558 <td><span class="color-box" style="background-color:#ffff99"> </span> FFFF66</td> | |
559 <td> | |
560 .nabble .highlight {<br/> | |
561 background-color: <b>#<color></b>;<br/> | |
562 } | |
563 </td> | |
564 </tr> | |
565 <tr> | |
566 <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> | |
567 <td><span class="color-box" style="background-color:#eeeeee"> </span> EEEEEE</td> | |
568 <td> | |
569 .nabble .light-border-color {<br/> | |
570 border-color: <b>#<color></b>;<br/> | |
571 } | |
572 </td> | |
573 </tr> | |
574 <tr> | |
575 <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> | |
576 <td><span class="color-box" style="background-color:#cccccc"> </span> CCCCCC</td> | |
577 <td> | |
578 .nabble .medium-border-color {<br/> | |
579 border-color: <b>#<color></b>;<br/> | |
580 } | |
581 </td> | |
582 </tr> | |
583 <tr> | |
584 <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> | |
585 <td><span class="color-box" style="background-color:#666666"> </span> 666666</td> | |
586 <td> | |
587 .nabble .dark-border-color {<br/> | |
588 border-color: <b>#<color></b>;<br/> | |
589 } | |
590 </td> | |
591 </tr> | |
592 <tr> | |
593 <td><b>Dropdown Colors</b><div class="item-small">Colors of the dropdown box.</div></td> | |
594 <td><span class="color-box" style="border-color:#cccccc;background-color:#eeeeee"> </span> CCCCCC</td> | |
595 <td> | |
596 span.dropdown table {<br/> | |
597 background-color:<b>#<color></b>;<br/> | |
598 border-color:<b>#<color></b>;<br/> | |
599 } | |
600 </td> | |
601 </tr> | |
602 <tr> | |
603 <td><b>Dropdown Item Colors</b><div class="item-small">Colors of each dropdown item.</div></td> | |
604 <td> | |
605 <span class="color-box" style="background-color:#0000EE"> </span> 0000EE (foreground / normal and hover)<br/><br/> | |
606 <span class="color-box" style="background-color:transparent"> </span> Transparent (background normal)<br/><br/> | |
607 <span class="color-box" style="background-color:#dddddd"> </span> DDDDDD (background hover) | |
608 </td> | |
609 <td> | |
610 <i>/* Normal */</i><br/> | |
611 span.dropdown-item {<br/> | |
612 color:<b>#<color></b>;<br/> | |
613 } | |
614 </td> | |
615 </tr> | |
616 <tr> | |
617 <td><b>Date Color</b><div class="item-small">Color used to display dates of messages.</div></td> | |
618 <td><span class="color-box" style="background-color:#6a6a6a"> </span> 6A6A6A</td> | |
619 <td> | |
620 span.post-date {<br/> | |
621 color:<b>#<color></b>;<br/> | |
622 } | |
623 </td> | |
624 </tr> | |
625 <tr> | |
626 <td><b>Author Color</b><div class="item-small">Color used to display the author name on messages.</div></td> | |
627 <td><span class="color-box" style="background-color:#116611"> </span> 116611</td> | |
628 <td> | |
629 span.post-author {<br/> | |
630 color:<b>#<color></b>;<br/> | |
631 } | |
632 </td> | |
633 </tr> | |
634 <tr> | |
635 <td><b>Subject Color</b><div class="item-small">Color used to display subjects of messages.</div></td> | |
636 <td><span class="color-box" style="background-color:#111166"> </span> 111166</td> | |
637 <td> | |
638 .post-subject {<br/> | |
639 color:<b>#<color></b>;<br/> | |
640 } | |
641 </td> | |
642 </tr> | |
643 <tr> | |
644 <td><b>Message Preview Color</b><div class="item-small">Color used to display the message preview line (snippets).</div></td> | |
645 <td><span class="color-box" style="background-color:#909090"> </span> 909090</td> | |
646 <td> | |
647 span.post-snippet {<br/> | |
648 color:<b>#<color></b>;<br/> | |
649 } | |
650 </td> | |
651 </tr> | |
652 <tr> | |
653 <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> | |
654 <td><span class="color-box" style="background-color:#eeeeee"> </span> EEEEEE</td> | |
655 <td> | |
656 .post-hover {<br/> | |
657 background-color:<b>#<color></b>;<br/> | |
658 } | |
659 </td> | |
660 </tr> | |
661 <tr> | |
662 <td><b>Post Box</b><div class="item-small">Box where the post is displayed.</div></td> | |
663 <td><span class="color-box" style="background-color:#D9D9D9"> </span> D9D9D9</td> | |
664 <td> | |
665 div.post-border {<br/> | |
666 border-color: <b>#<color></b>;<br/> | |
667 }<br/> | |
668 </td> | |
669 </tr> | |
670 <tr> | |
671 <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> | |
672 <td>N/A</td> | |
673 <td> | |
674 span.connect-line {<br/> | |
675 background-image:url("<b><image-URL></b>");<br/> | |
676 }<br/> | |
677 <br/> | |
678 span.connect-end {<br/> | |
679 background-image:url("<b><image-URL></b>");<br/> | |
680 }<br/> | |
681 <br/> | |
682 td.connect-end {<br/> | |
683 background-image:url("<b><image-URL></b>");<br/> | |
684 }<br/> | |
685 <br/> | |
686 td.connect-node {<br/> | |
687 background-image:url("<b><image-URL></b>");<br/> | |
688 }<br/> | |
689 <br/> | |
690 td.connect-node-closed {<br/> | |
691 background-image:url("<b><image-URL></b>");<br/> | |
692 } | |
693 </td> | |
694 </tr> | |
695 </table> | |
696 <%;}}; | |
697 public static final Help embed_redirect = new Help( | |
698 40, %>Is my embedded application also available on Nabble's website?<%){public String answer(){return %> | |
699 <p> | |
700 Yes, but you have the option to redirect all visits to your website. In this case, | |
701 when someone tries to access your application or posts, the browser will redirect to | |
702 your website and the desired page will be displayed. This option allows our search | |
703 engine to find messages from your application, but users will be redirected if they try | |
704 to open those messages. | |
705 </p> | |
706 <p> | |
707 To configure this option, go to the page where your application is embedded in and click | |
708 on <i>"Options > Embedding options"</i>: | |
709 </p> | |
710 <p><img src="/images/help/help_embed_default.png" style="padding-left:2em"/></p> | |
711 <%;}}; | |
712 | |
713 private static class Lazy { | |
714 private static final String[] examples = new String[]{ | |
715 "<quote>some text</quote>", | |
716 "<quote author='Bob'>some text</quote>", | |
717 "<email>someone@nabble.com</email>", | |
718 "<raw>\nuninterpreted HTML like <a href='#'>link</a>\n</raw>", | |
719 }; | |
720 private static final String exampleRows; | |
721 static { | |
722 StringBuilder buf = new StringBuilder(); | |
723 for( String example : examples ) { | |
724 buf.append( %> | |
725 <tr> | |
726 <td class="medium-border-color"><%=HtmlUtils.htmlEncode(example)%></td> | |
727 <td class="second medium-border-color"><%=getHtml(example)%></td> | |
728 </tr> | |
729 <% ); | |
730 } | |
731 exampleRows = buf.toString(); | |
732 } | |
733 } | |
734 | |
735 private static String getHtml(String text) { | |
736 try { | |
737 Html html = new Html(text); | |
738 HtmlListNamespace ns = new HtmlListNamespace(html,null, nabble.model.Message.Format.HTML); | |
739 Program program = Program.getInstance(ModuleManager.getGenericModules()); | |
740 Template template = program.getTemplate( "process_message_html", | |
741 BasicNamespace.class, HtmlListNamespace.class | |
742 ); | |
743 template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(), | |
744 new BasicNamespace(template), ns | |
745 ); | |
746 return ns.toString(); | |
747 } catch(CompileException e) { | |
748 logger.error("",e); | |
749 throw new RuntimeException(e); | |
750 } | |
751 } | |
752 | |
753 public static final Help formatting = new Help( | |
754 41, %>How are messages formatted?<%){public String answer(){return %> | |
755 <p>For formatting, we use standard HTML tags.</p> | |
756 | |
757 <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> | |
758 | |
759 <p>We support some special tags which we process. Here is how they are used:</p> | |
760 | |
761 <p> | |
762 <style type="text/css"> | |
763 table.type-examples { | |
764 border-collapse:collapse; | |
765 } | |
766 table.type-examples td { | |
767 padding: .5em; | |
768 border-bottom-width:1px; | |
769 border-bottom-style: solid; | |
770 } | |
771 table.type-examples td.second { | |
772 border-left-width:1px; | |
773 border-left-style: solid; | |
774 } | |
775 </style> | |
776 <table class="type-examples"> | |
777 <tr> | |
778 <td class="shaded-bg-color medium-border-color"><b>You Type</b></td> | |
779 <td class="second shaded-bg-color medium-border-color"><b>We Show</b></td> | |
780 </tr> | |
781 <%=Lazy.exampleRows%> | |
782 </table> | |
783 </p> | |
784 <%;}}; | |
785 | |
786 public static final Help anonymous = new Help( | |
787 42, %>What are anonymous users?<%){public String answer(){return %> | |
788 <p> | |
789 Anonymous users are users that didn't register with Nabble. | |
790 All Nabble requires from them is a name that is displayed together with the message. | |
791 Forums that allow anonymous users tend to have more participation, but they might generate confusion when users provide false or deceiving names. | |
792 As the forum owner, you can always remove those messages from the forum. | |
793 </p> | |
794 <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> | |
795 <%;}}; | |
796 | |
797 public static final Help mixed = new Help( | |
798 43, %>How can I fix a mixed bulletin board?<%){public String answer(){return %> | |
799 <p> | |
800 In traditional forums, a bulleting board only shows subcategories where users are allowed to post messages. | |
801 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. | |
802 This situation is not easy to create since Nabble doesn't allow users to post new topics under a board, | |
803 but you could face this problem if you change a regular forum into a bulletin board format or move threads directly to the board. | |
804 </p> | |
805 <p> | |
806 A mixed board generally isn't a good idea and should be fixed in order to avoid confusion. | |
807 Note that Nabble doesn't hide threads in that view because this would increase the confusion among users. | |
808 It is the forum owner's responsibility to keep the forum clean and organized. | |
809 </p> | |
810 <h3>How to fix it?</h3> | |
811 <p> | |
812 If your forum has a mixed bulletin board, do the following: | |
813 </p> | |
814 <ol> | |
815 <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> | |
816 <li> | |
817 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. | |
818 You might have to move other sub-forums around in order to rebuild the bulletin board. | |
819 </li> | |
820 </ol> | |
821 <%;}}; | |
822 | |
823 public static final Help embed_js_options = new Help( | |
824 48, %>Can I change other behaviors of an embedded forum?<%){public String answer(){return %> | |
825 <p> | |
826 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. | |
827 These options must be set as javascript variables in your HTML page (place them before the embedding code). | |
828 For example, you can add the following code to your page: | |
829 </p> | |
830 <div style="font-family:monospace;margin:1em;"> | |
831 <script type="text/javascript"><br> | |
832 nabble_width = "500px";<br> | |
833 nabble_ignore_scroll = true;<br> | |
834 nabble_ignore_title = true;<br> | |
835 </script><br> | |
836 </div> | |
837 <style type="text/css"> | |
838 table.info td { | |
839 padding: .5em; | |
840 } | |
841 tr.header td { | |
842 font-weight:bold; | |
843 padding: .1em .5em; | |
844 } | |
845 </style> | |
846 <table class="info"> | |
847 <tr class="header"> | |
848 <td class="shaded-bg-color">Variable</td> | |
849 <td class="shaded-bg-color">Description</td> | |
850 </tr> | |
851 <tr> | |
852 <td>nabble_width</td> | |
853 <td> | |
854 Use this variable if you want to have an embedded forum with fixed width. | |
855 The default value is "100%" and you can change it according to standard CSS rules | |
856 (e.g., "50%", "10em", "500px"). | |
857 </td> | |
858 </tr> | |
859 <tr> | |
860 <td>nabble_ignore_scroll</td> | |
861 <td> | |
862 Set this variable to <b>true</b> if you don't want the embedded forum to | |
863 scroll to specific posts or messages. By default, the embedded forum will | |
864 eventually scroll the page to specific messages depending on the user navigation | |
865 and clicked links. | |
866 </td> | |
867 </tr> | |
868 <tr> | |
869 <td>nabble_scroll_top</td> | |
870 <td> | |
871 Set this variable to <b>true</b> if you want the embedded forum to | |
872 scroll to the top of your HTML page whenever the user navigates through the forum. | |
873 By default, the forum will scroll to its top, which is not necessarily the top of your | |
874 HTML page. | |
875 </td> | |
876 </tr> | |
877 <tr> | |
878 <td>nabble_ignore_title</td> | |
879 <td> | |
880 Set this variable to <b>true</b> if you don't want the embedded forum to | |
881 change the title of your HTML page. By default, the embedded forum will | |
882 set the title of your page with the forum name. | |
883 </td> | |
884 </tr> | |
885 </table> | |
886 <%;}}; | |
887 | |
888 public static final Help online = new Help( | |
889 49, %>Is it possible to show which users are online?<%){ | |
47
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
890 public String getMetaDescription() { return "Nabble applications display who is online when you browse forums, photo galleries, newspapers and blogs."; } |
72765b66e2c3
remove mailing list code
Franklin Schmidt <fschmidt@gmail.com>
parents:
0
diff
changeset
|
891 public String getMetaKeywords() { return "online users, forum, photo gallery, newspaper, blog, free forum, free blog, free photo gallery"; } |
0 | 892 public String answer(){return %> |
893 <p> | |
894 Yes, all Nabble applications (e.g., forum, photo gallery, newspaper, blog, etc.) have this feature. | |
895 Online users have a green circle at the bottom right corner of their avatars. | |
896 </p> | |
897 <%;}}; | |
898 | |
899 public static final Help domain_names = new Help( | |
900 51, %>Can I access my forum with my own domain name?<%){ | |
901 public String answer(){return %> | |
902 <p> | |
903 Yes. Nabble allows you to change the domain name configuration of your application (e.g., forum, gallery, blog, news, etc.) | |
904 by clicking on "Options > Editor > Change domain name". If you decide to use your own domain name, you will have to change | |
905 its DNS configuration and make it resolve to the Nabble server where your forum is located (you can find instructions on the configuration screen). | |
906 </p> | |
907 <p> | |
908 There are some advantages about custom domain names that you should be aware of. One of them is that you can – for example – | |
909 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 | |
910 to run custom JavaScript code in your pages <i>(to be implemented / Templates feature)</i>. | |
911 </p> | |
912 <%;}}; | |
913 | |
914 public static final Help inactivity_deletion = new Help( | |
915 53, %>Will Nabble delete my forum, posts or anything I have created?<%){ | |
916 public String answer(){return %> | |
917 <p> | |
918 Nabble has a garbage collector process that searches for <b>inactive</b> forums, topics or messages | |
919 in the database. If you receive an email with forums scheduled for deletion, you have to first understand | |
920 why they are in that list. The most common cases are: | |
921 </p> | |
922 <p> | |
923 <b>(1) Your forum hasn't been viewed by anyone recently</b>: | |
924 If your forum is not dead, you can just save it from deletion by following the | |
925 instructions on its page. | |
926 </p> | |
927 <p> | |
928 <b>(2) Your post was removed from the forum</b>: the forum owner (or some other user | |
929 that you replied to) might have moved your post (and replies) out of the forum. This is different from | |
930 physical deletion. When a post is removed from a forum, it still exists in Nabble's database and can be found in | |
931 the author's profile page. Such messages are not part of any forum and are probably not read by anyone. | |
932 So you shouldn't care much about those messages. | |
933 </p> | |
934 | |
935 <p class="shaded-bg-color" style="padding:.5em"> | |
936 In summary, only root nodes are checked for deletion. | |
937 This means that only threads that have been removed or inactive root level forums will be caught by the garbage collector process. | |
938 </p> | |
939 | |
940 <h2>Each visit counts</h2> | |
941 <p>Threads inside an active forum will NOT be scheduled for deletion, even if they don't get any visits for a long time | |
942 (although other threads in the same forum must get visits in order to keep the forum active). <b>So each visit adds activity | |
943 points to the whole structure</b>. On the other hand, when a post or any node is removed from the structure, | |
944 it will become a separated structure with its own activity level.</p> | |
945 | |
946 <h2>How deletion works</h2> | |
947 <p>If your forum gets deleted, the threads under it are not immediately deleted. | |
948 What happens is that after the forum is deleted, these threads become top level independent nodes and | |
949 then they are subject to the same deletion process after some weeks. So if a forum owner allows his forum | |
950 to be deleted, thread starters can still save their threads.</p> | |
951 | |
952 <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 | |
953 instructions on their page. You should also know that you can download the archives of your application | |
954 by clicking on "Options > Download archives" (if you are the administrator). | |
955 <a href="<%=Help.export.url()%>">Click here</a> for more information.</p> | |
956 <%;}}; | |
957 | |
958 public static final Help export = new Help( | |
959 54, %>Can I export my forum to a standard format?<%){ | |
960 public String answer(){return %> | |
961 <p>Yes, Nabble can export your forum data, subcategories and messages to the standard XML format. | |
962 You can download these files by clicking on "Options > Download archives". You will realize that Nabble | |
963 doesn't have these files ready for you, so first you will have to build them. This process may take some | |
964 minutes or even hours depending on the size of your application. You will receive an email when this process | |
965 has finished.</p> | |
966 <p>To make downloading easier, Nabble groups XML files into zip archives. Each zip archive contains thousands | |
967 of XML files, where each file represents a node in the forum structure (<a href="<%=Jtp.homeContextUrl()%>/back-end.html">learn more</a>). | |
968 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> | |
969 | |
970 <table class="editor-table" cellpadding="5" style="font-size:90%;"> | |
971 <tr class="shaded-bg-color"> | |
972 <th align="left">Field</th> | |
973 <th align="left">Description</th> | |
974 </tr> | |
975 <tr> | |
976 <td>exportId</td> | |
977 <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> | |
978 </tr> | |
979 <tr> | |
980 <td>kind</td> | |
981 <td>Kind of the node ("APP" for applications or "POST" for messages).</td> | |
982 </tr> | |
983 <tr> | |
984 <td>ownerEmail</td> | |
985 <td>Email of the user who created the node represented by the XML file.</td> | |
986 </tr> | |
987 <tr> | |
988 <td>ownerName</td> | |
989 <td>Name of the user who created the node represented by the XML file.</td> | |
990 </tr> | |
991 <tr> | |
992 <td>ownerAnonymousId</td> | |
993 <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> | |
994 </tr> | |
995 <tr> | |
996 <td>subject</td> | |
997 <td>Title/subject of this node.</td> | |
998 </tr> | |
999 <tr> | |
1000 <td>message</td> | |
1001 <td>Message contents of this node.</td> | |
1002 </tr> | |
1003 <tr> | |
1004 <td>msgFmt</td> | |
1005 <td>Format of the message (m=mail, h=html or t=text).</td> | |
1006 </tr> | |
1007 <tr> | |
1008 <td>parentId</td> | |
1009 <td>ID of the parent node.</td> | |
1010 </tr> | |
1011 <tr> | |
1012 <td>whenCreated</td> | |
1013 <td>Date/Time when the node was created (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td> | |
1014 </tr> | |
1015 <tr> | |
1016 <td>hasReplyAlert</td> | |
1017 <td>true/false if user wants to receive new replies by email.</td> | |
1018 </tr> | |
1019 <tr> | |
1020 <td>whenUpdated</td> | |
1021 <td>Date/Time when the node was updated (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td> | |
1022 </tr> | |
1023 <tr> | |
1024 <td>restriction</td> | |
1025 <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> | |
1026 </tr> | |
1027 <tr> | |
1028 <td>type</td> | |
1029 <td>Node/Application type (FORUM, BOARD, CATEGORY, NEWS, GALLERY, BLOG, COMMENT)</td> | |
1030 </tr> | |
1031 <tr> | |
1032 <td>customStyle</td> | |
1033 <td>Custom CSS stylesheet created for this node.</td> | |
1034 </tr> | |
1035 <tr> | |
1036 <td>pin</td> | |
1037 <td>Order of this node in the pinned list of the parent node.</td> | |
1038 </tr> | |
1039 <tr> | |
1040 <td>files</td> | |
1041 <td>Files attached to this node. Creates one entry for each file. Contents are byte arrays encrypted using Base64 encoding.</td> | |
1042 </tr> | |
1043 </table> | |
1044 <%;}}; | |
1045 | |
1046 public static final Help pinned_subapps = new Help( | |
1047 55, %>What is the difference between pinned and unpinned sub-forums?<%){ | |
1048 public String answer(){return %> | |
1049 <p> | |
1050 Before addressing this question, you have to understand how things work in the background. | |
1051 Essentially, Nabble has a node-architecture that resembles a file system, where forums (and other apps) | |
1052 are like folders and posts are like files. Forums and posts can be pinned to their parent in order to always | |
1053 be displayed on top. Here is an illustration: | |
1054 </p> | |
1055 | |
1056 <p><img src="/images/help/help_node_structure.png" style="padding-left:2em"/></p> | |
1057 | |
1058 <p> | |
1059 Only forum owners can pin sub-forums and topics. Actually, sub-forums created by owners are automatically | |
1060 pinned, and this makes a big difference to the forum structure. Nabble gives more priority to pinned | |
1061 sub-forums when it comes to how the forum front page looks. Unpinned sub-forums (also called | |
1062 <b>floating sub-forums</b>) are not part of the real forum structure and they float like normal topics. | |
1063 Here is a screenshot: | |
1064 </p> | |
1065 | |
1066 <p><img src="/images/help/help_sub_forums.png" style="padding-left:2em"/></p> | |
1067 | |
1068 <p> | |
1069 As you can see, floating sub-forums aren't much different than normal topics (except they have a folder | |
1070 icon close to them). When they receive new posts, they jump to the top just like other topics that receive | |
1071 new replies. | |
1072 </p> | |
1073 <%;}}; | |
1074 | |
1075 public static final Help mixed_lengths = new Help( | |
1076 56, %>How can I customize the "Mixed" application type?<%){ | |
1077 public String answer(){return %> | |
1078 <p> | |
1079 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". | |
1080 In the "Preferences" group, there is a field for the number of topics in the mixed style:<br/><br/> | |
1081 <img src="/images/help/mixed_lengths.png" alt="topics configuration for mixed app type"/> | |
1082 <br/><br/> | |
1083 Enter a comma-separated list of values that represent how many topics each section of the mixed view should display.<br> | |
1084 <b>1st value</b> = number of topics to be displayed for the current application<br> | |
1085 <b>2nd value</b> = number of topics to be displayed for the first subcategory<br> | |
1086 <b>3rd value</b> = number of topics to be displayed for the second subcategory<br> | |
1087 and so on...<br> | |
1088 The <b>last number</b> is used for all other sections.<br> | |
1089 <div class="important">(All values must range from 1 to 20)</div> | |
1090 <br>Some examples:<br> | |
1091 <b>6</b> = All sections will display 6 topics.<br> | |
1092 <b>6,3</b> = 6 topics for the current application, 3 topics for all subcategories.<br> | |
1093 <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> | |
1094 <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> | |
1095 </p> | |
1096 <%;}}; | |
1097 | |
1098 public static void index() { | |
1099 Lucene.addHelp(map.values()); | |
1100 } | |
1101 } | |
1102 %> |