@bongos/core 1.19.781 → 1.19.782
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 +33 -33
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +2 -0
- package/clients/bongos-client/index.cjs +2 -0
- package/clients/bongos-client/index.d.ts +3 -0
- package/clients/bongos-client/index.mjs +2 -0
- package/docs/api/openapi.json +50 -3
- package/docs/api-reference.md +3 -2
- package/docs/copy-inventory.md +29 -27
- package/docs/copy-registry.json +86 -68
- package/docs/module-api-changelog.md +2 -0
- package/modules/builder-settings/builder-needs.js +9 -3
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +2 -0
- package/modules/hall-ui/public/collab-lib.js +94 -2
- package/modules/hall-ui/public/collab.css +110 -5
- package/modules/hall-ui/public/collab.html +51 -37
- package/modules/hall-ui/public/collab.js +153 -60
- package/modules/hall-ui/public/shell.js +3 -1
- package/modules/lifecycle/help-requests.js +24 -2
- package/modules/lifecycle/routes/help-requests.js +11 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/src/module-api.js +1 -1
- package/tests/builder_needs.mjs +24 -0
- package/tests/collab_page.mjs +119 -0
- package/tests/hall_collab_world.mjs +7 -3
- package/tests/hall_nav.mjs +47 -0
- package/tests/help_requests.mjs +31 -0
- package/tests/social_mode.mjs +3 -1
package/docs/copy-registry.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"generator": "scripts/gds/copy-inventory.js",
|
|
4
4
|
"goal": 1000074,
|
|
5
5
|
"counts": {
|
|
6
|
-
"strings":
|
|
7
|
-
"unique_ids":
|
|
8
|
-
"certain":
|
|
6
|
+
"strings": 1773,
|
|
7
|
+
"unique_ids": 1532,
|
|
8
|
+
"certain": 1773,
|
|
9
9
|
"heuristic": 0,
|
|
10
10
|
"duplicate_ids": 167
|
|
11
11
|
},
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"builders-hall": {
|
|
14
14
|
"at": "modules/hall-ui/public",
|
|
15
15
|
"files": 82,
|
|
16
|
-
"strings":
|
|
16
|
+
"strings": 1283
|
|
17
17
|
},
|
|
18
18
|
"status-dashboard": {
|
|
19
19
|
"at": "modules/status-ui/public",
|
|
@@ -247,7 +247,7 @@
|
|
|
247
247
|
"modules/hall-ui/public/hall-render.js:275",
|
|
248
248
|
"modules/hall-ui/public/hall-render.js:346",
|
|
249
249
|
"modules/hall-ui/public/hall-render.js:415",
|
|
250
|
-
"modules/hall-ui/public/shell.js:
|
|
250
|
+
"modules/hall-ui/public/shell.js:418"
|
|
251
251
|
]
|
|
252
252
|
},
|
|
253
253
|
{
|
|
@@ -548,7 +548,7 @@
|
|
|
548
548
|
"text": "Asked {…}",
|
|
549
549
|
"occurrences": 2,
|
|
550
550
|
"at": [
|
|
551
|
-
"modules/hall-ui/public/collab.js:
|
|
551
|
+
"modules/hall-ui/public/collab.js:49",
|
|
552
552
|
"modules/hall-ui/public/watch.js:488"
|
|
553
553
|
]
|
|
554
554
|
},
|
|
@@ -1348,8 +1348,8 @@
|
|
|
1348
1348
|
"text": "Sign out",
|
|
1349
1349
|
"occurrences": 2,
|
|
1350
1350
|
"at": [
|
|
1351
|
-
"modules/hall-ui/public/shell.js:
|
|
1352
|
-
"modules/hall-ui/public/shell.js:
|
|
1351
|
+
"modules/hall-ui/public/shell.js:436",
|
|
1352
|
+
"modules/hall-ui/public/shell.js:593"
|
|
1353
1353
|
]
|
|
1354
1354
|
},
|
|
1355
1355
|
{
|
|
@@ -2257,7 +2257,7 @@
|
|
|
2257
2257
|
"surface": "builders-hall",
|
|
2258
2258
|
"text": "A {…} — you are a {…}. Mingle pairs across crafts.",
|
|
2259
2259
|
"file": "modules/hall-ui/public/collab.js",
|
|
2260
|
-
"line":
|
|
2260
|
+
"line": 278,
|
|
2261
2261
|
"origin": "js-markup",
|
|
2262
2262
|
"confidence": "certain"
|
|
2263
2263
|
},
|
|
@@ -2378,6 +2378,15 @@
|
|
|
2378
2378
|
"origin": "html-text",
|
|
2379
2379
|
"confidence": "certain"
|
|
2380
2380
|
},
|
|
2381
|
+
{
|
|
2382
|
+
"id": "9c34bccb06ef",
|
|
2383
|
+
"surface": "builders-hall",
|
|
2384
|
+
"text": "All open asks",
|
|
2385
|
+
"file": "modules/hall-ui/public/collab.html",
|
|
2386
|
+
"line": 64,
|
|
2387
|
+
"origin": "html-text",
|
|
2388
|
+
"confidence": "certain"
|
|
2389
|
+
},
|
|
2381
2390
|
{
|
|
2382
2391
|
"id": "bea7817e57a4",
|
|
2383
2392
|
"surface": "builders-hall",
|
|
@@ -2450,6 +2459,15 @@
|
|
|
2450
2459
|
"origin": "js-markup",
|
|
2451
2460
|
"confidence": "certain"
|
|
2452
2461
|
},
|
|
2462
|
+
{
|
|
2463
|
+
"id": "05761b08ec8f",
|
|
2464
|
+
"surface": "builders-hall",
|
|
2465
|
+
"text": "Answering is optional and declining costs nothing. Nobody is assigned by being asked.",
|
|
2466
|
+
"file": "modules/hall-ui/public/collab.html",
|
|
2467
|
+
"line": 90,
|
|
2468
|
+
"origin": "html-text",
|
|
2469
|
+
"confidence": "certain"
|
|
2470
|
+
},
|
|
2453
2471
|
{
|
|
2454
2472
|
"id": "52ed0e2e3470",
|
|
2455
2473
|
"surface": "builders-hall",
|
|
@@ -2581,7 +2599,7 @@
|
|
|
2581
2599
|
"surface": "builders-hall",
|
|
2582
2600
|
"text": "Asked of you",
|
|
2583
2601
|
"file": "modules/hall-ui/public/collab.html",
|
|
2584
|
-
"line":
|
|
2602
|
+
"line": 41,
|
|
2585
2603
|
"origin": "html-text",
|
|
2586
2604
|
"confidence": "certain"
|
|
2587
2605
|
},
|
|
@@ -2590,7 +2608,7 @@
|
|
|
2590
2608
|
"surface": "builders-hall",
|
|
2591
2609
|
"text": "Asked {…}",
|
|
2592
2610
|
"file": "modules/hall-ui/public/collab.js",
|
|
2593
|
-
"line":
|
|
2611
|
+
"line": 49,
|
|
2594
2612
|
"origin": "js-markup",
|
|
2595
2613
|
"confidence": "certain"
|
|
2596
2614
|
},
|
|
@@ -3769,7 +3787,7 @@
|
|
|
3769
3787
|
"surface": "builders-hall",
|
|
3770
3788
|
"text": "Could not load requests.",
|
|
3771
3789
|
"file": "modules/hall-ui/public/collab.js",
|
|
3772
|
-
"line":
|
|
3790
|
+
"line": 367,
|
|
3773
3791
|
"origin": "js-text-assign",
|
|
3774
3792
|
"confidence": "certain"
|
|
3775
3793
|
},
|
|
@@ -5866,7 +5884,7 @@
|
|
|
5866
5884
|
"surface": "builders-hall",
|
|
5867
5885
|
"text": "Jump to a page or record",
|
|
5868
5886
|
"file": "modules/hall-ui/public/shell.js",
|
|
5869
|
-
"line":
|
|
5887
|
+
"line": 457,
|
|
5870
5888
|
"origin": "js-markup",
|
|
5871
5889
|
"confidence": "certain"
|
|
5872
5890
|
},
|
|
@@ -5875,7 +5893,7 @@
|
|
|
5875
5893
|
"surface": "builders-hall",
|
|
5876
5894
|
"text": "Jump to…",
|
|
5877
5895
|
"file": "modules/hall-ui/public/shell.js",
|
|
5878
|
-
"line":
|
|
5896
|
+
"line": 459,
|
|
5879
5897
|
"origin": "js-markup",
|
|
5880
5898
|
"confidence": "certain"
|
|
5881
5899
|
},
|
|
@@ -6366,11 +6384,11 @@
|
|
|
6366
6384
|
"confidence": "certain"
|
|
6367
6385
|
},
|
|
6368
6386
|
{
|
|
6369
|
-
"id": "
|
|
6387
|
+
"id": "d3fa05c5e3fe",
|
|
6370
6388
|
"surface": "builders-hall",
|
|
6371
|
-
"text": "Mingle pairs you with someone from
|
|
6389
|
+
"text": "Mingle pairs you with someone from another craft. Saying no costs nothing.",
|
|
6372
6390
|
"file": "modules/hall-ui/public/collab.html",
|
|
6373
|
-
"line":
|
|
6391
|
+
"line": 80,
|
|
6374
6392
|
"origin": "html-text",
|
|
6375
6393
|
"confidence": "certain"
|
|
6376
6394
|
},
|
|
@@ -6717,11 +6735,11 @@
|
|
|
6717
6735
|
"confidence": "certain"
|
|
6718
6736
|
},
|
|
6719
6737
|
{
|
|
6720
|
-
"id": "
|
|
6738
|
+
"id": "139ec3636c22",
|
|
6721
6739
|
"surface": "builders-hall",
|
|
6722
|
-
"text": "No introductions right now.
|
|
6740
|
+
"text": "No introductions right now. One appears here when a pairing round runs.",
|
|
6723
6741
|
"file": "modules/hall-ui/public/collab.html",
|
|
6724
|
-
"line":
|
|
6742
|
+
"line": 83,
|
|
6725
6743
|
"origin": "html-text",
|
|
6726
6744
|
"confidence": "certain"
|
|
6727
6745
|
},
|
|
@@ -6851,6 +6869,24 @@
|
|
|
6851
6869
|
"origin": "js-markup",
|
|
6852
6870
|
"confidence": "certain"
|
|
6853
6871
|
},
|
|
6872
|
+
{
|
|
6873
|
+
"id": "1967d2176f2e",
|
|
6874
|
+
"surface": "builders-hall",
|
|
6875
|
+
"text": "Nobody has an open ask right now.",
|
|
6876
|
+
"file": "modules/hall-ui/public/collab.html",
|
|
6877
|
+
"line": 68,
|
|
6878
|
+
"origin": "html-text",
|
|
6879
|
+
"confidence": "certain"
|
|
6880
|
+
},
|
|
6881
|
+
{
|
|
6882
|
+
"id": "b54cb5ce7f73",
|
|
6883
|
+
"surface": "builders-hall",
|
|
6884
|
+
"text": "Nobody is waiting on you. Requests reach you by craft —",
|
|
6885
|
+
"file": "modules/hall-ui/public/collab.html",
|
|
6886
|
+
"line": 46,
|
|
6887
|
+
"origin": "html-text",
|
|
6888
|
+
"confidence": "certain"
|
|
6889
|
+
},
|
|
6854
6890
|
{
|
|
6855
6891
|
"id": "91c409a4aea5",
|
|
6856
6892
|
"surface": "builders-hall",
|
|
@@ -6892,7 +6928,7 @@
|
|
|
6892
6928
|
"surface": "builders-hall",
|
|
6893
6929
|
"text": "Not now",
|
|
6894
6930
|
"file": "modules/hall-ui/public/collab.js",
|
|
6895
|
-
"line":
|
|
6931
|
+
"line": 278,
|
|
6896
6932
|
"origin": "js-markup",
|
|
6897
6933
|
"confidence": "certain"
|
|
6898
6934
|
},
|
|
@@ -6986,15 +7022,6 @@
|
|
|
6986
7022
|
"origin": "js-markup",
|
|
6987
7023
|
"confidence": "certain"
|
|
6988
7024
|
},
|
|
6989
|
-
{
|
|
6990
|
-
"id": "2c6e0dfbd781",
|
|
6991
|
-
"surface": "builders-hall",
|
|
6992
|
-
"text": "Nothing is waiting on you. Requests reach you by your craft — set yours in",
|
|
6993
|
-
"file": "modules/hall-ui/public/collab.html",
|
|
6994
|
-
"line": 44,
|
|
6995
|
-
"origin": "html-text",
|
|
6996
|
-
"confidence": "certain"
|
|
6997
|
-
},
|
|
6998
7025
|
{
|
|
6999
7026
|
"id": "2ec0fbb20a42",
|
|
7000
7027
|
"surface": "builders-hall",
|
|
@@ -7148,15 +7175,6 @@
|
|
|
7148
7175
|
"origin": "js-notice",
|
|
7149
7176
|
"confidence": "certain"
|
|
7150
7177
|
},
|
|
7151
|
-
{
|
|
7152
|
-
"id": "0c471e06cfc1",
|
|
7153
|
-
"surface": "builders-hall",
|
|
7154
|
-
"text": "Only you can settle your own request — mark it answered when someone helped, or withdraw it when you no longer need it.",
|
|
7155
|
-
"file": "modules/hall-ui/public/collab.html",
|
|
7156
|
-
"line": 70,
|
|
7157
|
-
"origin": "html-text",
|
|
7158
|
-
"confidence": "certain"
|
|
7159
|
-
},
|
|
7160
7178
|
{
|
|
7161
7179
|
"id": "261d123970e8",
|
|
7162
7180
|
"surface": "builders-hall",
|
|
@@ -7189,7 +7207,7 @@
|
|
|
7189
7207
|
"surface": "builders-hall",
|
|
7190
7208
|
"text": "Open navigation",
|
|
7191
7209
|
"file": "modules/hall-ui/public/shell.js",
|
|
7192
|
-
"line":
|
|
7210
|
+
"line": 448,
|
|
7193
7211
|
"origin": "js-markup",
|
|
7194
7212
|
"confidence": "certain"
|
|
7195
7213
|
},
|
|
@@ -8201,15 +8219,6 @@
|
|
|
8201
8219
|
"origin": "js-notice",
|
|
8202
8220
|
"confidence": "certain"
|
|
8203
8221
|
},
|
|
8204
|
-
{
|
|
8205
|
-
"id": "61f862ffb9eb",
|
|
8206
|
-
"surface": "builders-hall",
|
|
8207
|
-
"text": "Requests addressed to your craft, or to you by name. Answering is optional and declining costs nothing — nobody is assigned by being asked.",
|
|
8208
|
-
"file": "modules/hall-ui/public/collab.html",
|
|
8209
|
-
"line": 38,
|
|
8210
|
-
"origin": "html-text",
|
|
8211
|
-
"confidence": "certain"
|
|
8212
|
-
},
|
|
8213
8222
|
{
|
|
8214
8223
|
"id": "a030881168b5",
|
|
8215
8224
|
"surface": "builders-hall",
|
|
@@ -8413,7 +8422,7 @@
|
|
|
8413
8422
|
"surface": "builders-hall",
|
|
8414
8423
|
"text": "Say yes",
|
|
8415
8424
|
"file": "modules/hall-ui/public/collab.js",
|
|
8416
|
-
"line":
|
|
8425
|
+
"line": 278,
|
|
8417
8426
|
"origin": "js-markup",
|
|
8418
8427
|
"confidence": "certain"
|
|
8419
8428
|
},
|
|
@@ -8705,6 +8714,15 @@
|
|
|
8705
8714
|
"origin": "js-markup",
|
|
8706
8715
|
"confidence": "certain"
|
|
8707
8716
|
},
|
|
8717
|
+
{
|
|
8718
|
+
"id": "6dde12eb0c78",
|
|
8719
|
+
"surface": "builders-hall",
|
|
8720
|
+
"text": "Show all {…}",
|
|
8721
|
+
"file": "modules/hall-ui/public/collab.js",
|
|
8722
|
+
"line": 211,
|
|
8723
|
+
"origin": "js-text-assign",
|
|
8724
|
+
"confidence": "certain"
|
|
8725
|
+
},
|
|
8708
8726
|
{
|
|
8709
8727
|
"id": "14d32a35c15f",
|
|
8710
8728
|
"surface": "builders-hall",
|
|
@@ -8827,7 +8845,7 @@
|
|
|
8827
8845
|
"surface": "builders-hall",
|
|
8828
8846
|
"text": "Sign in with GitHub",
|
|
8829
8847
|
"file": "modules/hall-ui/public/shell.js",
|
|
8830
|
-
"line":
|
|
8848
|
+
"line": 418,
|
|
8831
8849
|
"origin": "js-markup",
|
|
8832
8850
|
"confidence": "certain"
|
|
8833
8851
|
},
|
|
@@ -8836,7 +8854,7 @@
|
|
|
8836
8854
|
"surface": "builders-hall",
|
|
8837
8855
|
"text": "Sign out",
|
|
8838
8856
|
"file": "modules/hall-ui/public/shell.js",
|
|
8839
|
-
"line":
|
|
8857
|
+
"line": 436,
|
|
8840
8858
|
"origin": "js-markup",
|
|
8841
8859
|
"confidence": "certain"
|
|
8842
8860
|
},
|
|
@@ -8845,7 +8863,7 @@
|
|
|
8845
8863
|
"surface": "builders-hall",
|
|
8846
8864
|
"text": "Sign out",
|
|
8847
8865
|
"file": "modules/hall-ui/public/shell.js",
|
|
8848
|
-
"line":
|
|
8866
|
+
"line": 593,
|
|
8849
8867
|
"origin": "js-markup",
|
|
8850
8868
|
"confidence": "certain"
|
|
8851
8869
|
},
|
|
@@ -8872,7 +8890,7 @@
|
|
|
8872
8890
|
"surface": "builders-hall",
|
|
8873
8891
|
"text": "Skip to content",
|
|
8874
8892
|
"file": "modules/hall-ui/public/shell.js",
|
|
8875
|
-
"line":
|
|
8893
|
+
"line": 584,
|
|
8876
8894
|
"origin": "js-text-assign",
|
|
8877
8895
|
"confidence": "certain"
|
|
8878
8896
|
},
|
|
@@ -8899,7 +8917,7 @@
|
|
|
8899
8917
|
"surface": "builders-hall",
|
|
8900
8918
|
"text": "Someone helped",
|
|
8901
8919
|
"file": "modules/hall-ui/public/collab.js",
|
|
8902
|
-
"line":
|
|
8920
|
+
"line": 161,
|
|
8903
8921
|
"origin": "js-markup",
|
|
8904
8922
|
"confidence": "certain"
|
|
8905
8923
|
},
|
|
@@ -9052,7 +9070,7 @@
|
|
|
9052
9070
|
"surface": "builders-hall",
|
|
9053
9071
|
"text": "Switch theme",
|
|
9054
9072
|
"file": "modules/hall-ui/public/shell.js",
|
|
9055
|
-
"line":
|
|
9073
|
+
"line": 463,
|
|
9056
9074
|
"origin": "js-markup",
|
|
9057
9075
|
"confidence": "certain"
|
|
9058
9076
|
},
|
|
@@ -9214,7 +9232,7 @@
|
|
|
9214
9232
|
"surface": "builders-hall",
|
|
9215
9233
|
"text": "Text size",
|
|
9216
9234
|
"file": "modules/hall-ui/public/shell.js",
|
|
9217
|
-
"line":
|
|
9235
|
+
"line": 462,
|
|
9218
9236
|
"origin": "js-markup",
|
|
9219
9237
|
"confidence": "certain"
|
|
9220
9238
|
},
|
|
@@ -10699,7 +10717,7 @@
|
|
|
10699
10717
|
"surface": "builders-hall",
|
|
10700
10718
|
"text": "You have no open asks.",
|
|
10701
10719
|
"file": "modules/hall-ui/public/collab.html",
|
|
10702
|
-
"line":
|
|
10720
|
+
"line": 57,
|
|
10703
10721
|
"origin": "html-text",
|
|
10704
10722
|
"confidence": "certain"
|
|
10705
10723
|
},
|
|
@@ -10753,7 +10771,7 @@
|
|
|
10753
10771
|
"surface": "builders-hall",
|
|
10754
10772
|
"text": "Your asks",
|
|
10755
10773
|
"file": "modules/hall-ui/public/collab.html",
|
|
10756
|
-
"line":
|
|
10774
|
+
"line": 54,
|
|
10757
10775
|
"origin": "html-text",
|
|
10758
10776
|
"confidence": "certain"
|
|
10759
10777
|
},
|
|
@@ -11576,15 +11594,6 @@
|
|
|
11576
11594
|
"origin": "js-markup",
|
|
11577
11595
|
"confidence": "certain"
|
|
11578
11596
|
},
|
|
11579
|
-
{
|
|
11580
|
-
"id": "2123a62d69e3",
|
|
11581
|
-
"surface": "builders-hall",
|
|
11582
|
-
"text": "if this stays empty.",
|
|
11583
|
-
"file": "modules/hall-ui/public/collab.html",
|
|
11584
|
-
"line": 45,
|
|
11585
|
-
"origin": "html-text",
|
|
11586
|
-
"confidence": "certain"
|
|
11587
|
-
},
|
|
11588
11597
|
{
|
|
11589
11598
|
"id": "b2b399fdd6a4",
|
|
11590
11599
|
"surface": "builders-hall",
|
|
@@ -12107,6 +12116,15 @@
|
|
|
12107
12116
|
"origin": "js-markup",
|
|
12108
12117
|
"confidence": "certain"
|
|
12109
12118
|
},
|
|
12119
|
+
{
|
|
12120
|
+
"id": "a13ee0cde7f2",
|
|
12121
|
+
"surface": "builders-hall",
|
|
12122
|
+
"text": "set yours in Settings",
|
|
12123
|
+
"file": "modules/hall-ui/public/collab.html",
|
|
12124
|
+
"line": 47,
|
|
12125
|
+
"origin": "html-text",
|
|
12126
|
+
"confidence": "certain"
|
|
12127
|
+
},
|
|
12110
12128
|
{
|
|
12111
12129
|
"id": "a6f55d7aa6f7",
|
|
12112
12130
|
"surface": "builders-hall",
|
|
@@ -2036,5 +2036,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2036
2036
|
landed since 1.19.779 with no explicit bump. run 35147229585. (task 1002620)
|
|
2037
2037
|
1.19.781 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2038
2038
|
landed since 1.19.780 with no explicit bump. run 35150109281. (task 1002620)
|
|
2039
|
+
1.19.782 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2040
|
+
landed since 1.19.781 with no explicit bump. run 35150844959. (task 1002620)
|
|
2039
2041
|
---------------------------------------------------------------------------
|
|
2040
2042
|
```
|
|
@@ -110,12 +110,18 @@ function helpRequestsNeed(ctx) {
|
|
|
110
110
|
const verb = n === 1 ? 'has' : 'have';
|
|
111
111
|
return {
|
|
112
112
|
id: 'help_requests',
|
|
113
|
+
// The number, machine-readable (task 1003942) — the field boardVotesNeed
|
|
114
|
+
// already carries, and the whole badge contract: shell.js names this need's
|
|
115
|
+
// id on the Collab nav item and reads this count into the badge.
|
|
116
|
+
count: n,
|
|
113
117
|
title: n === 1 ? 'Someone asked for your help' : 'People asked for your help',
|
|
114
118
|
what: 'A builder who is stuck addressed a request to your craft, or to you by name.',
|
|
115
119
|
state: 'action_needed',
|
|
116
120
|
severity: 'info',
|
|
117
121
|
message: `${people} ${verb} asked for help you can give. Answering is optional and declining costs nothing.`,
|
|
118
|
-
|
|
122
|
+
// Collab is its own page since task 1003172; the retired '/#/collab' hash
|
|
123
|
+
// form pointed at a view the index no longer routes.
|
|
124
|
+
action: { label: n === 1 ? 'See the request' : 'See the requests', href: '/collab' },
|
|
119
125
|
};
|
|
120
126
|
}
|
|
121
127
|
|
|
@@ -152,7 +158,7 @@ function taskRecommendationsNeed(ctx) {
|
|
|
152
158
|
state: 'action_needed',
|
|
153
159
|
severity: 'info',
|
|
154
160
|
message: `${subject} ${verb} recommended to you. Nothing has been assigned — you would still claim it yourself, and declining costs nothing.`,
|
|
155
|
-
action: { label: n === 1 ? 'See the recommendation' : 'See the recommendations', href: '
|
|
161
|
+
action: { label: n === 1 ? 'See the recommendation' : 'See the recommendations', href: '/collab' },
|
|
156
162
|
};
|
|
157
163
|
}
|
|
158
164
|
|
|
@@ -230,7 +236,7 @@ function mingleIntroductionsNeed(ctx) {
|
|
|
230
236
|
severity: 'info',
|
|
231
237
|
message: `${subject} waiting on you. Saying no costs nothing at all — no rank, no karma, no streak, `
|
|
232
238
|
+ 'and it does not change how often you are paired again.',
|
|
233
|
-
action: { label: n === 1 ? 'See the introduction' : 'See the introductions', href: '
|
|
239
|
+
action: { label: n === 1 ? 'See the introduction' : 'See the introductions', href: '/collab' },
|
|
234
240
|
};
|
|
235
241
|
}
|
|
236
242
|
|
|
@@ -468,6 +468,8 @@ function createClient(opts = {}) {
|
|
|
468
468
|
getHealthz: (args) => request("GET", "/healthz", { hasBody: false }, args),
|
|
469
469
|
},
|
|
470
470
|
"helpRequests": {
|
|
471
|
+
// GET /help-requests — rank: any-builder — GET /help-requests
|
|
472
|
+
getHelpRequests: (args) => request("GET", "/help-requests", { hasBody: false }, args),
|
|
471
473
|
// POST /help-requests — rank: any-builder — POST /help-requests
|
|
472
474
|
postHelpRequests: (args) => request("POST", "/help-requests", { hasBody: true }, args),
|
|
473
475
|
// PATCH /help-requests/{id} — rank: any-builder — PATCH /help-requests/:id
|
|
@@ -128,10 +128,102 @@
|
|
|
128
128
|
return { id: 'other', label: 'asked' };
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
// ---- the FACES (task 1003942, owner report: "doesn't feel collaborative") ----
|
|
132
|
+
//
|
|
133
|
+
// A board of builders reaching builders should read as people before it reads
|
|
134
|
+
// as prose, so every row now leads with a face and the top strip stacks the
|
|
135
|
+
// faces of everyone waiting. These are the pure halves: which person a row
|
|
136
|
+
// leads with, what to draw when there is no picture, and the figure strip's
|
|
137
|
+
// numbers. collab.js only turns the result into markup.
|
|
138
|
+
|
|
139
|
+
// Defence in depth on an avatar src (roster.js's rule): escaping alone cannot
|
|
140
|
+
// stop a non-http scheme reaching an attribute the browser resolves, so a src
|
|
141
|
+
// this page did not vouch for renders as the initial instead.
|
|
142
|
+
function httpUrl(u) {
|
|
143
|
+
return /^https?:\/\//i.test(String(u || '')) ? String(u) : null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// The letter a faceless person shows: the first character of their name,
|
|
147
|
+
// uppercased, with a leading @ or # dropped. Never empty — '?' stands in.
|
|
148
|
+
function initialOf(name) {
|
|
149
|
+
var n = String(name == null ? '' : name).replace(/^[@#]/, '').trim();
|
|
150
|
+
return (n.charAt(0) || '?').toUpperCase();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// The person a row LEADS with. Incoming ('in') is always the asker — the
|
|
154
|
+
// human waiting on an answer. Outgoing ('out') is who you asked: the one
|
|
155
|
+
// person on a by-name ask, else the craft, drawn as a lettered disc so a craft
|
|
156
|
+
// ask never borrows a person's face. Same dir contract as directionLine.
|
|
157
|
+
function faceOf(req, dir) {
|
|
158
|
+
if (!req) return null;
|
|
159
|
+
if (dir === 'out') {
|
|
160
|
+
if (req.needs_builder_id != null) {
|
|
161
|
+
var to = req.needs_builder_name || req.needs_builder_login || '';
|
|
162
|
+
return {
|
|
163
|
+
kind: 'person', id: req.needs_builder_id, name: to,
|
|
164
|
+
avatar: httpUrl(req.needs_builder_avatar_url), initial: initialOf(to),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
var craft = req.needs_craft ? String(req.needs_craft) : '';
|
|
168
|
+
return { kind: 'craft', id: null, name: craft ? craft + 's' : 'anyone', avatar: null, initial: craft ? initialOf(craft) : '?' };
|
|
169
|
+
}
|
|
170
|
+
var who = askerOf(req);
|
|
171
|
+
return {
|
|
172
|
+
kind: 'person', id: req.requested_by != null ? req.requested_by : null, name: who,
|
|
173
|
+
avatar: httpUrl(req.requested_by_avatar_url), initial: initialOf(who),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// The DISTINCT people asking, in list order — the face stack in the top strip.
|
|
178
|
+
// Two asks from one person are one face; keyed by id when the server sent one,
|
|
179
|
+
// by name otherwise, so an older server still dedupes.
|
|
180
|
+
function askers(rows) {
|
|
181
|
+
var seen = {};
|
|
182
|
+
var out = [];
|
|
183
|
+
for (var i = 0; i < (rows || []).length; i += 1) {
|
|
184
|
+
var f = faceOf(rows[i], 'in');
|
|
185
|
+
if (!f) continue;
|
|
186
|
+
var key = f.id != null ? 'id:' + f.id : 'name:' + f.name;
|
|
187
|
+
if (seen[key]) continue;
|
|
188
|
+
seen[key] = true;
|
|
189
|
+
out.push(f);
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Newest first — the order the three-block board reads in (owner direction,
|
|
195
|
+
// task 1003942: "only show the three most recent, then expand"). The ageing
|
|
196
|
+
// criterion is still met by the band on every row; this is a display order,
|
|
197
|
+
// and the oldest-first comparator stays for the callers that want risk first.
|
|
198
|
+
function byNewestFirst(a, b) {
|
|
199
|
+
return byAgeOldestFirst(b, a);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// The first N rows are shown, the rest wait behind "show all": a pure split so
|
|
203
|
+
// the count on the button and the rows it reveals come from one place.
|
|
204
|
+
function splitShown(rows, n) {
|
|
205
|
+
var list = rows || [];
|
|
206
|
+
var cap = typeof n === 'number' && n >= 0 ? n : list.length;
|
|
207
|
+
return { shown: list.slice(0, cap), hidden: list.slice(cap) };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// The THIRD-PERSON line, for the board of everyone's asks: neither "you" nor
|
|
211
|
+
// "asked you". "Gamma asked builders" / "Alpha asked Beta by name".
|
|
212
|
+
function boardLine(req) {
|
|
213
|
+
if (!req) return '';
|
|
214
|
+
var who = askerOf(req) || 'Someone';
|
|
215
|
+
if (req.needs_builder_id != null) {
|
|
216
|
+
var to = req.needs_builder_name || req.needs_builder_login;
|
|
217
|
+
return to ? who + ' asked ' + to + ' by name' : who + ' asked one person';
|
|
218
|
+
}
|
|
219
|
+
return req.needs_craft ? who + ' asked ' + req.needs_craft + 's' : who + ' asked';
|
|
220
|
+
}
|
|
221
|
+
|
|
131
222
|
window.OTBCollabLib = {
|
|
132
|
-
BANDS: BANDS, ageBand: ageBand, byAgeOldestFirst: byAgeOldestFirst,
|
|
223
|
+
BANDS: BANDS, ageBand: ageBand, byAgeOldestFirst: byAgeOldestFirst, byNewestFirst: byNewestFirst,
|
|
133
224
|
askerOf: askerOf, contextOf: contextOf,
|
|
134
|
-
directionLine: directionLine,
|
|
225
|
+
directionLine: directionLine, boardLine: boardLine,
|
|
135
226
|
titleOf: titleOf, groupOf: groupOf,
|
|
227
|
+
httpUrl: httpUrl, initialOf: initialOf, faceOf: faceOf, askers: askers, splitShown: splitShown,
|
|
136
228
|
};
|
|
137
229
|
})();
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/* modules/hall-ui/public/collab.css — the Collab page (task 1003172 / C02),
|
|
2
|
-
rebuilt on the hall's row archetype by task 1003471
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
rebuilt on the hall's row archetype by task 1003471, and made a THREE-BLOCK
|
|
3
|
+
room of people by task 1003942 (owner direction: "way too text heavy, doesn't
|
|
4
|
+
feel collaborative" — asked of you left, your asks right, every open ask
|
|
5
|
+
below, each condensed to the newest three with a show-all). The panel is the
|
|
6
|
+
shell's .scroll, the two-up is the shell's .view-zone--band, the row is
|
|
7
|
+
oversight.css's .ov-row--lead (a face, then the words, then the state), the
|
|
8
|
+
age is a .fact-pill, the context a .fact-chip, the expander the shell's
|
|
9
|
+
.btn-ghost. This sheet holds only what Collab has and no other page does: the
|
|
10
|
+
colour of each age band, the faces, the block head, the lit personal call, and
|
|
11
|
+
the foot.
|
|
6
12
|
Tokens only from style.css's real set: inventing one renders as nothing,
|
|
7
13
|
which is how copy-desk.css once ended up with invisible fallbacks (idea
|
|
8
|
-
1000821).
|
|
14
|
+
1000821). Every colour here is a var() of the fifteen or the hall's measured
|
|
15
|
+
status vocabulary, so the dark tier needs no twin in this file. */
|
|
9
16
|
|
|
10
17
|
/* THE AGEING SIGNAL. The criterion asks that a request nobody takes be visibly
|
|
11
18
|
aging rather than silently dead — so the age is a state pill in the row's
|
|
@@ -18,3 +25,101 @@
|
|
|
18
25
|
.cb-age--waiting { color: var(--ink-soft); }
|
|
19
26
|
.cb-age--aging { color: var(--warn); }
|
|
20
27
|
.cb-age--stale { color: var(--danger); font-weight: 600; }
|
|
28
|
+
|
|
29
|
+
/* ---- the blocks ------------------------------------------------------------------
|
|
30
|
+
The top band is the shell's two-up grid (it stacks to one column at the
|
|
31
|
+
shell's phone breakpoint). A block is the shell's panel with a head row: the
|
|
32
|
+
heading, its count in mono, and the faces of whoever is asking on the right. */
|
|
33
|
+
.cb-band { margin: 0 0 var(--sp-md); }
|
|
34
|
+
.cb-block__head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 6px; }
|
|
35
|
+
.cb-block__head .scroll__h { margin: 0; }
|
|
36
|
+
.cb-block__n {
|
|
37
|
+
font-family: var(--font-mono);
|
|
38
|
+
font-size: 13px;
|
|
39
|
+
font-weight: 400;
|
|
40
|
+
letter-spacing: 0;
|
|
41
|
+
color: var(--ink-faint);
|
|
42
|
+
font-variant-numeric: tabular-nums;
|
|
43
|
+
margin-left: 6px;
|
|
44
|
+
}
|
|
45
|
+
.cb-block__head .cb-faces { margin-left: auto; }
|
|
46
|
+
|
|
47
|
+
/* "Show all N" / "Show fewer": the shell's ghost pill, on its own line under
|
|
48
|
+
the rows, so the condensed block ends on its door to the rest. */
|
|
49
|
+
.cb-more { margin-top: 12px; }
|
|
50
|
+
|
|
51
|
+
/* ---- the face -----------------------------------------------------------------
|
|
52
|
+
A row leads with WHO: a 36px disc, the picture when the server sent one, the
|
|
53
|
+
initial on the glass when it did not (people.css's .dir-avatar, at the row's
|
|
54
|
+
size). A craft ask wears the craft's letter in the label face, so it never
|
|
55
|
+
passes for a person. Decorative — the name beside it is the door. */
|
|
56
|
+
.cb-face {
|
|
57
|
+
width: 36px; height: 36px; flex: none;
|
|
58
|
+
border-radius: 50%;
|
|
59
|
+
object-fit: cover;
|
|
60
|
+
background: var(--skeleton);
|
|
61
|
+
border: 1px solid var(--rule);
|
|
62
|
+
margin-top: 1px;
|
|
63
|
+
}
|
|
64
|
+
.cb-face--initial {
|
|
65
|
+
display: inline-grid; place-items: center;
|
|
66
|
+
font-size: 14px; font-weight: 500; line-height: 1;
|
|
67
|
+
color: var(--ink-soft);
|
|
68
|
+
background: var(--glass-strong);
|
|
69
|
+
}
|
|
70
|
+
.cb-face--craft {
|
|
71
|
+
font-family: var(--label-face);
|
|
72
|
+
font-size: 12px;
|
|
73
|
+
letter-spacing: 0;
|
|
74
|
+
color: var(--ink-faint);
|
|
75
|
+
background: none;
|
|
76
|
+
border-style: dashed;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* The stack of everyone asking: 24px faces at -7px overlap, each ringed in the
|
|
80
|
+
panel ground (the poster card's face-row grammar). */
|
|
81
|
+
.cb-faces { display: inline-flex; align-items: center; }
|
|
82
|
+
.cb-faces .cb-face {
|
|
83
|
+
width: 24px; height: 24px;
|
|
84
|
+
margin: 0 0 0 -7px;
|
|
85
|
+
border: 2px solid var(--bg-card);
|
|
86
|
+
font-size: 10px;
|
|
87
|
+
}
|
|
88
|
+
.cb-faces .cb-face:first-child { margin-left: 0; }
|
|
89
|
+
.cb-faces .cb-face--initial { background: var(--glass-strong); }
|
|
90
|
+
|
|
91
|
+
/* ---- the personal call ------------------------------------------------------------
|
|
92
|
+
An ask addressed to you BY NAME is the one live thing on the board — the
|
|
93
|
+
personal call this reader owes an answer — so its direction line takes the
|
|
94
|
+
accent ink. Accent goes only on what is live, and this is. */
|
|
95
|
+
.cb-row--live .ov-row__facts > .ov-fact { color: var(--accent-ink); }
|
|
96
|
+
|
|
97
|
+
/* ---- the rows, as people -------------------------------------------------------
|
|
98
|
+
The archetype's --lead grid puts the face in its own column. A row lights on
|
|
99
|
+
hover with the glass the family's button rows use, so the board feels awake
|
|
100
|
+
without any motion; the Kill Switch has nothing to kill here. */
|
|
101
|
+
.cb-row { padding-left: 10px; padding-right: 10px; margin: 0 -10px; border-radius: var(--radius-sm); }
|
|
102
|
+
.cb-row:hover { background: var(--glass); }
|
|
103
|
+
.cb-row .ov-row__facts a { color: var(--accent-ink); }
|
|
104
|
+
/* Inside the two condensed blocks a row has half the page: the state and the
|
|
105
|
+
actions drop UNDER the words as one line (the archetype's own phone shape),
|
|
106
|
+
the date yields to the age pill, and the two-up itself becomes one column
|
|
107
|
+
before the shell's phone breakpoint, at the width where two half-rows stop
|
|
108
|
+
holding a sentence. The wide block below keeps the archetype's two columns. */
|
|
109
|
+
.cb-band .ov-row--lead { grid-template-columns: auto minmax(0, 1fr); row-gap: 8px; }
|
|
110
|
+
.cb-band .ov-row--lead > .ov-row__right {
|
|
111
|
+
grid-column: 2;
|
|
112
|
+
flex-direction: row;
|
|
113
|
+
flex-wrap: wrap;
|
|
114
|
+
align-items: center;
|
|
115
|
+
text-align: left;
|
|
116
|
+
}
|
|
117
|
+
.cb-band .ov-row__actions { justify-content: flex-start; }
|
|
118
|
+
.cb-band .ov-row__when { display: none; }
|
|
119
|
+
@media (max-width: 1100px) {
|
|
120
|
+
.cb-band { grid-template-columns: 1fr; }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ---- empties and the foot -------------------------------------------------- */
|
|
124
|
+
.cb-empty p { font-size: 14px; }
|
|
125
|
+
.cb-foot { margin: var(--sp-sm) 0 0; font-size: 12.5px; color: var(--ink-faint); max-width: var(--measure); }
|