diff --git a/public/styles.css b/public/styles.css index b362ac5..2b07807 100644 --- a/public/styles.css +++ b/public/styles.css @@ -2808,6 +2808,7 @@ body.ai-explore-dev-guest .search-input:disabled { flex-shrink: 0; } .mm-minutes-edit, +.mm-minutes-copy, .mm-minutes-cancel { font-size: 13px; font-weight: 600; diff --git a/views/meeting-minutes.ejs b/views/meeting-minutes.ejs index 74493bf..48f9e0b 100644 --- a/views/meeting-minutes.ejs +++ b/views/meeting-minutes.ejs @@ -189,6 +189,7 @@ @@ -235,6 +236,7 @@ var minutesActionsView = document.getElementById('mmMinutesActionsView'); var minutesActionsEdit = document.getElementById('mmMinutesActionsEdit'); var minutesEditBtn = document.getElementById('mmMinutesEdit'); + var minutesCopyBtn = document.getElementById('mmMinutesCopy'); var minutesApplyBtn = document.getElementById('mmMinutesApply'); var minutesCancelBtn = document.getElementById('mmMinutesCancel'); /** 편집 모드 진입 시점의 회의록 원문(취소 시 복원) */ @@ -343,6 +345,48 @@ } catch (e) {} } } + function copyTextToClipboard(text, done) { + var t = String(text || ''); + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(t).then(done).catch(function () { + legacyCopyTextToClipboard(t, done); + }); + return; + } + legacyCopyTextToClipboard(t, done); + } + function legacyCopyTextToClipboard(text, done) { + var ta = document.createElement('textarea'); + ta.value = text; + ta.setAttribute('readonly', ''); + ta.style.position = 'fixed'; + ta.style.left = '-9999px'; + document.body.appendChild(ta); + ta.select(); + try { + document.execCommand('copy'); + } catch (e) {} + document.body.removeChild(ta); + if (typeof done === 'function') done(); + } + if (minutesCopyBtn) { + minutesCopyBtn.addEventListener('click', function () { + if (!resultBody) return; + var md = String(resultBody.value || ''); + if (!md.trim()) { + alert('복사할 회의록 내용이 없습니다.'); + return; + } + var btn = minutesCopyBtn; + var prev = btn.textContent; + copyTextToClipboard(md, function () { + btn.textContent = '복사됨'; + window.setTimeout(function () { + btn.textContent = prev; + }, 1600); + }); + }); + } if (minutesEditBtn) { minutesEditBtn.addEventListener('click', function () { if (!resultBody) return; @@ -392,6 +436,7 @@ if (resultBody) resultBody.disabled = !!on; if (transcriptBody) transcriptBody.disabled = !!on; if (minutesEditBtn) minutesEditBtn.disabled = !!on; + if (minutesCopyBtn) minutesCopyBtn.disabled = !!on; if (minutesApplyBtn) minutesApplyBtn.disabled = !!on; if (minutesCancelBtn) minutesCancelBtn.disabled = !!on; if (on && resultBody && minutesRenderedEl) {