Add browse dashboard, tags, visibility control, export, QR sharing, and embed mode
- Browse dashboard at / with search, framework filter, tag pills, and pagination - Tags system with autocomplete datalist and per-fiddle tag management - Listed/unlisted toggle for visibility control (unlisted still accessible via direct URL) - Export standalone HTML with inlined CSS/JS and framework CDN tags - QR code modal for sharing fiddle URLs - Embed mode at /embed/:id for minimal preview-only rendering - Extract shared loadScript() utility from 4 files into utils.js - Database schema: listed column, tags and fiddle_tags tables with index
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { getPref, setPref } from './preferences.js';
|
||||
import { getActiveEditor, setOnTabSwitch, setOnModeChange } from './editors.js';
|
||||
import { loadScript } from './utils.js';
|
||||
|
||||
let currentMode = 'default'; // 'default' | 'vim' | 'emacs'
|
||||
let activeAdapter = null; // vim or emacs adapter instance
|
||||
@@ -8,19 +9,6 @@ let emacsLoaded = false;
|
||||
|
||||
const statusBar = () => document.getElementById('vim-status-bar');
|
||||
|
||||
function loadScript(src) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (document.querySelector(`script[src="${src}"]`)) { resolve(); return; }
|
||||
const savedDefine = window.define;
|
||||
window.define = undefined;
|
||||
const s = document.createElement('script');
|
||||
s.src = src;
|
||||
s.onload = () => { window.define = savedDefine; resolve(); };
|
||||
s.onerror = () => { window.define = savedDefine; reject(new Error(`Failed to load ${src}`)); };
|
||||
document.head.appendChild(s);
|
||||
});
|
||||
}
|
||||
|
||||
async function ensureVim() {
|
||||
if (vimLoaded) return;
|
||||
window.monaco = monaco;
|
||||
|
||||
Reference in New Issue
Block a user