@inpageedit/core 0.4.0 → 0.5.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 (67) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +55 -55
  3. package/dist/ActionButton-BgbTKTg7.js +24 -0
  4. package/dist/ActionButton-BgbTKTg7.js.map +1 -0
  5. package/dist/InPageEdit.d.ts +8 -7
  6. package/dist/InputBox-FIzJ-rPN.js.map +1 -1
  7. package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
  8. package/dist/{RadioBox-BZFhTEo5.js → RadioBox-CaA8VgLu.js} +16 -16
  9. package/dist/RadioBox-CaA8VgLu.js.map +1 -0
  10. package/dist/components/TwinSwapInput/index.d.ts +1 -0
  11. package/dist/components/index.js +21 -22
  12. package/dist/components/index.js.map +1 -1
  13. package/dist/{index-BPsDFq9U.js → index-Bh70Udzi.js} +14 -13
  14. package/dist/index-Bh70Udzi.js.map +1 -0
  15. package/dist/index-Bo1hNwWJ.js +96 -0
  16. package/dist/index-Bo1hNwWJ.js.map +1 -0
  17. package/dist/{index-Ch5DJDZZ.js → index-BxR7MsNM.js} +105 -102
  18. package/dist/index-BxR7MsNM.js.map +1 -0
  19. package/dist/{index-BsYzf3Yw.js → index-CUXLgVhg.js} +11 -11
  20. package/dist/index-CUXLgVhg.js.map +1 -0
  21. package/dist/index-CvhkVj_L.js.map +1 -1
  22. package/dist/{index-BByzm2Fz.js → index-D3yG7jFv.js} +119 -111
  23. package/dist/{index-BByzm2Fz.js.map → index-D3yG7jFv.js.map} +1 -1
  24. package/dist/{index-D-zQLFuZ.js → index-K73DMVec.js} +13 -20
  25. package/dist/index-K73DMVec.js.map +1 -0
  26. package/dist/index-jKU6cYcH.js +165 -0
  27. package/dist/index-jKU6cYcH.js.map +1 -0
  28. package/dist/{index-X1X416tZ.js → index-mMAGhnbR.js} +40 -24
  29. package/dist/index-mMAGhnbR.js.map +1 -0
  30. package/dist/index-z5MR2HJ2.js +4820 -0
  31. package/dist/index-z5MR2HJ2.js.map +1 -0
  32. package/dist/index.js +3008 -2546
  33. package/dist/index.js.map +1 -1
  34. package/dist/plugins/BasePlugin.d.ts +1 -1
  35. package/dist/plugins/_debug/index.d.ts +1 -1
  36. package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +2 -1
  37. package/dist/plugins/quick-edit/index.d.ts +2 -1
  38. package/dist/plugins/quick-move/index.d.ts +1 -1
  39. package/dist/plugins/quick-preview/index.d.ts +4 -3
  40. package/dist/plugins/quick-redirect/index.d.ts +1 -1
  41. package/dist/plugins/toolbox/index.d.ts +2 -2
  42. package/dist/services/ModalService/IPEModal.d.ts +235 -0
  43. package/dist/services/ModalService/index.d.ts +35 -0
  44. package/dist/sleep-DpyIipK-.js.map +1 -1
  45. package/dist/style.css +1 -1
  46. package/dist/utils/interpolate.d.ts +20 -0
  47. package/dist/utils/interpolate.spec.d.ts +1 -0
  48. package/lib/index.umd.js +53 -26
  49. package/lib/index.umd.js.map +1 -1
  50. package/lib/style.css +1 -1
  51. package/package.json +8 -9
  52. package/dist/ActionButton-ByMKIthQ.js +0 -24
  53. package/dist/ActionButton-ByMKIthQ.js.map +0 -1
  54. package/dist/RadioBox-BZFhTEo5.js.map +0 -1
  55. package/dist/index-BPsDFq9U.js.map +0 -1
  56. package/dist/index-BTngTj1f.js +0 -4682
  57. package/dist/index-BTngTj1f.js.map +0 -1
  58. package/dist/index-BsYzf3Yw.js.map +0 -1
  59. package/dist/index-Ch5DJDZZ.js.map +0 -1
  60. package/dist/index-Cq9xxVsu.js +0 -149
  61. package/dist/index-Cq9xxVsu.js.map +0 -1
  62. package/dist/index-D-zQLFuZ.js.map +0 -1
  63. package/dist/index-HyxA2rYz.js +0 -87
  64. package/dist/index-HyxA2rYz.js.map +0 -1
  65. package/dist/index-X1X416tZ.js.map +0 -1
  66. package/dist/services/SsiModalService.d.ts +0 -36
  67. package/dist/utils/Logger.d.ts +0 -106
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BsYzf3Yw.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\r\nimport { ReactElement } from 'jsx-dom'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n toolbox: PluginToolbox\r\n }\r\n interface Events {\r\n 'toolbox/button/added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\r\n 'toolbox/button/removed'(payload: { ctx: InPageEdit; id: string }): void\r\n }\r\n}\r\n\r\n@RegisterPreferences(\r\n Schema.object({\r\n toolboxAlwaysShow: Schema.boolean()\r\n .description('Make the toolbox opened by default')\r\n .default(false),\r\n }),\r\n {\r\n toolboxAlwaysShow: false,\r\n }\r\n)\r\n@Inject(['preferences'])\r\nexport class PluginToolbox extends Service {\r\n container!: HTMLElement\r\n private forceShow = false\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, 'toolbox', false)\r\n }\r\n\r\n protected async start(): Promise<void> {\r\n if (mw && mw.config.get('wgIsArticle') === false && !this.forceShow) {\r\n this.container = this.createIndicatorForNotArticlePage()\r\n } else {\r\n this.container = this.createToolbox()\r\n }\r\n document.body.appendChild(this.container)\r\n await sleep(0) // wait nextTick\r\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\r\n if (val) {\r\n this.container.querySelector('#toolbox-toggle')?.classList.add('opened')\r\n this.container.querySelectorAll('.btn-group').forEach((el) => {\r\n el.classList.add('opened')\r\n })\r\n }\r\n })\r\n }\r\n\r\n protected stop(): void | Promise<void> {\r\n this.container?.remove()\r\n }\r\n\r\n private createToolbox() {\r\n const toggler = (\r\n <button\r\n className=\"ipe-toolbox-btn\"\r\n id=\"toolbox-toggle\"\r\n onClick={function (e) {\r\n const isOpened = this.classList.contains('opened')\r\n this.classList.toggle('opened', !isOpened)\r\n element.querySelectorAll('.btn-group').forEach((el) => {\r\n el.classList.toggle('opened', !isOpened)\r\n })\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-plus\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M12 5l0 14\" />\r\n <path d=\"M5 12l14 0\" />\r\n </svg>\r\n </button>\r\n )\r\n const element = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\r\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\r\n {toggler}\r\n </div>\r\n )\r\n\r\n return element as HTMLElement\r\n }\r\n\r\n private createIndicatorForNotArticlePage() {\r\n const indicator = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <div\r\n id=\"ipe-toolbox-placeholder\"\r\n style=\"width: 0.75rem; height: 0.75rem; border-radius: 50%; background: #3f51b5; color: #fff; pointer-events: none;\"\r\n >\r\n <svg\r\n style=\"width: 0.5em; height: 0.5em; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-check\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M5 12l5 5l10 -10\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n return indicator as HTMLElement\r\n }\r\n\r\n private normalizeButtonId(id: string) {\r\n if (!id) {\r\n id = Math.random().toString(36).substring(2, 8)\r\n }\r\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\r\n }\r\n\r\n addButton(payload: {\r\n id: string\r\n group?: 'auto' | 'group1' | 'group2'\r\n icon: string | HTMLElement | SVGElement | JQuery | ReactElement\r\n tooltip?: string | HTMLElement | JQuery\r\n buttonProps?: Record<string, any>\r\n onClick?: (event: MouseEvent) => void\r\n index?: number\r\n }) {\r\n let { id, group, icon, tooltip, buttonProps, onClick, index } = payload\r\n id = this.normalizeButtonId(id)\r\n\r\n const existingButton = this.container.querySelector(`#${id}`)\r\n if (existingButton) {\r\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\r\n existingButton.remove()\r\n }\r\n\r\n let groupEl: HTMLElement | null = null\r\n if (typeof group === 'undefined' || group === 'auto') {\r\n // 选择按钮最少的那一组,一样多就选第一组\r\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\r\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\r\n const group1Count = group1?.children.length || 0\r\n const group2Count = group2?.children.length || 0\r\n groupEl = group1Count <= group2Count ? group1 : group2\r\n } else {\r\n groupEl = this.container.querySelector(`.btn-group.${group}`)\r\n }\r\n if (!groupEl) throw new Error(`Button group ${group} not found`)\r\n\r\n const button = (\r\n <li class=\"btn-tip-group\" id={id} onClick={onClick}>\r\n <div class=\"btn-tip\">{tooltip}</div>\r\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\r\n {icon}\r\n </button>\r\n </li>\r\n )\r\n\r\n if (typeof index === 'number') {\r\n if (index <= 0) {\r\n groupEl.prepend(button)\r\n } else if (index >= groupEl.children.length) {\r\n groupEl.appendChild(button)\r\n } else {\r\n groupEl.children[index]?.before(button)\r\n }\r\n } else {\r\n groupEl.appendChild(button)\r\n }\r\n\r\n this.ctx.emit('toolbox/button/added', {\r\n ctx: this.ctx,\r\n button: button as HTMLElement,\r\n })\r\n\r\n return button as HTMLElement\r\n }\r\n\r\n removeButton(id: string) {\r\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\r\n button?.remove()\r\n this.ctx.emit('toolbox/button/removed', { ctx: this.ctx, id })\r\n }\r\n}\r\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","sleep","val","el","element","jsxs","jsx","e","isOpened","id","payload","group","icon","tooltip","buttonProps","onClick","index","existingButton","groupEl","group1","group2","group1Count","group2Count","button","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Ch5DJDZZ.js","sources":["../src/models/WikiPage/types/WatchlistAction.ts","../src/plugins/quick-edit/PluginQuickEditInArticleLinks.tsx","../src/utils/noop.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["export enum WatchlistAction {\r\n preferences = 'preferences',\r\n watch = 'watch',\r\n unwatch = 'unwatch',\r\n nochange = 'nochange',\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { QuickEditOptions } from '.'\r\n\r\n@Inject(['sitemeta', 'quickEdit'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n redLinkEdit: Schema.boolean()\r\n .description('Show quick edit entry after red links')\r\n .default(true),\r\n }).description('In-article quick edit links'),\r\n {\r\n redLinkEdit: true,\r\n }\r\n)\r\nexport class PluginQuickEditInArticleLinks extends BasePlugin<{\r\n wikiBaseUrl: string\r\n wikiArticlePath: string\r\n wikiArticleBaseUrl: string\r\n wikiScriptBaseUrl: string\r\n linkClassName: string\r\n}> {\r\n constructor(ctx: InPageEdit) {\r\n const mwConfig = ctx.sitemeta.mwConfig\r\n const wikiArticlePath = mwConfig.wgArticlePath.replace('$1', '')\r\n const wikiBaseUrl = `${location.protocol}//${mwConfig.wgServer.split('//')[1]}`\r\n super(\r\n ctx,\r\n {\r\n wikiBaseUrl,\r\n wikiArticlePath,\r\n wikiArticleBaseUrl: `${wikiBaseUrl}${wikiArticlePath}`,\r\n wikiScriptBaseUrl: `${wikiBaseUrl}${mwConfig.wgScriptPath}`,\r\n linkClassName: 'ipe-quickEdit__in-article-link',\r\n },\r\n 'QuickEditInArticleLinks'\r\n )\r\n }\r\n\r\n protected async start() {\r\n mw.hook('wikipage.content').add(() => {\r\n const anchorList = document.querySelectorAll<HTMLAnchorElement>('#mw-content-text a[href]')\r\n anchorList.forEach((anchor) => {\r\n const info = this.checkEditAnchor(anchor)\r\n if (!info || anchor.dataset.ipeQuickEditLink) {\r\n return\r\n }\r\n\r\n const link = (\r\n <a\r\n href={`#/IPE/quickEdit/${info.title}`}\r\n className={this.config.linkClassName}\r\n style={{\r\n userSelect: 'none',\r\n marginLeft: '0.2em',\r\n verticalAlign: 'middle',\r\n }}\r\n onClick={(e) => {\r\n e.preventDefault()\r\n this.ctx.quickEdit(info)\r\n }}\r\n >\r\n <svg\r\n style=\"width: 1em; height: 1em\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-pencil-bolt\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\" />\r\n <path d=\"M13.5 6.5l4 4\" />\r\n <path d=\"M19 16l-2 3h4l-2 3\" />\r\n </svg>\r\n </a>\r\n )\r\n\r\n anchor.insertAdjacentElement('afterend', link)\r\n anchor.dataset.ipeQuickEditLink = 'true'\r\n })\r\n })\r\n }\r\n\r\n stop() {\r\n document.querySelectorAll(`.${this.config.linkClassName}`).forEach((el) => el.remove())\r\n }\r\n\r\n checkEditAnchor(\r\n anchor: HTMLAnchorElement\r\n ): Pick<QuickEditOptions, 'title' | 'section' | 'revision' | 'createOnly'> | null {\r\n if (!(anchor instanceof HTMLAnchorElement)) {\r\n return null\r\n }\r\n\r\n const href = anchor.href || ''\r\n if (\r\n !href.startsWith(this.config.wikiArticleBaseUrl) &&\r\n !href.startsWith(this.config.wikiScriptBaseUrl)\r\n ) {\r\n return null\r\n }\r\n const hrefURL = new URL(href)\r\n const params = hrefURL.searchParams\r\n const action = params.get('action') || 'view'\r\n const title =\r\n params.get('title') ||\r\n decodeURI(hrefURL.pathname.substring(this.config.wikiArticlePath.length)) ||\r\n ''\r\n const section = params.get('section')?.replace(/^T-/, '') || undefined\r\n const revision = params.get('oldid')\r\n\r\n if (\r\n // 不合法的 title\r\n !title ||\r\n title.endsWith('.php') ||\r\n // 不是 edit 相关操作\r\n !['edit', 'editsource', 'editredlink', 'submit'].includes(action) ||\r\n // 暂时未兼容 undo\r\n params.get('undo') ||\r\n // 暂时未兼容 preload\r\n params.get('preload')\r\n ) {\r\n return null\r\n }\r\n\r\n let sectionNum: 'new' | number | undefined = undefined\r\n if (section === 'new') {\r\n sectionNum = 'new'\r\n } else if (section && /^\\d+$/.test(section)) {\r\n sectionNum = parseInt(section, 10)\r\n }\r\n\r\n return {\r\n title,\r\n section: sectionNum,\r\n revision: parseInt('' + revision, 10) || 0,\r\n createOnly: !!params.get('redlink'),\r\n }\r\n }\r\n}\r\n","export const noop = () => {}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { WikiPage } from '@/models/WikiPage'\r\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\r\nimport { PluginQuickEditInArticleLinks } from './PluginQuickEditInArticleLinks'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickEdit: PluginQuickEdit['quickEdit']\r\n }\r\n interface Events {\r\n 'quickEdit/initOptions'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\r\n 'quickEdit/showModal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\r\n 'quickEdit/wikiPage'(payload: QuickEditInitPayload): void\r\n }\r\n}\r\n\r\nexport interface QuickEditOptions {\r\n title: string\r\n pageId: number\r\n revision: number\r\n /**\r\n * - `undefined` for full article edit\r\n * - `0` for the first section\r\n * - `\"new\"` for a new section\r\n */\r\n section: number | 'new' | undefined\r\n editMinor: boolean\r\n editSummary: string\r\n createOnly: boolean\r\n reloadAfterSave: boolean\r\n}\r\n\r\nexport interface QuickEditInitPayload {\r\n ctx: InPageEdit\r\n options: QuickEditOptions\r\n modal: SsiModal\r\n wikiPage: WikiPage\r\n}\r\n\r\nexport interface QuickEditSubmitPayload {\r\n text?: string\r\n summary?: string\r\n minor?: boolean\r\n createonly?: boolean\r\n watchlist?: WatchlistAction\r\n}\r\n\r\n@Inject(['api', 'wikiPage', 'modal', 'preferences'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n editSummary: Schema.string()\r\n .description('Default edit summary for quick edits')\r\n .default('[IPE-NEXT] Quick edit'),\r\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\r\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\r\n watchList: Schema.union([\r\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\r\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\r\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\r\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\r\n ])\r\n .description('Watchlist options')\r\n .default(WatchlistAction.preferences),\r\n })\r\n .description('Quick edit options')\r\n .extra('category', 'edit'),\r\n {\r\n editSummary: '[IPE-NEXT] Quick edit',\r\n editMinor: false,\r\n outSideClose: true,\r\n watchList: WatchlistAction.preferences,\r\n }\r\n)\r\nexport class PluginQuickEdit extends BasePlugin {\r\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\r\n title: '',\r\n pageId: 0,\r\n revision: 0,\r\n section: undefined,\r\n editMinor: false,\r\n editSummary: '',\r\n createOnly: false,\r\n reloadAfterSave: true,\r\n }\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-edit')\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.root.set('quickEdit', this.quickEdit.bind(this))\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.injectToolbox(ctx)\r\n ctx.on('dispose', () => {\r\n this.removeToolbox(ctx)\r\n })\r\n })\r\n\r\n this.ctx.plugin(PluginQuickEditInArticleLinks)\r\n }\r\n\r\n async quickEdit(payload?: string | Partial<QuickEditOptions>) {\r\n if (typeof payload === 'undefined') {\r\n payload = {}\r\n } else if (typeof payload === 'string') {\r\n payload = {\r\n title: payload,\r\n } as Partial<QuickEditOptions>\r\n }\r\n\r\n // @ts-expect-error legacy `page` option\r\n if (payload?.page) {\r\n // @ts-expect-error\r\n payload.title = payload.page\r\n // @ts-expect-error\r\n delete payload.page\r\n }\r\n\r\n if (!payload.title && !payload.pageId && !payload.revision) {\r\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\r\n payload = {\r\n ...payload,\r\n title: mw.config.get('wgPageName'),\r\n pageId: mw.config.get('wgArticleId'),\r\n revision: mw.config.get('wgRevisionId'),\r\n }\r\n }\r\n\r\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\r\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\r\n const editSummary =\r\n typeof payload.editSummary === 'string'\r\n ? payload.editSummary\r\n : (await this.ctx.preferences.get<string>('editSummary'))!\r\n const editMinor =\r\n typeof payload.editMinor === 'boolean'\r\n ? payload.editMinor\r\n : (await this.ctx.preferences.get<boolean>('editMinor'))!\r\n\r\n const options: QuickEditOptions = {\r\n ...this.DEFAULT_OPTIONS,\r\n editSummary,\r\n editMinor,\r\n ...payload,\r\n }\r\n if (!options.editSummary) {\r\n options.editSummary = (await this.ctx.preferences.get<string>('editSummary')) || ''\r\n }\r\n if (!options) this.ctx.emit('quickEdit/initOptions', { ctx: this.ctx, options })\r\n\r\n const modal = this.ctx.modal\r\n .createObject({\r\n className: 'in-page-edit ipe-quickEdit ipe-editor',\r\n sizeClass: 'large',\r\n outSideClose,\r\n })\r\n .init()\r\n modal.setTitle(\r\n (\r\n <>\r\n Loading: <u>{options.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n modal.setContent(\r\n (\r\n <section\r\n className=\"ipe-quickEdit-loading\"\r\n style={{\r\n height: '70vh',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <ProgressBar />\r\n </section>\r\n ) as HTMLElement\r\n )\r\n modal.setButtons([\r\n {\r\n side: 'right',\r\n type: 'button',\r\n className: 'btn btn-danger btn-secondary',\r\n label: 'Cancel',\r\n method() {\r\n modal.close()\r\n },\r\n },\r\n ])\r\n modal.show()\r\n this.ctx.emit('quickEdit/showModal', { ctx: this.ctx, modal, options })\r\n\r\n let wikiPage: WikiPage\r\n try {\r\n wikiPage = await this.getWikiPageFromPayload(options)\r\n } catch (e) {\r\n modal.close()\r\n this.ctx.modal.notify('error', {\r\n title: 'Error',\r\n content: e instanceof Error ? e.message : String(e),\r\n })\r\n return\r\n }\r\n modal.setTitle(\r\n (\r\n <>\r\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\r\n <u>{wikiPage.pageInfo.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n const editForm = (\r\n <form className=\"ipe-quickEdit-form\">\r\n {/* 页面不存在 */}\r\n {wikiPage.pageInfo.pageid === 0 && (\r\n <MBox title=\"Attention\" type=\"important\">\r\n <p>This page does not exist.</p>\r\n </MBox>\r\n )}\r\n <textarea className=\"editArea\" name=\"text\" id=\"wpTextbox1\">\r\n {wikiPage.revisions[0]?.content || ''}\r\n </textarea>\r\n <div\r\n class=\"ipe-quickEdit-options\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n }}\r\n >\r\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\r\n <div>\r\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\r\n Watchlist\r\n </label>\r\n <div style={{ display: 'flex', gap: '1rem' }}>\r\n {[\r\n WatchlistAction.preferences,\r\n WatchlistAction.nochange,\r\n WatchlistAction.watch,\r\n WatchlistAction.unwatch,\r\n ].map((action) => (\r\n <RadioBox\r\n key={action}\r\n name=\"watchlist\"\r\n value={action}\r\n inputProps={{ checked: watchList === action }}\r\n >\r\n {action}\r\n </RadioBox>\r\n ))}\r\n </div>\r\n </div>\r\n <div style={{ display: 'flex', gap: '1rem' }}>\r\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\r\n Minor edit\r\n </CheckBox>\r\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\r\n Reload after save\r\n </CheckBox>\r\n </div>\r\n </div>\r\n {/* Debug Info */}\r\n {import.meta.env.DEV && (\r\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\r\n <details>\r\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\r\n </details>\r\n </div>\r\n )}\r\n </form>\r\n ) as HTMLFormElement\r\n modal.setContent(editForm)\r\n const submitButton = modal.generateButton({\r\n side: 'left',\r\n className: 'btn btn-primary submit-btn',\r\n label: 'Submit',\r\n method: () => {\r\n const formData = new FormData(editForm)\r\n console.info(wikiPage, editForm, {\r\n text: formData.get('text') as string,\r\n summary: formData.get('summary') as string,\r\n minor: formData.get('minor') === 'on',\r\n })\r\n modal.setLoadingState(true)\r\n this.handleSubmit(\r\n { ctx: this.ctx, modal, wikiPage, options },\r\n {\r\n text: formData.get('text') as string,\r\n summary: formData.get('summary') as string,\r\n minor: formData.get('minor') === 'on',\r\n }\r\n )\r\n .then(async () => {\r\n modal.setOptions({\r\n beforeClose: noop,\r\n })\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Submission Successful',\r\n content: 'Your changes have been saved.',\r\n })\r\n if (formData.get('reloadAfterSave')) {\r\n await sleep(500)\r\n location.reload()\r\n }\r\n })\r\n .catch((error) => {\r\n this.ctx.modal.notify('error', {\r\n title: 'Submission Error',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n modal.setLoadingState(false)\r\n })\r\n },\r\n })\r\n // shamefully fix: make sure the submit button is always the first\r\n modal.get$buttons('leftButtons').prepend(submitButton)\r\n modal.setOptions({\r\n beforeClose: () => {\r\n const oldStr = wikiPage.revisions[0]?.content || ''\r\n const newStr = editForm.querySelector('textarea')?.value || ''\r\n if (newStr === oldStr) {\r\n return true\r\n } else {\r\n this.ctx.modal.confirm(\r\n {\r\n className: 'in-page-edit',\r\n title: 'Unsaved Changes',\r\n content:\r\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\r\n center: true,\r\n okBtn: {\r\n label: 'Give Up',\r\n className: 'btn btn-danger',\r\n },\r\n cancelBtn: {\r\n label: 'Continue',\r\n className: 'btn',\r\n },\r\n },\r\n (result) => {\r\n if (result) {\r\n modal.setOptions({\r\n beforeClose: noop,\r\n })\r\n modal.close()\r\n }\r\n return true\r\n }\r\n )\r\n return false\r\n }\r\n },\r\n })\r\n this.ctx.emit('quickEdit/wikiPage', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n })\r\n }\r\n\r\n private handleSubmit(init: QuickEditInitPayload, payload: QuickEditSubmitPayload) {\r\n const summary = payload.summary || ''\r\n const text = payload.text || ''\r\n const minor = payload.minor || false\r\n const createonly = payload.createonly || false\r\n const watchlist = payload.watchlist || WatchlistAction.nochange\r\n\r\n return init.wikiPage.edit(\r\n {\r\n summary,\r\n text,\r\n watchlist,\r\n },\r\n {\r\n minor,\r\n createonly,\r\n }\r\n )\r\n }\r\n\r\n private injectToolbox(ctx: InPageEdit) {\r\n ctx.toolbox.addButton({\r\n id: 'quick-edit',\r\n group: 'group1',\r\n index: 0,\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\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\" />\r\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\r\n <path d=\"M16 5l3 3\" />\r\n </svg>\r\n ) as HTMLElement,\r\n tooltip: 'Edit this page quickly',\r\n onClick: () => this.quickEdit(),\r\n })\r\n }\r\n\r\n private async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\r\n if (payload.revision) {\r\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\r\n } else if (payload.pageId) {\r\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\r\n } else if (payload.title) {\r\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\r\n }\r\n throw new Error('Invalid payload')\r\n }\r\n\r\n protected removeToolbox(ctx: InPageEdit) {\r\n ctx.toolbox.removeButton('quick-edit')\r\n }\r\n}\r\n"],"names":["WatchlistAction","_PluginQuickEditInArticleLinks_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickEditInArticleLinks","BasePlugin","ctx","mwConfig","wikiArticlePath","wikiBaseUrl","anchor","info","link","jsx","e","jsxs","el","href","hrefURL","params","action","title","section","revision","sectionNum","__decoratorStart","__decorateElement","__runInitializers","noop","_PluginQuickEdit_decorators","PluginQuickEdit","payload","outSideClose","watchList","editSummary","editMinor","options","modal","Fragment","ProgressBar","wikiPage","editForm","MBox","InputBox","RadioBox","CheckBox","submitButton","formData","sleep","error","oldStr","result","init","summary","text","minor","createonly","watchlist"],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- import { j as a, P as y } from "./index-CvhkVj_L.js";
2
- import { BasePlugin as S, Inject as j } from "./index.js";
3
- import { T as F } from "./index-BPsDFq9U.js";
4
- import { C as v, I as q } from "./InputBox-FIzJ-rPN.js";
5
- import { A as E } from "./ActionButton-ByMKIthQ.js";
6
- var I = Object.create, h = Object.defineProperty, B = Object.getOwnPropertyDescriptor, _ = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), k = (t) => {
7
- throw TypeError(t);
8
- }, C = (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 }), z = (t) => [, , , I(t?.[_("metadata")] ?? null)], D = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], b = (t) => t !== void 0 && typeof t != "function" ? k("Function expected") : t, O = (t, e, o, n, r) => ({ kind: D[t], name: e, metadata: n, addInitializer: (i) => o._ ? k("Already initialized") : r.push(b(i || null)) }), Q = (t, e) => C(e, _("metadata"), t[3]), N = (t, e, o, n) => {
9
- for (var r = 0, i = t[e >> 1], c = i && i.length; r < c; r++) i[r].call(o);
10
- return n;
11
- }, A = (t, e, o, n, r, i) => {
12
- var c, s, g, l = e & 7, f = !1, w = 0, P = t[w] || (t[w] = []), d = l && (r = r.prototype, l < 5 && (l > 3 || !f) && B(r, o));
13
- T(r, o);
14
- for (var m = n.length - 1; m >= 0; m--)
15
- g = O(l, o, s = {}, t[3], P), c = (0, n[m])(r, g), s._ = 1, b(c) && (r = c);
16
- return Q(t, r), d && h(r, o, d), f ? l ^ 4 ? i : d : r;
17
- }, M, p, x;
18
- M = [j(["modal", "sitemeta"])];
19
- class u extends (x = S) {
20
- constructor(e) {
21
- super(e, {}, "quick-move"), this.ctx = e, e.set("quickMove", this.quickMove.bind(this)), e.set("movePage", this.movePage.bind(this));
22
- }
23
- start() {
24
- this.ctx.inject(["toolbox"], (e) => {
25
- this.injectToolbox(e);
26
- });
27
- }
28
- injectToolbox(e) {
29
- const o = window.mw?.config.get("wgPageName") || "", n = window.mw?.config.get("wgIsProbablyEditable");
30
- e.toolbox.addButton({
31
- id: "quick-move",
32
- icon: /* @__PURE__ */ a(
33
- "svg",
34
- {
35
- xmlns: "http://www.w3.org/2000/svg",
36
- width: "24",
37
- height: "24",
38
- viewBox: "0 0 24 24",
39
- fill: "none",
40
- stroke: "currentColor",
41
- "stroke-width": "2",
42
- "stroke-linecap": "round",
43
- "stroke-linejoin": "round",
44
- class: "icon icon-tabler icons-tabler-outline icon-tabler-forms",
45
- children: [
46
- /* @__PURE__ */ a("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
47
- /* @__PURE__ */ a("path", { d: "M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3" }),
48
- /* @__PURE__ */ a("path", { d: "M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3" }),
49
- /* @__PURE__ */ a("path", { d: "M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7" }),
50
- /* @__PURE__ */ a("path", { d: "M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1" }),
51
- /* @__PURE__ */ a("path", { d: "M17 12h.01" }),
52
- /* @__PURE__ */ a("path", { d: "M13 12h.01" })
53
- ]
54
- }
55
- ),
56
- tooltip: "Quick Move",
57
- group: "group2",
58
- onClick: () => {
59
- this.quickMove(
60
- n ? {
61
- lockFromField: !0,
62
- from: o
63
- } : {}
64
- );
65
- }
66
- });
67
- }
68
- quickMove(e) {
69
- const o = this.ctx.modal.createObject({
70
- title: "Quick Move",
71
- content: /* @__PURE__ */ a(y, {}),
72
- className: "quick-move",
73
- sizeClass: "medium",
74
- center: !0
75
- }).init();
76
- let n = null;
77
- return o.setContent(
78
- /* @__PURE__ */ a(
79
- "form",
80
- {
81
- ref: (r) => n = r,
82
- style: {
83
- display: "flex",
84
- flexDirection: "column",
85
- gap: "1rem"
86
- },
87
- onSubmit: (r) => {
88
- r.preventDefault();
89
- const i = new FormData(n), c = {
90
- from: i.get("from"),
91
- to: i.get("to"),
92
- reason: i.get("reason") || "",
93
- movetalk: i.get("movetalk") === "on",
94
- movesubpages: i.get("movesubpages") === "on",
95
- noredirect: i.get("noredirect") === "on"
96
- };
97
- o.setLoadingState(!0), this.movePage(c).then(() => {
98
- location.reload();
99
- }).catch((s) => {
100
- o.setLoadingState(!1), this.ctx.modal.notify("error", {
101
- title: "Failed to move",
102
- content: s instanceof Error ? s.message : String(s)
103
- });
104
- });
105
- },
106
- children: [
107
- /* @__PURE__ */ a(
108
- F,
109
- {
110
- inputs: [
111
- {
112
- label: "Move from",
113
- name: "from",
114
- value: e?.from
115
- },
116
- {
117
- label: "Move to",
118
- name: "to",
119
- value: e?.to
120
- }
121
- ]
122
- }
123
- ),
124
- /* @__PURE__ */ a("div", { children: /* @__PURE__ */ a(v, { name: "movetalk", id: "movetalk", checked: e?.movetalk, children: "Move talk page" }) }),
125
- /* @__PURE__ */ a("div", { children: /* @__PURE__ */ a(v, { name: "movesubpages", id: "movesubpages", checked: e?.movesubpages, children: "Move subpage(s) (up to 100)" }) }),
126
- this.ctx.sitemeta.hasRight("suppressredirect") && /* @__PURE__ */ a("div", { children: /* @__PURE__ */ a(v, { name: "noredirect", id: "noredirect", checked: e?.noredirect, children: "Move without leaving a redirect" }) }),
127
- /* @__PURE__ */ a(q, { label: "Reason", id: "reason", name: "reason", value: e?.reason }),
128
- /* @__PURE__ */ a("div", { children: /* @__PURE__ */ a(E, { type: "primary", style: { width: "100%" }, children: "Move" }) })
129
- ]
130
- }
131
- )
132
- ), o.show();
133
- }
134
- async movePage(e) {
135
- const { from: o, to: n, reason: r = "", ...i } = e;
136
- if (!o || !n)
137
- throw new Error("From and to titles are required.");
138
- if (o === n)
139
- throw new Error("From and to titles cannot be the same.");
140
- return (await this.ctx.wikiPage.newFromTitle(o)).moveTo(n, r, i);
141
- }
142
- }
143
- p = z(x);
144
- u = A(p, 0, "PluginQuickMove", M, u);
145
- N(p, 1, u);
146
- export {
147
- u as PluginQuickMove
148
- };
149
- //# sourceMappingURL=index-Cq9xxVsu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Cq9xxVsu.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickMove: PluginQuickMove['quickMove']\r\n movePage: PluginQuickMove['movePage']\r\n }\r\n}\r\n\r\nexport interface MovePageOptions {\r\n from: string\r\n to: string\r\n reason?: string\r\n movetalk?: boolean\r\n movesubpages?: boolean\r\n noredirect?: boolean\r\n}\r\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\r\n lockFromField?: boolean\r\n lockToField?: boolean\r\n}\r\n\r\n@Inject(['modal', 'sitemeta'])\r\nexport class PluginQuickMove extends BasePlugin {\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-move')\r\n ctx.set('quickMove', this.quickMove.bind(this))\r\n ctx.set('movePage', this.movePage.bind(this))\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.injectToolbox(ctx)\r\n })\r\n }\r\n\r\n private injectToolbox(ctx: InPageEdit) {\r\n const curPageName = window.mw?.config.get('wgPageName') || ''\r\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\r\n ctx.toolbox.addButton({\r\n id: 'quick-move',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-forms\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\r\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\r\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\r\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\r\n <path d=\"M17 12h.01\" />\r\n <path d=\"M13 12h.01\" />\r\n </svg>\r\n ),\r\n tooltip: 'Quick Move',\r\n group: 'group2',\r\n onClick: () => {\r\n this.quickMove(\r\n canEdit\r\n ? {\r\n lockFromField: true,\r\n from: curPageName,\r\n }\r\n : {}\r\n )\r\n },\r\n })\r\n }\r\n\r\n quickMove(options?: Partial<QuickMoveOptions>) {\r\n const modal = this.ctx.modal\r\n .createObject({\r\n title: 'Quick Move',\r\n content: (<ProgressBar />) as HTMLElement,\r\n className: 'quick-move',\r\n sizeClass: 'medium',\r\n center: true,\r\n })\r\n .init()\r\n\r\n let formRef: HTMLFormElement | null = null\r\n modal.setContent(\r\n (\r\n <form\r\n ref={(el) => (formRef = el)}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n }}\r\n onSubmit={(e) => {\r\n e.preventDefault()\r\n const formData = new FormData(formRef!)\r\n const options = {\r\n from: formData.get('from') as string,\r\n to: formData.get('to') as string,\r\n reason: (formData.get('reason') as string) || '',\r\n movetalk: formData.get('movetalk') === 'on',\r\n movesubpages: formData.get('movesubpages') === 'on',\r\n noredirect: formData.get('noredirect') === 'on',\r\n }\r\n modal.setLoadingState(true)\r\n this.movePage(options)\r\n .then(() => {\r\n location.reload()\r\n })\r\n .catch((error) => {\r\n modal.setLoadingState(false)\r\n this.ctx.modal.notify('error', {\r\n title: 'Failed to move',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n })\r\n }}\r\n >\r\n <TwinSwapInput\r\n inputs={[\r\n {\r\n label: 'Move from',\r\n name: 'from',\r\n value: options?.from,\r\n },\r\n {\r\n label: 'Move to',\r\n name: 'to',\r\n value: options?.to,\r\n },\r\n ]}\r\n />\r\n <div>\r\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\r\n Move talk page\r\n </CheckBox>\r\n </div>\r\n <div>\r\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\r\n Move subpage(s) (up to 100)\r\n </CheckBox>\r\n </div>\r\n {this.ctx.sitemeta.hasRight('suppressredirect') && (\r\n <div>\r\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\r\n Move without leaving a redirect\r\n </CheckBox>\r\n </div>\r\n )}\r\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\r\n <div>\r\n <ActionButton type=\"primary\" style={{ width: '100%' }}>\r\n Move\r\n </ActionButton>\r\n </div>\r\n </form>\r\n ) as HTMLElement\r\n )\r\n\r\n return modal.show()\r\n }\r\n\r\n async movePage(options: MovePageOptions) {\r\n const { from, to, reason = '', ...rest } = options\r\n\r\n if (!from || !to) {\r\n throw new Error('From and to titles are required.')\r\n }\r\n if (from === to) {\r\n throw new Error('From and to titles cannot be the same.')\r\n }\r\n\r\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\r\n return wikiPage.moveTo(to, reason, rest)\r\n }\r\n}\r\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","ActionButton","from","to","reason","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-D-zQLFuZ.js","sources":["../src/plugins/preferences/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { IPEStorageItem, IPEStorageManager } from '@/services/StorageService'\r\n\r\ndeclare module '@/InPageEdit' {\r\n export interface InPageEdit {\r\n preferences: PluginPreferences\r\n }\r\n}\r\n\r\nexport interface InPageEditPreferenceUICategory {\r\n name: string\r\n label: string\r\n description?: string\r\n index?: number\r\n}\r\n\r\nexport interface InPageEditPreferenceUIRegistryItem {\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n category: string\r\n}\r\n\r\n@Inject(['sitemeta', 'storage'])\r\nexport class PluginPreferences extends BasePlugin {\r\n private db: IPEStorageManager<any>\r\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\r\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\r\n private _defaultPreferences: Record<string, any> = {}\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'preferences')\r\n this.db = ctx.storage.createDatabse<any>('preferences', Infinity)\r\n this.ctx.set('preferences', this)\r\n }\r\n\r\n async start() {\r\n this.defineCategory({\r\n name: 'general',\r\n label: 'General',\r\n description: 'General settings',\r\n })\r\n this.defineCategory({\r\n name: 'edit',\r\n label: 'Editing',\r\n description: 'Settings related to editing content',\r\n })\r\n this.defineCategory({\r\n name: 'about',\r\n label: 'About',\r\n description: 'About InPageEdit',\r\n index: 99,\r\n })\r\n\r\n this.registerCustomConfig(\r\n 'about',\r\n Schema.object({\r\n about: Schema.string()\r\n .role('html-info')\r\n .description(\r\n (\r\n <div className=\"prose\">\r\n <h2>✏️ InPageEdit NEXT</h2>\r\n <i>v{this.ctx.version}</i>\r\n <h2>Portal</h2>\r\n <div style=\"display: flex; flex-direction: column; gap: 1rem\">\r\n <ActionButton\r\n href=\"https://www.ipe.wiki\"\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Official Website & Help Center\r\n </ActionButton>\r\n <ActionButton\r\n href=\"https://www.ipe.wiki/update/\"\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Update Logs\r\n </ActionButton>\r\n </div>\r\n <h2>Join us</h2>\r\n <ul>\r\n <li>\r\n <strong>GitHub</strong>:{' '}\r\n <a href=\"https://github.com/inpageedit/inpageedit-next\" target=\"_blank\">\r\n inpageedit/inpageedit-next\r\n </a>\r\n </li>\r\n <li>\r\n <strong>QQ Group</strong>: 1026023666\r\n </li>\r\n </ul>\r\n <hr />\r\n <p>🚀 Modular, Extensible Supercharged Plugin for MediaWiki.</p>\r\n <p>InPageEdit-NEXT Copyright © 2025-present dragon-fish</p>\r\n </div>\r\n ).outerHTML\r\n )\r\n .default(''),\r\n }).description(''),\r\n 'about',\r\n {}\r\n )\r\n\r\n import('./ui/index').then((module) => {\r\n const fork = this.ctx.plugin(module.PluginPreferencesUI)\r\n this.addDisposeHandler(() => {\r\n fork.dispose()\r\n })\r\n })\r\n }\r\n\r\n get<T = any>(key: string, fallback?: () => T | Promise<T>): Promise<T | null> {\r\n fallback ||= () => {\r\n const defaultValue = this.getDefaultValue(key)\r\n this.logger.info('default value used', defaultValue)\r\n return defaultValue as T\r\n }\r\n const value = this.db.get(key, undefined, fallback)\r\n return value\r\n }\r\n\r\n getDefaultValue(key: string) {\r\n return (this._defaultPreferences[key] ??= this.loadDefaultConfigs()[key])\r\n }\r\n\r\n set<T = any>(key: string, value: T): Promise<IPEStorageItem<T> | void> {\r\n const defaultValue = this.getDefaultValue(key)\r\n if (value === defaultValue) {\r\n return this.db.delete(key)\r\n } else {\r\n return this.db.set(key, value)\r\n }\r\n }\r\n\r\n async getAll() {\r\n const data = this.loadDefaultConfigs()\r\n await this.db.iterate((value: IPEStorageItem, key: string) => {\r\n data[key] = value\r\n })\r\n return data\r\n }\r\n\r\n private loadDefaultConfigs() {\r\n const data = {} as Record<string, any>\r\n this.getConfigRegistries().forEach((item) => {\r\n item.defaults &&\r\n Object.entries(item.defaults).forEach(([key, val]) => {\r\n data[key] = val\r\n this._defaultPreferences[key] = val\r\n })\r\n })\r\n return data\r\n }\r\n\r\n registerCustomConfig(\r\n name: string,\r\n schema: Schema,\r\n category: string,\r\n defaults: Record<string, any>\r\n ) {\r\n this.customRegistries.push({\r\n name,\r\n schema,\r\n category,\r\n defaults,\r\n })\r\n return this\r\n }\r\n\r\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\r\n return Array.from(this.ctx.registry.entries())\r\n .map<{\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n }>(([plugin, fork]) => {\r\n if (plugin === null) {\r\n return {\r\n name: 'root',\r\n schema: (InPageEdit as any)?.PreferencesSchema || null,\r\n defaults: (InPageEdit as any)?.PreferencesDefaults || {},\r\n }\r\n } else {\r\n return {\r\n name: plugin.name,\r\n schema: (plugin as any)?.PreferencesSchema || null,\r\n defaults: (plugin as any)?.PreferencesDefaults || {},\r\n }\r\n }\r\n })\r\n .filter((item) => item.schema !== null)\r\n .map((item) => {\r\n return {\r\n ...item,\r\n category: item.schema.meta.category || 'general',\r\n }\r\n })\r\n .concat(this.customRegistries)\r\n .filter((item) => !category || item.category === category)\r\n }\r\n\r\n defineCategory(category: InPageEditPreferenceUICategory) {\r\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\r\n if (index < 0) {\r\n this.categoryDefinitions.push(category)\r\n } else {\r\n this.categoryDefinitions[index] = category\r\n }\r\n this.categoryDefinitions.sort((a, b) => {\r\n return (a.index ?? 0) - (b.index ?? 0)\r\n })\r\n return this\r\n }\r\n\r\n getConfigCategories() {\r\n return this.categoryDefinitions\r\n }\r\n}\r\n"],"names":["_PluginPreferences_decorators","_init","_a","Inject","PluginPreferences","BasePlugin","ctx","Schema","jsxs","jsx","ActionButton","module","fork","key","fallback","defaultValue","value","data","item","val","name","schema","category","defaults","plugin","InPageEdit","index","tab","a","b","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- import { j as l, P as q } from "./index-CvhkVj_L.js";
2
- import { BasePlugin as j, Inject as E } from "./index.js";
3
- var y = Object.create, _ = Object.defineProperty, O = Object.getOwnPropertyDescriptor, k = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), m = (e) => {
4
- throw TypeError(e);
5
- }, Q = (e, t, r) => t in e ? _(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, S = (e, t) => _(e, "name", { value: t, configurable: !0 }), z = (e) => [, , , y(e?.[k("metadata")] ?? null)], I = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], x = (e) => e !== void 0 && typeof e != "function" ? m("Function expected") : e, B = (e, t, r, a, i) => ({ kind: I[e], name: t, metadata: a, addInitializer: (c) => r._ ? m("Already initialized") : i.push(x(c || null)) }), C = (e, t) => Q(t, k("metadata"), e[3]), N = (e, t, r, a) => {
6
- for (var i = 0, c = e[t >> 1], o = c && c.length; i < o; i++) c[i].call(r);
7
- return a;
8
- }, T = (e, t, r, a, i, c) => {
9
- var o, n, w, s = t & 7, h = !1, P = 0, g = e[P] || (e[P] = []), d = s && (i = i.prototype, s < 5 && (s > 3 || !h) && O(i, r));
10
- S(i, r);
11
- for (var u = a.length - 1; u >= 0; u--)
12
- w = B(s, r, n = {}, e[3], g), o = (0, a[u])(i, w), n._ = 1, x(o) && (i = o);
13
- return C(e, i), d && _(i, r, d), h ? s ^ 4 ? c : d : i;
14
- }, f, p, b;
15
- f = [E(["api", "wikiPage", "modal"])];
16
- class v extends (b = j) {
17
- constructor(t) {
18
- super(t, {}, "quickPreview"), this.ctx = t;
19
- }
20
- start() {
21
- this.ctx.set("quickPreview", this.quickPreview.bind(this)), this.ctx.on("quickEdit/wikiPage", this.injectQuickEdit.bind(this));
22
- }
23
- stop() {
24
- this.ctx.off("quickEdit/wikiPage", this.injectQuickEdit.bind(this));
25
- }
26
- injectQuickEdit({ ctx: t, modal: r, wikiPage: a }) {
27
- r.setButtons([
28
- {
29
- label: "Preview",
30
- side: "left",
31
- className: "btn btn-secondary",
32
- method: () => {
33
- this.quickPreview(
34
- r.get$content().find("textarea.editArea").val() || "",
35
- void 0,
36
- a
37
- );
38
- }
39
- }
40
- ]);
41
- }
42
- async quickPreview(t, r, a) {
43
- a ||= this.ctx.wikiPage.newBlankPage({
44
- title: "API"
45
- });
46
- const i = this.ctx.modal.createObject({
47
- className: "in-page-edit ipe-quickPreview",
48
- sizeClass: "large"
49
- }).init();
50
- i.setTitle("Preview loading..."), i.setContent(
51
- /* @__PURE__ */ l("section", { children: /* @__PURE__ */ l(q, {}) })
52
- ), i.show(), this.ctx.emit("quickPreview/showModal", {
53
- ctx: this.ctx,
54
- text: t,
55
- modal: i,
56
- wikiPage: a
57
- });
58
- const {
59
- data: { parse: c }
60
- } = await a.preview(t, r);
61
- i.setTitle(`Preview - ${c.title}`);
62
- let o = null;
63
- i.setContent(
64
- /* @__PURE__ */ l("section", { children: /* @__PURE__ */ l(
65
- "div",
66
- {
67
- ref: (n) => o = n,
68
- className: "mw-parser-output",
69
- innerHTML: c.text
70
- }
71
- ) })
72
- ), window.mw?.hook("wikipage.content").fire($(o)), this.ctx.emit("quickPreview/loaded", {
73
- ctx: this.ctx,
74
- modal: i,
75
- wikiPage: a,
76
- text: t,
77
- parseData: c
78
- });
79
- }
80
- }
81
- p = z(b);
82
- v = T(p, 0, "PluginQuickPreview", f, v);
83
- N(p, 1, v);
84
- export {
85
- v as PluginQuickPreview
86
- };
87
- //# sourceMappingURL=index-HyxA2rYz.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-HyxA2rYz.js","sources":["../src/plugins/quick-preview/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\r\nimport { type QuickEditInitPayload } from '@/plugins/quick-edit'\r\nimport { WikiPage } from '@/models/WikiPage'\r\nimport { MwApiParams } from 'wiki-saikou'\r\nimport { PageParseData } from '@/models/WikiPage/types/PageParseData'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickPreview: PluginQuickPreview['quickPreview']\r\n }\r\n interface Events {\r\n 'quickPreview/showModal'(payload: {\r\n ctx: InPageEdit\r\n text: string\r\n modal: SsiModal\r\n wikiPage: WikiPage\r\n }): void\r\n 'quickPreview/loaded'(payload: {\r\n ctx: InPageEdit\r\n modal: SsiModal\r\n wikiPage: WikiPage\r\n text: string\r\n parseData: PageParseData\r\n }): void\r\n }\r\n}\r\n\r\n@Inject(['api', 'wikiPage', 'modal'])\r\nexport class PluginQuickPreview extends BasePlugin {\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quickPreview')\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.set('quickPreview', this.quickPreview.bind(this))\r\n this.ctx.on('quickEdit/wikiPage', this.injectQuickEdit.bind(this))\r\n }\r\n\r\n protected stop(): Promise<void> | void {\r\n this.ctx.off('quickEdit/wikiPage', this.injectQuickEdit.bind(this))\r\n }\r\n\r\n private injectQuickEdit({ ctx, modal, wikiPage }: QuickEditInitPayload) {\r\n modal.setButtons([\r\n {\r\n label: 'Preview',\r\n side: 'left',\r\n className: 'btn btn-secondary',\r\n method: () => {\r\n this.quickPreview(\r\n (modal.get$content().find('textarea.editArea').val() as string) || '',\r\n undefined,\r\n wikiPage\r\n )\r\n },\r\n },\r\n ])\r\n }\r\n\r\n async quickPreview(text: string, params?: MwApiParams, wikiPage?: WikiPage) {\r\n wikiPage ||= this.ctx.wikiPage.newBlankPage({\r\n title: 'API',\r\n })\r\n\r\n const modal = this.ctx.modal\r\n .createObject({\r\n className: 'in-page-edit ipe-quickPreview',\r\n sizeClass: 'large',\r\n })\r\n .init()\r\n modal.setTitle('Preview loading...')\r\n modal.setContent(\r\n (\r\n <section>\r\n <ProgressBar />\r\n </section>\r\n ) as HTMLElement\r\n )\r\n modal.show()\r\n this.ctx.emit('quickPreview/showModal', {\r\n ctx: this.ctx,\r\n text,\r\n modal,\r\n wikiPage,\r\n })\r\n\r\n const {\r\n data: { parse },\r\n } = await wikiPage.preview(text, params)\r\n modal.setTitle(`Preview - ${parse.title}`)\r\n let outputRef: HTMLElement | null = null\r\n modal.setContent(\r\n (\r\n <section>\r\n <div\r\n ref={(el) => (outputRef = el)}\r\n className=\"mw-parser-output\"\r\n innerHTML={parse.text}\r\n ></div>\r\n </section>\r\n ) as HTMLElement\r\n )\r\n window.mw?.hook('wikipage.content').fire($(outputRef!))\r\n this.ctx.emit('quickPreview/loaded', {\r\n ctx: this.ctx,\r\n modal,\r\n wikiPage,\r\n text,\r\n parseData: parse,\r\n })\r\n }\r\n}\r\n"],"names":["_PluginQuickPreview_decorators","_init","_a","Inject","PluginQuickPreview","BasePlugin","ctx","modal","wikiPage","text","params","jsx","ProgressBar","parse","outputRef","el","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;;;;;;;;;GAAAA,GAAAC,GAAAC;AA2BAF,IAAA,CAACG,EAAO,CAAC,OAAO,YAAY,OAAO,CAAC,CAAA;AAC7B,MAAMC,WAA2BF,IAAAG,GAAW;AAAA,EACjD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,cAAc,GADZ,KAAA,MAAAA;AAAA,EAEnB;AAAA,EAEU,QAA8B;AACtC,SAAK,IAAI,IAAI,gBAAgB,KAAK,aAAa,KAAK,IAAI,CAAC,GACzD,KAAK,IAAI,GAAG,sBAAsB,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACnE;AAAA,EAEU,OAA6B;AACrC,SAAK,IAAI,IAAI,sBAAsB,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACpE;AAAA,EAEQ,gBAAgB,EAAE,KAAAA,GAAK,OAAAC,GAAO,UAAAC,KAAkC;AACtE,IAAAD,EAAM,WAAW;AAAA,MACf;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ,MAAM;AACZ,eAAK;AAAA,YACFA,EAAM,YAAA,EAAc,KAAK,mBAAmB,EAAE,SAAoB;AAAA,YACnE;AAAA,YACAC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AAAA,EAEA,MAAM,aAAaC,GAAcC,GAAsBF,GAAqB;AAC1E,IAAAA,MAAa,KAAK,IAAI,SAAS,aAAa;AAAA,MAC1C,OAAO;AAAA,IAAA,CACR;AAED,UAAMD,IAAQ,KAAK,IAAI,MACpB,aAAa;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,IAAA,CACZ,EACA,KAAA;AACH,IAAAA,EAAM,SAAS,oBAAoB,GACnCA,EAAM;AAAA,MAEF,gBAAAI,EAAC,WAAA,EACC,UAAA,gBAAAA,EAACC,GAAA,CAAA,CAAY,EAAA,CACf;AAAA,IAAA,GAGJL,EAAM,KAAA,GACN,KAAK,IAAI,KAAK,0BAA0B;AAAA,MACtC,KAAK,KAAK;AAAA,MACV,MAAAE;AAAA,MACA,OAAAF;AAAA,MACA,UAAAC;AAAA,IAAA,CACD;AAED,UAAM;AAAA,MACJ,MAAM,EAAE,OAAAK,EAAA;AAAA,IAAM,IACZ,MAAML,EAAS,QAAQC,GAAMC,CAAM;AACvC,IAAAH,EAAM,SAAS,aAAaM,EAAM,KAAK,EAAE;AACzC,QAAIC,IAAgC;AACpC,IAAAP,EAAM;AAAA,wBAED,WAAA,EACC,UAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,CAACI,MAAQD,IAAYC;AAAA,UAC1B,WAAU;AAAA,UACV,WAAWF,EAAM;AAAA,QAAA;AAAA,MAAA,EAClB,CACH;AAAA,IAAA,GAGJ,OAAO,IAAI,KAAK,kBAAkB,EAAE,KAAK,EAAEC,CAAU,CAAC,GACtD,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACnC,KAAK,KAAK;AAAA,MACV,OAAAP;AAAA,MACA,UAAAC;AAAA,MACA,MAAAC;AAAA,MACA,WAAWI;AAAA,IAAA,CACZ;AAAA,EACH;AACF;AAnFOZ,IAAAe,EAAAd,CAAA;AAAME,IAANa,8BADPjB,GACaI,CAAA;AAANc,EAAAjB,GAAA,GAAMG,CAAA;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-X1X416tZ.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickRedirect: PluginQuickRedirect['quickRedirect']\r\n redirectPage: PluginQuickRedirect['redirectPage']\r\n }\r\n}\r\n\r\nexport interface RedirectPageOptions {\r\n from: string\r\n to: string\r\n reason?: string\r\n overwrite?: boolean\r\n}\r\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\r\n\r\nexport class PluginQuickRedirect extends BasePlugin {\r\n static readonly inject = ['api', 'wikiPage', 'modal']\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-redirect')\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.set('quickRedirect', this.quickRedirect.bind(this))\r\n this.ctx.set('redirectPage', this.redirectPage.bind(this))\r\n\r\n const curPageName = window.mw?.config.get('wgPageName') || ''\r\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.ctx = ctx\r\n ctx.toolbox.addButton({\r\n id: 'quick-redirect',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\r\n <path d=\"M9 17l3 -3l-3 -3\" />\r\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\r\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\r\n </svg>\r\n ) as HTMLElement,\r\n tooltip: 'Quick Redirect',\r\n group: 'group1',\r\n onClick: () => {\r\n this.quickRedirect(\r\n canEdit\r\n ? {\r\n to: curPageName,\r\n }\r\n : {}\r\n )\r\n },\r\n })\r\n this.addDisposeHandler((ctx) => {\r\n ctx.toolbox.removeButton('quick-redirect')\r\n })\r\n })\r\n }\r\n\r\n protected stop(): Promise<void> | void {}\r\n\r\n quickRedirect(options?: Partial<QuickRedirectOptions>) {\r\n const modal = this.ctx.modal\r\n .createObject({\r\n title: 'Quick Redirect',\r\n content: (<ProgressBar />) as HTMLElement,\r\n className: 'quick-redirect',\r\n sizeClass: 'medium',\r\n center: true,\r\n })\r\n .init()\r\n\r\n let formRef: HTMLFormElement | null = null\r\n modal.setContent(\r\n (\r\n <form\r\n ref={(el) => (formRef = el)}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n }}\r\n onSubmit={(e) => {\r\n e.preventDefault()\r\n const formData = new FormData(formRef!)\r\n const options = {\r\n from: formData.get('from') as string,\r\n to: formData.get('to') as string,\r\n reason: (formData.get('reason') as string) || '',\r\n overwrite: formData.get('overwrite') === 'on',\r\n }\r\n modal.setLoadingState(true)\r\n this.redirectPage(options)\r\n .then((res) => {\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Redirect successful',\r\n content: 'The redirect has been created.',\r\n })\r\n })\r\n .catch((error) => {\r\n modal.setLoadingState(false)\r\n this.ctx.modal.notify('error', {\r\n title: 'Failed to redirect',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n })\r\n }}\r\n >\r\n <TwinSwapInput\r\n inputs={[\r\n {\r\n label: 'From',\r\n name: 'from',\r\n value: options?.from,\r\n },\r\n {\r\n label: 'To',\r\n name: 'to',\r\n value: options?.to,\r\n },\r\n ]}\r\n />\r\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\r\n <div>\r\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\r\n Force create redirect even if the from page already exists\r\n </CheckBox>\r\n </div>\r\n <ActionButton type=\"primary\" style={{ width: '100%' }}>\r\n Create Redirect\r\n </ActionButton>\r\n </form>\r\n ) as HTMLFormElement\r\n )\r\n\r\n return modal.show()\r\n }\r\n\r\n async redirectPage(options: RedirectPageOptions) {\r\n const { from, to, reason = '', overwrite = false } = options\r\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\r\n title: from,\r\n })\r\n const content = `#REDIRECT [[:${to}]]`\r\n const res = await wikiPage.edit(\r\n {\r\n text: content,\r\n summary: reason,\r\n },\r\n {\r\n createonly: !overwrite,\r\n }\r\n )\r\n if (res.data?.errors) {\r\n throw new Error(res.data.errors[0].text, { cause: res })\r\n }\r\n return res\r\n }\r\n}\r\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","ActionButton","from","to","reason","overwrite","wikiPage","content"],"mappings":";;;;;AAiBO,MAAMA,UAA4BC,EAAW;AAAA,EAGlD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,gBAAgB,GADd,KAAA,MAAAA;AAAA,EAEnB;AAAA,EAJA,OAAA;AAAA,SAAgB,SAAS,CAAC,OAAO,YAAY,OAAO;AAAA,EAAA;AAAA,EAM1C,QAA8B;AACtC,SAAK,IAAI,IAAI,iBAAiB,KAAK,cAAc,KAAK,IAAI,CAAC,GAC3D,KAAK,IAAI,IAAI,gBAAgB,KAAK,aAAa,KAAK,IAAI,CAAC;AAEzD,UAAMC,IAAc,OAAO,IAAI,OAAO,IAAI,YAAY,KAAK,IACrDC,IAAU,OAAO,IAAI,OAAO,IAAI,sBAAsB;AAC5D,SAAK,IAAI,OAAO,CAAC,SAAS,GAAG,CAACF,MAAQ;AACpC,WAAK,MAAMA,GACXA,EAAI,QAAQ,UAAU;AAAA,QACpB,IAAI;AAAA,QACJ,MACEG,gBAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,YAChB,OAAM;AAAA,YAEN,UAAA;AAAA,cAAA,gBAAAC,EAAC,UAAK,QAAO,QAAO,GAAE,iBAAgB,MAAK,QAAO;AAAA,cAClD,gBAAAA,EAAC,QAAA,EAAK,GAAE,4BAAA,CAA4B;AAAA,cACpC,gBAAAA,EAAC,QAAA,EAAK,GAAE,mBAAA,CAAmB;AAAA,cAC3B,gBAAAA,EAAC,QAAA,EAAK,GAAE,0BAAA,CAA0B;AAAA,cAClC,gBAAAA,EAAC,QAAA,EAAK,GAAE,uDAAA,CAAuD;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGnE,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS,MAAM;AACb,eAAK;AAAA,YACHF,IACI;AAAA,cACE,IAAID;AAAA,YAAA,IAEN,CAAA;AAAA,UAAC;AAAA,QAET;AAAA,MAAA,CACD,GACD,KAAK,kBAAkB,CAACD,MAAQ;AAC9BA,QAAAA,EAAI,QAAQ,aAAa,gBAAgB;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEU,OAA6B;AAAA,EAAC;AAAA,EAExC,cAAcK,GAAyC;AACrD,UAAMC,IAAQ,KAAK,IAAI,MACpB,aAAa;AAAA,MACZ,OAAO;AAAA,MACP,2BAAWC,GAAA,EAAY;AAAA,MACvB,WAAW;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA,CACT,EACA,KAAA;AAEH,QAAIC,IAAkC;AACtC,WAAAF,EAAM;AAAA,MAEFH,gBAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,CAACM,MAAQD,IAAUC;AAAA,UACxB,OAAO;AAAA,YACL,SAAS;AAAA,YACT,eAAe;AAAA,YACf,KAAK;AAAA,UAAA;AAAA,UAEP,UAAU,CAACC,MAAM;AACf,YAAAA,EAAE,eAAA;AACF,kBAAMC,IAAW,IAAI,SAASH,CAAQ,GAChCH,IAAU;AAAA,cACd,MAAMM,EAAS,IAAI,MAAM;AAAA,cACzB,IAAIA,EAAS,IAAI,IAAI;AAAA,cACrB,QAASA,EAAS,IAAI,QAAQ,KAAgB;AAAA,cAC9C,WAAWA,EAAS,IAAI,WAAW,MAAM;AAAA,YAAA;AAE3C,YAAAL,EAAM,gBAAgB,EAAI,GAC1B,KAAK,aAAaD,CAAO,EACtB,KAAK,CAACO,MAAQ;AACb,cAAAN,EAAM,MAAA,GACN,KAAK,IAAI,MAAM,OAAO,WAAW;AAAA,gBAC/B,OAAO;AAAA,gBACP,SAAS;AAAA,cAAA,CACV;AAAA,YACH,CAAC,EACA,MAAM,CAACO,MAAU;AAChB,cAAAP,EAAM,gBAAgB,EAAK,GAC3B,KAAK,IAAI,MAAM,OAAO,SAAS;AAAA,gBAC7B,OAAO;AAAA,gBACP,SAASO,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK;AAAA,cAAA,CAC/D;AAAA,YACH,CAAC;AAAA,UACL;AAAA,UAEA,UAAA;AAAA,YAAA,gBAAAT;AAAA,cAACU;AAAA,cAAA;AAAA,gBACC,QAAQ;AAAA,kBACN;AAAA,oBACE,OAAO;AAAA,oBACP,MAAM;AAAA,oBACN,OAAOT,GAAS;AAAA,kBAAA;AAAA,kBAElB;AAAA,oBACE,OAAO;AAAA,oBACP,MAAM;AAAA,oBACN,OAAOA,GAAS;AAAA,kBAAA;AAAA,gBAClB;AAAA,cACF;AAAA,YAAA;AAAA,YAEF,gBAAAD,EAACW,GAAA,EAAS,OAAM,UAAS,IAAG,UAAS,MAAK,UAAS,OAAOV,GAAS,OAAA,CAAQ;AAAA,YAC3E,gBAAAD,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACY,GAAA,EAAS,MAAK,aAAY,IAAG,aAAY,SAASX,GAAS,WAAW,UAAA,6DAAA,CAEvE,GACF;AAAA,YACA,gBAAAD,EAACa,KAAa,MAAK,WAAU,OAAO,EAAE,OAAO,OAAA,GAAU,UAAA,kBAAA,CAEvD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAIGX,EAAM,KAAA;AAAA,EACf;AAAA,EAEA,MAAM,aAAaD,GAA8B;AAC/C,UAAM,EAAE,MAAAa,GAAM,IAAAC,GAAI,QAAAC,IAAS,IAAI,WAAAC,IAAY,OAAUhB,GAC/CiB,IAAW,MAAM,KAAK,IAAI,SAAS,aAAa;AAAA,MACpD,OAAOJ;AAAA,IAAA,CACR,GACKK,IAAU,gBAAgBJ,CAAE,MAC5BP,IAAM,MAAMU,EAAS;AAAA,MACzB;AAAA,QACE,MAAMC;AAAA,QACN,SAASH;AAAA,MAAA;AAAA,MAEX;AAAA,QACE,YAAY,CAACC;AAAA,MAAA;AAAA,IACf;AAEF,QAAIT,EAAI,MAAM;AACZ,YAAM,IAAI,MAAMA,EAAI,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,OAAOA,GAAK;AAEzD,WAAOA;AAAA,EACT;AACF;"}
@@ -1,36 +0,0 @@
1
- import { InPageEdit } from '../InPageEdit';
2
- type LibSsiModal = typeof ssi_modal;
3
- declare module '../InPageEdit' {
4
- interface InPageEdit {
5
- modal: LibSsiModal;
6
- }
7
- interface Events {
8
- 'modal/show'(payload: {
9
- modal: SsiModal;
10
- }): void;
11
- 'modal/close'(payload: {
12
- modal: SsiModal;
13
- }): void;
14
- }
15
- }
16
- declare global {
17
- namespace SsiModal {
18
- interface SsiModal {
19
- /**
20
- * Toggle a visual loading overlay & disable buttons inside the modal
21
- */
22
- setLoadingState(state: boolean): void;
23
- }
24
- }
25
- }
26
- export declare class SsiModalService {
27
- ctx: InPageEdit;
28
- static readonly inject: string[];
29
- private modal?;
30
- constructor(ctx: InPageEdit);
31
- protected start(): void | Promise<void>;
32
- get logger(): import('../InPageEdit').Logger;
33
- protected stop(): void | Promise<void>;
34
- hackSsiModal(ssiModalLib: LibSsiModal): SsiModal.ssi_modal;
35
- }
36
- export {};
@@ -1,106 +0,0 @@
1
- /**
2
- * Browser Logger — tiny extensible logger for the browser.
3
- *
4
- * Goals:
5
- * - Support `new Logger({...})` AND callable instances: `logger('group', opts?)`.
6
- * - Log levels with threshold filtering; per-call override via `{ print: true }`.
7
- * - Prefix (app name) and nested groups with colorized labels (CSS `%c`).
8
- * - Deterministic colors per label; overrideable, last-set wins.
9
- * - Custom levels (e.g., success, debug) with `logger.defineLevel(...)`.
10
- * - Extensible via lightweight hooks.
11
- *
12
- * Usage:
13
- * const logger = new Logger({ level: 2, name: 'MyApp', color: 'green' });
14
- * logger.info('message', { any: 'value' });
15
- * const group = logger('group', { color: 'blue' });
16
- * group.warn('message');
17
- * logger.defineLevel('success', { rank: 1, label: 'S', method: 'info' });
18
- * logger.success('Saved!', { id: 123 }, { print: true });
19
- */
20
- export type ConsoleMethod = 'log' | 'info' | 'warn' | 'error';
21
- export interface LevelDef {
22
- /** Severity rank. Lower = less severe. Only messages with rank >= logger.level print, unless per-call {print:true}. */
23
- rank: number;
24
- /** Badge shown like [I], [W]. */
25
- label?: string;
26
- /** console method used for emission. */
27
- method?: ConsoleMethod;
28
- }
29
- export declare enum LoggerLevel {
30
- debug = -1,
31
- log = 0,
32
- info = 1,
33
- warn = 2,
34
- error = 3,
35
- silent = 4
36
- }
37
- export interface LoggerOptions {
38
- /** Minimum severity to print: 0 log, 1 info, 2 warn, 3 error. */
39
- level?: LoggerLevel | number;
40
- /** App prefix. Can be empty string to omit. */
41
- name?: string;
42
- /** CSS color for the prefix. If omitted, deterministic color will be chosen. */
43
- color?: string;
44
- /** Quick on/off switch. */
45
- enabled?: boolean;
46
- /** Optional custom levels at construction time. */
47
- levels?: Record<string, LevelDef>;
48
- }
49
- export interface GroupOptions {
50
- /** CSS color for the group label. */
51
- color?: string;
52
- }
53
- export interface LogCallOptions {
54
- /** Force printing this call even if below the threshold. */
55
- print?: boolean;
56
- }
57
- export interface Hooks {
58
- /** Called right before emitting. Return false to cancel. */
59
- beforeEmit?: (payload: EmitPayload) => boolean | void;
60
- /** Called after a successful emit. */
61
- afterEmit?: (payload: EmitPayload) => void;
62
- }
63
- export interface EmitPayload {
64
- level: string;
65
- rank: number;
66
- method: ConsoleMethod;
67
- prefix?: string;
68
- groupPath: string[];
69
- args: unknown[];
70
- enabled: boolean;
71
- willPrint: boolean;
72
- }
73
- export interface LoggerInstance {
74
- readonly isLogger: true;
75
- /** Current threshold. Set like: logger.level = 2 */
76
- level: number;
77
- /** Toggle output. */
78
- enabled: boolean;
79
- /** Prefix name (app). */
80
- name?: string;
81
- /** Explicit prefix color. */
82
- color?: string;
83
- log: (...args: unknown[]) => void;
84
- info: (...args: unknown[]) => void;
85
- warn: (...args: unknown[]) => void;
86
- error: (...args: unknown[]) => void;
87
- /** Emit at a specific level name. */
88
- at: (levelName: string, ...args: unknown[]) => void;
89
- /** Define or override a level and create a convenience method. */
90
- defineLevel: (name: string, def: LevelDef) => void;
91
- /** Return a child logger under a group (also available via calling the instance). */
92
- group: (label: string, opts?: GroupOptions) => Logger;
93
- /** Register hooks. Any missing callbacks keep their previous values. */
94
- setHooks: (hooks: Hooks) => void;
95
- /** Assign or override colors for labels (prefix/groups). */
96
- setLabelColor: (label: string, color: string) => void;
97
- }
98
- export interface LoggerCallable {
99
- (label: string, opts?: GroupOptions): Logger;
100
- }
101
- export type Logger = LoggerInstance & LoggerCallable;
102
- export declare const Logger: {
103
- new (opts?: LoggerOptions): Logger;
104
- /** Helper factory without `new` */
105
- create: (opts?: LoggerOptions) => Logger;
106
- };