@inpageedit/core 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/InPageEdit.js +2 -2
  2. package/dist/{PluginImagesUsed-DWpe6M-r.js → PluginImagesUsed-D9D4IRJt.js} +2 -2
  3. package/dist/{PluginImagesUsed-DWpe6M-r.js.map → PluginImagesUsed-D9D4IRJt.js.map} +1 -1
  4. package/dist/{PluginPrefSync-CmVHL2wx.js → PluginPrefSync-DzmDUTF-.js} +2 -2
  5. package/dist/{PluginPrefSync-CmVHL2wx.js.map → PluginPrefSync-DzmDUTF-.js.map} +1 -1
  6. package/dist/{PluginStoreApp-CmLstT3F.js → PluginStoreApp-BifScxOt.js} +2 -2
  7. package/dist/{PluginStoreApp-CmLstT3F.js.map → PluginStoreApp-BifScxOt.js.map} +1 -1
  8. package/dist/{PluginTemplatesUsed-BjRYFXHz.js → PluginTemplatesUsed-De0Y5yo9.js} +2 -2
  9. package/dist/{PluginTemplatesUsed-BjRYFXHz.js.map → PluginTemplatesUsed-De0Y5yo9.js.map} +1 -1
  10. package/dist/core.js +2 -2
  11. package/dist/{index-DTU2DZU6.js → index-9I-lTJju.js} +153 -143
  12. package/dist/index-9I-lTJju.js.map +1 -0
  13. package/dist/{index-C0spLL-i.js → index-Ay5PsdkH.js} +250 -248
  14. package/dist/{index-C0spLL-i.js.map → index-Ay5PsdkH.js.map} +1 -1
  15. package/dist/{index-CkSdNy0U.js → index-B5tbjHvN.js} +2 -2
  16. package/dist/{index-CkSdNy0U.js.map → index-B5tbjHvN.js.map} +1 -1
  17. package/dist/{index-BYgh1HkH.js → index-B6Zxq3gX.js} +2 -2
  18. package/dist/{index-BYgh1HkH.js.map → index-B6Zxq3gX.js.map} +1 -1
  19. package/dist/{index-BVMm7Dix.js → index-BVuMfFbP.js} +3 -3
  20. package/dist/{index-BVMm7Dix.js.map → index-BVuMfFbP.js.map} +1 -1
  21. package/dist/{index-DvFkW8lL.js → index-BwGWWeee.js} +2 -2
  22. package/dist/{index-DvFkW8lL.js.map → index-BwGWWeee.js.map} +1 -1
  23. package/dist/{index-Dfdy54gH.js → index-Cn0EjRz9.js} +2 -2
  24. package/dist/{index-Dfdy54gH.js.map → index-Cn0EjRz9.js.map} +1 -1
  25. package/dist/{index-LvMaeDQn.js → index-D3hnOW_f.js} +8 -8
  26. package/dist/{index-LvMaeDQn.js.map → index-D3hnOW_f.js.map} +1 -1
  27. package/dist/{index-D-8cyCdX.js → index-D6AvNjpW.js} +31 -27
  28. package/dist/index-D6AvNjpW.js.map +1 -0
  29. package/dist/{index-BbvMbIgz.js → index-DiWAbu-c.js} +3 -3
  30. package/dist/{index-BbvMbIgz.js.map → index-DiWAbu-c.js.map} +1 -1
  31. package/dist/{index-CUDVeUEv.js → index-DkyIt0u7.js} +2 -2
  32. package/dist/{index-CUDVeUEv.js.map → index-DkyIt0u7.js.map} +1 -1
  33. package/dist/{index-BlVSMvH-.js → index-JE9-Xotj.js} +246 -221
  34. package/dist/index-JE9-Xotj.js.map +1 -0
  35. package/dist/{index-JvsrhizC.js → index-b29qTV0M.js} +3 -3
  36. package/dist/{index-JvsrhizC.js.map → index-b29qTV0M.js.map} +1 -1
  37. package/dist/{index-Ce-zc5RR.js → index-mLleTCbq.js} +2 -2
  38. package/dist/{index-Ce-zc5RR.js.map → index-mLleTCbq.js.map} +1 -1
  39. package/dist/index.d.ts +16 -10
  40. package/dist/index.js +2 -2
  41. package/dist/models/index.js +1 -1
  42. package/dist/plugins/index.js +12 -12
  43. package/dist/services/index.js +1 -1
  44. package/lib/index.umd.js +18 -18
  45. package/lib/index.umd.js.map +1 -1
  46. package/package.json +1 -1
  47. package/dist/index-BlVSMvH-.js.map +0 -1
  48. package/dist/index-D-8cyCdX.js.map +0 -1
  49. package/dist/index-DTU2DZU6.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-JE9-Xotj.js","sources":["../src/plugins/quick-upload/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\n\nimport './style.scss'\n\nimport BasePlugin from '@/plugins/BasePlugin'\nimport { RegisterPreferences } from '@/decorators/Preferences'\nimport { IconUpload } from '@/components/Icon'\nimport { CheckBox } from '@/components'\nimport type { UploadFileResult } from '@/services/WikiFileService'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickUpload: PluginQuickUpload\n }\n interface Preferences {\n 'quickUpload.summary': string\n }\n}\n\ntype UploadItem = {\n id: string\n file: File\n filename: string\n text: string\n status: 'queued' | 'uploading' | 'success' | 'warning' | 'error' | 'paused'\n message?: string\n retryable?: boolean\n fileUrl?: string\n result?: UploadFileResult\n}\n\nconst PreviewPlaceholderNA = ({ $ }: { $: (strings: TemplateStringsArray) => string }) => (\n <div className=\"ipe-quickUpload__preview-placeholder is-na\">\n <span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n class=\"icon icon-tabler icons-tabler-filled icon-tabler-file-unknown\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 2l.117 .007a1 1 0 0 1 .876 .876l.007 .117v4l.005 .15a2 2 0 0 0 1.838 1.844l.157 .006h4l.117 .007a1 1 0 0 1 .876 .876l.007 .117v9a3 3 0 0 1 -2.824 2.995l-.176 .005h-10a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-14a3 3 0 0 1 2.824 -2.995l.176 -.005zm0 15a1 1 0 0 0 -.993 .883l-.007 .127a1 1 0 0 0 1.993 .117l.007 -.127a1 1 0 0 0 -1 -1m1.136 -5.727a2.5 2.5 0 0 0 -3.037 .604a1 1 0 0 0 1.434 1.389l.088 -.09a.5 .5 0 1 1 .379 .824a1 1 0 0 0 -.002 2a2.5 2.5 0 0 0 1.137 -4.727\" />\n <path d=\"M19 7h-4l-.001 -4.001z\" />\n </svg>\n <p>{$`No preview available`}</p>\n </span>\n </div>\n)\n\n@RegisterPreferences(\n Schema.object({\n 'quickUpload.summary': Schema.string()\n .description('Default summary of the quick upload')\n .default('[IPE-NEXT] Quick upload'),\n })\n)\n@Inject([\n 'modal',\n '$',\n 'wikiTitle',\n 'wikiFile',\n 'quickPreview',\n 'preferences',\n 'wiki',\n 'apiService',\n])\nexport class PluginQuickUpload extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-upload')\n }\n\n protected async start() {\n this.injectToolbox()\n this.ctx.set('quickUpload', this)\n }\n\n protected async stop() {}\n\n private injectToolbox() {\n const { $ } = this.ctx\n this.ctx.inject(['toolbox'], (ctx) => {\n ctx.toolbox.addButton({\n id: 'quick-upload',\n group: 'group2',\n index: 2,\n icon: <IconUpload />,\n tooltip: () => $`Quick Upload`,\n onClick: (e) => {\n e.preventDefault()\n this.showModal()\n },\n })\n ctx.on('dispose', () => {\n ctx.toolbox.removeButton('quick-upload')\n })\n })\n }\n\n private formatFileSize(size: number = 0) {\n size = Number(size)\n if (!Number.isFinite(size) || size < 0) return '0 B'\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n let index = 0\n while (size >= 1024 && index < units.length - 1) {\n size /= 1024\n index++\n }\n\n // 使用 Intl 来格式化数字(自动处理千分位、小数等)\n const formatter = new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 })\n return `${formatter.format(size)} ${units[index]}`\n }\n\n private isFileAccepted(file: File, accept: string): boolean {\n if (!accept) return true\n const rules = accept\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n if (!rules.length) return true\n const fileType = file.type || ''\n const fileName = file.name || ''\n return rules.some((rule) => {\n // extension: .png .pdf\n if (rule.startsWith('.')) {\n return fileName.toLowerCase().endsWith(rule.toLowerCase())\n }\n // image/*, video/* ...\n if (rule.endsWith('/*')) {\n const prefix = rule.slice(0, -1) // keep the trailing slash\n return fileType.startsWith(prefix)\n }\n // exact mime\n return fileType === rule\n })\n }\n\n private getDefaultPreviewPlaceholder() {\n const { $ } = this.ctx\n return (\n <div className=\"ipe-quickUpload__preview-placeholder\">\n <span>\n <IconUpload />\n <p>{$`You can drag & drop files to this modal`}</p>\n </span>\n </div>\n )\n }\n\n private safeId() {\n return `mu_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`\n }\n\n async showModal() {\n const { $ } = this.ctx\n\n let isUploading = false\n let pauseRequested = false\n\n const showMessage = (type: 'success' | 'warning' | 'error', title: string, content: any) => {\n this.ctx.modal.notify(type, {\n title,\n content,\n closeAfter: type === 'success' ? 3000 : 8000,\n })\n }\n\n const modal = this.ctx.modal.show({\n className: 'ipe-quickUpload compact-buttons',\n sizeClass: 'mediumToLarge',\n center: false,\n title: $`Quick Upload`,\n content: $`Quick Upload`,\n outSideClose: false,\n beforeClose: () => {\n if (isUploading) {\n showMessage('warning', $`Upload in progress`, $`Please pause or wait for it to finish.`)\n return false\n }\n return true\n },\n })\n\n const defaultSummary = (await this.ctx.preferences.get('quickUpload.summary')) || ''\n const repo = this.ctx.wikiFile.writableFileRepo\n const targetApi = repo ? this.ctx.apiService.getClientByFileRepo(repo) : undefined\n const exts = await this.ctx.wiki.getAllowedFileExtensions(targetApi)\n\n const accept = exts.map((e) => `.${e}`).join(',')\n const confirmThreshold = 20\n\n let items: UploadItem[] = []\n let selectedId: string | null = null\n\n const ui = {\n fileInput: null as HTMLInputElement | null,\n listEl: null as HTMLElement | null,\n previewWrapper: null as HTMLElement | null,\n progressEl: null as HTMLElement | null,\n progressTextEl: null as HTMLElement | null,\n summaryInput: null as HTMLTextAreaElement | null,\n ignoreWarnings: null as HTMLInputElement | null,\n selectedCountEl: null as HTMLElement | null,\n readyCountEl: null as HTMLElement | null,\n }\n\n const updateItem = (id: string, patch: Partial<UploadItem>) => {\n items = items.map((x) => (x.id === id ? { ...x, ...patch } : x))\n }\n\n const removeItem = (id: string) => {\n items = items.filter((x) => x.id !== id)\n if (selectedId === id) {\n selectedId = items[0]?.id ?? null\n }\n }\n\n const updateMany = (ids: Set<string>, fn: (it: UploadItem) => UploadItem) => {\n items = items.map((x) => (ids.has(x.id) ? fn(x) : x))\n }\n\n const summarizeApiErrors = (e: any) => {\n const out: string[] = []\n const s = (v: any) => (v == null ? '' : String(v))\n if (e instanceof Error) {\n out.push(e.message)\n let cur: any = e\n while (cur?.cause) {\n cur = cur.cause\n if (cur instanceof Error) out.push(cur.message)\n else break\n }\n } else if (e?.data?.error?.info) {\n out.push(s(e.data.error.info))\n } else if (e?.error?.info) {\n out.push(s(e.error.info))\n } else if (e?.message) {\n out.push(s(e.message))\n }\n return out.filter(Boolean)\n }\n\n const formatUploadError = (e: any): { message: string; retryable: boolean } => {\n let reasons = summarizeApiErrors(e)\n if (reasons.length === 0) reasons = ['Upload failed with unknown error.']\n\n const combined = reasons.join('\\n')\n const lower = combined.toLowerCase()\n\n if (\n lower.includes('file is larger') ||\n lower.includes('files larger than') ||\n lower.includes('maximum upload size')\n ) {\n return { message: `File too large\\n${combined}`, retryable: false }\n }\n\n if (lower.includes('network') || lower.includes('timeout') || lower.includes('timed out')) {\n return { message: `Network issue\\n${combined}`, retryable: true }\n }\n\n return { message: combined, retryable: true }\n }\n\n const shouldRetryItem = (it: UploadItem) => {\n if (it.status === 'warning') return true\n if (it.status === 'error') return it.retryable !== false\n return false\n }\n\n type UploadMode = 'all' | 'confirmed' | 'resume' | 'retry'\n\n const getUploadCandidates = (mode: UploadMode, list: UploadItem[]) => {\n if (mode === 'retry') return list.filter((it) => shouldRetryItem(it))\n if (mode === 'resume') {\n return list.filter(\n (it) => (it.status === 'queued' || it.status === 'paused') && it.retryable !== false\n )\n }\n return list.filter((it) => it.status === 'queued' || it.status === 'paused')\n }\n\n const prepareRetryState = (candidates: UploadItem[]) => {\n const idset = new Set(candidates.map((c) => c.id))\n updateMany(idset, (x) =>\n x.retryable === false ? x : { ...x, status: 'queued', message: undefined }\n )\n }\n\n const getSelected = () => {\n return items.find((x) => x.id === selectedId) || null\n }\n\n const setSelected = (id: string | null) => {\n selectedId = id\n renderList()\n void renderPreview()\n }\n\n const countByStatus = () => {\n const out = { ok: 0, warn: 0, err: 0, paused: 0 }\n for (const it of items) {\n if (it.status === 'success') out.ok++\n else if (it.status === 'warning') out.warn++\n else if (it.status === 'error') out.err++\n else if (it.status === 'paused') out.paused++\n }\n return out\n }\n\n const setProgress = (done: number, total: number) => {\n const pct = total > 0 ? Math.floor((done / total) * 100) : 0\n if (ui.progressTextEl) ui.progressTextEl.textContent = `${done}/${total} (${pct}%)`\n if (ui.progressEl) ui.progressEl.style.width = `${Math.max(0, Math.min(100, pct))}%`\n }\n\n const sanitizeFilename = (name: string) => {\n return (name || '').replace(/\\s+/g, ' ').trim()\n }\n\n const resetAll = () => {\n items = []\n selectedId = null\n setProgress(0, 0)\n if (ui.summaryInput) ui.summaryInput.value = String(defaultSummary || '')\n if (ui.ignoreWarnings) ui.ignoreWarnings.checked = false\n renderList()\n void renderPreview()\n }\n\n const addFiles = (files: File[]) => {\n const accepted = files.filter((f) => this.isFileAccepted(f, String(accept || '')))\n\n const rejectedCount = files.length - accepted.length\n if (rejectedCount > 0) {\n showMessage(\n 'warning',\n $`File type not allowed`,\n <span style={{ wordWrap: 'break-word' }}>\n {rejectedCount === 1\n ? $`1 file skipped! Only ${accept} are allowed by this wiki.`\n : $`${rejectedCount} files skipped! Only ${accept} are allowed by this wiki.`}\n </span>\n )\n }\n\n if (!accepted.length) return\n\n const newItems: UploadItem[] = accepted.map((file) => ({\n id: this.safeId(),\n file,\n filename: file.name,\n text: '',\n status: 'queued',\n retryable: true,\n }))\n\n items = [...items, ...newItems]\n if (!selectedId && items.length) {\n selectedId = items[0].id\n }\n renderList()\n void renderPreview()\n }\n\n const buildUploadBody = (item: UploadItem) => {\n const body: Record<string, any> = {}\n\n body.filename = sanitizeFilename(item.filename || item.file.name)\n body.file = item.file\n\n const summary = (ui.summaryInput?.value || '').trim() || ''\n body.comment = summary\n\n body.text = item.text || ''\n\n if (ui.ignoreWarnings?.checked) {\n body.ignorewarnings = '1'\n }\n\n return body\n }\n\n const getStatusLabel = (status: UploadItem['status']) => {\n switch (status) {\n case 'queued':\n return 'Queued'\n case 'uploading':\n return 'Uploading'\n case 'success':\n return 'Uploaded'\n case 'warning':\n return 'Warning'\n case 'error':\n return 'Failed'\n case 'paused':\n return 'Paused'\n default:\n return status\n }\n }\n\n const renderList = () => {\n if (!ui.listEl) return\n ui.listEl.innerHTML = ''\n\n if (!isUploading) {\n setProgress(0, items.length)\n }\n\n if (!items.length) {\n ui.listEl.appendChild(\n <div style={{ opacity: 0.75, padding: '8px 0' }}>\n <p>No files selected.</p>\n </div>\n )\n updateFooter()\n return\n } else {\n const list = (\n <ul\n style={{\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'grid',\n gap: '6px',\n }}\n />\n ) as HTMLUListElement\n\n items.forEach((item) => {\n const isActive = item.id === selectedId\n const row = (\n <li\n style={{\n border: '1px solid var(--ipe-border-color, rgba(0,0,0,.12))',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n background: isActive ? 'rgba(59,130,246,.08)' : 'transparent',\n minWidth: 0,\n }}\n onClick={() => setSelected(item.id)}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div style={{ flex: 1, minWidth: 0, overflow: 'hidden' }}>\n <div\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n wordBreak: 'break-word',\n fontSize: '13px',\n }}\n >\n <strong style={{ fontWeight: 600 }}>{item.filename}</strong>\n </div>\n <div style={{ fontSize: '12px', opacity: 0.75 }}>\n {getStatusLabel(item.status)}\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n className=\"ipe-btn is-text\"\n title={'Remove'}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n removeItem(item.id)\n renderList()\n void renderPreview()\n }}\n >\n ×\n </button>\n </div>\n </div>\n\n {item.message ? (\n <div\n style={{\n fontSize: '12px',\n opacity: 0.8,\n marginTop: '4px',\n whiteSpace: 'pre-wrap',\n }}\n >\n {item.message}\n </div>\n ) : null}\n </li>\n ) as HTMLLIElement\n\n list.appendChild(row)\n })\n\n ui.listEl.appendChild(list)\n }\n\n updateFooter()\n }\n\n const renderPreview = async () => {\n if (!ui.previewWrapper) return\n ui.previewWrapper.innerHTML = ''\n\n const item = getSelected()\n if (!item) {\n ui.previewWrapper.appendChild(this.getDefaultPreviewPlaceholder())\n return\n }\n\n const file = item.file\n\n const header = (\n <section style={{ display: 'grid', gap: '6px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'space-between',\n gap: '12px',\n }}\n >\n <strong style={{ wordBreak: 'break-word' }}>{file.name}</strong>\n <span style={{ fontSize: '12px', opacity: 0.8 }}>{this.formatFileSize(file.size)}</span>\n </div>\n <div style={{ display: 'flex', gap: '10px', alignItems: 'center', flexWrap: 'wrap' }}>\n <span style={{ fontSize: '12px', opacity: 0.8 }}>{file.type || $`Unknown type`}</span>\n {item.fileUrl ? (\n <>\n <a\n href={item.fileUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: '12px' }}\n >\n {$`Open file URL`}\n </a>\n <a\n href={this.ctx.wiki.getUrl(`File:${item.filename}`)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: '12px' }}\n >\n {$`Open file page`}\n </a>\n </>\n ) : null}\n </div>\n </section>\n ) as HTMLElement\n\n const previewEl = (await this.ctx.quickPreview.getPreviewElement(file)) || (\n <PreviewPlaceholderNA $={$} />\n )\n\n const previewBox = (\n <div className=\"ipe-quickUpload__preview-content\" style={{ marginTop: '10px' }}>\n {previewEl}\n </div>\n ) as HTMLElement\n\n const isLocked = item.status === 'success'\n const filenameEditor = (\n <div\n className=\"ipe-input-box\"\n style={{\n marginTop: '8px',\n opacity: isLocked ? 0.55 : 1,\n filter: isLocked ? 'grayscale(1)' : undefined,\n pointerEvents: isLocked ? 'none' : undefined,\n }}\n >\n <label htmlFor=\"mu_filename\">{$`Target filename`}</label>\n <input\n id=\"mu_filename\"\n name=\"mu_filename\"\n type=\"text\"\n value={item.filename}\n disabled={isUploading || isLocked}\n onInput={(e: Event) => {\n const v = (e.target as HTMLInputElement).value\n updateItem(item.id, { filename: v })\n renderList()\n }}\n />\n </div>\n ) as HTMLElement\n\n const descEditor = (\n <div\n className=\"ipe-input-box\"\n style={{\n marginTop: '8px',\n opacity: isLocked ? 0.55 : 1,\n filter: isLocked ? 'grayscale(1)' : undefined,\n pointerEvents: isLocked ? 'none' : undefined,\n }}\n >\n <label htmlFor=\"mu_text\">File description</label>\n <textarea\n id=\"mu_text\"\n placeholder={'This file is for...\\n[[Category:XXX]]'}\n disabled={isUploading || isLocked}\n value={item.text || ''}\n onInput={(e: Event) => {\n const v = (e.target as HTMLTextAreaElement).value\n updateItem(item.id, { text: v })\n renderList()\n }}\n ></textarea>\n </div>\n ) as HTMLElement\n\n ui.previewWrapper.appendChild(header)\n ui.previewWrapper.appendChild(previewBox)\n ui.previewWrapper.appendChild(filenameEditor)\n ui.previewWrapper.appendChild(descEditor)\n }\n\n const uploadOne = async (item: UploadItem) => {\n updateItem(item.id, { status: 'uploading', message: undefined })\n renderList()\n await renderPreview()\n\n const body = buildUploadBody(item)\n\n this.ctx.emit('analytics/event', {\n feature: 'quick-upload',\n page: body.filename?.toString() || undefined,\n })\n\n try {\n const result = await this.ctx.wikiFile.upload(body)\n\n if (result.data?.upload?.result === 'Success') {\n const fileUrl = this.ctx.wikiFile.getFileUrl(`File:${result.data.upload.filename}`)\n updateItem(item.id, {\n status: 'success',\n fileUrl,\n result: result.data.upload as any,\n retryable: true,\n })\n renderList()\n await renderPreview()\n return\n }\n\n throw result\n } catch (e) {\n let reasons: string[] = []\n\n if ((e as any)?.data?.upload) {\n const uploadResult = (e as any).data.upload as UploadFileResult\n\n if (uploadResult.result === 'Success') {\n const fname = (uploadResult as any).filename || body.filename\n const fileUrl = this.ctx.wikiFile.getFileUrl(`File:${fname}`)\n updateItem(item.id, {\n status: 'success',\n fileUrl,\n result: uploadResult,\n retryable: true,\n })\n renderList()\n await renderPreview()\n return\n }\n\n if (\n Array.isArray(uploadResult.warnings?.duplicate) &&\n uploadResult.warnings.duplicate.length > 0\n ) {\n reasons.push(`Duplicate of: ${uploadResult.warnings.duplicate.join(', ')}`)\n updateItem(item.id, {\n status: 'warning',\n message: reasons.join('\\n'),\n result: uploadResult,\n retryable: true,\n })\n renderList()\n await renderPreview()\n return\n }\n\n if (uploadResult.warnings?.exists) {\n reasons.push('A file with the same name already exists.')\n updateItem(item.id, {\n status: 'warning',\n message: reasons.join('\\n'),\n result: uploadResult,\n retryable: true,\n })\n renderList()\n await renderPreview()\n return\n }\n\n const { message, retryable } = formatUploadError(e)\n updateItem(item.id, { status: 'error', message, retryable })\n renderList()\n await renderPreview()\n return\n }\n\n const { message, retryable } = formatUploadError(e)\n updateItem(item.id, { status: 'error', message, retryable })\n renderList()\n await renderPreview()\n }\n }\n\n const uploadAll = async (mode: UploadMode = 'all') => {\n if (isUploading) return\n\n let candidates = getUploadCandidates(mode, items)\n\n if (mode === 'retry') {\n if (candidates.length === 0) {\n showMessage(\n 'warning',\n 'Nothing to retry',\n <div>There are no retryable failed/warning items.</div>\n )\n return\n }\n } else if (mode === 'resume') {\n if (candidates.length === 0) {\n showMessage(\n 'warning',\n 'Nothing to resume',\n <div>There are no queued paused items to continue.</div>\n )\n return\n }\n } else {\n if (items.length === 0) {\n showMessage(\n 'warning',\n $`No files selected`,\n <div>{$`Please select one or more files.`}</div>\n )\n return\n }\n if (mode !== 'confirmed' && items.length > confirmThreshold) {\n this.ctx.modal.confirm(\n {\n title: $`Confirm bulk upload`,\n content: (\n <div>\n {$`You are about to upload`} <strong>{items.length}</strong>{' '}\n {$`files at once. Are you sure?`}\n </div>\n ),\n center: true,\n okBtn: { label: $`Upload`, className: 'is-primary is-ghost' },\n cancelBtn: { label: $`Cancel`, className: 'is-danger is-ghost' },\n },\n (confirmed) => {\n if (confirmed) {\n void uploadAll('confirmed')\n }\n return true\n }\n )\n return\n }\n }\n\n if (mode === 'retry') {\n prepareRetryState(candidates)\n renderList()\n await renderPreview()\n candidates = getUploadCandidates('retry', items)\n }\n\n isUploading = true\n pauseRequested = false\n updateFooter()\n\n try {\n const total = candidates.length\n let done = 0\n setProgress(0, total)\n\n for (const item of candidates) {\n if (pauseRequested) {\n const remainingIds = new Set(candidates.slice(done).map((x) => x.id))\n updateMany(remainingIds, (x) =>\n x.status === 'queued' || x.status === 'uploading'\n ? { ...x, status: 'paused', message: 'Paused by user', retryable: true }\n : x\n )\n renderList()\n await renderPreview()\n break\n }\n\n const current = items.find((x) => x.id === item.id)\n if (!current) {\n done++\n setProgress(done, total)\n continue\n }\n\n await uploadOne(current)\n done++\n setProgress(done, total)\n }\n\n const { ok, warn, err, paused } = countByStatus()\n if (paused > 0) {\n showMessage(\n 'warning',\n 'Upload paused',\n <div>\n <div>\n Uploaded: <strong>{ok}</strong>\n </div>\n <div>\n Warnings: <strong>{warn}</strong>\n </div>\n <div>\n Errors: <strong>{err}</strong>\n </div>\n <div>\n Paused: <strong>{paused}</strong>\n </div>\n </div>\n )\n } else if (err === 0 && warn === 0) {\n showMessage(\n 'success',\n 'Upload completed',\n <div>\n <strong>All files uploaded successfully.</strong>\n <div>\n Uploaded: <strong>{ok}</strong>\n </div>\n </div>\n )\n } else {\n showMessage(\n 'warning',\n 'Upload completed with issues',\n <div>\n <div>\n Uploaded: <strong>{ok}</strong>\n </div>\n {warn ? (\n <div>\n Warnings: <strong>{warn}</strong>\n </div>\n ) : null}\n {err ? (\n <div>\n Errors: <strong>{err}</strong>\n </div>\n ) : null}\n </div>\n )\n }\n } finally {\n isUploading = false\n updateFooter()\n }\n }\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n const container = e.currentTarget as HTMLElement\n container?.classList.remove('is-dragover')\n\n const files = Array.from(e.dataTransfer?.files || [])\n if (!files.length) return\n addFiles(files)\n }\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n const container = e.currentTarget as HTMLElement\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy'\n container?.classList.add('is-dragover')\n }\n\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n const container = e.currentTarget as HTMLElement\n container?.classList.remove('is-dragover')\n }\n\n const progressBar = (\n <div style={{ marginBottom: '10px' }}>\n <div\n style={{\n height: '8px',\n borderRadius: '999px',\n background: 'rgba(0,0,0,.08)',\n overflow: 'hidden',\n }}\n >\n <div\n ref={(el: any) => {\n ui.progressEl = el\n }}\n style={{\n height: '100%',\n width: '0%',\n background: 'var(--ipe-primary, #3b82f6)',\n transition: 'width .2s ease',\n }}\n />\n </div>\n <div\n style={{\n marginTop: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px',\n }}\n >\n <div\n ref={(el: any) => {\n ui.progressTextEl = el\n }}\n style={{ fontSize: '12px', opacity: 0.8 }}\n >\n 0/0 (0%)\n </div>\n </div>\n </div>\n ) as HTMLElement\n\n const leftPanel = (\n <section style={{ display: 'grid', gap: '10px', minWidth: 0 }}>\n <div className=\"ipe-input-box\">\n <label htmlFor=\"mu_files\">\n Files{' '}\n {items.length > 0 ? (\n <span style={{ opacity: 0.85 }}>({items.length} selected)</span>\n ) : null}\n </label>\n <input\n id=\"mu_files\"\n type=\"file\"\n multiple\n accept={String(accept || '')}\n disabled={isUploading}\n ref={(el: any) => {\n ui.fileInput = el\n }}\n onChange={(e: Event) => {\n const files = Array.from((e.target as HTMLInputElement).files || [])\n addFiles(files)\n ;(e.target as HTMLInputElement).value = ''\n }}\n />\n </div>\n\n <div\n ref={(el: any) => {\n ui.listEl = el\n }}\n />\n </section>\n ) as HTMLElement\n\n const rightPanel = (\n <section style={{ display: 'grid', gap: '10px' }}>\n <div\n className=\"ipe-quickUpload__preview\"\n ref={(el: any) => {\n ui.previewWrapper = el\n }}\n onClick={(e) => {\n const target = e.target\n if (\n target &&\n (target as HTMLElement).closest('img, .ipe-quickUpload__preview-placeholder')\n ) {\n e.preventDefault()\n ui.fileInput?.click()\n }\n }}\n style={{\n border: '1px solid var(--ipe-border-color, rgba(0,0,0,.12))',\n borderRadius: '8px',\n padding: '10px',\n minWidth: 0,\n }}\n />\n </section>\n ) as HTMLElement\n\n const containerEl = (\n <section\n className=\"ipe-quickUpload__container\"\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n style={{ display: 'grid', gap: '12px' }}\n >\n {progressBar}\n <div className=\"ipe-quickUpload__layout\">\n {leftPanel}\n {rightPanel}\n </div>\n\n <div\n style={{\n borderTop: '1px solid var(--ipe-border-color, rgba(0,0,0,.12))',\n paddingTop: '10px',\n display: 'grid',\n gap: '10px',\n }}\n >\n <div className=\"ipe-input-box\">\n <label htmlFor=\"mu_summary\">Summary (applies to all files)</label>\n <textarea\n id=\"mu_summary\"\n disabled={isUploading}\n ref={(el: any) => {\n ui.summaryInput = el\n }}\n onInput={() => {}}\n />\n </div>\n\n <CheckBox\n name=\"ignorewarnings\"\n label={$`Ignore warnings and upload anyway`}\n inputProps={{\n disabled: isUploading,\n ref: (el: any) => {\n ui.ignoreWarnings = el\n },\n }}\n />\n </div>\n </section>\n ) as HTMLElement\n\n modal.setContent(containerEl)\n\n if (ui.summaryInput) ui.summaryInput.value = String(defaultSummary || '')\n\n const updateFooter = () => {\n const { warn, err, paused } = countByStatus()\n const hasFailed = err > 0 || warn > 0\n const hasPaused = paused > 0\n\n let label = $`Upload`\n let action = () => void uploadAll('all')\n let className = 'is-primary is-text'\n\n if (isUploading) {\n label = pauseRequested ? 'Pausing...' : 'Pause after current'\n action = () => {\n pauseRequested = true\n updateFooter()\n }\n } else if (hasPaused) {\n label = 'Resume'\n action = () => void uploadAll('resume')\n } else if (hasFailed) {\n label = 'Retry failed/warnings'\n action = () => void uploadAll('retry')\n }\n\n modal.setButtons([\n {\n label: $`Cancel`,\n className: 'is-danger is-text',\n method: () => modal.close(),\n },\n {\n label: 'Reset',\n className: 'is-text',\n method: () => {\n if (isUploading) return\n resetAll()\n },\n },\n {\n label,\n className,\n method: action,\n },\n ])\n }\n\n renderList()\n await renderPreview()\n\n return modal\n }\n}\n"],"names":["_PluginQuickUpload_decorators","_init","_a","PreviewPlaceholderNA","$","jsxs","jsx","RegisterPreferences","Schema","Inject","PluginQuickUpload","BasePlugin","ctx","IconUpload","e","size","units","index","file","accept","rules","s","fileType","fileName","rule","prefix","isUploading","pauseRequested","showMessage","type","title","content","modal","defaultSummary","repo","targetApi","confirmThreshold","items","selectedId","ui","updateItem","id","patch","x","removeItem","updateMany","ids","fn","summarizeApiErrors","out","v","cur","formatUploadError","reasons","combined","lower","shouldRetryItem","it","getUploadCandidates","mode","list","prepareRetryState","candidates","idset","c","getSelected","setSelected","renderList","renderPreview","countByStatus","setProgress","done","total","pct","sanitizeFilename","name","resetAll","addFiles","files","accepted","f","rejectedCount","newItems","buildUploadBody","item","body","summary","getStatusLabel","status","isActive","row","updateFooter","header","Fragment","previewEl","previewBox","isLocked","filenameEditor","descEditor","uploadOne","result","fileUrl","uploadResult","fname","message","retryable","uploadAll","confirmed","remainingIds","current","ok","warn","err","paused","handleDrop","handleDragOver","container","handleDragLeave","progressBar","el","leftPanel","containerEl","target","CheckBox","hasFailed","hasPaused","label","action","className","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as _, P as Le, F as Ae } from "./Promise.withResolvers-C4chhLB1.js";
2
- import { S as Pe, a as Ie } from "./index-DTU2DZU6.js";
2
+ import { S as Pe, a as Ie } from "./index-9I-lTJju.js";
3
3
  import { a as oe, m as ae, u as se, b as le, e as D, o as Me, f as ce, g as Fe, w as K, n as B, h as I, i as je, j as Re, t as De, k as Te, s as Oe, r as q, l as G, p as qe, q as H, v as J, F as He, x as Ue, y as Be, z as ne, A as Ve, B as re, c as ze } from "./vueHooks-Bs93iP61.js";
4
4
  import { n as Ge } from "./noop-ClDc6zv4.js";
5
5
  import { _ as Je } from "./_plugin-vue_export-helper-CHgC5LLL.js";
@@ -1113,7 +1113,7 @@ class Q extends (ke = Ke) {
1113
1113
  });
1114
1114
  }
1115
1115
  async start() {
1116
- import("./PluginPrefSync-CmVHL2wx.js").then(({ PluginPrefSync: e }) => {
1116
+ import("./PluginPrefSync-DzmDUTF-.js").then(({ PluginPrefSync: e }) => {
1117
1117
  this.ctx.plugin(e);
1118
1118
  }).catch(this.ctx.logger.warn), this.ctx.on("preferences/changed", (e) => {
1119
1119
  this._form?.mergeValue?.(e.input);
@@ -1209,4 +1209,4 @@ bt(ee, 1, Q);
1209
1209
  export {
1210
1210
  Q as PluginPreferencesUI
1211
1211
  };
1212
- //# sourceMappingURL=index-JvsrhizC.js.map
1212
+ //# sourceMappingURL=index-b29qTV0M.js.map