7be011a30d
The topic list cache can handle more groups now, but don't go too crazy with groups (e.g. thousands of them). Make the suspicious request logs more descriptive. Added the phrases API endpoint. Split the template phrases up by prefix, more work on this coming up. Removed #dash_saved and part of #dash_username. Removed some temporary artifacts from trying to implement FA5 in Nox. Removed some commented CSS. Fixed template artifact deletion on Windows. Tweaked HTTPSRedirect to make it more compact. Fixed NullUserCache not complying with the expectations for BulkGet. Swapped out a few RunVhook calls for more appropriate RunVhookNoreturn calls. Removed a few redundant IsAdmin checks when IsMod would suffice. Commented out a few pushers. Desktop notification permission requests are no longer served to guests. Split topics.html into topics.html and topics_topic.html RunThemeTemplate should now fallback to interpreted templates properly when the transpiled variants aren't avaialb.e Changed TopicsRow.CreatedAt from a string to a time.Time Added SkipTmplPtrMap to CTemplateConfig. Added SetBuildTags to CTemplateSet. A bit more data is dumped when something goes wrong while transpiling templates now. topics_topic, topic_posts, and topic_alt_posts are now transpiled for the client, although not all of them are ready to be served to the client yet. Client rendered templates now support phrases. Client rendered templates now support loops. Fixed loadAlerts in global.js Refactored some of the template initialisation code to make it less repetitive. Split topic.html into topic.html and topic_posts.html Split topic_alt.html into topic_alt.html and topic_alt_posts.html Added comments for PollCache. Fixed a data race in the MemoryPollCache. The writer is now closed properly in WsHubImpl.broadcastMessage. Fixed a potential deadlock in WsHubImpl.broadcastMessage. Removed some old commented code in websockets.go Added the DisableLiveTopicList config setting.
121 lines
6.5 KiB
HTML
121 lines
6.5 KiB
HTML
{{template "header.html" . }}
|
|
|
|
{{if gt .Page 1}}<div id="prevFloat" class="prev_button"><a class="prev_link" aria-label="{{lang "paginator_prev_page_aria"}}" rel="prev" href="/forum/{{.Forum.ID}}?page={{subtract .Page 1}}">{{lang "paginator_less_than"}}</a></div>{{end}}
|
|
{{if ne .LastPage .Page}}<div id="nextFloat" class="next_button"><a class="next_link" aria-label="{{lang "paginator_next_page_aria"}}" rel="next" href="/forum/{{.Forum.ID}}?page={{add .Page 1}}">{{lang "paginator_greater_than"}}</a></div>{{end}}
|
|
|
|
<main id="forumItemList" itemscope itemtype="http://schema.org/ItemList">
|
|
<div id="forum_head_block" class="rowblock rowhead topic_list_title_block{{if ne .CurrentUser.ID 0}} has_opt{{end}}">
|
|
<div class="rowitem forum_title">
|
|
<h1 itemprop="name">{{.Title}}</h1>
|
|
</div>
|
|
{{if ne .CurrentUser.ID 0}}
|
|
<div class="optbox">
|
|
{{if .CurrentUser.Perms.CreateTopic}}
|
|
<div class="pre_opt auto_hide"></div>
|
|
<div class="opt create_topic_opt" title="{{lang "topic_list_create_topic_tooltip"}}" aria-label="{{lang "topic_list_create_topic_aria"}}"><a class="create_topic_link" href="/topics/create/{{.Forum.ID}}"></a></div>
|
|
{{/** TODO: Add a permissions check for this **/}}
|
|
<div class="opt mod_opt" title="{{lang "topic_list_moderate_tooltip"}}">
|
|
<a class="moderate_link" href="#" aria-label="{{lang "topic_list_moderate_aria"}}"></a>
|
|
</div>
|
|
{{else}}<div class="opt locked_opt" title="{{lang "forum_locked_tooltip"}}" aria-label="{{lang "forum_locked_aria"}}"><a></a></div>{{end}}
|
|
</div>
|
|
<div style="clear: both;"></div>
|
|
{{end}}
|
|
</div>
|
|
{{if ne .CurrentUser.ID 0}}
|
|
<div class="mod_floater auto_hide">
|
|
<form method="post">
|
|
<div class="mod_floater_head">
|
|
<span>{{lang "topic_list_what_to_do"}}</span>
|
|
</div>
|
|
<div class="mod_floater_body">
|
|
<select class="mod_floater_options">
|
|
<option val="delete">{{lang "topic_list_moderate_delete"}}</option>
|
|
<option val="lock">{{lang "topic_list_moderate_lock"}}</option>
|
|
<option val="move">{{lang "topic_list_moderate_move"}}</option>
|
|
</select>
|
|
<button>{{lang "topic_list_moderate_run"}}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
{{if .CurrentUser.Perms.CreateTopic}}
|
|
<div id="forum_topic_create_form" class="rowblock topic_create_form quick_create_form" style="display: none;" aria-label="{{lang "quick_topic.aria"}}">
|
|
<form id="quick_post_form" enctype="multipart/form-data" action="/topic/create/submit/" method="post"></form>
|
|
<img class="little_row_avatar" src="{{.CurrentUser.Avatar}}" height="64" alt="{{lang "quick_topic.avatar_alt"}}" title="{{lang "quick_topic.avatar_tooltip"}}" />
|
|
<input form="quick_post_form" id="topic_board_input" name="topic-board" value="{{.Forum.ID}}" type="hidden">
|
|
<div class="main_form">
|
|
<div class="topic_meta">
|
|
<div class="formrow topic_name_row real_first_child">
|
|
<div class="formitem">
|
|
<input form="quick_post_form" name="topic-name" placeholder="{{lang "quick_topic.whatsup"}}" required>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="formrow topic_content_row">
|
|
<div class="formitem">
|
|
<textarea form="quick_post_form" id="input_content" name="topic-content" placeholder="{{lang "quick_topic.content_placeholder"}}" required></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="formrow poll_content_row auto_hide">
|
|
<div class="formitem">
|
|
Poll stuff
|
|
</div>
|
|
</div>
|
|
<div class="formrow quick_button_row">
|
|
<div class="formitem">
|
|
<button form="quick_post_form" name="topic-button" class="formbutton">{{lang "quick_topic.create_topic_button"}}</button>
|
|
<button form="quick_post_form" class="formbutton" id="add_poll_button">{{lang "quick_topic.add_poll_button"}}</button>
|
|
{{if .CurrentUser.Perms.UploadFiles}}
|
|
<input name="upload_files" form="quick_post_form" id="upload_files" multiple type="file" style="display: none;" />
|
|
<label for="upload_files" class="formbutton add_file_button">{{lang "quick_topic.add_file_button"}}</label>
|
|
<div id="upload_file_dock"></div>{{end}}
|
|
<button class="formbutton close_form">{{lang "quick_topic.cancel_button"}}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
<div id="forum_topic_list" class="rowblock topic_list" aria-label="{{lang "forum_list_aria"}}">
|
|
{{range .ItemList}}<div class="topic_row" data-tid="{{.ID}}">
|
|
<div class="rowitem topic_left passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
|
|
<span class="selector"></span>
|
|
<a href="{{.Creator.Link}}"><img src="{{.Creator.Avatar}}" height="64" alt="{{.Creator.Name}}'s Avatar" title="{{.Creator.Name}}'s Avatar" /></a>
|
|
<span class="topic_inner_left">
|
|
<a class="rowtopic" href="{{.Link}}" itemprop="itemListElement" title="{{.Title}}"><span>{{.Title}}</span></a>
|
|
<br /><a class="rowsmall starter" href="{{.Creator.Link}}" title="{{.Creator.Name}}">{{.Creator.Name}}</a>
|
|
{{/** TODO: Avoid the double '|' when both .IsClosed and .Sticky are set to true. We could probably do this with CSS **/}}
|
|
{{if .IsClosed}}<span class="rowsmall topic_status_e topic_status_closed" title="{{lang "status.closed_tooltip"}}"> | 🔒︎</span>{{end}}
|
|
{{if .Sticky}}<span class="rowsmall topic_status_e topic_status_sticky" title="{{lang "status.pinned_tooltip"}}"> | 📍︎</span>{{end}}
|
|
</span>
|
|
{{/** TODO: Phase this out of Cosora and remove it **/}}
|
|
<div class="topic_inner_right rowsmall">
|
|
<span class="replyCount">{{.PostCount}}</span><br />
|
|
<span class="likeCount">{{.LikeCount}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="topic_middle">
|
|
<div class="topic_inner_middle rowsmall">
|
|
<span class="replyCount">{{.PostCount}}</span><br />
|
|
<span class="likeCount">{{.LikeCount}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="rowitem topic_right passive datarow {{if .Sticky}}topic_sticky{{else if .IsClosed}}topic_closed{{end}}">
|
|
<div class="topic_right_inside">
|
|
<a href="{{.LastUser.Link}}"><img src="{{.LastUser.Avatar}}" height="64" alt="{{.LastUser.Name}}'s Avatar" title="{{.LastUser.Name}}'s Avatar" /></a>
|
|
<span>
|
|
<a href="{{.LastUser.Link}}" class="lastName" style="font-size: 14px;" title="{{.LastUser.Name}}">{{.LastUser.Name}}</a><br>
|
|
<span class="rowsmall lastReplyAt">{{.RelativeLastReplyAt}}</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>{{else}}<div class="rowitem passive rowmsg">{{lang "forum_no_topics"}}{{if .CurrentUser.Perms.CreateTopic}} <a href="/topics/create/{{.Forum.ID}}">{{lang "forum_start_one"}}</a>{{end}}</div>{{end}}
|
|
</div>
|
|
|
|
{{if gt .LastPage 1}}
|
|
{{template "paginator.html" . }}
|
|
{{end}}
|
|
|
|
</main>
|
|
{{template "footer.html" . }}
|