@takagaki/cortex-decisions-viewer 0.4.12 → 0.4.14
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/dist/render.js +50 -26
- package/package.json +1 -1
package/dist/render.js
CHANGED
|
@@ -370,6 +370,10 @@ button.ops-card-btn:disabled { opacity: .6; cursor: default; }
|
|
|
370
370
|
background: var(--surface); color: var(--muted); font-size: 13px; font-weight: 600; cursor: pointer;
|
|
371
371
|
}
|
|
372
372
|
.modal-cancel:hover { background: var(--bg); }
|
|
373
|
+
.modal-ok { color: #047857; font-weight: 600; }
|
|
374
|
+
.modal-paths { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; }
|
|
375
|
+
.modal-paths-label { font-size: 12px; color: var(--muted); }
|
|
376
|
+
.modal-path { font-size: 12.5px; word-break: break-all; color: var(--accent); }
|
|
373
377
|
.summary-box { background: var(--accent-weak); border: 1px solid #dce6fb; border-radius: var(--radius); padding: 12px 16px; color: #1e3a8a; }
|
|
374
378
|
.deciders { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
375
379
|
.refs { margin: 0; padding-left: 18px; }
|
|
@@ -660,14 +664,12 @@ const CLIENT_JS = `
|
|
|
660
664
|
var modal = el("div", { class: "modal" });
|
|
661
665
|
modal.appendChild(el("h2", { class: "modal-title", text: isT ? "会議の文字起こしを追加" : "共有資料を追加" }));
|
|
662
666
|
modal.appendChild(el("p", { class: "modal-desc", text: isT
|
|
663
|
-
? "文字起こしファイル(.txt / .docx
|
|
664
|
-
: "資料ファイル(PDF / PPT / Excel
|
|
667
|
+
? "文字起こしファイル(.txt / .docx 等)を選んで送信すると、議事録を自動生成します。"
|
|
668
|
+
: "資料ファイル(PDF / PPT / Excel 等)を選んで送信すると、Markdown 化して取り込みます。" }));
|
|
665
669
|
var fileInput = el("input", { type: "file", multiple: "multiple", class: "modal-file" });
|
|
666
|
-
var nameInput = el("input", { type: "text", class: "modal-name", placeholder: "
|
|
667
|
-
|
|
668
|
-
modal.appendChild(fieldRow("
|
|
669
|
-
modal.appendChild(fieldRow("お名前", nameInput));
|
|
670
|
-
modal.appendChild(fieldRow("テキスト(自由入力)", textArea));
|
|
670
|
+
var nameInput = el("input", { type: "text", class: "modal-name", placeholder: "投入者として記録されます" });
|
|
671
|
+
modal.appendChild(fieldRow("ファイル(必須)", fileInput));
|
|
672
|
+
modal.appendChild(fieldRow("お名前(必須)", nameInput));
|
|
671
673
|
var status = el("div", { class: "modal-status" });
|
|
672
674
|
var cancelBtn = el("button", { class: "modal-cancel", text: "閉じる" });
|
|
673
675
|
var submitBtn = el("button", { class: "ops-card-btn", text: "送信" });
|
|
@@ -679,40 +681,62 @@ const CLIENT_JS = `
|
|
|
679
681
|
cancelBtn.addEventListener("click", close);
|
|
680
682
|
overlay.addEventListener("click", function (e) { if (e.target === overlay) close(); });
|
|
681
683
|
submitBtn.addEventListener("click", function () {
|
|
682
|
-
submitIntake(kind, fileInput.files,
|
|
684
|
+
submitIntake(kind, fileInput.files, nameInput.value, status, submitBtn);
|
|
683
685
|
});
|
|
684
686
|
}
|
|
685
|
-
async function submitIntake(kind, fileList,
|
|
687
|
+
async function submitIntake(kind, fileList, submitter, status, submitBtn) {
|
|
686
688
|
var intake = SITE.intake;
|
|
687
689
|
var files = fileList ? Array.prototype.slice.call(fileList) : [];
|
|
688
|
-
|
|
690
|
+
// 必須: お名前 と ファイル
|
|
691
|
+
if (!submitter || !submitter.trim()) { status.textContent = "⚠ お名前を入力してください。"; return; }
|
|
692
|
+
if (!files.length) { status.textContent = "⚠ ファイルを選択してください。"; return; }
|
|
689
693
|
submitBtn.disabled = true;
|
|
690
694
|
var pfx = intake.url + (intake.url.indexOf("?") === -1 ? "?" : "&");
|
|
695
|
+
function fail(msg) { status.textContent = "✗ " + msg; submitBtn.disabled = false; }
|
|
691
696
|
try {
|
|
692
697
|
var uploaded = [];
|
|
693
698
|
for (var i = 0; i < files.length; i++) {
|
|
694
699
|
var f = files[i];
|
|
695
700
|
status.textContent = "アップロード中… (" + (i + 1) + "/" + files.length + ") " + f.name;
|
|
696
|
-
var pres
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
701
|
+
var pres;
|
|
702
|
+
try {
|
|
703
|
+
pres = await fetch(pfx + "op=presign&t=" + encodeURIComponent(intake.token), {
|
|
704
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
705
|
+
body: JSON.stringify({ projectKey: intake.projectKey, filename: f.name, contentType: f.type || "application/octet-stream" }),
|
|
706
|
+
}).then(function (r) { return r.json().then(function (j) { return { ok: r.ok, j: j }; }); });
|
|
707
|
+
} catch (net) { return fail("サーバーに接続できませんでした。通信環境を確認して、もう一度お試しください。"); }
|
|
708
|
+
if (!pres.ok || !pres.j.url) return fail((pres.j && pres.j.message) || "アップロードURLの取得に失敗しました。対応していないファイル形式かもしれません。");
|
|
709
|
+
var put;
|
|
710
|
+
try {
|
|
711
|
+
put = await fetch(pres.j.url, { method: "PUT", headers: { "content-type": f.type || "application/octet-stream" }, body: f });
|
|
712
|
+
} catch (net2) { return fail("ファイルのアップロードに失敗しました(通信エラー)。もう一度お試しください。"); }
|
|
713
|
+
if (!put.ok) return fail("ファイルのアップロードに失敗しました(" + put.status + ")。ファイルのサイズ・形式をご確認ください。");
|
|
714
|
+
uploaded.push({ key: pres.j.key, filename: f.name });
|
|
704
715
|
}
|
|
705
716
|
status.textContent = "取り込み中…";
|
|
706
|
-
var sub
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
717
|
+
var sub;
|
|
718
|
+
try {
|
|
719
|
+
sub = await fetch(pfx + "op=submit&t=" + encodeURIComponent(intake.token), {
|
|
720
|
+
method: "POST", headers: { "content-type": "application/json" },
|
|
721
|
+
body: JSON.stringify({ projectKey: intake.projectKey, kind: kind, files: uploaded, submitter: submitter.trim() }),
|
|
722
|
+
}).then(function (r) { return r.json().then(function (j) { return { ok: r.ok, j: j }; }); });
|
|
723
|
+
} catch (net3) { return fail("サーバーに接続できませんでした。もう一度お試しください。"); }
|
|
724
|
+
if (!sub.ok) return fail((sub.j && sub.j.message) || "取り込みに失敗しました。時間をおいて再度お試しください。");
|
|
725
|
+
status.textContent = "";
|
|
726
|
+
status.appendChild(el("div", { class: "modal-ok", text: "✓ 送信しました。数分後に" + (kind === "transcript" ? "議事録" : "資料") + "が反映されます。" }));
|
|
727
|
+
var paths = (sub.j && sub.j.committed) || [];
|
|
728
|
+
if (paths.length && sub.j.repo) {
|
|
729
|
+
var br = SITE.branch || "main";
|
|
730
|
+
var box = el("div", { class: "modal-paths" }, [el("div", { class: "modal-paths-label", text: "保存先(GitHub):" })]);
|
|
731
|
+
paths.forEach(function (p) {
|
|
732
|
+
var href = "https://github.com/" + sub.j.repo + "/blob/" + encodeURIComponent(br) + "/" + p.split("/").map(encodeURIComponent).join("/");
|
|
733
|
+
box.appendChild(el("a", { class: "modal-path", href: href, target: "_blank", rel: "noopener", text: p }));
|
|
734
|
+
});
|
|
735
|
+
status.appendChild(box);
|
|
736
|
+
}
|
|
712
737
|
submitBtn.textContent = "完了";
|
|
713
738
|
} catch (e) {
|
|
714
|
-
|
|
715
|
-
submitBtn.disabled = false;
|
|
739
|
+
fail(e && e.message ? e.message : "予期しないエラーが発生しました。");
|
|
716
740
|
}
|
|
717
741
|
}
|
|
718
742
|
|
package/package.json
CHANGED