Site: props text on one level, GitHub links
This commit is contained in:
5 files changed
+22
-14
No files matched your search
@@ -59,8 +59,7 @@ test("six links in reading order; reduced motion skips growth", async ({ page })
|
||||
|
||||
test("focus lifts one cell, shows the name, survives the mouse", async ({ page }) => {
|
||||
const rest = await top(page, "ElyDoc");
|
||||
await page.keyboard.press("Tab");
|
||||
await page.keyboard.press("Tab");
|
||||
for (let i = 0; i < 3; i++) await page.keyboard.press("Tab");
|
||||
await expect(page.locator(".doors a").first()).toBeFocused();
|
||||
expect(rest - (await top(page, "ElyDoc"))).toBeCloseTo(CELL, 0);
|
||||
await expect(caption(page, "ElyDoc")).toHaveCSS("opacity", "1");
|
||||
@@ -132,8 +131,7 @@ test("a primary press sinks one cell; only a click starting on it opens", async
|
||||
|
||||
test("holding Enter sinks the focused building until release", async ({ page }) => {
|
||||
const rest = await top(page, "ElyDoc");
|
||||
await page.keyboard.press("Tab");
|
||||
await page.keyboard.press("Tab");
|
||||
for (let i = 0; i < 3; i++) await page.keyboard.press("Tab");
|
||||
await page.keyboard.down("Enter");
|
||||
expect(await top(page, "ElyDoc")).toBeCloseTo(rest, 0);
|
||||
await expect(page).toHaveURL(/#elydoc$/);
|
||||
|
||||
+7
-3
@@ -7,7 +7,8 @@ import { touch } from "./touch.ts";
|
||||
import { regions, reveal } from "./regions.ts";
|
||||
import { said, speak, type Lang } from "./text.ts";
|
||||
|
||||
const RELEASE = "https://github.com/ZacharyZhang-NY/ElyOffice/releases/download/v0.1.0";
|
||||
const REPO = "https://github.com/ZacharyZhang-NY/ElyOffice";
|
||||
const RELEASE = `${REPO}/releases/download/v0.1.0`;
|
||||
|
||||
const app = document.querySelector<HTMLElement>("#app");
|
||||
if (!app) throw new Error("index.html has no #app");
|
||||
@@ -27,7 +28,10 @@ const svg = stage(built.flat());
|
||||
svg.classList.add("grow", "seen");
|
||||
svg.setAttribute("aria-hidden", "true");
|
||||
host.append(svg);
|
||||
hero.append(title, said("p", "tagline"), said("p", "platforms"), host);
|
||||
const github = document.createElement("a");
|
||||
github.href = REPO;
|
||||
github.textContent = "GitHub";
|
||||
hero.append(title, said("p", "tagline"), said("p", "platforms"), github, host);
|
||||
touch(host, svg, parts);
|
||||
|
||||
const sections = regions();
|
||||
@@ -46,7 +50,7 @@ for (const p of apps) {
|
||||
list.append(li);
|
||||
}
|
||||
const source = said("a", "source");
|
||||
source.href = `${RELEASE}/ElyOffice-0.1.0-source.tar.gz`;
|
||||
source.href = REPO;
|
||||
const li = document.createElement("li");
|
||||
li.append(source);
|
||||
list.append(li);
|
||||
|
||||
@@ -54,6 +54,10 @@ button:focus-visible {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero a {
|
||||
font-size: 1.0625rem;
|
||||
}
|
||||
|
||||
.hero .model {
|
||||
margin-top: 6rem;
|
||||
}
|
||||
@@ -126,7 +130,9 @@ button:focus-visible {
|
||||
|
||||
.prop {
|
||||
display: grid;
|
||||
grid-template-rows: 1fr auto;
|
||||
justify-items: center;
|
||||
align-items: end;
|
||||
gap: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -19,7 +19,7 @@ RGB_IN = "scale=in_color_matrix=bt709:in_range=tv,format=rgb24"
|
||||
|
||||
def run(args):
|
||||
print("+", " ".join(str(a) for a in args[:6]), "...", flush=True)
|
||||
subprocess.run(["ffmpeg", "-hide_banner", "-v", "warning", "-y", *map(str, args)], check=True)
|
||||
subprocess.run(["ffmpeg", "-hide_banner", "-v", "error", "-y", *map(str, args)], check=True)
|
||||
|
||||
|
||||
def lerp(points, x):
|
||||
@@ -58,7 +58,7 @@ def piece_chain(label, piece, start, f0, f1, out):
|
||||
f"[{label}:v]trim=start={u0:.4f}:end={u1:.4f},setpts=PTS-STARTPTS,"
|
||||
f"setpts='({pts}-{f0 / FPS:.6f})/TB',fps={FPS}:start_time=0,"
|
||||
f"trim=end_frame={n},tpad=stop_mode=clone:stop={n},trim=end_frame={n},setpts=N/{FPS}/TB,"
|
||||
f"{RGB_IN}[{out}]"
|
||||
f"{RGB_IN},setsar=1[{out}]"
|
||||
)
|
||||
|
||||
|
||||
@@ -108,8 +108,8 @@ def plate_chain(scene, rec, k, out):
|
||||
)
|
||||
return (
|
||||
f"{rec},scale=800:450:flags=area,scale=1912:1072:flags=bicubic,format=rgba,"
|
||||
f"pad=1920:1080:4:4:color=black@0,perspective={pins}:sense=destination:eval=frame:interpolation=cubic"
|
||||
f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=auto:shortest=1,format=rgb24,setsar=1[{out}]"
|
||||
f"pad=1920:1080:4:4:color=black@0,setsar=1,perspective={pins}:sense=destination:eval=frame:interpolation=cubic"
|
||||
f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=rgb:shortest=1,format=rgb24,setsar=1[{out}]"
|
||||
)
|
||||
|
||||
|
||||
@@ -126,10 +126,10 @@ def full_chain(s, plan, rec, n, k, out):
|
||||
rise = "round(12*pow(max(0,1-t/0.2),2))"
|
||||
return (
|
||||
f"{rec},perspective={quad}:sense=source:eval=frame:interpolation=cubic,"
|
||||
f"scale={w['w']}:{w['h']}:flags=lanczos,pad=1920:1080:{w['x']}:{w['y']}:color=0xfbfbfa,format=rgba[lb];"
|
||||
f"[{k + 1}:v]format=rgba[fr];[lb][fr]overlay=format=auto:shortest=0[lf];"
|
||||
f"scale={w['w']}:{w['h']}:flags=lanczos,pad=1920:1080:{w['x']}:{w['y']}:color=0xfbfbfa,setsar=1,format=rgba[lb];"
|
||||
f"[{k + 1}:v]format=rgba[fr];[lb][fr]overlay=format=rgb:shortest=0[lf];"
|
||||
f"[{k + 2}:v]format=rgba,fade=in:st=0:d=0.2:alpha=1[cap];"
|
||||
f"[lf][cap]overlay=x=0:y='{rise}':format=auto:eval=frame,trim=end_frame={n},format=rgb24,setsar=1[{out}]"
|
||||
f"[lf][cap]overlay=x=0:y='{rise}':format=rgb:eval=frame,trim=end_frame={n},format=rgb24,setsar=1[{out}]"
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user