@inpageedit/core 0.12.0 → 0.12.1
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.
- package/LICENSE +20 -20
- package/dist/IconQuickEdit-CMCQncyj.js.map +1 -1
- package/dist/InputBox-nQKtiWtZ.js +30 -0
- package/dist/InputBox-nQKtiWtZ.js.map +1 -0
- package/dist/PluginPrefSync-Ziogy_o-.js +339 -0
- package/dist/PluginPrefSync-Ziogy_o-.js.map +1 -0
- package/dist/PluginStoreApp-Bnvyl-Oc.js +452 -0
- package/dist/PluginStoreApp-Bnvyl-Oc.js.map +1 -0
- package/dist/Preferences-DS4-CFWe.js.map +1 -1
- package/dist/components/index.js +6 -7
- package/dist/components/index.js.map +1 -1
- package/dist/{index-CYc6LH26.js → index-B3FUDhxl.js} +2 -2
- package/dist/{index-CYc6LH26.js.map → index-B3FUDhxl.js.map} +1 -1
- package/dist/{index-DEav9Ptt.js → index-B3YJdjxo.js} +128 -132
- package/dist/index-B3YJdjxo.js.map +1 -0
- package/dist/{index-Bv7Dw5eO.js → index-BRjEc8b8.js} +2 -2
- package/dist/{index-Bv7Dw5eO.js.map → index-BRjEc8b8.js.map} +1 -1
- package/dist/{index-CZXxH2-9.js → index-Bd70aDMT.js} +6 -7
- package/dist/{index-CZXxH2-9.js.map → index-Bd70aDMT.js.map} +1 -1
- package/dist/{index-B5DtUqkK.js → index-BvuaLEFc.js} +3 -4
- package/dist/{index-B5DtUqkK.js.map → index-BvuaLEFc.js.map} +1 -1
- package/dist/index-CG38LlAh.js.map +1 -1
- package/dist/index-CM_6yF2v.js.map +1 -1
- package/dist/{index-D4uwfUZL.js → index-Ccr3YhkP.js} +2 -2
- package/dist/{index-D4uwfUZL.js.map → index-Ccr3YhkP.js.map} +1 -1
- package/dist/{index-CPoUaSMw.js → index-D5zX93bn.js} +39 -40
- package/dist/index-D5zX93bn.js.map +1 -0
- package/dist/index-DD5CVCfD.js.map +1 -1
- package/dist/{index-BXaiDKnr.js → index-DgQNTfPR.js} +15 -14
- package/dist/index-DgQNTfPR.js.map +1 -0
- package/dist/{index-CJFePavo.js → index-Dnmv-xDn.js} +2 -2
- package/dist/{index-CJFePavo.js.map → index-Dnmv-xDn.js.map} +1 -1
- package/dist/{index-hSl8LzNb.js → index-eARjMi7f.js} +5 -6
- package/dist/index-eARjMi7f.js.map +1 -0
- package/dist/{index-Ckozkp6W.js → index-zHTGCjfF.js} +2 -2
- package/dist/{index-Ckozkp6W.js.map → index-zHTGCjfF.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
- package/dist/models/WikiPage/index.d.ts +5 -1
- package/dist/noop-ClDc6zv4.js.map +1 -1
- package/dist/plugins/plugin-store/index.d.ts +9 -12
- package/dist/style.css +1 -1
- package/dist/{vueHooks-D0uVqbO-.js → vueHooks-l04s8cIl.js} +1112 -1080
- package/dist/{vueHooks-D0uVqbO-.js.map → vueHooks-l04s8cIl.js.map} +1 -1
- package/lib/index.umd.js +15 -11
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/dist/CheckBox-Bc79KBEB.js +0 -13
- package/dist/CheckBox-Bc79KBEB.js.map +0 -1
- package/dist/InputBox-DZAdyZ4B.js +0 -22
- package/dist/InputBox-DZAdyZ4B.js.map +0 -1
- package/dist/PluginPrefSync-BPQkNtX8.js +0 -292
- package/dist/PluginPrefSync-BPQkNtX8.js.map +0 -1
- package/dist/PluginStoreApp-Cxspe6t8.js +0 -158
- package/dist/PluginStoreApp-Cxspe6t8.js.map +0 -1
- package/dist/index-BXaiDKnr.js.map +0 -1
- package/dist/index-CB7TltEb.js +0 -297
- package/dist/index-CB7TltEb.js.map +0 -1
- package/dist/index-CPoUaSMw.js.map +0 -1
- package/dist/index-DEav9Ptt.js.map +0 -1
- package/dist/index-hSl8LzNb.js.map +0 -1
- package/dist/plugins/quick-delete/index.d.ts +0 -55
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Bv7Dw5eO.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { JSX, 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 'toolbox/button-clicked'(payload: { ctx: InPageEdit; button: HTMLElement; id: string }): void\n 'toolbox/toggle'(payload: { ctx: InPageEdit; opened: boolean }): void\n }\n interface PreferencesMap {\n toolboxAlwaysShow: boolean\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 get isPersistent() {\n return this.container.classList.contains('is-persistent')\n }\n\n private setupHoverLogic() {\n let hoverTimeout: number | null = null\n\n // 鼠标进入时暂时展开\n this.container.addEventListener('mouseenter', () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout)\n hoverTimeout = null\n }\n\n // 如果不在持久化状态,则添加hover展开效果\n if (!this.isPersistent) {\n this.container.classList.add('is-hovered')\n }\n })\n\n // 鼠标离开时收起(如果不是持久化状态)\n this.container.addEventListener('mouseleave', () => {\n if (!this.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 this.toggle()\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 itemProps?: JSX.IntrinsicElements['li']\n buttonProps?: JSX.IntrinsicElements['button']\n onClick?: (event: MouseEvent) => void\n index?: number\n }) {\n let { id, group, icon, tooltip, itemProps, 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} {...itemProps}>\n <div class=\"btn-tip\">{tooltip}</div>\n <button id={`${id}-btn`} data-id={payload.id} class=\"ipe-toolbox-btn\" {...buttonProps}>\n {icon}\n </button>\n </li>\n )\n\n button.addEventListener('click', (e) => {\n this.ctx.emit('toolbox/button-clicked', {\n ctx: this.ctx,\n button: e.target as HTMLElement,\n id: payload.id,\n })\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 normalizedId = this.normalizeButtonId(id)\n const button = this.container.querySelector(`#${normalizedId}`)\n button?.remove()\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n }\n\n getContainer() {\n return this.container\n }\n\n get isOpened() {\n return (\n this.container.classList.contains('is-persistent') ||\n this.container.classList.contains('is-hovered')\n )\n }\n\n toggle(force?: boolean) {\n const isPersistent = this.isPersistent\n const newPersistent = typeof force === 'boolean' ? force : !isPersistent\n this.container.classList.toggle('is-persistent', newPersistent)\n this.container.classList.remove('is-hovered')\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\n this.ctx.emit('toolbox/toggle', { ctx: this.ctx, opened: this.isOpened })\n }\n}\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","val","hoverTimeout","index","totalCount","totalDuration","normalizedIndex","delay","group","buttons","button","jsxs","jsx","id","payload","icon","tooltip","itemProps","buttonProps","onClick","existingButton","groupEl","group1","group2","group1Count","group2Count","e","normalizedId","force","isPersistent","newPersistent","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BRjEc8b8.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { JSX, 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 'toolbox/button-clicked'(payload: { ctx: InPageEdit; button: HTMLElement; id: string }): void\n 'toolbox/toggle'(payload: { ctx: InPageEdit; opened: boolean }): void\n }\n interface PreferencesMap {\n toolboxAlwaysShow: boolean\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 get isPersistent() {\n return this.container.classList.contains('is-persistent')\n }\n\n private setupHoverLogic() {\n let hoverTimeout: number | null = null\n\n // 鼠标进入时暂时展开\n this.container.addEventListener('mouseenter', () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout)\n hoverTimeout = null\n }\n\n // 如果不在持久化状态,则添加hover展开效果\n if (!this.isPersistent) {\n this.container.classList.add('is-hovered')\n }\n })\n\n // 鼠标离开时收起(如果不是持久化状态)\n this.container.addEventListener('mouseleave', () => {\n if (!this.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 this.toggle()\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 itemProps?: JSX.IntrinsicElements['li']\n buttonProps?: JSX.IntrinsicElements['button']\n onClick?: (event: MouseEvent) => void\n index?: number\n }) {\n let { id, group, icon, tooltip, itemProps, 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} {...itemProps}>\n <div class=\"btn-tip\">{tooltip}</div>\n <button id={`${id}-btn`} data-id={payload.id} class=\"ipe-toolbox-btn\" {...buttonProps}>\n {icon}\n </button>\n </li>\n )\n\n button.addEventListener('click', (e) => {\n this.ctx.emit('toolbox/button-clicked', {\n ctx: this.ctx,\n button: e.target as HTMLElement,\n id: payload.id,\n })\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 normalizedId = this.normalizeButtonId(id)\n const button = this.container.querySelector(`#${normalizedId}`)\n button?.remove()\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n }\n\n getContainer() {\n return this.container\n }\n\n get isOpened() {\n return (\n this.container.classList.contains('is-persistent') ||\n this.container.classList.contains('is-hovered')\n )\n }\n\n toggle(force?: boolean) {\n const isPersistent = this.isPersistent\n const newPersistent = typeof force === 'boolean' ? force : !isPersistent\n this.container.classList.toggle('is-persistent', newPersistent)\n this.container.classList.remove('is-hovered')\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\n this.ctx.emit('toolbox/toggle', { ctx: this.ctx, opened: this.isOpened })\n }\n}\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","val","hoverTimeout","index","totalCount","totalDuration","normalizedIndex","delay","group","buttons","button","jsxs","jsx","id","payload","icon","tooltip","itemProps","buttonProps","onClick","existingButton","groupEl","group1","group2","group1Count","group2Count","e","normalizedId","force","isPersistent","newPersistent","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { j as i, P as d } from "./index-CM_6yF2v.js";
|
|
2
|
-
import { B as m, S as l } from "./index-
|
|
2
|
+
import { B as m, S as l } from "./index-DgQNTfPR.js";
|
|
3
3
|
import { T as u } from "./index-DD5CVCfD.js";
|
|
4
|
-
import { I as h } from "./InputBox-
|
|
5
|
-
|
|
6
|
-
class b extends m {
|
|
4
|
+
import { I as h, C as g } from "./InputBox-nQKtiWtZ.js";
|
|
5
|
+
class v extends m {
|
|
7
6
|
constructor(e) {
|
|
8
7
|
super(e, {}, "quick-redirect"), this.ctx = e;
|
|
9
8
|
}
|
|
@@ -138,7 +137,7 @@ class b extends m {
|
|
|
138
137
|
value: e?.reason ?? c ?? ""
|
|
139
138
|
}
|
|
140
139
|
),
|
|
141
|
-
/* @__PURE__ */ i("div", { children: /* @__PURE__ */ i(
|
|
140
|
+
/* @__PURE__ */ i("div", { children: /* @__PURE__ */ i(g, { name: "overwrite", id: "overwrite", checked: e?.overwrite, children: "Force create redirect even if the from page already exists" }) })
|
|
142
141
|
]
|
|
143
142
|
}
|
|
144
143
|
)
|
|
@@ -168,6 +167,6 @@ class b extends m {
|
|
|
168
167
|
}
|
|
169
168
|
}
|
|
170
169
|
export {
|
|
171
|
-
|
|
170
|
+
v as PluginQuickRedirect
|
|
172
171
|
};
|
|
173
|
-
//# sourceMappingURL=index-
|
|
172
|
+
//# sourceMappingURL=index-Bd70aDMT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CZXxH2-9.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect\n }\n interface Events {\n 'quick-redirect/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickRedirectOptions>\n }): void\n 'quick-redirect/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-redirect/submit'(payload: { ctx: InPageEdit; payload: RedirectPageOptions }): void\n }\n interface PreferencesMap {\n 'quickRedirect.reason': string\n }\n}\n\nexport interface RedirectPageOptions {\n from: string\n to: string\n reason?: string\n overwrite?: boolean\n}\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\n\nexport class PluginQuickRedirect extends BasePlugin {\n static readonly inject = ['api', 'wikiPage', 'modal']\n static readonly PreferencesSchema = Schema.object({\n 'quickRedirect.reason': Schema.string().default('[IPE-NEXT] Quick redirect'),\n })\n .description('Quick redirect options')\n .extra('category', 'editor')\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-redirect')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickRedirect', this)\n\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n this.ctx.inject(['toolbox'], (ctx) => {\n this.ctx = ctx\n ctx.toolbox.addButton({\n id: 'quick-redirect',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\n <path d=\"M9 17l3 -3l-3 -3\" />\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Quick Redirect',\n group: 'group1',\n index: 2,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n to: curPageName,\n }\n : {}\n )\n },\n })\n this.addDisposeHandler((ctx) => {\n ctx.toolbox.removeButton('quick-redirect')\n })\n })\n }\n\n protected stop(): Promise<void> | void {}\n\n async showModal(options?: Partial<QuickRedirectOptions>) {\n const reason = await this.ctx.preferences.get('quickRedirect.reason')\n if (!options) {\n options = {}\n }\n this.ctx.emit('quick-redirect/init-options', { ctx: this.ctx, options })\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Redirect',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-redirect compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n overwrite: formData.get('overwrite') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-redirect/submit', { ctx: this.ctx, payload: options })\n modal.setLoadingState(true)\n this.redirectPage(options)\n .then((res) => {\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Redirect successful',\n content: 'The redirect has been created.',\n })\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'From',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'To',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox\n label=\"Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n <div>\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\n Force create redirect even if the from page already exists\n </CheckBox>\n </div>\n </form>\n ) as HTMLFormElement\n )\n modal.setButtons([\n {\n label: 'Create Redirect',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n this.ctx.emit('quick-redirect/show-modal', { ctx: this.ctx, modal })\n\n return modal.show()\n }\n\n async redirectPage(options: RedirectPageOptions) {\n const { from, to, reason = '', overwrite = false } = options\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\n title: from,\n })\n const content = `#REDIRECT [[:${to}]]`\n return wikiPage.edit(\n {\n text: content,\n summary: reason,\n },\n {\n createonly: !overwrite,\n }\n )\n }\n}\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","Schema","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","overwrite","wikiPage","content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-Bd70aDMT.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect\n }\n interface Events {\n 'quick-redirect/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickRedirectOptions>\n }): void\n 'quick-redirect/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-redirect/submit'(payload: { ctx: InPageEdit; payload: RedirectPageOptions }): void\n }\n interface PreferencesMap {\n 'quickRedirect.reason': string\n }\n}\n\nexport interface RedirectPageOptions {\n from: string\n to: string\n reason?: string\n overwrite?: boolean\n}\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\n\nexport class PluginQuickRedirect extends BasePlugin {\n static readonly inject = ['api', 'wikiPage', 'modal']\n static readonly PreferencesSchema = Schema.object({\n 'quickRedirect.reason': Schema.string().default('[IPE-NEXT] Quick redirect'),\n })\n .description('Quick redirect options')\n .extra('category', 'editor')\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-redirect')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickRedirect', this)\n\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n this.ctx.inject(['toolbox'], (ctx) => {\n this.ctx = ctx\n ctx.toolbox.addButton({\n id: 'quick-redirect',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\n <path d=\"M9 17l3 -3l-3 -3\" />\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Quick Redirect',\n group: 'group1',\n index: 2,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n to: curPageName,\n }\n : {}\n )\n },\n })\n this.addDisposeHandler((ctx) => {\n ctx.toolbox.removeButton('quick-redirect')\n })\n })\n }\n\n protected stop(): Promise<void> | void {}\n\n async showModal(options?: Partial<QuickRedirectOptions>) {\n const reason = await this.ctx.preferences.get('quickRedirect.reason')\n if (!options) {\n options = {}\n }\n this.ctx.emit('quick-redirect/init-options', { ctx: this.ctx, options })\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Redirect',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-redirect compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n overwrite: formData.get('overwrite') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-redirect/submit', { ctx: this.ctx, payload: options })\n modal.setLoadingState(true)\n this.redirectPage(options)\n .then((res) => {\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Redirect successful',\n content: 'The redirect has been created.',\n })\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'From',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'To',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox\n label=\"Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n <div>\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\n Force create redirect even if the from page already exists\n </CheckBox>\n </div>\n </form>\n ) as HTMLFormElement\n )\n modal.setButtons([\n {\n label: 'Create Redirect',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n this.ctx.emit('quick-redirect/show-modal', { ctx: this.ctx, modal })\n\n return modal.show()\n }\n\n async redirectPage(options: RedirectPageOptions) {\n const { from, to, reason = '', overwrite = false } = options\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\n title: from,\n })\n const content = `#REDIRECT [[:${to}]]`\n return wikiPage.edit(\n {\n text: content,\n summary: reason,\n },\n {\n createonly: !overwrite,\n }\n )\n }\n}\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","Schema","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","overwrite","wikiPage","content"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { j as i, P as S } from "./index-CM_6yF2v.js";
|
|
2
|
-
import { B as E, I as j, S as k } from "./index-
|
|
2
|
+
import { B as E, I as j, S as k } from "./index-DgQNTfPR.js";
|
|
3
3
|
import { R as q } from "./Preferences-DS4-CFWe.js";
|
|
4
4
|
import { T as F } from "./index-DD5CVCfD.js";
|
|
5
|
-
import { C as v } from "./
|
|
6
|
-
import { I } from "./InputBox-DZAdyZ4B.js";
|
|
5
|
+
import { C as v, I } from "./InputBox-nQKtiWtZ.js";
|
|
7
6
|
var T = Object.create, p = Object.defineProperty, B = Object.getOwnPropertyDescriptor, b = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), _ = (t) => {
|
|
8
7
|
throw TypeError(t);
|
|
9
8
|
}, C = (t, e, r) => e in t ? p(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, Q = (t, e) => p(t, "name", { value: e, configurable: !0 }), z = (t) => [, , , T(t?.[b("metadata")] ?? null)], D = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], x = (t) => t !== void 0 && typeof t != "function" ? _("Function expected") : t, N = (t, e, r, a, o) => ({ kind: D[t], name: e, metadata: a, addInitializer: (n) => r._ ? _("Already initialized") : o.push(x(n || null)) }), O = (t, e) => C(e, b("metadata"), t[3]), R = (t, e, r, a) => {
|
|
@@ -177,4 +176,4 @@ R(g, 1, h);
|
|
|
177
176
|
export {
|
|
178
177
|
h as PluginQuickMove
|
|
179
178
|
};
|
|
180
|
-
//# sourceMappingURL=index-
|
|
179
|
+
//# sourceMappingURL=index-BvuaLEFc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-B5DtUqkK.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove\n }\n interface Events {\n 'quick-move/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickMoveOptions>\n }): void\n 'quick-move/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-move/submit'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n payload: MovePageOptions\n }): void\n }\n interface PreferencesMap {\n 'quickMove.reason': string\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@RegisterPreferences(\n Schema.object({\n 'quickMove.reason': Schema.string().default('[IPE-NEXT] Quick move'),\n })\n .description('Quick move options')\n .extra('category', 'editor')\n)\n@Inject(['modal', 'wiki'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this)\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: 'Quick Move',\n group: 'group1',\n index: 1,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n async showModal(options?: Partial<QuickMoveOptions>) {\n const reason = await this.ctx.preferences.get('quickMove.reason')\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Move',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-move/submit', { ctx: this.ctx, modal, payload: options })\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'Move from',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'Move to',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n Move talk page\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n Move subpage(s) (up to 100)\n </CheckBox>\n </div>\n {this.ctx.wiki.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n Move without leaving a redirect\n </CheckBox>\n </div>\n )}\n <InputBox\n label=\"Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: 'Move',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginQuickMove","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BvuaLEFc.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove\n }\n interface Events {\n 'quick-move/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<QuickMoveOptions>\n }): void\n 'quick-move/show-modal'(payload: { ctx: InPageEdit; modal: IPEModal }): void\n 'quick-move/submit'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n payload: MovePageOptions\n }): void\n }\n interface PreferencesMap {\n 'quickMove.reason': string\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@RegisterPreferences(\n Schema.object({\n 'quickMove.reason': Schema.string().default('[IPE-NEXT] Quick move'),\n })\n .description('Quick move options')\n .extra('category', 'editor')\n)\n@Inject(['modal', 'wiki'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this)\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: 'Quick Move',\n group: 'group1',\n index: 1,\n onClick: () => {\n this.showModal(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n async showModal(options?: Partial<QuickMoveOptions>) {\n const reason = await this.ctx.preferences.get('quickMove.reason')\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Move',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: 'From and to are required.',\n })\n return\n }\n this.ctx.emit('quick-move/submit', { ctx: this.ctx, modal, payload: options })\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'Move from',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'Move to',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n Move talk page\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n Move subpage(s) (up to 100)\n </CheckBox>\n </div>\n {this.ctx.wiki.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n Move without leaving a redirect\n </CheckBox>\n </div>\n )}\n <InputBox\n label=\"Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options?.reason ?? reason ?? ''}\n />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: 'Move',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginQuickMove","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","reason","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CG38LlAh.js","sources":["../src/components/MBox/index.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\
|
|
1
|
+
{"version":3,"file":"index-CG38LlAh.js","sources":["../src/components/MBox/index.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\nimport { JSX } from 'jsx-dom/jsx-runtime'\nimport styles from './styles.module.sass'\n\nexport type MBoxProps = {\n type?:\n | ''\n | 'default'\n | 'note'\n | 'info'\n | 'tip'\n | 'success'\n | 'important'\n | 'done'\n | 'warning'\n | 'caution'\n | 'error'\n title?: ReactNode\n content?: ReactNode\n closeable?: boolean\n titleProps?: JSX.IntrinsicElements['div']\n contentProps?: JSX.IntrinsicElements['div']\n} & JSX.IntrinsicElements['div']\n\nexport type MBoxElement = HTMLElement & {\n close: () => Promise<void>\n}\n\nexport const MBox = (props: MBoxProps) => {\n const {\n type = 'default',\n title,\n content,\n closeable = true,\n titleProps,\n contentProps,\n children,\n ...rest\n } = props\n let titleContent = title\n if (typeof title === 'undefined' && type !== 'default') {\n titleContent = type[0].toUpperCase() + type.slice(1).toLowerCase()\n }\n\n const close = async () => {\n if (!box) {\n return Promise.resolve()\n }\n const { promise, resolve } = Promise.withResolvers<void>()\n\n const animation = box.animate(\n [\n { opacity: '1', height: box.clientHeight + 'px' },\n { opacity: '0', height: '0px', margin: '0px' },\n ],\n {\n duration: 300,\n easing: 'ease',\n }\n )\n\n animation.addEventListener('finish', () => {\n box.remove()\n resolve()\n })\n\n return promise\n }\n\n const box = (\n <div className={`theme-ipe ipe-mbox mbox-type-${type || 'default'} ${styles.mbox}`} {...rest}>\n {titleContent && (\n <div className={`ipe-mbox-title ${styles.title}`} {...titleProps}>\n {titleContent}\n </div>\n )}\n <div className={`ipe-mbox-content ${styles.content}`} {...contentProps}>\n {children || content}\n </div>\n {closeable && (\n <a onClick={close} className={`ipe-mbox-close ${styles.close}`}>\n ×\n </a>\n )}\n </div>\n ) as MBoxElement\n box.close = close\n return box\n}\n"],"names":["MBox","props","type","title","content","closeable","titleProps","contentProps","children","rest","titleContent","close","box","promise","resolve","jsxs","styles","jsx"],"mappings":";;;;;;GA4BaA,IAAO,CAACC,MAAqB;AACxC,QAAM;AAAA,IACJ,MAAAC,IAAO;AAAA,IACP,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDR;AACJ,MAAIS,IAAeP;AACnB,EAAI,OAAOA,IAAU,OAAeD,MAAS,cAC3CQ,IAAeR,EAAK,CAAC,EAAE,YAAA,IAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA;AAGvD,QAAMS,IAAQ,YAAY;AACxB,QAAI,CAACC;AACH,aAAO,QAAQ,QAAA;AAEjB,UAAM,EAAE,SAAAC,GAAS,SAAAC,MAAY,QAAQ,cAAA;AAarC,WAXkBF,EAAI;AAAA,MACpB;AAAA,QACE,EAAE,SAAS,KAAK,QAAQA,EAAI,eAAe,KAAA;AAAA,QAC3C,EAAE,SAAS,KAAK,QAAQ,OAAO,QAAQ,MAAA;AAAA,MAAM;AAAA,MAE/C;AAAA,QACE,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACV,EAGQ,iBAAiB,UAAU,MAAM;AACzC,MAAAA,EAAI,OAAA,GACJE,EAAA;AAAA,IACF,CAAC,GAEMD;AAAA,EACT,GAEMD,IACJG,gBAAAA,EAAC,OAAA,EAAI,WAAW,gCAAgCb,KAAQ,SAAS,IAAIc,EAAO,IAAI,IAAK,GAAGP,GACrF,UAAA;AAAA,IAAAC,KACC,gBAAAO,EAAC,SAAI,WAAW,kBAAkBD,EAAO,KAAK,IAAK,GAAGV,GACnD,UAAAI,EAAA,CACH;AAAA,IAEF,gBAAAO,EAAC,OAAA,EAAI,WAAW,oBAAoBD,EAAO,OAAO,IAAK,GAAGT,GACvD,UAAAC,KAAYJ,EAAA,CACf;AAAA,IACCC,KACC,gBAAAY,EAAC,KAAA,EAAE,SAASN,GAAO,WAAW,kBAAkBK,EAAO,KAAK,IAAI,UAAA,IAAA,CAEhE;AAAA,EAAA,GAEJ;AAEF,SAAAJ,EAAI,QAAQD,GACLC;AACT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CM_6yF2v.js","sources":["../../../node_modules/.pnpm/jsx-dom@8.1.6/node_modules/jsx-dom/index.js","../src/components/ProgressBar/index.tsx"],"sourcesContent":["/* eslint-disable */\nconst keys = Object.keys;\nfunction identity(value) {\n return value;\n}\nfunction isBoolean(val) {\n return typeof val === \"boolean\";\n}\nfunction isElement(val) {\n return val && typeof val.nodeType === \"number\";\n}\nfunction isString(val) {\n return typeof val === \"string\";\n}\nfunction isNumber(val) {\n return typeof val === \"number\";\n}\nfunction isObject(val) {\n return typeof val === \"object\" ? val !== null : isFunction(val);\n}\nfunction isFunction(val) {\n return typeof val === \"function\";\n}\nfunction isComponentClass(Component) {\n return !!(Component && Component.isComponent);\n}\nfunction isArrayLike(obj) {\n return (\n isObject(obj) &&\n typeof obj.length === \"number\" &&\n typeof obj.nodeType !== \"number\"\n );\n}\nfunction forEach(value, fn) {\n if (!value) return;\n for (const key of keys(value)) {\n fn(value[key], key);\n }\n}\n\nfunction createRef() {\n return Object.seal({\n current: null,\n });\n}\nfunction isRef(maybeRef) {\n return isObject(maybeRef) && \"current\" in maybeRef;\n}\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found on\n * https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/LICENSE\n */\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nconst isUnitlessNumber = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0,\n};\n\n/**\n * @param prefix vendor-specific prefix, eg: Webkit\n * @param key style name, eg: transitionDuration\n * @return style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nconst prefixes = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nkeys(isUnitlessNumber).forEach((prop) => {\n prefixes.forEach((prefix) => {\n isUnitlessNumber[prefixKey(prefix, prop)] = 0; // isUnitlessNumber[prop]\n });\n});\n\nconst jsxDomType = Symbol.for(\"jsx-dom:type\");\nvar JsxDomType = /*#__PURE__*/ (function (JsxDomType) {\n JsxDomType[\"ShadowRoot\"] = \"ShadowRoot\";\n return JsxDomType;\n})(JsxDomType || {});\nfunction ShadowRoot(_ref) {\n let { children, ref, ...attr } = _ref;\n return {\n [jsxDomType]: JsxDomType.ShadowRoot,\n ref,\n attr,\n children,\n };\n}\nfunction isShadowRoot(el) {\n return el != null && el[jsxDomType] === JsxDomType.ShadowRoot;\n}\n\nconst SVGNamespace = \"http://www.w3.org/2000/svg\";\nconst XLinkNamespace = \"http://www.w3.org/1999/xlink\";\nconst XMLNamespace = \"http://www.w3.org/XML/1998/namespace\";\n\n// https://facebook.github.io/react/docs/jsx-in-depth.html#booleans-null-and-undefined-are-ignored\n// Emulate JSX Expression logic to ignore certain type of children or className.\nfunction isVisibleChild(value) {\n return !isBoolean(value) && value != null;\n}\n\n/**\n * Convert a `value` to a className string.\n * `value` can be a string, an array or a `Dictionary<boolean>`.\n */\nfunction className(value) {\n if (Array.isArray(value)) {\n return value.map(className).filter(Boolean).join(\" \");\n } else if (isObject(value)) {\n if (Symbol.iterator in value) {\n return className(Array.from(value));\n }\n return keys(value)\n .filter((k) => value[k])\n .join(\" \");\n } else if (isVisibleChild(value)) {\n return \"\" + value;\n } else {\n return \"\";\n }\n}\nconst svg = {\n animate: 0,\n circle: 0,\n clipPath: 0,\n defs: 0,\n desc: 0,\n ellipse: 0,\n feBlend: 0,\n feColorMatrix: 0,\n feComponentTransfer: 0,\n feComposite: 0,\n feConvolveMatrix: 0,\n feDiffuseLighting: 0,\n feDisplacementMap: 0,\n feDistantLight: 0,\n feFlood: 0,\n feFuncA: 0,\n feFuncB: 0,\n feFuncG: 0,\n feFuncR: 0,\n feGaussianBlur: 0,\n feImage: 0,\n feMerge: 0,\n feMergeNode: 0,\n feMorphology: 0,\n feOffset: 0,\n fePointLight: 0,\n feSpecularLighting: 0,\n feSpotLight: 0,\n feTile: 0,\n feTurbulence: 0,\n filter: 0,\n foreignObject: 0,\n g: 0,\n image: 0,\n line: 0,\n linearGradient: 0,\n marker: 0,\n mask: 0,\n metadata: 0,\n path: 0,\n pattern: 0,\n polygon: 0,\n polyline: 0,\n radialGradient: 0,\n rect: 0,\n stop: 0,\n svg: 0,\n switch: 0,\n symbol: 0,\n text: 0,\n textPath: 0,\n tspan: 0,\n use: 0,\n view: 0,\n};\nconst nonPresentationSVGAttributes =\n /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nfunction createFactory(tag) {\n return createElement.bind(null, tag);\n}\nfunction Fragment(attr) {\n const fragment = document.createDocumentFragment();\n appendChild(attr.children, fragment);\n return fragment;\n}\nclass Component {\n static isComponent = true;\n constructor(props) {\n this.props = props;\n }\n render() {\n return null;\n }\n}\nfunction initComponentClass(Class, attr, children) {\n attr = {\n ...attr,\n children,\n };\n const instance = new Class(attr);\n const node = instance.render();\n if (\"ref\" in attr) {\n attachRef(attr.ref, instance);\n }\n return node;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction jsx(tag, _ref) {\n let { children, ...attr } = _ref;\n if (!attr.namespaceURI && svg[tag] === 0) {\n attr = {\n ...attr,\n namespaceURI: SVGNamespace,\n };\n }\n let node;\n if (isString(tag)) {\n node = attr.namespaceURI\n ? document.createElementNS(attr.namespaceURI, tag)\n : document.createElement(tag);\n attributes(attr, node);\n appendChild(children, node);\n\n // Select `option` elements in `select`\n if (node instanceof window.HTMLSelectElement && attr.value != null) {\n if (attr.multiple === true && Array.isArray(attr.value)) {\n const values = attr.value.map((value) => String(value));\n node\n .querySelectorAll(\"option\")\n .forEach(\n (option) => (option.selected = values.includes(option.value)),\n );\n } else {\n node.value = attr.value;\n }\n }\n attachRef(attr.ref, node);\n } else if (isFunction(tag)) {\n // Custom elements.\n if (isObject(tag.defaultProps)) {\n attr = {\n ...tag.defaultProps,\n ...attr,\n };\n }\n node = isComponentClass(tag)\n ? initComponentClass(tag, attr, children)\n : tag({\n ...attr,\n children,\n });\n } else {\n throw new TypeError(`Invalid JSX element type: ${tag}`);\n }\n return node;\n}\nfunction createElement(tag, attr) {\n for (\n var _len = arguments.length,\n children = new Array(_len > 2 ? _len - 2 : 0),\n _key2 = 2;\n _key2 < _len;\n _key2++\n ) {\n children[_key2 - 2] = arguments[_key2];\n }\n if (isString(attr) || Array.isArray(attr)) {\n children.unshift(attr);\n attr = {};\n }\n attr = attr || {};\n if (attr.children != null && !children.length) {\n ({ children, ...attr } = attr);\n }\n return jsx(\n tag,\n {\n ...attr,\n children,\n },\n attr.key,\n );\n}\nfunction attachRef(ref, node) {\n if (isRef(ref)) {\n ref.current = node;\n } else if (isFunction(ref)) {\n ref(node);\n }\n}\nfunction appendChild(child, node) {\n if (isArrayLike(child)) {\n appendChildren(child, node);\n } else if (isString(child) || isNumber(child)) {\n appendChildToNode(document.createTextNode(child), node);\n } else if (child === null) {\n appendChildToNode(document.createComment(\"\"), node);\n } else if (isElement(child)) {\n appendChildToNode(child, node);\n } else if (isShadowRoot(child)) {\n const shadowRoot = node.attachShadow(child.attr);\n appendChild(child.children, shadowRoot);\n attachRef(child.ref, shadowRoot);\n }\n}\nfunction appendChildren(children, node) {\n for (const child of [...children]) {\n appendChild(child, node);\n }\n return node;\n}\nfunction appendChildToNode(child, node) {\n if (node instanceof window.HTMLTemplateElement) {\n node.content.appendChild(child);\n } else {\n node.appendChild(child);\n }\n}\nfunction normalizeAttribute(s, separator) {\n return s.replace(/[A-Z]/g, (match) => separator + match.toLowerCase());\n}\nfunction style(node, value) {\n if (value == null || value === false);\n else if (Array.isArray(value)) {\n value.forEach((v) => style(node, v));\n } else if (isString(value)) {\n node.setAttribute(\"style\", value);\n } else if (isObject(value)) {\n forEach(value, (val, key) => {\n if (key.indexOf(\"-\") === 0) {\n // CSS custom properties (variables) start with `-` (e.g. `--my-variable`)\n // and must be assigned via `setProperty`.\n node.style.setProperty(key, val);\n } else if (isNumber(val) && isUnitlessNumber[key] !== 0) {\n node.style[key] = val + \"px\";\n } else {\n node.style[key] = val;\n }\n });\n }\n}\nfunction attribute(key, value, node) {\n switch (key) {\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n attrNS(node, XLinkNamespace, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlnsXlink\":\n attr(node, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n attrNS(node, XMLNamespace, normalizeAttribute(key, \":\"), value);\n return;\n }\n switch (key) {\n case \"htmlFor\":\n attr(node, \"for\", value);\n return;\n case \"dataset\":\n forEach(value, (dataValue, dataKey) => {\n if (dataValue != null) {\n node.dataset[dataKey] = dataValue;\n }\n });\n return;\n case \"innerHTML\":\n case \"innerText\":\n case \"textContent\":\n if (isVisibleChild(value)) {\n node[key] = value;\n }\n return;\n case \"dangerouslySetInnerHTML\":\n if (isObject(value)) {\n node.innerHTML = value[\"__html\"];\n }\n return;\n case \"value\":\n if (value == null || node instanceof window.HTMLSelectElement) {\n // skip nullish values\n // for `<select>` apply value after appending `<option>` elements\n return;\n } else if (node instanceof window.HTMLTextAreaElement) {\n node.value = value;\n return;\n }\n // use attribute for other elements\n break;\n case \"spellCheck\":\n node.spellcheck = value;\n return;\n case \"class\":\n case \"className\":\n if (isFunction(value)) {\n value(node);\n } else {\n attr(node, \"class\", className(value));\n }\n return;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n style(node, value);\n return;\n case \"on\":\n case \"onCapture\":\n forEach(value, (eventHandler, eventName) => {\n node.addEventListener(eventName, eventHandler, key === \"onCapture\");\n });\n return;\n // fallthrough\n }\n if (isFunction(value)) {\n if (key[0] === \"o\" && key[1] === \"n\") {\n let attribute = key.toLowerCase();\n const useCapture = attribute.endsWith(\"capture\");\n if (attribute === \"ondoubleclick\") {\n attribute = \"ondblclick\";\n } else if (useCapture && attribute === \"ondoubleclickcapture\") {\n attribute = \"ondblclickcapture\";\n }\n if (!useCapture && node[attribute] === null) {\n // use property when possible PR #17\n node[attribute] = value;\n } else if (useCapture) {\n node.addEventListener(\n attribute.substring(2, attribute.length - 7),\n value,\n true,\n );\n } else {\n let eventName;\n if (attribute in window) {\n // standard event\n // the JSX attribute could have been \"onMouseOver\" and the\n // member name \"onmouseover\" is on the window's prototype\n // so let's add the listener \"mouseover\", which is all lowercased\n const standardEventName = attribute.substring(2);\n eventName = standardEventName;\n } else {\n // custom event\n // the JSX attribute could have been \"onMyCustomEvent\"\n // so let's trim off the \"on\" prefix and lowercase the first character\n // and add the listener \"myCustomEvent\"\n // except for the first character, we keep the event name case\n const customEventName = attribute[2] + key.slice(3);\n eventName = customEventName;\n }\n node.addEventListener(eventName, value);\n }\n }\n } else if (isObject(value)) {\n node[key] = value;\n } else if (value === true) {\n attr(node, key, \"\");\n } else if (value !== false && value != null) {\n if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {\n attr(node, normalizeAttribute(key, \"-\"), value);\n } else {\n attr(node, key, value);\n }\n }\n}\nfunction attr(node, key, value) {\n node.setAttribute(key, value);\n}\nfunction attrNS(node, namespace, key, value) {\n node.setAttributeNS(namespace, key, value);\n}\nfunction attributes(attr, node) {\n for (const key of keys(attr)) {\n attribute(key, attr[key], node);\n }\n return node;\n}\n\nfunction useText(initialValue) {\n const text = new Text();\n Object.defineProperty(text, \"toString\", {\n value() {\n return this.textContent;\n },\n });\n function setText(value) {\n text.textContent = value;\n }\n if (initialValue != null) {\n setText(initialValue);\n }\n return [text, setText];\n}\nfunction useClassList(initialValue) {\n const div = document.createElement(\"div\");\n if (initialValue != null) {\n div.className = className(initialValue);\n }\n let list = div.classList;\n function ClassList(value) {\n value.setAttribute(\"class\", list.value);\n list = value.classList;\n }\n Object.defineProperties(\n ClassList,\n Object.getOwnPropertyDescriptors({\n get size() {\n return list.length;\n },\n get value() {\n return list.value;\n },\n add() {\n list.add(...arguments);\n },\n remove() {\n list.remove(...arguments);\n },\n toggle(token, force) {\n list.toggle(token, force);\n },\n contains(token) {\n return list.contains(token);\n },\n }),\n );\n return ClassList;\n}\n\nfunction useMemo(factory) {\n return factory();\n}\nfunction forwardRef(render) {\n return (_ref) => {\n let { ref, ...props } = _ref;\n return render(props, ref ?? createRef());\n };\n}\nfunction useImperativeHandle(ref, init) {\n attachRef(ref, init());\n}\n\nconst cache = /* @__PURE__ */ new Map();\nconst createStyledComponent = (name) =>\n function (list) {\n for (\n var _len = arguments.length,\n interpolations = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n interpolations[_key - 1] = arguments[_key];\n }\n return (_ref) => {\n let { style, ...props } = _ref;\n const lastIndex = list.length - 1;\n const css =\n list.slice(0, lastIndex).reduce((p, s, i) => {\n const interpolation = interpolations[i];\n const current =\n typeof interpolation === \"function\"\n ? interpolation(props)\n : interpolation;\n return p + s + current;\n }, \"\") + list[lastIndex];\n return createElement(name, {\n style: [css, style],\n ...props,\n });\n };\n };\nconst baseStyled = (customComponent) => createStyledComponent(customComponent);\nconst styled = /* @__PURE__ */ new Proxy(baseStyled, {\n get(_, name) {\n return setIfAbsent(cache, name, () => createStyledComponent(name));\n },\n});\nfunction setIfAbsent(map, key, getValue) {\n if (map.has(key)) {\n return map.get(key);\n } else {\n const value = getValue(key);\n map.set(key, value);\n return value;\n }\n}\n\nvar index = {\n Component,\n PureComponent: Component,\n createElement,\n Fragment,\n ShadowRoot,\n};\nfunction preventDefault(event) {\n event.preventDefault();\n return event;\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n return event;\n}\n\nexport {\n Component,\n Fragment,\n Component as PureComponent,\n SVGNamespace,\n ShadowRoot,\n Fragment as StrictMode,\n className,\n createElement,\n createFactory,\n createRef,\n index as default,\n forwardRef,\n createElement as h,\n isRef,\n jsx,\n jsx as jsxs,\n identity as memo,\n preventDefault,\n stopPropagation,\n styled,\n identity as useCallback,\n useClassList,\n useImperativeHandle,\n useMemo,\n createRef as useRef,\n useText,\n};\n","import { JSX } from 'vue/jsx-runtime'\r\nimport styles from './styles.module.sass'\r\n\r\nexport const ProgressBar = (\r\n attrs: JSX.IntrinsicElements['div'] & { indeterminate?: boolean; progress?: number }\r\n) => {\r\n const indeterminate = attrs.indeterminate ?? true\r\n const bar = (\r\n <div\r\n class={`${styles.ipe_progress}`}\r\n data-indeterminate={`${indeterminate}`}\r\n // @ts-ignore\r\n style={{ width: '100%', '--progress': attrs.progress ? `${attrs.progress}%` : '0%' }}\r\n {...attrs}\r\n ></div>\r\n ) as HTMLElement & { setProgress: (progress: number) => void }\r\n bar.setProgress = (progress: number | undefined) => {\r\n if (typeof progress === 'number') {\r\n bar.dataset.indeterminate = 'false'\r\n bar.style.setProperty('--progress', `${progress}%`)\r\n } else {\r\n bar.dataset.indeterminate = 'true'\r\n bar.style.setProperty('--progress', '0%')\r\n }\r\n }\r\n return bar\r\n}\r\n"],"names":["keys","isBoolean","val","isElement","isString","isNumber","isObject","isFunction","isComponentClass","Component","isArrayLike","obj","forEach","value","fn","key","isRef","maybeRef","isUnitlessNumber","prefixKey","prefix","prefixes","prop","jsxDomType","JsxDomType","isShadowRoot","el","SVGNamespace","XLinkNamespace","XMLNamespace","isVisibleChild","className","k","svg","nonPresentationSVGAttributes","Fragment","attr","fragment","appendChild","initComponentClass","Class","children","instance","node","attachRef","jsx","tag","_ref","attributes","values","option","createElement","_len","_key2","ref","child","appendChildren","appendChildToNode","shadowRoot","normalizeAttribute","s","separator","match","style","v","attribute","attrNS","dataValue","dataKey","eventHandler","eventName","useCapture","namespace","ProgressBar","attrs","indeterminate","bar","styles","progress"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index-CM_6yF2v.js","sources":["../../../node_modules/.pnpm/jsx-dom@8.1.6/node_modules/jsx-dom/index.js","../src/components/ProgressBar/index.tsx"],"sourcesContent":["/* eslint-disable */\nconst keys = Object.keys;\nfunction identity(value) {\n return value;\n}\nfunction isBoolean(val) {\n return typeof val === \"boolean\";\n}\nfunction isElement(val) {\n return val && typeof val.nodeType === \"number\";\n}\nfunction isString(val) {\n return typeof val === \"string\";\n}\nfunction isNumber(val) {\n return typeof val === \"number\";\n}\nfunction isObject(val) {\n return typeof val === \"object\" ? val !== null : isFunction(val);\n}\nfunction isFunction(val) {\n return typeof val === \"function\";\n}\nfunction isComponentClass(Component) {\n return !!(Component && Component.isComponent);\n}\nfunction isArrayLike(obj) {\n return (\n isObject(obj) &&\n typeof obj.length === \"number\" &&\n typeof obj.nodeType !== \"number\"\n );\n}\nfunction forEach(value, fn) {\n if (!value) return;\n for (const key of keys(value)) {\n fn(value[key], key);\n }\n}\n\nfunction createRef() {\n return Object.seal({\n current: null,\n });\n}\nfunction isRef(maybeRef) {\n return isObject(maybeRef) && \"current\" in maybeRef;\n}\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found on\n * https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/LICENSE\n */\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nconst isUnitlessNumber = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0,\n};\n\n/**\n * @param prefix vendor-specific prefix, eg: Webkit\n * @param key style name, eg: transitionDuration\n * @return style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nconst prefixes = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nkeys(isUnitlessNumber).forEach((prop) => {\n prefixes.forEach((prefix) => {\n isUnitlessNumber[prefixKey(prefix, prop)] = 0; // isUnitlessNumber[prop]\n });\n});\n\nconst jsxDomType = Symbol.for(\"jsx-dom:type\");\nvar JsxDomType = /*#__PURE__*/ (function (JsxDomType) {\n JsxDomType[\"ShadowRoot\"] = \"ShadowRoot\";\n return JsxDomType;\n})(JsxDomType || {});\nfunction ShadowRoot(_ref) {\n let { children, ref, ...attr } = _ref;\n return {\n [jsxDomType]: JsxDomType.ShadowRoot,\n ref,\n attr,\n children,\n };\n}\nfunction isShadowRoot(el) {\n return el != null && el[jsxDomType] === JsxDomType.ShadowRoot;\n}\n\nconst SVGNamespace = \"http://www.w3.org/2000/svg\";\nconst XLinkNamespace = \"http://www.w3.org/1999/xlink\";\nconst XMLNamespace = \"http://www.w3.org/XML/1998/namespace\";\n\n// https://facebook.github.io/react/docs/jsx-in-depth.html#booleans-null-and-undefined-are-ignored\n// Emulate JSX Expression logic to ignore certain type of children or className.\nfunction isVisibleChild(value) {\n return !isBoolean(value) && value != null;\n}\n\n/**\n * Convert a `value` to a className string.\n * `value` can be a string, an array or a `Dictionary<boolean>`.\n */\nfunction className(value) {\n if (Array.isArray(value)) {\n return value.map(className).filter(Boolean).join(\" \");\n } else if (isObject(value)) {\n if (Symbol.iterator in value) {\n return className(Array.from(value));\n }\n return keys(value)\n .filter((k) => value[k])\n .join(\" \");\n } else if (isVisibleChild(value)) {\n return \"\" + value;\n } else {\n return \"\";\n }\n}\nconst svg = {\n animate: 0,\n circle: 0,\n clipPath: 0,\n defs: 0,\n desc: 0,\n ellipse: 0,\n feBlend: 0,\n feColorMatrix: 0,\n feComponentTransfer: 0,\n feComposite: 0,\n feConvolveMatrix: 0,\n feDiffuseLighting: 0,\n feDisplacementMap: 0,\n feDistantLight: 0,\n feFlood: 0,\n feFuncA: 0,\n feFuncB: 0,\n feFuncG: 0,\n feFuncR: 0,\n feGaussianBlur: 0,\n feImage: 0,\n feMerge: 0,\n feMergeNode: 0,\n feMorphology: 0,\n feOffset: 0,\n fePointLight: 0,\n feSpecularLighting: 0,\n feSpotLight: 0,\n feTile: 0,\n feTurbulence: 0,\n filter: 0,\n foreignObject: 0,\n g: 0,\n image: 0,\n line: 0,\n linearGradient: 0,\n marker: 0,\n mask: 0,\n metadata: 0,\n path: 0,\n pattern: 0,\n polygon: 0,\n polyline: 0,\n radialGradient: 0,\n rect: 0,\n stop: 0,\n svg: 0,\n switch: 0,\n symbol: 0,\n text: 0,\n textPath: 0,\n tspan: 0,\n use: 0,\n view: 0,\n};\nconst nonPresentationSVGAttributes =\n /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nfunction createFactory(tag) {\n return createElement.bind(null, tag);\n}\nfunction Fragment(attr) {\n const fragment = document.createDocumentFragment();\n appendChild(attr.children, fragment);\n return fragment;\n}\nclass Component {\n static isComponent = true;\n constructor(props) {\n this.props = props;\n }\n render() {\n return null;\n }\n}\nfunction initComponentClass(Class, attr, children) {\n attr = {\n ...attr,\n children,\n };\n const instance = new Class(attr);\n const node = instance.render();\n if (\"ref\" in attr) {\n attachRef(attr.ref, instance);\n }\n return node;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction jsx(tag, _ref) {\n let { children, ...attr } = _ref;\n if (!attr.namespaceURI && svg[tag] === 0) {\n attr = {\n ...attr,\n namespaceURI: SVGNamespace,\n };\n }\n let node;\n if (isString(tag)) {\n node = attr.namespaceURI\n ? document.createElementNS(attr.namespaceURI, tag)\n : document.createElement(tag);\n attributes(attr, node);\n appendChild(children, node);\n\n // Select `option` elements in `select`\n if (node instanceof window.HTMLSelectElement && attr.value != null) {\n if (attr.multiple === true && Array.isArray(attr.value)) {\n const values = attr.value.map((value) => String(value));\n node\n .querySelectorAll(\"option\")\n .forEach(\n (option) => (option.selected = values.includes(option.value)),\n );\n } else {\n node.value = attr.value;\n }\n }\n attachRef(attr.ref, node);\n } else if (isFunction(tag)) {\n // Custom elements.\n if (isObject(tag.defaultProps)) {\n attr = {\n ...tag.defaultProps,\n ...attr,\n };\n }\n node = isComponentClass(tag)\n ? initComponentClass(tag, attr, children)\n : tag({\n ...attr,\n children,\n });\n } else {\n throw new TypeError(`Invalid JSX element type: ${tag}`);\n }\n return node;\n}\nfunction createElement(tag, attr) {\n for (\n var _len = arguments.length,\n children = new Array(_len > 2 ? _len - 2 : 0),\n _key2 = 2;\n _key2 < _len;\n _key2++\n ) {\n children[_key2 - 2] = arguments[_key2];\n }\n if (isString(attr) || Array.isArray(attr)) {\n children.unshift(attr);\n attr = {};\n }\n attr = attr || {};\n if (attr.children != null && !children.length) {\n ({ children, ...attr } = attr);\n }\n return jsx(\n tag,\n {\n ...attr,\n children,\n },\n attr.key,\n );\n}\nfunction attachRef(ref, node) {\n if (isRef(ref)) {\n ref.current = node;\n } else if (isFunction(ref)) {\n ref(node);\n }\n}\nfunction appendChild(child, node) {\n if (isArrayLike(child)) {\n appendChildren(child, node);\n } else if (isString(child) || isNumber(child)) {\n appendChildToNode(document.createTextNode(child), node);\n } else if (child === null) {\n appendChildToNode(document.createComment(\"\"), node);\n } else if (isElement(child)) {\n appendChildToNode(child, node);\n } else if (isShadowRoot(child)) {\n const shadowRoot = node.attachShadow(child.attr);\n appendChild(child.children, shadowRoot);\n attachRef(child.ref, shadowRoot);\n }\n}\nfunction appendChildren(children, node) {\n for (const child of [...children]) {\n appendChild(child, node);\n }\n return node;\n}\nfunction appendChildToNode(child, node) {\n if (node instanceof window.HTMLTemplateElement) {\n node.content.appendChild(child);\n } else {\n node.appendChild(child);\n }\n}\nfunction normalizeAttribute(s, separator) {\n return s.replace(/[A-Z]/g, (match) => separator + match.toLowerCase());\n}\nfunction style(node, value) {\n if (value == null || value === false);\n else if (Array.isArray(value)) {\n value.forEach((v) => style(node, v));\n } else if (isString(value)) {\n node.setAttribute(\"style\", value);\n } else if (isObject(value)) {\n forEach(value, (val, key) => {\n if (key.indexOf(\"-\") === 0) {\n // CSS custom properties (variables) start with `-` (e.g. `--my-variable`)\n // and must be assigned via `setProperty`.\n node.style.setProperty(key, val);\n } else if (isNumber(val) && isUnitlessNumber[key] !== 0) {\n node.style[key] = val + \"px\";\n } else {\n node.style[key] = val;\n }\n });\n }\n}\nfunction attribute(key, value, node) {\n switch (key) {\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n attrNS(node, XLinkNamespace, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlnsXlink\":\n attr(node, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n attrNS(node, XMLNamespace, normalizeAttribute(key, \":\"), value);\n return;\n }\n switch (key) {\n case \"htmlFor\":\n attr(node, \"for\", value);\n return;\n case \"dataset\":\n forEach(value, (dataValue, dataKey) => {\n if (dataValue != null) {\n node.dataset[dataKey] = dataValue;\n }\n });\n return;\n case \"innerHTML\":\n case \"innerText\":\n case \"textContent\":\n if (isVisibleChild(value)) {\n node[key] = value;\n }\n return;\n case \"dangerouslySetInnerHTML\":\n if (isObject(value)) {\n node.innerHTML = value[\"__html\"];\n }\n return;\n case \"value\":\n if (value == null || node instanceof window.HTMLSelectElement) {\n // skip nullish values\n // for `<select>` apply value after appending `<option>` elements\n return;\n } else if (node instanceof window.HTMLTextAreaElement) {\n node.value = value;\n return;\n }\n // use attribute for other elements\n break;\n case \"spellCheck\":\n node.spellcheck = value;\n return;\n case \"class\":\n case \"className\":\n if (isFunction(value)) {\n value(node);\n } else {\n attr(node, \"class\", className(value));\n }\n return;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n style(node, value);\n return;\n case \"on\":\n case \"onCapture\":\n forEach(value, (eventHandler, eventName) => {\n node.addEventListener(eventName, eventHandler, key === \"onCapture\");\n });\n return;\n // fallthrough\n }\n if (isFunction(value)) {\n if (key[0] === \"o\" && key[1] === \"n\") {\n let attribute = key.toLowerCase();\n const useCapture = attribute.endsWith(\"capture\");\n if (attribute === \"ondoubleclick\") {\n attribute = \"ondblclick\";\n } else if (useCapture && attribute === \"ondoubleclickcapture\") {\n attribute = \"ondblclickcapture\";\n }\n if (!useCapture && node[attribute] === null) {\n // use property when possible PR #17\n node[attribute] = value;\n } else if (useCapture) {\n node.addEventListener(\n attribute.substring(2, attribute.length - 7),\n value,\n true,\n );\n } else {\n let eventName;\n if (attribute in window) {\n // standard event\n // the JSX attribute could have been \"onMouseOver\" and the\n // member name \"onmouseover\" is on the window's prototype\n // so let's add the listener \"mouseover\", which is all lowercased\n const standardEventName = attribute.substring(2);\n eventName = standardEventName;\n } else {\n // custom event\n // the JSX attribute could have been \"onMyCustomEvent\"\n // so let's trim off the \"on\" prefix and lowercase the first character\n // and add the listener \"myCustomEvent\"\n // except for the first character, we keep the event name case\n const customEventName = attribute[2] + key.slice(3);\n eventName = customEventName;\n }\n node.addEventListener(eventName, value);\n }\n }\n } else if (isObject(value)) {\n node[key] = value;\n } else if (value === true) {\n attr(node, key, \"\");\n } else if (value !== false && value != null) {\n if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {\n attr(node, normalizeAttribute(key, \"-\"), value);\n } else {\n attr(node, key, value);\n }\n }\n}\nfunction attr(node, key, value) {\n node.setAttribute(key, value);\n}\nfunction attrNS(node, namespace, key, value) {\n node.setAttributeNS(namespace, key, value);\n}\nfunction attributes(attr, node) {\n for (const key of keys(attr)) {\n attribute(key, attr[key], node);\n }\n return node;\n}\n\nfunction useText(initialValue) {\n const text = new Text();\n Object.defineProperty(text, \"toString\", {\n value() {\n return this.textContent;\n },\n });\n function setText(value) {\n text.textContent = value;\n }\n if (initialValue != null) {\n setText(initialValue);\n }\n return [text, setText];\n}\nfunction useClassList(initialValue) {\n const div = document.createElement(\"div\");\n if (initialValue != null) {\n div.className = className(initialValue);\n }\n let list = div.classList;\n function ClassList(value) {\n value.setAttribute(\"class\", list.value);\n list = value.classList;\n }\n Object.defineProperties(\n ClassList,\n Object.getOwnPropertyDescriptors({\n get size() {\n return list.length;\n },\n get value() {\n return list.value;\n },\n add() {\n list.add(...arguments);\n },\n remove() {\n list.remove(...arguments);\n },\n toggle(token, force) {\n list.toggle(token, force);\n },\n contains(token) {\n return list.contains(token);\n },\n }),\n );\n return ClassList;\n}\n\nfunction useMemo(factory) {\n return factory();\n}\nfunction forwardRef(render) {\n return (_ref) => {\n let { ref, ...props } = _ref;\n return render(props, ref ?? createRef());\n };\n}\nfunction useImperativeHandle(ref, init) {\n attachRef(ref, init());\n}\n\nconst cache = /* @__PURE__ */ new Map();\nconst createStyledComponent = (name) =>\n function (list) {\n for (\n var _len = arguments.length,\n interpolations = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n interpolations[_key - 1] = arguments[_key];\n }\n return (_ref) => {\n let { style, ...props } = _ref;\n const lastIndex = list.length - 1;\n const css =\n list.slice(0, lastIndex).reduce((p, s, i) => {\n const interpolation = interpolations[i];\n const current =\n typeof interpolation === \"function\"\n ? interpolation(props)\n : interpolation;\n return p + s + current;\n }, \"\") + list[lastIndex];\n return createElement(name, {\n style: [css, style],\n ...props,\n });\n };\n };\nconst baseStyled = (customComponent) => createStyledComponent(customComponent);\nconst styled = /* @__PURE__ */ new Proxy(baseStyled, {\n get(_, name) {\n return setIfAbsent(cache, name, () => createStyledComponent(name));\n },\n});\nfunction setIfAbsent(map, key, getValue) {\n if (map.has(key)) {\n return map.get(key);\n } else {\n const value = getValue(key);\n map.set(key, value);\n return value;\n }\n}\n\nvar index = {\n Component,\n PureComponent: Component,\n createElement,\n Fragment,\n ShadowRoot,\n};\nfunction preventDefault(event) {\n event.preventDefault();\n return event;\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n return event;\n}\n\nexport {\n Component,\n Fragment,\n Component as PureComponent,\n SVGNamespace,\n ShadowRoot,\n Fragment as StrictMode,\n className,\n createElement,\n createFactory,\n createRef,\n index as default,\n forwardRef,\n createElement as h,\n isRef,\n jsx,\n jsx as jsxs,\n identity as memo,\n preventDefault,\n stopPropagation,\n styled,\n identity as useCallback,\n useClassList,\n useImperativeHandle,\n useMemo,\n createRef as useRef,\n useText,\n};\n","import { JSX } from 'vue/jsx-runtime'\nimport styles from './styles.module.sass'\n\nexport const ProgressBar = (\n attrs: JSX.IntrinsicElements['div'] & { indeterminate?: boolean; progress?: number }\n) => {\n const indeterminate = attrs.indeterminate ?? true\n const bar = (\n <div\n class={`${styles.ipe_progress}`}\n data-indeterminate={`${indeterminate}`}\n // @ts-ignore\n style={{ width: '100%', '--progress': attrs.progress ? `${attrs.progress}%` : '0%' }}\n {...attrs}\n ></div>\n ) as HTMLElement & { setProgress: (progress: number) => void }\n bar.setProgress = (progress: number | undefined) => {\n if (typeof progress === 'number') {\n bar.dataset.indeterminate = 'false'\n bar.style.setProperty('--progress', `${progress}%`)\n } else {\n bar.dataset.indeterminate = 'true'\n bar.style.setProperty('--progress', '0%')\n }\n }\n return bar\n}\n"],"names":["keys","isBoolean","val","isElement","isString","isNumber","isObject","isFunction","isComponentClass","Component","isArrayLike","obj","forEach","value","fn","key","isRef","maybeRef","isUnitlessNumber","prefixKey","prefix","prefixes","prop","jsxDomType","JsxDomType","isShadowRoot","el","SVGNamespace","XLinkNamespace","XMLNamespace","isVisibleChild","className","k","svg","nonPresentationSVGAttributes","Fragment","attr","fragment","appendChild","initComponentClass","Class","children","instance","node","attachRef","jsx","tag","_ref","attributes","values","option","createElement","_len","_key2","ref","child","appendChildren","appendChildToNode","shadowRoot","normalizeAttribute","s","separator","match","style","v","attribute","attrNS","dataValue","dataKey","eventHandler","eventName","useCapture","namespace","ProgressBar","attrs","indeterminate","bar","styles","progress"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as i, F as P, P as E } from "./index-CM_6yF2v.js";
|
|
2
|
-
import { B as C, I as q, S as x } from "./index-
|
|
2
|
+
import { B as C, I as q, S as x } from "./index-DgQNTfPR.js";
|
|
3
3
|
import { I as z } from "./IconQuickEdit-CMCQncyj.js";
|
|
4
4
|
import { R as j } from "./Preferences-DS4-CFWe.js";
|
|
5
5
|
import { M as I } from "./index-CG38LlAh.js";
|
|
@@ -365,4 +365,4 @@ G(p, 1, h);
|
|
|
365
365
|
export {
|
|
366
366
|
h as PluginQuickDiff
|
|
367
367
|
};
|
|
368
|
-
//# sourceMappingURL=index-
|
|
368
|
+
//# sourceMappingURL=index-Ccr3YhkP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-D4uwfUZL.js","sources":["../src/components/MwUserLinks.tsx","../src/plugins/quick-diff/components/DiffTable.tsx","../src/components/utils.tsx","../src/plugins/quick-diff/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\r\n\r\nexport const MwUserLinks = (props: { user: string; target?: string; ctx: InPageEdit }) => {\r\n let { user, target, ctx } = props\r\n const getUrl = ctx.getUrl.bind(ctx)\r\n return (\r\n <span className=\"mw-userlinks\">\r\n <a href={getUrl(`User:${user}`)} className=\"mw-userlink\" target={target}>\r\n {user}\r\n </a>{' '}\r\n <span className=\"mw-usertoollinks\">\r\n (\r\n <a href={getUrl(`User_talk:${user}`)} className=\"mw-usertoollinks-talk\" target={target}>\r\n talk\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Contributions/${user}`)}\r\n className=\"mw-usertoollinks-contribs\"\r\n target={target}\r\n >\r\n contribs\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Block/${user}`)}\r\n className=\"mw-usertoollinks-block\"\r\n target={target}\r\n >\r\n block\r\n </a>\r\n )\r\n </span>\r\n </span>\r\n )\r\n}\r\n","import './style.scss'\r\nimport { JSX } from 'jsx-dom/jsx-runtime'\r\nimport { CompareApiResponse } from '../index.js'\r\nimport { InPageEdit } from '@/InPageEdit.js'\r\n\r\nexport type DiffTableProps = {\r\n data: Partial<CompareApiResponse['compare']>\r\n ctx: InPageEdit\r\n} & JSX.IntrinsicElements['table']\r\n\r\nexport enum DiffTableEvent {\r\n update = 'ipe:diff-table/update',\r\n edit = 'ipe:diff-table/edit',\r\n}\r\n\r\n// DOM 事件类型定义\r\ndeclare global {\r\n interface HTMLElementEventMap {\r\n [DiffTableEvent.update]: CustomEvent<{\r\n fromrev: number\r\n torev: number\r\n }>\r\n [DiffTableEvent.edit]: CustomEvent<{\r\n revid: number\r\n }>\r\n }\r\n}\r\n\r\nconst formatDate = new Intl.DateTimeFormat(undefined, {\r\n dateStyle: 'medium',\r\n timeStyle: 'medium',\r\n}).format\r\n\r\nconst DiffTableHeader = (props: {\r\n ctx: InPageEdit\r\n type?: 'from' | 'to'\r\n pageid?: number\r\n pagetitle?: string\r\n revid?: number\r\n size?: number\r\n timestamp?: string\r\n username?: string\r\n userid?: number\r\n comment?: string\r\n parsedcomment?: string\r\n}) => {\r\n let classList = ['diff-title']\r\n if (props.type === 'from') {\r\n classList.push('diff-otitle')\r\n } else if (props.type === 'to') {\r\n classList.push('diff-ntitle')\r\n }\r\n if (!props.pageid || !props.userid) {\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.type === 'from' ? 'Original content' : props.type === 'to' ? 'Your content' : ''}\r\n </div>\r\n </td>\r\n )\r\n }\r\n const handleEditClick = (e: Event) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.edit, {\r\n detail: { revid: props.revid! },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.pagetitle || props.timestamp}\r\n {props.revid ? ` (rev#${props.revid})` : ''}\r\n </div>\r\n <div className=\"mw-diff-title--actions\">\r\n <a\r\n href={props.ctx.getUrl('', { action: 'edit', oldid: props.revid! })}\r\n onClick={handleEditClick}\r\n >\r\n <IconQuickEdit style=\"width: 1em; height: 1em\" />\r\n Quick edit\r\n </a>\r\n </div>\r\n <div className=\"mw-diff-title--user\">\r\n {props.username && <MwUserLinks ctx={props.ctx} user={props.username} target=\"_blank\" />}\r\n </div>\r\n <div className=\"mw-diff-title--timestamp\">\r\n {props.timestamp && formatDate(new Date(props.timestamp))}\r\n </div>\r\n <div className=\"mw-diff-title--comment\">\r\n {props.parsedcomment && (\r\n <>\r\n (<i innerHTML={props.parsedcomment}></i>)\r\n </>\r\n )}\r\n </div>\r\n </td>\r\n )\r\n}\r\n\r\nconst DiffTableNavigation = (props: { data: DiffTableProps['data']; ctx: InPageEdit }) => {\r\n const data = props.data\r\n if (!data.prev && !data.next) {\r\n return null\r\n }\r\n\r\n // 统一的事件处理器\r\n const handleNavigationClick = (e: Event, fromrev: number, torev: number) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.update, {\r\n detail: { fromrev, torev },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n\r\n return (\r\n <tr className=\"mw-diff-title--navigation\">\r\n <td colSpan={2}>\r\n {data.prev ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.prev!, oldid: data.fromrevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.prev!, data.fromrevid!)}\r\n >\r\n ← Previous\r\n </a>\r\n ) : (\r\n <i>Oldest version</i>\r\n )}\r\n </td>\r\n <td colSpan={2}>\r\n {data.next ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.next!, oldid: data.torevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.torevid!, data.next!)}\r\n >\r\n Next →\r\n </a>\r\n ) : (\r\n <i>Newest version</i>\r\n )}\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nexport const DiffTable = (props: DiffTableProps) => {\r\n const { data, ...rest } = props\r\n const table = (\r\n <table className={`theme-ipe diff diff-type-table`} data-mw=\"interface\" {...rest}>\r\n <colgroup>\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n </colgroup>\r\n <tbody>\r\n <tr>\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"from\"\r\n pageid={data.fromid}\r\n pagetitle={data.fromtitle}\r\n revid={data.fromrevid}\r\n size={data.fromsize}\r\n timestamp={data.fromtimestamp}\r\n username={data.fromuser}\r\n userid={data.fromuserid}\r\n comment={data.fromcomment}\r\n parsedcomment={data.fromparsedcomment}\r\n />\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"to\"\r\n pageid={data.toid}\r\n pagetitle={data.totitle}\r\n revid={data.torevid}\r\n size={data.tosize}\r\n timestamp={data.totimestamp}\r\n username={data.touser}\r\n userid={data.touserid}\r\n comment={data.tocomment}\r\n parsedcomment={data.toparsedcomment}\r\n />\r\n </tr>\r\n <DiffTableNavigation data={data} ctx={props.ctx} />\r\n <div id=\"diffbody\"></div>\r\n <tr className=\"diff-size\" style={{ textAlign: 'center' }}>\r\n <td colSpan={2} className=\"diff-size-old\">\r\n {data.fromsize !== undefined && `${data.fromsize} bytes`}\r\n </td>\r\n <td colSpan={2} className=\"diff-size-new\">\r\n {data.tosize !== undefined && `${data.tosize} bytes`}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n )\r\n table.querySelector('#diffbody')!.outerHTML =\r\n data.body ||\r\n (\r\n <tr>\r\n <td colSpan={4}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '5rem',\r\n }}\r\n >\r\n <i>No changes</i>\r\n </div>\r\n </td>\r\n </tr>\r\n ).outerHTML\r\n return table\r\n}\r\n","import { CSSProperties, ReactElement } from 'jsx-dom'\r\n\r\nexport const qs = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelector(selector) as T | null\r\n}\r\nexport const qsa = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelectorAll(selector) as NodeListOf<T>\r\n}\r\n\r\nexport const setStyles = (el: HTMLElement | ReactElement, style: CSSProperties) => {\r\n Object.entries(style).forEach(([key, value]) => {\r\n if (typeof value === 'undefined' || value === null) {\r\n el.style.removeProperty(key)\r\n } else {\r\n const isImportant = typeof value === 'string' && value.endsWith('!important')\r\n // @ts-ignore\r\n el.style.setProperty(\r\n key,\r\n value.replace('!important', '').trim(),\r\n isImportant ? 'important' : undefined\r\n )\r\n }\r\n })\r\n return el\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\nimport { DiffTable, DiffTableEvent } from './components/DiffTable'\nimport { MwApiResponse } from 'wiki-saikou'\nimport { IWikiPage } from '@/models/WikiPage/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickDiff: PluginQuickDiff\n }\n interface Events {\n 'quick-diff/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<CompareApiRequestOptions>\n }): void\n 'quick-diff/loaded'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n compare: CompareApiResponse['compare']\n }): void\n 'quick-diff/quick-edit-modal'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: IWikiPage\n }): void\n }\n interface PreferencesMap {\n 'quickDiff.keyshortcut': string\n }\n}\n\nexport interface CompareApiRequestOptions {\n fromtitle: string\n fromid: number\n fromrev: number\n frompst: boolean\n totitle: string\n toid: number\n torev: number\n torelative?: 'cur' | 'prev' | 'next'\n topst: boolean\n prop: string\n difftype: 'table' | 'unified'\n // deprecated, but still works\n fromtext: string\n fromsection: string | number\n fromcontentmodel: string\n totext: string\n tosection: string | number\n tocontentmodel: string\n}\n\nexport interface CompareApiResponse {\n compare: Partial<{\n fromid: number\n fromrevid: number\n fromns: number\n fromtitle: string\n fromsize: number\n fromtimestamp: string\n fromuser: string\n fromuserid: number\n fromcomment: string\n fromparsedcomment?: string\n toid: number\n torevid: number\n tons: number\n totitle: string\n tosize: number\n totimestamp: string\n touser: string\n touserid: number\n tocomment: string\n toparsedcomment: string\n diffsize: number\n prev: number\n next: number\n }> & {\n body: string\n }\n}\n\n@Inject(['wiki', 'getUrl', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'quickDiff.keyshortcut': Schema.string()\n .default('ctrl-d')\n .description('Key shortcut to open quick diff in quick edit modal'),\n })\n .description('Quick diff options')\n .extra('category', 'editor')\n)\nexport class PluginQuickDiff extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-diff')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickDiff', this)\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n window.RLQ.push(this.injectHistoryPage.bind(this))\n }\n\n protected stop(): Promise<void> | void {}\n\n private injectHistoryPage() {\n const mwCompareForm = qs<HTMLFormElement>('#mw-history-compare')\n if (!mwCompareForm) {\n return\n }\n const compareButtons = qsa('.mw-history-compareselectedversions-button', mwCompareForm)\n compareButtons.forEach((el) => {\n el.after(\n <button\n className=\"cdx-button\"\n onClick={(e) => {\n e.preventDefault()\n const formData = new FormData(mwCompareForm)\n const fromrev = Number(formData.get('oldid')) || 0\n const torev = Number(formData.get('diff')) || 0\n const title = formData.get('title') as string\n if (!title || !fromrev || !torev) {\n return this.logger.warn('Missing title or revision IDs')\n }\n this.comparePages({\n fromrev,\n torev,\n })\n }}\n >\n Quick Diff\n </button>\n )\n })\n }\n\n private async injectQuickEdit({ modal, wikiPage, options }: QuickEditEventPayload) {\n if (wikiPage.pageid === 0 || options.section === 'new') {\n // User is creating a new page, no need to show diff button\n return\n }\n let latestDiffModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: 'Diff',\n side: 'left',\n keyPress: (await this.ctx.preferences.get('quickDiff.keyshortcut')) || undefined,\n className: 'btn btn-secondary',\n method: () => {\n const pageTitle = wikiPage.title\n const fromtext = wikiPage.revisions?.[0]?.content || ''\n const totext =\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || ''\n\n if (fromtext === totext) {\n return this.ctx.modal.notify('info', { title: 'Quick Diff', content: 'No changes' })\n }\n\n this.ctx.emit('quick-diff/quick-edit-modal', {\n ctx: this.ctx,\n modal,\n wikiPage,\n })\n\n latestDiffModal = this.comparePages(\n {\n fromtitle: pageTitle,\n fromtext,\n totitle: pageTitle,\n totext,\n topst: true,\n },\n latestDiffModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n return latestDiffModal\n },\n },\n 2\n )\n modal.on(modal.Event.Close, () => {\n latestDiffModal?.destroy()\n latestDiffModal = undefined\n })\n }\n\n readonly COMPARE_API_DEFAULT_OPTIONS: Partial<CompareApiRequestOptions> = {\n prop: [\n 'comment',\n 'diff',\n 'diffsize',\n 'ids',\n 'parsedcomment',\n 'size',\n 'timestamp',\n 'title',\n 'user',\n 'rel',\n ].join('|'),\n difftype: 'table',\n }\n\n comparePages(\n options: Partial<CompareApiRequestOptions>,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n title: 'Loading diff...',\n content: '',\n className: 'quick-diff',\n center: false,\n ...modalOptions,\n })\n .init()\n } else {\n modal.removeButton('*')\n }\n\n this.ctx.emit('quick-diff/init-options', {\n ctx: this.ctx,\n options,\n })\n\n modal.setContent(\n <section\n style={{ height: '70vh', display: 'flex', justifyContent: 'center', alignItems: 'center' }}\n >\n <ProgressBar />\n </section>\n )\n modal.bringToFront()\n\n if (window.mw && mw.loader.getState('mediawiki.diff.styles') !== 'ready') {\n mw.loader.load(['mediawiki.diff.styles'])\n }\n\n this.ctx.api\n .post<MwApiResponse<CompareApiResponse>>({\n ...this.COMPARE_API_DEFAULT_OPTIONS,\n ...options,\n action: 'compare',\n format: 'json',\n formatversion: 2,\n })\n .then((res) => {\n if (!res.data.compare) {\n throw new Error('No compare data received', { cause: res })\n }\n const {\n data: { compare },\n } = res\n modal.setTitle(\n compare.fromtitle && compare.totitle\n ? `${compare.fromtitle}${compare.fromrevid ? ` (${compare.fromrevid})` : ''} ⇔ ${compare.totitle}${compare.torevid ? ` (${compare.torevid})` : ''}`\n : 'Differences'\n )\n let diffTable!: HTMLElement\n modal.setContent(\n (\n <section\n style={{\n minHeight: '70vh',\n }}\n >\n <DiffTable ref={(ref) => (diffTable = ref)} data={compare} ctx={this.ctx} />\n </section>\n ) as HTMLElement\n )\n diffTable.addEventListener(\n DiffTableEvent.update,\n (e) => {\n e.stopPropagation()\n this.comparePages(\n {\n fromrev: e.detail.fromrev,\n torev: e.detail.torev,\n },\n modal,\n modalOptions\n )\n },\n { once: true }\n )\n\n // TODO: 不应该硬编码,移动到 in-article-links 插件中\n this.ctx.inject(['quickEdit'], (ctx) => {\n const handleQuickEdit = (e: CustomEvent<{ revid: number }>) => {\n e.stopPropagation()\n ctx.quickEdit({ revision: e.detail.revid })\n }\n diffTable.addEventListener(DiffTableEvent.edit, handleQuickEdit)\n modal.on(modal.Event.Close, () => {\n diffTable.removeEventListener(DiffTableEvent.edit, handleQuickEdit)\n })\n })\n\n if (compare.fromrevid && compare.torevid) {\n modal.addButton({\n label: 'Original Compare Page',\n side: 'right',\n className: 'btn btn-secondary',\n method: () => {\n window.location.href = this.ctx.getUrl('', {\n oldid: compare.fromrevid,\n diff: compare.torevid,\n })\n },\n })\n }\n\n this.ctx.emit('quick-diff/loaded', {\n ctx: this.ctx,\n modal,\n compare,\n })\n })\n .catch((err) => {\n modal.setContent(\n (\n <MBox title=\"Failed to load diff\" type=\"error\">\n <pre>{err instanceof Error ? err.message : String(err)}</pre>\n </MBox>\n ) as HTMLElement\n )\n })\n\n return modal.show()\n }\n}\n"],"names":["MwUserLinks","props","user","target","ctx","getUrl","jsxs","jsx","DiffTableEvent","formatDate","DiffTableHeader","classList","handleEditClick","e","IconQuickEdit","Fragment","DiffTableNavigation","data","handleNavigationClick","fromrev","torev","DiffTable","rest","table","qs","selector","parent","qsa","_PluginQuickDiff_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDiff","BasePlugin","mwCompareForm","el","formData","modal","wikiPage","options","latestDiffModal","pageTitle","fromtext","totext","modalOptions","ProgressBar","res","compare","diffTable","ref","handleQuickEdit","err","MBox","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-Ccr3YhkP.js","sources":["../src/components/MwUserLinks.tsx","../src/plugins/quick-diff/components/DiffTable.tsx","../src/components/utils.tsx","../src/plugins/quick-diff/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\n\nexport const MwUserLinks = (props: { user: string; target?: string; ctx: InPageEdit }) => {\n let { user, target, ctx } = props\n const getUrl = ctx.getUrl.bind(ctx)\n return (\n <span className=\"mw-userlinks\">\n <a href={getUrl(`User:${user}`)} className=\"mw-userlink\" target={target}>\n {user}\n </a>{' '}\n <span className=\"mw-usertoollinks\">\n (\n <a href={getUrl(`User_talk:${user}`)} className=\"mw-usertoollinks-talk\" target={target}>\n talk\n </a>\n {' | '}\n <a\n href={getUrl(`Special:Contributions/${user}`)}\n className=\"mw-usertoollinks-contribs\"\n target={target}\n >\n contribs\n </a>\n {' | '}\n <a\n href={getUrl(`Special:Block/${user}`)}\n className=\"mw-usertoollinks-block\"\n target={target}\n >\n block\n </a>\n )\n </span>\n </span>\n )\n}\n","import './style.scss'\nimport { JSX } from 'jsx-dom/jsx-runtime'\nimport { CompareApiResponse } from '../index.js'\nimport { InPageEdit } from '@/InPageEdit.js'\n\nexport type DiffTableProps = {\n data: Partial<CompareApiResponse['compare']>\n ctx: InPageEdit\n} & JSX.IntrinsicElements['table']\n\nexport enum DiffTableEvent {\n update = 'ipe:diff-table/update',\n edit = 'ipe:diff-table/edit',\n}\n\n// DOM 事件类型定义\ndeclare global {\n interface HTMLElementEventMap {\n [DiffTableEvent.update]: CustomEvent<{\n fromrev: number\n torev: number\n }>\n [DiffTableEvent.edit]: CustomEvent<{\n revid: number\n }>\n }\n}\n\nconst formatDate = new Intl.DateTimeFormat(undefined, {\n dateStyle: 'medium',\n timeStyle: 'medium',\n}).format\n\nconst DiffTableHeader = (props: {\n ctx: InPageEdit\n type?: 'from' | 'to'\n pageid?: number\n pagetitle?: string\n revid?: number\n size?: number\n timestamp?: string\n username?: string\n userid?: number\n comment?: string\n parsedcomment?: string\n}) => {\n let classList = ['diff-title']\n if (props.type === 'from') {\n classList.push('diff-otitle')\n } else if (props.type === 'to') {\n classList.push('diff-ntitle')\n }\n if (!props.pageid || !props.userid) {\n return (\n <td colSpan={2} className={classList}>\n <div className=\"mw-diff-title--title\">\n {props.type === 'from' ? 'Original content' : props.type === 'to' ? 'Your content' : ''}\n </div>\n </td>\n )\n }\n const handleEditClick = (e: Event) => {\n e.preventDefault()\n e.target!.dispatchEvent(\n new CustomEvent(DiffTableEvent.edit, {\n detail: { revid: props.revid! },\n bubbles: true,\n })\n )\n }\n return (\n <td colSpan={2} className={classList}>\n <div className=\"mw-diff-title--title\">\n {props.pagetitle || props.timestamp}\n {props.revid ? ` (rev#${props.revid})` : ''}\n </div>\n <div className=\"mw-diff-title--actions\">\n <a\n href={props.ctx.getUrl('', { action: 'edit', oldid: props.revid! })}\n onClick={handleEditClick}\n >\n <IconQuickEdit style=\"width: 1em; height: 1em\" />\n Quick edit\n </a>\n </div>\n <div className=\"mw-diff-title--user\">\n {props.username && <MwUserLinks ctx={props.ctx} user={props.username} target=\"_blank\" />}\n </div>\n <div className=\"mw-diff-title--timestamp\">\n {props.timestamp && formatDate(new Date(props.timestamp))}\n </div>\n <div className=\"mw-diff-title--comment\">\n {props.parsedcomment && (\n <>\n (<i innerHTML={props.parsedcomment}></i>)\n </>\n )}\n </div>\n </td>\n )\n}\n\nconst DiffTableNavigation = (props: { data: DiffTableProps['data']; ctx: InPageEdit }) => {\n const data = props.data\n if (!data.prev && !data.next) {\n return null\n }\n\n // 统一的事件处理器\n const handleNavigationClick = (e: Event, fromrev: number, torev: number) => {\n e.preventDefault()\n e.target!.dispatchEvent(\n new CustomEvent(DiffTableEvent.update, {\n detail: { fromrev, torev },\n bubbles: true,\n })\n )\n }\n\n return (\n <tr className=\"mw-diff-title--navigation\">\n <td colSpan={2}>\n {data.prev ? (\n <a\n href={props.ctx.getUrl('', { diff: data.prev!, oldid: data.fromrevid! })}\n onClick={(e) => handleNavigationClick(e, data.prev!, data.fromrevid!)}\n >\n ← Previous\n </a>\n ) : (\n <i>Oldest version</i>\n )}\n </td>\n <td colSpan={2}>\n {data.next ? (\n <a\n href={props.ctx.getUrl('', { diff: data.next!, oldid: data.torevid! })}\n onClick={(e) => handleNavigationClick(e, data.torevid!, data.next!)}\n >\n Next →\n </a>\n ) : (\n <i>Newest version</i>\n )}\n </td>\n </tr>\n )\n}\n\nexport const DiffTable = (props: DiffTableProps) => {\n const { data, ...rest } = props\n const table = (\n <table className={`theme-ipe diff diff-type-table`} data-mw=\"interface\" {...rest}>\n <colgroup>\n <col className=\"diff-marker\" />\n <col className=\"diff-content\" />\n <col className=\"diff-marker\" />\n <col className=\"diff-content\" />\n </colgroup>\n <tbody>\n <tr>\n <DiffTableHeader\n ctx={props.ctx}\n type=\"from\"\n pageid={data.fromid}\n pagetitle={data.fromtitle}\n revid={data.fromrevid}\n size={data.fromsize}\n timestamp={data.fromtimestamp}\n username={data.fromuser}\n userid={data.fromuserid}\n comment={data.fromcomment}\n parsedcomment={data.fromparsedcomment}\n />\n <DiffTableHeader\n ctx={props.ctx}\n type=\"to\"\n pageid={data.toid}\n pagetitle={data.totitle}\n revid={data.torevid}\n size={data.tosize}\n timestamp={data.totimestamp}\n username={data.touser}\n userid={data.touserid}\n comment={data.tocomment}\n parsedcomment={data.toparsedcomment}\n />\n </tr>\n <DiffTableNavigation data={data} ctx={props.ctx} />\n <div id=\"diffbody\"></div>\n <tr className=\"diff-size\" style={{ textAlign: 'center' }}>\n <td colSpan={2} className=\"diff-size-old\">\n {data.fromsize !== undefined && `${data.fromsize} bytes`}\n </td>\n <td colSpan={2} className=\"diff-size-new\">\n {data.tosize !== undefined && `${data.tosize} bytes`}\n </td>\n </tr>\n </tbody>\n </table>\n )\n table.querySelector('#diffbody')!.outerHTML =\n data.body ||\n (\n <tr>\n <td colSpan={4}>\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '5rem',\n }}\n >\n <i>No changes</i>\n </div>\n </td>\n </tr>\n ).outerHTML\n return table\n}\n","import { CSSProperties, ReactElement } from 'jsx-dom'\n\nexport const qs = <T extends Element>(\n selector: string,\n parent: HTMLElement | Document = document\n) => {\n return parent.querySelector(selector) as T | null\n}\nexport const qsa = <T extends Element>(\n selector: string,\n parent: HTMLElement | Document = document\n) => {\n return parent.querySelectorAll(selector) as NodeListOf<T>\n}\n\nexport const setStyles = (el: HTMLElement | ReactElement, style: CSSProperties) => {\n Object.entries(style).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === null) {\n el.style.removeProperty(key)\n } else {\n const isImportant = typeof value === 'string' && value.endsWith('!important')\n // @ts-ignore\n el.style.setProperty(\n key,\n value.replace('!important', '').trim(),\n isImportant ? 'important' : undefined\n )\n }\n })\n return el\n}\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\nimport { DiffTable, DiffTableEvent } from './components/DiffTable'\nimport { MwApiResponse } from 'wiki-saikou'\nimport { IWikiPage } from '@/models/WikiPage/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickDiff: PluginQuickDiff\n }\n interface Events {\n 'quick-diff/init-options'(payload: {\n ctx: InPageEdit\n options: Partial<CompareApiRequestOptions>\n }): void\n 'quick-diff/loaded'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n compare: CompareApiResponse['compare']\n }): void\n 'quick-diff/quick-edit-modal'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: IWikiPage\n }): void\n }\n interface PreferencesMap {\n 'quickDiff.keyshortcut': string\n }\n}\n\nexport interface CompareApiRequestOptions {\n fromtitle: string\n fromid: number\n fromrev: number\n frompst: boolean\n totitle: string\n toid: number\n torev: number\n torelative?: 'cur' | 'prev' | 'next'\n topst: boolean\n prop: string\n difftype: 'table' | 'unified'\n // deprecated, but still works\n fromtext: string\n fromsection: string | number\n fromcontentmodel: string\n totext: string\n tosection: string | number\n tocontentmodel: string\n}\n\nexport interface CompareApiResponse {\n compare: Partial<{\n fromid: number\n fromrevid: number\n fromns: number\n fromtitle: string\n fromsize: number\n fromtimestamp: string\n fromuser: string\n fromuserid: number\n fromcomment: string\n fromparsedcomment?: string\n toid: number\n torevid: number\n tons: number\n totitle: string\n tosize: number\n totimestamp: string\n touser: string\n touserid: number\n tocomment: string\n toparsedcomment: string\n diffsize: number\n prev: number\n next: number\n }> & {\n body: string\n }\n}\n\n@Inject(['wiki', 'getUrl', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'quickDiff.keyshortcut': Schema.string()\n .default('ctrl-d')\n .description('Key shortcut to open quick diff in quick edit modal'),\n })\n .description('Quick diff options')\n .extra('category', 'editor')\n)\nexport class PluginQuickDiff extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-diff')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickDiff', this)\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n window.RLQ.push(this.injectHistoryPage.bind(this))\n }\n\n protected stop(): Promise<void> | void {}\n\n private injectHistoryPage() {\n const mwCompareForm = qs<HTMLFormElement>('#mw-history-compare')\n if (!mwCompareForm) {\n return\n }\n const compareButtons = qsa('.mw-history-compareselectedversions-button', mwCompareForm)\n compareButtons.forEach((el) => {\n el.after(\n <button\n className=\"cdx-button\"\n onClick={(e) => {\n e.preventDefault()\n const formData = new FormData(mwCompareForm)\n const fromrev = Number(formData.get('oldid')) || 0\n const torev = Number(formData.get('diff')) || 0\n const title = formData.get('title') as string\n if (!title || !fromrev || !torev) {\n return this.logger.warn('Missing title or revision IDs')\n }\n this.comparePages({\n fromrev,\n torev,\n })\n }}\n >\n Quick Diff\n </button>\n )\n })\n }\n\n private async injectQuickEdit({ modal, wikiPage, options }: QuickEditEventPayload) {\n if (wikiPage.pageid === 0 || options.section === 'new') {\n // User is creating a new page, no need to show diff button\n return\n }\n let latestDiffModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: 'Diff',\n side: 'left',\n keyPress: (await this.ctx.preferences.get('quickDiff.keyshortcut')) || undefined,\n className: 'btn btn-secondary',\n method: () => {\n const pageTitle = wikiPage.title\n const fromtext = wikiPage.revisions?.[0]?.content || ''\n const totext =\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || ''\n\n if (fromtext === totext) {\n return this.ctx.modal.notify('info', { title: 'Quick Diff', content: 'No changes' })\n }\n\n this.ctx.emit('quick-diff/quick-edit-modal', {\n ctx: this.ctx,\n modal,\n wikiPage,\n })\n\n latestDiffModal = this.comparePages(\n {\n fromtitle: pageTitle,\n fromtext,\n totitle: pageTitle,\n totext,\n topst: true,\n },\n latestDiffModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n return latestDiffModal\n },\n },\n 2\n )\n modal.on(modal.Event.Close, () => {\n latestDiffModal?.destroy()\n latestDiffModal = undefined\n })\n }\n\n readonly COMPARE_API_DEFAULT_OPTIONS: Partial<CompareApiRequestOptions> = {\n prop: [\n 'comment',\n 'diff',\n 'diffsize',\n 'ids',\n 'parsedcomment',\n 'size',\n 'timestamp',\n 'title',\n 'user',\n 'rel',\n ].join('|'),\n difftype: 'table',\n }\n\n comparePages(\n options: Partial<CompareApiRequestOptions>,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n title: 'Loading diff...',\n content: '',\n className: 'quick-diff',\n center: false,\n ...modalOptions,\n })\n .init()\n } else {\n modal.removeButton('*')\n }\n\n this.ctx.emit('quick-diff/init-options', {\n ctx: this.ctx,\n options,\n })\n\n modal.setContent(\n <section\n style={{ height: '70vh', display: 'flex', justifyContent: 'center', alignItems: 'center' }}\n >\n <ProgressBar />\n </section>\n )\n modal.bringToFront()\n\n if (window.mw && mw.loader.getState('mediawiki.diff.styles') !== 'ready') {\n mw.loader.load(['mediawiki.diff.styles'])\n }\n\n this.ctx.api\n .post<MwApiResponse<CompareApiResponse>>({\n ...this.COMPARE_API_DEFAULT_OPTIONS,\n ...options,\n action: 'compare',\n format: 'json',\n formatversion: 2,\n })\n .then((res) => {\n if (!res.data.compare) {\n throw new Error('No compare data received', { cause: res })\n }\n const {\n data: { compare },\n } = res\n modal.setTitle(\n compare.fromtitle && compare.totitle\n ? `${compare.fromtitle}${compare.fromrevid ? ` (${compare.fromrevid})` : ''} ⇔ ${compare.totitle}${compare.torevid ? ` (${compare.torevid})` : ''}`\n : 'Differences'\n )\n let diffTable!: HTMLElement\n modal.setContent(\n (\n <section\n style={{\n minHeight: '70vh',\n }}\n >\n <DiffTable ref={(ref) => (diffTable = ref)} data={compare} ctx={this.ctx} />\n </section>\n ) as HTMLElement\n )\n diffTable.addEventListener(\n DiffTableEvent.update,\n (e) => {\n e.stopPropagation()\n this.comparePages(\n {\n fromrev: e.detail.fromrev,\n torev: e.detail.torev,\n },\n modal,\n modalOptions\n )\n },\n { once: true }\n )\n\n // TODO: 不应该硬编码,移动到 in-article-links 插件中\n this.ctx.inject(['quickEdit'], (ctx) => {\n const handleQuickEdit = (e: CustomEvent<{ revid: number }>) => {\n e.stopPropagation()\n ctx.quickEdit({ revision: e.detail.revid })\n }\n diffTable.addEventListener(DiffTableEvent.edit, handleQuickEdit)\n modal.on(modal.Event.Close, () => {\n diffTable.removeEventListener(DiffTableEvent.edit, handleQuickEdit)\n })\n })\n\n if (compare.fromrevid && compare.torevid) {\n modal.addButton({\n label: 'Original Compare Page',\n side: 'right',\n className: 'btn btn-secondary',\n method: () => {\n window.location.href = this.ctx.getUrl('', {\n oldid: compare.fromrevid,\n diff: compare.torevid,\n })\n },\n })\n }\n\n this.ctx.emit('quick-diff/loaded', {\n ctx: this.ctx,\n modal,\n compare,\n })\n })\n .catch((err) => {\n modal.setContent(\n (\n <MBox title=\"Failed to load diff\" type=\"error\">\n <pre>{err instanceof Error ? err.message : String(err)}</pre>\n </MBox>\n ) as HTMLElement\n )\n })\n\n return modal.show()\n }\n}\n"],"names":["MwUserLinks","props","user","target","ctx","getUrl","jsxs","jsx","DiffTableEvent","formatDate","DiffTableHeader","classList","handleEditClick","e","IconQuickEdit","Fragment","DiffTableNavigation","data","handleNavigationClick","fromrev","torev","DiffTable","rest","table","qs","selector","parent","qsa","_PluginQuickDiff_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDiff","BasePlugin","mwCompareForm","el","formData","modal","wikiPage","options","latestDiffModal","pageTitle","fromtext","totext","modalOptions","ProgressBar","res","compare","diffTable","ref","handleQuickEdit","err","MBox","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|