Merge remote-tracking branch 'origin/develop' into threads-enhancement
commit
67f45c6c2e
@ -0,0 +1,15 @@
|
||||
.page-flags {
|
||||
[component="flags/list"] {
|
||||
td {
|
||||
max-width: 300px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
[component="flags/list/description"] {
|
||||
font-style: italic;
|
||||
color: @gray-light;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,201 @@
|
||||
<div class="row">
|
||||
<div class="col-sm-4 col-md-3">
|
||||
<!-- IMPORT partials/flags/filters.tpl -->
|
||||
</div>
|
||||
<div class="col-sm-8 col-md-9">
|
||||
<h2>
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-link" href="{config.relative_path}/flags"><i class="fa fa-chevron-left"></i> [[flags:back]]</a>
|
||||
</div>
|
||||
{target_readable}
|
||||
<small><span class="timeago" title="{datetimeISO}"></span></small>
|
||||
</h2>
|
||||
|
||||
<hr />
|
||||
|
||||
<!-- IF type_bool.post -->
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<a href="{config.relative_path}/user/{target.user.userslug}">
|
||||
<!-- IF target.user.picture -->
|
||||
<img class="media-object avatar avatar-lg" src="{target.user.picture}" alt="{target.user.username}" />
|
||||
<!-- ELSE -->
|
||||
<div class="media-object avatar avatar-lg" style="background-color: {target.user.icon:bgColor}">{target.user.icon:text}</div>
|
||||
<!-- ENDIF target.user.picture -->
|
||||
</a>
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading"><a href="{config.relative_path}/user/{target.user.userslug}">{target.user.username}</a></h4>
|
||||
{target.content}
|
||||
</div>
|
||||
</div>
|
||||
<!-- ENDIF type_bool.post -->
|
||||
|
||||
<!-- IF type_bool.user -->
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<a href="{config.relative_path}/user/{target.userslug}">
|
||||
<!-- IF target.picture -->
|
||||
<img class="media-object avatar avatar-lg" src="{target.picture}" alt="{target.username}" />
|
||||
<!-- ELSE -->
|
||||
<div class="media-object avatar avatar-lg" style="background-color: {target.icon:bgColor}">{target.icon:text}</div>
|
||||
<!-- ENDIF target.picture -->
|
||||
</a>
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading"><a href="{config.relative_path}/user/{target.userslug}">{target.username}</a></h4>
|
||||
<p class="lead">
|
||||
<a href="{config.relative_path}/uid/{target.uid}">[[flags:user-view]]</a> |
|
||||
<a href="{config.relative_path}/uid/{target.uid}/edit">[[flags:user-edit]]</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ENDIF type_bool.user -->
|
||||
|
||||
<!-- IF type_bool.empty -->
|
||||
<div class="alert alert-warning">[[flags:target-purged]]</div>
|
||||
<!-- ENDIF type_bool.empty -->
|
||||
|
||||
<hr />
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-6 col-md-8">
|
||||
<form role="form" id="attributes">
|
||||
<div class="form-group row">
|
||||
<div class="col-sm-6">
|
||||
<label>[[flags:reporter]]</label>
|
||||
<div>
|
||||
<!-- IF reporter.picture -->
|
||||
<img class="media-object avatar avatar-sm" src="{reporter.picture}" alt="{reporter.username}" />
|
||||
<!-- ELSE -->
|
||||
<div class="media-object avatar avatar-sm" style="background-color: {reporter.icon:bgColor}">{reporter.icon:text}</div>
|
||||
<!-- ENDIF reporter.picture -->
|
||||
<a href="{config.relative_path}/user/{reporter.userslug}">{reporter.username}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<label>[[flags:reported-at]]</label>
|
||||
<p>
|
||||
{datetimeISO}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>[[flags:description]]</label>
|
||||
<blockquote>{description}</blockquote>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="state">[[flags:state]]</label>
|
||||
<select class="form-control" id="state" name="state" disabled>
|
||||
<option value="open">[[flags:state-open]]</option>
|
||||
<option value="wip">[[flags:state-wip]]</option>
|
||||
<option value="resolved">[[flags:state-resolved]]</option>
|
||||
<option value="rejected">[[flags:state-rejected]]</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="assignee">[[flags:assignee]]</label>
|
||||
<select class="form-control" id="assignee" name="assignee" disabled>
|
||||
<option value="">[[flags:no-assignee]]</option>
|
||||
<!-- BEGIN assignees -->
|
||||
<option value="{../uid}">{../username}</option>
|
||||
<!-- END assignees -->
|
||||
</select>
|
||||
</div>
|
||||
<button type="button" class="btn btn-block btn-primary" data-action="update">[[flags:update]]</button>
|
||||
</form>
|
||||
|
||||
<hr />
|
||||
|
||||
<form role="form">
|
||||
<div class="form-group">
|
||||
<label for="note">[[flags:notes]]</label>
|
||||
<textarea id="note" class="form-control"></textarea>
|
||||
<button type="button" class="btn btn-block btn-primary" data-action="appendNote">[[flags:add-note]]</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div component="flag/notes">
|
||||
<!-- IF !notes.length -->
|
||||
<div class="alert alert-success text-center">[[flags:no-notes]]</div>
|
||||
<!-- ENDIF !notes.length -->
|
||||
<!-- BEGIN notes -->
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<a href="{config.relative_path}/user/{../user.userslug}">
|
||||
<!-- IF ../user.picture -->
|
||||
<img class="media-object avatar avatar-md" src="{../user.picture}" alt="{../user.username}" />
|
||||
<!-- ELSE -->
|
||||
<div class="media-object avatar avatar-md" style="background-color: {../user.icon:bgColor}">{../user.icon:text}</div>
|
||||
<!-- ENDIF ../user.picture -->
|
||||
</a>
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading">
|
||||
<a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
|
||||
<small><span class="timeago" title="{../datetimeISO}"></span></small>
|
||||
</h4>
|
||||
{../content}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END notes -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-4">
|
||||
<label>[[flags:quick-links]]</label>
|
||||
<ul>
|
||||
<li><a href="{config.relative_path}/{type}/{targetId}">[[flags:go-to-target]]</a></li>
|
||||
<li>
|
||||
[[flags:flagged-user]]
|
||||
<ul>
|
||||
<li><a href="{config.relative_path}/uid/{target.user.uid}">[[flags:view-profile]]</a></li>
|
||||
<li><a href="#" data-chat="{target.user.uid}">[[flags:start-new-chat]]</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
[[flags:reporter]]
|
||||
<ul>
|
||||
<li><a href="{config.relative_path}/uid/{reporter.uid}">[[flags:view-profile]]</a></li>
|
||||
<li><a href="#" data-chat="{reporter.uid}">[[flags:start-new-chat]]</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
|
||||
<label>[[flags:history]]</label>
|
||||
<div component="flag/history">
|
||||
<!-- IF !history.length -->
|
||||
<div class="alert alert-success text-center">[[flags:no-history]]</div>
|
||||
<!-- ENDIF !history.length -->
|
||||
<!-- BEGIN history -->
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<a href="{config.relative_path}/user/{../user.userslug}">
|
||||
<!-- IF ../user.picture -->
|
||||
<img class="media-object avatar avatar-md" src="{../user.picture}" alt="{../user.username}" />
|
||||
<!-- ELSE -->
|
||||
<div class="media-object avatar avatar-md" style="background-color: {../user.icon:bgColor}">{../user.icon:text}</div>
|
||||
<!-- ENDIF ../user.picture -->
|
||||
</a>
|
||||
</div>
|
||||
<div class="media-body">
|
||||
<h4 class="media-heading">
|
||||
<a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
|
||||
<small><span class="timeago" title="{../datetimeISO}"></span></small>
|
||||
</h4>
|
||||
<ul>
|
||||
<!-- BEGIN fields -->
|
||||
<li>
|
||||
<span class="label label-primary">@key</span><!-- IF @value --> → <span class="label label-default">@value</span><!-- ENDIF @value -->
|
||||
</li>
|
||||
<!-- END fields -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END history -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,67 @@
|
||||
<div class="row">
|
||||
<div class="col-sm-4 col-md-3">
|
||||
<!-- IMPORT partials/flags/filters.tpl -->
|
||||
</div>
|
||||
<div class="col-sm-8 col-md-9">
|
||||
<div class="text-center">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div><canvas id="flags:daily" height="250"></canvas></div>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer"><small>Daily flags</small></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- IF hasFilter -->
|
||||
<div class="alert alert-warning">
|
||||
<p class="pull-right">
|
||||
<a href="{config.relative_path}/flags">[[flags:filter-reset]]</a>
|
||||
</p>
|
||||
[[flags:filter-active]]
|
||||
</div>
|
||||
<!-- ENDIF hasFilter -->
|
||||
<table class="table table-striped table-hover" component="flags/list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>[[flags:state]]</th>
|
||||
<th></th>
|
||||
<th><span class="hidden-xs">[[flags:reporter]] </span><i class="fa fa-user-plus"></i></th>
|
||||
<th><span class="hidden-xs">[[flags:reported-at]] </span><i class="fa fa-clock-o"></i></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- IF !flags.length -->
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<div class="alert alert-success text-center">
|
||||
[[flags:no-flags]]
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- ENDIF !flags.length -->
|
||||
<!-- BEGIN flags -->
|
||||
<tr data-flag-id="{../flagId}">
|
||||
<td><span class="label label-{../labelClass}">[[flags:state-{../state}]]</span></td>
|
||||
<td>
|
||||
<a href="{config.relative_path}/flags/{../flagId}">
|
||||
<strong>{../target_readable}</strong> — <span component="flags/list/description">{../description}</span>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<!-- IF ../reporter.picture -->
|
||||
<img class="avatar avatar-sm" src="{../reporter.picture}" />
|
||||
<!-- ELSE -->
|
||||
<div class="avatar avatar-sm" style="background-color: {../reporter.icon:bgColor};">{../reporter.icon:text}</div>
|
||||
<!-- ENDIF ../reporter.picture -->
|
||||
{../reporter.username}
|
||||
</td>
|
||||
<td><span class="timeago" title="{../datetimeISO}"></span></td>
|
||||
</tr>
|
||||
<!-- END flags -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,65 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">[[flags:quick-filters]]</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
<li><a href="{config.relative_path}/flags?quick=mine">[[flags:filter-quick-mine]]</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">[[flags:filters]]</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<form role="form" component="flags/filters">
|
||||
<div class="form-group">
|
||||
<label for="filter-state">[[flags:filter-state]]</label>
|
||||
<select class="form-control" id="filter-state" name="state">
|
||||
<option value="">[[flags:state-all]]</option>
|
||||
<option value="open">[[flags:state-open]]</option>
|
||||
<option value="wip">[[flags:state-wip]]</option>
|
||||
<option value="resolved">[[flags:state-resolved]]</option>
|
||||
<option value="rejected">[[flags:state-rejected]]</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="filter-type">[[flags:filter-type]]</label>
|
||||
<select class="form-control" id="filter-type" name="type">
|
||||
<option value="">[[flags:filter-type-all]]</option>
|
||||
<option value="post">[[flags:filter-type-post]]</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="filter-assignee">[[flags:filter-assignee]]</label>
|
||||
<input type="number" class="form-control" id="filter-assignee" name="assignee" min="0" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="filter-cid">[[flags:filter-cid]]</label>
|
||||
<select class="form-control" id="filter-cid" name="cid" multiple="true">
|
||||
<option value="">[[flags:filter-cid-all]]</option>
|
||||
<!-- BEGIN categories -->
|
||||
<option value="@key">@value</option>
|
||||
<!-- END categories -->
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="filter-targetUid">[[flags:filter-targetUid]]</label>
|
||||
<input type="number" class="form-control" id="filter-targetUid" name="targetUid" min="0" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="filter-reporterId">[[flags:filter-reporterId]]</label>
|
||||
<input type="number" class="form-control" id="filter-reporterId" name="reporterId" min="0" />
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-primary btn-block">[[flags:apply-filters]]</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
Loading…
Reference in New Issue