0
|
1 <macro name="topic" requires="servlet">
|
|
2 <n.if.is_blog_topic>
|
|
3 <then.switch. value="[n.topic_view/]">
|
|
4 <n.case value="[n.classic_view/]" do="[n.classic_blog_topic/]" />
|
|
5 <n.case value="[n.list_view/]" do="[n.list_blog_topic/]" />
|
|
6 <n.case value="[n.threaded_view/]" do="[n.threaded_blog_topic/]" />
|
|
7 </then.switch.>
|
|
8 <else.switch. value="[n.topic_view/]">
|
|
9 <n.case value="[n.classic_view/]" do="[n.classic_forum_topic/]" />
|
|
10 <n.case value="[n.list_view/]" do="[n.list_forum_topic/]" />
|
|
11 <n.case value="[n.threaded_view/]" do="[n.threaded_forum_topic/]" />
|
|
12 </else.switch.>
|
|
13 </n.if.is_blog_topic>
|
|
14 </macro>
|
|
15
|
|
16 <macro name="topic canonical path" requires="http_request">
|
|
17 <n.get_node_from_parameter.topic_path
|
|
18 view="[n.get_parameter name='view'/]"
|
|
19 index_record="[n.get_parameter name='index_record'/]"
|
|
20 />
|
|
21 </macro>
|
|
22
|
|
23 <macro name="is_blog_topic">
|
|
24 <n.regex_matches text="[n.node_page.page_node.app_or_root.type/]" pattern="news|gallery|blog"/>
|
|
25 </macro>
|
|
26
|
|
27 <namespace name="blog_topic_namespace" />
|
|
28 <namespace name="forum_topic_namespace" />
|
|
29 <namespace name="classic_view_namespace" />
|
|
30 <namespace name="list_view_namespace" />
|
|
31 <namespace name="threaded_view_namespace" />
|
|
32
|
|
33 <subroutine name="classic_blog_topic" requires="basic,nabble,servlet">
|
|
34 <n.classic_view_namespace.blog_topic_namespace.topic_html_page/>
|
|
35 </subroutine>
|
|
36
|
|
37 <subroutine name="list_blog_topic" requires="basic,nabble,servlet">
|
|
38 <n.list_view_namespace.blog_topic_namespace.topic_html_page/>
|
|
39 </subroutine>
|
|
40
|
|
41 <subroutine name="threaded_blog_topic" requires="basic,nabble,servlet">
|
|
42 <n.threaded_view_namespace.blog_topic_namespace.topic_html_page/>
|
|
43 </subroutine>
|
|
44
|
|
45 <subroutine name="classic_forum_topic" requires="basic,nabble,servlet">
|
|
46 <n.classic_view_namespace.forum_topic_namespace.topic_html_page/>
|
|
47 </subroutine>
|
|
48
|
|
49 <subroutine name="list_forum_topic" requires="basic,nabble,servlet">
|
|
50 <n.list_view_namespace.forum_topic_namespace.topic_html_page/>
|
|
51 </subroutine>
|
|
52
|
|
53 <subroutine name="threaded_forum_topic" requires="basic,nabble,servlet">
|
|
54 <n.threaded_view_namespace.forum_topic_namespace.topic_html_page/>
|
|
55 </subroutine>
|
|
56
|
|
57
|
|
58 <macro name="topic_html_page" requires="servlet">
|
|
59 <n.topic_html/>
|
|
60 </macro>
|
|
61
|
|
62 <macro name="topic_html" requires="servlet">
|
|
63 <n.topic_min_html>
|
|
64 <head>
|
|
65 <n.topic_common_head/>
|
|
66 <n.topic_head/>
|
|
67 <n.topic_meta/>
|
|
68 <n.increment_view_count/>
|
|
69 </head>
|
|
70 <body>
|
|
71 <n.page_node.topic_hardcoded_notices/>
|
|
72 <n.newsflash/>
|
|
73 <n.topic_header/>
|
|
74 <n.topic_controls/>
|
|
75 <n.topic_contents.view_contents.page_node.topic_rows/>
|
|
76 <n.topic_footer/>
|
|
77 </body>
|
|
78 </n.topic_min_html>
|
|
79 </macro>
|
|
80
|
|
81
|
|
82 <macro name="topic_rows" requires="node,blog_topic_namespace,classic_view_namespace">
|
|
83 <n.post_list.
|
|
84 sort="date-ascending"
|
|
85 start="[n.classic_index_record/]"
|
|
86 length="[n.classic_rows_per_page/]"
|
|
87 >
|
|
88 <n.preload_messages/>
|
|
89 <n.loop.classic_row/>
|
|
90 </n.post_list.>
|
|
91 </macro>
|
|
92
|
|
93 <macro name="topic_rows" requires="node,blog_topic_namespace,list_view_namespace">
|
|
94 <n.post_list.
|
|
95 sort="date-ascending"
|
|
96 start="1"
|
|
97 length="10000"
|
|
98 >
|
|
99 <n.preload_messages/>
|
|
100 <n.loop.current_node.clickable_post/>
|
|
101 </n.post_list.>
|
|
102 </macro>
|
|
103
|
|
104 <macro name="topic_rows" requires="node,blog_topic_namespace,threaded_view_namespace">
|
|
105 <n.children_list. start="0" length="10000">
|
|
106 <n.loop.current_node.threaded_posts/>
|
|
107 </n.children_list.>
|
|
108 </macro>
|
|
109
|
|
110 <macro name="topic_rows" requires="node,forum_topic_namespace,classic_view_namespace">
|
|
111 <n.post_list.
|
|
112 sort="date-ascending"
|
|
113 start="[n.classic_index_record/]"
|
|
114 length="[n.classic_rows_per_page/]"
|
|
115 >
|
|
116 <n.preload_messages/>
|
|
117 <n.loop.classic_row/>
|
|
118 </n.post_list.>
|
|
119 </macro>
|
|
120
|
|
121 <macro name="topic_rows" requires="node,forum_topic_namespace,list_view_namespace">
|
|
122 <n.post_list.
|
|
123 sort="date-ascending"
|
|
124 start="0"
|
|
125 length="10000"
|
|
126 >
|
|
127 <n.preload_messages/>
|
|
128 <n.loop.current_node.clickable_post/>
|
|
129 </n.post_list.>
|
|
130 </macro>
|
|
131
|
|
132 <macro name="topic_rows" requires="node,forum_topic_namespace,threaded_view_namespace">
|
|
133 <n.threaded_posts/>
|
|
134 </macro>
|
|
135
|
|
136
|
|
137 <macro name="topic_min_html" parameters="head,body" requires="servlet">
|
|
138 <n.node_page.>
|
|
139 <n.topic_caching/>
|
|
140 <n.check_that_is_post/>
|
|
141 <n.html>
|
|
142 <head>
|
|
143 <n.head/>
|
|
144 </head>
|
|
145 <body>
|
|
146 <n.body/>
|
|
147 <n.topic_bottom/>
|
|
148 </body>
|
|
149 </n.html>
|
|
150 </n.node_page.>
|
|
151 </macro>
|
|
152
|
|
153 <macro name="topic_bottom">
|
|
154 <n.comment.>To be overridden</n.comment.>
|
|
155 </macro>
|
|
156
|
|
157 <macro name="topic_caching">
|
|
158 <n.uncache_for.>
|
|
159 <n.descendant_changes.page_node.id/>
|
|
160 <n.bread_crumb_changes.page_node.id/>
|
|
161 </n.uncache_for.>
|
|
162 </macro>
|
|
163
|
|
164 <macro name="topic_title" dot_parameter="ending">
|
|
165 <title><n.compress.>
|
|
166 <n.page_node.topic_title_contents/>
|
|
167 <n.ending/>
|
|
168 </n.compress.></title>
|
|
169 </macro>
|
|
170
|
|
171 <macro name="topic_title_contents" requires="node">
|
|
172 <n.if.has_property name="page_title">
|
|
173 <then.get_property name="page_title"/>
|
|
174 <else.default_topic_title_contents/>
|
|
175 </n.if.has_property>
|
|
176 </macro>
|
|
177
|
|
178 <macro name="default_topic_title_contents" requires="node">
|
|
179 <n.app_or_root.subject/> -
|
|
180 <n.subject/>
|
|
181 </macro>
|
|
182
|
|
183 <macro name="topic_meta" requires="node_page,servlet">
|
|
184 <n.if.equal value1="[n.topic_view/]" value2="[n.classic_view/]">
|
|
185 <then>
|
|
186 <n.topic_meta_description/>
|
|
187 <n.topic_meta_keywords/>
|
|
188 </then>
|
|
189 <else>
|
|
190 <n.set_var. name='canonical_url'><n.page_node.topic_path view="[n.classic_view/]"/></n.set_var.>
|
|
191 <link rel="canonical" href="[n.var name='canonical_url'/]" />
|
|
192 <META NAME="robots" CONTENT="noindex,follow"/>
|
|
193 </else>
|
|
194 </n.if.equal>
|
|
195 </macro>
|
|
196
|
|
197 <macro name="topic_meta_description" requires="node_page">
|
|
198 <META NAME="description" CONTENT="[n.page_number_in_brackets/][n.page_node.build_meta_description/]"/>
|
|
199 </macro>
|
|
200
|
|
201 <macro name="topic_meta_keywords" requires="node_page">
|
|
202 <META NAME="keywords" CONTENT="[n.page_node.build_meta_keywords/]"/>
|
|
203 </macro>
|
|
204
|
|
205 <macro name="check_that_is_post">
|
|
206 <n.if.page_node.is_app>
|
|
207 <then.redirect_to.page_node.url/>
|
|
208 </n.if.page_node.is_app>
|
|
209 </macro>
|
|
210
|
|
211 <macro name="is_blog_style">
|
|
212 <n.cache. var="is_blog_style">
|
|
213 <n.regex_matches text="[n.page_node.app_or_root.type/]" pattern="news|gallery|blog"/>
|
|
214 </n.cache.>
|
|
215 </macro>
|
|
216
|
|
217 <macro name="topic_common_head">
|
|
218 <n.search_highlight_js/>
|
|
219 <n.message_width_js/>
|
|
220 </macro>
|
|
221
|
|
222 <macro name="message_width_js">
|
|
223 <script type="text/javascript">
|
|
224 Nabble.messageTextWidth();
|
|
225 </script>
|
|
226 </macro>
|
|
227
|
|
228 <macro name="search_highlight_js">
|
|
229 <script type="text/javascript">
|
|
230 var terms = Nabble.getSearchTerms();
|
|
231 var hasTurnOff = false;
|
|
232 Nabble.searchHighlight = function($elem) {
|
|
233 if (terms != null && terms.length > 0) {
|
|
234 $elem.each(function() {
|
|
235 Nabble.highlightSearchTerms(terms, this);
|
|
236 });
|
|
237 if (Nabble.hasHighlightedTerms && !hasTurnOff) {
|
|
238 var turnOffLink = '<span id="turn-off-highlight-control"><span class="highlight"> X </span> ';
|
|
239 turnOffLink += '<a href="javascript:void(0)" onclick="Nabble.turnOffHighlight()"><t>Turn off highlighting</t></a></span>';
|
|
240 $('#topics-controls-right').prepend(turnOffLink);
|
|
241 hasTurnOff = true;
|
|
242 }
|
|
243 }
|
|
244 };
|
|
245 Nabble.turnOffHighlight = function() {
|
|
246 Nabble.deleteCookie("query");
|
|
247 Nabble.deleteCookie("searchuser");
|
|
248 Nabble.deleteCookie("searchterms");
|
|
249 $('span.search-highlight').removeClass('bold highlight');
|
|
250 $('#turn-off-highlight-control').hide();
|
|
251 };
|
|
252 </script>
|
|
253 </macro>
|
|
254
|
|
255 <macro name="topic_head" requires="classic_view_namespace">
|
|
256 <n.compress.>
|
|
257 <n.search_terms_js selector="h2.post-subject,div.message-text"/>
|
|
258 <n.classic_js/>
|
|
259 <n.if.has_small_avatar>
|
|
260 <then.classic_stylesheet_small_avatar/>
|
|
261 <else.classic_stylesheet_big_avatar/>
|
|
262 </n.if.has_small_avatar>
|
|
263 </n.compress.>
|
|
264
|
|
265 <n.topic_title.>
|
|
266 <n.hide_if_equals. value1="[n.topic_page_number/]" value2="1">
|
|
267 | <t>Page <t.number.topic_page_number/></t>
|
|
268 </n.hide_if_equals.>
|
|
269 </n.topic_title.>
|
|
270 </macro>
|
|
271
|
|
272 <macro name="page_number_in_brackets">
|
|
273 <n.hide_if_equals. value1="[n.topic_page_number/]" value2="1">
|
|
274 [<t>Page <t.number.topic_page_number/></t>]<n.space/>
|
|
275 </n.hide_if_equals.>
|
|
276 </macro>
|
|
277
|
|
278 <macro name="has_small_avatar">
|
|
279 <n.is_blog_style/>
|
|
280 </macro>
|
|
281
|
|
282 <macro name="search_terms_js" parameters="selector">
|
|
283 <script type="text/javascript">
|
|
284 $(document).ready(function() {
|
|
285 Nabble.searchHighlight($('<n.selector/>'));
|
|
286 });
|
|
287 </script>
|
|
288 <n.call_later value="[n.page_node.id/]" param="searchSpecial"/>
|
|
289 </macro>
|
|
290
|
|
291 <macro name="search_terms_special_js">
|
|
292 <n.param_loop. param="searchSpecial">
|
|
293 var nodeIds = [<n.page_node.as_node_page.search_namespace.descendants_ids_matching_search_query/>];
|
|
294 for (var i=0; i <n.lt/> nodeIds.length; i++)
|
|
295 $('span.post-date'+nodeIds[i]).addClass('highlight');
|
|
296 </n.param_loop.>
|
|
297 </macro>
|
|
298
|
|
299 <macro name="topic_head" requires="list_view_namespace">
|
|
300 <n.compress.>
|
|
301 <n.tooltip_head/>
|
|
302 <n.search_terms_js selector="span.post-subject"/>
|
|
303 <n.ajax_posts_js view_name="list"/>
|
|
304 <n.list_stylesheet/>
|
|
305 </n.compress.>
|
|
306 <n.topic_title.>
|
|
307 | <t>List View</t>
|
|
308 </n.topic_title.>
|
|
309 </macro>
|
|
310
|
|
311 <macro name="topic_head" requires="threaded_view_namespace">
|
|
312 <n.compress.>
|
|
313 <n.tooltip_head/>
|
|
314 <n.search_terms_js selector="span.post-subject"/>
|
|
315 <n.ajax_posts_js view_name="threaded"/>
|
|
316 <n.tree_panning_js/>
|
|
317 <n.threaded_stylesheet/>
|
|
318 </n.compress.>
|
|
319 <n.topic_title.>
|
|
320 | <t>Threaded View</t>
|
|
321 </n.topic_title.>
|
|
322 </macro>
|
|
323
|
|
324 <macro name="topic_contents" dot_parameter="contents" requires="forum_topic_namespace">
|
|
325 <n.topic_contents_div.contents />
|
|
326 </macro>
|
|
327
|
|
328 <macro name="topic_contents_div" dot_parameter="contents">
|
|
329 <div id="topic-contents" style="margin-top:1em;clear:both">
|
|
330 <n.contents/>
|
|
331 </div>
|
|
332 </macro>
|
|
333
|
|
334 <macro name="classic_row_count" requires="blog_topic_namespace">
|
|
335 <n.page_node.replies/>
|
|
336 </macro>
|
|
337
|
|
338 <macro name="classic_row_count" requires="forum_topic_namespace">
|
|
339 <n.page_node.descendant_count/>
|
|
340 </macro>
|
|
341
|
|
342 <macro name="classic_row" requires="node_list">
|
|
343 <n.if.has_small_avatar>
|
|
344 <then.current_node.classic_row_with_small_avatar/>
|
|
345 <else.current_node.classic_row_with_big_avatar/>
|
|
346 </n.if.has_small_avatar>
|
|
347 <n.if.is_last_element>
|
|
348 <then.current_node.mark_as_visited/>
|
|
349 </n.if.is_last_element>
|
|
350 </macro>
|
|
351
|
|
352 <macro name="mark_as_visited" requires="node">
|
|
353 <n.call_later value="[n.id/]" param="markVisited"/>
|
|
354 </macro>
|
|
355
|
|
356 <macro name="mark_as_visited_js">
|
|
357 <n.if.visitor.is_registered>
|
|
358 <then>
|
|
359 <n.param_loop. param="markVisited">
|
|
360 <n.if_node_parameter_is_valid.>
|
|
361 <n.visitor.mark_visited node="[n.page_node.topic_node/]" last_node_id="[n.page_node.id/]"/>
|
|
362 </n.if_node_parameter_is_valid.>
|
|
363 </n.param_loop.>
|
|
364 </then>
|
|
365 </n.if.visitor.is_registered>
|
|
366 </macro>
|
|
367
|
|
368 <macro name="classic_pagination" parameters="margin,row_count">
|
|
369 <n.paging.
|
|
370 total_rows="[n.row_count/]"
|
|
371 current_row="[n.classic_index_record/]"
|
|
372 rows_per_page="[n.classic_rows_per_page/]"
|
|
373 >
|
|
374 <n.generic_paging>
|
|
375 <margin><n.margin/></margin>
|
|
376 <url><n.page_node.topic_path view="[n.classic_view/]" index_record="[n.page_row/]"/></url>
|
|
377 </n.generic_paging>
|
|
378 </n.paging.>
|
|
379 </macro>
|
|
380
|
|
381 <macro name="classic_stylesheet_big_avatar">
|
|
382 <style type="text/css">
|
|
383 div.classic-header {
|
|
384 height:2.2em;
|
|
385 clear:both;
|
|
386 overflow:hidden;
|
|
387 }
|
|
388 div.classic-author-name {
|
|
389 float:left;
|
|
390 width: 140px;
|
|
391 overflow: hidden;
|
|
392 text-align:center;
|
|
393 font-weight:bold;
|
|
394 }
|
|
395 div.classic-subject-line {
|
|
396 left:.5em;
|
|
397 overflow:hidden;
|
|
398 height:1.3em;
|
|
399 position:relative;
|
|
400 }
|
|
401 div.classic-right-menu {
|
|
402 float:right;
|
|
403 padding-left:1em;
|
|
404 }
|
|
405 div.classic-bar {
|
|
406 padding:.5em .3em;
|
|
407 clear:both;
|
|
408 height:1.8em;
|
|
409 }
|
|
410 table.classic-body {
|
|
411 border-collapse:collapse;
|
|
412 margin-bottom:1em;
|
|
413 table-layout: fixed;
|
|
414 width:100%;
|
|
415 }
|
|
416 td.classic-author {
|
|
417 vertical-align: top;
|
|
418 text-align:center;
|
|
419 width:140px;
|
|
420 padding-bottom:1em;
|
|
421 }
|
|
422 td.classic-message {
|
|
423 vertical-align:top;
|
|
424 padding:1em;
|
|
425 }
|
|
426 div.message-text {
|
|
427 cursor:text;
|
|
428 overflow-x:auto;
|
|
429 }
|
|
430 div.avatar-inner {
|
|
431 margin-left:20px;
|
|
432 }
|
|
433 div.avatar-outer {
|
|
434 width:140px;
|
|
435 text-align:left;
|
|
436 }
|
|
437 div.avatar-label {
|
|
438 white-space:nowrap;
|
|
439 font-size:80%;
|
|
440 }
|
|
441 </style>
|
|
442 </macro>
|
|
443
|
|
444 <macro name="classic_stylesheet_small_avatar">
|
|
445 <style type="text/css">
|
|
446 div.classic-header {
|
|
447 height:2.2em;
|
|
448 min-height:33px;
|
|
449 clear:both;
|
|
450 overflow:hidden;
|
|
451 }
|
|
452 div.classic-bar {
|
|
453 padding:0 .4em .7em;
|
|
454 clear:both;
|
|
455 height:1.7em;
|
|
456 min-height:33px;
|
|
457 }
|
|
458 table.classic-author-name {
|
|
459 border-spacing:0;
|
|
460 width: 140px;
|
|
461 float:left;
|
|
462 }
|
|
463 table.classic-author-name td {
|
|
464 overflow-x: hidden;
|
|
465 height:2.2em;
|
|
466 }
|
|
467 table.classic-author-name td.avatar {
|
|
468 width:30px;
|
|
469 overflow:visible;
|
|
470 }
|
|
471 div.classic-subject-line {
|
|
472 left:.5em;
|
|
473 overflow-x:hidden;
|
|
474 line-height:2.4em;
|
|
475 position:relative;
|
|
476 }
|
|
477 div.classic-right-menu {
|
|
478 float:right;
|
|
479 line-height:2.4em;
|
|
480 padding-left:1em;
|
|
481 }
|
|
482 table.classic-body {
|
|
483 border-collapse:collapse;
|
|
484 margin-bottom:1em;
|
|
485 table-layout: fixed;
|
|
486 width:100%;
|
|
487 }
|
|
488 td.classic-author {
|
|
489 vertical-align: top;
|
|
490 text-align:center;
|
|
491 width:5px;
|
|
492 padding:1em 0;
|
|
493 }
|
|
494 td.classic-message {
|
|
495 vertical-align:top;
|
|
496 padding:1em;
|
|
497 }
|
|
498 div.message-text {
|
|
499 cursor:text;
|
|
500 overflow-x:auto;
|
|
501 }
|
|
502 </style>
|
|
503 </macro>
|
|
504
|
|
505 <macro name="classic_row_with_small_avatar" requires="node, node_list">
|
|
506 <div class="classic-row">
|
|
507 <div class="classic-header">
|
|
508 <div class="classic-bar shaded-bg-color rounded-top">
|
|
509 <table class="classic-author-name">
|
|
510 <tr>
|
|
511 <td class="avatar"><n.owner.avatar border_class="medium-border-color"/></td>
|
|
512 <td class="bold nowrap"><n.owner.user_link class="owner-link"/></td>
|
|
513 </tr>
|
|
514 </table>
|
|
515 <div class="classic-right-menu shaded-bg-color weak-color">
|
|
516 <n.reply_link/> |
|
|
517 <n.threaded_link/> |
|
|
518 <n.post_dropdown/>
|
|
519 </div>
|
|
520 <div class="classic-subject-line">
|
|
521 <n.classic_post_date/>
|
|
522 <n.classic_subject_line/>
|
|
523 </div>
|
|
524 </div>
|
|
525 </div>
|
|
526 <table class="classic-body">
|
|
527 <tr>
|
|
528 <td class="classic-author shaded-bg-color rounded-bottom">
|
|
529 <n.red_arrow_icon/>
|
|
530 </td>
|
|
531 <td class="classic-message">
|
|
532 <n.classic_message_cell/>
|
|
533 </td>
|
|
534 </tr>
|
|
535 </table>
|
|
536 </div>
|
|
537 </macro>
|
|
538
|
|
539 <macro name="classic_row_with_big_avatar" requires="node, node_list">
|
|
540 <div class="classic-row">
|
|
541 <div class="classic-header">
|
|
542 <div class="classic-bar shaded-bg-color rounded-top">
|
|
543 <div class="classic-author-name nowrap">
|
|
544 <n.owner.user_link/>
|
|
545 </div>
|
|
546 <div class="classic-right-menu shaded-bg-color weak-color">
|
|
547 <n.reply_link/> |
|
|
548 <n.threaded_link/> |
|
|
549 <n.post_dropdown/>
|
|
550 </div>
|
|
551 <div class="classic-subject-line">
|
|
552 <n.red_arrow_icon/>
|
|
553 <n.classic_post_date/>
|
|
554 <n.classic_subject_line/>
|
|
555 </div>
|
|
556 </div>
|
|
557 </div>
|
|
558 <table class="classic-body">
|
|
559 <tr>
|
|
560 <td class="classic-author shaded-bg-color rounded-bottom">
|
|
561 <n.classic_big_avatar_cell/>
|
|
562 </td>
|
|
563 <td class="classic-message">
|
|
564 <n.classic_message_cell/>
|
|
565 </td>
|
|
566 </tr>
|
|
567 </table>
|
|
568 </div>
|
|
569 </macro>
|
|
570
|
|
571 <macro name="classic_big_avatar_cell" requires="node">
|
|
572 <div class="avatar-outer">
|
|
573 <div class="avatar-inner">
|
|
574 <n.owner.avatar size="big" border_class="medium-border-color"/>
|
|
575 </div>
|
|
576 </div>
|
|
577 <n.avatar_label condition="[n.owner.is_site_admin/]" label="[b][t]Administrator[/t][/b]"/>
|
|
578 <n.avatar_label condition="[n.owner.is_banned/]" label="[t]Banned User[/t]"/>
|
|
579 <n.owner.post_count/>
|
|
580 </macro>
|
|
581
|
|
582 <macro name="avatar_label" parameters="condition" dot_parameter="label">
|
|
583 <n.if.condition>
|
|
584 <then>
|
|
585 <div class="avatar-label weak-color"><n.label/></div>
|
|
586 </then>
|
|
587 </n.if.condition>
|
|
588 </macro>
|
|
589
|
|
590 <macro name="classic_message_cell" requires="node">
|
|
591 <n.pending_notice/>
|
|
592 <n.updated_notice/>
|
|
593 <n.reply_notice/>
|
|
594 <n.message_text/>
|
|
595 </macro>
|
|
596
|
|
597 <macro name="post_count" requires="user">
|
|
598 <div class="post-count[n.user_tag_id/] avatar-label weak-color"></div>
|
|
599 <n.call_later value="[n.id/]" param="postCount"/>
|
|
600 </macro>
|
|
601
|
|
602 <macro name="post_count_js">
|
|
603 <n.param_loop. param="postCount">
|
|
604 <n.if.not.page_user.is_deactivated>
|
|
605 <then>
|
|
606 $('div.post-count<n.page_user.user_tag_id/>')
|
|
607 .html('<n.one_or_many n="[n.page_user.post_count_value/]" one_text="[t]post[/t]" many_text="[t]posts[/t]"/>');
|
|
608 </then>
|
|
609 </n.if.not.page_user.is_deactivated>
|
|
610 </n.param_loop.>
|
|
611 </macro>
|
|
612
|
|
613 <macro name="updated_notice" requires="node">
|
|
614 <n.if.was_updated>
|
|
615 <then>
|
|
616 <div class="weak-color" style="font-size:80%;padding-bottom:1em">
|
|
617 <t>This post was updated on <t.date.when_updated.long_format/>.</t>
|
|
618 </div>
|
|
619 </then>
|
|
620 </n.if.was_updated>
|
|
621 </macro>
|
|
622
|
|
623 <macro name="pending_notice" requires="node">
|
|
624 <n.if.is_pending>
|
|
625 <then>
|
|
626 <div class="info-message rounded" style="padding:.5em;margin:-.8em -.8em .8em -.8em;font-size:90%">
|
|
627 <t>This post has NOT been accepted by the mailing list yet.</t>
|
|
628 </div>
|
|
629 </then>
|
|
630 </n.if.is_pending>
|
|
631 </macro>
|
|
632
|
|
633 <macro name="reply_notice" requires="node">
|
|
634 <n.if.both condition1="[n.has_previous_node/]" condition2="[n.not.parent_node.equals.previous_node/]">
|
|
635 <then>
|
|
636 <div class="weak-color" style="font-size:80%;padding-bottom:1em">
|
|
637 <t>In reply to <n.parent_link.>this post</n.parent_link.> by <t.author.parent_node.owner.name/></t>
|
|
638 </div>
|
|
639 </then>
|
|
640 </n.if.both>
|
|
641 </macro>
|
|
642
|
|
643 <macro name="parent_link" dot_parameter="text" requires="node">
|
|
644 <a href="[n.parent_node.url/]" rel="nofollow"><n.text/></a>
|
|
645 </macro>
|
|
646
|
|
647 <macro name="classic_subject_line" requires="node">
|
|
648 <h2 class="post-subject float-left adbayes-content" style="width:30%;overflow:visible;font-family:inherit">
|
|
649 <n.break_up.subject/>
|
|
650 </h2>
|
|
651 </macro>
|
|
652
|
|
653 <macro name="red_arrow_icon" requires="node">
|
|
654 <span id="red-arrow[n.id/]" class="float-left invisible" style="margin-top:.2em">
|
|
655 <img title="Selected post" width="15" height="15" src="/images/arrow.png" alt="Selected post"/>
|
|
656 </span>
|
|
657 </macro>
|
|
658
|
|
659 <macro name="all_posts_js_array">
|
|
660 <n.page_node.post_list.
|
|
661 sort="date-ascending"
|
|
662 start="0"
|
|
663 length="10000"
|
|
664 >
|
|
665 <n.loop.>
|
|
666 <n.if.not.is_first_element>
|
|
667 <then>,</then>
|
|
668 </n.if.not.is_first_element>
|
|
669 <n.current_node.id/>
|
|
670 </n.loop.>
|
|
671 </n.page_node.post_list.>
|
|
672 </macro>
|
|
673
|
|
674 <macro name="all_urls_js_array">
|
|
675 <n.page_node.post_list.
|
|
676 sort="date-ascending"
|
|
677 start="0"
|
|
678 length="10000"
|
|
679 >
|
|
680 <n.no_output.next_node/>
|
|
681 <n.all_urls_js_array_url/>
|
|
682 <n.loop. by="[n.classic_rows_per_page/]">
|
|
683 ,<n.all_urls_js_array_url/>
|
|
684 </n.loop.>
|
|
685 </n.page_node.post_list.>
|
|
686 </macro>
|
|
687
|
|
688 <macro name="all_urls_js_array_url">
|
|
689 "<n.page_node.topic_path view="[n.classic_view/]" index_record="[n.current_index/]"/>"
|
|
690 </macro>
|
|
691
|
|
692 <macro name="classic_js">
|
|
693 <script type="text/javascript">
|
|
694 var _hash = Nabble.hash();
|
|
695 if (_hash) {
|
|
696 (function(){
|
|
697 var post = _hash.substr(2);
|
|
698 var allPosts = [<n.compress.all_posts_js_array/>];
|
|
699 var allURLs = [<n.compress.all_urls_js_array/>];
|
|
700 var iPost = allPosts.indexOf(parseInt(post));
|
|
701 var lower = <n.default. to="0"><n.classic_index_record/></n.default.>;
|
|
702 var upper = lower + <n.classic_rows_per_page/>;
|
|
703 <![CDATA[
|
|
704 if (iPost != -1 && (iPost < lower || iPost >= upper))
|
|
705 ]]>
|
|
706 location.replace(allURLs[Math.floor(iPost/<n.classic_rows_per_page/>)]+_hash);
|
|
707 })();
|
|
708 }
|
|
709
|
|
710 $(document).ready(function() {
|
|
711 var rootId = '<n.page_node.id/>';
|
|
712 <![CDATA[
|
|
713 var currentPostId = rootId;
|
|
714 var isChangingViews = _hash == '#none';
|
|
715 if (_hash && !isChangingViews)
|
|
716 currentPostId = _hash.substr(2);
|
|
717
|
|
718 Nabble.hideQuotes();
|
|
719
|
|
720 function scrollToSelectedPost() {
|
|
721 var $arrow = $('#red-arrow'+currentPostId).show();
|
|
722 if ($arrow.size() > 0) {
|
|
723 var isRootPost = currentPostId == rootId;
|
|
724 if (Nabble.isEmbedded) {
|
|
725 if (Nabble.canScroll()) scrollTo(0, 0);
|
|
726 var y = isChangingViews? null : isRootPost? 1 : $arrow.parents('div.classic-row').offset().top;
|
|
727 Nabble.resizeFrames('', y);
|
|
728 } else if (Nabble.canScroll() && !isRootPost) {
|
|
729 var yPos = $arrow.offset().top;
|
|
730 scrollTo(0,yPos-20);
|
|
731 }
|
|
732 } else {
|
|
733 if (Nabble.isEmbedded && Nabble.canScroll()) {
|
|
734 Nabble.resizeFrames('', 1);
|
|
735 } else {
|
|
736 var tb = $('div.top-bar').get(0);
|
|
737 if (tb)
|
|
738 tb.scrollIntoView();
|
|
739 }
|
|
740 }
|
|
741 };
|
|
742 $(window).load(scrollToSelectedPost);
|
|
743
|
|
744 if (Nabble.isEmbedded) {
|
|
745 $('div.message-text img').load(Nabble.resizeFrames);
|
|
746 }
|
|
747 ]]>
|
|
748 });
|
|
749 </script>
|
|
750 </macro>
|
|
751
|
|
752 <macro name="classic_post_date" requires="node">
|
|
753 <span class="post-date float-left">
|
|
754 <n.when_created.long_format/>
|
|
755 </span>
|
|
756 </macro>
|
|
757
|
|
758 <macro name="classic_index_record" requires="servlet">
|
|
759 <n.get_parameter name="index_record"/>
|
|
760 </macro>
|
|
761
|
|
762 <macro name="classic_index_record" requires="blog_topic_namespace, servlet">
|
|
763 <n.int. i="[n.default. to='0'][n.get_parameter name='index_record'/][/n.default.]">
|
|
764 <n.plus i="1"/>
|
|
765 </n.int.>
|
|
766 </macro>
|
|
767
|
|
768 <macro name="classic_rows_per_page">
|
|
769 20
|
|
770 </macro>
|
|
771
|
|
772 <macro name="view_contents" dot_parameter="rows" requires="classic_view_namespace">
|
|
773 <div id="classic-contents">
|
|
774 <n.classic_pagination margin="0 .2em .5em" row_count="[n.classic_row_count/]" />
|
|
775 <n.rows/>
|
|
776 <n.classic_pagination margin="1em .2em 0" row_count="[n.classic_row_count/]" />
|
|
777 </div>
|
|
778 </macro>
|
|
779
|
|
780 <macro name="view_contents" dot_parameter="rows" requires="list_view_namespace">
|
|
781 <div id="list-contents">
|
|
782 <n.rows/>
|
|
783 </div>
|
|
784 </macro>
|
|
785
|
|
786 <macro name="view_contents" dot_parameter="rows" requires="threaded_view_namespace">
|
|
787 <div id="threaded-contents" style="margin-left:0">
|
|
788 <n.rows/>
|
|
789 </div>
|
|
790 </macro>
|
|
791
|
|
792 <macro name="threaded_stylesheet">
|
|
793 <style type="text/css">
|
|
794 #topic-contents {
|
|
795 overflow:hidden;
|
|
796 cursor: url("/images/hand.png"),w-resize;
|
|
797 }
|
|
798 div.clickable-row {
|
|
799 white-space:nowrap;
|
|
800 right:1em;
|
|
801 padding:.2em 0;
|
|
802 cursor:pointer;
|
|
803 }
|
|
804 div.full-row {
|
|
805 border-width:2px;
|
|
806 border-style:solid;
|
|
807 padding:.3em .8em .5em;
|
|
808 cursor:text;
|
|
809 }
|
|
810 div.full-row-header {
|
|
811 padding-bottom:1em;
|
|
812 cursor:pointer;
|
|
813 }
|
|
814 div.full-row-header > * {
|
|
815 cursor:pointer;
|
|
816 }
|
|
817 div.connect-outer {
|
|
818 background-image:url("/images/connect-line.gif");
|
|
819 }
|
|
820 div.outer-line {
|
|
821 background-repeat: repeat-y;
|
|
822 }
|
|
823 div.outer-end {
|
|
824 background-repeat: no-repeat;
|
|
825 }
|
|
826 div.connect-inner {
|
|
827 padding-left:1em;
|
|
828 cursor: url("/images/hand.png"),w-resize;
|
|
829 }
|
|
830 div.inner-line {
|
|
831 background:none;
|
|
832 }
|
|
833 div.inner-end {
|
|
834 background:url("/images/connect-end.gif") no-repeat;
|
|
835 }
|
|
836 span.post-snippet { font-size:75%; }
|
|
837
|
|
838 div.message-text {
|
|
839 cursor:text;
|
|
840 overflow-x:auto;
|
|
841 }
|
|
842 div.right-menu {
|
|
843 float:right;
|
|
844 padding:.3em;
|
|
845 }
|
|
846 img.view-icon {
|
|
847 border:none;
|
|
848 width:18px;
|
|
849 height:18px;
|
|
850 vertical-align:middle;
|
|
851 }
|
|
852 img.close {
|
|
853 width:11px;
|
|
854 height:11px;
|
|
855 }
|
|
856 </style>
|
|
857 </macro>
|
|
858
|
|
859 <macro name="tree_panning_js">
|
|
860 <script type="text/javascript">
|
|
861 $(document).ready(function() {
|
|
862 (function() {
|
|
863 var down = null;
|
|
864 var initialLeft = null;
|
|
865 var $area = $('#threaded-contents');
|
|
866 function startDrag(e) {
|
|
867 if (e.target == this) {
|
|
868 down = e.pageX;
|
|
869 initialLeft = parseInt($area.css('margin-left'));
|
|
870 return false;
|
|
871 }
|
|
872 };
|
|
873 function drag(e) {
|
|
874 if (down) {
|
|
875 var m = initialLeft + (e.pageX - down);
|
|
876 $area.css('margin-left',m > 0? '0' : m+'px');
|
|
877 }
|
|
878 };
|
|
879 function stopDrag(e){
|
|
880 down = null;
|
|
881 initialLeft = null;
|
|
882 };
|
|
883 $('div.connect-inner,#topic-contents')
|
|
884 .mousedown(startDrag)
|
|
885 .mousemove(drag)
|
|
886 .mouseup(stopDrag);
|
|
887 $(document).mouseup(stopDrag);
|
|
888 })();
|
|
889 });
|
|
890 </script>
|
|
891 </macro>
|
|
892
|
|
893 <macro name="ajax_posts_js" parameters="view_name">
|
|
894 <script type="text/javascript">
|
|
895 var historyLength = history.length;
|
|
896 var loadedPosts = [];
|
|
897 var allPosts = [<n.compress.all_posts_js_array/>];
|
|
898
|
|
899 function setPostHover($e) {
|
|
900 $e.hover(
|
|
901 function(){ $(this).addClass('post-hover'); },
|
|
902 function(){ $(this).removeClass('post-hover'); });
|
|
903 };
|
|
904
|
|
905 var lastPostId = <n.page_node.last_node.id/>;
|
|
906 <![CDATA[
|
|
907 Nabble.markUnreadPosts = function(lastVisitedId) {
|
|
908 if (lastVisitedId == null)
|
|
909 $('div.clickable-row').css('font-weight','bold');
|
|
910 if (lastVisitedId == lastPostId)
|
|
911 return;
|
|
912 else {
|
|
913 for (var i = 0; i < allPosts.length; i++) {
|
|
914 if (allPosts[i] > lastVisitedId) {
|
|
915 $('#clickable-row'+allPosts[i]).css('font-weight','bold');
|
|
916 }
|
|
917 }
|
|
918 }
|
|
919 };
|
|
920
|
|
921 $(document).ready(function() {
|
|
922 var $dummy = $('div.clickable-row');
|
|
923 setPostHover($dummy);
|
|
924 $dummy.click(function(){
|
|
925 var postId = $(this).attr('post-id');
|
|
926 Nabble.loadPost(postId);
|
|
927 });
|
|
928
|
|
929 /* Code to open initial post */
|
|
930 (function() {
|
|
931 var _hash = Nabble.hash();
|
|
932 var postId = allPosts[0];
|
|
933 if (_hash && _hash != '#none')
|
|
934 postId = parseInt(_hash.substr(2));
|
|
935 else if (_hash == '#none')
|
|
936 postId = allPosts.length == 1? allPosts[0] : null;
|
|
937 if (postId) {
|
|
938 if (allPosts.indexOf(postId) >= 0) {
|
|
939 var $dummy = $('#clickable-row'+postId);
|
|
940 $dummy.click();
|
|
941 }
|
|
942 }
|
|
943 })();
|
|
944 });
|
|
945 ]]>
|
|
946
|
|
947 var isFirst = true;
|
|
948 Nabble.loadPost = function(nodeId) {
|
|
949 if (loadedPosts.indexOf(nodeId) == -1) {
|
|
950 $('#loading'+nodeId).show("fast");
|
|
951 var url = "/"+"template/NamlServlet.jtp?macro=ajax_post&view=<n.view_name/>&node="+nodeId;
|
|
952 $.get(url, function(data) {
|
|
953 $('#clickable-row'+nodeId).replaceWith(data);
|
|
954
|
|
955 var $dummy = $('#clickable-row'+nodeId);
|
|
956 var $full = $('#full-row'+nodeId);
|
|
957
|
|
958 /* Click event that collapses the post */
|
|
959 $full.children('div.full-row-header').click(function(e){
|
|
960 var t = e.target;
|
|
961 if (t == this || $(t).hasClass('close') || (t.nodeName != 'A' && t.nodeName != 'IMG')) {
|
|
962 $full.slideUp("normal", function() {
|
|
963 $dummy.show();
|
|
964 Nabble.resizeFrames();
|
|
965 });
|
|
966 }
|
|
967 });
|
|
968
|
|
969 /* Click event that expands the post */
|
|
970 $dummy.click(function() {
|
|
971 $dummy.hide();
|
|
972 $full.slideDown('normal',Nabble.resizeFrames);
|
|
973 });
|
|
974 setPostHover($dummy);
|
|
975
|
|
976 var $msg = $('#message'+nodeId);
|
|
977 if (Nabble.isEmbedded) {
|
|
978 $('img',$msg).load(Nabble.resizeFrames);
|
|
979 }
|
|
980 Nabble.searchHighlight($msg);
|
|
981
|
|
982 <n.ajax_post_custom_scripts/>
|
|
983
|
|
984 $full.slideDown('normal',function(){
|
|
985 Nabble.hideQuotes(this);
|
|
986 if (isFirst) {
|
|
987 var isRootPost = nodeId == allPosts[0];
|
|
988 if (Nabble.isEmbedded) {
|
|
989 if (Nabble.canScroll()) scrollTo(0,0);
|
|
990 var y = isRootPost? 1 : $full.offset().top-30;
|
|
991 Nabble.resizeFrames('', y);
|
|
992 } else {
|
|
993 scrollTo(0,0);
|
|
994 if (!isRootPost)
|
|
995 scrollBy(0,$full.offset().top);
|
|
996 }
|
|
997 isFirst = false;
|
|
998 }
|
|
999 });
|
|
1000 loadedPosts.push(nodeId);
|
|
1001 });
|
|
1002 }
|
|
1003 };
|
|
1004 </script>
|
|
1005 <n.call_later value="[n.page_node.id/]" param="markUnreadPosts"/>
|
|
1006 </macro>
|
|
1007
|
|
1008 <macro name="ajax_post_custom_scripts">
|
|
1009 <n.comment>To be overridden</n.comment>
|
|
1010 </macro>
|
|
1011
|
|
1012 <macro name="mark_unread_posts_js">
|
|
1013 <n.if.visitor.is_registered>
|
|
1014 <then>
|
|
1015 <n.param_loop. param="markUnreadPosts">
|
|
1016 <n.set_var. name='last_id'>
|
|
1017 <n.if.visitor.has_visited_node node_id="[n.current_parameter_value/]">
|
|
1018 <then.visitor.last_visited_node. node_id="[n.current_parameter_value/]">
|
|
1019 <n.id/>
|
|
1020 </then.visitor.last_visited_node.>
|
|
1021 <else>null</else>
|
|
1022 </n.if.visitor.has_visited_node>
|
|
1023 </n.set_var.>
|
|
1024 Nabble.markUnreadPosts(<n.var name='last_id'/>);
|
|
1025 </n.param_loop.>
|
|
1026 </then>
|
|
1027 </n.if.visitor.is_registered>
|
|
1028 </macro>
|
|
1029
|
|
1030 <subroutine name="threaded_posts" requires="basic,nabble,servlet,node">
|
|
1031 <n.if.call_depth.is_greater_than i="60">
|
|
1032 <then>
|
|
1033 <div class="info-message" style="padding:.5em 1em">
|
|
1034 <t>This branch is too big and some posts were omitted. Use the other views to read all posts.</t>
|
|
1035 </div>
|
|
1036 </then>
|
|
1037 <else>
|
|
1038 <div>
|
|
1039 <n.clickable_post/>
|
|
1040 <n.children_list. start="0" length="10000">
|
|
1041 <n.loop.>
|
|
1042 <div class="connect-outer outer-[n.connect_class_suffix/]">
|
|
1043 <div class="connect-inner inner-[n.connect_class_suffix/]">
|
|
1044 <n.current_node.threaded_posts/>
|
|
1045 </div>
|
|
1046 </div>
|
|
1047 </n.loop.>
|
|
1048 </n.children_list.>
|
|
1049 </div>
|
|
1050 </else>
|
|
1051 </n.if.call_depth.is_greater_than>
|
|
1052 </subroutine>
|
|
1053
|
|
1054 <macro name="connect_class_suffix" requires="node_list">
|
|
1055 <n.if.is_last_element>
|
|
1056 <then>end</then>
|
|
1057 <else>line</else>
|
|
1058 </n.if.is_last_element>
|
|
1059 </macro>
|
|
1060
|
|
1061 <macro name="clickable_post" requires="node">
|
|
1062 <div id="clickable-row[n.id/]" class="clickable-row" post-id="[n.id/]">
|
|
1063 <n.post_short_date/>
|
|
1064 <n.post_author/>
|
|
1065 <n.post_subject separator="–"/>
|
|
1066 <n.post_snippet/>
|
|
1067 <div id="loading[n.id/]" class="important invisible"><t>Loading...</t></div>
|
|
1068 </div>
|
|
1069 </macro>
|
|
1070
|
|
1071 <macro name="ajax_post" requires="servlet">
|
|
1072 <n.uncache_for.node_changes.get_parameter name="node"/>
|
|
1073 <n.ajax. is_cached="true">
|
|
1074 <n.node_page.>
|
|
1075 <n.page_node.>
|
|
1076 <n.mark_as_visited/>
|
|
1077 <div id="clickable-row[n.id/]" class="clickable-row invisible">
|
|
1078 <n.post_short_date/>
|
|
1079 <n.post_author/>
|
|
1080 <n.post_subject/>
|
|
1081 <n.post_snippet/>
|
|
1082 </div>
|
|
1083 <div id="full-row[n.id/]" class="full-row medium-border-color invisible">
|
|
1084 <div class="full-row-header">
|
|
1085 <div class="right-menu">
|
|
1086 <n.change_view_links/>
|
|
1087
|
|
1088 <n.reply_link/>
|
|
1089
|
|
1090 <n.post_dropdown/>
|
|
1091
|
|
1092 <img src="/images/close.png" class="close" alt="Close"/>
|
|
1093 </div>
|
|
1094 <n.post_long_date/>
|
|
1095 <n.owner.avatar size="small"/>
|
|
1096 <n.owner.user_link/>
|
|
1097 <n.post_subject/>
|
|
1098 </div>
|
|
1099 <n.pending_notice/>
|
|
1100 <n.updated_notice/>
|
|
1101 <n.message_text/>
|
|
1102 </div>
|
|
1103 </n.page_node.>
|
|
1104 </n.node_page.>
|
|
1105 </n.ajax.>
|
|
1106 </macro>
|
|
1107
|
|
1108 <macro name="message_text" requires="node">
|
|
1109 <div id="message[n.id/]" class="message-text adbayes-content">
|
|
1110 <n.message_with_signature/>
|
|
1111 </div>
|
|
1112 </macro>
|
|
1113
|
|
1114 <macro name="change_view_links" requires="node">
|
|
1115 <n.if.equal value1="[n.get_parameter name='view'/]" value2="[n.threaded_view/]">
|
|
1116 <then>
|
|
1117 <n.classic_icon_link/>
|
|
1118 <n.list_icon_link/>
|
|
1119 </then>
|
|
1120 <else>
|
|
1121 <n.classic_icon_link/>
|
|
1122 <n.threaded_icon_link/>
|
|
1123 </else>
|
|
1124 </n.if.equal>
|
|
1125 </macro>
|
|
1126
|
|
1127 <macro name="list_stylesheet">
|
|
1128 <style type="text/css">
|
|
1129 #topic-contents {
|
|
1130 overflow:hidden;
|
|
1131 }
|
|
1132 div.clickable-row {
|
|
1133 white-space:nowrap;
|
|
1134 right:1em;
|
|
1135 padding:.2em 0;
|
|
1136 cursor:pointer;
|
|
1137 }
|
|
1138 div.full-row {
|
|
1139 border-width:2px;
|
|
1140 border-style:solid;
|
|
1141 padding:.3em .8em .5em;
|
|
1142 cursor:text;
|
|
1143 }
|
|
1144 div.full-row-header {
|
|
1145 padding-bottom:1em;
|
|
1146 cursor:pointer;
|
|
1147 }
|
|
1148 div.full-row-header > * {
|
|
1149 cursor:pointer;
|
|
1150 }
|
|
1151 span.post-snippet { font-size:75%; }
|
|
1152
|
|
1153 div.message-text {
|
|
1154 cursor:text;
|
|
1155 overflow-x:auto;
|
|
1156 }
|
|
1157 div.right-menu {
|
|
1158 float:right;
|
|
1159 padding:.3em;
|
|
1160 }
|
|
1161 img.view-icon {
|
|
1162 border:none;
|
|
1163 width:18px;
|
|
1164 height:18px;
|
|
1165 vertical-align:middle;
|
|
1166 }
|
|
1167 img.close {
|
|
1168 width:11px;
|
|
1169 height:11px;
|
|
1170 }
|
|
1171 </style>
|
|
1172 </macro>
|
|
1173
|
|
1174 <macro name="post_short_date" requires="node">
|
|
1175 <span class="post-date post-date[n.id/]">
|
|
1176 <n.when_created.short_format/>
|
|
1177 </span>
|
|
1178 </macro>
|
|
1179
|
|
1180 <macro name="post_long_date" requires="node">
|
|
1181 <span class="post-date post-date[n.id/]">
|
|
1182 <n.when_created.long_format />
|
|
1183 </span>
|
|
1184 </macro>
|
|
1185
|
|
1186 <macro name="post_author" requires="node">
|
|
1187 <span class="post-author">
|
|
1188 <n.owner.name/>
|
|
1189 </span>
|
|
1190 </macro>
|
|
1191
|
|
1192 <macro name="post_subject" parameters="separator" requires="node">
|
|
1193 <n.set_var. name='parent_subject'>
|
|
1194 <n.if.has_parent>
|
|
1195 <then.parent_node.subject/>
|
|
1196 </n.if.has_parent>
|
|
1197 </n.set_var.>
|
|
1198 <n.if.not.ends_with text="[n.subject/]" suffix="[n.var name='parent_subject'/]">
|
|
1199 <then>
|
|
1200 <span class="post-subject adbayes-content"><n.subject/> <n.hide_null.separator/></span>
|
|
1201 </then>
|
|
1202 </n.if.not.ends_with>
|
|
1203 </macro>
|
|
1204
|
|
1205 <macro name="post_snippet" requires="node">
|
|
1206 <span class="post-snippet adbayes-content">
|
|
1207 <n.truncate. size="150"><n.hide_emails.message.as_text_without_quotes/></n.truncate.>
|
|
1208 </span>
|
|
1209 </macro>
|
|
1210
|
|
1211 <macro name="topic_footer">
|
|
1212 <div id="topic-footer" class="weak-color" style="padding-top:1em">
|
|
1213 <n.page_node.return_to_link/>
|
|
1214 |
|
|
1215 <n.page_node.views show_text="true"/>
|
|
1216 </div>
|
|
1217 </macro>
|
|
1218
|
|
1219 <macro name="message_count">
|
|
1220 <span style="padding-right:1em">
|
|
1221 <n.one_or_many.page_node.descendant_count>
|
|
1222 <one_text><t>message</t></one_text>
|
|
1223 <many_text><t>messages</t></many_text>
|
|
1224 </n.one_or_many.page_node.descendant_count>
|
|
1225 </span>
|
|
1226 </macro>
|
|
1227
|
|
1228 <macro name="topic_header">
|
|
1229 <div id="topic-search-box" class="search-box float-right" style="padding:.5em 0">
|
|
1230 <n.page_node.search_box/>
|
|
1231 </div>
|
|
1232
|
|
1233 <h1 id="post-title" class="adbayes-content" style="margin:0.25em 0 .8em">
|
|
1234 <n.break_up.page_node.subject/>
|
|
1235 </h1>
|
|
1236 </macro>
|
|
1237
|
|
1238 <macro name="topic_controls" requires="forum_topic_namespace">
|
|
1239 <div style="margin:1.2em 0 5em">
|
|
1240 <div id="topics-controls-left" class="float-left nowrap">
|
|
1241 <n.topic_controls_left/>
|
|
1242 </div>
|
|
1243 <div id="topics-controls-right" class="float-right nowrap" style="padding-top:.3em">
|
|
1244 <n.topic_controls_right/>
|
|
1245 </div>
|
|
1246 </div>
|
|
1247 </macro>
|
|
1248
|
|
1249 <macro name="topic_controls_left" requires="forum_topic_namespace">
|
|
1250 <n.view_selectors/>
|
|
1251 </macro>
|
|
1252
|
|
1253 <macro name="topic_controls_right" requires="forum_topic_namespace">
|
|
1254 <n.pin_icon/>
|
|
1255 <n.lock_icon/>
|
|
1256 <n.message_count/>
|
|
1257 <img src="/images/gear.png" class="image16" alt="[t]Options[/t]"/>
|
|
1258 <n.page_node.topic_dropdown/>
|
|
1259 </macro>
|
|
1260
|
|
1261 <macro name="topic_controls" requires="blog_topic_namespace">
|
|
1262 <div class="weak-color float-left" style="font-variant:small-caps">
|
|
1263 <n.topic_left_controls/>
|
|
1264 </div>
|
|
1265
|
|
1266 <div class="float-right" style="padding:.4em 0">
|
|
1267 <n.topic_right_controls/>
|
|
1268 </div>
|
|
1269
|
|
1270 <n.root_post_message/>
|
|
1271 </macro>
|
|
1272
|
|
1273 <macro name="topic_right_controls" requires="blog_topic_namespace">
|
|
1274 <n.root_dropdown/>
|
|
1275 </macro>
|
|
1276
|
|
1277 <macro name="root_post_message">
|
|
1278 <div class="root-text adbayes-content" style="margin:6em 0 2em;clear:both">
|
|
1279 <n.page_node.node_message_as_html/>
|
|
1280 </div>
|
|
1281 </macro>
|
|
1282
|
|
1283 <macro name="topic_left_controls" requires="blog_topic_namespace">
|
|
1284 <t>Posted by
|
|
1285 <t.author>
|
|
1286 <n.page_node.owner.avatar size="small"/>
|
|
1287 <n.page_node.owner.user_link/>
|
|
1288 </t.author></t>
|
|
1289 –
|
|
1290 <n.page_node.when_created.long_format/>
|
|
1291 </macro>
|
|
1292
|
|
1293 <macro name="root_dropdown" requires="node_page">
|
|
1294 <img src="/images/gear.png" class="image16" alt="[t]Options[/t]"/>
|
|
1295 <n.page_node.root_post_dropdown/>
|
|
1296 </macro>
|
|
1297
|
|
1298 <macro name="topic_contents" dot_parameter="contents" requires="blog_topic_namespace">
|
|
1299 <div id="comment-section">
|
|
1300 <n.if.page_node.has_replies>
|
|
1301 <then>
|
|
1302 <h2 class="second-font big-title" style="margin-bottom: .5em">
|
|
1303 <n.one_or_many.page_node.replies>
|
|
1304 <one_text><t>Comment</t></one_text>
|
|
1305 <many_text><t>Comments</t></many_text>
|
|
1306 </n.one_or_many.page_node.replies>
|
|
1307 </h2>
|
|
1308 <n.view_selectors/>
|
|
1309 </then>
|
|
1310 </n.if.page_node.has_replies>
|
|
1311
|
|
1312 <n.topic_contents_div.contents/>
|
|
1313
|
|
1314 <n.add_new_comment_link/>
|
|
1315 </div>
|
|
1316 </macro>
|
|
1317
|
|
1318 <macro name="add_new_comment_link">
|
|
1319 <div class="shaded-bg-color rounded" style="width:25em;margin:1em 0 2em;padding: .5em">
|
|
1320 <div style="float:left;margin-right:.5em">
|
|
1321 <img src="/images/icon_post_message.png" class="image16" alt="[t]Post message[/t]"/>
|
|
1322 </div>
|
|
1323 <a href="[n.page_node.reply_path/]" rel="nofollow"><t>Add a new comment</t></a>
|
|
1324 </div>
|
|
1325 </macro>
|
|
1326
|
|
1327 <macro name="view_selectors">
|
|
1328 <table>
|
|
1329 <tr>
|
|
1330 <n.topic_view_option name="[t]Classic[/t]" value="classic" image="view-classic.gif">
|
|
1331 <url><n.page_node.topic_path view="[n.classic_view/]"/></url>
|
|
1332 </n.topic_view_option>
|
|
1333
|
|
1334 <n.topic_view_option name="[t]List[/t]" value="list" image="view-list.gif">
|
|
1335 <url><n.page_node.topic_path view="[n.list_view/]"/></url>
|
|
1336 </n.topic_view_option>
|
|
1337
|
|
1338 <n.topic_view_option name="[t]Threaded[/t]" value="threaded" image="view-threaded.gif">
|
|
1339 <url><n.page_node.topic_path view="[n.threaded_view/]"/></url>
|
|
1340 </n.topic_view_option>
|
|
1341 </tr>
|
|
1342 </table>
|
|
1343 </macro>
|
|
1344
|
|
1345 <macro name="topic_view" requires="servlet">
|
|
1346 <n.get_parameter name="view"/>
|
|
1347 </macro>
|
|
1348
|
|
1349 <macro name="classic_view">
|
|
1350 classic
|
|
1351 </macro>
|
|
1352
|
|
1353 <macro name="list_view">
|
|
1354 list
|
|
1355 </macro>
|
|
1356
|
|
1357 <macro name="threaded_view">
|
|
1358 threaded
|
|
1359 </macro>
|
|
1360
|
|
1361 <macro name="topic_page_number" requires="servlet">
|
|
1362 <n.paging.
|
|
1363 total_rows="0"
|
|
1364 current_row="[n.classic_index_record/]"
|
|
1365 rows_per_page="[n.classic_rows_per_page/]"
|
|
1366 >
|
|
1367 <n.current_page_number/>
|
|
1368 </n.paging.>
|
|
1369 </macro>
|
|
1370
|
|
1371 <macro name="topic_path" parameters="view,index_record,selected_id" requires="node">
|
|
1372 <n.set_var. name="index_record">
|
|
1373 <n.to_null_if. equals="0">
|
|
1374 <n.index_record/>
|
|
1375 </n.to_null_if.>
|
|
1376 </n.set_var.>
|
|
1377 <n.remove_spaces.>
|
|
1378 /<n.url_encoded_subject/>
|
|
1379 -t<n.view_char view="[n.view/]"/><n.id/>
|
|
1380 <n.hide_null.prepend. prefix="i"><n.var name="index_record"/></n.hide_null.prepend.>
|
|
1381 .html
|
|
1382 <n.if>
|
|
1383 <condition.both>
|
|
1384 <condition1><n.not.is_null.selected_id/></condition1>
|
|
1385 <condition2><n.not.equal value1="[n.id/]" value2="[n.selected_id/]"/></condition2>
|
|
1386 </condition.both>
|
|
1387 <then>
|
|
1388 #a<n.selected_id/>
|
|
1389 </then>
|
|
1390 </n.if>
|
|
1391 </n.remove_spaces.>
|
|
1392 </macro>
|
|
1393
|
|
1394 <macro name="view_char" parameters="view">
|
|
1395 <n.if.equal value1="[n.view/]" value2="[n.classic_view/]">
|
|
1396 <then>d</then>
|
|
1397 <else.if.equal value1="[n.view/]" value2="[n.threaded_view/]">
|
|
1398 <then>t</then>
|
|
1399 <else>c</else>
|
|
1400 </else.if.equal>
|
|
1401 </n.if.equal>
|
|
1402 </macro>
|
|
1403
|
|
1404 <macro name="topic_path_for" dot_parameter="view" requires="node">
|
|
1405 <n.set_var. name='id'><n.id/></n.set_var.>
|
|
1406 <n.set_var. name='path'><n.topic_node.topic_path view="[n.view/]" selected_id="[n.var name='id'/]"/></n.set_var.>
|
|
1407 <n.var name="path"/>
|
|
1408 </macro>
|
|
1409
|
|
1410 <macro name="threaded_link" requires="node">
|
|
1411 <a href="javascript:void(0)" onclick="Nabble.setView('threaded', '[n.topic_path_for.threaded_view/]',[n.id/])"><t>Threaded</t></a>
|
|
1412 <n.tooltip.>
|
|
1413 <t>Open this post in threaded view</t>
|
|
1414 </n.tooltip.>
|
|
1415 </macro>
|
|
1416
|
|
1417 <macro name="classic_icon_link" requires="node">
|
|
1418 <a href="javascript:void(0)" onclick="Nabble.setView('classic', '[n.topic_path_for.classic_view/]',[n.id/])"><img src="/images/view-classic.gif" class="view-icon" alt="Classic"/></a>
|
|
1419 <n.tooltip.>
|
|
1420 <t>Open this post in classic view</t>
|
|
1421 </n.tooltip.>
|
|
1422 </macro>
|
|
1423
|
|
1424 <macro name="list_icon_link" requires="node">
|
|
1425 <a href="javascript:void(0)" onclick="Nabble.setView('list', '[n.topic_path_for.list_view/]',[n.id/])"><img src="/images/view-list.gif" class="view-icon" alt="List"/></a>
|
|
1426 <n.tooltip.>
|
|
1427 <t>Open this post in list view</t>
|
|
1428 </n.tooltip.>
|
|
1429 </macro>
|
|
1430
|
|
1431 <macro name="threaded_icon_link" requires="node">
|
|
1432 <a href="javascript:void(0)" onclick="Nabble.setView('threaded', '[n.topic_path_for.threaded_view/]',[n.id/])"><img src="/images/view-threaded.gif" class="view-icon" alt="Threaded"/></a>
|
|
1433 <n.tooltip.>
|
|
1434 <t>Open this post in threaded view</t>
|
|
1435 </n.tooltip.>
|
|
1436 </macro>
|
|
1437
|
|
1438 <macro name="topic_view_option" parameters="name,value,image,url">
|
|
1439 <n.put_in_head.>
|
|
1440 <script type="text/javascript">
|
|
1441 Nabble.setView = function(view,url,post) {
|
|
1442 Nabble.setVar("tview",view);
|
|
1443 if (url.indexOf('#') == -1)
|
|
1444 url += '#none';
|
|
1445 location.replace(url);
|
|
1446 };
|
|
1447 </script>
|
|
1448 </n.put_in_head.>
|
|
1449
|
|
1450 <n.topic_view_option_td value="[n.value/]" url="[n.url/]" style="padding-right:.1em">
|
|
1451 <contents><img src="/images/[n.image/]" width="18" height="18" style="border:none" alt="[n.value/]"/></contents>
|
|
1452 </n.topic_view_option_td>
|
|
1453
|
|
1454 <n.topic_view_option_td value="[n.value/]" url="[n.url/]" style="padding-right:1.1em">
|
|
1455 <contents><n.name/></contents>
|
|
1456 </n.topic_view_option_td>
|
|
1457 </macro>
|
|
1458
|
|
1459 <macro name="topic_view_option_td" parameters="value,url,contents,style">
|
|
1460 <td style="[n.style/]">
|
|
1461 <n.if.equal value1="[n.topic_view/]" value2="[n.value/]">
|
|
1462 <then><n.contents/></then>
|
|
1463 <else><a href="javascript:void(0)" onclick="Nabble.setView('[n.value/]', '[n.url/]',null)"><n.contents/></a></else>
|
|
1464 </n.if.equal>
|
|
1465 </td>
|
|
1466 </macro>
|
|
1467
|
|
1468 <macro name="raw_mail" requires="servlet">
|
|
1469 <n.set_response_header name="Content-Type" value="text/plain; charset=iso-8859-1"/>
|
|
1470 <n.node_page.>
|
|
1471 <n.if.either condition1="[n.visitor.can_edit.page_node/]" condition2="[n.visitor.is_sysadmin/]">
|
|
1472 <then.page_node.message.as_raw/>
|
|
1473 </n.if.either>
|
|
1474 </n.node_page.>
|
|
1475 </macro>
|
|
1476
|
|
1477 <macro name="topic_hardcoded_notices" requires="node_page">
|
|
1478 <n.inactive_node_deletion_ui/>
|
|
1479 </macro>
|
|
1480
|
|
1481 <macro name="page_node_is_scheduled_for_deletion" requires="node_page">
|
|
1482 <n.both>
|
|
1483 <condition1><n.page_node.is_root/></condition1>
|
|
1484 <condition2><n.site_has_delete_date/></condition2>
|
|
1485 </n.both>
|
|
1486 </macro>
|
|
1487
|
|
1488 <macro name="pin_icon">
|
|
1489 <span style="padding-right:1em;height:21px">
|
|
1490 <img id="pin-icon" src="/images/pin.png" width="20" height="21" title="[t]This topic has been pinned in [t.location.page_node.app_or_root.subject/].[/t]" style="vertical-align:middle;[n.hidden_if.not.page_node.is_pinned/]"/>
|
|
1491 <n.tooltip use_title="true"/>
|
|
1492 </span>
|
|
1493 </macro>
|
|
1494
|
|
1495 <macro name="pin_topic_link" requires="node" dot_parameter="text" parameters="title, class">
|
|
1496 <n.put_in_head.>
|
|
1497 <script type="text/javascript">
|
|
1498 Nabble.pinTopic = function(id) {
|
|
1499 var call = '/' + 'template/NamlServlet.jtp?macro=pin_topic&node=' + id;
|
|
1500 $.getScript(call, function() {
|
|
1501 $('#pin-icon').show();
|
|
1502 NabbleDropdown.show('unpinTopic');
|
|
1503 NabbleDropdown.hide('pinTopic');
|
|
1504 alert('<t>This topic has been pinned.</t>');
|
|
1505 });
|
|
1506 };
|
|
1507 </script>
|
|
1508 </n.put_in_head.>
|
|
1509 <a href="javascript: void Nabble.pinTopic([n.id/])" class="[n.class/]" rel="nofollow" title="[n.title/]"><n.default. to="[t]Pin topic[/t]"><n.text/></n.default.></a>
|
|
1510 </macro>
|
|
1511
|
|
1512 <macro name="unpin_topic_link" requires="node" dot_parameter="text" parameters="title, class">
|
|
1513 <n.put_in_head.>
|
|
1514 <script type="text/javascript">
|
|
1515 Nabble.unpinTopic = function(id) {
|
|
1516 var call = '/'+'template/NamlServlet.jtp?macro=unpin_topic&node=' + id;
|
|
1517 $.getScript(call, function() {
|
|
1518 $('#pin-icon').hide();
|
|
1519 NabbleDropdown.hide('unpinTopic');
|
|
1520 NabbleDropdown.show('pinTopic');
|
|
1521 alert('<t>This topic has been unpinned.</t>');
|
|
1522 });
|
|
1523 };
|
|
1524 </script>
|
|
1525 </n.put_in_head.>
|
|
1526 <a href="javascript: void Nabble.unpinTopic([n.id/])" class="[n.class/]" rel="nofollow" title="[n.title/]"><n.default. to="[t]Unpin topic[/t]"><n.text/></n.default.></a>
|
|
1527 </macro>
|
|
1528
|
|
1529 <macro name="pin_topic" requires="servlet">
|
|
1530 <n.node_page.>
|
|
1531 <n.if.both condition1="[n.visitor.can_manage_pinned_topics_in.page_node/]" condition2="[n.not.page_node.is_pinned/]">
|
|
1532 <then><n.page_node.pin/></then>
|
|
1533 </n.if.both>
|
|
1534 </n.node_page.>
|
|
1535 </macro>
|
|
1536
|
|
1537 <macro name="unpin_topic" requires="servlet">
|
|
1538 <n.node_page.>
|
|
1539 <n.if.both condition1="[n.visitor.can_manage_pinned_topics_in.page_node/]" condition2="[n.page_node.is_pinned/]">
|
|
1540 <then><n.page_node.unpin/></then>
|
|
1541 </n.if.both>
|
|
1542 </n.node_page.>
|
|
1543 </macro>
|
|
1544
|
|
1545 <macro name="lock_icon">
|
|
1546 <span id="lock-icon" class="weak-color" style="padding:0 .5em;margin-right:.5em;[n.hidden_if.not.page_node.is_locked_topic/]">
|
|
1547 <img src="/images/lock_sm.png" width="10" height="15" style="vertical-align:middle"/> <t>Locked</t>
|
|
1548 </span>
|
|
1549 </macro>
|
|
1550
|
|
1551 <macro name="lock_topic_link" requires="node" dot_parameter="text" parameters="title, class">
|
|
1552 <n.put_in_head.>
|
|
1553 <script type="text/javascript">
|
|
1554 Nabble.lockTopic = function(id) {
|
|
1555 var call = '/'+'template/NamlServlet.jtp?macro=lock_topic&node=' + id;
|
|
1556 $.getScript(call, function() {
|
|
1557 $('#lock-icon').show();
|
|
1558 NabbleDropdown.show('unlockTopic');
|
|
1559 NabbleDropdown.hide('lockTopic');
|
|
1560 alert('<t>This topic has been locked.</t>');
|
|
1561 });
|
|
1562 };
|
|
1563 </script>
|
|
1564 </n.put_in_head.>
|
|
1565 <a href="javascript: void Nabble.lockTopic([n.id/])" class="[n.class/]" rel="nofollow" title="[n.title/]"><n.default. to="[t]Lock topic[/t]"><n.text/></n.default.></a>
|
|
1566 </macro>
|
|
1567
|
|
1568 <macro name="lock_topic" requires="servlet">
|
|
1569 <n.node_page.>
|
|
1570 <n.if.both condition1="[n.visitor.can_manage_locked_topics_in.page_node/]" condition2="[n.not.page_node.is_locked_topic/]">
|
|
1571 <then.edit_page_node.>
|
|
1572 <n.add_permission permission="[n.reply_permission/]"/>
|
|
1573 </then.edit_page_node.>
|
|
1574 </n.if.both>
|
|
1575 </n.node_page.>
|
|
1576 </macro>
|
|
1577
|
|
1578 <macro name="unlock_topic_link" requires="node" dot_parameter="text" parameters="title, class">
|
|
1579 <n.put_in_head.>
|
|
1580 <script type="text/javascript">
|
|
1581 Nabble.unlockTopic = function(id) {
|
|
1582 var call = '/'+'template/NamlServlet.jtp?macro=unlock_topic&node=' + id;
|
|
1583 $.getScript(call, function() {
|
|
1584 $('#lock-icon').hide();
|
|
1585 NabbleDropdown.hide('unlockTopic');
|
|
1586 NabbleDropdown.show('lockTopic');
|
|
1587 alert('<t>This topic has been unlocked.</t>');
|
|
1588 });
|
|
1589 };
|
|
1590 </script>
|
|
1591 </n.put_in_head.>
|
|
1592 <a href="javascript: void Nabble.unlockTopic([n.id/])" class="[n.class/]" rel="nofollow" title="[n.title/]"><n.default. to="[t]Unlock topic[/t]"><n.text/></n.default.></a>
|
|
1593 </macro>
|
|
1594
|
|
1595 <macro name="unlock_topic" requires="servlet">
|
|
1596 <n.node_page.>
|
|
1597 <n.if.both condition1="[n.visitor.can_manage_locked_topics_in.page_node/]" condition2="[n.page_node.is_locked_topic/]">
|
|
1598 <then.edit_page_node.>
|
|
1599 <n.remove_permission permission="[n.reply_permission/]"/>
|
|
1600 </then.edit_page_node.>
|
|
1601 </n.if.both>
|
|
1602 </n.node_page.>
|
|
1603 </macro>
|
|
1604
|
|
1605 <macro name="is_locked_topic" requires="node">
|
|
1606 <n.both>
|
|
1607 <condition1.node_has_permission.reply_permission />
|
|
1608 <condition2.not.groups_have_permission groups="[n.registered_user_groups/]" permission="[n.reply_permission/]" />
|
|
1609 </n.both>
|
|
1610 </macro>
|
|
1611
|
|
1612 <macro name="smart_post_link" requires="node" dot_parameter="href" parameters="text, title, class">
|
|
1613 <n.if.is_post>
|
|
1614 <then>
|
|
1615 <a href="[n.node_href.href/]" title="[n.title/]" class="[n.hide_null.class/] post-link[n.topic_node.id/]" node-id="[n.id/]"><n.node_text.text/></a>
|
|
1616 <n.call_later value="[n.topic_node.id/]" param="markUnreadTopics"/>
|
|
1617 </then>
|
|
1618 <else.node_link text="[n.text/]"/>
|
|
1619 </n.if.is_post>
|
|
1620 </macro>
|
|
1621
|
|
1622 <macro name="mark_unread_topics_js">
|
|
1623 <n.if.visitor.is_registered>
|
|
1624 <then>
|
|
1625 <![CDATA[
|
|
1626 $('#nabble').append('<a id="not-visited" class="invisible" href="/any-url">x</a> <a id="visited" class="visited-link invisible" href="#">x</a>');
|
|
1627 var notVisitedColor = $('#not-visited').css('color');
|
|
1628 var visitedColor = $('#visited').css('color');
|
|
1629 Nabble.markUnreadTopics = function(topic, lastVisitedId) {
|
|
1630 $('a.post-link'+topic).each(function() {
|
|
1631 var nodeId = $(this).attr('node-id');
|
|
1632 var isVisited = lastVisitedId && lastVisitedId > 0 && parseInt(nodeId) <= lastVisitedId;
|
|
1633 if (isVisited)
|
|
1634 $(this).addClass('visited-link');
|
|
1635 else {
|
|
1636 var $this = $(this);
|
|
1637 $this
|
|
1638 .css('color', notVisitedColor)
|
|
1639 .click(function() {
|
|
1640 $this.css('color',visitedColor);
|
|
1641 });
|
|
1642 }
|
|
1643 });
|
|
1644 };
|
|
1645 ]]>
|
|
1646 <n.param_loop. param="markUnreadTopics">
|
|
1647 <n.set_var. name='last_visited_id'>
|
|
1648 <n.if.visitor.has_visited_node node_id="[n.current_parameter_value/]">
|
|
1649 <then.visitor.last_visited_node. node_id="[n.current_parameter_value/]">
|
|
1650 <n.id/>
|
|
1651 </then.visitor.last_visited_node.>
|
|
1652 <else>null</else>
|
|
1653 </n.if.visitor.has_visited_node>
|
|
1654 </n.set_var.>
|
|
1655 Nabble.markUnreadTopics(<n.current_parameter_value/>, <n.var name='last_visited_id'/>);
|
|
1656 </n.param_loop.>
|
|
1657 </then>
|
|
1658 </n.if.visitor.is_registered>
|
|
1659 </macro>
|