DEV: enforces block-indentation of ember-template-lint rules (#9408)
This commit is contained in:
parent
a863d8eecb
commit
b66b277dc4
|
@ -6,7 +6,7 @@ module.exports = {
|
|||
// "eol-last": "always",
|
||||
|
||||
rules: {
|
||||
"block-indentation": false,
|
||||
"block-indentation": true,
|
||||
"deprecated-render-helper": true,
|
||||
"img-alt-attributes": false,
|
||||
"linebreak-style": true,
|
||||
|
|
|
@ -1,35 +1,33 @@
|
|||
{{#admin-wrapper class="container"}}
|
||||
<div class="row">
|
||||
<div class="full-width">
|
||||
<div class="admin-main-nav">
|
||||
|
||||
<ul class="nav nav-pills">
|
||||
|
||||
{{nav-item route='admin.dashboard' label='admin.dashboard.title'}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminSiteSettings' label='admin.site_settings.title'}}
|
||||
{{/if}}
|
||||
{{nav-item route='adminUsersList' label='admin.users.title'}}
|
||||
{{#if showGroups}}
|
||||
{{nav-item route='groups' label='admin.groups.title'}}
|
||||
{{/if}}
|
||||
{{#if showBadges}}
|
||||
{{nav-item route='adminBadges' label='admin.badges.title'}}
|
||||
{{/if}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminEmail' label='admin.email.title'}}
|
||||
{{/if}}
|
||||
{{nav-item route='adminLogs' label='admin.logs.title'}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminCustomize' label='admin.customize.title'}}
|
||||
{{nav-item route='adminApi' label='admin.api.title'}}
|
||||
{{#if siteSettings.enable_backups}}
|
||||
{{nav-item route='admin.backups' label='admin.backups.title'}}
|
||||
<div class="admin-main-nav">
|
||||
<ul class="nav nav-pills">
|
||||
{{nav-item route='admin.dashboard' label='admin.dashboard.title'}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminSiteSettings' label='admin.site_settings.title'}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{nav-item route='adminPlugins' label='admin.plugins.title'}}
|
||||
{{plugin-outlet name="admin-menu" connectorTagName="" tagName=""}}
|
||||
</ul>
|
||||
{{nav-item route='adminUsersList' label='admin.users.title'}}
|
||||
{{#if showGroups}}
|
||||
{{nav-item route='groups' label='admin.groups.title'}}
|
||||
{{/if}}
|
||||
{{#if showBadges}}
|
||||
{{nav-item route='adminBadges' label='admin.badges.title'}}
|
||||
{{/if}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminEmail' label='admin.email.title'}}
|
||||
{{/if}}
|
||||
{{nav-item route='adminLogs' label='admin.logs.title'}}
|
||||
{{#if currentUser.admin}}
|
||||
{{nav-item route='adminCustomize' label='admin.customize.title'}}
|
||||
{{nav-item route='adminApi' label='admin.api.title'}}
|
||||
{{#if siteSettings.enable_backups}}
|
||||
{{nav-item route='admin.backups' label='admin.backups.title'}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{nav-item route='adminPlugins' label='admin.plugins.title'}}
|
||||
{{plugin-outlet name="admin-menu" connectorTagName="" tagName=""}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class='boxed white admin-content'>
|
||||
|
@ -37,7 +35,6 @@
|
|||
{{outlet}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{{/admin-wrapper}}
|
||||
|
|
|
@ -6,65 +6,65 @@
|
|||
|
||||
{{#if model}}
|
||||
<table class="api-keys grid">
|
||||
<thead>
|
||||
<th>{{i18n "admin.api.key"}}</th>
|
||||
<th>{{i18n "admin.api.description"}}</th>
|
||||
<th>{{i18n "admin.api.user"}}</th>
|
||||
<th>{{i18n "admin.api.created"}}</th>
|
||||
<th>{{i18n "admin.api.last_used"}}</th>
|
||||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |k|}}
|
||||
<tr class={{if k.revoked_at "revoked"}}>
|
||||
<td class="key">
|
||||
{{#if k.revoked_at}}{{d-icon 'times-circle'}}{{/if}}
|
||||
{{k.truncatedKey}}
|
||||
</td>
|
||||
<td class="key-description">
|
||||
{{k.shortDescription}}
|
||||
</td>
|
||||
<td class="key-user">
|
||||
<div class="label">{{i18n 'admin.api.user'}}</div>
|
||||
{{#if k.user}}
|
||||
{{#link-to "adminUser" k.user}}
|
||||
{{avatar k.user imageSize="small"}}
|
||||
{{/link-to}}
|
||||
{{else}}
|
||||
{{i18n "admin.api.all_users"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="key-created">
|
||||
<div class="label">{{i18n 'admin.api.created'}}</div>
|
||||
{{format-date k.created_at}}
|
||||
</td>
|
||||
<td class="key-last-used">
|
||||
<div class="label">{{i18n 'admin.api.last_used'}}</div>
|
||||
{{#if k.last_used_at}}
|
||||
{{format-date k.last_used_at}}
|
||||
{{else}}
|
||||
{{i18n "admin.api.never_used"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="key-controls">
|
||||
{{d-button action=(route-action "show" k) icon="far-eye" title="admin.api.show_details"}}
|
||||
{{#if k.revoked_at}}
|
||||
{{d-button
|
||||
action=(action "undoRevokeKey")
|
||||
actionParam=k icon="undo"
|
||||
title="admin.api.undo_revoke"}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "revokeKey")
|
||||
actionParam=k
|
||||
icon="times"
|
||||
title="admin.api.revoke"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
<thead>
|
||||
<th>{{i18n "admin.api.key"}}</th>
|
||||
<th>{{i18n "admin.api.description"}}</th>
|
||||
<th>{{i18n "admin.api.user"}}</th>
|
||||
<th>{{i18n "admin.api.created"}}</th>
|
||||
<th>{{i18n "admin.api.last_used"}}</th>
|
||||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |k|}}
|
||||
<tr class={{if k.revoked_at "revoked"}}>
|
||||
<td class="key">
|
||||
{{#if k.revoked_at}}{{d-icon 'times-circle'}}{{/if}}
|
||||
{{k.truncatedKey}}
|
||||
</td>
|
||||
<td class="key-description">
|
||||
{{k.shortDescription}}
|
||||
</td>
|
||||
<td class="key-user">
|
||||
<div class="label">{{i18n 'admin.api.user'}}</div>
|
||||
{{#if k.user}}
|
||||
{{#link-to "adminUser" k.user}}
|
||||
{{avatar k.user imageSize="small"}}
|
||||
{{/link-to}}
|
||||
{{else}}
|
||||
{{i18n "admin.api.all_users"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="key-created">
|
||||
<div class="label">{{i18n 'admin.api.created'}}</div>
|
||||
{{format-date k.created_at}}
|
||||
</td>
|
||||
<td class="key-last-used">
|
||||
<div class="label">{{i18n 'admin.api.last_used'}}</div>
|
||||
{{#if k.last_used_at}}
|
||||
{{format-date k.last_used_at}}
|
||||
{{else}}
|
||||
{{i18n "admin.api.never_used"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="key-controls">
|
||||
{{d-button action=(route-action "show" k) icon="far-eye" title="admin.api.show_details"}}
|
||||
{{#if k.revoked_at}}
|
||||
{{d-button
|
||||
action=(action "undoRevokeKey")
|
||||
actionParam=k icon="undo"
|
||||
title="admin.api.undo_revoke"}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "revokeKey")
|
||||
actionParam=k
|
||||
icon="times"
|
||||
title="admin.api.revoke"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
<p>{{i18n "admin.api.none"}}</p>
|
||||
|
|
|
@ -30,11 +30,11 @@
|
|||
|
||||
{{#admin-form-row label="admin.api.user"}}
|
||||
{{#if model.user}}
|
||||
{{#link-to "adminUser" model.user}}
|
||||
{{avatar model.user imageSize="small"}} {{model.user.username}}
|
||||
{{/link-to}}
|
||||
{{#link-to "adminUser" model.user}}
|
||||
{{avatar model.user imageSize="small"}} {{model.user.username}}
|
||||
{{/link-to}}
|
||||
{{else}}
|
||||
{{i18n "admin.api.all_users"}}
|
||||
{{i18n "admin.api.all_users"}}
|
||||
{{/if}}
|
||||
{{/admin-form-row}}
|
||||
|
||||
|
|
|
@ -41,57 +41,57 @@
|
|||
<th></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |backup|}}
|
||||
<tr>
|
||||
<td class="backup-filename">{{backup.filename}}</td>
|
||||
<td class="backup-size">{{human-size backup.size}}</td>
|
||||
<td class="backup-controls">
|
||||
<div>
|
||||
{{d-button class="btn-default download"
|
||||
action=(action "download")
|
||||
actionParam=backup
|
||||
icon="download"
|
||||
title="admin.backups.operations.download.title"
|
||||
label="admin.backups.operations.download.label"}}
|
||||
{{#if status.isOperationRunning}}
|
||||
{{d-button
|
||||
icon="far-trash-alt"
|
||||
action=(route-action "destroyBackup")
|
||||
actionParam=backup class="btn-danger"
|
||||
disabled="true"
|
||||
title="admin.backups.operations.is_running"}}
|
||||
{{d-button
|
||||
icon="play"
|
||||
action=(route-action "startRestore")
|
||||
actionParam=backup disabled=status.restoreDisabled
|
||||
class="btn-default"
|
||||
title=restoreTitle
|
||||
label="admin.backups.operations.restore.label"}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
icon="far-trash-alt"
|
||||
action=(route-action "destroyBackup")
|
||||
actionParam=backup
|
||||
class="btn-danger"
|
||||
title="admin.backups.operations.destroy.title"}}
|
||||
{{d-button
|
||||
icon="play"
|
||||
action=(route-action "startRestore")
|
||||
actionParam=backup
|
||||
disabled=status.restoreDisabled
|
||||
class="btn-default btn-restore"
|
||||
title=restoreTitle
|
||||
label="admin.backups.operations.restore.label"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td>{{i18n "admin.backups.none"}}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each model as |backup|}}
|
||||
<tr>
|
||||
<td class="backup-filename">{{backup.filename}}</td>
|
||||
<td class="backup-size">{{human-size backup.size}}</td>
|
||||
<td class="backup-controls">
|
||||
<div>
|
||||
{{d-button class="btn-default download"
|
||||
action=(action "download")
|
||||
actionParam=backup
|
||||
icon="download"
|
||||
title="admin.backups.operations.download.title"
|
||||
label="admin.backups.operations.download.label"}}
|
||||
{{#if status.isOperationRunning}}
|
||||
{{d-button
|
||||
icon="far-trash-alt"
|
||||
action=(route-action "destroyBackup")
|
||||
actionParam=backup class="btn-danger"
|
||||
disabled="true"
|
||||
title="admin.backups.operations.is_running"}}
|
||||
{{d-button
|
||||
icon="play"
|
||||
action=(route-action "startRestore")
|
||||
actionParam=backup disabled=status.restoreDisabled
|
||||
class="btn-default"
|
||||
title=restoreTitle
|
||||
label="admin.backups.operations.restore.label"}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
icon="far-trash-alt"
|
||||
action=(route-action "destroyBackup")
|
||||
actionParam=backup
|
||||
class="btn-danger"
|
||||
title="admin.backups.operations.destroy.title"}}
|
||||
{{d-button
|
||||
icon="play"
|
||||
action=(route-action "startRestore")
|
||||
actionParam=backup
|
||||
disabled=status.restoreDisabled
|
||||
class="btn-default btn-restore"
|
||||
title=restoreTitle
|
||||
label="admin.backups.operations.restore.label"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td>{{i18n "admin.backups.none"}}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
{{data.x}}
|
||||
</span>
|
||||
<span class="value">
|
||||
{{number data.y}}
|
||||
{{number data.y}}
|
||||
</span>
|
||||
</a>
|
||||
{{/each}}
|
||||
|
|
|
@ -1,202 +1,202 @@
|
|||
{{#if isEnabled}}
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
{{#if showHeader}}
|
||||
<div class="header">
|
||||
{{#if showTitle}}
|
||||
<ul class="breadcrumb">
|
||||
{{#if showAllReportsLink}}
|
||||
<li class="item all-reports">
|
||||
{{#link-to "admin.dashboardReports" class="report-url"}}
|
||||
{{i18n "admin.dashboard.all_reports"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
{{#if showHeader}}
|
||||
<div class="header">
|
||||
{{#if showTitle}}
|
||||
<ul class="breadcrumb">
|
||||
{{#if showAllReportsLink}}
|
||||
<li class="item all-reports">
|
||||
{{#link-to "admin.dashboardReports" class="report-url"}}
|
||||
{{i18n "admin.dashboard.all_reports"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
|
||||
{{#unless showNotFoundError}}
|
||||
<li class="item separator">|</li>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
|
||||
{{#unless showNotFoundError}}
|
||||
<li class="item separator">|</li>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
|
||||
{{#unless showNotFoundError}}
|
||||
<li class="item report">
|
||||
<a href={{model.reportUrl}} class="report-url">
|
||||
{{model.title}}
|
||||
</a>
|
||||
|
||||
{{#if model.description}}
|
||||
{{#if model.description_link}}
|
||||
<a target="_blank" rel="noopener" href={{model.description_link}} class="info" data-tooltip={{model.description}}>
|
||||
{{d-icon "question-circle"}}
|
||||
</a>
|
||||
{{else}}
|
||||
<span class="info" data-tooltip={{model.description}}>
|
||||
{{d-icon "question-circle"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/unless}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{#if shouldDisplayTrend}}
|
||||
<div class="trend {{model.trend}}">
|
||||
<span class="value" title={{model.trendTitle}}>
|
||||
{{#if model.average}}
|
||||
{{number model.currentAverage}}{{#if model.percent}}%{{/if}}
|
||||
{{else}}
|
||||
{{number model.currentTotal noTitle="true"}}{{#if model.percent}}%{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if model.trendIcon}}
|
||||
{{d-icon model.trendIcon class="icon"}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="body">
|
||||
<div class="main">
|
||||
{{#if showError}}
|
||||
{{#if showTimeoutError}}
|
||||
<div class="alert alert-error report-alert timeout">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.timeout_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showExceptionError}}
|
||||
<div class="alert alert-error report-alert exception">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.exception_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showNotFoundError}}
|
||||
<div class="alert alert-error report-alert not-found">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.not_found_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#if hasData}}
|
||||
{{#if currentMode}}
|
||||
{{component modeComponent model=model options=options}}
|
||||
|
||||
{{#if model.relatedReport}}
|
||||
{{admin-report showFilteringUI=false dataSourceName=model.relatedReport.type}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#if rateLimitationString}}
|
||||
<div class="alert alert-error report-alert rate-limited">
|
||||
{{d-icon "thermometer-three-quarters"}}
|
||||
<span>{{rateLimitationString}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="alert alert-info report-alert no-data">
|
||||
{{d-icon "chart-pie"}}
|
||||
{{#if model.reportUrl}}
|
||||
<li class="item report">
|
||||
<a href={{model.reportUrl}} class="report-url">
|
||||
<span>
|
||||
{{#if model.title}}
|
||||
{{model.title}} —
|
||||
{{/if}}
|
||||
{{i18n "admin.dashboard.reports.no_data"}}
|
||||
</span>
|
||||
{{model.title}}
|
||||
</a>
|
||||
|
||||
{{#if model.description}}
|
||||
{{#if model.description_link}}
|
||||
<a target="_blank" rel="noopener" href={{model.description_link}} class="info" data-tooltip={{model.description}}>
|
||||
{{d-icon "question-circle"}}
|
||||
</a>
|
||||
{{else}}
|
||||
<span class="info" data-tooltip={{model.description}}>
|
||||
{{d-icon "question-circle"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/unless}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{#if shouldDisplayTrend}}
|
||||
<div class="trend {{model.trend}}">
|
||||
<span class="value" title={{model.trendTitle}}>
|
||||
{{#if model.average}}
|
||||
{{number model.currentAverage}}{{#if model.percent}}%{{/if}}
|
||||
{{else}}
|
||||
<span>{{i18n "admin.dashboard.reports.no_data"}}</span>
|
||||
{{number model.currentTotal noTitle="true"}}{{#if model.percent}}%{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if showFilteringUI}}
|
||||
<div class="filters">
|
||||
{{#if showModes}}
|
||||
<div class="modes">
|
||||
{{#each displayedModes as |displayedMode|}}
|
||||
{{d-button
|
||||
action=(action "changeMode")
|
||||
actionParam=displayedMode.mode
|
||||
class=displayedMode.cssClass
|
||||
icon=displayedMode.icon}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showDatesOptions}}
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n 'admin.dashboard.reports.start_date'}}
|
||||
{{#if model.trendIcon}}
|
||||
{{d-icon model.trendIcon class="icon"}}
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{date-input
|
||||
date=startDate
|
||||
onChange=(action "onChangeStartDate")
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n 'admin.dashboard.reports.end_date'}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{date-input
|
||||
date=endDate
|
||||
onChange=(action "onChangeEndDate")
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#each model.available_filters as |filter|}}
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n (concat "admin.dashboard.reports.filters." filter.id ".label")}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{component
|
||||
(concat "report-filters/" filter.id)
|
||||
filter=filter
|
||||
applyFilter=(action "applyFilter")}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="control">
|
||||
<div class="input">
|
||||
{{d-button
|
||||
class="btn-default export-csv-btn"
|
||||
action=(action "exportCsv")
|
||||
label="admin.export_csv.button_text"
|
||||
icon="download"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if showRefresh}}
|
||||
<div class="control">
|
||||
<div class="input">
|
||||
{{d-button
|
||||
class="refresh-report-btn btn-primary"
|
||||
action=(action "refreshReport")
|
||||
label="admin.dashboard.reports.refresh_report"
|
||||
icon="sync"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/conditional-loading-section}}
|
||||
|
||||
<div class="body">
|
||||
<div class="main">
|
||||
{{#if showError}}
|
||||
{{#if showTimeoutError}}
|
||||
<div class="alert alert-error report-alert timeout">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.timeout_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showExceptionError}}
|
||||
<div class="alert alert-error report-alert exception">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.exception_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showNotFoundError}}
|
||||
<div class="alert alert-error report-alert not-found">
|
||||
{{d-icon "exclamation-triangle"}}
|
||||
<span>{{i18n "admin.dashboard.not_found_error"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#if hasData}}
|
||||
{{#if currentMode}}
|
||||
{{component modeComponent model=model options=options}}
|
||||
|
||||
{{#if model.relatedReport}}
|
||||
{{admin-report showFilteringUI=false dataSourceName=model.relatedReport.type}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#if rateLimitationString}}
|
||||
<div class="alert alert-error report-alert rate-limited">
|
||||
{{d-icon "thermometer-three-quarters"}}
|
||||
<span>{{rateLimitationString}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="alert alert-info report-alert no-data">
|
||||
{{d-icon "chart-pie"}}
|
||||
{{#if model.reportUrl}}
|
||||
<a href={{model.reportUrl}} class="report-url">
|
||||
<span>
|
||||
{{#if model.title}}
|
||||
{{model.title}} —
|
||||
{{/if}}
|
||||
{{i18n "admin.dashboard.reports.no_data"}}
|
||||
</span>
|
||||
</a>
|
||||
{{else}}
|
||||
<span>{{i18n "admin.dashboard.reports.no_data"}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if showFilteringUI}}
|
||||
<div class="filters">
|
||||
{{#if showModes}}
|
||||
<div class="modes">
|
||||
{{#each displayedModes as |displayedMode|}}
|
||||
{{d-button
|
||||
action=(action "changeMode")
|
||||
actionParam=displayedMode.mode
|
||||
class=displayedMode.cssClass
|
||||
icon=displayedMode.icon}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showDatesOptions}}
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n 'admin.dashboard.reports.start_date'}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{date-input
|
||||
date=startDate
|
||||
onChange=(action "onChangeStartDate")
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n 'admin.dashboard.reports.end_date'}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{date-input
|
||||
date=endDate
|
||||
onChange=(action "onChangeEndDate")
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#each model.available_filters as |filter|}}
|
||||
<div class="control">
|
||||
<span class="label">
|
||||
{{i18n (concat "admin.dashboard.reports.filters." filter.id ".label")}}
|
||||
</span>
|
||||
|
||||
<div class="input">
|
||||
{{component
|
||||
(concat "report-filters/" filter.id)
|
||||
filter=filter
|
||||
applyFilter=(action "applyFilter")}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="control">
|
||||
<div class="input">
|
||||
{{d-button
|
||||
class="btn-default export-csv-btn"
|
||||
action=(action "exportCsv")
|
||||
label="admin.export_csv.button_text"
|
||||
icon="download"}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if showRefresh}}
|
||||
<div class="control">
|
||||
<div class="input">
|
||||
{{d-button
|
||||
class="refresh-report-btn btn-primary"
|
||||
action=(action "refreshReport")
|
||||
label="admin.dashboard.reports.refresh_report"
|
||||
icon="sync"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/conditional-loading-section}}
|
||||
{{else}}
|
||||
<div class="alert alert-info">
|
||||
{{html-safe disabledLabel}}
|
||||
|
|
|
@ -1,94 +1,90 @@
|
|||
<div class='edit-main-nav admin-controls'>
|
||||
<nav>
|
||||
<nav>
|
||||
<ul class='nav nav-pills target'>
|
||||
{{#each visibleTargets as |target|}}
|
||||
{{#each visibleTargets as |target|}}
|
||||
<li>
|
||||
{{#link-to editRouteName
|
||||
theme.id
|
||||
target.name
|
||||
fieldName
|
||||
replace=true
|
||||
title=field.title
|
||||
class=(if target.edited 'edited' 'blank')
|
||||
}}
|
||||
{{#link-to editRouteName
|
||||
theme.id
|
||||
target.name
|
||||
fieldName
|
||||
replace=true
|
||||
title=field.title
|
||||
class=(if target.edited 'edited' 'blank')
|
||||
}}
|
||||
{{#if target.error}}{{d-icon 'exclamation-triangle'}}{{/if}}
|
||||
{{#if target.icon}}
|
||||
{{d-icon target.icon}}
|
||||
{{/if}}
|
||||
{{#if target.icon}}{{d-icon target.icon}}{{/if}}
|
||||
{{i18n (concat 'admin.customize.theme.' target.name)}}
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
|
||||
{{#if allowAdvanced}}
|
||||
{{#if allowAdvanced}}
|
||||
<li>
|
||||
<a {{action "toggleShowAdvanced"}}
|
||||
class='no-text'
|
||||
href
|
||||
title={{i18n (concat "admin.customize.theme." (if showAdvanced "hide_advanced" "show_advanced"))}}
|
||||
>
|
||||
{{d-icon (if showAdvanced "angle-double-left" "angle-double-right")}}
|
||||
</a>
|
||||
<a {{action "toggleShowAdvanced"}}
|
||||
class='no-text'
|
||||
href
|
||||
title={{i18n (concat "admin.customize.theme." (if showAdvanced "hide_advanced" "show_advanced"))}}>
|
||||
{{d-icon (if showAdvanced "angle-double-left" "angle-double-right")}}
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="spacer"></li>
|
||||
<li>
|
||||
{{/if}}
|
||||
<li class="spacer"></li>
|
||||
<li>
|
||||
<label>
|
||||
{{input type="checkbox" checked=onlyOverridden click=(action "onlyOverriddenChanged" value="target.checked")}}
|
||||
{{i18n 'admin.customize.theme.hide_unused_fields'}}
|
||||
{{input type="checkbox" checked=onlyOverridden click=(action "onlyOverriddenChanged" value="target.checked")}}
|
||||
{{i18n 'admin.customize.theme.hide_unused_fields'}}
|
||||
</label>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class='admin-controls'>
|
||||
<nav>
|
||||
<nav>
|
||||
<ul class='nav nav-pills fields'>
|
||||
{{#each visibleFields as |field|}}
|
||||
{{#each visibleFields as |field|}}
|
||||
<li>
|
||||
{{#link-to editRouteName
|
||||
{{#link-to editRouteName
|
||||
theme.id
|
||||
currentTargetName
|
||||
field.name
|
||||
replace=true
|
||||
title=field.title
|
||||
class=(if field.edited 'edited' 'blank')
|
||||
}}
|
||||
}}
|
||||
{{#if field.error}}{{d-icon 'exclamation-triangle'}}{{/if}}
|
||||
{{#if field.icon}}{{d-icon field.icon}}{{/if}}
|
||||
{{field.translatedName}}
|
||||
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
|
||||
{{#if showAddField}}
|
||||
{{#if showAddField}}
|
||||
<li>
|
||||
{{#if addingField}}
|
||||
{{#if addingField}}
|
||||
{{input type=text value=newFieldName enter=(action 'addField') escape-press=(action "cancelAddField")}}
|
||||
{{d-button class="ok" action=(action "addField" newFieldName) icon="check"}}
|
||||
{{d-button class="cancel" action=(action "cancelAddField") icon="times"}}
|
||||
{{else}}
|
||||
{{else}}
|
||||
<a href {{action "toggleAddField" currentTargetName}} class="no-text">
|
||||
{{d-icon "plus"}}
|
||||
{{d-icon "plus"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class='spacer'></li>
|
||||
<li>
|
||||
{{/if}}
|
||||
|
||||
<li class='spacer'></li>
|
||||
<li>
|
||||
<a href {{action "toggleMaximize"}} class="no-text">
|
||||
{{d-icon maximizeIcon}}
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
{{#if error}}
|
||||
<pre class='field-error'>{{error}}</pre>
|
||||
<pre class='field-error'>{{error}}</pre>
|
||||
{{/if}}
|
||||
|
||||
{{ace-editor content=activeSection editorId=editorId mode=activeSectionMode autofocus="true"}}
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<div class="label">{{i18n "admin.embedding.host"}}</div>
|
||||
{{input value=buffered.host placeholder="example.com" enter=(action "save") class="host-name"}}
|
||||
</td>
|
||||
<td class="editing-input">
|
||||
<td class="editing-input">
|
||||
<div class="label">{{i18n "admin.embedding.class_name"}}</div>
|
||||
{{input value=buffered.class_name placeholder="class" enter=(action "save") class="class-name"}}
|
||||
</td>
|
||||
</td>
|
||||
<td class="editing-input">
|
||||
<div class="label">{{i18n "admin.embedding.path_whitelist"}}</div>
|
||||
{{input value=buffered.path_whitelist placeholder="/blog/.*" enter=(action "save") class="path-whitelist"}}
|
||||
|
|
|
@ -3,11 +3,12 @@
|
|||
<div class='silence-reason-label'>
|
||||
{{html-safe (i18n 'admin.user.silence_reason_label')}}
|
||||
</div>
|
||||
</label>
|
||||
{{text-field
|
||||
value=reason
|
||||
class="silence-reason"
|
||||
placeholderKey="admin.user.silence_reason_placeholder"}}
|
||||
</label>
|
||||
{{text-field
|
||||
value=reason
|
||||
class="silence-reason"
|
||||
placeholderKey="admin.user.silence_reason_placeholder"
|
||||
}}
|
||||
</div>
|
||||
|
||||
<label>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<div class='setting-label'>
|
||||
<h3>{{settingName}}</h3>
|
||||
{{#if defaultIsAvailable}}
|
||||
<a href onClick={{action 'setDefaultValues'}}>{{setting.setDefaultValuesLabel}}</a>
|
||||
{{/if}}
|
||||
<h3>{{settingName}}</h3>
|
||||
{{#if defaultIsAvailable}}
|
||||
<a href onClick={{action 'setDefaultValues'}}>{{setting.setDefaultValuesLabel}}</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="setting-value">
|
||||
{{component componentName setting=setting value=buffered.value validationMessage=validationMessage preview=preview isSecret=isSecret allowAny=allowAny}}
|
||||
|
|
|
@ -3,31 +3,35 @@
|
|||
<h1>{{#if model.theme_id}}{{model.name}}{{else}}{{text-field class="style-name" value=model.name}}{{/if}}</h1>
|
||||
<div class="controls">
|
||||
{{#unless model.theme_id}}
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "save")
|
||||
disabled=model.disableSave
|
||||
label="admin.customize.save"}}
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "save")
|
||||
disabled=model.disableSave
|
||||
label="admin.customize.save"
|
||||
}}
|
||||
{{/unless}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "copy" model)
|
||||
icon="copy"
|
||||
label="admin.customize.copy"}}
|
||||
label="admin.customize.copy"
|
||||
}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "copyToClipboard" model)
|
||||
icon="far-clipboard"
|
||||
label="admin.customize.copy_to_clipboard"}}
|
||||
label="admin.customize.copy_to_clipboard"
|
||||
}}
|
||||
{{#if model.theme_id}}
|
||||
{{i18n "admin.customize.theme_owner"}}
|
||||
{{#link-to "adminCustomizeThemes.show" model.theme_id}}{{model.theme_name}}{{/link-to}}
|
||||
{{i18n "admin.customize.theme_owner"}}
|
||||
{{#link-to "adminCustomizeThemes.show" model.theme_id}}{{model.theme_name}}{{/link-to}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
action=(action "destroy")
|
||||
class="btn-danger"
|
||||
icon="far-trash-alt"
|
||||
label="admin.customize.delete"}}
|
||||
{{d-button
|
||||
action=(action "destroy")
|
||||
class="btn-danger"
|
||||
icon="far-trash-alt"
|
||||
label="admin.customize.delete"
|
||||
}}
|
||||
{{/if}}
|
||||
<span class="saving {{unless model.savingStatus 'hidden'}}">{{model.savingStatus}}</span>
|
||||
</div>
|
||||
|
@ -44,40 +48,40 @@
|
|||
</div>
|
||||
|
||||
{{#if colors.length}}
|
||||
<table class="table colors">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th class="hex">{{i18n 'admin.customize.color'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each colors as |c|}}
|
||||
<tr class="{{if c.changed 'changed'}} {{if c.valid 'valid' 'invalid'}}">
|
||||
<td class="name" title={{c.name}}>
|
||||
<h3>{{c.translatedName}}</h3>
|
||||
<p class="description">{{c.description}}</p>
|
||||
</td>
|
||||
<td class="hex">{{color-input hexValue=c.hex brightnessValue=c.brightness valid=c.valid}}</td>
|
||||
<td class="actions">
|
||||
{{#unless model.theme_id}}
|
||||
{{d-button
|
||||
class=(concat "btn-default revert " (unless c.savedIsOverriden "invisible"))
|
||||
action=(action "revert" c)
|
||||
title="admin.customize.colors.revert_title"
|
||||
label="revert"}}
|
||||
{{d-button
|
||||
class=(concat "btn-default undo " (unless c.changed "invisible"))
|
||||
action=(action "undo" c)
|
||||
title="admin.customize.colors.undo_title"
|
||||
label="undo"}}
|
||||
{{/unless}}
|
||||
</td>
|
||||
<table class="table colors">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th class="hex">{{i18n 'admin.customize.color'}}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each colors as |c|}}
|
||||
<tr class="{{if c.changed 'changed'}} {{if c.valid 'valid' 'invalid'}}">
|
||||
<td class="name" title={{c.name}}>
|
||||
<h3>{{c.translatedName}}</h3>
|
||||
<p class="description">{{c.description}}</p>
|
||||
</td>
|
||||
<td class="hex">{{color-input hexValue=c.hex brightnessValue=c.brightness valid=c.valid}}</td>
|
||||
<td class="actions">
|
||||
{{#unless model.theme_id}}
|
||||
{{d-button
|
||||
class=(concat "btn-default revert " (unless c.savedIsOverriden "invisible"))
|
||||
action=(action "revert" c)
|
||||
title="admin.customize.colors.revert_title"
|
||||
label="revert"}}
|
||||
{{d-button
|
||||
class=(concat "btn-default undo " (unless c.changed "invisible"))
|
||||
action=(action "undo" c)
|
||||
title="admin.customize.colors.undo_title"
|
||||
label="undo"}}
|
||||
{{/unless}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
<p>{{i18n 'search.no_results'}}</p>
|
||||
{{/if}}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<img src={{womanArtistEmojiURL}}>
|
||||
<div class="content-wrapper">
|
||||
<h1>{{i18n "admin.customize.theme.themes_intro"}}</h1>
|
||||
<div class="create-actions">
|
||||
<div class="create-actions">
|
||||
{{d-button action=(route-action "installModal") icon="upload" label="admin.customize.install" class="btn-primary"}}
|
||||
</div>
|
||||
<div class="external-resources">
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
{{#conditional-loading-spinner condition=isLoading}}
|
||||
<div class="reports-index section">
|
||||
<div class="section-title">
|
||||
<h2>{{i18n "admin.reports.title"}}</h2>
|
||||
<div class="reports-index section">
|
||||
<div class="section-title">
|
||||
<h2>{{i18n "admin.reports.title"}}</h2>
|
||||
{{input
|
||||
class="filter-reports-input"
|
||||
input=(action "filterReports" value="target.value")
|
||||
placeholder=(i18n "admin.dashboard.filter_reports")
|
||||
autofocus=true}}
|
||||
autofocus=true
|
||||
}}
|
||||
</div>
|
||||
|
||||
<ul class="reports-list">
|
||||
|
@ -14,12 +15,11 @@
|
|||
<li class="report">
|
||||
{{#link-to 'adminReports.show' report.type}}
|
||||
<h3 class="report-title">{{report.title}}</h3>
|
||||
|
||||
{{#if report.description}}
|
||||
<p class="report-description">
|
||||
{{report.description}}
|
||||
</p>
|
||||
{{/if}}
|
||||
<p class="report-description">
|
||||
{{report.description}}
|
||||
</p>
|
||||
{{/if}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/each}}
|
||||
|
|
|
@ -5,23 +5,21 @@
|
|||
{{textarea name="email" value=email class="email-body"}}
|
||||
{{d-button
|
||||
action=(action "run")
|
||||
label="admin.email.advanced_test.run"}}
|
||||
label="admin.email.advanced_test.run"
|
||||
}}
|
||||
</div>
|
||||
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
|
||||
{{#if format}}
|
||||
<hr>
|
||||
<div class="text">
|
||||
<h3>{{i18n 'admin.email.advanced_test.text'}}</h3>
|
||||
<pre class="full-reason">{{html-safe text}}</pre>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="elided">
|
||||
<h3>{{i18n 'admin.email.advanced_test.elided'}}</h3>
|
||||
<pre class="full-reason">{{html-safe elided}}</pre>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if format}}
|
||||
<hr>
|
||||
<div class="text">
|
||||
<h3>{{i18n 'admin.email.advanced_test.text'}}</h3>
|
||||
<pre class="full-reason">{{html-safe text}}</pre>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="elided">
|
||||
<h3>{{i18n 'admin.email.advanced_test.elided'}}</h3>
|
||||
<pre class="full-reason">{{html-safe elided}}</pre>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -13,8 +13,11 @@
|
|||
<div class="toggle">
|
||||
<label>{{i18n 'admin.email.format'}}</label>
|
||||
{{#if showHtml}}
|
||||
<span>{{i18n 'admin.email.html'}}</span> | <a href
|
||||
{{action "toggleShowHtml"}}>{{i18n 'admin.email.text'}}</a>
|
||||
<span>{{i18n 'admin.email.html'}}</span>
|
||||
|
|
||||
<a href {{action "toggleShowHtml"}}>
|
||||
{{i18n 'admin.email.text'}}
|
||||
</a>
|
||||
{{else}}
|
||||
<a href {{action "toggleShowHtml"}}>{{i18n 'admin.email.html'}}</a> |
|
||||
<span>{{i18n 'admin.email.text'}}</span>
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
<th style='width: 10%'> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each embedding.embeddable_hosts as |host|}}
|
||||
{{embeddable-host host=host deleteHost=(action "deleteHost")}}
|
||||
{{/each}}
|
||||
{{#each embedding.embeddable_hosts as |host|}}
|
||||
{{embeddable-host host=host deleteHost=(action "deleteHost")}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
|
|
|
@ -25,21 +25,21 @@
|
|||
<th class="action"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first email">
|
||||
<div class="overflow-ellipsis" title={{item.email}}>{{item.email}}</div>
|
||||
</td>
|
||||
<td class="action">{{item.actionName}}</td>
|
||||
<td class="match_count"><div class="label">{{i18n 'admin.logs.match_count'}}</div>{{item.match_count}}</td>
|
||||
<td class="last_match_at"><div class="label">{{i18n 'admin.logs.last_match_at'}}</div>{{age-with-tooltip item.last_match_at}}</td>
|
||||
<td class="created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip item.created_at}}</td>
|
||||
<td class="ip_address">{{item.ip_address}}</td>
|
||||
<td class="action">
|
||||
{{d-button action=(action "clearBlock") actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first email">
|
||||
<div class="overflow-ellipsis" title={{item.email}}>{{item.email}}</div>
|
||||
</td>
|
||||
<td class="action">{{item.actionName}}</td>
|
||||
<td class="match_count"><div class="label">{{i18n 'admin.logs.match_count'}}</div>{{item.match_count}}</td>
|
||||
<td class="last_match_at"><div class="label">{{i18n 'admin.logs.last_match_at'}}</div>{{age-with-tooltip item.last_match_at}}</td>
|
||||
<td class="created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip item.created_at}}</td>
|
||||
<td class="ip_address">{{item.ip_address}}</td>
|
||||
<td class="action">
|
||||
{{d-button action=(action "clearBlock") actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -36,83 +36,83 @@
|
|||
<th class="col heading actions"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first ip_address">
|
||||
{{#if item.editing}}
|
||||
{{text-field value=item.ip_address autofocus="autofocus"}}
|
||||
{{else}}
|
||||
<a href {{action "edit" item}} class="inline-editable-field">
|
||||
{{#if item.isRange}}
|
||||
<strong>{{item.ip_address}}</strong>
|
||||
{{else}}
|
||||
{{item.ip_address}}
|
||||
{{/if}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="col action">
|
||||
{{#if item.isBlocked}}
|
||||
{{d-icon "ban"}}
|
||||
{{else}}
|
||||
{{d-icon "check"}}
|
||||
{{/if}}
|
||||
{{item.actionName}}
|
||||
</td>
|
||||
<td class="col match_count">
|
||||
<div class="label">{{i18n "admin.logs.match_count"}}</div>
|
||||
{{item.match_count}}
|
||||
</td>
|
||||
<td class="col created_at">
|
||||
<div class="label">{{i18n "admin.logs.created_at"}}</div>
|
||||
{{age-with-tooltip item.created_at}}
|
||||
</td>
|
||||
<td class="col last_match_at">
|
||||
{{#if item.last_match_at}}
|
||||
<div class="label">
|
||||
{{i18n "admin.logs.last_match_at"}}
|
||||
{{age-with-tooltip item.last_match_at}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="col actions">
|
||||
{{#if item.editing}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "save")
|
||||
actionParam=item
|
||||
label="admin.logs.save"}}
|
||||
<a href {{action "cancel" item}}>{{i18n "cancel"}}</a>
|
||||
{{else}}
|
||||
{{d-button
|
||||
class="btn-default btn-danger"
|
||||
action=(action "destroy")
|
||||
actionParam=item
|
||||
icon="far-trash-alt"}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "edit")
|
||||
actionParam=item
|
||||
icon="pencil-alt"}}
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first ip_address">
|
||||
{{#if item.editing}}
|
||||
{{text-field value=item.ip_address autofocus="autofocus"}}
|
||||
{{else}}
|
||||
<a href {{action "edit" item}} class="inline-editable-field">
|
||||
{{#if item.isRange}}
|
||||
<strong>{{item.ip_address}}</strong>
|
||||
{{else}}
|
||||
{{item.ip_address}}
|
||||
{{/if}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="col action">
|
||||
{{#if item.isBlocked}}
|
||||
{{d-icon "ban"}}
|
||||
{{else}}
|
||||
{{d-icon "check"}}
|
||||
{{/if}}
|
||||
{{item.actionName}}
|
||||
</td>
|
||||
<td class="col match_count">
|
||||
<div class="label">{{i18n "admin.logs.match_count"}}</div>
|
||||
{{item.match_count}}
|
||||
</td>
|
||||
<td class="col created_at">
|
||||
<div class="label">{{i18n "admin.logs.created_at"}}</div>
|
||||
{{age-with-tooltip item.created_at}}
|
||||
</td>
|
||||
<td class="col last_match_at">
|
||||
{{#if item.last_match_at}}
|
||||
<div class="label">
|
||||
{{i18n "admin.logs.last_match_at"}}
|
||||
{{age-with-tooltip item.last_match_at}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="col actions">
|
||||
{{#if item.editing}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "allow")
|
||||
action=(action "save")
|
||||
actionParam=item
|
||||
icon="check"
|
||||
label="admin.logs.screened_ips.actions.do_nothing"}}
|
||||
label="admin.logs.save"}}
|
||||
<a href {{action "cancel" item}}>{{i18n "cancel"}}</a>
|
||||
{{else}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "block")
|
||||
class="btn-default btn-danger"
|
||||
action=(action "destroy")
|
||||
actionParam=item
|
||||
icon="ban"
|
||||
label="admin.logs.screened_ips.actions.block"}}
|
||||
icon="far-trash-alt"}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "edit")
|
||||
actionParam=item
|
||||
icon="pencil-alt"}}
|
||||
{{#if item.isBlocked}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "allow")
|
||||
actionParam=item
|
||||
icon="check"
|
||||
label="admin.logs.screened_ips.actions.do_nothing"}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "block")
|
||||
actionParam=item
|
||||
icon="ban"
|
||||
label="admin.logs.screened_ips.actions.block"}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
|
|
|
@ -20,17 +20,17 @@
|
|||
<th class="created_at">{{i18n 'admin.logs.created_at'}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |url|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first domain">
|
||||
<div class="overflow-ellipsis" title={{url.domain}}>{{url.domain}}</div>
|
||||
</td>
|
||||
<td class="col action">{{url.actionName}}</td>
|
||||
<td class="col match_count"><div class="label">{{i18n 'admin.logs.match_count'}}</div>{{url.match_count}}</td>
|
||||
<td class="col last_match_at"><div class="label">{{i18n 'admin.logs.last_match_at'}}</div>{{age-with-tooltip url.last_match_at}}</td>
|
||||
<td class="col created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip url.created_at}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each model as |url|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col first domain">
|
||||
<div class="overflow-ellipsis" title={{url.domain}}>{{url.domain}}</div>
|
||||
</td>
|
||||
<td class="col action">{{url.actionName}}</td>
|
||||
<td class="col match_count"><div class="label">{{i18n 'admin.logs.match_count'}}</div>{{url.match_count}}</td>
|
||||
<td class="col last_match_at"><div class="label">{{i18n 'admin.logs.last_match_at'}}</div>{{age-with-tooltip url.last_match_at}}</td>
|
||||
<td class="col created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip url.created_at}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
|
|
|
@ -1,34 +1,34 @@
|
|||
<div class="staff-action-logs-controls">
|
||||
{{#if filtersExists}}
|
||||
<div class='staff-action-logs-filters'>
|
||||
<a href {{action "clearAllFilters"}} class="clear-filters filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.clear_filters'}}</span>
|
||||
</a>
|
||||
{{#if actionFilter}}
|
||||
<a href {{action "clearFilter" "actionFilter"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.action'}}</span>: {{actionFilter}}
|
||||
{{d-icon "times-circle"}}
|
||||
<div class='staff-action-logs-filters'>
|
||||
<a href {{action "clearAllFilters"}} class="clear-filters filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.clear_filters'}}</span>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.acting_user}}
|
||||
<a href {{action "clearFilter" "acting_user"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.staff_user'}}</span>: {{filters.acting_user}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.target_user}}
|
||||
<a href {{action "clearFilter" "target_user"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.target_user'}}</span>: {{filters.target_user}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.subject}}
|
||||
<a href {{action "clearFilter" "subject"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.subject'}}</span>: {{filters.subject}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if actionFilter}}
|
||||
<a href {{action "clearFilter" "actionFilter"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.action'}}</span>: {{actionFilter}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.acting_user}}
|
||||
<a href {{action "clearFilter" "acting_user"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.staff_user'}}</span>: {{filters.acting_user}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.target_user}}
|
||||
<a href {{action "clearFilter" "target_user"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.target_user'}}</span>: {{filters.target_user}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if filters.subject}}
|
||||
<a href {{action "clearFilter" "subject"}} class="filter">
|
||||
<span class="label">{{i18n 'admin.logs.staff_actions.subject'}}</span>: {{filters.subject}}
|
||||
{{d-icon "times-circle"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{i18n "admin.logs.staff_actions.filter"}}
|
||||
{{combo-box
|
||||
|
@ -41,10 +41,10 @@
|
|||
|
||||
{{d-button class="btn-default" action=(action "exportStaffActionLogs") label="admin.export_csv.button_text" icon="download"}}
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
{{#staff-actions}}
|
||||
|
||||
{{#load-more selector=".staff-logs tr" action=(action "loadMore")}}
|
||||
{{#if model.content}}
|
||||
<table class='table staff-logs grid'>
|
||||
|
@ -108,5 +108,4 @@
|
|||
{{i18n 'search.no_results'}}
|
||||
{{/if}}
|
||||
{{/load-more}}
|
||||
|
||||
{{/staff-actions}}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
{{#d-modal-body class='add-upload-modal' title="admin.customize.theme.add_upload"}}
|
||||
<div class="inputs">
|
||||
<section class="field">
|
||||
<div class="inputs">
|
||||
<section class="field">
|
||||
<input onchange={{action "updateName"}} type="file" id="file-input" accept='*'>
|
||||
<label for="file-input">{{i18n 'admin.customize.theme.upload_file_tip'}}</label>
|
||||
</section>
|
||||
<section class="field">
|
||||
</section>
|
||||
<section class="field">
|
||||
<label for="theme-variable-name">{{i18n 'admin.customize.theme.variable_name'}}</label>
|
||||
{{input id="theme-variable-name" value=name}}
|
||||
</section>
|
||||
{{#if fileSelected}}
|
||||
{{#if errorMessage}}
|
||||
<span class="alert alert-error">{{errorMessage}}</span>
|
||||
{{/if}}
|
||||
</section>
|
||||
{{#if fileSelected}}
|
||||
{{#if errorMessage}}
|
||||
<span class="alert alert-error">{{errorMessage}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/d-modal-body}}
|
||||
|
||||
<div class="modal-footer">
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
{{#d-modal-body rawTitle=(i18n "admin.watched_words.test.modal_title" action=model.name) class="watched-words-test-modal"}}
|
||||
<p>{{i18n "admin.watched_words.test.description"}}</p>
|
||||
{{textarea name="test_value" value=value autofocus="autofocus"}}
|
||||
{{#if matches}}
|
||||
<p>
|
||||
{{i18n "admin.watched_words.test.found_matches"}}
|
||||
<ul>
|
||||
{{#each matches as |match|}}
|
||||
<li>{{match}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</p>
|
||||
{{else}}
|
||||
<p>{{i18n "admin.watched_words.test.no_matches"}}</p>
|
||||
{{/if}}
|
||||
<p>{{i18n "admin.watched_words.test.description"}}</p>
|
||||
{{textarea name="test_value" value=value autofocus="autofocus"}}
|
||||
{{#if matches}}
|
||||
<p>
|
||||
{{i18n "admin.watched_words.test.found_matches"}}
|
||||
<ul>
|
||||
{{#each matches as |match|}}
|
||||
<li>{{match}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</p>
|
||||
{{else}}
|
||||
<p>{{i18n "admin.watched_words.test.no_matches"}}</p>
|
||||
{{/if}}
|
||||
{{/d-modal-body}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{{#d-modal-body class="incoming-emails" rawTitle=model.key}}
|
||||
{{i18n "admin.site_settings.default_categories.modal_description" count=model.count}}
|
||||
{{i18n "admin.site_settings.default_categories.modal_description" count=model.count}}
|
||||
{{/d-modal-body}}
|
||||
|
||||
<div class="modal-footer">
|
||||
|
|
|
@ -29,8 +29,10 @@
|
|||
{{plugin.name}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="version"> <div class="label">{{i18n "admin.plugins.version"}}</div>
|
||||
{{plugin.version}}</td>
|
||||
<td class="version">
|
||||
<div class="label">{{i18n "admin.plugins.version"}}</div>
|
||||
{{plugin.version}}
|
||||
</td>
|
||||
<td class="col-enabled">
|
||||
<div class="label">{{i18n "admin.plugins.enabled"}}</div>
|
||||
{{#if plugin.enabled_setting}}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
<div class='admin-controls'>
|
||||
|
||||
<div class='admin-controls'>
|
||||
<div class='controls'>
|
||||
{{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}}
|
||||
|
||||
{{#if currentUser.admin}}
|
||||
{{d-button label="admin.plugins.change_settings"
|
||||
icon="cog"
|
||||
class="btn-default settings-button"
|
||||
action=(route-action "showSettings")}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if currentUser.admin}}
|
||||
{{d-button
|
||||
label="admin.plugins.change_settings"
|
||||
icon="cog"
|
||||
class="btn-default settings-button"
|
||||
action=(route-action "showSettings")
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="admin-nav pull-left">
|
||||
<ul class="nav nav-stacked">
|
||||
|
|
|
@ -18,17 +18,17 @@
|
|||
<th class="col heading">{{i18n 'admin.logs.search_logs.click_through_rate'}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col term">
|
||||
{{#link-to 'adminSearchLogs.term' (query-params term=item.term period=period) class="test"}}
|
||||
{{item.term}}
|
||||
{{/link-to}}
|
||||
</td>
|
||||
<td class="col"><div class="label">{{i18n 'admin.logs.search_logs.searches'}}</div>{{item.searches}}</td>
|
||||
<td class="col"><div class="label">{{i18n 'admin.logs.search_logs.click_through_rate'}}</div>{{item.ctr}}%</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each model as |item|}}
|
||||
<tr class="admin-list-item">
|
||||
<td class="col term">
|
||||
{{#link-to 'adminSearchLogs.term' (query-params term=item.term period=period) class="test"}}
|
||||
{{item.term}}
|
||||
{{/link-to}}
|
||||
</td>
|
||||
<td class="col"><div class="label">{{i18n 'admin.logs.search_logs.searches'}}</div>{{item.searches}}</td>
|
||||
<td class="col"><div class="label">{{i18n 'admin.logs.search_logs.click_through_rate'}}</div>{{item.ctr}}%</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -20,47 +20,47 @@
|
|||
<br>
|
||||
|
||||
<div class='header-search-results'>
|
||||
{{#each model.search_result.posts as |result|}}
|
||||
<div class='fps-result'>
|
||||
<div class='author'>
|
||||
<a href={{result.userPath}} data-user-card={{result.username}}>
|
||||
{{avatar result imageSize="large"}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class='fps-topic'>
|
||||
<div class='topic'>
|
||||
<a class='search-link' href={{result.url}}>
|
||||
{{topic-status topic=result.topic disableActions=true}}<span class='topic-title'>{{#highlight-text highlight=term}}{{html-safe result.topic.fancyTitle}}{{/highlight-text}}</span>
|
||||
{{#each model.search_result.posts as |result|}}
|
||||
<div class='fps-result'>
|
||||
<div class='author'>
|
||||
<a href={{result.userPath}} data-user-card={{result.username}}>
|
||||
{{avatar result imageSize="large"}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class='search-category'>
|
||||
{{#if result.topic.category.parentCategory}}
|
||||
{{category-link result.topic.category.parentCategory}}
|
||||
<div class='fps-topic'>
|
||||
<div class='topic'>
|
||||
<a class='search-link' href={{result.url}}>
|
||||
{{topic-status topic=result.topic disableActions=true}}<span class='topic-title'>{{#highlight-text highlight=term}}{{html-safe result.topic.fancyTitle}}{{/highlight-text}}</span>
|
||||
</a>
|
||||
|
||||
<div class='search-category'>
|
||||
{{#if result.topic.category.parentCategory}}
|
||||
{{category-link result.topic.category.parentCategory}}
|
||||
{{/if}}
|
||||
{{category-link result.topic.category hideParent=true}}
|
||||
{{#each result.topic.tags as |tag|}}
|
||||
{{discourse-tag tag}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='blurb container'>
|
||||
<span class='date'>
|
||||
{{format-age result.created_at}}
|
||||
{{#if result.blurb}}
|
||||
-
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if result.blurb}}
|
||||
{{#highlight-text highlight=term}}
|
||||
{{html-safe result.blurb}}
|
||||
{{/highlight-text}}
|
||||
{{/if}}
|
||||
{{category-link result.topic.category hideParent=true}}
|
||||
{{#each result.topic.tags as |tag|}}
|
||||
{{discourse-tag tag}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='blurb container'>
|
||||
<span class='date'>
|
||||
{{format-age result.created_at}}
|
||||
{{#if result.blurb}}
|
||||
-
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if result.blurb}}
|
||||
{{#highlight-text highlight=term}}
|
||||
{{html-safe result.blurb}}
|
||||
{{/highlight-text}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -13,26 +13,26 @@
|
|||
{{#if noGrantableBadges}}
|
||||
<p>{{i18n 'admin.badges.no_badges'}}</p>
|
||||
{{else}}
|
||||
<form class="form-horizontal">
|
||||
<div>
|
||||
<label>{{i18n 'admin.badges.badge'}}</label>
|
||||
{{combo-box
|
||||
filterable=true
|
||||
value=selectedBadgeId
|
||||
content=grantableBadges
|
||||
onChange=(action (mut selectedBadgeId))
|
||||
}}
|
||||
</div>
|
||||
<div>
|
||||
<label>{{i18n 'admin.badges.reason'}}</label>
|
||||
{{input type="text" value=badgeReason}}<br><small>{{i18n 'admin.badges.reason_help'}}</small>
|
||||
</div>
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "grantBadge")
|
||||
type="submit"
|
||||
label="admin.badges.grant"}}
|
||||
</form>
|
||||
<form class="form-horizontal">
|
||||
<div>
|
||||
<label>{{i18n 'admin.badges.badge'}}</label>
|
||||
{{combo-box
|
||||
filterable=true
|
||||
value=selectedBadgeId
|
||||
content=grantableBadges
|
||||
onChange=(action (mut selectedBadgeId))
|
||||
}}
|
||||
</div>
|
||||
<div>
|
||||
<label>{{i18n 'admin.badges.reason'}}</label>
|
||||
{{input type="text" value=badgeReason}}<br><small>{{i18n 'admin.badges.reason_help'}}</small>
|
||||
</div>
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "grantBadge")
|
||||
type="submit"
|
||||
label="admin.badges.grant"}}
|
||||
</form>
|
||||
{{/if}}
|
||||
|
||||
<table id='user-badges'>
|
||||
|
@ -55,7 +55,7 @@
|
|||
</td>
|
||||
<td class='reason'>
|
||||
{{#if userBadge.postUrl}}
|
||||
<a href={{userBadge.postUrl}}>{{userBadge.topic_title}}</a>
|
||||
<a href={{userBadge.postUrl}}>{{userBadge.topic_title}}</a>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>{{age-with-tooltip userBadge.granted_at}}</td>
|
||||
|
|
|
@ -474,7 +474,7 @@
|
|||
<div class="value">
|
||||
{{#link-to "adminUser" model.silencedBy}}
|
||||
{{avatar model.silencedBy imageSize="tiny"}}
|
||||
{{/link-to}}
|
||||
{{/link-to}}
|
||||
{{#link-to "adminUser" model.silencedBy}}
|
||||
{{model.silencedBy.username}}
|
||||
{{/link-to}}
|
||||
|
@ -507,45 +507,45 @@
|
|||
{{#if currentUser.admin}}
|
||||
<section class="details">
|
||||
<h1>{{i18n "admin.groups.title"}}</h1>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.automatic"}}</div>
|
||||
<div class="value">{{html-safe automaticGroups}}</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.automatic"}}</div>
|
||||
<div class="value">{{html-safe automaticGroups}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.custom"}}</div>
|
||||
<div class="value">
|
||||
{{admin-group-selector
|
||||
content=availableGroups
|
||||
value=customGroupIdsBuffer
|
||||
onChange=(action (mut customGroupIdsBuffer))
|
||||
}}
|
||||
</div>
|
||||
{{#if customGroupsDirty}}
|
||||
<div class="controls">
|
||||
{{d-button icon="check" class="ok" action=(action "saveCustomGroups")}}
|
||||
{{d-button icon="times" class="cancel" action=(action "resetCustomGroups")}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if model.customGroups}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.custom"}}</div>
|
||||
<div class="field">{{i18n "admin.groups.primary"}}</div>
|
||||
<div class="value">
|
||||
{{admin-group-selector
|
||||
content=availableGroups
|
||||
value=customGroupIdsBuffer
|
||||
onChange=(action (mut customGroupIdsBuffer))
|
||||
{{combo-box
|
||||
content=model.customGroups
|
||||
value=model.primary_group_id
|
||||
none="admin.groups.no_primary"
|
||||
onChange=(action (mut model.primary_group_id))
|
||||
}}
|
||||
</div>
|
||||
{{#if customGroupsDirty}}
|
||||
{{#if primaryGroupDirty}}
|
||||
<div class="controls">
|
||||
{{d-button icon="check" class="ok" action=(action "saveCustomGroups")}}
|
||||
{{d-button icon="times" class="cancel" action=(action "resetCustomGroups")}}
|
||||
{{d-button icon="check" class="ok" action=(action "savePrimaryGroup")}}
|
||||
{{d-button icon="times" class="cancel" action=(action "resetPrimaryGroup")}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if model.customGroups}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.primary"}}</div>
|
||||
<div class="value">
|
||||
{{combo-box
|
||||
content=model.customGroups
|
||||
value=model.primary_group_id
|
||||
none="admin.groups.no_primary"
|
||||
onChange=(action (mut model.primary_group_id))
|
||||
}}
|
||||
</div>
|
||||
{{#if primaryGroupDirty}}
|
||||
<div class="controls">
|
||||
{{d-button icon="check" class="ok" action=(action "savePrimaryGroup")}}
|
||||
{{d-button icon="times" class="cancel" action=(action "resetPrimaryGroup")}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
|
@ -625,34 +625,34 @@
|
|||
</section>
|
||||
|
||||
{{#if model.single_sign_on_record}}
|
||||
<section class="details">
|
||||
<h1>{{i18n "admin.user.sso.title"}}</h1>
|
||||
<section class="details">
|
||||
<h1>{{i18n "admin.user.sso.title"}}</h1>
|
||||
|
||||
{{#with model.single_sign_on_record as |sso|}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_id"}}</div>
|
||||
<div class="value">{{sso.external_id}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_username"}}</div>
|
||||
<div class="value">{{sso.external_username}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_name"}}</div>
|
||||
<div class="value">{{sso.external_name}}</div>
|
||||
</div>
|
||||
{{#if sso.external_email}}
|
||||
{{#with model.single_sign_on_record as |sso|}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_email"}}</div>
|
||||
<div class="value">{{sso.external_email}}</div>
|
||||
<div class="field">{{i18n "admin.user.sso.external_id"}}</div>
|
||||
<div class="value">{{sso.external_id}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_avatar_url"}}</div>
|
||||
<div class="value">{{sso.external_avatar_url}}</div>
|
||||
</div>
|
||||
{{/with}}
|
||||
</section>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_username"}}</div>
|
||||
<div class="value">{{sso.external_username}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_name"}}</div>
|
||||
<div class="value">{{sso.external_name}}</div>
|
||||
</div>
|
||||
{{#if sso.external_email}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_email"}}</div>
|
||||
<div class="value">{{sso.external_email}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.sso.external_avatar_url"}}</div>
|
||||
<div class="value">{{sso.external_avatar_url}}</div>
|
||||
</div>
|
||||
{{/with}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{plugin-outlet name="after-user-details" args=(hash model=model)}}
|
||||
|
|
|
@ -117,31 +117,42 @@
|
|||
{{#if model.tl3Requirements.requirements_lost}}
|
||||
{{! tl implicitly not locked }}
|
||||
{{#if model.tl3Requirements.on_grace_period}}
|
||||
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.on_grace_period'}}
|
||||
{{else}} {{! not on grace period }}
|
||||
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.does_not_qualify'}}
|
||||
{{i18n 'admin.user.tl3_requirements.will_be_demoted'}}
|
||||
{{d-icon "times"}}
|
||||
{{i18n 'admin.user.tl3_requirements.on_grace_period'}}
|
||||
{{else}}
|
||||
{{! not on grace period }}
|
||||
{{d-icon "times"}}
|
||||
{{i18n 'admin.user.tl3_requirements.does_not_qualify'}}
|
||||
{{i18n 'admin.user.tl3_requirements.will_be_demoted'}}
|
||||
{{/if}}
|
||||
{{else}} {{! requirements not lost - remains tl3 }}
|
||||
{{else}}
|
||||
{{! requirements not lost - remains tl3 }}
|
||||
{{#if model.tl3Requirements.trust_level_locked}}
|
||||
{{d-icon "lock"}} {{i18n 'admin.user.tl3_requirements.locked_will_not_be_demoted'}}
|
||||
{{else}} {{! tl not locked }}
|
||||
{{d-icon "check"}} {{i18n 'admin.user.tl3_requirements.qualifies'}}
|
||||
{{d-icon "lock"}}
|
||||
{{i18n 'admin.user.tl3_requirements.locked_will_not_be_demoted'}}
|
||||
{{else}}
|
||||
{{! tl not locked }}
|
||||
{{d-icon "check"}}
|
||||
{{i18n 'admin.user.tl3_requirements.qualifies'}}
|
||||
{{#if model.tl3Requirements.on_grace_period}}
|
||||
{{i18n 'admin.user.tl3_requirements.on_grace_period'}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{else}} {{! is not tl3 }}
|
||||
{{else}}
|
||||
{{! is not tl3 }}
|
||||
{{#if model.tl3Requirements.requirements_met}}
|
||||
{{! met & not tl3 - will be promoted}}
|
||||
{{d-icon "check"}} {{i18n 'admin.user.tl3_requirements.qualifies'}}
|
||||
{{i18n 'admin.user.tl3_requirements.will_be_promoted'}}
|
||||
{{else}} {{! requirements not met - remains regular }}
|
||||
{{d-icon "check"}}
|
||||
{{i18n 'admin.user.tl3_requirements.qualifies'}}
|
||||
{{i18n 'admin.user.tl3_requirements.will_be_promoted'}}
|
||||
{{else}}
|
||||
{{! requirements not met - remains regular }}
|
||||
{{#if model.tl3Requirements.trust_level_locked}}
|
||||
{{d-icon "lock"}} {{i18n 'admin.user.tl3_requirements.locked_will_not_be_promoted'}}
|
||||
{{d-icon "lock"}}
|
||||
{{i18n 'admin.user.tl3_requirements.locked_will_not_be_promoted'}}
|
||||
{{else}}
|
||||
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.does_not_qualify'}}
|
||||
{{d-icon "times"}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
|
|
@ -9,31 +9,31 @@
|
|||
</div>
|
||||
|
||||
<div class='web-hook-events-listing'>
|
||||
{{#if model}}
|
||||
{{#load-more selector=".web-hook-events li" action=(action "loadMore")}}
|
||||
<div class='web-hook-events content-list'>
|
||||
<div class='heading-container'>
|
||||
<div class='col heading first status'>{{i18n 'admin.web_hooks.events.status'}}</div>
|
||||
<div class='col heading event-id'>{{i18n 'admin.web_hooks.events.event_id'}}</div>
|
||||
<div class='col heading timestamp'>{{i18n 'admin.web_hooks.events.timestamp'}}</div>
|
||||
<div class='col heading completion'>{{i18n 'admin.web_hooks.events.completion'}}</div>
|
||||
<div class='col heading actions'>{{i18n 'admin.web_hooks.events.actions'}}</div>
|
||||
<div class='clearfix'></div>
|
||||
{{#if model}}
|
||||
{{#load-more selector=".web-hook-events li" action=(action "loadMore")}}
|
||||
<div class='web-hook-events content-list'>
|
||||
<div class='heading-container'>
|
||||
<div class='col heading first status'>{{i18n 'admin.web_hooks.events.status'}}</div>
|
||||
<div class='col heading event-id'>{{i18n 'admin.web_hooks.events.event_id'}}</div>
|
||||
<div class='col heading timestamp'>{{i18n 'admin.web_hooks.events.timestamp'}}</div>
|
||||
<div class='col heading completion'>{{i18n 'admin.web_hooks.events.completion'}}</div>
|
||||
<div class='col heading actions'>{{i18n 'admin.web_hooks.events.actions'}}</div>
|
||||
<div class='clearfix'></div>
|
||||
</div>
|
||||
{{#if hasIncoming}}
|
||||
<a href class='alert alert-info clickable' tabindex="0" {{action "showInserted"}}>
|
||||
{{count-i18n key="admin.web_hooks.events.incoming" count=incomingCount}}
|
||||
</a>
|
||||
{{/if}}
|
||||
<ul>
|
||||
{{#each model as |webHookEvent|}}
|
||||
{{admin-web-hook-event model=webHookEvent}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
{{#if hasIncoming}}
|
||||
<a href class='alert alert-info clickable' tabindex="0" {{action "showInserted"}}>
|
||||
{{count-i18n key="admin.web_hooks.events.incoming" count=incomingCount}}
|
||||
</a>
|
||||
{{/if}}
|
||||
<ul>
|
||||
{{#each model as |webHookEvent|}}
|
||||
{{admin-web-hook-event model=webHookEvent}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{/load-more}}
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.web_hooks.events.none'}}</p>
|
||||
{{/if}}
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{/load-more}}
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.web_hooks.events.none'}}</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
|
|
@ -5,34 +5,34 @@
|
|||
{{d-icon 'plus'}} {{i18n 'admin.web_hooks.new'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{#if model}}
|
||||
{{#load-more selector=".web-hooks tr" action=(action "loadMore")}}
|
||||
<table class='web-hooks grid'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{i18n 'admin.web_hooks.delivery_status.title'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.payload_url'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.description'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.controls'}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |webHook|}}
|
||||
{{#if model}}
|
||||
{{#load-more selector=".web-hooks tr" action=(action "loadMore")}}
|
||||
<table class='web-hooks grid'>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class='delivery-status'>{{#link-to 'adminWebHooks.showEvents' webHook.id}}{{admin-web-hook-status deliveryStatuses=deliveryStatuses model=webHook}}{{/link-to}}</td>
|
||||
<td class='payload-url'>{{#link-to 'adminWebHooks.show' webHook}}{{webHook.payload_url}}{{/link-to}}</td>
|
||||
<td class='description'>{{webHook.description}}</td>
|
||||
<td class='controls'>
|
||||
{{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'far-edit'}}{{/link-to}}
|
||||
{{d-button class="destroy btn-danger" action=(action "destroy") actionParam=webHook icon="times"}}
|
||||
</td>
|
||||
<th>{{i18n 'admin.web_hooks.delivery_status.title'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.payload_url'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.description'}}</th>
|
||||
<th>{{i18n 'admin.web_hooks.controls'}}</th>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{/load-more}}
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.web_hooks.none'}}</p>
|
||||
{{/if}}
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |webHook|}}
|
||||
<tr>
|
||||
<td class='delivery-status'>{{#link-to 'adminWebHooks.showEvents' webHook.id}}{{admin-web-hook-status deliveryStatuses=deliveryStatuses model=webHook}}{{/link-to}}</td>
|
||||
<td class='payload-url'>{{#link-to 'adminWebHooks.show' webHook}}{{webHook.payload_url}}{{/link-to}}</td>
|
||||
<td class='description'>{{webHook.description}}</td>
|
||||
<td class='controls'>
|
||||
{{#link-to 'adminWebHooks.show' webHook tagName='button' classNames='btn btn-default no-text'}}{{d-icon 'far-edit'}}{{/link-to}}
|
||||
{{d-button class="destroy btn-danger" action=(action "destroy") actionParam=webHook icon="times"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{/load-more}}
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.web_hooks.none'}}</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
|
|
@ -111,8 +111,8 @@
|
|||
|
||||
{{#if contactInfo}}
|
||||
<section class='about contact'>
|
||||
<h3>{{d-icon "far-envelope"}} {{i18n 'about.contact'}}</h3>
|
||||
<p>{{html-safe contactInfo}}</p>
|
||||
<h3>{{d-icon "far-envelope"}} {{i18n 'about.contact'}}</h3>
|
||||
<p>{{html-safe contactInfo}}</p>
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -37,23 +37,23 @@
|
|||
{{#if userBadges}}
|
||||
<div class="user-badges {{model.slug}}">
|
||||
{{#load-more selector=".badge-info" action=(action "loadMore")}}
|
||||
<div class="badges-granted">
|
||||
{{#each userBadges as |ub|}}
|
||||
{{#user-info user=ub.user size="medium" class="badge-info" date=ub.granted_at}}
|
||||
<div class="granted-on">{{i18n 'badges.granted_on' date=(inline-date ub.granted_at)}}</div>
|
||||
{{#if ub.post_number}}
|
||||
<a class="post-link" href="{{ub.topic.url}}/{{ub.post_number}}">{{html-safe ub.topic.fancyTitle}}</a>
|
||||
{{/if}}
|
||||
{{/user-info}}
|
||||
{{/each}}
|
||||
<div class="badges-granted">
|
||||
{{#each userBadges as |ub|}}
|
||||
{{#user-info user=ub.user size="medium" class="badge-info" date=ub.granted_at}}
|
||||
<div class="granted-on">{{i18n 'badges.granted_on' date=(inline-date ub.granted_at)}}</div>
|
||||
{{#if ub.post_number}}
|
||||
<a class="post-link" href="{{ub.topic.url}}/{{ub.post_number}}">{{html-safe ub.topic.fancyTitle}}</a>
|
||||
{{/if}}
|
||||
{{/user-info}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/load-more}}
|
||||
|
||||
{{#unless canLoadMore}}
|
||||
{{#if canShowOthers}}
|
||||
<div class='clearfix'>
|
||||
<a class='btn' href={{model.url}}>{{i18n 'badges.others_count' count=othersCount}}</a>
|
||||
</div>
|
||||
<div class='clearfix'>
|
||||
<a class='btn' href={{model.url}}>{{i18n 'badges.others_count' count=othersCount}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
<label class="btn btn-default btn-icon-text" disabled={{uploading}} title={{i18n 'user.change_avatar.upload_title'}}>
|
||||
{{d-icon "far-image"}}
|
||||
{{#if uploading}}
|
||||
{{i18n 'uploading'}} {{uploadProgress}}%
|
||||
{{i18n 'uploading'}} {{uploadProgress}}%
|
||||
{{else}}
|
||||
{{i18n 'upload'}}
|
||||
{{i18n 'upload'}}
|
||||
{{/if}}
|
||||
|
||||
<input class="hidden-upload-field" disabled={{uploading}} type="file" accept="image/*">
|
||||
</label>
|
||||
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if hasIncoming}}
|
||||
<div class="show-mores">
|
||||
<a tabindex="0" href {{action showInserted}} class='alert alert-info clickable'>
|
||||
{{count-i18n key="topic_count_" suffix="latest" count=2}}
|
||||
</a>
|
||||
</div>
|
||||
<div class="show-mores">
|
||||
<a tabindex="0" href {{action showInserted}} class='alert alert-info clickable'>
|
||||
{{count-i18n key="topic_count_" suffix="latest" count=2}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if topics}}
|
||||
{{topic-list showPosters=showPosters
|
||||
hideCategory=hideCategory
|
||||
topics=topics
|
||||
expandExcerpts=expandExcerpts
|
||||
bulkSelectEnabled=bulkSelectEnabled
|
||||
canBulkSelect=canBulkSelect
|
||||
selected=selected
|
||||
skipHeader=skipHeader
|
||||
tagsForUser=tagsForUser
|
||||
onScroll=onScroll
|
||||
scrollOnLoad=scrollOnLoad}}
|
||||
|
||||
{{topic-list
|
||||
showPosters=showPosters
|
||||
hideCategory=hideCategory
|
||||
topics=topics
|
||||
expandExcerpts=expandExcerpts
|
||||
bulkSelectEnabled=bulkSelectEnabled
|
||||
canBulkSelect=canBulkSelect
|
||||
selected=selected
|
||||
skipHeader=skipHeader
|
||||
tagsForUser=tagsForUser
|
||||
onScroll=onScroll
|
||||
scrollOnLoad=scrollOnLoad
|
||||
}}
|
||||
{{else}}
|
||||
{{#unless loadingMore}}
|
||||
<div class='alert alert-info'>
|
||||
{{i18n 'choose_topic.none_found'}}
|
||||
</div>
|
||||
<div class='alert alert-info'>
|
||||
{{i18n 'choose_topic.none_found'}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
|
|
@ -4,14 +4,15 @@
|
|||
<div class='category-box-heading'>
|
||||
<a href={{c.url}}>
|
||||
{{#unless c.isMuted}}
|
||||
{{#if c.uploaded_logo.url}}
|
||||
{{cdn-img src=c.uploaded_logo.url
|
||||
{{#if c.uploaded_logo.url}}
|
||||
{{cdn-img
|
||||
src=c.uploaded_logo.url
|
||||
class="logo"
|
||||
width=c.uploaded_logo.width
|
||||
height=c.uploaded_logo.height}}
|
||||
{{/if}}
|
||||
height=c.uploaded_logo.height
|
||||
}}
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
|
||||
<h3>
|
||||
{{category-title-before category=c}}
|
||||
{{#if c.read_restricted}}
|
||||
|
@ -23,15 +24,15 @@
|
|||
</div>
|
||||
|
||||
{{#unless c.isMuted}}
|
||||
<div class='featured-topics'>
|
||||
{{#if c.topics}}
|
||||
<ul>
|
||||
{{#each c.topics as |topic|}}
|
||||
{{categories-boxes-topic topic=topic}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class='featured-topics'>
|
||||
{{#if c.topics}}
|
||||
<ul>
|
||||
{{#each c.topics as |topic|}}
|
||||
{{categories-boxes-topic topic=topic}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,15 +3,16 @@
|
|||
data-url={{c.url}}>
|
||||
<div class='category-box-inner'>
|
||||
{{#unless c.isMuted}}
|
||||
<div class="category-logo">
|
||||
{{#if c.uploaded_logo.url}}
|
||||
{{cdn-img
|
||||
<div class="category-logo">
|
||||
{{#if c.uploaded_logo.url}}
|
||||
{{cdn-img
|
||||
src=c.uploaded_logo.url
|
||||
class="logo"
|
||||
width=c.uploaded_logo.width
|
||||
height=c.uploaded_logo.height}}
|
||||
{{/if}}
|
||||
</div>
|
||||
height=c.uploaded_logo.height
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
<div class="category-details">
|
||||
<div class='category-box-heading'>
|
||||
|
@ -26,45 +27,45 @@
|
|||
</div>
|
||||
|
||||
{{#unless c.isMuted}}
|
||||
<div class='description'>
|
||||
{{text-overflow class="overflow" text=c.description_excerpt}}
|
||||
</div>
|
||||
{{#if c.isGrandParent}}
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<div data-category-id={{subcategory.id}} data-notification-level={{subcategory.notificationLevelString}} style={{border-color subcategory.color}} class="subcategory with-subcategories {{if subcategory.uploaded_logo.url 'has-logo' 'no-logo'}}">
|
||||
<div class="subcategory-box-inner">
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subsubcategory}}
|
||||
{{category-link subsubcategory hideParent="true"}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{else if c.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |sc|}}
|
||||
<a class="subcategory" href={{sc.url}}>
|
||||
<span class="subcategory-image-placeholder">
|
||||
{{cdn-img
|
||||
src=sc.uploaded_logo.url
|
||||
class="logo"
|
||||
width=sc.uploaded_logo.width
|
||||
height=sc.uploaded_logo.height}}
|
||||
</span>
|
||||
{{category-link sc hideParent="true"}}
|
||||
</a>
|
||||
{{/each}}
|
||||
<div class='description'>
|
||||
{{text-overflow class="overflow" text=c.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if c.isGrandParent}}
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<div data-category-id={{subcategory.id}} data-notification-level={{subcategory.notificationLevelString}} style={{border-color subcategory.color}} class="subcategory with-subcategories {{if subcategory.uploaded_logo.url 'has-logo' 'no-logo'}}">
|
||||
<div class="subcategory-box-inner">
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subsubcategory}}
|
||||
{{category-link subsubcategory hideParent="true"}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{else if c.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |sc|}}
|
||||
<a class="subcategory" href={{sc.url}}>
|
||||
<span class="subcategory-image-placeholder">
|
||||
{{cdn-img
|
||||
src=sc.uploaded_logo.url
|
||||
class="logo"
|
||||
width=sc.uploaded_logo.width
|
||||
height=sc.uploaded_logo.height}}
|
||||
</span>
|
||||
{{category-link sc hideParent="true"}}
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,59 +15,59 @@
|
|||
<td class="category {{if c.isMuted 'muted'}} {{if noCategoryStyle "no-category-style"}}" style={{unless noCategoryStyle (border-color c.color)}}>
|
||||
{{category-title-link category=c}}
|
||||
{{#unless c.isMuted}}
|
||||
{{#if c.description_excerpt}}
|
||||
<div class="category-description">
|
||||
{{dir-span c.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if c.isGrandParent}}
|
||||
<table class="category-list subcategories-with-subcategories">
|
||||
<tbody>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<tr data-category-id={{subcategory.id}} data-notification-level={{subcategory.notificationLevelString}} class="{{if subcategory.description_excerpt 'has-description' 'no-description'}} {{if subcategory.uploaded_logo.url 'has-logo' 'no-logo'}}">
|
||||
<td class="category" style={{border-color subcategory.color}}>
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
{{#if subcategory.description_excerpt}}
|
||||
<div class="category-description subcategory-description">
|
||||
{{dir-span subcategory.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subsubcategory}}
|
||||
{{category-link subsubcategory hideParent="true"}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if c.description_excerpt}}
|
||||
<div class="category-description">
|
||||
{{dir-span c.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if c.isGrandParent}}
|
||||
<table class="category-list subcategories-with-subcategories">
|
||||
<tbody>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<tr data-category-id={{subcategory.id}} data-notification-level={{subcategory.notificationLevelString}} class="{{if subcategory.description_excerpt 'has-description' 'no-description'}} {{if subcategory.uploaded_logo.url 'has-logo' 'no-logo'}}">
|
||||
<td class="category" style={{border-color subcategory.color}}>
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
{{#if subcategory.description_excerpt}}
|
||||
<div class="category-description subcategory-description">
|
||||
{{dir-span subcategory.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subsubcategory}}
|
||||
{{category-link subsubcategory hideParent="true"}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if subcategory.description_excerpt}}
|
||||
<div class="category-description subcategory-description">
|
||||
{{dir-span subcategory.description_excerpt}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else if c.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
{{#unless subcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subcategory}}
|
||||
{{category-link subcategory hideParent="true"}}
|
||||
{{category-unread category=subcategory}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else if c.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
{{#unless subcategory.isMuted}}
|
||||
<span class='subcategory'>
|
||||
{{category-title-before category=subcategory}}
|
||||
{{category-link subcategory hideParent="true"}}
|
||||
{{category-unread category=subcategory}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</td>
|
||||
<td class="topics">
|
||||
|
@ -75,13 +75,13 @@
|
|||
{{category-unread category=c tagName="div" class="unread-new"}}
|
||||
</td>
|
||||
{{#unless c.isMuted}}
|
||||
{{#if showTopics}}
|
||||
<td class="latest">
|
||||
{{#each c.featuredTopics as |t|}}
|
||||
{{featured-topic topic=t latestTopicOnly=latestTopicOnly}}
|
||||
{{/each}}
|
||||
</td>
|
||||
{{/if}}
|
||||
{{#if showTopics}}
|
||||
<td class="latest">
|
||||
{{#each c.featuredTopics as |t|}}
|
||||
{{featured-topic topic=t latestTopicOnly=latestTopicOnly}}
|
||||
{{/each}}
|
||||
</td>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</tr>
|
||||
{{/each}}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<span class="message-title">
|
||||
{{m.title}}
|
||||
</span>
|
||||
</label>
|
||||
</label>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
{{#if showSelector}}
|
||||
{{user-selector topicId=topicId
|
||||
onChangeCallback=(action "triggerResize")
|
||||
id="private-message-users"
|
||||
includeMessageableGroups='true'
|
||||
placeholderKey="composer.users_placeholder"
|
||||
tabindex="1"
|
||||
usernames=usernames
|
||||
hasGroups=hasGroups
|
||||
allowEmails='true'
|
||||
autocomplete="discourse"}}
|
||||
{{user-selector
|
||||
topicId=topicId
|
||||
onChangeCallback=(action "triggerResize")
|
||||
id="private-message-users"
|
||||
includeMessageableGroups='true'
|
||||
placeholderKey="composer.users_placeholder"
|
||||
tabindex="1"
|
||||
usernames=usernames
|
||||
hasGroups=hasGroups
|
||||
allowEmails='true'
|
||||
autocomplete="discourse"
|
||||
}}
|
||||
{{else}}
|
||||
<a href {{action "toggleSelector"}}>
|
||||
<a href {{action "toggleSelector"}}>
|
||||
<div class='ac-wrap composer-user-selector-limited'>
|
||||
<span>{{limitedUsernames}}</span>
|
||||
<span class='btn btn-primary'>{{hiddenUsersCount}}</span>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<label for="category-position">
|
||||
{{i18n 'category.position'}}
|
||||
</label>
|
||||
{{text-field value=category.position id="category-position" class="position-input" type="number"}}
|
||||
{{text-field value=category.position id="category-position" class="position-input" type="number"}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
|
@ -33,16 +33,16 @@
|
|||
{{i18n "category.search_priority.label"}}
|
||||
</label>
|
||||
<div class="controls">
|
||||
{{combo-box
|
||||
valueProperty="value"
|
||||
id="category-search-priority"
|
||||
content=searchPrioritiesOptions
|
||||
value=category.search_priority
|
||||
onChange=(action (mut category.search_priority))
|
||||
options=(hash
|
||||
placementStrategy="absolute"
|
||||
)
|
||||
}}
|
||||
{{combo-box
|
||||
valueProperty="value"
|
||||
id="category-search-priority"
|
||||
content=searchPrioritiesOptions
|
||||
value=category.search_priority
|
||||
onChange=(action (mut category.search_priority))
|
||||
options=(hash
|
||||
placementStrategy="absolute"
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
@ -77,13 +77,10 @@
|
|||
{{i18n "category.all_topics_wiki"}}
|
||||
</label>
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<h3>{{i18n 'category.settings_sections.moderation'}}</h3>
|
||||
|
||||
{{#if siteSettings.enable_category_group_review}}
|
||||
<section class="field">
|
||||
<label for="reviewable-by-group">
|
||||
|
@ -93,7 +90,8 @@
|
|||
groupFinder=groupFinder
|
||||
single="true"
|
||||
groupNames=category.reviewable_by_group_name
|
||||
placeholderKey="category.review_group_name"}}
|
||||
placeholderKey="category.review_group_name"
|
||||
}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
|
@ -139,12 +137,10 @@
|
|||
</label>
|
||||
{{text-field value=category.custom_fields.num_auto_bump_daily id="category-number-daily-bump" type="number"}}
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
||||
<h3> {{i18n "category.settings_sections.appearance"}}</h3>
|
||||
<h3>{{i18n "category.settings_sections.appearance"}}</h3>
|
||||
|
||||
<section class="field default-view-field">
|
||||
<label for="category-default-view">
|
||||
|
@ -185,75 +181,73 @@
|
|||
{{i18n "category.sort_order"}}
|
||||
</label>
|
||||
<div class="controls">
|
||||
{{combo-box valueProperty="value" content=availableSorts value=category.sort_order none="category.sort_options.default"}}
|
||||
{{#unless isDefaultSortOrder}}
|
||||
{{combo-box
|
||||
castBoolean=true
|
||||
valueProperty="value"
|
||||
content=sortAscendingOptions
|
||||
value=category.sort_ascending
|
||||
none="category.sort_options.default"
|
||||
options=(hash
|
||||
placementStrategy="absolute"
|
||||
)
|
||||
}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{#if isParentCategory}}
|
||||
<section class="field show-subcategory-list-field">
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.show_subcategory_list}}
|
||||
{{i18n "category.show_subcategory_list"}}
|
||||
</label>
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{#if showSubcategoryListStyle}}
|
||||
<section class="field subcategory-list-style-field">
|
||||
<label for="subcategory-list-style">
|
||||
{{i18n "category.subcategory_list_style"}}
|
||||
</label>
|
||||
{{combo-box valueProperty="value" content=availableSorts value=category.sort_order none="category.sort_options.default"}}
|
||||
{{#unless isDefaultSortOrder}}
|
||||
{{combo-box
|
||||
castBoolean=true
|
||||
valueProperty="value"
|
||||
id="subcategory-list-style"
|
||||
content=availableSubcategoryListStyles
|
||||
value=category.subcategory_list_style
|
||||
content=sortAscendingOptions
|
||||
value=category.sort_ascending
|
||||
none="category.sort_options.default"
|
||||
options=(hash
|
||||
placementStrategy="absolute"
|
||||
)
|
||||
}}
|
||||
</section>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
</section>
|
||||
{{#if isParentCategory}}
|
||||
<section class="field show-subcategory-list-field">
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.show_subcategory_list}}
|
||||
{{i18n "category.show_subcategory_list"}}
|
||||
</label>
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
{{#if showSubcategoryListStyle}}
|
||||
<section class="field subcategory-list-style-field">
|
||||
<label for="subcategory-list-style">
|
||||
{{i18n "category.subcategory_list_style"}}
|
||||
</label>
|
||||
{{combo-box
|
||||
valueProperty="value"
|
||||
id="subcategory-list-style"
|
||||
content=availableSubcategoryListStyles
|
||||
value=category.subcategory_list_style
|
||||
options=(hash
|
||||
placementStrategy="absolute"
|
||||
)
|
||||
}}
|
||||
</section>
|
||||
{{/if}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3> {{i18n "category.settings_sections.email"}}</h3>
|
||||
<h3>{{i18n "category.settings_sections.email"}}</h3>
|
||||
|
||||
{{#if emailInEnabled}}
|
||||
<section class='field'>
|
||||
<label for="category-email-in">
|
||||
{{d-icon "far-envelope"}}
|
||||
{{i18n 'category.email_in'}}
|
||||
</label>
|
||||
{{text-field id="category-email-in" class="email-in" value=category.email_in}}
|
||||
</section>
|
||||
<section class='field'>
|
||||
<label for="category-email-in">
|
||||
{{d-icon "far-envelope"}}
|
||||
{{i18n 'category.email_in'}}
|
||||
</label>
|
||||
{{text-field id="category-email-in" class="email-in" value=category.email_in}}
|
||||
</section>
|
||||
|
||||
<section class='field'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.email_in_allow_strangers}}
|
||||
{{i18n 'category.email_in_allow_strangers'}}
|
||||
</label>
|
||||
</section>
|
||||
<section class='field'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.email_in_allow_strangers}}
|
||||
{{i18n 'category.email_in_allow_strangers'}}
|
||||
</label>
|
||||
</section>
|
||||
|
||||
<section class='field'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.mailinglist_mirror}}
|
||||
{{i18n 'category.mailinglist_mirror'}}
|
||||
</label>
|
||||
</section>
|
||||
<section class='field'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=category.mailinglist_mirror}}
|
||||
{{i18n 'category.mailinglist_mirror'}}
|
||||
</label>
|
||||
</section>
|
||||
|
||||
{{plugin-outlet name="category-email-in" args=(hash category=category)}}
|
||||
{{/if}}
|
||||
|
@ -264,7 +258,6 @@
|
|||
<a href={{get-url '/admin/site_settings/category/email'}}>{{i18n 'category.email_in_disabled_click'}}</a>
|
||||
</section>
|
||||
{{/unless}}
|
||||
|
||||
</section>
|
||||
|
||||
{{plugin-outlet name="category-custom-settings" args=(hash category=category) connectorTagName="" tagName="section"}}
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<div class="future-date-input">
|
||||
{{#unless isBasedOnDuration}}
|
||||
<div class="control-group">
|
||||
<label>{{displayLabel}}</label>
|
||||
{{future-date-input-selector
|
||||
minimumResultsForSearch=-1
|
||||
statusType=statusType
|
||||
value=(readonly selection)
|
||||
input=(readonly input)
|
||||
includeDateTime=includeDateTime
|
||||
includeWeekend=includeWeekend
|
||||
includeFarFuture=includeFarFuture
|
||||
includeMidFuture=includeMidFuture
|
||||
clearable=clearable
|
||||
none="topic.auto_update_input.none"
|
||||
onChangeInput=onChangeInput
|
||||
onChange=(action (mut selection))
|
||||
}}
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label>{{displayLabel}}</label>
|
||||
{{future-date-input-selector
|
||||
minimumResultsForSearch=-1
|
||||
statusType=statusType
|
||||
value=(readonly selection)
|
||||
input=(readonly input)
|
||||
includeDateTime=includeDateTime
|
||||
includeWeekend=includeWeekend
|
||||
includeFarFuture=includeFarFuture
|
||||
includeMidFuture=includeMidFuture
|
||||
clearable=clearable
|
||||
none="topic.auto_update_input.none"
|
||||
onChangeInput=onChangeInput
|
||||
onChange=(action (mut selection))
|
||||
}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
{{#if displayDateAndTimePicker}}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{{#if visible}}
|
||||
<div class="card-content">
|
||||
|
||||
<div class="card-row first-row">
|
||||
<div class="group-card-avatar">
|
||||
<a href={{groupPath}} {{action "showGroup" group}} class="card-huge-avatar">
|
||||
{{avatar-flair
|
||||
flairURL=group.flair_url
|
||||
flairBgColor=group.flair_bg_color
|
||||
flairColor=group.flair_color
|
||||
groupName=group.name}}
|
||||
flairURL=group.flair_url
|
||||
flairBgColor=group.flair_bg_color
|
||||
flairColor=group.flair_color
|
||||
groupName=group.name
|
||||
}}
|
||||
</a>
|
||||
</div>
|
||||
<div class="names">
|
||||
|
@ -26,8 +26,9 @@
|
|||
<ul class="usercard-controls group-details-button">
|
||||
<li>
|
||||
{{group-membership-button
|
||||
model=group
|
||||
showLogin=(route-action "showLogin")}}
|
||||
model=group
|
||||
showLogin=(route-action "showLogin")
|
||||
}}
|
||||
</li>
|
||||
{{#if group.messageable}}
|
||||
<li>
|
||||
|
@ -35,7 +36,8 @@
|
|||
action=(action "messageGroup")
|
||||
class="btn-primary group-message-button inline"
|
||||
icon="envelope"
|
||||
label="groups.message"}}
|
||||
label="groups.message"
|
||||
}}
|
||||
</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
|
@ -74,13 +76,12 @@
|
|||
<a href {{action 'showUser' user}} class="card-tiny-avatar">{{bound-avatar user "tiny"}}</a>
|
||||
{{/each}}
|
||||
{{#if showMoreMembers}}
|
||||
<a href={{groupPath}} {{action "showGroup" group}} class="more-members-link"><span
|
||||
class="more-members-count">+{{moreMembersCount}}
|
||||
{{i18n "more"}}</span></a>
|
||||
<a href={{groupPath}} {{action "showGroup" group}} class="more-members-link">
|
||||
<span class="more-members-count">+{{moreMembersCount}}{{i18n "more"}}</span>
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div class='control-group buttons'>
|
||||
{{#d-button action=(action "save")
|
||||
disabled=saving
|
||||
class='btn btn-primary group-manage-save'}}
|
||||
|
||||
{{savingText}}
|
||||
disabled=saving
|
||||
class='btn btn-primary group-manage-save'
|
||||
}}
|
||||
{{savingText}}
|
||||
{{/d-button}}
|
||||
|
||||
{{#if saved}}
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
<div class='clearfix info'>
|
||||
<a href={{post.user.userUrl}} data-user-card={{post.user.username}} class='avatar-link'>
|
||||
{{avatar post.user imageSize="large" extraClasses="actor" ignoreTitle="true"}}
|
||||
</a>
|
||||
<span class='time'>{{format-date post.created_at leaveAgo="true"}}</span>
|
||||
{{expand-post item=post}}
|
||||
<a href={{post.user.userUrl}} data-user-card={{post.user.username}} class='avatar-link'>
|
||||
{{avatar post.user imageSize="large" extraClasses="actor" ignoreTitle="true"}}
|
||||
</a>
|
||||
<span class='time'>{{format-date post.created_at leaveAgo="true"}}</span>
|
||||
{{expand-post item=post}}
|
||||
|
||||
<div class='stream-topic-details'>
|
||||
<div class='stream-topic-title'>
|
||||
<span class='title'>
|
||||
<a href={{postUrl}}>{{html-safe post.topic.fancyTitle}}</a>
|
||||
</span>
|
||||
<div class='stream-topic-title'>
|
||||
<span class='title'>
|
||||
<a href={{postUrl}}>{{html-safe post.topic.fancyTitle}}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="group-post-category">{{category-link post.category}}</div>
|
||||
{{#if post.user.name}}
|
||||
<div class="group-member-info">
|
||||
<span class="name">{{post.user.name}}</span>
|
||||
{{#if post.user.title}}<span class="title">, {{post.user.title}}</span>{{/if}}
|
||||
</div>
|
||||
<div class="group-post-category">{{category-link post.category}}</div>
|
||||
{{#if post.user.name}}
|
||||
<div class="group-member-info">
|
||||
<span class="name">{{post.user.name}}</span>
|
||||
{{#if post.user.title}}<span class="title">, {{post.user.title}}</span>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class='excerpt'>
|
||||
|
|
|
@ -38,12 +38,13 @@
|
|||
value=emailOrUsername
|
||||
placeholderKey="topic.invite_reply.email_placeholder"}}
|
||||
{{/if}}
|
||||
{{#if showContactPicker}}
|
||||
{{d-button
|
||||
{{#if showContactPicker}}
|
||||
{{d-button
|
||||
icon="address-book"
|
||||
action=(action "searchContact")
|
||||
class="btn-primary open-contact-picker"}}
|
||||
{{/if}}
|
||||
class="btn-primary open-contact-picker"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
{{custom-html name="extraNavItem" tagName="li"}}
|
||||
{{!- this is done to avoid DIV in the UL, originally {{plugin-outlet name="extra-nav-item"}}
|
||||
{{#each connectors as |c|}}
|
||||
{{plugin-connector connector=c class=c.classNames tagName="li" args=(hash category=category filterMode=filterMode)}}
|
||||
{{plugin-connector connector=c class=c.classNames tagName="li" args=(hash category=category filterMode=filterMode)}}
|
||||
{{/each}}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<a href={{hrefLink}} class={{activeClass}}>
|
||||
{{#if hasIcon}}
|
||||
<span class={{content.name}}></span>
|
||||
{{/if}}
|
||||
{{content.displayName}}
|
||||
{{#if hasIcon}}
|
||||
<span class={{content.name}}></span>
|
||||
{{/if}}
|
||||
{{content.displayName}}
|
||||
</a>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<a href {{action "showEditHistory"}}
|
||||
class="has-edits {{historyClass}}"
|
||||
title="{{i18n "post.last_edited_on"}} {{editedDate}}">
|
||||
{{d-icon "pencil-alt"}}
|
||||
{{d-icon "pencil-alt"}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
|
|
@ -2,28 +2,26 @@
|
|||
<table class='reviewable-histories'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="3">{{i18n "review.history.title"}}</th>
|
||||
</tr>
|
||||
<th colspan="3">{{i18n "review.history.title"}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each filteredHistories as |rh|}}
|
||||
{{#unless rh.created}}
|
||||
<tr>
|
||||
<td>
|
||||
{{reviewable-history-description rh}}
|
||||
</td>
|
||||
<td>
|
||||
{{#user-link user=rs.user}}
|
||||
{{avatar rh.created_by imageSize="tiny"}}
|
||||
{{rh.created_by.username}}
|
||||
{{/user-link}}
|
||||
</td>
|
||||
<td>{{format-date rh.created_at format="medium"}}</td>
|
||||
|
||||
</tr>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
|
||||
{{#each filteredHistories as |rh|}}
|
||||
{{#unless rh.created}}
|
||||
<tr>
|
||||
<td>
|
||||
{{reviewable-history-description rh}}
|
||||
</td>
|
||||
<td>
|
||||
{{#user-link user=rs.user}}
|
||||
{{avatar rh.created_by imageSize="tiny"}}
|
||||
{{rh.created_by.username}}
|
||||
{{/user-link}}
|
||||
</td>
|
||||
<td>{{format-date rh.created_at format="medium"}}</td>
|
||||
</tr>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/if}}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{{#if reviewable.reviewable_scores}}
|
||||
<table class='reviewable-scores'>
|
||||
<tbody>
|
||||
{{#each reviewable.reviewable_scores as |rs|}}
|
||||
{{reviewable-score rs=rs reviewable=reviewable}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
{{#each reviewable.reviewable_scores as |rs|}}
|
||||
{{reviewable-score rs=rs reviewable=reviewable}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/if}}
|
||||
|
|
|
@ -53,9 +53,9 @@
|
|||
unlimitedTagCount=true
|
||||
onChange=(action (mut searchedTerms.tags))
|
||||
}}
|
||||
<section class="field">
|
||||
<section class="field">
|
||||
<label>{{ input type="checkbox" class="all-tags" checked=searchedTerms.special.all_tags}} {{i18n "search.advanced.filters.all_tags"}} </label>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -10,8 +10,10 @@
|
|||
|
||||
<nav id='topic-progress' title={{i18n 'topic.progress.title'}} class={{if hideProgress 'hidden'}}>
|
||||
<div class='nums'>
|
||||
<h4>{{progressPosition}}</h4><span class={{if hugeNumberOfPosts 'hidden'}}>
|
||||
<span>/</span>
|
||||
<h4>{{postStream.filteredPostsCount}}</h4></span>
|
||||
<h4>{{progressPosition}}</h4>
|
||||
<span class={{if hugeNumberOfPosts 'hidden'}}>
|
||||
<span>/</span>
|
||||
<h4>{{postStream.filteredPostsCount}}</h4>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
|
|
@ -153,8 +153,10 @@
|
|||
<div class="card-row">
|
||||
<div class="location-and-website">
|
||||
{{#if user.location}}
|
||||
<span class='location'>{{d-icon "map-marker-alt"}}
|
||||
<span>{{user.location}}</span></span>
|
||||
<span class='location'>
|
||||
{{d-icon "map-marker-alt"}}
|
||||
<span>{{user.location}}</span>
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if user.website_name}}
|
||||
<span class='website-name'>
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
<label class="control-label" for={{concat 'user-' elementId}}>{{html-safe field.name}} {{#if field.required}}<span class='required'>*</span>{{/if}}
|
||||
<label class="control-label" for={{concat 'user-' elementId}}>
|
||||
{{html-safe field.name}}
|
||||
{{#if field.required}}
|
||||
<span class='required'>*</span>
|
||||
{{/if}}
|
||||
</label>
|
||||
|
||||
<div class='controls'>
|
||||
{{combo-box
|
||||
id=(concat 'user-' elementId)
|
||||
|
|
|
@ -46,7 +46,8 @@
|
|||
</p>
|
||||
|
||||
{{#each item.children as |child|}}
|
||||
<div class='user-stream-item-actions child-actions'>{{!-- DEPRECATED: 'child-actions' class --}}
|
||||
{{!-- DEPRECATED: 'child-actions' class --}}
|
||||
<div class='user-stream-item-actions child-actions'>
|
||||
{{d-icon child.icon class="icon"}}
|
||||
{{#each child.items as |grandChild|}}
|
||||
{{#if grandChild.removableBookmark}}
|
||||
|
@ -54,10 +55,11 @@
|
|||
class="btn-default remove-bookmark"
|
||||
action=(action removeBookmark grandChild)
|
||||
icon="times"
|
||||
label="bookmarks.remove"}}
|
||||
label="bookmarks.remove"
|
||||
}}
|
||||
{{else}}
|
||||
<a href={{grandChild.userUrl}} data-user-card={{grandChild.username}} class='avatar-link'><div class='avatar-wrapper'>{{avatar grandChild imageSize="tiny" extraClasses="actor" ignoreTitle="true" avatarTemplatePath="acting_avatar_template"}}</div></a>
|
||||
{{#if grandChild.edit_reason}} — <span class="edit-reason">{{grandChild.edit_reason}}</span>{{/if}}
|
||||
<a href={{grandChild.userUrl}} data-user-card={{grandChild.username}} class='avatar-link'><div class='avatar-wrapper'>{{avatar grandChild imageSize="tiny" extraClasses="actor" ignoreTitle="true" avatarTemplatePath="acting_avatar_template"}}</div></a>
|
||||
{{#if grandChild.edit_reason}} — <span class="edit-reason">{{grandChild.edit_reason}}</span>{{/if}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
|
||||
<div class='search-category'>
|
||||
{{#if result.topic.category.parentCategory}}
|
||||
{{category-link result.topic.category.parentCategory}}
|
||||
{{category-link result.topic.category.parentCategory}}
|
||||
{{/if}}
|
||||
{{category-link result.topic.category hideParent=true}}
|
||||
{{#each result.topic.tags as |tag|}}
|
||||
|
@ -107,7 +107,7 @@
|
|||
<span class='date'>
|
||||
{{format-age result.created_at}}
|
||||
{{#if result.blurb}}
|
||||
-
|
||||
-
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
|
|
|
@ -1,88 +1,89 @@
|
|||
<section class="user-content">
|
||||
|
||||
<div class="group-members-actions">
|
||||
<div class="group-members-actions">
|
||||
{{#if model.can_see_members}}
|
||||
{{text-field value=filterInput
|
||||
placeholderKey=filterPlaceholder
|
||||
autocomplete="discourse"
|
||||
class="group-username-filter no-blur"}}
|
||||
{{text-field
|
||||
value=filterInput
|
||||
placeholderKey=filterPlaceholder
|
||||
autocomplete="discourse"
|
||||
class="group-username-filter no-blur"
|
||||
}}
|
||||
{{/if}}
|
||||
|
||||
<div class="group-members-manage">
|
||||
{{#if canManageGroup}}
|
||||
{{d-button icon="plus"
|
||||
action=(route-action "showAddMembersModal")
|
||||
label="groups.add_members.title"
|
||||
class="group-members-add"}}
|
||||
{{#if currentUser.admin}}
|
||||
<div class="group-members-manage">
|
||||
{{#if canManageGroup}}
|
||||
{{d-button icon="plus"
|
||||
action=(route-action "showBulkAddModal")
|
||||
label="admin.groups.bulk_add.title"
|
||||
class="group-bulk-add"}}
|
||||
action=(route-action "showAddMembersModal")
|
||||
label="groups.add_members.title"
|
||||
class="group-members-add"}}
|
||||
{{#if currentUser.admin}}
|
||||
{{d-button icon="plus"
|
||||
action=(route-action "showBulkAddModal")
|
||||
label="admin.groups.bulk_add.title"
|
||||
class="group-bulk-add"}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if hasMembers}}
|
||||
{{#load-more selector=".group-members tr" action=(action "loadMore")}}
|
||||
<table class='group-members'>
|
||||
<thead>
|
||||
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}}
|
||||
<th class='group-owner'>{{i18n "groups.members.owner"}}</th>
|
||||
{{group-index-toggle order=order desc=desc field='added_at' i18nKey='groups.member_added'}}
|
||||
{{group-index-toggle order=order desc=desc field='last_posted_at' i18nKey='last_post'}}
|
||||
{{group-index-toggle order=order desc=desc field='last_seen_at' i18nKey='last_seen'}}
|
||||
<th></th>
|
||||
</thead>
|
||||
{{#if hasMembers}}
|
||||
{{#load-more selector=".group-members tr" action=(action "loadMore")}}
|
||||
<table class='group-members'>
|
||||
<thead>
|
||||
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}}
|
||||
<th class='group-owner'>{{i18n "groups.members.owner"}}</th>
|
||||
{{group-index-toggle order=order desc=desc field='added_at' i18nKey='groups.member_added'}}
|
||||
{{group-index-toggle order=order desc=desc field='last_posted_at' i18nKey='last_post'}}
|
||||
{{group-index-toggle order=order desc=desc field='last_seen_at' i18nKey='last_seen'}}
|
||||
<th></th>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{{#each model.members as |m|}}
|
||||
<tr>
|
||||
<td class='avatar'>
|
||||
{{user-info user=m skipName=skipName}}
|
||||
</td>
|
||||
<tbody>
|
||||
{{#each model.members as |m|}}
|
||||
<tr>
|
||||
<td class='avatar'>
|
||||
{{user-info user=m skipName=skipName}}
|
||||
</td>
|
||||
|
||||
<td class='group-owner'>
|
||||
{{#if m.owner}}
|
||||
<strong class="group-owner-label">
|
||||
{{d-icon "shield-alt"}}
|
||||
</strong>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.added_at}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.last_posted_at}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.last_seen_at}}</span>
|
||||
</td>
|
||||
<td class='group-owner'>
|
||||
{{#if m.owner}}
|
||||
<strong class="group-owner-label">
|
||||
{{d-icon "shield-alt"}}
|
||||
</strong>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.added_at}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.last_posted_at}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.last_seen_at}}</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{#if canManageGroup}}
|
||||
{{group-member-dropdown
|
||||
member=m
|
||||
onChange=(action "actOnGroup" m)
|
||||
}}
|
||||
{{/if}}
|
||||
{{!-- group parameter is used by plugins --}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/load-more}}
|
||||
<td>
|
||||
{{#if canManageGroup}}
|
||||
{{group-member-dropdown
|
||||
member=m
|
||||
onChange=(action "actOnGroup" m)
|
||||
}}
|
||||
{{/if}}
|
||||
{{!-- group parameter is used by plugins --}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/load-more}}
|
||||
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else if model.can_see_members}}
|
||||
<br>
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else if model.can_see_members}}
|
||||
<br>
|
||||
|
||||
<div>{{i18n "groups.empty.members"}}</div>
|
||||
{{else}}
|
||||
<br>
|
||||
<div>{{i18n "groups.empty.members"}}</div>
|
||||
{{else}}
|
||||
<br>
|
||||
|
||||
<div>{{i18n "groups.members.forbidden"}}</div>
|
||||
{{/if}}
|
||||
<div>{{i18n "groups.members.forbidden"}}</div>
|
||||
{{/if}}
|
||||
</section>
|
||||
|
|
|
@ -1,55 +1,57 @@
|
|||
<section class="user-content">
|
||||
|
||||
<div class="group-members-actions">
|
||||
{{text-field value=filterInput
|
||||
placeholderKey=filterPlaceholder
|
||||
class="group-username-filter no-blur"}}
|
||||
</div>
|
||||
<div class="group-members-actions">
|
||||
{{text-field
|
||||
value=filterInput
|
||||
placeholderKey=filterPlaceholder
|
||||
class="group-username-filter no-blur"
|
||||
}}
|
||||
</div>
|
||||
|
||||
{{#if hasRequesters}}
|
||||
{{#load-more selector=".group-members tr" action=(action "loadMore")}}
|
||||
<table class='group-members'>
|
||||
<thead>
|
||||
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}}
|
||||
{{group-index-toggle order=order desc=desc field='requested_at' i18nKey='groups.member_requested'}}
|
||||
<th>{{i18n "groups.requests.reason"}}</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</thead>
|
||||
{{#if hasRequesters}}
|
||||
{{#load-more selector=".group-members tr" action=(action "loadMore")}}
|
||||
<table class='group-members'>
|
||||
<thead>
|
||||
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}}
|
||||
{{group-index-toggle order=order desc=desc field='requested_at' i18nKey='groups.member_requested'}}
|
||||
<th>{{i18n "groups.requests.reason"}}</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{{#each model.requesters as |m|}}
|
||||
<tr>
|
||||
<td class='avatar'>
|
||||
{{user-info user=m skipName=skipName}}
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.requested_at}}</span>
|
||||
</td>
|
||||
<td>{{m.reason}}</td>
|
||||
<td>
|
||||
{{#if m.request_undone}}
|
||||
{{i18n "groups.requests.undone"}}
|
||||
{{else if m.request_accepted}}
|
||||
{{i18n "groups.requests.accepted"}}
|
||||
{{d-button action=(action "undoAcceptRequest") actionParam=m label="undo"}}
|
||||
{{else if m.request_denied}}
|
||||
{{i18n "groups.requests.denied"}}
|
||||
{{else}}
|
||||
{{d-button action=(action "acceptRequest") actionParam=m label="groups.requests.accept" class="btn-primary"}}
|
||||
{{d-button action=(action "denyRequest") actionParam=m label="groups.requests.deny" class="btn-danger"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/load-more}}
|
||||
<tbody>
|
||||
{{#each model.requesters as |m|}}
|
||||
<tr>
|
||||
<td class='avatar'>
|
||||
{{user-info user=m skipName=skipName}}
|
||||
</td>
|
||||
<td>
|
||||
<span class="text">{{bound-date m.requested_at}}</span>
|
||||
</td>
|
||||
<td>{{m.reason}}</td>
|
||||
<td>
|
||||
{{#if m.request_undone}}
|
||||
{{i18n "groups.requests.undone"}}
|
||||
{{else if m.request_accepted}}
|
||||
{{i18n "groups.requests.accepted"}}
|
||||
{{d-button action=(action "undoAcceptRequest") actionParam=m label="undo"}}
|
||||
{{else if m.request_denied}}
|
||||
{{i18n "groups.requests.denied"}}
|
||||
{{else}}
|
||||
{{d-button action=(action "acceptRequest") actionParam=m label="groups.requests.accept" class="btn-primary"}}
|
||||
{{d-button action=(action "denyRequest") actionParam=m label="groups.requests.deny" class="btn-danger"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/load-more}}
|
||||
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else}}
|
||||
<div>{{i18n "groups.empty.requests"}}</div>
|
||||
{{/if}}
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else}}
|
||||
<div>{{i18n "groups.empty.requests"}}</div>
|
||||
{{/if}}
|
||||
|
||||
</section>
|
||||
|
|
|
@ -53,13 +53,12 @@
|
|||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="user-content-wrapper">
|
||||
<section class="user-primary-navigation">
|
||||
<div class="container">
|
||||
{{group-navigation group=model currentPath=currentPath tabs=tabs}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{outlet}}
|
||||
</div>
|
||||
<div class="user-content-wrapper">
|
||||
<section class="user-primary-navigation">
|
||||
<div class="container">
|
||||
{{group-navigation group=model currentPath=currentPath tabs=tabs}}
|
||||
</div>
|
||||
</section>
|
||||
{{outlet}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<section class="user-secondary-navigation">
|
||||
<section class="user-secondary-navigation">
|
||||
{{#mobile-nav class='activity-nav' desktopClass='action-list activity-list nav-stacked' currentPath=router._router.currentPath}}
|
||||
{{#if model.can_see_members}}
|
||||
{{group-activity-filter filter="posts" categoryId=category_id}}
|
||||
|
@ -12,4 +12,4 @@
|
|||
</section>
|
||||
<section class="user-content">
|
||||
{{outlet}}
|
||||
</section>
|
||||
</section>
|
||||
|
|
|
@ -11,4 +11,4 @@
|
|||
</section>
|
||||
<section class="user-content">
|
||||
{{outlet}}
|
||||
</section>
|
||||
</section>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<section class="user-secondary-navigation">
|
||||
<section class="user-secondary-navigation">
|
||||
{{#mobile-nav class='messages-nav' desktopClass='nav-stacked action-list' currentPath=router._router.currentPath}}
|
||||
|
||||
<li>
|
||||
{{#link-to 'group.messages.inbox' model.name}}
|
||||
{{i18n 'user.messages.inbox'}}
|
||||
|
@ -14,5 +13,5 @@
|
|||
{{/mobile-nav}}
|
||||
</section>
|
||||
<section class="user-content">
|
||||
{{outlet}}
|
||||
{{outlet}}
|
||||
</section>
|
||||
|
|
|
@ -61,15 +61,15 @@
|
|||
<div class="group-membership">
|
||||
{{#group-membership-button tagName='' model=group showLogin=(route-action "showLogin")}}
|
||||
{{#if group.is_group_owner}}
|
||||
<span class="is-group-owner">
|
||||
{{d-icon "shield-alt"}}
|
||||
{{i18n "groups.index.is_group_owner"}}
|
||||
</span>
|
||||
<span class="is-group-owner">
|
||||
{{d-icon "shield-alt"}}
|
||||
{{i18n "groups.index.is_group_owner"}}
|
||||
</span>
|
||||
{{else if group.is_group_user}}
|
||||
<span class="is-group-member">
|
||||
{{d-icon "check"}}
|
||||
{{i18n "groups.index.is_group_user"}}
|
||||
</span>
|
||||
<span class="is-group-member">
|
||||
{{d-icon "check"}}
|
||||
{{i18n "groups.index.is_group_user"}}
|
||||
</span>
|
||||
{{else if group.public_admission}}
|
||||
{{i18n 'groups.index.public'}}
|
||||
{{else if group.isPrivate}}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<div class="container invites-show clearfix">
|
||||
|
||||
<h2>{{welcomeTitle}}</h2>
|
||||
|
||||
<div class="two-col">
|
||||
|
@ -10,15 +9,18 @@
|
|||
<div class="col-form">
|
||||
{{#if successMessage}}
|
||||
<br><br>
|
||||
<div class='alert alert-info'><p>{{html-safe successMessage}}</p></div>
|
||||
<div class='alert alert-info'>
|
||||
<p>{{html-safe successMessage}}</p>
|
||||
</div>
|
||||
{{else}}
|
||||
<p>{{i18n 'invites.invited_by'}}</p>
|
||||
<p>{{user-info user=invitedBy}}</p>
|
||||
|
||||
<p>{{html-safe yourEmailMessage}}
|
||||
{{#if externalAuthsEnabled}}
|
||||
{{i18n 'invites.social_login_available'}}
|
||||
{{/if}}
|
||||
<p>
|
||||
{{html-safe yourEmailMessage}}
|
||||
{{#if externalAuthsEnabled}}
|
||||
{{i18n 'invites.social_login_available'}}
|
||||
{{/if}}
|
||||
</p>
|
||||
|
||||
<form>
|
||||
|
@ -44,7 +46,8 @@
|
|||
<div class="instructions">
|
||||
{{passwordInstructions}} {{i18n 'invites.optional_description'}}
|
||||
<div class="caps-lock-warning {{unless capsLockOn 'invisible'}}">
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}</div>
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -61,7 +64,8 @@
|
|||
action=(action "submit")
|
||||
type="submit"
|
||||
disabled=submitDisabled
|
||||
label="invites.accept_invite"}}
|
||||
label="invites.accept_invite"
|
||||
}}
|
||||
|
||||
{{#if errorMessage}}
|
||||
<br><br>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{{#if hasIncoming}}
|
||||
<div class="show-mores">
|
||||
<a href class='alert alert-info clickable' {{action showInserted}}>
|
||||
{{count-i18n key="topic_count_" suffix="latest" count=incomingCount}}
|
||||
{{count-i18n key="topic_count_" suffix="latest" count=incomingCount}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -10,50 +10,56 @@
|
|||
{{#if topics}}
|
||||
<table class="topic-list">
|
||||
<tbody>
|
||||
{{#each topics as |t|}}
|
||||
<tr class="topic-list-item {{if t.archived 'archived'}} {{if t.visited 'visited'}}" data-topic-id={{t.id}}>
|
||||
<td>
|
||||
<div class='main-link'>
|
||||
{{topic-status topic=t}}
|
||||
{{topic-link t}}
|
||||
{{raw "list/unread-indicator" includeUnreadIndicator=showUnreadIndicator
|
||||
topicId=t.id
|
||||
unreadClass=(if t.unread_by_group_member "" "read")}}
|
||||
{{#if t.unseen}}
|
||||
<span class="badge-notification new-topic"></span>
|
||||
{{/if}}
|
||||
{{#if t.hasExcerpt}}
|
||||
<div class="topic-excerpt">
|
||||
{{html-safe t.excerpt}}
|
||||
{{#if t.excerptTruncated}}
|
||||
{{#unless t.canClearPin}}<a href={{t.url}}>{{i18n 'read_more'}}</a>{{/unless}}
|
||||
{{/if}}
|
||||
{{#if t.canClearPin}}
|
||||
<a href {{action "clearPin" t}} title={{i18n 'topic.clear_pin.help'}}>{{i18n 'topic.clear_pin.title'}}</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class='pull-right'>
|
||||
{{raw "list/post-count-or-badges" topic=t postBadgesEnabled="true"}}
|
||||
</div>
|
||||
<div class='clearfix'></div>
|
||||
<div class="topic-item-stats clearfix">
|
||||
{{discourse-tags t mode="list" tagsForUser=tagsForUser}}
|
||||
<div class="pull-right">
|
||||
{{raw "list/activity-column" topic=t tagName="div" class="num activity last"}}
|
||||
<a href={{t.lastPostUrl}} title='{{i18n 'last_post'}}: {{raw-date t.bumped_at}}'>{{t.last_poster_username}}</a>
|
||||
</div>
|
||||
{{#unless hideCategory}}
|
||||
<div class='category'>
|
||||
{{category-link t.category}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each topics as |t|}}
|
||||
<tr class="topic-list-item {{if t.archived 'archived'}} {{if t.visited 'visited'}}" data-topic-id={{t.id}}>
|
||||
<td>
|
||||
<div class='main-link'>
|
||||
{{topic-status topic=t}}
|
||||
{{topic-link t}}
|
||||
{{raw "list/unread-indicator"
|
||||
includeUnreadIndicator=showUnreadIndicator
|
||||
topicId=t.id
|
||||
unreadClass=(if t.unread_by_group_member "" "read")
|
||||
}}
|
||||
{{#if t.unseen}}
|
||||
<span class="badge-notification new-topic"></span>
|
||||
{{/if}}
|
||||
{{#if t.hasExcerpt}}
|
||||
<div class="topic-excerpt">
|
||||
{{html-safe t.excerpt}}
|
||||
{{#if t.excerptTruncated}}
|
||||
{{#unless t.canClearPin}}
|
||||
<a href={{t.url}}>{{i18n 'read_more'}}</a>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{#if t.canClearPin}}
|
||||
<a href {{action "clearPin" t}} title={{i18n 'topic.clear_pin.help'}}>
|
||||
{{i18n 'topic.clear_pin.title'}}
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class='pull-right'>
|
||||
{{raw "list/post-count-or-badges" topic=t postBadgesEnabled="true"}}
|
||||
</div>
|
||||
<div class='clearfix'></div>
|
||||
<div class="topic-item-stats clearfix">
|
||||
{{discourse-tags t mode="list" tagsForUser=tagsForUser}}
|
||||
<div class="pull-right">
|
||||
{{raw "list/activity-column" topic=t tagName="div" class="num activity last"}}
|
||||
<a href={{t.lastPostUrl}} title='{{i18n 'last_post'}}: {{raw-date t.bumped_at}}'>{{t.last_poster_username}}</a>
|
||||
</div>
|
||||
{{#unless hideCategory}}
|
||||
<div class='category'>
|
||||
{{category-link t.category}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
|
|
|
@ -9,68 +9,71 @@
|
|||
{{category-title-link category=c}}
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
{{#unless c.isMuted}}
|
||||
{{#if c.description_excerpt}}
|
||||
<tr class="category-description">
|
||||
<td colspan="3">
|
||||
{{html-safe c.description_excerpt}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{#if showTopics}}
|
||||
{{#each c.topics as |t|}}
|
||||
{{mobile-category-topic topic=t}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
||||
{{#if c.isGrandParent}}
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<tr data-category-id={{c.id}} class='subcategory-list-item category' style={{border-color subcategory.color}}>
|
||||
<td>
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
<div class="subcategories-list">
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
{{category-link subsubcategory}}
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{else if c.subcategories}}
|
||||
<tr class="subcategories-list">
|
||||
<td>
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
{{#unless subcategory.isMuted}}
|
||||
{{category-link subcategory}}
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if c.description_excerpt}}
|
||||
<tr class="category-description">
|
||||
<td colspan="3">
|
||||
{{html-safe c.description_excerpt}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if showTopics}}
|
||||
{{#each c.topics as |t|}}
|
||||
{{mobile-category-topic topic=t}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
{{#if c.isGrandParent}}
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
<tr data-category-id={{c.id}} class='subcategory-list-item category' style={{border-color subcategory.color}}>
|
||||
<td>
|
||||
{{category-title-link tagName="h4" category=subcategory}}
|
||||
<div class="subcategories-list">
|
||||
{{#if subcategory.subcategories}}
|
||||
<div class='subcategories'>
|
||||
{{#each subcategory.subcategories as |subsubcategory|}}
|
||||
{{#unless subsubcategory.isMuted}}
|
||||
{{category-link subsubcategory}}
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{else if c.subcategories}}
|
||||
<tr class="subcategories-list">
|
||||
<td>
|
||||
<div class='subcategories'>
|
||||
{{#each c.subcategories as |subcategory|}}
|
||||
{{#unless subcategory.isMuted}}
|
||||
{{category-link subcategory}}
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
</tbody>
|
||||
</table>
|
||||
<footer class="clearfix">
|
||||
<figure title={{i18n 'all_time_desc'}}>{{number c.topics_all_time}} <figcaption>{{i18n 'all_time'}}</figcaption></figure>
|
||||
|
||||
<figure title={{i18n 'all_time_desc'}}>
|
||||
{{number c.topics_all_time}}
|
||||
<figcaption>{{i18n 'all_time'}}</figcaption>
|
||||
</figure>
|
||||
{{#if c.pickMonth}}
|
||||
<figure title={{i18n 'month_desc'}}>{{number c.topics_month}} <figcaption>/ {{i18n 'month'}}</figcaption></figure>
|
||||
<figure title={{i18n 'month_desc'}}>
|
||||
{{number c.topics_month}}
|
||||
<figcaption>/ {{i18n 'month'}}</figcaption>
|
||||
</figure>
|
||||
{{/if}}
|
||||
|
||||
{{#if c.pickWeek}}
|
||||
<figure title={{i18n 'week_desc'}}>{{number c.topics_week}} <figcaption>/ {{i18n 'week'}}</figcaption></figure>
|
||||
<figure title={{i18n 'week_desc'}}>
|
||||
{{number c.topics_week}}
|
||||
<figcaption>/ {{i18n 'week'}}</figcaption>
|
||||
</figure>
|
||||
{{/if}}
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
|
|
@ -1,60 +1,63 @@
|
|||
<section class="user-content">
|
||||
{{text-field value=filterInput
|
||||
{{text-field
|
||||
value=filterInput
|
||||
placeholderKey=filterPlaceholder
|
||||
autocomplete="discourse"
|
||||
class="group-username-filter no-blur"}}
|
||||
class="group-username-filter no-blur"
|
||||
}}
|
||||
|
||||
<div class="group-members-manage">
|
||||
{{#if canManageGroup}}
|
||||
{{#if currentUser.admin}}
|
||||
{{group-members-dropdown
|
||||
showAddMembersModal=(route-action "showAddMembersModal")
|
||||
showBulkAddModal=(route-action "showBulkAddModal")
|
||||
}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
<div class="group-members-manage">
|
||||
{{#if canManageGroup}}
|
||||
{{#if currentUser.admin}}
|
||||
{{group-members-dropdown
|
||||
showAddMembersModal=(route-action "showAddMembersModal")
|
||||
showBulkAddModal=(route-action "showBulkAddModal")
|
||||
}}
|
||||
{{else}}
|
||||
{{d-button
|
||||
icon="plus"
|
||||
label="groups.add_members.title"
|
||||
class="group-members-add"
|
||||
action=(route-action "showAddMembersModal")}}
|
||||
action=(route-action "showAddMembersModal")
|
||||
}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if hasMembers}}
|
||||
{{#load-more selector=".group-members .user-info" action=(action "loadMore")}}
|
||||
<div class="group-members">
|
||||
{{#each model.members as |user|}}
|
||||
<div class="group-member">
|
||||
{{#user-info user=user skipName=skipName}}
|
||||
{{#if user.owner}}<strong class="group-owner-label">{{i18n "groups.owner"}}</strong>{{/if}}
|
||||
|
||||
<div class="group-member-info">
|
||||
<label>{{i18n "last_post"}}</label>
|
||||
<span class="text">{{bound-date user.last_posted_at}}</span>
|
||||
</div>
|
||||
|
||||
<div class="group-member-info">
|
||||
<label>{{i18n "last_seen"}}</label>
|
||||
<span class="text">{{bound-date user.last_seen_at}}</span>
|
||||
</div>
|
||||
|
||||
{{#if canManageGroup}}
|
||||
{{group-member-dropdown
|
||||
member=user
|
||||
onChange=(action "actOnGroup" user)
|
||||
}}
|
||||
{{/if}}
|
||||
{{/user-info}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/load-more}}
|
||||
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else}}
|
||||
<br>
|
||||
|
||||
<div>{{i18n "groups.empty.members"}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if hasMembers}}
|
||||
{{#load-more selector=".group-members .user-info" action=(action "loadMore")}}
|
||||
<div class="group-members">
|
||||
{{#each model.members as |user|}}
|
||||
<div class="group-member">
|
||||
{{#user-info user=user skipName=skipName}}
|
||||
{{#if user.owner}}<strong class="group-owner-label">{{i18n "groups.owner"}}</strong>{{/if}}
|
||||
|
||||
<div class="group-member-info">
|
||||
<label>{{i18n "last_post"}}</label>
|
||||
<span class="text">{{bound-date user.last_posted_at}}</span>
|
||||
</div>
|
||||
|
||||
<div class="group-member-info">
|
||||
<label>{{i18n "last_seen"}}</label>
|
||||
<span class="text">{{bound-date user.last_seen_at}}</span>
|
||||
</div>
|
||||
|
||||
{{#if canManageGroup}}
|
||||
{{group-member-dropdown
|
||||
member=user
|
||||
onChange=(action "actOnGroup" user)
|
||||
}}
|
||||
{{/if}}
|
||||
{{/user-info}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/load-more}}
|
||||
|
||||
{{conditional-loading-spinner condition=loading}}
|
||||
{{else}}
|
||||
<br>
|
||||
|
||||
<div>{{i18n "groups.empty.members"}}</div>
|
||||
{{/if}}
|
||||
</section>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{{#d-modal-body id="bookmark-reminder-modal"}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if errorMessage}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group">
|
||||
|
@ -13,83 +13,83 @@
|
|||
</div>
|
||||
|
||||
{{#if showBookmarkReminderControls}}
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="set_reminder">
|
||||
{{i18n 'post.bookmarks.set_reminder'}}
|
||||
</label>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="set_reminder">
|
||||
{{i18n 'post.bookmarks.set_reminder'}}
|
||||
</label>
|
||||
|
||||
{{#if userHasTimezoneSet}}
|
||||
{{#tap-tile-grid activeTile=selectedReminderType as |grid|}}
|
||||
{{#if showAtDesktop}}
|
||||
{{#tap-tile icon="desktop" tileId=reminderTypes.AT_DESKTOP activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.at_desktop"}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{#if userHasTimezoneSet}}
|
||||
{{#tap-tile-grid activeTile=selectedReminderType as |grid|}}
|
||||
{{#if showAtDesktop}}
|
||||
{{#tap-tile icon="desktop" tileId=reminderTypes.AT_DESKTOP activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.at_desktop"}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
|
||||
{{#if showLaterToday}}
|
||||
{{#tap-tile icon="far-moon" tileId=reminderTypes.LATER_TODAY activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.later_today"}}</div>
|
||||
<div class="tap-tile-date">{{laterTodayFormatted}}</div>
|
||||
{{#if showLaterToday}}
|
||||
{{#tap-tile icon="far-moon" tileId=reminderTypes.LATER_TODAY activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.later_today"}}</div>
|
||||
<div class="tap-tile-date">{{laterTodayFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{#tap-tile icon="far-sun" tileId=reminderTypes.TOMORROW activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.tomorrow"}}</div>
|
||||
<div class="tap-tile-date">{{tomorrowFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{#tap-tile icon="far-sun" tileId=reminderTypes.TOMORROW activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.tomorrow"}}</div>
|
||||
<div class="tap-tile-date">{{tomorrowFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#if showLaterThisWeek}}
|
||||
{{#tap-tile icon="angle-double-right" tileId=reminderTypes.LATER_THIS_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.later_this_week"}}</div>
|
||||
<div class="tap-tile-date">{{laterThisWeekFormatted}}</div>
|
||||
{{#if showLaterThisWeek}}
|
||||
{{#tap-tile icon="angle-double-right" tileId=reminderTypes.LATER_THIS_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.later_this_week"}}</div>
|
||||
<div class="tap-tile-date">{{laterThisWeekFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{#tap-tile icon="briefcase" tileId=reminderTypes.START_OF_NEXT_BUSINESS_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.start_of_next_business_week"}}</div>
|
||||
<div class="tap-tile-date">{{startNextBusinessWeekFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="far-clock" tileId=reminderTypes.NEXT_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.next_week"}}</div>
|
||||
<div class="tap-tile-date">{{nextWeekFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="far-calendar-plus" tileId=reminderTypes.NEXT_MONTH activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.next_month"}}</div>
|
||||
<div class="tap-tile-date">{{nextMonthFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="calendar-alt" tileId=reminderTypes.CUSTOM activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.custom"}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{#tap-tile icon="briefcase" tileId=reminderTypes.START_OF_NEXT_BUSINESS_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.start_of_next_business_week"}}</div>
|
||||
<div class="tap-tile-date">{{startNextBusinessWeekFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="far-clock" tileId=reminderTypes.NEXT_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.next_week"}}</div>
|
||||
<div class="tap-tile-date">{{nextWeekFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="far-calendar-plus" tileId=reminderTypes.NEXT_MONTH activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.next_month"}}</div>
|
||||
<div class="tap-tile-date">{{nextMonthFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{#tap-tile icon="calendar-alt" tileId=reminderTypes.CUSTOM activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.custom"}}</div>
|
||||
{{/tap-tile}}
|
||||
|
||||
{{#if customDateTimeSelected}}
|
||||
<div class="control-group custom-date-time-wrap">
|
||||
<div class="tap-tile-date-input">
|
||||
{{d-icon "calendar-alt"}}
|
||||
{{date-picker-future
|
||||
value=customReminderDate
|
||||
onSelect=(action (mut customReminderDate))
|
||||
}}
|
||||
{{#if customDateTimeSelected}}
|
||||
<div class="control-group custom-date-time-wrap">
|
||||
<div class="tap-tile-date-input">
|
||||
{{d-icon "calendar-alt"}}
|
||||
{{date-picker-future
|
||||
value=customReminderDate
|
||||
onSelect=(action (mut customReminderDate))
|
||||
}}
|
||||
</div>
|
||||
<div class="tap-tile-time-input">
|
||||
{{d-icon "far-clock"}}
|
||||
{{input placeholder="--:--" type="time" class="time-input" value=customReminderTime}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tap-tile-time-input">
|
||||
{{d-icon "far-clock"}}
|
||||
{{input placeholder="--:--" type="time" class="time-input" value=customReminderTime}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if showLastCustom}}
|
||||
{{#tap-tile icon="undo" tileId=reminderTypes.LAST_CUSTOM activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.last_custom"}}</div>
|
||||
<div class="tap-tile-date">{{lastCustomFormatted}}</div>
|
||||
{{#if showLastCustom}}
|
||||
{{#tap-tile icon="undo" tileId=reminderTypes.LAST_CUSTOM activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.last_custom"}}</div>
|
||||
<div class="tap-tile-date">{{lastCustomFormatted}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
|
||||
{{#tap-tile icon="ban" tileId=reminderTypes.NONE activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.none"}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/if}}
|
||||
{{/tap-tile-grid}}
|
||||
|
||||
{{#tap-tile icon="ban" tileId=reminderTypes.NONE activeTile=grid.activeTile onChange=(action "selectReminderType")}}
|
||||
<div class="tap-tile-title">{{i18n "bookmarks.reminders.none"}}</div>
|
||||
{{/tap-tile}}
|
||||
{{/tap-tile-grid}}
|
||||
|
||||
{{else}}
|
||||
<div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=basePath)}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=basePath)}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group">
|
||||
|
|
|
@ -10,117 +10,123 @@
|
|||
{{#if showCreateForm}}
|
||||
<div class="login-form">
|
||||
<form>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="input create-account-email">
|
||||
<td class="label"><label for='new-account-email'>{{i18n 'user.email.title'}}</label></td>
|
||||
<td>
|
||||
{{input type="email" value=accountEmail id="new-account-email" disabled=emailValidated name="email" autofocus="autofocus"}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="instructions create-account-email">
|
||||
<td></td>
|
||||
{{input-tip validation=emailValidation id="account-email-validation"}}
|
||||
<td><label>{{i18n 'user.email.instructions'}}</label></td>
|
||||
</tr>
|
||||
|
||||
{{#if usernameRequired}}
|
||||
<tr class="input">
|
||||
<td class="label"><label for='new-account-username'>{{i18n 'user.username.title'}}</label></td>
|
||||
<td>
|
||||
{{input value=accountUsername id="new-account-username" name="username" maxlength=maxUsernameLength autocomplete="discourse"}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
{{input-tip validation=usernameValidation id="username-validation"}}
|
||||
<td><label>{{i18n 'user.username.instructions'}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{#if fullnameRequired}}
|
||||
<tr class="input">
|
||||
<td class="label">
|
||||
<label for='new-account-name'>{{i18n 'user.name.title'}}</label>
|
||||
</td>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="input create-account-email">
|
||||
<td class="label"><label for='new-account-email'>{{i18n 'user.email.title'}}</label></td>
|
||||
<td>
|
||||
{{text-field value=accountName id="new-account-name"}}
|
||||
{{input type="email" value=accountEmail id="new-account-email" disabled=emailValidated name="email" autofocus="autofocus"}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
|
||||
<tr class="instructions create-account-email">
|
||||
<td></td>
|
||||
{{input-tip validation=nameValidation}}
|
||||
<td><label>{{nameInstructions}}</label></td>
|
||||
{{input-tip validation=emailValidation id="account-email-validation"}}
|
||||
<td><label>{{i18n 'user.email.instructions'}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{plugin-outlet name="create-account-before-password"
|
||||
noTags=true
|
||||
args=(hash accountName=accountName
|
||||
accountUsername=accountUsername
|
||||
accountPassword=accountPassword
|
||||
userFields=userFields
|
||||
authOptions=authOptions)}}
|
||||
{{#if usernameRequired}}
|
||||
<tr class="input">
|
||||
<td class="label"><label for='new-account-username'>{{i18n 'user.username.title'}}</label></td>
|
||||
<td>
|
||||
{{input value=accountUsername id="new-account-username" name="username" maxlength=maxUsernameLength autocomplete="discourse"}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
{{input-tip validation=usernameValidation id="username-validation"}}
|
||||
<td><label>{{i18n 'user.username.instructions'}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{#if passwordRequired}}
|
||||
<tr class="input">
|
||||
{{#if fullnameRequired}}
|
||||
<tr class="input">
|
||||
<td class="label">
|
||||
<label for='new-account-name'>{{i18n 'user.name.title'}}</label>
|
||||
</td>
|
||||
<td>
|
||||
{{text-field value=accountName id="new-account-name"}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
{{input-tip validation=nameValidation}}
|
||||
<td><label>{{nameInstructions}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{plugin-outlet
|
||||
name="create-account-before-password"
|
||||
noTags=true
|
||||
args=(hash
|
||||
accountName=accountName
|
||||
accountUsername=accountUsername
|
||||
accountPassword=accountPassword
|
||||
userFields=userFields
|
||||
authOptions=authOptions
|
||||
)
|
||||
}}
|
||||
|
||||
{{#if passwordRequired}}
|
||||
<tr class="input">
|
||||
<td class="label"><label for='new-account-password'>{{i18n 'user.password.title'}}</label></td>
|
||||
<td>
|
||||
{{password-field value=accountPassword type="password" id="new-account-password" capsLockOn=capsLockOn}}
|
||||
{{password-field value=accountPassword type="password" id="new-account-password" capsLockOn=capsLockOn}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
{{input-tip validation=passwordValidation}}
|
||||
</tr>
|
||||
<tr class="instructions">
|
||||
<td></td>
|
||||
{{input-tip validation=passwordValidation}}
|
||||
<td>
|
||||
<label>{{passwordInstructions}}</label>
|
||||
<div class="caps-lock-warning {{unless capsLockOn 'hidden'}}">
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
<tr class="password-confirmation">
|
||||
<td><label for='new-account-password-confirmation'>{{i18n 'user.password_confirmation.title'}}</label></td>
|
||||
<td>
|
||||
<label>{{passwordInstructions}}</label>
|
||||
<div class="caps-lock-warning {{unless capsLockOn 'hidden'}}">
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}</div>
|
||||
{{honeypot-input id="new-account-confirmation" autocomplete="new-password" value=accountHoneypot}}
|
||||
{{input value=accountChallenge id="new-account-challenge"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
<tr class="password-confirmation">
|
||||
<td><label for='new-account-password-confirmation'>{{i18n 'user.password_confirmation.title'}}</label></td>
|
||||
<td>
|
||||
{{honeypot-input id="new-account-confirmation" autocomplete="new-password" value=accountHoneypot}}
|
||||
{{input value=accountChallenge id="new-account-challenge"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{#if requireInviteCode }}
|
||||
<tr class="invite-code">
|
||||
<td><label for='invite-code'>{{i18n 'user.invite_code.title'}}</label></td>
|
||||
<td>
|
||||
{{input value=inviteCode id="inviteCode"}}
|
||||
</td>
|
||||
<td><label>{{i18n 'user.invite_code.instructions'}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{#if requireInviteCode }}
|
||||
<tr class="invite-code">
|
||||
<td><label for='invite-code'>{{i18n 'user.invite_code.title'}}</label></td>
|
||||
<td>
|
||||
{{input value=inviteCode id="inviteCode"}}
|
||||
</td>
|
||||
|
||||
<td><label>{{i18n 'user.invite_code.instructions'}}</label></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
|
||||
{{plugin-outlet name="create-account-after-password"
|
||||
noTags=true
|
||||
args=(hash accountName=accountName
|
||||
accountUsername=accountUsername
|
||||
accountPassword=accountPassword
|
||||
userFields=userFields)}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{#if userFields}}
|
||||
<div class='user-fields'>
|
||||
{{#each userFields as |f|}}
|
||||
{{user-field field=f.field value=f.value}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{plugin-outlet
|
||||
name="create-account-after-password"
|
||||
noTags=true
|
||||
args=(hash
|
||||
accountName=accountName
|
||||
accountUsername=accountUsername
|
||||
accountPassword=accountPassword
|
||||
userFields=userFields
|
||||
)
|
||||
}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{#if userFields}}
|
||||
<div class='user-fields'>
|
||||
{{#each userFields as |f|}}
|
||||
{{user-field field=f.field value=f.value}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</form>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{/d-modal-body}}
|
||||
|
||||
{{#if showCreateForm}}
|
||||
|
@ -129,7 +135,8 @@
|
|||
class="btn-large btn-primary"
|
||||
action=(action "createAccount")
|
||||
disabled=submitDisabled
|
||||
label="create_account.title"}}
|
||||
label="create_account.title"
|
||||
}}
|
||||
|
||||
{{#conditional-loading-spinner condition=formSubmitted size="small"}}
|
||||
{{#d-button class="btn-large" id="login-link" action=(route-action "showLogin")}}
|
||||
|
@ -137,11 +144,10 @@
|
|||
{{/d-button}}
|
||||
{{/conditional-loading-spinner}}
|
||||
|
||||
<div class='disclaimer'>{{html-safe disclaimerHtml}}</div>
|
||||
<div class='disclaimer'>{{html-safe disclaimerHtml}}</div>
|
||||
</div>
|
||||
|
||||
{{plugin-outlet name="create-account-after-modal-footer" tagName=""}}
|
||||
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/create-account}}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
{{#d-modal-body class="flag-modal-body" title=title}}
|
||||
<form>
|
||||
{{#flag-selection nameKey=selected.name_key flags=flagsAvailable as |f|}}
|
||||
{{flag-action-type flag=f
|
||||
message=message
|
||||
isWarning=isWarning
|
||||
selectedFlag=selected
|
||||
username=model.username
|
||||
staffFlagsAvailable=staffFlagsAvailable
|
||||
changePostActionType=(action "changePostActionType")}}
|
||||
{{/flag-selection}}
|
||||
{{flag-action-type
|
||||
flag=f
|
||||
message=message
|
||||
isWarning=isWarning
|
||||
selectedFlag=selected
|
||||
username=model.username
|
||||
staffFlagsAvailable=staffFlagsAvailable
|
||||
changePostActionType=(action "changePostActionType")
|
||||
}}
|
||||
{{/flag-selection}}
|
||||
</form>
|
||||
{{/d-modal-body}}
|
||||
|
||||
|
@ -19,7 +21,8 @@
|
|||
disabled=submitDisabled
|
||||
title="flagging.submit_tooltip"
|
||||
icon=submitIcon
|
||||
label=submitLabel}}
|
||||
label=submitLabel
|
||||
}}
|
||||
|
||||
{{#if canSendWarning}}
|
||||
{{d-button
|
||||
|
@ -27,7 +30,8 @@
|
|||
action=(action "createFlagAsWarning")
|
||||
disabled=submitDisabled
|
||||
icon="exclamation-triangle"
|
||||
label="flagging.official_warning"}}
|
||||
label="flagging.official_warning"
|
||||
}}
|
||||
{{/if}}
|
||||
|
||||
{{#if canTakeAction}}
|
||||
|
@ -37,7 +41,8 @@
|
|||
disabled=submitDisabled
|
||||
title="flagging.take_action_tooltip"
|
||||
icon="gavel"
|
||||
label="flagging.take_action"}}
|
||||
label="flagging.take_action"
|
||||
}}
|
||||
{{/if}}
|
||||
|
||||
{{#if showDeleteSpammer}}
|
||||
|
@ -46,6 +51,7 @@
|
|||
action=(action "deleteSpammer")
|
||||
disabled=submitDisabled
|
||||
icon="exclamation-triangle"
|
||||
label="flagging.delete_spammer"}}
|
||||
label="flagging.delete_spammer"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
<form {{action "ok" on="submit"}}>
|
||||
{{#d-modal-body title="composer.link_dialog_title" class="insert-link"}}
|
||||
<div class="inputs">
|
||||
{{text-field
|
||||
value=linkUrl
|
||||
placeholderKey="composer.link_url_placeholder"
|
||||
class="link-url"
|
||||
key-up=(action "search")
|
||||
}}
|
||||
{{#if searchLoading}}
|
||||
{{loading-spinner}}
|
||||
{{/if}}
|
||||
{{#if searchResults}}
|
||||
<div class="internal-link-results">
|
||||
{{#each searchResults as |result|}}
|
||||
<a
|
||||
class="search-link"
|
||||
href={{result.url}}
|
||||
onclick={{action "linkClick"}}
|
||||
data-title={{result.title}}>
|
||||
{{topic-status topic=result disableActions=true}}
|
||||
{{replace-emoji result.fancy_title}}
|
||||
<div class="search-category">
|
||||
{{#if result.category.parentCategory}}
|
||||
{{category-link result.category.parentCategory}}
|
||||
{{/if}}
|
||||
{{category-link result.category hideParent=true}}
|
||||
{{discourse-tags result}}
|
||||
</div>
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="inputs">
|
||||
{{text-field value=linkText placeholderKey="composer.link_optional_text" class="link-text"}}
|
||||
</div>
|
||||
<div class="inputs">
|
||||
{{text-field
|
||||
value=linkUrl
|
||||
placeholderKey="composer.link_url_placeholder"
|
||||
class="link-url"
|
||||
key-up=(action "search")
|
||||
}}
|
||||
{{#if searchLoading}}
|
||||
{{loading-spinner}}
|
||||
{{/if}}
|
||||
{{#if searchResults}}
|
||||
<div class="internal-link-results">
|
||||
{{#each searchResults as |result|}}
|
||||
<a
|
||||
class="search-link"
|
||||
href={{result.url}}
|
||||
onclick={{action "linkClick"}}
|
||||
data-title={{result.title}}>
|
||||
{{topic-status topic=result disableActions=true}}
|
||||
{{replace-emoji result.fancy_title}}
|
||||
<div class="search-category">
|
||||
{{#if result.category.parentCategory}}
|
||||
{{category-link result.category.parentCategory}}
|
||||
{{/if}}
|
||||
{{category-link result.category hideParent=true}}
|
||||
{{discourse-tags result}}
|
||||
</div>
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="inputs">
|
||||
{{text-field value=linkText placeholderKey="composer.link_optional_text" class="link-text"}}
|
||||
</div>
|
||||
{{/d-modal-body}}
|
||||
|
||||
<div class="modal-footer">
|
||||
|
|
|
@ -56,21 +56,21 @@
|
|||
</ul>
|
||||
</section>
|
||||
{{#if showBookmarkShortcuts}}
|
||||
<section class="keyboard-shortcuts-bookmark-section">
|
||||
<h4>{{i18n "keyboard_shortcuts_help.bookmarks.title"}}</h4>
|
||||
<ul>
|
||||
<li>{{html-safe shortcuts.bookmarks.enter}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.later_today}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.later_this_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.tomorrow}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_month}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_business_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_business_day}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.custom}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.none}}</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="keyboard-shortcuts-bookmark-section">
|
||||
<h4>{{i18n "keyboard_shortcuts_help.bookmarks.title"}}</h4>
|
||||
<ul>
|
||||
<li>{{html-safe shortcuts.bookmarks.enter}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.later_today}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.later_this_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.tomorrow}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_month}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_business_week}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.next_business_day}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.custom}}</li>
|
||||
<li>{{html-safe shortcuts.bookmarks.none}}</li>
|
||||
</ul>
|
||||
</section>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="column">
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
<div id="rc-scroll-anchor"></div>
|
||||
<table>
|
||||
<thead>
|
||||
<th class="th-cat">{{i18n "categories.category"}}</th>
|
||||
<th class="th-pos">{{i18n "categories.reorder.position"}}</th>
|
||||
<th class="th-cat">{{i18n "categories.category"}}</th>
|
||||
<th class="th-pos">{{i18n "categories.reorder.position"}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each categoriesOrdered as |cat|}}
|
||||
<tr data-category-id={{cat.id}}>
|
||||
<td>
|
||||
<div class={{concat 'reorder-categories-depth-' cat.depth}}>
|
||||
{{category-badge cat allowUncategorized="true"}}
|
||||
</div>
|
||||
</td>
|
||||
{{#each categoriesOrdered as |cat|}}
|
||||
<tr data-category-id={{cat.id}}>
|
||||
<td>
|
||||
<div class={{concat 'reorder-categories-depth-' cat.depth}}>
|
||||
{{category-badge cat allowUncategorized="true"}}
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{number-field number=(readonly cat.position) change=(action 'change' cat)}}
|
||||
{{d-button class="btn-default no-text" action=(action "moveUp") actionParam=cat icon="arrow-up"}}
|
||||
{{d-button class="btn-default no-text" action=(action "moveDown") actionParam=cat icon="arrow-down"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
<td>
|
||||
{{number-field number=(readonly cat.position) change=(action 'change' cat)}}
|
||||
{{d-button class="btn-default no-text" action=(action "moveUp") actionParam=cat icon="arrow-up"}}
|
||||
{{d-button class="btn-default no-text" action=(action "moveDown") actionParam=cat icon="arrow-down"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="rc-scroll-bottom"></div>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{{#d-modal-body}}
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
{{#if errorMessage}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group">
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
{{#d-modal-body}}
|
||||
<section class="user-preferences solo-preference second-factor-backup-preferences">
|
||||
<form class="form-horizontal">
|
||||
{{#if successMessage}}
|
||||
<div class="alert alert-success">
|
||||
{{successMessage}}
|
||||
</div>
|
||||
{{/if}}
|
||||
<section class="user-preferences solo-preference second-factor-backup-preferences">
|
||||
<form class="form-horizontal">
|
||||
{{#if successMessage}}
|
||||
<div class="alert alert-success">
|
||||
{{successMessage}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if errorMessage}}
|
||||
<div class="alert alert-error">
|
||||
{{errorMessage}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if errorMessage}}
|
||||
<div class="alert alert-error">
|
||||
{{errorMessage}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if backupEnabled}}
|
||||
{{html-safe (i18n "user.second_factor_backup.remaining_codes" count=remainingCodes)}}
|
||||
{{/if}}
|
||||
|
||||
<div class="actions">
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "generateSecondFactorCodes")
|
||||
type="submit"
|
||||
disabled=loading
|
||||
label=generateBackupCodeBtnLabel}}
|
||||
{{#if backupEnabled}}
|
||||
{{html-safe (i18n "user.second_factor_backup.remaining_codes" count=remainingCodes)}}
|
||||
{{/if}}
|
||||
|
||||
<div class="actions">
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "disableSecondFactorBackup")
|
||||
class="btn-primary"
|
||||
action=(action "generateSecondFactorCodes")
|
||||
type="submit"
|
||||
disabled=loading
|
||||
label="user.second_factor_backup.disable"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
label=generateBackupCodeBtnLabel}}
|
||||
{{#if backupEnabled}}
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "disableSecondFactorBackup")
|
||||
disabled=loading
|
||||
label="user.second_factor_backup.disable"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#conditional-loading-section isLoading=loading}}
|
||||
{{#if backupCodes}}
|
||||
<h3>{{i18n "user.second_factor_backup.codes.title"}}</h3>
|
||||
{{#conditional-loading-section isLoading=loading}}
|
||||
{{#if backupCodes}}
|
||||
<h3>{{i18n "user.second_factor_backup.codes.title"}}</h3>
|
||||
|
||||
<p>
|
||||
{{i18n "user.second_factor_backup.codes.description"}}
|
||||
</p>
|
||||
<p>
|
||||
{{i18n "user.second_factor_backup.codes.description"}}
|
||||
</p>
|
||||
|
||||
{{backup-codes
|
||||
copyBackupCode=(action "copyBackupCode")
|
||||
backupCodes=backupCodes}}
|
||||
{{/if}}
|
||||
{{/conditional-loading-section}}
|
||||
</form>
|
||||
</section>
|
||||
{{backup-codes
|
||||
copyBackupCode=(action "copyBackupCode")
|
||||
backupCodes=backupCodes}}
|
||||
{{/if}}
|
||||
{{/conditional-loading-section}}
|
||||
</form>
|
||||
</section>
|
||||
{{/d-modal-body}}
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
{{#d-modal-body}}
|
||||
<div class="form-horizontal">
|
||||
{{input type="text" value=model.name}}
|
||||
{{input type="text" value=model.name}}
|
||||
</div>
|
||||
<div class='second-factor instructions'>
|
||||
{{i18n 'user.second_factor.security_key.edit_description'}}
|
||||
</div>
|
||||
{{d-button action=(action "editSecurityKey")
|
||||
{{d-button
|
||||
action=(action "editSecurityKey")
|
||||
class="btn-primary"
|
||||
label="user.second_factor.security_key.edit"}}
|
||||
|
||||
{{d-button action=(action "disableSecurityKey")
|
||||
label="user.second_factor.security_key.edit"
|
||||
}}
|
||||
{{d-button
|
||||
action=(action "disableSecurityKey")
|
||||
class="btn-danger"
|
||||
label="user.second_factor.security_key.delete"}}
|
||||
label="user.second_factor.security_key.delete"
|
||||
}}
|
||||
{{/d-modal-body}}
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
{{#d-modal-body}}
|
||||
<div class="form-horizontal">
|
||||
{{input type="text" value=model.name}}
|
||||
{{input type="text" value=model.name}}
|
||||
</div>
|
||||
<div class='second-factor instructions'>
|
||||
{{i18n 'user.second_factor.edit_description'}}
|
||||
</div>
|
||||
{{d-button action=(action "editSecondFactor")
|
||||
{{d-button
|
||||
action=(action "editSecondFactor")
|
||||
class="btn-primary"
|
||||
label="user.second_factor.edit"}}
|
||||
|
||||
{{d-button action=(action "disableSecondFactor")
|
||||
label="user.second_factor.edit"
|
||||
}}
|
||||
{{d-button
|
||||
action=(action "disableSecondFactor")
|
||||
class="btn-danger"
|
||||
label="user.second_factor.disable"}}
|
||||
label="user.second_factor.disable"
|
||||
}}
|
||||
{{/d-modal-body}}
|
||||
|
|
|
@ -53,7 +53,8 @@
|
|||
|
||||
<div class="instructions">
|
||||
<div class="caps-lock-warning {{unless capsLockOn 'invisible'}}">
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}</div>
|
||||
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{d-button action=(action "submit") class='btn-primary' label='user.change_password.set_password' type='submit'}}
|
||||
|
|
|
@ -1,162 +1,161 @@
|
|||
<section class='user-preferences solo-preference second-factor'>
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
<form class="form-horizontal">
|
||||
|
||||
{{#if showEnforcedNotice}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{i18n 'user.second_factor.enforced_notice'}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if displayOAuthWarning}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
{{i18n 'user.second_factor.oauth_enabled_warning'}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if errorMessage}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if loaded}}
|
||||
<div class="control-group totp">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.totp.title"}}</h2>
|
||||
{{d-button action=(action "createTotp")
|
||||
class="btn-primary new-totp"
|
||||
disabled=loading
|
||||
label="user.second_factor.totp.add"}}
|
||||
{{#each totps as |totp|}}
|
||||
<div class="second-factor-item">
|
||||
{{#if totp.name}}
|
||||
{{totp.name}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor.totp.default_name"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecondFactor" totp)
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group security-key">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.security_key.title"}}</h2>
|
||||
{{d-button action=(action "createSecurityKey")
|
||||
class="btn-primary new-security-key"
|
||||
disabled=loading
|
||||
label="user.second_factor.security_key.add"}}
|
||||
{{#each security_keys as |security_key|}}
|
||||
<div class="second-factor-item">
|
||||
{{#if security_key.name}}
|
||||
{{security_key.name}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor.security_key.default_name"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecurityKey" security_key)
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group pref-second-factor-backup">
|
||||
<div class="controls pref-second-factor-backup">
|
||||
<h2>{{i18n "user.second_factor_backup.title"}}</h2>
|
||||
{{#if model.second_factor_enabled}}
|
||||
{{#if model.second_factor_backup_enabled}}
|
||||
{{html-safe (i18n 'user.second_factor_backup.manage' count=model.second_factor_remaining_backup_codes)}}
|
||||
{{else}}
|
||||
{{i18n 'user.second_factor_backup.enable_long'}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecondFactorBackup")
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit edit-2fa-backup"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor_backup.enable_prerequisites"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if model.second_factor_enabled}}
|
||||
{{#unless showEnforcedNotice}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.disable_title"}}</h2>
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "disableAllSecondFactors")
|
||||
disabled=loading
|
||||
label="disable"}}
|
||||
</div>
|
||||
<form class="form-horizontal">
|
||||
{{#if showEnforcedNotice}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{i18n 'user.second_factor.enforced_notice'}}</div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="control-group">
|
||||
<label class='control-label'>{{i18n 'user.password.title'}}</label>
|
||||
|
||||
<div class="controls">
|
||||
<div>
|
||||
{{text-field value=password
|
||||
id="password"
|
||||
type="password"
|
||||
classNames="input-large"
|
||||
autofocus="autofocus"}}
|
||||
</div>
|
||||
<div class='instructions'>
|
||||
{{i18n 'user.second_factor.confirm_password_description'}}
|
||||
{{#if displayOAuthWarning}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
{{i18n 'user.second_factor.oauth_enabled_warning'}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
type="submit"
|
||||
action=(action "confirmPassword")
|
||||
disabled=loading
|
||||
label="continue"}}
|
||||
{{#if errorMessage}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<div class='alert alert-error'>{{errorMessage}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if loaded}}
|
||||
<div class="control-group totp">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.totp.title"}}</h2>
|
||||
{{d-button action=(action "createTotp")
|
||||
class="btn-primary new-totp"
|
||||
disabled=loading
|
||||
label="user.second_factor.totp.add"}}
|
||||
{{#each totps as |totp|}}
|
||||
<div class="second-factor-item">
|
||||
{{#if totp.name}}
|
||||
{{totp.name}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor.totp.default_name"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecondFactor" totp)
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group security-key">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.security_key.title"}}</h2>
|
||||
{{d-button action=(action "createSecurityKey")
|
||||
class="btn-primary new-security-key"
|
||||
disabled=loading
|
||||
label="user.second_factor.security_key.add"}}
|
||||
{{#each security_keys as |security_key|}}
|
||||
<div class="second-factor-item">
|
||||
{{#if security_key.name}}
|
||||
{{security_key.name}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor.security_key.default_name"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecurityKey" security_key)
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group pref-second-factor-backup">
|
||||
<div class="controls pref-second-factor-backup">
|
||||
<h2>{{i18n "user.second_factor_backup.title"}}</h2>
|
||||
{{#if model.second_factor_enabled}}
|
||||
{{#if model.second_factor_backup_enabled}}
|
||||
{{html-safe (i18n 'user.second_factor_backup.manage' count=model.second_factor_remaining_backup_codes)}}
|
||||
{{else}}
|
||||
{{i18n 'user.second_factor_backup.enable_long'}}
|
||||
{{/if}}
|
||||
|
||||
{{#if isCurrentUser}}
|
||||
{{d-button action=(action "editSecondFactorBackup")
|
||||
class="btn-default btn-small btn-icon pad-left no-text edit edit-2fa-backup"
|
||||
disabled=loading
|
||||
icon="pencil-alt"
|
||||
}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{i18n "user.second_factor_backup.enable_prerequisites"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if model.second_factor_enabled}}
|
||||
{{#unless showEnforcedNotice}}
|
||||
{{cancel-link route="preferences.account" args=model.username}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<h2>{{i18n "user.second_factor.disable_title"}}</h2>
|
||||
{{d-button
|
||||
class="btn-danger"
|
||||
action=(action "disableAllSecondFactors")
|
||||
disabled=loading
|
||||
label="disable"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="control-group">
|
||||
<label class='control-label'>{{i18n 'user.password.title'}}</label>
|
||||
|
||||
<div class="controls">
|
||||
<div>
|
||||
{{text-field value=password
|
||||
id="password"
|
||||
type="password"
|
||||
classNames="input-large"
|
||||
autofocus="autofocus"}}
|
||||
</div>
|
||||
<div class='instructions'>
|
||||
{{i18n 'user.second_factor.confirm_password_description'}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls" style="margin-top: 5px">
|
||||
{{resetPasswordProgress}}
|
||||
{{#unless resetPasswordLoading}}
|
||||
<a href class="instructions" {{action "resetPassword"}}>{{ i18n 'user.second_factor.forgot_password' }}</a>
|
||||
{{/unless}}
|
||||
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
type="submit"
|
||||
action=(action "confirmPassword")
|
||||
disabled=loading
|
||||
label="continue"}}
|
||||
|
||||
{{#unless showEnforcedNotice}}
|
||||
{{cancel-link route="preferences.account" args=model.username}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
<div class="controls" style="margin-top: 5px">
|
||||
{{resetPasswordProgress}}
|
||||
{{#unless resetPasswordLoading}}
|
||||
<a href class="instructions" {{action "resetPassword"}}>{{ i18n 'user.second_factor.forgot_password' }}</a>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</form>
|
||||
{{/if}}
|
||||
</form>
|
||||
{{/conditional-loading-spinner}}
|
||||
</section>
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
<span class='static'>{{model.username}}</span>
|
||||
{{#if model.can_edit_username}}
|
||||
{{#link-to "preferences.username" class="btn btn-default btn-small btn-icon pad-left no-text"}}
|
||||
{{d-icon "pencil-alt"}} {{/link-to}}
|
||||
{{d-icon "pencil-alt"}}
|
||||
{{/link-to}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if siteSettings.enable_mentions}}
|
||||
|
@ -66,37 +67,37 @@
|
|||
{{/if}}
|
||||
|
||||
{{#if canChangePassword}}
|
||||
<div class="control-group pref-password">
|
||||
<label class="control-label">{{i18n 'user.password.title'}}</label>
|
||||
<div class="controls">
|
||||
<a href {{action "changePassword"}} class='btn btn-default'>
|
||||
{{d-icon "envelope"}}
|
||||
{{#if model.no_password}}
|
||||
{{i18n 'user.change_password.set_password'}}
|
||||
{{else}}
|
||||
{{i18n 'user.change_password.action'}}
|
||||
{{/if}}
|
||||
</a>
|
||||
<div class="control-group pref-password">
|
||||
<label class="control-label">{{i18n 'user.password.title'}}</label>
|
||||
<div class="controls">
|
||||
<a href {{action "changePassword"}} class='btn btn-default'>
|
||||
{{d-icon "envelope"}}
|
||||
{{#if model.no_password}}
|
||||
{{i18n 'user.change_password.set_password'}}
|
||||
{{else}}
|
||||
{{i18n 'user.change_password.action'}}
|
||||
{{/if}}
|
||||
</a>
|
||||
|
||||
{{passwordProgress}}
|
||||
{{passwordProgress}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group pref-second-factor">
|
||||
<label class="control-label">{{i18n 'user.second_factor.title'}}</label>
|
||||
{{#unless model.second_factor_enabled}}
|
||||
<label>
|
||||
<div class="control-group pref-second-factor">
|
||||
<label class="control-label">{{i18n 'user.second_factor.title'}}</label>
|
||||
{{#unless model.second_factor_enabled}}
|
||||
<label>
|
||||
{{i18n 'user.second_factor.short_description'}}
|
||||
</label>
|
||||
{{/unless}}
|
||||
<div class="controls pref-second-factor">
|
||||
{{#if isCurrentUser}}
|
||||
{{#link-to "preferences.second-factor" class="btn btn-default"}}
|
||||
{{d-icon "lock"}} <span>{{i18n 'user.second_factor.enable'}}</span>
|
||||
{{/link-to}}
|
||||
{{/if}}
|
||||
</label>
|
||||
{{/unless}}
|
||||
<div class="controls pref-second-factor">
|
||||
{{#if isCurrentUser}}
|
||||
{{#link-to "preferences.second-factor" class="btn btn-default"}}
|
||||
{{d-icon "lock"}} <span>{{i18n 'user.second_factor.enable'}}</span>
|
||||
{{/link-to}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if canUpdateAssociatedAccounts}}
|
||||
|
@ -109,23 +110,23 @@
|
|||
{{#if authProvider.account}}
|
||||
<tr class="{{dasherize authProvider.method.name}} account-connected">
|
||||
<td>{{authProvider.method.prettyName}}</td>
|
||||
<td>{{authProvider.account.description}}</td>
|
||||
<td>
|
||||
{{#if authProvider.method.can_revoke}}
|
||||
{{d-button action=(action "revokeAccount") actionParam=authProvider.account title="user.associated_accounts.revoke" class="btn-danger no-text" icon="trash-alt" disabled=(get revoking authProvider.method.name) }}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>{{authProvider.account.description}}</td>
|
||||
<td>
|
||||
{{#if authProvider.method.can_revoke}}
|
||||
{{d-button action=(action "revokeAccount") actionParam=authProvider.account title="user.associated_accounts.revoke" class="btn-danger no-text" icon="trash-alt" disabled=(get revoking authProvider.method.name) }}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr class={{dasherize authProvider.method.name}}>
|
||||
<td>{{authProvider.method.prettyName}}</td>
|
||||
<td colspan="2">
|
||||
{{#if authProvider.method.can_connect}}
|
||||
{{d-button action=(action "connectAccount") actionParam=authProvider.method label="user.associated_accounts.connect" class="btn-default" icon="plug" disabled=disableConnectButtons}}
|
||||
{{else}}
|
||||
{{i18n 'user.associated_accounts.not_connected'}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{#if authProvider.method.can_connect}}
|
||||
{{d-button action=(action "connectAccount") actionParam=authProvider.method label="user.associated_accounts.connect" class="btn-default" icon="plug" disabled=disableConnectButtons}}
|
||||
{{else}}
|
||||
{{i18n 'user.associated_accounts.not_connected'}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
{{#if model.userApiKeys}}
|
||||
<div class="control-group apps">
|
||||
<label class="control-label">{{i18n 'user.apps'}}</label>
|
||||
<div class="controls">
|
||||
{{#each model.userApiKeys as |key|}}
|
||||
<div>
|
||||
<span>{{key.application_name}}</span>
|
||||
{{#if key.revoked}}
|
||||
{{d-button action=(route-action "undoRevokeApiKey") actionParam=key class="btn" label="user.undo_revoke_access"}}
|
||||
{{else}}
|
||||
{{d-button action=(route-action "revokeApiKey") actionParam=key class="btn" label="user.revoke_access"}}
|
||||
{{/if}}
|
||||
<p>
|
||||
<ul>
|
||||
{{#each key.scopes as |scope|}}
|
||||
<li>{{scope}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</p>
|
||||
<p><span>{{i18n "user.api_approved"}}</span> {{bound-date key.created_at}}</p>
|
||||
<p><span>{{i18n "user.api_last_used_at"}}</span> {{bound-date key.last_used_at}}</p>
|
||||
<div class="control-group apps">
|
||||
<label class="control-label">{{i18n 'user.apps'}}</label>
|
||||
<div class="controls">
|
||||
{{#each model.userApiKeys as |key|}}
|
||||
<div>
|
||||
<span>{{key.application_name}}</span>
|
||||
{{#if key.revoked}}
|
||||
{{d-button action=(route-action "undoRevokeApiKey") actionParam=key class="btn" label="user.undo_revoke_access"}}
|
||||
{{else}}
|
||||
{{d-button action=(route-action "revokeApiKey") actionParam=key class="btn" label="user.revoke_access"}}
|
||||
{{/if}}
|
||||
<p>
|
||||
<ul>
|
||||
{{#each key.scopes as |scope|}}
|
||||
<li>{{scope}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</p>
|
||||
<p><span>{{i18n "user.api_approved"}}</span> {{bound-date key.created_at}}</p>
|
||||
<p><span>{{i18n "user.api_last_used_at"}}</span> {{bound-date key.last_used_at}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{plugin-outlet name="user-preferences-apps" args=(hash model=model)}}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{#unless siteSettings.disable_mailing_list_mode}}
|
||||
{{~#if model.user_option.mailing_list_mode}}
|
||||
<div class="warning-wrap">
|
||||
<div class="warning">{{i18n 'user.mailing_list_mode.warning'}}</div>
|
||||
<div class="warning">{{i18n 'user.mailing_list_mode.warning'}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
{{#if showThemeSelector}}
|
||||
<div class="control-group theme">
|
||||
<label class="control-label">{{i18n 'user.theme'}}</label>
|
||||
<div class="controls">
|
||||
{{combo-box
|
||||
content=userSelectableThemes
|
||||
value=themeId
|
||||
onChange=(action (mut themeId))
|
||||
}}
|
||||
</div>
|
||||
{{#if showThemeSetDefault}}
|
||||
<div class="control-group theme">
|
||||
<label class="control-label">{{i18n 'user.theme'}}</label>
|
||||
<div class="controls">
|
||||
{{preference-checkbox labelKey="user.theme_default_on_all_devices" checked=makeThemeDefault}}
|
||||
{{combo-box
|
||||
content=userSelectableThemes
|
||||
value=themeId
|
||||
onChange=(action (mut themeId))
|
||||
}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if showThemeSetDefault}}
|
||||
<div class="controls">
|
||||
{{preference-checkbox labelKey="user.theme_default_on_all_devices" checked=makeThemeDefault}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group text-size">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="control-group notifications">
|
||||
<label class="control-label">{{i18n 'user.notifications'}}</label>
|
||||
<label class="control-label">{{i18n 'user.notifications'}}</label>
|
||||
|
||||
<div class="controls controls-dropdown">
|
||||
<label>{{i18n 'user.new_topic_duration.label'}}</label>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{{#if canChangeBio}}
|
||||
<div class="control-group pref-bio">
|
||||
<label class="control-label">{{i18n 'user.bio'}}</label>
|
||||
<div class="controls bio-composer input-xxlarge">
|
||||
{{d-editor value=model.bio_raw}}
|
||||
<div class="control-group pref-bio">
|
||||
<label class="control-label">{{i18n 'user.bio'}}</label>
|
||||
<div class="controls bio-composer input-xxlarge">
|
||||
{{d-editor value=model.bio_raw}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group pref-timezone">
|
||||
|
@ -67,7 +67,9 @@
|
|||
<label class="control-label">{{i18n 'user.featured_topic'}}</label>
|
||||
{{#if model.featured_topic}}
|
||||
<label class="featured-topic-link">
|
||||
{{#link-to "topic" model.featured_topic.slug model.featured_topic.id}}{{html-safe (replace-emoji model.featured_topic.fancy_title)}}{{/link-to}}
|
||||
{{#link-to "topic" model.featured_topic.slug model.featured_topic.id}}
|
||||
{{html-safe (replace-emoji model.featured_topic.fancy_title)}}
|
||||
{{/link-to}}
|
||||
</label>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -1,64 +1,67 @@
|
|||
{{#if siteSettings.tagging_enabled}}
|
||||
<div class="control-group tag-notifications">
|
||||
<div class="control-group tag-notifications">
|
||||
<label class="control-label">{{i18n 'user.tag_settings'}}</label>
|
||||
|
||||
<label class="control-label">{{i18n 'user.tag_settings'}}</label>
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-watching" class="icon watching"}} {{i18n 'user.watched_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.watched_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true
|
||||
}}
|
||||
</div>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-watching" class="icon watching"}} {{i18n 'user.watched_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.watched_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
<div class="instructions">{{i18n 'user.watched_tags_instructions'}}</div>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-tracking" class="icon tracking"}} {{i18n 'user.tracked_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.tracked_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
|
||||
<div class="instructions">{{i18n 'user.tracked_tags_instructions'}}</div>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-watching-first" class="icon watching-first-post"}} {{i18n 'user.watched_first_post_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.watching_first_post_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
|
||||
<div class="instructions">
|
||||
{{i18n 'user.watched_first_post_tags_instructions'}}
|
||||
</div>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-muted" class="icon muted"}} {{i18n 'user.muted_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.muted_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
<div class="instructions">{{i18n 'user.muted_tags_instructions'}}</div>
|
||||
</div>
|
||||
<div class="instructions">{{i18n 'user.watched_tags_instructions'}}</div>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-tracking" class="icon tracking"}} {{i18n 'user.tracked_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.tracked_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
<div class="instructions">{{i18n 'user.tracked_tags_instructions'}}</div>
|
||||
{{plugin-outlet name="user-preferences-tags" args=(hash model=model save=(action "save"))}}
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-watching-first" class="icon watching-first-post"}} {{i18n 'user.watched_first_post_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.watching_first_post_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
<div class="instructions">{{i18n 'user.watched_first_post_tags_instructions'}}</div>
|
||||
<br>
|
||||
|
||||
<div class="controls tracking-controls">
|
||||
<label>{{d-icon "d-muted" class="icon muted"}} {{i18n 'user.muted_tags'}}</label>
|
||||
{{tag-chooser
|
||||
tags=model.muted_tags
|
||||
blacklist=selectedTags
|
||||
filterPlaceholder="select_kit.filter_placeholder"
|
||||
allowCreate=false
|
||||
everyTag=true
|
||||
unlimitedTagCount=true}}
|
||||
</div>
|
||||
<div class="instructions">{{i18n 'user.muted_tags_instructions'}}</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{plugin-outlet name="user-preferences-tags" args=(hash model=model save=(action "save"))}}
|
||||
|
||||
<br>
|
||||
|
||||
{{plugin-outlet name="user-custom-controls" args=(hash model=model)}}
|
||||
|
||||
{{save-controls model=model action=(action "save") saved=saved}}
|
||||
{{plugin-outlet name="user-custom-controls" args=(hash model=model)}}
|
||||
|
||||
{{save-controls model=model action=(action "save") saved=saved}}
|
||||
{{/if}}
|
||||
|
|
|
@ -7,29 +7,29 @@
|
|||
<th></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each reviewableTopics as |rt|}}
|
||||
<tr class='reviewable-topic'>
|
||||
<td class="topic-title">
|
||||
<div class='combined-title'>
|
||||
{{topic-status topic=rt}}
|
||||
<a href={{rt.relative_url}} rel="noopener" target="_blank">{{replace-emoji rt.fancy_title}}</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="reviewable-count">
|
||||
{{rt.stats.count}}
|
||||
</td>
|
||||
<td class="reported-by">
|
||||
{{i18n "review.topics.unique_users" count=rt.stats.unique_users}}
|
||||
</td>
|
||||
<td class="reviewable-details">
|
||||
{{reviewable-claimed-topic topicId=rt.id claimedBy=rt.claimed_by}}
|
||||
{{#link-to "review.index" (query-params topic_id=rt.id) class="btn btn-primary btn-small"}}
|
||||
{{d-icon "list"}}
|
||||
<span>{{i18n "review.topics.details"}}</span>
|
||||
{{/link-to}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{#each reviewableTopics as |rt|}}
|
||||
<tr class='reviewable-topic'>
|
||||
<td class="topic-title">
|
||||
<div class='combined-title'>
|
||||
{{topic-status topic=rt}}
|
||||
<a href={{rt.relative_url}} rel="noopener" target="_blank">{{replace-emoji rt.fancy_title}}</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="reviewable-count">
|
||||
{{rt.stats.count}}
|
||||
</td>
|
||||
<td class="reported-by">
|
||||
{{i18n "review.topics.unique_users" count=rt.stats.unique_users}}
|
||||
</td>
|
||||
<td class="reviewable-details">
|
||||
{{reviewable-claimed-topic topicId=rt.id claimedBy=rt.claimed_by}}
|
||||
{{#link-to "review.index" (query-params topic_id=rt.id) class="btn btn-primary btn-small"}}
|
||||
{{d-icon "list"}}
|
||||
<span>{{i18n "review.topics.details"}}</span>
|
||||
{{/link-to}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
|
|
|
@ -5,44 +5,45 @@
|
|||
<div class="list-controls">
|
||||
<div class="container">
|
||||
<section class="navigation-container">
|
||||
|
||||
{{#if showTagFilter}}
|
||||
{{bread-crumbs categories=categories
|
||||
category=category
|
||||
tagId=tag.id
|
||||
noSubcategories=noSubcategories}}
|
||||
|
||||
{{navigation-bar navItems=navItems filterMode=filterMode}}
|
||||
{{else}}
|
||||
<h2 class="tag-show-heading">
|
||||
{{#link-to 'tags'}}{{i18n "tagging.tags"}}{{/link-to}}
|
||||
{{d-icon "angle-right"}}
|
||||
{{discourse-tag-bound tagRecord=tag style="simple"}}
|
||||
{{#each additionalTags as |tag|}}
|
||||
<span>&</span>
|
||||
{{discourse-tag tag style="simple"}}
|
||||
{{/each}}
|
||||
</h2>
|
||||
{{/if}}
|
||||
|
||||
{{#if tagNotification}}
|
||||
{{#unless additionalTags}}
|
||||
{{tag-notifications-button
|
||||
onChange=(action "changeTagNotificationLevel")
|
||||
value=tagNotification.notification_level
|
||||
{{#if showTagFilter}}
|
||||
{{bread-crumbs
|
||||
categories=categories
|
||||
category=category
|
||||
tagId=tag.id
|
||||
noSubcategories=noSubcategories
|
||||
}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{navigation-bar navItems=navItems filterMode=filterMode}}
|
||||
{{else}}
|
||||
<h2 class="tag-show-heading">
|
||||
{{#link-to 'tags'}}{{i18n "tagging.tags"}}{{/link-to}}
|
||||
{{d-icon "angle-right"}}
|
||||
{{discourse-tag-bound tagRecord=tag style="simple"}}
|
||||
{{#each additionalTags as |tag|}}
|
||||
<span>&</span>
|
||||
{{discourse-tag tag style="simple"}}
|
||||
{{/each}}
|
||||
</h2>
|
||||
{{/if}}
|
||||
|
||||
{{create-topic-button
|
||||
canCreateTopic=canCreateTopic
|
||||
disabled=createTopicDisabled
|
||||
label=createTopicLabel
|
||||
action=(route-action "createTopic")}}
|
||||
{{#if tagNotification}}
|
||||
{{#unless additionalTags}}
|
||||
{{tag-notifications-button
|
||||
onChange=(action "changeTagNotificationLevel")
|
||||
value=tagNotification.notification_level
|
||||
}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
|
||||
{{#if showToggleInfo}}
|
||||
{{d-button icon="tag" label="tagging.info" action=(action "toggleInfo") id="show-tag-info"}}
|
||||
{{/if}}
|
||||
{{create-topic-button
|
||||
canCreateTopic=canCreateTopic
|
||||
disabled=createTopicDisabled
|
||||
label=createTopicLabel
|
||||
action=(route-action "createTopic")
|
||||
}}
|
||||
|
||||
{{#if showToggleInfo}}
|
||||
{{d-button icon="tag" label="tagging.info" action=(action "toggleInfo") id="show-tag-info"}}
|
||||
{{/if}}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -52,6 +53,7 @@
|
|||
{{/if}}
|
||||
|
||||
{{plugin-outlet name="discovery-list-container-top"}}
|
||||
|
||||
<div class="container list-container">
|
||||
<div class="row">
|
||||
<div class="full-width">
|
||||
|
@ -59,18 +61,18 @@
|
|||
{{#unless loading}}
|
||||
{{#if list.topics}}
|
||||
{{#discovery-topics-list model=list refresh=(action "refresh")}}
|
||||
{{bulk-select-button selected=selected action=(action "refresh")}}
|
||||
|
||||
{{topic-list topics=list.topics
|
||||
canBulkSelect=canBulkSelect
|
||||
toggleBulkSelect=(action "toggleBulkSelect")
|
||||
bulkSelectEnabled=bulkSelectEnabled
|
||||
selected=selected
|
||||
showPosters=true
|
||||
order=order
|
||||
ascending=ascending
|
||||
changeSort=(action "changeSort")}}
|
||||
|
||||
{{bulk-select-button selected=selected action=(action "refresh")}}
|
||||
{{topic-list
|
||||
topics=list.topics
|
||||
canBulkSelect=canBulkSelect
|
||||
toggleBulkSelect=(action "toggleBulkSelect")
|
||||
bulkSelectEnabled=bulkSelectEnabled
|
||||
selected=selected
|
||||
showPosters=true
|
||||
order=order
|
||||
ascending=ascending
|
||||
changeSort=(action "changeSort")
|
||||
}}
|
||||
{{/discovery-topics-list}}
|
||||
{{else}}
|
||||
<footer class='topic-list-bottom'>
|
||||
|
|
|
@ -91,8 +91,8 @@
|
|||
{{else}}
|
||||
{{d-button icon="times" action=(action "rescind") actionParam=invite label="user.invited.rescind"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
{{#if invite.reinvited}}
|
||||
<div>{{i18n 'user.invited.reinvited'}}</div>
|
||||
{{else}}
|
||||
|
|
|
@ -1,51 +1,49 @@
|
|||
{{plugin-outlet name="above-user-profile" tagName='' args=(hash model=model)}}
|
||||
<div class="container {{if viewingSelf 'viewing-self'}}">
|
||||
{{#d-section class="user-main"}}
|
||||
|
||||
<section class="{{if collapsedInfo 'collapsed-info'}} about {{if hasProfileBackgroundUrl 'has-background' 'no-background'}}" >
|
||||
{{#unless collapsedInfo}}
|
||||
{{#if showStaffCounters}}
|
||||
<div class='staff-counters'>
|
||||
{{#if model.number_of_flags_given}}
|
||||
<div><span class="helpful-flags">{{model.number_of_flags_given}}</span>{{i18n 'user.staff_counters.flags_given'}}</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_flagged_posts}}
|
||||
<div>
|
||||
{{#link-to 'review' (query-params username=model.username status='all' type='ReviewableFlaggedPost')}}
|
||||
<span class="flagged-posts">{{model.number_of_flagged_posts}}</span>{{i18n 'user.staff_counters.flagged_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_rejected_posts}}
|
||||
<div>
|
||||
{{#link-to 'review' (query-params username=model.username status='rejected' type='ReviewableQueuedPost')}}
|
||||
<span class="flagged-posts">{{model.number_of_rejected_posts}}</span>{{i18n 'user.staff_counters.rejected_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if model.number_of_deleted_posts}}
|
||||
<div>
|
||||
{{#link-to 'user.deletedPosts' model}}
|
||||
<span class="deleted-posts">{{model.number_of_deleted_posts}}</span>{{i18n 'user.staff_counters.deleted_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_suspensions}}
|
||||
<div>
|
||||
<a href {{action "showSuspensions"}}>
|
||||
<span class="suspensions">{{model.number_of_suspensions}}</span>{{i18n 'user.staff_counters.suspensions'}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.warnings_received_count}}
|
||||
<div><span class="warnings-received">{{model.warnings_received_count}}</span>{{i18n 'user.staff_counters.warnings_received'}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="user-profile-image" style={{model.profileBackgroundUrl}}></div>
|
||||
{{/unless}}
|
||||
{{#unless collapsedInfo}}
|
||||
{{#if showStaffCounters}}
|
||||
<div class='staff-counters'>
|
||||
{{#if model.number_of_flags_given}}
|
||||
<div><span class="helpful-flags">{{model.number_of_flags_given}}</span>{{i18n 'user.staff_counters.flags_given'}}</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_flagged_posts}}
|
||||
<div>
|
||||
{{#link-to 'review' (query-params username=model.username status='all' type='ReviewableFlaggedPost')}}
|
||||
<span class="flagged-posts">{{model.number_of_flagged_posts}}</span>{{i18n 'user.staff_counters.flagged_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_rejected_posts}}
|
||||
<div>
|
||||
{{#link-to 'review' (query-params username=model.username status='rejected' type='ReviewableQueuedPost')}}
|
||||
<span class="flagged-posts">{{model.number_of_rejected_posts}}</span>{{i18n 'user.staff_counters.rejected_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if model.number_of_deleted_posts}}
|
||||
<div>
|
||||
{{#link-to 'user.deletedPosts' model}}
|
||||
<span class="deleted-posts">{{model.number_of_deleted_posts}}</span>{{i18n 'user.staff_counters.deleted_posts'}}
|
||||
{{/link-to}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.number_of_suspensions}}
|
||||
<div>
|
||||
<a href {{action "showSuspensions"}}>
|
||||
<span class="suspensions">{{model.number_of_suspensions}}</span>{{i18n 'user.staff_counters.suspensions'}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.warnings_received_count}}
|
||||
<div><span class="warnings-received">{{model.warnings_received_count}}</span>{{i18n 'user.staff_counters.warnings_received'}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="user-profile-image" style={{model.profileBackgroundUrl}}></div>
|
||||
{{/unless}}
|
||||
<div class='details'>
|
||||
<div class='primary'>
|
||||
{{user-profile-avatar user=model tagName=""}}
|
||||
|
@ -113,19 +111,19 @@
|
|||
{{/if}}
|
||||
|
||||
<h3 class="location-and-website">
|
||||
{{#if model.location}}<div class="user-profile-location">{{d-icon "map-marker-alt"}} {{model.location}}</div>{{/if}}
|
||||
{{#if model.website_name}}
|
||||
<div class="user-profile-website">
|
||||
{{d-icon "globe"}}
|
||||
{{#if linkWebsite}}
|
||||
{{!-- template-lint-disable --}}
|
||||
<a href={{model.website}} rel="noopener {{unless removeNoFollow 'nofollow ugc'}}" target="_blank">{{model.website_name}}</a>
|
||||
{{else}}
|
||||
<span title={{model.website}}>{{model.website_name}}</span>
|
||||
{{#if model.location}}<div class="user-profile-location">{{d-icon "map-marker-alt"}} {{model.location}}</div>{{/if}}
|
||||
{{#if model.website_name}}
|
||||
<div class="user-profile-website">
|
||||
{{d-icon "globe"}}
|
||||
{{#if linkWebsite}}
|
||||
{{!-- template-lint-disable --}}
|
||||
<a href={{model.website}} rel="noopener {{unless removeNoFollow 'nofollow ugc'}}" target="_blank">{{model.website_name}}</a>
|
||||
{{else}}
|
||||
<span title={{model.website}}>{{model.website_name}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{plugin-outlet name="user-location-and-website" args=(hash model=model)}}
|
||||
{{plugin-outlet name="user-location-and-website" args=(hash model=model)}}
|
||||
</h3>
|
||||
|
||||
<div class='bio'>
|
||||
|
@ -138,7 +136,8 @@
|
|||
{{else}}
|
||||
{{i18n 'user.suspended_notice' date=model.suspendedTillDate}}
|
||||
{{/if}}
|
||||
</b><br>
|
||||
</b>
|
||||
<br>
|
||||
{{#if model.suspend_reason}}
|
||||
<b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}}
|
||||
{{/if}}
|
||||
|
@ -170,97 +169,90 @@
|
|||
</div>
|
||||
</div>
|
||||
{{#unless collapsedInfo}}
|
||||
<div class='secondary'>
|
||||
<dl>
|
||||
{{#if model.created_at}}
|
||||
<div><dt>{{i18n 'user.created'}}</dt><dd>{{bound-date model.created_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.last_posted_at}}
|
||||
<div><dt>{{i18n 'user.last_posted'}}</dt><dd>{{bound-date model.last_posted_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.last_seen_at}}
|
||||
<div><dt>{{i18n 'user.last_seen'}}</dt><dd>{{bound-date model.last_seen_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.profile_view_count}}
|
||||
<div><dt>{{i18n 'views'}}</dt><dd>{{model.profile_view_count}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.invited_by}}
|
||||
<div><dt class="invited-by">{{i18n 'user.invited_by'}}</dt><dd class="invited-by">{{#link-to 'user' model.invited_by}}{{model.invited_by.username}}{{/link-to}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.trust_level}}
|
||||
<div><dt class="trust-level">{{i18n 'user.trust_level'}}</dt><dd class="trust-level">{{model.trustLevel.name}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if canCheckEmails}}
|
||||
<div><dt>{{i18n 'user.email.title'}}</dt>
|
||||
<dd title={{model.email}}>
|
||||
{{#if model.email}}
|
||||
{{model.email}}
|
||||
{{else}}
|
||||
{{d-button action=(route-action "checkEmail") actionParam=model icon="far-envelope" label="admin.users.check_email.text" class="btn-primary"}}
|
||||
{{/if}}
|
||||
</dd>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class='secondary'>
|
||||
<dl>
|
||||
{{#if model.created_at}}
|
||||
<div><dt>{{i18n 'user.created'}}</dt><dd>{{bound-date model.created_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.last_posted_at}}
|
||||
<div><dt>{{i18n 'user.last_posted'}}</dt><dd>{{bound-date model.last_posted_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.last_seen_at}}
|
||||
<div><dt>{{i18n 'user.last_seen'}}</dt><dd>{{bound-date model.last_seen_at}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.profile_view_count}}
|
||||
<div><dt>{{i18n 'views'}}</dt><dd>{{model.profile_view_count}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.invited_by}}
|
||||
<div><dt class="invited-by">{{i18n 'user.invited_by'}}</dt><dd class="invited-by">{{#link-to 'user' model.invited_by}}{{model.invited_by.username}}{{/link-to}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if model.trust_level}}
|
||||
<div><dt class="trust-level">{{i18n 'user.trust_level'}}</dt><dd class="trust-level">{{model.trustLevel.name}}</dd></div>
|
||||
{{/if}}
|
||||
{{#if canCheckEmails}}
|
||||
<div><dt>{{i18n 'user.email.title'}}</dt>
|
||||
<dd title={{model.email}}>
|
||||
{{#if model.email}}
|
||||
{{model.email}}
|
||||
{{else}}
|
||||
{{d-button action=(route-action "checkEmail") actionParam=model icon="far-envelope" label="admin.users.check_email.text" class="btn-primary"}}
|
||||
{{/if}}
|
||||
</dd>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if model.displayGroups}}
|
||||
<div><dt class="groups">{{i18n 'groups.title' count=model.displayGroups.length}}</dt>
|
||||
<dd class='groups'>
|
||||
{{#each model.displayGroups as |group|}}
|
||||
<span>{{#link-to 'group' group.name class="group-link"}}{{group.name}}{{/link-to}}</span>
|
||||
{{/each}}
|
||||
|
||||
{{#if model.displayGroups}}
|
||||
<div><dt class="groups">{{i18n 'groups.title' count=model.displayGroups.length}}</dt>
|
||||
<dd class='groups'>
|
||||
{{#each model.displayGroups as |group|}}
|
||||
<span>{{#link-to 'group' group.name class="group-link"}}{{group.name}}{{/link-to}}</span>
|
||||
{{/each}}
|
||||
{{#link-to "groups" (query-params username=model.username)}}
|
||||
...
|
||||
{{/link-to}}
|
||||
</dd>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#link-to "groups" (query-params username=model.username)}}
|
||||
...
|
||||
{{/link-to}}
|
||||
</dd>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if canDeleteUser}}
|
||||
<div class='pull-right'>{{d-button action=(action "adminDelete") icon="exclamation-triangle" label="user.admin_delete" class="btn-danger"}}</div>
|
||||
{{/if}}
|
||||
</dl>
|
||||
{{plugin-outlet name="user-profile-secondary" args=(hash model=model)}}
|
||||
</div>
|
||||
{{#if canDeleteUser}}
|
||||
<div class='pull-right'>{{d-button action=(action "adminDelete") icon="exclamation-triangle" label="user.admin_delete" class="btn-danger"}}</div>
|
||||
{{/if}}
|
||||
</dl>
|
||||
{{plugin-outlet name="user-profile-secondary" args=(hash model=model)}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
<div class='user-content-wrapper'>
|
||||
|
||||
<section class="user-primary-navigation">
|
||||
{{#mobile-nav class='main-nav' desktopClass="nav nav-pills user-nav" currentPath=currentPath}}
|
||||
{{#unless model.profile_hidden}}
|
||||
<li>{{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'userActivity'}}{{i18n 'user.activity_stream'}}{{/link-to}}</li>
|
||||
{{/unless}}
|
||||
{{#if showNotificationsTab}}
|
||||
<li>
|
||||
{{#link-to 'userNotifications'}}
|
||||
{{d-icon "comment" class="glyph"}}{{i18n 'user.notifications'}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if showPrivateMessages}}
|
||||
<li>{{#link-to 'userPrivateMessages'}}{{d-icon "far-envelope"}}{{i18n 'user.private_messages'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{#if canInviteToForum}}
|
||||
<li>{{#link-to 'userInvited'}}{{d-icon "user-plus"}}{{i18n 'user.invited.title'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{#if showBadges}}
|
||||
<li>{{#link-to 'user.badges'}}{{d-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{plugin-outlet name="user-main-nav" tagName='' connectorTagName='li' args=(hash model=model)}}
|
||||
{{#if model.can_edit}}
|
||||
<li>{{#link-to 'preferences'}}{{d-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{/mobile-nav}}
|
||||
</section>
|
||||
|
||||
{{outlet}}
|
||||
</div>
|
||||
|
||||
<section class="user-primary-navigation">
|
||||
{{#mobile-nav class='main-nav' desktopClass="nav nav-pills user-nav" currentPath=currentPath}}
|
||||
{{#unless model.profile_hidden}}
|
||||
<li>{{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'userActivity'}}{{i18n 'user.activity_stream'}}{{/link-to}}</li>
|
||||
{{/unless}}
|
||||
{{#if showNotificationsTab}}
|
||||
<li>
|
||||
{{#link-to 'userNotifications'}}
|
||||
{{d-icon "comment" class="glyph"}}{{i18n 'user.notifications'}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if showPrivateMessages}}
|
||||
<li>{{#link-to 'userPrivateMessages'}}{{d-icon "far-envelope"}}{{i18n 'user.private_messages'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{#if canInviteToForum}}
|
||||
<li>{{#link-to 'userInvited'}}{{d-icon "user-plus"}}{{i18n 'user.invited.title'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{#if showBadges}}
|
||||
<li>{{#link-to 'user.badges'}}{{d-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{plugin-outlet name="user-main-nav" tagName='' connectorTagName='li' args=(hash model=model)}}
|
||||
{{#if model.can_edit}}
|
||||
<li>{{#link-to 'preferences'}}{{d-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}</li>
|
||||
{{/if}}
|
||||
{{/mobile-nav}}
|
||||
</section>
|
||||
{{outlet}}
|
||||
</div>
|
||||
{{/d-section}}
|
||||
</div>
|
||||
|
|
|
@ -10,34 +10,35 @@
|
|||
{{#link-to 'userActivity.replies'}}{{i18n 'user_action_groups.5'}}{{/link-to}}
|
||||
</li>
|
||||
{{#if user.showDrafts}}
|
||||
<li>
|
||||
{{#link-to 'userActivity.drafts'}}{{i18n 'user_action_groups.15'}}{{/link-to}}
|
||||
</li>
|
||||
<li>
|
||||
{{#link-to 'userActivity.drafts'}}{{i18n 'user_action_groups.15'}}{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li>
|
||||
{{#link-to 'userActivity.likesGiven'}}{{i18n 'user_action_groups.1'}}{{/link-to}}
|
||||
</li>
|
||||
{{#if user.showBookmarks}}
|
||||
{{#if bookmarksWithRemindersEnabled}}
|
||||
<li>
|
||||
{{#link-to 'userActivity.bookmarksWithReminders'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
|
||||
</li>
|
||||
<li>
|
||||
{{#link-to 'userActivity.bookmarksWithReminders'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
|
||||
</li>
|
||||
{{else}}
|
||||
<li>
|
||||
{{#link-to 'userActivity.bookmarks'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
|
||||
</li>
|
||||
<li>
|
||||
{{#link-to 'userActivity.bookmarks'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{plugin-outlet name="user-activity-bottom"
|
||||
connectorTagName='li'
|
||||
args=(hash model=model)}}
|
||||
{{plugin-outlet
|
||||
name="user-activity-bottom"
|
||||
connectorTagName='li'
|
||||
args=(hash model=model)
|
||||
}}
|
||||
{{/mobile-nav}}
|
||||
|
||||
{{/d-section}}
|
||||
{{#if canDownloadPosts}}
|
||||
<section class='user-additional-controls'>
|
||||
{{d-button action=(action "exportUserArchive") class="btn-default" label="user.download_archive.button_text" icon="download"}}
|
||||
</section>
|
||||
<section class='user-additional-controls'>
|
||||
{{d-button action=(action "exportUserArchive") class="btn-default" label="user.download_archive.button_text" icon="download"}}
|
||||
</section>
|
||||
{{/if}}
|
||||
<section class='user-content'>
|
||||
{{outlet}}
|
||||
|
|
|
@ -11,41 +11,41 @@
|
|||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each content as |bookmark|}}
|
||||
<tr class="topic-list-item bookmark-list-item">
|
||||
<td class="main-link">
|
||||
<span class="link-top-line">
|
||||
<div class="bookmark-metadata">
|
||||
{{#if bookmark.name}}
|
||||
<span class="bookmark-metadata-item">
|
||||
{{d-icon "info-circle"}}{{bookmark.name}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if bookmark.reminder_at}}
|
||||
<span class="bookmark-metadata-item">
|
||||
{{d-icon "far-clock"}}{{bookmark.formattedReminder}}
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#each content as |bookmark|}}
|
||||
<tr class="topic-list-item bookmark-list-item">
|
||||
<td class="main-link">
|
||||
<span class="link-top-line">
|
||||
<div class="bookmark-metadata">
|
||||
{{#if bookmark.name}}
|
||||
<span class="bookmark-metadata-item">
|
||||
{{d-icon "info-circle"}}{{bookmark.name}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if bookmark.reminder_at}}
|
||||
<span class="bookmark-metadata-item">
|
||||
{{d-icon "far-clock"}}{{bookmark.formattedReminder}}
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{topic-status topic=bookmark}}
|
||||
{{topic-link bookmark}}
|
||||
</span>
|
||||
{{#if bookmark.excerpt}}
|
||||
<p class="post-excerpt">{{html-safe bookmark.excerpt}}</p>
|
||||
{{/if}}
|
||||
<div class="link-bottom-line">
|
||||
{{category-link bookmark.category}}
|
||||
{{discourse-tags bookmark mode="list" tagsForUser=tagsForUser}}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{format-date bookmark.created_at format="tiny"}}</td>
|
||||
{{raw "list/activity-column" topic=bookmark class="num" tagName="td"}}
|
||||
<td>
|
||||
{{bookmark-actions-dropdown bookmark=bookmark removeBookmark=(action "removeBookmark")}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{topic-status topic=bookmark}}
|
||||
{{topic-link bookmark}}
|
||||
</span>
|
||||
{{#if bookmark.excerpt}}
|
||||
<p class="post-excerpt">{{html-safe bookmark.excerpt}}</p>
|
||||
{{/if}}
|
||||
<div class="link-bottom-line">
|
||||
{{category-link bookmark.category}}
|
||||
{{discourse-tags bookmark mode="list" tagsForUser=tagsForUser}}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{format-date bookmark.created_at format="tiny"}}</td>
|
||||
{{raw "list/activity-column" topic=bookmark class="num" tagName="td"}}
|
||||
<td>
|
||||
{{bookmark-actions-dropdown bookmark=bookmark removeBookmark=(action "removeBookmark")}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{conditional-loading-spinner condition=loadingMore}}
|
||||
|
|
|
@ -56,9 +56,7 @@
|
|||
{{/d-section}}
|
||||
|
||||
<section class='user-content'>
|
||||
|
||||
<div class="list-actions">
|
||||
|
||||
<div class="list-actions">
|
||||
{{#unless site.mobileView}}
|
||||
{{#if showToggleBulkSelect}}
|
||||
{{d-button
|
||||
|
@ -106,7 +104,6 @@
|
|||
onChange=(action "changeGroupNotificationLevel")
|
||||
}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{outlet}}
|
||||
</div>
|
||||
{{outlet}}
|
||||
</section>
|
||||
|
|
|
@ -32,15 +32,17 @@
|
|||
{{/d-section}}
|
||||
|
||||
{{#if model}}
|
||||
<section class="user-additional-controls">
|
||||
{{d-button title='user.dismiss_notifications_tooltip'
|
||||
class='btn btn-default dismiss-notifications'
|
||||
action=(action "resetNew")
|
||||
label='user.dismiss_notifications'
|
||||
icon='check'
|
||||
disabled=allNotificationsRead}}
|
||||
</section>
|
||||
{{/if}}
|
||||
<section class="user-additional-controls">
|
||||
{{d-button
|
||||
title='user.dismiss_notifications_tooltip'
|
||||
class='btn btn-default dismiss-notifications'
|
||||
action=(action "resetNew")
|
||||
label='user.dismiss_notifications'
|
||||
icon='check'
|
||||
disabled=allNotificationsRead
|
||||
}}
|
||||
</section>
|
||||
{{/if}}
|
||||
|
||||
<section class='user-content'>
|
||||
{{#load-more class="notification-history user-stream" selector=".user-stream .notification" action=(action "loadMore")}}
|
||||
|
|
|
@ -1,163 +1,163 @@
|
|||
{{#d-section pageClass="user-summary" tagName=""}}
|
||||
<div class="user-content">
|
||||
<div class='top-section stats-section'>
|
||||
<h3 class='stats-title'>{{i18n "user.summary.stats"}}</h3>
|
||||
<ul>
|
||||
<li>
|
||||
{{user-stat value=model.days_visited label="user.summary.days_visited"}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=timeRead label="user.summary.time_read" type="string"}}
|
||||
</li>
|
||||
{{#if showRecentTimeRead}}
|
||||
<div class="user-content">
|
||||
<div class='top-section stats-section'>
|
||||
<h3 class='stats-title'>{{i18n "user.summary.stats"}}</h3>
|
||||
<ul>
|
||||
<li>
|
||||
{{user-stat value=recentTimeRead label="user.summary.recent_time_read" type="string"}}
|
||||
{{user-stat value=model.days_visited label="user.summary.days_visited"}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=timeRead label="user.summary.time_read" type="string"}}
|
||||
</li>
|
||||
{{#if showRecentTimeRead}}
|
||||
<li>
|
||||
{{user-stat value=recentTimeRead label="user.summary.recent_time_read" type="string"}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li>
|
||||
{{user-stat value=model.topics_entered label="user.summary.topics_entered"}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=model.posts_read_count label="user.summary.posts_read"}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li>
|
||||
{{user-stat value=model.topics_entered label="user.summary.topics_entered"}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=model.posts_read_count label="user.summary.posts_read"}}
|
||||
</li>
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.likesGiven'}}
|
||||
{{user-stat value=model.likes_given icon="heart" label="user.summary.likes_given"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{#if model.bookmark_count}}
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.bookmarks'}}
|
||||
{{user-stat value=model.bookmark_count label="user.summary.bookmark_count"}}
|
||||
{{#link-to 'userActivity.likesGiven'}}
|
||||
{{user-stat value=model.likes_given icon="heart" label="user.summary.likes_given"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.topics'}}
|
||||
{{user-stat value=model.topic_count label="user.summary.topic_count"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.replies'}}
|
||||
{{user-stat value=model.post_count label="user.summary.post_count"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=model.likes_received icon="heart" label="user.summary.likes_received"}}
|
||||
</li>
|
||||
{{plugin-outlet name="user-summary-stat" tagName="" connectorTagName="li" args=(hash model=model)}}
|
||||
</ul>
|
||||
</div>
|
||||
{{#if model.bookmark_count}}
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.bookmarks'}}
|
||||
{{user-stat value=model.bookmark_count label="user.summary.bookmark_count"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.topics'}}
|
||||
{{user-stat value=model.topic_count label="user.summary.topic_count"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
<li class="linked-stat">
|
||||
{{#link-to 'userActivity.replies'}}
|
||||
{{user-stat value=model.post_count label="user.summary.post_count"}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
<li>
|
||||
{{user-stat value=model.likes_received icon="heart" label="user.summary.likes_received"}}
|
||||
</li>
|
||||
{{plugin-outlet name="user-summary-stat" tagName="" connectorTagName="li" args=(hash model=model)}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class='top-section'>
|
||||
{{#user-summary-section title="top_replies" class="replies-section pull-left"}}
|
||||
{{#user-summary-topics-list type="replies" items=model.replies user=user as |reply|}}
|
||||
{{user-summary-topic
|
||||
createdAt=reply.createdAt
|
||||
topic=reply.topic
|
||||
likes=reply.like_count
|
||||
url=reply.url}}
|
||||
{{/user-summary-topics-list}}
|
||||
{{/user-summary-section}}
|
||||
<div class='top-section'>
|
||||
{{#user-summary-section title="top_replies" class="replies-section pull-left"}}
|
||||
{{#user-summary-topics-list type="replies" items=model.replies user=user as |reply|}}
|
||||
{{user-summary-topic
|
||||
createdAt=reply.createdAt
|
||||
topic=reply.topic
|
||||
likes=reply.like_count
|
||||
url=reply.url}}
|
||||
{{/user-summary-topics-list}}
|
||||
{{/user-summary-section}}
|
||||
|
||||
{{#user-summary-section title="top_topics" class="topics-section pull-right"}}
|
||||
{{#user-summary-topics-list type="topics" items=model.topics user=user as |topic|}}
|
||||
{{user-summary-topic
|
||||
createdAt=topic.created_at
|
||||
topic=topic
|
||||
likes=topic.like_count
|
||||
url=topic.url}}
|
||||
{{/user-summary-topics-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
|
||||
<div class='top-section'>
|
||||
{{#user-summary-section title="top_links" class="links-section pull-left"}}
|
||||
{{#if model.links.length}}
|
||||
<ul>
|
||||
{{!-- template-lint-disable --}}
|
||||
{{#each model.links as |link|}}
|
||||
<li>
|
||||
<a class='domain'
|
||||
href={{link.url}}
|
||||
title={{link.title}}
|
||||
rel='noopener {{unless user.removeNoFollow 'nofollow ugc'}}'
|
||||
target='_blank'>
|
||||
{{shorten-url link.url}}
|
||||
</a>
|
||||
<span class='badge badge-notification clicks' title='{{i18n 'topic_map.clicks' count=link.clicks}}'>{{number link.clicks}}</span>
|
||||
<br>
|
||||
<a href="{{link.post_url}}">{{html-safe link.topic.fancyTitle}}</a>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p>{{i18n "user.summary.no_links"}}</p>
|
||||
{{/if}}
|
||||
{{/user-summary-section}}
|
||||
|
||||
{{#user-summary-section title="most_replied_to_users" class="summary-user-list replied-section pull-right"}}
|
||||
{{#user-summary-users-list none="no_replies" users=model.most_replied_to_users as |user|}}
|
||||
{{user-summary-user user=user icon="reply" countClass="replies"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
|
||||
<div class='top-section most-liked-section'>
|
||||
{{#user-summary-section title="most_liked_by" class="summary-user-list liked-by-section pull-left"}}
|
||||
{{#user-summary-users-list none="no_likes" users=model.most_liked_by_users as |user|}}
|
||||
{{user-summary-user user=user icon="heart" countClass="likes"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
|
||||
{{#user-summary-section title="most_liked_users" class="summary-user-list liked-section pull-right"}}
|
||||
{{#user-summary-users-list none="no_likes" users=model.most_liked_users as |user|}}
|
||||
{{user-summary-user user=user icon="heart" countClass="likes"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
|
||||
{{#if model.top_categories.length}}
|
||||
<div class='top-section top-categories-section'>
|
||||
{{#user-summary-section title="top_categories" class="summary-category-list pull-left"}}
|
||||
<table>
|
||||
<thead>
|
||||
<th class="category-link"></th>
|
||||
<th class='topic-count'>{{i18n "user.summary.topics"}}</th>
|
||||
<th class='reply-count'>{{i18n "user.summary.replies"}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model.top_categories as |category|}}
|
||||
<tr>
|
||||
<td class="category-link">
|
||||
{{category-link category allowUncategorized="true" hideParent=false}}
|
||||
</td>
|
||||
<td class='topic-count'>
|
||||
{{user-summary-category-search user=user category=category count=category.topic_count}}
|
||||
</td>
|
||||
<td class='reply-count'>
|
||||
{{user-summary-category-search user=user category=category count=category.post_count}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{#user-summary-section title="top_topics" class="topics-section pull-right"}}
|
||||
{{#user-summary-topics-list type="topics" items=model.topics user=user as |topic|}}
|
||||
{{user-summary-topic
|
||||
createdAt=topic.created_at
|
||||
topic=topic
|
||||
likes=topic.like_count
|
||||
url=topic.url}}
|
||||
{{/user-summary-topics-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if siteSettings.enable_badges}}
|
||||
<div class='top-section badges-section'>
|
||||
<h3 class='stats-title'>{{i18n "user.summary.top_badges"}}</h3>
|
||||
{{#each model.badges as |badge|}}
|
||||
{{badge-card badge=badge count=badge.count username=user.username_lower}}
|
||||
{{else}}
|
||||
<p>{{i18n "user.summary.no_badges"}}</p>
|
||||
{{/each}}
|
||||
{{#if moreBadges}}
|
||||
<p>{{#link-to "user.badges" user class="more"}}{{i18n "user.summary.more_badges"}}{{/link-to}}</p>
|
||||
{{/if}}
|
||||
<div class='top-section'>
|
||||
{{#user-summary-section title="top_links" class="links-section pull-left"}}
|
||||
{{#if model.links.length}}
|
||||
<ul>
|
||||
{{!-- template-lint-disable --}}
|
||||
{{#each model.links as |link|}}
|
||||
<li>
|
||||
<a class='domain'
|
||||
href={{link.url}}
|
||||
title={{link.title}}
|
||||
rel='noopener {{unless user.removeNoFollow 'nofollow ugc'}}'
|
||||
target='_blank'>
|
||||
{{shorten-url link.url}}
|
||||
</a>
|
||||
<span class='badge badge-notification clicks' title='{{i18n 'topic_map.clicks' count=link.clicks}}'>{{number link.clicks}}</span>
|
||||
<br>
|
||||
<a href="{{link.post_url}}">{{html-safe link.topic.fancyTitle}}</a>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p>{{i18n "user.summary.no_links"}}</p>
|
||||
{{/if}}
|
||||
{{/user-summary-section}}
|
||||
|
||||
{{#user-summary-section title="most_replied_to_users" class="summary-user-list replied-section pull-right"}}
|
||||
{{#user-summary-users-list none="no_replies" users=model.most_replied_to_users as |user|}}
|
||||
{{user-summary-user user=user icon="reply" countClass="replies"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class='top-section most-liked-section'>
|
||||
{{#user-summary-section title="most_liked_by" class="summary-user-list liked-by-section pull-left"}}
|
||||
{{#user-summary-users-list none="no_likes" users=model.most_liked_by_users as |user|}}
|
||||
{{user-summary-user user=user icon="heart" countClass="likes"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
|
||||
{{#user-summary-section title="most_liked_users" class="summary-user-list liked-section pull-right"}}
|
||||
{{#user-summary-users-list none="no_likes" users=model.most_liked_users as |user|}}
|
||||
{{user-summary-user user=user icon="heart" countClass="likes"}}
|
||||
{{/user-summary-users-list}}
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
|
||||
{{#if model.top_categories.length}}
|
||||
<div class='top-section top-categories-section'>
|
||||
{{#user-summary-section title="top_categories" class="summary-category-list pull-left"}}
|
||||
<table>
|
||||
<thead>
|
||||
<th class="category-link"></th>
|
||||
<th class='topic-count'>{{i18n "user.summary.topics"}}</th>
|
||||
<th class='reply-count'>{{i18n "user.summary.replies"}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model.top_categories as |category|}}
|
||||
<tr>
|
||||
<td class="category-link">
|
||||
{{category-link category allowUncategorized="true" hideParent=false}}
|
||||
</td>
|
||||
<td class='topic-count'>
|
||||
{{user-summary-category-search user=user category=category count=category.topic_count}}
|
||||
</td>
|
||||
<td class='reply-count'>
|
||||
{{user-summary-category-search user=user category=category count=category.post_count}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/user-summary-section}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if siteSettings.enable_badges}}
|
||||
<div class='top-section badges-section'>
|
||||
<h3 class='stats-title'>{{i18n "user.summary.top_badges"}}</h3>
|
||||
{{#each model.badges as |badge|}}
|
||||
{{badge-card badge=badge count=badge.count username=user.username_lower}}
|
||||
{{else}}
|
||||
<p>{{i18n "user.summary.no_badges"}}</p>
|
||||
{{/each}}
|
||||
{{#if moreBadges}}
|
||||
<p>{{#link-to "user.badges" user class="more"}}{{i18n "user.summary.more_badges"}}{{/link-to}}</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/d-section}}
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
</span>
|
||||
{{else}}
|
||||
{{#if selectKit.filter}}
|
||||
{{#if selectKit.hasNoContent}}
|
||||
<span class="no-content">
|
||||
{{i18n "select_kit.no_content"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if selectKit.hasNoContent}}
|
||||
<span class="no-content">
|
||||
{{i18n "select_kit.no_content"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#each collections as |collection|}}
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
</span>
|
||||
{{else}}
|
||||
{{#if selectKit.filter}}
|
||||
{{#if selectKit.hasNoContent}}
|
||||
<span class="no-content">
|
||||
{{i18n "select_kit.no_content"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if selectKit.hasNoContent}}
|
||||
<span class="no-content">
|
||||
{{i18n "select_kit.no_content"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#each collections as |collection|}}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue