@inpageedit/core 0.6.0 → 0.8.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 (81) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +55 -55
  3. package/dist/ActionButton-BgbTKTg7.js.map +1 -1
  4. package/dist/CheckBox-D3rHnX7I.js.map +1 -1
  5. package/dist/IconQuickEdit-YVn1ANbm.js +27 -0
  6. package/dist/IconQuickEdit-YVn1ANbm.js.map +1 -0
  7. package/dist/InPageEdit.d.ts +7 -5
  8. package/dist/InputBox-BV4m05Xs.js.map +1 -1
  9. package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
  10. package/dist/RadioBox-nJqWsxW2.js.map +1 -1
  11. package/dist/__test__/utils/constants.d.ts +1 -1
  12. package/dist/components/Icon/IconEdit.d.ts +2 -0
  13. package/dist/components/Icon/IconQuickEdit.d.ts +2 -0
  14. package/dist/components/MwUserLinks.d.ts +2 -0
  15. package/dist/components/index.js.map +1 -1
  16. package/dist/index--xn9BebC.js +1257 -0
  17. package/dist/{index-5zB57uWM.js.map → index--xn9BebC.js.map} +1 -1
  18. package/dist/{index-SDBp__LY.js → index-BT1mN_St.js} +68 -65
  19. package/dist/{index-SDBp__LY.js.map → index-BT1mN_St.js.map} +1 -1
  20. package/dist/index-Bh70Udzi.js.map +1 -1
  21. package/dist/index-C0V2s48o.js +122 -0
  22. package/dist/index-C0V2s48o.js.map +1 -0
  23. package/dist/index-CvhkVj_L.js.map +1 -1
  24. package/dist/{index-clwjxJi5.js → index-DDWds9Jg.js} +77 -74
  25. package/dist/index-DDWds9Jg.js.map +1 -0
  26. package/dist/index-DDef1ojx.js +166 -0
  27. package/dist/index-DDef1ojx.js.map +1 -0
  28. package/dist/{index-BqqQgaGG.js → index-DTA86mHU.js} +5 -4
  29. package/dist/index-DTA86mHU.js.map +1 -0
  30. package/dist/{index-CPCQc37I.js → index-DlgTb4XY.js} +4 -4
  31. package/dist/index-DlgTb4XY.js.map +1 -0
  32. package/dist/{index-BnRuHI16.js → index-DpLwTw4C.js} +1967 -1693
  33. package/dist/index-DpLwTw4C.js.map +1 -0
  34. package/dist/{index-ClYojws9.js → index-TzKe6Ebm.js} +8 -7
  35. package/dist/index-TzKe6Ebm.js.map +1 -0
  36. package/dist/index-VzP81S7B.js +139 -0
  37. package/dist/index-VzP81S7B.js.map +1 -0
  38. package/dist/index-lZkYoUca.js.map +1 -1
  39. package/dist/index-loWqosf7.js +331 -0
  40. package/dist/index-loWqosf7.js.map +1 -0
  41. package/dist/index.js +1 -1
  42. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  43. package/dist/models/WikiPage/index.d.ts +42 -47
  44. package/dist/models/WikiTitle/index.d.ts +3 -2
  45. package/dist/noop-ClDc6zv4.js.map +1 -1
  46. package/dist/plugins/in-article-links/index.d.ts +5 -17
  47. package/dist/plugins/quick-delete/index.d.ts +7 -5
  48. package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +2 -0
  49. package/dist/plugins/quick-diff/components/DiffTable.d.ts +17 -0
  50. package/dist/plugins/quick-edit/index.d.ts +12 -10
  51. package/dist/plugins/quick-move/index.d.ts +3 -1
  52. package/dist/plugins/quick-preview/index.d.ts +13 -16
  53. package/dist/plugins/quick-redirect/index.d.ts +3 -1
  54. package/dist/plugins/toolbox/index.d.ts +7 -2
  55. package/dist/services/ApiService.d.ts +2 -2
  56. package/dist/services/ModalService/IPEModal.d.ts +1 -1
  57. package/dist/services/WikiMetadataService.d.ts +108 -0
  58. package/dist/services/WikiPageService.d.ts +8 -7
  59. package/dist/services/WikiTitleService.d.ts +43 -3
  60. package/dist/style.css +1 -1
  61. package/dist/types/{SiteMetadata.d.ts → WikiMetadata.d.ts} +17 -17
  62. package/dist/utils/url.d.ts +24 -0
  63. package/lib/index.umd.js +28 -28
  64. package/lib/index.umd.js.map +1 -1
  65. package/lib/style.css +1 -1
  66. package/package.json +11 -2
  67. package/dist/index-5zB57uWM.js +0 -1142
  68. package/dist/index-B7Ok-t-3.js +0 -128
  69. package/dist/index-B7Ok-t-3.js.map +0 -1
  70. package/dist/index-BHruEVsx.js +0 -319
  71. package/dist/index-BHruEVsx.js.map +0 -1
  72. package/dist/index-BnRuHI16.js.map +0 -1
  73. package/dist/index-BqqQgaGG.js.map +0 -1
  74. package/dist/index-Bs5MFAHs.js +0 -110
  75. package/dist/index-Bs5MFAHs.js.map +0 -1
  76. package/dist/index-C9QOZJ8o.js +0 -167
  77. package/dist/index-C9QOZJ8o.js.map +0 -1
  78. package/dist/index-CPCQc37I.js.map +0 -1
  79. package/dist/index-ClYojws9.js.map +0 -1
  80. package/dist/index-clwjxJi5.js.map +0 -1
  81. package/dist/services/SiteMetadataService.d.ts +0 -58
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-loWqosf7.js","sources":["../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["export const sleep = (ms: number = 0) =>\r\n new Promise((resolve) => setTimeout(resolve, ms))\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { IWikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickEdit: PluginQuickEdit & {\n (...args: Parameters<PluginQuickEdit['showModal']>): ReturnType<PluginQuickEdit['showModal']>\n }\n }\n interface Events {\n 'quick-edit/init-options'(payload: Omit<QuickEditEventPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditEventPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditEventPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditEventPayload & { editNotices: ReactNode[] }): void\n }\n}\n\nexport interface QuickEditOptions {\n title: string\n pageId: number\n revision: number\n /**\n * - `undefined` for full article edit\n * - `0` for the first section\n * - `\"new\"` for a new section\n */\n section: number | 'new' | undefined\n editMinor: boolean\n editSummary: string\n createOnly: boolean\n reloadAfterSave: boolean\n}\n\nexport interface QuickEditEventPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: IWikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: IWikiPage\n text?: string\n summary?: string\n section?: number | 'new' | undefined\n minor?: boolean\n createonly?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'wikiTitle', 'wiki', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'quickEdit.editSummary': Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n 'quickEdit.editMinor': Schema.boolean()\n .description('Whether to mark the edit as minor')\n .default(false),\n 'quickEdit.outSideClose': Schema.boolean()\n .description('Whether to close the modal outside')\n .default(true),\n 'quickEdit.watchList': Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n 'quickEdit.keyshortcut.save': Schema.string()\n .default('ctrl-s')\n .description('save button key shortcut (blank to disable)'),\n })\n .description('Quick edit options')\n .extra('category', 'edit')\n)\nexport class PluginQuickEdit extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n section: undefined,\n editMinor: false,\n editSummary: '',\n createOnly: false,\n reloadAfterSave: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-edit')\n this.ctx.root.set('quickEdit', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n }\n\n async showModal(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n const searchParams = new URLSearchParams(window.location.search)\n payload = {\n ...payload,\n title: this.ctx.wikiTitle.currentTitle.getPrefixedDBKey(),\n revision: searchParams.has('oldid') ? Number(searchParams.get('oldid')) : undefined,\n pageId: searchParams.has('curid') ? Number(searchParams.get('curid')) : undefined,\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('quickEdit.outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('quickEdit.watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('quickEdit.editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('quickEdit.editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('quickEdit.editSummary')) || ''\n }\n if (!options) this.ctx.emit('quick-edit/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickEdit',\n sizeClass: 'large',\n // backdrop: false,\n // draggable: true,\n center: false,\n outSideClose,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(\n (\n <section\n className=\"ipe-quickEdit-loading\"\n style={{\n height: '70vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-danger is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-edit/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: IWikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page is not editable')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (wikiPage.pageInfo.pageid === 0) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"important\">\n <p>This page does not exist.</p>\n </MBox>\n )\n }\n // Edit based on old revision\n if (wikiPage.pageInfo.pageid && wikiPage.pageInfo.lastrevid !== wikiPage.revisions[0]?.revid) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"warning\">\n <p>\n You are editing a <em>historical version</em>; the content is not the latest!\n </p>\n </MBox>\n )\n }\n this.ctx.emit('quick-edit/edit-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n editNotices,\n })\n\n const editForm = (\n <form className=\"ipe-quickEdit__form\">\n <div className=\"ipe-quickEdit__notices\">{editNotices}</div>\n <div className=\"ipe-quickEdit__content\">\n <textarea className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {wikiPage.revisions[0]?.content || ''}\n </textarea>\n </div>\n <div\n class=\"ipe-quickEdit__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n Watchlist\n </label>\n <div style={{ display: 'flex', gap: '1rem' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n keyPress:\n (await this.ctx.preferences.get<string>('quickEdit.keyshortcut.save')) || undefined,\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n section: options.section,\n createonly: wikiPage.pageid === 0,\n watchlist: watchList,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Submission Successful',\n content: 'Your changes have been saved.',\n })\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Submission Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n },\n },\n 0\n )\n modal.setOptions({\n beforeClose: () => {\n const oldStr = wikiPage.revisions[0]?.content || ''\n const newStr = editForm.querySelector('textarea')?.value || ''\n if (newStr === oldStr) {\n return true\n } else {\n this.ctx.modal.confirm(\n {\n className: 'is-primary',\n title: 'Unsaved Changes',\n content:\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\n center: true,\n okBtn: {\n label: 'Give Up',\n className: 'is-danger is-ghost',\n },\n cancelBtn: {\n label: 'Continue Editing',\n className: 'is-primary is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n }\n return true\n }\n )\n return false\n }\n },\n })\n this.ctx.emit('quick-edit/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (editForm.querySelector('textarea')?.value === wikiPage.revisions[0]?.content) {\n return true\n }\n e.preventDefault()\n return 'You have unsaved changes. Are you sure you want to leave?'\n }\n window.addEventListener('beforeunload', beforeUnload)\n modal.on(modal.Event.Close, () => {\n window.removeEventListener('beforeunload', beforeUnload)\n })\n }\n\n async handleSubmit(payload: QuickEditSubmitPayload) {\n const wikiPage = payload.wikiPage\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor\n const createonly = payload.createonly\n const watchlist = payload.watchlist\n const section = payload.section\n\n return wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const title = this.ctx.wikiTitle.currentTitle\n const canEdit = this.ctx.wiki.hasRight('edit') && title.getNamespaceId() >= 0\n ctx.toolbox.addButton({\n id: 'quick-edit',\n group: 'group1',\n index: 0,\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-edit\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n ) as HTMLElement,\n buttonProps: {\n disabled: !canEdit,\n },\n tooltip: canEdit ? 'Quick Edit' : 'Not editable',\n onClick: () => {\n const revision = new URLSearchParams(window.location.search).get('oldid')\n this.showModal({\n title: title.getPrefixedText(),\n revision: revision ? Number(revision) : undefined,\n })\n },\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["sleep","ms","resolve","_PluginQuickEdit_decorators","_init","_a","Inject","RegisterPreferences","Schema","WatchlistAction","PluginQuickEdit","BasePlugin","ctx","makeCallable","payload","searchParams","outSideClose","watchList","editSummary","editMinor","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","editNotices","MBox","editForm","InputBox","action","RadioBox","CheckBox","formData","noop","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist","section","title","canEdit","revision","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { B as s, a as g, I as r, m as c, $ as o, S as t, b as L, c as i } from "./index-BnRuHI16.js";
1
+ import { B as s, a as g, I as r, m as c, $ as o, S as t, b as L, c as i } from "./index-DpLwTw4C.js";
2
2
  export {
3
3
  s as BasePlugin,
4
4
  g as InPageEdit,
@@ -1 +1 @@
1
- {"version":3,"file":"makeCallable-LDU0xZMJ.js","sources":["../src/utils/makeCallable.ts"],"sourcesContent":["export const CALLABLE_APPLY_SYMBOL = Symbol('@@apply')\nexport const CALLABLE_CTOR_SYMBOL = Symbol('@@ctor')\nexport function makeCallable<C extends object, M extends keyof C>(\n instance: C,\n method: M\n): C &\n ((\n ...args: C[M] extends (...a: infer P) => any ? P : never\n ) => C[M] extends (...a: any[]) => infer R ? R : never) {\n if (typeof instance !== 'object' || instance === null || Array.isArray(instance)) {\n throw new TypeError('instance is not an object')\n }\n\n const apply: any = (...args: any[]) => {\n const fn = (instance as any)[method]\n if (typeof fn !== 'function') {\n throw new TypeError(`Property \"${String(method)}\" is not a function`)\n }\n return fn.apply(instance, args)\n }\n apply[CALLABLE_APPLY_SYMBOL] = apply\n apply[CALLABLE_CTOR_SYMBOL] = instance\n\n const ctorName = (instance as any)?.constructor?.name\n if (ctorName) (apply as any)[Symbol.toStringTag] = ctorName\n\n const proxy = new Proxy(apply, {\n get(_, p, receiver) {\n if (p === 'prototype') return Reflect.get(apply, p, receiver)\n return Reflect.get(instance as any, p, instance)\n },\n set(_, p, v) {\n return Reflect.set(instance as any, p, v)\n },\n has(_, p) {\n return Reflect.has(instance as any, p)\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(instance as any, p)\n },\n ownKeys() {\n return Reflect.ownKeys(instance as any)\n },\n getOwnPropertyDescriptor(_, p) {\n return Object.getOwnPropertyDescriptor(instance as any, p)\n },\n defineProperty(_, p, desc) {\n return Object.defineProperty(instance as any, p, desc)\n },\n })\n\n return proxy as unknown as any\n}\n"],"names":["CALLABLE_APPLY_SYMBOL","CALLABLE_CTOR_SYMBOL","makeCallable","instance","method","apply","args","fn","ctorName","_","p","receiver","v","desc"],"mappings":"AAAO,MAAMA,IAAwB,OAAO,SAAS,GACxCC,IAAuB,OAAO,QAAQ;AAC5C,SAASC,EACdC,GACAC,GAIwD;AACxD,MAAI,OAAOD,KAAa,YAAYA,MAAa,QAAQ,MAAM,QAAQA,CAAQ;AAC7E,UAAM,IAAI,UAAU,2BAA2B;AAGjD,QAAME,IAAa,IAAIC,MAAgB;AACrC,UAAMC,IAAMJ,EAAiBC,CAAM;AACnC,QAAI,OAAOG,KAAO;AAChB,YAAM,IAAI,UAAU,aAAa,OAAOH,CAAM,CAAC,qBAAqB;AAEtE,WAAOG,EAAG,MAAMJ,GAAUG,CAAI;AAAA,EAChC;AACA,EAAAD,EAAML,CAAqB,IAAIK,GAC/BA,EAAMJ,CAAoB,IAAIE;AAE9B,QAAMK,IAAYL,GAAkB,aAAa;AACjD,SAAIK,MAAWH,EAAc,OAAO,WAAW,IAAIG,IAErC,IAAI,MAAMH,GAAO;AAAA,IAC7B,IAAII,GAAGC,GAAGC,GAAU;AAClB,aAAID,MAAM,cAAoB,QAAQ,IAAIL,GAAOK,GAAGC,CAAQ,IACrD,QAAQ,IAAIR,GAAiBO,GAAGP,CAAQ;AAAA,IACjD;AAAA,IACA,IAAIM,GAAGC,GAAGE,GAAG;AACX,aAAO,QAAQ,IAAIT,GAAiBO,GAAGE,CAAC;AAAA,IAC1C;AAAA,IACA,IAAIH,GAAGC,GAAG;AACR,aAAO,QAAQ,IAAIP,GAAiBO,CAAC;AAAA,IACvC;AAAA,IACA,eAAeD,GAAGC,GAAG;AACnB,aAAO,QAAQ,eAAeP,GAAiBO,CAAC;AAAA,IAClD;AAAA,IACA,UAAU;AACR,aAAO,QAAQ,QAAQP,CAAe;AAAA,IACxC;AAAA,IACA,yBAAyBM,GAAGC,GAAG;AAC7B,aAAO,OAAO,yBAAyBP,GAAiBO,CAAC;AAAA,IAC3D;AAAA,IACA,eAAeD,GAAGC,GAAGG,GAAM;AACzB,aAAO,OAAO,eAAeV,GAAiBO,GAAGG,CAAI;AAAA,IACvD;AAAA,EAAA,CACD;AAGH;"}
1
+ {"version":3,"file":"makeCallable-LDU0xZMJ.js","sources":["../src/utils/makeCallable.ts"],"sourcesContent":["export const CALLABLE_APPLY_SYMBOL = Symbol('@@apply')\r\nexport const CALLABLE_CTOR_SYMBOL = Symbol('@@ctor')\r\nexport function makeCallable<C extends object, M extends keyof C>(\r\n instance: C,\r\n method: M\r\n): C &\r\n ((\r\n ...args: C[M] extends (...a: infer P) => any ? P : never\r\n ) => C[M] extends (...a: any[]) => infer R ? R : never) {\r\n if (typeof instance !== 'object' || instance === null || Array.isArray(instance)) {\r\n throw new TypeError('instance is not an object')\r\n }\r\n\r\n const apply: any = (...args: any[]) => {\r\n const fn = (instance as any)[method]\r\n if (typeof fn !== 'function') {\r\n throw new TypeError(`Property \"${String(method)}\" is not a function`)\r\n }\r\n return fn.apply(instance, args)\r\n }\r\n apply[CALLABLE_APPLY_SYMBOL] = apply\r\n apply[CALLABLE_CTOR_SYMBOL] = instance\r\n\r\n const ctorName = (instance as any)?.constructor?.name\r\n if (ctorName) (apply as any)[Symbol.toStringTag] = ctorName\r\n\r\n const proxy = new Proxy(apply, {\r\n get(_, p, receiver) {\r\n if (p === 'prototype') return Reflect.get(apply, p, receiver)\r\n return Reflect.get(instance as any, p, instance)\r\n },\r\n set(_, p, v) {\r\n return Reflect.set(instance as any, p, v)\r\n },\r\n has(_, p) {\r\n return Reflect.has(instance as any, p)\r\n },\r\n deleteProperty(_, p) {\r\n return Reflect.deleteProperty(instance as any, p)\r\n },\r\n ownKeys() {\r\n return Reflect.ownKeys(instance as any)\r\n },\r\n getOwnPropertyDescriptor(_, p) {\r\n return Object.getOwnPropertyDescriptor(instance as any, p)\r\n },\r\n defineProperty(_, p, desc) {\r\n return Object.defineProperty(instance as any, p, desc)\r\n },\r\n })\r\n\r\n return proxy as unknown as any\r\n}\r\n"],"names":["CALLABLE_APPLY_SYMBOL","CALLABLE_CTOR_SYMBOL","makeCallable","instance","method","apply","args","fn","ctorName","_","p","receiver","v","desc"],"mappings":"AAAO,MAAMA,IAAwB,OAAO,SAAS,GACxCC,IAAuB,OAAO,QAAQ;AAC5C,SAASC,EACdC,GACAC,GAIwD;AACxD,MAAI,OAAOD,KAAa,YAAYA,MAAa,QAAQ,MAAM,QAAQA,CAAQ;AAC7E,UAAM,IAAI,UAAU,2BAA2B;AAGjD,QAAME,IAAa,IAAIC,MAAgB;AACrC,UAAMC,IAAMJ,EAAiBC,CAAM;AACnC,QAAI,OAAOG,KAAO;AAChB,YAAM,IAAI,UAAU,aAAa,OAAOH,CAAM,CAAC,qBAAqB;AAEtE,WAAOG,EAAG,MAAMJ,GAAUG,CAAI;AAAA,EAChC;AACA,EAAAD,EAAML,CAAqB,IAAIK,GAC/BA,EAAMJ,CAAoB,IAAIE;AAE9B,QAAMK,IAAYL,GAAkB,aAAa;AACjD,SAAIK,MAAWH,EAAc,OAAO,WAAW,IAAIG,IAErC,IAAI,MAAMH,GAAO;AAAA,IAC7B,IAAII,GAAGC,GAAGC,GAAU;AAClB,aAAID,MAAM,cAAoB,QAAQ,IAAIL,GAAOK,GAAGC,CAAQ,IACrD,QAAQ,IAAIR,GAAiBO,GAAGP,CAAQ;AAAA,IACjD;AAAA,IACA,IAAIM,GAAGC,GAAGE,GAAG;AACX,aAAO,QAAQ,IAAIT,GAAiBO,GAAGE,CAAC;AAAA,IAC1C;AAAA,IACA,IAAIH,GAAGC,GAAG;AACR,aAAO,QAAQ,IAAIP,GAAiBO,CAAC;AAAA,IACvC;AAAA,IACA,eAAeD,GAAGC,GAAG;AACnB,aAAO,QAAQ,eAAeP,GAAiBO,CAAC;AAAA,IAClD;AAAA,IACA,UAAU;AACR,aAAO,QAAQ,QAAQP,CAAe;AAAA,IACxC;AAAA,IACA,yBAAyBM,GAAGC,GAAG;AAC7B,aAAO,OAAO,yBAAyBP,GAAiBO,CAAC;AAAA,IAC3D;AAAA,IACA,eAAeD,GAAGC,GAAGG,GAAM;AACzB,aAAO,OAAO,eAAeV,GAAiBO,GAAGG,CAAI;AAAA,IACvD;AAAA,EAAA,CACD;AAGH;"}
@@ -1,64 +1,59 @@
1
+ import { FexiosFinalContext } from 'fexios';
1
2
  import { PageInfo } from './types/PageInfo';
2
3
  import { PageParseData } from './types/PageParseData';
3
4
  import { WatchlistAction } from './types/WatchlistAction';
4
- import { MediaWikiApi, MwApiParams } from 'wiki-saikou/browser';
5
- export declare class WikiPage {
6
- readonly api: MediaWikiApi;
5
+ import { MediaWikiApi, MwApiParams, MwApiResponse } from 'wiki-saikou/browser';
6
+ export interface WikiPageEditPayload {
7
+ text?: string;
8
+ prependtext?: string;
9
+ appendtext?: string;
10
+ summary?: string;
11
+ watchlist?: WatchlistAction;
12
+ section?: number | 'new' | undefined;
13
+ }
14
+ export interface IWikiPage {
7
15
  pageInfo: PageInfo;
8
- static readonly DEFAULT_PAGE_INFO: PageInfo;
9
- constructor(pageInfo: Partial<PageInfo>, api?: MediaWikiApi);
10
- fetchPageInfo(payload: MwApiParams): Promise<PageInfo>;
11
- parse(params?: MwApiParams): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
16
+ parse(params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{
12
17
  parse: PageParseData;
13
18
  }>>>;
14
- preview(text: string, params?: MwApiParams): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
19
+ preview(text: string, params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{
15
20
  parse: PageParseData;
16
21
  }>>>;
17
- edit(payload: {
18
- text?: string;
19
- prependtext?: string;
20
- appendtext?: string;
21
- summary?: string;
22
- watchlist?: WatchlistAction;
23
- section?: number | 'new' | undefined;
24
- }, params?: MwApiParams): Promise<import('fexios').FexiosFinalContext<any>>;
22
+ edit(payload: WikiPageEditPayload, params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{
23
+ success: boolean;
24
+ }>>>;
25
25
  createOnly(payload: {
26
26
  text: string;
27
- summary?: string;
28
- watchlist?: WatchlistAction;
29
- }, params?: MwApiParams): Promise<import('fexios').FexiosFinalContext<any>>;
30
- delete(reason?: string, params?: MwApiParams): Promise<import('fexios').FexiosFinalContext<any>>;
27
+ } & Pick<WikiPageEditPayload, 'summary' | 'watchlist'>, params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{
28
+ success: boolean;
29
+ }>>>;
30
+ delete(reason?: string, params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{
31
+ success: boolean;
32
+ }>>>;
31
33
  moveTo(title: string, reason?: string, params?: Partial<MwApiParams & {
32
34
  movetalk: boolean;
33
35
  movesubpages: boolean;
34
- }>): Promise<import('fexios').FexiosFinalContext<any>>;
36
+ }>): Promise<FexiosFinalContext<MwApiResponse<{
37
+ success: boolean;
38
+ }>>>;
35
39
  userCan(action: keyof PageInfo['actions']): boolean;
36
40
  userCanEdit(): boolean;
37
41
  reloadSelfInfo(): Promise<this>;
38
- get pageid(): number;
39
- get title(): string;
40
- get ns(): number;
41
- get contentmodel(): keyof import('./types/PageInfo').ContentModelMap;
42
- get fullurl(): string;
43
- get canonicalurl(): string;
44
- get editurl(): string | undefined;
45
- get revisions(): {
46
- revid: number;
47
- parentid: number;
48
- minor: boolean;
49
- user: string;
50
- timestamp: string;
51
- comment: string;
52
- contentformat: import('./types/PageInfo').ContentModelMap[keyof import('./types/PageInfo').ContentModelMap];
53
- contentmodel: keyof import('./types/PageInfo').ContentModelMap;
54
- content: string;
55
- }[];
56
- get templates(): {
57
- ns: number;
58
- title: string;
59
- }[];
60
- get images(): {
61
- ns: number;
62
- title: string;
63
- }[];
42
+ readonly pageid: PageInfo['pageid'];
43
+ readonly title: PageInfo['title'];
44
+ readonly ns: PageInfo['ns'];
45
+ readonly contentmodel: PageInfo['contentmodel'];
46
+ readonly fullurl: PageInfo['fullurl'];
47
+ readonly canonicalurl: PageInfo['canonicalurl'];
48
+ readonly editurl: PageInfo['editurl'];
49
+ readonly revisions: NonNullable<PageInfo['revisions']>;
50
+ readonly lastrevid: PageInfo['lastrevid'];
51
+ readonly templates: NonNullable<PageInfo['templates']>;
52
+ readonly images: NonNullable<PageInfo['images']>;
53
+ }
54
+ export interface WikiPageConstructor {
55
+ new (pageInfo: Partial<PageInfo>, loaded?: boolean): IWikiPage;
56
+ newFromApi(payload: MwApiParams): Promise<IWikiPage>;
57
+ newBlankPage(init?: Partial<PageInfo>): IWikiPage;
64
58
  }
59
+ export declare function createWikiPageModel(api: MediaWikiApi): WikiPageConstructor;
@@ -1,4 +1,4 @@
1
- import { SiteMetadata } from '../../types/SiteMetadata';
1
+ import { WikiMetadata } from '../../types/WikiMetadata';
2
2
  export interface IWikiTitle {
3
3
  /**
4
4
  * Get db key without namespace prefix
@@ -80,8 +80,9 @@ export interface IWikiTitle {
80
80
  * e.g. "Special:Diff" is "差异" or "diff" -> true
81
81
  */
82
82
  isSpecial(alia: string): boolean;
83
+ newTitle(title: string, namespace?: number): IWikiTitle;
83
84
  }
84
85
  export interface WikiTitleConstructor {
85
86
  new (title: string, namespace?: number): IWikiTitle;
86
87
  }
87
- export declare function createWikiTitleModel(metadata: SiteMetadata): WikiTitleConstructor;
88
+ export declare function createWikiTitleModel(metadata: WikiMetadata): WikiTitleConstructor;
@@ -1 +1 @@
1
- {"version":3,"file":"noop-ClDc6zv4.js","sources":["../src/utils/noop.ts"],"sourcesContent":["export const noop = () => {}\n"],"names":["noop"],"mappings":"AAAO,MAAMA,IAAO,MAAM;AAAC;"}
1
+ {"version":3,"file":"noop-ClDc6zv4.js","sources":["../src/utils/noop.ts"],"sourcesContent":["export const noop = () => {}\r\n"],"names":["noop"],"mappings":"AAAO,MAAMA,IAAO,MAAM;AAAC;"}
@@ -1,37 +1,25 @@
1
1
  import { InPageEdit } from '../../InPageEdit';
2
- import { IWikiTitle } from '../../models/WikiTitle/index.js';
2
+ import { WikiLinkMetadata } from '../../services/WikiTitleService.js';
3
3
  declare module '../../InPageEdit' {
4
4
  interface InPageEdit {
5
5
  inArticleLinks: PluginInArticleLinks;
6
6
  }
7
7
  }
8
- export interface InArticleWikiLinkInfo {
9
- title: IWikiTitle;
10
- url: URL;
11
- params: URLSearchParams;
12
- hash: string;
13
- action: 'view' | 'edit' | 'create' | 'diff' | string;
14
- }
15
- export interface InArticleWikiAnchorInfo extends InArticleWikiLinkInfo {
8
+ export interface InArticleWikiAnchorMetadata extends WikiLinkMetadata {
16
9
  $el: HTMLAnchorElement;
17
10
  kind: 'normal' | 'mw:File';
18
11
  external: boolean;
19
12
  redlink: boolean;
20
13
  }
21
14
  export declare class PluginInArticleLinks extends BasePlugin<{
22
- wikiBaseUrl: string;
23
- wikiArticlePath: string;
24
- wikiArticleBaseUrl: string;
25
- wikiScriptBaseUrl: string;
26
15
  linkClassName: string;
27
16
  }> {
28
17
  constructor(ctx: InPageEdit);
29
18
  protected start(): Promise<void>;
30
19
  protected stop(): Promise<void>;
31
20
  private _cachedAnchorInfo;
32
- parseAnchor(anchor: HTMLAnchorElement): InArticleWikiAnchorInfo | null;
33
- parseLink(link: string | URL): InArticleWikiLinkInfo | null;
34
- scanAnchors(parent: HTMLElement): InArticleWikiAnchorInfo[];
35
- handleQuickEdit(): void;
21
+ parseAnchor(anchor: HTMLAnchorElement): InArticleWikiAnchorMetadata | null;
22
+ scanAnchors(parent: HTMLElement): InArticleWikiAnchorMetadata[];
23
+ handleQuickEdit(): Promise<void>;
36
24
  handleQuickDiff(): void;
37
25
  }
@@ -1,5 +1,5 @@
1
1
  import { InPageEdit } from '../../InPageEdit';
2
- import { WikiPage } from '../../models/WikiPage';
2
+ import { IWikiPage } from '../../models/WikiPage';
3
3
  import { IPEModal } from '../../services/ModalService/IPEModal';
4
4
  import { ReactNode } from 'jsx-dom';
5
5
  declare module '../../InPageEdit' {
@@ -28,10 +28,10 @@ export interface QuickDeleteInitPayload {
28
28
  ctx: InPageEdit;
29
29
  options: QuickDeleteOptions;
30
30
  modal: IPEModal;
31
- wikiPage: WikiPage;
31
+ wikiPage: IWikiPage;
32
32
  }
33
33
  export interface QuickDeleteSubmitPayload {
34
- wikiPage: WikiPage;
34
+ wikiPage: IWikiPage;
35
35
  reason?: string;
36
36
  }
37
37
  export declare class PluginQuickDelete extends BasePlugin {
@@ -40,8 +40,10 @@ export declare class PluginQuickDelete extends BasePlugin {
40
40
  constructor(ctx: InPageEdit);
41
41
  protected start(): Promise<void> | void;
42
42
  showModal(payload?: string | Partial<QuickDeleteOptions>): Promise<void>;
43
- handleSubmit(payload: QuickDeleteSubmitPayload): Promise<import('fexios').FexiosFinalContext<any>>;
44
- getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>): Promise<WikiPage>;
43
+ handleSubmit(payload: QuickDeleteSubmitPayload): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
44
+ success: boolean;
45
+ }>>>;
46
+ getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>): Promise<IWikiPage>;
45
47
  private injectToolbox;
46
48
  protected removeToolbox(ctx: InPageEdit): void;
47
49
  }
@@ -48,6 +48,8 @@ export interface CompareApiResponse {
48
48
  tocomment: string;
49
49
  toparsedcomment: string;
50
50
  diffsize: number;
51
+ prev: number;
52
+ next: number;
51
53
  }> & {
52
54
  body: string;
53
55
  };
@@ -1,6 +1,23 @@
1
1
  import { JSX } from 'jsx-dom/jsx-runtime';
2
2
  import { CompareApiResponse } from '../PluginQuickDiffCore';
3
+ import { InPageEdit } from '../../../InPageEdit';
3
4
  export type DiffTableProps = {
4
5
  data: Partial<CompareApiResponse['compare']>;
6
+ ctx: InPageEdit;
5
7
  } & JSX.IntrinsicElements['table'];
8
+ export declare enum DiffTableEvent {
9
+ update = "ipe:diff-table/update",
10
+ edit = "ipe:diff-table/edit"
11
+ }
12
+ declare global {
13
+ interface HTMLElementEventMap {
14
+ [DiffTableEvent.update]: CustomEvent<{
15
+ fromrev: number;
16
+ torev: number;
17
+ }>;
18
+ [DiffTableEvent.edit]: CustomEvent<{
19
+ revid: number;
20
+ }>;
21
+ }
22
+ }
6
23
  export declare const DiffTable: (props: DiffTableProps) => import('jsx-dom').ReactElement;
@@ -1,5 +1,5 @@
1
1
  import { InPageEdit } from '../../InPageEdit';
2
- import { WikiPage } from '../../models/WikiPage';
2
+ import { IWikiPage } from '../../models/WikiPage';
3
3
  import { WatchlistAction } from '../../models/WikiPage/types/WatchlistAction';
4
4
  import { IPEModal } from '../../services/ModalService/IPEModal';
5
5
  import { ReactNode } from 'jsx-dom';
@@ -10,10 +10,10 @@ declare module '../../InPageEdit' {
10
10
  };
11
11
  }
12
12
  interface Events {
13
- 'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void;
14
- 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void;
15
- 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void;
16
- 'quick-edit/edit-notice'(payload: QuickEditInitPayload & {
13
+ 'quick-edit/init-options'(payload: Omit<QuickEditEventPayload, 'modal' | 'wikiPage'>): void;
14
+ 'quick-edit/show-modal'(payload: Omit<QuickEditEventPayload, 'wikiPage'>): void;
15
+ 'quick-edit/wiki-page'(payload: QuickEditEventPayload): void;
16
+ 'quick-edit/edit-notice'(payload: QuickEditEventPayload & {
17
17
  editNotices: ReactNode[];
18
18
  }): void;
19
19
  }
@@ -33,14 +33,14 @@ export interface QuickEditOptions {
33
33
  createOnly: boolean;
34
34
  reloadAfterSave: boolean;
35
35
  }
36
- export interface QuickEditInitPayload {
36
+ export interface QuickEditEventPayload {
37
37
  ctx: InPageEdit;
38
38
  options: QuickEditOptions;
39
39
  modal: IPEModal;
40
- wikiPage: WikiPage;
40
+ wikiPage: IWikiPage;
41
41
  }
42
42
  export interface QuickEditSubmitPayload {
43
- wikiPage: WikiPage;
43
+ wikiPage: IWikiPage;
44
44
  text?: string;
45
45
  summary?: string;
46
46
  section?: number | 'new' | undefined;
@@ -54,8 +54,10 @@ export declare class PluginQuickEdit extends BasePlugin {
54
54
  constructor(ctx: InPageEdit);
55
55
  protected start(): Promise<void> | void;
56
56
  showModal(payload?: string | Partial<QuickEditOptions>): Promise<void>;
57
- handleSubmit(payload: QuickEditSubmitPayload): Promise<import('fexios').FexiosFinalContext<any>>;
58
- getWikiPageFromPayload(payload: Partial<QuickEditOptions>): Promise<WikiPage>;
57
+ handleSubmit(payload: QuickEditSubmitPayload): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
58
+ success: boolean;
59
+ }>>>;
60
+ getWikiPageFromPayload(payload: Partial<QuickEditOptions>): Promise<IWikiPage>;
59
61
  private injectToolbox;
60
62
  protected removeToolbox(ctx: InPageEdit): void;
61
63
  }
@@ -23,5 +23,7 @@ export declare class PluginQuickMove extends BasePlugin {
23
23
  protected start(): Promise<void> | void;
24
24
  private injectToolbox;
25
25
  quickMove(options?: Partial<QuickMoveOptions>): import('../../services/ModalService').CustomIPEModal;
26
- movePage(options: MovePageOptions): Promise<import('fexios').FexiosFinalContext<any>>;
26
+ movePage(options: MovePageOptions): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
27
+ success: boolean;
28
+ }>>>;
27
29
  }
@@ -1,8 +1,15 @@
1
1
  import { InPageEdit } from '../../InPageEdit';
2
- import { WikiPage } from '../../models/WikiPage';
2
+ import { IWikiPage } from '../../models/WikiPage';
3
3
  import { MwApiParams } from 'wiki-saikou';
4
4
  import { PageParseData } from '../../models/WikiPage/types/PageParseData';
5
- import { IPEModal } from '../../services/ModalService/IPEModal.js';
5
+ import { IPEModal, IPEModalOptions } from '../../services/ModalService/IPEModal.js';
6
+ interface QuickPreviewEventPayload {
7
+ ctx: InPageEdit;
8
+ modal: IPEModal;
9
+ wikiPage: IWikiPage;
10
+ text: string;
11
+ parseData: PageParseData;
12
+ }
6
13
  declare module '../../InPageEdit' {
7
14
  interface InPageEdit {
8
15
  quickPreview: PluginQuickPreview & {
@@ -10,19 +17,8 @@ declare module '../../InPageEdit' {
10
17
  };
11
18
  }
12
19
  interface Events {
13
- 'quick-preview/show-modal'(payload: {
14
- ctx: InPageEdit;
15
- text: string;
16
- modal: IPEModal;
17
- wikiPage: WikiPage;
18
- }): void;
19
- 'quick-preview/loaded'(payload: {
20
- ctx: InPageEdit;
21
- modal: IPEModal;
22
- wikiPage: WikiPage;
23
- text: string;
24
- parseData: PageParseData;
25
- }): void;
20
+ 'quick-preview/show-modal'(payload: Omit<QuickPreviewEventPayload, 'parseData'>): void;
21
+ 'quick-preview/loaded'(payload: QuickPreviewEventPayload): void;
26
22
  }
27
23
  }
28
24
  export declare class PluginQuickPreview extends BasePlugin {
@@ -30,7 +26,8 @@ export declare class PluginQuickPreview extends BasePlugin {
30
26
  constructor(ctx: InPageEdit);
31
27
  protected start(): Promise<void> | void;
32
28
  protected stop(): Promise<void> | void;
33
- previewWikitext(text: string, params?: MwApiParams, wikiPage?: WikiPage, modal?: IPEModal): IPEModal;
29
+ previewWikitext(text: string, params?: MwApiParams, wikiPage?: IWikiPage, modal?: IPEModal, modalOptions?: Partial<IPEModalOptions>): IPEModal;
34
30
  private injectQuickEdit;
35
31
  private injectQuickDelete;
36
32
  }
33
+ export {};
@@ -20,5 +20,7 @@ export declare class PluginQuickRedirect extends BasePlugin {
20
20
  protected start(): Promise<void> | void;
21
21
  protected stop(): Promise<void> | void;
22
22
  quickRedirect(options?: Partial<QuickRedirectOptions>): import('../../services/ModalService').CustomIPEModal;
23
- redirectPage(options: RedirectPageOptions): Promise<import('fexios').FexiosFinalContext<any>>;
23
+ redirectPage(options: RedirectPageOptions): Promise<import('fexios').FexiosFinalContext<import('wiki-saikou').MwApiResponse<{
24
+ success: boolean;
25
+ }>>>;
24
26
  }
@@ -1,5 +1,5 @@
1
1
  import { InPageEdit, Service } from '../../InPageEdit';
2
- import { ReactElement } from 'jsx-dom';
2
+ import { JSX, ReactElement } from 'jsx-dom';
3
3
  declare module '../../InPageEdit' {
4
4
  interface InPageEdit {
5
5
  toolbox: PluginToolbox;
@@ -21,6 +21,7 @@ export declare class PluginToolbox extends Service {
21
21
  constructor(ctx: InPageEdit);
22
22
  protected start(): Promise<void>;
23
23
  protected stop(): void | Promise<void>;
24
+ private get isPersistent();
24
25
  private setupHoverLogic;
25
26
  /**
26
27
  * 计算按钮动画延迟
@@ -40,9 +41,13 @@ export declare class PluginToolbox extends Service {
40
41
  group?: 'auto' | 'group1' | 'group2';
41
42
  icon: string | HTMLElement | SVGElement | ReactElement;
42
43
  tooltip?: string | HTMLElement;
43
- buttonProps?: Record<string, any>;
44
+ itemProps?: JSX.IntrinsicElements['li'];
45
+ buttonProps?: JSX.IntrinsicElements['button'];
44
46
  onClick?: (event: MouseEvent) => void;
45
47
  index?: number;
46
48
  }): HTMLElement;
47
49
  removeButton(id: string): void;
50
+ getContainer(): HTMLElement;
51
+ get isOpened(): boolean;
52
+ toggle(force?: boolean): void;
48
53
  }
@@ -1,12 +1,12 @@
1
1
  import { InPageEdit } from '../InPageEdit';
2
+ import { FexiosConfigs } from 'fexios';
2
3
  import { MwApi } from 'wiki-saikou/browser';
3
4
  declare module '../InPageEdit' {
4
5
  interface InPageEdit {
5
6
  api: MwApi;
6
7
  }
7
8
  }
8
- export interface ApiServiceOptions {
9
- baseURL: string | URL;
9
+ export interface ApiServiceOptions extends Partial<FexiosConfigs> {
10
10
  }
11
11
  export declare class ApiService {
12
12
  ctx: InPageEdit;
@@ -185,7 +185,7 @@ export declare class IPEModal {
185
185
  /** Dynamically add button(s) into footer. Supports insertion index per side. */
186
186
  addButton(opts: Partial<IPEModalButtonOptions>, index?: number): this;
187
187
  /** Remove button by element / id / global index (left first, then right). */
188
- removeButton(target: number | string | HTMLElement): this;
188
+ removeButton(target: number | string | HTMLElement | '*'): this;
189
189
  changePreviewState(): this;
190
190
  setModalHeight(offset: number, option?: 'height' | 'min-height' | 'max-height'): number;
191
191
  setOptions<T extends keyof IPEModalOptions>(option: T, value: IPEModalOptions[T]): this;
@@ -0,0 +1,108 @@
1
+ import { InPageEdit, Service } from '../InPageEdit';
2
+ import { WikiMetadata, WikiUserBlockInfo } from '../types/WikiMetadata';
3
+ declare module '../InPageEdit' {
4
+ interface InPageEdit {
5
+ wiki: WikiMetadataService;
6
+ getUrl: WikiMetadataService['getUrl'];
7
+ getSciprtUrl: WikiMetadataService['getSciprtUrl'];
8
+ getMainpageUrl: WikiMetadataService['getMainpageUrl'];
9
+ }
10
+ }
11
+ export declare class WikiMetadataService extends Service {
12
+ ctx: InPageEdit;
13
+ private _data;
14
+ private readonly CACHE_TTL;
15
+ private readonly VERSION;
16
+ private db;
17
+ private logger;
18
+ private queryData;
19
+ constructor(ctx: InPageEdit);
20
+ get api(): import('wiki-saikou/browser').MediaWikiApi;
21
+ mwConfig: {
22
+ get: typeof mw.config.get;
23
+ has: typeof mw.config.exists;
24
+ readonly values: ReturnType<typeof mw.config.get>;
25
+ };
26
+ protected start(): Promise<void>;
27
+ computeSiteIdentity(): string;
28
+ fetchFromApi(): Promise<any>;
29
+ fetchFromCache(): Promise<WikiMetadata | null>;
30
+ saveToCache(data: WikiMetadata): Promise<import('./StorageService').IPEStorageItem<WikiMetadata>>;
31
+ invalidateCache(): Promise<void>;
32
+ get _raw(): WikiMetadata;
33
+ get general(): import('../types/WikiMetadata').WikiSiteInfo;
34
+ get specialPageAliases(): import('../types/WikiMetadata').WikiSpecialPageAlias[];
35
+ get namespaceAliases(): import('../types/WikiMetadata').WikiNameSpaceAlias[];
36
+ get namespaces(): Record<string, import('../types/WikiMetadata').WikiNamespace>;
37
+ get namespaceMap(): {
38
+ id: number;
39
+ canonical: string | undefined;
40
+ aliases: string[];
41
+ }[];
42
+ get magicWords(): import('../types/WikiMetadata').WikiMagicWord[];
43
+ get userInfo(): {
44
+ id: number;
45
+ name: string;
46
+ groups: string[];
47
+ rights: string[];
48
+ } & Partial<WikiUserBlockInfo> & {
49
+ options: import('../types/WikiMetadata').WikiUserOptions;
50
+ };
51
+ get userOptions(): import('../types/WikiMetadata').WikiUserOptions;
52
+ get isUserBlocked(): boolean | "" | undefined;
53
+ get userGroups(): string[];
54
+ get userRights(): string[];
55
+ /**
56
+ * Base URL, without trailing slash
57
+ * @example "https://mediawiki.org"
58
+ */
59
+ get baseUrl(): string;
60
+ /**
61
+ * Home page URL of this wiki
62
+ * @description Generally same as the Mainpage URL,
63
+ * but after MediaWiki 1.34,
64
+ * it can be set to the website root directory.
65
+ * @example "https://mediawiki.org/wiki/Main_Page" (In most cases)
66
+ * @example "https://mediawiki.org/" ($wgMainPageIsDomainRoot = true)
67
+ */
68
+ get landingPageUrl(): string;
69
+ get mainPageName(): string;
70
+ /**
71
+ * Exact Mainpage URL of this wiki
72
+ * @example "https://mediawiki.org/wiki/Main_Page"
73
+ */
74
+ get mainPageUrl(): string;
75
+ /**
76
+ * Article path, with the $1 placeholder
77
+ * @example "/wiki/$1"
78
+ */
79
+ get articlePath(): string;
80
+ /**
81
+ * Script path, without trailing slash
82
+ * @example "/w"
83
+ */
84
+ get scriptPath(): string;
85
+ /**
86
+ * Article base URL, with the $1 placeholder
87
+ * @example "https://mediawiki.org/wiki/$1"
88
+ */
89
+ get articleBaseUrl(): string;
90
+ /**
91
+ * Script base URL, without trailing slash
92
+ * @example "https://mediawiki.org/w"
93
+ */
94
+ get scriptBaseUrl(): string;
95
+ getSciprtUrl(name?: string): string;
96
+ /** Get mainpage URL */
97
+ getMainpageUrl(params?: Record<string, any>): string;
98
+ /** Get page URL by title */
99
+ getUrl(title: string, params?: Record<string, any>): string;
100
+ /** Get page URL by page ID */
101
+ getUrl(pageId: number, params?: Record<string, any>): string;
102
+ hasRight(right: string): boolean;
103
+ hasAnyRight(...rights: string[]): boolean;
104
+ hasEveryRights(...rights: string[]): boolean;
105
+ inGroup(name: string): boolean;
106
+ inAnyGroup(...names: string[]): boolean;
107
+ getBlockInfo(): WikiUserBlockInfo | null;
108
+ }