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>
2021-01-21 18:45:59 +03:00
<LinkTo @route="settings">Settings</LinkTo>
<span> {{ svg-jar "arrow-right" }} </span>
2019-06-18 13:47:21 +03:00
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
2021-02-10 15:00:07 +03:00
<div class="gh-main-section">
<h4 class="gh-main-section-header small bn">Migration options</h4>
<div class="gh-expandable">
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Import content</h4>
<p class="gh-expandable-description">Import posts from another Ghost installation</p>
</div>
<form id="settings-import" enctype="multipart/form-data">
<GhFileUpload
@id="importfile"
@classNames="flex"
@uploadButtonText= {{ this .uploadButtonText }}
@onUpload= {{ action "onUpload" }}
@acceptEncoding= {{ this .importMimeType }}
data-test-file-input="import"
/>
</form>
2017-05-24 16:36:59 +03:00
</div>
2021-02-10 15:00:07 +03:00
{{ # if this .importErrors }}
<div class="gh-import-errors {{ if this .importSuccessful "gh-import-errors-alert" }} " data-test-import-errors>
<div class="gh-import-errors-title">
{{ # if this .importSuccessful }}
Import successful with warnings
{{ else }}
Import failed
{{ / if }}
</div>
2017-05-24 16:36:59 +03:00
2021-02-10 15:00:07 +03:00
{{ # each this .importErrors as | error | }}
<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>
2019-06-18 13:47:21 +03:00
2021-02-10 15:00:07 +03:00
{{ # if error .context }}
<div class="gh-import-error-entry" data-test-import-error-context>
<pre> {{ error .context }} </pre>
</div>
{{ / if }}
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
{{ / each }}
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
{{ / if }}
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Export your content</h4>
<p class="gh-expandable-description">Download all of your posts and settings in a single, glorious JSON file</p>
</div>
<button type="button" class="gh-btn" {{ action "downloadFile" "db" }} ><span>Export</span></button>
</div>
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Delete all content</h4>
<p class="gh-expandable-description">Permanently delete all posts and tags from the database, a hard reset</p>
</div>
<button type="button" class="gh-btn gh-btn-red js-delete" {{ action "toggleDeleteAllModal" }} ><span>Delete</span></button>
</div>
2019-06-18 13:47:21 +03:00
</div>
2017-02-17 17:10:02 +03:00
</div>
</div>
2021-09-07 14:36:17 +03:00
<div class="gh-main-section">
2021-09-08 11:40:52 +03:00
<h4 class="gh-main-section-header small bn">Beta features</h4>
2021-09-07 14:36:17 +03:00
<div class="gh-expandable">
2021-09-08 11:40:52 +03:00
2021-09-07 14:36:17 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Tiers</h4>
<p class="gh-expandable-description">
2021-09-13 15:26:00 +03:00
Add additional tiers to your paid memberships (e.g. Bronze, Silver, Gold). <a href="http://ghost.org/help/tiers" target="_blank">Learn more here</a>
2021-09-07 14:36:17 +03:00
</p>
</div>
{{ # if ( feature "multipleProducts" ) }}
<span class="gh-badge">Enabled</span>
{{ else }}
2021-09-08 11:40:52 +03:00
<button type="button" class="gh-btn" {{ action "toggleEnableTiersModal" }} ><span>Enable</span></button>
2021-09-07 14:36:17 +03:00
{{ / if }}
</div>
</div>
2021-02-10 15:00:07 +03:00
<div class="gh-expandable-block">
<GhUploader
2021-02-22 03:27:00 +03:00
@extensions= {{ this .redirectsFileExtensions }}
@uploadUrl="/redirects/upload/"
2021-02-10 15:00:07 +03:00
@paramName="redirects"
@onUploadSuccess= {{ perform this .redirectUploadResult true }}
@onUploadFailure= {{ perform this .redirectUploadResult false }}
as |uploader|
>
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Redirects</h4>
2021-09-07 14:36:17 +03:00
<p class="gh-expandable-description">Configure redirects for old or moved content, more info in <a href="https://ghost.org/docs/tutorials/implementing-redirects/" target="_blank">the docs</a></p>
2021-02-10 15:00:07 +03:00
</div>
<div class="gh-setting-action flex flex-column items-end">
{{ # if uploader .isUploading }}
{{ uploader .progressBar }}
{{ else }}
<button
type="button"
class="gh-btn gh-btn-icon {{ if this .redirectSuccess "gh-btn-green" }} {{ if this .redirectFailure "gh-btn-red" }} "
onclick= {{ action "triggerFileDialog" }}
data-test-button="upload-redirects"
>
<span>
{{ # if this .redirectSuccess }}
{{ svg-jar "check-circle" }} Uploaded
{{ else if this .redirectFailure }}
{{ svg-jar "retry" }} Upload Failed
{{ else }}
2021-02-22 03:27:00 +03:00
Upload redirects YAML/JSON
2021-02-10 15:00:07 +03:00
{{ / if }}
</span>
</button>
2021-02-22 03:27:00 +03:00
<div><a href="#" {{ action "downloadFile" "redirects/download" }} data-test-link="download-redirects">Download current redirects</a></div>
2021-02-10 15:00:07 +03:00
{{ / if }}
{{ # each uploader .errors as | error | }}
<div class="gh-setting-error" data-test-error="redirects"> {{ or error .context error .message }} </div>
{{ / each }}
2017-09-21 18:01:40 +03:00
2021-02-10 15:00:07 +03:00
<div style="display:none">
2021-02-22 03:27:00 +03:00
<GhFileInput @multiple= {{ false }} @action= {{ uploader .setFiles }} @accept= {{ this .redirectsFileMimeTypes }} data-test-file-input="redirects" />
2021-02-10 15:00:07 +03:00
</div>
</div>
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
</GhUploader>
2017-09-21 18:01:40 +03:00
</div>
2017-02-17 17:10:02 +03:00
2021-02-10 15:00:07 +03:00
<div class="gh-expandable-block">
<GhUploader
@extensions= {{ this .yamlExtension }}
@uploadUrl="/settings/routes/yaml/"
@paramName="routes"
@onUploadSuccess= {{ perform this .routesUploadResult true }}
@onUploadFailure= {{ perform this .routesUploadResult false }}
as |uploader|
>
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Routes</h4>
<p class="gh-expandable-description">Configure dynamic routing by modifying the routes.yaml file</p>
</div>
<div class="gh-setting-action flex flex-column items-end">
{{ # if uploader .isUploading }}
{{ uploader .progressBar }}
{{ else }}
<button
type="button"
class="gh-btn gh-btn-icon {{ if this .routesSuccess "gh-btn-green" }} {{ if this .routesFailure "gh-btn-red" }} "
onclick= {{ action "triggerFileDialog" }}
data-test-button="upload-routes"
>
<span>
{{ # if this .routesSuccess }}
{{ svg-jar "check-circle" }} Uploaded
{{ else if this .routesFailure }}
{{ svg-jar "retry" }} Upload Failed
{{ else }}
Upload routes YAML
{{ / if }}
</span>
</button>
<div><a href="#" {{ action "downloadFile" "settings/routes/yaml" }} data-test-link="download-routes">Download current routes.yaml</a></div>
{{ / if }}
{{ # each uploader .errors as | error | }}
<div class="gh-setting-error" data-test-error="routes"> {{ or error .context error .message }} </div>
{{ / each }}
<div style="display:none">
<GhFileInput @multiple= {{ false }} @action= {{ uploader .setFiles }} @accept= {{ this .yamlAccept }} data-test-file-input="routes" />
</div>
</div>
2019-06-18 13:47:21 +03:00
</div>
2021-02-10 15:00:07 +03:00
</GhUploader>
2018-07-24 14:20:53 +03:00
</div>
2021-06-07 21:51:23 +03:00
</div>
</div>
2021-04-22 20:41:41 +03:00
2021-04-26 23:15:22 +03:00
2021-06-07 21:51:23 +03:00
{{ # if ( enable-developer-experiments ) }}
<div class="gh-main-section">
<h4 class="gh-main-section-header small bn">Alpha Features</h4>
<div class="gh-expandable">
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Google OAuth for staff users</h4>
<p class="gh-expandable-description">
Allow people to sign into Ghost Admin using Google SSO,
2021-08-06 16:26:49 +03:00
<a href="https://ghost.org/docs/tutorials/setting-up-oauth/" target="_blank" rel="noopener">docs here</a>
2021-06-07 21:51:23 +03:00
</p>
</div>
<div class="for-switch">
2021-07-21 00:18:45 +03:00
<GhFeatureFlag @flag="oauthLogin" />
2021-04-26 23:15:22 +03:00
</div>
</div>
2021-06-07 21:51:23 +03:00
<div class="gh-expandable-content">
2021-07-21 00:18:45 +03:00
{{ # if this .feature .oauthLogin }}
2021-07-08 14:28:43 +03:00
<div class="gh-setting-content-extended gh-labs-sso-settings pt2 pb4">
2021-06-07 21:51:23 +03:00
<a href="https://console.developers.google.com/" target="_blank" rel="noopener" class="gh-btn gh-btn-white mb4"><span> {{ svg-jar "google-favicon" }} Configure Google OAuth</span></a>
<GhFormGroup @class="no-margin pt2" @errors= {{ this .settings .errors }} @hasValidated= {{ this .settings .hasValidated }} @property="password">
<div class="form-group">
<label for="aouth-client-id">Google OAuth Client ID</label>
<GhTextInput
id="oauth-client-id"
@value= {{ readonly this .settings .oauthClientId }}
@name="oauth-client-id"
@focus-out= {{ action "saveOAuthSettings" }}
@input= {{ action ( mut this .settings .oauthClientId ) value = "target.value" }}
/>
</div>
<div class="form-group">
<label for="oauth-client-secret">Google OAuth Client Secret</label>
<GhTextInput
id="oauth-client-secret"
@value= {{ readonly this .settings .oauthClientSecret }}
@name="oauth-client-secret"
@focus-out= {{ action "saveOAuthSettings" }}
@input= {{ action ( mut this .settings .oauthClientSecret ) value = "target.value" }}
/>
</div>
</GhFormGroup>
</div>
{{ / if }}
</div>
</div>
2021-09-16 09:20:25 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Members Activity</h4>
<p class="gh-expandable-description">
Enable recording of member activity for analytics
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="membersActivity" />
</div>
</div>
</div>
2021-11-03 11:44:41 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Auto-login after Stripe Checkout</h4>
<p class="gh-expandable-description">
Enable automatic login after a successful Stripe Checkout
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="membersAutoLogin" />
</div>
</div>
</div>
2021-09-22 14:20:15 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
2021-11-02 12:56:49 +03:00
<div>
<h4 class="gh-expandable-title">Editor - Card settings panel</h4>
<p class="gh-expandable-description">
New UI pattern for cards that have settings separate to their content.
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="cardSettingsPanel" />
</div>
</div>
2021-11-04 09:46:57 +03:00
</div>
2021-11-12 11:29:18 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">URL Cache</h4>
<p class="gh-expandable-description">
Enable URL Caching
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="urlCache" />
</div>
</div>
</div>
2021-11-04 12:18:50 +03:00
<div class="gh-expandable-block">
2021-11-04 09:46:57 +03:00
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Media API</h4>
<p class="gh-expandable-description">
Enable media file uploads API
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="mediaAPI" />
</div>
</div>
2021-11-02 12:56:49 +03:00
</div>
2021-11-08 10:36:35 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Files API</h4>
<p class="gh-expandable-description">
Enable file uploads API
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="filesAPI" />
</div>
</div>
</div>
2021-11-08 19:24:18 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Callout</h4>
<p class="gh-expandable-description">
Card for info boxes that stand out
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="calloutCard" />
</div>
</div>
</div>
2021-11-19 17:04:17 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - File</h4>
<p class="gh-expandable-description">
Add a generic file
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="fileCard" />
</div>
</div>
</div>
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Audio</h4>
<p class="gh-expandable-description">
Add an audio file
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="audioCard" />
</div>
</div>
</div>
2021-12-02 13:38:16 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Before/After</h4>
<p class="gh-expandable-description">
Card for comparing two images
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="beforeAfterCard" />
</div>
</div>
</div>
2021-12-07 12:26:24 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Twitter Newsletter Improvements</h4>
<p class="gh-expandable-description">
Adds rich twitter embed support to newsletters
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="richTwitterNewsletters" />
</div>
</div>
</div>
2021-12-08 12:13:54 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Tweet grid</h4>
<p class="gh-expandable-description">
Card for displaying a group of related tweets
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="tweetGridCard" />
</div>
</div>
</div>
2021-12-13 14:20:58 +03:00
<div class="gh-expandable-block">
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Cardmageddon - Header</h4>
<p class="gh-expandable-description">
Card for bold, attention-grabbing section headers
</p>
</div>
<div class="for-switch">
<GhFeatureFlag @flag="headerCard" />
</div>
</div>
</div>
2018-07-24 14:20:53 +03:00
</div>
</div>
2021-06-07 21:51:23 +03:00
{{ / if }}
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 }}
2021-09-07 14:36:17 +03:00
2021-09-08 11:40:52 +03:00
{{ # if this .showEnableTiersModal }}
<GhFullscreenModal @modal="enable-tiers"
@close= {{ action "toggleEnableTiersModal" }}
2021-09-07 14:36:17 +03:00
@modifier="action wide" />
2021-09-09 14:38:05 +03:00
{{ / if }}