Updated breadcrumb and title style across admin

Refs https://www.notion.so/ghost/Switch-breadcrumb-style-513a624c0e0d490ca39a2fdb97a6971a

- Separating out the breadcrumbs and the title makes it easier to navigate back on multiple levels for nested pages.
- Avoids very long titles, as it doesn't include breadcrumbs anymore
This commit is contained in:
Sanne de Vries 2022-10-04 12:35:29 +07:00
parent 09fbe19a31
commit 2c498ab193
47 changed files with 488 additions and 331 deletions

View File

@ -1,7 +1,17 @@
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route={{this.router.currentRouteName}} @query={{@query}}>{{or @title "No @title provided"}}</LinkTo>
<div class="flex flex-column">
{{#if this.customViews.activeView}}
<span>{{svg-jar "arrow-right"}}</span>
<span class="truncate">{{this.customViews.activeView.name}}</span>
<div class="gh-canvas-breadcrumb">
<LinkTo @route={{this.router.currentRouteName}} @query={{@query}}>
{{or @title "No @title provided"}}
</LinkTo>
{{svg-jar "arrow-right-small"}} {{this.customViews.activeView.name}}
</div>
<h2 class="gh-canvas-title gh-post-title" data-test-screen-title>
{{this.customViews.activeView.name}}
</h2>
{{else}}
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route={{this.router.currentRouteName}} @query={{@query}}>{{or @title "No @title provided"}}</LinkTo>
</h2>
{{/if}}
</h2>
</div>

View File

@ -1,5 +1,5 @@
<section class="gh-member-details" ...attributes>
<div class="flex flex-column mt4">
<div class="flex flex-column">
<div class="gh-member-details-identity">
{{#if (or @member.name @member.email)}}
<GhMemberAvatar

View File

@ -2,7 +2,7 @@
<section class="gh-main-section columns-3">
<GhMemberDetails @member={{@member}} />
<div class="gh-main-section-block span-2 mt6">
<div class="gh-main-section-block span-2">
<div class="gh-main-section-content grey">
<div>
<div class="gh-cp-member-email-name">

View File

@ -1,6 +1,7 @@
<div class="flex flex-column h-100" {{css-transition "gh-nav-contextual"}} data-test-nav-menu="design" ...attributes>
<header class="gh-nav-header">
<LinkTo @route="settings" class="gh-nav-menu-back-button" data-test-link="back-to-settings">{{svg-jar "arrow-left-small"}} Settings</LinkTo>
<LinkTo @route="settings" class="gh-nav-menu-back-button" data-test-link="back-to-settings">Settings</LinkTo>
{{svg-jar "arrow-right-small"}} Design
</header>
<section class="gh-nav-body gh-nav-design">
<div class="gh-nav-top" {{on "click" this.transitionBackToIndex}}>

View File

@ -1,42 +1,44 @@
<section class="gh-canvas" {{did-insert this.loadData}}>
<GhCanvasHeader class="gh-canvas-header stacked gh-post-analytics-header">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="posts">
Posts
</LinkTo>
{{svg-jar "arrow-right-small"}}Analytics
</div>
<h2 class="gh-canvas-title gh-post-title">
{{this.post.title}}
</h2>
<div class="gh-post-analytics-meta">
<div class="gh-post-analytics-meta-text">
{{#if
(or this.post.isSent
(and this.post.isPublished this.post.email)
this.post.willEmail
)
}}
{{#if this.post.emailOnly}}
Sent
{{else}}
Published and sent
{{/if}}
{{else}}
Published on your site
{{/if}}
{{#let (moment-site-tz this.post.publishedAtUTC) as |publishedAt|}}
on
{{moment-format publishedAt "D MMM YYYY"}}
at
{{moment-format publishedAt "HH:mm"}}
{{/let}}
<GhCanvasHeader class="gh-canvas-header gh-post-analytics-header">
<div class="flex flex-column flex-grow-1">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="posts">
Posts
</LinkTo>
{{svg-jar "arrow-right-small"}}Analytics
</div>
<h2 class="gh-canvas-title gh-post-title">
{{this.post.title}}
</h2>
<div class="gh-post-analytics-meta">
<div class="gh-post-analytics-meta-text">
{{#if
(or this.post.isSent
(and this.post.isPublished this.post.email)
this.post.willEmail
)
}}
{{#if this.post.emailOnly}}
Sent
{{else}}
Published and sent
{{/if}}
{{else}}
Published on your site
{{/if}}
{{#let (moment-site-tz this.post.publishedAtUTC) as |publishedAt|}}
on
{{moment-format publishedAt "D MMM YYYY"}}
at
{{moment-format publishedAt "HH:mm"}}
{{/let}}
</div>
<LinkTo @route="editor.edit" @models={{array this.post.displayName this.post.id}} class="gh-post-list-cta edit" title="">
{{svg-jar "pen" title=""}}<span>Edit post</span>
</LinkTo>
</div>
<LinkTo @route="editor.edit" @models={{array this.post.displayName this.post.id}} class="gh-post-list-cta edit" title="">
{{svg-jar "pen" title=""}}<span>Edit post</span>
</LinkTo>
</div>
</GhCanvasHeader>

View File

@ -326,11 +326,6 @@ input:focus,
border-bottom: 1px solid var(--hairline-color-1);
}
.gh-main-section.no-heading,
.gh-main-section.bt {
border-top: 1px solid var(--hairline-color-1);
}
.gh-btn-tabs .gh-btn {
background: transparent !important;
}

View File

@ -328,19 +328,18 @@
justify-content: flex-start;
align-items: flex-start;
align-content: flex-start;
margin-top: 24px;
}
.app-icon {
position: relative;
flex: 1 0 56px;
width: 56px;
min-width: 56px;
height: 56px;
flex: 1 0 60px;
width: 60px;
min-width: 60px;
height: 60px;
background-position: center center;
background-size: cover;
border-radius: 10%;
margin-right: 32px;
margin-right: 24px;
}
.app-icon img {
@ -348,16 +347,16 @@
}
.app-cell h3 {
margin: 4px 0 0;
margin: -2px 0 0;
color: var(--black);
font-size: 2.1rem;
font-weight: 600;
font-size: 3.2rem;
font-weight: 700;
}
.app-cell p {
margin: 0;
margin-bottom: 5px;
color: var(--midgrey);
color: var(--midgrey-l2);
font-size: 1.4rem;
line-height: 1.4em;
}
@ -420,7 +419,7 @@
/* Zapier templates */
/* ---------------------------------------------------------- */
.gh-zapier-data-container {
margin: 1.6em 0;
margin: 1.8em 0;
}
.gh-zapier-data-container .gh-zapier-data {
@ -437,9 +436,9 @@
.gh-zapier-data .data-label {
width: 128px;
height: 36px;
padding: 8px 8px 8px 0;
color: var(--midgrey);
height: 28px;
padding: 4px 4px 4px 0;
color: var(--midgrey-l2);
font-size: 1.4rem;
line-height: 1.45;
font-weight: 400;
@ -448,8 +447,8 @@
.gh-zapier-data .data {
width: 100%;
height: 36px;
padding: 8px;
height: 28px;
padding: 4px;
color: var(--darkgrey);
font-size: 1.4rem;
line-height: 1.45;

View File

@ -743,10 +743,8 @@ a.gh-post-list-signups.active:hover > span, a.gh-post-list-conversions.active:ho
animation: .25s fadeIn .5s normal forwards;
}
.gh-post-analytics-header {
position: relative;
margin: 0 0 2.4rem;
padding: 0 0 1.6rem;
.gh-post-analytics-header .gh-canvas-header-content {
padding-bottom: 1.6rem;
border-bottom: 1px solid var(--whitegrey);
}
@ -767,7 +765,7 @@ a.gh-post-list-signups.active:hover > span, a.gh-post-list-conversions.active:ho
}
.gh-post-analytics-meta-text {
color: var(--midlightgrey-d2);
color: var(--midgrey-l2);
font-size: 1.35rem;
display: flex;
align-items: center;

View File

@ -1097,9 +1097,9 @@
}
.gh-canvas-header {
min-height: calc(var(--main-layout-vpanel-height) - 1px);;
margin: 0 calc(-1 * var(--main-layout-content-sidepadding));
padding: 0 var(--main-layout-content-sidepadding);
position: sticky;
padding: 32px var(--main-layout-content-sidepadding);
top: 0;
background: var(--main-bg-color);
z-index: 700;
@ -1107,6 +1107,10 @@
border-color: transparent;
}
.gh-canvas-header.sticky {
position: sticky;
}
.gh-canvas.circle-bg .gh-canvas-header {
position: relative;
background: none;
@ -1117,36 +1121,36 @@
background: var(--main-color-content-greybg);
}
.gh-canvas-header.stacked {
padding-top: 36px;
}
.gh-canvas-header.stacked .gh-canvas-breadcrumb {
.gh-canvas-header .gh-canvas-breadcrumb {
display: flex;
align-items: center;
height: 24px;
color: var(--darkgrey-l1);
height: 34px;
color: var(--midgrey-l2);
font-size: 1.35rem;
font-weight: 500;
line-height: 24px;
font-weight: 400;
line-height: 34px;
letter-spacing: .2px;
background: none;
}
.gh-canvas-header.stacked .gh-canvas-breadcrumb a {
color: var(--darkgrey-l1);
.gh-canvas-header.sticky .gh-canvas-breadcrumb {
position: sticky
}
.gh-canvas-header .gh-canvas-breadcrumb a {
color: var(--darkgrey);
line-height: 24px;
}
.gh-canvas-header.stacked .gh-canvas-breadcrumb svg {
.gh-canvas-header .gh-canvas-breadcrumb svg {
display: block;
width: 9px;
height: 9px;
margin: 1px 6px 0;
}
.gh-canvas-header.stacked .gh-canvas-breadcrumb svg path {
stroke: var(--darkgrey-l1);
.gh-canvas-header .gh-canvas-breadcrumb svg path {
stroke: var(--midgrey-l2);
}
.gh-main-grey-gradient .gh-canvas-header {
@ -1155,18 +1159,11 @@
}
.gh-canvas-header-content {
height: calc(var(--main-layout-vpanel-height) - 1px);
position: relative;
flex-shrink: 0;
display: flex;
justify-content: space-between;
align-items: center;
}
.gh-canvas-header.stacked .gh-canvas-header-content {
flex-direction: column;
align-items: flex-start;
height: unset;
justify-content: space-between;
}
.gh-main-width {
@ -1213,11 +1210,6 @@
grid-column-gap: 0;
}
.gh-main-section.no-heading,
.gh-main-section.bt {
border-top: 1px solid var(--whitegrey);
}
.gh-main-section.bb { border-bottom: 1px solid var(--whitegrey); }
.gh-main-section-header {
@ -1488,7 +1480,7 @@
padding: 0;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 3.1rem;
font-size: 3.2rem;
line-height: 1.3em;
font-weight: 700;
letter-spacing: -0.021em;
@ -1513,6 +1505,10 @@
margin: 0 10px;
}
.gh-canvas-breadcrumb + .gh-canvas-title {
padding: 12px 0 0;
}
.gh-btn-edit-view {
opacity: 0;
transition: all 0.3s ease-in-out;

View File

@ -681,7 +681,7 @@ label[for="member-description"] + p {
.gh-member-details {
position: sticky;
top: 96px;
top: 158px;
left: 0;
height: max-content;
}

View File

@ -1798,42 +1798,35 @@ p.theme-validation-details {
}
.gh-nav-header {
height: 100px;
padding: 32px 32px 16px;
display: flex;
align-items: center;
padding: 32px 32px 48px;
color: var(--midgrey-l2);
font-size: 1.35rem;
font-weight: 400;
line-height: 36px;
letter-spacing: .2px;
}
.gh-nav-menu-back-button {
display: flex;
align-items: center;
margin-bottom: 40px;
padding: 6px 0;
color: var(--darkgrey-l1);
font-size: 1.35rem;
font-weight: 500;
letter-spacing: .2px;
height: 36px;
color: var(--darkgrey);
background: none;
}
.gh-nav-menu-back-button svg {
.gh-nav-header svg {
display: block;
width: 9px;
height: 9px;
margin: 1px 8px 0 0;
transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
margin: 1px 6px 0;
}
.gh-nav-menu-back-button svg path {
.gh-nav-header svg path {
stroke: var(--darkgrey-l1);
}
.gh-nav-menu-back-button:hover svg {
transform: translateX(-3px)
}
.gh-nav-menu-back-button:hover svg path {
stroke: var(--black);
}
.gh-nav-menu-back-button:hover {
color: var(--black);
}

View File

@ -1,14 +1,20 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="members" data-test-link="members-back">Members</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{#if this.member.isNew}}
New<span class="gh-canvas-title-hide-for-mobile">&nbsp;member</span>
{{else}}
{{or this.member.name this.member.email}}
{{/if}}
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="members" data-test-link="members-back">
Members
</LinkTo>
{{svg-jar "arrow-right-small"}} Member
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{#if this.member.isNew}}
New<span class="gh-canvas-title-hide-for-mobile">&nbsp;member</span>
{{else}}
{{or this.member.name this.member.email}}
{{/if}}
</h2>
</div>
<section class="view-actions">
{{#if this.session.user.isAdmin}}

View File

@ -1,17 +1,24 @@
<section class="gh-canvas gh-offer circle-bg" {{did-insert this.setup}}>
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="offers" data-test-link="offers-back">Offers</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{#if this.offer.isNew}}
New Offer
{{else}}
{{this.offer.name}}
{{#if (eq this.offer.status "archived")}}
<span class="gh-badge gh-badge-title">Archived</span>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="offers" data-test-link="offers-back">
Offers
</LinkTo>
{{svg-jar "arrow-right-small"}} Offer
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{#if this.offer.isNew}}
New Offer
{{else}}
{{this.offer.name}}
{{#if (eq this.offer.status "archived")}}
<span class="gh-badge gh-badge-title">Archived</span>
{{/if}}
{{/if}}
{{/if}}
</h2>
</h2>
</div>
<section class="view-actions">
<GhTaskButton @class="gh-btn gh-btn-primary gh-btn-icon" @type="button" @task={{this.saveTask}} @data-test-button="save" />
</section>

View File

@ -1,5 +1,5 @@
<section class="gh-canvas gh-offers">
<GhCanvasHeader class="gh-canvas-header">
<GhCanvasHeader class="gh-canvas-header sticky">
<h2 class="gh-canvas-title" data-test-screen-title>Offers</h2>
<section class="gh-offers-actions view-actions">
<div>

View File

@ -1,5 +1,5 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header break tablet post-header">
<GhCanvasHeader class="gh-canvas-header sticky break tablet post-header">
<GhCustomViewTitle @title="Pages" @query={{reset-query-params "posts"}} />
<section class="view-actions">

View File

@ -1,5 +1,5 @@
<section class="gh-canvas gh-canvas-sticky">
<GhCanvasHeader class="gh-canvas-header break tablet post-header">
<GhCanvasHeader class="gh-canvas-header sticky break tablet post-header">
<GhCustomViewTitle @title="Pages" @query={{reset-query-params "posts"}} />
<section class="view-actions">

View File

@ -1,5 +1,5 @@
<section class="gh-canvas gh-canvas-sticky">
<GhCanvasHeader class="gh-canvas-header break tablet post-header">
<GhCanvasHeader class="gh-canvas-header sticky break tablet post-header">
<GhCustomViewTitle @title={{if this.session.user.isContributor (concat this.config.blogTitle " posts") "Posts"}} @query={{reset-query-params "posts"}} />
<section class="view-actions">

View File

@ -1,5 +1,5 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header break tablet post-header">
<GhCanvasHeader class="gh-canvas-header sticky break tablet post-header">
<GhCustomViewTitle @title={{if this.session.user.isContributor (concat this.config.blogTitle " posts") "Posts"}} @query={{reset-query-params "posts"}} />
<section class="view-actions">
<PostsList::ContentFilter

View File

@ -1,5 +1,5 @@
<section class="gh-canvas gh-canvas-sticky">
<GhCanvasHeader class="gh-canvas-header break tablet post-header">
<GhCanvasHeader class="gh-canvas-header sticky break tablet post-header">
<GhCustomViewTitle @title={{if this.session.user.isContributor (concat this.config.blogTitle " posts") "Posts"}} @query={{reset-query-params "posts"}} />
<section class="view-actions">

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Code injection
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Code injection
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Code injection
</h2>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Code injection
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Code injection
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Code injection
</h2>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
General
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} General
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
General
</h2>
</div>
<section class="view-actions">
<GhTaskButton @buttonText="Save settings" @task={{this.save}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-button="save" />
</section>

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
General
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} General
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
General
</h2>
</div>
<section class="view-actions">
<GhTaskButton @buttonText="Save" @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-button="save" />
</section>

View File

@ -1,24 +1,34 @@
<section class="gh-canvas gh-members-activity">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.history" @query={{reset-query-params "settings.history"}} data-test-link="history-back">History</LinkTo>
{{#if this.userRecord}}
<span>{{svg-jar "arrow-right"}}</span>
<span class="truncate">{{or this.userRecord.name this.userRecord.email}}</span>
{{/if}}
</h2>
<div class="view-actions">
<Settings::History::EventFilter
@excludedEvents={{this.excludedEvents}}
@excludedResources={{this.excludedResources}}
@onChange={{this.changeExcludedItems}} />
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{#if this.userRecord}}
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.history" @query={{reset-query-params "settings.history"}} data-test-link="history-back">
History
</LinkTo>
{{svg-jar "arrow-right-small"}} {{or this.userRecord.name this.userRecord.email}}
{{else}}
{{svg-jar "arrow-right-small"}} History
{{/if}}
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
History
</h2>
</div>
<div class="view-actions">
<Settings::History::EventFilter
@excludedEvents={{this.excludedEvents}}
@excludedResources={{this.excludedResources}}
@onChange={{this.changeExcludedItems}} />
<Settings::History::Search
@selected={{this.userRecord}}
@onChange={{this.changeUser}} />
</div>
<Settings::History::Search
@selected={{this.userRecord}}
@onChange={{this.changeUser}} />
</div>
</GhCanvasHeader>
<div class="view-container">
{{#let (history-event-fetcher filter=(history-event-filter excludedEvents=this.fullExcludedEvents excludedResources=this.fullExcludedResources user=this.user) pageSize=50) as |eventsFetcher|}}

View File

@ -1,13 +1,21 @@
<section class="gh-canvas">
<form {{on "submit" (perform this.saveTask)}}>
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{this.integration.name}}
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Custom integration
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{this.integration.name}}
</h2>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-button="save" />
</section>

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Integrations
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Integrations
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Integrations
</h2>
</div>
</GhCanvasHeader>
<div class="gh-main-section" {{scroll-top}}>

View File

@ -1,12 +1,17 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
AMP
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} AMP
</div>
</div>
<section class="view-actions"></section>
</GhCanvasHeader>

View File

@ -1,19 +1,24 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
AMP
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} AMP
</div>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>
</GhCanvasHeader>
<section class="view-container">
<section class="gh-main-section bt app-grid">
<section class="gh-main-section app-grid">
<div class="gh-main-section-block app-detail-heading app-grid">
<div class="app-cell">
<img class="app-icon" src="assets/img/amp.svg" />

View File

@ -1,19 +1,24 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
FirstPromoter
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} FirstPromoter
</div>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>
</GhCanvasHeader>
<section class="view-container">
<section class="gh-main-section bt app-grid">
<section class="gh-main-section app-grid">
<div class="gh-main-section-block app-detail-heading app-grid">
<div class="app-cell">
<img class="app-icon" src="assets/img/firstpromoter.png" />

View File

@ -1,12 +1,17 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Slack
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Slack
</div>
</div>
<section class="view-actions"></section>
</GhCanvasHeader>

View File

@ -1,19 +1,24 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Slack
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Slack
</div>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>
</GhCanvasHeader>
<section class="view-container">
<section class="gh-main-section bt app-grid">
<section class="gh-main-section app-grid">
<div class="gh-main-section-block app-detail-heading app-grid">
<div class="app-cell">
<img class="app-icon" src="assets/img/slackicon.png" />

View File

@ -1,12 +1,17 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Unsplash
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Unsplash
</div>
</div>
<section class="view-actions"></section>
</GhCanvasHeader>

View File

@ -1,19 +1,24 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Unsplash
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Unsplash
</div>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>
</GhCanvasHeader>
<section class="view-container">
<section class="gh-main-section bt app-grid">
<section class="gh-main-section app-grid">
<div class="gh-main-section-block app-detail-heading app-grid">
<div class="app-cell">
<img class="app-icon pa2 id-unsplash" src="assets/img/unsplash.svg" alt="Unsplash" />

View File

@ -1,12 +1,17 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<LinkTo @route="settings.integrations" data-test-link="integrations-back">Integrations</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Zapier
</h2>
<GhCanvasHeader class="gh-canvas-header sticky">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
<LinkTo @route="settings.integrations" data-test-link="integrations-back">
Integrations
</LinkTo>
{{svg-jar "arrow-right-small"}} Zapier
</div>
</div>
</GhCanvasHeader>
<section class="view-container">

View File

@ -1,11 +1,17 @@
<section class="gh-canvas">
<header class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Labs
</h2>
</header>
<GhCanvasHeader class="gh-canvas-header">
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Labs
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Labs
</h2>
</div>
</GhCanvasHeader>
<div class="gh-content">
<GhLoadingSpinner />

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Labs
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Labs
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Labs
</h2>
</div>
</GhCanvasHeader>
<section class="view-container settings-debug">

View File

@ -1,10 +1,16 @@
<section class="gh-canvas circle-bg" {{did-insert this.setup}}>
<GhCanvasHeader class="gh-canvas-header gh-setting-members-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Membership
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Membership
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Membership
</h2>
</div>
<section class="view-actions">
<GhTaskButton
@buttonText="Save"

View File

@ -1,10 +1,16 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Navigation
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Navigation
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Navigation
</h2>
</div>
<section class="view-actions">
<GhTaskButton @task={{this.saveTask}} @class="gh-btn gh-btn-primary gh-btn-icon" data-test-save-button={{true}} />
</section>

View File

@ -1,10 +1,16 @@
<section class="gh-canvas gh-setting-email">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
Email newsletter
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Email newsletter
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
Email newsletter
</h2>
</div>
<section class="view-actions">
<GhTaskButton
@buttonText="Save"

View File

@ -1,12 +1,19 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<div class="flex flex-column">
{{#unless this.session.user.isEditor}}
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
<div class="gh-canvas-breadcrumb">
<LinkTo @route="settings" data-test-breadcrumb>
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}} Staff
</div>
{{/unless}}
Staff
</h2>
<h2 class="gh-canvas-title" data-test-screen-title>
Staff
</h2>
</div>
{{!-- Do not show Invite user button to authors --}}
{{#unless this.currentUser.isAuthorOrContributor}}
<section class="view-actions">

View File

@ -1,18 +1,29 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<GhCanvasHeader class="gh-canvas-header sticky">
{{!-- Remove breadcrumbs for Authors and Contributors --}}
{{#if this.session.user.isAuthorOrContributor}}
{{#if this.currentUser.isAuthorOrContributor}}
<h2 class="gh-canvas-title" data-test-screen-title>Your profile</h2>
{{else}}
<h2 class="gh-canvas-title" data-test-screen-title>
{{#unless this.session.user.isEditor}}
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{/unless}}
<LinkTo @route="settings.staff" data-test-staff-link={{true}}>Staff</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{this.user.name}}
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
{{#unless this.session.user.isEditor}}
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
{{/unless}}
<LinkTo @route="settings.staff" data-test-staff-link={{true}}>
Staff
</LinkTo>
{{svg-jar "arrow-right-small"}} Profile
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{this.user.name}}
{{#if this.user.isSuspended}}
<span class="gh-badge suspended" data-test-suspended-badge>Suspended</span>
{{/if}}
</h2>
</div>
{{/if}}
<section class="view-actions">

View File

@ -4,19 +4,26 @@
{{#if this.currentUser.isAuthorOrContributor}}
<h2 class="gh-canvas-title" data-test-screen-title>Your profile</h2>
{{else}}
<h2 class="gh-canvas-title" data-test-screen-title>
{{#unless this.session.user.isEditor}}
<LinkTo @route="settings">Settings</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{/unless}}
<LinkTo @route="settings.staff" data-test-staff-link={{true}}>Staff</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{this.user.name}}
{{#if this.user.isSuspended}}
<span class="gh-badge suspended" data-test-suspended-badge>Suspended</span>
{{/if}}
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb" data-test-breadcrumb>
{{#unless this.session.user.isEditor}}
<LinkTo @route="settings">
Settings
</LinkTo>
{{svg-jar "arrow-right-small"}}
{{/unless}}
<LinkTo @route="settings.staff" data-test-staff-link={{true}}>
Staff
</LinkTo>
{{svg-jar "arrow-right-small"}} Profile
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{this.user.name}}
{{#if this.user.isSuspended}}
<span class="gh-badge suspended" data-test-suspended-badge>Suspended</span>
{{/if}}
</h2>
</div>
{{/if}}
<section class="view-actions">

View File

@ -1,11 +1,18 @@
<section class="gh-canvas">
<form class="mb15">
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
<LinkTo @route="tags" data-test-link="tags-back">Tags</LinkTo>
<span>{{svg-jar "arrow-right"}}</span>
{{if this.tag.isNew "New tag" this.tag.name}}
</h2>
<div class="flex flex-column">
<div class="gh-canvas-breadcrumb">
<LinkTo @route="tags" data-test-link="tags-back">
Tags
</LinkTo>
{{svg-jar "arrow-right-small"}} {{if this.tag.isNew "New tag" this.tag.name}}
</div>
<h2 class="gh-canvas-title" data-test-screen-title>
{{if this.tag.isNew "New tag" this.tag.name}}
</h2>
</div>
<section class="view-actions">
<GhTaskButton
@task={{this.saveTask}}

View File

@ -1,5 +1,5 @@
<section class="gh-canvas">
<GhCanvasHeader class="gh-canvas-header">
<GhCanvasHeader class="gh-canvas-header sticky">
<h2 class="gh-canvas-title" data-test-screen-title>Tags</h2>
<section class="view-actions">
<LinkTo @route="tag.new" class="gh-btn gh-btn-primary"><span>New tag</span></LinkTo>

View File

@ -1,5 +1,5 @@
<section class="gh-canvas" {{on-key "c" this.newTag}}>
<GhCanvasHeader class="gh-canvas-header">
<GhCanvasHeader class="gh-canvas-header sticky">
<h2 class="gh-canvas-title" data-test-screen-title>Tags</h2>
<section class="view-actions">
<div class="gh-contentfilter gh-btn-group">

View File

@ -197,7 +197,7 @@ describe('Acceptance: Content', function () {
// clicking sidebar custom view link works
await click('[data-test-nav-custom="posts-Scheduled"]');
expect(currentURL()).to.equal('/posts?type=scheduled');
expect(find('[data-test-screen-title]').innerText).to.match(/Posts[\n\s]+Scheduled/);
expect(find('[data-test-screen-title]').innerText).to.match(/Scheduled/);
expect(find('[data-test-nav-custom="posts-Scheduled"]')).to.have.class('active');
// clicking the main posts link resets
@ -210,7 +210,7 @@ describe('Acceptance: Content', function () {
await selectChoose('[data-test-type-select]', 'Scheduled posts');
expect(currentURL()).to.equal('/posts?type=scheduled');
expect(find('[data-test-nav-custom="posts-Scheduled"]')).to.have.class('active');
expect(find('[data-test-screen-title]').innerText).to.match(/Posts[\n\s]+Scheduled/);
expect(find('[data-test-screen-title]').innerText).to.match(/Scheduled/);
});
});

View File

@ -140,11 +140,11 @@ describe('Acceptance: Staff', function () {
// view title should exist and be linkable and active
expect(
find('[data-test-screen-title] a[href="/ghost/settings/staff"]').classList.contains('active'),
find('[data-test-breadcrumb] a[href="/ghost/settings/staff"]').classList.contains('active'),
'has linkable url back to staff main page'
).to.be.true;
await click('[data-test-screen-title] a');
await click('[data-test-breadcrumb] a');
// url should be /staff again
expect(currentURL(), 'url after clicking back').to.equal('/settings');