UNPKG

@silexlabs/silex

Version:

Free and easy website builder for everyone.

49 lines (39 loc) 1.43 kB
import { Editor } from 'grapesjs' export default function pluginUploadProgress(editor: Editor) { const assetManager = editor.AssetManager const barIntervals = new WeakMap<HTMLDivElement, number>() editor.on('asset:upload:start', () => { const header = document.querySelector('.gjs-am-assets-header') as HTMLDivElement | null if (!header || header.querySelector('.gjs-upload-bar')) return const bar = document.createElement('div') bar.className = 'gjs-upload-bar' bar.style.cssText = ` height: 4px; background: #28a745; width: 0%; margin-top: 4px; transition: width 0.2s ease; ` header.appendChild(bar) let percent = 0 const interval = setInterval(() => { percent = Math.min(percent + Math.random() * 10, 95) bar.style.width = `${percent}%` }, 200) barIntervals.set(bar, interval as unknown as number) }) const cleanup = (success = true) => { const bar = document.querySelector('.gjs-upload-bar') as HTMLDivElement | null if (!bar) return const interval = barIntervals.get(bar) if (interval) { clearInterval(interval) barIntervals.delete(bar) } if (!success) bar.style.background = '#dc3545' bar.style.width = '100%' setTimeout(() => bar.remove(), success ? 1000 : 2000) } editor.on('asset:upload:end', () => cleanup(true)) editor.on('asset:upload:error', () => cleanup(false)) }