fix(opgave): teksten kan læses færdig, også på en telefon
Rapporteret med et billede af en beskrivelse, der manglede sit første bogstav på hver linje: "hermostat RU0910301440" og "atteries". Det er ikke manglende tegn — det er et felt, der er rullet til højre. Og det ligner ikke rulning; det ligner, at bogstaverne ikke er der. To ting på én skærm. Titlen var et <input>, og et input kan ikke ombryde. "tado°: Your Smart Thermostat needs new batteries" er en almindelig opgavetitel, og på 390 px var feltet 490 px bredt i en kasse på 356 — halvdelen af overskriften stod uden for kanten. Den er nu et <textarea>, der vokser med sin tekst. Retur gemmer frem for at lave en ny linje: en titel er én linje, uanset hvor mange den fylder på skærmen. Trækkehåndtaget er væk, for højden sættes af teksten, og et håndtag ville love noget, det næste bogstav retter tilbage. Beskrivelsen er tit et klippet stykke mail med en URL i. Et <textarea> ombryder ved mellemrum, og en URL har ingen. `break-word` og ikke `anywhere`: den første bryder kun et ord, der ikke kan stå på en linje alene, mens den anden bryder ved først givne lejlighed og delte "GarageRisteriet" midt i en stavelse. Den lektion står allerede ved h1 på projektsiden og er betalt én gang. Prøven måler frem for at beskrive: et felt, der ruller vandret, har en scrollWidth større end sin clientWidth. Kørt mod den gamle komponent fejler den med "Opgavens tekst: 490 > 356". Men kun den ene halvdel. Beskrivelsen løber ikke over i Chromium, heller ikke uden reglen — det var Safari, den blev set i. Prøven måler derfor den regel frem for dens virkning, og det står skrevet i prøven, så den næste ved, hvad den vogter og hvad den ikke gør. Bemærket undervejs: "en delt note tager de noter med, den peger på" fejlede én gang ud af to fulde kørsler med "Delt med Mikkel." uden antallet. Den består alene og i næste fulde kørsel. Den er ikke rørt her, men den flakker. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c868be8f89
commit
0110a86858
@@ -171,6 +171,32 @@
|
||||
* took is said out loud, because a title that edits itself without a word is
|
||||
* worse than one that does nothing.
|
||||
*/
|
||||
/**
|
||||
* Lader et felt være lige så højt som sin tekst.
|
||||
*
|
||||
* `height: auto` først, og så `scrollHeight`: uden nulstillingen kan feltet kun
|
||||
* vokse, for scrollHeight på et felt, der allerede er for højt, er dets egen
|
||||
* højde.
|
||||
*/
|
||||
function grow(node) {
|
||||
const fit = () => {
|
||||
node.style.height = 'auto';
|
||||
node.style.height = `${node.scrollHeight}px`;
|
||||
};
|
||||
fit();
|
||||
node.addEventListener('input', fit);
|
||||
// Bredden skifter, når ruden gør — og en tekst, der fyldte to linjer, fylder
|
||||
// tre på en smallere skærm uden at der er rørt ved den.
|
||||
const watch = new ResizeObserver(fit);
|
||||
watch.observe(node);
|
||||
return {
|
||||
destroy() {
|
||||
node.removeEventListener('input', fit);
|
||||
watch.disconnect();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
async function saveContent() {
|
||||
if (!task) return;
|
||||
const trimmed = content.trim();
|
||||
@@ -418,13 +444,27 @@
|
||||
|
||||
<div class="scroll">
|
||||
<div class="field">
|
||||
<input
|
||||
<!-- Et felt frem for en linje. En opgavetitel er tit længere end en telefon
|
||||
er bred — "tado°: Your Smart Thermostat needs new batteries" er en
|
||||
almindelig en — og et <input> kan ikke ombryde: det ruller, og så står
|
||||
halvdelen af overskriften uden for kanten. -->
|
||||
<textarea
|
||||
class="title"
|
||||
rows="1"
|
||||
use:focusOnMount
|
||||
use:grow
|
||||
bind:value={content}
|
||||
onblur={saveContent}
|
||||
onkeydown={(e) => {
|
||||
// Retur gemmer frem for at lave en ny linje. En titel er én linje,
|
||||
// uanset hvor mange den fylder på skærmen.
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
e.currentTarget.blur();
|
||||
}
|
||||
}}
|
||||
aria-label={t('detail.text')}
|
||||
/>
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
@@ -894,6 +934,16 @@
|
||||
resize: vertical;
|
||||
font-family: inherit;
|
||||
line-height: 1.5;
|
||||
/* En beskrivelse er tit et klippet stykke mail med en URL i. Et <textarea>
|
||||
ombryder ved mellemrum, og en URL har ingen — så feltet rullede vandret,
|
||||
og på en telefon stod teksten forskudt med venstre kant klippet af. Det
|
||||
ser ikke ud som rulning; det ser ud som manglende bogstaver.
|
||||
|
||||
`break-word` og ikke `anywhere`: den første bryder kun et ord, der ikke kan
|
||||
stå på en linje alene, mens den anden bryder ved først givne lejlighed og
|
||||
delte "GarageRisteriet" midt i en stavelse. Se h1 på projektets side — den
|
||||
lektion er betalt én gang. */
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
/* The title is the one field that should not look like a field until you are in
|
||||
@@ -905,6 +955,10 @@
|
||||
background: transparent;
|
||||
border-color: transparent;
|
||||
padding-left: 0;
|
||||
/* Højden sættes af `grow`, så håndtaget ville love noget, det ikke kan
|
||||
holde: trækker man i det, retter det næste bogstav det tilbage. */
|
||||
resize: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.title:hover {
|
||||
|
||||
Reference in New Issue
Block a user