comparison src/nabble/view/lib/help/Help.jmp @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children 72765b66e2c3
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
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.
73 This includes forums, user groups, message boards, mailing lists, 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.
74 </p>
75 <%;}};
76 public static final Help free = new Help(
77 2, %>Is Nabble really free?<%){public String answer(){return %>
78 <p>
79 Yes. Nabble is absolutely free and will remain free to the users. This includes the end users,
80 mailing list owners, and webmasters. If your website uses Nabble as a hosted forum or a list archive,
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 add = new Help(
86 4, %>How do I add my mailing list to Nabble archive?<%){public String answer(){return %>
87 <p>
88 Go the <a href="/">Nabble home page</a>, and click on the <a href="/more/MailingListRequest.jtp">Archive Mailing list</a> link.
89 Fill out the form and follow the instructions there.
90 </p>
91 <%;}};
92 public static final Help find = new Help(
93 5, %>How do I find my mailing list on Nabble?<%){public String answer(){return %>
94 <p>
95 Search your mailing list address from <a href="/">Nabble home page</a>. If there is a match, you will find a forum link in the upper part of the result page.
96 </p>
97 <%;}};
98 public static final Help owner = new Help(
99 6, %>Do I have to be the list owner to archive a list at Nabble?<%){public String answer(){return %>
100 <p>
101 No. Anybody can add a list to Nabble archive.
102 If you subscribe to a list, and find yourself receiving too many emails, or having a hard time searching through the messages, you can consider getting a Nabble archive for the list.
103 This way you can view, search, post, entirely from the web without cluttering your inbox.
104 </p>
105 <%;}};
106 public static final Help why = new Help(
107 7, %>Why is my mailing list archived without my knowledge?<%){public String answer(){return %>
108 <p>
109 Mailing list archive is not something new. Besides Nabble, a public mailing list is very likely archived somewhere else.
110 For example, try searching on <a href="http://gmane.org/find.php" target="_top" rel="nofollow">Gmane</a>, <a href="http://www.mail-archive.com/" target="_top" rel="nofollow">Mail-archive</a>, <a href="http://marc.theaimsgroup.com/" target="_top" rel="nofollow">MARC</a>, and <a href="http://opensubscriber.com/" target="_top" rel="nofollow">OpenSubscriber</a>.
111 They have all existed long before Nabble. Nabble may have found your public mailing list from these places.
112 Or, your list's members may have added your list to Nabble's archive.
113 </p>
114 <p>
115 If you feel upset because nobody asked you for permission, take it easy.
116 An archive works like Google. Google will use a crawler to crawl your site to collect the web pages and index them,
117 much the same way as an archive using an email address to subscribe to your list to receive the messages and index them.
118 Were Google to ask permission from every webmaster, it would take too long, and there
119 would be no Google or search engines. But, if you don't like it, we will delete it.
120 </p>
121 <%;}};
122 public static final Help sell = new Help(
123 10, %>Can Nabble sell the data (archive)?<%){public String answer(){return %>
124 <p>
125 It's like asking can Google sell the web pages in its index?
126 Absolutely not. A message belongs to its author. Besides, an email address is sacred.
127 </p>
128 <%;}};
129 public static final Help post = new Help(
130 11, %>Did Nabble break my subscription policy?<%){public String answer(){return %>
131 <p>
132 Nabble supports many mailing list software such as mailman, ezmlm, and listserv. For all supported list software, Nabble conforms to the mailing list subscription policy. A non-subscriber will be prompted to subscribe to the mailing list before he/she can post to the mailing list. Without subscription, the post will be rejected as a non-subscriber post. Note that only registered users can post from Nabble. The Nabble registration process is the same as the mailing list subscription process. This means extra protection and validation.
133 </p>
134 <p>
135 You can think of Nabble as a web interface to your list. Without it, a user will have to view and post from an email box that tends to clutter. With Nabble, users who prefer the web view can post from the web, and interact with the same email users seamlessly.
136 </p>
137 <p>
138 The feature of bridging a forum and a list is not new. It is called mail-to-news gateway - Gmane.org probably has already archived your list this way. If you still have concerns, please contact us.
139 </p>
140 <%;}};
141 public static final Help userid = new Help(
142 12, %>Why do I see a user account with my name when I haven't registered?<%){public String answer(){return %>
143 <p>
144 Nabble archives public mailing lists and will create user accounts for users on these lists. If you have posted to the mailing lists before, Nabble may have created an unregistered account for you. Since this account is unregistered, you cannot use it until you register with Nabble. When you register with Nabble using the same email address as you used on the mailing list, you will be able to take ownership of this account and will be able to post messages.
145 </p>
146 <p>
147 It is important that you use the same email address (that you used for the mailing list) to register because Nabble identifies users by their email addresses. If you use an email address different from the one that you used for the mailing list, you are just creating a new account. Nabble currently does not support merging of multiple user accounts.
148 </p>
149 <%;}};
150 public static final Help delpost = new Help(
151 13, %>How do I delete my posts?<%){public String answer(){return %>
152 <p>
153 Log in to (or register with) Nabble and then you can find and delete your posts on Nabble.
154 </p>
155 <p>
156 Please note that Nabble archives public mailing lists. If you post to a public mailing list, then your message will become public records and anybody can archive it. There are several public mailing list archives like Nabble, for example, Gmane and mail-archive.com; in addition, a mailing list usually has its own native archive. Once you make a public post, it's hard to remove it from the web.
157 </p>
158 <p>
159 Most archives do not allow you to delete your message. With Nabble, you can. But you will need to register with Nabble using the same email address that you used for your post. Please note that we have no particular interest in knowing your email address because your email address is already available to public through the mailing list archives. We require you to register only because we need to verify that you are the owner of the post. After you register, log in, go to your post, and you will find a "delete" link to delete your post.
160 </p>
161 <%;}};
162 public static final Help pending = new Help(
163 15, %>Why is my post "pending"? How to fix it?<%){public String answer(){return %>
164 <p>
165 Your post is pending because you posted it to a special Nabble forum which is both a forum and a web
166 gateway to a mailing list. Your message is already posted on Nabble, but it has not been accepted by
167 the mailing list yet.
168 </p>
169 <p>
170 A mailing list is a subscriber-only email forwarding service. A subscriber sends email to the
171 mailing list, and the mailing list fowards his email to all subscribers. This allows subscribers to discuss
172 topics by reading and replying via email. Nabble works as a bridge to forward your post to the mailing list.
173 If you are a subscriber, the mailing list will take your post and forward it to all subscribers.
174 But if you are not, then your post will be rejected and thus it will be in a "pending" status.
175 </p>
176 <p>
177 <strong>Are you a registered user of Nabble?</strong> Please note that being registered with Nabble does not mean that you are a subscriber to mailing lists. In fact, each mailing list requires a separate subscription.
178 </p>
179 <p>
180 Have you confirmed your subscription yet? You may have just clicked a "Subscribe" button, but may not have followed
181 through with the two additional steps:
182 </p>
183 <ol>
184 <li>Check your email for a confirmation email from the mailing list.
185 <li>Follow the instruction in the email to confirm subscription.
186 </ol>
187 <p>
188 Sounds complicated? You bet. But the good part of this mechanism is that it helps to filter out careless posters.
189 Because most users on a mailing list are dedicated and careful users, you are likely to get quality responses
190 once your post goes through.
191 </p>
192 <h3>How to fix pending messages?</h3>
193 <p>
194 Nabble doesn't allow you to resend your message to the mailing list.
195 The right way of doing this is to compose a new message, which will be sent as a new email.
196 You might want to delete your old pending messages in order to keep the forum clean and organized.
197 To find your pending messages, go to <b>Your Account > Account Settings > Pending Posts</b>.
198 </p>
199 <p>
200 The most important thing is to make sure you are a subscriber.
201 If you haven't subscribed yet, do it and wait for confirmation.
202 Then follow the instruction to confirm.
203 If you don't remember whether you have subscribed before, subscribe again.
204 After you have confirmed a subscription, go back to your pending message and repost the message.
205 </p>
206
207 <h3>I am sure I have subscribed, but why is my message still pending?</h3>
208 <p>
209 A post to a mailing list will appear as pending right after being posted.
210 This is normal because it takes a few minutes for your post to get forwarded and processed by a mailing list server.
211 Usually, if you are a subscriber, after a few minutes, your pending message will get posted and the pending messages page will remove that post from the list.
212 </p>
213 <p>
214 When you are a subscriber and you see a post pending for several hours after your have posted, it could be that the mailing list server is slow or unavailable.
215 Your post may be pending simply because the mailing list server has not processed it yet.
216 Try going to the mailing list website to see if it is slow. Don't post repeatedly. Try reposting in a day or two.
217 </p>
218 <p>
219 Sometimes mailing lists may reject your message for format or editorial reasons. For example, some mailing lists
220 do not accept HTML formats, and some forbids certain language or content. Usually, the mailing list will reject
221 your post and email you a notice with an explanation. In such cases, go to the pending post to "Edit" it so that
222 it conforms with the mailing list requirement, then post again. Or, you can simply delete your post.
223 </p>
224 <%;}};
225 public static final Help moderation = new Help(
226 16, %>How do I remove SPAM or bad users from my forum?<%){public String answer(){return %>
227 <p>
228 SPAM and bad posts are common problems for forums.
229 With Nabble, forum owners can easily remove unwanted messages and ban bad users.
230 Both actions are available in the dropdown menu close to the message.
231 </p>
232 <p>
233 We should remember that anonymous users can't be banned.
234 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.
235 </p>
236 <%;}};
237 public static final Help mailingListIntro = new Help(
238 17, %>What is a "mailing list"?<%){public String answer(){return %>
239 <p>
240 A mailing list is an email forwarding service for subscribers. People set up a mailing list to distribute information about a certain topic. If you are interested in the topic, you can subscribe and then start receiving messages via email. You can also email your questions or relevant information to the mailing list which will then forward them to all other subscribers. Some people call "mailing list" the email discussion group.
241 </p>
242 <h2>Nabble provides a web archive/gateway to mailing lists.</h2>
243 <p>
244 Nabble works as a web archive to mailing lists to allow search and browsing. Also it allows web users to post messages through Nabble which then forwards it as an email to the mailing list. This means web users can join an email discussion through the web and all users are in sync.
245 </p>
246 <p>
247 Nabble supports many mailing list software. For all the supported listserv software, Nabble conforms with the mailing list's subscription policy. This means that a user will need to become a subscriber to a mailing list before he can post through the Nabble web archive.
248 </p>
249 <p>
250 <b>Please note:</b> being a registered Nabble user does not mean you are a subscriber to a mailing list. Each mailing list requires separate subscription.
251 </p>
252 <%;}};
253 public static final Help stopEmails = new Help(
254 18, %>Why do I receive emails after I made a post on Nabble? How to stop it?<%){public String answer(){return %>
255 <p>
256 If you find yourself receiving many emails (not spam, just regular emails) after making a post on Nabble, don't worry, it can be easily fixed.
257 </p>
258 <p>
259 What happened is that your were probably posting through Nabble to a "mailing list", also known as the email discussion group,
260 and it requires that you become a subscriber before you can post. You probably remember seeing the prompt to subscribe.
261 You have to do that in order for your post to go out, but as a result, you subscribed and that is why you are receiving
262 the emails. You should also have received an automatic email from Nabble with a link that you can click to stop
263 receiving emails. If you missed that email or don't remember, continue reading.
264 </p>
265 <h3>How to stop it?</h3>
266 <ol>
267 <li>Go to the forum where you posted a message.
268 <br/>If you remember where you posted, go there directly. If you don't, try to find your post first, then go up one level
269 to the forum level. Or, you can search Nabble by the email address of the mailing list. You can find the email address by
270 looking for the "to:" field in those unwanted emails that you received from the mailing list.
271 <br/><br/>
272 <li>Click the "mailing list options" link.
273 <br/>In the subsequent page you will find options to turn off email delievery or simply unsubscribe. Follow through
274 the instructions there.
275 </ol>
276 <%;}};
277 public static final Help stopAlert = new Help(
278 19, %>How do I stop an email alert?<%){public String answer(){return %>
279 <p>
280 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.
281 <%;}};
282 public static final Help restrictions = new Help(
283 20, %>How do I control who can view and post in my forum? <%){public String answer(){return %>
284 <p>
285 Under the "Options" menu, under "Users", is the option "Who can view & post".
286 This page controls who can view and post in this forum. But if this forum has a parent forum
287 and if the parent forum has restrictions, then those restriction will also apply.
288 This means that restrictions are only added as you go down your forum hierarchy.
289 This makes sense because when you set restrictions, you assume that they will apply to
290 all sub-forums as well.
291 </p>
292 <p>
293 Let's look at a few examples. Suppose you have a forum hierarchy and want to ban anonymous users
294 throughout. You would go to the top forum and select that only registered users can create new topics and replies:
295 </p>
296 <p><img src="/images/help/registered_only.png" width=505 height=108 style="padding-left:2em"/></p>
297 <p>
298 Now suppose that under the top forum, you have an "Official Business" forum where only members of
299 a group should be allowed to post. You would select that only members can create new topics and replies:
300 </p>
301 <p><img src="/images/help/members_only.png" width=505 height=108 style="padding-left:2em"/></p>
302 <p>
303 You would then authorize the right members for that "Official Business" forum only.
304 </p>
305 <p>
306 Now suppose that under that forum, you have an "Announcements" forum where only the organizer should
307 post. The organizer should create that forum and select again that only members can post and reply in that forum,
308 but this time not authorize anyone else. Now only the owner of the "Announcements" forum is authorized
309 to post there. But suppose you want to allow members to comment on announcements but not to
310 make announcements. Then instead of members can create new topics, but let everyone reply.
311 Note that "Everyone" means everyone who would otherwise be allowed to post. So now within the "Announcements" forum,
312 only the owner can create threads, but all members can reply to those threads.
313 </p>
314 <%;}};
315
316 public static final Help copy = new Help(
317 9, %>Isn't Nabble trying to copy and replace me?<%){public String answer(){return %>
318 <p>
319 Nabble wants to be useful and transparent. If you feel shocked on seeing the Nabble mirror of your content,
320 please relax and be assured that the content is still yours, and you can delete it anytime. Then, before cursing
321 Nabble, try asking yourself:
322 </p>
323
324 <ul>
325 <li><p>Is Nabble useful?
326 <br>You probably will find the archive search useful. Nabble search is fast, and you can cross search all your
327 lists instead of searching each list or relying on Google's "site:archive url" search (which is a hack because
328 Google does not index all your posts, especially the new ones). What's more, some of your users may want a web
329 interface to read and post instead of using a cluttered email box. With Nabble, these users can talk from the
330 web and interact with the traditional email users seamlessly.
331 </p>
332 <li><p>Is Nabble taking users away from my site?
333 <br>We understand this concern. You put in effort to grow your users, and we have no right to get in between.
334 What we offer is an <a href="<%=Help.embed_what_how.url()%>" target="_top" rel="nofollow">"embeddable" forum</a>.
335 It means that you can customize the Nabble mirror to "embed" it into your website. The Nabble mirror will still be hosted at
336 Nabble, but you can control the look and feel so that it looks like a part of
337 your site, complete with your logo, style sheet, javascript, and even your ads.
338 </p>
339 <li><p>Is Nabble bypassing me?
340 <br>No. <a href="<%=Help.post.url()%>" target="_top" rel="nofollow">Nabble conforms with your subscription policy</a>.
341 This means if users want to post to your list via Nabble, they will have to join your list to become subscribers.
342 </p>
343 <li><p>What's in it for Nabble?
344 <br>Nabble wants to become the best place for online discussions. That's it for now. We don't know
345 yet how to make money.
346 </p>
347 </ul>
348 <p>
349 Keep in mind that by mirroring your discussion on Nabble, you could also expand your subscribers through
350 Nabble users. They may join your discussions and thus expand your membership.
351 They could also go from the discussion page to visit your website.
352 </p>
353 <%;}};
354 public static final Help listSpam = new Help(
355 22, %>My list received spam from Nabble. What do I do to prevent it from happening again?<%){public String answer(){return %>
356 <p>
357 We hate spam. We sincerely apologize if a spam comes to your list through Nabble.
358 </p>
359 <p>
360 Please let us know through the <a href="<%=Jtp.supportUrl()%>">support forum</a> if you see or suspect spam. We will take actions immediately.
361 </p>
362 <p>
363 Forum owners can also <a href="<%=Help.moderation.url()%>" target="_top" rel="nofollow">delete spam and ban bad users</a>.
364 </p>
365 <%;}};
366 public static final Help cataloging = new Help(
367 24, %>What's the right way to organize forums and messages?<%){public String answer(){return %>
368 <p>
369 Nabble offers a flexible way to organize forums and messages.
370 </p>
371 <p>
372 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.
373 </p>
374 <h3>Create a child forum only when it is truly needed</h3>
375 <p>
376 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.
377 </p>
378 <h3>Force users to select a child forum to post</h3>
379 <p>
380 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.
381 </p>
382 <h3>Keep the hierarchy efficient</h3>
383 <p>
384 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.
385 </p>
386 <%;}};
387 public static final Help password = new Help(
388 25, %>How does Nabble store passwords?<%){public String answer(){return %>
389 <p>
390 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.
391 </p>
392 <p>
393 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.
394 </p>
395 <%;}};
396 public static final Help seo = new Help(
397 27, %>Is my application optimized for search engines?<%){public String answer(){return %>
398 <p>
399 Yes. Nabble's content pages are designed with SEO (Search Engine Optimization) in mind.
400 Our SEO effort goes further beyond the usual tags and headers to advanced techniques such as URL encoding and PageRank distribution.
401 </p>
402 <%;}};
403 public static final Help mirror = new Help(
404 30, %>Can I mirror my groups on Nabble?<%){public String answer(){return %>
405 <p>
406 If you own a discussion group such as Yahoo or Google group, you can mirror it on Nabble by using Nabble's mailing list archive feature. Nabble complements your existing group by providing a nice threaded view and a <a href="<%=Help.search.url()%>">powerful search</a>. What's more, if you have a quality group you may expand it by getting new users from Nabble.
407 </p>
408 <p>
409 Most importantly, Nabble adds an extra layer of redundancy. With Nabble, you can download all your content for backup or moving purposes anytime you want. This means you will never get stuck with any forum provider including Nabble.
410 </p>
411 <%;}};
412 public static final Help search = new Help(
413 31, %>What search features does Nabble provide?<%){public String answer(){return %>
414 <p>
415 Nabble allows many flavors of specific search.
416 </p>
417 <ul>
418 <li>You can search entire Nabble (with the help of Google Search).
419 <li>You can search within an application (e.g., forum, photo gallery, newspaper, blog) to include all subcategories below.
420 <li>You can narrow your search result by date.
421 <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.
422 <li>Nabble search supports keyword stemming, i.e. search, searching, searched, searches...
423 </ul>
424
425 <h2>Examples</h2>
426
427 <p>
428 <table class="search-tips-table" style="
429 width: 100%;
430 border-collapse: collapse;
431 ">
432 <style type="text/css">
433 .nabble .search-tips-table th {
434 text-align: left;
435 font-weight: bold;
436 padding: .5em;
437 vertical-align: top;
438 }
439 .nabble .search-tips-table td {
440 padding: .3em;
441 border-bottom-width: 1px;
442 border-bottom-style: solid;
443 vertical-align: top;
444 }
445 </style>
446 <tr>
447 <th>Your search</th>
448 <th>What will search results show</th>
449 </tr>
450 <tr>
451 <td class="info-message"><code class="important">hello world</code></td>
452
453 <td class="info-message">Messages with both <code class="important">hello</code> and <code class="important">world</code></td>
454 </tr>
455 <tr>
456 <td class="info-message"><code class="important">"hello world"</code></td>
457 <td class="info-message">Messages with the phrase <code class="important">hello world</code></td>
458
459 </tr>
460 <tr>
461 <td class="info-message"><code class="important">hello OR world</code></td>
462 <td class="info-message">Messages with either <code class="important">hello</code> or <code class="important">world</code></td>
463 </tr>
464 <tr>
465
466 <td class="info-message"><code class="important">hello AND world</code></td>
467 <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>
468 </tr>
469 <tr>
470 <td class="info-message"><code class="important">"hello world" lucene</code></td>
471
472 <td class="info-message">Messages with both the phrase <code class="important">hello world</code> and <code class="important">lucene</code></td>
473 </tr>
474
475
476 <tr>
477 <td class="info-message"><code class="important">hello NOT world</code></td>
478 <td class="info-message">Messages that have <code class="important">hello</code>, but do not have <code class="important">world</code></td>
479
480 </tr>
481 <tr>
482 <td class="info-message"><code class="important">("hello world" lucene) OR apache</code></td>
483 <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>
484 </tr>
485
486
487 <tr>
488 <td class="info-message"><code class="important">lucene NOT "hello world"</code></td>
489 <td class="info-message">Messages with <code class="important">lucene</code>, but not the phrase <code class="important">hello world</code></td>
490 </tr>
491 <tr>
492 <td class="info-message"><code class="important">hello*</code></td>
493
494 <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>
495 </tr>
496 <tr>
497 <td class="info-message"><code class="important">par?</code></td>
498
499 <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>
500 </tr>
501 <tr>
502 <td class="info-message"><code class="important">subject:"hello world"</code></td>
503 <td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">subject</code> only.</td>
504
505 </tr>
506 <tr>
507 <td class="info-message"><code class="important">subject:(hello world)</code></td>
508 <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>
509 </tr>
510 <tr>
511 <td class="info-message"><code class="important">message:"hello world"</code></td>
512 <td class="info-message">Messages with the phrase <code class="important">hello world</code> in its <code class="important">message body</code> only.</td>
513 </tr>
514 <tr>
515 <td class="info-message"><code class="important">author:"Erik Hatcher"</code></td>
516 <td class="info-message">Messages of <code class="important">Erik Hatcher</code> only.</td>
517 </tr>
518 <tr>
519 <td class="info-message"><code class="important">roam~</code></td>
520 <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>
521 </tr>
522 </table>
523 </p>
524
525 <a name="search1"><h2>Search Using Words or Phrases </h2></a>
526 <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>
527
528 <a name="search2"><h2>Boolean Searches</h2></a>
529 <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>
530
531 <ul>
532 <li>To search for documents that contain "debian linux" and "java" use: "debian linux" AND java </li>
533 <li>To search for documents that contain either "jetty" or "resin" use: jetty OR resin </li>
534 <li>To search for documents that contain "linux" but not "kernel" use: linux NOT kernel </li>
535 <li>To search for documents that contain "lucene" or "nutch" but not "apache" use: (lucene OR nutch) NOT apache </li>
536 </ul>
537
538 <a name="search3"><h2>Search Messages, Subjects, Authors</h2></a>
539 <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>
540
541 <ul>
542 <li>subject:"lord of the rings" message:film </li>
543 <li>author:"doug cutting" message:lucene </li>
544 </ul>
545
546 <p>If you don't specify the type of search, it will search all -- message, subject, author. </p>
547
548 <a name="search4"><h2>Wildcard Searches </h2></a>
549 <p>Nabble allows you to do both single and multiple character wildcard searches. </p>
550
551 <ul>
552 <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>
553 <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>
554 <li>You can also use the wildcard searches in the middle of a term.</li>
555 </ul>
556
557 <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>
558
559 <a name="search5"><h2>Fuzzy Searches</h2> </a>
560 <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>
561
562 <p>This search will find terms like foam and roams. </p>
563
564 <a name="search6"><h2>Proximity Searches </h2></a>
565 <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>
566
567 <%;}};
568 public static final Help orphan = new Help(
569 34, %>What does "parent message unknown" mean?<%){public String answer(){return %>
570 <p>
571 Some messages that we receive from mailing lists don't have enough information for us to determine which message the message we received was in reply to. In other words, we don't know the parent of that message. So we mark the message with the image <img alt="Parent Message unknown" title="Parent Message unknown" width="13" height="14" src="/images/icon_orphan.png" style="vertical-align:middle; vertical-align: absmiddle;" border="0" /> and usually assign the first post in the thread as the parent. This only matters in the "Threaded" view where you can see the structure of messages and their replies.
572 </p>
573 <%;}};
574 public static final Help security = new Help(
575 35, %>Does Nabble have a security policy for mailing lists?<%){public String answer(){return %>
576 <p>
577 Yes.
578 </p>
579 <p>
580 Javascript code is not allowed in Nabble's archive.
581 Thus, any code that may arrive with an email is blocked for your security.
582 Only the safe part of the message is displayed in the archive, and
583 we also show a warning that the JavaScript was blocked.
584 </p>
585 <p>Nabble also removes <b>&lt;style&gt;</b> tags because they might prevent messages from being displayed properly.</p>
586 <%;}};
587 public static final Help embed_what_how = new Help(
588 36, %>Embeddable Forum, Photo Gallery, News, Blog, Mailing List & Other Apps!<%){
589 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."; }
590 public String getMetaKeywords() { return "free, embeddable, forum, photo gallery, newspaper, blog, mailing list archive, easy, embedding, embedded, embed my forum, hosted, website, site, HTML"; }
591 public String answer(){return %>
592
593 <h2>All Nabble apps are naturally embeddable!</h2>
594
595 <p>Yes, with Nabble, you get an embeddable forum, embeddable photo gallery, embeddable news, embeddable blog, embeddable mailing list & archive... and there are more to come!</p>
596 <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>
597 <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>
598
599 <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>
600 <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>
601 <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>
602 <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>
603 <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>
604 <%;}};
605
606 public static final Help embed_permalinks = new Help(
607 38, %>How do I link to a page in an embedded application?<%){public String answer(){return %>
608 <p>
609 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.
610 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>
611 <p><img src="/images/help/help_embed_permalink.png" style="padding-left:2em"/></p>
612 <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
613 select it, and then copy it (e.g., ctrl+c).</p>
614 <p><img src="/images/help/help_embed_permalink2.png" style="padding-left:2em"/></p>
615 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
616 exactly like it was when you first got the permalink (you should <a href="<%=Help.embed_redirect.url()%>">enable this option</a> to work).
617 </p>
618 <%;}};
619 public static final Help embed_skin = new Help(
620 39, %>How can I customize the appearance of my embeddable application?<%){
621 public String getMetaDescription() { return "All Nabble applications are fully customizable. You can easily change the CSS stylesheet of your embeddable forum, photo gallery, newspaper, blog and mailing list archives."; }
622 public String getMetaKeywords() { return "customizable, embeddable, forum, photo gallery, newspaper, blog, mailing list archive, css, skins, examples, simple, easy"; }
623 public String answer(){return %>
624 <p>
625 Go to "Options > Editor > Change appearance" link in your application.
626 This screen has easy options to customize the basic look of your application:
627 </p>
628 <p><img src="/images/help/help_style_easy.png" style="padding-left:2em" alt="Here you can customize details about your application"/></p>
629 <p>
630 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.
631 </p>
632 <p><img src="/images/help/help_style_tab.png" style="padding-left:2em"/></p>
633 <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.
634 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>
635 <h2>How to write your custom CSS</h2>
636 <p>
637 If you want to change the appearance of your application, you have to override <a href="<%=Shared.getCssPath()%>">Nabble's style</a>.
638 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.
639 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.
640 </p>
641 <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>
642 <style>
643 .nabble .item-small { font-size:90%; }
644 .nabble .color-box { border:1px solid #000000; }
645 </style>
646 <table class="editor-table" cellpadding="5" style="font-size:90%;">
647 <tr class="shaded-bg-color">
648 <td>Item to Change</td>
649 <td>Default Value</td>
650 <td>How to Change (Example)</td>
651 </tr>
652 <tr>
653 <td><b>Font</b><div class="item-small">Font family and its size.</div></td>
654 <td>Verdana 0.84em</td>
655 <td>
656 body, input, button, textarea, select {<br/>
657 &nbsp;&nbsp;&nbsp;&nbsp;font-family: <b>Tahoma</b>;<br/>
658 &nbsp;&nbsp;&nbsp;&nbsp;font-size: <b>0.8em</b>;<br/>
659 }
660 </td>
661 </tr>
662 <tr>
663 <td><b>Background Color</b><div class="item-small">Background of the pages.</div></td>
664 <td><span class="color-box" style="background-color:#FFFFFF">&nbsp;&nbsp;&nbsp;</span> FFFFFF (white)</td>
665 <td>
666 body, .nabble, .nabble .no-bg-color {<br/>
667 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
668 }
669 </td>
670 </tr>
671 <tr>
672 <td><b>Text Color</b><div class="item-small">Color of texts (paragraphs, etc.).</div></td>
673 <td><span class="color-box" style="background-color:#000000">&nbsp;&nbsp;&nbsp;</span> 000000 (black)</td>
674 <td>
675 .nabble,<br/>
676 .nabble table,<br/>
677 .nabble .info-message th,<br/>
678 .nabble .message-text, .small,<br/>
679 .nabble .editor-table td, p, form,<br/>
680 small, ul, table td, .breadcrumbs {<br/>
681 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
682 }<br/>
683 </td>
684 </tr>
685 <tr>
686 <td><b>Link Color</b><div class="item-small">Color of unvisited links.</div></td>
687 <td><span class="color-box" style="background-color:#0000EE">&nbsp;&nbsp;&nbsp;</span> 0000EE</td>
688 <td>
689 .nabble a:link,<br/>
690 .nabble a.not-visited-link {<br/>
691 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
692 }
693 </td>
694 </tr>
695 <tr>
696 <td><b>Link Color (Visited)</b><div class="item-small">Color of visited links.</div></td>
697 <td><span class="color-box" style="background-color:#551A8B">&nbsp;&nbsp;&nbsp;</span> 551A8B</td>
698 <td>
699 .nabble a:visited,<br/>
700 .nabble a.visited-link {<br/>
701 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
702 }
703 </td>
704 </tr>
705 <tr>
706 <td><b>Header Text Color (H1)</b><div class="item-small">Color of header texts (big titles, etc.).</div></td>
707 <td><span class="color-box" style="background-color:#333333">&nbsp;&nbsp;&nbsp;</span> 333333</td>
708 <td>
709 .nabble h1 {<br/>
710 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
711 }
712 </td>
713 </tr>
714 <tr>
715 <td><b>Header Text Color (H2)</b><div class="item-small">Color of small header texts.</div></td>
716 <td><span class="color-box" style="background-color:#000000">&nbsp;&nbsp;&nbsp;</span> 000000</td>
717 <td>
718 .nabble h2 {<br/>
719 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
720 }
721 </td>
722 </tr>
723 <tr>
724 <td><b>Important Text</b><div class="item-small">Color of important texts.</div></td>
725 <td><span class="color-box" style="background-color:#cc0000">&nbsp;&nbsp;&nbsp;</span> CC0000</td>
726 <td>
727 .nabble .important {<br/>
728 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;</br>
729 }
730 </td>
731 </tr>
732 <tr>
733 <td><b>Form Label Text</b><div class="item-small">Color of labels on forms and other special places.</div></td>
734 <td><span class="color-box" style="background-color:#666666">&nbsp;&nbsp;&nbsp;</span> 666666</td>
735 <td>
736 .nabble th,<br/>
737 .nabble .form-label,<br/>
738 .nabble .weak-color {<br/>
739 &nbsp;&nbsp;&nbsp;&nbsp;color: <b>#&lt;color&gt;</b>;<br/>
740 }
741 </td>
742 </tr>
743 <tr>
744 <td><b>Light Background</b><div class="item-small">Color of light backgrounds, which are used in some areas of the screen.</div></td>
745 <td><span class="color-box" style="background-color:#F5F5F5">&nbsp;&nbsp;&nbsp;</span> F5F5F5</td>
746 <td>
747 .nabble .light-bg-color {<br/>
748 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
749 }
750 </td>
751 </tr>
752 <tr>
753 <td><b>Shaded Background</b><div class="item-small">Color of shaded backgrounds, which are used in some areas of the screen.</div></td>
754 <td><span class="color-box" style="background-color:#EEEEEE">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
755 <td>
756 .nabble .shaded-bg-color {<br/>
757 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
758 }
759 </td>
760 </tr>
761 <tr>
762 <td><b>Dark Background</b><div class="item-small">Color of dark backgrounds, which are used in some areas of the screen.</div></td>
763 <td><span class="color-box" style="background-color:#DDDDDD">&nbsp;&nbsp;&nbsp;</span> DDDDDD</td>
764 <td>
765 .nabble .dark-bg-color {<br/>
766 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
767 }
768 </td>
769 </tr>
770 <tr>
771 <td><b>Error Message</b><div class="item-small">Color of error messages.</div></td>
772 <td><span class="color-box" style="border-color:#cc3300;background-color:#ffffcc">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>
773 <td>
774 .nabble .error-message {<br/>
775 &nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
776 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
777 }
778 </td>
779 </tr>
780 <tr>
781 <td><b>Info Message</b><div class="item-small">Color of info messages.</div></td>
782 <td><span class="color-box" style="border-color:#ffcc33;background-color:#ffffcc">&nbsp;&nbsp;&nbsp;</span> FFFFCC</td>
783 <td>
784 .nabble .info-message {<br/>
785 &nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
786 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
787 }
788 </td>
789 </tr>
790 <tr>
791 <td><b>Highlight</b><div class="item-small">Color of highlights, which are used to catch user's attention.</div></td>
792 <td><span class="color-box" style="background-color:#ffff99">&nbsp;&nbsp;&nbsp;</span> FFFF66</td>
793 <td>
794 .nabble .highlight {<br/>
795 &nbsp;&nbsp;&nbsp;&nbsp;background-color: <b>#&lt;color&gt;</b>;<br/>
796 }
797 </td>
798 </tr>
799 <tr>
800 <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>
801 <td><span class="color-box" style="background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
802 <td>
803 .nabble .light-border-color {<br/>
804 &nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
805 }
806 </td>
807 </tr>
808 <tr>
809 <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>
810 <td><span class="color-box" style="background-color:#cccccc">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>
811 <td>
812 .nabble .medium-border-color {<br/>
813 &nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
814 }
815 </td>
816 </tr>
817 <tr>
818 <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>
819 <td><span class="color-box" style="background-color:#666666">&nbsp;&nbsp;&nbsp;</span> 666666</td>
820 <td>
821 .nabble .dark-border-color {<br/>
822 &nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
823 }
824 </td>
825 </tr>
826 <tr>
827 <td><b>Dropdown Colors</b><div class="item-small">Colors of the dropdown box.</div></td>
828 <td><span class="color-box" style="border-color:#cccccc;background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> CCCCCC</td>
829 <td>
830 span.dropdown table {<br/>
831 &nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>
832 &nbsp;&nbsp;&nbsp;&nbsp;border-color:<b>#&lt;color&gt;</b>;<br/>
833 }
834 </td>
835 </tr>
836 <tr>
837 <td><b>Dropdown Item Colors</b><div class="item-small">Colors of each dropdown item.</div></td>
838 <td>
839 <span class="color-box" style="background-color:#0000EE">&nbsp;&nbsp;&nbsp;</span> 0000EE (foreground / normal and hover)<br/><br/>
840 <span class="color-box" style="background-color:transparent">&nbsp;&nbsp;&nbsp;</span> Transparent (background normal)<br/><br/>
841 <span class="color-box" style="background-color:#dddddd">&nbsp;&nbsp;&nbsp;</span> DDDDDD (background hover)
842 </td>
843 <td>
844 <i>/* Normal */</i><br/>
845 span.dropdown-item {<br/>
846 &nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
847 }
848 </td>
849 </tr>
850 <tr>
851 <td><b>Date Color</b><div class="item-small">Color used to display dates of messages.</div></td>
852 <td><span class="color-box" style="background-color:#6a6a6a">&nbsp;&nbsp;&nbsp;</span> 6A6A6A</td>
853 <td>
854 span.post-date {<br/>
855 &nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
856 }
857 </td>
858 </tr>
859 <tr>
860 <td><b>Author Color</b><div class="item-small">Color used to display the author name on messages.</div></td>
861 <td><span class="color-box" style="background-color:#116611">&nbsp;&nbsp;&nbsp;</span> 116611</td>
862 <td>
863 span.post-author {<br/>
864 &nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
865 }
866 </td>
867 </tr>
868 <tr>
869 <td><b>Subject Color</b><div class="item-small">Color used to display subjects of messages.</div></td>
870 <td><span class="color-box" style="background-color:#111166">&nbsp;&nbsp;&nbsp;</span> 111166</td>
871 <td>
872 .post-subject {<br/>
873 &nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
874 }
875 </td>
876 </tr>
877 <tr>
878 <td><b>Message Preview Color</b><div class="item-small">Color used to display the message preview line (snippets).</div></td>
879 <td><span class="color-box" style="background-color:#909090">&nbsp;&nbsp;&nbsp;</span> 909090</td>
880 <td>
881 span.post-snippet {<br/>
882 &nbsp;&nbsp;&nbsp;&nbsp;color:<b>#&lt;color&gt;</b>;<br/>
883 }
884 </td>
885 </tr>
886 <tr>
887 <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>
888 <td><span class="color-box" style="background-color:#eeeeee">&nbsp;&nbsp;&nbsp;</span> EEEEEE</td>
889 <td>
890 .post-hover {<br/>
891 &nbsp;&nbsp;&nbsp;&nbsp;background-color:<b>#&lt;color&gt;</b>;<br/>
892 }
893 </td>
894 </tr>
895 <tr>
896 <td><b>Post Box</b><div class="item-small">Box where the post is displayed.</div></td>
897 <td><span class="color-box" style="background-color:#D9D9D9">&nbsp;&nbsp;&nbsp;</span> D9D9D9</td>
898 <td>
899 div.post-border {<br/>
900 &nbsp;&nbsp;&nbsp;&nbsp;border-color: <b>#&lt;color&gt;</b>;<br/>
901 }<br/>
902 </td>
903 </tr>
904 <tr>
905 <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>
906 <td>N/A</td>
907 <td>
908 span.connect-line {<br/>
909 &nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
910 }<br/>
911 <br/>
912 span.connect-end {<br/>
913 &nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
914 }<br/>
915 <br/>
916 td.connect-end {<br/>
917 &nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
918 }<br/>
919 <br/>
920 td.connect-node {<br/>
921 &nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
922 }<br/>
923 <br/>
924 td.connect-node-closed {<br/>
925 &nbsp;&nbsp;&nbsp;&nbsp;background-image:url("<b>&lt;image-URL&gt;</b>");<br/>
926 }
927 </td>
928 </tr>
929 </table>
930 <%;}};
931 public static final Help embed_redirect = new Help(
932 40, %>Is my embedded application also available on Nabble's website?<%){public String answer(){return %>
933 <p>
934 Yes, but you have the option to redirect all visits to your website. In this case,
935 when someone tries to access your application or posts, the browser will redirect to
936 your website and the desired page will be displayed. This option allows our search
937 engine to find messages from your application, but users will be redirected if they try
938 to open those messages.
939 </p>
940 <p>
941 To configure this option, go to the page where your application is embedded in and click
942 on <i>"Options > Embedding options"</i>:
943 </p>
944 <p><img src="/images/help/help_embed_default.png" style="padding-left:2em"/></p>
945 <%;}};
946
947 private static class Lazy {
948 private static final String[] examples = new String[]{
949 "<quote>some text</quote>",
950 "<quote author='Bob'>some text</quote>",
951 "<email>someone@nabble.com</email>",
952 "<raw>\nuninterpreted HTML like <a href='#'>link</a>\n</raw>",
953 };
954 private static final String exampleRows;
955 static {
956 StringBuilder buf = new StringBuilder();
957 for( String example : examples ) {
958 buf.append( %>
959 <tr>
960 <td class="medium-border-color"><%=HtmlUtils.htmlEncode(example)%></td>
961 <td class="second medium-border-color"><%=getHtml(example)%></td>
962 </tr>
963 <% );
964 }
965 exampleRows = buf.toString();
966 }
967 }
968
969 private static String getHtml(String text) {
970 try {
971 Html html = new Html(text);
972 HtmlListNamespace ns = new HtmlListNamespace(html,null, nabble.model.Message.Format.HTML);
973 Program program = Program.getInstance(ModuleManager.getGenericModules());
974 Template template = program.getTemplate( "process_message_html",
975 BasicNamespace.class, HtmlListNamespace.class
976 );
977 template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(),
978 new BasicNamespace(template), ns
979 );
980 return ns.toString();
981 } catch(CompileException e) {
982 logger.error("",e);
983 throw new RuntimeException(e);
984 }
985 }
986
987 public static final Help formatting = new Help(
988 41, %>How are messages formatted?<%){public String answer(){return %>
989 <p>For formatting, we use standard HTML tags.</p>
990
991 <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>
992
993 <p>We support some special tags which we process. Here is how they are used:</p>
994
995 <p>
996 <style type="text/css">
997 table.type-examples {
998 border-collapse:collapse;
999 }
1000 table.type-examples td {
1001 padding: .5em;
1002 border-bottom-width:1px;
1003 border-bottom-style: solid;
1004 }
1005 table.type-examples td.second {
1006 border-left-width:1px;
1007 border-left-style: solid;
1008 }
1009 </style>
1010 <table class="type-examples">
1011 <tr>
1012 <td class="shaded-bg-color medium-border-color"><b>You Type</b></td>
1013 <td class="second shaded-bg-color medium-border-color"><b>We Show</b></td>
1014 </tr>
1015 <%=Lazy.exampleRows%>
1016 </table>
1017 </p>
1018 <%;}};
1019
1020 public static final Help anonymous = new Help(
1021 42, %>What are anonymous users?<%){public String answer(){return %>
1022 <p>
1023 Anonymous users are users that didn't register with Nabble.
1024 All Nabble requires from them is a name that is displayed together with the message.
1025 Forums that allow anonymous users tend to have more participation, but they might generate confusion when users provide false or deceiving names.
1026 As the forum owner, you can always remove those messages from the forum.
1027 </p>
1028 <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>
1029 <%;}};
1030
1031 public static final Help mixed = new Help(
1032 43, %>How can I fix a mixed bulletin board?<%){public String answer(){return %>
1033 <p>
1034 In traditional forums, a bulleting board only shows subcategories where users are allowed to post messages.
1035 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.
1036 This situation is not easy to create since Nabble doesn't allow users to post new topics under a board,
1037 but you could face this problem if you change a regular forum into a bulletin board format or move threads directly to the board.
1038 </p>
1039 <p>
1040 A mixed board generally isn't a good idea and should be fixed in order to avoid confusion.
1041 Note that Nabble doesn't hide threads in that view because this would increase the confusion among users.
1042 It is the forum owner's responsibility to keep the forum clean and organized.
1043 </p>
1044 <h3>How to fix it?</h3>
1045 <p>
1046 If your forum has a mixed bulletin board, do the following:
1047 </p>
1048 <ol>
1049 <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>
1050 <li>
1051 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.
1052 You might have to move other sub-forums around in order to rebuild the bulletin board.
1053 </li>
1054 </ol>
1055 <%;}};
1056
1057 public static final Help subscriptions = new Help(
1058 45, %>Is it possible to post messages through email?<%){public String answer(){return %>
1059 <p>
1060 Yes. Nabble has email subscriptions that allow you to receive emails for each message
1061 posted under a forum. If you reply to those emails, your response will be appended to
1062 the discussion in the forum archive.
1063 </p>
1064 <p>
1065 To subscribe to a forum, open the forum page and click on <i>Options > Subscribe via email</i>.
1066 You can choose if you want to receive an email for each message posted or just new topics.
1067 </p>
1068
1069 <h2>Detailed Explanation</h2>
1070
1071 <p>
1072 All forums at Nabble have a built-in mailing list that people can use to communicate.
1073 In other words, users can compose, read and reply to messages via email independently of the forum web interface.
1074 </p>
1075
1076 <p>If you want to subscribe to a mailing list, open the forum interface and click on "Options > Subscribe via email" as seen below:</p>
1077
1078 <p><img src="/images/help/subscribe.png" alt="Subscribe via email"></p>
1079
1080 <p>Here you can see the options when you click on that link:</p>
1081
1082 <p><img src="/images/help/subscribe2.png" alt="Subscription options"></p>
1083
1084 <p><b>(1) Individual emails</b> - You receive one email for each new post under the forum. If you reply to such emails, your message will be archived as a new reply on the forum.</p>
1085
1086 <p><b>(2) Digest</b> - You receive one email with a summary of all posts created in the last 24 hours. You can't reply to this type of email.</p>
1087
1088 <p>To manage your subscriptions, click on your profile (top right corner), then click on "Personal Settings > Email Subscriptions". From that screen you can change and remove subscriptions.</p>
1089
1090 <h2>Posting via Email</h2>
1091
1092 <p>To know the email of a given forum, go to the forum and click on "Options > Post by email...". To prevent spam, forum addresses are unique for each user. So you can't get a forum address and send it to your friends (they must click on that link).</p>
1093 <%;}};
1094
1095 public static final Help embed_js_options = new Help(
1096 48, %>Can I change other behaviors of an embedded forum?<%){public String answer(){return %>
1097 <p>
1098 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.
1099 These options must be set as javascript variables in your HTML page (place them before the embedding code).
1100 For example, you can add the following code to your page:
1101 </p>
1102 <div style="font-family:monospace;margin:1em;">
1103 &lt;script type="text/javascript"><br>
1104 &nbsp;&nbsp;&nbsp;nabble_width = "500px";<br>
1105 &nbsp;&nbsp;&nbsp;nabble_ignore_scroll = true;<br>
1106 &nbsp;&nbsp;&nbsp;nabble_ignore_title = true;<br>
1107 &lt;/script><br>
1108 </div>
1109 <style type="text/css">
1110 table.info td {
1111 padding: .5em;
1112 }
1113 tr.header td {
1114 font-weight:bold;
1115 padding: .1em .5em;
1116 }
1117 </style>
1118 <table class="info">
1119 <tr class="header">
1120 <td class="shaded-bg-color">Variable</td>
1121 <td class="shaded-bg-color">Description</td>
1122 </tr>
1123 <tr>
1124 <td>nabble_width</td>
1125 <td>
1126 Use this variable if you want to have an embedded forum with fixed width.
1127 The default value is "100%" and you can change it according to standard CSS rules
1128 (e.g., "50%", "10em", "500px").
1129 </td>
1130 </tr>
1131 <tr>
1132 <td>nabble_ignore_scroll</td>
1133 <td>
1134 Set this variable to <b>true</b> if you don't want the embedded forum to
1135 scroll to specific posts or messages. By default, the embedded forum will
1136 eventually scroll the page to specific messages depending on the user navigation
1137 and clicked links.
1138 </td>
1139 </tr>
1140 <tr>
1141 <td>nabble_scroll_top</td>
1142 <td>
1143 Set this variable to <b>true</b> if you want the embedded forum to
1144 scroll to the top of your HTML page whenever the user navigates through the forum.
1145 By default, the forum will scroll to its top, which is not necessarily the top of your
1146 HTML page.
1147 </td>
1148 </tr>
1149 <tr>
1150 <td>nabble_ignore_title</td>
1151 <td>
1152 Set this variable to <b>true</b> if you don't want the embedded forum to
1153 change the title of your HTML page. By default, the embedded forum will
1154 set the title of your page with the forum name.
1155 </td>
1156 </tr>
1157 </table>
1158 <%;}};
1159
1160 public static final Help online = new Help(
1161 49, %>Is it possible to show which users are online?<%){
1162 public String getMetaDescription() { return "Nabble applications display who is online when you browse forums, photo galleries, newspapers, blogs and mailing list archives."; }
1163 public String getMetaKeywords() { return "online users, forum, photo gallery, newspaper, blog, mailing list archive, free forum, free blog, free photo gallery"; }
1164 public String answer(){return %>
1165 <p>
1166 Yes, all Nabble applications (e.g., forum, photo gallery, newspaper, blog, etc.) have this feature.
1167 Online users have a green circle at the bottom right corner of their avatars.
1168 </p>
1169 <%;}};
1170
1171 public static final Help domain_names = new Help(
1172 51, %>Can I access my forum with my own domain name?<%){
1173 public String answer(){return %>
1174 <p>
1175 Yes. Nabble allows you to change the domain name configuration of your application (e.g., forum, gallery, blog, news, etc.)
1176 by clicking on "Options > Editor > Change domain name". If you decide to use your own domain name, you will have to change
1177 its DNS configuration and make it resolve to the Nabble server where your forum is located (you can find instructions on the configuration screen).
1178 </p>
1179 <p>
1180 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;
1181 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
1182 to run custom JavaScript code in your pages <i>(to be implemented / Templates feature)</i>.
1183 </p>
1184 <%;}};
1185
1186 public static final Help inactivity_deletion = new Help(
1187 53, %>Will Nabble delete my forum, posts or anything I have created?<%){
1188 public String answer(){return %>
1189 <p>
1190 Nabble has a garbage collector process that searches for <b>inactive</b> forums, topics or messages
1191 in the database. If you receive an email with forums scheduled for deletion, you have to first understand
1192 why they are in that list. The most common cases are:
1193 </p>
1194 <p>
1195 <b>(1) Your forum hasn't been viewed by anyone recently</b>:
1196 If your forum is not dead, you can just save it from deletion by following the
1197 instructions on its page.
1198 </p>
1199 <p>
1200 <b>(2) Your post was removed from the forum</b>: the forum owner (or some other user
1201 that you replied to) might have moved your post (and replies) out of the forum. This is different from
1202 physical deletion. When a post is removed from a forum, it still exists in Nabble's database and can be found in
1203 the author's profile page. Such messages are not part of any forum and are probably not read by anyone.
1204 So you shouldn't care much about those messages.
1205 </p>
1206
1207 <p class="shaded-bg-color" style="padding:.5em">
1208 In summary, only root nodes are checked for deletion.
1209 This means that only threads that have been removed or inactive root level forums will be caught by the garbage collector process.
1210 </p>
1211
1212 <h2>Each visit counts</h2>
1213 <p>Threads inside an active forum will NOT be scheduled for deletion, even if they don't get any visits for a long time
1214 (although other threads in the same forum must get visits in order to keep the forum active). <b>So each visit adds activity
1215 points to the whole structure</b>. On the other hand, when a post or any node is removed from the structure,
1216 it will become a separated structure with its own activity level.</p>
1217
1218 <h2>How deletion works</h2>
1219 <p>If your forum gets deleted, the threads under it are not immediately deleted.
1220 What happens is that after the forum is deleted, these threads become top level independent nodes and
1221 then they are subject to the same deletion process after some weeks. So if a forum owner allows his forum
1222 to be deleted, thread starters can still save their threads.</p>
1223
1224 <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
1225 instructions on their page. You should also know that you can download the archives of your application
1226 by clicking on "Options > Download archives" (if you are the administrator).
1227 <a href="<%=Help.export.url()%>">Click here</a> for more information.</p>
1228 <%;}};
1229
1230 public static final Help export = new Help(
1231 54, %>Can I export my forum to a standard format?<%){
1232 public String answer(){return %>
1233 <p>Yes, Nabble can export your forum data, subcategories and messages to the standard XML format.
1234 You can download these files by clicking on "Options > Download archives". You will realize that Nabble
1235 doesn't have these files ready for you, so first you will have to build them. This process may take some
1236 minutes or even hours depending on the size of your application. You will receive an email when this process
1237 has finished.</p>
1238 <p>To make downloading easier, Nabble groups XML files into zip archives. Each zip archive contains thousands
1239 of XML files, where each file represents a node in the forum structure (<a href="<%=Jtp.homeContextUrl()%>/back-end.html">learn more</a>).
1240 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>
1241
1242 <table class="editor-table" cellpadding="5" style="font-size:90%;">
1243 <tr class="shaded-bg-color">
1244 <th align="left">Field</th>
1245 <th align="left">Description</th>
1246 </tr>
1247 <tr>
1248 <td>exportId</td>
1249 <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>
1250 </tr>
1251 <tr>
1252 <td>kind</td>
1253 <td>Kind of the node ("APP" for applications or "POST" for messages).</td>
1254 </tr>
1255 <tr>
1256 <td>ownerEmail</td>
1257 <td>Email of the user who created the node represented by the XML file.</td>
1258 </tr>
1259 <tr>
1260 <td>ownerName</td>
1261 <td>Name of the user who created the node represented by the XML file.</td>
1262 </tr>
1263 <tr>
1264 <td>ownerAnonymousId</td>
1265 <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>
1266 </tr>
1267 <tr>
1268 <td>subject</td>
1269 <td>Title/subject of this node.</td>
1270 </tr>
1271 <tr>
1272 <td>message</td>
1273 <td>Message contents of this node.</td>
1274 </tr>
1275 <tr>
1276 <td>msgFmt</td>
1277 <td>Format of the message (m=mail, h=html or t=text).</td>
1278 </tr>
1279 <tr>
1280 <td>parentId</td>
1281 <td>ID of the parent node.</td>
1282 </tr>
1283 <tr>
1284 <td>whenCreated</td>
1285 <td>Date/Time when the node was created (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>
1286 </tr>
1287 <tr>
1288 <td>hasReplyAlert</td>
1289 <td>true/false if user wants to receive new replies by email.</td>
1290 </tr>
1291 <tr>
1292 <td>whenUpdated</td>
1293 <td>Date/Time when the node was updated (number of milliseconds since January 1, 1970, 00:00:00 GMT)</td>
1294 </tr>
1295 <tr>
1296 <td>restriction</td>
1297 <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>
1298 </tr>
1299 <tr>
1300 <td>type</td>
1301 <td>Node/Application type (FORUM, BOARD, CATEGORY, NEWS, GALLERY, BLOG, COMMENT)</td>
1302 </tr>
1303 <tr>
1304 <td>customStyle</td>
1305 <td>Custom CSS stylesheet created for this node.</td>
1306 </tr>
1307 <tr>
1308 <td>pin</td>
1309 <td>Order of this node in the pinned list of the parent node.</td>
1310 </tr>
1311 <tr>
1312 <td>files</td>
1313 <td>Files attached to this node. Creates one entry for each file. Contents are byte arrays encrypted using Base64 encoding.</td>
1314 </tr>
1315 <tr>
1316 <td>messageID</td>
1317 <td>"Message ID" header of the email sent for this node (only for mailing list archives).</td>
1318 </tr>
1319 <tr>
1320 <td>isGuessedParent</td>
1321 <td>true/false if Nabble had to guess the parent of this node (only for mailing list archives).</td>
1322 </tr>
1323 <tr>
1324 <td>mlAddress</td>
1325 <td>Email address of the mailing list archived by this node (only for mailing list archives).</td>
1326 </tr>
1327 <tr>
1328 <td>mlUrl</td>
1329 <td>Website URL of the mailing list archived by this node.</td>
1330 </tr>
1331 <tr>
1332 <td>mlPlainTextOnly</td>
1333 <td>true/false if this mailing list accepts only plain-text emails.</td>
1334 </tr>
1335 <tr>
1336 <td>mlIgnoreNoArchive</td>
1337 <td>true/false if Nabble should ignore the X-No-Archive header in emails sent to this mailing list archive.</td>
1338 </tr>
1339 <tr>
1340 <td>mlServer</td>
1341 <td>Mailing list server type (e.g., google groups, yahoo groups, mailman, etc.)</td>
1342 </tr>
1343 </table>
1344 <%;}};
1345
1346 public static final Help pinned_subapps = new Help(
1347 55, %>What is the difference between pinned and unpinned sub-forums?<%){
1348 public String answer(){return %>
1349 <p>
1350 Before addressing this question, you have to understand how things work in the background.
1351 Essentially, Nabble has a node-architecture that resembles a file system, where forums (and other apps)
1352 are like folders and posts are like files. Forums and posts can be pinned to their parent in order to always
1353 be displayed on top. Here is an illustration:
1354 </p>
1355
1356 <p><img src="/images/help/help_node_structure.png" style="padding-left:2em"/></p>
1357
1358 <p>
1359 Only forum owners can pin sub-forums and topics. Actually, sub-forums created by owners are automatically
1360 pinned, and this makes a big difference to the forum structure. Nabble gives more priority to pinned
1361 sub-forums when it comes to how the forum front page looks. Unpinned sub-forums (also called
1362 <b>floating sub-forums</b>) are not part of the real forum structure and they float like normal topics.
1363 Here is a screenshot:
1364 </p>
1365
1366 <p><img src="/images/help/help_sub_forums.png" style="padding-left:2em"/></p>
1367
1368 <p>
1369 As you can see, floating sub-forums aren't much different than normal topics (except they have a folder
1370 icon close to them). When they receive new posts, they jump to the top just like other topics that receive
1371 new replies.
1372 </p>
1373 <%;}};
1374
1375 public static final Help mixed_lengths = new Help(
1376 56, %>How can I customize the "Mixed" application type?<%){
1377 public String answer(){return %>
1378 <p>
1379 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".
1380 In the "Preferences" group, there is a field for the number of topics in the mixed style:<br/><br/>
1381 <img src="/images/help/mixed_lengths.png" alt="topics configuration for mixed app type"/>
1382 <br/><br/>
1383 Enter a comma-separated list of values that represent how many topics each section of the mixed view should display.<br>
1384 <b>1st value</b> = number of topics to be displayed for the current application<br>
1385 <b>2nd value</b> = number of topics to be displayed for the first subcategory<br>
1386 <b>3rd value</b> = number of topics to be displayed for the second subcategory<br>
1387 and so on...<br>
1388 The <b>last number</b> is used for all other sections.<br>
1389 <div class="important">(All values must range from 1 to 20)</div>
1390 <br>Some examples:<br>
1391 <b>6</b> = All sections will display 6 topics.<br>
1392 <b>6,3</b> = 6 topics for the current application, 3 topics for all subcategories.<br>
1393 <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>
1394 <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>
1395 </p>
1396 <%;}};
1397
1398 public static void index() {
1399 Lucene.addHelp(map.values());
1400 }
1401 }
1402 %>