Initial commit
This commit is contained in:
1 parent
1ba45f88aa
commit
9e6804c1ab
77 files changed
+3888
No files matched your search
@@ -0,0 +1,135 @@
|
||||
'use strict';
|
||||
// Each scene leaves the app looking the way the website screenshot should, then calls shot(name).
|
||||
// Scenes run in order in one session; each one starts by getting back to a known state.
|
||||
|
||||
// Cosmetic: show the default notes location instead of the temp folder this run uses.
|
||||
const tidyPath = (js) => js(`
|
||||
for (const el of document.querySelectorAll('.ws-path, .mono')) {
|
||||
if (/^\\/tmp\\/ink-shots-[^/]+\\/Notes$/.test(el.textContent.trim())) { el.textContent = '~/Notes'; el.title = '~/Notes'; }
|
||||
}`);
|
||||
|
||||
const reset = async ({ key, sleep, js }) => {
|
||||
await tidyPath(js);
|
||||
for (let i = 0; i < 3; i++) await key('Escape');
|
||||
await js(`document.activeElement?.blur?.()`);
|
||||
await sleep(150);
|
||||
};
|
||||
|
||||
// Open a page the way a user would: Ctrl+K, type its name, Enter.
|
||||
const openFromSidebar = async ({ key, type, sleep }, text) => {
|
||||
await key('K', ['control']);
|
||||
await sleep(400);
|
||||
await type(text, 30);
|
||||
await sleep(700);
|
||||
await key('Return');
|
||||
await sleep(1000);
|
||||
return true;
|
||||
};
|
||||
|
||||
// The element that actually scrolls the page.
|
||||
const scrollPage = (js, y) => js(`
|
||||
const c = [...document.querySelectorAll('*')].filter((e) => { const s = getComputedStyle(e); return /(auto|scroll)/.test(s.overflowY) && e.scrollHeight > e.clientHeight + 20 && e.clientWidth > 600; })
|
||||
.sort((a, b) => b.clientWidth * b.clientHeight - a.clientWidth * a.clientHeight)[0];
|
||||
if (c) { c.scrollTop = ${y}; return c.className; } return null;`);
|
||||
|
||||
module.exports = {
|
||||
async editor(ctx) {
|
||||
const { js, sleep, shot } = ctx;
|
||||
await tidyPath(js);
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Roadmap');
|
||||
await scrollPage(js, 120);
|
||||
await sleep(300);
|
||||
await shot('editor');
|
||||
},
|
||||
|
||||
async 'slash-menu'(ctx) {
|
||||
const { js, type, sleep, shot, key } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Launch plan');
|
||||
await scrollPage(js, 170);
|
||||
await sleep(300);
|
||||
await js(`document.querySelector('.tail').click()`);
|
||||
await sleep(400);
|
||||
await type('/');
|
||||
await sleep(500);
|
||||
await shot('slash-menu');
|
||||
await key('Escape');
|
||||
},
|
||||
|
||||
async linking(ctx) {
|
||||
const { js, sleep, shot } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Reading list');
|
||||
await scrollPage(js, 2000);
|
||||
await sleep(600);
|
||||
await shot('linking');
|
||||
},
|
||||
|
||||
async canvas(ctx) {
|
||||
const { sleep, shot, key } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Project map');
|
||||
await sleep(1200);
|
||||
await key('1', ['shift']);
|
||||
await sleep(900);
|
||||
await shot('canvas');
|
||||
},
|
||||
|
||||
async board(ctx) {
|
||||
const { sleep, shot } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Sprint board');
|
||||
await sleep(900);
|
||||
await scrollPage(ctx.js, 200);
|
||||
await sleep(400);
|
||||
await shot('board');
|
||||
},
|
||||
|
||||
async graph(ctx) {
|
||||
const { js, sleep, shot, key } = ctx;
|
||||
await reset(ctx);
|
||||
await js(`[...document.querySelectorAll('.sidebar .qa')].find((b) => b.textContent.includes('Graph view')).click()`);
|
||||
await sleep(3500);
|
||||
await js(`document.querySelector('.graph-top [aria-label="Graph settings"]')?.click()`);
|
||||
await sleep(900);
|
||||
await shot('graph');
|
||||
await key('Escape');
|
||||
},
|
||||
|
||||
async palette(ctx) {
|
||||
const { sleep, shot, key, type } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Roadmap');
|
||||
await key('K', ['control']);
|
||||
await sleep(500);
|
||||
await type('tag:work road');
|
||||
await sleep(700);
|
||||
await shot('palette');
|
||||
await key('Escape');
|
||||
},
|
||||
|
||||
async settings(ctx) {
|
||||
const { sleep, shot, key } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Roadmap');
|
||||
await key(',', ['control']);
|
||||
await sleep(900);
|
||||
await tidyPath(js);
|
||||
await sleep(200);
|
||||
await shot('settings');
|
||||
await key('Escape');
|
||||
},
|
||||
|
||||
async history(ctx) {
|
||||
const { js, sleep, shot, key } = ctx;
|
||||
await reset(ctx);
|
||||
await openFromSidebar(ctx, 'Roadmap');
|
||||
await js(`document.querySelector('[aria-label="Page options"]')?.click()`);
|
||||
await sleep(500);
|
||||
await js(`[...document.querySelectorAll('[role="menuitem"]')].find((m) => m.textContent.includes('Version history'))?.click()`);
|
||||
await sleep(1200);
|
||||
await shot('history');
|
||||
await key('Escape');
|
||||
},
|
||||
};
|
||||
Reference in new issue
Block a user