@inpageedit/core 0.9.0 → 0.9.2
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.
- package/dist/InPageEdit.d.ts +1 -1
- package/dist/Preferences-DS4-CFWe.js +9 -0
- package/dist/Preferences-DS4-CFWe.js.map +1 -0
- package/dist/decorators/Preferences.d.ts +2 -3
- package/dist/{index-G3k3kjCU.js → index-C-A3jSMx.js} +2 -2
- package/dist/{index-G3k3kjCU.js.map → index-C-A3jSMx.js.map} +1 -1
- package/dist/index-CInRo1qR.js +357 -0
- package/dist/index-CInRo1qR.js.map +1 -0
- package/dist/{index-dp6_MU68.js → index-CWbHdYKu.js} +3 -3
- package/dist/{index-dp6_MU68.js.map → index-CWbHdYKu.js.map} +1 -1
- package/dist/{index-CBQsBfc2.js → index-CaI9BFuB.js} +2 -2
- package/dist/{index-CBQsBfc2.js.map → index-CaI9BFuB.js.map} +1 -1
- package/dist/{index-CNsB3Vcb.js → index-D6055L55.js} +1568 -1505
- package/dist/{index-CNsB3Vcb.js.map → index-D6055L55.js.map} +1 -1
- package/dist/{index-DMNUP3fg.js → index-DxGjTpIn.js} +3 -3
- package/dist/index-DxGjTpIn.js.map +1 -0
- package/dist/index-Ek5d60jn.js +5583 -0
- package/dist/index-Ek5d60jn.js.map +1 -0
- package/dist/{index-D7SQwFxl.js → index-RFAZzS9C.js} +3 -3
- package/dist/{index-D7SQwFxl.js.map → index-RFAZzS9C.js.map} +1 -1
- package/dist/{index-CYdxWw9g.js → index-UjgKGkN2.js} +3 -3
- package/dist/{index-CYdxWw9g.js.map → index-UjgKGkN2.js.map} +1 -1
- package/dist/{index-BDVcDlsf.js → index-btJ_NMuF.js} +3 -3
- package/dist/{index-BDVcDlsf.js.map → index-btJ_NMuF.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/models/WikiPage/index.d.ts +1 -2
- package/dist/plugins/BasePlugin.d.ts +0 -2
- package/dist/plugins/{preferences/ui → preferences-ui}/index.d.ts +4 -3
- package/dist/plugins/quick-delete/index.d.ts +2 -2
- package/dist/plugins/quick-diff/components/DiffTable.d.ts +2 -2
- package/dist/plugins/quick-diff/index.d.ts +60 -1
- package/dist/plugins/quick-edit/index.d.ts +2 -2
- package/dist/plugins/quick-move/index.d.ts +2 -2
- package/dist/plugins/quick-redirect/index.d.ts +2 -2
- package/dist/services/ApiService.d.ts +1 -1
- package/dist/services/CurrentPageService.d.ts +2 -2
- package/dist/{plugins/preferences/index.d.ts → services/PreferencesService.d.ts} +9 -9
- package/dist/services/WikiMetadataService.d.ts +1 -1
- package/dist/services/WikiPageService.d.ts +2 -2
- package/dist/services/WikiTitleService.d.ts +7 -3
- package/dist/services/storage/IDBStorage.d.ts +52 -0
- package/dist/services/storage/index.d.ts +53 -0
- package/dist/style.css +1 -1
- package/dist/utils/vueHooks.d.ts +2 -1
- package/lib/index.umd.js +35 -46
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +7 -13
- package/dist/Preferences-Bg3J5Ur9.js +0 -9
- package/dist/Preferences-Bg3J5Ur9.js.map +0 -1
- package/dist/index-9Z4ds-WM.js +0 -6339
- package/dist/index-9Z4ds-WM.js.map +0 -1
- package/dist/index-BB9MXkUv.js +0 -171
- package/dist/index-BB9MXkUv.js.map +0 -1
- package/dist/index-CADkQBg0.js +0 -1249
- package/dist/index-CADkQBg0.js.map +0 -1
- package/dist/index-DMNUP3fg.js.map +0 -1
- package/dist/plugins/quick-diff/JsDiffService.d.ts +0 -23
- package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +0 -72
- package/dist/services/StorageService.d.ts +0 -56
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-dp6_MU68.js","sources":["../src/plugins/quick-delete/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { IWikiPage } from '@/models/WikiPage'\r\nimport { IPEModal } from '@inpageedit/modal'\r\nimport { ReactNode } from 'jsx-dom'\r\nimport { makeCallable } from '@/utils/makeCallable.js'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickDelete: PluginQuickDelete & {\r\n (\r\n ...args: Parameters<PluginQuickDelete['showModal']>\r\n ): ReturnType<PluginQuickDelete['showModal']>\r\n }\r\n }\r\n interface Events {\r\n 'quick-delete/init-options'(payload: Omit<QuickDeleteInitPayload, 'modal' | 'wikiPage'>): void\r\n 'quick-delete/show-modal'(payload: Omit<QuickDeleteInitPayload, 'wikiPage'>): void\r\n 'quick-delete/wiki-page'(payload: QuickDeleteInitPayload): void\r\n 'quick-delete/delete-notice'(\r\n payload: QuickDeleteInitPayload & { deleteNotices: ReactNode[] }\r\n ): void\r\n }\r\n}\r\n\r\nexport interface QuickDeleteOptions {\r\n title: string\r\n pageId: number\r\n revision: number\r\n deleteReason: string\r\n reloadAfterDelete: boolean\r\n}\r\n\r\nexport interface QuickDeleteInitPayload {\r\n ctx: InPageEdit\r\n options: QuickDeleteOptions\r\n modal: IPEModal\r\n wikiPage: IWikiPage\r\n}\r\n\r\nexport interface QuickDeleteSubmitPayload {\r\n wikiPage: IWikiPage\r\n reason?: string\r\n}\r\n\r\n@Inject(['api', 'wikiPage', 'wikiTitle', 'currentPage', 'wiki', 'modal', 'preferences'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n deleteReason: Schema.string()\r\n .description('Default delete reason for quick delete')\r\n .default('[IPE-NEXT] Quick delete'),\r\n })\r\n .description('Quick delete options')\r\n .extra('category', 'delete')\r\n)\r\nexport class PluginQuickDelete extends BasePlugin {\r\n private readonly DEFAULT_OPTIONS: QuickDeleteOptions = {\r\n title: '',\r\n pageId: 0,\r\n revision: 0,\r\n deleteReason: '',\r\n reloadAfterDelete: true,\r\n }\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-delete')\r\n this.ctx.root.set('quickDelete', makeCallable(this, 'showModal'))\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.injectToolbox(ctx)\r\n ctx.on('dispose', () => {\r\n this.removeToolbox(ctx)\r\n })\r\n })\r\n this.ctx.preferences.defineCategory({\r\n label: 'Delete',\r\n name: 'delete',\r\n description: 'Settings related to deleting pages',\r\n index: 3,\r\n })\r\n }\r\n\r\n async showModal(payload?: string | Partial<QuickDeleteOptions>) {\r\n if (typeof payload === 'undefined') {\r\n payload = {}\r\n } else if (typeof payload === 'string') {\r\n payload = {\r\n title: payload,\r\n } as Partial<QuickDeleteOptions>\r\n }\r\n\r\n if (!payload.title && !payload.pageId && !payload.revision) {\r\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\r\n const searchParams = new URLSearchParams(window.location.search)\r\n const title = this.ctx.currentPage.wikiTitle\r\n payload = {\r\n ...payload,\r\n title: title?.getPrefixedDBKey(),\r\n revision: searchParams.has('oldid') ? Number(searchParams.get('oldid')) : undefined,\r\n pageId: searchParams.has('curid') ? Number(searchParams.get('curid')) : undefined,\r\n }\r\n }\r\n\r\n const deleteReason =\r\n typeof payload.deleteReason === 'string'\r\n ? payload.deleteReason\r\n : (await this.ctx.preferences.get<string>('deleteReason'))!\r\n\r\n const options: QuickDeleteOptions = {\r\n ...this.DEFAULT_OPTIONS,\r\n deleteReason,\r\n ...payload,\r\n }\r\n if (!options.deleteReason) {\r\n options.deleteReason = (await this.ctx.preferences.get<string>('deleteReason')) || ''\r\n }\r\n if (!options) this.ctx.emit('quick-delete/init-options', { ctx: this.ctx, options })\r\n\r\n const modal = this.ctx.modal\r\n .createObject({\r\n className: 'ipe-quickDelete',\r\n sizeClass: 'small',\r\n center: true,\r\n })\r\n .init()\r\n modal.setTitle(\r\n (\r\n <>\r\n Loading: <u>{options.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n modal.setContent(<ProgressBar />)\r\n modal.addButton({\r\n side: 'right',\r\n type: 'button',\r\n className: 'is-ghost',\r\n label: 'Cancel',\r\n method() {\r\n modal.close()\r\n },\r\n })\r\n modal.show()\r\n this.ctx.emit('quick-delete/show-modal', { ctx: this.ctx, modal, options })\r\n\r\n let wikiPage: IWikiPage\r\n try {\r\n wikiPage = await this.getWikiPageFromPayload(options)\r\n if (wikiPage.pageInfo.special) {\r\n throw new Error('Special page cannot be deleted')\r\n }\r\n if (wikiPage.pageInfo.pageid === 0) {\r\n throw new Error('Page does not exist, cannot be deleted')\r\n }\r\n } catch (e) {\r\n modal.off(modal.Event.Close)\r\n modal.close()\r\n this.ctx.modal.notify('error', {\r\n content: e instanceof Error ? e.message : String(e),\r\n })\r\n return\r\n }\r\n modal.setTitle(\r\n (\r\n <>\r\n Quick Delete: <u>{wikiPage.pageInfo.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n\r\n const deleteNotices = [] as ReactNode[]\r\n\r\n // Check delete permissions\r\n if (!wikiPage.userCan('delete')) {\r\n deleteNotices.push(\r\n <MBox title=\"Permission Denied\" type=\"error\">\r\n <p>You do not have permission to delete this page.</p>\r\n </MBox>\r\n )\r\n }\r\n\r\n // Check if page has protection\r\n if (wikiPage.pageInfo.protection && wikiPage.pageInfo.protection.length > 0) {\r\n deleteNotices.push(\r\n <MBox title=\"Warning\" type=\"warning\">\r\n <p>\r\n This page is protected and may has special use or purpose. Delete it at your own risk.\r\n </p>\r\n </MBox>\r\n )\r\n }\r\n\r\n this.ctx.emit('quick-delete/delete-notice', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n deleteNotices,\r\n })\r\n\r\n const deleteForm = (\r\n <form className=\"ipe-quickDelete__form\">\r\n <div className=\"ipe-quickDelete__notices\">{deleteNotices}</div>\r\n <div className=\"ipe-quickDelete__content\">\r\n <div\r\n className=\"ipe-quickDelete__page-info\"\r\n style={{\r\n padding: '1rem',\r\n backgroundColor: '#f8f9fa',\r\n border: '1px solid #dee2e6',\r\n borderRadius: '4px',\r\n marginBottom: '1rem',\r\n }}\r\n >\r\n <ul>\r\n <li>\r\n <strong>Title:</strong> {wikiPage.pageInfo.title}\r\n </li>\r\n <li>\r\n <strong>Page ID:</strong> {wikiPage.pageInfo.pageid}\r\n </li>\r\n <li>\r\n <strong>Last Revision:</strong> {wikiPage.pageInfo.lastrevid}\r\n </li>\r\n <li>\r\n <strong>Length:</strong> {wikiPage.pageInfo.length} characters\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ipe-quickDelete__options\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n marginTop: '1rem',\r\n }}\r\n >\r\n <InputBox\r\n label=\"Delete Reason\"\r\n id=\"reason\"\r\n name=\"reason\"\r\n value={options.deleteReason}\r\n inputProps={{\r\n placeholder: 'Enter reason for deletion...',\r\n required: true,\r\n }}\r\n />\r\n </div>\r\n {/* Debug Info */}\r\n {import.meta.env.DEV && (\r\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\r\n <details>\r\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\r\n </details>\r\n </div>\r\n )}\r\n </form>\r\n ) as HTMLFormElement\r\n modal.setContent(deleteForm)\r\n\r\n // Add delete button\r\n modal.addButton(\r\n {\r\n side: 'left',\r\n className: 'is-danger submit-btn',\r\n label: 'Delete Page',\r\n method: () => {\r\n const formData = new FormData(deleteForm)\r\n const reason = formData.get('reason') as string\r\n\r\n if (!reason || reason.trim() === '') {\r\n this.ctx.modal.notify('error', {\r\n title: 'Missing Reason',\r\n content: 'Please provide a reason for deletion.',\r\n })\r\n return\r\n }\r\n\r\n // 二次确认删除\r\n this.ctx.modal.confirm(\r\n {\r\n className: 'is-danger',\r\n title: 'Confirm Deletion',\r\n content: (\r\n <>\r\n <p>\r\n <strong>{wikiPage.pageInfo.title}</strong>\r\n </p>\r\n </>\r\n ) as HTMLElement,\r\n center: true,\r\n okBtn: {\r\n label: 'Delete it now',\r\n className: 'is-danger',\r\n },\r\n cancelBtn: {\r\n label: 'Cancel',\r\n className: 'is-ghost',\r\n },\r\n },\r\n (confirmed) => {\r\n if (confirmed) {\r\n console.info(wikiPage, deleteForm, {\r\n reason: reason,\r\n })\r\n\r\n modal.setLoadingState(true)\r\n this.handleSubmit({\r\n wikiPage,\r\n reason,\r\n })\r\n .then(async () => {\r\n modal.setOptions({\r\n beforeClose: noop,\r\n })\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Deletion Successful',\r\n content: `The page \"${wikiPage.pageInfo.title}\" has been deleted.`,\r\n })\r\n })\r\n .catch((error) => {\r\n this.ctx.modal.notify('error', {\r\n title: 'Deletion Error',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n modal.setLoadingState(false)\r\n })\r\n }\r\n return true\r\n }\r\n )\r\n },\r\n },\r\n 0\r\n )\r\n\r\n this.ctx.emit('quick-delete/wiki-page', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n })\r\n }\r\n\r\n async handleSubmit(payload: QuickDeleteSubmitPayload) {\r\n const wikiPage = payload.wikiPage\r\n const reason = payload.reason || ''\r\n\r\n return wikiPage.delete(reason)\r\n }\r\n\r\n async getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>) {\r\n if (payload.revision) {\r\n return this.ctx.wikiPage.newFromRevision(payload.revision)\r\n } else if (payload.pageId) {\r\n return this.ctx.wikiPage.newFromPageId(payload.pageId)\r\n } else if (payload.title) {\r\n return this.ctx.wikiPage.newFromTitle(payload.title, false)\r\n }\r\n throw new Error('Invalid payload')\r\n }\r\n\r\n private async injectToolbox(ctx: InPageEdit) {\r\n const title = this.ctx.currentPage.wikiTitle\r\n const canDelete = title && this.ctx.wiki.hasRight('delete') && title.getNamespaceId() >= 0\r\n ctx.toolbox.addButton({\r\n id: 'quick-delete',\r\n group: 'group2',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-trash\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 7l16 0\" />\r\n <path d=\"M10 11l0 6\" />\r\n <path d=\"M14 11l0 6\" />\r\n <path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\" />\r\n <path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\" />\r\n </svg>\r\n ) as HTMLElement,\r\n buttonProps: {\r\n disabled: !canDelete,\r\n },\r\n tooltip: canDelete ? 'Quick Delete' : 'Not deletable',\r\n onClick: () => {\r\n this.showModal({\r\n title: title?.getPrefixedText(),\r\n })\r\n },\r\n })\r\n }\r\n\r\n protected removeToolbox(ctx: InPageEdit) {\r\n ctx.toolbox.removeButton('quick-delete')\r\n }\r\n}\r\n"],"names":["_PluginQuickDelete_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDelete","BasePlugin","ctx","makeCallable","payload","searchParams","title","deleteReason","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","deleteNotices","MBox","deleteForm","InputBox","reason","confirmed","noop","error","canDelete","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-CWbHdYKu.js","sources":["../src/plugins/quick-delete/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { IWikiPage } from '@/models/WikiPage'\r\nimport { IPEModal } from '@inpageedit/modal'\r\nimport { ReactNode } from 'jsx-dom'\r\nimport { makeCallable } from '@/utils/makeCallable.js'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickDelete: PluginQuickDelete & {\r\n (\r\n ...args: Parameters<PluginQuickDelete['showModal']>\r\n ): ReturnType<PluginQuickDelete['showModal']>\r\n }\r\n }\r\n interface Events {\r\n 'quick-delete/init-options'(payload: Omit<QuickDeleteInitPayload, 'modal' | 'wikiPage'>): void\r\n 'quick-delete/show-modal'(payload: Omit<QuickDeleteInitPayload, 'wikiPage'>): void\r\n 'quick-delete/wiki-page'(payload: QuickDeleteInitPayload): void\r\n 'quick-delete/delete-notice'(\r\n payload: QuickDeleteInitPayload & { deleteNotices: ReactNode[] }\r\n ): void\r\n }\r\n}\r\n\r\nexport interface QuickDeleteOptions {\r\n title: string\r\n pageId: number\r\n revision: number\r\n deleteReason: string\r\n reloadAfterDelete: boolean\r\n}\r\n\r\nexport interface QuickDeleteInitPayload {\r\n ctx: InPageEdit\r\n options: QuickDeleteOptions\r\n modal: IPEModal\r\n wikiPage: IWikiPage\r\n}\r\n\r\nexport interface QuickDeleteSubmitPayload {\r\n wikiPage: IWikiPage\r\n reason?: string\r\n}\r\n\r\n@Inject(['api', 'wikiPage', 'wikiTitle', 'currentPage', 'wiki', 'modal', 'preferences'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n deleteReason: Schema.string()\r\n .description('Default delete reason for quick delete')\r\n .default('[IPE-NEXT] Quick delete'),\r\n })\r\n .description('Quick delete options')\r\n .extra('category', 'delete')\r\n)\r\nexport class PluginQuickDelete extends BasePlugin {\r\n private readonly DEFAULT_OPTIONS: QuickDeleteOptions = {\r\n title: '',\r\n pageId: 0,\r\n revision: 0,\r\n deleteReason: '',\r\n reloadAfterDelete: true,\r\n }\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-delete')\r\n this.ctx.root.set('quickDelete', makeCallable(this, 'showModal'))\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.injectToolbox(ctx)\r\n ctx.on('dispose', () => {\r\n this.removeToolbox(ctx)\r\n })\r\n })\r\n this.ctx.preferences.defineCategory({\r\n label: 'Delete',\r\n name: 'delete',\r\n description: 'Settings related to deleting pages',\r\n index: 3,\r\n })\r\n }\r\n\r\n async showModal(payload?: string | Partial<QuickDeleteOptions>) {\r\n if (typeof payload === 'undefined') {\r\n payload = {}\r\n } else if (typeof payload === 'string') {\r\n payload = {\r\n title: payload,\r\n } as Partial<QuickDeleteOptions>\r\n }\r\n\r\n if (!payload.title && !payload.pageId && !payload.revision) {\r\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\r\n const searchParams = new URLSearchParams(window.location.search)\r\n const title = this.ctx.currentPage.wikiTitle\r\n payload = {\r\n ...payload,\r\n title: title?.getPrefixedDBKey(),\r\n revision: searchParams.has('oldid') ? Number(searchParams.get('oldid')) : undefined,\r\n pageId: searchParams.has('curid') ? Number(searchParams.get('curid')) : undefined,\r\n }\r\n }\r\n\r\n const deleteReason =\r\n typeof payload.deleteReason === 'string'\r\n ? payload.deleteReason\r\n : (await this.ctx.preferences.get<string>('deleteReason'))!\r\n\r\n const options: QuickDeleteOptions = {\r\n ...this.DEFAULT_OPTIONS,\r\n deleteReason,\r\n ...payload,\r\n }\r\n if (!options.deleteReason) {\r\n options.deleteReason = (await this.ctx.preferences.get<string>('deleteReason')) || ''\r\n }\r\n if (!options) this.ctx.emit('quick-delete/init-options', { ctx: this.ctx, options })\r\n\r\n const modal = this.ctx.modal\r\n .createObject({\r\n className: 'ipe-quickDelete',\r\n sizeClass: 'small',\r\n center: true,\r\n })\r\n .init()\r\n modal.setTitle(\r\n (\r\n <>\r\n Loading: <u>{options.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n modal.setContent(<ProgressBar />)\r\n modal.addButton({\r\n side: 'right',\r\n type: 'button',\r\n className: 'is-ghost',\r\n label: 'Cancel',\r\n method() {\r\n modal.close()\r\n },\r\n })\r\n modal.show()\r\n this.ctx.emit('quick-delete/show-modal', { ctx: this.ctx, modal, options })\r\n\r\n let wikiPage: IWikiPage\r\n try {\r\n wikiPage = await this.getWikiPageFromPayload(options)\r\n if (wikiPage.pageInfo.special) {\r\n throw new Error('Special page cannot be deleted')\r\n }\r\n if (wikiPage.pageInfo.pageid === 0) {\r\n throw new Error('Page does not exist, cannot be deleted')\r\n }\r\n } catch (e) {\r\n modal.off(modal.Event.Close)\r\n modal.close()\r\n this.ctx.modal.notify('error', {\r\n content: e instanceof Error ? e.message : String(e),\r\n })\r\n return\r\n }\r\n modal.setTitle(\r\n (\r\n <>\r\n Quick Delete: <u>{wikiPage.pageInfo.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n\r\n const deleteNotices = [] as ReactNode[]\r\n\r\n // Check delete permissions\r\n if (!wikiPage.userCan('delete')) {\r\n deleteNotices.push(\r\n <MBox title=\"Permission Denied\" type=\"error\">\r\n <p>You do not have permission to delete this page.</p>\r\n </MBox>\r\n )\r\n }\r\n\r\n // Check if page has protection\r\n if (wikiPage.pageInfo.protection && wikiPage.pageInfo.protection.length > 0) {\r\n deleteNotices.push(\r\n <MBox title=\"Warning\" type=\"warning\">\r\n <p>\r\n This page is protected and may has special use or purpose. Delete it at your own risk.\r\n </p>\r\n </MBox>\r\n )\r\n }\r\n\r\n this.ctx.emit('quick-delete/delete-notice', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n deleteNotices,\r\n })\r\n\r\n const deleteForm = (\r\n <form className=\"ipe-quickDelete__form\">\r\n <div className=\"ipe-quickDelete__notices\">{deleteNotices}</div>\r\n <div className=\"ipe-quickDelete__content\">\r\n <div\r\n className=\"ipe-quickDelete__page-info\"\r\n style={{\r\n padding: '1rem',\r\n backgroundColor: '#f8f9fa',\r\n border: '1px solid #dee2e6',\r\n borderRadius: '4px',\r\n marginBottom: '1rem',\r\n }}\r\n >\r\n <ul>\r\n <li>\r\n <strong>Title:</strong> {wikiPage.pageInfo.title}\r\n </li>\r\n <li>\r\n <strong>Page ID:</strong> {wikiPage.pageInfo.pageid}\r\n </li>\r\n <li>\r\n <strong>Last Revision:</strong> {wikiPage.pageInfo.lastrevid}\r\n </li>\r\n <li>\r\n <strong>Length:</strong> {wikiPage.pageInfo.length} characters\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ipe-quickDelete__options\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n marginTop: '1rem',\r\n }}\r\n >\r\n <InputBox\r\n label=\"Delete Reason\"\r\n id=\"reason\"\r\n name=\"reason\"\r\n value={options.deleteReason}\r\n inputProps={{\r\n placeholder: 'Enter reason for deletion...',\r\n required: true,\r\n }}\r\n />\r\n </div>\r\n {/* Debug Info */}\r\n {import.meta.env.DEV && (\r\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\r\n <details>\r\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\r\n </details>\r\n </div>\r\n )}\r\n </form>\r\n ) as HTMLFormElement\r\n modal.setContent(deleteForm)\r\n\r\n // Add delete button\r\n modal.addButton(\r\n {\r\n side: 'left',\r\n className: 'is-danger submit-btn',\r\n label: 'Delete Page',\r\n method: () => {\r\n const formData = new FormData(deleteForm)\r\n const reason = formData.get('reason') as string\r\n\r\n if (!reason || reason.trim() === '') {\r\n this.ctx.modal.notify('error', {\r\n title: 'Missing Reason',\r\n content: 'Please provide a reason for deletion.',\r\n })\r\n return\r\n }\r\n\r\n // 二次确认删除\r\n this.ctx.modal.confirm(\r\n {\r\n className: 'is-danger',\r\n title: 'Confirm Deletion',\r\n content: (\r\n <>\r\n <p>\r\n <strong>{wikiPage.pageInfo.title}</strong>\r\n </p>\r\n </>\r\n ) as HTMLElement,\r\n center: true,\r\n okBtn: {\r\n label: 'Delete it now',\r\n className: 'is-danger',\r\n },\r\n cancelBtn: {\r\n label: 'Cancel',\r\n className: 'is-ghost',\r\n },\r\n },\r\n (confirmed) => {\r\n if (confirmed) {\r\n console.info(wikiPage, deleteForm, {\r\n reason: reason,\r\n })\r\n\r\n modal.setLoadingState(true)\r\n this.handleSubmit({\r\n wikiPage,\r\n reason,\r\n })\r\n .then(async () => {\r\n modal.setOptions({\r\n beforeClose: noop,\r\n })\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Deletion Successful',\r\n content: `The page \"${wikiPage.pageInfo.title}\" has been deleted.`,\r\n })\r\n })\r\n .catch((error) => {\r\n this.ctx.modal.notify('error', {\r\n title: 'Deletion Error',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n modal.setLoadingState(false)\r\n })\r\n }\r\n return true\r\n }\r\n )\r\n },\r\n },\r\n 0\r\n )\r\n\r\n this.ctx.emit('quick-delete/wiki-page', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n })\r\n }\r\n\r\n async handleSubmit(payload: QuickDeleteSubmitPayload) {\r\n const wikiPage = payload.wikiPage\r\n const reason = payload.reason || ''\r\n\r\n return wikiPage.delete(reason)\r\n }\r\n\r\n async getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>) {\r\n if (payload.revision) {\r\n return this.ctx.wikiPage.newFromRevision(payload.revision)\r\n } else if (payload.pageId) {\r\n return this.ctx.wikiPage.newFromPageId(payload.pageId)\r\n } else if (payload.title) {\r\n return this.ctx.wikiPage.newFromTitle(payload.title, false)\r\n }\r\n throw new Error('Invalid payload')\r\n }\r\n\r\n private async injectToolbox(ctx: InPageEdit) {\r\n const title = this.ctx.currentPage.wikiTitle\r\n const canDelete = title && this.ctx.wiki.hasRight('delete') && title.getNamespaceId() >= 0\r\n ctx.toolbox.addButton({\r\n id: 'quick-delete',\r\n group: 'group2',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-trash\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 7l16 0\" />\r\n <path d=\"M10 11l0 6\" />\r\n <path d=\"M14 11l0 6\" />\r\n <path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\" />\r\n <path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\" />\r\n </svg>\r\n ) as HTMLElement,\r\n buttonProps: {\r\n disabled: !canDelete,\r\n },\r\n tooltip: canDelete ? 'Quick Delete' : 'Not deletable',\r\n onClick: () => {\r\n this.showModal({\r\n title: title?.getPrefixedText(),\r\n })\r\n },\r\n })\r\n }\r\n\r\n protected removeToolbox(ctx: InPageEdit) {\r\n ctx.toolbox.removeButton('quick-delete')\r\n }\r\n}\r\n"],"names":["_PluginQuickDelete_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDelete","BasePlugin","ctx","makeCallable","payload","searchParams","title","deleteReason","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","deleteNotices","MBox","deleteForm","InputBox","reason","confirmed","noop","error","canDelete","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as e, P as c } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { B as l } from "./index-
|
|
2
|
+
import { B as l } from "./index-Ek5d60jn.js";
|
|
3
3
|
import { T as d } from "./index-Bh70Udzi.js";
|
|
4
4
|
import { I as m } from "./InputBox-BV4m05Xs.js";
|
|
5
5
|
import { C as u } from "./CheckBox-D3rHnX7I.js";
|
|
@@ -155,4 +155,4 @@ class v extends l {
|
|
|
155
155
|
export {
|
|
156
156
|
v as PluginQuickRedirect
|
|
157
157
|
};
|
|
158
|
-
//# sourceMappingURL=index-
|
|
158
|
+
//# sourceMappingURL=index-CaI9BFuB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-CaI9BFuB.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect['quickRedirect']\n redirectPage: PluginQuickRedirect['redirectPage']\n }\n}\n\nexport interface RedirectPageOptions {\n from: string\n to: string\n reason?: string\n overwrite?: boolean\n}\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\n\nexport class PluginQuickRedirect extends BasePlugin {\n static readonly inject = ['api', 'wikiPage', 'modal']\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-redirect')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickRedirect', this.quickRedirect.bind(this))\n this.ctx.set('redirectPage', this.redirectPage.bind(this))\n\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n this.ctx.inject(['toolbox'], (ctx) => {\n this.ctx = ctx\n ctx.toolbox.addButton({\n id: 'quick-redirect',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\n <path d=\"M9 17l3 -3l-3 -3\" />\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Quick Redirect',\n group: 'group1',\n index: 2,\n onClick: () => {\n this.quickRedirect(\n canEdit\n ? {\n to: curPageName,\n }\n : {}\n )\n },\n })\n this.addDisposeHandler((ctx) => {\n ctx.toolbox.removeButton('quick-redirect')\n })\n })\n }\n\n protected stop(): Promise<void> | void {}\n\n quickRedirect(options?: Partial<QuickRedirectOptions>) {\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Redirect',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-redirect compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n overwrite: formData.get('overwrite') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: 'From and to are required.',\n })\n return\n }\n modal.setLoadingState(true)\n this.redirectPage(options)\n .then((res) => {\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Redirect successful',\n content: 'The redirect has been created.',\n })\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'From',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'To',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\n <div>\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\n Force create redirect even if the from page already exists\n </CheckBox>\n </div>\n </form>\n ) as HTMLFormElement\n )\n modal.setButtons([\n {\n label: 'Create Redirect',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async redirectPage(options: RedirectPageOptions) {\n const { from, to, reason = '', overwrite = false } = options\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\n title: from,\n })\n const content = `#REDIRECT [[:${to}]]`\n return wikiPage.edit(\n {\n text: content,\n summary: reason,\n },\n {\n createonly: !overwrite,\n }\n )\n }\n}\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","reason","overwrite","wikiPage","content"],"mappings":"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"}
|