회의록: 마크다운 편집 툴바에 회의록 클립보드 복사 버튼 추가

Made-with: Cursor
This commit is contained in:
2026-04-15 17:09:40 +09:00
parent c95e851637
commit 51a402d223
2 changed files with 46 additions and 0 deletions

View File

@@ -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;

View File

@@ -189,6 +189,7 @@
<button type="button" class="btn-ghost mm-minutes-edit" id="mmMinutesEdit">마크다운 편집</button>
</div>
<div class="mm-minutes-actions" id="mmMinutesActionsEdit" role="toolbar" aria-label="회의록 편집" hidden>
<button type="button" class="btn-ghost mm-minutes-copy" id="mmMinutesCopy">복사</button>
<button type="button" class="top-action mm-minutes-apply" id="mmMinutesApply">저장</button>
<button type="button" class="btn-ghost mm-minutes-cancel" id="mmMinutesCancel">취소</button>
</div>
@@ -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) {