mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 01:24:34 +08:00
87d0336f05
`<DSection />` is now deprecated. Please use `{{body-class "foo-page" "bar"}}` and/or `<section></section>` instead.
515 lines
16 KiB
Handlebars
515 lines
16 KiB
Handlebars
<div class="show-current-style">
|
|
<span>
|
|
<PluginOutlet
|
|
@name="admin-customize-themes-show-top"
|
|
@connectorTagName="div"
|
|
@outletArgs={{hash theme=this.model}}
|
|
/>
|
|
</span>
|
|
<div class="title">
|
|
{{#if this.editingName}}
|
|
<TextField @value={{this.model.name}} @autofocus="true" />
|
|
<DButton
|
|
@action={{this.finishedEditingName}}
|
|
@icon="check"
|
|
class="btn-primary btn-small submit-edit"
|
|
/>
|
|
<DButton
|
|
@action={{this.cancelEditingName}}
|
|
@icon="times"
|
|
class="btn-small cancel-edit"
|
|
/>
|
|
{{else}}
|
|
<span>{{this.model.name}}</span>
|
|
<DButton
|
|
@action={{this.startEditingName}}
|
|
@icon="pencil-alt"
|
|
class="btn-small"
|
|
/>
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{#each this.model.errors as |error|}}
|
|
<div class="alert alert-error">{{error}}</div>
|
|
{{/each}}
|
|
|
|
{{#if this.finishInstall}}
|
|
<div class="control-unit">
|
|
{{#if this.sourceIsHttp}}
|
|
<a class="remote-url" href={{this.remoteThemeLink}}>{{i18n
|
|
"admin.customize.theme.source_url"
|
|
}}{{d-icon "link"}}</a>
|
|
{{else}}
|
|
<div class="remote-url">
|
|
<code>{{this.model.remote_theme.remote_url}}</code>
|
|
{{#if this.model.remote_theme.branch}}
|
|
(<code>{{this.model.remote_theme.branch}}</code>)
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if this.showRemoteError}}
|
|
<div class="error-message">
|
|
{{d-icon "exclamation-triangle"}}
|
|
{{i18n "admin.customize.theme.repo_unreachable"}}
|
|
</div>
|
|
<div class="raw-error">
|
|
<code>{{this.model.remoteError}}</code>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<DButton
|
|
@action={{this.updateToLatest}}
|
|
@icon="download"
|
|
@label="admin.customize.theme.finish_install"
|
|
class="btn-primary finish-install"
|
|
/>
|
|
<DButton
|
|
@action={{this.destroyTheme}}
|
|
@label="admin.customize.delete"
|
|
@icon="trash-alt"
|
|
class="btn-danger"
|
|
/>
|
|
|
|
<span class="status-message">
|
|
{{i18n "admin.customize.theme.last_attempt"}}
|
|
{{format-date this.model.remote_theme.updated_at leaveAgo="true"}}
|
|
</span>
|
|
</div>
|
|
{{else}}
|
|
{{#unless this.model.supported}}
|
|
<div class="alert alert-error">
|
|
{{i18n "admin.customize.theme.required_version.error"}}
|
|
{{#if this.model.remote_theme.minimum_discourse_version}}
|
|
{{i18n
|
|
"admin.customize.theme.required_version.minimum"
|
|
version=this.model.remote_theme.minimum_discourse_version
|
|
}}
|
|
{{/if}}
|
|
{{#if this.model.remote_theme.maximum_discourse_version}}
|
|
{{i18n
|
|
"admin.customize.theme.required_version.maximum"
|
|
version=this.model.remote_theme.maximum_discourse_version
|
|
}}
|
|
{{/if}}
|
|
</div>
|
|
{{/unless}}
|
|
|
|
{{#unless this.model.enabled}}
|
|
<div class="alert alert-error">
|
|
{{#if this.model.disabled_by}}
|
|
{{i18n "admin.customize.theme.disabled_by"}}
|
|
<UserLink @user={{this.model.disabled_by}}>
|
|
{{avatar this.model.disabled_by imageSize="tiny"}}
|
|
{{this.model.disabled_by.username}}
|
|
</UserLink>
|
|
{{format-date this.model.disabled_at leaveAgo="true"}}
|
|
{{else}}
|
|
{{i18n "admin.customize.theme.disabled"}}
|
|
{{/if}}
|
|
<DButton
|
|
@action={{this.enableComponent}}
|
|
@icon="check"
|
|
@label="admin.customize.theme.enable"
|
|
class="btn-default"
|
|
/>
|
|
</div>
|
|
{{/unless}}
|
|
|
|
<div class="metadata control-unit">
|
|
{{#if this.model.remote_theme}}
|
|
{{#if this.model.remote_theme.remote_url}}
|
|
{{#if this.sourceIsHttp}}
|
|
<a class="remote-url" href={{this.remoteThemeLink}}>{{i18n
|
|
"admin.customize.theme.source_url"
|
|
}}{{d-icon "link"}}</a>
|
|
{{else}}
|
|
<div class="remote-url">
|
|
<code>{{this.model.remote_theme.remote_url}}</code>
|
|
{{#if this.model.remote_theme.branch}}
|
|
(<code>{{this.model.remote_theme.branch}}</code>)
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
{{/if}}
|
|
{{#if this.model.remote_theme.about_url}}
|
|
<a
|
|
class="url about-url"
|
|
href={{this.model.remote_theme.about_url}}
|
|
>{{i18n "admin.customize.theme.about_theme"}}{{d-icon "link"}}</a>
|
|
{{/if}}
|
|
{{#if this.model.remote_theme.license_url}}
|
|
<a
|
|
class="url license-url"
|
|
href={{this.model.remote_theme.license_url}}
|
|
>{{i18n "admin.customize.theme.license"}}{{d-icon "link"}}</a>
|
|
{{/if}}
|
|
|
|
{{#if this.model.description}}
|
|
<span class="theme-description">{{this.model.description}}</span>
|
|
{{/if}}
|
|
|
|
{{#if this.model.remote_theme.authors}}<span class="authors"><span
|
|
class="heading"
|
|
>{{i18n "admin.customize.theme.authors"}}</span>
|
|
{{this.model.remote_theme.authors}}</span>{{/if}}
|
|
{{#if this.model.remote_theme.theme_version}}<span class="version"><span
|
|
class="heading"
|
|
>{{i18n "admin.customize.theme.version"}}</span>
|
|
{{this.model.remote_theme.theme_version}}</span>{{/if}}
|
|
|
|
<div class="control-unit">
|
|
{{#if this.model.remote_theme.is_git}}
|
|
<div class="alert alert-info">
|
|
{{html-safe
|
|
(i18n
|
|
"admin.customize.theme.remote_theme_edits"
|
|
repoURL=this.remoteThemeLink
|
|
)
|
|
}}
|
|
</div>
|
|
|
|
{{#if this.showRemoteError}}
|
|
<div class="error-message">
|
|
{{d-icon "exclamation-triangle"}}
|
|
{{i18n "admin.customize.theme.repo_unreachable"}}
|
|
</div>
|
|
<div class="raw-error">
|
|
<code>{{this.model.remoteError}}</code>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if this.model.remote_theme.commits_behind}}
|
|
<DButton
|
|
@action={{this.updateToLatest}}
|
|
@icon="download"
|
|
@label="admin.customize.theme.update_to_latest"
|
|
class="btn-primary"
|
|
/>
|
|
{{else}}
|
|
<DButton
|
|
@action={{this.checkForThemeUpdates}}
|
|
@icon="sync"
|
|
@label="admin.customize.theme.check_for_updates"
|
|
class="btn-default"
|
|
/>
|
|
{{/if}}
|
|
|
|
<span class="status-message">
|
|
{{#if this.updatingRemote}}
|
|
{{i18n "admin.customize.theme.updating"}}
|
|
{{else}}
|
|
{{#if this.model.remote_theme.commits_behind}}
|
|
{{#if this.hasOverwrittenHistory}}
|
|
{{i18n "admin.customize.theme.has_overwritten_history"}}
|
|
{{else}}
|
|
{{i18n
|
|
"admin.customize.theme.commits_behind"
|
|
count=this.model.remote_theme.commits_behind
|
|
}}
|
|
{{/if}}
|
|
{{#if this.model.remote_theme.github_diff_link}}
|
|
<a href={{this.model.remote_theme.github_diff_link}}>
|
|
{{i18n "admin.customize.theme.compare_commits"}}
|
|
</a>
|
|
{{/if}}
|
|
{{else}}
|
|
{{#unless this.showRemoteError}}
|
|
{{i18n "admin.customize.theme.up_to_date"}}
|
|
{{format-date
|
|
this.model.remote_theme.updated_at
|
|
leaveAgo="true"
|
|
}}
|
|
{{/unless}}
|
|
{{/if}}
|
|
{{/if}}
|
|
</span>
|
|
{{else}}
|
|
<span class="status-message">
|
|
{{d-icon "info-circle"}}
|
|
{{i18n "admin.customize.theme.imported_from_archive"}}
|
|
</span>
|
|
{{/if}}
|
|
</div>
|
|
{{else}}
|
|
<span class="heading">{{i18n "admin.customize.theme.creator"}}</span>
|
|
<span>
|
|
<UserLink @user={{this.model.user}}>
|
|
{{format-username this.model.user.username}}
|
|
</UserLink>
|
|
</span>
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{#if this.showCheckboxes}}
|
|
<div class="control-unit">
|
|
{{#unless this.model.component}}
|
|
<InlineEditCheckbox
|
|
@action={{action "applyDefault"}}
|
|
@labelKey="admin.customize.theme.is_default"
|
|
@checked={{this.model.default}}
|
|
@modelId={{this.model.id}}
|
|
/>
|
|
<InlineEditCheckbox
|
|
@action={{action "applyUserSelectable"}}
|
|
@labelKey="admin.customize.theme.user_selectable"
|
|
@checked={{this.model.user_selectable}}
|
|
@modelId={{this.model.id}}
|
|
/>
|
|
{{/unless}}
|
|
{{#if this.model.remote_theme}}
|
|
<InlineEditCheckbox
|
|
@action={{action "applyAutoUpdateable"}}
|
|
@labelKey="admin.customize.theme.auto_update"
|
|
@checked={{this.model.auto_update}}
|
|
@modelId={{this.model.id}}
|
|
/>
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#unless this.model.component}}
|
|
<section
|
|
class="form-horizontal theme settings control-unit theme-settings__color-scheme"
|
|
>
|
|
<div class="row setting">
|
|
<div class="setting-label">
|
|
{{i18n "admin.customize.theme.color_scheme"}}
|
|
</div>
|
|
|
|
<div class="setting-value">
|
|
<ColorPalettes
|
|
@content={{this.colorSchemes}}
|
|
@value={{this.colorSchemeId}}
|
|
@icon="paint-brush"
|
|
@options={{hash filterable=true}}
|
|
/>
|
|
|
|
<div class="desc">{{i18n
|
|
"admin.customize.theme.color_scheme_select"
|
|
}}</div>
|
|
</div>
|
|
|
|
<div class="setting-controls">
|
|
{{#if this.colorSchemeChanged}}
|
|
<DButton
|
|
@action={{this.changeScheme}}
|
|
@icon="check"
|
|
class="ok submit-edit"
|
|
/>
|
|
<DButton
|
|
@action={{this.cancelChangeScheme}}
|
|
@icon="times"
|
|
class="cancel cancel-edit"
|
|
/>
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{{/unless}}
|
|
|
|
{{#if this.model.component}}
|
|
<section class="form-horizontal theme settings control-unit">
|
|
<div class="row setting">
|
|
<ThemeSettingRelativesSelector
|
|
@setting={{this.relativesSelectorSettingsForComponent}}
|
|
@model={{this.model}}
|
|
@class="theme-setting"
|
|
/>
|
|
</div>
|
|
</section>
|
|
{{else}}
|
|
<section class="form-horizontal theme settings control-unit">
|
|
<div class="row setting">
|
|
<ThemeSettingRelativesSelector
|
|
@setting={{this.relativesSelectorSettingsForTheme}}
|
|
@model={{this.model}}
|
|
@class="theme-setting"
|
|
/>
|
|
</div>
|
|
</section>
|
|
{{/if}}
|
|
|
|
{{#unless this.model.remote_theme.is_git}}
|
|
<div class="control-unit">
|
|
<div class="mini-title">{{i18n "admin.customize.theme.css_html"}}</div>
|
|
{{#if this.model.hasEditedFields}}
|
|
<div class="description">{{i18n
|
|
"admin.customize.theme.custom_sections"
|
|
}}</div>
|
|
<ul>
|
|
{{#each this.editedFieldsFormatted as |field|}}
|
|
<li>{{field}}</li>
|
|
{{/each}}
|
|
</ul>
|
|
{{else}}
|
|
<div class="description">
|
|
{{i18n "admin.customize.theme.edit_css_html_help"}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
<DButton
|
|
@action={{this.editTheme}}
|
|
@label="admin.customize.theme.edit_css_html"
|
|
class="btn-default edit"
|
|
/>
|
|
</div>
|
|
|
|
<div class="control-unit">
|
|
<div class="mini-title">{{i18n "admin.customize.theme.uploads"}}</div>
|
|
{{#if this.model.uploads}}
|
|
<ul class="removable-list">
|
|
{{#each this.model.uploads as |upload|}}
|
|
<li>
|
|
<span class="col">${{upload.name}}:
|
|
<a
|
|
href={{upload.url}}
|
|
rel="noopener noreferrer"
|
|
target="_blank"
|
|
>{{upload.filename}}</a></span>
|
|
<span class="col">
|
|
<DButton
|
|
@action={{fn this.removeUpload upload}}
|
|
@icon="times"
|
|
class="second btn-default btn-default cancel-edit"
|
|
/>
|
|
</span>
|
|
</li>
|
|
{{/each}}
|
|
</ul>
|
|
{{else}}
|
|
<div class="description">{{i18n
|
|
"admin.customize.theme.no_uploads"
|
|
}}</div>
|
|
{{/if}}
|
|
<DButton
|
|
@action={{this.addUploadModal}}
|
|
@icon="plus"
|
|
@label="admin.customize.theme.add"
|
|
class="btn-default"
|
|
/>
|
|
</div>
|
|
{{/unless}}
|
|
|
|
{{#if this.extraFiles.length}}
|
|
<div class="control-unit">
|
|
<div class="mini-title">{{i18n
|
|
"admin.customize.theme.extra_files"
|
|
}}</div>
|
|
<details>
|
|
<summary>
|
|
{{#if this.model.remote_theme}}
|
|
{{i18n "admin.customize.theme.extra_files_remote"}}
|
|
{{else}}
|
|
{{i18n "admin.customize.theme.extra_files_upload"}}
|
|
{{/if}}
|
|
</summary>
|
|
<ul>
|
|
{{#each this.extraFiles as |extraFile|}}
|
|
<li>{{extraFile.name}}</li>
|
|
{{/each}}
|
|
</ul>
|
|
</details>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if this.hasSettings}}
|
|
<div class="control-unit">
|
|
<div class="mini-title">{{i18n
|
|
"admin.customize.theme.theme_settings"
|
|
}}</div>
|
|
<p><i>{{i18n
|
|
"admin.customize.theme.overriden_settings_explanation"
|
|
}}</i></p>
|
|
<section class="form-horizontal theme settings control-unit">
|
|
{{#each this.settings as |setting|}}
|
|
<ThemeSettingEditor
|
|
@setting={{setting}}
|
|
@model={{this.model}}
|
|
@class="theme-setting control-unit"
|
|
/>
|
|
{{/each}}
|
|
</section>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if this.hasTranslations}}
|
|
<div class="control-unit">
|
|
<div class="mini-title">{{i18n
|
|
"admin.customize.theme.theme_translations"
|
|
}}</div>
|
|
<section
|
|
class="form-horizontal theme settings translations control-unit"
|
|
>
|
|
{{#each this.translations as |translation|}}
|
|
<ThemeTranslation
|
|
@translation={{translation}}
|
|
@model={{this.model}}
|
|
@class="theme-translation"
|
|
/>
|
|
{{/each}}
|
|
</section>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class="theme-controls">
|
|
|
|
<a
|
|
href={{this.previewUrl}}
|
|
title={{i18n "admin.customize.explain_preview"}}
|
|
rel="noopener noreferrer"
|
|
target="_blank"
|
|
class="btn btn-default"
|
|
>{{d-icon "desktop"}}{{i18n "admin.customize.theme.preview"}}</a>
|
|
<a
|
|
class="btn btn-default export"
|
|
rel="noopener noreferrer"
|
|
target="_blank"
|
|
href={{this.downloadUrl}}
|
|
>{{d-icon "download"}} {{i18n "admin.export_json.button_text"}}</a>
|
|
|
|
{{#if this.showConvert}}
|
|
<DButton
|
|
@action={{this.switchType}}
|
|
@label="admin.customize.theme.convert"
|
|
@icon={{this.convertIcon}}
|
|
@title={{this.convertTooltip}}
|
|
class="btn-default btn-normal"
|
|
/>
|
|
{{/if}}
|
|
|
|
{{#if this.model.component}}
|
|
{{#if this.model.enabled}}
|
|
<DButton
|
|
@action={{this.disableComponent}}
|
|
@icon="ban"
|
|
@label="admin.customize.theme.disable"
|
|
class="btn-default"
|
|
/>
|
|
{{else}}
|
|
<DButton
|
|
@action={{this.enableComponent}}
|
|
@icon="check"
|
|
@label="admin.customize.theme.enable"
|
|
class="btn-default"
|
|
/>
|
|
{{/if}}
|
|
{{/if}}
|
|
{{#if this.hasSettings}}
|
|
<DButton
|
|
@action={{this.showThemeSettingsEditor}}
|
|
@label="admin.customize.theme.settings_editor"
|
|
@icon="pen"
|
|
@title="admin.customize.theme.settings_editor"
|
|
class="btn-default btn-normal"
|
|
/>
|
|
{{/if}}
|
|
<DButton
|
|
@action={{this.destroyTheme}}
|
|
@label="admin.customize.delete"
|
|
@icon="trash-alt"
|
|
class="btn-danger"
|
|
/>
|
|
</div>
|
|
{{/if}}
|
|
</div> |