2 {{* This is a little bit hacky. This is needed to have some sort comments container.
3 It would be better if it would be done in friendica core but since core lacks this functionality
4 it is done in the theme
6 In short: the piece of code counts the total number of children of the toplevelpost
7 - this are usaly all posts with thread_level = 2 - and stores it in variable $top_children_total.
8 The first time a children which hits thread_level = 2 and $top_child = 1 opens the div.
10 Everytime when a children with top_level = 2 comes up $top_child_nr rises with 1.
11 The div get's closed if thread_level = 2 and the value of $top_child_nr is the same
12 as the value of $top_child_total (this is done at the end of this file)
14 {{if $item.thread_level==1}}
15 {{assign var="top_child_total" value=count($item.children)}}
16 {{assign var="top_child_nr" value=0}}
18 {{if $item.thread_level==2}}
19 {{assign var="top_child_nr" value=$top_child_nr+1 scope=parent}}
22 {{if $item.thread_level==2 && $top_child_nr==1}}
23 <div class="comment-container well well-sm"> <!--top-child-begin-->
25 {{* end of hacky part to count childrens *}}
28 {{if $mode == display}}
30 {{if $item.comment_firstcollapsed}}
32 <div align="center" style="margin-top:-34px;">
33 <div class="hide-comments-outer btn btn-default" onclick="showHideComments({{$item.id}});">
34 <span id="hide-comments-total-{{$item.id}}" class="hide-comments-total">{{$item.num_comments}}</span>
35 <span id="hide-comments-{{$item.id}}" class="hide-comments fakelink">{{$item.hide_text}}</span>
38 <div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: none;">
41 {{if $item.thread_level<3}}
42 <div class="hide-comments-outer-wrapper">
43 <div class="hide-comments-outer fakelink" onclick="showHideComments({{$item.id}});">
44 <span id="hide-comments-total-{{$item.id}}"
45 class="hide-comments-total">{{$item.num_comments}}</span>
46 <span id="hide-comments-{{$item.id}}"
47 class="hide-comments">{{$item.hide_text}}</span>
51 <div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: none;">
53 <div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: block;">
58 {{* TODO => Unknown block *}}
59 <div class="wall-item-decor" style="display:none;">
61 <span class="icon s22 star {{$item.isstarred}}" id="starred-{{$item.id}}" title="{{$item.star.starred}}">{{$item.star.starred}}</span>
63 {{if $item.lock}}<span class="navicon lock fakelink" onclick="lockview(event,{{$item.id}});" title="{{$item.lock}}"></span><span class="fa fa-lock"></span>{{/if}}
65 {{* /TODO => Unknown block *}}
68 {{* Use a different div container in dependence max thread-level = 7 *}}
69 {{if $item.thread_level<7}}
70 <div class="item-{{$item.id}} wall-item-container {{$item.indent}} {{$item.shiny}} {{$item.network}} thread_level_{{$item.thread_level}} {{if $item.thread_level==1}}panel-body h-entry{{else}}u-comment h-cite{{/if}}" id="item-{{$item.guid}}"><!-- wall-item-container -->
72 <div class="item-{{$item.id}} wall-item-container {{$item.indent}} {{$item.shiny}} {{$item.network}} thread_level_7 u-comment h-cite" id="item-{{$item.guid}}">
74 {{if $item.thread_level==1}}
75 <span class="commented" style="display: none;">{{$item.commented}}</span>
76 <span class="received" style="display: none;">{{$item.received}}</span>
77 <span class="created" style="display: none;">{{$item.created_date}}</span>
78 <span class="id" style="display: none;">{{$item.id}}</span>
81 {{* Put addional actions in a top-right dropdown menu *}}
83 <ul class="nav nav-pills preferences">
84 <li><span class="wall-item-network" title="{{$item.app}}">{{$item.network_name}}</span></li>
86 {{if $item.plink || $item.drop.dropping || $item.edpost || $item.ignore || $item.tagger || $item.star || $item.filer || $item.subthread}}
88 <button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuTools-{{$item.id}}" aria-haspopup="true" aria-expanded="false"><i class="fa fa-angle-down" aria-hidden="true"></i></button>
90 <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenuTools-{{$item.id}}">
91 {{if $item.plink}} {{*link to the original source of the item *}}
93 <a title="{{$item.plink.title}}" href="{{$item.plink.href}}" class="navicon plink u-url"><i class="fa fa-external-link" aria-hidden="true"></i> {{$item.plink.title}}</a>
97 {{if $item.edpost}} {{* edit the posting *}}
99 <button type="button" onclick="editpost('{{$item.edpost.0}}?mode=none');" title="{{$item.edpost.1}}" class="btn-link navicon pencil"><i class="fa fa-pencil" aria-hidden="true"></i> {{$item.edpost.1}}</button>
103 {{if $item.tagger}} {{* tag the post *}}
105 <button type="button" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}});" class="btn-link {{$item.tagger.class}}" title="{{$item.tagger.add}}"><i class="fa fa-tag" aria-hidden="true"></i> {{$item.tagger.add}}</button>
111 <button type="button" id="filer-{{$item.id}}" onclick="itemFiler({{$item.id}});" class="btn-link filer-item filer-icon" title="{{$item.filer}}"><i class="fa fa-folder" aria-hidden="true"></i> {{$item.filer}}</button>
117 <button type="button" id="star-{{$item.id}}" onclick="dostar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i> {{$item.star.do}}</button>
118 <button type="button" id="unstar-{{$item.id}}" onclick="dostar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i> {{$item.star.undo}}</button>
122 {{if $item.subthread}}
124 <button type="button" id="subthread-{{$item.id}}" onclick="{{$item.subthread.action}}" class="btn-link" title="{{$item.subthread.title}}"><i class="fa fa-plus" aria-hidden="true"></i> {{$item.subthread.title}}</button>
128 {{if $item.ignore || $item.drop.dropping}}
129 <li role="separator" class="divider"></li>
134 <button type="button" id="ignore-{{$item.id}}" onclick="doignore({{$item.id}});" class="btn-link {{$item.ignore.classdo}}" title="{{$item.ignore.do}}"><i class="fa fa-eye-slash" aria-hidden="true"></i> {{$item.ignore.do}}</button>
137 <button type="button" id="unignore-{{$item.id}}" onclick="doignore({{$item.id}});" class="btn-link {{$item.ignore.classundo}}" title="{{$item.ignore.undo}}"><i class="fa fa-eye" aria-hidden="true"></i> {{$item.ignore.undo}}</button>
141 {{if $item.drop.dropping}}
143 <button type="button" class="btn-link navicon delete" onclick="dropItem('item/drop/{{$item.id}}/{{$item.return}}', 'item-{{$item.guid}}');" title="{{$item.drop.delete}}"><i class="fa fa-trash" aria-hidden="true"></i> {{$item.drop.delete}}</button>
152 {{* The avatar picture and the photo-menu *}}
153 <div class="dropdown pull-left"><!-- Dropdown -->
154 {{if $item.thread_level==1}}
155 <div class="hidden-sm hidden-xs contact-photo-wrapper mframe{{if $item.owner_url}} wwfrom{{/if}} p-author h-card">
156 <a class="userinfo u-url" id="wall-item-photo-menu-{{$item.id}}" href="{{$item.profile_url}}">
157 <div class="contact-photo-image-wrapper">
158 <img src="{{$item.thumb}}" class="contact-photo media-object {{$item.sparkle}} p-name u-photo" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" />
162 <div class="hidden-lg hidden-md contact-photo-wrapper mframe{{if $item.owner_url}} wwfrom{{/if}}">
163 <a class="userinfo u-url" id="wall-item-photo-menu-xs-{{$item.id}}" href="{{$item.profile_url}}">
164 <div class="contact-photo-image-wrapper">
165 <img src="{{$item.thumb}}" class="contact-photo-xs media-object {{$item.sparkle}}" id="wall-item-photo-xs-{{$item.id}}" alt="{{$item.name}}" />
170 {{* The litle overlay avatar picture if someone is posting directly to a wall or a forum *}}
171 {{if $item.owner_url}}
172 <div aria-hidden="true" class="contact-photo-wrapper mframe wwto" id="wall-item-ownerphoto-wrapper-{{$item.id}}" >
173 <a href="{{$item.owner_url}}" target="redir" title="{{$item.olinktitle}}" class="contact-photo-link" id="wall-item-ownerphoto-link-{{$item.id}}">
174 <img src="{{$item.owner_photo}}" class="contact-photo {{$item.osparkle}}" id="wall-item-ownerphoto-{{$item.id}}" alt="{{$item.owner_name}}" />
179 {{/if}} {{*End if $item.thread_level==1}}
181 {{* The avatar picture for comments *}}
182 {{if $item.thread_level!=1}}
183 <div class="contact-photo-wrapper mframe{{if $item.owner_url}} wwfrom{{/if}} p-author h-card">
184 <a class="userinfo u-url" id="wall-item-photo-menu-{{$item.id}}" href="{{$item.profile_url}}">
185 <div class="contact-photo-image-wrapper">
186 <img src="{{$item.thumb}}" class="contact-photo-xs media-object {{$item.sparkle}} p-name u-photo" id="wall-item-photo-comment-{{$item.id}}" alt="{{$item.name}}" />
191 </div><!-- ./Dropdown -->
195 {{* contact info header*}}
196 {{if $item.thread_level==1}}
197 <div role="heading " aria-level="{{$item.thread_level}}" class="contact-info hidden-sm hidden-xs media-body"><!-- <= For computer -->
198 <h4 class="media-heading"><a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link userinfo"><span class="wall-item-name {{$item.sparkle}}">{{$item.name}}</span></a>
199 {{if $item.owner_url}}{{$item.via}} <a href="{{$item.owner_url}}" target="redir" title="{{$item.olinktitle}}" class="wall-item-name-link userinfo"><span class="wall-item-name {{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}
200 {{if $item.lock}}<span class="navicon lock fakelink" onClick="lockview(event,{{$item.id}});" title="{{$item.lock}}" data-toggle="tooltip"> <small><i class="fa fa-lock" aria-hidden="true"></i></small></span>{{/if}}
203 <div class="additional-info text-muted">
204 <div id="wall-item-ago-{{$item.id}}" class="wall-item-ago">
205 <small><a href="{{$item.plink.orig}}"><span class="time" title="{{$item.localtime}}" data-toggle="tooltip"><time class="dt-published" datetime="{{$item.localtime}}">{{$item.ago}}</time></span></a></small>
208 {{if $item.location}}
209 <div id="wall-item-location-{{$item.id}}" class="wall-item-location">
210 <small><span class="location">({{$item.location nofilter}})</span></small>
214 {{* @todo $item.created have to be inserted *}}
217 {{* contact info header for smartphones *}}
218 <div role="heading " aria-level="{{$item.thread_level}}" class="contact-info-xs hidden-lg hidden-md"><!-- <= For smartphone (responsive) -->
219 <h5 class="media-heading">
220 <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link userinfo"><span>{{$item.name}}</span></a>
221 <p class="text-muted">
223 <a class="time" href="{{$item.plink.orig}}"><span class="wall-item-ago">{{$item.ago}}</span></a>
224 {{if $item.location}} — ({{$item.location nofilter}}){{/if}}
225 {{if $item.owner_self}}
227 {{include file="sub/delivery_count.tpl" delivery=$item.delivery}}
233 {{/if}} {{* End of if $item.thread_level==1 *}}
235 {{* contact info header for comments *}}
236 {{if $item.thread_level!=1}}
237 <div class="media-body">{{*this is the media body for comments - this div must be closed at the end of the file *}}
238 <div role="heading " aria-level="{{$item.thread_level}}" class="contact-info-comment">
239 <h5 class="media-heading">
240 <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link userinfo"><span class="fakelink">{{$item.name}}</span></a>
241 <span class="text-muted">
242 <small><a class="time" href="{{$item.plink.orig}}" title="{{$item.localtime}}" data-toggle="tooltip">{{$item.ago}}</a> {{if $item.location}} — ({{$item.location nofilter}}){{/if}}</small>
248 <div class="clearfix"></div>
250 {{* Insert Line to seperate item header and item content visually *}}
251 {{if $item.thread_level==1}}<hr />{{/if}}
254 <div class="wall-item-content {{$item.type}}" id="wall-item-content-{{$item.id}}">
255 {{* insert some space if it's an top-level post *}}
256 {{if $item.thread_level==1}}
257 <div class="wall-spacer"> </div> <!-- use padding/margin instead-->
261 <span class="wall-item-title" id="wall-item-title-{{$item.id}}"><h4 class="media-heading"><a href="{{$item.plink.href}}" class="{{$item.sparkle}} p-name">{{$item.title}}</a></h4><br /></span>
264 <div class="wall-item-body e-content {{if !$item.title}}p-name{{/if}}" id="wall-item-body-{{$item.id}}">{{$item.body nofilter}}</div>
268 <div class="wall-item-bottom">
269 <div class="wall-item-links"></div>
270 <div class="wall-item-tags">
271 {{if !$item.suppress_tags}}
272 {{foreach $item.hashtags as $tag}}
273 <span class="tag label btn-info sm">{{$tag nofilter}} <i class="fa fa-bolt" aria-hidden="true"></i></span>
276 {{foreach $item.mentions as $tag}}
277 <span class="mention label btn-warning sm">{{$tag nofilter}} <i class="fa fa-user" aria-hidden="true"></i></span>
281 {{foreach $item.folders as $cat}}
282 <span class="folder label btn-danger sm"><span class="p-category">{{$cat.name}}</span></a>{{if $cat.removeurl}} (<a href="{{$cat.removeurl}}" title="{{$remove}}">x</a>) {{/if}} </span>
285 {{foreach $item.categories as $cat}}
286 <span class="category label btn-success sm"><span class="p-category">{{$cat.name}}</span></a>{{if $cat.removeurl}} (<a href="{{$cat.removeurl}}" title="{{$remove}}">x</a>) {{/if}} </span>
289 {{if $item.edited}}<div class="itemedited text-muted">{{$item.edited['label']}} (<span title="{{$item.edited['date']}}">{{$item.edited['relative']}}</span>)</div>{{/if}}
294 <div class="wall-item-actions">
295 {{* Action buttons to interact with the item (like: like, dislike, share and so on *}}
296 <div class="wall-item-actions-left pull-left">
297 <!--comment this out to try something different {{if $item.threaded}}{{if $item.comment}}
298 <div id="button-reply" class="pull-left">
299 <button type="button" class="btn-link" id="comment-{{$item.id}}" onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"><i class="fa fa-reply" title="{{$item.switchcomment}}"></i> </span>
303 {{if $item.threaded}}{{/if}}
305 {{* Buttons for like and dislike *}}
307 {{if $item.vote.like}}
308 <button type="button" class="btn-link button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doLikeAction({{$item.id}},'like');" data-toggle="button"><i class="fa fa-thumbs-up" aria-hidden="true"></i> {{$item.vote.like.1}}</button>
310 {{if $item.vote.like AND $item.vote.dislike}}
311 <span role="presentation" class="separator">•</span>
313 {{if $item.vote.dislike}}
314 <button type="button" class="btn-link button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doLikeAction({{$item.id}},'dislike');" data-toggle="button"><i class="fa fa-thumbs-down" aria-hidden="true"></i> {{$item.vote.dislike.1}}</button>
317 {{if ($item.vote.like OR $item.vote.dislike) AND $item.comment}}
318 <span role="presentation" class="separator">•</span>
322 {{* Button to open the comment text field *}}
324 <button type="button" class="btn-link button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="showHide('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i> {{$item.switchcomment}}</button>
327 {{* Button for sharing the item *}}
329 {{if $item.vote.share}}
330 {{if $item.vote.like OR $item.vote.dislike OR $item.comment}}
331 <span role="presentation" class="separator">•</span>
333 <button type="button" class="btn-link button-votes" id="share-{{$item.id}}" title="{{$item.vote.share.0}}" onclick="jotShare({{$item.id}});"><i class="fa fa-retweet" aria-hidden="true"></i> {{$item.vote.share.1}}</button>
336 <img id="like-rotator-{{$item.id}}" class="like-rotator" src="images/rotator.gif" alt="{{$item.wait}}" title="{{$item.wait}}" style="display: none;" />
339 <div class="wall-item-actions-right pull-right">
340 {{* Event attendance buttons *}}
342 <div class="vote-event">
343 <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doLikeAction({{$item.id}},'attendyes');"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
344 <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doLikeAction({{$item.id}},'attendno');"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
345 <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doLikeAction({{$item.id}},'attendmaybe');"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
349 <div class="pull-right checkbox">
350 {{if $item.drop.pagedrop}}
351 <input type="checkbox" title="{{$item.drop.select}}" name="itemselected[]" id="checkbox-{{$item.id}}" class="item-select" value="{{$item.id}}" />
352 <label for="checkbox-{{$item.id}}"></label>
356 <div class="clearfix"></div>
357 </div><!--./wall-item-actions-->
359 <div class="wall-item-links"></div>
361 {{* Display likes, dislike and attendance stats *}}
362 {{if $item.responses}}
363 <div class="wall-item-responses">
364 {{foreach $item.responses as $verb=>$response}}
365 <div class="wall-item-{{$verb}}" id="wall-item-{{$verb}}-{{$item.id}}">{{$response.output nofilter}}</div>
370 {{if $item.thread_level!=1}}
371 </div><!--./media-body from for comments-->
376 {{* Insert comment box of threaded children *}}
377 {{if $item.threaded}}{{if $item.comment}}{{if $item.indent==comment}}
378 <div class="wall-item-comment-wrapper" id="item-comments-{{$item.id}}" style="display: none;">
379 {{$item.comment nofilter}}
381 {{/if}}{{/if}}{{/if}}
384 {{foreach $item.children as $child}}
386 {{if $child.type == tag}}
387 {{include file="wall_item_tag.tpl" item=$child}}
389 {{include file="{{$item.template}}" item=$child}}
392 {{include file="{{$item.template}}" item=$child}}
395 {{* Insert the comment box of the top level post at the bottom of the thread.
396 Display this comment box if there are any comments. If not hide it. In this
397 case it could be opend with the "comment" button *}}
398 {{if $item.total_comments_num}}
399 {{if $item.threaded}}{{if $item.comment}}{{if $item.thread_level==1}}
400 <div class="wall-item-comment-wrapper well well-small" id="item-comments-{{$item.id}}">{{$item.comment nofilter}}</div>
401 {{/if}}{{/if}}{{/if}}
404 <div class="wall-item-comment-wrapper well well-small" id="item-comments-{{$item.id}}">{{$item.comment nofilter}}</div>
407 {{if $item.threaded}}{{if $item.comment}}{{if $item.thread_level==1}}
408 <div class="wall-item-comment-wrapper well well-small" id="item-comments-{{$item.id}}" style="display: none;">{{$item.comment nofilter}}</div>
409 {{/if}}{{/if}}{{/if}}
412 <div class="wall-item-comment-wrapper well well-small" id="item-comments-{{$item.id}}" style="display: none;">{{$item.comment nofilter}}</div>
415 </div><!-- /media -->
416 </div><!-- ./panel-body or ./wall-item-container -->
419 {{if $mode == display}}
421 {{if $item.comment_lastcollapsed}}</div>{{/if}}
425 {{* close the comment-container div if no more thread_level = 2 children are left *}}
426 {{if $item.thread_level==2 && $top_child_nr==$top_child_total}}
427 </div><!--./comment-container-->