@bongos/core 1.23.9 → 1.23.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +106 -41
- package/docs/adr/0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md +1 -0
- package/docs/copy-inventory.md +900 -725
- package/docs/copy-registry.json +3055 -1246
- package/docs/file-map.md +1 -0
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +49 -6
- package/docs/page-readings.json +1247 -1157
- package/modules/public-landing/public/account.html +12 -0
- package/modules/public-landing/public/assets/cosmos.css +9 -1
- package/modules/public-landing/public/assets/hub-bar.js +5 -3
- package/modules/public-landing/public/community-empty.states.json +15 -0
- package/modules/public-landing/public/community-recruiter.states.json +15 -0
- package/modules/public-landing/public/community.html +470 -0
- package/modules/public-landing/public/community.probes.json +92 -0
- package/modules/public-landing/public/community.states.json +25 -0
- package/modules/public-landing/public/connections-nosuggest.states.json +15 -0
- package/modules/public-landing/public/connections.html +33 -2
- package/modules/public-landing/public/connections.states.json +1 -0
- package/modules/public-landing/public/contact.html +12 -0
- package/modules/public-landing/public/guild.html +12 -0
- package/modules/public-landing/public/index.html +23 -2
- package/modules/public-landing/public/index.probes.json +1 -1
- package/modules/public-landing/public/invitations.html +12 -0
- package/modules/public-landing/public/privacy.html +12 -0
- package/modules/public-landing/public/projects.html +15 -1
- package/modules/public-landing/public/terms.html +12 -0
- package/modules/ui-design/kit/fixtures/community-leaderboard-empty.json +4 -0
- package/modules/ui-design/kit/fixtures/community-leaderboard.json +28 -0
- package/modules/ui-design/kit/fixtures/community-search.json +10 -0
- package/modules/ui-design/kit/fixtures/connections-nosuggest.json +12 -0
- package/modules/ui-design/kit/fixtures/scouting-recruiter.json +11 -0
- package/modules/ui-design/kit/fixtures/scouting.json +4 -0
- package/modules/ui-design/kit/serve.js +55 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/src/bongos/serve-internal.js +4 -2
- package/src/module-api.js +1 -1
- package/src/platform-server.js +11 -0
- package/tests/hub_account_page.mjs +9 -1
- package/tests/hub_community_page.mjs +493 -0
- package/tests/hub_connections_page.mjs +53 -4
- package/tests/hub_guild_page.mjs +1 -0
- package/tests/landing_legal_pages.mjs +10 -1
- package/tests/landing_page.mjs +1 -1
- package/tests/render_check.mjs +2 -2
- package/tests/ui_design_kit.mjs +2 -2
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The community pages' interaction contract for modules/ui-design/kit/probe.js (task 1003363): the Community menu as the current section with each sub-page marked, the window dropdown and a craft each re-reading the board, the search on Enter with its too-short refusal and a hidden builder found by name, and the recruiter list as a door signed out and a refusal for a builder the recruiting door does not admit.",
|
|
3
|
+
"page": "/community",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"probes": [
|
|
6
|
+
{
|
|
7
|
+
"name": "community signed out: the leaderboard for everyone; Community the current section, Leaderboard the current item",
|
|
8
|
+
"auth": false,
|
|
9
|
+
"width": 1440,
|
|
10
|
+
"steps": [["wait", 400], ["click", "#commTrig"], ["wait", 150]],
|
|
11
|
+
"expect": {
|
|
12
|
+
"open": "#menuCommunity",
|
|
13
|
+
"visible": ["#boardList", "#signinTop"],
|
|
14
|
+
"hidden": ["#find", "#recruit"],
|
|
15
|
+
"count": [["#boardList .commRow", 6], ["#menuCommunity a[aria-current=\"page\"]", 1]],
|
|
16
|
+
"attr": [["#commTrig", "aria-current", "true"]],
|
|
17
|
+
"href": [["#menuCommunity a[aria-current=\"page\"]", "/community"], ["#signinTop", "/api/bongos/auth/web/start?return=/community&repos=1"]]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "community: the 7-day window from the dropdown re-reads the board",
|
|
22
|
+
"auth": false,
|
|
23
|
+
"width": 1440,
|
|
24
|
+
"steps": [["wait", 400], ["select", "#boardWindow", "7d"], ["wait", 300]],
|
|
25
|
+
"expect": {
|
|
26
|
+
"count": [["#boardList .commRow", 2]],
|
|
27
|
+
"value": [["#boardWindow", "7d"]],
|
|
28
|
+
"text": [["#boardList .commRow:last-child .commNum", "-15"], ["#boardNote", "Credits earned in the last 7 days, across every project."]]
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "community: a craft filters the board and renumbers nothing the server did not",
|
|
33
|
+
"auth": false,
|
|
34
|
+
"width": 390,
|
|
35
|
+
"steps": [["wait", 400], ["click", "#craftTabs [data-craft=\"engineer\"]"], ["wait", 300]],
|
|
36
|
+
"expect": {
|
|
37
|
+
"count": [["#boardList .commRow", 3]],
|
|
38
|
+
"attr": [["#craftTabs [data-craft=\"engineer\"]", "aria-pressed", "true"]],
|
|
39
|
+
"text": [["#boardList .commRow:first-child .commPlace", "1"], ["#boardList .commRow:first-child .mineRow__name", "Priya Nair"]]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "community find: the sub-page is marked, the search refuses one letter",
|
|
44
|
+
"auth": false,
|
|
45
|
+
"width": 1440,
|
|
46
|
+
"url": "/community/find",
|
|
47
|
+
"steps": [["wait", 400], ["fill", "#findQ", "s"], ["press", "Enter"], ["wait", 200]],
|
|
48
|
+
"expect": {
|
|
49
|
+
"hidden": ["#board", "#recruit"],
|
|
50
|
+
"count": [["#findList .mineRow", 0], ["#menuCommunity a[aria-current=\"page\"]", 1]],
|
|
51
|
+
"href": [["#menuCommunity a[aria-current=\"page\"]", "/community/find"], ["#signinTop", "/api/bongos/auth/web/start?return=/community/find&repos=1"]],
|
|
52
|
+
"text": [["#findStatus", "Type at least 2 letters of a name."]]
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "community find: a hidden builder is found by name, with no craft said",
|
|
57
|
+
"auth": false,
|
|
58
|
+
"width": 1440,
|
|
59
|
+
"url": "/community/find",
|
|
60
|
+
"steps": [["wait", 400], ["fill", "#findQ", "sam"], ["press", "Enter"], ["wait", 300]],
|
|
61
|
+
"expect": {
|
|
62
|
+
"count": [["#findList .mineRow", 1], ["#findList .mineRow__hint", 0]],
|
|
63
|
+
"text": [["#findStatus", "1 builder found."], ["#findList .mineRow:first-child .mineRow__name", "Sam Rivera"]]
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "community recruiters signed out: the sign-in door, and no list",
|
|
68
|
+
"auth": false,
|
|
69
|
+
"width": 1440,
|
|
70
|
+
"url": "/community/recruiters",
|
|
71
|
+
"steps": [["wait", 400]],
|
|
72
|
+
"expect": {
|
|
73
|
+
"visible": ["#recruitDoor"],
|
|
74
|
+
"hidden": ["#recruitClosed"],
|
|
75
|
+
"count": [["#recruitList .mineRow", 0]],
|
|
76
|
+
"href": [["#recruitSignin", "/api/bongos/auth/web/start?return=/community/recruiters&repos=1"]]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "community recruiters signed in, not a project owner: told it is for project owners, and shown no one",
|
|
81
|
+
"auth": true,
|
|
82
|
+
"width": 1440,
|
|
83
|
+
"url": "/community/recruiters",
|
|
84
|
+
"steps": [["wait", 600]],
|
|
85
|
+
"expect": {
|
|
86
|
+
"visible": ["#recruitClosed", "#who"],
|
|
87
|
+
"hidden": ["#recruitDoor", "#signinTop"],
|
|
88
|
+
"count": [["#recruitList .mineRow", 0]]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The community pages' states for modules/ui-design/kit/render.js (task 1003363; ADR 0217 D1, ADR 0337 D4.1): one file served as three sub-pages of the bar's Community menu, each state naming its `url`. The leaderboard and the search are the same for every viewer, from the stub's fixtures (community-leaderboard.json: six builders all time, fewer in each window; community-search.json). The recruiter list signed out is a sign-in door, and signed in it is the default fixture's 403 (most builders own no project); community-recruiter.states.json is a project owner's list, community-empty.states.json a board with nobody on it. Dark only, like every apex page (ADR 0204).",
|
|
3
|
+
"page": "/community",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"modes": ["dark"],
|
|
6
|
+
"modeQuery": false,
|
|
7
|
+
"ignoreRequests": ["/api/(gds|bongos)/me$", "/my-projects", "/me/guild-", "/scouting$"],
|
|
8
|
+
"ignoreConsole": ["/api/(gds|bongos)/me", "/scouting", "\\b40[13]\\b", "Unauthorized", "Forbidden"],
|
|
9
|
+
"ignoreControls": [".vh"],
|
|
10
|
+
"states": {
|
|
11
|
+
"out": { "auth": false, "actions": [["wait", 400]], "expect": { "visible": ["#board", "#boardList", "#boardWindow", "#signinTop", "#projTrig"], "hidden": ["#find", "#recruit", "#who", "#boardLoading", "#boardFailed", "#boardEmpty"], "count": [["#boardList .commRow", 6]], "value": [["#boardWindow", "all"]], "attr": [["#craftTabs [data-craft=\"\"]", "aria-pressed", "true"], ["#commTrig", "aria-current", "true"], ["#menuCommunity a[href=\"/community\"]", "aria-current", "page"]], "text": [["#boardList .commRow:first-child .mineRow__name", "Priya Nair"], ["#boardList .commRow:first-child .commNum", "18,420"], ["#boardList .commRow:first-child .mineRow__hint", "212 works shipped · 64 karma"], ["#boardNote", "Credits earned across every project, since each builder started."]] } },
|
|
12
|
+
"out-30d": { "auth": false, "actions": [["wait", 400], ["select", "#boardWindow", "30d"], ["wait", 300]], "expect": { "count": [["#boardList .commRow", 3]], "value": [["#boardWindow", "30d"]], "text": [["#boardList .commRow:first-child .mineRow__name", "Ada Okafor"], ["#boardNote", "Credits earned in the last 30 days, across every project."]] } },
|
|
13
|
+
"out-artists": { "auth": false, "actions": [["wait", 400], ["click", "#craftTabs [data-craft=\"artist\"]"], ["wait", 300]], "expect": { "count": [["#boardList .commRow", 1]], "text": [["#boardList .commRow:first-child .mineRow__name", "Ada Okafor"], ["#boardList .commRow:first-child .commPlace", "1"]] } },
|
|
14
|
+
"out-community-band": { "auth": false, "actions": [["wait", 400], ["clickIfVisible", "#commTrig"], ["wait", 300]], "expect": { "hidden": ["#menuCommunity .knowCell"], "count": [["#menuCommunity .bandCell:not([hidden])", 3]], "attr": [["#menuCommunity a[href=\"/community\"]", "aria-current", "page"]] } },
|
|
15
|
+
"in-community-band": { "auth": true, "actions": [["wait", 400], ["clickIfVisible", "#commTrig"], ["wait", 300]], "expect": { "count": [["#menuCommunity .bandCell:not([hidden])", 4]], "href": [["#menuCommunity .knowCell a", "/connections#connSuggest"]] } },
|
|
16
|
+
"in-projects-band": { "auth": true, "actions": [["wait", 400], ["click", "#projTrig"], ["wait", 300]], "expect": { "visible": ["#menuProjects"], "count": [["#menuProjects .knowCell:not([hidden])", 1]] } },
|
|
17
|
+
"out-projects-band": { "auth": false, "actions": [["wait", 400], ["click", "#projTrig"], ["wait", 300]], "expect": { "visible": ["#menuProjects"], "attr": [["#menuProjects a[href=\"/community\"]", "aria-current", "page"]] } },
|
|
18
|
+
"out-find": { "auth": false, "url": "/community/find", "actions": [["wait", 400]], "expect": { "visible": ["#find", "#findQ", "#findCraft", "#findBtn"], "hidden": ["#board", "#recruit"], "attr": [["#menuCommunity a[href=\"/community/find\"]", "aria-current", "page"]] } },
|
|
19
|
+
"out-find-search": { "auth": false, "url": "/community/find", "actions": [["wait", 400], ["fill", "#findQ", "pri"], ["click", "#findBtn"], ["wait", 300]], "expect": { "count": [["#findList .mineRow", 2]], "text": [["#findStatus", "2 builders found."], ["#findList .mineRow:first-child .mineRow__hint", "engineer · designer"]] } },
|
|
20
|
+
"out-recruiters": { "auth": false, "url": "/community/recruiters", "actions": [["wait", 400]], "expect": { "visible": ["#recruit", "#recruitDoor", "#recruitSignin"], "hidden": ["#board", "#find", "#recruitLoading", "#recruitClosed"], "count": [["#recruitList .mineRow", 0]], "attr": [["#menuCommunity a[href=\"/community/recruiters\"]", "aria-current", "page"]] } },
|
|
21
|
+
"in-recruiters": { "auth": true, "url": "/community/recruiters", "actions": [["wait", 600]], "expect": { "visible": ["#recruit", "#recruitClosed", "#who"], "hidden": ["#recruitDoor", "#recruitLoading", "#recruitFailed"], "count": [["#recruitList .mineRow", 0]] } },
|
|
22
|
+
"in": { "auth": true, "actions": [["wait", 600]], "expect": { "visible": ["#board", "#who"], "hidden": ["#find", "#recruit", "#signinTop", "#boardFailed"], "count": [["#boardList .commRow", 6]] } }
|
|
23
|
+
},
|
|
24
|
+
"reducedMotion": { "auth": false, "actions": [["wait", 400]] }
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_": "The connections page with nothing to suggest, opened by the Community menu's \"Builders you may know\" item (task 1004256): the graph is fixtures/connections-nosuggest.json, so the panel stands with its one empty line instead of vanishing. Any other visit keeps \"no suggestions, no empty shell\".",
|
|
3
|
+
"page": "/connections",
|
|
4
|
+
"surface": "public-landing",
|
|
5
|
+
"modes": ["dark"],
|
|
6
|
+
"modeQuery": false,
|
|
7
|
+
"stub": { "fixtures": { "connections": "connections-nosuggest" } },
|
|
8
|
+
"ignoreRequests": ["/api/(gds|bongos)/me$", "/my-projects", "/me/guild-"],
|
|
9
|
+
"ignoreConsole": ["/api/(gds|bongos)/me", "\\b401\\b", "Unauthorized"],
|
|
10
|
+
"ignoreControls": [".vh"],
|
|
11
|
+
"states": {
|
|
12
|
+
"in-suggest-none": { "auth": true, "url": "/connections#connSuggest", "actions": [["wait", 500]], "expect": { "visible": ["#connSuggest", "#suggestNone"], "count": [["#suggestList .mineRow", 0]] } },
|
|
13
|
+
"in-plain-none": { "auth": true, "actions": [["wait", 500]], "expect": { "visible": ["#connBody"], "hidden": ["#connSuggest"] } }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -55,6 +55,8 @@
|
|
|
55
55
|
rows; a row with ONE button (Remove, Connect, Withdraw) keeps it beside the name */
|
|
56
56
|
@media (max-width:480px){.mineRow.connOne{flex-wrap:nowrap;}.connOne .mineRow__actions{flex-basis:auto;margin-top:0;}}
|
|
57
57
|
.connSub{margin:26px 0 4px;font-size:14px;font-weight:600;color:var(--ink-soft);}
|
|
58
|
+
/* opened as /connections#connSuggest, the panel's heading clears the fixed bar */
|
|
59
|
+
#connSuggest{scroll-margin-top:calc(var(--top-h) + 16px);}
|
|
58
60
|
</style>
|
|
59
61
|
</head>
|
|
60
62
|
<body>
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
</a>
|
|
77
79
|
</div>
|
|
78
80
|
<div class="barRight">
|
|
81
|
+
<button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
79
82
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
80
83
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from GET /me.
|
|
81
84
|
Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -84,6 +87,16 @@
|
|
|
84
87
|
</div>
|
|
85
88
|
</header>
|
|
86
89
|
|
|
90
|
+
<div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
91
|
+
<div class="bandIn">
|
|
92
|
+
<ul class="bandRow">
|
|
93
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
94
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
95
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
96
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
97
|
+
</ul>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
87
100
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
88
101
|
<div class="bandIn">
|
|
89
102
|
<ul class="bandRow">
|
|
@@ -91,6 +104,7 @@
|
|
|
91
104
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
92
105
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
93
106
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
107
|
+
<li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
94
108
|
</ul>
|
|
95
109
|
</div>
|
|
96
110
|
</div>
|
|
@@ -146,9 +160,11 @@
|
|
|
146
160
|
|
|
147
161
|
<!-- "Builders you may know" (ADR 0202 D5, ADR 0337 D4.2): the server's own
|
|
148
162
|
suggestions and their one-line reasons, rendered as they come. One panel:
|
|
149
|
-
the
|
|
163
|
+
the Community menu's "Builders you may know" item opens it here
|
|
164
|
+
(#connSuggest, task 1004256) rather than drawing a second one. -->
|
|
150
165
|
<section id="connSuggest" aria-labelledby="connSuggestH" hidden>
|
|
151
166
|
<h2 id="connSuggestH">Builders you may know</h2>
|
|
167
|
+
<p class="mineEmpty" id="suggestNone" hidden>No one to suggest yet. Suggestions come from the connections and projects you have in common with other builders.</p>
|
|
152
168
|
<ul class="mineRows" id="suggestList"></ul>
|
|
153
169
|
</section>
|
|
154
170
|
|
|
@@ -322,7 +338,11 @@
|
|
|
322
338
|
p.row.className += ' connOne';
|
|
323
339
|
sug.appendChild(p.row);
|
|
324
340
|
});
|
|
325
|
-
|
|
341
|
+
// Arriving by the Community menu's item, an empty panel says so instead of
|
|
342
|
+
// vanishing; any other visit keeps "no suggestions, no empty shell".
|
|
343
|
+
var asked = location.hash === '#connSuggest' && lists.suggestionsRead;
|
|
344
|
+
$('suggestNone').hidden = !!sug.children.length || !asked;
|
|
345
|
+
$('connSuggest').hidden = !sug.children.length && !asked;
|
|
326
346
|
|
|
327
347
|
var out = $('outgoingList');
|
|
328
348
|
out.textContent = '';
|
|
@@ -340,6 +360,7 @@
|
|
|
340
360
|
$('sentH').hidden = !outgoing.length;
|
|
341
361
|
}
|
|
342
362
|
|
|
363
|
+
var landed = false;
|
|
343
364
|
function load() {
|
|
344
365
|
return Promise.all([read('/connections'), read('/connections/requests'), read('/connections/suggestions')]).then(function (r) {
|
|
345
366
|
var list = r[0], reqs = r[1], sugg = r[2];
|
|
@@ -354,7 +375,11 @@
|
|
|
354
375
|
outgoing: arr(reqs.data.outgoing),
|
|
355
376
|
// additive, never load-bearing: a failed suggestions read only omits that panel
|
|
356
377
|
suggestions: sugg.ok ? arr(sugg.data.suggestions) : [],
|
|
378
|
+
suggestionsRead: sugg.ok,
|
|
357
379
|
});
|
|
380
|
+
// the panel draws after the browser's own jump to #connSuggest, so make it once
|
|
381
|
+
if (!landed && location.hash === '#connSuggest' && !$('connSuggest').hidden) $('connSuggest').scrollIntoView();
|
|
382
|
+
landed = true;
|
|
358
383
|
});
|
|
359
384
|
}
|
|
360
385
|
|
|
@@ -435,6 +460,12 @@
|
|
|
435
460
|
if (id !== 'connBody') $('connMsg').hidden = true;
|
|
436
461
|
}
|
|
437
462
|
function showDoor() { show('door'); }
|
|
463
|
+
// the menu item pressed while already here moves only the hash: answer it as an arrival
|
|
464
|
+
window.addEventListener('hashchange', function () {
|
|
465
|
+
if (location.hash !== '#connSuggest' || $('connBody').hidden) return;
|
|
466
|
+
landed = false;
|
|
467
|
+
load();
|
|
468
|
+
});
|
|
438
469
|
bar.ready.then(function (me) {
|
|
439
470
|
if (!me) { showDoor(); return; }
|
|
440
471
|
load();
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"states": {
|
|
11
11
|
"out": { "auth": false, "actions": [["wait", 300]], "expect": { "visible": ["#door", "#signin", "#signinTop", "#projTrig"], "hidden": ["#connBody", "#who", "#loading", "#inactive", "#readFailed"] } },
|
|
12
12
|
"in": { "auth": true, "actions": [["wait", 500]], "expect": { "visible": ["#connBody", "#connAsks", "#connSuggest", "#sentH", "#askHandle", "#askBtn", "#who"], "hidden": ["#door", "#loading", "#inactive", "#readFailed", "#menuProfile"], "count": [["#incomingList .mineRow", 2], ["#connList .mineRow", 3], ["#suggestList .mineRow", 3], ["#outgoingList .mineRow", 1]], "text": [["#connCount", "3 connections."], ["#incomingList .mineRow:first-child .mineRow__name", "Priya Nair"], ["#incomingList .mineRow:first-child .connNote", "We were both on the Tidepool hall last month. Good working with you."], ["#suggestList .mineRow:first-child .mineRow__hint", "2 connections in common"], ["#outgoingList .mineRow:first-child .mineRow__hint", "Request sent"]] } },
|
|
13
|
+
"in-suggest-linked": { "auth": true, "url": "/connections#connSuggest", "actions": [["wait", 500]], "expect": { "visible": ["#connSuggest"], "hidden": ["#suggestNone"], "count": [["#suggestList .mineRow", 3]] } },
|
|
13
14
|
"in-profile-band": { "auth": true, "actions": [["wait", 400], ["click", "#who"], ["wait", 300]], "expect": { "visible": ["#menuProfile"], "hidden": ["#menuProjects"], "text": [["#bandWhoLogin", "builder"], ["#menuProfile [aria-current=\"page\"]", "Connections"]] } },
|
|
14
15
|
"in-ask-filled": { "auth": true, "actions": [["wait", 500], ["fill", "#askHandle", "nadia"], ["fill", "#askNote", "We met on the Tidepool hall."]], "expect": { "value": [["#askHandle", "nadia"], ["#askNote", "We met on the Tidepool hall."]] } }
|
|
15
16
|
},
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
</a>
|
|
59
59
|
</div>
|
|
60
60
|
<div class="barRight">
|
|
61
|
+
<!--apex-only:start--><button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button><!--apex-only:end-->
|
|
61
62
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
62
63
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from
|
|
63
64
|
GET /me. Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -66,6 +67,16 @@
|
|
|
66
67
|
</div>
|
|
67
68
|
</header>
|
|
68
69
|
|
|
70
|
+
<!--apex-only:start--><div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
71
|
+
<div class="bandIn">
|
|
72
|
+
<ul class="bandRow">
|
|
73
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
74
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
75
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
76
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
77
|
+
</ul>
|
|
78
|
+
</div>
|
|
79
|
+
</div><!--apex-only:end-->
|
|
69
80
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
70
81
|
<div class="bandIn">
|
|
71
82
|
<ul class="bandRow">
|
|
@@ -73,6 +84,7 @@
|
|
|
73
84
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
74
85
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
75
86
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
87
|
+
<!--apex-only:start--><li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li><!--apex-only:end-->
|
|
76
88
|
</ul>
|
|
77
89
|
</div>
|
|
78
90
|
</div>
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
</a>
|
|
134
134
|
</div>
|
|
135
135
|
<div class="barRight">
|
|
136
|
+
<button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
136
137
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
137
138
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from GET /me.
|
|
138
139
|
Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -141,6 +142,16 @@
|
|
|
141
142
|
</div>
|
|
142
143
|
</header>
|
|
143
144
|
|
|
145
|
+
<div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
146
|
+
<div class="bandIn">
|
|
147
|
+
<ul class="bandRow">
|
|
148
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
149
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
150
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
151
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
152
|
+
</ul>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
144
155
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
145
156
|
<div class="bandIn">
|
|
146
157
|
<ul class="bandRow">
|
|
@@ -148,6 +159,7 @@
|
|
|
148
159
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
149
160
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
150
161
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
162
|
+
<li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
151
163
|
</ul>
|
|
152
164
|
</div>
|
|
153
165
|
</div>
|
|
@@ -166,6 +166,12 @@ main:focus{outline:none;box-shadow:none}
|
|
|
166
166
|
.trig .cv{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:1.4;
|
|
167
167
|
stroke-linecap:round;stroke-linejoin:round;transition:transform .2s cubic-bezier(.2,.7,.3,1)}
|
|
168
168
|
.trig[aria-expanded="true"] .cv{transform:rotate(180deg)}
|
|
169
|
+
/* the Community menu (task 1003363), a trigger like Projects. Under 900 this bar has no
|
|
170
|
+
room for it (the New account pill and the chip), so its three items fold into the
|
|
171
|
+
Projects band as its last cells; above 900 those cells are not drawn */
|
|
172
|
+
.bandFold{display:none}
|
|
173
|
+
/* no global [hidden] rule on the landing: a signed-in-only fold cell stays down when the fold shows */
|
|
174
|
+
.bandFold[hidden]{display:none}
|
|
169
175
|
.whoSlot{display:inline-flex;align-items:center}
|
|
170
176
|
.who{gap:9px}
|
|
171
177
|
.who img{width:26px;height:26px;border-radius:var(--radius-pill);object-fit:cover;flex:none;border:1px solid var(--rule)}
|
|
@@ -501,6 +507,8 @@ body{
|
|
|
501
507
|
.barMark{min-width:44px;justify-content:center}
|
|
502
508
|
.mark-word{display:none}
|
|
503
509
|
.trig{font-size:13.5px}
|
|
510
|
+
.commTrig{display:none}
|
|
511
|
+
.bandFold{display:block}
|
|
504
512
|
.who-name{display:none}
|
|
505
513
|
.pill{min-height:42px;font-size:13.5px}
|
|
506
514
|
.signin,.newacct{padding:0 14px}
|
|
@@ -690,6 +698,7 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
690
698
|
</a>
|
|
691
699
|
</div>
|
|
692
700
|
<div class="barRight">
|
|
701
|
+
<!--apex-only:start--><button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button><!--apex-only:end-->
|
|
693
702
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
694
703
|
<!-- the identity slot: the sign-in door signed out; the chip (the profile trigger) once
|
|
695
704
|
the session resolves — swapped client-side, never a wrong-state flash -->
|
|
@@ -707,6 +716,16 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
707
716
|
component, two instances (the script at the foot of the page): Escape closes and returns focus
|
|
708
717
|
to the trigger, the arrows walk the items, Tab out closes, a click outside closes, opening one
|
|
709
718
|
closes the other. -->
|
|
719
|
+
<!--apex-only:start--><div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
720
|
+
<div class="bandIn">
|
|
721
|
+
<ul class="bandRow">
|
|
722
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
723
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
724
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
725
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
726
|
+
</ul>
|
|
727
|
+
</div>
|
|
728
|
+
</div><!--apex-only:end-->
|
|
710
729
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
711
730
|
<div class="bandIn">
|
|
712
731
|
<ul class="bandRow">
|
|
@@ -714,6 +733,7 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
714
733
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">sky project directory</span></li>
|
|
715
734
|
<li class="bandCell" id="mineCell" hidden><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
716
735
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">+ Create New Project</a><span class="bandC">fresh start/fresh idea</span></li>
|
|
736
|
+
<!--apex-only:start--><li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li><!--apex-only:end-->
|
|
717
737
|
</ul>
|
|
718
738
|
<!-- About and Docs are site pages, not project views: they live in the footer row with
|
|
719
739
|
Privacy / Terms / Contact (owner, 2026-08-28; task 1003332). -->
|
|
@@ -1036,9 +1056,10 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
1036
1056
|
chip.appendChild(cv);
|
|
1037
1057
|
slot.appendChild(chip);
|
|
1038
1058
|
wireTrigger(chip);
|
|
1039
|
-
/* a member sees the Your-projects cell of the Projects band */
|
|
1059
|
+
/* a member sees the Your-projects cell of the Projects band, and Builders you may know */
|
|
1040
1060
|
var mine = document.getElementById('mineCell');
|
|
1041
1061
|
if (mine) mine.hidden = false;
|
|
1062
|
+
document.querySelectorAll('.knowCell').forEach(function (c) { c.hidden = false; });
|
|
1042
1063
|
});
|
|
1043
1064
|
/* the sign-out anchor keeps its honest href; the click is the real POST */
|
|
1044
1065
|
var signout = document.querySelector('#menuProfile a.signout');
|
|
@@ -1085,7 +1106,7 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
|
|
|
1085
1106
|
if (!open) return;
|
|
1086
1107
|
if (ev.key === 'Escape') { closeMenus(); return; }
|
|
1087
1108
|
if (ev.key !== 'ArrowDown' && ev.key !== 'ArrowUp') return;
|
|
1088
|
-
var items = Array.prototype.filter.call(open.querySelectorAll('a'), function (a) { return !a.closest('[hidden]'); });
|
|
1109
|
+
var items = Array.prototype.filter.call(open.querySelectorAll('a'), function (a) { return !a.closest('[hidden]') && a.offsetParent !== null; });
|
|
1089
1110
|
if (!items.length) return;
|
|
1090
1111
|
var at = items.indexOf(document.activeElement);
|
|
1091
1112
|
ev.preventDefault();
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"expect": { "closed": "#menuProfile", "expanded": false } },
|
|
27
27
|
{ "name": "landing: the band deep-links the hub views; About and Docs are footer links (task 1003332)", "continue": true,
|
|
28
28
|
"steps": [["click", "#projTrig"], ["wait", 120]],
|
|
29
|
-
"expect": { "count": [["#menuProjects a",
|
|
29
|
+
"expect": { "count": [["#menuProjects a", 7], ["#menuProjects a[href=\"/community\"]", 1], ["#menuCommunity a", 3], ["#menuProjects a[href=\"/docs\"]", 0]], "href": [["#menuProjects .bandCell:nth-child(1) a", "/projects?view=map"], ["#menuProjects .bandCell:nth-child(2) a", "/projects?view=map&sub=table"], ["footer a[href=\"#about\"]", "#about"], ["footer a[href=\"/docs\"]", "/docs"]] } },
|
|
30
30
|
{ "name": "landing: #about exists", "continue": true,
|
|
31
31
|
"steps": [["press", "Escape"]],
|
|
32
32
|
"expect": { "count": [["#about", 1]] } },
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
</a>
|
|
89
89
|
</div>
|
|
90
90
|
<div class="barRight">
|
|
91
|
+
<button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
91
92
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
92
93
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from GET /me.
|
|
93
94
|
Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -96,6 +97,16 @@
|
|
|
96
97
|
</div>
|
|
97
98
|
</header>
|
|
98
99
|
|
|
100
|
+
<div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
101
|
+
<div class="bandIn">
|
|
102
|
+
<ul class="bandRow">
|
|
103
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
104
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
105
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
106
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
107
|
+
</ul>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
99
110
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
100
111
|
<div class="bandIn">
|
|
101
112
|
<ul class="bandRow">
|
|
@@ -103,6 +114,7 @@
|
|
|
103
114
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
104
115
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
105
116
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
117
|
+
<li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
106
118
|
</ul>
|
|
107
119
|
</div>
|
|
108
120
|
</div>
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
</a>
|
|
58
58
|
</div>
|
|
59
59
|
<div class="barRight">
|
|
60
|
+
<!--apex-only:start--><button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button><!--apex-only:end-->
|
|
60
61
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
61
62
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from
|
|
62
63
|
GET /me. Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -65,6 +66,16 @@
|
|
|
65
66
|
</div>
|
|
66
67
|
</header>
|
|
67
68
|
|
|
69
|
+
<!--apex-only:start--><div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
70
|
+
<div class="bandIn">
|
|
71
|
+
<ul class="bandRow">
|
|
72
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
73
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
74
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
75
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
76
|
+
</ul>
|
|
77
|
+
</div>
|
|
78
|
+
</div><!--apex-only:end-->
|
|
68
79
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
69
80
|
<div class="bandIn">
|
|
70
81
|
<ul class="bandRow">
|
|
@@ -72,6 +83,7 @@
|
|
|
72
83
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
73
84
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
74
85
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
86
|
+
<!--apex-only:start--><li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li><!--apex-only:end-->
|
|
75
87
|
</ul>
|
|
76
88
|
</div>
|
|
77
89
|
</div>
|
|
@@ -837,6 +837,7 @@ summary{min-height:24px;padding:3px 0;}
|
|
|
837
837
|
</div>
|
|
838
838
|
</div>
|
|
839
839
|
<div class="barRight">
|
|
840
|
+
<!--apex-only:start--><button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button><!--apex-only:end-->
|
|
840
841
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
841
842
|
<!-- the identity chip IS the profile trigger; renderWho fills it. Signed
|
|
842
843
|
out it does not exist and the sign-in door takes its slot. -->
|
|
@@ -854,6 +855,16 @@ summary{min-height:24px;padding:3px 0;}
|
|
|
854
855
|
a click outside closes, opening one closes the other. Plain links in a
|
|
855
856
|
disclosure (aria-expanded + aria-controls, no menu role), so what is
|
|
856
857
|
announced is what ships. ── -->
|
|
858
|
+
<!--apex-only:start--><div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
859
|
+
<div class="bandIn">
|
|
860
|
+
<ul class="bandRow">
|
|
861
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
862
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
863
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
864
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
865
|
+
</ul>
|
|
866
|
+
</div>
|
|
867
|
+
</div><!--apex-only:end-->
|
|
857
868
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
858
869
|
<div class="bandIn">
|
|
859
870
|
<ul class="bandRow">
|
|
@@ -863,6 +874,7 @@ summary{min-height:24px;padding:3px 0;}
|
|
|
863
874
|
<li class="bandCell"><a class="bandT" href="?view=map&sub=table" data-nav="map" data-sub="table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
864
875
|
<li class="bandCell"><a class="bandT" href="?view=mine" data-nav="mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
865
876
|
<li class="bandCell"><a class="bandT" href="?view=new" data-nav="new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
877
|
+
<!--apex-only:start--><li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li><!--apex-only:end-->
|
|
866
878
|
</ul>
|
|
867
879
|
<!-- About and Docs are site pages, not project views: they live in the
|
|
868
880
|
footer row with Privacy / Terms / Contact (owner, 2026-08-28; task 1003332). -->
|
|
@@ -3610,7 +3622,7 @@ summary{min-height:24px;padding:3px 0;}
|
|
|
3610
3622
|
}
|
|
3611
3623
|
if (ev.key === 'Escape') { closeMenus(); return; }
|
|
3612
3624
|
if (ev.key !== 'ArrowDown' && ev.key !== 'ArrowUp') return;
|
|
3613
|
-
var items = Array.prototype.filter.call(open.querySelectorAll('a'), function (a) { return !a.closest('[hidden]'); });
|
|
3625
|
+
var items = Array.prototype.filter.call(open.querySelectorAll('a'), function (a) { return !a.closest('[hidden]') && a.offsetParent !== null; });
|
|
3614
3626
|
if (!items.length) return;
|
|
3615
3627
|
var at = items.indexOf(document.activeElement);
|
|
3616
3628
|
ev.preventDefault();
|
|
@@ -11797,6 +11809,8 @@ summary{min-height:24px;padding:3px 0;}
|
|
|
11797
11809
|
/* every Your-projects item a band carries (§6 asked for querySelectorAll so
|
|
11798
11810
|
a second data-nav="mine" item could never become a signed-out leak) */
|
|
11799
11811
|
document.querySelectorAll('[data-nav="mine"]').forEach(function (a) { (a.closest('.bandCell') || a).hidden = !signedIn; });
|
|
11812
|
+
/* Builders you may know reads your own connections (task 1004256) */
|
|
11813
|
+
document.querySelectorAll('.knowCell').forEach(function (c) { c.hidden = !signedIn; });
|
|
11800
11814
|
$('onlyMine').closest('.switch').hidden = !signedIn;
|
|
11801
11815
|
if (!signedIn) closeMenus();
|
|
11802
11816
|
if (!signedIn && $('onlyMine').checked) { $('onlyMine').checked = false; applyMapFilter(); }
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
</a>
|
|
58
58
|
</div>
|
|
59
59
|
<div class="barRight">
|
|
60
|
+
<!--apex-only:start--><button class="trig commTrig" type="button" id="commTrig" data-menu="community" aria-expanded="false" aria-controls="menuCommunity">Community<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button><!--apex-only:end-->
|
|
60
61
|
<button class="trig" type="button" id="projTrig" data-menu="projects" aria-expanded="false" aria-controls="menuProjects">Projects<svg class="cv" viewBox="0 0 20 20" aria-hidden="true"><path d="m5.6 8 4.4 4.4L14.4 8"/></svg></button>
|
|
61
62
|
<!-- the identity chip IS the profile trigger; assets/hub-bar.js fills it from
|
|
62
63
|
GET /me. Signed out it stays hidden and the sign-in door takes its slot. -->
|
|
@@ -65,6 +66,16 @@
|
|
|
65
66
|
</div>
|
|
66
67
|
</header>
|
|
67
68
|
|
|
69
|
+
<!--apex-only:start--><div class="menuBand" id="menuCommunity" data-menu="community" hidden>
|
|
70
|
+
<div class="bandIn">
|
|
71
|
+
<ul class="bandRow">
|
|
72
|
+
<li class="bandCell"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li>
|
|
73
|
+
<li class="bandCell"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li>
|
|
74
|
+
<li class="bandCell"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li>
|
|
75
|
+
<li class="bandCell knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li>
|
|
76
|
+
</ul>
|
|
77
|
+
</div>
|
|
78
|
+
</div><!--apex-only:end-->
|
|
68
79
|
<div class="menuBand" id="menuProjects" data-menu="projects" hidden>
|
|
69
80
|
<div class="bandIn">
|
|
70
81
|
<ul class="bandRow">
|
|
@@ -72,6 +83,7 @@
|
|
|
72
83
|
<li class="bandCell"><a class="bandT" href="/projects?view=map&sub=table">Table</a><span class="bandC">the same projects as rows</span></li>
|
|
73
84
|
<li class="bandCell" id="mineCell"><a class="bandT" href="/projects?view=mine">Your projects</a><span class="bandC">the ones you own</span></li>
|
|
74
85
|
<li class="bandCell"><a class="bandT" href="/projects?view=new">New project</a><span class="bandC">five questions and a home</span></li>
|
|
86
|
+
<!--apex-only:start--><li class="bandCell bandFold"><a class="bandT" href="/community">Leaderboard</a><span class="bandC">who earned the most, across every project</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/find">Find a builder</a><span class="bandC">anyone building here, by name or role</span></li><li class="bandCell bandFold"><a class="bandT" href="/community/recruiters">Open to recruiters</a><span class="bandC">who is open to recruiting, for project owners</span></li><li class="bandCell bandFold knowCell" hidden><a class="bandT" href="/connections#connSuggest">Builders you may know</a><span class="bandC">connections or projects in common</span></li><!--apex-only:end-->
|
|
75
87
|
</ul>
|
|
76
88
|
</div>
|
|
77
89
|
</div>
|