@inpageedit/core 0.14.2 → 0.14.4

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 (50) hide show
  1. package/dist/{BasePlugin-YOi2_vUo.js → BasePlugin-DD7l-5Xw.js} +2 -2
  2. package/dist/{BasePlugin-YOi2_vUo.js.map → BasePlugin-DD7l-5Xw.js.map} +1 -1
  3. package/dist/{PluginPrefSync-jTNlRQE-.js → PluginPrefSync-CbFuuC19.js} +3 -3
  4. package/dist/{PluginPrefSync-jTNlRQE-.js.map → PluginPrefSync-CbFuuC19.js.map} +1 -1
  5. package/dist/{PluginStoreApp-CGNxKXAN.js → PluginStoreApp-MbC3G9tu.js} +89 -85
  6. package/dist/PluginStoreApp-MbC3G9tu.js.map +1 -0
  7. package/dist/Preferences-C10tZMl1.js +2701 -0
  8. package/dist/Preferences-C10tZMl1.js.map +1 -0
  9. package/dist/{index-QtEF2mzS.js → index-B3jld2sl.js} +4 -4
  10. package/dist/{index-QtEF2mzS.js.map → index-B3jld2sl.js.map} +1 -1
  11. package/dist/{index-3NZkG2a3.js → index-BXNyXvre.js} +3 -3
  12. package/dist/{index-3NZkG2a3.js.map → index-BXNyXvre.js.map} +1 -1
  13. package/dist/{index-Dclp60EO.js → index-BanevHQ2.js} +3 -3
  14. package/dist/{index-Dclp60EO.js.map → index-BanevHQ2.js.map} +1 -1
  15. package/dist/index-BdHmr8jw.js +3090 -0
  16. package/dist/index-BdHmr8jw.js.map +1 -0
  17. package/dist/index-BjDTD66_.js +491 -0
  18. package/dist/index-BjDTD66_.js.map +1 -0
  19. package/dist/{index-D97lUU3h.js → index-BpQ6VGMz.js} +55 -55
  20. package/dist/index-BpQ6VGMz.js.map +1 -0
  21. package/dist/{index-D-fW3ESK.js → index-CnR6CqkM.js} +2 -2
  22. package/dist/{index-D-fW3ESK.js.map → index-CnR6CqkM.js.map} +1 -1
  23. package/dist/{index-DELHsLHS.js → index-DKCZDN-Q.js} +4 -4
  24. package/dist/{index-DELHsLHS.js.map → index-DKCZDN-Q.js.map} +1 -1
  25. package/dist/{index-BBNseJXG.js → index-DVOc6fB6.js} +3 -3
  26. package/dist/{index-BBNseJXG.js.map → index-DVOc6fB6.js.map} +1 -1
  27. package/dist/{index-D6zFqL2u.js → index-De25v1_Q.js} +3 -3
  28. package/dist/{index-D6zFqL2u.js.map → index-De25v1_Q.js.map} +1 -1
  29. package/dist/{index-BrYKe18j.js → index-DensW9qt.js} +3 -3
  30. package/dist/{index-BrYKe18j.js.map → index-DensW9qt.js.map} +1 -1
  31. package/dist/{index-DmLoihN1.js → index-WfXtYVMt.js} +134 -131
  32. package/dist/index-WfXtYVMt.js.map +1 -0
  33. package/dist/index.d.ts +21 -14
  34. package/dist/index.js +5 -5
  35. package/dist/models/index.js +7 -503
  36. package/dist/models/index.js.map +1 -1
  37. package/dist/plugins/index.js +10 -10
  38. package/dist/services/index.js +1 -1
  39. package/dist/style.css +1 -1
  40. package/lib/index.umd.js +11 -11
  41. package/lib/index.umd.js.map +1 -1
  42. package/lib/style.css +1 -1
  43. package/package.json +1 -1
  44. package/dist/PluginStoreApp-CGNxKXAN.js.map +0 -1
  45. package/dist/Preferences-BF2fcXrn.js +0 -1539
  46. package/dist/Preferences-BF2fcXrn.js.map +0 -1
  47. package/dist/index-C3m6ng6b.js +0 -4245
  48. package/dist/index-C3m6ng6b.js.map +0 -1
  49. package/dist/index-D97lUU3h.js.map +0 -1
  50. package/dist/index-DmLoihN1.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-D6zFqL2u.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect\n }\n interface Events {\n 'quick-redirect/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickRedirectOptions>\n }): void\n 'quick-redirect/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-redirect/submit'(payload: { ctx: InPageEdit; payload: RedirectPageOptions }): void\n }\n interface PreferencesMap {\n 'quickRedirect.reason': string\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 static readonly PreferencesSchema = Schema.object({\n 'quickRedirect.reason': Schema.string().default('[IPE-NEXT] Quick redirect'),\n })\n .description('Quick redirect options')\n .extra('category', 'editor')\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)\n const $ = this.ctx.$\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.showModal(\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 async showModal(options?: Partial<QuickRedirectOptions>) {\n const $ = this.ctx.$\n const reason = await this.ctx.preferences.get('quickRedirect.reason')\n if (!options) {\n options = {}\n }\n this.ctx.emit('quick-redirect/init-options', { ctx: this.ctx, options })\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 this.ctx.emit('quick-redirect/submit', { ctx: this.ctx, payload: options })\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: $`Redirect from`,\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: $`Redirect to`,\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox\n label={$`Reason`}\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\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 this.ctx.emit('quick-redirect/show-modal', { ctx: this.ctx, modal })\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","Schema","$","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","overwrite","wikiPage","content"],"mappings":"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"}
1
+ {"version":3,"file":"index-De25v1_Q.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect\n }\n interface Events {\n 'quick-redirect/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickRedirectOptions>\n }): void\n 'quick-redirect/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-redirect/submit'(payload: { ctx: InPageEdit; payload: RedirectPageOptions }): void\n }\n interface PreferencesMap {\n 'quickRedirect.reason': string\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 static readonly PreferencesSchema = Schema.object({\n 'quickRedirect.reason': Schema.string().default('[IPE-NEXT] Quick redirect'),\n })\n .description('Quick redirect options')\n .extra('category', 'editor')\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)\n const $ = this.ctx.$\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.showModal(\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 async showModal(options?: Partial<QuickRedirectOptions>) {\n const $ = this.ctx.$\n const reason = await this.ctx.preferences.get('quickRedirect.reason')\n if (!options) {\n options = {}\n }\n this.ctx.emit('quick-redirect/init-options', { ctx: this.ctx, options })\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 this.ctx.emit('quick-redirect/submit', { ctx: this.ctx, payload: options })\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: $`Redirect from`,\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: $`Redirect to`,\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox\n label={$`Reason`}\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\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 this.ctx.emit('quick-redirect/show-modal', { ctx: this.ctx, modal })\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","Schema","$","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","overwrite","wikiPage","content"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { j as a, P as S } from "./index-CM_6yF2v.js";
2
- import { R as E, I as j, S as k } from "./Preferences-BF2fcXrn.js";
3
- import { B as q } from "./BasePlugin-YOi2_vUo.js";
2
+ import { R as E, I as j, S as k } from "./Preferences-C10tZMl1.js";
3
+ import { B as q } from "./BasePlugin-DD7l-5Xw.js";
4
4
  import { T as F } from "./index-DD5CVCfD.js";
5
5
  import { C as v, I } from "./InputBox-nQKtiWtZ.js";
6
6
  var T = Object.create, p = Object.defineProperty, B = Object.getOwnPropertyDescriptor, b = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), _ = (t) => {
@@ -176,4 +176,4 @@ R(g, 1, h);
176
176
  export {
177
177
  h as PluginQuickMove
178
178
  };
179
- //# sourceMappingURL=index-BrYKe18j.js.map
179
+ //# sourceMappingURL=index-DensW9qt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BrYKe18j.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove\n }\n interface Events {\n 'quick-move/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickMoveOptions>\n }): void\n 'quick-move/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-move/submit'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n payload: MovePageOptions\n }): void\n }\n interface PreferencesMap {\n 'quickMove.reason': string\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@RegisterPreferences(\n Schema.object({\n 'quickMove.reason': Schema.string().default('[IPE-NEXT] Quick move'),\n })\n .description('Quick move options')\n .extra('category', 'editor')\n)\n@Inject(['modal', 'wiki', '$'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this)\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const $ = ctx.$\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\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-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: () => $`Quick Move`,\n group: 'group1',\n index: 1,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n async showModal(options?: Partial<QuickMoveOptions>) {\n const $ = this.ctx.$\n const reason = await this.ctx.preferences.get('quickMove.reason')\n const modal = this.ctx.modal\n .createObject({\n title: $`Quick Move`,\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move 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 movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: $`Failed to move`,\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-move/submit', { ctx: this.ctx, modal, payload: options })\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: $`Failed to move`,\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: $`Move from`,\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: $`Move to`,\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n {$`Move talk page`}\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n {$`Move subpages (up to 100)`}\n </CheckBox>\n </div>\n {this.ctx.wiki.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n {$`Move without leaving a redirect`}\n </CheckBox>\n </div>\n )}\n <InputBox\n label={$`Reason`}\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: $`Move`,\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 movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginQuickMove","BasePlugin","ctx","$","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
1
+ {"version":3,"file":"index-DensW9qt.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove\n }\n interface Events {\n 'quick-move/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickMoveOptions>\n }): void\n 'quick-move/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-move/submit'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n payload: MovePageOptions\n }): void\n }\n interface PreferencesMap {\n 'quickMove.reason': string\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@RegisterPreferences(\n Schema.object({\n 'quickMove.reason': Schema.string().default('[IPE-NEXT] Quick move'),\n })\n .description('Quick move options')\n .extra('category', 'editor')\n)\n@Inject(['modal', 'wiki', '$'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this)\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const $ = ctx.$\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\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-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: () => $`Quick Move`,\n group: 'group1',\n index: 1,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n async showModal(options?: Partial<QuickMoveOptions>) {\n const $ = this.ctx.$\n const reason = await this.ctx.preferences.get('quickMove.reason')\n const modal = this.ctx.modal\n .createObject({\n title: $`Quick Move`,\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move 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 movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: $`Failed to move`,\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-move/submit', { ctx: this.ctx, modal, payload: options })\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: $`Failed to move`,\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: $`Move from`,\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: $`Move to`,\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n {$`Move talk page`}\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n {$`Move subpages (up to 100)`}\n </CheckBox>\n </div>\n {this.ctx.wiki.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n {$`Move without leaving a redirect`}\n </CheckBox>\n </div>\n )}\n <InputBox\n label={$`Reason`}\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: $`Move`,\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 movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginQuickMove","BasePlugin","ctx","$","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,47 +1,47 @@
1
- import { j as i, F as _, P as j } from "./index-CM_6yF2v.js";
1
+ import { j as i, F as _, P as R } from "./index-CM_6yF2v.js";
2
2
  import { W as h } from "./WatchlistAction-BbNAyryN.js";
3
- import { m as R } from "./makeCallable-LDU0xZMJ.js";
4
- import { I as $, R as U, S as a } from "./Preferences-BF2fcXrn.js";
5
- import { B as Q } from "./BasePlugin-YOi2_vUo.js";
6
- import { M as q } from "./index-CG38LlAh.js";
7
- import { I as T, C as I } from "./InputBox-nQKtiWtZ.js";
8
- import { R as W } from "./RadioBox-0UuxlcWZ.js";
9
- import { n as C } from "./noop-ClDc6zv4.js";
10
- const z = (s = 0) => new Promise((e) => setTimeout(e, s));
11
- var K = Object.create, E = Object.defineProperty, Y = Object.getOwnPropertyDescriptor, F = (s, e) => (e = Symbol[s]) ? e : Symbol.for("Symbol." + s), O = (s) => {
3
+ import { m as $ } from "./makeCallable-LDU0xZMJ.js";
4
+ import { T as U, I as Q, R as W, S as l } from "./Preferences-C10tZMl1.js";
5
+ import { B as z } from "./BasePlugin-DD7l-5Xw.js";
6
+ import { M as T } from "./index-CG38LlAh.js";
7
+ import { I, C } from "./InputBox-nQKtiWtZ.js";
8
+ import { R as Y } from "./RadioBox-0UuxlcWZ.js";
9
+ import { n as F } from "./noop-ClDc6zv4.js";
10
+ const K = (s = 0) => new Promise((e) => setTimeout(e, s));
11
+ var H = Object.create, E = Object.defineProperty, G = Object.getOwnPropertyDescriptor, O = (s, e) => (e = Symbol[s]) ? e : Symbol.for("Symbol." + s), M = (s) => {
12
12
  throw TypeError(s);
13
- }, H = (s, e, t) => e in s ? E(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, G = (s, e) => E(s, "name", { value: e, configurable: !0 }), X = (s) => [, , , K(s?.[F("metadata")] ?? null)], J = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], M = (s) => s !== void 0 && typeof s != "function" ? O("Function expected") : s, V = (s, e, t, l, r) => ({ kind: J[s], name: e, metadata: l, addInitializer: (d) => t._ ? O("Already initialized") : r.push(M(d || null)) }), Z = (s, e) => H(e, F("metadata"), s[3]), ee = (s, e, t, l) => {
14
- for (var r = 0, d = s[e >> 1], m = d && d.length; r < m; r++) d[r].call(t);
15
- return l;
16
- }, te = (s, e, t, l, r, d) => {
17
- var m, f, c, o = e & 7, u = !1, v = 0, x = s[v] || (s[v] = []), p = o && (r = r.prototype, o < 5 && (o > 3 || !u) && Y(r, t));
18
- G(r, t);
19
- for (var g = l.length - 1; g >= 0; g--)
20
- c = V(o, t, f = {}, s[3], x), m = (0, l[g])(r, c), f._ = 1, M(m) && (r = m);
21
- return Z(s, r), p && E(r, t, p), u ? o ^ 4 ? d : p : r;
22
- }, B, y, A;
23
- B = [$(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences", "$"]), U(
24
- a.object({
25
- "quickEdit.editSummary": a.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
26
- "quickEdit.editMinor": a.boolean().description('Default to checking "minor edit" option').default(!1),
27
- "quickEdit.outSideClose": a.boolean().description("Close editor modal by clicking outside").default(!0),
28
- "quickEdit.watchList": a.union([
29
- a.const(h.preferences).description("Follow MW preferences"),
30
- a.const(h.nochange).description("Keep the current watchlist status"),
31
- a.const(h.watch).description("Add the page to watchlist"),
32
- a.const(h.unwatch).description("Remove the page from watchlist")
13
+ }, X = (s, e, t) => e in s ? E(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, J = (s, e) => E(s, "name", { value: e, configurable: !0 }), V = (s) => [, , , H(s?.[O("metadata")] ?? null)], Z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], B = (s) => s !== void 0 && typeof s != "function" ? M("Function expected") : s, ee = (s, e, t, d, n) => ({ kind: Z[s], name: e, metadata: d, addInitializer: (u) => t._ ? M("Already initialized") : n.push(B(u || null)) }), te = (s, e) => X(e, O("metadata"), s[3]), ie = (s, e, t, d) => {
14
+ for (var n = 0, u = s[e >> 1], f = u && u.length; n < f; n++) u[n].call(t);
15
+ return d;
16
+ }, se = (s, e, t, d, n, u) => {
17
+ var f, w, c, o = e & 7, a = !1, v = 0, x = s[v] || (s[v] = []), p = o && (n = n.prototype, o < 5 && (o > 3 || !a) && G(n, t));
18
+ J(n, t);
19
+ for (var g = d.length - 1; g >= 0; g--)
20
+ c = ee(o, t, w = {}, s[3], x), f = (0, d[g])(n, c), w._ = 1, B(f) && (n = f);
21
+ return te(s, n), p && E(n, t, p), a ? o ^ 4 ? u : p : n;
22
+ }, A, P, L;
23
+ A = [Q(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences", "$"]), W(
24
+ l.object({
25
+ "quickEdit.editSummary": l.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
26
+ "quickEdit.editMinor": l.boolean().description('Default to checking "minor edit" option').default(!1),
27
+ "quickEdit.outSideClose": l.boolean().description("Close editor modal by clicking outside").default(!0),
28
+ "quickEdit.watchList": l.union([
29
+ l.const(h.preferences).description("Follow MW preferences"),
30
+ l.const(h.nochange).description("Keep the current watchlist status"),
31
+ l.const(h.watch).description("Add the page to watchlist"),
32
+ l.const(h.unwatch).description("Remove the page from watchlist")
33
33
  ]).description("Watchlist options").default(h.preferences),
34
- "quickEdit.keyshortcut.save": a.string().default("ctrl-s").description("save button key shortcut (blank to disable)"),
35
- "quickEdit.editFont": a.union([
36
- a.const("preferences").description("Follow MW preferences"),
37
- a.const("monospace").description("Monospace"),
38
- a.const("sans-serif").description("Sans-serif"),
39
- a.const("serif").description("Serif"),
40
- a.string().description("Custom font (same as CSS `font-family` property)").default("")
34
+ "quickEdit.keyshortcut.save": l.string().default("ctrl-s").description("save button key shortcut (blank to disable)"),
35
+ "quickEdit.editFont": l.union([
36
+ l.const("preferences").description("Follow MW preferences"),
37
+ l.const("monospace").description("Monospace"),
38
+ l.const("sans-serif").description("Sans-serif"),
39
+ l.const("serif").description("Serif"),
40
+ l.string().description("Custom font (same as CSS `font-family` property)").default("")
41
41
  ]).description("Font to use in quick edit's textarea").default("preferences")
42
42
  }).description("Quick edit options").extra("category", "editor")
43
43
  )];
44
- let S = class L extends (A = Q) {
44
+ let S = class D extends (L = z) {
45
45
  constructor(e) {
46
46
  super(e, {}, "quick-edit"), this.ctx = e, this.DEFAULT_OPTIONS = {
47
47
  title: "",
@@ -52,7 +52,7 @@ let S = class L extends (A = Q) {
52
52
  editSummary: "",
53
53
  createOnly: !1,
54
54
  reloadAfterSave: !0
55
- }, this.ctx.root.set("quickEdit", R(this, "showModal"));
55
+ }, this.ctx.root.set("quickEdit", $(this, "showModal"));
56
56
  }
57
57
  start() {
58
58
  this.ctx.inject(["toolbox"], (e) => {
@@ -67,22 +67,22 @@ let S = class L extends (A = Q) {
67
67
  title: e
68
68
  }), e?.page && (e.title = e.page, delete e.page), !e.title && !e.pageId && !e.revision) {
69
69
  this.logger.warn("None of the title, pageId or revision provided. Using defaults.");
70
- const n = new URLSearchParams(window.location.search), w = this.ctx.currentPage.wikiTitle;
70
+ const r = new URLSearchParams(window.location.search), m = this.ctx.currentPage.wikiTitle;
71
71
  e = {
72
72
  ...e,
73
- title: w?.getPrefixedDBKey(),
74
- revision: n.has("oldid") ? Number(n.get("oldid")) : void 0,
75
- pageId: n.has("curid") ? Number(n.get("curid")) : void 0
73
+ title: m?.getPrefixedDBKey(),
74
+ revision: r.has("oldid") ? Number(r.get("oldid")) : void 0,
75
+ pageId: r.has("curid") ? Number(r.get("curid")) : void 0
76
76
  };
77
77
  }
78
78
  if (!e.revision && !e.pageId && e.title) {
79
- const n = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
80
- n && n.title.getNamespaceId() >= 0 && (e.title = n.title.getPrefixedDBKey(), e.section ??= n.section);
79
+ const r = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
80
+ r && r.title.getNamespaceId() >= 0 && (e.title = r.title.getPrefixedDBKey(), e.section ??= r.section);
81
81
  }
82
- const l = await this.ctx.preferences.get("quickEdit.outSideClose"), r = await this.ctx.preferences.get("quickEdit.watchList"), d = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), m = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), f = await this.getEditFontOptions(), c = {
82
+ const d = await this.ctx.preferences.get("quickEdit.outSideClose"), n = await this.ctx.preferences.get("quickEdit.watchList"), u = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), f = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), w = await this.getEditFontOptions(), c = {
83
83
  ...this.DEFAULT_OPTIONS,
84
- editSummary: d,
85
- editMinor: m,
84
+ editSummary: u,
85
+ editMinor: f,
86
86
  ...e
87
87
  };
88
88
  c.editSummary || (c.editSummary = await this.ctx.preferences.get("quickEdit.editSummary") || ""), this.ctx.emit("quick-edit/init-options", { ctx: this.ctx, options: c });
@@ -92,7 +92,7 @@ let S = class L extends (A = Q) {
92
92
  // backdrop: false,
93
93
  // draggable: true,
94
94
  center: !1,
95
- outSideClose: l
95
+ outSideClose: d
96
96
  }).init();
97
97
  o.setTitle(
98
98
  /* @__PURE__ */ i(_, { children: [
@@ -111,7 +111,7 @@ let S = class L extends (A = Q) {
111
111
  justifyContent: "center",
112
112
  alignItems: "center"
113
113
  },
114
- children: /* @__PURE__ */ i(j, {})
114
+ children: /* @__PURE__ */ i(R, {})
115
115
  }
116
116
  )
117
117
  ), o.addButton({
@@ -123,30 +123,30 @@ let S = class L extends (A = Q) {
123
123
  o.close();
124
124
  }
125
125
  }), o.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: o, options: c });
126
- let u;
126
+ let a;
127
127
  try {
128
- if (u = await this.getWikiPageFromPayload(c), u.pageInfo.special)
128
+ if (a = await this.getWikiPageFromPayload(c), a.pageInfo.special)
129
129
  throw new Error(t`Special page is not editable.`);
130
- } catch (n) {
130
+ } catch (r) {
131
131
  o.off(o.Event.Close), o.close(), this.ctx.modal.notify("error", {
132
- content: n instanceof Error ? n.message : String(n)
132
+ content: r instanceof Error ? r.message : String(r)
133
133
  });
134
134
  return;
135
135
  }
136
- const v = c.section === "new" ? "" : u.revisions[0]?.content || "", x = u.revisions[0]?.revid, p = x && x !== u.lastrevid, g = c.section === "new", P = u.pageid === 0;
136
+ const v = c.section === "new" ? "" : a.revisions[0]?.content || "", x = a.revisions[0]?.revid, p = x && x !== a.lastrevid, g = c.section === "new", N = a.pageid === 0;
137
137
  o.setTitle(
138
138
  /* @__PURE__ */ i(_, { children: [
139
- g ? t`New Section` : t`Quick ${P ? "Create" : "Edit"}`,
139
+ g ? t`New Section` : t`Quick ${N ? "Create" : "Edit"}`,
140
140
  ": ",
141
- /* @__PURE__ */ i("u", { children: u.pageInfo.title }),
141
+ /* @__PURE__ */ i("u", { children: a.pageInfo.title }),
142
142
  p ? ` (${t`Revision`} ${x})` : ""
143
143
  ] })
144
144
  );
145
145
  const k = [];
146
- P && k.push(
147
- /* @__PURE__ */ i(q, { title: t`Attention`, type: "important", children: /* @__PURE__ */ i("p", { children: t`This page does not exist.` }) })
146
+ N && k.push(
147
+ /* @__PURE__ */ i(T, { title: t`Attention`, type: "important", children: /* @__PURE__ */ i("p", { children: t`This page does not exist.` }) })
148
148
  ), p && k.push(
149
- /* @__PURE__ */ i(q, { title: t`Attention`, type: "warning", children: /* @__PURE__ */ i(
149
+ /* @__PURE__ */ i(T, { title: t`Attention`, type: "warning", children: /* @__PURE__ */ i(
150
150
  "p",
151
151
  {
152
152
  innerHTML: t`You are editing a <em>historical version</em>; the content is not the latest!`
@@ -156,7 +156,7 @@ let S = class L extends (A = Q) {
156
156
  ctx: this.ctx,
157
157
  options: c,
158
158
  modal: o,
159
- wikiPage: u,
159
+ wikiPage: a,
160
160
  editNotices: k
161
161
  });
162
162
  const b = /* @__PURE__ */ i("form", { className: "ipe-quickEdit__form", children: [
@@ -168,7 +168,7 @@ let S = class L extends (A = Q) {
168
168
  style: { display: "flex", flexDirection: "column", gap: "1rem" },
169
169
  children: [
170
170
  c.section === "new" && /* @__PURE__ */ i(_, { children: /* @__PURE__ */ i(
171
- T,
171
+ I,
172
172
  {
173
173
  label: t`Section title`,
174
174
  id: "summary",
@@ -180,8 +180,8 @@ let S = class L extends (A = Q) {
180
180
  /* @__PURE__ */ i(
181
181
  "textarea",
182
182
  {
183
- className: `ipe-quickEdit__textarea ${f.className}`,
184
- style: { fontFamily: f.fontFamily },
183
+ className: `ipe-quickEdit__textarea ${w.className}`,
184
+ style: { fontFamily: w.fontFamily },
185
185
  name: "text",
186
186
  id: "wpTextbox1",
187
187
  children: v
@@ -201,7 +201,7 @@ let S = class L extends (A = Q) {
201
201
  marginTop: "1rem"
202
202
  },
203
203
  children: [
204
- !g && /* @__PURE__ */ i(T, { label: t`Summary`, id: "summary", name: "summary", value: c.editSummary }),
204
+ !g && /* @__PURE__ */ i(I, { label: t`Summary`, id: "summary", name: "summary", value: c.editSummary }),
205
205
  /* @__PURE__ */ i("div", { className: "ipe-input-box", children: [
206
206
  /* @__PURE__ */ i("label", { htmlFor: "watchlist", style: { display: "block" }, children: t`Watchlist` }),
207
207
  /* @__PURE__ */ i("div", { style: { display: "flex", gap: "1rem" }, children: [
@@ -209,62 +209,78 @@ let S = class L extends (A = Q) {
209
209
  h.nochange,
210
210
  h.watch,
211
211
  h.unwatch
212
- ].map((n) => /* @__PURE__ */ i(
213
- W,
212
+ ].map((r) => /* @__PURE__ */ i(
213
+ Y,
214
214
  {
215
215
  name: "watchlist",
216
- value: n,
217
- inputProps: { checked: r === n },
218
- children: t`watchlist.${n}`
216
+ value: r,
217
+ inputProps: { checked: n === r },
218
+ children: t`watchlist.${r}`
219
219
  },
220
- n
220
+ r
221
221
  )) })
222
222
  ] }),
223
223
  /* @__PURE__ */ i("div", { style: { display: "flex", gap: "1rem" }, children: [
224
- /* @__PURE__ */ i(I, { name: "minor", id: "minor", checked: c.editMinor, children: t`Minor edit` }),
225
- /* @__PURE__ */ i(I, { name: "reloadAfterSave", id: "reloadAfterSave", checked: c.reloadAfterSave, children: t`Reload after save` })
224
+ /* @__PURE__ */ i(C, { name: "minor", id: "minor", checked: c.editMinor, children: t`Minor edit` }),
225
+ /* @__PURE__ */ i(C, { name: "reloadAfterSave", id: "reloadAfterSave", checked: c.reloadAfterSave, children: t`Reload after save` })
226
226
  ] })
227
227
  ]
228
228
  }
229
229
  ),
230
230
  !1
231
231
  ] });
232
- o.setContent(b), o.addButton(
232
+ o.setContent(b);
233
+ let y = !1;
234
+ o.addButton(
233
235
  {
234
236
  side: "left",
235
237
  className: "is-primary submit-btn",
236
238
  label: t`Submit`,
237
239
  keyPress: await this.ctx.preferences.get("quickEdit.keyshortcut.save") || void 0,
238
- method: () => {
239
- const n = new FormData(b);
240
- o.setLoadingState(!0), this.handleSubmit({
241
- wikiPage: u,
242
- text: n.get("text"),
243
- summary: n.get("summary"),
244
- minor: n.get("minor") === "on",
245
- section: c.section,
246
- createonly: u.pageid === 0,
247
- watchlist: r
248
- }).then(async () => {
249
- o.setOptions({
250
- beforeClose: C
240
+ method: async () => {
241
+ const r = new FormData(b);
242
+ o.setLoadingState(!0);
243
+ try {
244
+ await this.handleSubmit({
245
+ wikiPage: a,
246
+ text: r.get("text"),
247
+ summary: r.get("summary"),
248
+ minor: r.get("minor") === "on",
249
+ section: c.section,
250
+ watchlist: n,
251
+ // 如果无视风险,那么就不再尝试解决冲突,直接重建页面
252
+ createonly: a.pageid === 0 && !y,
253
+ recreate: a.pageid === 0 && y
254
+ }), o.setOptions({
255
+ beforeClose: F
251
256
  }), o.close(), this.ctx.modal.notify("success", {
252
257
  title: t`Submission Successful`,
253
258
  content: t`Your changes have been saved.`
254
- }), n.get("reloadAfterSave") && (await z(500), location.reload());
255
- }).catch((w) => {
259
+ }), r.get("reloadAfterSave") && (await K(500), location.reload());
260
+ } catch (m) {
261
+ if (o.setLoadingState(!1), U.is(m) && (m.code === "pagedeleted" || m.code === "editconflict" || m.code === "articleexists")) {
262
+ y = !0, this.ctx.modal.notify("warning", {
263
+ title: t`Submission Error`,
264
+ content: /* @__PURE__ */ i("div", { children: [
265
+ /* @__PURE__ */ i("p", { children: /* @__PURE__ */ i("strong", { children: m.message }) }),
266
+ /* @__PURE__ */ i("p", { children: t`You can try to submit again to dismiss the warnings.` })
267
+ ] }),
268
+ closeAfter: 15 * 1e3
269
+ });
270
+ return;
271
+ }
256
272
  this.ctx.modal.notify("error", {
257
273
  title: t`Submission Error`,
258
- content: w instanceof Error ? w.message : String(w)
259
- }), o.setLoadingState(!1);
260
- });
274
+ content: m instanceof Error ? m.message : String(m)
275
+ });
276
+ }
261
277
  }
262
278
  },
263
279
  0
264
280
  ), o.setOptions({
265
281
  beforeClose: () => {
266
- const n = u.revisions[0]?.content || "";
267
- return (b.querySelector("textarea")?.value || "") === n ? !0 : (this.ctx.modal.confirm(
282
+ const r = a.revisions[0]?.content || "";
283
+ return (b.querySelector("textarea")?.value || "") === r ? !0 : (this.ctx.modal.confirm(
268
284
  {
269
285
  className: "is-primary",
270
286
  title: t`Unsaved Changes`,
@@ -279,8 +295,8 @@ let S = class L extends (A = Q) {
279
295
  className: "is-primary is-ghost"
280
296
  }
281
297
  },
282
- (D) => (D && (o.setOptions({
283
- beforeClose: C
298
+ (j) => (j && (o.setOptions({
299
+ beforeClose: F
284
300
  }), o.close()), !0)
285
301
  ), !1);
286
302
  }
@@ -288,42 +304,29 @@ let S = class L extends (A = Q) {
288
304
  ctx: this.ctx,
289
305
  options: c,
290
306
  modal: o,
291
- wikiPage: u
307
+ wikiPage: a
292
308
  });
293
- const N = (n) => b.querySelector("textarea")?.value === v ? !0 : (n.preventDefault(), t`You have unsaved changes. Are you sure you want to leave?`);
294
- window.addEventListener("beforeunload", N), o.on(o.Event.Close, () => {
295
- window.removeEventListener("beforeunload", N);
309
+ const q = (r) => b.querySelector("textarea")?.value === v ? !0 : (r.preventDefault(), t`You have unsaved changes. Are you sure you want to leave?`);
310
+ window.addEventListener("beforeunload", q), o.on(o.Event.Close, () => {
311
+ window.removeEventListener("beforeunload", q);
296
312
  });
297
313
  }
298
314
  async handleSubmit(e) {
299
- const t = e.wikiPage, l = e.summary || "", r = e.text || "", d = e.minor, m = e.createonly, f = e.watchlist, c = e.section;
315
+ const { wikiPage: t, ...d } = e;
300
316
  return this.ctx.emit("quick-edit/submit", {
301
317
  ctx: this.ctx,
302
318
  wikiPage: t,
303
- summary: l,
304
- text: r,
305
- minor: d,
306
- createonly: m,
307
- watchlist: f
308
- }), t.edit(
309
- {
310
- summary: l,
311
- text: r,
312
- watchlist: f,
313
- section: c
314
- },
315
- {
316
- minor: d,
317
- createonly: m
318
- }
319
- );
319
+ ...d
320
+ }), t.edit({
321
+ ...d
322
+ });
320
323
  }
321
324
  static {
322
325
  this.BUILT_IN_FONT_OPTIONS = ["preferences", "monospace", "sans-serif", "serif"];
323
326
  }
324
327
  async getEditFontOptions() {
325
328
  const e = await this.ctx.preferences.get("quickEdit.editFont");
326
- return L.BUILT_IN_FONT_OPTIONS.includes(e) ? {
329
+ return D.BUILT_IN_FONT_OPTIONS.includes(e) ? {
327
330
  className: `mw-editfont-${e === "preferences" ? this.ctx.wiki.userOptions?.editfont || "monospace" : e}`,
328
331
  fontFamily: ""
329
332
  } : {
@@ -341,7 +344,7 @@ let S = class L extends (A = Q) {
341
344
  throw new Error("Invalid payload");
342
345
  }
343
346
  async injectToolbox(e) {
344
- const t = this.ctx.$, l = this.ctx.currentPage.wikiTitle, r = l && l.getNamespaceId() >= 0;
347
+ const t = this.ctx.$, d = this.ctx.currentPage.wikiTitle, n = d && d.getNamespaceId() >= 0;
345
348
  e.toolbox.addButton({
346
349
  id: "quick-edit",
347
350
  group: "group1",
@@ -368,14 +371,14 @@ let S = class L extends (A = Q) {
368
371
  }
369
372
  ),
370
373
  buttonProps: {
371
- disabled: !r
374
+ disabled: !n
372
375
  },
373
- tooltip: () => r ? t`Quick Edit` : t`Not editable`,
376
+ tooltip: () => n ? t`Quick Edit` : t`Not editable`,
374
377
  onClick: () => {
375
- const d = new URLSearchParams(window.location.search).get("oldid");
378
+ const u = new URLSearchParams(window.location.search).get("oldid");
376
379
  this.showModal({
377
- title: l?.getPrefixedText(),
378
- revision: d ? Number(d) : void 0
380
+ title: d?.getPrefixedText(),
381
+ revision: u ? Number(u) : void 0
379
382
  });
380
383
  }
381
384
  });
@@ -384,11 +387,11 @@ let S = class L extends (A = Q) {
384
387
  e.toolbox.removeButton("quick-edit");
385
388
  }
386
389
  };
387
- y = X(A);
388
- S = te(y, 0, "PluginQuickEdit", B, S);
389
- ee(y, 1, S);
390
- let ue = S;
390
+ P = V(L);
391
+ S = se(P, 0, "PluginQuickEdit", A, S);
392
+ ie(P, 1, S);
393
+ let he = S;
391
394
  export {
392
- ue as PluginQuickEdit
395
+ he as PluginQuickEdit
393
396
  };
394
- //# sourceMappingURL=index-DmLoihN1.js.map
397
+ //# sourceMappingURL=index-WfXtYVMt.js.map