[chore] adds ember-template-lint and fixes all fixable issues (#2238)

no issue

- This will help with the octane migration and you can still run the lint rules even when they are todos. (Checkout the docs at 158b119667/docs/todos.md) The good news is any new code will be checked against the recommended config.
- I fixed all the auto fixable things we could get in this PR as well
This commit is contained in:
Gabriel Csapo 2022-02-02 08:09:43 -08:00 committed by GitHub
parent 894cea5256
commit beb5ae1737
124 changed files with 2250 additions and 440 deletions

View File

@ -3,9 +3,9 @@ on:
pull_request:
push:
branches:
- 'v4.*'
- "v4.*"
- main
- 'renovate/*'
- "renovate/*"
jobs:
prod-build:
runs-on: ubuntu-18.04
@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.17.0'
node-version: "14.17.0"
- run: yarn
- run: grunt shell:ember:prod
@ -34,10 +34,11 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.17.0'
node-version: "14.17.0"
- run: yarn
- run: yarn lint:js
- run: yarn lint:hbs
- uses: daniellockyer/action-slack-build@master
if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main'
@ -50,7 +51,7 @@ jobs:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'renovate/'))
strategy:
matrix:
browser: [ 'Firefox', 'Chrome' ]
browser: ["Firefox", "Chrome"]
name: ${{ matrix.browser }}
env:
MOZ_HEADLESS: 1
@ -61,7 +62,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.17.0'
node-version: "14.17.0"
- run: yarn
- run: yarn test

1488
ghost/admin/.lint-todo Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
module.exports = {
extends: "recommended"
};

View File

@ -1 +1 @@
<LinkTo @route={{this.route}} @alternateActive={{action "setActive"}} @class={{@linkClasses}}>{{this.title}}{{yield}}</LinkTo>
<LinkTo @route={{this.route}} @alternateActive={{action "setActive"}} class={{@linkClasses}}>{{this.title}}{{yield}}</LinkTo>

View File

@ -1,6 +1,6 @@
<div class="gh-alert-content">
{{message.message}}
</div>
<button class="gh-alert-close" {{action "closeNotification"}} data-test-button="close-notification">
<button class="gh-alert-close" data-test-button="close-notification" type="button" {{action "closeNotification"}}>
{{svg-jar "close-stroke"}}<span class="hidden">Close</span>
</button>

View File

