Post Settings

{{gh-image-uploader-with-preview image=post.featureImage text="Upload post image" allowUnsplash=true update=(action "setCoverImage") remove=(action "clearCoverImage") }}
{{!-- new posts don't have a preview link --}} {{#unless post.isNew}} {{#if post.isPublished}} View post {{svg-jar "external"}} {{else}} Preview {{svg-jar "external"}} {{/if}} {{/unless}} {{gh-url-preview slug=slugValue tagName="p" classNames="description"}}
{{#if (or post.isDraft post.isPublished post.pastScheduledTime)}} {{else}}

Use the publish menu to re-schedule

{{/if}} {{gh-date-time-picker date=post.publishedAtBlogDate time=post.publishedAtBlogTime setDate=(action "setPublishedAtBlogDate") setTime=(action "setPublishedAtBlogTime") errors=post.errors dateErrorProperty="publishedAtBlogDate" timeErrorProperty="publishedAtBlogTime" maxDate='now' disabled=post.isScheduled static=true }}
{{#unless session.user.isContributor}}
{{gh-psm-tags-input post=post triggerId="tag-input"}}
{{/unless}} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="customExcerpt"}} {{gh-textarea class="post-setting-custom-excerpt" id="custom-excerpt" name="post-setting-custom-excerpt" value=(readonly customExcerptScratch) input=(action (mut customExcerptScratch) value="target.value") focus-out=(action "setCustomExcerpt" customExcerptScratch) stopEnterKeyDownPropagation="true" data-test-field="custom-excerpt"}} {{gh-error-message errors=post.errors property="customExcerpt" data-test-error="custom-excerpt"}} {{/gh-form-group}} {{#unless session.user.isAuthorOrContributor}} {{#gh-form-group class="for-select" errors=post.errors hasValidated=post.hasValidated property="authors" data-test-input="authors"}} {{gh-psm-authors-input selectedAuthors=post.authors updateAuthors=(action "changeAuthors") triggerId="author-list"}} {{gh-error-message errors=post.errors property="authors" data-test-error="authors"}} {{/gh-form-group}} {{/unless}}
{{gh-psm-template-select post=post onTemplateSelect=(action (mut post.customTemplate))}} {{#unless post.isNew}} {{/unless}}
{{! .settings-menu-content }}
{{! .post-settings-menu }}
{{#if isViewingSubview}} {{#if (eq subview "meta-data")}}

Meta Data

{{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="metaTitle"}} {{gh-text-input class="post-setting-meta-title" id="meta-title" name="post-setting-meta-title" value=(readonly metaTitleScratch) input=(action (mut metaTitleScratch) value="target.value") focus-out=(action "setMetaTitle" metaTitleScratch) stopEnterKeyDownPropagation=true data-test-field="meta-title"}}

Recommended: 70 characters. You’ve used {{gh-count-down-characters metaTitleScratch 70}}

{{gh-error-message errors=post.errors property="meta-title"}} {{/gh-form-group}} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="metaDescription"}} {{gh-textarea class="post-setting-meta-description" id="meta-description" name="post-setting-meta-description" value=(readonly metaDescriptionScratch) input=(action (mut metaDescriptionScratch) value="target.value") focus-out=(action "setMetaDescription" metaDescriptionScratch) stopEnterKeyDownPropagation="true" data-test-field="meta-description"}}

Recommended: 156 characters. You’ve used {{gh-count-down-characters metaDescriptionScratch 156}}

{{gh-error-message errors=post.errors property="meta-description"}} {{/gh-form-group}}
{{truncate seoTitle 70}}
{{truncate seoDescription 300}}
{{/if}} {{#if (eq subview "twitter-data")}}

Twitter Card

{{gh-image-uploader-with-preview image=post.twitterImage text="Add Twitter image" allowUnsplash=true update=(action "setTwitterImage") remove=(action "clearTwitterImage") }} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="twitterTitle"}} {{gh-text-input class="post-setting-twitter-title" id="twitter-title" name="post-setting-twitter-title" placeholder=(truncate twitterTitle 40) value=(readonly twitterTitleScratch) input=(action (mut twitterTitleScratch) value="target.value") focus-out=(action "setTwitterTitle" twitterTitleScratch) stopEnterKeyDownPropagation=true data-test-field="twitter-title"}} {{gh-error-message errors=post.errors property="twitterTitle" data-test-error="twitter-title"}} {{/gh-form-group}} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="twitterDescription"}} {{gh-textarea class="post-setting-twitter-description" id="twitter-description" name="post-setting-twitter-description" placeholder=(truncate twitterDescription 155) stopEnterKeyDownPropagation="true" value=(readonly twitterDescriptionScratch) input=(action (mut twitterDescriptionScratch) value="target.value") focus-out=(action "setTwitterDescription" twitterDescriptionScratch) data-test-field="twitter-description"}} {{gh-error-message errors=post.errors property="twitterDescription" data-test-error="twitter-description"}} {{/gh-form-group}}
{{#if twitterImage}}
{{/if}}
{{twitterTitle}}
{{truncate twitterDescription 155}}
{{/if}} {{#if (eq subview "facebook-data")}}

Facebook Card

{{gh-image-uploader-with-preview image=post.ogImage text="Add Facebook image" allowUnsplash=true update=(action "setOgImage") remove=(action "clearOgImage") }} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="ogTitle"}} {{gh-text-input class="post-setting-og-title" id="og-title" name="post-setting-og-title" placeholder=(truncate facebookTitle 40) value=(readonly ogTitleScratch) input=(action (mut ogTitleScratch) value="target.value") focus-out=(action "setOgTitle" ogTitleScratch) stopEnterKeyDownPropagation=true data-test-field="og-title"}} {{gh-error-message errors=post.errors property="ogTitle" data-test-error="og-title"}} {{/gh-form-group}} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="ogDescription"}} {{gh-textarea class="post-setting-og-description" id="og-description" name="post-setting-og-description" placeholder=(truncate facebookDescription 160) value=(readonly ogDescriptionScratch) input=(action (mut ogDescriptionScratch) value="target.value") focus-out=(action "setOgDescription" ogDescriptionScratch) stopEnterKeyDownPropagation="true" data-test-field="og-description"}} {{gh-error-message errors=post.errors property="ogDescription" data-test-error="og-description"}} {{/gh-form-group}}
{{#if facebookImage}}
{{/if}}
{{truncate facebookTitle 88}}
{{truncate facebookDescription 300}}
{{/if}} {{#if (eq subview "codeinjection")}}

Code Injection

{{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="codeinjectionHead"}} {{gh-cm-editor codeinjectionHeadScratch id="post-setting-codeinjection-head" class="post-setting-codeinjection" name="post-setting-codeinjection-head" focusOut=(action "setHeaderInjection" codeinjectionHeadScratch) stopEnterKeyDownPropagation="true" update=(action (mut codeinjectionHeadScratch)) data-test-field="codeinjection-head"}} {{gh-error-message errors=post.errors property="codeinjectionHead" data-test-error="codeinjection-head"}} {{/gh-form-group}} {{#gh-form-group errors=post.errors hasValidated=post.hasValidated property="codeinjectionFoot"}} {{gh-cm-editor codeinjectionFootScratch id="post-setting-codeinjection-foot" class="post-setting-codeinjection" name="post-setting-codeinjection-foot" focusOut=(action "setFooterInjection" codeinjectionFootScratch) stopEnterKeyDownPropagation="true" update=(action (mut codeinjectionFootScratch)) data-test-field="codeinjection-foot"}} {{gh-error-message errors=post.errors property="codeinjectionFoot" data-test-error="codeinjection-foot"}} {{/gh-form-group}}
{{/if}} {{/if}}
{{!-- _showThrobbers is on a timer so that throbbers don't get positioned until the slide-in animation has finished and it gets toggled when the meta pane is shown --}} {{#if _showThrobbers}} {{gh-tour-item "static-post" target="label[for='static-page'] p" throbberAttachment="middle middle" throbberOffset="0px 33px" popoverTriangleClass="bottom-right" }} {{gh-tour-item "featured-post" target="label[for='featured'] p" throbberAttachment="middle middle" throbberOffset="0px -20px" popoverTriangleClass="bottom-right" }} {{/if}}