hide "preview" nav item on desktop
This commit is contained in:
parent
ff98c46ed2
commit
424db4eaa1
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"cSpell.words": ["resumarkdown", "spacebar"]
|
"cSpell.words": ["resumarkdown", "spacebar", "testid"]
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
export let pane: Pane;
|
export let pane: Pane;
|
||||||
|
|
||||||
|
export let testid: string | undefined = undefined;
|
||||||
|
|
||||||
// don't show pane if we're not the current pane
|
// don't show pane if we're not the current pane
|
||||||
let hidden: boolean;
|
let hidden: boolean;
|
||||||
$: hidden = pane !== $navStore;
|
$: hidden = pane !== $navStore;
|
||||||
@ -12,7 +14,9 @@
|
|||||||
$: preview = pane === 'preview';
|
$: preview = pane === 'preview';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id={`pane-${pane}`} role="tabpanel" class:hidden class:preview><slot /></div>
|
<div id={`pane-${pane}`} data-testid={testid} role="tabpanel" class:hidden class:preview>
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
div {
|
div {
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
let selected: boolean;
|
let selected: boolean;
|
||||||
$: selected = destination === $pane;
|
$: selected = destination === $pane;
|
||||||
|
|
||||||
|
// we need to hide the "preview" tab on desktop
|
||||||
|
let hiddenOnDesktop: boolean;
|
||||||
|
$: hiddenOnDesktop = destination === 'preview';
|
||||||
|
|
||||||
function handleKey({ key }: KeyboardEvent) {
|
function handleKey({ key }: KeyboardEvent) {
|
||||||
if (key === ' ' || key === 'Enter' || key === 'Spacebar') {
|
if (key === ' ' || key === 'Enter' || key === 'Spacebar') {
|
||||||
navigate();
|
navigate();
|
||||||
@ -22,6 +26,7 @@
|
|||||||
aria-selected={selected}
|
aria-selected={selected}
|
||||||
role="tab"
|
role="tab"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
class:hiddenOnDesktop
|
||||||
class:selected
|
class:selected
|
||||||
on:click={navigate}
|
on:click={navigate}
|
||||||
on:keyup={handleKey}
|
on:keyup={handleKey}
|
||||||
@ -39,6 +44,10 @@
|
|||||||
|
|
||||||
@media screen and (min-width: @sizes[lg]) {
|
@media screen and (min-width: @sizes[lg]) {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
|
||||||
|
&.hiddenOnDesktop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.selected {
|
&.selected {
|
||||||
|
@ -22,13 +22,13 @@
|
|||||||
</NavTree>
|
</NavTree>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<Content pane="content">
|
<Content pane="content" testid="content-pane">
|
||||||
<CodeInput bind:code={markdown} />
|
<CodeInput bind:code={markdown} />
|
||||||
</Content>
|
</Content>
|
||||||
<Content pane="style">
|
<Content pane="style" testid="style-pane">
|
||||||
<CodeInput bind:code={stylesheet} />
|
<CodeInput bind:code={stylesheet} />
|
||||||
</Content>
|
</Content>
|
||||||
<Content pane="preview">
|
<Content pane="preview" testid="preview-pane">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>markdown:</dt>
|
<dt>markdown:</dt>
|
||||||
<dd>{markdown !== '' ? markdown : '???'}</dd>
|
<dd>{markdown !== '' ? markdown : '???'}</dd>
|
||||||
|
@ -14,3 +14,8 @@ test('desktop page has two-column layout', async ({ page }) => {
|
|||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
await expect(page.locator('#pane-preview')).toBeVisible();
|
await expect(page.locator('#pane-preview')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('desktop page has no "preview" nav item', async ({ page }) => {
|
||||||
|
await page.goto('/');
|
||||||
|
await expect(page.getByRole('tab').filter({ hasText: 'preview' })).toBeHidden();
|
||||||
|
});
|
||||||
|
@ -9,14 +9,9 @@ test('page has headline', async ({ page }) => {
|
|||||||
|
|
||||||
test('nav items work', async ({ page }) => {
|
test('nav items work', async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
let lastPane = '#pane-preview';
|
|
||||||
for (const pane of ['content', 'style', 'preview']) {
|
for (const tab of await page.getByRole('tab').all()) {
|
||||||
const currentPaneId = `pane-${pane}`;
|
await tab.click();
|
||||||
await page.locator(`nav li[aria-controls="${currentPaneId}"]`).click();
|
await expect(page.getByTestId(`${await tab.textContent()}-pane`)).toBeVisible();
|
||||||
await expect(page.locator(`#${currentPaneId}`)).toBeVisible();
|
|
||||||
if (lastPane !== '#pane-preview') {
|
|
||||||
await expect(page.locator(lastPane)).toBeHidden();
|
|
||||||
}
|
|
||||||
lastPane = `#${currentPaneId}`;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -24,3 +24,9 @@ test('mobile page has single-column layout', async ({ page }) => {
|
|||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
await expect(page.locator('#pane-preview')).toBeHidden();
|
await expect(page.locator('#pane-preview')).toBeHidden();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('mobile page has preview nav item', async ({ page }) => {
|
||||||
|
await page.goto('/');
|
||||||
|
await page.getByText('show navigation').click();
|
||||||
|
await expect(page.getByRole('tab').filter({ hasText: 'preview' })).toBeVisible();
|
||||||
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user