Make Gitea publishing claimant controlled
This commit is contained in:
+113
-35
@@ -471,6 +471,7 @@ async function syncIdeaToOpenGist(ideaId) {
|
||||
|
||||
async function syncIdeaToGitea(ideaId) {
|
||||
const btn = document.getElementById('sync-gitea-btn');
|
||||
const originalLabel = btn ? btn.innerText : '';
|
||||
if (btn) btn.innerText = 'Publishing to Gitea...';
|
||||
sessionStorage.setItem(`thinkstorm_active_tab_${window.location.pathname}`, 'tab-artifacts');
|
||||
history.replaceState(null, null, '#artifacts');
|
||||
@@ -482,7 +483,7 @@ async function syncIdeaToGitea(ideaId) {
|
||||
setTimeout(() => window.location.reload(), 800);
|
||||
} catch (err) {
|
||||
showToast(err.message, 'danger');
|
||||
if (btn) btn.innerText = '🔄 Publish / Re-sync to Gitea';
|
||||
if (btn) btn.innerText = originalLabel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,32 +536,50 @@ function initMarkdownViews(root = document) {
|
||||
if (container.dataset.initialized === 'true') return;
|
||||
container.dataset.initialized = 'true';
|
||||
|
||||
const formattedBox = container.querySelector('.markdown-formatted');
|
||||
const codeBox = container.querySelector('.markdown-code');
|
||||
const rawSourceEl = container.querySelector('.raw-markdown-source');
|
||||
|
||||
let rawText = '';
|
||||
if (rawSourceEl) {
|
||||
rawText = rawSourceEl.value || rawSourceEl.textContent || '';
|
||||
} else if (codeBox && codeBox.querySelector('code')) {
|
||||
rawText = codeBox.querySelector('code').textContent || '';
|
||||
} else if (container.dataset.content) {
|
||||
rawText = container.dataset.content;
|
||||
}
|
||||
// Check if this container has multi-version panes
|
||||
const versionPanes = container.querySelectorAll('.research-version-pane');
|
||||
if (versionPanes.length > 0) {
|
||||
versionPanes.forEach(pane => {
|
||||
const formattedBox = pane.querySelector('.markdown-formatted');
|
||||
const codeBox = pane.querySelector('.markdown-code');
|
||||
const rawSourceEl = pane.querySelector('.raw-markdown-source');
|
||||
const rawText = rawSourceEl ? (rawSourceEl.value || rawSourceEl.textContent || '') : '';
|
||||
|
||||
// Render formatted markdown HTML
|
||||
if (formattedBox && rawText) {
|
||||
formattedBox.innerHTML = renderMarkdownContent(rawText);
|
||||
}
|
||||
if (formattedBox && rawText) {
|
||||
formattedBox.innerHTML = renderMarkdownContent(rawText);
|
||||
}
|
||||
if (codeBox && (!codeBox.querySelector('code') || !codeBox.querySelector('code').textContent)) {
|
||||
codeBox.innerHTML = `<pre><code>${escapeHtml(rawText)}</code></pre>`;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
const formattedBox = container.querySelector('.markdown-formatted');
|
||||
const codeBox = container.querySelector('.markdown-code');
|
||||
const rawSourceEl = container.querySelector('.raw-markdown-source');
|
||||
|
||||
let rawText = '';
|
||||
if (rawSourceEl) {
|
||||
rawText = rawSourceEl.value || rawSourceEl.textContent || '';
|
||||
} else if (codeBox && codeBox.querySelector('code')) {
|
||||
rawText = codeBox.querySelector('code').textContent || '';
|
||||
} else if (container.dataset.content) {
|
||||
rawText = container.dataset.content;
|
||||
}
|
||||
|
||||
// Ensure codeBox has raw text
|
||||
if (codeBox && (!codeBox.querySelector('code') || !codeBox.querySelector('code').textContent)) {
|
||||
codeBox.innerHTML = `<pre><code>${escapeHtml(rawText)}</code></pre>`;
|
||||
}
|
||||
// Render formatted markdown HTML
|
||||
if (formattedBox && rawText) {
|
||||
formattedBox.innerHTML = renderMarkdownContent(rawText);
|
||||
}
|
||||
|
||||
// Default to Formatted view
|
||||
if (formattedBox) formattedBox.style.display = 'block';
|
||||
if (codeBox) codeBox.style.display = 'none';
|
||||
// Ensure codeBox has raw text
|
||||
if (codeBox && (!codeBox.querySelector('code') || !codeBox.querySelector('code').textContent)) {
|
||||
codeBox.innerHTML = `<pre><code>${escapeHtml(rawText)}</code></pre>`;
|
||||
}
|
||||
|
||||
// Default to Formatted view
|
||||
if (formattedBox) formattedBox.style.display = 'block';
|
||||
if (codeBox) codeBox.style.display = 'none';
|
||||
}
|
||||
|
||||
// Setup toggle buttons
|
||||
const toggleBtns = container.querySelectorAll('.btn-toggle-view');
|
||||
@@ -587,10 +606,7 @@ function initMarkdownViews(root = document) {
|
||||
}
|
||||
|
||||
function setMarkdownContainerView(container, mode) {
|
||||
const formattedBox = container.querySelector('.markdown-formatted');
|
||||
const codeBox = container.querySelector('.markdown-code');
|
||||
const toggleBtns = container.querySelectorAll('.btn-toggle-view');
|
||||
|
||||
toggleBtns.forEach(b => {
|
||||
if (b.getAttribute('data-view') === mode) {
|
||||
b.classList.add('active');
|
||||
@@ -599,21 +615,82 @@ function setMarkdownContainerView(container, mode) {
|
||||
}
|
||||
});
|
||||
|
||||
if (mode === 'code') {
|
||||
if (formattedBox) formattedBox.style.display = 'none';
|
||||
if (codeBox) codeBox.style.display = 'block';
|
||||
const versionPanes = container.querySelectorAll('.research-version-pane');
|
||||
if (versionPanes.length > 0) {
|
||||
versionPanes.forEach(pane => {
|
||||
const formattedBox = pane.querySelector('.markdown-formatted');
|
||||
const codeBox = pane.querySelector('.markdown-code');
|
||||
if (mode === 'code') {
|
||||
if (formattedBox) formattedBox.style.display = 'none';
|
||||
if (codeBox) codeBox.style.display = 'block';
|
||||
} else {
|
||||
if (formattedBox) formattedBox.style.display = 'block';
|
||||
if (codeBox) codeBox.style.display = 'none';
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Formatted by default
|
||||
if (formattedBox) formattedBox.style.display = 'block';
|
||||
if (codeBox) codeBox.style.display = 'none';
|
||||
const formattedBox = container.querySelector('.markdown-formatted');
|
||||
const codeBox = container.querySelector('.markdown-code');
|
||||
if (mode === 'code') {
|
||||
if (formattedBox) formattedBox.style.display = 'none';
|
||||
if (codeBox) codeBox.style.display = 'block';
|
||||
} else {
|
||||
if (formattedBox) formattedBox.style.display = 'block';
|
||||
if (codeBox) codeBox.style.display = 'none';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function switchResearchVersion(selectEl, stage) {
|
||||
const selectedVersion = String(selectEl.value);
|
||||
const container = selectEl.closest('.tab-panel') || document.getElementById(`tab-${stage.toLowerCase().replace('_', '-')}`);
|
||||
if (!container) return;
|
||||
|
||||
// Toggle panes for this stage
|
||||
const panes = container.querySelectorAll(`.research-version-pane[data-stage="${stage}"]`);
|
||||
let activePane = null;
|
||||
panes.forEach(pane => {
|
||||
if (String(pane.dataset.version) === selectedVersion) {
|
||||
pane.style.display = 'block';
|
||||
activePane = pane;
|
||||
} else {
|
||||
pane.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Update header meta badges
|
||||
if (activePane) {
|
||||
const metaContainer = container.querySelector('.markdown-view-meta');
|
||||
if (metaContainer) {
|
||||
const modelBadge = metaContainer.querySelector('.research-meta-model');
|
||||
if (modelBadge && activePane.dataset.model) {
|
||||
modelBadge.innerText = `🤖 ${activePane.dataset.model}`;
|
||||
}
|
||||
const tokenBadge = metaContainer.querySelector('.research-meta-tokens');
|
||||
if (tokenBadge && activePane.dataset.tokens) {
|
||||
tokenBadge.innerText = `⚡ ${activePane.dataset.tokens} tokens`;
|
||||
}
|
||||
const timeBadge = metaContainer.querySelector('.research-meta-time');
|
||||
if (timeBadge && activePane.dataset.time) {
|
||||
timeBadge.innerText = `🕒 ${activePane.dataset.time}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function copyMarkdownFromContainer(btn) {
|
||||
const container = btn.closest('.markdown-view-container');
|
||||
if (!container) return;
|
||||
const rawSourceEl = container.querySelector('.raw-markdown-source');
|
||||
const codeEl = container.querySelector('.markdown-code code');
|
||||
|
||||
// Find visible pane if multi-version
|
||||
let targetRoot = container;
|
||||
const visiblePane = container.querySelector('.research-version-pane:not([style*="display:none"]):not([style*="display: none"])');
|
||||
if (visiblePane) {
|
||||
targetRoot = visiblePane;
|
||||
}
|
||||
|
||||
const rawSourceEl = targetRoot.querySelector('.raw-markdown-source');
|
||||
const codeEl = targetRoot.querySelector('.markdown-code code');
|
||||
const text = rawSourceEl ? (rawSourceEl.value || rawSourceEl.textContent) : (codeEl ? codeEl.textContent : '');
|
||||
|
||||
if (!text) {
|
||||
@@ -660,4 +737,5 @@ function escapeHtml(text) {
|
||||
window.renderMarkdownContent = renderMarkdownContent;
|
||||
window.initMarkdownViews = initMarkdownViews;
|
||||
window.setMarkdownContainerView = setMarkdownContainerView;
|
||||
window.switchResearchVersion = switchResearchVersion;
|
||||
window.copyMarkdownFromContainer = copyMarkdownFromContainer;
|
||||
|
||||
Reference in New Issue
Block a user