DEV: enforces block-indentation of ember-template-lint rules (#9408)

This commit is contained in:
Joffrey JAFFEUX 2020-04-13 17:17:20 +02:00 committed by GitHub
parent a863d8eecb
commit b66b277dc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
101 changed files with 2543 additions and 2489 deletions

View File

@ -6,7 +6,7 @@ module.exports = {
// "eol-last": "always", // "eol-last": "always",
rules: { rules: {
"block-indentation": false, "block-indentation": true,
"deprecated-render-helper": true, "deprecated-render-helper": true,
"img-alt-attributes": false, "img-alt-attributes": false,
"linebreak-style": true, "linebreak-style": true,

View File

@ -1,35 +1,33 @@
{{#admin-wrapper class="container"}} {{#admin-wrapper class="container"}}
<div class="row"> <div class="row">
<div class="full-width"> <div class="full-width">
<div class="admin-main-nav"> <div class="admin-main-nav">
<ul class="nav nav-pills">
<ul class="nav nav-pills"> {{nav-item route='admin.dashboard' label='admin.dashboard.title'}}
{{#if currentUser.admin}}
{{nav-item route='admin.dashboard' label='admin.dashboard.title'}} {{nav-item route='adminSiteSettings' label='admin.site_settings.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'}}
{{/if}} {{/if}}
{{/if}} {{nav-item route='adminUsersList' label='admin.users.title'}}
{{nav-item route='adminPlugins' label='admin.plugins.title'}} {{#if showGroups}}
{{plugin-outlet name="admin-menu" connectorTagName="" tagName=""}} {{nav-item route='groups' label='admin.groups.title'}}
</ul> {{/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>
<div class='boxed white admin-content'> <div class='boxed white admin-content'>
@ -37,7 +35,6 @@
{{outlet}} {{outlet}}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{{/admin-wrapper}} {{/admin-wrapper}}

View File

@ -6,65 +6,65 @@
{{#if model}} {{#if model}}
<table class="api-keys grid"> <table class="api-keys grid">
<thead> <thead>
<th>{{i18n "admin.api.key"}}</th> <th>{{i18n "admin.api.key"}}</th>
<th>{{i18n "admin.api.description"}}</th> <th>{{i18n "admin.api.description"}}</th>
<th>{{i18n "admin.api.user"}}</th> <th>{{i18n "admin.api.user"}}</th>
<th>{{i18n "admin.api.created"}}</th> <th>{{i18n "admin.api.created"}}</th>
<th>{{i18n "admin.api.last_used"}}</th> <th>{{i18n "admin.api.last_used"}}</th>
<th>&nbsp;</th> <th>&nbsp;</th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |k|}} {{#each model as |k|}}
<tr class={{if k.revoked_at "revoked"}}> <tr class={{if k.revoked_at "revoked"}}>
<td class="key"> <td class="key">
{{#if k.revoked_at}}{{d-icon 'times-circle'}}{{/if}} {{#if k.revoked_at}}{{d-icon 'times-circle'}}{{/if}}
{{k.truncatedKey}} {{k.truncatedKey}}
</td> </td>
<td class="key-description"> <td class="key-description">
{{k.shortDescription}} {{k.shortDescription}}
</td> </td>
<td class="key-user"> <td class="key-user">
<div class="label">{{i18n 'admin.api.user'}}</div> <div class="label">{{i18n 'admin.api.user'}}</div>
{{#if k.user}} {{#if k.user}}
{{#link-to "adminUser" k.user}} {{#link-to "adminUser" k.user}}
{{avatar k.user imageSize="small"}} {{avatar k.user imageSize="small"}}
{{/link-to}} {{/link-to}}
{{else}} {{else}}
{{i18n "admin.api.all_users"}} {{i18n "admin.api.all_users"}}
{{/if}} {{/if}}
</td> </td>
<td class="key-created"> <td class="key-created">
<div class="label">{{i18n 'admin.api.created'}}</div> <div class="label">{{i18n 'admin.api.created'}}</div>
{{format-date k.created_at}} {{format-date k.created_at}}
</td> </td>
<td class="key-last-used"> <td class="key-last-used">
<div class="label">{{i18n 'admin.api.last_used'}}</div> <div class="label">{{i18n 'admin.api.last_used'}}</div>
{{#if k.last_used_at}} {{#if k.last_used_at}}
{{format-date k.last_used_at}} {{format-date k.last_used_at}}
{{else}} {{else}}
{{i18n "admin.api.never_used"}} {{i18n "admin.api.never_used"}}
{{/if}} {{/if}}
</td> </td>
<td class="key-controls"> <td class="key-controls">
{{d-button action=(route-action "show" k) icon="far-eye" title="admin.api.show_details"}} {{d-button action=(route-action "show" k) icon="far-eye" title="admin.api.show_details"}}
{{#if k.revoked_at}} {{#if k.revoked_at}}
{{d-button {{d-button
action=(action "undoRevokeKey") action=(action "undoRevokeKey")
actionParam=k icon="undo" actionParam=k icon="undo"
title="admin.api.undo_revoke"}} title="admin.api.undo_revoke"}}
{{else}} {{else}}
{{d-button {{d-button
class="btn-danger" class="btn-danger"
action=(action "revokeKey") action=(action "revokeKey")
actionParam=k actionParam=k
icon="times" icon="times"
title="admin.api.revoke"}} title="admin.api.revoke"}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}
<p>{{i18n "admin.api.none"}}</p> <p>{{i18n "admin.api.none"}}</p>

View File

@ -30,11 +30,11 @@
{{#admin-form-row label="admin.api.user"}} {{#admin-form-row label="admin.api.user"}}
{{#if model.user}} {{#if model.user}}
{{#link-to "adminUser" model.user}} {{#link-to "adminUser" model.user}}
{{avatar model.user imageSize="small"}} {{model.user.username}} {{avatar model.user imageSize="small"}} {{model.user.username}}
{{/link-to}} {{/link-to}}
{{else}} {{else}}
{{i18n "admin.api.all_users"}} {{i18n "admin.api.all_users"}}
{{/if}} {{/if}}
{{/admin-form-row}} {{/admin-form-row}}

View File

@ -41,57 +41,57 @@
<th></th> <th></th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |backup|}} {{#each model as |backup|}}
<tr> <tr>
<td class="backup-filename">{{backup.filename}}</td> <td class="backup-filename">{{backup.filename}}</td>
<td class="backup-size">{{human-size backup.size}}</td> <td class="backup-size">{{human-size backup.size}}</td>
<td class="backup-controls"> <td class="backup-controls">
<div> <div>
{{d-button class="btn-default download" {{d-button class="btn-default download"
action=(action "download") action=(action "download")
actionParam=backup actionParam=backup
icon="download" icon="download"
title="admin.backups.operations.download.title" title="admin.backups.operations.download.title"
label="admin.backups.operations.download.label"}} label="admin.backups.operations.download.label"}}
{{#if status.isOperationRunning}} {{#if status.isOperationRunning}}
{{d-button {{d-button
icon="far-trash-alt" icon="far-trash-alt"
action=(route-action "destroyBackup") action=(route-action "destroyBackup")
actionParam=backup class="btn-danger" actionParam=backup class="btn-danger"
disabled="true" disabled="true"
title="admin.backups.operations.is_running"}} title="admin.backups.operations.is_running"}}
{{d-button {{d-button
icon="play" icon="play"
action=(route-action "startRestore") action=(route-action "startRestore")
actionParam=backup disabled=status.restoreDisabled actionParam=backup disabled=status.restoreDisabled
class="btn-default" class="btn-default"
title=restoreTitle title=restoreTitle
label="admin.backups.operations.restore.label"}} label="admin.backups.operations.restore.label"}}
{{else}} {{else}}
{{d-button {{d-button
icon="far-trash-alt" icon="far-trash-alt"
action=(route-action "destroyBackup") action=(route-action "destroyBackup")
actionParam=backup actionParam=backup
class="btn-danger" class="btn-danger"
title="admin.backups.operations.destroy.title"}} title="admin.backups.operations.destroy.title"}}
{{d-button {{d-button
icon="play" icon="play"
action=(route-action "startRestore") action=(route-action "startRestore")
actionParam=backup actionParam=backup
disabled=status.restoreDisabled disabled=status.restoreDisabled
class="btn-default btn-restore" class="btn-default btn-restore"
title=restoreTitle title=restoreTitle
label="admin.backups.operations.restore.label"}} label="admin.backups.operations.restore.label"}}
{{/if}} {{/if}}
</div> </div>
</td> </td>
</tr> </tr>
{{else}} {{else}}
<tr> <tr>
<td>{{i18n "admin.backups.none"}}</td> <td>{{i18n "admin.backups.none"}}</td>
<td></td> <td></td>
<td></td> <td></td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -8,7 +8,7 @@
{{data.x}} {{data.x}}
</span> </span>
<span class="value"> <span class="value">
{{number data.y}} {{number data.y}}
</span> </span>
</a> </a>
{{/each}} {{/each}}

View File

@ -1,202 +1,202 @@
{{#if isEnabled}} {{#if isEnabled}}
{{#conditional-loading-section isLoading=isLoading}} {{#conditional-loading-section isLoading=isLoading}}
{{#if showHeader}} {{#if showHeader}}
<div class="header"> <div class="header">
{{#if showTitle}} {{#if showTitle}}
<ul class="breadcrumb"> <ul class="breadcrumb">
{{#if showAllReportsLink}} {{#if showAllReportsLink}}
<li class="item all-reports"> <li class="item all-reports">
{{#link-to "admin.dashboardReports" class="report-url"}} {{#link-to "admin.dashboardReports" class="report-url"}}
{{i18n "admin.dashboard.all_reports"}} {{i18n "admin.dashboard.all_reports"}}
{{/link-to}} {{/link-to}}
</li> </li>
{{#unless showNotFoundError}}
<li class="item separator">|</li>
{{/unless}}
{{/if}}
{{#unless showNotFoundError}} {{#unless showNotFoundError}}
<li class="item separator">|</li> <li class="item report">
{{/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}}
<a href={{model.reportUrl}} class="report-url"> <a href={{model.reportUrl}} class="report-url">
<span> {{model.title}}
{{#if model.title}}
{{model.title}}
{{/if}}
{{i18n "admin.dashboard.reports.no_data"}}
</span>
</a> </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}} {{else}}
<span>{{i18n "admin.dashboard.reports.no_data"}}</span> {{number model.currentTotal noTitle="true"}}{{#if model.percent}}%{{/if}}
{{/if}} {{/if}}
</div>
{{/if}}
{{/if}}
{{/if}}
</div>
{{#if showFilteringUI}} {{#if model.trendIcon}}
<div class="filters"> {{d-icon model.trendIcon class="icon"}}
{{#if showModes}} {{/if}}
<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> </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> </div>
{{/if}} {{/if}}
</div> </div>
{{/if}} {{/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}} {{else}}
<div class="alert alert-info"> <div class="alert alert-info">
{{html-safe disabledLabel}} {{html-safe disabledLabel}}

View File

@ -1,94 +1,90 @@
<div class='edit-main-nav admin-controls'> <div class='edit-main-nav admin-controls'>
<nav> <nav>
<ul class='nav nav-pills target'> <ul class='nav nav-pills target'>
{{#each visibleTargets as |target|}} {{#each visibleTargets as |target|}}
<li> <li>
{{#link-to editRouteName {{#link-to editRouteName
theme.id theme.id
target.name target.name
fieldName fieldName
replace=true replace=true
title=field.title title=field.title
class=(if target.edited 'edited' 'blank') class=(if target.edited 'edited' 'blank')
}} }}
{{#if target.error}}{{d-icon 'exclamation-triangle'}}{{/if}} {{#if target.error}}{{d-icon 'exclamation-triangle'}}{{/if}}
{{#if target.icon}} {{#if target.icon}}{{d-icon target.icon}}{{/if}}
{{d-icon target.icon}}
{{/if}}
{{i18n (concat 'admin.customize.theme.' target.name)}} {{i18n (concat 'admin.customize.theme.' target.name)}}
{{/link-to}} {{/link-to}}
</li> </li>
{{/each}} {{/each}}
{{#if allowAdvanced}} {{#if allowAdvanced}}
<li> <li>
<a {{action "toggleShowAdvanced"}} <a {{action "toggleShowAdvanced"}}
class='no-text' class='no-text'
href href
title={{i18n (concat "admin.customize.theme." (if showAdvanced "hide_advanced" "show_advanced"))}} title={{i18n (concat "admin.customize.theme." (if showAdvanced "hide_advanced" "show_advanced"))}}>
> {{d-icon (if showAdvanced "angle-double-left" "angle-double-right")}}
{{d-icon (if showAdvanced "angle-double-left" "angle-double-right")}} </a>
</a>
</li> </li>
{{/if}} {{/if}}
<li class="spacer"></li>
<li class="spacer"></li> <li>
<li>
<label> <label>
{{input type="checkbox" checked=onlyOverridden click=(action "onlyOverriddenChanged" value="target.checked")}} {{input type="checkbox" checked=onlyOverridden click=(action "onlyOverriddenChanged" value="target.checked")}}
{{i18n 'admin.customize.theme.hide_unused_fields'}} {{i18n 'admin.customize.theme.hide_unused_fields'}}
</label> </label>
</li> </li>
</ul> </ul>
</nav> </nav>
</div> </div>
<div class='admin-controls'> <div class='admin-controls'>
<nav> <nav>
<ul class='nav nav-pills fields'> <ul class='nav nav-pills fields'>
{{#each visibleFields as |field|}} {{#each visibleFields as |field|}}
<li> <li>
{{#link-to editRouteName {{#link-to editRouteName
theme.id theme.id
currentTargetName currentTargetName
field.name field.name
replace=true replace=true
title=field.title title=field.title
class=(if field.edited 'edited' 'blank') class=(if field.edited 'edited' 'blank')
}} }}
{{#if field.error}}{{d-icon 'exclamation-triangle'}}{{/if}} {{#if field.error}}{{d-icon 'exclamation-triangle'}}{{/if}}
{{#if field.icon}}{{d-icon field.icon}}{{/if}} {{#if field.icon}}{{d-icon field.icon}}{{/if}}
{{field.translatedName}} {{field.translatedName}}
{{/link-to}}
{{/link-to}}
</li> </li>
{{/each}} {{/each}}
{{#if showAddField}} {{#if showAddField}}
<li> <li>
{{#if addingField}} {{#if addingField}}
{{input type=text value=newFieldName enter=(action 'addField') escape-press=(action "cancelAddField")}} {{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="ok" action=(action "addField" newFieldName) icon="check"}}
{{d-button class="cancel" action=(action "cancelAddField") icon="times"}} {{d-button class="cancel" action=(action "cancelAddField") icon="times"}}
{{else}} {{else}}
<a href {{action "toggleAddField" currentTargetName}} class="no-text"> <a href {{action "toggleAddField" currentTargetName}} class="no-text">
{{d-icon "plus"}} {{d-icon "plus"}}
</a> </a>
{{/if}} {{/if}}
</li> </li>
{{/if}} {{/if}}
<li class='spacer'></li>
<li> <li class='spacer'></li>
<li>
<a href {{action "toggleMaximize"}} class="no-text"> <a href {{action "toggleMaximize"}} class="no-text">
{{d-icon maximizeIcon}} {{d-icon maximizeIcon}}
</a> </a>
</li> </li>
</ul> </ul>
</nav> </nav>
</div> </div>
{{#if error}} {{#if error}}
<pre class='field-error'>{{error}}</pre> <pre class='field-error'>{{error}}</pre>
{{/if}} {{/if}}
{{ace-editor content=activeSection editorId=editorId mode=activeSectionMode autofocus="true"}} {{ace-editor content=activeSection editorId=editorId mode=activeSectionMode autofocus="true"}}

View File

@ -3,10 +3,10 @@
<div class="label">{{i18n "admin.embedding.host"}}</div> <div class="label">{{i18n "admin.embedding.host"}}</div>
{{input value=buffered.host placeholder="example.com" enter=(action "save") class="host-name"}} {{input value=buffered.host placeholder="example.com" enter=(action "save") class="host-name"}}
</td> </td>
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.class_name"}}</div> <div class="label">{{i18n "admin.embedding.class_name"}}</div>
{{input value=buffered.class_name placeholder="class" enter=(action "save") class="class-name"}} {{input value=buffered.class_name placeholder="class" enter=(action "save") class="class-name"}}
</td> </td>
<td class="editing-input"> <td class="editing-input">
<div class="label">{{i18n "admin.embedding.path_whitelist"}}</div> <div class="label">{{i18n "admin.embedding.path_whitelist"}}</div>
{{input value=buffered.path_whitelist placeholder="/blog/.*" enter=(action "save") class="path-whitelist"}} {{input value=buffered.path_whitelist placeholder="/blog/.*" enter=(action "save") class="path-whitelist"}}

View File

@ -3,11 +3,12 @@
<div class='silence-reason-label'> <div class='silence-reason-label'>
{{html-safe (i18n 'admin.user.silence_reason_label')}} {{html-safe (i18n 'admin.user.silence_reason_label')}}
</div> </div>
</label> </label>
{{text-field {{text-field
value=reason value=reason
class="silence-reason" class="silence-reason"
placeholderKey="admin.user.silence_reason_placeholder"}} placeholderKey="admin.user.silence_reason_placeholder"
}}
</div> </div>
<label> <label>

View File

@ -1,8 +1,8 @@
<div class='setting-label'> <div class='setting-label'>
<h3>{{settingName}}</h3> <h3>{{settingName}}</h3>
{{#if defaultIsAvailable}} {{#if defaultIsAvailable}}
<a href onClick={{action 'setDefaultValues'}}>{{setting.setDefaultValuesLabel}}</a> <a href onClick={{action 'setDefaultValues'}}>{{setting.setDefaultValuesLabel}}</a>
{{/if}} {{/if}}
</div> </div>
<div class="setting-value"> <div class="setting-value">
{{component componentName setting=setting value=buffered.value validationMessage=validationMessage preview=preview isSecret=isSecret allowAny=allowAny}} {{component componentName setting=setting value=buffered.value validationMessage=validationMessage preview=preview isSecret=isSecret allowAny=allowAny}}

View File

@ -3,31 +3,35 @@
<h1>{{#if model.theme_id}}{{model.name}}{{else}}{{text-field class="style-name" value=model.name}}{{/if}}</h1> <h1>{{#if model.theme_id}}{{model.name}}{{else}}{{text-field class="style-name" value=model.name}}{{/if}}</h1>
<div class="controls"> <div class="controls">
{{#unless model.theme_id}} {{#unless model.theme_id}}
{{d-button {{d-button
class="btn-primary" class="btn-primary"
action=(action "save") action=(action "save")
disabled=model.disableSave disabled=model.disableSave
label="admin.customize.save"}} label="admin.customize.save"
}}
{{/unless}} {{/unless}}
{{d-button {{d-button
class="btn-default" class="btn-default"
action=(action "copy" model) action=(action "copy" model)
icon="copy" icon="copy"
label="admin.customize.copy"}} label="admin.customize.copy"
}}
{{d-button {{d-button
class="btn-default" class="btn-default"
action=(action "copyToClipboard" model) action=(action "copyToClipboard" model)
icon="far-clipboard" icon="far-clipboard"
label="admin.customize.copy_to_clipboard"}} label="admin.customize.copy_to_clipboard"
}}
{{#if model.theme_id}} {{#if model.theme_id}}
{{i18n "admin.customize.theme_owner"}} {{i18n "admin.customize.theme_owner"}}
{{#link-to "adminCustomizeThemes.show" model.theme_id}}{{model.theme_name}}{{/link-to}} {{#link-to "adminCustomizeThemes.show" model.theme_id}}{{model.theme_name}}{{/link-to}}
{{else}} {{else}}
{{d-button {{d-button
action=(action "destroy") action=(action "destroy")
class="btn-danger" class="btn-danger"
icon="far-trash-alt" icon="far-trash-alt"
label="admin.customize.delete"}} label="admin.customize.delete"
}}
{{/if}} {{/if}}
<span class="saving {{unless model.savingStatus 'hidden'}}">{{model.savingStatus}}</span> <span class="saving {{unless model.savingStatus 'hidden'}}">{{model.savingStatus}}</span>
</div> </div>
@ -44,40 +48,40 @@
</div> </div>
{{#if colors.length}} {{#if colors.length}}
<table class="table colors"> <table class="table colors">
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th class="hex">{{i18n 'admin.customize.color'}}</th> <th class="hex">{{i18n 'admin.customize.color'}}</th>
<th></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>
</tr> </tr>
{{/each}} </thead>
</tbody> <tbody>
</table> {{#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}} {{else}}
<p>{{i18n 'search.no_results'}}</p> <p>{{i18n 'search.no_results'}}</p>
{{/if}} {{/if}}

View File

@ -2,7 +2,7 @@
<img src={{womanArtistEmojiURL}}> <img src={{womanArtistEmojiURL}}>
<div class="content-wrapper"> <div class="content-wrapper">
<h1>{{i18n "admin.customize.theme.themes_intro"}}</h1> <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"}} {{d-button action=(route-action "installModal") icon="upload" label="admin.customize.install" class="btn-primary"}}
</div> </div>
<div class="external-resources"> <div class="external-resources">

View File

@ -1,12 +1,13 @@
{{#conditional-loading-spinner condition=isLoading}} {{#conditional-loading-spinner condition=isLoading}}
<div class="reports-index section"> <div class="reports-index section">
<div class="section-title"> <div class="section-title">
<h2>{{i18n "admin.reports.title"}}</h2> <h2>{{i18n "admin.reports.title"}}</h2>
{{input {{input
class="filter-reports-input" class="filter-reports-input"
input=(action "filterReports" value="target.value") input=(action "filterReports" value="target.value")
placeholder=(i18n "admin.dashboard.filter_reports") placeholder=(i18n "admin.dashboard.filter_reports")
autofocus=true}} autofocus=true
}}
</div> </div>
<ul class="reports-list"> <ul class="reports-list">
@ -14,12 +15,11 @@
<li class="report"> <li class="report">
{{#link-to 'adminReports.show' report.type}} {{#link-to 'adminReports.show' report.type}}
<h3 class="report-title">{{report.title}}</h3> <h3 class="report-title">{{report.title}}</h3>
{{#if report.description}} {{#if report.description}}
<p class="report-description"> <p class="report-description">
{{report.description}} {{report.description}}
</p> </p>
{{/if}} {{/if}}
{{/link-to}} {{/link-to}}
</li> </li>
{{/each}} {{/each}}

View File

@ -5,23 +5,21 @@
{{textarea name="email" value=email class="email-body"}} {{textarea name="email" value=email class="email-body"}}
{{d-button {{d-button
action=(action "run") action=(action "run")
label="admin.email.advanced_test.run"}} label="admin.email.advanced_test.run"
}}
</div> </div>
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
{{#if format}}
{{#if format}} <hr>
<hr> <div class="text">
<div class="text"> <h3>{{i18n 'admin.email.advanced_test.text'}}</h3>
<h3>{{i18n 'admin.email.advanced_test.text'}}</h3> <pre class="full-reason">{{html-safe text}}</pre>
<pre class="full-reason">{{html-safe text}}</pre> </div>
</div> <hr>
<div class="elided">
<hr> <h3>{{i18n 'admin.email.advanced_test.elided'}}</h3>
<div class="elided"> <pre class="full-reason">{{html-safe elided}}</pre>
<h3>{{i18n 'admin.email.advanced_test.elided'}}</h3> </div>
<pre class="full-reason">{{html-safe elided}}</pre> {{/if}}
</div>
{{/if}}
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}

View File

@ -13,8 +13,11 @@
<div class="toggle"> <div class="toggle">
<label>{{i18n 'admin.email.format'}}</label> <label>{{i18n 'admin.email.format'}}</label>
{{#if showHtml}} {{#if showHtml}}
<span>{{i18n 'admin.email.html'}}</span> | <a href <span>{{i18n 'admin.email.html'}}</span>
{{action "toggleShowHtml"}}>{{i18n 'admin.email.text'}}</a> |
<a href {{action "toggleShowHtml"}}>
{{i18n 'admin.email.text'}}
</a>
{{else}} {{else}}
<a href {{action "toggleShowHtml"}}>{{i18n 'admin.email.html'}}</a> | <a href {{action "toggleShowHtml"}}>{{i18n 'admin.email.html'}}</a> |
<span>{{i18n 'admin.email.text'}}</span> <span>{{i18n 'admin.email.text'}}</span>

View File

@ -9,9 +9,9 @@
<th style='width: 10%'>&nbsp;</th> <th style='width: 10%'>&nbsp;</th>
</thead> </thead>
<tbody> <tbody>
{{#each embedding.embeddable_hosts as |host|}} {{#each embedding.embeddable_hosts as |host|}}
{{embeddable-host host=host deleteHost=(action "deleteHost")}} {{embeddable-host host=host deleteHost=(action "deleteHost")}}
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}

View File

@ -25,21 +25,21 @@
<th class="action"></th> <th class="action"></th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |item|}} {{#each model as |item|}}
<tr class="admin-list-item"> <tr class="admin-list-item">
<td class="col first email"> <td class="col first email">
<div class="overflow-ellipsis" title={{item.email}}>{{item.email}}</div> <div class="overflow-ellipsis" title={{item.email}}>{{item.email}}</div>
</td> </td>
<td class="action">{{item.actionName}}</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="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="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="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="ip_address">{{item.ip_address}}</td>
<td class="action"> <td class="action">
{{d-button action=(action "clearBlock") actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}} {{d-button action=(action "clearBlock") actionParam=item icon="check" label="admin.logs.screened_emails.actions.allow"}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -36,83 +36,83 @@
<th class="col heading actions"></th> <th class="col heading actions"></th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |item|}} {{#each model as |item|}}
<tr class="admin-list-item"> <tr class="admin-list-item">
<td class="col first ip_address"> <td class="col first ip_address">
{{#if item.editing}} {{#if item.editing}}
{{text-field value=item.ip_address autofocus="autofocus"}} {{text-field value=item.ip_address autofocus="autofocus"}}
{{else}} {{else}}
<a href {{action "edit" item}} class="inline-editable-field"> <a href {{action "edit" item}} class="inline-editable-field">
{{#if item.isRange}} {{#if item.isRange}}
<strong>{{item.ip_address}}</strong> <strong>{{item.ip_address}}</strong>
{{else}} {{else}}
{{item.ip_address}} {{item.ip_address}}
{{/if}} {{/if}}
</a> </a>
{{/if}} {{/if}}
</td> </td>
<td class="col action"> <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"}}
{{#if item.isBlocked}} {{#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 {{d-button
class="btn-default" class="btn-default"
action=(action "allow") action=(action "save")
actionParam=item actionParam=item
icon="check" label="admin.logs.save"}}
label="admin.logs.screened_ips.actions.do_nothing"}} <a href {{action "cancel" item}}>{{i18n "cancel"}}</a>
{{else}} {{else}}
{{d-button {{d-button
class="btn-default" class="btn-default btn-danger"
action=(action "block") action=(action "destroy")
actionParam=item actionParam=item
icon="ban" icon="far-trash-alt"}}
label="admin.logs.screened_ips.actions.block"}} {{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}}
{{/if}} </td>
</td> </tr>
</tr> {{/each}}
{{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}

View File

@ -20,17 +20,17 @@
<th class="created_at">{{i18n 'admin.logs.created_at'}}</th> <th class="created_at">{{i18n 'admin.logs.created_at'}}</th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |url|}} {{#each model as |url|}}
<tr class="admin-list-item"> <tr class="admin-list-item">
<td class="col first domain"> <td class="col first domain">
<div class="overflow-ellipsis" title={{url.domain}}>{{url.domain}}</div> <div class="overflow-ellipsis" title={{url.domain}}>{{url.domain}}</div>
</td> </td>
<td class="col action">{{url.actionName}}</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 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 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> <td class="col created_at"><div class="label">{{i18n 'admin.logs.created_at'}}</div>{{age-with-tooltip url.created_at}}</td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}

View File

@ -1,34 +1,34 @@
<div class="staff-action-logs-controls"> <div class="staff-action-logs-controls">
{{#if filtersExists}} {{#if filtersExists}}
<div class='staff-action-logs-filters'> <div class='staff-action-logs-filters'>
<a href {{action "clearAllFilters"}} class="clear-filters filter"> <a href {{action "clearAllFilters"}} class="clear-filters filter">
<span class="label">{{i18n 'admin.logs.staff_actions.clear_filters'}}</span> <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"}}
</a> </a>
{{/if}} {{#if actionFilter}}
{{#if filters.acting_user}} <a href {{action "clearFilter" "actionFilter"}} class="filter">
<a href {{action "clearFilter" "acting_user"}} class="filter"> <span class="label">{{i18n 'admin.logs.action'}}</span>: {{actionFilter}}
<span class="label">{{i18n 'admin.logs.staff_actions.staff_user'}}</span>: {{filters.acting_user}} {{d-icon "times-circle"}}
{{d-icon "times-circle"}} </a>
</a> {{/if}}
{{/if}} {{#if filters.acting_user}}
{{#if filters.target_user}} <a href {{action "clearFilter" "acting_user"}} class="filter">
<a href {{action "clearFilter" "target_user"}} class="filter"> <span class="label">{{i18n 'admin.logs.staff_actions.staff_user'}}</span>: {{filters.acting_user}}
<span class="label">{{i18n 'admin.logs.staff_actions.target_user'}}</span>: {{filters.target_user}} {{d-icon "times-circle"}}
{{d-icon "times-circle"}} </a>
</a> {{/if}}
{{/if}} {{#if filters.target_user}}
{{#if filters.subject}} <a href {{action "clearFilter" "target_user"}} class="filter">
<a href {{action "clearFilter" "subject"}} class="filter"> <span class="label">{{i18n 'admin.logs.staff_actions.target_user'}}</span>: {{filters.target_user}}
<span class="label">{{i18n 'admin.logs.staff_actions.subject'}}</span>: {{filters.subject}} {{d-icon "times-circle"}}
{{d-icon "times-circle"}} </a>
</a> {{/if}}
{{/if}} {{#if filters.subject}}
</div> <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}} {{else}}
{{i18n "admin.logs.staff_actions.filter"}} {{i18n "admin.logs.staff_actions.filter"}}
{{combo-box {{combo-box
@ -41,10 +41,10 @@
{{d-button class="btn-default" action=(action "exportStaffActionLogs") label="admin.export_csv.button_text" icon="download"}} {{d-button class="btn-default" action=(action "exportStaffActionLogs") label="admin.export_csv.button_text" icon="download"}}
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
{{#staff-actions}} {{#staff-actions}}
{{#load-more selector=".staff-logs tr" action=(action "loadMore")}} {{#load-more selector=".staff-logs tr" action=(action "loadMore")}}
{{#if model.content}} {{#if model.content}}
<table class='table staff-logs grid'> <table class='table staff-logs grid'>
@ -108,5 +108,4 @@
{{i18n 'search.no_results'}} {{i18n 'search.no_results'}}
{{/if}} {{/if}}
{{/load-more}} {{/load-more}}
{{/staff-actions}} {{/staff-actions}}

View File

@ -1,19 +1,19 @@
{{#d-modal-body class='add-upload-modal' title="admin.customize.theme.add_upload"}} {{#d-modal-body class='add-upload-modal' title="admin.customize.theme.add_upload"}}
<div class="inputs"> <div class="inputs">
<section class="field"> <section class="field">
<input onchange={{action "updateName"}} type="file" id="file-input" accept='*'> <input onchange={{action "updateName"}} type="file" id="file-input" accept='*'>
<label for="file-input">{{i18n 'admin.customize.theme.upload_file_tip'}}</label> <label for="file-input">{{i18n 'admin.customize.theme.upload_file_tip'}}</label>
</section> </section>
<section class="field"> <section class="field">
<label for="theme-variable-name">{{i18n 'admin.customize.theme.variable_name'}}</label> <label for="theme-variable-name">{{i18n 'admin.customize.theme.variable_name'}}</label>
{{input id="theme-variable-name" value=name}} {{input id="theme-variable-name" value=name}}
</section> </section>
{{#if fileSelected}} {{#if fileSelected}}
{{#if errorMessage}} {{#if errorMessage}}
<span class="alert alert-error">{{errorMessage}}</span> <span class="alert alert-error">{{errorMessage}}</span>
{{/if}}
{{/if}} {{/if}}
</div> {{/if}}
</div>
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">

View File

@ -1,16 +1,16 @@
{{#d-modal-body rawTitle=(i18n "admin.watched_words.test.modal_title" action=model.name) class="watched-words-test-modal"}} {{#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> <p>{{i18n "admin.watched_words.test.description"}}</p>
{{textarea name="test_value" value=value autofocus="autofocus"}} {{textarea name="test_value" value=value autofocus="autofocus"}}
{{#if matches}} {{#if matches}}
<p> <p>
{{i18n "admin.watched_words.test.found_matches"}} {{i18n "admin.watched_words.test.found_matches"}}
<ul> <ul>
{{#each matches as |match|}} {{#each matches as |match|}}
<li>{{match}}</li> <li>{{match}}</li>
{{/each}} {{/each}}
</ul> </ul>
</p> </p>
{{else}} {{else}}
<p>{{i18n "admin.watched_words.test.no_matches"}}</p> <p>{{i18n "admin.watched_words.test.no_matches"}}</p>
{{/if}} {{/if}}
{{/d-modal-body}} {{/d-modal-body}}

View File

@ -1,5 +1,5 @@
{{#d-modal-body class="incoming-emails" rawTitle=model.key}} {{#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}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">

View File

@ -29,8 +29,10 @@
{{plugin.name}} {{plugin.name}}
{{/if}} {{/if}}
</td> </td>
<td class="version"> <div class="label">{{i18n "admin.plugins.version"}}</div> <td class="version">
{{plugin.version}}</td> <div class="label">{{i18n "admin.plugins.version"}}</div>
{{plugin.version}}
</td>
<td class="col-enabled"> <td class="col-enabled">
<div class="label">{{i18n "admin.plugins.enabled"}}</div> <div class="label">{{i18n "admin.plugins.enabled"}}</div>
{{#if plugin.enabled_setting}} {{#if plugin.enabled_setting}}

View File

@ -1,17 +1,17 @@
<div class='admin-controls'> <div class='admin-controls'>
<div class='controls'> <div class='controls'>
{{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}} {{d-button action=(action "toggleMenu") class="menu-toggle" icon="bars"}}
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{d-button label="admin.plugins.change_settings" {{d-button
icon="cog" label="admin.plugins.change_settings"
class="btn-default settings-button" icon="cog"
action=(route-action "showSettings")}} class="btn-default settings-button"
{{/if}} action=(route-action "showSettings")
</div> }}
{{/if}}
</div> </div>
</div>
<div class="admin-nav pull-left"> <div class="admin-nav pull-left">
<ul class="nav nav-stacked"> <ul class="nav nav-stacked">

View File

@ -18,17 +18,17 @@
<th class="col heading">{{i18n 'admin.logs.search_logs.click_through_rate'}}</th> <th class="col heading">{{i18n 'admin.logs.search_logs.click_through_rate'}}</th>
</thead> </thead>
<tbody> <tbody>
{{#each model as |item|}} {{#each model as |item|}}
<tr class="admin-list-item"> <tr class="admin-list-item">
<td class="col term"> <td class="col term">
{{#link-to 'adminSearchLogs.term' (query-params term=item.term period=period) class="test"}} {{#link-to 'adminSearchLogs.term' (query-params term=item.term period=period) class="test"}}
{{item.term}} {{item.term}}
{{/link-to}} {{/link-to}}
</td> </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.searches'}}</div>{{item.searches}}</td>
<td class="col"><div class="label">{{i18n 'admin.logs.search_logs.click_through_rate'}}</div>{{item.ctr}}%</td> <td class="col"><div class="label">{{i18n 'admin.logs.search_logs.click_through_rate'}}</div>{{item.ctr}}%</td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -20,47 +20,47 @@
<br> <br>
<div class='header-search-results'> <div class='header-search-results'>
{{#each model.search_result.posts as |result|}} {{#each model.search_result.posts as |result|}}
<div class='fps-result'> <div class='fps-result'>
<div class='author'> <div class='author'>
<a href={{result.userPath}} data-user-card={{result.username}}> <a href={{result.userPath}} data-user-card={{result.username}}>
{{avatar result imageSize="large"}} {{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>
</a> </a>
</div>
<div class='search-category'> <div class='fps-topic'>
{{#if result.topic.category.parentCategory}} <div class='topic'>
{{category-link result.topic.category.parentCategory}} <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}} {{/if}}
{{category-link result.topic.category hideParent=true}}
{{#each result.topic.tags as |tag|}}
{{discourse-tag tag}}
{{/each}}
</div> </div>
</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>
</div> {{/each}}
{{/each}}
</div> </div>
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}

View File

@ -13,26 +13,26 @@
{{#if noGrantableBadges}} {{#if noGrantableBadges}}
<p>{{i18n 'admin.badges.no_badges'}}</p> <p>{{i18n 'admin.badges.no_badges'}}</p>
{{else}} {{else}}
<form class="form-horizontal"> <form class="form-horizontal">
<div> <div>
<label>{{i18n 'admin.badges.badge'}}</label> <label>{{i18n 'admin.badges.badge'}}</label>
{{combo-box {{combo-box
filterable=true filterable=true
value=selectedBadgeId value=selectedBadgeId
content=grantableBadges content=grantableBadges
onChange=(action (mut selectedBadgeId)) onChange=(action (mut selectedBadgeId))
}} }}
</div> </div>
<div> <div>
<label>{{i18n 'admin.badges.reason'}}</label> <label>{{i18n 'admin.badges.reason'}}</label>
{{input type="text" value=badgeReason}}<br><small>{{i18n 'admin.badges.reason_help'}}</small> {{input type="text" value=badgeReason}}<br><small>{{i18n 'admin.badges.reason_help'}}</small>
</div> </div>
{{d-button {{d-button
class="btn-primary" class="btn-primary"
action=(action "grantBadge") action=(action "grantBadge")
type="submit" type="submit"
label="admin.badges.grant"}} label="admin.badges.grant"}}
</form> </form>
{{/if}} {{/if}}
<table id='user-badges'> <table id='user-badges'>
@ -55,7 +55,7 @@
</td> </td>
<td class='reason'> <td class='reason'>
{{#if userBadge.postUrl}} {{#if userBadge.postUrl}}
<a href={{userBadge.postUrl}}>{{userBadge.topic_title}}</a> <a href={{userBadge.postUrl}}>{{userBadge.topic_title}}</a>
{{/if}} {{/if}}
</td> </td>
<td>{{age-with-tooltip userBadge.granted_at}}</td> <td>{{age-with-tooltip userBadge.granted_at}}</td>

View File

@ -474,7 +474,7 @@
<div class="value"> <div class="value">
{{#link-to "adminUser" model.silencedBy}} {{#link-to "adminUser" model.silencedBy}}
{{avatar model.silencedBy imageSize="tiny"}} {{avatar model.silencedBy imageSize="tiny"}}
{{/link-to}} {{/link-to}}
{{#link-to "adminUser" model.silencedBy}} {{#link-to "adminUser" model.silencedBy}}
{{model.silencedBy.username}} {{model.silencedBy.username}}
{{/link-to}} {{/link-to}}
@ -507,45 +507,45 @@
{{#if currentUser.admin}} {{#if currentUser.admin}}
<section class="details"> <section class="details">
<h1>{{i18n "admin.groups.title"}}</h1> <h1>{{i18n "admin.groups.title"}}</h1>
<div class="display-row"> <div class="display-row">
<div class="field">{{i18n "admin.groups.automatic"}}</div> <div class="field">{{i18n "admin.groups.automatic"}}</div>
<div class="value">{{html-safe automaticGroups}}</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> </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="display-row">
<div class="field">{{i18n "admin.groups.custom"}}</div> <div class="field">{{i18n "admin.groups.primary"}}</div>
<div class="value"> <div class="value">
{{admin-group-selector {{combo-box
content=availableGroups content=model.customGroups
value=customGroupIdsBuffer value=model.primary_group_id
onChange=(action (mut customGroupIdsBuffer)) none="admin.groups.no_primary"
onChange=(action (mut model.primary_group_id))
}} }}
</div> </div>
{{#if customGroupsDirty}} {{#if primaryGroupDirty}}
<div class="controls"> <div class="controls">
{{d-button icon="check" class="ok" action=(action "saveCustomGroups")}} {{d-button icon="check" class="ok" action=(action "savePrimaryGroup")}}
{{d-button icon="times" class="cancel" action=(action "resetCustomGroups")}} {{d-button icon="times" class="cancel" action=(action "resetPrimaryGroup")}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
{{#if model.customGroups}} {{/if}}
<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}}
</section> </section>
{{/if}} {{/if}}
@ -625,34 +625,34 @@
</section> </section>
{{#if model.single_sign_on_record}} {{#if model.single_sign_on_record}}
<section class="details"> <section class="details">
<h1>{{i18n "admin.user.sso.title"}}</h1> <h1>{{i18n "admin.user.sso.title"}}</h1>
{{#with model.single_sign_on_record as |sso|}} {{#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}}
<div class="display-row"> <div class="display-row">
<div class="field">{{i18n "admin.user.sso.external_email"}}</div> <div class="field">{{i18n "admin.user.sso.external_id"}}</div>
<div class="value">{{sso.external_email}}</div> <div class="value">{{sso.external_id}}</div>
</div> </div>
{{/if}} <div class="display-row">
<div class="display-row"> <div class="field">{{i18n "admin.user.sso.external_username"}}</div>
<div class="field">{{i18n "admin.user.sso.external_avatar_url"}}</div> <div class="value">{{sso.external_username}}</div>
<div class="value">{{sso.external_avatar_url}}</div> </div>
</div> <div class="display-row">
{{/with}} <div class="field">{{i18n "admin.user.sso.external_name"}}</div>
</section> <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}} {{/if}}
{{plugin-outlet name="after-user-details" args=(hash model=model)}} {{plugin-outlet name="after-user-details" args=(hash model=model)}}

View File

@ -117,31 +117,42 @@
{{#if model.tl3Requirements.requirements_lost}} {{#if model.tl3Requirements.requirements_lost}}
{{! tl implicitly not locked }} {{! tl implicitly not locked }}
{{#if model.tl3Requirements.on_grace_period}} {{#if model.tl3Requirements.on_grace_period}}
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.on_grace_period'}} {{d-icon "times"}}
{{else}} {{! not on grace period }} {{i18n 'admin.user.tl3_requirements.on_grace_period'}}
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.does_not_qualify'}} {{else}}
{{i18n 'admin.user.tl3_requirements.will_be_demoted'}} {{! not on grace period }}
{{d-icon "times"}}
{{i18n 'admin.user.tl3_requirements.does_not_qualify'}}
{{i18n 'admin.user.tl3_requirements.will_be_demoted'}}
{{/if}} {{/if}}
{{else}} {{! requirements not lost - remains tl3 }} {{else}}
{{! requirements not lost - remains tl3 }}
{{#if model.tl3Requirements.trust_level_locked}} {{#if model.tl3Requirements.trust_level_locked}}
{{d-icon "lock"}} {{i18n 'admin.user.tl3_requirements.locked_will_not_be_demoted'}} {{d-icon "lock"}}
{{else}} {{! tl not locked }} {{i18n 'admin.user.tl3_requirements.locked_will_not_be_demoted'}}
{{d-icon "check"}} {{i18n 'admin.user.tl3_requirements.qualifies'}} {{else}}
{{! tl not locked }}
{{d-icon "check"}}
{{i18n 'admin.user.tl3_requirements.qualifies'}}
{{#if model.tl3Requirements.on_grace_period}} {{#if model.tl3Requirements.on_grace_period}}
{{i18n 'admin.user.tl3_requirements.on_grace_period'}} {{i18n 'admin.user.tl3_requirements.on_grace_period'}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{else}} {{! is not tl3 }} {{else}}
{{! is not tl3 }}
{{#if model.tl3Requirements.requirements_met}} {{#if model.tl3Requirements.requirements_met}}
{{! met & not tl3 - will be promoted}} {{! met & not tl3 - will be promoted}}
{{d-icon "check"}} {{i18n 'admin.user.tl3_requirements.qualifies'}} {{d-icon "check"}}
{{i18n 'admin.user.tl3_requirements.will_be_promoted'}} {{i18n 'admin.user.tl3_requirements.qualifies'}}
{{else}} {{! requirements not met - remains regular }} {{i18n 'admin.user.tl3_requirements.will_be_promoted'}}
{{else}}
{{! requirements not met - remains regular }}
{{#if model.tl3Requirements.trust_level_locked}} {{#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}} {{else}}
{{d-icon "times"}} {{i18n 'admin.user.tl3_requirements.does_not_qualify'}} {{d-icon "times"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/if}} {{/if}}

View File

@ -9,31 +9,31 @@
</div> </div>
<div class='web-hook-events-listing'> <div class='web-hook-events-listing'>
{{#if model}} {{#if model}}
{{#load-more selector=".web-hook-events li" action=(action "loadMore")}} {{#load-more selector=".web-hook-events li" action=(action "loadMore")}}
<div class='web-hook-events content-list'> <div class='web-hook-events content-list'>
<div class='heading-container'> <div class='heading-container'>
<div class='col heading first status'>{{i18n 'admin.web_hooks.events.status'}}</div> <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 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 timestamp'>{{i18n 'admin.web_hooks.events.timestamp'}}</div>
<div class='col heading completion'>{{i18n 'admin.web_hooks.events.completion'}}</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='col heading actions'>{{i18n 'admin.web_hooks.events.actions'}}</div>
<div class='clearfix'></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> </div>
{{#if hasIncoming}} {{conditional-loading-spinner condition=model.loadingMore}}
<a href class='alert alert-info clickable' tabindex="0" {{action "showInserted"}}> {{/load-more}}
{{count-i18n key="admin.web_hooks.events.incoming" count=incomingCount}} {{else}}
</a> <p>{{i18n 'admin.web_hooks.events.none'}}</p>
{{/if}} {{/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}}
</div> </div>

View File

@ -5,34 +5,34 @@
{{d-icon 'plus'}} {{i18n 'admin.web_hooks.new'}} {{d-icon 'plus'}} {{i18n 'admin.web_hooks.new'}}
{{/link-to}} {{/link-to}}
</div> </div>
{{#if model}} {{#if model}}
{{#load-more selector=".web-hooks tr" action=(action "loadMore")}} {{#load-more selector=".web-hooks tr" action=(action "loadMore")}}
<table class='web-hooks grid'> <table class='web-hooks grid'>
<thead> <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|}}
<tr> <tr>
<td class='delivery-status'>{{#link-to 'adminWebHooks.showEvents' webHook.id}}{{admin-web-hook-status deliveryStatuses=deliveryStatuses model=webHook}}{{/link-to}}</td> <th>{{i18n 'admin.web_hooks.delivery_status.title'}}</th>
<td class='payload-url'>{{#link-to 'adminWebHooks.show' webHook}}{{webHook.payload_url}}{{/link-to}}</td> <th>{{i18n 'admin.web_hooks.payload_url'}}</th>
<td class='description'>{{webHook.description}}</td> <th>{{i18n 'admin.web_hooks.description'}}</th>
<td class='controls'> <th>{{i18n 'admin.web_hooks.controls'}}</th>
{{#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> </tr>
{{/each}} </thead>
</tbody> <tbody>
</table> {{#each model as |webHook|}}
{{conditional-loading-spinner condition=model.loadingMore}} <tr>
{{/load-more}} <td class='delivery-status'>{{#link-to 'adminWebHooks.showEvents' webHook.id}}{{admin-web-hook-status deliveryStatuses=deliveryStatuses model=webHook}}{{/link-to}}</td>
{{else}} <td class='payload-url'>{{#link-to 'adminWebHooks.show' webHook}}{{webHook.payload_url}}{{/link-to}}</td>
<p>{{i18n 'admin.web_hooks.none'}}</p> <td class='description'>{{webHook.description}}</td>
{{/if}} <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> </div>

View File

@ -111,8 +111,8 @@
{{#if contactInfo}} {{#if contactInfo}}
<section class='about contact'> <section class='about contact'>
<h3>{{d-icon "far-envelope"}} {{i18n 'about.contact'}}</h3> <h3>{{d-icon "far-envelope"}} {{i18n 'about.contact'}}</h3>
<p>{{html-safe contactInfo}}</p> <p>{{html-safe contactInfo}}</p>
</section> </section>
{{/if}} {{/if}}

View File

@ -37,23 +37,23 @@
{{#if userBadges}} {{#if userBadges}}
<div class="user-badges {{model.slug}}"> <div class="user-badges {{model.slug}}">
{{#load-more selector=".badge-info" action=(action "loadMore")}} {{#load-more selector=".badge-info" action=(action "loadMore")}}
<div class="badges-granted"> <div class="badges-granted">
{{#each userBadges as |ub|}} {{#each userBadges as |ub|}}
{{#user-info user=ub.user size="medium" class="badge-info" date=ub.granted_at}} {{#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> <div class="granted-on">{{i18n 'badges.granted_on' date=(inline-date ub.granted_at)}}</div>
{{#if ub.post_number}} {{#if ub.post_number}}
<a class="post-link" href="{{ub.topic.url}}/{{ub.post_number}}">{{html-safe ub.topic.fancyTitle}}</a> <a class="post-link" href="{{ub.topic.url}}/{{ub.post_number}}">{{html-safe ub.topic.fancyTitle}}</a>
{{/if}} {{/if}}
{{/user-info}} {{/user-info}}
{{/each}} {{/each}}
</div> </div>
{{/load-more}} {{/load-more}}
{{#unless canLoadMore}} {{#unless canLoadMore}}
{{#if canShowOthers}} {{#if canShowOthers}}
<div class='clearfix'> <div class='clearfix'>
<a class='btn' href={{model.url}}>{{i18n 'badges.others_count' count=othersCount}}</a> <a class='btn' href={{model.url}}>{{i18n 'badges.others_count' count=othersCount}}</a>
</div> </div>
{{/if}} {{/if}}
{{/unless}} {{/unless}}
</div> </div>

View File

@ -1,11 +1,10 @@
<label class="btn btn-default btn-icon-text" disabled={{uploading}} title={{i18n 'user.change_avatar.upload_title'}}> <label class="btn btn-default btn-icon-text" disabled={{uploading}} title={{i18n 'user.change_avatar.upload_title'}}>
{{d-icon "far-image"}} {{d-icon "far-image"}}
{{#if uploading}} {{#if uploading}}
{{i18n 'uploading'}} {{uploadProgress}}% {{i18n 'uploading'}} {{uploadProgress}}%
{{else}} {{else}}
{{i18n 'upload'}} {{i18n 'upload'}}
{{/if}} {{/if}}
<input class="hidden-upload-field" disabled={{uploading}} type="file" accept="image/*"> <input class="hidden-upload-field" disabled={{uploading}} type="file" accept="image/*">
</label> </label>

View File

@ -1,30 +1,31 @@
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
{{#if hasIncoming}} {{#if hasIncoming}}
<div class="show-mores"> <div class="show-mores">
<a tabindex="0" href {{action showInserted}} class='alert alert-info clickable'> <a tabindex="0" href {{action showInserted}} class='alert alert-info clickable'>
{{count-i18n key="topic_count_" suffix="latest" count=2}} {{count-i18n key="topic_count_" suffix="latest" count=2}}
</a> </a>
</div> </div>
{{/if}} {{/if}}
{{#if topics}} {{#if topics}}
{{topic-list showPosters=showPosters {{topic-list
hideCategory=hideCategory showPosters=showPosters
topics=topics hideCategory=hideCategory
expandExcerpts=expandExcerpts topics=topics
bulkSelectEnabled=bulkSelectEnabled expandExcerpts=expandExcerpts
canBulkSelect=canBulkSelect bulkSelectEnabled=bulkSelectEnabled
selected=selected canBulkSelect=canBulkSelect
skipHeader=skipHeader selected=selected
tagsForUser=tagsForUser skipHeader=skipHeader
onScroll=onScroll tagsForUser=tagsForUser
scrollOnLoad=scrollOnLoad}} onScroll=onScroll
scrollOnLoad=scrollOnLoad
}}
{{else}} {{else}}
{{#unless loadingMore}} {{#unless loadingMore}}
<div class='alert alert-info'> <div class='alert alert-info'>
{{i18n 'choose_topic.none_found'}} {{i18n 'choose_topic.none_found'}}
</div> </div>
{{/unless}} {{/unless}}
{{/if}} {{/if}}
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}

View File

@ -4,14 +4,15 @@
<div class='category-box-heading'> <div class='category-box-heading'>
<a href={{c.url}}> <a href={{c.url}}>
{{#unless c.isMuted}} {{#unless c.isMuted}}
{{#if c.uploaded_logo.url}} {{#if c.uploaded_logo.url}}
{{cdn-img src=c.uploaded_logo.url {{cdn-img
src=c.uploaded_logo.url
class="logo" class="logo"
width=c.uploaded_logo.width width=c.uploaded_logo.width
height=c.uploaded_logo.height}} height=c.uploaded_logo.height
{{/if}} }}
{{/if}}
{{/unless}} {{/unless}}
<h3> <h3>
{{category-title-before category=c}} {{category-title-before category=c}}
{{#if c.read_restricted}} {{#if c.read_restricted}}
@ -23,15 +24,15 @@
</div> </div>
{{#unless c.isMuted}} {{#unless c.isMuted}}
<div class='featured-topics'> <div class='featured-topics'>
{{#if c.topics}} {{#if c.topics}}
<ul> <ul>
{{#each c.topics as |topic|}} {{#each c.topics as |topic|}}
{{categories-boxes-topic topic=topic}} {{categories-boxes-topic topic=topic}}
{{/each}} {{/each}}
</ul> </ul>
{{/if}} {{/if}}
</div> </div>
{{/unless}} {{/unless}}
</div> </div>
</div> </div>

View File

@ -3,15 +3,16 @@
data-url={{c.url}}> data-url={{c.url}}>
<div class='category-box-inner'> <div class='category-box-inner'>
{{#unless c.isMuted}} {{#unless c.isMuted}}
<div class="category-logo"> <div class="category-logo">
{{#if c.uploaded_logo.url}} {{#if c.uploaded_logo.url}}
{{cdn-img {{cdn-img
src=c.uploaded_logo.url src=c.uploaded_logo.url
class="logo" class="logo"
width=c.uploaded_logo.width width=c.uploaded_logo.width
height=c.uploaded_logo.height}} height=c.uploaded_logo.height
{{/if}} }}
</div> {{/if}}
</div>
{{/unless}} {{/unless}}
<div class="category-details"> <div class="category-details">
<div class='category-box-heading'> <div class='category-box-heading'>
@ -26,45 +27,45 @@
</div> </div>
{{#unless c.isMuted}} {{#unless c.isMuted}}
<div class='description'> <div class='description'>
{{text-overflow class="overflow" text=c.description_excerpt}} {{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> </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}} {{/unless}}
</div> </div>
</div> </div>

View File

@ -15,59 +15,59 @@
<td class="category {{if c.isMuted 'muted'}} {{if noCategoryStyle "no-category-style"}}" style={{unless noCategoryStyle (border-color c.color)}}> <td class="category {{if c.isMuted 'muted'}} {{if noCategoryStyle "no-category-style"}}" style={{unless noCategoryStyle (border-color c.color)}}>
{{category-title-link category=c}} {{category-title-link category=c}}
{{#unless c.isMuted}} {{#unless c.isMuted}}
{{#if c.description_excerpt}} {{#if c.description_excerpt}}
<div class="category-description"> <div class="category-description">
{{dir-span c.description_excerpt}} {{dir-span c.description_excerpt}}
</div> </div>
{{/if}} {{/if}}
{{#if c.isGrandParent}} {{#if c.isGrandParent}}
<table class="category-list subcategories-with-subcategories"> <table class="category-list subcategories-with-subcategories">
<tbody> <tbody>
{{#each c.subcategories as |subcategory|}} {{#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'}}"> <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}}> <td class="category" style={{border-color subcategory.color}}>
{{category-title-link tagName="h4" category=subcategory}} {{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 subcategory.description_excerpt}} {{#if subcategory.description_excerpt}}
<div class="category-description subcategory-description"> <div class="category-description subcategory-description">
{{dir-span subcategory.description_excerpt}} {{dir-span subcategory.description_excerpt}}
</div> </div>
{{/if}} {{/if}}
{{/if}} {{#if subcategory.subcategories}}
</td> <div class='subcategories'>
</tr> {{#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}} {{/each}}
</tbody> </div>
</table> {{/if}}
{{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}}
{{/unless}} {{/unless}}
</td> </td>
<td class="topics"> <td class="topics">
@ -75,13 +75,13 @@
{{category-unread category=c tagName="div" class="unread-new"}} {{category-unread category=c tagName="div" class="unread-new"}}
</td> </td>
{{#unless c.isMuted}} {{#unless c.isMuted}}
{{#if showTopics}} {{#if showTopics}}
<td class="latest"> <td class="latest">
{{#each c.featuredTopics as |t|}} {{#each c.featuredTopics as |t|}}
{{featured-topic topic=t latestTopicOnly=latestTopicOnly}} {{featured-topic topic=t latestTopicOnly=latestTopicOnly}}
{{/each}} {{/each}}
</td> </td>
{{/if}} {{/if}}
{{/unless}} {{/unless}}
</tr> </tr>
{{/each}} {{/each}}

View File

@ -15,7 +15,7 @@
<span class="message-title"> <span class="message-title">
{{m.title}} {{m.title}}
</span> </span>
</label> </label>
</div> </div>
{{/each}} {{/each}}
{{/if}} {{/if}}

View File

@ -1,16 +1,18 @@
{{#if showSelector}} {{#if showSelector}}
{{user-selector topicId=topicId {{user-selector
onChangeCallback=(action "triggerResize") topicId=topicId
id="private-message-users" onChangeCallback=(action "triggerResize")
includeMessageableGroups='true' id="private-message-users"
placeholderKey="composer.users_placeholder" includeMessageableGroups='true'
tabindex="1" placeholderKey="composer.users_placeholder"
usernames=usernames tabindex="1"
hasGroups=hasGroups usernames=usernames
allowEmails='true' hasGroups=hasGroups
autocomplete="discourse"}} allowEmails='true'
autocomplete="discourse"
}}
{{else}} {{else}}
<a href {{action "toggleSelector"}}> <a href {{action "toggleSelector"}}>
<div class='ac-wrap composer-user-selector-limited'> <div class='ac-wrap composer-user-selector-limited'>
<span>{{limitedUsernames}}</span> <span>{{limitedUsernames}}</span>
<span class='btn btn-primary'>{{hiddenUsersCount}}</span> <span class='btn btn-primary'>{{hiddenUsersCount}}</span>

View File

@ -6,7 +6,7 @@
<label for="category-position"> <label for="category-position">
{{i18n 'category.position'}} {{i18n 'category.position'}}
</label> </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> </section>
{{/if}} {{/if}}
@ -33,16 +33,16 @@
{{i18n "category.search_priority.label"}} {{i18n "category.search_priority.label"}}
</label> </label>
<div class="controls"> <div class="controls">
{{combo-box {{combo-box
valueProperty="value" valueProperty="value"
id="category-search-priority" id="category-search-priority"
content=searchPrioritiesOptions content=searchPrioritiesOptions
value=category.search_priority value=category.search_priority
onChange=(action (mut category.search_priority)) onChange=(action (mut category.search_priority))
options=(hash options=(hash
placementStrategy="absolute" placementStrategy="absolute"
) )
}} }}
</div> </div>
</section> </section>
@ -77,13 +77,10 @@
{{i18n "category.all_topics_wiki"}} {{i18n "category.all_topics_wiki"}}
</label> </label>
</section> </section>
</section> </section>
<section> <section>
<h3>{{i18n 'category.settings_sections.moderation'}}</h3> <h3>{{i18n 'category.settings_sections.moderation'}}</h3>
{{#if siteSettings.enable_category_group_review}} {{#if siteSettings.enable_category_group_review}}
<section class="field"> <section class="field">
<label for="reviewable-by-group"> <label for="reviewable-by-group">
@ -93,7 +90,8 @@
groupFinder=groupFinder groupFinder=groupFinder
single="true" single="true"
groupNames=category.reviewable_by_group_name groupNames=category.reviewable_by_group_name
placeholderKey="category.review_group_name"}} placeholderKey="category.review_group_name"
}}
</section> </section>
{{/if}} {{/if}}
@ -139,12 +137,10 @@
</label> </label>
{{text-field value=category.custom_fields.num_auto_bump_daily id="category-number-daily-bump" type="number"}} {{text-field value=category.custom_fields.num_auto_bump_daily id="category-number-daily-bump" type="number"}}
</section> </section>
</section> </section>
<section> <section>
<h3>{{i18n "category.settings_sections.appearance"}}</h3>
<h3> {{i18n "category.settings_sections.appearance"}}</h3>
<section class="field default-view-field"> <section class="field default-view-field">
<label for="category-default-view"> <label for="category-default-view">
@ -185,75 +181,73 @@
{{i18n "category.sort_order"}} {{i18n "category.sort_order"}}
</label> </label>
<div class="controls"> <div class="controls">
{{combo-box valueProperty="value" content=availableSorts value=category.sort_order none="category.sort_options.default"}} {{combo-box valueProperty="value" content=availableSorts value=category.sort_order none="category.sort_options.default"}}
{{#unless isDefaultSortOrder}} {{#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 {{combo-box
castBoolean=true
valueProperty="value" valueProperty="value"
id="subcategory-list-style" content=sortAscendingOptions
content=availableSubcategoryListStyles value=category.sort_ascending
value=category.subcategory_list_style none="category.sort_options.default"
options=(hash options=(hash
placementStrategy="absolute" placementStrategy="absolute"
) )
}} }}
</section> {{/unless}}
{{/if}} </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>
<section> <section>
<h3> {{i18n "category.settings_sections.email"}}</h3> <h3>{{i18n "category.settings_sections.email"}}</h3>
{{#if emailInEnabled}} {{#if emailInEnabled}}
<section class='field'> <section class='field'>
<label for="category-email-in"> <label for="category-email-in">
{{d-icon "far-envelope"}} {{d-icon "far-envelope"}}
{{i18n 'category.email_in'}} {{i18n 'category.email_in'}}
</label> </label>
{{text-field id="category-email-in" class="email-in" value=category.email_in}} {{text-field id="category-email-in" class="email-in" value=category.email_in}}
</section> </section>
<section class='field'> <section class='field'>
<label> <label>
{{input type="checkbox" checked=category.email_in_allow_strangers}} {{input type="checkbox" checked=category.email_in_allow_strangers}}
{{i18n 'category.email_in_allow_strangers'}} {{i18n 'category.email_in_allow_strangers'}}
</label> </label>
</section> </section>
<section class='field'> <section class='field'>
<label> <label>
{{input type="checkbox" checked=category.mailinglist_mirror}} {{input type="checkbox" checked=category.mailinglist_mirror}}
{{i18n 'category.mailinglist_mirror'}} {{i18n 'category.mailinglist_mirror'}}
</label> </label>
</section> </section>
{{plugin-outlet name="category-email-in" args=(hash category=category)}} {{plugin-outlet name="category-email-in" args=(hash category=category)}}
{{/if}} {{/if}}
@ -264,7 +258,6 @@
<a href={{get-url '/admin/site_settings/category/email'}}>{{i18n 'category.email_in_disabled_click'}}</a> <a href={{get-url '/admin/site_settings/category/email'}}>{{i18n 'category.email_in_disabled_click'}}</a>
</section> </section>
{{/unless}} {{/unless}}
</section> </section>
{{plugin-outlet name="category-custom-settings" args=(hash category=category) connectorTagName="" tagName="section"}} {{plugin-outlet name="category-custom-settings" args=(hash category=category) connectorTagName="" tagName="section"}}

View File

@ -1,22 +1,22 @@
<div class="future-date-input"> <div class="future-date-input">
{{#unless isBasedOnDuration}} {{#unless isBasedOnDuration}}
<div class="control-group"> <div class="control-group">
<label>{{displayLabel}}</label> <label>{{displayLabel}}</label>
{{future-date-input-selector {{future-date-input-selector
minimumResultsForSearch=-1 minimumResultsForSearch=-1
statusType=statusType statusType=statusType
value=(readonly selection) value=(readonly selection)
input=(readonly input) input=(readonly input)
includeDateTime=includeDateTime includeDateTime=includeDateTime
includeWeekend=includeWeekend includeWeekend=includeWeekend
includeFarFuture=includeFarFuture includeFarFuture=includeFarFuture
includeMidFuture=includeMidFuture includeMidFuture=includeMidFuture
clearable=clearable clearable=clearable
none="topic.auto_update_input.none" none="topic.auto_update_input.none"
onChangeInput=onChangeInput onChangeInput=onChangeInput
onChange=(action (mut selection)) onChange=(action (mut selection))
}} }}
</div> </div>
{{/unless}} {{/unless}}
{{#if displayDateAndTimePicker}} {{#if displayDateAndTimePicker}}

View File

@ -1,14 +1,14 @@
{{#if visible}} {{#if visible}}
<div class="card-content"> <div class="card-content">
<div class="card-row first-row"> <div class="card-row first-row">
<div class="group-card-avatar"> <div class="group-card-avatar">
<a href={{groupPath}} {{action "showGroup" group}} class="card-huge-avatar"> <a href={{groupPath}} {{action "showGroup" group}} class="card-huge-avatar">
{{avatar-flair {{avatar-flair
flairURL=group.flair_url flairURL=group.flair_url
flairBgColor=group.flair_bg_color flairBgColor=group.flair_bg_color
flairColor=group.flair_color flairColor=group.flair_color
groupName=group.name}} groupName=group.name
}}
</a> </a>
</div> </div>
<div class="names"> <div class="names">
@ -26,8 +26,9 @@
<ul class="usercard-controls group-details-button"> <ul class="usercard-controls group-details-button">
<li> <li>
{{group-membership-button {{group-membership-button
model=group model=group
showLogin=(route-action "showLogin")}} showLogin=(route-action "showLogin")
}}
</li> </li>
{{#if group.messageable}} {{#if group.messageable}}
<li> <li>
@ -35,7 +36,8 @@
action=(action "messageGroup") action=(action "messageGroup")
class="btn-primary group-message-button inline" class="btn-primary group-message-button inline"
icon="envelope" icon="envelope"
label="groups.message"}} label="groups.message"
}}
</li> </li>
{{/if}} {{/if}}
</ul> </ul>
@ -74,13 +76,12 @@
<a href {{action 'showUser' user}} class="card-tiny-avatar">{{bound-avatar user "tiny"}}</a> <a href {{action 'showUser' user}} class="card-tiny-avatar">{{bound-avatar user "tiny"}}</a>
{{/each}} {{/each}}
{{#if showMoreMembers}} {{#if showMoreMembers}}
<a href={{groupPath}} {{action "showGroup" group}} class="more-members-link"><span <a href={{groupPath}} {{action "showGroup" group}} class="more-members-link">
class="more-members-count">+{{moreMembersCount}} <span class="more-members-count">+{{moreMembersCount}}{{i18n "more"}}</span>
{{i18n "more"}}</span></a> </a>
{{/if}} {{/if}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
</div> </div>
{{/if}} {{/if}}

View File

@ -1,9 +1,9 @@
<div class='control-group buttons'> <div class='control-group buttons'>
{{#d-button action=(action "save") {{#d-button action=(action "save")
disabled=saving disabled=saving
class='btn btn-primary group-manage-save'}} class='btn btn-primary group-manage-save'
}}
{{savingText}} {{savingText}}
{{/d-button}} {{/d-button}}
{{#if saved}} {{#if saved}}

View File

@ -1,25 +1,24 @@
<div class='clearfix info'> <div class='clearfix info'>
<a href={{post.user.userUrl}} data-user-card={{post.user.username}} class='avatar-link'> <a href={{post.user.userUrl}} data-user-card={{post.user.username}} class='avatar-link'>
{{avatar post.user imageSize="large" extraClasses="actor" ignoreTitle="true"}} {{avatar post.user imageSize="large" extraClasses="actor" ignoreTitle="true"}}
</a> </a>
<span class='time'>{{format-date post.created_at leaveAgo="true"}}</span> <span class='time'>{{format-date post.created_at leaveAgo="true"}}</span>
{{expand-post item=post}} {{expand-post item=post}}
<div class='stream-topic-details'> <div class='stream-topic-details'>
<div class='stream-topic-title'> <div class='stream-topic-title'>
<span class='title'> <span class='title'>
<a href={{postUrl}}>{{html-safe post.topic.fancyTitle}}</a> <a href={{postUrl}}>{{html-safe post.topic.fancyTitle}}</a>
</span> </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>
<div class="group-post-category">{{category-link post.category}}</div> {{/if}}
{{#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}}
</div> </div>
</div> </div>
<div class='excerpt'> <div class='excerpt'>

View File

@ -38,12 +38,13 @@
value=emailOrUsername value=emailOrUsername
placeholderKey="topic.invite_reply.email_placeholder"}} placeholderKey="topic.invite_reply.email_placeholder"}}
{{/if}} {{/if}}
{{#if showContactPicker}} {{#if showContactPicker}}
{{d-button {{d-button
icon="address-book" icon="address-book"
action=(action "searchContact") action=(action "searchContact")
class="btn-primary open-contact-picker"}} class="btn-primary open-contact-picker"
{{/if}} }}
{{/if}}
</div> </div>
</div> </div>

View File

@ -4,5 +4,5 @@
{{custom-html name="extraNavItem" tagName="li"}} {{custom-html name="extraNavItem" tagName="li"}}
{{!- this is done to avoid DIV in the UL, originally {{plugin-outlet name="extra-nav-item"}} {{!- this is done to avoid DIV in the UL, originally {{plugin-outlet name="extra-nav-item"}}
{{#each connectors as |c|}} {{#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}} {{/each}}

View File

@ -1,6 +1,6 @@
<a href={{hrefLink}} class={{activeClass}}> <a href={{hrefLink}} class={{activeClass}}>
{{#if hasIcon}} {{#if hasIcon}}
<span class={{content.name}}></span> <span class={{content.name}}></span>
{{/if}} {{/if}}
{{content.displayName}} {{content.displayName}}
</a> </a>

View File

@ -4,7 +4,7 @@
<a href {{action "showEditHistory"}} <a href {{action "showEditHistory"}}
class="has-edits {{historyClass}}" class="has-edits {{historyClass}}"
title="{{i18n "post.last_edited_on"}} {{editedDate}}"> title="{{i18n "post.last_edited_on"}} {{editedDate}}">
{{d-icon "pencil-alt"}} {{d-icon "pencil-alt"}}
</a> </a>
{{/if}} {{/if}}
</div> </div>

View File

@ -2,28 +2,26 @@
<table class='reviewable-histories'> <table class='reviewable-histories'>
<thead> <thead>
<tr> <tr>
<th colspan="3">{{i18n "review.history.title"}}</th> <th colspan="3">{{i18n "review.history.title"}}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#each filteredHistories as |rh|}} {{#each filteredHistories as |rh|}}
{{#unless rh.created}} {{#unless rh.created}}
<tr> <tr>
<td> <td>
{{reviewable-history-description rh}} {{reviewable-history-description rh}}
</td> </td>
<td> <td>
{{#user-link user=rs.user}} {{#user-link user=rs.user}}
{{avatar rh.created_by imageSize="tiny"}} {{avatar rh.created_by imageSize="tiny"}}
{{rh.created_by.username}} {{rh.created_by.username}}
{{/user-link}} {{/user-link}}
</td> </td>
<td>{{format-date rh.created_at format="medium"}}</td> <td>{{format-date rh.created_at format="medium"}}</td>
</tr>
</tr> {{/unless}}
{{/unless}} {{/each}}
{{/each}} </tbody>
</tbody>
</table> </table>
{{/if}} {{/if}}

View File

@ -1,9 +1,9 @@
{{#if reviewable.reviewable_scores}} {{#if reviewable.reviewable_scores}}
<table class='reviewable-scores'> <table class='reviewable-scores'>
<tbody> <tbody>
{{#each reviewable.reviewable_scores as |rs|}} {{#each reviewable.reviewable_scores as |rs|}}
{{reviewable-score rs=rs reviewable=reviewable}} {{reviewable-score rs=rs reviewable=reviewable}}
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{/if}} {{/if}}

View File

@ -53,9 +53,9 @@
unlimitedTagCount=true unlimitedTagCount=true
onChange=(action (mut searchedTerms.tags)) 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> <label>{{ input type="checkbox" class="all-tags" checked=searchedTerms.special.all_tags}} {{i18n "search.advanced.filters.all_tags"}} </label>
</section> </section>
</div> </div>
</div> </div>
</div> </div>

View File

@ -10,8 +10,10 @@
<nav id='topic-progress' title={{i18n 'topic.progress.title'}} class={{if hideProgress 'hidden'}}> <nav id='topic-progress' title={{i18n 'topic.progress.title'}} class={{if hideProgress 'hidden'}}>
<div class='nums'> <div class='nums'>
<h4>{{progressPosition}}</h4><span class={{if hugeNumberOfPosts 'hidden'}}> <h4>{{progressPosition}}</h4>
<span>/</span> <span class={{if hugeNumberOfPosts 'hidden'}}>
<h4>{{postStream.filteredPostsCount}}</h4></span> <span>/</span>
<h4>{{postStream.filteredPostsCount}}</h4>
</span>
</div> </div>
</nav> </nav>

View File

@ -153,8 +153,10 @@
<div class="card-row"> <div class="card-row">
<div class="location-and-website"> <div class="location-and-website">
{{#if user.location}} {{#if user.location}}
<span class='location'>{{d-icon "map-marker-alt"}} <span class='location'>
<span>{{user.location}}</span></span> {{d-icon "map-marker-alt"}}
<span>{{user.location}}</span>
</span>
{{/if}} {{/if}}
{{#if user.website_name}} {{#if user.website_name}}
<span class='website-name'> <span class='website-name'>

View File

@ -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> </label>
<div class='controls'> <div class='controls'>
{{combo-box {{combo-box
id=(concat 'user-' elementId) id=(concat 'user-' elementId)

View File

@ -46,7 +46,8 @@
</p> </p>
{{#each item.children as |child|}} {{#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"}} {{d-icon child.icon class="icon"}}
{{#each child.items as |grandChild|}} {{#each child.items as |grandChild|}}
{{#if grandChild.removableBookmark}} {{#if grandChild.removableBookmark}}
@ -54,10 +55,11 @@
class="btn-default remove-bookmark" class="btn-default remove-bookmark"
action=(action removeBookmark grandChild) action=(action removeBookmark grandChild)
icon="times" icon="times"
label="bookmarks.remove"}} label="bookmarks.remove"
}}
{{else}} {{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> <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}} &mdash; <span class="edit-reason">{{grandChild.edit_reason}}</span>{{/if}} {{#if grandChild.edit_reason}} &mdash; <span class="edit-reason">{{grandChild.edit_reason}}</span>{{/if}}
{{/if}} {{/if}}
{{/each}} {{/each}}
</div> </div>

View File

@ -93,7 +93,7 @@
<div class='search-category'> <div class='search-category'>
{{#if result.topic.category.parentCategory}} {{#if result.topic.category.parentCategory}}
{{category-link result.topic.category.parentCategory}} {{category-link result.topic.category.parentCategory}}
{{/if}} {{/if}}
{{category-link result.topic.category hideParent=true}} {{category-link result.topic.category hideParent=true}}
{{#each result.topic.tags as |tag|}} {{#each result.topic.tags as |tag|}}
@ -107,7 +107,7 @@
<span class='date'> <span class='date'>
{{format-age result.created_at}} {{format-age result.created_at}}
{{#if result.blurb}} {{#if result.blurb}}
- -
{{/if}} {{/if}}
</span> </span>

View File

@ -1,88 +1,89 @@
<section class="user-content"> <section class="user-content">
<div class="group-members-actions">
<div class="group-members-actions">
{{#if model.can_see_members}} {{#if model.can_see_members}}
{{text-field value=filterInput {{text-field
placeholderKey=filterPlaceholder value=filterInput
autocomplete="discourse" placeholderKey=filterPlaceholder
class="group-username-filter no-blur"}} autocomplete="discourse"
class="group-username-filter no-blur"
}}
{{/if}} {{/if}}
<div class="group-members-manage"> <div class="group-members-manage">
{{#if canManageGroup}} {{#if canManageGroup}}
{{d-button icon="plus"
action=(route-action "showAddMembersModal")
label="groups.add_members.title"
class="group-members-add"}}
{{#if currentUser.admin}}
{{d-button icon="plus" {{d-button icon="plus"
action=(route-action "showBulkAddModal") action=(route-action "showAddMembersModal")
label="admin.groups.bulk_add.title" label="groups.add_members.title"
class="group-bulk-add"}} 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}}
{{/if}} </div>
</div> </div>
</div>
{{#if hasMembers}} {{#if hasMembers}}
{{#load-more selector=".group-members tr" action=(action "loadMore")}} {{#load-more selector=".group-members tr" action=(action "loadMore")}}
<table class='group-members'> <table class='group-members'>
<thead> <thead>
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}} {{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}}
<th class='group-owner'>{{i18n "groups.members.owner"}}</th> <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='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_posted_at' i18nKey='last_post'}}
{{group-index-toggle order=order desc=desc field='last_seen_at' i18nKey='last_seen'}} {{group-index-toggle order=order desc=desc field='last_seen_at' i18nKey='last_seen'}}
<th></th> <th></th>
</thead> </thead>
<tbody> <tbody>
{{#each model.members as |m|}} {{#each model.members as |m|}}
<tr> <tr>
<td class='avatar'> <td class='avatar'>
{{user-info user=m skipName=skipName}} {{user-info user=m skipName=skipName}}
</td> </td>
<td class='group-owner'> <td class='group-owner'>
{{#if m.owner}} {{#if m.owner}}
<strong class="group-owner-label"> <strong class="group-owner-label">
{{d-icon "shield-alt"}} {{d-icon "shield-alt"}}
</strong> </strong>
{{/if}} {{/if}}
</td> </td>
<td> <td>
<span class="text">{{bound-date m.added_at}}</span> <span class="text">{{bound-date m.added_at}}</span>
</td> </td>
<td> <td>
<span class="text">{{bound-date m.last_posted_at}}</span> <span class="text">{{bound-date m.last_posted_at}}</span>
</td> </td>
<td> <td>
<span class="text">{{bound-date m.last_seen_at}}</span> <span class="text">{{bound-date m.last_seen_at}}</span>
</td> </td>
<td> <td>
{{#if canManageGroup}} {{#if canManageGroup}}
{{group-member-dropdown {{group-member-dropdown
member=m member=m
onChange=(action "actOnGroup" m) onChange=(action "actOnGroup" m)
}} }}
{{/if}} {{/if}}
{{!-- group parameter is used by plugins --}} {{!-- group parameter is used by plugins --}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{/load-more}} {{/load-more}}
{{conditional-loading-spinner condition=loading}} {{conditional-loading-spinner condition=loading}}
{{else if model.can_see_members}} {{else if model.can_see_members}}
<br> <br>
<div>{{i18n "groups.empty.members"}}</div> <div>{{i18n "groups.empty.members"}}</div>
{{else}} {{else}}
<br> <br>
<div>{{i18n "groups.members.forbidden"}}</div> <div>{{i18n "groups.members.forbidden"}}</div>
{{/if}} {{/if}}
</section> </section>

View File

@ -1,55 +1,57 @@
<section class="user-content"> <section class="user-content">
<div class="group-members-actions"> <div class="group-members-actions">
{{text-field value=filterInput {{text-field
placeholderKey=filterPlaceholder value=filterInput
class="group-username-filter no-blur"}} placeholderKey=filterPlaceholder
</div> class="group-username-filter no-blur"
}}
</div>
{{#if hasRequesters}} {{#if hasRequesters}}
{{#load-more selector=".group-members tr" action=(action "loadMore")}} {{#load-more selector=".group-members tr" action=(action "loadMore")}}
<table class='group-members'> <table class='group-members'>
<thead> <thead>
{{group-index-toggle order=order desc=desc field='username_lower' i18nKey='username'}} {{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'}} {{group-index-toggle order=order desc=desc field='requested_at' i18nKey='groups.member_requested'}}
<th>{{i18n "groups.requests.reason"}}</th> <th>{{i18n "groups.requests.reason"}}</th>
<th></th> <th></th>
<th></th> <th></th>
</thead> </thead>
<tbody> <tbody>
{{#each model.requesters as |m|}} {{#each model.requesters as |m|}}
<tr> <tr>
<td class='avatar'> <td class='avatar'>
{{user-info user=m skipName=skipName}} {{user-info user=m skipName=skipName}}
</td> </td>
<td> <td>
<span class="text">{{bound-date m.requested_at}}</span> <span class="text">{{bound-date m.requested_at}}</span>
</td> </td>
<td>{{m.reason}}</td> <td>{{m.reason}}</td>
<td> <td>
{{#if m.request_undone}} {{#if m.request_undone}}
{{i18n "groups.requests.undone"}} {{i18n "groups.requests.undone"}}
{{else if m.request_accepted}} {{else if m.request_accepted}}
{{i18n "groups.requests.accepted"}} {{i18n "groups.requests.accepted"}}
{{d-button action=(action "undoAcceptRequest") actionParam=m label="undo"}} {{d-button action=(action "undoAcceptRequest") actionParam=m label="undo"}}
{{else if m.request_denied}} {{else if m.request_denied}}
{{i18n "groups.requests.denied"}} {{i18n "groups.requests.denied"}}
{{else}} {{else}}
{{d-button action=(action "acceptRequest") actionParam=m label="groups.requests.accept" class="btn-primary"}} {{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"}} {{d-button action=(action "denyRequest") actionParam=m label="groups.requests.deny" class="btn-danger"}}
{{/if}} {{/if}}
</td> </td>
<td></td> <td></td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{/load-more}} {{/load-more}}
{{conditional-loading-spinner condition=loading}} {{conditional-loading-spinner condition=loading}}
{{else}} {{else}}
<div>{{i18n "groups.empty.requests"}}</div> <div>{{i18n "groups.empty.requests"}}</div>
{{/if}} {{/if}}
</section> </section>

View File

@ -53,13 +53,12 @@
{{/if}} {{/if}}
</div> </div>
</div> </div>
<div class="user-content-wrapper"> <div class="user-content-wrapper">
<section class="user-primary-navigation"> <section class="user-primary-navigation">
<div class="container"> <div class="container">
{{group-navigation group=model currentPath=currentPath tabs=tabs}} {{group-navigation group=model currentPath=currentPath tabs=tabs}}
</div> </div>
</section> </section>
{{outlet}}
{{outlet}} </div>
</div>
</div> </div>

View File

@ -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}} {{#mobile-nav class='activity-nav' desktopClass='action-list activity-list nav-stacked' currentPath=router._router.currentPath}}
{{#if model.can_see_members}} {{#if model.can_see_members}}
{{group-activity-filter filter="posts" categoryId=category_id}} {{group-activity-filter filter="posts" categoryId=category_id}}
@ -12,4 +12,4 @@
</section> </section>
<section class="user-content"> <section class="user-content">
{{outlet}} {{outlet}}
</section> </section>

View File

@ -11,4 +11,4 @@
</section> </section>
<section class="user-content"> <section class="user-content">
{{outlet}} {{outlet}}
</section> </section>

View File

@ -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}} {{#mobile-nav class='messages-nav' desktopClass='nav-stacked action-list' currentPath=router._router.currentPath}}
<li> <li>
{{#link-to 'group.messages.inbox' model.name}} {{#link-to 'group.messages.inbox' model.name}}
{{i18n 'user.messages.inbox'}} {{i18n 'user.messages.inbox'}}
@ -14,5 +13,5 @@
{{/mobile-nav}} {{/mobile-nav}}
</section> </section>
<section class="user-content"> <section class="user-content">
{{outlet}} {{outlet}}
</section> </section>

View File

@ -61,15 +61,15 @@
<div class="group-membership"> <div class="group-membership">
{{#group-membership-button tagName='' model=group showLogin=(route-action "showLogin")}} {{#group-membership-button tagName='' model=group showLogin=(route-action "showLogin")}}
{{#if group.is_group_owner}} {{#if group.is_group_owner}}
<span class="is-group-owner"> <span class="is-group-owner">
{{d-icon "shield-alt"}} {{d-icon "shield-alt"}}
{{i18n "groups.index.is_group_owner"}} {{i18n "groups.index.is_group_owner"}}
</span> </span>
{{else if group.is_group_user}} {{else if group.is_group_user}}
<span class="is-group-member"> <span class="is-group-member">
{{d-icon "check"}} {{d-icon "check"}}
{{i18n "groups.index.is_group_user"}} {{i18n "groups.index.is_group_user"}}
</span> </span>
{{else if group.public_admission}} {{else if group.public_admission}}
{{i18n 'groups.index.public'}} {{i18n 'groups.index.public'}}
{{else if group.isPrivate}} {{else if group.isPrivate}}

View File

@ -1,5 +1,4 @@
<div class="container invites-show clearfix"> <div class="container invites-show clearfix">
<h2>{{welcomeTitle}}</h2> <h2>{{welcomeTitle}}</h2>
<div class="two-col"> <div class="two-col">
@ -10,15 +9,18 @@
<div class="col-form"> <div class="col-form">
{{#if successMessage}} {{#if successMessage}}
<br><br> <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}} {{else}}
<p>{{i18n 'invites.invited_by'}}</p> <p>{{i18n 'invites.invited_by'}}</p>
<p>{{user-info user=invitedBy}}</p> <p>{{user-info user=invitedBy}}</p>
<p>{{html-safe yourEmailMessage}} <p>
{{#if externalAuthsEnabled}} {{html-safe yourEmailMessage}}
{{i18n 'invites.social_login_available'}} {{#if externalAuthsEnabled}}
{{/if}} {{i18n 'invites.social_login_available'}}
{{/if}}
</p> </p>
<form> <form>
@ -44,7 +46,8 @@
<div class="instructions"> <div class="instructions">
{{passwordInstructions}} {{i18n 'invites.optional_description'}} {{passwordInstructions}} {{i18n 'invites.optional_description'}}
<div class="caps-lock-warning {{unless capsLockOn 'invisible'}}"> <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>
</div> </div>
@ -61,7 +64,8 @@
action=(action "submit") action=(action "submit")
type="submit" type="submit"
disabled=submitDisabled disabled=submitDisabled
label="invites.accept_invite"}} label="invites.accept_invite"
}}
{{#if errorMessage}} {{#if errorMessage}}
<br><br> <br><br>

View File

@ -2,7 +2,7 @@
{{#if hasIncoming}} {{#if hasIncoming}}
<div class="show-mores"> <div class="show-mores">
<a href class='alert alert-info clickable' {{action showInserted}}> <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> </a>
</div> </div>
{{/if}} {{/if}}
@ -10,50 +10,56 @@
{{#if topics}} {{#if topics}}
<table class="topic-list"> <table class="topic-list">
<tbody> <tbody>
{{#each topics as |t|}} {{#each topics as |t|}}
<tr class="topic-list-item {{if t.archived 'archived'}} {{if t.visited 'visited'}}" data-topic-id={{t.id}}> <tr class="topic-list-item {{if t.archived 'archived'}} {{if t.visited 'visited'}}" data-topic-id={{t.id}}>
<td> <td>
<div class='main-link'> <div class='main-link'>
{{topic-status topic=t}} {{topic-status topic=t}}
{{topic-link t}} {{topic-link t}}
{{raw "list/unread-indicator" includeUnreadIndicator=showUnreadIndicator {{raw "list/unread-indicator"
topicId=t.id includeUnreadIndicator=showUnreadIndicator
unreadClass=(if t.unread_by_group_member "" "read")}} topicId=t.id
{{#if t.unseen}} unreadClass=(if t.unread_by_group_member "" "read")
<span class="badge-notification new-topic"></span> }}
{{/if}} {{#if t.unseen}}
{{#if t.hasExcerpt}} <span class="badge-notification new-topic"></span>
<div class="topic-excerpt"> {{/if}}
{{html-safe t.excerpt}} {{#if t.hasExcerpt}}
{{#if t.excerptTruncated}} <div class="topic-excerpt">
{{#unless t.canClearPin}}<a href={{t.url}}>{{i18n 'read_more'}}</a>{{/unless}} {{html-safe t.excerpt}}
{{/if}} {{#if t.excerptTruncated}}
{{#if t.canClearPin}} {{#unless t.canClearPin}}
<a href {{action "clearPin" t}} title={{i18n 'topic.clear_pin.help'}}>{{i18n 'topic.clear_pin.title'}}</a> <a href={{t.url}}>{{i18n 'read_more'}}</a>
{{/if}} {{/unless}}
</div> {{/if}}
{{/if}} {{#if t.canClearPin}}
</div> <a href {{action "clearPin" t}} title={{i18n 'topic.clear_pin.help'}}>
<div class='pull-right'> {{i18n 'topic.clear_pin.title'}}
{{raw "list/post-count-or-badges" topic=t postBadgesEnabled="true"}} </a>
</div> {{/if}}
<div class='clearfix'></div> </div>
<div class="topic-item-stats clearfix"> {{/if}}
{{discourse-tags t mode="list" tagsForUser=tagsForUser}} </div>
<div class="pull-right"> <div class='pull-right'>
{{raw "list/activity-column" topic=t tagName="div" class="num activity last"}} {{raw "list/post-count-or-badges" topic=t postBadgesEnabled="true"}}
<a href={{t.lastPostUrl}} title='{{i18n 'last_post'}}: {{raw-date t.bumped_at}}'>{{t.last_poster_username}}</a> </div>
</div> <div class='clearfix'></div>
{{#unless hideCategory}} <div class="topic-item-stats clearfix">
<div class='category'> {{discourse-tags t mode="list" tagsForUser=tagsForUser}}
{{category-link t.category}} <div class="pull-right">
</div> {{raw "list/activity-column" topic=t tagName="div" class="num activity last"}}
{{/unless}} <a href={{t.lastPostUrl}} title='{{i18n 'last_post'}}: {{raw-date t.bumped_at}}'>{{t.last_poster_username}}</a>
<div class="clearfix"></div> </div>
</div> {{#unless hideCategory}}
</td> <div class='category'>
</tr> {{category-link t.category}}
{{/each}} </div>
{{/unless}}
<div class="clearfix"></div>
</div>
</td>
</tr>
{{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}

View File

@ -9,68 +9,71 @@
{{category-title-link category=c}} {{category-title-link category=c}}
</th> </th>
</tr> </tr>
{{#unless c.isMuted}} {{#unless c.isMuted}}
{{#if c.description_excerpt}} {{#if c.description_excerpt}}
<tr class="category-description"> <tr class="category-description">
<td colspan="3"> <td colspan="3">
{{html-safe c.description_excerpt}} {{html-safe c.description_excerpt}}
</td> </td>
</tr> </tr>
{{/if}} {{/if}}
{{#if showTopics}}
{{#if showTopics}} {{#each c.topics as |t|}}
{{#each c.topics as |t|}} {{mobile-category-topic topic=t}}
{{mobile-category-topic topic=t}} {{/each}}
{{/each}} {{/if}}
{{/if}} {{#if c.isGrandParent}}
{{#each c.subcategories as |subcategory|}}
{{#if c.isGrandParent}} <tr data-category-id={{c.id}} class='subcategory-list-item category' style={{border-color subcategory.color}}>
{{#each c.subcategories as |subcategory|}} <td>
<tr data-category-id={{c.id}} class='subcategory-list-item category' style={{border-color subcategory.color}}> {{category-title-link tagName="h4" category=subcategory}}
<td> <div class="subcategories-list">
{{category-title-link tagName="h4" category=subcategory}} {{#if subcategory.subcategories}}
<div class="subcategories-list"> <div class='subcategories'>
{{#if subcategory.subcategories}} {{#each subcategory.subcategories as |subsubcategory|}}
<div class='subcategories'> {{#unless subsubcategory.isMuted}}
{{#each subcategory.subcategories as |subsubcategory|}} {{category-link subsubcategory}}
{{#unless subsubcategory.isMuted}} {{/unless}}
{{category-link subsubcategory}} {{/each}}
{{/unless}} </div>
{{/each}} {{/if}}
</div> </div>
{{/if}} </td>
</div> </tr>
</td> {{/each}}
</tr> {{else if c.subcategories}}
{{/each}} <tr class="subcategories-list">
{{else if c.subcategories}} <td>
<tr class="subcategories-list"> <div class='subcategories'>
<td> {{#each c.subcategories as |subcategory|}}
<div class='subcategories'> {{#unless subcategory.isMuted}}
{{#each c.subcategories as |subcategory|}} {{category-link subcategory}}
{{#unless subcategory.isMuted}} {{/unless}}
{{category-link subcategory}} {{/each}}
{{/unless}} </div>
{{/each}} </td>
</div> </tr>
</td> {{/if}}
</tr>
{{/if}}
{{/unless}} {{/unless}}
</tbody> </tbody>
</table> </table>
<footer class="clearfix"> <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}} {{#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}}
{{#if c.pickWeek}} {{#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}} {{/if}}
</footer> </footer>
</div> </div>
{{/each}} {{/each}}

View File

@ -1,60 +1,63 @@
<section class="user-content"> <section class="user-content">
{{text-field value=filterInput {{text-field
value=filterInput
placeholderKey=filterPlaceholder placeholderKey=filterPlaceholder
autocomplete="discourse" autocomplete="discourse"
class="group-username-filter no-blur"}} class="group-username-filter no-blur"
}}
<div class="group-members-manage"> <div class="group-members-manage">
{{#if canManageGroup}} {{#if canManageGroup}}
{{#if currentUser.admin}} {{#if currentUser.admin}}
{{group-members-dropdown {{group-members-dropdown
showAddMembersModal=(route-action "showAddMembersModal") showAddMembersModal=(route-action "showAddMembersModal")
showBulkAddModal=(route-action "showBulkAddModal") showBulkAddModal=(route-action "showBulkAddModal")
}} }}
{{else}} {{else}}
{{d-button {{d-button
icon="plus" icon="plus"
label="groups.add_members.title" label="groups.add_members.title"
class="group-members-add" class="group-members-add"
action=(route-action "showAddMembersModal")}} action=(route-action "showAddMembersModal")
}}
{{/if}}
{{/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}} {{/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> </section>

View File

@ -1,11 +1,11 @@
{{#d-modal-body id="bookmark-reminder-modal"}} {{#d-modal-body id="bookmark-reminder-modal"}}
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
{{#if errorMessage}} {{#if errorMessage}}
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<div class='alert alert-error'>{{errorMessage}}</div> <div class='alert alert-error'>{{errorMessage}}</div>
</div>
</div> </div>
</div>
{{/if}} {{/if}}
<div class="control-group"> <div class="control-group">
@ -13,83 +13,83 @@
</div> </div>
{{#if showBookmarkReminderControls}} {{#if showBookmarkReminderControls}}
<div class="control-group"> <div class="control-group">
<label class="control-label" for="set_reminder"> <label class="control-label" for="set_reminder">
{{i18n 'post.bookmarks.set_reminder'}} {{i18n 'post.bookmarks.set_reminder'}}
</label> </label>
{{#if userHasTimezoneSet}} {{#if userHasTimezoneSet}}
{{#tap-tile-grid activeTile=selectedReminderType as |grid|}} {{#tap-tile-grid activeTile=selectedReminderType as |grid|}}
{{#if showAtDesktop}} {{#if showAtDesktop}}
{{#tap-tile icon="desktop" tileId=reminderTypes.AT_DESKTOP activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{#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> <div class="tap-tile-title">{{i18n "bookmarks.reminders.at_desktop"}}</div>
{{/tap-tile}} {{/tap-tile}}
{{/if}} {{/if}}
{{#if showLaterToday}} {{#if showLaterToday}}
{{#tap-tile icon="far-moon" tileId=reminderTypes.LATER_TODAY activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{#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-title">{{i18n "bookmarks.reminders.later_today"}}</div>
<div class="tap-tile-date">{{laterTodayFormatted}}</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}} {{/tap-tile}}
{{/if}} {{#if showLaterThisWeek}}
{{#tap-tile icon="far-sun" tileId=reminderTypes.TOMORROW activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{#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.tomorrow"}}</div> <div class="tap-tile-title">{{i18n "bookmarks.reminders.later_this_week"}}</div>
<div class="tap-tile-date">{{tomorrowFormatted}}</div> <div class="tap-tile-date">{{laterThisWeekFormatted}}</div>
{{/tap-tile}} {{/tap-tile}}
{{#if showLaterThisWeek}} {{/if}}
{{#tap-tile icon="angle-double-right" tileId=reminderTypes.LATER_THIS_WEEK activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{#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.later_this_week"}}</div> <div class="tap-tile-title">{{i18n "bookmarks.reminders.start_of_next_business_week"}}</div>
<div class="tap-tile-date">{{laterThisWeekFormatted}}</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}} {{/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}} {{#if customDateTimeSelected}}
<div class="control-group custom-date-time-wrap"> <div class="control-group custom-date-time-wrap">
<div class="tap-tile-date-input"> <div class="tap-tile-date-input">
{{d-icon "calendar-alt"}} {{d-icon "calendar-alt"}}
{{date-picker-future {{date-picker-future
value=customReminderDate value=customReminderDate
onSelect=(action (mut 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>
<div class="tap-tile-time-input"> {{/if}}
{{d-icon "far-clock"}}
{{input placeholder="--:--" type="time" class="time-input" value=customReminderTime}}
</div>
</div>
{{/if}}
{{#if showLastCustom}} {{#if showLastCustom}}
{{#tap-tile icon="undo" tileId=reminderTypes.LAST_CUSTOM activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{#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-title">{{i18n "bookmarks.reminders.last_custom"}}</div>
<div class="tap-tile-date">{{lastCustomFormatted}}</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}} {{/tap-tile}}
{{/if}} {{/tap-tile-grid}}
{{#tap-tile icon="ban" tileId=reminderTypes.NONE activeTile=grid.activeTile onChange=(action "selectReminderType")}} {{else}}
<div class="tap-tile-title">{{i18n "bookmarks.reminders.none"}}</div> <div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=basePath)}}</div>
{{/tap-tile}} {{/if}}
{{/tap-tile-grid}} </div>
{{else}}
<div class="alert alert-info">{{html-safe (i18n "bookmarks.no_timezone" basePath=basePath)}}</div>
{{/if}}
</div>
{{/if}} {{/if}}
<div class="control-group"> <div class="control-group">

View File

@ -10,117 +10,123 @@
{{#if showCreateForm}} {{#if showCreateForm}}
<div class="login-form"> <div class="login-form">
<form> <form>
<table> <table>
<tbody> <tbody>
<tr class="input create-account-email"> <tr class="input create-account-email">
<td class="label"><label for='new-account-email'>{{i18n 'user.email.title'}}</label></td> <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>
<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> </td>
</tr> </tr>
<tr class="instructions">
<tr class="instructions create-account-email">
<td></td> <td></td>
{{input-tip validation=nameValidation}} {{input-tip validation=emailValidation id="account-email-validation"}}
<td><label>{{nameInstructions}}</label></td> <td><label>{{i18n 'user.email.instructions'}}</label></td>
</tr> </tr>
{{/if}}
{{plugin-outlet name="create-account-before-password" {{#if usernameRequired}}
noTags=true <tr class="input">
args=(hash accountName=accountName <td class="label"><label for='new-account-username'>{{i18n 'user.username.title'}}</label></td>
accountUsername=accountUsername <td>
accountPassword=accountPassword {{input value=accountUsername id="new-account-username" name="username" maxlength=maxUsernameLength autocomplete="discourse"}}
userFields=userFields </td>
authOptions=authOptions)}} </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}} {{#if fullnameRequired}}
<tr class="input"> <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 class="label"><label for='new-account-password'>{{i18n 'user.password.title'}}</label></td>
<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> </td>
</tr> </tr>
<tr class="instructions"> <tr class="instructions">
<td></td> <td></td>
{{input-tip validation=passwordValidation}} {{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> <td>
<label>{{passwordInstructions}}</label> {{honeypot-input id="new-account-confirmation" autocomplete="new-password" value=accountHoneypot}}
<div class="caps-lock-warning {{unless capsLockOn 'hidden'}}"> {{input value=accountChallenge id="new-account-challenge"}}
{{d-icon "exclamation-triangle"}} {{i18n 'login.caps_lock_warning'}}</div>
</td> </td>
</tr> </tr>
{{/if}}
<tr class="password-confirmation"> {{#if requireInviteCode }}
<td><label for='new-account-password-confirmation'>{{i18n 'user.password_confirmation.title'}}</label></td> <tr class="invite-code">
<td> <td><label for='invite-code'>{{i18n 'user.invite_code.title'}}</label></td>
{{honeypot-input id="new-account-confirmation" autocomplete="new-password" value=accountHoneypot}} <td>
{{input value=accountChallenge id="new-account-challenge"}} {{input value=inviteCode id="inviteCode"}}
</td> </td>
</tr> <td><label>{{i18n 'user.invite_code.instructions'}}</label></td>
</tr>
{{/if}}
{{#if requireInviteCode }} {{plugin-outlet
<tr class="invite-code"> name="create-account-after-password"
<td><label for='invite-code'>{{i18n 'user.invite_code.title'}}</label></td> noTags=true
<td> args=(hash
{{input value=inviteCode id="inviteCode"}} accountName=accountName
</td> accountUsername=accountUsername
accountPassword=accountPassword
<td><label>{{i18n 'user.invite_code.instructions'}}</label></td> userFields=userFields
</tr> )
{{/if}} }}
</tbody>
{{plugin-outlet name="create-account-after-password" </table>
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}}
{{#if userFields}}
<div class='user-fields'>
{{#each userFields as |f|}}
{{user-field field=f.field value=f.value}}
{{/each}}
</div>
{{/if}}
</form> </form>
</div> </div>
{{/if}} {{/if}}
{{/d-modal-body}} {{/d-modal-body}}
{{#if showCreateForm}} {{#if showCreateForm}}
@ -129,7 +135,8 @@
class="btn-large btn-primary" class="btn-large btn-primary"
action=(action "createAccount") action=(action "createAccount")
disabled=submitDisabled disabled=submitDisabled
label="create_account.title"}} label="create_account.title"
}}
{{#conditional-loading-spinner condition=formSubmitted size="small"}} {{#conditional-loading-spinner condition=formSubmitted size="small"}}
{{#d-button class="btn-large" id="login-link" action=(route-action "showLogin")}} {{#d-button class="btn-large" id="login-link" action=(route-action "showLogin")}}
@ -137,11 +144,10 @@
{{/d-button}} {{/d-button}}
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}
<div class='disclaimer'>{{html-safe disclaimerHtml}}</div> <div class='disclaimer'>{{html-safe disclaimerHtml}}</div>
</div> </div>
{{plugin-outlet name="create-account-after-modal-footer" tagName=""}} {{plugin-outlet name="create-account-after-modal-footer" tagName=""}}
{{/if}} {{/if}}
{{/unless}} {{/unless}}
{{/create-account}} {{/create-account}}

View File

@ -1,14 +1,16 @@
{{#d-modal-body class="flag-modal-body" title=title}} {{#d-modal-body class="flag-modal-body" title=title}}
<form> <form>
{{#flag-selection nameKey=selected.name_key flags=flagsAvailable as |f|}} {{#flag-selection nameKey=selected.name_key flags=flagsAvailable as |f|}}
{{flag-action-type flag=f {{flag-action-type
message=message flag=f
isWarning=isWarning message=message
selectedFlag=selected isWarning=isWarning
username=model.username selectedFlag=selected
staffFlagsAvailable=staffFlagsAvailable username=model.username
changePostActionType=(action "changePostActionType")}} staffFlagsAvailable=staffFlagsAvailable
{{/flag-selection}} changePostActionType=(action "changePostActionType")
}}
{{/flag-selection}}
</form> </form>
{{/d-modal-body}} {{/d-modal-body}}
@ -19,7 +21,8 @@
disabled=submitDisabled disabled=submitDisabled
title="flagging.submit_tooltip" title="flagging.submit_tooltip"
icon=submitIcon icon=submitIcon
label=submitLabel}} label=submitLabel
}}
{{#if canSendWarning}} {{#if canSendWarning}}
{{d-button {{d-button
@ -27,7 +30,8 @@
action=(action "createFlagAsWarning") action=(action "createFlagAsWarning")
disabled=submitDisabled disabled=submitDisabled
icon="exclamation-triangle" icon="exclamation-triangle"
label="flagging.official_warning"}} label="flagging.official_warning"
}}
{{/if}} {{/if}}
{{#if canTakeAction}} {{#if canTakeAction}}
@ -37,7 +41,8 @@
disabled=submitDisabled disabled=submitDisabled
title="flagging.take_action_tooltip" title="flagging.take_action_tooltip"
icon="gavel" icon="gavel"
label="flagging.take_action"}} label="flagging.take_action"
}}
{{/if}} {{/if}}
{{#if showDeleteSpammer}} {{#if showDeleteSpammer}}
@ -46,6 +51,7 @@
action=(action "deleteSpammer") action=(action "deleteSpammer")
disabled=submitDisabled disabled=submitDisabled
icon="exclamation-triangle" icon="exclamation-triangle"
label="flagging.delete_spammer"}} label="flagging.delete_spammer"
}}
{{/if}} {{/if}}
</div> </div>

View File

@ -1,40 +1,40 @@
<form {{action "ok" on="submit"}}> <form {{action "ok" on="submit"}}>
{{#d-modal-body title="composer.link_dialog_title" class="insert-link"}} {{#d-modal-body title="composer.link_dialog_title" class="insert-link"}}
<div class="inputs"> <div class="inputs">
{{text-field {{text-field
value=linkUrl value=linkUrl
placeholderKey="composer.link_url_placeholder" placeholderKey="composer.link_url_placeholder"
class="link-url" class="link-url"
key-up=(action "search") key-up=(action "search")
}} }}
{{#if searchLoading}} {{#if searchLoading}}
{{loading-spinner}} {{loading-spinner}}
{{/if}} {{/if}}
{{#if searchResults}} {{#if searchResults}}
<div class="internal-link-results"> <div class="internal-link-results">
{{#each searchResults as |result|}} {{#each searchResults as |result|}}
<a <a
class="search-link" class="search-link"
href={{result.url}} href={{result.url}}
onclick={{action "linkClick"}} onclick={{action "linkClick"}}
data-title={{result.title}}> data-title={{result.title}}>
{{topic-status topic=result disableActions=true}} {{topic-status topic=result disableActions=true}}
{{replace-emoji result.fancy_title}} {{replace-emoji result.fancy_title}}
<div class="search-category"> <div class="search-category">
{{#if result.category.parentCategory}} {{#if result.category.parentCategory}}
{{category-link result.category.parentCategory}} {{category-link result.category.parentCategory}}
{{/if}} {{/if}}
{{category-link result.category hideParent=true}} {{category-link result.category hideParent=true}}
{{discourse-tags result}} {{discourse-tags result}}
</div> </div>
</a> </a>
{{/each}} {{/each}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
<div class="inputs"> <div class="inputs">
{{text-field value=linkText placeholderKey="composer.link_optional_text" class="link-text"}} {{text-field value=linkText placeholderKey="composer.link_optional_text" class="link-text"}}
</div> </div>
{{/d-modal-body}} {{/d-modal-body}}
<div class="modal-footer"> <div class="modal-footer">

View File

@ -56,21 +56,21 @@
</ul> </ul>
</section> </section>
{{#if showBookmarkShortcuts}} {{#if showBookmarkShortcuts}}
<section class="keyboard-shortcuts-bookmark-section"> <section class="keyboard-shortcuts-bookmark-section">
<h4>{{i18n "keyboard_shortcuts_help.bookmarks.title"}}</h4> <h4>{{i18n "keyboard_shortcuts_help.bookmarks.title"}}</h4>
<ul> <ul>
<li>{{html-safe shortcuts.bookmarks.enter}}</li> <li>{{html-safe shortcuts.bookmarks.enter}}</li>
<li>{{html-safe shortcuts.bookmarks.later_today}}</li> <li>{{html-safe shortcuts.bookmarks.later_today}}</li>
<li>{{html-safe shortcuts.bookmarks.later_this_week}}</li> <li>{{html-safe shortcuts.bookmarks.later_this_week}}</li>
<li>{{html-safe shortcuts.bookmarks.tomorrow}}</li> <li>{{html-safe shortcuts.bookmarks.tomorrow}}</li>
<li>{{html-safe shortcuts.bookmarks.next_week}}</li> <li>{{html-safe shortcuts.bookmarks.next_week}}</li>
<li>{{html-safe shortcuts.bookmarks.next_month}}</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_week}}</li>
<li>{{html-safe shortcuts.bookmarks.next_business_day}}</li> <li>{{html-safe shortcuts.bookmarks.next_business_day}}</li>
<li>{{html-safe shortcuts.bookmarks.custom}}</li> <li>{{html-safe shortcuts.bookmarks.custom}}</li>
<li>{{html-safe shortcuts.bookmarks.none}}</li> <li>{{html-safe shortcuts.bookmarks.none}}</li>
</ul> </ul>
</section> </section>
{{/if}} {{/if}}
</div> </div>
<div class="column"> <div class="column">

View File

@ -2,25 +2,25 @@
<div id="rc-scroll-anchor"></div> <div id="rc-scroll-anchor"></div>
<table> <table>
<thead> <thead>
<th class="th-cat">{{i18n "categories.category"}}</th> <th class="th-cat">{{i18n "categories.category"}}</th>
<th class="th-pos">{{i18n "categories.reorder.position"}}</th> <th class="th-pos">{{i18n "categories.reorder.position"}}</th>
</thead> </thead>
<tbody> <tbody>
{{#each categoriesOrdered as |cat|}} {{#each categoriesOrdered as |cat|}}
<tr data-category-id={{cat.id}}> <tr data-category-id={{cat.id}}>
<td> <td>
<div class={{concat 'reorder-categories-depth-' cat.depth}}> <div class={{concat 'reorder-categories-depth-' cat.depth}}>
{{category-badge cat allowUncategorized="true"}} {{category-badge cat allowUncategorized="true"}}
</div> </div>
</td> </td>
<td> <td>
{{number-field number=(readonly cat.position) change=(action 'change' cat)}} {{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 "moveUp") actionParam=cat icon="arrow-up"}}
{{d-button class="btn-default no-text" action=(action "moveDown") actionParam=cat icon="arrow-down"}} {{d-button class="btn-default no-text" action=(action "moveDown") actionParam=cat icon="arrow-down"}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
<div id="rc-scroll-bottom"></div> <div id="rc-scroll-bottom"></div>

View File

@ -1,11 +1,11 @@
{{#d-modal-body}} {{#d-modal-body}}
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
{{#if errorMessage}} {{#if errorMessage}}
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<div class='alert alert-error'>{{errorMessage}}</div> <div class='alert alert-error'>{{errorMessage}}</div>
</div>
</div> </div>
</div>
{{/if}} {{/if}}
<div class="control-group"> <div class="control-group">

View File

@ -1,51 +1,51 @@
{{#d-modal-body}} {{#d-modal-body}}
<section class="user-preferences solo-preference second-factor-backup-preferences"> <section class="user-preferences solo-preference second-factor-backup-preferences">
<form class="form-horizontal"> <form class="form-horizontal">
{{#if successMessage}} {{#if successMessage}}
<div class="alert alert-success"> <div class="alert alert-success">
{{successMessage}} {{successMessage}}
</div> </div>
{{/if}} {{/if}}
{{#if errorMessage}} {{#if errorMessage}}
<div class="alert alert-error"> <div class="alert alert-error">
{{errorMessage}} {{errorMessage}}
</div> </div>
{{/if}} {{/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}} {{#if backupEnabled}}
{{html-safe (i18n "user.second_factor_backup.remaining_codes" count=remainingCodes)}}
{{/if}}
<div class="actions">
{{d-button {{d-button
class="btn-danger" class="btn-primary"
action=(action "disableSecondFactorBackup") action=(action "generateSecondFactorCodes")
type="submit"
disabled=loading disabled=loading
label="user.second_factor_backup.disable"}} label=generateBackupCodeBtnLabel}}
{{/if}} {{#if backupEnabled}}
</div> {{d-button
class="btn-danger"
action=(action "disableSecondFactorBackup")
disabled=loading
label="user.second_factor_backup.disable"}}
{{/if}}
</div>
{{#conditional-loading-section isLoading=loading}} {{#conditional-loading-section isLoading=loading}}
{{#if backupCodes}} {{#if backupCodes}}
<h3>{{i18n "user.second_factor_backup.codes.title"}}</h3> <h3>{{i18n "user.second_factor_backup.codes.title"}}</h3>
<p> <p>
{{i18n "user.second_factor_backup.codes.description"}} {{i18n "user.second_factor_backup.codes.description"}}
</p> </p>
{{backup-codes {{backup-codes
copyBackupCode=(action "copyBackupCode") copyBackupCode=(action "copyBackupCode")
backupCodes=backupCodes}} backupCodes=backupCodes}}
{{/if}} {{/if}}
{{/conditional-loading-section}} {{/conditional-loading-section}}
</form> </form>
</section> </section>
{{/d-modal-body}} {{/d-modal-body}}

View File

@ -1,15 +1,18 @@
{{#d-modal-body}} {{#d-modal-body}}
<div class="form-horizontal"> <div class="form-horizontal">
{{input type="text" value=model.name}} {{input type="text" value=model.name}}
</div> </div>
<div class='second-factor instructions'> <div class='second-factor instructions'>
{{i18n 'user.second_factor.security_key.edit_description'}} {{i18n 'user.second_factor.security_key.edit_description'}}
</div> </div>
{{d-button action=(action "editSecurityKey") {{d-button
action=(action "editSecurityKey")
class="btn-primary" class="btn-primary"
label="user.second_factor.security_key.edit"}} label="user.second_factor.security_key.edit"
}}
{{d-button action=(action "disableSecurityKey") {{d-button
action=(action "disableSecurityKey")
class="btn-danger" class="btn-danger"
label="user.second_factor.security_key.delete"}} label="user.second_factor.security_key.delete"
}}
{{/d-modal-body}} {{/d-modal-body}}

View File

@ -1,15 +1,18 @@
{{#d-modal-body}} {{#d-modal-body}}
<div class="form-horizontal"> <div class="form-horizontal">
{{input type="text" value=model.name}} {{input type="text" value=model.name}}
</div> </div>
<div class='second-factor instructions'> <div class='second-factor instructions'>
{{i18n 'user.second_factor.edit_description'}} {{i18n 'user.second_factor.edit_description'}}
</div> </div>
{{d-button action=(action "editSecondFactor") {{d-button
action=(action "editSecondFactor")
class="btn-primary" class="btn-primary"
label="user.second_factor.edit"}} label="user.second_factor.edit"
}}
{{d-button action=(action "disableSecondFactor") {{d-button
action=(action "disableSecondFactor")
class="btn-danger" class="btn-danger"
label="user.second_factor.disable"}} label="user.second_factor.disable"
}}
{{/d-modal-body}} {{/d-modal-body}}

View File

@ -53,7 +53,8 @@
<div class="instructions"> <div class="instructions">
<div class="caps-lock-warning {{unless capsLockOn 'invisible'}}"> <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>
{{d-button action=(action "submit") class='btn-primary' label='user.change_password.set_password' type='submit'}} {{d-button action=(action "submit") class='btn-primary' label='user.change_password.set_password' type='submit'}}

View File

@ -1,162 +1,161 @@
<section class='user-preferences solo-preference second-factor'> <section class='user-preferences solo-preference second-factor'>
{{#conditional-loading-spinner condition=loading}} {{#conditional-loading-spinner condition=loading}}
<form class="form-horizontal"> <form class="form-horizontal">
{{#if showEnforcedNotice}}
{{#if showEnforcedNotice}} <div class="control-group">
<div class="control-group"> <div class="controls">
<div class="controls"> <div class='alert alert-error'>{{i18n 'user.second_factor.enforced_notice'}}</div>
<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>
</div> </div>
{{/unless}} </div>
{{/if}} {{/if}}
{{else}}
<div class="control-group">
<label class='control-label'>{{i18n 'user.password.title'}}</label>
<div class="controls"> {{#if displayOAuthWarning}}
<div> <div class="control-group">
{{text-field value=password <div class="controls">
id="password" {{i18n 'user.second_factor.oauth_enabled_warning'}}
type="password"
classNames="input-large"
autofocus="autofocus"}}
</div>
<div class='instructions'>
{{i18n 'user.second_factor.confirm_password_description'}}
</div> </div>
</div> </div>
</div> {{/if}}
<div class="control-group"> {{#if errorMessage}}
<div class="controls"> <div class="control-group">
{{d-button <div class="controls">
class="btn-primary" <div class='alert alert-error'>{{errorMessage}}</div>
type="submit" </div>
action=(action "confirmPassword") </div>
disabled=loading {{/if}}
label="continue"}}
{{#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}} {{#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}} {{/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>
<div class="controls" style="margin-top: 5px">
{{resetPasswordProgress}} <div class="control-group">
{{#unless resetPasswordLoading}} <div class="controls">
<a href class="instructions" {{action "resetPassword"}}>{{ i18n 'user.second_factor.forgot_password' }}</a> {{d-button
{{/unless}} 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>
</div> {{/if}}
{{/if}} </form>
</form>
{{/conditional-loading-spinner}} {{/conditional-loading-spinner}}
</section> </section>

View File

@ -4,7 +4,8 @@
<span class='static'>{{model.username}}</span> <span class='static'>{{model.username}}</span>
{{#if model.can_edit_username}} {{#if model.can_edit_username}}
{{#link-to "preferences.username" class="btn btn-default btn-small btn-icon pad-left no-text"}} {{#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}} {{/if}}
</div> </div>
{{#if siteSettings.enable_mentions}} {{#if siteSettings.enable_mentions}}
@ -66,37 +67,37 @@
{{/if}} {{/if}}
{{#if canChangePassword}} {{#if canChangePassword}}
<div class="control-group pref-password"> <div class="control-group pref-password">
<label class="control-label">{{i18n 'user.password.title'}}</label> <label class="control-label">{{i18n 'user.password.title'}}</label>
<div class="controls"> <div class="controls">
<a href {{action "changePassword"}} class='btn btn-default'> <a href {{action "changePassword"}} class='btn btn-default'>
{{d-icon "envelope"}} {{d-icon "envelope"}}
{{#if model.no_password}} {{#if model.no_password}}
{{i18n 'user.change_password.set_password'}} {{i18n 'user.change_password.set_password'}}
{{else}} {{else}}
{{i18n 'user.change_password.action'}} {{i18n 'user.change_password.action'}}
{{/if}} {{/if}}
</a> </a>
{{passwordProgress}} {{passwordProgress}}
</div>
</div> </div>
</div>
<div class="control-group pref-second-factor"> <div class="control-group pref-second-factor">
<label class="control-label">{{i18n 'user.second_factor.title'}}</label> <label class="control-label">{{i18n 'user.second_factor.title'}}</label>
{{#unless model.second_factor_enabled}} {{#unless model.second_factor_enabled}}
<label> <label>
{{i18n 'user.second_factor.short_description'}} {{i18n 'user.second_factor.short_description'}}
</label> </label>
{{/unless}} {{/unless}}
<div class="controls pref-second-factor"> <div class="controls pref-second-factor">
{{#if isCurrentUser}} {{#if isCurrentUser}}
{{#link-to "preferences.second-factor" class="btn btn-default"}} {{#link-to "preferences.second-factor" class="btn btn-default"}}
{{d-icon "lock"}} <span>{{i18n 'user.second_factor.enable'}}</span> {{d-icon "lock"}} <span>{{i18n 'user.second_factor.enable'}}</span>
{{/link-to}} {{/link-to}}
{{/if}} {{/if}}
</div>
</div> </div>
</div>
{{/if}} {{/if}}
{{#if canUpdateAssociatedAccounts}} {{#if canUpdateAssociatedAccounts}}
@ -109,23 +110,23 @@
{{#if authProvider.account}} {{#if authProvider.account}}
<tr class="{{dasherize authProvider.method.name}} account-connected"> <tr class="{{dasherize authProvider.method.name}} account-connected">
<td>{{authProvider.method.prettyName}}</td> <td>{{authProvider.method.prettyName}}</td>
<td>{{authProvider.account.description}}</td> <td>{{authProvider.account.description}}</td>
<td> <td>
{{#if authProvider.method.can_revoke}} {{#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) }} {{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}} {{/if}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
<tr class={{dasherize authProvider.method.name}}> <tr class={{dasherize authProvider.method.name}}>
<td>{{authProvider.method.prettyName}}</td> <td>{{authProvider.method.prettyName}}</td>
<td colspan="2"> <td colspan="2">
{{#if authProvider.method.can_connect}} {{#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}} {{d-button action=(action "connectAccount") actionParam=authProvider.method label="user.associated_accounts.connect" class="btn-default" icon="plug" disabled=disableConnectButtons}}
{{else}} {{else}}
{{i18n 'user.associated_accounts.not_connected'}} {{i18n 'user.associated_accounts.not_connected'}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{/if}} {{/if}}
{{/each}} {{/each}}

View File

@ -1,28 +1,28 @@
{{#if model.userApiKeys}} {{#if model.userApiKeys}}
<div class="control-group apps"> <div class="control-group apps">
<label class="control-label">{{i18n 'user.apps'}}</label> <label class="control-label">{{i18n 'user.apps'}}</label>
<div class="controls"> <div class="controls">
{{#each model.userApiKeys as |key|}} {{#each model.userApiKeys as |key|}}
<div> <div>
<span>{{key.application_name}}</span> <span>{{key.application_name}}</span>
{{#if key.revoked}} {{#if key.revoked}}
{{d-button action=(route-action "undoRevokeApiKey") actionParam=key class="btn" label="user.undo_revoke_access"}} {{d-button action=(route-action "undoRevokeApiKey") actionParam=key class="btn" label="user.undo_revoke_access"}}
{{else}} {{else}}
{{d-button action=(route-action "revokeApiKey") actionParam=key class="btn" label="user.revoke_access"}} {{d-button action=(route-action "revokeApiKey") actionParam=key class="btn" label="user.revoke_access"}}
{{/if}} {{/if}}
<p> <p>
<ul> <ul>
{{#each key.scopes as |scope|}} {{#each key.scopes as |scope|}}
<li>{{scope}}</li> <li>{{scope}}</li>
{{/each}} {{/each}}
</ul> </ul>
</p> </p>
<p><span>{{i18n "user.api_approved"}}</span> {{bound-date key.created_at}}</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> <p><span>{{i18n "user.api_last_used_at"}}</span> {{bound-date key.last_used_at}}</p>
</div>
{{/each}}
</div> </div>
{{/each}}
</div> </div>
</div>
{{/if}} {{/if}}
{{plugin-outlet name="user-preferences-apps" args=(hash model=model)}} {{plugin-outlet name="user-preferences-apps" args=(hash model=model)}}

View File

@ -1,7 +1,7 @@
{{#unless siteSettings.disable_mailing_list_mode}} {{#unless siteSettings.disable_mailing_list_mode}}
{{~#if model.user_option.mailing_list_mode}} {{~#if model.user_option.mailing_list_mode}}
<div class="warning-wrap"> <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> </div>
{{/if}} {{/if}}
{{/unless}} {{/unless}}

View File

@ -1,19 +1,19 @@
{{#if showThemeSelector}} {{#if showThemeSelector}}
<div class="control-group theme"> <div class="control-group theme">
<label class="control-label">{{i18n 'user.theme'}}</label> <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="controls"> <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> </div>
{{/if}} {{#if showThemeSetDefault}}
</div> <div class="controls">
{{preference-checkbox labelKey="user.theme_default_on_all_devices" checked=makeThemeDefault}}
</div>
{{/if}}
</div>
{{/if}} {{/if}}
<div class="control-group text-size"> <div class="control-group text-size">

View File

@ -1,5 +1,5 @@
<div class="control-group notifications"> <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"> <div class="controls controls-dropdown">
<label>{{i18n 'user.new_topic_duration.label'}}</label> <label>{{i18n 'user.new_topic_duration.label'}}</label>

View File

@ -1,10 +1,10 @@
{{#if canChangeBio}} {{#if canChangeBio}}
<div class="control-group pref-bio"> <div class="control-group pref-bio">
<label class="control-label">{{i18n 'user.bio'}}</label> <label class="control-label">{{i18n 'user.bio'}}</label>
<div class="controls bio-composer input-xxlarge"> <div class="controls bio-composer input-xxlarge">
{{d-editor value=model.bio_raw}} {{d-editor value=model.bio_raw}}
</div>
</div> </div>
</div>
{{/if}} {{/if}}
<div class="control-group pref-timezone"> <div class="control-group pref-timezone">
@ -67,7 +67,9 @@
<label class="control-label">{{i18n 'user.featured_topic'}}</label> <label class="control-label">{{i18n 'user.featured_topic'}}</label>
{{#if model.featured_topic}} {{#if model.featured_topic}}
<label class="featured-topic-link"> <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> </label>
{{/if}} {{/if}}

View File

@ -1,64 +1,67 @@
{{#if siteSettings.tagging_enabled}} {{#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"> <div class="instructions">{{i18n 'user.watched_tags_instructions'}}</div>
<label>{{d-icon "d-watching" class="icon watching"}} {{i18n 'user.watched_tags'}}</label>
{{tag-chooser <div class="controls tracking-controls">
tags=model.watched_tags <label>{{d-icon "d-tracking" class="icon tracking"}} {{i18n 'user.tracked_tags'}}</label>
blacklist=selectedTags {{tag-chooser
filterPlaceholder="select_kit.filter_placeholder" tags=model.tracked_tags
allowCreate=false blacklist=selectedTags
everyTag=true filterPlaceholder="select_kit.filter_placeholder"
unlimitedTagCount=true}} 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>
<div class="instructions">{{i18n 'user.watched_tags_instructions'}}</div>
<div class="controls tracking-controls"> {{plugin-outlet name="user-preferences-tags" args=(hash model=model save=(action "save"))}}
<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"> <br>
<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"> {{plugin-outlet name="user-custom-controls" args=(hash model=model)}}
<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}}
{{save-controls model=model action=(action "save") saved=saved}}
{{/if}} {{/if}}

View File

@ -7,29 +7,29 @@
<th></th> <th></th>
</thead> </thead>
<tbody> <tbody>
{{#each reviewableTopics as |rt|}} {{#each reviewableTopics as |rt|}}
<tr class='reviewable-topic'> <tr class='reviewable-topic'>
<td class="topic-title"> <td class="topic-title">
<div class='combined-title'> <div class='combined-title'>
{{topic-status topic=rt}} {{topic-status topic=rt}}
<a href={{rt.relative_url}} rel="noopener" target="_blank">{{replace-emoji rt.fancy_title}}</a> <a href={{rt.relative_url}} rel="noopener" target="_blank">{{replace-emoji rt.fancy_title}}</a>
</div> </div>
</td> </td>
<td class="reviewable-count"> <td class="reviewable-count">
{{rt.stats.count}} {{rt.stats.count}}
</td> </td>
<td class="reported-by"> <td class="reported-by">
{{i18n "review.topics.unique_users" count=rt.stats.unique_users}} {{i18n "review.topics.unique_users" count=rt.stats.unique_users}}
</td> </td>
<td class="reviewable-details"> <td class="reviewable-details">
{{reviewable-claimed-topic topicId=rt.id claimedBy=rt.claimed_by}} {{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"}} {{#link-to "review.index" (query-params topic_id=rt.id) class="btn btn-primary btn-small"}}
{{d-icon "list"}} {{d-icon "list"}}
<span>{{i18n "review.topics.details"}}</span> <span>{{i18n "review.topics.details"}}</span>
{{/link-to}} {{/link-to}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}

View File

@ -5,44 +5,45 @@
<div class="list-controls"> <div class="list-controls">
<div class="container"> <div class="container">
<section class="navigation-container"> <section class="navigation-container">
{{#if showTagFilter}}
{{#if showTagFilter}} {{bread-crumbs
{{bread-crumbs categories=categories categories=categories
category=category category=category
tagId=tag.id tagId=tag.id
noSubcategories=noSubcategories}} 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>&amp;</span>
{{discourse-tag tag style="simple"}}
{{/each}}
</h2>
{{/if}}
{{#if tagNotification}}
{{#unless additionalTags}}
{{tag-notifications-button
onChange=(action "changeTagNotificationLevel")
value=tagNotification.notification_level
}} }}
{{/unless}} {{navigation-bar navItems=navItems filterMode=filterMode}}
{{/if}} {{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>&amp;</span>
{{discourse-tag tag style="simple"}}
{{/each}}
</h2>
{{/if}}
{{create-topic-button {{#if tagNotification}}
canCreateTopic=canCreateTopic {{#unless additionalTags}}
disabled=createTopicDisabled {{tag-notifications-button
label=createTopicLabel onChange=(action "changeTagNotificationLevel")
action=(route-action "createTopic")}} value=tagNotification.notification_level
}}
{{/unless}}
{{/if}}
{{#if showToggleInfo}} {{create-topic-button
{{d-button icon="tag" label="tagging.info" action=(action "toggleInfo") id="show-tag-info"}} canCreateTopic=canCreateTopic
{{/if}} 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> </section>
</div> </div>
</div> </div>
@ -52,6 +53,7 @@
{{/if}} {{/if}}
{{plugin-outlet name="discovery-list-container-top"}} {{plugin-outlet name="discovery-list-container-top"}}
<div class="container list-container"> <div class="container list-container">
<div class="row"> <div class="row">
<div class="full-width"> <div class="full-width">
@ -59,18 +61,18 @@
{{#unless loading}} {{#unless loading}}
{{#if list.topics}} {{#if list.topics}}
{{#discovery-topics-list model=list refresh=(action "refresh")}} {{#discovery-topics-list model=list refresh=(action "refresh")}}
{{bulk-select-button selected=selected action=(action "refresh")}} {{bulk-select-button selected=selected action=(action "refresh")}}
{{topic-list
{{topic-list topics=list.topics topics=list.topics
canBulkSelect=canBulkSelect canBulkSelect=canBulkSelect
toggleBulkSelect=(action "toggleBulkSelect") toggleBulkSelect=(action "toggleBulkSelect")
bulkSelectEnabled=bulkSelectEnabled bulkSelectEnabled=bulkSelectEnabled
selected=selected selected=selected
showPosters=true showPosters=true
order=order order=order
ascending=ascending ascending=ascending
changeSort=(action "changeSort")}} changeSort=(action "changeSort")
}}
{{/discovery-topics-list}} {{/discovery-topics-list}}
{{else}} {{else}}
<footer class='topic-list-bottom'> <footer class='topic-list-bottom'>

View File

@ -91,8 +91,8 @@
{{else}} {{else}}
{{d-button icon="times" action=(action "rescind") actionParam=invite label="user.invited.rescind"}} {{d-button icon="times" action=(action "rescind") actionParam=invite label="user.invited.rescind"}}
{{/if}} {{/if}}
</td> </td>
<td> <td>
{{#if invite.reinvited}} {{#if invite.reinvited}}
<div>{{i18n 'user.invited.reinvited'}}</div> <div>{{i18n 'user.invited.reinvited'}}</div>
{{else}} {{else}}

View File

@ -1,51 +1,49 @@
{{plugin-outlet name="above-user-profile" tagName='' args=(hash model=model)}} {{plugin-outlet name="above-user-profile" tagName='' args=(hash model=model)}}
<div class="container {{if viewingSelf 'viewing-self'}}"> <div class="container {{if viewingSelf 'viewing-self'}}">
{{#d-section class="user-main"}} {{#d-section class="user-main"}}
<section class="{{if collapsedInfo 'collapsed-info'}} about {{if hasProfileBackgroundUrl 'has-background' 'no-background'}}" > <section class="{{if collapsedInfo 'collapsed-info'}} about {{if hasProfileBackgroundUrl 'has-background' 'no-background'}}" >
{{#unless collapsedInfo}} {{#unless collapsedInfo}}
{{#if showStaffCounters}} {{#if showStaffCounters}}
<div class='staff-counters'> <div class='staff-counters'>
{{#if model.number_of_flags_given}} {{#if model.number_of_flags_given}}
<div><span class="helpful-flags">{{model.number_of_flags_given}}</span>{{i18n 'user.staff_counters.flags_given'}}</div> <div><span class="helpful-flags">{{model.number_of_flags_given}}</span>{{i18n 'user.staff_counters.flags_given'}}</div>
{{/if}} {{/if}}
{{#if model.number_of_flagged_posts}} {{#if model.number_of_flagged_posts}}
<div> <div>
{{#link-to 'review' (query-params username=model.username status='all' type='ReviewableFlaggedPost')}} {{#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'}} <span class="flagged-posts">{{model.number_of_flagged_posts}}</span>{{i18n 'user.staff_counters.flagged_posts'}}
{{/link-to}} {{/link-to}}
</div> </div>
{{/if}} {{/if}}
{{#if model.number_of_rejected_posts}} {{#if model.number_of_rejected_posts}}
<div> <div>
{{#link-to 'review' (query-params username=model.username status='rejected' type='ReviewableQueuedPost')}} {{#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'}} <span class="flagged-posts">{{model.number_of_rejected_posts}}</span>{{i18n 'user.staff_counters.rejected_posts'}}
{{/link-to}} {{/link-to}}
</div> </div>
{{/if}} {{/if}}
{{#if model.number_of_deleted_posts}} {{#if model.number_of_deleted_posts}}
<div> <div>
{{#link-to 'user.deletedPosts' model}} {{#link-to 'user.deletedPosts' model}}
<span class="deleted-posts">{{model.number_of_deleted_posts}}</span>{{i18n 'user.staff_counters.deleted_posts'}} <span class="deleted-posts">{{model.number_of_deleted_posts}}</span>{{i18n 'user.staff_counters.deleted_posts'}}
{{/link-to}} {{/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> </div>
{{/if}} {{/if}}
{{#if model.number_of_suspensions}} <div class="user-profile-image" style={{model.profileBackgroundUrl}}></div>
<div> {{/unless}}
<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='details'>
<div class='primary'> <div class='primary'>
{{user-profile-avatar user=model tagName=""}} {{user-profile-avatar user=model tagName=""}}
@ -113,19 +111,19 @@
{{/if}} {{/if}}
<h3 class="location-and-website"> <h3 class="location-and-website">
{{#if model.location}}<div class="user-profile-location">{{d-icon "map-marker-alt"}} {{model.location}}</div>{{/if}} {{#if model.location}}<div class="user-profile-location">{{d-icon "map-marker-alt"}} {{model.location}}</div>{{/if}}
{{#if model.website_name}} {{#if model.website_name}}
<div class="user-profile-website"> <div class="user-profile-website">
{{d-icon "globe"}} {{d-icon "globe"}}
{{#if linkWebsite}} {{#if linkWebsite}}
{{!-- template-lint-disable --}} {{!-- template-lint-disable --}}
<a href={{model.website}} rel="noopener {{unless removeNoFollow 'nofollow ugc'}}" target="_blank">{{model.website_name}}</a> <a href={{model.website}} rel="noopener {{unless removeNoFollow 'nofollow ugc'}}" target="_blank">{{model.website_name}}</a>
{{else}} {{else}}
<span title={{model.website}}>{{model.website_name}}</span> <span title={{model.website}}>{{model.website_name}}</span>
{{/if}}
</div>
{{/if}} {{/if}}
</div> {{plugin-outlet name="user-location-and-website" args=(hash model=model)}}
{{/if}}
{{plugin-outlet name="user-location-and-website" args=(hash model=model)}}
</h3> </h3>
<div class='bio'> <div class='bio'>
@ -138,7 +136,8 @@
{{else}} {{else}}
{{i18n 'user.suspended_notice' date=model.suspendedTillDate}} {{i18n 'user.suspended_notice' date=model.suspendedTillDate}}
{{/if}} {{/if}}
</b><br> </b>
<br>
{{#if model.suspend_reason}} {{#if model.suspend_reason}}
<b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}} <b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}}
{{/if}} {{/if}}
@ -170,97 +169,90 @@
</div> </div>
</div> </div>
{{#unless collapsedInfo}} {{#unless collapsedInfo}}
<div class='secondary'> <div class='secondary'>
<dl> <dl>
{{#if model.created_at}} {{#if model.created_at}}
<div><dt>{{i18n 'user.created'}}</dt><dd>{{bound-date model.created_at}}</dd></div> <div><dt>{{i18n 'user.created'}}</dt><dd>{{bound-date model.created_at}}</dd></div>
{{/if}} {{/if}}
{{#if model.last_posted_at}} {{#if model.last_posted_at}}
<div><dt>{{i18n 'user.last_posted'}}</dt><dd>{{bound-date model.last_posted_at}}</dd></div> <div><dt>{{i18n 'user.last_posted'}}</dt><dd>{{bound-date model.last_posted_at}}</dd></div>
{{/if}} {{/if}}
{{#if model.last_seen_at}} {{#if model.last_seen_at}}
<div><dt>{{i18n 'user.last_seen'}}</dt><dd>{{bound-date model.last_seen_at}}</dd></div> <div><dt>{{i18n 'user.last_seen'}}</dt><dd>{{bound-date model.last_seen_at}}</dd></div>
{{/if}} {{/if}}
{{#if model.profile_view_count}} {{#if model.profile_view_count}}
<div><dt>{{i18n 'views'}}</dt><dd>{{model.profile_view_count}}</dd></div> <div><dt>{{i18n 'views'}}</dt><dd>{{model.profile_view_count}}</dd></div>
{{/if}} {{/if}}
{{#if model.invited_by}} {{#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> <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}}
{{#if model.trust_level}} {{#if model.trust_level}}
<div><dt class="trust-level">{{i18n 'user.trust_level'}}</dt><dd class="trust-level">{{model.trustLevel.name}}</dd></div> <div><dt class="trust-level">{{i18n 'user.trust_level'}}</dt><dd class="trust-level">{{model.trustLevel.name}}</dd></div>
{{/if}} {{/if}}
{{#if canCheckEmails}} {{#if canCheckEmails}}
<div><dt>{{i18n 'user.email.title'}}</dt> <div><dt>{{i18n 'user.email.title'}}</dt>
<dd title={{model.email}}> <dd title={{model.email}}>
{{#if model.email}} {{#if model.email}}
{{model.email}} {{model.email}}
{{else}} {{else}}
{{d-button action=(route-action "checkEmail") actionParam=model icon="far-envelope" label="admin.users.check_email.text" class="btn-primary"}} {{d-button action=(route-action "checkEmail") actionParam=model icon="far-envelope" label="admin.users.check_email.text" class="btn-primary"}}
{{/if}} {{/if}}
</dd> </dd>
</div> </div>
{{/if}} {{/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}} {{#link-to "groups" (query-params username=model.username)}}
<div><dt class="groups">{{i18n 'groups.title' count=model.displayGroups.length}}</dt> ...
<dd class='groups'> {{/link-to}}
{{#each model.displayGroups as |group|}} </dd>
<span>{{#link-to 'group' group.name class="group-link"}}{{group.name}}{{/link-to}}</span> </div>
{{/each}} {{/if}}
{{#link-to "groups" (query-params username=model.username)}} {{#if canDeleteUser}}
... <div class='pull-right'>{{d-button action=(action "adminDelete") icon="exclamation-triangle" label="user.admin_delete" class="btn-danger"}}</div>
{{/link-to}} {{/if}}
</dd> </dl>
</div> {{plugin-outlet name="user-profile-secondary" args=(hash model=model)}}
{{/if}} </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}} {{/unless}}
</div> </div>
</section> </section>
<div class='user-content-wrapper'> <div class='user-content-wrapper'>
<section class="user-primary-navigation">
<section class="user-primary-navigation"> {{#mobile-nav class='main-nav' desktopClass="nav nav-pills user-nav" currentPath=currentPath}}
{{#mobile-nav class='main-nav' desktopClass="nav nav-pills user-nav" currentPath=currentPath}} {{#unless model.profile_hidden}}
{{#unless model.profile_hidden}} <li>{{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}</li>
<li>{{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}</li> <li>{{#link-to 'userActivity'}}{{i18n 'user.activity_stream'}}{{/link-to}}</li>
<li>{{#link-to 'userActivity'}}{{i18n 'user.activity_stream'}}{{/link-to}}</li> {{/unless}}
{{/unless}} {{#if showNotificationsTab}}
{{#if showNotificationsTab}} <li>
<li> {{#link-to 'userNotifications'}}
{{#link-to 'userNotifications'}} {{d-icon "comment" class="glyph"}}{{i18n 'user.notifications'}}
{{d-icon "comment" class="glyph"}}{{i18n 'user.notifications'}} {{/link-to}}
{{/link-to}} </li>
</li> {{/if}}
{{/if}} {{#if showPrivateMessages}}
{{#if showPrivateMessages}} <li>{{#link-to 'userPrivateMessages'}}{{d-icon "far-envelope"}}{{i18n 'user.private_messages'}}{{/link-to}}</li>
<li>{{#link-to 'userPrivateMessages'}}{{d-icon "far-envelope"}}{{i18n 'user.private_messages'}}{{/link-to}}</li> {{/if}}
{{/if}} {{#if canInviteToForum}}
{{#if canInviteToForum}} <li>{{#link-to 'userInvited'}}{{d-icon "user-plus"}}{{i18n 'user.invited.title'}}{{/link-to}}</li>
<li>{{#link-to 'userInvited'}}{{d-icon "user-plus"}}{{i18n 'user.invited.title'}}{{/link-to}}</li> {{/if}}
{{/if}} {{#if showBadges}}
{{#if showBadges}} <li>{{#link-to 'user.badges'}}{{d-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}</li>
<li>{{#link-to 'user.badges'}}{{d-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}</li> {{/if}}
{{/if}} {{plugin-outlet name="user-main-nav" tagName='' connectorTagName='li' args=(hash model=model)}}
{{plugin-outlet name="user-main-nav" tagName='' connectorTagName='li' args=(hash model=model)}} {{#if model.can_edit}}
{{#if model.can_edit}} <li>{{#link-to 'preferences'}}{{d-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}</li>
<li>{{#link-to 'preferences'}}{{d-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}</li> {{/if}}
{{/if}} {{/mobile-nav}}
{{/mobile-nav}} </section>
</section> {{outlet}}
</div>
{{outlet}}
</div>
{{/d-section}} {{/d-section}}
</div> </div>

View File

@ -10,34 +10,35 @@
{{#link-to 'userActivity.replies'}}{{i18n 'user_action_groups.5'}}{{/link-to}} {{#link-to 'userActivity.replies'}}{{i18n 'user_action_groups.5'}}{{/link-to}}
</li> </li>
{{#if user.showDrafts}} {{#if user.showDrafts}}
<li> <li>
{{#link-to 'userActivity.drafts'}}{{i18n 'user_action_groups.15'}}{{/link-to}} {{#link-to 'userActivity.drafts'}}{{i18n 'user_action_groups.15'}}{{/link-to}}
</li> </li>
{{/if}} {{/if}}
<li> <li>
{{#link-to 'userActivity.likesGiven'}}{{i18n 'user_action_groups.1'}}{{/link-to}} {{#link-to 'userActivity.likesGiven'}}{{i18n 'user_action_groups.1'}}{{/link-to}}
</li> </li>
{{#if user.showBookmarks}} {{#if user.showBookmarks}}
{{#if bookmarksWithRemindersEnabled}} {{#if bookmarksWithRemindersEnabled}}
<li> <li>
{{#link-to 'userActivity.bookmarksWithReminders'}}{{i18n 'user_action_groups.3'}}{{/link-to}} {{#link-to 'userActivity.bookmarksWithReminders'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
</li> </li>
{{else}} {{else}}
<li> <li>
{{#link-to 'userActivity.bookmarks'}}{{i18n 'user_action_groups.3'}}{{/link-to}} {{#link-to 'userActivity.bookmarks'}}{{i18n 'user_action_groups.3'}}{{/link-to}}
</li> </li>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{plugin-outlet name="user-activity-bottom" {{plugin-outlet
connectorTagName='li' name="user-activity-bottom"
args=(hash model=model)}} connectorTagName='li'
args=(hash model=model)
}}
{{/mobile-nav}} {{/mobile-nav}}
{{/d-section}} {{/d-section}}
{{#if canDownloadPosts}} {{#if canDownloadPosts}}
<section class='user-additional-controls'> <section class='user-additional-controls'>
{{d-button action=(action "exportUserArchive") class="btn-default" label="user.download_archive.button_text" icon="download"}} {{d-button action=(action "exportUserArchive") class="btn-default" label="user.download_archive.button_text" icon="download"}}
</section> </section>
{{/if}} {{/if}}
<section class='user-content'> <section class='user-content'>
{{outlet}} {{outlet}}

View File

@ -11,41 +11,41 @@
<th>&nbsp;</th> <th>&nbsp;</th>
</thead> </thead>
<tbody> <tbody>
{{#each content as |bookmark|}} {{#each content as |bookmark|}}
<tr class="topic-list-item bookmark-list-item"> <tr class="topic-list-item bookmark-list-item">
<td class="main-link"> <td class="main-link">
<span class="link-top-line"> <span class="link-top-line">
<div class="bookmark-metadata"> <div class="bookmark-metadata">
{{#if bookmark.name}} {{#if bookmark.name}}
<span class="bookmark-metadata-item"> <span class="bookmark-metadata-item">
{{d-icon "info-circle"}}{{bookmark.name}} {{d-icon "info-circle"}}{{bookmark.name}}
</span> </span>
{{/if}} {{/if}}
{{#if bookmark.reminder_at}} {{#if bookmark.reminder_at}}
<span class="bookmark-metadata-item"> <span class="bookmark-metadata-item">
{{d-icon "far-clock"}}{{bookmark.formattedReminder}} {{d-icon "far-clock"}}{{bookmark.formattedReminder}}
</span> </span>
{{/if}} {{/if}}
</div> </div>
{{topic-status topic=bookmark}} {{topic-status topic=bookmark}}
{{topic-link bookmark}} {{topic-link bookmark}}
</span> </span>
{{#if bookmark.excerpt}} {{#if bookmark.excerpt}}
<p class="post-excerpt">{{html-safe bookmark.excerpt}}</p> <p class="post-excerpt">{{html-safe bookmark.excerpt}}</p>
{{/if}} {{/if}}
<div class="link-bottom-line"> <div class="link-bottom-line">
{{category-link bookmark.category}} {{category-link bookmark.category}}
{{discourse-tags bookmark mode="list" tagsForUser=tagsForUser}} {{discourse-tags bookmark mode="list" tagsForUser=tagsForUser}}
</div> </div>
</td> </td>
<td>{{format-date bookmark.created_at format="tiny"}}</td> <td>{{format-date bookmark.created_at format="tiny"}}</td>
{{raw "list/activity-column" topic=bookmark class="num" tagName="td"}} {{raw "list/activity-column" topic=bookmark class="num" tagName="td"}}
<td> <td>
{{bookmark-actions-dropdown bookmark=bookmark removeBookmark=(action "removeBookmark")}} {{bookmark-actions-dropdown bookmark=bookmark removeBookmark=(action "removeBookmark")}}
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{conditional-loading-spinner condition=loadingMore}} {{conditional-loading-spinner condition=loadingMore}}

View File

@ -56,9 +56,7 @@
{{/d-section}} {{/d-section}}
<section class='user-content'> <section class='user-content'>
<div class="list-actions">
<div class="list-actions">
{{#unless site.mobileView}} {{#unless site.mobileView}}
{{#if showToggleBulkSelect}} {{#if showToggleBulkSelect}}
{{d-button {{d-button
@ -106,7 +104,6 @@
onChange=(action "changeGroupNotificationLevel") onChange=(action "changeGroupNotificationLevel")
}} }}
{{/if}} {{/if}}
</div> </div>
{{outlet}}
{{outlet}}
</section> </section>

View File

@ -32,15 +32,17 @@
{{/d-section}} {{/d-section}}
{{#if model}} {{#if model}}
<section class="user-additional-controls"> <section class="user-additional-controls">
{{d-button title='user.dismiss_notifications_tooltip' {{d-button
class='btn btn-default dismiss-notifications' title='user.dismiss_notifications_tooltip'
action=(action "resetNew") class='btn btn-default dismiss-notifications'
label='user.dismiss_notifications' action=(action "resetNew")
icon='check' label='user.dismiss_notifications'
disabled=allNotificationsRead}} icon='check'
</section> disabled=allNotificationsRead
{{/if}} }}
</section>
{{/if}}
<section class='user-content'> <section class='user-content'>
{{#load-more class="notification-history user-stream" selector=".user-stream .notification" action=(action "loadMore")}} {{#load-more class="notification-history user-stream" selector=".user-stream .notification" action=(action "loadMore")}}

View File

@ -1,163 +1,163 @@
{{#d-section pageClass="user-summary" tagName=""}} {{#d-section pageClass="user-summary" tagName=""}}
<div class="user-content"> <div class="user-content">
<div class='top-section stats-section'> <div class='top-section stats-section'>
<h3 class='stats-title'>{{i18n "user.summary.stats"}}</h3> <h3 class='stats-title'>{{i18n "user.summary.stats"}}</h3>
<ul> <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}}
<li> <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> </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"> <li class="linked-stat">
{{#link-to 'userActivity.bookmarks'}} {{#link-to 'userActivity.likesGiven'}}
{{user-stat value=model.bookmark_count label="user.summary.bookmark_count"}} {{user-stat value=model.likes_given icon="heart" label="user.summary.likes_given"}}
{{/link-to}} {{/link-to}}
</li> </li>
{{/if}} {{#if model.bookmark_count}}
<li class="linked-stat"> <li class="linked-stat">
{{#link-to 'userActivity.topics'}} {{#link-to 'userActivity.bookmarks'}}
{{user-stat value=model.topic_count label="user.summary.topic_count"}} {{user-stat value=model.bookmark_count label="user.summary.bookmark_count"}}
{{/link-to}} {{/link-to}}
</li> </li>
<li class="linked-stat"> {{/if}}
{{#link-to 'userActivity.replies'}} <li class="linked-stat">
{{user-stat value=model.post_count label="user.summary.post_count"}} {{#link-to 'userActivity.topics'}}
{{/link-to}} {{user-stat value=model.topic_count label="user.summary.topic_count"}}
</li> {{/link-to}}
<li> </li>
{{user-stat value=model.likes_received icon="heart" label="user.summary.likes_received"}} <li class="linked-stat">
</li> {{#link-to 'userActivity.replies'}}
{{plugin-outlet name="user-summary-stat" tagName="" connectorTagName="li" args=(hash model=model)}} {{user-stat value=model.post_count label="user.summary.post_count"}}
</ul> {{/link-to}}
</div> </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'> <div class='top-section'>
{{#user-summary-section title="top_replies" class="replies-section pull-left"}} {{#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-topics-list type="replies" items=model.replies user=user as |reply|}}
{{user-summary-topic {{user-summary-topic
createdAt=reply.createdAt createdAt=reply.createdAt
topic=reply.topic topic=reply.topic
likes=reply.like_count likes=reply.like_count
url=reply.url}} url=reply.url}}
{{/user-summary-topics-list}} {{/user-summary-topics-list}}
{{/user-summary-section}} {{/user-summary-section}}
{{#user-summary-section title="top_topics" class="topics-section pull-right"}} {{#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-topics-list type="topics" items=model.topics user=user as |topic|}}
{{user-summary-topic {{user-summary-topic
createdAt=topic.created_at createdAt=topic.created_at
topic=topic topic=topic
likes=topic.like_count likes=topic.like_count
url=topic.url}} url=topic.url}}
{{/user-summary-topics-list}} {{/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}} {{/user-summary-section}}
</div> </div>
{{/if}}
{{#if siteSettings.enable_badges}} <div class='top-section'>
<div class='top-section badges-section'> {{#user-summary-section title="top_links" class="links-section pull-left"}}
<h3 class='stats-title'>{{i18n "user.summary.top_badges"}}</h3> {{#if model.links.length}}
{{#each model.badges as |badge|}} <ul>
{{badge-card badge=badge count=badge.count username=user.username_lower}} {{!-- template-lint-disable --}}
{{else}} {{#each model.links as |link|}}
<p>{{i18n "user.summary.no_badges"}}</p> <li>
{{/each}} <a class='domain'
{{#if moreBadges}} href={{link.url}}
<p>{{#link-to "user.badges" user class="more"}}{{i18n "user.summary.more_badges"}}{{/link-to}}</p> title={{link.title}}
{{/if}} 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>
{{/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> </div>
{{/d-section}} {{/d-section}}

View File

@ -13,11 +13,11 @@
</span> </span>
{{else}} {{else}}
{{#if selectKit.filter}} {{#if selectKit.filter}}
{{#if selectKit.hasNoContent}} {{#if selectKit.hasNoContent}}
<span class="no-content"> <span class="no-content">
{{i18n "select_kit.no_content"}} {{i18n "select_kit.no_content"}}
</span> </span>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#each collections as |collection|}} {{#each collections as |collection|}}

View File

@ -17,11 +17,11 @@
</span> </span>
{{else}} {{else}}
{{#if selectKit.filter}} {{#if selectKit.filter}}
{{#if selectKit.hasNoContent}} {{#if selectKit.hasNoContent}}
<span class="no-content"> <span class="no-content">
{{i18n "select_kit.no_content"}} {{i18n "select_kit.no_content"}}
</span> </span>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{#each collections as |collection|}} {{#each collections as |collection|}}

Some files were not shown because too many files have changed in this diff Show More