Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
36 lines
2.7 KiB
Plaintext
36 lines
2.7 KiB
Plaintext
{:else if tab === "taste"}
|
|
<div class="sec" style="padding-top:8px"><h2>What you like <em>· {taste.likes.length}</em></h2></div>
|
|
<div class="sec-note">Declared on Soulseek: this is what the server matches other people against.</div>
|
|
<div class="chips tastechips likes" style="padding-top:8px">
|
|
{#each taste.likes as thing (thing)}
|
|
<button class="chip on tchip" disabled={taste.busy} onclick={() => setInterest(thing, true, false)}>{thing}<Icon name="x" size={13} /></button>
|
|
{/each}
|
|
<button class="chip quiet tadd" disabled={taste.busy} onclick={() => declare(true)}><Icon name="plus" size={14} />Add a like</button>
|
|
</div>
|
|
<div class="sec" style="padding-top:18px"><h2>What you hate <em>· {taste.hates.length}</em></h2></div>
|
|
<div class="chips tastechips hates" style="padding-top:8px">
|
|
{#each taste.hates as thing (thing)}
|
|
<button class="chip tchip" disabled={taste.busy} onclick={() => setInterest(thing, false, false)}>{thing}<Icon name="x" size={13} /></button>
|
|
{/each}
|
|
<button class="chip quiet tadd" disabled={taste.busy} onclick={() => declare(false)}><Icon name="ban" size={14} />Add a hate</button>
|
|
</div>
|
|
<div class="sec" style="padding-top:18px"><h2>People like you{#if taste.similar?.users?.length} <em>· {taste.similar.users.length}</em>{/if}</h2></div>
|
|
{#if taste.asking && !taste.similar}
|
|
<div class="sec-note">Asking the server…</div>
|
|
{:else if taste.similar?.users?.length}
|
|
{#each taste.similar.users.slice(0, 40) as su (su.username)}
|
|
<button class="row similar" onclick={() => openHalf("peer", { username: su.username })}>
|
|
<span class="art round idc"><Identicon seed={su.username} size={46} /></span>
|
|
<span class="b"><span class="t">{su.username}</span><span class="m">shares {su.rating} of your {su.rating === 1 ? "like" : "likes"}</span></span>
|
|
<span class="r"><Icon name="chevron-right" size={17} /></span>
|
|
</button>
|
|
{/each}
|
|
{:else if taste.error}
|
|
<div class="stub"><b>The server did not answer.</b>{taste.error}</div>
|
|
{:else if !taste.likes.length}
|
|
<div class="stub"><b>Nothing to match you on yet.</b>The server puts people together on the likes you declare — declare one above and it has something to go on.</div>
|
|
{:else}
|
|
<div class="stub"><b>Nobody yet.</b>The server found no one close to what you declared.</div>
|
|
{/if}
|
|
<div style="padding: 6px var(--pad) 0"><button class="btn btn-ghost wide" disabled={taste.asking} onclick={() => askSimilar(true)}>Ask the server again</button></div>
|