Skip to content

Commit 4260d37

Browse files
authored
Line up service rows and give the side column 40% (#47)
1 parent a77dfcf commit 4260d37

2 files changed

Lines changed: 34 additions & 7 deletions

File tree

‎release_scope/_static/index.html‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
.warn { color: var(--warn); }
6060
.message { white-space: pre-line; }
6161
.scroll { overflow-x: auto; }
62-
.layout { display: grid; grid-template-columns: minmax(0, 1fr) clamp(420px, 32vw, 640px); gap: 24px; align-items: start; }
62+
.layout { display: grid; grid-template-columns: minmax(0, 3fr) minmax(420px, 2fr); gap: 24px; align-items: start; }
6363
.layout > aside { position: sticky; top: 0; max-height: 100vh; overflow-y: auto; padding: 0 4px 16px; }
6464
.strip { display: none; writing-mode: vertical-rl; width: 40px; min-height: 240px; margin-top: 32px; padding: 12px 4px;
6565
border-color: var(--accent); color: var(--accent); font-weight: 600; }
@@ -82,7 +82,7 @@
8282
.service > summary { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; padding: 8px 12px; cursor: pointer;
8383
list-style: none; }
8484
.service[open] > summary { border-bottom: 1px solid var(--border); }
85-
.service.deployed { border-left: 4px solid var(--good); background: color-mix(in srgb, var(--good) 6%, transparent); }
85+
.service.deployed { box-shadow: inset 3px 0 0 var(--good); background: color-mix(in srgb, var(--good) 6%, transparent); }
8686
.service.deployed .name { color: var(--good); }
8787
.chip { display: inline-flex; align-items: center; gap: 4px; padding: 0 4px 0 10px; border-radius: 999px;
8888
background: var(--pill-bg); color: var(--pill-fg); font-weight: 600; }
@@ -91,6 +91,8 @@
9191
.service > summary::before { content: "▸"; color: var(--muted); }
9292
.service[open] > summary::before { content: "▾"; }
9393
.service .name { min-width: 200px; font-weight: 600; }
94+
.service .prod { display: inline-block; min-width: 8rem; }
95+
.service .target { display: inline-flex; min-width: 8rem; }
9496
.service .body { padding: 8px 12px; }
9597
.service .body > p:first-child { margin-top: 0; }
9698
.status { display: inline-block; padding: 0 8px; border: 1px solid currentColor; border-radius: 10px; font-size: 12px;
@@ -184,10 +186,10 @@ <h2 x-text="t('services')"></h2>
184186
<span class="name" x-text="service.project"></span>
185187
<span x-show="service.error" class="bad" x-text="t('failedToCollect')"></span>
186188
<span x-show="!service.error">
187-
<span class="muted" x-text="productionRef(service) + ' →'"></span>
188-
<span x-show="pickOf(service)" class="chip"><span x-text="picks[service.project]"></span><button type="button"
189+
<span class="muted prod" x-text="productionRef(service) + ' →'"></span>
190+
<span class="target"><span x-show="pickOf(service)" class="chip"><span x-text="picks[service.project]"></span><button type="button"
189191
:title="t('clearPick')" :aria-label="t('clearPick')" @click.prevent="pick(service, '', $el)">×</button></span>
190-
<span x-show="!pickOf(service)" class="muted" x-text="pickHint(service)"></span>
192+
<span x-show="!pickOf(service)" class="muted" x-text="pickHint(service)"></span></span>
191193
<span x-show="deployed(service)" class="status status-done" x-text="t('upToDate')"></span>
192194
<span x-show="service.untagged" class="warn" x-text="untaggedText(service, 'untagged', 'untaggedAtLeast')"></span>
193195
</span>

‎tests/test_browser.py‎

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,37 @@ def test_demo_an_idle_service_keeps_readable_text(
275275
assert errors == []
276276

277277

278-
def test_demo_the_side_column_grows_with_a_wide_window(page: Page, demo_site: str, errors: list[str]) -> None:
278+
def test_demo_the_side_column_takes_two_fifths_of_a_wide_window(page: Page, demo_site: str, errors: list[str]) -> None:
279279
page.set_viewport_size({"width": 1920, "height": 900})
280280
page.goto(demo_site)
281281

282+
layout: typing.Final = page.locator(".layout").bounding_box()
282283
box: typing.Final = page.locator(".layout > aside").bounding_box()
283284

285+
assert layout is not None
284286
assert box is not None
285-
assert box["width"] == pytest.approx(1920 * 0.32, abs=1)
287+
assert box["width"] == pytest.approx((layout["width"] - 24) * 0.4, abs=1)
288+
assert errors == []
289+
290+
291+
def _left(element: Locator) -> float:
292+
box: typing.Final = element.bounding_box()
293+
assert box is not None
294+
return box["x"]
295+
296+
297+
def test_demo_service_rows_line_up_with_and_without_a_pick(page: Page, demo_site: str, errors: list[str]) -> None:
298+
page.goto(f"{demo_site}#shop/web=1.9.0")
299+
expect(_demo_service(page, "shop/web").locator(".chip")).to_be_visible()
300+
301+
names: typing.Final = [
302+
_left(_demo_service(page, project).locator(".name")) for project in ("shop/admin", "shop/api")
303+
]
304+
states: typing.Final = [
305+
_left(_demo_service(page, project).locator("summary .warn").first)
306+
for project in ("shop/api", "shop/web", "shop/worker")
307+
]
308+
309+
assert names[0] == pytest.approx(names[1], abs=0.5)
310+
assert max(states) - min(states) < 0.5, states
286311
assert errors == []

0 commit comments

Comments
 (0)