Merge branch 'develop'

main
Julian Lam 7 years ago
commit a5acacd27b

@ -1,3 +1,177 @@
// Make chats page edge-to-edge
.page-user-chats {
padding-top: 50px;
#content.container {
width: auto;
padding: 0;
}
.navbar {
margin-bottom: 0;
}
#panel {
padding-top: 0px;
padding-bottom: 0px;
}
[widget-area="header"], [widget-area="footer"] {
display: none;
}
}
/* Styles common to both full chat and chat modal */
.chats-full, .chat-modal {
display: flex;
flex-wrap: nowrap;
[component="chat/nav-wrapper"] {
flex: 1;
flex-direction: column;
box-shadow: 0 3px 9px rgba(0,0,0,.5);
.chats-list {
flex: 1;
overflow-y: auto;
margin-bottom: 0;
height: ~"calc(100% - 3em)";
}
.chat-search {
background-color: @panel-default-heading-bg;
border-bottom: 1px solid @gray-dark;
input {
background-color: @gray-dark;
color: @gray-lighter;
border-radius: 0;
border: none;
height: ~"calc(3em - 2px)";
}
ul {
width: 100%;
}
}
[component="chat/search/list"] {
padding: 0;
overflow-x: hidden;
overflow-y: auto;
border-top: 1px solid @gray-lighter;
li {
position: relative;
clear: both;
list-style-type: none;
padding: .5em;
height: 70px;
cursor: pointer;
border-left: 1px solid;
border-right: 1px solid;
border-bottom: 1px solid;
border-color: #eee;
background: #fff;
i {
position: relative;
left: -30px;
font-size: 20px;
top: -20px;
}
img, .user-icon {
.user-icon-style(50px, 2.4rem, 50%);
margin-top: 4px;
margin-right: 13px;
margin-left: .5em;
}
}
}
}
[component="chat/main-wrapper"] {
flex: 3;
.alert {
margin: 1em;
}
}
[component="chat/messages"] {
display: flex;
flex-direction: column;
height: 100%;
.chat-content {
flex: 1;
}
}
[component="chat/header"] {
padding: @panel-heading-padding;
background-color: @gray-dark;
border-bottom: none;
color: @gray-lighter;
span {
font-weight: 500;
}
.close {
margin-left: 0.5em;
color: @gray-lighter;
}
.members {
a {
font-weight: 600;
color: @gray-lighter;
}
}
.dropdown {
.avatar {
margin-right: 0.5em;
}
}
}
.modal-header .dropdown {
.avatar {
margin-right: 0.5em;
}
}
[component="chat/composer"] {
display: flex;
position: relative;
[component="chat/input"] {
flex: 1;
background: none;
box-shadow: none;
border: 0;
border: 1px solid @gray-lighter;
border-radius: 0;
}
[data-action="send"] {
width: 5em;
height: 100%;
}
[component="chat/message/remaining"] {
position: absolute;
right: 5.25em;
z-index: 2;
bottom: 0;
color: @gray-light;
}
}
}
.chats-page {
margin-top: 10px;
}
@ -12,7 +186,6 @@
overflow-x: hidden;
overflow-y: auto;
border-top: 1px solid @gray-lighter;
max-width: 360px;
> li {
position: relative;
@ -109,6 +282,7 @@
.members {
padding-left: 1rem;
margin-bottom: 0.5rem;
z-index: 1;
position: absolute;
bottom: 2px;
@ -165,7 +339,8 @@
z-index: 10000;
}
.expanded-chat, .chat-modal {
/* Chat modal specific styles */
.chat-modal {
.modal-header {
padding: 0.25em 1em;
@ -193,9 +368,20 @@
}
}
.modal-body {
display: flex;
flex-direction: column;
height: 400px;
.chat-content {
flex: 1;
}
}
}
.expanded-chat, .chat-modal {
.chat-content {
.fix-lists;
height: 250px;
overflow-y: auto;
overflow-x: hidden;
resize: none;
@ -208,6 +394,7 @@
font-weight: 300;
padding: 0 1.428rem;
margin-right: 1.428rem;
transition: opacity .5s ease;
&:first-child {
padding-top: 1.428rem;
@ -228,6 +415,20 @@
margin-top: -1.5px;
}
&.deleted {
opacity: 0.3;
.controls {
[data-action] {
display: none;
}
[data-action="restore"] {
display: inline;
}
}
}
.chat-user-image {
.user-icon-style(32px, 1.6rem, 50%);
float: left;
@ -236,6 +437,10 @@
.chat-user {
display: inline-block;
margin-left: 13px;
a {
color: @gray-dark;
}
}
.chat-timestamp {
@ -248,6 +453,7 @@
.message-body {
margin-left: 45px;
overflow-y: hidden;
p {
margin: 7px 0 0 0;
@ -265,6 +471,10 @@
.controls {
display: none;
[data-action="restore"] {
display: none;
}
}
&:hover {
@ -275,10 +485,6 @@
}
}
.chat-input {
height: 42px;
}
.user-typing {
color: @gray-light;
margin: 1.428rem 0;
@ -294,7 +500,6 @@
textarea {
resize: none;
height: 42px;
}
.since-bar {
@ -323,38 +528,32 @@
}
}
[component="chat/search/list"] {
[component="chat/manage-modal"] {
.list-group-item .avatar {
border-radius: 0;
margin-right: 1em;
}
padding: 0;
overflow-x: hidden;
overflow-y: auto;
border-top: 1px solid @gray-lighter;
div+span {
margin: -4px;
}
}
li {
position: relative;
clear: both;
list-style-type: none;
padding: .5em;
height: 70px;
cursor: pointer;
border-left: 1px solid;
border-right: 1px solid;
border-bottom: 1px solid;
border-color: #eee;
background: #fff;
/* Mobile handling of chat page */
@media (max-width: @screen-sm) {
.page-user-chats {
padding-bottom: 0;
i {
position: relative;
left: -30px;
font-size: 20px;
top: -20px;
[component="chat/nav-wrapper"][data-loaded="1"] {
display: none;
}
img, .user-icon {
.user-icon-style(50px, 2.4rem, 50%);
margin-top: 4px;
margin-right: 13px;
margin-left: .5em;
[component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
display: none;
}
}
[data-action="pop-out"] {
display: none;
}
}

@ -92,7 +92,7 @@
.user-icon-style(50px, 2.4rem, 50%) !important;
padding: 0;
color: white;
background: none;
background: @brand-primary;
background-size: cover;
i {

@ -59,6 +59,41 @@ html[data-dir="rtl"] {
}
[component="chat/composer"] {
[component="chat/message/remaining"] {
right: auto;
left: 5.25em;
}
[data-action="send"] {
transform: scale(-1, 1);
}
}
.chats-full [component="chat/header"] .dropdown .avatar, .chat-modal [component="chat/header"] .dropdown .avatar {
margin-right: 0;
margin-left: 0.5em;
}
.chats-list > li .teaser-content, .chats-list > li .room-name {
padding-left: 0;
padding-right: 80px;
}
.chats-list > li {
.avatar-placeholder, .main-avatar {
left: auto;
right: 0;
}
.members {
right: 53px;
left: auto;
padding-left: 0;
padding-right: 1rem;
}
}
.slideout-menu .chat-list li .teaser-content, .slideout-menu .chat-list li .room-name {
padding-right: 60px;
}

@ -45,7 +45,7 @@ $(document).ready(function() {
data.options.className = 'taskbar-' + data.module;
if (data.module === 'composer') {
data.options.icon = 'fa-plus';
data.options.icon = 'fa-commenting-o';
} else if (data.module === 'chat') {
if (!data.element.length) {
createChatIcon(data);
@ -66,19 +66,21 @@ $(document).ready(function() {
});
function createChatIcon(data) {
data.options.icon = 'fa-spinner fa-spin';
$.getJSON(config.relative_path + '/api/user/' + utils.slugify(data.options.title), function(user) {
$.getJSON(config.relative_path + '/api/user/' + app.user.userslug + '/chats/' + data.options.roomId, function(chatObj) {
var el = $('#taskbar [data-uuid="' + data.uuid + '"] a');
el.find('i').remove();
el.parent('[data-uuid]').attr('data-roomId', data.options.roomId);
if (user.picture) {
el.css('background-image', 'url(' + user.picture + ')');
} else {
el .css('background-color', user['icon:bgColor'])
.text(user['icon:text'])
.addClass('user-icon');
if (chatObj.users.length === 1) {
var user = chatObj.users[0];
el.find('i').remove();
if (user.picture) {
el.css('background-image', 'url(' + user.picture + ')');
} else {
el .css('background-color', user['icon:bgColor'])
.text(user['icon:text'])
.addClass('user-icon');
}
}
});
}

@ -1,24 +1,42 @@
<div id="chat-modal" class="chat-modal hide" tabindex="-1" role="dialog" aria-labelledby="Chat" aria-hidden="true" data-backdrop="none">
<div id="chat-modal" class="chat-modal hide" tabindex="-1" role="dialog" aria-labelledby="Chat" aria-hidden="true" data-backdrop="none" data-name="{roomName}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button id="chat-close-btn" type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<button type="button" class="close hidden-xs hidden-sm" data-action="maximize"><span aria-hidden="true"><i class="fa fa-expand"></i></span><span class="sr-only">[[modules:chat.maximize]]</span></button>
<button type="button" class="close hidden-xs hidden-sm" data-action="minimize"><span aria-hidden="true"><i class="fa fa-minus"></i></span><span class="sr-only">[[modules:chat.minimize]]</span></button>
<button class="close" component="chat/controlsToggle"><i class="fa fa-gear"></i></button>
<h4><!-- IF roomName -->{roomName}<!-- ELSE -->{usernames}<!-- ENDIF roomName --></h4>
<div class="dropdown pull-right">
<button class="close" data-toggle="dropdown" component="chat/controlsToggle"><i class="fa fa-gear"></i></button>
<ul class="dropdown-menu dropdown-menu-right pull-right" component="chat/controls">
<!-- IF users.length -->
<li class="dropdown-header">[[modules:chat.in-room]]</li>
<!-- BEGIN users -->
<li>
<a href="{config.relative_path}/uid/{../uid}">
<!-- IF ../picture -->
<img class="avatar avatar-sm" component="user/picture" src="{../picture}" itemprop="image" />
<!-- ELSE -->
<div class="avatar avatar-sm" component="user/picture" style="background-color: {../icon:bgColor};">{../icon:text}</div><!-- END -->{../username}
</a>
</li>
<!-- END -->
<li role="separator" class="divider"></li>
<!-- END -->
<li class="dropdown-header">[[modules:chat.options]]</li>
<li>
<a href="#" data-action="members"><i class="fa fa-fw fa-plus"></i> [[modules:chat.add-users-to-room]]</a>
</li>
<li>
<a href="#" data-action="rename"><i class="fa fa-fw fa-edit"></i> [[modules:chat.rename-room]]</a>
</li>
<li>
<a href="#" data-action="leave"><i class="fa fa-fw fa-sign-out"></i> [[modules:chat.leave]]</a>
</li>
</ul>
</div>
<form component="chat/controls" style="display: none;">
<!-- IF showUserInput -->
<div class="users-tag-container">
<input class="users-tag-input" type="text" class="form-control" placeholder="enter users here" tabindex="4"/>
</div>
<!-- ENDIF showUserInput -->
<input class="form-control" component="chat/room/name" value="{roomName}" <!-- IF !isOwner -->disabled<!-- ENDIF !isOwner -->/>
</form>
<h4 component="chat/room/name"><!-- IF roomName -->{roomName}<!-- ELSE -->{usernames}<!-- ENDIF roomName --></h4>
</div>
<div class="modal-body">
@ -26,13 +44,11 @@
<!-- IMPORT partials/chats/messages.tpl -->
</ul>
<div class="input-group">
<textarea component="chat/input" id="chat-message-input" rows="1" placeholder="[[modules:chat.placeholder]]" name="chat-message" class="form-control" <!-- IF !canReply -->readonly<!-- ENDIF !canReply -->></textarea>
<span class="input-group-btn">
<button id="chat-message-send-btn" class="btn btn-primary" href="#" type="button" <!-- IF !canReply -->disabled<!-- ENDIF !canReply -->>[[modules:chat.send]]</button>
</span>
<div component="chat/composer">
<textarea component="chat/input" placeholder="[[modules:chat.placeholder]]" class="form-control chat-input mousetrap" rows="1"></textarea>
<button class="btn btn-primary" type="button" data-action="send">[[modules:chat.send]]</button>
<span component="chat/message/remaining">{maximumChatMessageLength}</span>
</div>
<span component="chat/message/length">0</span>/<span>{maximumChatMessageLength}</span>
</div>
</div>
</div>

@ -1,19 +1,16 @@
<div class="row chats-page">
<div class="col-md-4" component="chat/nav-wrapper">
<div class="chat-search hidden-xs">
<input class="form-control" type="text" component="chat/search" placeholder="[[users:enter_username]]" />
<div class="chats-full">
<div component="chat/nav-wrapper" data-loaded="<!-- IF roomId -->1<!-- ELSE -->0<!-- END -->">
<div class="chat-search dropdown">
<input class="form-control" type="text" component="chat/search" placeholder="[[users:enter_username]]" data-toggle="dropdown" />
<ul component="chat/search/list" class="dropdown-menu"></ul>
</div>
<ul component="chat/search/list" class="chat-search-list">
</ul>
<ul component="chat/recent" class="chats-list" data-nextstart="{nextStart}">
<!-- BEGIN rooms -->
<!-- IMPORT partials/chats/recent_room.tpl -->
<!-- END rooms -->
</ul>
</div>
<div class="col-md-8 hidden-sm hidden-xs" component="chat/main-wrapper">
<div component="chat/main-wrapper">
<!-- IMPORT partials/chats/message-window.tpl -->
</div>
</div>
</div>

@ -25,7 +25,6 @@
<!-- IF showHidden -->
<li><a href="{config.relative_path}/user/{userslug}/settings">[[user:settings]]</a></li>
<li><a href="{config.relative_path}/user/{userslug}/edit">[[user:edit]]</a></li>
<li><a href="{config.relative_path}/user/{userslug}/info">[[user:account_info]] <i class="fa fa-lock"></i></a></li>
<!-- ENDIF showHidden -->
<!-- IF !isSelf -->
@ -71,7 +70,7 @@
<!-- IF @first -->
<li class="divider"></li>
<!-- ENDIF @first -->
<li id="{profile_links.id}" class="plugin-link <!-- IF profile_links.public -->public<!-- ELSE -->private<!-- ENDIF profile_links.public -->"><a href="{config.relative_path}/user/{userslug}/{profile_links.route}"><i class="fa fa-fw {profile_links.icon}"></i> {profile_links.name}</a></li>
<li id="{profile_links.id}" class="plugin-link <!-- IF profile_links.public -->public<!-- ELSE -->private<!-- ENDIF profile_links.public -->"><a href="{config.relative_path}/user/{userslug}/{profile_links.route}"><!-- IF ../icon --><i class="fa fa-fw {profile_links.icon}"></i> <!-- END -->{profile_links.name}</a></li>
<!-- END profile_links -->
</ul>
</div>

@ -1,29 +1,52 @@
<!-- IF roomId -->
<div component="chat/messages" class="expanded-chat" data-roomid="{roomId}">
<button type="button" class="close" data-action="pop-out"><span aria-hidden="true"><i class="fa fa-compress"></i></span><span class="sr-only">[[modules:chat.pop-out]]</span></button>
<button class="close controlsToggle" component="expanded-chat/controlsToggle"><i class="fa fa-gear"></i></button>
<div class="controls hide" component="expanded-chat/controls">
<!-- IF showUserInput -->
<div class="users-tag-container">
<input class="users-tag-input" type="text" class="form-control" placeholder="[[modules:chat.add-users-to-room]]" tabindex="4"/>
<div component="chat/header">
<button type="button" class="close" data-action="pop-out"><span aria-hidden="true"><i class="fa fa-compress"></i></span><span class="sr-only">[[modules:chat.pop-out]]</span></button>
<div class="dropdown pull-right">
<button class="close" data-toggle="dropdown" component="chat/controlsToggle"><i class="fa fa-gear"></i></button>
<ul class="dropdown-menu dropdown-menu-right pull-right" component="chat/controls">
<!-- IF users.length -->
<li class="dropdown-header">[[modules:chat.in-room]]</li>
<!-- BEGIN users -->
<li>
<a href="{config.relative_path}/uid/{../uid}">
<!-- IF ../picture -->
<img class="avatar avatar-sm" component="user/picture" src="{../picture}" itemprop="image" />
<!-- ELSE -->
<div class="avatar avatar-sm" component="user/picture" style="background-color: {../icon:bgColor};">{../icon:text}</div><!-- END -->{../username}
</a>
</li>
<!-- END -->
<li role="separator" class="divider"></li>
<!-- END -->
<li class="dropdown-header">[[modules:chat.options]]</li>
<li>
<a href="#" data-action="members"><i class="fa fa-fw fa-plus"></i> [[modules:chat.add-users-to-room]]</a>
</li>
<li>
<a href="#" data-action="rename"><i class="fa fa-fw fa-edit"></i> [[modules:chat.rename-room]]</a>
</li>
<li>
<a href="#" data-action="leave"><i class="fa fa-fw fa-sign-out"></i> [[modules:chat.leave]]</a>
</li>
</ul>
</div>
<!-- ENDIF showUserInput -->
<input class="form-control" component="chat/room/name" value="{roomName}" <!-- IF !isOwner -->disabled<!-- ENDIF !isOwner -->/>
<hr />
<span class="members">
[[modules:chat.chatting_with]]:
<!-- BEGIN users -->
<a href="{config.relative_path}/uid/{../uid}">{../username}</a><!-- IF !@last -->,<!-- END -->
<!-- END -->
</span>
</div>
<ul class="chat-content">
<!-- IMPORT partials/chats/messages.tpl -->
</ul>
<div class="input-group">
<textarea component="chat/input" placeholder="[[modules:chat.placeholder]]" class="form-control chat-input mousetrap" rows="1" <!-- IF !canReply -->readonly<!-- ENDIF !canReply -->></textarea>
<span class="input-group-btn">
<button class="btn btn-primary" type="button" data-action="send" <!-- IF !canReply -->disabled<!-- ENDIF !canReply -->>[[modules:chat.send]]</button>
</span>
<div component="chat/composer">
<textarea component="chat/input" placeholder="[[modules:chat.placeholder]]" class="form-control chat-input mousetrap" rows="2"></textarea>
<button class="btn btn-primary" type="button" data-action="send"><i class="fa fa-fw fa-2x fa-paper-plane"></i></button>
<span component="chat/message/remaining">{maximumChatMessageLength}</span>
</div>
<span component="chat/message/length">0</span>/<span>{maximumChatMessageLength}</span>
</div>
<!-- ELSE -->
<div class="alert alert-info">

@ -1,4 +1,4 @@
<li component="chat/message" class="chat-message clear" data-index="{messages.index}" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-self="{messages.self}" data-break="{messages.newSet}" data-timestamp="{messages.timestamp}">
<li component="chat/message" class="chat-message clear<!-- IF ../deleted --> deleted<!-- END -->" data-index="{messages.index}" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-self="{messages.self}" data-break="{messages.newSet}" data-timestamp="{messages.timestamp}">
<div class="message-header">
<a href="{config.relative_path}/user/{messages.fromUser.userslug}">
<!-- IF messages.fromUser.picture -->
@ -7,7 +7,13 @@
<div class="user-icon chat-user-image" style="background-color: {messages.fromUser.icon:bgColor};">{messages.fromUser.icon:text}</div>
<!-- ENDIF messages.fromUser.picture -->
</a>
<strong><span class="chat-user">{messages.fromUser.username}</span></strong>
<strong><span class="chat-user"><a href="{config.relative_path}/user/{messages.fromUser.userslug}">{messages.fromUser.username}</a></span></strong>
<!-- IF ../fromUser.banned -->
<span class="label label-danger">[[user:banned]]</span>
<!-- END -->
<!-- IF ../fromUser.deleted -->
<span class="label label-danger">[[user:deleted]]</span>
<!-- END -->
<span class="chat-timestamp timeago" title="{messages.timestampISO}"></span>
</div>
<div component="chat/message/body" class="message-body">
@ -19,6 +25,7 @@
<div class="pull-right btn-group controls">
<button class="btn btn-xs btn-link" data-action="edit"><i class="fa fa-pencil"></i></button>
<button class="btn btn-xs btn-link" data-action="delete"><i class="fa fa-times"></i></button>
<button class="btn btn-xs btn-link" data-action="restore"><i class="fa fa-repeat"></i></button>
</div>
<!-- ENDIF messages.self -->
<!-- ENDIF !config.disableChatMessageEditing -->

@ -1,10 +1,9 @@
<li component="chat/recent/room" data-roomid="{rooms.roomId}" class="<!-- IF rooms.unread -->unread<!-- ENDIF rooms.unread -->">
<i class="fa fa-times pull-right leave" component="chat/leave"></i>
<strong class="room-name">
<!-- IF !rooms.lastUser.uid -->
<span>[[modules:chat.no-users-in-room]]</span>
<!-- ELSE -->
<!-- IF rooms.roomName -->{rooms.roomName}<!-- ELSE -->{rooms.usernames}<!-- ENDIF rooms.roomName -->
<span component="chat/title"><!-- IF rooms.roomName -->{rooms.roomName}<!-- ELSE -->{rooms.usernames}<!-- ENDIF rooms.roomName --></span>
<!-- ENDIF !rooms.lastUser.uid -->
</strong>
<div class="avatar-placeholder"></div>
@ -23,9 +22,4 @@
</li>
<!-- END rooms.users -->
</ul>
<!-- IF rooms.teaser.content -->
<span class="teaser-content">{rooms.teaser.content}</span>
<span class="teaser-timestamp timeago pull-right" title="{rooms.teaser.timestampISO}"></span>
<!-- ENDIF rooms.teaser.content -->
</li>

@ -0,0 +1,11 @@
<div class="form-group">
<input class="form-control" type="text" placeholder="[[global:user-search-prompt]]" />
<p class="text-danger"></p>
<p class="help-block">[[modules:chat.add-user-help]]</p>
<hr />
<ul class="list-group">
<li class="list-group-item"><i class="fa fa-spinner fa-spin"></i> [[modules:chat.retrieving-users]]</li>
</ul>
</div>

@ -0,0 +1,11 @@
<!-- BEGIN users -->
<li class="list-group-item">
<!-- IF ../picture -->
<img class="avatar avatar-sm" component="user/picture" data-uid="{../uid}" src="{../picture}" align="left" itemprop="image" />
<!-- ELSE -->
<div class="avatar avatar-sm" component="user/picture" data-uid="{../uid}" style="background-color: {../icon:bgColor};">{../icon:text}</div>
<!-- ENDIF ../picture -->
<span>{../username}</span>
</li>
<!-- END -->

@ -0,0 +1,24 @@
<p>
<!-- IF numDiffs -->
[[topic:diffs.description, {numDiffs}]]
<!-- ELSE -->
[[topic:diffs.no-revisions-description, {numDiffs}]]
<!-- END -->
</p>
<!-- IF numDiffs -->
<div class="form-group">
<select class="form-control">
<!-- BEGIN diffs -->
<option value="{../timestamp}">
{../pretty}
<!-- IF @first -->(last revision)<!-- END -->
<!-- IF @last -->(original revision)<!-- END -->
</option>
<!-- END -->
</select>
<hr />
<ul class="posts-list"></ul>
</div>
<!-- END -->

@ -0,0 +1,4 @@
<input type="text" class="form-control" id="roomName" placeholder="[[modules:chat.rename-placeholder]]" value="{name}" />
<p class="help-block">
[[modules:chat.rename-help]]
</p>

@ -29,6 +29,14 @@
</li>
<!-- END posts.tools -->
<!-- IF posts.display_history -->
<li role="presentation">
<a component="post/view-history" role="menuitem" tabindex="-1" href="#">
<span class="menu-icon"><i class="fa fa-history"></i></span> [[topic:view-history]]
</a>
</li>
<!-- END -->
<!-- IF posts.display_move_tools -->
<li role="presentation">
<a component="post/move" role="menuitem" tabindex="-1" href="#">

@ -25,7 +25,7 @@
<span class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
<a class="permalink" href="{config.relative_path}/post/{posts.pid}"><span class="timeago" title="{posts.timestampISO}"></span></a>
<i class="fa fa-pencil-square pointer edit-icon <!-- IF !posts.editor.username -->hidden<!-- ENDIF !posts.editor.username -->"></i>
<i component="post/edit-indicator" class="fa fa-pencil-square pointer edit-icon <!-- IF !posts.editor.username -->hidden<!-- ENDIF !posts.editor.username -->"></i>
<small data-editor="{posts.editor.userslug}" component="post/editor" class="hidden">[[global:last_edited_by, {posts.editor.username}]] <span class="timeago" title="{posts.editedISO}"></span></small>

@ -80,8 +80,10 @@
</div>
<div class="col-md-1 hidden-sm hidden-xs stats stats-votes">
<!-- IF !reputation:disabled -->
<span class="human-readable-number" title="{topics.votes}">{topics.votes}</span><br />
<small>[[global:votes]]</small>
<!-- END -->
</div>
<div class="col-md-1 hidden-sm hidden-xs stats stats-postcount">

Loading…
Cancel
Save