diff --git a/trailer.html b/trailer.html index 3ce228b..922e8b5 100644 --- a/trailer.html +++ b/trailer.html @@ -67,6 +67,17 @@ .fchk .w{display:block;margin:3px 0} .fchk .w.serious{color:#b4531f;font-weight:600} .fchk .go{font-size:12px;padding:2px 9px;margin-left:6px} + .vars{border:1px solid var(--line);border-radius:10px;padding:10px;margin:0 0 10px} + .vars h5{margin:0 0 3px;font-size:13px} + .vars p{margin:0 0 8px;font-size:12px;color:var(--muted)} + .vars .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px} + .vars .v{font-size:12px} + .vars .v img{width:100%;border-radius:7px;border:2px solid var(--line);display:block} + .vars .v.good img{border-color:#1f7a3a} + .vars .v.bad img{border-color:#b4531f} + .vars .v .say{margin:4px 0;color:var(--muted);min-height:2.6em} + .vars .v.bad .say{color:#b4531f} + .vars .v .btn{font-size:12px;padding:3px 10px} .ffault{display:flex;gap:8px;margin:0 0 10px} .ffault input{flex:1;min-width:0;font:inherit;font-size:12px;padding:5px 8px; border:1px solid var(--line);border-radius:6px;background:transparent;color:inherit} @@ -250,7 +261,7 @@ if (String(PKG.look_state || "") && (Date.now() - (Date.parse(PKG.look_started || "") || 0)) < 15 * 60 * 1000) return true; return (PKG.shots || []).some(function (s) { - return s.writing || s.drawing || s.fixing || stillFilming(s); }); + return s.writing || s.drawing || s.fixing || s.varying || stillFilming(s); }); } // Preparing the storyboard audio is work too. Without this the page stops @@ -969,6 +980,34 @@ + ''; } + // Several versions of one picture, best first, each with what the checker + // made of it. Picking the best of four needs no vocabulary at all. + function variantsHtml(s) { + if (s.varying) return '

Drawing several versions of this picture and checking each one\u2026 about a minute.

'; + var v = s.variants; + if (!v || !(v.items || []).length) + return (v && v.error) ? '

' + esc(v.error) + '

' : ""; + return '
' + v.items.length + ' versions of this picture \u2014 best first
' + + '

' + (v.note ? 'Drawn with your note: \u201c' + esc(v.note) + '\u201d. ' : '') + + 'Click a picture to see it large. Press \u201cUse this one\u201d under the one you like; ' + + 'the ending picture is then drawn to match it.' + (v.error ? ' ' + esc(v.error) : '') + '

' + + '
' + v.items.map(function (it, i) { + var fc = it.check || {}; + var faults = (fc.duplicated || []).filter(Boolean).map(function (d) { return "same person twice: " + d; }) + .concat((fc.faults || []).filter(function (f) { return f && f.what && f.severity === "serious"; }) + .map(function (f) { return f.what; })); + var minor = (fc.faults || []).filter(function (f) { return f && f.what && f.severity !== "serious"; }); + var cls = fc.verdict === "broken" ? "bad" : (fc.verdict === "ok" ? "good" : ""); + var say = faults.length ? faults[0] + : (minor.length ? "small things only: " + minor[0].what + : (fc.verdict ? "\u2713 the checker sees nothing wrong" : "not checked")); + return '
' + esc(String(say).slice(0, 150)) + '
' + + '
'; + }).join("") + '
'; + } + // "That is not right" - about the PICTURE, in the author's own words. The // picture is what the shot is filmed from, so a fault here is inherited by // the film and cannot be fixed by filming again. @@ -982,7 +1021,10 @@ return '
' - + '
' + err; + + '' + + '' + err; } // WHO IS IN THIS SCENE, as they look in it. This is where an author changes @@ -1157,6 +1199,7 @@ + (s.day ? ' · ' + esc(s.day) + '' : '') + '' + media + + variantsHtml(s) + frameCheckHtml(s) + frameFaultHtml(s) + whoInHtml(s) @@ -1346,6 +1389,24 @@ z.classList.add("on"); return; } + if ((el = hit("data-vargo"))) { + var vsid = el.getAttribute("data-vargo"); + var vbox = document.getElementById("ff-" + vsid); + el.disabled = true; el.textContent = "starting\u2026"; + r = await act("draw_variants", { draft_id: CUR, shot_id: vsid, n: 4, + note: vbox ? vbox.value.trim() : "" }); + if (r) { showMsg("msg", "Drawing " + r.n + " versions of shot " + vsid + ", about $" + r.usd + + ". They appear here in about a minute.", "ok"); await refresh(); } + return; + } + if ((el = hit("data-pickvar"))) { + var pv = el.getAttribute("data-pickvar").split("|"); + el.disabled = true; el.textContent = "working\u2026"; + r = await act("pick_variant", { draft_id: CUR, shot_id: pv[0], index: Number(pv[1]) }); + if (r) { showMsg("msg", "Using that version for shot " + pv[0] + " and drawing its ending picture to match.", "ok"); + await refresh(); } + return; + } if ((el = hit("data-chkpics"))) { el.disabled = true; el.textContent = "starting\u2026"; r = await act("check_pictures", { draft_id: CUR });