Storyboard: edit the shot's description yourself, word for word

This commit is contained in:
gator 2026-09-23 02:04:33 +00:00
parent ca591ac6a5
commit 9c29946c12

View file

@ -1593,6 +1593,21 @@
} }
else if (s.drawing) tools = '<span class="busy">drawing…</span>'; else if (s.drawing) tools = '<span class="busy">drawing…</span>';
else if (stillFilming(s)) tools = '<span class="busy">filming…</span>'; else if (stillFilming(s)) tools = '<span class="busy">filming…</span>';
else if (EDITING === "direct:" + s.id) {
// THE AUTHOR'S OWN WORDS. No writer in between: what is typed here is
// what the picture is drawn from and the film is made from.
var fld = function (k, label, rows, hint) {
return '<label style="display:block;font-size:12px;color:var(--muted);margin:6px 0 2px">' + label + (hint ? ' <span style="opacity:.8">- ' + hint + '</span>' : '') + '</label>'
+ '<textarea data-direct="' + k + '" rows="' + rows + '" style="width:100%;box-sizing:border-box;font:inherit;font-size:13px">' + esc(s[k] || "") + '</textarea>';
};
tools = '<div style="width:100%">'
+ fld("opening_image", "Opening picture", 3, "what the first frame shows: where everyone and everything is at second zero")
+ fld("action", "What happens", 6, "every movement in order with its result; the camera told what it does and what it keeps in frame")
+ fld("closing_image", "Closing picture", 2, "where everything is when the shot ends")
+ fld("camera", "Camera", 1, "")
+ '<div class="tools"><button type="button" class="btn primary" data-directsave="' + esc(s.id) + '">Save my words</button>'
+ '<button type="button" class="btn" data-cancel="1">Cancel</button></div></div>';
}
else if (EDITING === s.id) { else if (EDITING === s.id) {
// An EMPTY box: this is guidance for the writer - what should happen, // An EMPTY box: this is guidance for the writer - what should happen,
// how the camera moves, what is said - and it applies the same whether // how the camera moves, what is said - and it applies the same whether
@ -1606,7 +1621,8 @@
+ '<div class="tools"><button type="button" class="btn primary" data-rewrite="' + esc(s.id) + '<div class="tools"><button type="button" class="btn primary" data-rewrite="' + esc(s.id)
+ '">Rewrite this shot</button>' + '">Rewrite this shot</button>'
+ '<button type="button" class="btn" data-rewritemake="' + esc(s.id) + '" title="The writer rewrites the shot from your words, then the picture is drawn and the clip filmed">Rewrite, redraw and film &middot; about $' + (0.14 + filmCost(s)).toFixed(2) + '</button>' + '<button type="button" class="btn" data-rewritemake="' + esc(s.id) + '" title="The writer rewrites the shot from your words, then the picture is drawn and the clip filmed">Rewrite, redraw and film &middot; about $' + (0.14 + filmCost(s)).toFixed(2) + '</button>'
+ '<button type="button" class="btn" data-cancel="1">Cancel</button></div></div>'; + '<button type="button" class="btn" data-cancel="1">Cancel</button></div>'
+ '<div class="tiny" style="margin-top:6px">Or <a href="#" data-directedit="' + esc(s.id) + '">edit the description yourself</a>, word for word, with no writer in between.</div></div>';
} else { } else {
tools = (s.make_error ? '<div class="warn" style="width:100%">' + esc(s.make_error) + '</div>' : '') tools = (s.make_error ? '<div class="warn" style="width:100%">' + esc(s.make_error) + '</div>' : '')
+ '<button type="button" class="btn primary" data-make="' + esc(s.id) + '" title="Draws the picture (the actors in the background) and then films the clip, in one go">' + '<button type="button" class="btn primary" data-make="' + esc(s.id) + '" title="Draws the picture (the actors in the background) and then films the clip, in one go">'
@ -1702,6 +1718,17 @@
else el.disabled = false; else el.disabled = false;
return; return;
} }
if ((el = hit("data-directedit"))) { e.preventDefault(); EDITING = "direct:" + el.getAttribute("data-directedit"); openTab(CUR); return; }
if ((el = hit("data-directsave"))) {
var dsid = el.getAttribute("data-directsave"), payload = { draft_id: CUR, shot_id: dsid };
["opening_image", "action", "closing_image", "camera"].forEach(function (k) { var t = document.querySelector('[data-direct="' + k + '"]'); if (t) payload[k] = t.value; });
if (String(payload.action || "").trim().length < 40) { showMsg("msg", "The description needs a few sentences."); return; }
el.disabled = true;
r = await act("edit_shot", payload);
EDITING = null;
if (r) { showMsg("msg", "Saved as written. The picture and the clip will be made again from your words when you press Make this shot.", "ok"); await refresh(); }
return;
}
if ((el = hit("data-scene"))) { var sk = el.getAttribute("data-scene"); OPEN[sk] = !OPEN[sk]; rememberOpen(); openTab(CUR); return; } if ((el = hit("data-scene"))) { var sk = el.getAttribute("data-scene"); OPEN[sk] = !OPEN[sk]; rememberOpen(); openTab(CUR); return; }
if ((el = hit("data-shareshot"))) { if ((el = hit("data-shareshot"))) {
var shid = el.getAttribute("data-shareshot"); var shid = el.getAttribute("data-shareshot");