diff --git a/extension/test1.js b/extension/test1.js new file mode 100644 index 0000000..50c17d2 --- /dev/null +++ b/extension/test1.js @@ -0,0 +1,627 @@ +(function () { + class SPMPackageBrowser { + getInfo() { + return { + id: 'SPMPackageBrowser', + name: 'SPM', + color1: '#5B7B97', + color2: '#8AA1B8', + blocks: [ + { opcode: 'openBrowser', blockType: Scratch.BlockType.COMMAND, text: '打开SPM包浏览器' } + ] + }; + } + + openBrowser() { + if (document.getElementById('SPM-browser-window')) { + document.getElementById('SPM-browser-window').style.display = 'flex'; + return; + } + + // Material Symbols(替换 Font Awesome) + if (!document.getElementById('SPM-material-icons')) { + const mi = document.createElement('link'); + mi.id = 'SPM-material-icons'; + mi.rel = 'stylesheet'; + mi.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-25..200'; + document.head.appendChild(mi); + } + + // Tailwind 仍然保留(兼容原有样式系统) + if (!document.getElementById('SPM-tailwind')) { + const tw = document.createElement('script'); + tw.id = 'SPM-tailwind'; + tw.src = 'https://cdn.tailwindcss.com'; + document.head.appendChild(tw); + } + + const win = document.createElement('div'); + win.id = 'SPM-browser-window'; + win.style.cssText = ` + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 920px; + height: 620px; + background: #F8FAFC; + border-radius: 28px; + border: 1px solid #E2E8F0; + box-shadow: 0 25px 50px -12px rgb(91 123 151 / 0.25); + z-index: 999999; + display: flex; + flex-direction: column; + overflow: hidden; + font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + color: #334155; + `; + + // Material Design 3 风格完整 UI + win.innerHTML = ` + +
+
+ package_2 +
+
SPM Store
+
Scratch Package Manager
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + + arrow_drop_down +
+
+ + +
+
+ + + +
+
+ +
+
+ + +
+ + +
+
+ + +
+
+
+ + +
+ drag_handle +
+ `; + + document.body.appendChild(win); + + // 绑定全局函数 + window.SPMLoadPackages = () => this.loadPackages(); + window.SPMDirectView = () => this.directViewPackage(); + window.SPMToggleToken = () => this.toggleTokenVisibility(); + window.SPMShowVersions = (type, name, repository) => this.showPackageVersions(type, name, repository); + window.SPMLoadToEditorForVersion = (owner, type, name, version) => this.loadVersionToEditor(owner, type, name, version); + + // Material 拖拽 & 触控支持 + this.makeDraggable(win, win.querySelector('.spm-appbar')); + this.makeResizable(win); + + setTimeout(() => this.loadPackages(), 150); + } + + makeDraggable(el, header) { + let posX = 0, posY = 0, startX = 0, startY = 0; + + const startDrag = (clientX, clientY) => { + startX = clientX; startY = clientY; + posX = el.offsetLeft; posY = el.offsetTop; + el.style.transform = 'none'; + el.style.boxShadow = '0 30px 60px -15px rgb(91 123 151)'; + }; + + const moveDrag = (clientX, clientY) => { + el.style.left = (posX + clientX - startX) + 'px'; + el.style.top = (posY + clientY - startY) + 'px'; + }; + + const endDrag = () => { + el.style.boxShadow = '0 25px 50px -12px rgb(91 123 151 / 0.25)'; + }; + + // 鼠标拖拽 + header.addEventListener('mousedown', e => { + if (e.target.closest('button')) return; + startDrag(e.clientX, e.clientY); + const onMove = ev => moveDrag(ev.clientX, ev.clientY); + const onUp = () => { endDrag(); document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); }; + document.addEventListener('mousemove', onMove); + document.addEventListener('mouseup', onUp); + }); + + // 触控拖拽(手机完美适配) + header.addEventListener('touchstart', e => { + if (e.target.closest('button')) return; + const touch = e.touches[0]; + startDrag(touch.clientX, touch.clientY); + const onMove = ev => { + const t = ev.touches[0]; + moveDrag(t.clientX, t.clientY); + }; + const onEnd = () => { endDrag(); document.removeEventListener('touchmove', onMove); document.removeEventListener('touchend', onEnd); }; + document.addEventListener('touchmove', onMove, { passive: false }); + document.addEventListener('touchend', onEnd); + }, { passive: false }); + } + + makeResizable(el) { + const handle = document.getElementById('resize-handle'); + let startX, startY, startWidth, startHeight; + + const startResize = (clientX, clientY) => { + startX = clientX; startY = clientY; + startWidth = parseInt(getComputedStyle(el).width); + startHeight = parseInt(getComputedStyle(el).height); + }; + + const doResize = (clientX, clientY) => { + let newW = Math.max(420, startWidth + (clientX - startX)); + let newH = Math.max(380, startHeight + (clientY - startY)); + el.style.width = newW + 'px'; + el.style.height = newH + 'px'; + }; + + // 鼠标 + handle.addEventListener('mousedown', e => { + e.stopImmediatePropagation(); + startResize(e.clientX, e.clientY); + const onMove = ev => doResize(ev.clientX, ev.clientY); + const onUp = () => { + document.removeEventListener('mousemove', onMove); + document.removeEventListener('mouseup', onUp); + }; + document.addEventListener('mousemove', onMove); + document.addEventListener('mouseup', onUp); + }); + + // 触控 + handle.addEventListener('touchstart', e => { + e.stopImmediatePropagation(); + const touch = e.touches[0]; + startResize(touch.clientX, touch.clientY); + const onMove = ev => { + const t = ev.touches[0]; + doResize(t.clientX, t.clientY); + }; + const onEnd = () => { + document.removeEventListener('touchmove', onMove); + document.removeEventListener('touchend', onEnd); + }; + document.addEventListener('touchmove', onMove, { passive: false }); + document.addEventListener('touchend', onEnd); + }, { passive: false }); + } + + toggleTokenVisibility() { + const inp = document.getElementById('token-input'); + const eye = document.getElementById('token-eye'); + if (inp.type === 'password') { + inp.type = 'text'; + eye.textContent = 'visibility_off'; + } else { + inp.type = 'password'; + eye.textContent = 'visibility'; + } + } + + getToken() { + return document.getElementById('token-input').value.trim(); + } + + async fetchWithAuth(url) { + const token = this.getToken(); + const headers = token ? { Authorization: `token ${token}` } : {}; + const res = await fetch(url, { headers }); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return res; + } + + async loadPackages() { + const owner = (document.getElementById('owner-input').value || 'deep').trim(); + const type = document.getElementById('type-select').value; + const q = document.getElementById('search-input').value.trim(); + const container = document.getElementById('packages-container'); + + container.innerHTML = ` +
+ sync +

正在加载包列表...

+
`; + + let apiUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}`; + if (type || q) { + const params = new URLSearchParams(); + if (type) params.append('type', type); + if (q) params.append('q', q); + params.append('limit', '80'); + apiUrl += '?' + params.toString(); + } + + try { + const res = await this.fetchWithAuth(apiUrl); + let pkgs = await res.json(); + if (!Array.isArray(pkgs)) pkgs = [pkgs]; + this.renderPackages(pkgs); + } catch (e) { + container.innerHTML = ` +
+ error +

${e.message}

+

请检查网络或令牌权限

+
`; + } + } + + renderPackages(packages) { + const container = document.getElementById('packages-container'); + let html = ''; + + packages.forEach(pkg => { + const t = pkg.type || 'generic'; + const repo = pkg.repository ? pkg.repository.full_name : null; + const repoLink = repo + ? `📍 ${repo}` + : `未绑定仓库`; + + html += ` +
+
+
+
${pkg.name}
+
+ ${t.toUpperCase()} + ${pkg.version || '—'} +
+
+ inventory_2 +
+
+ ${repoLink} + chevron_right +
+
`; + }); + + if (packages.length === 0) { + html = ` +
+ folder_open +

没有找到包

+

尝试其他搜索条件

+
`; + } + + container.innerHTML = html; + } + + async directViewPackage() { + const val = document.getElementById('direct-input').value.trim(); + if (!val) { + this.showToast('请输入 类型/包名', 'warning'); + return; + } + const [type, name] = val.split('/').map(s => s.trim()); + if (!type || !name) { + this.showToast('格式错误,应为:类型/包名', 'warning'); + return; + } + this.showPackageVersions(type, name, null); + } + + showToast(message, type = 'info') { + const toast = document.createElement('div'); + const colors = { + info: 'bg-[#5B7B97]', + warning: 'bg-amber-500', + success: 'bg-emerald-500', + error: 'bg-red-500' + }; + toast.style.cssText = `position:fixed;top:24px;right:24px;padding:16px 24px;border-radius:9999px;color:white;font-weight:500;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.2);transform:translateX(120%);transition:all 0.3s cubic-bezier(0.4,0,0.2,1);z-index:10000000;`; + toast.className = colors[type]; + toast.textContent = message; + document.body.appendChild(toast); + setTimeout(() => toast.style.transform = 'translateX(0)', 10); + setTimeout(() => { + toast.style.transform = 'translateX(120%)'; + setTimeout(() => toast.remove(), 300); + }, 2800); + } + + async ensureMarkdownLibraries() { + if (window.SPMMarkdownReady) return; + await this.loadScript('https://cdn.jsdelivr.net/npm/marked@17.0.5/lib/marked.umd.min.js'); + await this.loadScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js'); + + const hlStyle = document.createElement('link'); + hlStyle.rel = 'stylesheet'; + hlStyle.href = 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css'; + document.head.appendChild(hlStyle); + await this.loadScript('https://cdn.jsdelivr.net/npm/katex@0.16.44/dist/katex.min.js'); + await this.loadScript('https://cdn.jsdelivr.net/npm/katex@0.16.44/dist/contrib/auto-render.min.js'); + await this.loadScript('https://cdn.jsdelivr.net/npm/dompurify@3.3.3/dist/purify.min.js'); + if (window.marked) { + marked.setOptions({ + breaks: true, + gfm: true, + highlight: function(code, lang) { + if (window.hljs && hljs.getLanguage(lang)) { + return hljs.highlight(code, { language: lang }).value; + } + return window.hljs ? hljs.highlightAuto(code).value : code; + } + }); + } + window.SPMMarkdownReady = true; + } + + loadScript(src) { + return new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.src = src; + script.onload = resolve; + script.onerror = reject; + document.head.appendChild(script); + }); + } + + async loadRepoReadme(repoFullName) { + const section = document.getElementById('SPM-readme-section'); + const contentEl = document.getElementById('SPM-readme-content'); + if (!section || !contentEl) return; + section.classList.remove('hidden'); + contentEl.innerHTML = ` +
+ sync +

正在加载描述...

+
`; + + await this.ensureMarkdownLibraries(); + + try { + const repoUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/repos/${repoFullName}`; + const repoRes = await this.fetchWithAuth(repoUrl); + const repoInfo = await repoRes.json(); + const defaultBranch = repoInfo.default_branch || 'main'; + const readmeUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/${repoFullName}/raw/${defaultBranch}/README.md`; + const readmeRes = await this.fetchWithAuth(readmeUrl); + + if (readmeRes.ok) { + let mdText = await readmeRes.text(); + let rawHtml = marked.parse(mdText); + let cleanHtml = DOMPurify.sanitize(rawHtml, { ADD_ATTR: ['target'] }); + contentEl.innerHTML = cleanHtml; + + if (window.hljs) { + document.querySelectorAll('#SPM-readme-content pre code').forEach(block => hljs.highlightElement(block)); + } + if (window.renderMathInElement) { + renderMathInElement(contentEl, { + delimiters: [ + {left: "$$", right: "$$", display: true}, + {left: "$", right: "$", display: false} + ], + throwOnError: false + }); + } + } else { + contentEl.innerHTML = ` +
+ description +

该包暂无自述文件

+
`; + } + } catch (err) { + contentEl.innerHTML = ` +
+ error +

加载描述失败

+

${err.message}

+
`; + } + } + + async showPackageVersions(type, name, repoFullName) { + const owner = (document.getElementById('owner-input').value || 'deep').trim(); + let modal = document.getElementById('SPM-modal'); + if (!modal) { + modal = document.createElement('div'); + modal.id = 'SPM-modal'; + modal.style.cssText = ` + position: fixed; + inset: 0; + background: rgba(15, 23, 42, 0.6); + z-index: 99999999; + display: flex; + align-items: center; + justify-content: center; + padding: 16px; + `; + document.body.appendChild(modal); + } + + modal.innerHTML = ` +
+
+
+ package_2 +
+
${name}
+
+ ${type.toUpperCase()} + 所有者:${owner} +
+
+
+ +
+ + +
+ `; + + modal.addEventListener('click', e => { + if (e.target.id === 'SPM-modal') modal.remove(); + }); + + if (repoFullName) { + this.loadRepoReadme(repoFullName); + } + + try { + const url = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}/${type}/${name}`; + const res = await this.fetchWithAuth(url); + const versions = await res.json(); + + let versionsHTML = ''; + if (versions && versions.length > 0) { + versionsHTML = versions.map(v => ` +
+
${v.version}
+
创建于
+
${new Date(v.created_at).toLocaleString('zh-CN')}
+ +
+ `).join(''); + } else { + versionsHTML = ` +
+ inventory_2 +

暂无可用版本

+
`; + } + document.getElementById('versions-container').innerHTML = versionsHTML; + } catch (e) { + document.getElementById('modal-body').innerHTML += ` +
+
+ error +
+
加载版本失败
+
${e.message}
+
+
+
`; + } + } + + async loadVersionToEditor(owner, type, name, version) { + try { + const filesUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}/${type}/${name}/${version}/files`; + const res = await this.fetchWithAuth(filesUrl); + const files = await res.json(); + const jsFile = files.find(f => f.name.toLowerCase().endsWith('.js')); + if (!jsFile) { + this.showToast('此版本没有 .js 扩展文件', 'warning'); + return; + } + + const rawDownloadUrl = `https://scdev.top/api/packages/${owner}/${type}/${name}/${version}/${encodeURIComponent(jsFile.name)}`; + const proxyUrl = `https://spm-proxy.vercel.app/api/fetch?url=${encodeURIComponent(rawDownloadUrl)}`; + + await Scratch.vm.extensionManager.loadExtensionURL(proxyUrl); + this.showToast(`✅ ${jsFile.name} 已成功加载到编辑器!`, 'success'); + + const modal = document.getElementById('SPM-modal'); + if (modal) modal.remove(); + } catch (e) { + console.error('加载扩展失败:', e); + this.showToast(`❌ 加载失败: ${e.message}`, 'error'); + } + } + } + + if (Scratch.extensions.unsandboxed) { + Scratch.extensions.register(new SPMPackageBrowser()); + console.log('📦 SPM 包浏览器(Material UI + 手机触控适配)已加载!'); + } else { + console.error('必须以 unsandboxed 方式加载此扩展!'); + } +})(); \ No newline at end of file diff --git a/extensions.json b/extensions.json index 03dfac0..d43c43b 100644 --- a/extensions.json +++ b/extensions.json @@ -1,1019 +1,1021 @@ -{ - "extensions": [ - { - "slug": "kylin", - "id": "kylin", - "name": "kylin", - "description": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked.", - "descriptionTranslations": { - "zh-cn": "Kylin 是业界第一个用于 Scratch (Turbowarp) 的混淆器,允许你 加密 你的项目,来避免它被盗或被破解。", - "en": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked." - }, - "image": "kylin.png", - "by": [ - { - "name": "FurryR", - "link": "https://github.com/FurryR" - } - ], - "docs": false - }, - { - "slug": "babylon3d", - "id": "babylon3d", - "name": "Babylon3D", - "description": "Best scratch 3D engine.Based on babylonjs.", - "image": "babylon3d.png", - "by": [ - { - "name": "PPN-design", - "link": "https://github.com/DDguan2010" - } - ], - "docs": false - }, - { - "slug": "tensorflow", - "id": "tensorflow", - "name": "TensorFlow", - "description": "Scratch neural networks engine.Based on tensorflowjs.", - "image": "tensorflow.png", - "by": [ - { - "name": "PPN-design", - "link": "https://github.com/DDguan2010" - } - ], - "docs": false - }, - { - "slug": "transformers", - "id": "huggingfacetransformers", - "name": "Hugging Face Transformers", - "description": "Run Hugging Face Transformers.js models in TurboWarp with configurable tasks, devices, and dtypes.", - "image": "transformers.svg", - "by": [ - { - "name": "0.2Studio" - } - ], - "docs": false - }, - { - "slug": "spinepro", - "id": "spinePro", - "name": "SpinePro", - "description": "Use Spine skeletal animation in Scratch projects.", - "image": "spinepro.svg", - "by": [ - { - "name": "PPN-design", - "link": "https://github.com/DDguan2010" - } - ], - "docs": false - }, - { - "slug": "ShangCloud", - "id": "ShangCloud", - "name": "ShangCloud", - "description": "ShangCloud SDK for Scratch", - "image": "shangcloud.png", - "by": [ - { - "name": "Yearnstudio", - "link": "https://yearn.studio" - } - ], - "docs": false - }, - { - "slug": "cybertoolbox", - "id": "toolbox", - "name": "Cybertoolbox", - "description": "Put a bunch of things together!", - "nameTranslations": { - "zh-cn": "赛博猫猫的工具箱", - "en": "Cyberexplorer's ToolBox" - }, - "descriptionTranslations": { - "zh-cn": "把一堆东西塞到了一起!", - "en": "Put a bunch of things together!" - }, - "image": "toolbox.png", - "by": [ - { - "name": "Cyberexplorer", - "link": "https://cyberneko.cn/about" - } - ], - "docs": false - }, - { - "slug": "QwQAI大模型", - "id": "QwQAI大模型", - "name": "QwQAI大模型", - "description": "与通义千问的QwQ大模型及部分其他AI大模型交互。非官方扩展。", - "nameTranslations": { - - }, - "descriptionTranslations": { - - }, - "image": "QwQAI大模型.jpg", - "by": [ - { - "name": "zekkei", - "link": "https://vlink.cc/zekkei" - } - ], - "docs": false, - "samples": [ - "QwQAI大模型" - ] - }, - { - "slug": "小金鱼的屏蔽词", - "id": "小金鱼的屏蔽词", - "name": "小金鱼的屏蔽词", - "description": "小金鱼编写的屏蔽词扩展,可以应用于聊天软件中。", - "nameTranslations": { - - }, - "descriptionTranslations": { - - }, - "image": "小金鱼的屏蔽词.png", - "by": [ - { - "name": "小金鱼", - "link": "https://space.bilibili.com/702559170" - } - ], - "docs": false, - "samples": [ - "小金鱼的屏蔽词" - ] - }, - { - "slug": "本地数据库", - "id": "本地数据库", - "name": "本地数据库", - "description": "更好地将数据储存在本地,与[本地储存]扩展不冲突。(即可储存同名数据而不冲突)", - "nameTranslations": { - - }, - "descriptionTranslations": { - - }, - "image": "本地数据库.jpg", - "by": [ - { - "name": "zekkei", - "link": "https://vlink.cc/zekkei" - } - ], - "docs": false, - "samples": [ - "本地数据库" - ] - }, - { - "slug": "kmsBlur", - "id": "kmsBlur", - "name": "𝙆𝙢𝙨 𝘽𝙡𝙪𝙧", - "description": "使角色迅速模糊.", - "image": "kmsBlur.png", - "by": [ - { - "name": "Kimos", - "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0" - } - ], - "docs": false, - "samples": [ - "kmsBlur" - ] - }, - { - "slug": "seacloud", - "id": "seacloud", - "name": "SeaCloud", - "description": "Account management tools used for SCOS on 02Engine, simplifying", - "nameTranslations": { - "zh-cn": "海云", - "en": "SeaCloud" - }, - "descriptionTranslations": { - "zh-cn": "在02Engine上为SCOS使用的账户管理工具,化繁为简", - "en": "Account management tools used for SCOS on 02Engine, simplifying" - }, - "image": "seacloud.png", - "by": [ - { - "name": "Deep-Sea", - "link": "https://www.deep-sea.filegear-sg.me" - } - ], - "docs": true - }, - { - "slug": "补间 Plus", - "id": "kmsTween", - "name": "补间 Plus", - "description": "计算三次贝塞尔曲线的动画进度和时间,需要一定的Css基础。", - "image": "补间 Plus.png", - "by": [ - { - "name": "孔明", - "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0" - } - ], - "docs": false, - "samples": [ - "补间 Plus" - ] - }, - { - "slug": "msj的工具箱", - "id": "msj的工具箱", - "name": "msj的工具箱", - "description": "包含和网络、文件处理、文件下载和计算有关的实用工具,但还在测试阶段", - "image": "msj的工具箱.png", - "by": [ - { - "name": "玩MC的Sc俊杰", - "link": "https://b23.tv/F2Ut3hr" - } - ], - "docs": false, - "samples": [ - "msj的工具箱" - ] - }, - { - "slug": "神经网络", - "id": "神经网络", - "name": "神经网络", - "description": "一个简单易上手的神经网络扩展", - "image": "神经网络.jpg", - "by": [ - { - "name": "瓜子", - "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0" - } - ], - "docs": true - }, - { - "slug": "MoistsTechnology", - "id": "MoistsTechnology", - "name": "MoistsTechnology", - "description": "一个由汐.mec开发的千奇百怪工具箱😈", - "image": "MoistsTechnology.png", - "by": [ - { - "name": "汐.mec", - "link": "" - } - ], - "docs": false - }, - { - "slug": "texturefix", - "id": "texturefix", - "name": "纹理画布", - "nameTranslations": { - "en-us": "Texture Canvas" - }, - "description": "在独立于画笔的画布上更便携地进行图像绘制", - "image": "texturefix.png", - "descriptionTranslations": { - "en-us": "Better conveniently draw rect,images and textures on standalone canvas" - }, - "by": [ - { - "name": "Xbodw", - "link": "https://space.bilibili.com/1552375363" - } - ], - "docs": false - }, - { - "slug": "oaa", - "id": "objectArray", - "name": "数组和对象", - "nameTranslations": { - "en-us": "Object and Array" - }, - "description": "更完整的JSON对象/数组功能", - "image": "test.png", - "descriptionTranslations": { - "en-us": "Better JSON Features" - }, - "by": [ - { - "name": "Xbodw", - "link": "https://space.bilibili.com/1552375363" - } - ], - "docs": false - }, - { - "slug": "B小猫", - "id": "B小猫", - "name": "B小猫", - "description": "通过哔哩哔哩公开接口获取海量信息,喵(=・ω・=)~", - "image": "B小猫.png", - "by": [ - { - "name": "10000why", - "link": "https://space.bilibili.com/541080936" - } - ], - "docs": true - }, - { - "slug": "更好的浏览器扩展", - "id": "更好的浏览器扩展", - "name": "更好的浏览器扩展", - "description": "让你的舞台可以显示更多的iframe", - "image": "更好的浏览器扩展.jpg", - "by": [ - { - "name": "是zx34呀", - "link": "https://space.bilibili.com/1196118574" - } - ], - "docs": false - }, - { - "slug": "方向猫扩展", - "id": "方向猫扩展", - "name": "方向猫扩展", - "description": "(●ˇ∀ˇ●)~ 显示上下左右移动端辅助按钮", - "image": "方向猫扩展.png", - "by": [ - { - "name": "10000why", - "link": "https://space.bilibili.com/541080936" - } - ], - "docs": false - }, - { - "slug": "快速注册登录", - "id": "快速注册登录", - "name": "快速注册登录", - "description": "一个显示注册登录界面的扩展,可以帮你省下一些制作登陆界面或注册界面的时间(当然前提是你对界面美观不在乎)", - "image": "快速注册登录.jpg", - "by": [ - { - "name": "数字生命3179", - "link": "http://3179582.wikidot.com/start" - } - ], - "docs": true, - "samples": [ - "快速注册登录" - ] - }, - { - "slug": "安卓adb工具", - "id": "安卓adb工具", - "name": "安卓adb工具", - "description": "本扩展可以在你的作品里添加一些安卓功能", - "image": "安卓adb工具.jpg", - "by": [ - { - "name": "青柠工作室", - "link": "https://space.bilibili.com/3493280679463823" - } - ], - "docs": false - }, - { - "slug": "一万的框选框", - "id": "一万的框选框", - "name": "一万的框选框", - "description": "实现在舞台上框选角色并经行侦测。", - "image": "一万的框选框.png", - "by": [ - { - "name": "10000why", - "link": "https://space.bilibili.com/541080936" - } - ], - "docs": false - }, - { - "slug": "贝塞尔曲线", - "id": "bezierCurve", - "name": "贝塞尔曲线", - "description": "生成贝塞尔曲线,支持控制点设置,计算曲线上任意点的坐标和切线角度。", - "image": "bezier-curve.png", - "by": [ - { - "name": "空明2403", - "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0" - } - ], - "docs": false, - "samples": [ - "bezierCurveExample" - ], - "version": "2.1.0" - }, - { - "slug": "更好的询问框", - "id": "更好的询问框", - "name": "更好的询问框", - "description": "一个更加美观的询问框", - "image": "更好的询问框.png", - "by": [ - { - "name": "瓜子", - "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0" - } - ], - "docs": false - }, - { - "slug": "wrapper.global", - "id": "extensionWrapper", - "name": "Extension Wrapper", - "description": "在Turbowarp中加载CCW扩展的前置扩展", - "nameTranslations": { - "en": "Extension Wrapper", - "zh-cn": "扩展适配器" - }, - "descriptionTranslations": { - "en": "A bootstrap extension for CCW extensions loader in Turbowarp", - "zh-cn": "在Turbowarp中加载CCW扩展的前置扩展" - }, - "image": "ccw.svg", - "by": [ - { - "name": "Xbodwf", - "link": "https://github.com/xbodwf" - }, - { - "name": "FurryR", - "link": "https://github.com/FurryR" - } - ], - "docs": false, - "samples": [ - "ccwpolyfill" - ] - }, - { - "slug": "textToURL", - "id": "textToURL", - "name": "文字转URL", - "description": "将文字转换为可显示的URL", - "nameTranslations": { - "en": "Text to URL", - "zh-cn": "文字转URL" - }, - "descriptionTranslations": { - "en": "Generate a URL that displays custom text in the browser, and parse the text from the generated URL", - "zh-cn": "生成可在浏览器显示自定义文字的URL,并从生成的URL中解析文字" - }, - "image": "textToURL.png", - "by": [ - { - "name": "Turboratch", - "link": "https://space.bilibili.com/3546662593104166" - } - ], - "docs": false, - "samples": [ - "textToURL" - ] - }, - { - "slug": "作品锁", - "id": "projectLocking", - "name": "作品锁", - "description": "让你的项目更加安全。", - "image": "projectLocking.png", - "by": [ - { - "name": "朱元翔", - "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1007.0.0" - }, - { - "name": "YL_YOLO", - "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" - }, - { - "name": "10000why", - "link": "https://space.bilibili.com/541080936?spm_id_from=333.337.0.0" - } - ], - "docs": false, - "samples": [ - "作品锁示例作品" - ], - "version": "1.0.0", - "license": "AGPL 3.0" - }, - { - "slug": "3d-basicrt", - "id": "3d-basicrt", - "name": "3d-basicrt", - "description": "喵,这是一个简单易上手的3D扩展,快来试试吧!", - "image": "3d-basicrt.png", - "by": [ - { - "name": "果汁的梦", - "link": "https://space.bilibili.com/3546884505340624?spm_id_from=333.788.0.0" - } - ], - "docs": false - }, - { - "slug": "音频可视化扩展", - "id": "音频可视化", - "name": "音频可视化", - "description": "让音频有了形状", - "image": "音频可视化扩展.png", - "by": [ - { - "name": "YL_YOLO", - "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" - } - ], - "docs": false, - "samples": [ - "音频可视化示例作品" - ] - }, - { - "slug": "GmyOS", - "id": "GmyOS", - "name": "GmyOS", - "description": "GmyOS 是一个复古 DOS 风格的 Scratch 扩展,能打开可拖动终端窗口,支持命令行、虚拟文件系统和简易汇编指令。", - "image": "GmyOS.png", - "by": [ - { - "name": "Gmy", - "link": "https://space.bilibili.com/1004646811?spm_id_from=333.40164.0.0" - } - ], - "docs": false - }, - { - "slug": "简_艺术字", - "id": "简_艺术字", - "name": "简_艺术字", - "description": "简单的艺术字显示扩展", - "image": "简_艺术字.png", - "by": [ - { - "name": "YL_YOLO", - "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" - } - ], - "docs": false, - "samples": [ - "简_艺术字" - ] - }, - { - "slug": "移动端按键映射", - "id": "移动端按键映射", - "name": "移动端按键映射", - "description": "Advanced touch blocks and joystick with key simulation (触屏块加摇杆并且可实现按键模拟)", - "image": "移动端按键映射.png", - "by": [ - { - "name": "YL_YOLO", - "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" - } - ], - "docs": false, - "samples": [ - "移动端按键映射" - ] - }, - { - "slug": "SF文件系统", - "id": "SF文件系统", - "name": "SF文件系统", - "description": "让数据有了形状", - "image": "SF文件系统.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "简·HTML", - "id": "简·HTML", - "name": "简·HTML", - "description": "一款强大的HTML构建拓展(建议与“内嵌框架”搭配使用)", - "image": "简·HTML.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "简易3D", - "id": "简易3D", - "name": "简易3D", - "description": "轻松制作适用于GPU加速的3D项目", - "image": "简易3D.png", - "by": [ - { - "name": "Starfall Twilight(汉化)", - "link": "https://scratch.mit.edu/users/Vadik1/" - }, - { - "name": "Vadik1", - "link": "https://starfallstudio.cn" - } - ], - "docs": false, - "samples": [ - "简易3D" - ] - }, - { - "slug": "全局提示", - "id": "全局提示", - "name": "全局提示", - "description": "信息全掌握", - "image": "全局提示.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "微CSV", - "id": "微CSV", - "name": "微CSV", - "description": "轻表格 轻数据 轻管理", - "image": "微CSV.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "星级评分", - "id": "星级评分", - "name": "星级评分", - "description": "快捷获取用户评价", - "image": "星级评分.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "字符串处理", - "id": "字符串处理", - "name": "字符串处理", - "description": "一些快捷的字符串处理积木", - "image": "字符串处理.png", - "by": [ - { - "name": "Starfall Twilight", - "link": "https://starfallstudio.cn" - } - ], - "docs": false - }, - { - "slug": "网页嗅探器", - "id": "网页嗅探器", - "name": "网页嗅探器", - "description": "让你轻松获取到网页上的内容,只要是能获取到的,都能下!", - "image": "网页嗅探器.png", - "by": [ - { - "name": "F_code", - "link": "https://space.bilibili.com/3546722598914878" - } - ], - "docs": false, - "samples": [ - "网页嗅探器" - ] - }, - { - "slug": "hermiteCurve", - "id": "hermiteCurve", - "name": "hermite曲线", - "description": "保证定点定速度的自定义曲线。", - "image": "hermiteCurve.png", - "by": [ - { - "name": "空明2403", - "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0" - } - ], - "docs": false, - "samples": [ - "hermiteCurveExample" - ] - }, - { - "slug": "markdown", - "id": "WitCatMarkDown", - "name": "WitCat MarkDown", - "description": "Render Markdown content with custom syntax, tables, code highlighting, and interactive triggers.", - "nameTranslations": { - "zh-cn": "白猫的markdown" - }, - "descriptionTranslations": { - "zh-cn": "渲染 Markdown 内容,支持自定义语法、表格、代码高亮和交互触发器。" - }, - "image": "markdown.svg", - "by": [ - { - "name": "白猫", - "link": "https://www.ccw.site/student/6173f57f48cf8f4796fc860e" - }, - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "docs": true, - "samples": [ - "markdown" - ] - }, - { - "slug": "拼音转文字", - "id": "拼音转文字", - "name": "拼音转文字", - "description": "将拼音转换为汉字。", - "image": "拼音转文字.png", - "by": [ - { - "name": "Uonsan", - "link": "https://space.bilibili.com/3546882573862975" - } - ], - "docs": false, - "samples": [ - "拼音转文字" - ] - }, - { - "slug": "github面板", - "id": "github面板", - "name": "github面板", - "description": "github面板。", - "image": "GitHub面板.jpg", - "by": [ - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "docs": true, - "samples": [ - "GitHub面板" - ] - }, - { - "slug": "让变量列表换行", - "id": "让变量列表换行", - "name": "让变量列表换行", - "description": "让变量列表换行的工具", - "image": "让变量列表换行.jpg", - "by": [ - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "docs": false - }, - { - "slug": "寻路", - "id": "寻路", - "name": "寻路", - "description": "一个高性能的寻路扩展", - "nameTranslations": { - "zh-cn": "一个高性能的寻路扩展" - }, - "descriptionTranslations": { - "zh-cn": "一个高性能的寻路扩展" - }, - "image": "寻路.svg", - "by": [ - { - "name": "Arkos(使兼容)", - "link": "https://space.bilibili.com/446532545?spm_id_from=333.337.0.0" - }, - { - "name": "朱元翔", - "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1387.0.0" - } - ], - "docs": false - }, - { - "slug": "musicplus", - "id": "musicplus", - "name": "音乐 +", - "description": "升级版音乐扩展", - "nameTranslations": { - "zh-cn": "音乐 +", - "en": "Music Plus" - }, - "descriptionTranslations": { - "zh-cn": "升级版音乐扩展", - "en": "Music extension, but advanced!" - }, - "image": "musicplus.png", - "by": [ - { - "name": "ChessBrainIsNotHuman", - "link": "https://chessbrain.qzz.io/" - } - ], - "docs": false - }, - { - "slug": "调试器", - "id": "DebuggerExtensionTS", - "name": "调试器", - "description": "调试器", - "nameTranslations": { - "zh-cn": "调试器" - }, - "descriptionTranslations": { - "zh-cn": "调试器" - }, - "image": "调试器.png", - "by": [ - { - "name": "TheShovle" - }, - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "scratchCompatible": false, - "docs": false - }, - { - "slug": "panel", - "id": "settingspanel", - "name": "panel", - "description": "panel", - "nameTranslations": { - "zh-cn": "panel" - }, - "descriptionTranslations": { - "zh-cn": "panel" - }, - "image": "panel.svg", - "by": [ - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "scratchCompatible": false, - "docs": false - }, - { - "slug": "mdui", - "id": "mdui", - "name": "mdui弹窗", - "description": "A dialog and snackbar extension based on mdui for building interactive UI in projects.", - "nameTranslations": { - "zh-cn": "mdui弹窗", - "en": "mdui Dialog" - }, - "descriptionTranslations": { - "zh-cn": "基于 mdui 的弹窗与消息提示扩展,可用于在作品中构建交互式界面。", - "en": "A dialog and snackbar extension based on mdui for building interactive UI in projects." - }, - "image": "mdui.jpeg", - "by": [ - { - "name": "不想上学" - } - ], - "scratchCompatible": false, - "docs": false - }, - { - "slug": "cbeg", - "id": "cbeg", - "name": "CB Extension Gallery", - "description": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery.", - "nameTranslations": { - "zh-cn": "CB Extension Gallery", - "en": "CB Extension Gallery" - }, - "descriptionTranslations": { - "zh-cn": "一个轻量的 Scratch 扩展制作工具,并可直接打开 CB Extension Gallery。", - "en": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery." - }, - "image": "cbeg.png", - "by": [ - { - "name": "ChessBrainIsNotHuman", - "link": "https://chessbrain.qzz.io/" - } - ], - "docs": false - }, - { - "slug": "feishu", - "id": "feishu", - "name": "飞书", - "description": "✨更好的WebHook", - "nameTranslations": { - "zh-cn": "飞书", - "en": "FlyBook" - }, - "descriptionTranslations": { - "zh-cn": "✨更好的WebHook", - "en": "✨Better WebHook" - }, - "image": "FlyBook.png", - "by": [ - { - "name": "Maxkore", - "link": "https://github.com/Maxkore-Geek/" - } - ], - "scratchCompatible": false, - "docs": false, - "samples": [ - "飞书示例" - ], - "version": "1.0.0", - "license": "MIT" - }, - { - "slug": "backgroundremoverpanel", - "id": "backgroundremoverpanel", - "name": "去背景", - "description": "去背景", - "nameTranslations": { - "zh-cn": "去背景" - }, - "descriptionTranslations": { - "zh-cn": "去背景" - }, - "image": "backgroundremoverpanel.png", - "by": [ - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "docs": false - }, - { - "slug": "更好的画板", - "id": "更好的画板", - "name": "更好的画板", - "description": "更好的画板", - "nameTranslations": { - "zh-cn": "更好的画板" - }, - "descriptionTranslations": { - "zh-cn": "更好的画板" - }, - "image": "更好的画板.png", - "by": [ - { - "name": "yuan", - "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" - } - ], - "docs": false - } - ] -} +{ + "extensions": [ + { + "slug": "kylin", + "id": "kylin", + "name": "kylin", + "description": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked.", + "descriptionTranslations": { + "zh-cn": "Kylin 是业界第一个用于 Scratch (Turbowarp) 的混淆器,允许你 加密 你的项目,来避免它被盗或被破解。", + "en": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked." + }, + "image": "kylin.png", + "by": [ + { + "name": "FurryR", + "link": "https://github.com/FurryR" + } + ], + "docs": false + }, + { + "slug": "babylon3d", + "id": "babylon3d", + "name": "Babylon3D", + "description": "Best scratch 3D engine.Based on babylonjs.", + "image": "babylon3d.png", + "by": [ + { + "name": "PPN-design", + "link": "https://github.com/DDguan2010" + } + ], + "docs": false + }, + { + "slug": "tensorflow", + "id": "tensorflow", + "name": "TensorFlow", + "description": "Scratch neural networks engine.Based on tensorflowjs.", + "image": "tensorflow.png", + "by": [ + { + "name": "PPN-design", + "link": "https://github.com/DDguan2010" + } + ], + "docs": false + }, + { + "slug": "transformers", + "id": "huggingfacetransformers", + "name": "Hugging Face Transformers", + "description": "Run Hugging Face Transformers.js models in TurboWarp with configurable tasks, devices, and dtypes.", + "image": "transformers.svg", + "by": [ + { + "name": "0.2Studio" + } + ], + "docs": false + }, + { + "slug": "spinepro", + "id": "spinePro", + "name": "SpinePro", + "description": "Use Spine skeletal animation in Scratch projects.", + "image": "spinepro.svg", + "by": [ + { + "name": "PPN-design", + "link": "https://github.com/DDguan2010" + } + ], + "docs": false + }, + { + "slug": "ShangCloud", + "id": "ShangCloud", + "name": "ShangCloud", + "description": "ShangCloud SDK for Scratch", + "image": "shangcloud.png", + "by": [ + { + "name": "Yearnstudio", + "link": "https://yearn.studio" + } + ], + "docs": false + }, + { + "slug": "cybertoolbox", + "id": "toolbox", + "name": "Cybertoolbox", + "description": "Put a bunch of things together!", + "nameTranslations": { + "zh-cn": "赛博猫猫的工具箱", + "en": "Cyberexplorer's ToolBox" + }, + "descriptionTranslations": { + "zh-cn": "把一堆东西塞到了一起!", + "en": "Put a bunch of things together!" + }, + "image": "toolbox.png", + "by": [ + { + "name": "Cyberexplorer", + "link": "https://cyberneko.cn/about" + } + ], + "docs": false + }, + { + "slug": "QwQAI大模型", + "id": "QwQAI大模型", + "name": "QwQAI大模型", + "description": "与通义千问的QwQ大模型及部分其他AI大模型交互。非官方扩展。", + "nameTranslations": {}, + "descriptionTranslations": {}, + "image": "QwQAI大模型.jpg", + "by": [ + { + "name": "zekkei", + "link": "https://vlink.cc/zekkei" + } + ], + "docs": false, + "samples": [ + "QwQAI大模型" + ] + }, + { + "slug": "小金鱼的屏蔽词", + "id": "小金鱼的屏蔽词", + "name": "小金鱼的屏蔽词", + "description": "小金鱼编写的屏蔽词扩展,可以应用于聊天软件中。", + "nameTranslations": {}, + "descriptionTranslations": {}, + "image": "小金鱼的屏蔽词.png", + "by": [ + { + "name": "小金鱼", + "link": "https://space.bilibili.com/702559170" + } + ], + "docs": false, + "samples": [ + "小金鱼的屏蔽词" + ] + }, + { + "slug": "本地数据库", + "id": "本地数据库", + "name": "本地数据库", + "description": "更好地将数据储存在本地,与[本地储存]扩展不冲突。(即可储存同名数据而不冲突)", + "nameTranslations": {}, + "descriptionTranslations": {}, + "image": "本地数据库.jpg", + "by": [ + { + "name": "zekkei", + "link": "https://vlink.cc/zekkei" + } + ], + "docs": false, + "samples": [ + "本地数据库" + ] + }, + { + "slug": "kmsBlur", + "id": "kmsBlur", + "name": "𝙆𝙢𝙨 𝘽𝙡𝙪𝙧", + "description": "使角色迅速模糊.", + "image": "kmsBlur.png", + "by": [ + { + "name": "Kimos", + "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0" + } + ], + "docs": false, + "samples": [ + "kmsBlur" + ] + }, + { + "slug": "seacloud", + "id": "seacloud", + "name": "SeaCloud", + "description": "Account management tools used for SCOS on 02Engine, simplifying", + "nameTranslations": { + "zh-cn": "海云", + "en": "SeaCloud" + }, + "descriptionTranslations": { + "zh-cn": "在02Engine上为SCOS使用的账户管理工具,化繁为简", + "en": "Account management tools used for SCOS on 02Engine, simplifying" + }, + "image": "seacloud.png", + "by": [ + { + "name": "Deep-Sea", + "link": "https://www.deep-sea.filegear-sg.me" + } + ], + "docs": true + }, + { + "slug": "补间 Plus", + "id": "kmsTween", + "name": "补间 Plus", + "description": "计算三次贝塞尔曲线的动画进度和时间,需要一定的Css基础。", + "image": "补间 Plus.png", + "by": [ + { + "name": "孔明", + "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0" + } + ], + "docs": false, + "samples": [ + "补间 Plus" + ] + }, + { + "slug": "msj的工具箱", + "id": "msj的工具箱", + "name": "msj的工具箱", + "description": "包含和网络、文件处理、文件下载和计算有关的实用工具,但还在测试阶段", + "image": "msj的工具箱.png", + "by": [ + { + "name": "玩MC的Sc俊杰", + "link": "https://b23.tv/F2Ut3hr" + } + ], + "docs": false, + "samples": [ + "msj的工具箱" + ] + }, + { + "slug": "神经网络", + "id": "神经网络", + "name": "神经网络", + "description": "一个简单易上手的神经网络扩展", + "image": "神经网络.jpg", + "by": [ + { + "name": "瓜子", + "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0" + } + ], + "docs": true + }, + { + "slug": "MoistsTechnology", + "id": "MoistsTechnology", + "name": "MoistsTechnology", + "description": "一个由汐.mec开发的千奇百怪工具箱😈", + "image": "MoistsTechnology.png", + "by": [ + { + "name": "汐.mec", + "link": "" + } + ], + "docs": false + }, + { + "slug": "texturefix", + "id": "texturefix", + "name": "纹理画布", + "nameTranslations": { + "en-us": "Texture Canvas" + }, + "description": "在独立于画笔的画布上更便携地进行图像绘制", + "image": "texturefix.png", + "descriptionTranslations": { + "en-us": "Better conveniently draw rect,images and textures on standalone canvas" + }, + "by": [ + { + "name": "Xbodw", + "link": "https://space.bilibili.com/1552375363" + } + ], + "docs": false + }, + { + "slug": "oaa", + "id": "objectArray", + "name": "数组和对象", + "nameTranslations": { + "en-us": "Object and Array" + }, + "description": "更完整的JSON对象/数组功能", + "image": "test.png", + "descriptionTranslations": { + "en-us": "Better JSON Features" + }, + "by": [ + { + "name": "Xbodw", + "link": "https://space.bilibili.com/1552375363" + } + ], + "docs": false + }, + { + "slug": "B小猫", + "id": "B小猫", + "name": "B小猫", + "description": "通过哔哩哔哩公开接口获取海量信息,喵(=・ω・=)~", + "image": "B小猫.png", + "by": [ + { + "name": "10000why", + "link": "https://space.bilibili.com/541080936" + } + ], + "docs": true + }, + { + "slug": "更好的浏览器扩展", + "id": "更好的浏览器扩展", + "name": "更好的浏览器扩展", + "description": "让你的舞台可以显示更多的iframe", + "image": "更好的浏览器扩展.jpg", + "by": [ + { + "name": "是zx34呀", + "link": "https://space.bilibili.com/1196118574" + } + ], + "docs": false + }, + { + "slug": "方向猫扩展", + "id": "方向猫扩展", + "name": "方向猫扩展", + "description": "(●ˇ∀ˇ●)~ 显示上下左右移动端辅助按钮", + "image": "方向猫扩展.png", + "by": [ + { + "name": "10000why", + "link": "https://space.bilibili.com/541080936" + } + ], + "docs": false + }, + { + "slug": "快速注册登录", + "id": "快速注册登录", + "name": "快速注册登录", + "description": "一个显示注册登录界面的扩展,可以帮你省下一些制作登陆界面或注册界面的时间(当然前提是你对界面美观不在乎)", + "image": "快速注册登录.jpg", + "by": [ + { + "name": "数字生命3179", + "link": "http://3179582.wikidot.com/start" + } + ], + "docs": true, + "samples": [ + "快速注册登录" + ] + }, + { + "slug": "安卓adb工具", + "id": "安卓adb工具", + "name": "安卓adb工具", + "description": "本扩展可以在你的作品里添加一些安卓功能", + "image": "安卓adb工具.jpg", + "by": [ + { + "name": "青柠工作室", + "link": "https://space.bilibili.com/3493280679463823" + } + ], + "docs": false + }, + { + "slug": "一万的框选框", + "id": "一万的框选框", + "name": "一万的框选框", + "description": "实现在舞台上框选角色并经行侦测。", + "image": "一万的框选框.png", + "by": [ + { + "name": "10000why", + "link": "https://space.bilibili.com/541080936" + } + ], + "docs": false + }, + { + "slug": "贝塞尔曲线", + "id": "bezierCurve", + "name": "贝塞尔曲线", + "description": "生成贝塞尔曲线,支持控制点设置,计算曲线上任意点的坐标和切线角度。", + "image": "bezier-curve.png", + "by": [ + { + "name": "空明2403", + "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0" + } + ], + "docs": false, + "samples": [ + "bezierCurveExample" + ], + "version": "2.1.0" + }, + { + "slug": "更好的询问框", + "id": "更好的询问框", + "name": "更好的询问框", + "description": "一个更加美观的询问框", + "image": "更好的询问框.png", + "by": [ + { + "name": "瓜子", + "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0" + } + ], + "docs": false + }, + { + "slug": "wrapper.global", + "id": "extensionWrapper", + "name": "Extension Wrapper", + "description": "在Turbowarp中加载CCW扩展的前置扩展", + "nameTranslations": { + "en": "Extension Wrapper", + "zh-cn": "扩展适配器" + }, + "descriptionTranslations": { + "en": "A bootstrap extension for CCW extensions loader in Turbowarp", + "zh-cn": "在Turbowarp中加载CCW扩展的前置扩展" + }, + "image": "ccw.svg", + "by": [ + { + "name": "Xbodwf", + "link": "https://github.com/xbodwf" + }, + { + "name": "FurryR", + "link": "https://github.com/FurryR" + } + ], + "docs": false, + "samples": [ + "ccwpolyfill" + ] + }, + { + "slug": "textToURL", + "id": "textToURL", + "name": "文字转URL", + "description": "将文字转换为可显示的URL", + "nameTranslations": { + "en": "Text to URL", + "zh-cn": "文字转URL" + }, + "descriptionTranslations": { + "en": "Generate a URL that displays custom text in the browser, and parse the text from the generated URL", + "zh-cn": "生成可在浏览器显示自定义文字的URL,并从生成的URL中解析文字" + }, + "image": "textToURL.png", + "by": [ + { + "name": "Turboratch", + "link": "https://space.bilibili.com/3546662593104166" + } + ], + "docs": false, + "samples": [ + "textToURL" + ] + }, + { + "slug": "作品锁", + "id": "projectLocking", + "name": "作品锁", + "description": "让你的项目更加安全。", + "image": "projectLocking.png", + "by": [ + { + "name": "朱元翔", + "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1007.0.0" + }, + { + "name": "YL_YOLO", + "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" + }, + { + "name": "10000why", + "link": "https://space.bilibili.com/541080936?spm_id_from=333.337.0.0" + } + ], + "docs": false, + "samples": [ + "作品锁示例作品" + ], + "version": "1.0.0", + "license": "AGPL 3.0" + }, + { + "slug": "3d-basicrt", + "id": "3d-basicrt", + "name": "3d-basicrt", + "description": "喵,这是一个简单易上手的3D扩展,快来试试吧!", + "image": "3d-basicrt.png", + "by": [ + { + "name": "果汁的梦", + "link": "https://space.bilibili.com/3546884505340624?spm_id_from=333.788.0.0" + } + ], + "docs": false + }, + { + "slug": "音频可视化扩展", + "id": "音频可视化", + "name": "音频可视化", + "description": "让音频有了形状", + "image": "音频可视化扩展.png", + "by": [ + { + "name": "YL_YOLO", + "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" + } + ], + "docs": false, + "samples": [ + "音频可视化示例作品" + ] + }, + { + "slug": "GmyOS", + "id": "GmyOS", + "name": "GmyOS", + "description": "GmyOS 是一个复古 DOS 风格的 Scratch 扩展,能打开可拖动终端窗口,支持命令行、虚拟文件系统和简易汇编指令。", + "image": "GmyOS.png", + "by": [ + { + "name": "Gmy", + "link": "https://space.bilibili.com/1004646811?spm_id_from=333.40164.0.0" + } + ], + "docs": false + }, + { + "slug": "简_艺术字", + "id": "简_艺术字", + "name": "简_艺术字", + "description": "简单的艺术字显示扩展", + "image": "简_艺术字.png", + "by": [ + { + "name": "YL_YOLO", + "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" + } + ], + "docs": false, + "samples": [ + "简_艺术字" + ] + }, + { + "slug": "移动端按键映射", + "id": "移动端按键映射", + "name": "移动端按键映射", + "description": "Advanced touch blocks and joystick with key simulation (触屏块加摇杆并且可实现按键模拟)", + "image": "移动端按键映射.png", + "by": [ + { + "name": "YL_YOLO", + "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0" + } + ], + "docs": false, + "samples": [ + "移动端按键映射" + ] + }, + { + "slug": "SF文件系统", + "id": "SF文件系统", + "name": "SF文件系统", + "description": "让数据有了形状", + "image": "SF文件系统.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "简·HTML", + "id": "简·HTML", + "name": "简·HTML", + "description": "一款强大的HTML构建拓展(建议与“内嵌框架”搭配使用)", + "image": "简·HTML.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "简易3D", + "id": "简易3D", + "name": "简易3D", + "description": "轻松制作适用于GPU加速的3D项目", + "image": "简易3D.png", + "by": [ + { + "name": "Starfall Twilight(汉化)", + "link": "https://scratch.mit.edu/users/Vadik1/" + }, + { + "name": "Vadik1", + "link": "https://starfallstudio.cn" + } + ], + "docs": false, + "samples": [ + "简易3D" + ] + }, + { + "slug": "全局提示", + "id": "全局提示", + "name": "全局提示", + "description": "信息全掌握", + "image": "全局提示.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "微CSV", + "id": "微CSV", + "name": "微CSV", + "description": "轻表格 轻数据 轻管理", + "image": "微CSV.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "星级评分", + "id": "星级评分", + "name": "星级评分", + "description": "快捷获取用户评价", + "image": "星级评分.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "字符串处理", + "id": "字符串处理", + "name": "字符串处理", + "description": "一些快捷的字符串处理积木", + "image": "字符串处理.png", + "by": [ + { + "name": "Starfall Twilight", + "link": "https://starfallstudio.cn" + } + ], + "docs": false + }, + { + "slug": "网页嗅探器", + "id": "网页嗅探器", + "name": "网页嗅探器", + "description": "让你轻松获取到网页上的内容,只要是能获取到的,都能下!", + "image": "网页嗅探器.png", + "by": [ + { + "name": "F_code", + "link": "https://space.bilibili.com/3546722598914878" + } + ], + "docs": false, + "samples": [ + "网页嗅探器" + ] + }, + { + "slug": "hermiteCurve", + "id": "hermiteCurve", + "name": "hermite曲线", + "description": "保证定点定速度的自定义曲线。", + "image": "hermiteCurve.png", + "by": [ + { + "name": "空明2403", + "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0" + } + ], + "docs": false, + "samples": [ + "hermiteCurveExample" + ] + }, + { + "slug": "markdown", + "id": "WitCatMarkDown", + "name": "WitCat MarkDown", + "description": "Render Markdown content with custom syntax, tables, code highlighting, and interactive triggers.", + "nameTranslations": { + "zh-cn": "白猫的markdown" + }, + "descriptionTranslations": { + "zh-cn": "渲染 Markdown 内容,支持自定义语法、表格、代码高亮和交互触发器。" + }, + "image": "markdown.svg", + "by": [ + { + "name": "白猫", + "link": "https://www.ccw.site/student/6173f57f48cf8f4796fc860e" + }, + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "docs": true, + "samples": [ + "markdown" + ] + }, + { + "slug": "拼音转文字", + "id": "拼音转文字", + "name": "拼音转文字", + "description": "将拼音转换为汉字。", + "image": "拼音转文字.png", + "by": [ + { + "name": "Uonsan", + "link": "https://space.bilibili.com/3546882573862975" + } + ], + "docs": false, + "samples": [ + "拼音转文字" + ] + }, + { + "slug": "github面板", + "id": "github面板", + "name": "github面板", + "description": "github面板。", + "image": "GitHub面板.jpg", + "by": [ + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "docs": true, + "samples": [ + "GitHub面板" + ] + }, + { + "slug": "让变量列表换行", + "id": "让变量列表换行", + "name": "让变量列表换行", + "description": "让变量列表换行的工具", + "image": "让变量列表换行.jpg", + "by": [ + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "docs": false + }, + { + "slug": "寻路", + "id": "寻路", + "name": "寻路", + "description": "一个高性能的寻路扩展", + "nameTranslations": { + "zh-cn": "一个高性能的寻路扩展" + }, + "descriptionTranslations": { + "zh-cn": "一个高性能的寻路扩展" + }, + "image": "寻路.svg", + "by": [ + { + "name": "Arkos(使兼容)", + "link": "https://space.bilibili.com/446532545?spm_id_from=333.337.0.0" + }, + { + "name": "朱元翔", + "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1387.0.0" + } + ], + "docs": false + }, + { + "slug": "musicplus", + "id": "musicplus", + "name": "音乐 +", + "description": "升级版音乐扩展", + "nameTranslations": { + "zh-cn": "音乐 +", + "en": "Music Plus" + }, + "descriptionTranslations": { + "zh-cn": "升级版音乐扩展", + "en": "Music extension, but advanced!" + }, + "image": "musicplus.png", + "by": [ + { + "name": "ChessBrainIsNotHuman", + "link": "https://chessbrain.qzz.io/" + } + ], + "docs": false + }, + { + "slug": "调试器", + "id": "DebuggerExtensionTS", + "name": "调试器", + "description": "调试器", + "nameTranslations": { + "zh-cn": "调试器" + }, + "descriptionTranslations": { + "zh-cn": "调试器" + }, + "image": "调试器.png", + "by": [ + { + "name": "TheShovle" + }, + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "scratchCompatible": false, + "docs": false + }, + { + "slug": "panel", + "id": "settingspanel", + "name": "panel", + "description": "panel", + "nameTranslations": { + "zh-cn": "panel" + }, + "descriptionTranslations": { + "zh-cn": "panel" + }, + "image": "panel.svg", + "by": [ + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "scratchCompatible": false, + "docs": false + }, + { + "slug": "mdui", + "id": "mdui", + "name": "mdui弹窗", + "description": "A dialog and snackbar extension based on mdui for building interactive UI in projects.", + "nameTranslations": { + "zh-cn": "mdui弹窗", + "en": "mdui Dialog" + }, + "descriptionTranslations": { + "zh-cn": "基于 mdui 的弹窗与消息提示扩展,可用于在作品中构建交互式界面。", + "en": "A dialog and snackbar extension based on mdui for building interactive UI in projects." + }, + "image": "mdui.jpeg", + "by": [ + { + "name": "不想上学" + } + ], + "scratchCompatible": false, + "docs": false + }, + { + "slug": "cbeg", + "id": "cbeg", + "name": "CB Extension Gallery", + "description": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery.", + "nameTranslations": { + "zh-cn": "CB Extension Gallery", + "en": "CB Extension Gallery" + }, + "descriptionTranslations": { + "zh-cn": "一个轻量的 Scratch 扩展制作工具,并可直接打开 CB Extension Gallery。", + "en": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery." + }, + "image": "cbeg.png", + "by": [ + { + "name": "ChessBrainIsNotHuman", + "link": "https://chessbrain.qzz.io/" + } + ], + "docs": false + }, + { + "slug": "feishu", + "id": "feishu", + "name": "飞书", + "description": "✨更好的WebHook", + "nameTranslations": { + "zh-cn": "飞书", + "en": "FlyBook" + }, + "descriptionTranslations": { + "zh-cn": "✨更好的WebHook", + "en": "✨Better WebHook" + }, + "image": "FlyBook.png", + "by": [ + { + "name": "Maxkore", + "link": "https://github.com/Maxkore-Geek/" + } + ], + "scratchCompatible": false, + "docs": false, + "samples": [ + "飞书示例" + ], + "version": "1.0.0", + "license": "MIT" + }, + { + "slug": "backgroundremoverpanel", + "id": "backgroundremoverpanel", + "name": "去背景", + "description": "去背景", + "nameTranslations": { + "zh-cn": "去背景" + }, + "descriptionTranslations": { + "zh-cn": "去背景" + }, + "image": "backgroundremoverpanel.png", + "by": [ + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "docs": false + }, + { + "slug": "更好的画板", + "id": "更好的画板", + "name": "更好的画板", + "description": "更好的画板", + "nameTranslations": { + "zh-cn": "更好的画板" + }, + "descriptionTranslations": { + "zh-cn": "更好的画板" + }, + "image": "更好的画板.png", + "by": [ + { + "name": "yuan", + "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d" + } + ], + "docs": false + }, + { + "slug": "test1", + "id": "test1", + "name": "test1", + "description": "test1test1test1", + "image": "test1.png", + "by": [ + { + "name": "test777" + } + ], + "docs": false, + "version": "test1" + } + ] +} \ No newline at end of file diff --git a/image/test1.png b/image/test1.png new file mode 100644 index 0000000..e85b678 Binary files /dev/null and b/image/test1.png differ