Add Python REPL, instant deploy, Gist import, presentation mode, and CSS visual tools

- Python mode via Pyodide WASM runtime with stdout/stderr console integration
- Publish fiddles to clean /p/:slug URLs as standalone HTML pages
- Import code from GitHub Gist URLs with auto-detection of language/mode
- Presentation mode with slide management, fullscreen viewer, and keyboard nav
- Enable Monaco color decorators for inline CSS color pickers
- Extract reusable generateStandaloneHtml from export module
This commit is contained in:
root
2026-02-27 15:50:55 -06:00
parent 26e232fd41
commit ae8dbafb20
11 changed files with 666 additions and 6 deletions

View File

@@ -53,6 +53,41 @@ export function revertVersion(id, ver) {
return request(`${BASE}/${id}/revert/${ver}`, { method: 'POST' });
}
// Slides (presentation mode)
export function listSlides(fiddleId) {
return request(`${BASE}/${fiddleId}/slides`);
}
export function createSlide(fiddleId, data) {
return request(`${BASE}/${fiddleId}/slides`, { method: 'POST', body: JSON.stringify(data) });
}
export function updateSlide(slideId, data) {
return request(`/api/slides/${slideId}`, { method: 'PUT', body: JSON.stringify(data) });
}
export function deleteSlide(slideId) {
return request(`/api/slides/${slideId}`, { method: 'DELETE' });
}
// Gist import
export function importGist(url) {
return request('/api/import/gist', { method: 'POST', body: JSON.stringify({ url }) });
}
// Publishing
export function publishFiddle(id, html) {
return request(`${BASE}/${id}/publish`, { method: 'POST', body: JSON.stringify({ html }) });
}
export function unpublishFiddle(id) {
return request(`${BASE}/${id}/publish`, { method: 'DELETE' });
}
export function getPublishStatus(id) {
return request(`${BASE}/${id}/publish`);
}
// Collections
export function createCollection(data) {
return request('/api/collections', { method: 'POST', body: JSON.stringify(data) });