2017-02-17 08:50:07 +03:00
<section class="gh-canvas">
2019-06-18 13:47:21 +03:00
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
Labs
</h2>
</GhCanvasHeader>
2014-12-14 20:56:04 +03:00
2017-02-17 08:50:07 +03:00
<section class="view-container settings-debug">
2020-09-16 16:37:33 +03:00
<p class="gh-box gh-box-tip"> {{ svg-jar "idea" }} This is a testing ground for new or experimental features. They may change, break or inexplicably disappear at any time.</p>
2017-02-17 17:10:02 +03:00
2019-12-13 17:20:29 +03:00
{{ # if this .session .user .isOwner }}
2020-10-22 13:39:00 +03:00
<div class="gh-setting-header"></div>
<LinkTo @route="settings.labs.members">
<div class="flex flex-column br3 shadow-1 bg-grouped-table mt2 pa5 gh-setting-linkrow">
<div class="gh-setting-first gh-setting-last">
<div class="gh-setting-content">
<div class="gh-setting-title">Members</div>
<div class="gh-setting-desc">Create registered members and take subscription payments</div>
2019-10-15 15:43:22 +03:00
</div>
2020-10-22 13:39:00 +03:00
<div class="gh-setting-action flex items-center midgrey">
{{ # if this .feature .labs .members }}
<span class="gh-badge">Enabled</span>
{{ else }}
<span>Configure</span>
{{ / if }}
{{ svg-jar "arrow-right" class = "w6 h6 fill-midgrey pa1 nr2 ml2" }}
2019-10-15 15:43:22 +03:00
</div>
</div>
</div>
2020-10-22 13:39:00 +03:00
</LinkTo>
2019-10-15 15:43:22 +03:00
{{ / if }}
2017-02-17 17:10:02 +03:00
<div class="gh-setting-header">Migration options</div>
2019-06-18 13:47:21 +03:00
<div class="flex flex-column br3 shadow-1 bg-grouped-table pa5 mt2">
<div class="gh-setting-first">
<div class="gh-setting-content">
<div class="gh-setting-title">Import content</div>
<div class="gh-setting-desc">Import posts from another Ghost installation</div>
2017-05-24 16:36:59 +03:00
</div>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-action">
<form id="settings-import" enctype="multipart/form-data">
2020-01-16 18:14:03 +03:00
<GhFileUpload
@id="importfile"
@classNames="flex"
@uploadButtonText= {{ this .uploadButtonText }}
@onUpload= {{ action "onUpload" }}
@acceptEncoding= {{ this .importMimeType }}
data-test-file-input="import"
/>
2019-06-18 13:47:21 +03:00
</form>
</div>
</div>
2017-05-24 16:36:59 +03:00
2019-12-13 17:20:29 +03:00
{{ # if this .importErrors }}
2020-09-16 16:37:33 +03:00
<div class="gh-import-errors {{ if this .importSuccessful "gh-import-errors-alert" }} " data-test-import-errors>
2019-06-18 13:47:21 +03:00
<div class="gh-import-errors-title">
2019-12-13 17:20:29 +03:00
{{ # if this .importSuccessful }}
2019-06-18 13:47:21 +03:00
Import successful with warnings
{{ else }}
Import failed
2017-05-24 16:36:59 +03:00
{{ / if }}
</div>
2019-12-13 17:20:29 +03:00
{{ # each this .importErrors as | error | }}
2019-06-18 13:47:21 +03:00
<div class="gh-import-error" data-test-import-error>
<p class="gh-import-error-message" data-test-import-error-message>
{{ # if error .help }} {{ error .help }} : {{ / if }} {{ error .message }}
</p>
{{ # if error .context }}
<div class="gh-import-error-entry" data-test-import-error-context>
<pre> {{ error .context }} </pre>
</div>
{{ / if }}
</div>
{{ / each }}
</div>
{{ / if }}
<div class="gh-setting">
<div class="gh-setting-content">
<div class="gh-setting-title">Export your content</div>
<div class="gh-setting-desc">Download all of your posts and settings in a single, glorious JSON file</div>
</div>
<div class="gh-setting-action">
<button type="button" class="gh-btn gh-btn-hover-blue" {{ action "downloadFile" "db" }} ><span>Export</span></button>
</div>
2017-02-17 17:10:02 +03:00
</div>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-last">
<div class="gh-setting-content">
<div class="gh-setting-title">Delete all content</div>
<div class="gh-setting-desc">Permanently delete all posts and tags from the database, a hard reset</div>
</div>
<div class="gh-setting-action">
<button type="button" class="gh-btn gh-btn-hover-red js-delete" {{ action "toggleDeleteAllModal" }} ><span>Delete</span></button>
</div>
2017-02-17 17:10:02 +03:00
</div>
</div>
<div class="gh-setting-header">Beta features</div>
2019-06-18 13:47:21 +03:00
<div class="flex flex-column br3 shadow-1 bg-grouped-table pa5 mt2">
<div class="gh-setting-first">
2019-01-15 13:23:49 +03:00
<div class="gh-setting-content">
2019-06-18 13:47:21 +03:00
<div class="gh-setting-title">Night shift</div>
<div class="gh-setting-desc">Swap Ghost admin's colours to a dark background which is easy on the eyes</div>
2019-01-15 13:23:49 +03:00
</div>
<div class="gh-setting-action">
2020-01-16 18:14:03 +03:00
<div class="for-switch"><GhFeatureFlag @flag="nightShift" /></div>
2019-01-15 13:23:49 +03:00
</div>
2017-02-17 17:10:02 +03:00
</div>
2019-06-18 13:47:21 +03:00
<div class="gh-setting">
2020-01-16 18:14:03 +03:00
<GhUploader
@extensions= {{ this .jsonExtension }}
@uploadUrl="/redirects/json/"
@paramName="redirects"
@onUploadSuccess= {{ perform this .redirectUploadResult true }}
@onUploadFailure= {{ perform this .redirectUploadResult false }}
2019-06-18 13:47:21 +03:00
as |uploader|
2020-01-16 18:14:03 +03:00
>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-content">
<div class="gh-setting-title">Redirects</div>
2021-01-19 03:18:59 +03:00
<div class="gh-setting-desc">Configure redirects for old or moved content, more info in <a href="https://ghost.org/docs/tutorials/implementing-redirects/">the docs</a></div>
2019-06-18 13:47:21 +03:00
{{ # each uploader .errors as | error | }}
<div class="gh-setting-error" data-test-error="redirects"> {{ or error .context error .message }} </div>
{{ / each }}
2019-02-26 06:29:57 +03:00
</div>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-action" style="display: flex; flex-direction: column">
{{ # if uploader .isUploading }}
{{ uploader .progressBar }}
{{ else }}
<button
type="button"
2019-12-13 17:20:29 +03:00
class="gh-btn gh-btn-icon {{ if this .redirectSuccess "gh-btn-green" }} {{ if this .redirectFailure "gh-btn-red" }} "
2019-06-18 13:47:21 +03:00
onclick= {{ action "triggerFileDialog" }}
data-test-button="upload-redirects"
>
<span>
2019-12-13 17:20:29 +03:00
{{ # if this .redirectSuccess }}
2019-06-18 13:47:21 +03:00
{{ svg-jar "check-circle" }} Uploaded
2019-12-13 17:20:29 +03:00
{{ else if this .redirectFailure }}
2019-06-18 13:47:21 +03:00
{{ svg-jar "retry" }} Upload Failed
{{ else }}
Upload redirects JSON
{{ / if }}
</span>
</button>
<span><a href="#" {{ action "downloadFile" "redirects/json" }} data-test-link="download-redirects">Download current redirects</a></span>
{{ / if }}
2017-09-21 18:01:40 +03:00
2019-06-18 13:47:21 +03:00
<div style="display:none">
2020-01-16 18:14:03 +03:00
<GhFileInput @multiple= {{ false }} @action= {{ uploader .setFiles }} @accept= {{ this .jsonMimeType }} data-test-file-input="redirects" />
2019-06-18 13:47:21 +03:00
</div>
2017-09-21 18:01:40 +03:00
</div>
2020-01-16 18:14:03 +03:00
</GhUploader>
2017-09-21 18:01:40 +03:00
</div>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-last">
2020-01-16 18:14:03 +03:00
<GhUploader
@extensions= {{ this .yamlExtension }}
@uploadUrl="/settings/routes/yaml/"
@paramName="routes"
@onUploadSuccess= {{ perform this .routesUploadResult true }}
@onUploadFailure= {{ perform this .routesUploadResult false }}
2019-06-18 13:47:21 +03:00
as |uploader|
2020-01-16 18:14:03 +03:00
>
2019-06-18 13:47:21 +03:00
<div class="gh-setting-content">
<div class="gh-setting-title">Routes</div>
<div class="gh-setting-desc">Configure dynamic routing by modifying the routes.yaml file</div>
{{ # each uploader .errors as | error | }}
<div class="gh-setting-error" data-test-error="routes"> {{ or error .context error .message }} </div>
{{ / each }}
</div>
<div class="gh-setting-action" style="display: flex; flex-direction: column">
{{ # if uploader .isUploading }}
{{ uploader .progressBar }}
{{ else }}
<button
type="button"
2019-12-13 17:20:29 +03:00
class="gh-btn gh-btn-icon {{ if this .routesSuccess "gh-btn-green" }} {{ if this .routesFailure "gh-btn-red" }} "
2019-06-18 13:47:21 +03:00
onclick= {{ action "triggerFileDialog" }}
data-test-button="upload-routes"
>
<span>
2019-12-13 17:20:29 +03:00
{{ # if this .routesSuccess }}
2019-06-18 13:47:21 +03:00
{{ svg-jar "check-circle" }} Uploaded
2019-12-13 17:20:29 +03:00
{{ else if this .routesFailure }}
2019-06-18 13:47:21 +03:00
{{ svg-jar "retry" }} Upload Failed
{{ else }}
Upload routes YAML
{{ / if }}
</span>
</button>
<span><a href="#" {{ action "downloadFile" "settings/routes/yaml" }} data-test-link="download-routes">Download current routes.yaml</a></span>
{{ / if }}
2017-02-17 17:10:02 +03:00
2019-06-18 13:47:21 +03:00
<div style="display:none">
2020-05-08 14:05:55 +03:00
<GhFileInput @multiple= {{ false }} @action= {{ uploader .setFiles }} @accept= {{ this .yamlAccept }} data-test-file-input="routes" />
2019-06-18 13:47:21 +03:00
</div>
2018-07-24 14:20:53 +03:00
</div>
2020-01-16 18:14:03 +03:00
</GhUploader>
2018-07-24 14:20:53 +03:00
</div>
</div>
2019-10-16 11:27:46 +03:00
2015-06-13 17:34:09 +03:00
</section>
2014-12-01 14:39:11 +03:00
</section>
2015-11-18 13:50:48 +03:00
2019-12-13 17:20:29 +03:00
{{ # if this .showDeleteAllModal }}
2020-01-16 18:14:03 +03:00
<GhFullscreenModal @modal="delete-all"
@close= {{ action "toggleDeleteAllModal" }}
@modifier="action wide" />
2017-03-02 11:49:10 +03:00
{{ / if }}