@ -1,3 +1,3 @@
{{#if this.showUpgradeButton}}
<button class="gh-btn gh-btn-green" {{action "openBilling"}}><span>Upgrade</span></button>
<button class="gh-btn gh-btn-green" type="button" {{action "openBilling"}}><span>Upgrade</span></button>
{{/if}}

View File

@ -67,8 +67,7 @@
{{/if}}
<button
title="Toggle between editing alt text and caption"
class="h-100 pl1 pr1 ba br3 f8 sans-serif fw4 lh-title tracked-2 {{if this.isEditingAlt "bg-green b--green white" "bg-white b--midlightgrey midlightgrey"}}"
{{on "click" this.toggleAltEditing passive=true}}
class="h-100 pl1 pr1 ba br3 f8 sans-serif fw4 lh-title tracked-2 {{if this.isEditingAlt "bg-green b--green white" "bg-white b--midlightgrey midlightgrey"}}" type="button" {{on "click" this.toggleAltEditing passive=true}}
>
Alt
</button>

View File

@ -27,6 +27,6 @@
New
{{else}}
Draft
{{if (not @hasDirtyAttributes) "- Saved"}}
{{unless @hasDirtyAttributes "- Saved"}}
{{/if}}
</div>

View File

@ -9,7 +9,7 @@
</div>
</div>
{{#if this.failureMessage}}
<button class="gh-btn gh-btn-green" {{action "reset"}} data-test-upload-try-again-button><span>Try Again</span></button>
<button class="gh-btn gh-btn-green" data-test-upload-try-again-button type="button" {{action "reset"}}><span>Try Again</span></button>
{{/if}}
{{else}}
<div class="upload-form">

View File

@ -9,7 +9,7 @@
</div>
</div>
{{#if this.failureMessage}}
<button class="gh-btn gh-btn-green" {{action "reset"}}><span>Try Again</span></button>
<button class="gh-btn gh-btn-green" type="button" {{action "reset"}}><span>Try Again</span></button>
{{/if}}
{{else}}
{{!-- file selection/drag-n-drop --}}

View File

@ -47,7 +47,7 @@
<div>
<h4 class="gh-setting-title">Already connected to Stripe</h4>
<p class="gh-setting-desc mt2">
Connected to <a href="https://dashboard.stripe.com/{{this.settings.stripeConnectAccountId}}" target="_blank">{{this.settings.stripeConnectDisplayName}}</a>
Connected to <a href="https://dashboard.stripe.com/{{this.settings.stripeConnectAccountId}}" target="_blank" rel="noopener noreferrer">{{this.settings.stripeConnectDisplayName}}</a>
{{#unless this.settings.stripeConnectLivemode}}
<span class="gh-members-connect-testmodelabel">Test mode</span>

View File

@ -52,8 +52,8 @@
</div>
<div class="for-switch">
<label class="switch" for="subscribed-checkbox">
<Input @checked={{this.member.subscribed}} @type="checkbox" @id="subscribed-checkbox"
@name="subscribed" data-test-checkbox="member-subscribed" />
<Input @checked={{this.member.subscribed}} @type="checkbox" id="subscribed-checkbox"
name="subscribed" data-test-checkbox="member-subscribed" />
<span class="input-toggle-component"></span>
</label>
</div>
@ -163,7 +163,7 @@
</GhDropdownButton>
<GhDropdown @name="subscription-menu-complimentary" @tagName="ul" @classNames="product-actions-menu dropdown-menu dropdown-align-right">
<li>
<button {{action "removeComplimentary" product.id}}>
<button type="button" {{action "removeComplimentary" product.id}}>
<span class="red">Remove complimentary subscription</span>
</button>
</li>
@ -180,23 +180,23 @@
</GhDropdownButton>
<GhDropdown @name="subscription-menu-{{sub.id}}" @tagName="ul" @classNames="product-actions-menu dropdown-menu dropdown-align-right">
<li>
<a href="https://dashboard.stripe.com/customers/{{sub.customer.id}}" target="_blank" rel="noopener">
<a href="https://dashboard.stripe.com/customers/{{sub.customer.id}}" target="_blank" rel="noopener noreferrer">
View Stripe customer
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://dashboard.stripe.com/subscriptions/{{sub.id}}" target="_blank" rel="noopener">
<a href="https://dashboard.stripe.com/subscriptions/{{sub.id}}" target="_blank" rel="noopener noreferrer">
View Stripe subscription
</a>
</li>
<li>
{{#if sub.cancel_at_period_end}}
<button {{action "continueSubscription" sub.id}}>
<button type="button" {{action "continueSubscription" sub.id}}>
<span>Continue subscription</span>
</button>
{{else}}
<button {{action "cancelSubscription" sub.id}}>
<button type="button" {{action "cancelSubscription" sub.id}}>
<span class="red">Cancel subscription</span>
</button>
{{/if}}
@ -234,7 +234,7 @@
</GhDropdownButton>
<GhDropdown @name="subscription-menu-complimentary" @tagName="ul" @classNames="product-actions-menu dropdown-menu dropdown-align-right">
<li>
<button {{action "removeComplimentary" product.id}}>
<button type="button" {{action "removeComplimentary" product.id}}>
<span class="red">Remove complimentary subscription</span>
</button>
</li>

View File

@ -1,11 +1,11 @@
<div class="gh-dashboard-chart-box {{if this.isSmall "small"}}" {{did-insert (perform this.fetchStatsTask)}}>
{{#if (not this.stats)}}
<GhLoadingSpinner />
{{else}}
{{#if this.stats}}
<EmberChart
@type={{this.type}}
@options={{this.chartOptions}}
@data={{this.chartData}}
@height={{300}} />
{{else}}
<GhLoadingSpinner />
{{/if}}
</div>

View File

@ -71,15 +71,13 @@
</section>
<div class="gh-filter-builder-footer">
<button
class="gh-btn"
{{on "click" this.resetFilter}}
class="gh-btn" type="button" {{on "click" this.resetFilter}}
>
<span>Reset all</span>
</button>
<button
class="gh-btn gh-btn-primary"
data-test-button="members-apply-filter"
{{on "click" this.applyFilter}}
data-test-button="members-apply-filter" type="button" {{on "click" this.applyFilter}}
>
<span>Apply filters</span>
</button>

View File

@ -31,7 +31,7 @@
</ul>
<ul class="dropdown-footer">
<li>
<a {{on "click" (fn @onLabelAdd)}}>
<a {{on "click" @onLabelAdd}}>
<span>
{{svg-jar "add"}}
Add Label

View File

@ -15,7 +15,7 @@
<div class="flex items-center">
<GhMemberAvatar @member={{@member}} @containerClass="w9 h9 mr3 flex-shrink-0" />
<div class="w-80">
<h3 class="ma0 pa0 gh-members-list-name {{if (not @member.name) "gh-members-name-noname"}}">{{or @member.name @member.email}}</h3>
<h3 class="ma0 pa0 gh-members-list-name {{unless @member.name "gh-members-name-noname"}}">{{or @member.name @member.email}}</h3>
{{#if @member.name}}
<p class="ma0 pa0 middarkgrey f8 gh-members-list-email">{{@member.email}}</p>
{{/if}}
@ -25,7 +25,7 @@
{{#if @newsletterEnabled}}
{{#if (feature "emailAnalytics")}}
<LinkTo @route="member" @model={{@member}} class="gh-list-data middarkgrey f8 {{if (not @member.name) "gh-members-list-open-rate-noname"}}">
<LinkTo @route="member" @model={{@member}} class="gh-list-data middarkgrey f8 {{unless @member.name "gh-members-list-open-rate-noname"}}">
{{#if (not (is-empty @member.emailOpenRate))}}
<span>{{@member.emailOpenRate}}%</span>
{{else}}
@ -35,7 +35,7 @@
{{/if}}
{{/if}}
<LinkTo @route="member" @model={{@member}} class="gh-list-data middarkgrey f8 {{if (not @member.name) "gh-members-geolocation-noname"}}">
<LinkTo @route="member" @model={{@member}} class="gh-list-data middarkgrey f8 {{unless @member.name "gh-members-geolocation-noname"}}">
{{#if (and @member.geolocation @member.geolocation.country)}}
{{#if (and (eq @member.geolocation.country_code "US") @member.geolocation.region)}}
{{@member.geolocation.region}}, US

View File

@ -1,6 +1,6 @@
<div class="flex flex-column items-stretch">
{{!-- <p class="">Get started with one of the following options</p> --}}
<button class="gh-btn gh-btn-green" {{on "click" this.addYourself}}>
<button class="gh-btn gh-btn-green" type="button" {{on "click" this.addYourself}}>
<span>Add yourself as a member to test</span>
</button>

View File

@ -20,7 +20,7 @@
@input={{action "setStripeDirectSecretKey"}}
@class="mt1 password"
/>
<a href="https://dashboard.stripe.com/account/apikeys" target="_blank" class="mt1 fw4 f8">
<a href="https://dashboard.stripe.com/account/apikeys" target="_blank" class="mt1 fw4 f8" rel="noopener noreferrer">
Find your Stripe API keys here &raquo;
</a>
</div>
@ -33,7 +33,7 @@
</div>
<p class="f8 mt2 mb0">
Stripe is our exclusive direct payments partner.<br />
Ghost collects <strong>no fees</strong> on any payments! If you dont have a Stripe account yet, you can <a href="https://stripe.com" target="_blank" rel="noopener" class="gh-members-stripe-link">sign up here</a>.
Ghost collects <strong>no fees</strong> on any payments! If you dont have a Stripe account yet, you can <a href="https://stripe.com" target="_blank" rel="noopener noreferrer" class="gh-members-stripe-link">sign up here</a>.
</p>
</div>
</div>
@ -57,7 +57,7 @@
{{svg-jar "check-circle-stroke" class="check-circle"}}
<h1>You are connected to Stripe</h1>
<div class="gh-stripe-connected-info">
<p>Connected to <a href="https://dashboard.stripe.com/{{this.stripeConnectAccountId}}" target="_blank">{{this.stripeConnectAccountName}}</a></p>
<p>Connected to <a href="https://dashboard.stripe.com/{{this.stripeConnectAccountId}}" target="_blank" rel="noopener noreferrer">{{this.stripeConnectAccountName}}</a></p>
{{#unless this.stripeConnectLivemode}}
<div class="gh-members-connect-testmodelabel">Test mode</div>
{{/unless}}
@ -75,7 +75,7 @@
<div class="w-100 w-50-l">
<label class="fw6 f8">Generate secure key</label>
<div class="flex items-center mb4 justify-between gh-members-connectbutton-container mt2">
<a href="{{if this.stripeConnectTestMode this.testStripeConnectAuthUrl this.liveStripeConnectAuthUrl}}" class="stripe-connect" target="_blank"><span>Connect with Stripe</span></a>
<a href="{{if this.stripeConnectTestMode this.testStripeConnectAuthUrl this.liveStripeConnectAuthUrl}}" class="stripe-connect" target="_blank" rel="noopener noreferrer"><span>Connect with Stripe</span></a>
<div class="ml2 flex items-center flex-nowrap">
<span class="mr2 f8 midgrey nowrap {{if this.stripeConnectTestMode "gh-members-connect-testmodeon"}}">{{if this.stripeConnectTestMode "Using" "Use"}} test mode</span>
<div class="for-switch small">
@ -103,7 +103,7 @@
</div>
<p class="f8 mt2 mb0">
Stripe is our exclusive direct payments partner.<br />
Ghost collects <strong>no fees</strong> on any payments! If you dont have a Stripe account yet, you can <a href="https://stripe.com" target="_blank" rel="noopener" class="gh-members-stripe-link">sign up here</a>.
Ghost collects <strong>no fees</strong> on any payments! If you dont have a Stripe account yet, you can <a href="https://stripe.com" target="_blank" rel="noopener noreferrer" class="gh-members-stripe-link">sign up here</a>.
</p>
</div>
</div>

View File

@ -34,7 +34,7 @@
{{/each}}
{{#if (eq this.type "active" )}}
<div class="gh-product-cards-footer">
<button class="gh-btn gh-btn-link gh-btn-text gh-btn-icon gh-btn-add-product green" {{action "openNewProduct" product}}>
<button class="gh-btn gh-btn-link gh-btn-text gh-btn-icon gh-btn-add-product green" type="button" {{action "openNewProduct" product}}>
<span>{{svg-jar "add-stroke" class="stroke-green"}}Add tier</span>
</button>
</div>

View File

@ -1,9 +1,9 @@
<LinkTo @route="dashboard" data-test-mobile-nav="dashboard">{{svg-jar "house"}}Dashboard</LinkTo>
{{#if (eq this.router.currentRouteName "posts")}}
<LinkTo @route="posts" @query={{hash type=null}} @classNames="active" data-test-mobile-nav="posts">{{svg-jar "posts"}}Posts</LinkTo>
<LinkTo @route="posts" @query={{hash type=null}} class="active" data-test-mobile-nav="posts">{{svg-jar "posts"}}Posts</LinkTo>
{{else}}
<LinkTo @route="posts">{{svg-jar "content" data-test-mobile-nav="posts"}}Posts</LinkTo>
{{/if}}
<LinkTo @route="members" @classNames="gh-nav-main-users" data-test-mobile-nav="members">{{svg-jar "members"}}Members</LinkTo>
<LinkTo @route="members" class="gh-nav-main-users" data-test-mobile-nav="members">{{svg-jar "members"}}Members</LinkTo>
<div role="button" class="gh-mobile-nav-bar-more" {{action "openMobileMenu" target=this.ui data-test-mobile-nav="more"}}>{{svg-jar "icon" class="icon-gh"}}More</div>
{{yield}}

View File

@ -26,17 +26,17 @@
{{#if this.session.user.isContributor}}
<li role="presentation">
<LinkTo @route="posts" @query={{hash entry=null}} @classNames="dropdown-item" @role="menuitem" @tabindex="-1" data-test-nav="posts">
<LinkTo @route="posts" @query={{hash entry=null}} class="dropdown-item" @role="menuitem" tabindex="-1" data-test-nav="posts">
Posts
</LinkTo>
</li>
<li role="presentation">
<a href="{{this.config.blogUrl}}/" class="dropdown-item" role="menuitem" tabindex="-1" title="Open site in new tab" target="_blank">View site</a>
<a href="{{this.config.blogUrl}}/" class="dropdown-item" role="menuitem" tabindex="-1" title="Open site in new tab" target="_blank" rel="noopener noreferrer">View site</a>
</li>
<li class="divider" role="separator"></li>
{{else}}
<li role="presentation">
<LinkTo @route="whatsnew" @query={{hash entry=null}} @classNames="dropdown-item" @role="menuitem" @tabindex="-1" data-test-nav="whatsnew">
<LinkTo @route="whatsnew" @query={{hash entry=null}} class="dropdown-item" @role="menuitem" tabindex="-1" data-test-nav="whatsnew">
What's new?
{{#if this.whatsNew.hasNew}}
<div class="flex-grow-1 flex justify-end"><span class="dib w2 h2 top-0 right-0 bg-green br-100"></span></div>
@ -46,7 +46,7 @@
{{/if}}
<li role="presentation">
<LinkTo @route="settings.staff.user" @model={{this.session.user.slug}} @classNames="dropdown-item" @role="menuitem" @tabindex="-1" data-test-nav="user-profile">
<LinkTo @route="settings.staff.user" @model={{this.session.user.slug}} class="dropdown-item" @role="menuitem" tabindex="-1" data-test-nav="user-profile">
Your profile
</LinkTo>
</li>
@ -54,12 +54,12 @@
{{#unless this.session.user.isContributor}}
<li class="divider" role="separator"></li>
<li role="presentation">
<a class="dropdown-item" role="menuitem" tabindex="-1" href="https://ghost.org/docs/" target="_blank">
<a class="dropdown-item" role="menuitem" tabindex="-1" href="https://ghost.org/docs/" target="_blank" rel="noopener noreferrer">
Support center
</a>
</li>
<li role="presentation">
<a class="dropdown-item" role="menuitem" tabindex="-1" href="https://ghost.org/help/topic/setting-up/" target="_blank">
<a class="dropdown-item" role="menuitem" tabindex="-1" href="https://ghost.org/help/topic/setting-up/" target="_blank" rel="noopener noreferrer">
How to use Ghost
</a>
</li>
@ -70,7 +70,7 @@
<li class="divider" role="separator"></li>
{{else}}
<li role="presentation">
<a href="{{menuItem.href}}" target="_blank" class="dropdown-item {{menuItem.classes}}" role="menuitem" tabindex="-1">
<a href="{{menuItem.href}}" target="_blank" class="dropdown-item {{menuItem.classes}}" role="menuitem" tabindex="-1" rel="noopener noreferrer">
{{menuItem.text}}
</a>
</li>
@ -81,7 +81,7 @@
{{/unless}}
<li role="presentation">
<LinkTo @route="signout" @classNames="dropdown-item user-menu-signout" @role="menuitem" @tabindex="-1">
<LinkTo @route="signout" class="dropdown-item user-menu-signout" @role="menuitem" tabindex="-1">
Sign out
</LinkTo>
</li>

View File

@ -7,7 +7,7 @@
<div class="gh-nav-menu-details-sitetitle">{{this.config.blogTitle}}</div>
</div>
<div class="gh-nav-menu-search">
<button class="gh-nav-btn-search" {{on "click" (action "openSearchModal")}} title="Search site (Ctrl/⌘ + K)"><span>{{svg-jar "search"}}</span></button>
<button class="gh-nav-btn-search" title="Search site (Ctrl/⌘ + K)" type="button" {{on "click" (action "openSearchModal")}}><span>{{svg-jar "search"}}</span></button>
</div>
</header>
{{/unless}}
@ -19,7 +19,7 @@
<ul class="gh-nav-list gh-nav-main">
{{#if (gh-user-can-admin this.session.user)}}
<li class="relative">
<LinkTo @route="dashboard" @alt="Dashboard" @title="Dashboard" data-test-nav="dashboard">{{svg-jar "house"}} Dashboard</LinkTo>
<LinkTo @route="dashboard" @alt="Dashboard" title="Dashboard" data-test-nav="dashboard">{{svg-jar "house"}} Dashboard</LinkTo>
</li>
{{/if}}
<li class="relative">
@ -28,7 +28,7 @@
{{svg-jar "view-site"}} View site
</LinkTo>
</span>
<a href="{{this.config.blogUrl}}/" class="gh-secondary-action" title="Open site in new tab" target="_blank">
<a href="{{this.config.blogUrl}}/" class="gh-secondary-action" title="Open site in new tab" target="_blank" rel="noopener noreferrer">
<span>{{svg-jar "external"}}</span>
</a>
</li>
@ -36,7 +36,7 @@
<ul class="gh-nav-list gh-nav-manage">
<li class="gh-nav-list-new relative">
<GhLinkToCustomViewsIndex @route="posts" @query={{reset-query-params "posts"}} data-test-nav="posts">{{svg-jar "posts"}}Posts</GhLinkToCustomViewsIndex>
<LinkTo @route="editor.new" @model="post" @classNames="gh-secondary-action gh-nav-new-post" @alt="New post" @title="New post" data-test-nav="new-story"><span>{{svg-jar "add-stroke"}}</span></LinkTo>
<LinkTo @route="editor.new" @model="post" class="gh-secondary-action gh-nav-new-post" @alt="New post" title="New post" data-test-nav="new-story"><span>{{svg-jar "add-stroke"}}</span></LinkTo>
{{#if this.session.user.isAuthorOrContributor}}
{{#if this.customViews.forPosts}}
<ul class="gh-nav-view-list">
@ -81,7 +81,7 @@
<li>
{{!-- clicking the Content link whilst on the content screen should reset the filter --}}
{{#if (eq this.router.currentRouteName "pages")}}
<LinkTo @route="pages" @query={{reset-query-params "pages"}} @classNames="active" data-test-nav="pages">{{svg-jar "page"}}Pages</LinkTo>
<LinkTo @route="pages" @query={{reset-query-params "pages"}} class="active" data-test-nav="pages">{{svg-jar "page"}}Pages</LinkTo>
{{else}}
<LinkTo @route="pages" data-test-nav="pages">{{svg-jar "page"}}Pages</LinkTo>
{{/if}}
@ -136,7 +136,7 @@
{{/if}}
{{#each this.config.clientExtensions.menu.items as |menuItem| }}
<li>
<a href="{{menuItem.href}}" target="_blank">{{svg-jar menuItem.icon}}{{menuItem.text}}</a>
<a href="{{menuItem.href}}" target="_blank" rel="noopener noreferrer">{{svg-jar menuItem.icon}}{{menuItem.text}}</a>
</li>
{{/each}}
</ul>

View File

@ -24,6 +24,6 @@
<span class="gh-notification-actions">{{this.message.actions}}</span>
{{/if}}
</div>
<button class="gh-notification-close" {{action "closeNotification"}} data-test-button="close-notification">
<button class="gh-notification-close" data-test-button="close-notification" type="button" {{action "closeNotification"}}>
{{svg-jar "close"}}<span class="hidden">Close</span>
</button>

View File

@ -15,11 +15,11 @@
{{!-- new posts don't have a preview link --}}
{{#unless this.post.isNew}}
{{#if (or this.post.isPublished this.post.isSent)}}
<a class="post-view-link" target="_blank" href="{{this.post.url}}">
<a class="post-view-link" target="_blank" href="{{this.post.url}}" rel="noopener noreferrer">
View {{this.post.displayName}} {{svg-jar "external"}}
</a>
{{else if this.post.isScheduled}}
<a class="post-view-link" target="_blank" href="{{this.post.previewUrl}}">
<a class="post-view-link" target="_blank" href="{{this.post.previewUrl}}" rel="noopener noreferrer">
Preview {{svg-jar "external"}}
</a>
{{/if}}
@ -198,7 +198,7 @@
<div class="active">
{{#if (eq this.subview "meta-data")}}
<div class="settings-menu-header subview">
<button aria-label="Back" {{action "closeSubview"}} class="back settings-menu-header-action" data-test-button="close-psm-subview">{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<button aria-label="Back" class="back settings-menu-header-action" data-test-button="close-psm-subview" type="button" {{action "closeSubview"}}>{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<h4>Meta data</h4>
<div style="width:23px;"></div>
</div>
@ -270,7 +270,7 @@
{{#if (eq this.subview "twitter-data")}}
<div class="settings-menu-header subview">
<button aria-label="Back" {{action "closeSubview"}} class="back settings-menu-header-action" data-test-button="close-psm-subview">{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<button aria-label="Back" class="back settings-menu-header-action" data-test-button="close-psm-subview" type="button" {{action "closeSubview"}}>{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<h4>Twitter card</h4>
<div style="width:23px;"></div>
</div>
@ -346,7 +346,7 @@
{{#if (eq this.subview "facebook-data")}}
<div class="settings-menu-header subview">
<button aria-label="Back" {{action "closeSubview"}} class="back settings-menu-header-action" data-test-button="close-psm-subview">{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<button aria-label="Back" class="back settings-menu-header-action" data-test-button="close-psm-subview" type="button" {{action "closeSubview"}}>{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<h4>Facebook card</h4>
<div style="width:23px;"></div>
</div>
@ -414,7 +414,7 @@
{{#if (eq this.subview "codeinjection")}}
<div class="settings-menu-header subview">
<button aria-label="Back" {{action "closeSubview"}} class="back settings-menu-header-action" data-test-button="close-psm-subview">{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<button aria-label="Back" class="back settings-menu-header-action" data-test-button="close-psm-subview" type="button" {{action "closeSubview"}}>{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<h4>Code injection</h4>
<div style="width:23px;"></div>
</div>

View File

@ -1,5 +1,5 @@
<div class="settings-menu-header subview">
<button {{on "click" this.close}} class="back settings-menu-header-action" data-test-button="close-psm-subview">{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<button class="back settings-menu-header-action" data-test-button="close-psm-subview" type="button" {{on "click" this.close}}>{{svg-jar "arrow-left"}}<span class="hidden">Back</span></button>
<h4>Email newsletter</h4>
<div style="width:23px;"></div>
</div>

View File

@ -5,7 +5,7 @@
>
{{#if (and this.session.user.isContributor @post.isPublished)}}
<a href={{@post.url}} class="permalink gh-list-data gh-post-list-title" target="_blank">
<a href={{@post.url}} class="permalink gh-list-data gh-post-list-title" target="_blank" rel="noopener noreferrer">
<h3 class="gh-content-entry-title">
{{@post.title}} {{svg-jar "external" class="gh-post-list-external"}}
</h3>
@ -75,7 +75,7 @@
{{/if}}
{{#if (and this.session.user.isContributor @post.isPublished)}}
<a href={{@post.url}} class="permalink gh-list-data gh-post-list-status" target="_blank">
<a href={{@post.url}} class="permalink gh-list-data gh-post-list-status" target="_blank" rel="noopener noreferrer">
<div class="flex items-center">
{{#if @post.isScheduled}}
<span class="gh-content-status-scheduled gh-badge nowrap" title="Scheduled" data-tooltip="{{capitalize this.scheduledText}} to {{@post.emailRecipientFilter}} members">

View File

@ -70,7 +70,7 @@
@classNames="gh-tier-actions-menu dropdown-menu dropdown-triangle-top-right"
>
<li>
<button class="mr2" {{action "openEditProduct" this.product}}>
<button class="mr2" type="button" {{action "openEditProduct" this.product}}>
<span>Edit</span>
</button>
</li>

View File

@ -49,7 +49,7 @@
or cancel the task when the post status updates and switches components
--}}
<footer class="gh-publishmenu-footer">
<button class="gh-btn gh-btn-outline" {{on "click" (action dd.actions.close)}} data-test-publishmenu-cancel>
<button class="gh-btn gh-btn-outline" data-test-publishmenu-cancel type="button" {{on "click" (action dd.actions.close)}}>
<span>Cancel</span>
</button>
<GhTaskButton

View File

@ -19,7 +19,7 @@
</span>
<p class="description">
Start with # to create internal tags
<a href="https://ghost.org/help/organising-content/#private-tags" target="_blank" rel="noreferrer">Learn more</a>
<a href="https://ghost.org/help/organising-content/#private-tags" target="_blank" rel="noopener noreferrer">Learn more</a>
</p>
</GhFormGroup>

View File

@ -1,5 +1,5 @@
<li class="gh-list-row gh-tags-list-item" ...attributes>
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-tag-list-title gh-list-cellwidth-70" @title="Edit tag">
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-tag-list-title gh-list-cellwidth-70" title="Edit tag">
<h3 class="gh-tag-list-name">
{{@tag.name}}
</h3>
@ -10,21 +10,21 @@
{{/if}}
</LinkTo>
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data middarkgrey f8 gh-tag-list-slug gh-list-cellwidth-10" @title="Edit tag">
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data middarkgrey f8 gh-tag-list-slug gh-list-cellwidth-10" title="Edit tag">
<span title="{{@slug}}">{{@slug}}</span>
</LinkTo>
{{#if @tag.count.posts}}
<LinkTo @route="posts" @query={{hash type=null author=null tag=@tag.slug order=null}} class="gh-list-data gh-tag-list-posts-count gh-list-cellwidth-10 f8" @title={{concat "List posts tagged with '" @tag.name "'"}}>
<LinkTo @route="posts" @query={{hash type=null author=null tag=@tag.slug order=null}} class="gh-list-data gh-tag-list-posts-count gh-list-cellwidth-10 f8" title={{concat "List posts tagged with '" @tag.name "'"}}>
<span class="nowrap">{{gh-pluralize @tag.count.posts "post"}}</span>
</LinkTo>
{{else}}
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-tag-list-posts-count gh-list-cellwidth-10" @title="Edit tag">
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-tag-list-posts-count gh-list-cellwidth-10" title="Edit tag">
<span class="nowrap f8 midlightgrey">{{gh-pluralize @tag.count.posts "post"}}</span>
</LinkTo>
{{/if}}
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-list-cellwidth-10 gh-list-chevron" @title="Edit tag">
<LinkTo @route="tag" @model={{@tag}} class="gh-list-data gh-list-cellwidth-10 gh-list-chevron" title="Edit tag">
<div class="flex items-center justify-end w-100 h-100">
<span class="nr2">{{svg-jar "arrow-right" class="w6 h6 fill-midgrey pa1"}}</span>
</div>

View File

@ -3,15 +3,15 @@
<img src={{this.imageUrl}} alt={{this.photo.description}} width={{this.width}} height={{this.height}} data-test-unsplash-photo-image />
<div class="gh-unsplash-photo-overlay">
<div class="gh-unsplash-photo-header">
<a class="gh-unsplash-button-likes gh-unsplash-button" href="{{this.photo.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank">{{svg-jar "unsplash-heart"}}{{this.photo.likes}}</a>
<a class="gh-unsplash-button-likes gh-unsplash-button" href="{{this.photo.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank" rel="noopener noreferrer">{{svg-jar "unsplash-heart"}}{{this.photo.likes}}</a>
<a class="gh-unsplash-button-download gh-unsplash-button" href="{{this.photo.links.download}}/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit&force=true">{{svg-jar "download"}}</a>
</div>
<div class="gh-unsplash-photo-footer">
<div class="gh-unsplash-photo-author">
<a class="gh-unsplash-photo-author-img" href="{{this.photo.user.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank">
<a class="gh-unsplash-photo-author-img" href="{{this.photo.user.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank" rel="noopener noreferrer">
<img src="{{this.photo.user.profile_image.medium}}" />
</a>
<a class="gh-unsplash-photo-author-name" href="{{this.photo.user.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank">
<a class="gh-unsplash-photo-author-name" href="{{this.photo.user.links.html}}?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank" rel="noopener noreferrer">
{{this.photo.user.name}}
</a>
</div>

View File

@ -11,7 +11,7 @@
{{!-- static header --}}
<header class="flex-shrink-0 flex flex-row-l flex-column justify-between pt6 pr8 pb6 pl8 pt10-l pr20-l pb10-l pl20-l items-center">
<h1 class="flex items-center darkgrey-d2 w-100 nudge-top--4">
<a class="dib w8 mr2" href="https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank">{{svg-jar "unsplash" class="fill-darkgrey-d2"}}</a>
<a class="dib w8 mr2" href="https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit" target="_blank" rel="noopener noreferrer">{{svg-jar "unsplash" class="fill-darkgrey-d2"}}</a>
Unsplash
</h1>
<span class="gh-input-icon mw88-l flex-auto w-100 mt3 mt0-l">

View File

@ -1,2 +1,2 @@
<button {{action "openMobileMenu" target=this.ui}} class="gh-mobilemenu-button" role="presentation">{{svg-jar "icon" class="icon-gh"}}<span class="sr-only">Menu</span></button>
<button class="gh-mobilemenu-button" role="presentation" type="button" {{action "openMobileMenu" target=this.ui}}>{{svg-jar "icon" class="icon-gh"}}<span class="sr-only">Menu</span></button>
{{yield}}

View File

@ -6,7 +6,7 @@
<div class="flex items-center">
<GhMemberAvatar @member={{event.member}} @containerClass="w9 h9 mr3 flex-shrink-0" />
<div class="w-80">
<h3 class="ma0 pa0 gh-members-list-name {{if (not event.member.name) "gh-members-name-noname"}}">{{or event.member.name event.member.email}}</h3>
<h3 class="ma0 pa0 gh-members-list-name {{unless event.member.name "gh-members-name-noname"}}">{{or event.member.name event.member.email}}</h3>
{{#if event.member.name}}
<p class="ma0 pa0 middarkgrey f8 gh-members-list-email">{{event.member.email}}</p>
{{/if}}

View File

@ -3,14 +3,7 @@
</header>
<a class="close" href="" role="button" title="Close" {{action "closeModal"}}>{{svg-jar "close"}}<span class="hidden">Close</span></a>
{{#if (not this.confirmed)}}
<div class="modal-body" data-test-state="add-label-unconfirmed">
<GhMemberSingleLabelInput @onChange={{action "setLabel"}} @triggerId="label-input" data-test-input="" />
<p class="mt2 ml1">
Will be added to the currently selected <span class="fw6" data-test-text="member-count">{{gh-pluralize this.model.memberCount "member"}}</span>
</p>
</div>
{{else}}
{{#if this.confirmed}}
<div class="gh-content-box pa" data-test-state="add-complete">
{{#if this.error}}
<div class="flex items-center">
@ -41,11 +34,22 @@
{{/if}}
{{/if}}
</div>
{{else}}
<div class="modal-body" data-test-state="add-label-unconfirmed">
<GhMemberSingleLabelInput @onChange={{action "setLabel"}} @triggerId="label-input" data-test-input="" />
<p class="mt2 ml1">
Will be added to the currently selected <span class="fw6" data-test-text="member-count">{{gh-pluralize this.model.memberCount "member"}}</span>
</p>
</div>
{{/if}}
<div class="modal-footer">
{{#if (not this.confirmed)}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="cancel">
{{#if this.confirmed}}
<button class="gh-btn gh-btn-black" data-test-button="close-modal" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
{{else}}
<button class="gh-btn" data-test-button="cancel" type="button" {{action "closeModal"}}>
<span>Cancel</span>
</button>
@ -57,9 +61,5 @@
@class="gh-btn gh-btn-green gh-btn-icon"
data-test-button="confirm"
/>
{{else}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-modal">
<span>Close</span>
</button>
{{/if}}
</div>

View File

@ -8,6 +8,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Delete" @successText="Deleted" @task={{this.deleteAll}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -8,7 +8,7 @@
</p>
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton
@buttonText="Delete Integration"
@successText="Deleted"

View File

@ -30,6 +30,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText={{if this.shouldCancelSubscriptions "Delete member + Cancel subscription" "Delete member"}} @successText="Deleted" @task={{this.deleteMember}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -3,18 +3,7 @@
</header>
<a class="close" href="" role="button" title="Close" {{action "closeModal"}}>{{svg-jar "close"}}<span class="hidden">Close</span></a>
{{#if (not this.confirmed)}}
<div class="modal-body" data-test-state="delete-unconfirmed">
<p>
You're about to delete
<strong data-test-text="delete-count">{{gh-pluralize this.model.memberCount "member"}}</strong>.
This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.
</p>
<p>
A backup of your selection will be automatically downloaded to your device before deletion.
</p>
</div>
{{else}}
{{#if this.confirmed}}
<div class="gh-content-box pa" data-test-state="delete-complete">
{{#if this.error}}
<div class="flex items-center">
@ -46,11 +35,26 @@
{{/if}}
{{/if}}
</div>
{{else}}
<div class="modal-body" data-test-state="delete-unconfirmed">
<p>
You're about to delete
<strong data-test-text="delete-count">{{gh-pluralize this.model.memberCount "member"}}</strong>.
This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.
</p>
<p>
A backup of your selection will be automatically downloaded to your device before deletion.
</p>
</div>
{{/if}}
<div class="modal-footer">
{{#if (not this.confirmed)}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="cancel">
{{#if this.confirmed}}
<button class="gh-btn gh-btn-black" data-test-button="close-modal" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
{{else}}
<button class="gh-btn" data-test-button="cancel" type="button" {{action "closeModal"}}>
<span>Cancel</span>
</button>
@ -61,9 +65,5 @@
@class="gh-btn gh-btn-red gh-btn-icon"
data-test-button="confirm"
/>
{{else}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-modal">
<span>Close</span>
</button>
{{/if}}
</div>

View File

@ -10,7 +10,7 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton
@buttonText="Delete snippet"
@successText="Deleted"

View File

@ -11,6 +11,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Delete" @successText="Deleted" @task={{this.deleteTag}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -19,7 +19,7 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn" data-test-button="cancel-delete-user">
<button class="gh-btn" data-test-button="cancel-delete-user" type="button" {{action "closeModal"}}>
<span>Cancel</span>
</button>
<GhTaskButton @buttonText="Download backup & delete user"

View File

@ -10,6 +10,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Delete Webhook" @successText="Deleted" @task={{this.deleteWebhook}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -8,6 +8,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Disconnect" @successText="Disconnected" @task={{this.disconnectStripe}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -8,6 +8,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button {{action "closeModal"}} class="gh-btn gh-btn-primary"><span>Enable feature</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<button class="gh-btn gh-btn-primary" type="button" {{action "closeModal"}}><span>Enable feature</span></button>
</div>

View File

@ -3,8 +3,7 @@
<h2 class="modal-fullsettings-heading">Email newsletter design</h2>
<div class="flex items-center">
<button
class="gh-btn mr3"
{{on "click" (action "closeModal")}}
class="gh-btn mr3" type="button" {{on "click" (action "closeModal")}}
{{!-- disable mouseDown so it does not trigger focus-out validations --}}
{{on "mousedown" (optional this.noop)}}
>
@ -71,9 +70,9 @@
</GhUploader>
</GhFormGroup>
<GhFormGroup data-tooltip={{if (not this.settings.icon) "A publication icon must be set in Branding settings."}}>
<h4 class="modal-fullsettings-title {{if (not this.settings.icon) "disabled"}}">Publication icon</h4>
<div class="for-switch small {{if (not this.settings.icon) "disabled"}}">
<GhFormGroup data-tooltip={{unless this.settings.icon "A publication icon must be set in Branding settings."}}>
<h4 class="modal-fullsettings-title {{unless this.settings.icon "disabled"}}">Publication icon</h4>
<div class="for-switch small {{unless this.settings.icon "disabled"}}">
<label class="switch" for="show-header">
<input
type="checkbox"
@ -239,7 +238,7 @@
<span>{{this.config.blogTitle}} &copy; {{this.copyrightYear}} </span> <a href="javascript:">Unsubscribe</a>
</div>
</div>
<div class="gh-members-emailpreview-badge {{if (not this.showBadge) "hide"}}">
<div class="gh-members-emailpreview-badge {{unless this.showBadge "hide"}}">
<a href="javascript:"><svg viewBox="0 0 156 156"><g fill="none" fill-rule="evenodd"><rect fill="#15212B" width="156" height="156" rx="27"></rect><g transform="translate(36 36)" fill="#F6F8FA"><path d="M0 71.007A4.004 4.004 0 014 67h26a4 4 0 014 4.007v8.986A4.004 4.004 0 0130 84H4a4 4 0 01-4-4.007v-8.986zM50 71.007A4.004 4.004 0 0154 67h26a4 4 0 014 4.007v8.986A4.004 4.004 0 0180 84H54a4 4 0 01-4-4.007v-8.986z"></path><rect y="34" width="84" height="17" rx="4"></rect><path d="M0 4.007A4.007 4.007 0 014.007 0h41.986A4.003 4.003 0 0150 4.007v8.986A4.007 4.007 0 0145.993 17H4.007A4.003 4.003 0 010 12.993V4.007z"></path><rect x="67" width="17" height="17" rx="4"></rect></g></g></svg> <span>Publish with Ghost</span></a>
</div>
</div>

View File

@ -4,10 +4,10 @@
<a class="close" href="" role="button" title="Close" {{action "closeModal"}}>{{svg-jar "close"}}<span class="hidden">Close</span></a>
<div class="modal-body">
<p>Tiers for paid memberships is currently in an early access beta. Once enabled, it cannot be switched off. <a href="http://ghost.org/help/tiers" target="_blank">Learn more here</a></p>
<p>Tiers for paid memberships is currently in an early access beta. Once enabled, it cannot be switched off. <a href="http://ghost.org/help/tiers" target="_blank" rel="noopener noreferrer">Learn more here</a></p>
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button {{action "confirm"}} class="gh-btn gh-btn-primary"><span>Enable Tiers</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<button class="gh-btn gh-btn-primary" type="button" {{action "confirm"}}><span>Enable Tiers</span></button>
</div>

View File

@ -1,7 +1,7 @@
<header class="modal-header" data-test-modal="webhook-form">
<h1 data-test-text="title">Free membership settings</h1>
</header>
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -52,11 +52,9 @@
<div class="modal-footer">
<button
class="gh-btn"
{{action "closeModal"}}
class="gh-btn" data-test-button="cancel-webhook" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{!-- {{action (optional this.noop) on="mouseDown"}} --}}
data-test-button="cancel-webhook"
>
<span>Cancel</span>
</button>

View File

@ -106,23 +106,23 @@
<div class="modal-footer modal-footer-spread">
{{#if (eq this.state 'INIT')}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="close-import-members">
<button class="gh-btn" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
<a
class="gh-btn"
href="https://static.ghost.org/v4.0.0/files/member-import-template.csv"
target="_blank"
target="_blank" rel="noopener noreferrer"
>
<span>Download sample CSV file</span>
</a>
{{/if}}
{{#if (eq this.state 'MAPPING')}}
<button {{action "reset"}} class="gh-btn" data-test-button="restart-import-members">
<button class="gh-btn" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Start over</span>
</button>
<button class="gh-btn gh-btn-green {{unless this.mappingResult.membersCount "disabled"}}" {{action "upload"}}>
<button class="gh-btn gh-btn-green {{unless this.mappingResult.membersCount "disabled"}}" type="button" {{action "upload"}}>
{{#if this.mappingResult.membersCount}}
<span>Import {{format-number this.mappingResult.membersCount}} {{gh-pluralize this.mappingResult.membersCount 'member' without-count=true}}</span>
{{else}}
@ -132,10 +132,10 @@
{{/if}}
{{#if (eq this.state 'UPLOADING')}}
<button {{action "reset"}} class="gh-btn disabled" disabled="disabled" data-test-button="restart-import-members">
<button class="gh-btn disabled" disabled="disabled" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Start over</span>
</button>
<button class="gh-btn gh-btn-green gh-btn-icon disabled" disabled="disabled" {{action "upload"}}>
<button class="gh-btn gh-btn-green gh-btn-icon disabled" disabled="disabled" type="button" {{action "upload"}}>
<span>{{svg-jar "spinner" class="gh-icon-spinner"}} {{this.runningText}}Uploading</span>
</button>
{{/if}}
@ -146,27 +146,27 @@
<span>Download error file</span>
</a>
{{#if (eq this.importResponse.importedCount 0)}}
<button {{action "reset"}} class="gh-btn gh-btn-black" data-test-button="restart-import-members">
<button class="gh-btn gh-btn-black" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Try again</span>
</button>
{{else}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-import-members">
<button class="gh-btn gh-btn-black" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>View members</span>
</button>
{{/if}}
{{else}}
{{#if (eq this.importResponse.importedCount 0)}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="close-import-members">
<button class="gh-btn" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
<button {{action "reset"}} class="gh-btn gh-btn-black" data-test-button="restart-import-members">
<button class="gh-btn gh-btn-black" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Try again</span>
</button>
{{else}}
<button {{action "reset"}} class="gh-btn" data-test-button="restart-import-members">
<button class="gh-btn" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Upload another file</span>
</button>
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-import-members">
<button class="gh-btn gh-btn-black" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>View members</span>
</button>
{{/if}}
@ -174,21 +174,21 @@
{{/if}}
{{#if (eq this.state 'PROCESSING')}}
<button {{action "reset"}} class="gh-btn" data-test-button="restart-import-members">
<button class="gh-btn" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Upload another file</span>
</button>
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-import-members">
<button class="gh-btn gh-btn-black" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>Got it</span>
</button>
{{/if}}
{{#if (eq this.state 'ERROR')}}
{{#if showTryAgainButton}}
<button {{action "reset"}} class="gh-btn" data-test-button="restart-import-members">
<button class="gh-btn" data-test-button="restart-import-members" type="button" {{action "reset"}}>
<span>Try again</span>
</button>
{{/if}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-import-members">
<button class="gh-btn gh-btn-black" data-test-button="close-import-members" type="button" {{action "closeModal"}}>
<span>OK</span>
</button>
{{/if}}

View File

@ -12,6 +12,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn" data-test-stay-button><span>Stay</span></button>
<button {{action "confirm"}} class="gh-btn gh-btn-red" data-test-leave-button><span>Leave</span></button>
<button class="gh-btn" data-test-stay-button type="button" {{action "closeModal"}}><span>Stay</span></button>
<button class="gh-btn gh-btn-red" data-test-leave-button type="button" {{action "confirm"}}><span>Leave</span></button>
</div>

View File

@ -81,6 +81,6 @@
</tr>
</tbody>
</table>
For further Markdown syntax reference: <a href="https://ghost.org/help/using-the-editor/#using-markdown" target="_blank">Markdown Documentation</a>
For further Markdown syntax reference: <a href="https://ghost.org/help/using-the-editor/#using-markdown" target="_blank" rel="noopener noreferrer">Markdown Documentation</a>
</section>
</div>

View File

@ -43,11 +43,9 @@
<div class="modal-footer">
<button
class="gh-btn"
{{action "closeModal" }}
class="gh-btn" data-test-button="cancel-webhook" type="button" {{action "closeModal" }}
{{!-- disable mouseDown so it does not trigger focus-out validations --}}
{{action (optional this.noop) on="mouseDown" }}
data-test-button="cancel-webhook">
{{action (optional this.noop) on="mouseDown" }}>
<span>Cancel</span>
</button>

View File

@ -11,7 +11,7 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Delete" @successText="Deleted" @task={{this.deleteLabel}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>
{{else}}
@ -20,7 +20,7 @@
<h1>{{if this.label.isNew "New label" "Edit label"}}</h1>
</header>
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -44,24 +44,19 @@
<div class="modal-footer">
{{#if this.label.isNew}}
<button
class="gh-btn"
{{action "closeModal"}}
class="gh-btn" data-test-button="cancel-label-form" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{action (optional this.noop) on="mouseDown"}}
data-test-button="cancel-label-form"
>
<span>Cancel</span>
</button>
{{else}}
<button
class="gh-btn gh-btn-red gh-btn-icon"
{{on "click" (action "toggleDeleteLabelModal")}}
class="gh-btn gh-btn-red gh-btn-icon" data-test-button="delete-label" type="button" {{on "click" (action "toggleDeleteLabelModal")}}
{{on "mousedown" (optional this.noop)}}
data-test-button="delete-label"
>
<span>{{svg-jar "trash"}} Delete</span>
</button
>
</button>
{{/if}}
<GhTaskButton

View File

@ -1,5 +1,5 @@
<div class="modal-body gh-ps-modal-body">
<div class="flex pa0 flex-grow-1 gh-portal-settings" {{did-insert (fn this.finishPreloading)}}>
<div class="flex pa0 flex-grow-1 gh-portal-settings" {{did-insert this.finishPreloading}}>
{{#if this.isPreloading}}
<GhLoadingSpinner />
{{else}}
@ -158,7 +158,7 @@
</div>
{{else}}
<div class="gh-portal-setting-no-stripe">
You need to <button class="gh-btn gh-btn-link black {{if (not this.session.user.isAdmin) "disabled"}}" {{on "click" (action "openStripeSettings")}}>connect to Stripe</button> to take payments
You need to <button class="gh-btn gh-btn-link black {{unless this.session.user.isAdmin "disabled"}}" type="button" {{on "click" (action "openStripeSettings")}}>connect to Stripe</button> to take payments
</div>
{{/if}}
</div>
@ -313,8 +313,7 @@
<div class="gh-portal-settings-actions">
<button
class="gh-btn mr3"
{{action "closeModal"}}
class="gh-btn mr3" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{on "mousedown" (optional this.noop)}}
>

View File

@ -1,7 +1,7 @@
<header class="modal-header" data-test-modal="webhook-form">
<h1 data-test-text="title">{{this.title}}</h1>
</header>
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -75,11 +75,9 @@
<div class="modal-footer">
<button
class="gh-btn"
{{action "closeModal"}}
class="gh-btn" data-test-button="cancel-webhook" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{action (optional this.noop) on="mouseDown"}}
data-test-button="cancel-webhook"
>
<span>Cancel</span>
</button>

View File

@ -1,4 +1,4 @@
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -13,7 +13,7 @@
<div class="gh-main-section-block span-2">
<h4 class="gh-main-section-header small bn">Basic</h4>
<div class="gh-main-section-content grey gh-product-priceform-block">
{{#if (not this.isFreeProduct)}}
{{#unless this.isFreeProduct}}
<GhFormGroup @errors={{this.errors}} @property="name">
<label for="name" class="fw6">Name</label>
<GhTextInput
@ -25,15 +25,15 @@
@class="gh-input" />
<GhErrorMessage @errors={{this.errors}} @property="name" />
</GhFormGroup>
{{/if}}
{{/unless}}
<GhFormGroup @errors={{this.errors}} @property="description">
<label for="description" class="fw6">Description</label>
{{#if (not this.isFreeProduct)}}
{{#if this.isFreeProduct}}
<GhTextInput
@value={{readonly this.product.description}}
@input={{action (mut this.product.description) value="target.value"}}
@name="description"
@placeholder="Full access to premium content"
@placeholder="Free preview of {{this.settings.title}}"
@id="description"
@class="gh-input" />
{{else}}
@ -41,7 +41,7 @@
@value={{readonly this.product.description}}
@input={{action (mut this.product.description) value="target.value"}}
@name="description"
@placeholder="Free preview of {{this.settings.title}}"
@placeholder="Full access to premium content"
@id="description"
@class="gh-input" />
{{/if}}
@ -58,14 +58,14 @@
@validateUrl={{this.validateWelcomePageURL}}
@placeholder={{readonly this.siteUrl}}
/>
{{#if (not this.isFreeProduct)}}
<p>Redirect to this URL after signup for premium membership</p>
{{else}}
{{#if this.isFreeProduct}}
<p>Redirect to this URL after signup for a free membership</p>
{{else}}
<p>Redirect to this URL after signup for premium membership</p>
{{/if}}
</GhFormGroup>
{{/if}}
{{#if (not this.isFreeProduct)}}
{{#unless this.isFreeProduct}}
<GhFormGroup @errors={{this.settings.errors}} @hasValidated={{this.settings.hasValidated}} @property="prices">
<div class="gh-settings-members-pricelabelcont">
<label for="monthlyPrice">Prices</label>
@ -117,7 +117,7 @@
<p class="response w-100"><span class="red">{{this.stripePlanError}}</span></p>
{{/if}}
</GhFormGroup>
{{/if}}
{{/unless}}
</div>
<h4 class="gh-main-section-header small bn">Benefits</h4>
@ -155,10 +155,10 @@
</div>
<div class="gh-main-section-block gh-product-form-tierpreview">
<div class="gh-product-form-tierpreview-content">
{{#if (not this.isFreeProduct)}}
<h4 class="gh-main-section-header small bn">Tier Preview</h4>
{{else}}
{{#if this.isFreeProduct}}
<h4 class="gh-main-section-header small bn">Free Membership Preview</h4>
{{else}}
<h4 class="gh-main-section-header small bn">Tier Preview</h4>
{{/if}}
<div class="gh-main-section-content" style="border-color: {{this.settings.accentColor}}">
<span class="checkmark" style="background-color: {{this.settings.accentColor}}"></span>
@ -172,10 +172,10 @@
{{#if this.product.description}}
<p>{{this.product.description}}</p>
{{else}}
{{#if (not this.isFreeProduct)}}
<p class="placeholder">Full access to premium content</p>
{{else}}
{{#if this.isFreeProduct}}
<p class="placeholder">Free preview of {{this.settings.title}}</p>
{{else}}
<p class="placeholder">Full access to premium content</p>
{{/if}}
{{/if}}
@ -187,15 +187,20 @@
</ul>
{{else}}
<ul class="placeholder">
{{#if (not this.isFreeProduct)}}
<li>{{svg-jar "check-2"}} <span>Expert analysis</span></li>
{{else}}
{{#if this.isFreeProduct}}
<li>{{svg-jar "check-2"}} <span>Access to all public posts</span></li>
{{else}}
<li>{{svg-jar "check-2"}} <span>Expert analysis</span></li>
{{/if}}
</ul>
{{/if}}
<div class="price">
{{#if (not this.isFreeProduct)}}
{{#if this.isFreeProduct}}
<span class="monthly-price">
<span class="currency">{{currency-symbol this.currency}}</span>
0
</span>
{{else}}
{{#if this.stripeMonthlyAmount}}
<span class="monthly-price">
<span class="currency">{{currency-symbol this.currency}}</span>
@ -215,11 +220,6 @@
{{else}}
<span class="yearly-price placeholder">0<span class="currency">{{this.currency}}</span>/year</span>
{{/if}}
{{else}}
<span class="monthly-price">
<span class="currency">{{currency-symbol this.currency}}</span>
0
</span>
{{/if}}
</div>
</div>
@ -232,11 +232,9 @@
<div class="modal-footer top-shadow items-center">
<button
class="gh-btn"
{{action "closeModal"}}
class="gh-btn" data-test-button="cancel-webhook" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{action (optional this.noop) on="mouseDown"}}
data-test-button="cancel-webhook"
>
<span>Cancel</span>
</button>

View File

@ -17,6 +17,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Regenerate {{capitalize this.apiKey.type}} API Key" @successText="Regenerated" @task={{this.regenerateKey}} @class="gh-btn gh-btn-icon gh-btn-red" />
</div>

View File

@ -13,8 +13,8 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn" autofocus><span>Cancel</span></button>
<button class="gh-btn gh-btn-icon gh-btn-red" {{action "confirm"}}>
<button class="gh-btn" autofocus type="button" {{action "closeModal"}}><span>Cancel</span></button>
<button class="gh-btn gh-btn-icon gh-btn-red" type="button" {{action "confirm"}}>
<span>Regenerate your Staff Access Token</span>
</button>
</div>

View File

@ -3,14 +3,7 @@
</header>
<a class="close" href="" role="button" title="Close" {{action "closeModal"}}>{{svg-jar "close"}}<span class="hidden">Close</span></a>
{{#if (not this.confirmed)}}
<div class="modal-body" data-test-state="add-label-unconfirmed">
<GhMemberSingleLabelInput @onChange={{action "setLabel"}} @triggerId="label-input" data-test-input="" />
<p class="mt2 ml1">
Will be removed from the currently selected <span class="fw6" data-test-text="member-count">{{gh-pluralize this.model.memberCount "member"}}</span>
</p>
</div>
{{else}}
{{#if this.confirmed}}
<div class="gh-content-box pa" data-test-state="remove-complete">
{{#if this.error}}
<div class="flex items-center">
@ -41,11 +34,22 @@
{{/if}}
{{/if}}
</div>
{{else}}
<div class="modal-body" data-test-state="add-label-unconfirmed">
<GhMemberSingleLabelInput @onChange={{action "setLabel"}} @triggerId="label-input" data-test-input="" />
<p class="mt2 ml1">
Will be removed from the currently selected <span class="fw6" data-test-text="member-count">{{gh-pluralize this.model.memberCount "member"}}</span>
</p>
</div>
{{/if}}
<div class="modal-footer">
{{#if (not this.confirmed)}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="cancel">
{{#if this.confirmed}}
<button class="gh-btn gh-btn-black" data-test-button="close-modal" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
{{else}}
<button class="gh-btn" data-test-button="cancel" type="button" {{action "closeModal"}}>
<span>Cancel</span>
</button>
@ -57,9 +61,5 @@
@class="gh-btn gh-btn-red gh-btn-icon"
data-test-button="confirm"
/>
{{else}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-modal">
<span>Close</span>
</button>
{{/if}}
</div>

View File

@ -20,6 +20,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Reset Passwords" @task={{this.resetPasswords}} @class="gh-btn gh-btn-red gh-btn-icon" disabled={{this.isConfirmDisabled}} />
</div>

View File

@ -11,6 +11,6 @@
</div>
<div class="modal-footer">
<button {{on "click" this.close}} class="gh-btn"><span>Cancel</span></button>
<button {{on "click" this.confirmAction}} class="gh-btn gh-btn-black"><span>Change role</span></button>
<button class="gh-btn" type="button" {{on "click" this.close}}><span>Cancel</span></button>
<button class="gh-btn gh-btn-black" type="button" {{on "click" this.confirmAction}}><span>Change role</span></button>
</div>

View File

@ -1,7 +1,7 @@
<header class="modal-header" data-test-modal="webhook-form" {{will-destroy this.reset}}>
<h1 data-test-text="title">Connect with Stripe</h1>
</header>
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -18,10 +18,8 @@
<div class="modal-footer">
{{#if this.settings.stripeConnectAccountId}}
<button
class="gh-btn gh-btn-black"
{{action "confirm"}}
class="gh-btn gh-btn-black" data-test-button="stripe-connect-ok" type="button" {{action "confirm"}}
{{action (optional this.noop) on="mouseDown"}}
data-test-button="stripe-connect-ok"
>
<span>OK</span>
</button>

View File

@ -8,6 +8,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Suspend" @successText="Suspended" @task={{this.suspendUser}} @class="gh-btn gh-btn-red gh-btn-icon" data-test-modal-confirm="true" />
</div>

View File

@ -11,6 +11,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Yep - I'm sure" @task={{this.transferOwnership}} @class="gh-btn gh-btn-red gh-btn-icon" />
</div>

View File

@ -3,15 +3,7 @@
</header>
<a class="close" href="" role="button" title="Close" {{action "closeModal"}}>{{svg-jar "close"}}<span class="hidden">Close</span></a>
{{#if (not this.confirmed)}}
<div class="modal-body" data-test-state="unsubscribe-unconfirmed">
<p>
You're about to unsubscribe
<strong data-test-text="unsubscribe-count">{{gh-pluralize this.model.memberCount "member"}}</strong> from email newsletters.
Are you sure?
</p>
</div>
{{else}}
{{#if this.confirmed}}
<div class="gh-content-box pa" data-test-state="unsubscribe-complete">
{{#if this.error}}
<div class="flex items-center">
@ -43,11 +35,23 @@
{{/if}}
{{/if}}
</div>
{{else}}
<div class="modal-body" data-test-state="unsubscribe-unconfirmed">
<p>
You're about to unsubscribe
<strong data-test-text="unsubscribe-count">{{gh-pluralize this.model.memberCount "member"}}</strong> from email newsletters.
Are you sure?
</p>
</div>
{{/if}}
<div class="modal-footer">
{{#if (not this.confirmed)}}
<button {{action "closeModal"}} class="gh-btn" data-test-button="cancel">
{{#if this.confirmed}}
<button class="gh-btn gh-btn-black" data-test-button="close-modal" type="button" {{action "closeModal"}}>
<span>Close</span>
</button>
{{else}}
<button class="gh-btn" data-test-button="cancel" type="button" {{action "closeModal"}}>
<span>Cancel</span>
</button>
@ -58,9 +62,5 @@
@class="gh-btn gh-btn-red gh-btn-icon"
data-test-button="confirm"
/>
{{else}}
<button {{action "closeModal"}} class="gh-btn gh-btn-black" data-test-button="close-modal">
<span>Close</span>
</button>
{{/if}}
</div>

View File

@ -8,6 +8,6 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton @buttonText="Un-suspend" @successText="Suspended" @task={{this.unsuspendUser}} @class="gh-btn gh-btn-red gh-btn-icon" data-test-modal-confirm="true" />
</div>

View File

@ -12,7 +12,7 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
<GhTaskButton
@buttonText="Update"
@successText="Updated"

View File

@ -2,7 +2,7 @@
<header class="modal-header" data-test-modal="delete-user">
<h1>{{headerMessage}}</h1>
</header>
<button class="close" title="Close" {{on "click" this.closeModal}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" this.closeModal}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body">
<p>
@ -11,11 +11,11 @@
</div>
<div class="modal-footer">
<button {{on "click" this.closeModal}} class="gh-btn" data-test-button="cancel-upgrade">
<button class="gh-btn" data-test-button="cancel-upgrade" type="button" {{on "click" this.closeModal}}>
<span>Cancel</span>
</button>
<button {{on "click" (action "upgrade")}} class="gh-btn gh-btn-green" data-test-button="upgrade-plan">
<button class="gh-btn gh-btn-green" data-test-button="upgrade-plan" type="button" {{on "click" (action "upgrade")}}>
<span>Upgrade</span>
</button>
</div>

View File

@ -1,7 +1,7 @@
<header class="modal-header" data-test-modal="delete-user">
<h1>Upgrade to un-suspend this user</h1>
</header>
<button class="close" title="Close" {{on "click" this.closeModal}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" this.closeModal}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body">
<p>
@ -10,11 +10,11 @@
</div>
<div class="modal-footer">
<button {{on "click" this.closeModal}} class="gh-btn" data-test-button="cancel-upgrade">
<button class="gh-btn" data-test-button="cancel-upgrade" type="button" {{on "click" this.closeModal}}>
<span>Cancel</span>
</button>
<button {{on "click" (action "upgrade")}} class="gh-btn gh-btn-green" data-test-button="upgrade-plan">
<button class="gh-btn gh-btn-green" data-test-button="upgrade-plan" type="button" {{on "click" (action "upgrade")}}>
<span>Upgrade my plan</span>
</button>
</div>

View File

@ -23,9 +23,9 @@
</div>
<div class="modal-footer">
<button {{action "closeModal"}} class="gh-btn"><span>Cancel</span></button>
<button class="gh-btn" type="button" {{action "closeModal"}}><span>Cancel</span></button>
{{#if this._isUploading}}
<button class="gh-btn gh-btn-black right gh-btn-icon disabled"><span>Save</span></button>
<button class="gh-btn gh-btn-black right gh-btn-icon disabled" type="button"><span>Save</span></button>
{{else}}
<GhTaskButton @task={{this.uploadImage}} @class="gh-btn gh-btn-black right gh-btn-icon" data-test-modal-accept-button={{true}} />
{{/if}}

View File

@ -1,7 +1,7 @@
<header class="modal-header" data-test-modal="webhook-form">
<h1 data-test-text="title">{{if this.webhook.isNew "New" "Edit"}} webhook</h1>
</header>
<button class="close" href title="Close" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
<button class="close" href title="Close" type="button" {{action "closeModal"}} {{action (optional this.noop) on="mouseDown"}}>
{{svg-jar "close"}}
</button>
@ -89,11 +89,9 @@
<div class="modal-footer">
<button
class="gh-btn"
{{action "closeModal"}}
class="gh-btn" data-test-button="cancel-webhook" type="button" {{action "closeModal"}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{action (optional this.noop) on="mouseDown"}}
data-test-button="cancel-webhook"
>
<span>Cancel</span>
</button>

View File

@ -13,7 +13,7 @@
</div>
<div class="modal-footer">
<button {{on "click" (fn @close false)}} class="gh-btn" data-test-stay-button><span>Stay</span></button>
<button {{on "click" (fn @close true)}} class="gh-btn gh-btn-red" data-test-leave-button><span>Leave</span></button>
<button class="gh-btn" data-test-stay-button type="button" {{on "click" (fn @close false)}}><span>Stay</span></button>
<button class="gh-btn gh-btn-red" data-test-leave-button type="button" {{on "click" (fn @close true)}}><span>Leave</span></button>
</div>
</div>

View File

@ -3,7 +3,7 @@
<h1>{{if @data.customView.isNew "New view" "Edit view"}}</h1>
</header>
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
<button class="close" href title="Close" {{on "click" @close}} {{on "mousedown" (optional this.noop)}}>
<button class="close" href title="Close" type="button" {{on "click" @close}} {{on "mousedown" (optional this.noop)}}>
{{svg-jar "close"}}
</button>
@ -50,24 +50,19 @@
<div class="modal-footer">
{{#if @data.customView.isNew}}
<button
class="gh-btn"
{{on "click" @close}}
class="gh-btn" data-test-button="cancel-custom-view-form" type="button" {{on "click" @close}}
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
{{on "mousedown" (optional this.noop)}}
data-test-button="cancel-custom-view-form"
>
<span>Cancel</span>
</button>
{{else}}
<button
class="gh-btn gh-btn-red gh-btn-icon"
{{on "click" (perform this.deleteTask)}}
class="gh-btn gh-btn-red gh-btn-icon" data-test-button="delete-custom-view" type="button" {{on "click" (perform this.deleteTask)}}
{{on "mousedown" (optional this.noop)}}
data-test-button="delete-custom-view"
>
<span>{{svg-jar "trash"}} Delete</span>
</button
>
</button>
{{/if}}
<GhTaskButton

View File

@ -9,7 +9,7 @@
</div>
<div class="modal-footer">
<button {{on "click" (fn @close false)}} class="gh-btn" data-test-button="cancel"><span>Stay</span></button>
<button class="gh-btn" data-test-button="cancel" type="button" {{on "click" (fn @close false)}}><span>Stay</span></button>
<GhTaskButton
@buttonText="Delete"
@successText="Deleted"

View File

@ -85,7 +85,7 @@
<div class="modal-footer">
<div class="flex items-center justify-between">
<button {{on "click" (fn @close false)}} class="gh-btn" data-test-button="cancel">
<button class="gh-btn" data-test-button="cancel" type="button" {{on "click" (fn @close false)}}>
<span>{{if (or this.installSuccess this.installFailure) "Close" "Cancel"}}</span>
</button>

View File

@ -14,8 +14,8 @@
</div>
<div class="modal-footer">
<button class="gh-btn" {{on "click" @close}}><span>Stay</span></button>
<button class="gh-btn gh-btn-red" {{on "click" (fn @close true)}}><span>Leave</span></button>
<button class="gh-btn" type="button" {{on "click" @close}}><span>Stay</span></button>
<button class="gh-btn gh-btn-red" type="button" {{on "click" (fn @close true)}}><span>Leave</span></button>
</div>
</div>

View File

@ -3,7 +3,7 @@
<header class="modal-header" data-test-state="confirm-publish">
<h1>Ready to go? Heres what happens next</h1>
</header>
<button class="close" title="Close" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body" {{did-insert this.countRecipientsTask.perform}}>
{{#if (eq @data.post.displayName 'page')}}
@ -53,7 +53,7 @@
<span>Close</span>
</button>
{{else}}
<button {{on "click" @close}} class="gh-btn" data-test-button="cancel-publish-and-email">
<button class="gh-btn" data-test-button="cancel-publish-and-email" type="button" {{on "click" @close}}>
<span>Cancel</span>
</button>
{{#if @data.isScheduled}}
@ -82,7 +82,7 @@
<header class="modal-header" data-test-state="failed-send">
<h1>Failed to send email</h1>
</header>
<button class="close" title="Close" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body">
<p>Your post has been published but the email failed to send. Please verify your email settings if the error persists.</p>
@ -106,7 +106,7 @@
</div>
<div class="modal-footer">
<button {{on "click" @close}} class="gh-btn" data-test-button="cancel-publish-and-email">
<button class="gh-btn" data-test-button="cancel-publish-and-email" type="button" {{on "click" @close}}>
<span>Close</span>
</button>
<GhTaskButton

View File

@ -3,12 +3,12 @@
<h2 class="f6 fw6">{{this.subject}}</h2>
<div>
<div class="gh-contentfilter gh-btn-group gh-pe-btn-group" style="display:flex;flex-grow:1;justify-content:center">
<button class="gh-btn {{if (eq this.tab "desktop") "gh-btn-group-selected"}}" {{on "click" (fn this.changeTab "desktop")}}><span>Desktop</span></button>
<button class="gh-btn {{if (eq this.tab "mobile") "gh-btn-group-selected"}}" {{on "click" (fn this.changeTab "mobile")}}><span>Mobile</span></button>
<button class="gh-btn {{if (eq this.tab "desktop") "gh-btn-group-selected"}}" type="button" {{on "click" (fn this.changeTab "desktop")}}><span>Desktop</span></button>
<button class="gh-btn {{if (eq this.tab "mobile") "gh-btn-group-selected"}}" type="button" {{on "click" (fn this.changeTab "mobile")}}><span>Mobile</span></button>
</div>
</div>
<div class="gh-pe-close">
<button class="close" href title="Close" {{on "click" @close}}>
<button class="close" href title="Close" type="button" {{on "click" @close}}>
{{svg-jar "close"}}
</button>
</div>

View File

@ -5,7 +5,7 @@
{{svg-jar "get-started"}}
<h1>Great work!</h1>
<p>Your site is ready to start publishing content.</p>
<p><LinkTo @route="dashboard" @classNames="gh-btn gh-btn-large gh-btn-green" {{on "click" @close}}><span>Start writing</span></LinkTo></p>
<p><LinkTo @route="dashboard" class="gh-btn gh-btn-large gh-btn-green" {{on "click" @close}}><span>Start writing</span></LinkTo></p>
</div>
<div class="flex flex-row f8 gh-get-started-extras">
@ -13,13 +13,13 @@
{{svg-jar "get-started-members"}}
<h4>Paid memberships</h4>
<p>Build sustainable recurring revenue using Stripe.</p>
<p><LinkTo @route="settings.membership" @classNames="gh-btn" {{on "click" @close}}><span>Connect Stripe</span></LinkTo></p>
<p><LinkTo @route="settings.membership" class="gh-btn" {{on "click" @close}}><span>Connect Stripe</span></LinkTo></p>
</div>
<div class="pa4 w-50 tc">
{{svg-jar "get-started-migrations"}}
<h4>Migrating data</h4>
<p>Import content from other tools into Ghost with ease.</p>
<p><a href="https://docs.ghost.org" class="gh-btn" target="_blank" rel="noopener noreferer" {{on "click" @close}}><span>Learn more</span></a></p>
<p><a href="https://docs.ghost.org" class="gh-btn" target="_blank" rel="noreferer noopener noreferrer" {{on "click" @close}}><span>Learn more</span></a></p>
</div>
</div>
</div>

View File

@ -2,7 +2,7 @@
<header class="modal-header">
<h1>Upgrade to enable custom integrations</h1>
</header>
<button class="close" title="Close" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body">
<p>
@ -11,7 +11,7 @@
</div>
<div class="modal-footer">
<button {{on "click" @close}} class="gh-btn" data-test-button="cancel-upgrade">
<button class="gh-btn" data-test-button="cancel-upgrade" type="button" {{on "click" @close}}>
<span>Cancel</span>
</button>

View File

@ -3,7 +3,7 @@
<header class="modal-header">
<h1>Upgrade to enable custom themes</h1>
</header>
<button class="close" title="Close" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<button class="close" title="Close" type="button" {{on "click" @close}}>{{svg-jar "close"}}<span class="hidden">Close</span></button>
<div class="modal-body">
<p>
@ -16,7 +16,7 @@
</div>
<div class="modal-footer">
<button {{on "click" @close}} class="gh-btn" data-test-button="cancel-upgrade">
<button class="gh-btn" data-test-button="cancel-upgrade" type="button" {{on "click" @close}}>
<span>Cancel</span>
</button>

View File

@ -3,7 +3,7 @@
<h1>New custom integration</h1>
</header>
{{!-- disable mouseDown so it doesn't trigger focus-out validations --}}
<button class="close" href title="Close" {{on "click" @close}}>
<button class="close" href title="Close" type="button" {{on "click" @close}}>
{{svg-jar "close"}}
</button>
@ -33,7 +33,7 @@
</div>
<div class="modal-footer">
<button class="gh-btn" {{on "click" @close}} data-test-button="cancel-new-integration">
<button class="gh-btn" data-test-button="cancel-new-integration" type="button" {{on "click" @close}}>
<span>Cancel</span>
</button>

View File

@ -2,7 +2,7 @@
<div class="flex flex-column h-100">
<header class="modal-header gh-post-preview-header gh-post-preview-header-border" data-test-modal="preview-email">
<div>
<button class="gh-editor-back-button" title="Close" {{on "click" @close}}>
<button class="gh-editor-back-button" title="Close" type="button" {{on "click" @close}}>
<span>{{svg-jar "arrow-left"}} Back</span>
</button>
</div>
@ -19,7 +19,7 @@
</div>
</div>
{{#if (not this.session.user.isContributor)}}
{{#unless this.session.user.isContributor}}
<GhPublishmenu
@post={{@data.post}}
@postStatus={{@data.post.status}}
@ -27,7 +27,7 @@
@setSaveType={{@data.setEditorSaveType}}
@memberCount={{@data.memberCount}}
@uiContext="preview" />
{{/if}}
{{/unless}}
</header>
{{#if this.saveFirstTask.isRunning}}

View File

@ -23,7 +23,7 @@
>
{{#if (and this.facebookHovered (not this.facebookImage))}}
{{!-- only shown on hover when there's no image or fallback --}}
<button class="gh-social-og-preview-img-add" {{on "click" (fn this.triggerFileDialog "facebook")}}>+ Add image</button>
<button class="gh-social-og-preview-img-add" type="button" {{on "click" (fn this.triggerFileDialog "facebook")}}>+ Add image</button>
{{/if}}
<GhUploader
@ -127,7 +127,7 @@
>
{{#if (and this.twitterHovered (not this.twitterImage))}}
{{!-- only shown on hover when there's no image or fallback --}}
<button class="gh-social-twitter-preview-img-add" {{on "click" (fn this.triggerFileDialog "twitter")}}>+ Add image</button>
<button class="gh-social-twitter-preview-img-add" type="button" {{on "click" (fn this.triggerFileDialog "twitter")}}>+ Add image</button>
{{/if}}
<GhUploader

View File

@ -176,7 +176,7 @@
<div class="gh-expandable-header">
<div>
<h4 class="gh-expandable-title">Mailgun configuration</h4>
<p class="gh-expandable-description">The Mailgun API is used for bulk email newsletter delivery. <a href="https://ghost.org/docs/faq/mailgun-newsletters/" target="_blank" rel="noopener">Why is this required?</a></p>
<p class="gh-expandable-description">The Mailgun API is used for bulk email newsletter delivery. <a href="https://ghost.org/docs/faq/mailgun-newsletters/" target="_blank" rel="noopener noreferrer">Why is this required?</a></p>
</div>
<button type="button" class="gh-btn" {{action (toggle "membersEmailOpen" this)}} data-test-toggle-membersemail>
<span>{{if this.membersEmailOpen "Close" "Expand"}}</span>
@ -214,7 +214,7 @@
</GhFormGroup>
</div>
<p>Find your Mailgun region and domain
<a href="https://app.mailgun.com/app/sending/domains" target="_blank" class="fw5">here</a>
<a href="https://app.mailgun.com/app/sending/domains" target="_blank" class="fw5" rel="noopener noreferrer">here</a>
</p>
</GhFormGroup>
<GhFormGroup>
@ -227,7 +227,7 @@
data-test-mailgun-api-key-input={{true}}
/>
<p>Find your Mailgun API keys
<a href="https://app.mailgun.com/app/account/security/api_keys" target="_blank" class="fw5">here</a>
<a href="https://app.mailgun.com/app/account/security/api_keys" target="_blank" class="fw5" rel="noopener noreferrer">here</a>
</p>
</GhFormGroup>
</div>

View File

@ -1,12 +1,12 @@
{{#if this.product.active}}
{{#if (not this.product.isNew)}}
{{#unless this.product.isNew}}
<button
type="button"
{{on "click" this.handleArchiveTier}}
>
<span>Archive</span>
</button>
{{/if}}
{{/unless}}
{{else}}
<button
type="button"

View File

@ -8,7 +8,7 @@
<GhNavMenu />
{{/if}}
<main class="gh-main {{this.ui.mainClass}}" role="main">
<main class="gh-main {{this.ui.mainClass}}">
{{outlet}}
{{#if this.showBilling}}
@ -21,9 +21,9 @@
<GhContentCover />
{{#if (not this.session.user.isContributor)}}
{{#unless this.session.user.isContributor}}
<GhMobileNavBar />
{{/if}}
{{/unless}}
</div>
{{#if this.settings.accentColor}}

View File

@ -31,7 +31,7 @@
@name="getting-started-dismiss"
@classNames="gh-dashboard-dismiss-dropdown dropdown-menu dropdown-triangle-top-right"
>
<button class="gh-btn" {{on "click" (toggle-feature "dashboardHideGettingStarted")}}><span>Dismiss</span></button>
<button class="gh-btn" type="button" {{on "click" (toggle-feature "dashboardHideGettingStarted")}}><span>Dismiss</span></button>
</GhDropdown>
</div>
</div>
@ -52,7 +52,7 @@
</span>
</GhDropdownButton>
<GhDropdown @name="launch-wizard-dismiss" @classNames="gh-dashboard-dismiss-dropdown dropdown-menu dropdown-triangle-top-right">
<button class="gh-btn" {{action "dismissLaunchBanner"}}><span>Dismiss</span></button>
<button class="gh-btn" type="button" {{action "dismissLaunchBanner"}}><span>Dismiss</span></button>
</GhDropdown>
</div>
</div>
@ -168,7 +168,7 @@
<section class="gh-dashboard-area mixed">
{{#if (not this.settings.editorIsLaunchComplete)}}
{{#unless this.settings.editorIsLaunchComplete}}
<div class="gh-dashboard-container start-contents">
<div class="gh-dashboard-box blogpost">
<h2>Start creating content</h2>
@ -190,7 +190,7 @@
</LinkTo>
</div>
</div>
{{/if}}
{{/unless}}
<div class="gh-dashboard-container col-2">
<div class="gh-dashboard-box">
@ -209,7 +209,7 @@
<p>Our product knowledgebase is packed full of guides, tutorials, answers to frequently asked questions, tips for dealing with common errors, and much more. </p>
</div>
<div class="footer">
<a class="gh-btn gh-btn-outline mt2" href="https://ghost.org/help/" target="_blank" rel="noopener"><span>Visit the help center &rarr;</span></a>
<a class="gh-btn gh-btn-outline mt2" href="https://ghost.org/help/" target="_blank" rel="noopener noreferrer"><span>Visit the help center &rarr;</span></a>
</div>
</div>
</div>
@ -226,7 +226,7 @@
</div>
</a>
<a class="gh-dashboard-container" href="https://careers.ghost.org?utm_source=dashboard" target="_blank" rel="noopener">
<a class="gh-dashboard-container" href="https://careers.ghost.org?utm_source=dashboard" target="_blank" rel="noopener noreferrer">
<div class="gh-dashboard-box grey gh-dashboard-careers">
<div class="summary">
<h2>We're hiring! Join the team that makes Ghost.</h2>

View File

@ -8,13 +8,13 @@
<section class="view-container gh-ds">
<h2 class="">Buttons</h2>
<ul class="nostyle">
<li><button class="gh-btn gh-btn-primary"><span>Primary button</span></button></li>
<li><button class="gh-btn"><span>Regular button</span></button></li>
<li><button class="gh-btn gh-btn-blue"><span>Blue button</span></button></li>
<li><button class="gh-btn gh-btn-green"><span>Green button</span></button></li>
<li><button class="gh-btn gh-btn-red"><span>Red button</span></button></li>
<li><button class="gh-btn gh-btn-outline"><span>Outline button</span></button></li>
<li><button class="gh-btn gh-btn-primary gh-btn-large"><span>Large button</span></button></li>
<li><button class="gh-btn gh-btn-primary" type="button"><span>Primary button</span></button></li>
<li><button class="gh-btn" type="button"><span>Regular button</span></button></li>
<li><button class="gh-btn gh-btn-blue" type="button"><span>Blue button</span></button></li>
<li><button class="gh-btn gh-btn-green" type="button"><span>Green button</span></button></li>
<li><button class="gh-btn gh-btn-red" type="button"><span>Red button</span></button></li>
<li><button class="gh-btn gh-btn-outline" type="button"><span>Outline button</span></button></li>
<li><button class="gh-btn gh-btn-primary gh-btn-large" type="button"><span>Large button</span></button></li>
</ul>
<h2 class="">Lists</h2>

View File

@ -9,7 +9,7 @@
<div class="flex items-center pe-auto">
{{#if this.ui.isFullScreen}}
<div class="ml3 mobile flex items-center">
<LinkTo @route={{pluralize this.post.displayName }} @classNames="gh-editor-back-button" data-test-link={{pluralize this.post.displayName}}>
<LinkTo @route={{pluralize this.post.displayName }} class="gh-editor-back-button" data-test-link={{pluralize this.post.displayName}}>
<span>
{{svg-jar "arrow-left"}}
{{capitalize (pluralize this.post.displayName)}}
@ -99,7 +99,7 @@
<div class="gh-editor-wordcount">
{{gh-pluralize this.wordCount.wordCount "word"}}
</div>
<a href="https://ghost.org/help/using-the-editor/" class="flex" target="_blank">{{svg-jar "help"}}</a>
<a href="https://ghost.org/help/using-the-editor/" class="flex" target="_blank" rel="noopener noreferrer">{{svg-jar "help"}}</a>
</div>
</GhEditor>

View File

@ -14,8 +14,7 @@
{{#if this.session.user.isAdmin}}
{{#unless this.member.isNew}}
<button
class="gh-btn gh-btn-white gh-btn-icon mr2"
{{on "click" this.toggleImpersonateMemberModal}}>
class="gh-btn gh-btn-white gh-btn-icon mr2" type="button" {{on "click" this.toggleImpersonateMemberModal}}>
<span>Impersonate</span>
</button>
{{/unless}}

View File

@ -47,7 +47,7 @@
</li>
<li class="{{if this.members.length "" "disabled"}}">
{{#if this.members.length}}
<button class="mr2" {{on "click" this.exportData}}>
<button class="mr2" type="button" {{on "click" this.exportData}}>
{{#if this.showingAll}}
<span>Export all members</span>
{{else}}
@ -55,7 +55,7 @@
{{/if}}
</button>
{{else}}
<button class="mr2" disabled="true">
<button class="mr2" disabled="true" type="button">
<span>Export selected members (0)</span>
</button>
{{/if}}
@ -63,23 +63,23 @@
{{#if (and this.members.length this.isFiltered)}}
<li class="divider"></li>
<li>
<button class="mr2" {{on "click" this.toggleAddMembersLabelModal}} data-test-button="add-label-selected">
<button class="mr2" data-test-button="add-label-selected" type="button" {{on "click" this.toggleAddMembersLabelModal}}>
<span>Add label for selected members ({{this.members.length}})</span>
</button>
</li>
<li>
<button class="mr2" {{on "click" this.toggleRemoveMembersLabelModal}} data-test-button="remove-label-selected">
<button class="mr2" data-test-button="remove-label-selected" type="button" {{on "click" this.toggleRemoveMembersLabelModal}}>
<span>Remove label from selected members ({{this.members.length}})</span>
</button>
</li>
<li>
<button class="mr2" {{on "click" this.toggleUnsubscribeMembersModal}} data-test-button="remove-label-selected">
<button class="mr2" data-test-button="remove-label-selected" type="button" {{on "click" this.toggleUnsubscribeMembersModal}}>
<span>Unsubscribe selected members ({{this.members.length}})</span>
</button>
</li>
<li class="divider"></li>
<li>
<button class="mr2" {{on "click" this.toggleDeleteMembersModal}} data-test-button="delete-selected">
<button class="mr2" data-test-button="delete-selected" type="button" {{on "click" this.toggleDeleteMembersModal}}>
<span class="red">Delete selected members ({{this.members.length}})</span>
</button>
</li>

View File

@ -246,7 +246,7 @@
<div class="gh-main-section">
<div class="gh-main-section-block gh-offer-archive-container">
{{#if (eq this.offer.status "active")}}
{{#if (not this.offer.isNew)}}
{{#unless this.offer.isNew}}
<button
type="button"
class="gh-btn gh-btn-black gh-btn-icon"
@ -257,7 +257,7 @@
<p>
<span>Archiving an offer ensures it is no longer available for use. Dont worry, existing members remain unchanged and the offer can be reactivated anytime.</span>
</p>
{{/if}}
{{/unless}}
{{else}}
<button
type="button"

View File

@ -121,7 +121,7 @@
<h2 class="gh-main-section-header small bn">Get the most out of offers</h2>
<div class="gh-main-section-block">
<div class="gh-main-section-content grey">
<a href="https://ghost.org/help/offers" target="_blank" class="gh-offers-help-card">
<a href="https://ghost.org/help/offers" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
<div class="gh-offers-help-content">
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-1.jpg);"></div>
<div class="text">
@ -132,7 +132,7 @@
<div class="gh-btn"><span>Read more</span></div>
</a>
<a href="https://ghost.org/resources/proven-discount-strategies" target="_blank" class="gh-offers-help-card">
<a href="https://ghost.org/resources/proven-discount-strategies" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
<div class="gh-offers-help-content">
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-3.jpg);"></div>
<div class="text">
@ -143,7 +143,7 @@
<div class="gh-btn"><span>Read more</span></div>
</a>
<a href="https://ghost.org/resources/conversion-vs-retention-offers" target="_blank" class="gh-offers-help-card">
<a href="https://ghost.org/resources/conversion-vs-retention-offers" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
<div class="gh-offers-help-content">
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-2.jpg)"></div>
<div class="text">

View File

@ -97,7 +97,7 @@
data-test-input="lang"
/>
<GhErrorMessage @errors={{this.settings.errors}} @property="lang" />
<p>Default: English (<strong>en</strong>); you can add translation files to your theme for <a href="https://ghost.org/docs/themes/helpers/translate/" target="_blank" rel="noopener">any language</a></p>
<p>Default: English (<strong>en</strong>); you can add translation files to your theme for <a href="https://ghost.org/docs/themes/helpers/translate/" target="_blank" rel="noopener noreferrer">any language</a></p>
</GhFormGroup>
</div>
{{/liquid-if}}
@ -422,7 +422,7 @@
<div class="gh-setting-content-extended pt4 pb4">
<span class="avoid-break-out">
A private RSS feed is available at
<a href="{{this.privateRSSUrl}}" target="_blank" rel="noopener">{{this.privateRSSUrl}}</a>
<a href="{{this.privateRSSUrl}}" target="_blank" rel="noopener noreferrer">{{this.privateRSSUrl}}</a>
</span>
<GhFormGroup @class="no-margin pt2" @errors={{this.settings.errors}} @hasValidated={{this.settings.hasValidated}} @property="password">
<GhTextInput

View File

@ -199,7 +199,7 @@
<LinkTo @route="settings.integration.webhooks.edit" @models={{array this.integration webhook}} data-test-link="edit-webhook">
{{svg-jar "pen" class="w6 h6 fill-midgrey pa1 mr1"}}
</LinkTo>
<button {{action "confirmWebhookDeletion" webhook}} data-test-button="delete-webhook">
<button data-test-button="delete-webhook" type="button" {{action "confirmWebhookDeletion" webhook}}>
{{svg-jar "trash" class="w6 fill-red pa1"}}
</button>
</div>
@ -212,7 +212,7 @@
<p class="ma0 pa0 tc midgrey lh-title mt2">
No webhooks configured
</p>
<LinkTo @route="settings.integration.webhooks.new" @model={{this.integration}} @classNames="flex items-center" data-test-link="add-webhook">
<LinkTo @route="settings.integration.webhooks.new" @model={{this.integration}} class="flex items-center" data-test-link="add-webhook">
<div class="flex items-center pa2 pt1">
{{svg-jar "add" class="w3 h3 fill-green-d1"}}
<span class="ml1 green">Add webhook</span>
@ -227,7 +227,7 @@
<tfoot>
<tr class="gh-list-row new-webhook-cell">
<td colspan="5" class="gh-list-data">
<LinkTo @route="settings.integration.webhooks.new" @model={{this.integration}} @classNames="flex items-center" data-test-link="add-webhook">
<LinkTo @route="settings.integration.webhooks.new" @model={{this.integration}} class="flex items-center" data-test-link="add-webhook">
<div class="pt1 pb1 f7">
{{svg-jar "add" class="w3 h3 fill-green-d1"}}
<span class="ml1 green">Add webhook</span>
@ -243,7 +243,7 @@
<section class="gh-main-section">
<div class="gh-main-section-block">
<button class="gh-btn gh-btn-red gh-btn-icon" {{action "confirmIntegrationDeletion"}}>
<button class="gh-btn gh-btn-red gh-btn-icon" type="button" {{action "confirmIntegrationDeletion"}}>
<span> Delete integration </span>
</button>
</div>

View File

@ -40,7 +40,7 @@
<div class="gh-setting-first {{unless this.settings.amp "gh-setting-last"}}">
<div class="gh-setting-content">
<div class="gh-setting-title">Enable AMP</div>
<div class="gh-setting-desc mb0">Enable <a href="https://ampproject.org" target="_blank">Google Accelerated Mobile Pages</a> for your posts</div>
<div class="gh-setting-desc mb0">Enable <a href="https://ampproject.org" target="_blank" rel="noopener noreferrer">Google Accelerated Mobile Pages</a> for your posts</div>
</div>
<div class="gh-setting-action">
<div class="for-checkbox">

View File

@ -40,7 +40,7 @@
<div class="gh-setting-first {{unless this.settings.firstpromoter "gh-setting-last"}}">
<div class="gh-setting-content">
<div class="gh-setting-title">Enable FirstPromoter</div>
<div class="gh-setting-desc mb0">Enable <a href="https://firstpromoter.com/?fpr=ghost&fp_sid=admin" target="_blank">FirstPromoter</a> for tracking referrals</div>
<div class="gh-setting-desc mb0">Enable <a href="https://firstpromoter.com/?fpr=ghost&fp_sid=admin" target="_blank" rel="noopener noreferrer">FirstPromoter</a> for tracking referrals</div>
</div>
<div class="gh-setting-action">
<div class="for-checkbox">

View File

@ -57,7 +57,7 @@
data-test-slack-url-input={{true}}
/>
{{#unless this.slackSettings.errors.url}}
<p>Set up a new incoming webhook <a href="https://my.slack.com/apps/new/A0F7XDUAZ-incoming-webhooks" target="_blank">here</a>, and grab the URL.</p>
<p>Set up a new incoming webhook <a href="https://my.slack.com/apps/new/A0F7XDUAZ-incoming-webhooks" target="_blank" rel="noopener noreferrer">here</a>, and grab the URL.</p>
{{else}}
<GhErrorMessage @errors={{this.slackSettings.errors}} @property="url" data-test-error="slack-url" />
{{/unless}}

View File

@ -39,7 +39,7 @@
<div class="gh-setting-first gh-setting-last" id="unsplash-toggle">
<div class="gh-setting-content">
<div class="gh-setting-title">Enable Unsplash</div>
<div class="gh-setting-desc mb0">Enable <a href="https://unsplash.com" target="_blank">Unsplash</a> image integration for your posts</div>
<div class="gh-setting-desc mb0">Enable <a href="https://unsplash.com" target="_blank" rel="noopener noreferrer">Unsplash</a> image integration for your posts</div>
</div>
<div class="gh-setting-action">
<div class="form-group right gh-setting-unsplash-checkbox">

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