@inpageedit/core 0.13.1 → 0.14.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 (74) hide show
  1. package/LICENSE +20 -20
  2. package/dist/{BasePlugin-Bf2UuIHF.js → BasePlugin-CU8beLYu.js} +17 -26
  3. package/dist/BasePlugin-CU8beLYu.js.map +1 -0
  4. package/dist/IconQuickEdit-CMCQncyj.js.map +1 -1
  5. package/dist/InputBox-nQKtiWtZ.js.map +1 -1
  6. package/dist/{PluginPrefSync-Dn1Xsiqz.js → PluginPrefSync-B-gPsC2n.js} +124 -128
  7. package/dist/PluginPrefSync-B-gPsC2n.js.map +1 -0
  8. package/dist/PluginStoreApp-CDteVCBG.js +453 -0
  9. package/dist/PluginStoreApp-CDteVCBG.js.map +1 -0
  10. package/dist/{endpoints-DgyuoRZd.js → Preferences-85Q9FAmb.js} +589 -565
  11. package/dist/Preferences-85Q9FAmb.js.map +1 -0
  12. package/dist/WatchlistAction-BbNAyryN.js.map +1 -1
  13. package/dist/components/index.js.map +1 -1
  14. package/dist/{index-DqA6EAM6.js → index-19CgGBI0.js} +1419 -921
  15. package/dist/index-19CgGBI0.js.map +1 -0
  16. package/dist/{index-B7c6jL9x.js → index-BKIf3i0I.js} +146 -137
  17. package/dist/index-BKIf3i0I.js.map +1 -0
  18. package/dist/{index-CCRMmnwk.js → index-BrtFJ-M0.js} +67 -66
  19. package/dist/index-BrtFJ-M0.js.map +1 -0
  20. package/dist/index-CG38LlAh.js.map +1 -1
  21. package/dist/index-CM_6yF2v.js.map +1 -1
  22. package/dist/index-CQr1DJ8n.js +173 -0
  23. package/dist/index-CQr1DJ8n.js.map +1 -0
  24. package/dist/{index-BQ-cHWkJ.js → index-CVTBg5O9.js} +66 -48
  25. package/dist/index-CVTBg5O9.js.map +1 -0
  26. package/dist/index-Ci82vLXg.js +179 -0
  27. package/dist/index-Ci82vLXg.js.map +1 -0
  28. package/dist/{index-BwdWyHLe.js → index-D3iZhRMJ.js} +93 -93
  29. package/dist/index-D3iZhRMJ.js.map +1 -0
  30. package/dist/index-DD5CVCfD.js.map +1 -1
  31. package/dist/{index-BJ7_Q1mB.js → index-DGtq21uW.js} +17 -16
  32. package/dist/index-DGtq21uW.js.map +1 -0
  33. package/dist/index-DXL7teb0.js +394 -0
  34. package/dist/index-DXL7teb0.js.map +1 -0
  35. package/dist/index-DjPpAyfE.js +116 -0
  36. package/dist/index-DjPpAyfE.js.map +1 -0
  37. package/dist/{index-eSlbrNqF.js → index-rpiO9fpc.js} +4 -5
  38. package/dist/{index-eSlbrNqF.js.map → index-rpiO9fpc.js.map} +1 -1
  39. package/dist/index.d.ts +318 -25
  40. package/dist/index.js +32 -26
  41. package/dist/index.js.map +1 -1
  42. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  43. package/dist/models/index.js +174 -154
  44. package/dist/models/index.js.map +1 -1
  45. package/dist/noop-ClDc6zv4.js.map +1 -1
  46. package/dist/plugins/index.js +10 -10
  47. package/dist/services/index.js +1 -1
  48. package/dist/style.css +1 -1
  49. package/dist/vueHooks-l04s8cIl.js.map +1 -1
  50. package/lib/index.umd.js +20 -12
  51. package/lib/index.umd.js.map +1 -1
  52. package/lib/style.css +1 -1
  53. package/package.json +4 -4
  54. package/dist/BasePlugin-Bf2UuIHF.js.map +0 -1
  55. package/dist/PluginPrefSync-Dn1Xsiqz.js.map +0 -1
  56. package/dist/PluginStoreApp-CpOLArL7.js +0 -452
  57. package/dist/PluginStoreApp-CpOLArL7.js.map +0 -1
  58. package/dist/Preferences-DS4-CFWe.js +0 -9
  59. package/dist/Preferences-DS4-CFWe.js.map +0 -1
  60. package/dist/endpoints-DgyuoRZd.js.map +0 -1
  61. package/dist/index-2RfILgXm.js +0 -180
  62. package/dist/index-2RfILgXm.js.map +0 -1
  63. package/dist/index-B7c6jL9x.js.map +0 -1
  64. package/dist/index-BJ7_Q1mB.js.map +0 -1
  65. package/dist/index-BNh95-x2.js +0 -115
  66. package/dist/index-BNh95-x2.js.map +0 -1
  67. package/dist/index-BQ-cHWkJ.js.map +0 -1
  68. package/dist/index-BwdWyHLe.js.map +0 -1
  69. package/dist/index-CCRMmnwk.js.map +0 -1
  70. package/dist/index-CnIpUF9x.js +0 -173
  71. package/dist/index-CnIpUF9x.js.map +0 -1
  72. package/dist/index-CyG7_IYz.js +0 -394
  73. package/dist/index-CyG7_IYz.js.map +0 -1
  74. package/dist/index-DqA6EAM6.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CCRMmnwk.js","sources":["../src/components/MwUserLinks.tsx","../src/plugins/quick-diff/components/DiffTable.tsx","../src/components/utils.tsx","../src/plugins/quick-diff/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\r\n\r\nexport const MwUserLinks = (props: { user: string; target?: string; ctx: InPageEdit }) => {\r\n let { user, target, ctx } = props\r\n const getUrl = ctx.getUrl.bind(ctx)\r\n return (\r\n <span className=\"mw-userlinks\">\r\n <a href={getUrl(`User:${user}`)} className=\"mw-userlink\" target={target}>\r\n {user}\r\n </a>{' '}\r\n <span className=\"mw-usertoollinks\">\r\n (\r\n <a href={getUrl(`User_talk:${user}`)} className=\"mw-usertoollinks-talk\" target={target}>\r\n talk\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Contributions/${user}`)}\r\n className=\"mw-usertoollinks-contribs\"\r\n target={target}\r\n >\r\n contribs\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Block/${user}`)}\r\n className=\"mw-usertoollinks-block\"\r\n target={target}\r\n >\r\n block\r\n </a>\r\n )\r\n </span>\r\n </span>\r\n )\r\n}\r\n","import './style.scss'\r\nimport { JSX } from 'jsx-dom/jsx-runtime'\r\nimport { CompareApiResponse } from '../index.js'\r\nimport { InPageEdit } from '@/InPageEdit.js'\r\n\r\nexport type DiffTableProps = {\r\n data: Partial<CompareApiResponse['compare']>\r\n ctx: InPageEdit\r\n} & JSX.IntrinsicElements['table']\r\n\r\nexport enum DiffTableEvent {\r\n update = 'ipe:diff-table/update',\r\n edit = 'ipe:diff-table/edit',\r\n}\r\n\r\n// DOM 事件类型定义\r\ndeclare global {\r\n interface HTMLElementEventMap {\r\n [DiffTableEvent.update]: CustomEvent<{\r\n fromrev: number\r\n torev: number\r\n }>\r\n [DiffTableEvent.edit]: CustomEvent<{\r\n revid: number\r\n }>\r\n }\r\n}\r\n\r\nconst formatDate = new Intl.DateTimeFormat(undefined, {\r\n dateStyle: 'medium',\r\n timeStyle: 'medium',\r\n}).format\r\n\r\nconst DiffTableHeader = (props: {\r\n ctx: InPageEdit\r\n type?: 'from' | 'to'\r\n pageid?: number\r\n pagetitle?: string\r\n revid?: number\r\n size?: number\r\n timestamp?: string\r\n username?: string\r\n userid?: number\r\n comment?: string\r\n parsedcomment?: string\r\n}) => {\r\n let classList = ['diff-title']\r\n if (props.type === 'from') {\r\n classList.push('diff-otitle')\r\n } else if (props.type === 'to') {\r\n classList.push('diff-ntitle')\r\n }\r\n if (!props.pageid || !props.userid) {\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.type === 'from' ? 'Original content' : props.type === 'to' ? 'Your content' : ''}\r\n </div>\r\n </td>\r\n )\r\n }\r\n const handleEditClick = (e: Event) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.edit, {\r\n detail: { revid: props.revid! },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.pagetitle || props.timestamp}\r\n {props.revid ? ` (rev#${props.revid})` : ''}\r\n </div>\r\n <div className=\"mw-diff-title--actions\">\r\n <a\r\n href={props.ctx.getUrl('', { action: 'edit', oldid: props.revid! })}\r\n onClick={handleEditClick}\r\n >\r\n <IconQuickEdit style=\"width: 1em; height: 1em\" />\r\n Quick edit\r\n </a>\r\n </div>\r\n <div className=\"mw-diff-title--user\">\r\n {props.username && <MwUserLinks ctx={props.ctx} user={props.username} target=\"_blank\" />}\r\n </div>\r\n <div className=\"mw-diff-title--timestamp\">\r\n {props.timestamp && formatDate(new Date(props.timestamp))}\r\n </div>\r\n <div className=\"mw-diff-title--comment\">\r\n {props.parsedcomment && (\r\n <>\r\n (<i innerHTML={props.parsedcomment}></i>)\r\n </>\r\n )}\r\n </div>\r\n </td>\r\n )\r\n}\r\n\r\nconst DiffTableNavigation = (props: { data: DiffTableProps['data']; ctx: InPageEdit }) => {\r\n const data = props.data\r\n if (!data.prev && !data.next) {\r\n return null\r\n }\r\n\r\n // 统一的事件处理器\r\n const handleNavigationClick = (e: Event, fromrev: number, torev: number) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.update, {\r\n detail: { fromrev, torev },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n\r\n return (\r\n <tr className=\"mw-diff-title--navigation\">\r\n <td colSpan={2}>\r\n {data.prev ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.prev!, oldid: data.fromrevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.prev!, data.fromrevid!)}\r\n >\r\n ← Previous\r\n </a>\r\n ) : (\r\n <i>Oldest version</i>\r\n )}\r\n </td>\r\n <td colSpan={2}>\r\n {data.next ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.next!, oldid: data.torevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.torevid!, data.next!)}\r\n >\r\n Next →\r\n </a>\r\n ) : (\r\n <i>Newest version</i>\r\n )}\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nexport const DiffTable = (props: DiffTableProps) => {\r\n const { data, ...rest } = props\r\n const table = (\r\n <table className={`theme-ipe diff diff-type-table`} data-mw=\"interface\" {...rest}>\r\n <colgroup>\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n </colgroup>\r\n <tbody>\r\n <tr>\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"from\"\r\n pageid={data.fromid}\r\n pagetitle={data.fromtitle}\r\n revid={data.fromrevid}\r\n size={data.fromsize}\r\n timestamp={data.fromtimestamp}\r\n username={data.fromuser}\r\n userid={data.fromuserid}\r\n comment={data.fromcomment}\r\n parsedcomment={data.fromparsedcomment}\r\n />\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"to\"\r\n pageid={data.toid}\r\n pagetitle={data.totitle}\r\n revid={data.torevid}\r\n size={data.tosize}\r\n timestamp={data.totimestamp}\r\n username={data.touser}\r\n userid={data.touserid}\r\n comment={data.tocomment}\r\n parsedcomment={data.toparsedcomment}\r\n />\r\n </tr>\r\n <DiffTableNavigation data={data} ctx={props.ctx} />\r\n <div id=\"diffbody\"></div>\r\n <tr className=\"diff-size\" style={{ textAlign: 'center' }}>\r\n <td colSpan={2} className=\"diff-size-old\">\r\n {data.fromsize !== undefined && `${data.fromsize} bytes`}\r\n </td>\r\n <td colSpan={2} className=\"diff-size-new\">\r\n {data.tosize !== undefined && `${data.tosize} bytes`}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n )\r\n table.querySelector('#diffbody')!.outerHTML =\r\n data.body ||\r\n (\r\n <tr>\r\n <td colSpan={4}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '5rem',\r\n }}\r\n >\r\n <i>No changes</i>\r\n </div>\r\n </td>\r\n </tr>\r\n ).outerHTML\r\n return table\r\n}\r\n","import { CSSProperties, ReactElement } from 'jsx-dom'\r\n\r\nexport const qs = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelector(selector) as T | null\r\n}\r\nexport const qsa = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelectorAll(selector) as NodeListOf<T>\r\n}\r\n\r\nexport const setStyles = (el: HTMLElement | ReactElement, style: CSSProperties) => {\r\n Object.entries(style).forEach(([key, value]) => {\r\n if (typeof value === 'undefined' || value === null) {\r\n el.style.removeProperty(key)\r\n } else {\r\n const isImportant = typeof value === 'string' && value.endsWith('!important')\r\n // @ts-ignore\r\n el.style.setProperty(\r\n key,\r\n value.replace('!important', '').trim(),\r\n isImportant ? 'important' : undefined\r\n )\r\n }\r\n })\r\n return el\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\nimport { DiffTable, DiffTableEvent } from './components/DiffTable'\nimport { MwApiResponse } from 'wiki-saikou'\nimport { IWikiPage } from '@/models/WikiPage/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickDiff: PluginQuickDiff\n }\n interface Events {\n 'quick-diff/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<CompareApiRequestOptions>\n }): void\n 'quick-diff/loaded'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n compare: CompareApiResponse['compare']\n }): void\n 'quick-diff/quick-edit-modal'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: IWikiPage\n }): void\n }\n interface PreferencesMap {\n 'quickDiff.keyshortcut': string\n }\n}\n\nexport interface CompareApiRequestOptions {\n fromtitle: string\n fromid: number\n fromrev: number\n frompst: boolean\n totitle: string\n toid: number\n torev: number\n torelative?: 'cur' | 'prev' | 'next'\n topst: boolean\n prop: string\n difftype: 'table' | 'unified'\n // deprecated, but still works\n fromtext: string\n fromsection: string | number\n fromcontentmodel: string\n totext: string\n tosection: string | number\n tocontentmodel: string\n}\n\nexport interface CompareApiResponse {\n compare: Partial<{\n fromid: number\n fromrevid: number\n fromns: number\n fromtitle: string\n fromsize: number\n fromtimestamp: string\n fromuser: string\n fromuserid: number\n fromcomment: string\n fromparsedcomment?: string\n toid: number\n torevid: number\n tons: number\n totitle: string\n tosize: number\n totimestamp: string\n touser: string\n touserid: number\n tocomment: string\n toparsedcomment: string\n diffsize: number\n prev: number\n next: number\n }> & {\n body: string\n }\n}\n\n@Inject(['wiki', 'getUrl', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'quickDiff.keyshortcut': Schema.string()\n .default('ctrl-d')\n .description('Key shortcut to open quick diff in quick edit modal'),\n })\n .description('Quick diff options')\n .extra('category', 'editor')\n)\nexport class PluginQuickDiff extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-diff')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickDiff', this)\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n window.RLQ.push(this.injectHistoryPage.bind(this))\n }\n\n protected stop(): Promise<void> | void {}\n\n private injectHistoryPage() {\n const mwCompareForm = qs<HTMLFormElement>('#mw-history-compare')\n if (!mwCompareForm) {\n return\n }\n const compareButtons = qsa('.mw-history-compareselectedversions-button', mwCompareForm)\n compareButtons.forEach((el) => {\n el.after(\n <button\n className=\"cdx-button\"\n onClick={(e) => {\n e.preventDefault()\n const formData = new FormData(mwCompareForm)\n const fromrev = Number(formData.get('oldid')) || 0\n const torev = Number(formData.get('diff')) || 0\n const title = formData.get('title') as string\n if (!title || !fromrev || !torev) {\n return this.logger.warn('Missing title or revision IDs')\n }\n this.comparePages({\n fromrev,\n torev,\n })\n }}\n >\n Quick Diff\n </button>\n )\n })\n }\n\n private async injectQuickEdit({ modal, wikiPage, options }: QuickEditEventPayload) {\n if (wikiPage.pageid === 0 || options.section === 'new') {\n // User is creating a new page, no need to show diff button\n return\n }\n let latestDiffModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: 'Diff',\n side: 'left',\n keyPress: (await this.ctx.preferences.get('quickDiff.keyshortcut')) || undefined,\n className: 'btn btn-secondary',\n method: () => {\n const pageTitle = wikiPage.title\n const fromtext = wikiPage.revisions?.[0]?.content || ''\n const totext =\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || ''\n\n if (fromtext === totext) {\n return this.ctx.modal.notify('info', { title: 'Quick Diff', content: 'No changes' })\n }\n\n this.ctx.emit('quick-diff/quick-edit-modal', {\n ctx: this.ctx,\n modal,\n wikiPage,\n })\n\n latestDiffModal = this.comparePages(\n {\n fromtitle: pageTitle,\n fromtext,\n totitle: pageTitle,\n totext,\n topst: true,\n },\n latestDiffModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n return latestDiffModal\n },\n },\n 2\n )\n modal.on(modal.Event.Close, () => {\n latestDiffModal?.destroy()\n latestDiffModal = undefined\n })\n }\n\n readonly COMPARE_API_DEFAULT_OPTIONS: Partial<CompareApiRequestOptions> = {\n prop: [\n 'comment',\n 'diff',\n 'diffsize',\n 'ids',\n 'parsedcomment',\n 'size',\n 'timestamp',\n 'title',\n 'user',\n 'rel',\n ].join('|'),\n difftype: 'table',\n }\n\n comparePages(\n options: Partial<CompareApiRequestOptions>,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n title: 'Loading diff...',\n content: '',\n className: 'quick-diff',\n center: false,\n ...modalOptions,\n })\n .init()\n } else {\n modal.removeButton('*')\n }\n\n this.ctx.emit('quick-diff/init-options', {\n ctx: this.ctx,\n options,\n })\n\n modal.setContent(\n <section\n style={{ height: '70vh', display: 'flex', justifyContent: 'center', alignItems: 'center' }}\n >\n <ProgressBar />\n </section>\n )\n modal.bringToFront()\n\n if (window.mw && mw.loader.getState('mediawiki.diff.styles') !== 'ready') {\n mw.loader.load(['mediawiki.diff.styles'])\n }\n\n this.ctx.api\n .post<MwApiResponse<CompareApiResponse>>({\n ...this.COMPARE_API_DEFAULT_OPTIONS,\n ...options,\n action: 'compare',\n format: 'json',\n formatversion: 2,\n })\n .then((res) => {\n if (!res.data.compare) {\n throw new Error('No compare data received', { cause: res })\n }\n const {\n data: { compare },\n } = res\n modal.setTitle(\n compare.fromtitle && compare.totitle\n ? `${compare.fromtitle}${compare.fromrevid ? ` (${compare.fromrevid})` : ''} ⇔ ${compare.totitle}${compare.torevid ? ` (${compare.torevid})` : ''}`\n : 'Differences'\n )\n let diffTable!: HTMLElement\n modal.setContent(\n (\n <section\n style={{\n minHeight: '70vh',\n }}\n >\n <DiffTable ref={(ref) => (diffTable = ref)} data={compare} ctx={this.ctx} />\n </section>\n ) as HTMLElement\n )\n diffTable.addEventListener(\n DiffTableEvent.update,\n (e) => {\n e.stopPropagation()\n this.comparePages(\n {\n fromrev: e.detail.fromrev,\n torev: e.detail.torev,\n },\n modal,\n modalOptions\n )\n },\n { once: true }\n )\n\n // TODO: 不应该硬编码,移动到 in-article-links 插件中\n this.ctx.inject(['quickEdit'], (ctx) => {\n const handleQuickEdit = (e: CustomEvent<{ revid: number }>) => {\n e.stopPropagation()\n ctx.quickEdit({ revision: e.detail.revid })\n }\n diffTable.addEventListener(DiffTableEvent.edit, handleQuickEdit)\n modal.on(modal.Event.Close, () => {\n diffTable.removeEventListener(DiffTableEvent.edit, handleQuickEdit)\n })\n })\n\n if (compare.fromrevid && compare.torevid) {\n modal.addButton({\n label: 'Original Compare Page',\n side: 'right',\n className: 'btn btn-secondary',\n method: () => {\n window.location.href = this.ctx.getUrl('', {\n oldid: compare.fromrevid,\n diff: compare.torevid,\n })\n },\n })\n }\n\n this.ctx.emit('quick-diff/loaded', {\n ctx: this.ctx,\n modal,\n compare,\n })\n })\n .catch((err) => {\n modal.setContent(\n (\n <MBox title=\"Failed to load diff\" type=\"error\">\n <pre>{err instanceof Error ? err.message : String(err)}</pre>\n </MBox>\n ) as HTMLElement\n )\n })\n\n return modal.show()\n }\n}\n"],"names":["MwUserLinks","props","user","target","ctx","getUrl","jsxs","jsx","DiffTableEvent","formatDate","DiffTableHeader","classList","handleEditClick","e","IconQuickEdit","Fragment","DiffTableNavigation","data","handleNavigationClick","fromrev","torev","DiffTable","rest","table","qs","selector","parent","qsa","_PluginQuickDiff_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDiff","BasePlugin","mwCompareForm","el","formData","modal","wikiPage","options","latestDiffModal","pageTitle","fromtext","totext","modalOptions","ProgressBar","res","compare","diffTable","ref","handleQuickEdit","err","MBox","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,173 +0,0 @@
1
- import { j as i, P as d } from "./index-CM_6yF2v.js";
2
- import { B as m } from "./BasePlugin-Bf2UuIHF.js";
3
- import { T as u } from "./index-DD5CVCfD.js";
4
- import { I as h, C as f } from "./InputBox-nQKtiWtZ.js";
5
- import { S as l } from "./endpoints-DgyuoRZd.js";
6
- class b extends m {
7
- constructor(e) {
8
- super(e, {}, "quick-redirect"), this.ctx = e;
9
- }
10
- static {
11
- this.inject = ["api", "wikiPage", "modal"];
12
- }
13
- static {
14
- this.PreferencesSchema = l.object({
15
- "quickRedirect.reason": l.string().default("[IPE-NEXT] Quick redirect")
16
- }).description("Quick redirect options").extra("category", "editor");
17
- }
18
- start() {
19
- this.ctx.set("quickRedirect", this);
20
- const e = window.mw?.config.get("wgPageName") || "", c = window.mw?.config.get("wgIsProbablyEditable");
21
- this.ctx.inject(["toolbox"], (t) => {
22
- this.ctx = t, t.toolbox.addButton({
23
- id: "quick-redirect",
24
- icon: /* @__PURE__ */ i(
25
- "svg",
26
- {
27
- xmlns: "http://www.w3.org/2000/svg",
28
- width: "24",
29
- height: "24",
30
- viewBox: "0 0 24 24",
31
- fill: "none",
32
- stroke: "currentColor",
33
- "stroke-width": "2",
34
- "stroke-linecap": "round",
35
- "stroke-linejoin": "round",
36
- class: "icon icon-tabler icons-tabler-outline icon-tabler-file-symlink",
37
- children: [
38
- /* @__PURE__ */ i("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
39
- /* @__PURE__ */ i("path", { d: "M4 21v-4a3 3 0 0 1 3 -3h5" }),
40
- /* @__PURE__ */ i("path", { d: "M9 17l3 -3l-3 -3" }),
41
- /* @__PURE__ */ i("path", { d: "M14 3v4a1 1 0 0 0 1 1h4" }),
42
- /* @__PURE__ */ i("path", { d: "M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5" })
43
- ]
44
- }
45
- ),
46
- tooltip: "Quick Redirect",
47
- group: "group1",
48
- index: 2,
49
- onClick: () => {
50
- this.showModal(
51
- c ? {
52
- to: e
53
- } : {}
54
- );
55
- }
56
- }), this.addDisposeHandler((r) => {
57
- r.toolbox.removeButton("quick-redirect");
58
- });
59
- });
60
- }
61
- stop() {
62
- }
63
- async showModal(e) {
64
- const c = await this.ctx.preferences.get("quickRedirect.reason");
65
- e || (e = {}), this.ctx.emit("quick-redirect/init-options", { ctx: this.ctx, options: e });
66
- const t = this.ctx.modal.createObject({
67
- title: "Quick Redirect",
68
- content: /* @__PURE__ */ i(d, {}),
69
- className: "quick-redirect compact-buttons",
70
- sizeClass: "smallToMedium",
71
- center: !0
72
- }).init();
73
- let r = null;
74
- return t.setContent(
75
- /* @__PURE__ */ i(
76
- "form",
77
- {
78
- ref: (s) => r = s,
79
- style: {
80
- display: "flex",
81
- flexDirection: "column",
82
- gap: "1rem"
83
- },
84
- onSubmit: (s) => {
85
- if (s.preventDefault(), r?.checkValidity(), !r?.reportValidity())
86
- return;
87
- const o = new FormData(r), a = {
88
- from: o.get("from")?.toString().trim(),
89
- to: o.get("to")?.toString().trim(),
90
- reason: o.get("reason") || "",
91
- overwrite: o.get("overwrite") === "on"
92
- };
93
- if (!a.from || !a.to) {
94
- this.ctx.modal.notify("error", {
95
- title: "Failed to redirect",
96
- content: "From and to are required."
97
- });
98
- return;
99
- }
100
- this.ctx.emit("quick-redirect/submit", { ctx: this.ctx, payload: a }), t.setLoadingState(!0), this.redirectPage(a).then((n) => {
101
- t.close(), this.ctx.modal.notify("success", {
102
- title: "Redirect successful",
103
- content: "The redirect has been created."
104
- });
105
- }).catch((n) => {
106
- t.setLoadingState(!1), this.ctx.modal.notify("error", {
107
- title: "Failed to redirect",
108
- content: n instanceof Error ? n.message : String(n)
109
- });
110
- });
111
- },
112
- children: [
113
- /* @__PURE__ */ i(
114
- u,
115
- {
116
- inputs: [
117
- {
118
- label: "From",
119
- name: "from",
120
- value: e?.from,
121
- required: !0
122
- },
123
- {
124
- label: "To",
125
- name: "to",
126
- value: e?.to,
127
- required: !0
128
- }
129
- ]
130
- }
131
- ),
132
- /* @__PURE__ */ i(
133
- h,
134
- {
135
- label: "Reason",
136
- id: "reason",
137
- name: "reason",
138
- value: e?.reason ?? c ?? ""
139
- }
140
- ),
141
- /* @__PURE__ */ i("div", { children: /* @__PURE__ */ i(f, { name: "overwrite", id: "overwrite", checked: e?.overwrite, children: "Force create redirect even if the from page already exists" }) })
142
- ]
143
- }
144
- )
145
- ), t.setButtons([
146
- {
147
- label: "Create Redirect",
148
- className: "is-primary is-ghost",
149
- method: () => {
150
- r?.dispatchEvent(new Event("submit"));
151
- }
152
- }
153
- ]), this.ctx.emit("quick-redirect/show-modal", { ctx: this.ctx, modal: t }), t.show();
154
- }
155
- async redirectPage(e) {
156
- const { from: c, to: t, reason: r = "", overwrite: s = !1 } = e, o = await this.ctx.wikiPage.newBlankPage({
157
- title: c
158
- }), a = `#REDIRECT [[:${t}]]`;
159
- return o.edit(
160
- {
161
- text: a,
162
- summary: r
163
- },
164
- {
165
- createonly: !s
166
- }
167
- );
168
- }
169
- }
170
- export {
171
- b as PluginQuickRedirect
172
- };
173
- //# sourceMappingURL=index-CnIpUF9x.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CnIpUF9x.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\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 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: '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\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,394 +0,0 @@
1
- import { j as t, F as _, P as L } from "./index-CM_6yF2v.js";
2
- import { W as h } from "./WatchlistAction-BbNAyryN.js";
3
- import { m as j } from "./makeCallable-LDU0xZMJ.js";
4
- import { R } from "./Preferences-DS4-CFWe.js";
5
- import { B as U } from "./BasePlugin-Bf2UuIHF.js";
6
- import { M as N } from "./index-CG38LlAh.js";
7
- import { I as q, C as I } from "./InputBox-nQKtiWtZ.js";
8
- import { R as Q } from "./RadioBox-0UuxlcWZ.js";
9
- import { n as T } from "./noop-ClDc6zv4.js";
10
- import { I as W, S as l } from "./endpoints-DgyuoRZd.js";
11
- const z = (i = 0) => new Promise((e) => setTimeout(e, i));
12
- var $ = Object.create, E = Object.defineProperty, K = Object.getOwnPropertyDescriptor, C = (i, e) => (e = Symbol[i]) ? e : Symbol.for("Symbol." + i), F = (i) => {
13
- throw TypeError(i);
14
- }, Y = (i, e, r) => e in i ? E(i, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : i[e] = r, G = (i, e) => E(i, "name", { value: e, configurable: !0 }), H = (i) => [, , , $(i?.[C("metadata")] ?? null)], X = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], O = (i) => i !== void 0 && typeof i != "function" ? F("Function expected") : i, J = (i, e, r, d, n) => ({ kind: X[i], name: e, metadata: d, addInitializer: (u) => r._ ? F("Already initialized") : n.push(O(u || null)) }), V = (i, e) => Y(e, C("metadata"), i[3]), Z = (i, e, r, d) => {
15
- for (var n = 0, u = i[e >> 1], m = u && u.length; n < m; n++) u[n].call(r);
16
- return d;
17
- }, ee = (i, e, r, d, n, u) => {
18
- var m, c, s, a = e & 7, v = !1, f = 0, x = i[f] || (i[f] = []), p = a && (n = n.prototype, a < 5 && (a > 3 || !v) && K(n, r));
19
- G(n, r);
20
- for (var g = d.length - 1; g >= 0; g--)
21
- s = J(a, r, c = {}, i[3], x), m = (0, d[g])(n, s), c._ = 1, O(m) && (n = m);
22
- return V(i, n), p && E(n, r, p), v ? a ^ 4 ? u : p : n;
23
- }, M, y, B;
24
- M = [W(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences"]), R(
25
- l.object({
26
- "quickEdit.editSummary": l.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
27
- "quickEdit.editMinor": l.boolean().description('Default to checking "minor edit" option').default(!1),
28
- "quickEdit.outSideClose": l.boolean().description("Close editor modal by clicking outside").default(!0),
29
- "quickEdit.watchList": l.union([
30
- l.const(h.preferences).description("Follow MW preferences"),
31
- l.const(h.nochange).description("Keep the current watchlist status"),
32
- l.const(h.watch).description("Add the page to watchlist"),
33
- l.const(h.unwatch).description("Remove the page from watchlist")
34
- ]).description("Watchlist options").default(h.preferences),
35
- "quickEdit.keyshortcut.save": l.string().default("ctrl-s").description("save button key shortcut (blank to disable)"),
36
- "quickEdit.editFont": l.union([
37
- l.const("preferences").description("Follow MW preferences"),
38
- l.const("monospace").description("Monospace"),
39
- l.const("sans-serif").description("Sans-serif"),
40
- l.const("serif").description("Serif"),
41
- l.string().description("Custom font (same as CSS `font-family` property)").default("")
42
- ]).description("Font to use in quick edit's textarea").default("preferences")
43
- }).description("Quick edit options").extra("category", "editor")
44
- )];
45
- let S = class A extends (B = U) {
46
- constructor(e) {
47
- super(e, {}, "quick-edit"), this.ctx = e, this.DEFAULT_OPTIONS = {
48
- title: "",
49
- pageId: 0,
50
- revision: 0,
51
- section: void 0,
52
- editMinor: !1,
53
- editSummary: "",
54
- createOnly: !1,
55
- reloadAfterSave: !0
56
- }, this.ctx.root.set("quickEdit", j(this, "showModal"));
57
- }
58
- start() {
59
- this.ctx.inject(["toolbox"], (e) => {
60
- this.injectToolbox(e), e.on("dispose", () => {
61
- this.removeToolbox(e);
62
- });
63
- });
64
- }
65
- async showModal(e) {
66
- if (typeof e > "u" ? e = {} : typeof e == "string" && (e = {
67
- title: e
68
- }), e?.page && (e.title = e.page, delete e.page), !e.title && !e.pageId && !e.revision) {
69
- this.logger.warn("None of the title, pageId or revision provided. Using defaults.");
70
- const o = new URLSearchParams(window.location.search), w = this.ctx.currentPage.wikiTitle;
71
- e = {
72
- ...e,
73
- title: w?.getPrefixedDBKey(),
74
- revision: o.has("oldid") ? Number(o.get("oldid")) : void 0,
75
- pageId: o.has("curid") ? Number(o.get("curid")) : void 0
76
- };
77
- }
78
- if (!e.revision && !e.pageId && e.title) {
79
- const o = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
80
- o && o.title.getNamespaceId() >= 0 && (e.title = o.title.getPrefixedDBKey(), e.section ??= o.section);
81
- }
82
- const r = await this.ctx.preferences.get("quickEdit.outSideClose"), d = await this.ctx.preferences.get("quickEdit.watchList"), n = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), u = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), m = await this.getEditFontOptions(), c = {
83
- ...this.DEFAULT_OPTIONS,
84
- editSummary: n,
85
- editMinor: u,
86
- ...e
87
- };
88
- c.editSummary || (c.editSummary = await this.ctx.preferences.get("quickEdit.editSummary") || ""), this.ctx.emit("quick-edit/init-options", { ctx: this.ctx, options: c });
89
- const s = this.ctx.modal.createObject({
90
- className: "ipe-quickEdit",
91
- sizeClass: "large",
92
- // backdrop: false,
93
- // draggable: true,
94
- center: !1,
95
- outSideClose: r
96
- }).init();
97
- s.setTitle(
98
- /* @__PURE__ */ t(_, { children: [
99
- "Loading: ",
100
- /* @__PURE__ */ t("u", { children: c.title })
101
- ] })
102
- ), s.setContent(
103
- /* @__PURE__ */ t(
104
- "section",
105
- {
106
- className: "ipe-quickEdit-loading",
107
- style: {
108
- height: "70vh",
109
- display: "flex",
110
- flexDirection: "column",
111
- justifyContent: "center",
112
- alignItems: "center"
113
- },
114
- children: /* @__PURE__ */ t(L, {})
115
- }
116
- )
117
- ), s.addButton({
118
- side: "right",
119
- type: "button",
120
- className: "is-danger is-ghost",
121
- label: "Cancel",
122
- method() {
123
- s.close();
124
- }
125
- }), s.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: s, options: c });
126
- let a;
127
- try {
128
- if (a = await this.getWikiPageFromPayload(c), a.pageInfo.special)
129
- throw new Error("Special page is not editable");
130
- } catch (o) {
131
- s.off(s.Event.Close), s.close(), this.ctx.modal.notify("error", {
132
- content: o instanceof Error ? o.message : String(o)
133
- });
134
- return;
135
- }
136
- const v = c.section === "new" ? "" : a.revisions[0]?.content || "", f = a.revisions[0]?.revid, x = f && f !== a.lastrevid, p = c.section === "new", g = a.pageid === 0;
137
- s.setTitle(
138
- /* @__PURE__ */ t(_, { children: [
139
- p ? "New section" : `Quick ${g ? "Create" : "Edit"}`,
140
- ":",
141
- " ",
142
- /* @__PURE__ */ t("u", { children: a.pageInfo.title }),
143
- x ? ` (Revision ${f})` : ""
144
- ] })
145
- );
146
- const k = [];
147
- g && k.push(
148
- /* @__PURE__ */ t(N, { title: "Attention", type: "important", children: /* @__PURE__ */ t("p", { children: "This page does not exist." }) })
149
- ), x && k.push(
150
- /* @__PURE__ */ t(N, { title: "Attention", type: "warning", children: /* @__PURE__ */ t("p", { children: [
151
- "You are editing a ",
152
- /* @__PURE__ */ t("em", { children: "historical version" }),
153
- "; the content is not the latest!"
154
- ] }) })
155
- ), this.ctx.emit("quick-edit/edit-notice", {
156
- ctx: this.ctx,
157
- options: c,
158
- modal: s,
159
- wikiPage: a,
160
- editNotices: k
161
- });
162
- const b = /* @__PURE__ */ t("form", { className: "ipe-quickEdit__form", children: [
163
- /* @__PURE__ */ t("div", { className: "ipe-quickEdit__notices", children: k }),
164
- /* @__PURE__ */ t(
165
- "div",
166
- {
167
- className: "ipe-quickEdit__content",
168
- style: { display: "flex", flexDirection: "column", gap: "1rem" },
169
- children: [
170
- c.section === "new" && /* @__PURE__ */ t(_, { children: /* @__PURE__ */ t(
171
- q,
172
- {
173
- label: "Section title",
174
- id: "summary",
175
- name: "summary",
176
- value: "",
177
- inputProps: { placeholder: "Topic for new section, this will be the h2 heading" }
178
- }
179
- ) }),
180
- /* @__PURE__ */ t(
181
- "textarea",
182
- {
183
- className: `ipe-quickEdit__textarea ${m.className}`,
184
- style: { fontFamily: m.fontFamily },
185
- name: "text",
186
- id: "wpTextbox1",
187
- children: v
188
- }
189
- )
190
- ]
191
- }
192
- ),
193
- /* @__PURE__ */ t(
194
- "div",
195
- {
196
- class: "ipe-quickEdit__options",
197
- style: {
198
- display: "flex",
199
- flexDirection: "column",
200
- gap: "1rem",
201
- marginTop: "1rem"
202
- },
203
- children: [
204
- !p && /* @__PURE__ */ t(q, { label: "Summary", id: "summary", name: "summary", value: c.editSummary }),
205
- /* @__PURE__ */ t("div", { className: "ipe-input-box", children: [
206
- /* @__PURE__ */ t("label", { htmlFor: "watchlist", style: { display: "block" }, children: "Watchlist" }),
207
- /* @__PURE__ */ t("div", { style: { display: "flex", gap: "1rem" }, children: [
208
- h.preferences,
209
- h.nochange,
210
- h.watch,
211
- h.unwatch
212
- ].map((o) => /* @__PURE__ */ t(
213
- Q,
214
- {
215
- name: "watchlist",
216
- value: o,
217
- inputProps: { checked: d === o },
218
- children: o
219
- },
220
- o
221
- )) })
222
- ] }),
223
- /* @__PURE__ */ t("div", { style: { display: "flex", gap: "1rem" }, children: [
224
- /* @__PURE__ */ t(I, { name: "minor", id: "minor", checked: c.editMinor, children: "Minor edit" }),
225
- /* @__PURE__ */ t(I, { name: "reloadAfterSave", id: "reloadAfterSave", checked: c.reloadAfterSave, children: "Reload after save" })
226
- ] })
227
- ]
228
- }
229
- ),
230
- !1
231
- ] });
232
- s.setContent(b), s.addButton(
233
- {
234
- side: "left",
235
- className: "is-primary submit-btn",
236
- label: "Submit",
237
- keyPress: await this.ctx.preferences.get("quickEdit.keyshortcut.save") || void 0,
238
- method: () => {
239
- const o = new FormData(b);
240
- s.setLoadingState(!0), this.handleSubmit({
241
- wikiPage: a,
242
- text: o.get("text"),
243
- summary: o.get("summary"),
244
- minor: o.get("minor") === "on",
245
- section: c.section,
246
- createonly: a.pageid === 0,
247
- watchlist: d
248
- }).then(async () => {
249
- s.setOptions({
250
- beforeClose: T
251
- }), s.close(), this.ctx.modal.notify("success", {
252
- title: "Submission Successful",
253
- content: "Your changes have been saved."
254
- }), o.get("reloadAfterSave") && (await z(500), location.reload());
255
- }).catch((w) => {
256
- this.ctx.modal.notify("error", {
257
- title: "Submission Error",
258
- content: w instanceof Error ? w.message : String(w)
259
- }), s.setLoadingState(!1);
260
- });
261
- }
262
- },
263
- 0
264
- ), s.setOptions({
265
- beforeClose: () => {
266
- const o = a.revisions[0]?.content || "";
267
- return (b.querySelector("textarea")?.value || "") === o ? !0 : (this.ctx.modal.confirm(
268
- {
269
- className: "is-primary",
270
- title: "Unsaved Changes",
271
- content: "All edit contents will be lost after closing the modal. Are you sure you want to close?",
272
- center: !0,
273
- okBtn: {
274
- label: "Give Up",
275
- className: "is-danger is-ghost"
276
- },
277
- cancelBtn: {
278
- label: "Continue Editing",
279
- className: "is-primary is-ghost"
280
- }
281
- },
282
- (D) => (D && (s.setOptions({
283
- beforeClose: T
284
- }), s.close()), !0)
285
- ), !1);
286
- }
287
- }), this.ctx.emit("quick-edit/wiki-page", {
288
- ctx: this.ctx,
289
- options: c,
290
- modal: s,
291
- wikiPage: a
292
- });
293
- const P = (o) => b.querySelector("textarea")?.value === v ? !0 : (o.preventDefault(), "You have unsaved changes. Are you sure you want to leave?");
294
- window.addEventListener("beforeunload", P), s.on(s.Event.Close, () => {
295
- window.removeEventListener("beforeunload", P);
296
- });
297
- }
298
- async handleSubmit(e) {
299
- const r = e.wikiPage, d = e.summary || "", n = e.text || "", u = e.minor, m = e.createonly, c = e.watchlist, s = e.section;
300
- return this.ctx.emit("quick-edit/submit", {
301
- ctx: this.ctx,
302
- wikiPage: r,
303
- summary: d,
304
- text: n,
305
- minor: u,
306
- createonly: m,
307
- watchlist: c
308
- }), r.edit(
309
- {
310
- summary: d,
311
- text: n,
312
- watchlist: c,
313
- section: s
314
- },
315
- {
316
- minor: u,
317
- createonly: m
318
- }
319
- );
320
- }
321
- static {
322
- this.BUILT_IN_FONT_OPTIONS = ["preferences", "monospace", "sans-serif", "serif"];
323
- }
324
- async getEditFontOptions() {
325
- const e = await this.ctx.preferences.get("quickEdit.editFont");
326
- return A.BUILT_IN_FONT_OPTIONS.includes(e) ? {
327
- className: `mw-editfont-${e === "preferences" ? this.ctx.wiki.userOptions?.editfont || "monospace" : e}`,
328
- fontFamily: ""
329
- } : {
330
- className: "mw-editfont-custom",
331
- fontFamily: e
332
- };
333
- }
334
- async getWikiPageFromPayload(e) {
335
- if (e.revision)
336
- return this.ctx.wikiPage.newFromRevision(e.revision, e.section);
337
- if (e.pageId)
338
- return this.ctx.wikiPage.newFromPageId(e.pageId, e.section);
339
- if (e.title)
340
- return this.ctx.wikiPage.newFromTitle(e.title, !1, e.section);
341
- throw new Error("Invalid payload");
342
- }
343
- async injectToolbox(e) {
344
- const r = this.ctx.currentPage.wikiTitle, d = this.ctx.wiki.hasRight("edit") && r && r.getNamespaceId() >= 0;
345
- e.toolbox.addButton({
346
- id: "quick-edit",
347
- group: "group1",
348
- index: 0,
349
- icon: /* @__PURE__ */ t(
350
- "svg",
351
- {
352
- xmlns: "http://www.w3.org/2000/svg",
353
- width: "24",
354
- height: "24",
355
- viewBox: "0 0 24 24",
356
- fill: "none",
357
- stroke: "currentColor",
358
- "stroke-width": "2",
359
- "stroke-linecap": "round",
360
- "stroke-linejoin": "round",
361
- class: "icon icon-tabler icons-tabler-outline icon-tabler-edit",
362
- children: [
363
- /* @__PURE__ */ t("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
364
- /* @__PURE__ */ t("path", { d: "M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1" }),
365
- /* @__PURE__ */ t("path", { d: "M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z" }),
366
- /* @__PURE__ */ t("path", { d: "M16 5l3 3" })
367
- ]
368
- }
369
- ),
370
- buttonProps: {
371
- disabled: !d
372
- },
373
- tooltip: d ? "Quick Edit" : "Not editable",
374
- onClick: () => {
375
- const n = new URLSearchParams(window.location.search).get("oldid");
376
- this.showModal({
377
- title: r?.getPrefixedText(),
378
- revision: n ? Number(n) : void 0
379
- });
380
- }
381
- });
382
- }
383
- removeToolbox(e) {
384
- e.toolbox.removeButton("quick-edit");
385
- }
386
- };
387
- y = H(B);
388
- S = ee(y, 0, "PluginQuickEdit", M, S);
389
- Z(y, 1, S);
390
- let ue = S;
391
- export {
392
- ue as PluginQuickEdit
393
- };
394
- //# sourceMappingURL=index-CyG7_IYz.js.map