@inpageedit/core 0.5.2 → 0.5.3

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 (45) hide show
  1. package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
  2. package/dist/decorators/Preferences.d.ts +1 -1
  3. package/dist/{index-6bp2nmez.js → index-6pczvrx6.js} +2 -2
  4. package/dist/{index-6bp2nmez.js.map → index-6pczvrx6.js.map} +1 -1
  5. package/dist/{index-3FdvKxaN.js → index-7DsKuWsw.js} +52 -37
  6. package/dist/index-7DsKuWsw.js.map +1 -0
  7. package/dist/{index-DXvJqlhL.js → index-Bo7FhmY-.js} +3 -3
  8. package/dist/index-Bo7FhmY-.js.map +1 -0
  9. package/dist/{index-B0QzYk-q.js → index-C5nqZrGe.js} +1258 -1297
  10. package/dist/{index-B0QzYk-q.js.map → index-C5nqZrGe.js.map} +1 -1
  11. package/dist/{index-CIzmjtBz.js → index-CHb2WvLm.js} +1246 -1112
  12. package/dist/index-CHb2WvLm.js.map +1 -0
  13. package/dist/{index-DlE7PWxs.js → index-Cm67r8TX.js} +170 -140
  14. package/dist/index-Cm67r8TX.js.map +1 -0
  15. package/dist/{index-BwVAO_o4.js → index-DiCrCoWT.js} +6 -6
  16. package/dist/index-DiCrCoWT.js.map +1 -0
  17. package/dist/index-Dnu9H-Aq.js +128 -0
  18. package/dist/index-Dnu9H-Aq.js.map +1 -0
  19. package/dist/{index-D1plOuGc.js → index-Dz0VGQwY.js} +63 -63
  20. package/dist/{index-D1plOuGc.js.map → index-Dz0VGQwY.js.map} +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/models/WikiPage/types/PageInfo.d.ts +2 -0
  23. package/dist/plugins/in-article-links/index.d.ts +6 -8
  24. package/dist/plugins/preferences/index.d.ts +5 -4
  25. package/dist/plugins/quick-edit/index.d.ts +8 -4
  26. package/dist/plugins/toolbox/index.d.ts +12 -2
  27. package/dist/services/ModalService/IPEModal.d.ts +4 -4
  28. package/dist/services/ModalService/index.d.ts +6 -14
  29. package/dist/services/SiteMetadataService.d.ts +3 -2
  30. package/dist/style.css +1 -1
  31. package/dist/utils/computeable.d.ts +2 -0
  32. package/dist/utils/makeCallable.d.ts +3 -0
  33. package/lib/index.umd.js +28 -28
  34. package/lib/index.umd.js.map +1 -1
  35. package/lib/style.css +1 -1
  36. package/package.json +1 -1
  37. package/dist/index-3FdvKxaN.js.map +0 -1
  38. package/dist/index-BwVAO_o4.js.map +0 -1
  39. package/dist/index-CIzmjtBz.js.map +0 -1
  40. package/dist/index-DXvJqlhL.js.map +0 -1
  41. package/dist/index-DlE7PWxs.js.map +0 -1
  42. package/dist/index-DnpXoEP3.js +0 -142
  43. package/dist/index-DnpXoEP3.js.map +0 -1
  44. package/dist/sleep-DpyIipK-.js +0 -5
  45. package/dist/sleep-DpyIipK-.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Cm67r8TX.js","sources":["../src/plugins/quick-edit/PluginQuickEditInArticleLinks.tsx","../src/utils/makeCallable.ts","../src/utils/noop.ts","../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { QuickEditOptions } from '.'\n\n@Inject(['sitemeta', 'quickEdit'])\n@RegisterPreferences(\n Schema.object({\n redLinkEdit: Schema.boolean()\n .description('Show quick edit entry after red links')\n .default(true),\n }).description('In-article quick edit links'),\n {\n redLinkEdit: true,\n }\n)\nexport class PluginQuickEditInArticleLinks extends BasePlugin<{\n wikiBaseUrl: string\n wikiArticlePath: string\n wikiArticleBaseUrl: string\n wikiScriptBaseUrl: string\n linkClassName: string\n}> {\n constructor(ctx: InPageEdit) {\n const mwConfig = ctx.sitemeta.mwConfig\n const wikiArticlePath = mwConfig.wgArticlePath.replace('$1', '')\n const wikiBaseUrl = `${location.protocol}//${mwConfig.wgServer.split('//')[1]}`\n super(\n ctx,\n {\n wikiBaseUrl,\n wikiArticlePath,\n wikiArticleBaseUrl: `${wikiBaseUrl}${wikiArticlePath}`,\n wikiScriptBaseUrl: `${wikiBaseUrl}${mwConfig.wgScriptPath}`,\n linkClassName: 'ipe-quickEdit__in-article-link',\n },\n 'QuickEditInArticleLinks'\n )\n }\n\n protected async start() {\n mw.hook('wikipage.content').add(($content) => {\n const anchorList = $content.find<HTMLAnchorElement>('a[href]').toArray()\n anchorList.forEach((anchor) => {\n const info = this.checkEditAnchor(anchor)\n if (!info || anchor.dataset.ipeQuickEditLink) {\n return\n }\n\n const link = (\n <a\n href={`#/IPE/quickEdit/${info.title}`}\n className={this.config.linkClassName}\n style={{\n userSelect: 'none',\n marginLeft: '0.2em',\n verticalAlign: 'middle',\n }}\n onClick={(e) => {\n e.preventDefault()\n this.ctx.quickEdit.showModal(info)\n }}\n >\n <svg\n style=\"width: 1em; height: 1em\"\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-pencil-bolt\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\" />\n <path d=\"M13.5 6.5l4 4\" />\n <path d=\"M19 16l-2 3h4l-2 3\" />\n </svg>\n </a>\n )\n\n anchor.insertAdjacentElement('afterend', link)\n anchor.dataset.ipeQuickEditLink = 'true'\n })\n })\n }\n\n stop() {\n document.querySelectorAll(`.${this.config.linkClassName}`).forEach((el) => el.remove())\n }\n\n checkEditAnchor(\n anchor: HTMLAnchorElement\n ): Pick<QuickEditOptions, 'title' | 'section' | 'revision' | 'createOnly'> | null {\n if (!(anchor instanceof HTMLAnchorElement)) {\n return null\n }\n\n const href = anchor.href || ''\n if (\n !href.startsWith(this.config.wikiArticleBaseUrl) &&\n !href.startsWith(this.config.wikiScriptBaseUrl)\n ) {\n return null\n }\n const hrefURL = new URL(href)\n const params = hrefURL.searchParams\n const action = params.get('action') || 'view'\n const title =\n params.get('title') ||\n decodeURI(hrefURL.pathname.substring(this.config.wikiArticlePath.length)) ||\n ''\n const section = params.get('section')?.replace(/^T-/, '') || undefined\n const revision = params.get('oldid')\n\n if (\n // 不合法的 title\n !title ||\n title.endsWith('.php') ||\n // 不是 edit 相关操作\n !['edit', 'editsource', 'editredlink', 'submit'].includes(action) ||\n // 暂时未兼容 undo\n params.get('undo') ||\n // 暂时未兼容 preload\n params.get('preload')\n ) {\n return null\n }\n\n let sectionNum: 'new' | number | undefined = undefined\n if (section === 'new') {\n sectionNum = 'new'\n } else if (section && /^\\d+$/.test(section)) {\n sectionNum = parseInt(section, 10)\n }\n\n return {\n title,\n section: sectionNum,\n revision: parseInt('' + revision, 10) || 0,\n createOnly: !!params.get('redlink'),\n }\n }\n}\n","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","export const noop = () => {}\n","export const sleep = (ms: number = 0) =>\n new Promise((resolve) => setTimeout(resolve, ms))\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { PluginQuickEditInArticleLinks } from './PluginQuickEditInArticleLinks'\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<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditInitPayload & { 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 QuickEditInitPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: WikiPage\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', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n editSummary: Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\n 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 })\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 this.ctx.plugin(PluginQuickEditInArticleLinks)\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 payload = {\n ...payload,\n title: mw.config.get('wgPageName'),\n pageId: mw.config.get('wgArticleId'),\n revision: mw.config.get('wgRevisionId'),\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('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>('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: WikiPage\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>You are editing a revision that is not the latest.</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 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 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 tooltip: 'Edit this page quickly',\n onClick: () =>\n this.showModal({\n revision: mw.config.get('wgRevisionId'),\n }),\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["_PluginQuickEditInArticleLinks_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickEditInArticleLinks","BasePlugin","ctx","mwConfig","wikiArticlePath","wikiBaseUrl","$content","anchor","info","link","jsx","e","jsxs","el","href","hrefURL","params","action","title","section","revision","sectionNum","__decoratorStart","__decorateElement","__runInitializers","CALLABLE_APPLY_SYMBOL","CALLABLE_CTOR_SYMBOL","makeCallable","instance","method","apply","args","fn","ctorName","_","p","receiver","v","desc","noop","sleep","ms","resolve","_PluginQuickEdit_decorators","WatchlistAction","PluginQuickEdit","payload","outSideClose","watchList","editSummary","editMinor","options","modal","Fragment","ProgressBar","wikiPage","editNotices","MBox","editForm","InputBox","RadioBox","CheckBox","formData","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { j as i, P as y } from "./index-CvhkVj_L.js";
2
- import { B as S, a as q } from "./index-CIzmjtBz.js";
2
+ import { B as S, a as q } from "./index-CHb2WvLm.js";
3
3
  import { T as F } from "./index-Bh70Udzi.js";
4
4
  import { C as u, I as j } from "./InputBox-FIzJ-rPN.js";
5
5
  var E = Object.create, h = Object.defineProperty, B = Object.getOwnPropertyDescriptor, w = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), k = (t) => {
6
6
  throw TypeError(t);
7
- }, I = (t, e, o) => e in t ? h(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o, C = (t, e) => h(t, "name", { value: e, configurable: !0 }), T = (t) => [, , , E(t?.[w("metadata")] ?? null)], z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], _ = (t) => t !== void 0 && typeof t != "function" ? k("Function expected") : t, D = (t, e, o, a, r) => ({ kind: z[t], name: e, metadata: a, addInitializer: (n) => o._ ? k("Already initialized") : r.push(_(n || null)) }), O = (t, e) => I(e, w("metadata"), t[3]), N = (t, e, o, a) => {
7
+ }, I = (t, e, o) => e in t ? h(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o, T = (t, e) => h(t, "name", { value: e, configurable: !0 }), C = (t) => [, , , E(t?.[w("metadata")] ?? null)], z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], _ = (t) => t !== void 0 && typeof t != "function" ? k("Function expected") : t, D = (t, e, o, a, r) => ({ kind: z[t], name: e, metadata: a, addInitializer: (n) => o._ ? k("Already initialized") : r.push(_(n || null)) }), O = (t, e) => I(e, w("metadata"), t[3]), N = (t, e, o, a) => {
8
8
  for (var r = 0, n = t[e >> 1], s = n && n.length; r < s; r++) n[r].call(o);
9
9
  return a;
10
10
  }, Q = (t, e, o, a, r, n) => {
11
11
  var s, c, p, l = e & 7, f = !1, b = 0, P = t[b] || (t[b] = []), d = l && (r = r.prototype, l < 5 && (l > 3 || !f) && B(r, o));
12
- C(r, o);
12
+ T(r, o);
13
13
  for (var m = a.length - 1; m >= 0; m--)
14
14
  p = D(l, o, c = {}, t[3], P), s = (0, a[m])(r, p), c._ = 1, _(s) && (r = s);
15
15
  return O(t, r), d && h(r, o, d), f ? l ^ 4 ? n : d : r;
@@ -69,7 +69,7 @@ class v extends (x = S) {
69
69
  title: "Quick Move",
70
70
  content: /* @__PURE__ */ i(y, {}),
71
71
  className: "quick-move compact-buttons",
72
- sizeClass: "medium",
72
+ sizeClass: "smallToMedium",
73
73
  center: !0
74
74
  }).init();
75
75
  let a = null;
@@ -156,10 +156,10 @@ class v extends (x = S) {
156
156
  return (await this.ctx.wikiPage.newFromTitle(o)).moveTo(a, r, n);
157
157
  }
158
158
  }
159
- g = T(x);
159
+ g = C(x);
160
160
  v = Q(g, 0, "PluginQuickMove", M, v);
161
161
  N(g, 1, v);
162
162
  export {
163
163
  v as PluginQuickMove
164
164
  };
165
- //# sourceMappingURL=index-BwVAO_o4.js.map
165
+ //# sourceMappingURL=index-DiCrCoWT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DiCrCoWT.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove['quickMove']\n movePage: PluginQuickMove['movePage']\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@Inject(['modal', 'sitemeta'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this.quickMove.bind(this))\n ctx.set('movePage', this.movePage.bind(this))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: 'Quick Move',\n group: 'group2',\n onClick: () => {\n this.quickMove(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n quickMove(options?: Partial<QuickMoveOptions>) {\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Move',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: 'From and to are required.',\n })\n return\n }\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'Move from',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'Move to',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n Move talk page\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n Move subpage(s) (up to 100)\n </CheckBox>\n </div>\n {this.ctx.sitemeta.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n Move without leaving a redirect\n </CheckBox>\n </div>\n )}\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: 'Move',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","Inject","PluginQuickMove","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","reason","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { j as l } from "./index-CvhkVj_L.js";
2
+ import { b as D, a as L, S as m } from "./index-CHb2WvLm.js";
3
+ import { R as T } from "./Preferences-Bg3J5Ur9.js";
4
+ var C = Object.create, v = Object.defineProperty, E = Object.getOwnPropertyDescriptor, y = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), _ = (e) => {
5
+ throw TypeError(e);
6
+ }, q = (e, t, o) => t in e ? v(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, $ = (e, t) => v(e, "name", { value: t, configurable: !0 }), z = (e) => [, , , C(e?.[y("metadata")] ?? null)], I = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], w = (e) => e !== void 0 && typeof e != "function" ? _("Function expected") : e, j = (e, t, o, n, r) => ({ kind: I[e], name: t, metadata: n, addInitializer: (i) => o._ ? _("Already initialized") : r.push(w(i || null)) }), A = (e, t) => q(t, y("metadata"), e[3]), M = (e, t, o, n) => {
7
+ for (var r = 0, i = e[t >> 1], a = i && i.length; r < a; r++) i[r].call(o);
8
+ return n;
9
+ }, O = (e, t, o, n, r, i) => {
10
+ var a, p, d, u = t & 7, s = !1, c = 0, g = e[c] || (e[c] = []), h = u && (r = r.prototype, u < 5 && (u > 3 || !s) && E(r, o));
11
+ $(r, o);
12
+ for (var b = n.length - 1; b >= 0; b--)
13
+ d = j(u, o, p = {}, e[3], g), a = (0, n[b])(r, d), p._ = 1, w(a) && (r = a);
14
+ return A(e, r), h && v(r, o, h), s ? u ^ 4 ? i : h : r;
15
+ }, S, f, P;
16
+ S = [T(
17
+ m.object({
18
+ toolboxAlwaysShow: m.boolean().description("Make the toolbox opened by default").default(!1)
19
+ }).description("Toolbox preferences")
20
+ ), L(["preferences"])];
21
+ class x extends (P = D) {
22
+ constructor(t) {
23
+ super(t, "toolbox", !1), this.ctx = t, this.container = void 0;
24
+ }
25
+ async start() {
26
+ this.container = this.createToolbox(), this.ctx.preferences.get("toolboxAlwaysShow").then((t) => {
27
+ t && this.container.classList.add("is-persistent");
28
+ }), this.setupHoverLogic(), document.body.appendChild(this.container), this.updateButtonDelays();
29
+ }
30
+ stop() {
31
+ this.container?.remove();
32
+ }
33
+ setupHoverLogic() {
34
+ let t = null;
35
+ const o = () => this.container.classList.contains("is-persistent");
36
+ this.container.addEventListener("mouseenter", () => {
37
+ t && (clearTimeout(t), t = null), o() || this.container.classList.add("is-hovered");
38
+ }), this.container.addEventListener("mouseleave", () => {
39
+ o() || (t = window.setTimeout(() => {
40
+ this.container.classList.remove("is-hovered");
41
+ }, 150));
42
+ });
43
+ }
44
+ /**
45
+ * 计算按钮动画延迟
46
+ * @param index 按钮索引(从0开始)
47
+ * @param totalCount 总按钮数量
48
+ * @returns 延迟时间(秒)
49
+ */
50
+ calculateButtonDelay(t, o) {
51
+ if (o <= 1) return 0;
52
+ const n = 0.15, r = t / (o - 1), i = n * Math.sqrt(r);
53
+ return Math.round(i * 1e3) / 1e3;
54
+ }
55
+ /**
56
+ * 更新按钮组的动画延迟
57
+ */
58
+ updateButtonDelays() {
59
+ this.container.querySelectorAll(".btn-group").forEach((o) => {
60
+ const n = o.querySelectorAll(".btn-tip-group"), r = n.length;
61
+ n.forEach((i, a) => {
62
+ const p = this.calculateButtonDelay(a, r);
63
+ i.style.setProperty("--transition-delay", `${p}s`), i.style.setProperty("--max-transition-delay", "0.15s");
64
+ });
65
+ });
66
+ }
67
+ createToolbox() {
68
+ return /* @__PURE__ */ l("div", { id: "ipe-edit-toolbox", children: [
69
+ /* @__PURE__ */ l("ul", { className: "btn-group group1", style: { display: "flex", flexDirection: "column" } }),
70
+ /* @__PURE__ */ l("ul", { className: "btn-group group2", style: { display: "flex", flexDirection: "row" } }),
71
+ /* @__PURE__ */ l(
72
+ "button",
73
+ {
74
+ className: "ipe-toolbox-btn",
75
+ id: "toolbox-toggler",
76
+ onClick: () => {
77
+ const r = !this.container.classList.contains("is-persistent");
78
+ this.container.classList.toggle("is-persistent", r), this.ctx.preferences.set("toolboxAlwaysShow", r);
79
+ },
80
+ children: /* @__PURE__ */ l("svg", { xmlns: "http://www.w3.org/2000/svg", width: "448", height: "512", viewBox: "0 0 448 512", children: [
81
+ /* @__PURE__ */ l("rect", { width: "448", height: "512", fill: "none" }),
82
+ /* @__PURE__ */ l(
83
+ "path",
84
+ {
85
+ fill: "currentColor",
86
+ d: "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32"
87
+ }
88
+ )
89
+ ] })
90
+ }
91
+ )
92
+ ] });
93
+ }
94
+ normalizeButtonId(t) {
95
+ return t || (t = Math.random().toString(36).substring(2, 8)), `ipe-toolbox__${t.trim()}`.replace(/\s\.#/g, "-");
96
+ }
97
+ addButton(t) {
98
+ let { id: o, group: n, icon: r, tooltip: i, buttonProps: a, onClick: p, index: d } = t;
99
+ o = this.normalizeButtonId(o);
100
+ const u = this.container.querySelector(`#${o}`);
101
+ u && (this.ctx.logger("toolbox").warn(`Button with id ${o} already exists, replacing it.`), u.remove());
102
+ let s = null;
103
+ if (typeof n > "u" || n === "auto") {
104
+ const g = this.container.querySelector(".btn-group.group1"), h = this.container.querySelector(".btn-group.group2"), b = g?.children.length || 0, B = h?.children.length || 0;
105
+ s = b <= B ? g : h;
106
+ } else
107
+ s = this.container.querySelector(`.btn-group.${n}`);
108
+ if (!s) throw new Error(`Button group ${n} not found`);
109
+ const c = /* @__PURE__ */ l("li", { class: "btn-tip-group", id: o, onClick: p, children: [
110
+ /* @__PURE__ */ l("div", { class: "btn-tip", children: i }),
111
+ /* @__PURE__ */ l("button", { id: `${o}-btn`, class: "ipe-toolbox-btn", ...a, children: r })
112
+ ] });
113
+ return typeof d == "number" ? d <= 0 ? s.prepend(c) : d >= s.children.length ? s.appendChild(c) : s.children[d]?.before(c) : s.appendChild(c), this.ctx.emit("toolbox/button-added", {
114
+ ctx: this.ctx,
115
+ button: c
116
+ }), this.updateButtonDelays(), c;
117
+ }
118
+ removeButton(t) {
119
+ this.container.querySelector(`.ipe-toolbox-btn#${t}`)?.remove(), this.ctx.emit("toolbox/button-removed", { ctx: this.ctx, id: t }), this.updateButtonDelays();
120
+ }
121
+ }
122
+ f = z(P);
123
+ x = O(f, 0, "PluginToolbox", S, x);
124
+ M(f, 1, x);
125
+ export {
126
+ x as PluginToolbox
127
+ };
128
+ //# sourceMappingURL=index-Dnu9H-Aq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Dnu9H-Aq.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { ReactElement } from 'jsx-dom'\nimport './styles.scss'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n toolbox: PluginToolbox\n }\n interface Events {\n 'toolbox/button-added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\n 'toolbox/button-removed'(payload: { ctx: InPageEdit; id: string }): void\n }\n}\n\n@RegisterPreferences(\n Schema.object({\n toolboxAlwaysShow: Schema.boolean()\n .description('Make the toolbox opened by default')\n .default(false),\n }).description('Toolbox preferences')\n)\n@Inject(['preferences'])\nexport class PluginToolbox extends Service {\n container!: HTMLElement\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'toolbox', false)\n }\n\n protected async start(): Promise<void> {\n this.container = this.createToolbox()\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\n if (val) {\n this.container.classList.add('is-persistent')\n }\n })\n this.setupHoverLogic()\n document.body.appendChild(this.container)\n\n // 初始化时更新按钮延迟\n this.updateButtonDelays()\n }\n\n protected stop(): void | Promise<void> {\n this.container?.remove()\n }\n\n private setupHoverLogic() {\n let hoverTimeout: number | null = null\n\n // 检查是否处于持久化状态的辅助函数\n const isPersistent = () => {\n return this.container.classList.contains('is-persistent')\n }\n\n // 鼠标进入时暂时展开\n this.container.addEventListener('mouseenter', () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout)\n hoverTimeout = null\n }\n\n // 如果不在持久化状态,则添加hover展开效果\n if (!isPersistent()) {\n this.container.classList.add('is-hovered')\n }\n })\n\n // 鼠标离开时收起(如果不是持久化状态)\n this.container.addEventListener('mouseleave', () => {\n if (!isPersistent()) {\n hoverTimeout = window.setTimeout(() => {\n this.container.classList.remove('is-hovered')\n }, 150) // 延迟150ms收起,避免快速移动鼠标时闪烁\n }\n })\n }\n\n /**\n * 计算按钮动画延迟\n * @param index 按钮索引(从0开始)\n * @param totalCount 总按钮数量\n * @returns 延迟时间(秒)\n */\n private calculateButtonDelay(index: number, totalCount: number): number {\n if (totalCount <= 1) return 0\n\n // 总动画时长150ms = 0.15s\n const totalDuration = 0.15\n // 使用平方根函数创建非线性延迟,差值逐渐缩小\n const normalizedIndex = index / (totalCount - 1)\n const delay = totalDuration * Math.sqrt(normalizedIndex)\n\n return Math.round(delay * 1000) / 1000 // 保留3位小数\n }\n\n /**\n * 更新按钮组的动画延迟\n */\n private updateButtonDelays() {\n const btnGroups = this.container.querySelectorAll('.btn-group')\n\n btnGroups.forEach((group) => {\n const buttons = group.querySelectorAll('.btn-tip-group')\n const totalCount = buttons.length\n\n buttons.forEach((button, index) => {\n const delay = this.calculateButtonDelay(index, totalCount)\n ;(button as HTMLElement).style.setProperty('--transition-delay', `${delay}s`)\n ;(button as HTMLElement).style.setProperty('--max-transition-delay', '0.15s')\n })\n })\n }\n\n private createToolbox() {\n const toggler = (\n <button\n className=\"ipe-toolbox-btn\"\n id=\"toolbox-toggler\"\n onClick={() => {\n const isPersistent = this.container.classList.contains('is-persistent')\n const newPersistent = !isPersistent\n this.container.classList.toggle('is-persistent', newPersistent)\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\n }}\n >\n {/* Font Awesome 5 Solid: Plus */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"448\" height=\"512\" viewBox=\"0 0 448 512\">\n <rect width=\"448\" height=\"512\" fill=\"none\" />\n <path\n fill=\"currentColor\"\n d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32\"\n />\n </svg>\n </button>\n )\n const element = (\n <div id=\"ipe-edit-toolbox\">\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\n {toggler}\n </div>\n )\n\n return element as HTMLElement\n }\n\n private normalizeButtonId(id: string) {\n if (!id) {\n id = Math.random().toString(36).substring(2, 8)\n }\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\n }\n\n addButton(payload: {\n id: string\n group?: 'auto' | 'group1' | 'group2'\n icon: string | HTMLElement | SVGElement | ReactElement\n tooltip?: string | HTMLElement\n buttonProps?: Record<string, any>\n onClick?: (event: MouseEvent) => void\n index?: number\n }) {\n let { id, group, icon, tooltip, buttonProps, onClick, index } = payload\n id = this.normalizeButtonId(id)\n\n const existingButton = this.container.querySelector(`#${id}`)\n if (existingButton) {\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\n existingButton.remove()\n }\n\n let groupEl: HTMLElement | null = null\n if (typeof group === 'undefined' || group === 'auto') {\n // 选择按钮最少的那一组,一样多就选第一组\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\n const group1Count = group1?.children.length || 0\n const group2Count = group2?.children.length || 0\n groupEl = group1Count <= group2Count ? group1 : group2\n } else {\n groupEl = this.container.querySelector(`.btn-group.${group}`)\n }\n if (!groupEl) throw new Error(`Button group ${group} not found`)\n\n const button = (\n <li class=\"btn-tip-group\" id={id} onClick={onClick}>\n <div class=\"btn-tip\">{tooltip}</div>\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\n {icon}\n </button>\n </li>\n )\n\n if (typeof index === 'number') {\n if (index <= 0) {\n groupEl.prepend(button)\n } else if (index >= groupEl.children.length) {\n groupEl.appendChild(button)\n } else {\n groupEl.children[index]?.before(button)\n }\n } else {\n groupEl.appendChild(button)\n }\n\n this.ctx.emit('toolbox/button-added', {\n ctx: this.ctx,\n button: button as HTMLElement,\n })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n\n return button as HTMLElement\n }\n\n removeButton(id: string) {\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\n button?.remove()\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n }\n}\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","val","hoverTimeout","isPersistent","index","totalCount","totalDuration","normalizedIndex","delay","group","buttons","button","jsxs","jsx","newPersistent","id","payload","icon","tooltip","buttonProps","onClick","existingButton","groupEl","group1","group2","group1Count","group2Count","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as m, F as be, P as Se } from "./index-CvhkVj_L.js";
2
- import { B as G, a as Ne, S as E } from "./index-CIzmjtBz.js";
2
+ import { B as G, a as Ne, S as E } from "./index-CHb2WvLm.js";
3
3
  import { R as Pe } from "./Preferences-Bg3J5Ur9.js";
4
4
  import { R as Ee, M as We } from "./RadioBox-CaA8VgLu.js";
5
5
  class S {
@@ -11,14 +11,14 @@ class S {
11
11
  }
12
12
  diffWithOptionsObj(e, n, i, s) {
13
13
  var r;
14
- const l = (c) => {
15
- if (c = this.postProcess(c, i), s) {
14
+ const l = (u) => {
15
+ if (u = this.postProcess(u, i), s) {
16
16
  setTimeout(function() {
17
- s(c);
17
+ s(u);
18
18
  }, 0);
19
19
  return;
20
20
  } else
21
- return c;
21
+ return u;
22
22
  }, o = n.length, f = e.length;
23
23
  let g = 1, a = o + f;
24
24
  i.maxEditLength != null && (a = Math.min(a, i.maxEditLength));
@@ -28,39 +28,39 @@ class S {
28
28
  return l(this.buildValues(v[0].lastComponent, n, e));
29
29
  let p = -1 / 0, x = 1 / 0;
30
30
  const C = () => {
31
- for (let c = Math.max(p, -g); c <= Math.min(x, g); c += 2) {
32
- let u;
33
- const w = v[c - 1], k = v[c + 1];
34
- w && (v[c - 1] = void 0);
31
+ for (let u = Math.max(p, -g); u <= Math.min(x, g); u += 2) {
32
+ let c;
33
+ const w = v[u - 1], k = v[u + 1];
34
+ w && (v[u - 1] = void 0);
35
35
  let b = !1;
36
36
  if (k) {
37
- const N = k.oldPos - c;
37
+ const N = k.oldPos - u;
38
38
  b = k && 0 <= N && N < o;
39
39
  }
40
40
  const D = w && w.oldPos + 1 < f;
41
41
  if (!b && !D) {
42
- v[c] = void 0;
42
+ v[u] = void 0;
43
43
  continue;
44
44
  }
45
- if (!D || b && w.oldPos < k.oldPos ? u = this.addToPath(k, !0, !1, 0, i) : u = this.addToPath(w, !1, !0, 1, i), d = this.extractCommon(u, n, e, c, i), u.oldPos + 1 >= f && d + 1 >= o)
46
- return l(this.buildValues(u.lastComponent, n, e)) || !0;
47
- v[c] = u, u.oldPos + 1 >= f && (x = Math.min(x, c - 1)), d + 1 >= o && (p = Math.max(p, c + 1));
45
+ if (!D || b && w.oldPos < k.oldPos ? c = this.addToPath(k, !0, !1, 0, i) : c = this.addToPath(w, !1, !0, 1, i), d = this.extractCommon(c, n, e, u, i), c.oldPos + 1 >= f && d + 1 >= o)
46
+ return l(this.buildValues(c.lastComponent, n, e)) || !0;
47
+ v[u] = c, c.oldPos + 1 >= f && (x = Math.min(x, u - 1)), d + 1 >= o && (p = Math.max(p, u + 1));
48
48
  }
49
49
  g++;
50
50
  };
51
51
  if (s)
52
- (function c() {
52
+ (function u() {
53
53
  setTimeout(function() {
54
54
  if (g > a || Date.now() > y)
55
55
  return s(void 0);
56
- C() || c();
56
+ C() || u();
57
57
  }, 0);
58
58
  })();
59
59
  else
60
60
  for (; g <= a && Date.now() <= y; ) {
61
- const c = C();
62
- if (c)
63
- return c;
61
+ const u = C();
62
+ if (u)
63
+ return u;
64
64
  }
65
65
  }
66
66
  addToPath(e, n, i, s, r) {
@@ -384,9 +384,9 @@ class Me extends S {
384
384
  return super.equals(e.replace(/,([\r\n])/g, "$1"), n.replace(/,([\r\n])/g, "$1"), i);
385
385
  }
386
386
  }
387
- const ue = new Me();
388
- function ce(t, e, n) {
389
- return ue.diff(t, e, n);
387
+ const ce = new Me();
388
+ function ue(t, e, n) {
389
+ return ce.diff(t, e, n);
390
390
  }
391
391
  function A(t, e, n, i, s) {
392
392
  e = e || [], n = n || [], i && (t = i(s === void 0 ? "" : s, t));
@@ -553,7 +553,7 @@ function Ue(t, e, n = {}) {
553
553
  else if (!l)
554
554
  return !1;
555
555
  }
556
- function h(d, p, x, C = 0, c = !0, u = [], w = 0) {
556
+ function h(d, p, x, C = 0, u = !0, c = [], w = 0) {
557
557
  let k = 0, b = !1;
558
558
  for (; C < d.length; C++) {
559
559
  const D = d[C], N = D.length > 0 ? D[0] : " ", z = D.length > 0 ? D.substr(1) : D;
@@ -561,20 +561,20 @@ function Ue(t, e, n = {}) {
561
561
  if (r(p + 1, i[p], N, z))
562
562
  p++, k = 0;
563
563
  else
564
- return !x || i[p] == null ? null : (u[w] = i[p], h(d, p + 1, x - 1, C, !1, u, w + 1));
564
+ return !x || i[p] == null ? null : (c[w] = i[p], h(d, p + 1, x - 1, C, !1, c, w + 1));
565
565
  if (N === "+") {
566
- if (!c)
566
+ if (!u)
567
567
  return null;
568
- u[w] = z, w++, k = 0, b = !0;
568
+ c[w] = z, w++, k = 0, b = !0;
569
569
  }
570
570
  if (N === " ")
571
- if (k++, u[w] = i[p], r(p + 1, i[p], N, z))
572
- w++, c = !0, b = !1, p++;
571
+ if (k++, c[w] = i[p], r(p + 1, i[p], N, z))
572
+ w++, u = !0, b = !1, p++;
573
573
  else
574
- return b || !x ? null : i[p] && (h(d, p + 1, x - 1, C + 1, !1, u, w + 1) || h(d, p + 1, x - 1, C, !1, u, w + 1)) || h(d, p, x - 1, C + 1, !1, u, w);
574
+ return b || !x ? null : i[p] && (h(d, p + 1, x - 1, C + 1, !1, c, w + 1) || h(d, p + 1, x - 1, C, !1, c, w + 1)) || h(d, p, x - 1, C + 1, !1, c, w);
575
575
  }
576
- return w -= k, p -= k, u.length = w, {
577
- patchedLines: u,
576
+ return w -= k, p -= k, c.length = w, {
577
+ patchedLines: c,
578
578
  oldLineLastI: p - 1
579
579
  };
580
580
  }
@@ -584,24 +584,24 @@ function Ue(t, e, n = {}) {
584
584
  const p = s[d];
585
585
  let x;
586
586
  const C = i.length - p.oldLines + l;
587
- let c;
588
- for (let u = 0; u <= l; u++) {
589
- c = p.oldStart + v - 1;
590
- const w = Qe(c, o, C);
591
- for (; c !== void 0 && (x = h(p.lines, c, u), !x); c = w())
587
+ let u;
588
+ for (let c = 0; c <= l; c++) {
589
+ u = p.oldStart + v - 1;
590
+ const w = Qe(u, o, C);
591
+ for (; u !== void 0 && (x = h(p.lines, u, c), !x); u = w())
592
592
  ;
593
593
  if (x)
594
594
  break;
595
595
  }
596
596
  if (!x)
597
597
  return !1;
598
- for (let u = o; u < c; u++)
599
- y.push(i[u]);
600
- for (let u = 0; u < x.patchedLines.length; u++) {
601
- const w = x.patchedLines[u];
598
+ for (let c = o; c < u; c++)
599
+ y.push(i[c]);
600
+ for (let c = 0; c < x.patchedLines.length; c++) {
601
+ const w = x.patchedLines[c];
602
602
  y.push(w);
603
603
  }
604
- o = x.oldLineLastI + 1, v = c + 1 - p.oldStart;
604
+ o = x.oldLineLastI + 1, v = u + 1 - p.oldStart;
605
605
  }
606
606
  for (let d = o; d < i.length; d++)
607
607
  y.push(i[d]);
@@ -655,26 +655,26 @@ function q(t, e, n, i, s, r, l) {
655
655
  if (!a)
656
656
  return;
657
657
  a.push({ value: "", lines: [] });
658
- function h(c) {
659
- return c.map(function(u) {
660
- return " " + u;
658
+ function h(u) {
659
+ return u.map(function(c) {
660
+ return " " + c;
661
661
  });
662
662
  }
663
663
  const y = [];
664
664
  let v = 0, d = 0, p = [], x = 1, C = 1;
665
- for (let c = 0; c < a.length; c++) {
666
- const u = a[c], w = u.lines || Xe(u.value);
667
- if (u.lines = w, u.added || u.removed) {
665
+ for (let u = 0; u < a.length; u++) {
666
+ const c = a[u], w = c.lines || Xe(c.value);
667
+ if (c.lines = w, c.added || c.removed) {
668
668
  if (!v) {
669
- const k = a[c - 1];
669
+ const k = a[u - 1];
670
670
  v = x, d = C, k && (p = f > 0 ? h(k.lines.slice(-f)) : [], v -= p.length, d -= p.length);
671
671
  }
672
672
  for (const k of w)
673
- p.push((u.added ? "+" : "-") + k);
674
- u.added ? C += w.length : x += w.length;
673
+ p.push((c.added ? "+" : "-") + k);
674
+ c.added ? C += w.length : x += w.length;
675
675
  } else {
676
676
  if (v)
677
- if (w.length <= f * 2 && c < a.length - 2)
677
+ if (w.length <= f * 2 && u < a.length - 2)
678
678
  for (const k of h(w))
679
679
  p.push(k);
680
680
  else {
@@ -693,10 +693,10 @@ function q(t, e, n, i, s, r, l) {
693
693
  x += w.length, C += w.length;
694
694
  }
695
695
  }
696
- for (const c of y)
697
- for (let u = 0; u < c.lines.length; u++)
698
- c.lines[u].endsWith(`
699
- `) ? c.lines[u] = c.lines[u].slice(0, -1) : (c.lines.splice(u + 1, 0, "\"), u++);
696
+ for (const u of y)
697
+ for (let c = 0; c < u.lines.length; c++)
698
+ u.lines[c].endsWith(`
699
+ `) ? u.lines[c] = u.lines[c].slice(0, -1) : (u.lines.splice(c + 1, 0, "\"), c++);
700
700
  return {
701
701
  oldFileName: t,
702
702
  newFileName: e,
@@ -778,14 +778,14 @@ const et = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
778
778
  diffArrays: me,
779
779
  diffChars: ee,
780
780
  diffCss: ae,
781
- diffJson: ce,
781
+ diffJson: ue,
782
782
  diffLines: F,
783
783
  diffSentences: oe,
784
784
  diffTrimmedLines: re,
785
785
  diffWords: ne,
786
786
  diffWordsWithSpace: $,
787
787
  formatPatch: L,
788
- jsonDiff: ue,
788
+ jsonDiff: ce,
789
789
  lineDiff: M,
790
790
  parsePatch: R,
791
791
  reversePatch: we,
@@ -796,7 +796,7 @@ const et = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
796
796
  }, Symbol.toStringTag, { value: "Module" }));
797
797
  class tt {
798
798
  constructor(e) {
799
- this.ctx = e, this.JsDiff = et, this.diffChars = ee, this.diffWords = ne, this.diffWordsWithSpace = $, this.diffLines = F, this.diffTrimmedLines = re, this.diffSentences = oe, this.diffCss = ae, this.diffJson = ce, this.diffArrays = me, this.createTwoFilesPatch = J, this.ctx.set("jsdiff", this);
799
+ this.ctx = e, this.JsDiff = et, this.diffChars = ee, this.diffWords = ne, this.diffWordsWithSpace = $, this.diffLines = F, this.diffTrimmedLines = re, this.diffSentences = oe, this.diffCss = ae, this.diffJson = ue, this.diffArrays = me, this.createTwoFilesPatch = J, this.ctx.set("jsdiff", this);
800
800
  }
801
801
  }
802
802
  const nt = {
@@ -912,12 +912,12 @@ const nt = {
912
912
  }, lt = (t, e = document) => e.querySelector(t), ot = (t, e = document) => e.querySelectorAll(t);
913
913
  var ft = Object.create, B = Object.defineProperty, at = Object.getOwnPropertyDescriptor, ve = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), ye = (t) => {
914
914
  throw TypeError(t);
915
- }, ut = (t, e, n) => e in t ? B(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, ct = (t, e) => B(t, "name", { value: e, configurable: !0 }), dt = (t) => [, , , ft(t?.[ve("metadata")] ?? null)], mt = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], xe = (t) => t !== void 0 && typeof t != "function" ? ye("Function expected") : t, ht = (t, e, n, i, s) => ({ kind: mt[t], name: e, metadata: i, addInitializer: (r) => n._ ? ye("Already initialized") : s.push(xe(r || null)) }), gt = (t, e) => ut(e, ve("metadata"), t[3]), pt = (t, e, n, i) => {
915
+ }, ct = (t, e, n) => e in t ? B(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, ut = (t, e) => B(t, "name", { value: e, configurable: !0 }), dt = (t) => [, , , ft(t?.[ve("metadata")] ?? null)], mt = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], xe = (t) => t !== void 0 && typeof t != "function" ? ye("Function expected") : t, ht = (t, e, n, i, s) => ({ kind: mt[t], name: e, metadata: i, addInitializer: (r) => n._ ? ye("Already initialized") : s.push(xe(r || null)) }), gt = (t, e) => ct(e, ve("metadata"), t[3]), pt = (t, e, n, i) => {
916
916
  for (var s = 0, r = t[e >> 1], l = r && r.length; s < l; s++) r[s].call(n);
917
917
  return i;
918
918
  }, wt = (t, e, n, i, s, r) => {
919
919
  var l, o, f, g = e & 7, a = !1, h = 0, y = t[h] || (t[h] = []), v = g && (s = s.prototype, g < 5 && (g > 3 || !a) && at(s, n));
920
- ct(s, n);
920
+ ut(s, n);
921
921
  for (var d = i.length - 1; d >= 0; d--)
922
922
  f = ht(g, n, o = {}, t[3], y), l = (0, i[d])(s, f), o._ = 1, xe(l) && (s = l);
923
923
  return gt(t, s), v && B(s, n, v), a ? g ^ 4 ? r : v : s;
@@ -999,7 +999,7 @@ class j extends (Ce = G) {
999
999
  className: "btn btn-secondary",
1000
1000
  method: () => {
1001
1001
  const s = n.title, r = n.revisions?.[0]?.content || "", l = e.get$content().querySelector('textarea[name="text"]')?.value || "";
1002
- return i = this.comparePages(
1002
+ return r === l ? this.ctx.modal.notify("info", { content: "No chages" }) : (i = this.comparePages(
1003
1003
  {
1004
1004
  fromtitle: s,
1005
1005
  fromtext: r,
@@ -1007,7 +1007,7 @@ class j extends (Ce = G) {
1007
1007
  totext: l
1008
1008
  },
1009
1009
  i
1010
- ), i;
1010
+ ), i);
1011
1011
  }
1012
1012
  },
1013
1013
  1
@@ -1137,4 +1137,4 @@ class Ct extends G {
1137
1137
  export {
1138
1138
  Ct as PluginQuickDiff
1139
1139
  };
1140
- //# sourceMappingURL=index-D1plOuGc.js.map
1140
+ //# sourceMappingURL=index-Dz0VGQwY.js.map