Changeset 0.28.3.1 (#188)
This commit is contained in:
@@ -179,7 +179,7 @@ function _formatMarked(text) {
|
||||
const decoded = _decodeHTML(code);
|
||||
const handled = Extensions.runBlockRenderers(lang, decoded, fakeContainer);
|
||||
if (handled && fakeContainer.innerHTML) {
|
||||
const popBtn = `<button class="ext-popout-btn" onclick="popOutExtBlock('${codeId}')" title="Open in side panel">⧉</button>`;
|
||||
const popBtn = `<button class="ext-popout-btn" data-action="popOutExtBlock" data-args='${JSON.stringify([codeId])}'" title="Open in side panel">⧉</button>`;
|
||||
return `<div class="ext-rendered" data-ext-block="${codeId}" data-ext-lang="${lang}">${popBtn}${fakeContainer.innerHTML}</div>`;
|
||||
}
|
||||
if (handled && !fakeContainer.innerHTML) {
|
||||
@@ -197,16 +197,16 @@ function _formatMarked(text) {
|
||||
|
||||
// Build toolbar buttons
|
||||
const collapseBtn = lineCount > 5
|
||||
? `<button class="code-collapse-btn" onclick="toggleCodeCollapse('${codeId}')" title="${shouldCollapse ? 'Expand' : 'Collapse'}">${shouldCollapse ? '▸' : '▾'} ${lineCount} lines</button>`
|
||||
? `<button class="code-collapse-btn" data-action="toggleCodeCollapse" data-args='${JSON.stringify([codeId])}'" title="${shouldCollapse ? 'Expand' : 'Collapse'}">${shouldCollapse ? '▸' : '▾'} ${lineCount} lines</button>`
|
||||
: '';
|
||||
|
||||
let toolbar = collapseBtn;
|
||||
toolbar += `<button class="copy-code-btn" onclick="navigator.clipboard.writeText(document.getElementById('${codeId}').textContent).then(()=>UI.toast('Copied','success'))">Copy</button>`;
|
||||
toolbar += `<button class="copy-code-btn" onclick="downloadCode('${codeId}','${lang}')">Download</button>`;
|
||||
toolbar += `<button class="copy-code-btn" data-action="_copyCodeBlock" data-args='${JSON.stringify([codeId])}'">Copy</button>`;
|
||||
toolbar += `<button class="copy-code-btn" data-action="downloadCode" data-args='${JSON.stringify([codeId, lang])}'">Download</button>`;
|
||||
|
||||
// HTML preview button (only for HTML-like content)
|
||||
if (lang === 'html' || lang === 'htm' || (!lang && _looksLikeHTML(code))) {
|
||||
toolbar += `<button class="copy-code-btn preview-code-btn" onclick="toggleHTMLPreview('${codeId}')">Preview</button>`;
|
||||
toolbar += `<button class="copy-code-btn preview-code-btn" data-action="toggleHTMLPreview" data-args='${JSON.stringify([codeId])}'">Preview</button>`;
|
||||
}
|
||||
|
||||
const langLabel = lang ? `<span class="code-lang">${lang}</span>` : '';
|
||||
@@ -226,15 +226,15 @@ function _formatBasic(text) {
|
||||
const shouldCollapse = lineCount > COLLAPSE_THRESHOLD;
|
||||
|
||||
const collapseBtn = lineCount > 5
|
||||
? `<button class="code-collapse-btn" onclick="toggleCodeCollapse('${id}')" title="${shouldCollapse ? 'Expand' : 'Collapse'}">${shouldCollapse ? '▸' : '▾'} ${lineCount} lines</button>`
|
||||
? `<button class="code-collapse-btn" data-action="toggleCodeCollapse" data-args='${JSON.stringify([id])}'" title="${shouldCollapse ? 'Expand' : 'Collapse'}">${shouldCollapse ? '▸' : '▾'} ${lineCount} lines</button>`
|
||||
: '';
|
||||
|
||||
let toolbar = collapseBtn;
|
||||
toolbar += `<button class="copy-code-btn" onclick="navigator.clipboard.writeText(document.getElementById('${id}').textContent).then(()=>UI.toast('Copied','success'))">Copy</button>`;
|
||||
toolbar += `<button class="copy-code-btn" onclick="downloadCode('${id}','${lang}')">Download</button>`;
|
||||
toolbar += `<button class="copy-code-btn" data-action="_copyCodeBlock" data-args='${JSON.stringify([id])}'">Copy</button>`;
|
||||
toolbar += `<button class="copy-code-btn" data-action="downloadCode" data-args='${JSON.stringify([id, lang])}'">Download</button>`;
|
||||
|
||||
if (lang === 'html' || lang === 'htm' || (!lang && _looksLikeHTML(code))) {
|
||||
toolbar += `<button class="copy-code-btn preview-code-btn" onclick="toggleHTMLPreview('${id}')">Preview</button>`;
|
||||
toolbar += `<button class="copy-code-btn preview-code-btn" data-action="toggleHTMLPreview" data-args='${JSON.stringify([id])}'">Preview</button>`;
|
||||
}
|
||||
|
||||
const langLabel = lang ? `<span class="code-lang">${lang}</span>` : '';
|
||||
@@ -531,7 +531,7 @@ function _renderToolCallsHTML(toolCalls) {
|
||||
try {
|
||||
const parsed = typeof result === 'string' ? JSON.parse(result) : result;
|
||||
if (parsed.id) {
|
||||
noteLink = `<button class="tool-note-link" onclick="openNotes(); setTimeout(() => openNoteEditor('${esc(parsed.id)}'), 300)">📝 View</button>`;
|
||||
noteLink = `<button class="tool-note-link" data-action="_openNoteFromTool" data-args='${JSON.stringify([esc(parsed.id)])}'">📝 View</button>`;
|
||||
}
|
||||
} catch (e) { /* not JSON */ }
|
||||
}
|
||||
@@ -584,18 +584,30 @@ function runExtensionPostRender(container) {
|
||||
}
|
||||
}
|
||||
|
||||
// ── Wrappers for compound onclick expressions ──
|
||||
function _copyCodeBlock(codeId) {
|
||||
const el = document.getElementById(codeId);
|
||||
if (el) navigator.clipboard.writeText(el.textContent).then(() => UI.toast('Copied', 'success'));
|
||||
}
|
||||
function _openNoteFromTool(noteId) {
|
||||
openNotes();
|
||||
setTimeout(() => openNoteEditor(noteId), 300);
|
||||
}
|
||||
|
||||
// ── Exports ─────────────────────────────────
|
||||
// Cross-file function calls
|
||||
window.formatMessage = formatMessage;
|
||||
window.clearPreview = clearPreview;
|
||||
window.runExtensionPostRender = runExtensionPostRender;
|
||||
window._livePreviewUpdate = _livePreviewUpdate;
|
||||
window._relativeTime = _relativeTime;
|
||||
window._renderToolCallsHTML = _renderToolCallsHTML;
|
||||
window._registerPreviewPanel = _registerPreviewPanel;
|
||||
// onclick handlers (called from innerHTML)
|
||||
window.toggleCodeCollapse = toggleCodeCollapse;
|
||||
window.toggleHTMLPreview = toggleHTMLPreview;
|
||||
window.downloadCode = downloadCode;
|
||||
window.popOutExtBlock = popOutExtBlock;
|
||||
sb.register('formatMessage', formatMessage);
|
||||
sb.register('clearPreview', clearPreview);
|
||||
sb.register('runExtensionPostRender', runExtensionPostRender);
|
||||
sb.register('_livePreviewUpdate', _livePreviewUpdate);
|
||||
sb.register('_relativeTime', _relativeTime);
|
||||
sb.register('_renderToolCallsHTML', _renderToolCallsHTML);
|
||||
sb.register('_registerPreviewPanel', _registerPreviewPanel);
|
||||
// data-action handlers
|
||||
sb.register('toggleCodeCollapse', toggleCodeCollapse);
|
||||
sb.register('toggleHTMLPreview', toggleHTMLPreview);
|
||||
sb.register('downloadCode', downloadCode);
|
||||
sb.register('popOutExtBlock', popOutExtBlock);
|
||||
sb.register('_copyCodeBlock', _copyCodeBlock);
|
||||
sb.register('_openNoteFromTool', _openNoteFromTool);
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user