@inpageedit/core 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{IconQuickEdit-YVn1ANbm.js → IconQuickEdit-CAL1HXIb.js} +4 -4
- package/dist/IconQuickEdit-CAL1HXIb.js.map +1 -0
- package/dist/__test__/utils/constants.d.ts +2 -2
- package/dist/{index-DpLwTw4C.js → index-9Z4ds-WM.js} +2627 -2095
- package/dist/index-9Z4ds-WM.js.map +1 -0
- package/dist/{index-DlgTb4XY.js → index-BB9MXkUv.js} +3 -3
- package/dist/{index-DlgTb4XY.js.map → index-BB9MXkUv.js.map} +1 -1
- package/dist/{index-VzP81S7B.js → index-BDVcDlsf.js} +2 -2
- package/dist/{index-VzP81S7B.js.map → index-BDVcDlsf.js.map} +1 -1
- package/dist/{index--xn9BebC.js → index-CADkQBg0.js} +61 -69
- package/dist/{index--xn9BebC.js.map → index-CADkQBg0.js.map} +1 -1
- package/dist/{index-DTA86mHU.js → index-CBQsBfc2.js} +31 -33
- package/dist/index-CBQsBfc2.js.map +1 -0
- package/dist/{index-BT1mN_St.js → index-CNsB3Vcb.js} +2 -2
- package/dist/{index-BT1mN_St.js.map → index-CNsB3Vcb.js.map} +1 -1
- package/dist/index-CYdxWw9g.js +355 -0
- package/dist/index-CYdxWw9g.js.map +1 -0
- package/dist/{index-C0V2s48o.js → index-D7SQwFxl.js} +38 -33
- package/dist/index-D7SQwFxl.js.map +1 -0
- package/dist/index-DMNUP3fg.js +193 -0
- package/dist/index-DMNUP3fg.js.map +1 -0
- package/dist/{index-TzKe6Ebm.js → index-G3k3kjCU.js} +2 -2
- package/dist/{index-TzKe6Ebm.js.map → index-G3k3kjCU.js.map} +1 -1
- package/dist/{index-DDWds9Jg.js → index-dp6_MU68.js} +28 -28
- package/dist/index-dp6_MU68.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/models/WikiTitle/index.d.ts +1 -0
- package/dist/plugins/in-article-links/index.d.ts +1 -1
- package/dist/plugins/quick-delete/index.d.ts +1 -1
- package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +1 -1
- package/dist/plugins/quick-edit/index.d.ts +1 -1
- package/dist/plugins/quick-preview/index.d.ts +1 -1
- package/dist/services/CurrentPageService.d.ts +28 -0
- package/dist/services/{ModalService/index.d.ts → ModalService.d.ts} +4 -4
- package/dist/services/WikiMetadataService.d.ts +1 -1
- package/dist/services/WikiTitleService.d.ts +19 -7
- package/dist/style.css +1 -1
- package/lib/index.umd.js +36 -35
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +8 -7
- package/dist/IconQuickEdit-YVn1ANbm.js.map +0 -1
- package/dist/index-C0V2s48o.js.map +0 -1
- package/dist/index-DDWds9Jg.js.map +0 -1
- package/dist/index-DDef1ojx.js +0 -166
- package/dist/index-DDef1ojx.js.map +0 -1
- package/dist/index-DTA86mHU.js.map +0 -1
- package/dist/index-DpLwTw4C.js.map +0 -1
- package/dist/index-loWqosf7.js +0 -331
- package/dist/index-loWqosf7.js.map +0 -1
- package/dist/services/ModalService/IPEModal.d.ts +0 -235
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as s } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { B as I, S as b, a as v, I as S } from "./index-
|
|
2
|
+
import { B as I, S as b, a as v, I as S } from "./index-9Z4ds-WM.js";
|
|
3
3
|
import { A as w } from "./ActionButton-BgbTKTg7.js";
|
|
4
4
|
const O = (r) => typeof r == "function";
|
|
5
5
|
async function j(r) {
|
|
@@ -87,7 +87,7 @@ class u extends (D = I) {
|
|
|
87
87
|
}).description(""),
|
|
88
88
|
"about",
|
|
89
89
|
{}
|
|
90
|
-
), import("./index-
|
|
90
|
+
), import("./index-CNsB3Vcb.js").then((e) => {
|
|
91
91
|
const t = this.ctx.plugin(e.PluginPreferencesUI);
|
|
92
92
|
this.addDisposeHandler(() => {
|
|
93
93
|
t.dispose();
|
|
@@ -168,4 +168,4 @@ k(f, 1, u);
|
|
|
168
168
|
export {
|
|
169
169
|
u as PluginPreferences
|
|
170
170
|
};
|
|
171
|
-
//# sourceMappingURL=index-
|
|
171
|
+
//# sourceMappingURL=index-BB9MXkUv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-DlgTb4XY.js","sources":["../src/utils/computeable.ts","../src/plugins/preferences/index.tsx"],"sourcesContent":["export type ComputeAble<T> = (() => T | Promise<T>) | T\r\nconst isFunction = (value: any): value is Function => typeof value === 'function'\r\nexport async function computeFallback<T>(value: ComputeAble<T>): Promise<T> {\r\n if (isFunction(value)) {\r\n return await value()\r\n } else {\r\n return value\r\n }\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit.js'\r\nimport { IPEStorageItem, IPEStorageManager } from '@/services/StorageService.js'\r\nimport { computeFallback, ComputeAble } from '@/utils/computeable.js'\r\n\r\ndeclare module '@/InPageEdit' {\r\n export interface InPageEdit {\r\n preferences: PluginPreferences\r\n }\r\n}\r\n\r\nexport interface InPageEditPreferenceUICategory {\r\n name: string\r\n label: string\r\n description?: string\r\n index?: number\r\n}\r\n\r\nexport interface InPageEditPreferenceUIRegistryItem {\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n category: string\r\n}\r\n\r\n@Inject(['storage'])\r\nexport class PluginPreferences extends BasePlugin {\r\n private db: IPEStorageManager<any>\r\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\r\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\r\n private _defaultPreferences: Record<string, any> = {}\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'preferences')\r\n this.db = ctx.storage.createDatabse<any>('preferences', Infinity)\r\n this.ctx.set('preferences', this)\r\n }\r\n\r\n async start() {\r\n this.defineCategory({\r\n name: 'general',\r\n label: 'General',\r\n description: 'General settings',\r\n })\r\n this.defineCategory({\r\n name: 'edit',\r\n label: 'Editing',\r\n description: 'Settings related to editing content',\r\n })\r\n this.defineCategory({\r\n name: 'about',\r\n label: 'About',\r\n description: 'About InPageEdit',\r\n index: 99,\r\n })\r\n\r\n this.registerCustomConfig(\r\n 'about',\r\n Schema.object({\r\n about: Schema.const(\r\n <div className=\"prose\">\r\n <h2>✏️ InPageEdit NEXT</h2>\r\n <i>v{this.ctx.version}</i>\r\n <h2>Portals</h2>\r\n <div style=\"display: flex; flex-direction: column; gap: 1rem\">\r\n <a\r\n href={this.ctx.Endpoints.HOME_URL}\r\n target=\"_blank\"\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Official Website & Help Center\r\n </a>\r\n <ActionButton\r\n href={`${this.ctx.Endpoints.UPDATE_LOGS_URL}#${this.ctx.version}`}\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Update Logs\r\n </ActionButton>\r\n </div>\r\n <h2>Join us</h2>\r\n <ul>\r\n <li>\r\n <strong>GitHub</strong>:{' '}\r\n <a href={this.ctx.Endpoints.GITHUB_URL} target=\"_blank\">\r\n inpageedit/inpageedit-next\r\n </a>\r\n </li>\r\n <li>\r\n <strong>QQ Group</strong>: 1026023666\r\n </li>\r\n </ul>\r\n <hr />\r\n <p>🚀 Modular, Extensible Supercharged Plugin for MediaWiki.</p>\r\n <p>InPageEdit-NEXT Copyright © 2025-present dragon-fish</p>\r\n </div>\r\n ).role('raw-html'),\r\n }).description(''),\r\n 'about',\r\n {}\r\n )\r\n\r\n import('./ui/index').then((module) => {\r\n const fork = this.ctx.plugin(module.PluginPreferencesUI)\r\n this.addDisposeHandler(() => {\r\n fork.dispose()\r\n })\r\n })\r\n }\r\n\r\n async get<T = any>(key: string, fallback?: ComputeAble<T>): Promise<T | null> {\r\n fallback ??= () => {\r\n const defaultValue = this.getDefaultValue(key)\r\n this.logger.debug(key, `(fallback value: ${defaultValue})`)\r\n return defaultValue as T\r\n }\r\n const value = (await this.db.get(key, undefined)) as T | null\r\n return value !== null ? value : ((await computeFallback(fallback)) as T)\r\n }\r\n\r\n getDefaultValue(key: string): unknown {\r\n return (this._defaultPreferences[key] ??= this.loadDefaultConfigs()[key])\r\n }\r\n\r\n set<T = any>(key: string, value: T): Promise<IPEStorageItem<T> | void> {\r\n const defaultValue = this.getDefaultValue(key)\r\n if (value === defaultValue) {\r\n return this.db.delete(key)\r\n } else {\r\n return this.db.set(key, value)\r\n }\r\n }\r\n\r\n async getAll() {\r\n const data = this.loadDefaultConfigs()\r\n await this.db.iterate((value: IPEStorageItem, key: string) => {\r\n data[key] = value\r\n })\r\n return data\r\n }\r\n\r\n private loadDefaultConfigs() {\r\n const data = {} as Record<string, any>\r\n this.getConfigRegistries().forEach((item) => {\r\n // 首先读取 schema 上的默认值\r\n try {\r\n const defaultValues = item.schema({}) as any\r\n Object.entries(defaultValues).forEach(([key, val]) => {\r\n data[key] = val\r\n })\r\n } catch {}\r\n\r\n // 然后读取注册时定义的默认值\r\n item.defaults &&\r\n Object.entries(item.defaults).forEach(([key, val]) => {\r\n data[key] = val\r\n })\r\n })\r\n\r\n Object.entries(data).forEach(([key, val]) => {\r\n this._defaultPreferences[key] = val\r\n })\r\n\r\n return data\r\n }\r\n\r\n registerCustomConfig(\r\n name: string,\r\n schema: Schema,\r\n category: string,\r\n defaults: Record<string, any>\r\n ) {\r\n this.customRegistries.push({\r\n name,\r\n schema,\r\n category,\r\n defaults,\r\n })\r\n return this\r\n }\r\n\r\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\r\n return Array.from(this.ctx.registry.entries())\r\n .map<{\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n }>(([plugin, fork]) => {\r\n if (plugin === null) {\r\n return {\r\n name: '@root',\r\n schema: (InPageEdit as any)?.PreferencesSchema || null,\r\n defaults: (InPageEdit as any)?.PreferencesDefaults || {},\r\n }\r\n } else {\r\n return {\r\n name: plugin.name,\r\n schema: (plugin as any)?.PreferencesSchema || null,\r\n defaults: (plugin as any)?.PreferencesDefaults || {},\r\n }\r\n }\r\n })\r\n .filter((item) => item.schema !== null)\r\n .map((item) => {\r\n return {\r\n ...item,\r\n category: item.schema.meta.category || 'general',\r\n }\r\n })\r\n .concat(this.customRegistries)\r\n .filter((item) => !category || item.category === category)\r\n }\r\n\r\n defineCategory(category: InPageEditPreferenceUICategory) {\r\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\r\n if (index < 0) {\r\n this.categoryDefinitions.push(category)\r\n } else {\r\n this.categoryDefinitions[index] = category\r\n }\r\n this.categoryDefinitions.sort((a, b) => {\r\n return (a.index ?? 0) - (b.index ?? 0)\r\n })\r\n return this\r\n }\r\n\r\n getConfigCategories() {\r\n return this.categoryDefinitions\r\n }\r\n}\r\n"],"names":["isFunction","value","computeFallback","_PluginPreferences_decorators","_init","_a","Inject","PluginPreferences","BasePlugin","ctx","Schema","jsxs","jsx","ActionButton","module","fork","key","fallback","defaultValue","data","item","defaultValues","val","name","schema","category","defaults","plugin","InPageEdit","index","tab","a","b","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BB9MXkUv.js","sources":["../src/utils/computeable.ts","../src/plugins/preferences/index.tsx"],"sourcesContent":["export type ComputeAble<T> = (() => T | Promise<T>) | T\r\nconst isFunction = (value: any): value is Function => typeof value === 'function'\r\nexport async function computeFallback<T>(value: ComputeAble<T>): Promise<T> {\r\n if (isFunction(value)) {\r\n return await value()\r\n } else {\r\n return value\r\n }\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit.js'\r\nimport { IPEStorageItem, IPEStorageManager } from '@/services/StorageService.js'\r\nimport { computeFallback, ComputeAble } from '@/utils/computeable.js'\r\n\r\ndeclare module '@/InPageEdit' {\r\n export interface InPageEdit {\r\n preferences: PluginPreferences\r\n }\r\n}\r\n\r\nexport interface InPageEditPreferenceUICategory {\r\n name: string\r\n label: string\r\n description?: string\r\n index?: number\r\n}\r\n\r\nexport interface InPageEditPreferenceUIRegistryItem {\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n category: string\r\n}\r\n\r\n@Inject(['storage'])\r\nexport class PluginPreferences extends BasePlugin {\r\n private db: IPEStorageManager<any>\r\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\r\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\r\n private _defaultPreferences: Record<string, any> = {}\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'preferences')\r\n this.db = ctx.storage.createDatabse<any>('preferences', Infinity)\r\n this.ctx.set('preferences', this)\r\n }\r\n\r\n async start() {\r\n this.defineCategory({\r\n name: 'general',\r\n label: 'General',\r\n description: 'General settings',\r\n })\r\n this.defineCategory({\r\n name: 'edit',\r\n label: 'Editing',\r\n description: 'Settings related to editing content',\r\n })\r\n this.defineCategory({\r\n name: 'about',\r\n label: 'About',\r\n description: 'About InPageEdit',\r\n index: 99,\r\n })\r\n\r\n this.registerCustomConfig(\r\n 'about',\r\n Schema.object({\r\n about: Schema.const(\r\n <div className=\"prose\">\r\n <h2>✏️ InPageEdit NEXT</h2>\r\n <i>v{this.ctx.version}</i>\r\n <h2>Portals</h2>\r\n <div style=\"display: flex; flex-direction: column; gap: 1rem\">\r\n <a\r\n href={this.ctx.Endpoints.HOME_URL}\r\n target=\"_blank\"\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Official Website & Help Center\r\n </a>\r\n <ActionButton\r\n href={`${this.ctx.Endpoints.UPDATE_LOGS_URL}#${this.ctx.version}`}\r\n style={{ display: 'block', width: '100%' }}\r\n >\r\n Update Logs\r\n </ActionButton>\r\n </div>\r\n <h2>Join us</h2>\r\n <ul>\r\n <li>\r\n <strong>GitHub</strong>:{' '}\r\n <a href={this.ctx.Endpoints.GITHUB_URL} target=\"_blank\">\r\n inpageedit/inpageedit-next\r\n </a>\r\n </li>\r\n <li>\r\n <strong>QQ Group</strong>: 1026023666\r\n </li>\r\n </ul>\r\n <hr />\r\n <p>🚀 Modular, Extensible Supercharged Plugin for MediaWiki.</p>\r\n <p>InPageEdit-NEXT Copyright © 2025-present dragon-fish</p>\r\n </div>\r\n ).role('raw-html'),\r\n }).description(''),\r\n 'about',\r\n {}\r\n )\r\n\r\n import('./ui/index').then((module) => {\r\n const fork = this.ctx.plugin(module.PluginPreferencesUI)\r\n this.addDisposeHandler(() => {\r\n fork.dispose()\r\n })\r\n })\r\n }\r\n\r\n async get<T = any>(key: string, fallback?: ComputeAble<T>): Promise<T | null> {\r\n fallback ??= () => {\r\n const defaultValue = this.getDefaultValue(key)\r\n this.logger.debug(key, `(fallback value: ${defaultValue})`)\r\n return defaultValue as T\r\n }\r\n const value = (await this.db.get(key, undefined)) as T | null\r\n return value !== null ? value : ((await computeFallback(fallback)) as T)\r\n }\r\n\r\n getDefaultValue(key: string): unknown {\r\n return (this._defaultPreferences[key] ??= this.loadDefaultConfigs()[key])\r\n }\r\n\r\n set<T = any>(key: string, value: T): Promise<IPEStorageItem<T> | void> {\r\n const defaultValue = this.getDefaultValue(key)\r\n if (value === defaultValue) {\r\n return this.db.delete(key)\r\n } else {\r\n return this.db.set(key, value)\r\n }\r\n }\r\n\r\n async getAll() {\r\n const data = this.loadDefaultConfigs()\r\n await this.db.iterate((value: IPEStorageItem, key: string) => {\r\n data[key] = value\r\n })\r\n return data\r\n }\r\n\r\n private loadDefaultConfigs() {\r\n const data = {} as Record<string, any>\r\n this.getConfigRegistries().forEach((item) => {\r\n // 首先读取 schema 上的默认值\r\n try {\r\n const defaultValues = item.schema({}) as any\r\n Object.entries(defaultValues).forEach(([key, val]) => {\r\n data[key] = val\r\n })\r\n } catch {}\r\n\r\n // 然后读取注册时定义的默认值\r\n item.defaults &&\r\n Object.entries(item.defaults).forEach(([key, val]) => {\r\n data[key] = val\r\n })\r\n })\r\n\r\n Object.entries(data).forEach(([key, val]) => {\r\n this._defaultPreferences[key] = val\r\n })\r\n\r\n return data\r\n }\r\n\r\n registerCustomConfig(\r\n name: string,\r\n schema: Schema,\r\n category: string,\r\n defaults: Record<string, any>\r\n ) {\r\n this.customRegistries.push({\r\n name,\r\n schema,\r\n category,\r\n defaults,\r\n })\r\n return this\r\n }\r\n\r\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\r\n return Array.from(this.ctx.registry.entries())\r\n .map<{\r\n name: string\r\n schema: Schema\r\n defaults: Record<string, any>\r\n }>(([plugin, fork]) => {\r\n if (plugin === null) {\r\n return {\r\n name: '@root',\r\n schema: (InPageEdit as any)?.PreferencesSchema || null,\r\n defaults: (InPageEdit as any)?.PreferencesDefaults || {},\r\n }\r\n } else {\r\n return {\r\n name: plugin.name,\r\n schema: (plugin as any)?.PreferencesSchema || null,\r\n defaults: (plugin as any)?.PreferencesDefaults || {},\r\n }\r\n }\r\n })\r\n .filter((item) => item.schema !== null)\r\n .map((item) => {\r\n return {\r\n ...item,\r\n category: item.schema.meta.category || 'general',\r\n }\r\n })\r\n .concat(this.customRegistries)\r\n .filter((item) => !category || item.category === category)\r\n }\r\n\r\n defineCategory(category: InPageEditPreferenceUICategory) {\r\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\r\n if (index < 0) {\r\n this.categoryDefinitions.push(category)\r\n } else {\r\n this.categoryDefinitions[index] = category\r\n }\r\n this.categoryDefinitions.sort((a, b) => {\r\n return (a.index ?? 0) - (b.index ?? 0)\r\n })\r\n return this\r\n }\r\n\r\n getConfigCategories() {\r\n return this.categoryDefinitions\r\n }\r\n}\r\n"],"names":["isFunction","value","computeFallback","_PluginPreferences_decorators","_init","_a","Inject","PluginPreferences","BasePlugin","ctx","Schema","jsxs","jsx","ActionButton","module","fork","key","fallback","defaultValue","data","item","defaultValues","val","name","schema","category","defaults","plugin","InPageEdit","index","tab","a","b","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as a } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { b as D, I as C, S as m } from "./index-
|
|
2
|
+
import { b as D, I as C, S as m } from "./index-9Z4ds-WM.js";
|
|
3
3
|
import { R as T } from "./Preferences-Bg3J5Ur9.js";
|
|
4
4
|
var E = Object.create, x = Object.defineProperty, q = Object.getOwnPropertyDescriptor, y = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), _ = (e) => {
|
|
5
5
|
throw TypeError(e);
|
|
@@ -136,4 +136,4 @@ O(f, 1, v);
|
|
|
136
136
|
export {
|
|
137
137
|
v as PluginToolbox
|
|
138
138
|
};
|
|
139
|
-
//# sourceMappingURL=index-
|
|
139
|
+
//# sourceMappingURL=index-BDVcDlsf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-VzP81S7B.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\r\nimport { JSX, ReactElement } from 'jsx-dom'\r\nimport './styles.scss'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n toolbox: PluginToolbox\r\n }\r\n interface Events {\r\n 'toolbox/button-added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\r\n 'toolbox/button-removed'(payload: { ctx: InPageEdit; id: string }): void\r\n }\r\n}\r\n\r\n@RegisterPreferences(\r\n Schema.object({\r\n toolboxAlwaysShow: Schema.boolean()\r\n .description('Make the toolbox opened by default')\r\n .default(false),\r\n }).description('Toolbox preferences')\r\n)\r\n@Inject(['preferences'])\r\nexport class PluginToolbox extends Service {\r\n container!: HTMLElement\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, 'toolbox', false)\r\n }\r\n\r\n protected async start(): Promise<void> {\r\n this.container = this.createToolbox()\r\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\r\n if (val) {\r\n this.container.classList.add('is-persistent')\r\n }\r\n })\r\n this.setupHoverLogic()\r\n document.body.appendChild(this.container)\r\n\r\n // 初始化时更新按钮延迟\r\n this.updateButtonDelays()\r\n }\r\n\r\n protected stop(): void | Promise<void> {\r\n this.container?.remove()\r\n }\r\n\r\n private get isPersistent() {\r\n return this.container.classList.contains('is-persistent')\r\n }\r\n\r\n private setupHoverLogic() {\r\n let hoverTimeout: number | null = null\r\n\r\n // 鼠标进入时暂时展开\r\n this.container.addEventListener('mouseenter', () => {\r\n if (hoverTimeout) {\r\n clearTimeout(hoverTimeout)\r\n hoverTimeout = null\r\n }\r\n\r\n // 如果不在持久化状态,则添加hover展开效果\r\n if (!this.isPersistent) {\r\n this.container.classList.add('is-hovered')\r\n }\r\n })\r\n\r\n // 鼠标离开时收起(如果不是持久化状态)\r\n this.container.addEventListener('mouseleave', () => {\r\n if (!this.isPersistent) {\r\n hoverTimeout = window.setTimeout(() => {\r\n this.container.classList.remove('is-hovered')\r\n }, 150) // 延迟150ms收起,避免快速移动鼠标时闪烁\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 计算按钮动画延迟\r\n * @param index 按钮索引(从0开始)\r\n * @param totalCount 总按钮数量\r\n * @returns 延迟时间(秒)\r\n */\r\n private calculateButtonDelay(index: number, totalCount: number): number {\r\n if (totalCount <= 1) return 0\r\n\r\n // 总动画时长150ms = 0.15s\r\n const totalDuration = 0.15\r\n // 使用平方根函数创建非线性延迟,差值逐渐缩小\r\n const normalizedIndex = index / (totalCount - 1)\r\n const delay = totalDuration * Math.sqrt(normalizedIndex)\r\n\r\n return Math.round(delay * 1000) / 1000 // 保留3位小数\r\n }\r\n\r\n /**\r\n * 更新按钮组的动画延迟\r\n */\r\n private updateButtonDelays() {\r\n const btnGroups = this.container.querySelectorAll('.btn-group')\r\n\r\n btnGroups.forEach((group) => {\r\n const buttons = group.querySelectorAll('.btn-tip-group')\r\n const totalCount = buttons.length\r\n\r\n buttons.forEach((button, index) => {\r\n const delay = this.calculateButtonDelay(index, totalCount)\r\n ;(button as HTMLElement).style.setProperty('--transition-delay', `${delay}s`)\r\n ;(button as HTMLElement).style.setProperty('--max-transition-delay', '0.15s')\r\n })\r\n })\r\n }\r\n\r\n private createToolbox() {\r\n const toggler = (\r\n <button\r\n className=\"ipe-toolbox-btn\"\r\n id=\"toolbox-toggler\"\r\n onClick={() => {\r\n this.toggle()\r\n }}\r\n >\r\n {/* Font Awesome 5 Solid: Plus */}\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"448\" height=\"512\" viewBox=\"0 0 448 512\">\r\n <rect width=\"448\" height=\"512\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\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\"\r\n />\r\n </svg>\r\n </button>\r\n )\r\n const element = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\r\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\r\n {toggler}\r\n </div>\r\n )\r\n\r\n return element as HTMLElement\r\n }\r\n\r\n private normalizeButtonId(id: string) {\r\n if (!id) {\r\n id = Math.random().toString(36).substring(2, 8)\r\n }\r\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\r\n }\r\n\r\n addButton(payload: {\r\n id: string\r\n group?: 'auto' | 'group1' | 'group2'\r\n icon: string | HTMLElement | SVGElement | ReactElement\r\n tooltip?: string | HTMLElement\r\n itemProps?: JSX.IntrinsicElements['li']\r\n buttonProps?: JSX.IntrinsicElements['button']\r\n onClick?: (event: MouseEvent) => void\r\n index?: number\r\n }) {\r\n let { id, group, icon, tooltip, itemProps, buttonProps, onClick, index } = payload\r\n id = this.normalizeButtonId(id)\r\n\r\n const existingButton = this.container.querySelector(`#${id}`)\r\n if (existingButton) {\r\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\r\n existingButton.remove()\r\n }\r\n\r\n let groupEl: HTMLElement | null = null\r\n if (typeof group === 'undefined' || group === 'auto') {\r\n // 选择按钮最少的那一组,一样多就选第一组\r\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\r\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\r\n const group1Count = group1?.children.length || 0\r\n const group2Count = group2?.children.length || 0\r\n groupEl = group1Count <= group2Count ? group1 : group2\r\n } else {\r\n groupEl = this.container.querySelector(`.btn-group.${group}`)\r\n }\r\n if (!groupEl) throw new Error(`Button group ${group} not found`)\r\n\r\n const button = (\r\n <li class=\"btn-tip-group\" id={id} onClick={onClick} {...itemProps}>\r\n <div class=\"btn-tip\">{tooltip}</div>\r\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\r\n {icon}\r\n </button>\r\n </li>\r\n )\r\n\r\n if (typeof index === 'number') {\r\n if (index <= 0) {\r\n groupEl.prepend(button)\r\n } else if (index >= groupEl.children.length) {\r\n groupEl.appendChild(button)\r\n } else {\r\n groupEl.children[index]?.before(button)\r\n }\r\n } else {\r\n groupEl.appendChild(button)\r\n }\r\n\r\n this.ctx.emit('toolbox/button-added', {\r\n ctx: this.ctx,\r\n button: button as HTMLElement,\r\n })\r\n\r\n // 更新按钮延迟\r\n this.updateButtonDelays()\r\n\r\n return button as HTMLElement\r\n }\r\n\r\n removeButton(id: string) {\r\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\r\n button?.remove()\r\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\r\n\r\n // 更新按钮延迟\r\n this.updateButtonDelays()\r\n }\r\n\r\n getContainer() {\r\n return this.container\r\n }\r\n\r\n get isOpened() {\r\n return (\r\n this.container.classList.contains('is-persistent') ||\r\n this.container.classList.contains('is-hovered')\r\n )\r\n }\r\n\r\n toggle(force?: boolean) {\r\n const isPersistent = this.isPersistent\r\n const newPersistent = typeof force === 'boolean' ? force : !isPersistent\r\n this.container.classList.toggle('is-persistent', newPersistent)\r\n this.container.classList.remove('is-hovered')\r\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\r\n }\r\n}\r\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","force","isPersistent","newPersistent","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BDVcDlsf.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\r\nimport { JSX, ReactElement } from 'jsx-dom'\r\nimport './styles.scss'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n toolbox: PluginToolbox\r\n }\r\n interface Events {\r\n 'toolbox/button-added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\r\n 'toolbox/button-removed'(payload: { ctx: InPageEdit; id: string }): void\r\n }\r\n}\r\n\r\n@RegisterPreferences(\r\n Schema.object({\r\n toolboxAlwaysShow: Schema.boolean()\r\n .description('Make the toolbox opened by default')\r\n .default(false),\r\n }).description('Toolbox preferences')\r\n)\r\n@Inject(['preferences'])\r\nexport class PluginToolbox extends Service {\r\n container!: HTMLElement\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, 'toolbox', false)\r\n }\r\n\r\n protected async start(): Promise<void> {\r\n this.container = this.createToolbox()\r\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\r\n if (val) {\r\n this.container.classList.add('is-persistent')\r\n }\r\n })\r\n this.setupHoverLogic()\r\n document.body.appendChild(this.container)\r\n\r\n // 初始化时更新按钮延迟\r\n this.updateButtonDelays()\r\n }\r\n\r\n protected stop(): void | Promise<void> {\r\n this.container?.remove()\r\n }\r\n\r\n private get isPersistent() {\r\n return this.container.classList.contains('is-persistent')\r\n }\r\n\r\n private setupHoverLogic() {\r\n let hoverTimeout: number | null = null\r\n\r\n // 鼠标进入时暂时展开\r\n this.container.addEventListener('mouseenter', () => {\r\n if (hoverTimeout) {\r\n clearTimeout(hoverTimeout)\r\n hoverTimeout = null\r\n }\r\n\r\n // 如果不在持久化状态,则添加hover展开效果\r\n if (!this.isPersistent) {\r\n this.container.classList.add('is-hovered')\r\n }\r\n })\r\n\r\n // 鼠标离开时收起(如果不是持久化状态)\r\n this.container.addEventListener('mouseleave', () => {\r\n if (!this.isPersistent) {\r\n hoverTimeout = window.setTimeout(() => {\r\n this.container.classList.remove('is-hovered')\r\n }, 150) // 延迟150ms收起,避免快速移动鼠标时闪烁\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 计算按钮动画延迟\r\n * @param index 按钮索引(从0开始)\r\n * @param totalCount 总按钮数量\r\n * @returns 延迟时间(秒)\r\n */\r\n private calculateButtonDelay(index: number, totalCount: number): number {\r\n if (totalCount <= 1) return 0\r\n\r\n // 总动画时长150ms = 0.15s\r\n const totalDuration = 0.15\r\n // 使用平方根函数创建非线性延迟,差值逐渐缩小\r\n const normalizedIndex = index / (totalCount - 1)\r\n const delay = totalDuration * Math.sqrt(normalizedIndex)\r\n\r\n return Math.round(delay * 1000) / 1000 // 保留3位小数\r\n }\r\n\r\n /**\r\n * 更新按钮组的动画延迟\r\n */\r\n private updateButtonDelays() {\r\n const btnGroups = this.container.querySelectorAll('.btn-group')\r\n\r\n btnGroups.forEach((group) => {\r\n const buttons = group.querySelectorAll('.btn-tip-group')\r\n const totalCount = buttons.length\r\n\r\n buttons.forEach((button, index) => {\r\n const delay = this.calculateButtonDelay(index, totalCount)\r\n ;(button as HTMLElement).style.setProperty('--transition-delay', `${delay}s`)\r\n ;(button as HTMLElement).style.setProperty('--max-transition-delay', '0.15s')\r\n })\r\n })\r\n }\r\n\r\n private createToolbox() {\r\n const toggler = (\r\n <button\r\n className=\"ipe-toolbox-btn\"\r\n id=\"toolbox-toggler\"\r\n onClick={() => {\r\n this.toggle()\r\n }}\r\n >\r\n {/* Font Awesome 5 Solid: Plus */}\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"448\" height=\"512\" viewBox=\"0 0 448 512\">\r\n <rect width=\"448\" height=\"512\" fill=\"none\" />\r\n <path\r\n fill=\"currentColor\"\r\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\"\r\n />\r\n </svg>\r\n </button>\r\n )\r\n const element = (\r\n <div id=\"ipe-edit-toolbox\">\r\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\r\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\r\n {toggler}\r\n </div>\r\n )\r\n\r\n return element as HTMLElement\r\n }\r\n\r\n private normalizeButtonId(id: string) {\r\n if (!id) {\r\n id = Math.random().toString(36).substring(2, 8)\r\n }\r\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\r\n }\r\n\r\n addButton(payload: {\r\n id: string\r\n group?: 'auto' | 'group1' | 'group2'\r\n icon: string | HTMLElement | SVGElement | ReactElement\r\n tooltip?: string | HTMLElement\r\n itemProps?: JSX.IntrinsicElements['li']\r\n buttonProps?: JSX.IntrinsicElements['button']\r\n onClick?: (event: MouseEvent) => void\r\n index?: number\r\n }) {\r\n let { id, group, icon, tooltip, itemProps, buttonProps, onClick, index } = payload\r\n id = this.normalizeButtonId(id)\r\n\r\n const existingButton = this.container.querySelector(`#${id}`)\r\n if (existingButton) {\r\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\r\n existingButton.remove()\r\n }\r\n\r\n let groupEl: HTMLElement | null = null\r\n if (typeof group === 'undefined' || group === 'auto') {\r\n // 选择按钮最少的那一组,一样多就选第一组\r\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\r\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\r\n const group1Count = group1?.children.length || 0\r\n const group2Count = group2?.children.length || 0\r\n groupEl = group1Count <= group2Count ? group1 : group2\r\n } else {\r\n groupEl = this.container.querySelector(`.btn-group.${group}`)\r\n }\r\n if (!groupEl) throw new Error(`Button group ${group} not found`)\r\n\r\n const button = (\r\n <li class=\"btn-tip-group\" id={id} onClick={onClick} {...itemProps}>\r\n <div class=\"btn-tip\">{tooltip}</div>\r\n <button id={`${id}-btn`} class=\"ipe-toolbox-btn\" {...buttonProps}>\r\n {icon}\r\n </button>\r\n </li>\r\n )\r\n\r\n if (typeof index === 'number') {\r\n if (index <= 0) {\r\n groupEl.prepend(button)\r\n } else if (index >= groupEl.children.length) {\r\n groupEl.appendChild(button)\r\n } else {\r\n groupEl.children[index]?.before(button)\r\n }\r\n } else {\r\n groupEl.appendChild(button)\r\n }\r\n\r\n this.ctx.emit('toolbox/button-added', {\r\n ctx: this.ctx,\r\n button: button as HTMLElement,\r\n })\r\n\r\n // 更新按钮延迟\r\n this.updateButtonDelays()\r\n\r\n return button as HTMLElement\r\n }\r\n\r\n removeButton(id: string) {\r\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\r\n button?.remove()\r\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\r\n\r\n // 更新按钮延迟\r\n this.updateButtonDelays()\r\n }\r\n\r\n getContainer() {\r\n return this.container\r\n }\r\n\r\n get isOpened() {\r\n return (\r\n this.container.classList.contains('is-persistent') ||\r\n this.container.classList.contains('is-hovered')\r\n )\r\n }\r\n\r\n toggle(force?: boolean) {\r\n const isPersistent = this.isPersistent\r\n const newPersistent = typeof force === 'boolean' ? force : !isPersistent\r\n this.container.classList.toggle('is-persistent', newPersistent)\r\n this.container.classList.remove('is-hovered')\r\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\r\n }\r\n}\r\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","force","isPersistent","newPersistent","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;;;;;;;;;;GAAAA,GAAAC,GAAAC;AAcAF,IAAA,CAACG;AAAA,EACCC,EAAO,OAAO;AAAA,IACZ,mBAAmBA,EAAO,QAAA,EACvB,YAAY,oCAAoC,EAChD,QAAQ,EAAK;AAAA,EAAA,CACjB,EAAE,YAAY,qBAAqB;AACtC,GACCC,EAAO,CAAC,aAAa,CAAC,CAAA;AAChB,MAAMC,WAAsBJ,IAAAK,GAAQ;AAAA,EAGzC,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,WAAW,EAAK,GADV,KAAA,MAAAA,GAFnB,KAAA,YAAA;AAAA,EAIA;AAAA,EAEA,MAAgB,QAAuB;AACrC,SAAK,YAAY,KAAK,cAAA,GACtB,KAAK,IAAI,YAAY,IAAI,mBAAmB,EAAE,KAAK,CAACC,MAAQ;AAC1D,MAAIA,KACF,KAAK,UAAU,UAAU,IAAI,eAAe;AAAA,IAEhD,CAAC,GACD,KAAK,gBAAA,GACL,SAAS,KAAK,YAAY,KAAK,SAAS,GAGxC,KAAK,mBAAA;AAAA,EACP;AAAA,EAEU,OAA6B;AACrC,SAAK,WAAW,OAAA;AAAA,EAClB;AAAA,EAEA,IAAY,eAAe;AACzB,WAAO,KAAK,UAAU,UAAU,SAAS,eAAe;AAAA,EAC1D;AAAA,EAEQ,kBAAkB;AACxB,QAAIC,IAA8B;AAGlC,SAAK,UAAU,iBAAiB,cAAc,MAAM;AAClD,MAAIA,MACF,aAAaA,CAAY,GACzBA,IAAe,OAIZ,KAAK,gBACR,KAAK,UAAU,UAAU,IAAI,YAAY;AAAA,IAE7C,CAAC,GAGD,KAAK,UAAU,iBAAiB,cAAc,MAAM;AAClD,MAAK,KAAK,iBACRA,IAAe,OAAO,WAAW,MAAM;AACrC,aAAK,UAAU,UAAU,OAAO,YAAY;AAAA,MAC9C,GAAG,GAAG;AAAA,IAEV,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,qBAAqBC,GAAeC,GAA4B;AACtE,QAAIA,KAAc,EAAG,QAAO;AAG5B,UAAMC,IAAgB,MAEhBC,IAAkBH,KAASC,IAAa,IACxCG,IAAQF,IAAgB,KAAK,KAAKC,CAAe;AAEvD,WAAO,KAAK,MAAMC,IAAQ,GAAI,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB;AAG3B,IAFkB,KAAK,UAAU,iBAAiB,YAAY,EAEpD,QAAQ,CAACC,MAAU;AAC3B,YAAMC,IAAUD,EAAM,iBAAiB,gBAAgB,GACjDJ,IAAaK,EAAQ;AAE3B,MAAAA,EAAQ,QAAQ,CAACC,GAAQP,MAAU;AACjC,cAAMI,IAAQ,KAAK,qBAAqBJ,GAAOC,CAAU;AACvD,QAAAM,EAAuB,MAAM,YAAY,sBAAsB,GAAGH,CAAK,GAAG,GAC1EG,EAAuB,MAAM,YAAY,0BAA0B,OAAO;AAAA,MAC9E,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB;AA2BtB,WAPEC,gBAAAA,EAAC,OAAA,EAAI,IAAG,oBACN,UAAA;AAAA,MAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,oBAAmB,OAAO,EAAE,SAAS,QAAQ,eAAe,SAAA,EAAS,CAAG;AAAA,MACtF,gBAAAA,EAAC,MAAA,EAAG,WAAU,oBAAmB,OAAO,EAAE,SAAS,QAAQ,eAAe,MAAA,EAAM,CAAG;AAAA,MApBrF,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAG;AAAA,UACH,SAAS,MAAM;AACb,iBAAK,OAAA;AAAA,UACP;AAAA,UAGA,UAAAD,gBAAAA,EAAC,SAAI,OAAM,8BAA6B,OAAM,OAAM,QAAO,OAAM,SAAQ,eACvE,UAAA;AAAA,YAAA,gBAAAC,EAAC,UAAK,OAAM,OAAM,QAAO,OAAM,MAAK,QAAO;AAAA,YAC3C,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,GAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACJ,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAOC,GACH;AAAA,EAIJ;AAAA,EAEQ,kBAAkBC,GAAY;AACpC,WAAKA,MACHA,IAAK,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,IAEzC,gBAAgBA,EAAG,KAAA,CAAM,GAAG,QAAQ,UAAU,GAAG;AAAA,EAC1D;AAAA,EAEA,UAAUC,GASP;AACD,QAAI,EAAE,IAAAD,GAAI,OAAAL,GAAO,MAAAO,GAAM,SAAAC,GAAS,WAAAC,GAAW,aAAAC,GAAa,SAAAC,GAAS,OAAAhB,EAAA,IAAUW;AAC3E,IAAAD,IAAK,KAAK,kBAAkBA,CAAE;AAE9B,UAAMO,IAAiB,KAAK,UAAU,cAAc,IAAIP,CAAE,EAAE;AAC5D,IAAIO,MACF,KAAK,IAAI,OAAO,SAAS,EAAE,KAAK,kBAAkBP,CAAE,gCAAgC,GACpFO,EAAe,OAAA;AAGjB,QAAIC,IAA8B;AAClC,QAAI,OAAOb,IAAU,OAAeA,MAAU,QAAQ;AAEpD,YAAMc,IAAS,KAAK,UAAU,cAAc,mBAAmB,GACzDC,IAAS,KAAK,UAAU,cAAc,mBAAmB,GACzDC,IAAcF,GAAQ,SAAS,UAAU,GACzCG,IAAcF,GAAQ,SAAS,UAAU;AAC/C,MAAAF,IAAUG,KAAeC,IAAcH,IAASC;AAAA,IAClD;AACE,MAAAF,IAAU,KAAK,UAAU,cAAc,cAAcb,CAAK,EAAE;AAE9D,QAAI,CAACa,EAAS,OAAM,IAAI,MAAM,gBAAgBb,CAAK,YAAY;AAE/D,UAAME,sBACH,MAAA,EAAG,OAAM,iBAAgB,IAAAG,GAAQ,SAAAM,GAAmB,GAAGF,GACtD,UAAA;AAAA,MAAA,gBAAAL,EAAC,OAAA,EAAI,OAAM,WAAW,UAAAI,GAAQ;AAAA,MAC9B,gBAAAJ,EAAC,UAAA,EAAO,IAAI,GAAGC,CAAE,QAAQ,OAAM,mBAAmB,GAAGK,GAClD,UAAAH,EAAA,CACH;AAAA,IAAA,GACF;AAGF,WAAI,OAAOZ,KAAU,WACfA,KAAS,IACXkB,EAAQ,QAAQX,CAAM,IACbP,KAASkB,EAAQ,SAAS,SACnCA,EAAQ,YAAYX,CAAM,IAE1BW,EAAQ,SAASlB,CAAK,GAAG,OAAOO,CAAM,IAGxCW,EAAQ,YAAYX,CAAM,GAG5B,KAAK,IAAI,KAAK,wBAAwB;AAAA,MACpC,KAAK,KAAK;AAAA,MACV,QAAAA;AAAA,IAAA,CACD,GAGD,KAAK,mBAAA,GAEEA;AAAA,EACT;AAAA,EAEA,aAAaG,GAAY;AAEvB,IADe,KAAK,UAAU,cAAc,oBAAoBA,CAAE,EAAE,GAC5D,OAAA,GACR,KAAK,IAAI,KAAK,0BAA0B,EAAE,KAAK,KAAK,KAAK,IAAAA,GAAI,GAG7D,KAAK,mBAAA;AAAA,EACP;AAAA,EAEA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,WAAW;AACb,WACE,KAAK,UAAU,UAAU,SAAS,eAAe,KACjD,KAAK,UAAU,UAAU,SAAS,YAAY;AAAA,EAElD;AAAA,EAEA,OAAOa,GAAiB;AACtB,UAAMC,IAAe,KAAK,cACpBC,IAAgB,OAAOF,KAAU,YAAYA,IAAQ,CAACC;AAC5D,SAAK,UAAU,UAAU,OAAO,iBAAiBC,CAAa,GAC9D,KAAK,UAAU,UAAU,OAAO,YAAY,GAC5C,KAAK,IAAI,YAAY,IAAI,qBAAqBA,CAAa;AAAA,EAC7D;AACF;AA3NOnC,IAAAoC,EAAAnC,CAAA;AAAMI,IAANgC,yBARPtC,GAQaM,CAAA;AAANiC,EAAAtC,GAAA,GAAMK,CAAA;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { j as a, F as
|
|
2
|
-
import { B as K, I as Se, S as P } from "./index-
|
|
3
|
-
import { I as Pe } from "./IconQuickEdit-
|
|
1
|
+
import { j as a, F as Ne, P as Ee } from "./index-CvhkVj_L.js";
|
|
2
|
+
import { B as K, I as Se, S as P } from "./index-9Z4ds-WM.js";
|
|
3
|
+
import { I as Pe } from "./IconQuickEdit-CAL1HXIb.js";
|
|
4
4
|
import { R as We } from "./Preferences-Bg3J5Ur9.js";
|
|
5
5
|
import { R as _e } from "./RadioBox-nJqWsxW2.js";
|
|
6
6
|
import { M as Oe } from "./index-lZkYoUca.js";
|
|
7
|
-
class
|
|
7
|
+
class N {
|
|
8
8
|
diff(e, n, i = {}) {
|
|
9
9
|
let s;
|
|
10
10
|
typeof i == "function" ? (s = i, i = {}) : "callback" in i && (s = i.callback);
|
|
@@ -36,8 +36,8 @@ class E {
|
|
|
36
36
|
p && (w[d - 1] = void 0);
|
|
37
37
|
let D = !1;
|
|
38
38
|
if (k) {
|
|
39
|
-
const
|
|
40
|
-
D = k && 0 <=
|
|
39
|
+
const E = k.oldPos - d;
|
|
40
|
+
D = k && 0 <= E && E < o;
|
|
41
41
|
}
|
|
42
42
|
const b = p && p.oldPos + 1 < f;
|
|
43
43
|
if (!D && !b) {
|
|
@@ -135,7 +135,7 @@ class E {
|
|
|
135
135
|
return s;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
class Te extends
|
|
138
|
+
class Te extends N {
|
|
139
139
|
}
|
|
140
140
|
const ee = new Te();
|
|
141
141
|
function te(t, e, n) {
|
|
@@ -162,7 +162,7 @@ function $(t, e, n) {
|
|
|
162
162
|
throw Error(`string ${JSON.stringify(t)} doesn't start with prefix ${JSON.stringify(e)}; this is a bug`);
|
|
163
163
|
return n + t.slice(e.length);
|
|
164
164
|
}
|
|
165
|
-
function
|
|
165
|
+
function H(t, e, n) {
|
|
166
166
|
if (!e)
|
|
167
167
|
return t + n;
|
|
168
168
|
if (t.slice(-e.length) != e)
|
|
@@ -173,7 +173,7 @@ function W(t, e) {
|
|
|
173
173
|
return $(t, e, "");
|
|
174
174
|
}
|
|
175
175
|
function O(t, e) {
|
|
176
|
-
return
|
|
176
|
+
return H(t, e, "");
|
|
177
177
|
}
|
|
178
178
|
function X(t, e) {
|
|
179
179
|
return e.slice(0, Le(t, e));
|
|
@@ -204,7 +204,7 @@ function Fe(t) {
|
|
|
204
204
|
`) && !t.startsWith(`
|
|
205
205
|
`) && !t.match(/[^\r]\n/);
|
|
206
206
|
}
|
|
207
|
-
function
|
|
207
|
+
function Ae(t) {
|
|
208
208
|
return !t.includes(`\r
|
|
209
209
|
`) && t.includes(`
|
|
210
210
|
`);
|
|
@@ -219,8 +219,8 @@ function S(t) {
|
|
|
219
219
|
const e = t.match(/^\s*/);
|
|
220
220
|
return e ? e[0] : "";
|
|
221
221
|
}
|
|
222
|
-
const L = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",
|
|
223
|
-
class Ie extends
|
|
222
|
+
const L = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}", je = new RegExp(`[${L}]+|\\s+|[^${L}]`, "ug");
|
|
223
|
+
class Ie extends N {
|
|
224
224
|
equals(e, n, i) {
|
|
225
225
|
return i.ignoreCase && (e = e.toLowerCase(), n = n.toLowerCase()), e.trim() === n.trim();
|
|
226
226
|
}
|
|
@@ -232,7 +232,7 @@ class Ie extends E {
|
|
|
232
232
|
throw new Error('The segmenter passed must have a granularity of "word"');
|
|
233
233
|
i = Array.from(l.segment(e), (o) => o.segment);
|
|
234
234
|
} else
|
|
235
|
-
i = e.match(
|
|
235
|
+
i = e.match(je) || [];
|
|
236
236
|
const s = [];
|
|
237
237
|
let r = null;
|
|
238
238
|
return i.forEach((l) => {
|
|
@@ -260,7 +260,7 @@ function Z(t, e, n, i) {
|
|
|
260
260
|
const s = S(e.value), r = _(e.value), l = S(n.value), o = _(n.value);
|
|
261
261
|
if (t) {
|
|
262
262
|
const f = V(s, l);
|
|
263
|
-
t.value =
|
|
263
|
+
t.value = H(t.value, l, f), e.value = W(e.value, f), n.value = W(n.value, f);
|
|
264
264
|
}
|
|
265
265
|
if (i) {
|
|
266
266
|
const f = Y(r, o);
|
|
@@ -279,7 +279,7 @@ function Z(t, e, n, i) {
|
|
|
279
279
|
const s = S(i.value), r = S(e.value), l = _(e.value), o = V(s, r);
|
|
280
280
|
e.value = W(e.value, o);
|
|
281
281
|
const f = Y(W(s, o), l);
|
|
282
|
-
e.value = O(e.value, f), i.value = $(i.value, s, f), t.value =
|
|
282
|
+
e.value = O(e.value, f), i.value = $(i.value, s, f), t.value = H(t.value, s, s.slice(0, s.length - f.length));
|
|
283
283
|
} else if (i) {
|
|
284
284
|
const s = S(i.value), r = _(e.value), l = X(r, s);
|
|
285
285
|
e.value = O(e.value, l);
|
|
@@ -288,7 +288,7 @@ function Z(t, e, n, i) {
|
|
|
288
288
|
e.value = W(e.value, l);
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
|
-
class ze extends
|
|
291
|
+
class ze extends N {
|
|
292
292
|
tokenize(e) {
|
|
293
293
|
const n = new RegExp(`(\\r?\\n)|[${L}]+|[^\\S\\n\\r]+|[^${L}]`, "ug");
|
|
294
294
|
return e.match(n) || [];
|
|
@@ -306,7 +306,7 @@ function $e(t, e) {
|
|
|
306
306
|
Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
|
|
307
307
|
return e;
|
|
308
308
|
}
|
|
309
|
-
class
|
|
309
|
+
class He extends N {
|
|
310
310
|
constructor() {
|
|
311
311
|
super(...arguments), this.tokenize = le;
|
|
312
312
|
}
|
|
@@ -318,7 +318,7 @@ class qe extends E {
|
|
|
318
318
|
`) && (n = n.slice(0, -1))), super.equals(e, n, i);
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
|
-
const R = new
|
|
321
|
+
const R = new He();
|
|
322
322
|
function F(t, e, n) {
|
|
323
323
|
return R.diff(t, e, n);
|
|
324
324
|
}
|
|
@@ -336,10 +336,10 @@ function le(t, e) {
|
|
|
336
336
|
}
|
|
337
337
|
return n;
|
|
338
338
|
}
|
|
339
|
-
function
|
|
339
|
+
function qe(t) {
|
|
340
340
|
return t == "." || t == "!" || t == "?";
|
|
341
341
|
}
|
|
342
|
-
class Me extends
|
|
342
|
+
class Me extends N {
|
|
343
343
|
tokenize(e) {
|
|
344
344
|
var n;
|
|
345
345
|
const i = [];
|
|
@@ -349,7 +349,7 @@ class Me extends E {
|
|
|
349
349
|
i.push(e.slice(s));
|
|
350
350
|
break;
|
|
351
351
|
}
|
|
352
|
-
if (
|
|
352
|
+
if (qe(e[r]) && e[r + 1].match(/\s/)) {
|
|
353
353
|
for (i.push(e.slice(s, r + 1)), r = s = r + 1; !((n = e[r + 1]) === null || n === void 0) && n.match(/\s/); )
|
|
354
354
|
r++;
|
|
355
355
|
i.push(e.slice(s, r + 1)), s = r + 1;
|
|
@@ -362,7 +362,7 @@ const oe = new Me();
|
|
|
362
362
|
function fe(t, e, n) {
|
|
363
363
|
return oe.diff(t, e, n);
|
|
364
364
|
}
|
|
365
|
-
class Re extends
|
|
365
|
+
class Re extends N {
|
|
366
366
|
tokenize(e) {
|
|
367
367
|
return e.split(/([{}:;,]|\s+)/);
|
|
368
368
|
}
|
|
@@ -371,7 +371,7 @@ const ae = new Re();
|
|
|
371
371
|
function ce(t, e, n) {
|
|
372
372
|
return ae.diff(t, e, n);
|
|
373
373
|
}
|
|
374
|
-
class Je extends
|
|
374
|
+
class Je extends N {
|
|
375
375
|
constructor() {
|
|
376
376
|
super(...arguments), this.tokenize = le;
|
|
377
377
|
}
|
|
@@ -380,7 +380,7 @@ class Je extends E {
|
|
|
380
380
|
}
|
|
381
381
|
castInput(e, n) {
|
|
382
382
|
const { undefinedReplacement: i, stringifyReplacer: s = (r, l) => typeof l > "u" ? i : l } = n;
|
|
383
|
-
return typeof e == "string" ? e : JSON.stringify(
|
|
383
|
+
return typeof e == "string" ? e : JSON.stringify(A(e, null, null, s), null, " ");
|
|
384
384
|
}
|
|
385
385
|
equals(e, n, i) {
|
|
386
386
|
return super.equals(e.replace(/,([\r\n])/g, "$1"), n.replace(/,([\r\n])/g, "$1"), i);
|
|
@@ -390,7 +390,7 @@ const ue = new Je();
|
|
|
390
390
|
function de(t, e, n) {
|
|
391
391
|
return ue.diff(t, e, n);
|
|
392
392
|
}
|
|
393
|
-
function
|
|
393
|
+
function A(t, e, n, i, s) {
|
|
394
394
|
e = e || [], n = n || [], i && (t = i(s === void 0 ? "" : s, t));
|
|
395
395
|
let r;
|
|
396
396
|
for (r = 0; r < e.length; r += 1)
|
|
@@ -399,7 +399,7 @@ function j(t, e, n, i, s) {
|
|
|
399
399
|
let l;
|
|
400
400
|
if (Object.prototype.toString.call(t) === "[object Array]") {
|
|
401
401
|
for (e.push(t), l = new Array(t.length), n.push(l), r = 0; r < t.length; r += 1)
|
|
402
|
-
l[r] =
|
|
402
|
+
l[r] = A(t[r], e, n, i, String(r));
|
|
403
403
|
return e.pop(), n.pop(), l;
|
|
404
404
|
}
|
|
405
405
|
if (t && t.toJSON && (t = t.toJSON()), typeof t == "object" && t !== null) {
|
|
@@ -409,13 +409,13 @@ function j(t, e, n, i, s) {
|
|
|
409
409
|
for (f in t)
|
|
410
410
|
Object.prototype.hasOwnProperty.call(t, f) && o.push(f);
|
|
411
411
|
for (o.sort(), r = 0; r < o.length; r += 1)
|
|
412
|
-
f = o[r], l[f] =
|
|
412
|
+
f = o[r], l[f] = A(t[f], e, n, i, f);
|
|
413
413
|
e.pop(), n.pop();
|
|
414
414
|
} else
|
|
415
415
|
l = t;
|
|
416
416
|
return l;
|
|
417
417
|
}
|
|
418
|
-
class Ue extends
|
|
418
|
+
class Ue extends N {
|
|
419
419
|
tokenize(e) {
|
|
420
420
|
return e.slice();
|
|
421
421
|
}
|
|
@@ -528,7 +528,7 @@ function pe(t, e, n = {}) {
|
|
|
528
528
|
return Ye(t, i[0], n);
|
|
529
529
|
}
|
|
530
530
|
function Ye(t, e, n = {}) {
|
|
531
|
-
(n.autoConvertLineEndings || n.autoConvertLineEndings == null) && (Fe(t) && Qe(e) ? e = ge(e) :
|
|
531
|
+
(n.autoConvertLineEndings || n.autoConvertLineEndings == null) && (Fe(t) && Qe(e) ? e = ge(e) : Ae(t) && Be(e) && (e = ve(e)));
|
|
532
532
|
const i = t.split(`
|
|
533
533
|
`), s = e.hunks, r = n.compareLine || ((m, v, x, C) => v === C), l = n.fuzzFactor || 0;
|
|
534
534
|
let o = 0;
|
|
@@ -558,19 +558,19 @@ function Ye(t, e, n = {}) {
|
|
|
558
558
|
function g(m, v, x, C = 0, d = !0, u = [], p = 0) {
|
|
559
559
|
let k = 0, D = !1;
|
|
560
560
|
for (; C < m.length; C++) {
|
|
561
|
-
const b = m[C],
|
|
562
|
-
if (
|
|
563
|
-
if (r(v + 1, i[v],
|
|
561
|
+
const b = m[C], E = b.length > 0 ? b[0] : " ", z = b.length > 0 ? b.substr(1) : b;
|
|
562
|
+
if (E === "-")
|
|
563
|
+
if (r(v + 1, i[v], E, z))
|
|
564
564
|
v++, k = 0;
|
|
565
565
|
else
|
|
566
566
|
return !x || i[v] == null ? null : (u[p] = i[v], g(m, v + 1, x - 1, C, !1, u, p + 1));
|
|
567
|
-
if (
|
|
567
|
+
if (E === "+") {
|
|
568
568
|
if (!d)
|
|
569
569
|
return null;
|
|
570
570
|
u[p] = z, p++, k = 0, D = !0;
|
|
571
571
|
}
|
|
572
|
-
if (
|
|
573
|
-
if (k++, u[p] = i[v], r(v + 1, i[v],
|
|
572
|
+
if (E === " ")
|
|
573
|
+
if (k++, u[p] = i[v], r(v + 1, i[v], E, z))
|
|
574
574
|
p++, d = !0, D = !1, v++;
|
|
575
575
|
else
|
|
576
576
|
return D || !x ? null : i[v] && (g(m, v + 1, x - 1, C + 1, !1, u, p + 1) || g(m, v + 1, x - 1, C, !1, u, p + 1)) || g(m, v, x - 1, C + 1, !1, u, p);
|
|
@@ -639,7 +639,7 @@ function we(t) {
|
|
|
639
639
|
lines: e.lines.map((n) => n.startsWith("-") ? `+${n.slice(1)}` : n.startsWith("+") ? `-${n.slice(1)}` : n)
|
|
640
640
|
})) });
|
|
641
641
|
}
|
|
642
|
-
function
|
|
642
|
+
function q(t, e, n, i, s, r, l) {
|
|
643
643
|
let o;
|
|
644
644
|
l ? typeof l == "function" ? o = { callback: l } : o = l : o = {}, typeof o.context > "u" && (o.context = 4);
|
|
645
645
|
const f = o.context;
|
|
@@ -708,9 +708,9 @@ function H(t, e, n, i, s, r, l) {
|
|
|
708
708
|
};
|
|
709
709
|
}
|
|
710
710
|
}
|
|
711
|
-
function
|
|
711
|
+
function j(t) {
|
|
712
712
|
if (Array.isArray(t))
|
|
713
|
-
return t.map(
|
|
713
|
+
return t.map(j).join(`
|
|
714
714
|
`);
|
|
715
715
|
const e = [];
|
|
716
716
|
t.oldFileName == t.newFileName && e.push("Index: " + t.oldFileName), e.push("==================================================================="), e.push("--- " + t.oldFileName + (typeof t.oldHeader > "u" ? "" : " " + t.oldHeader)), e.push("+++ " + t.newFileName + (typeof t.newHeader > "u" ? "" : " " + t.newHeader));
|
|
@@ -727,12 +727,12 @@ function A(t) {
|
|
|
727
727
|
function U(t, e, n, i, s, r, l) {
|
|
728
728
|
if (typeof l == "function" && (l = { callback: l }), l?.callback) {
|
|
729
729
|
const { callback: o } = l;
|
|
730
|
-
|
|
731
|
-
o(f ?
|
|
730
|
+
q(t, e, n, i, s, r, Object.assign(Object.assign({}, l), { callback: (f) => {
|
|
731
|
+
o(f ? j(f) : void 0);
|
|
732
732
|
} }));
|
|
733
733
|
} else {
|
|
734
|
-
const o =
|
|
735
|
-
return o ?
|
|
734
|
+
const o = q(t, e, n, i, s, r, l);
|
|
735
|
+
return o ? j(o) : void 0;
|
|
736
736
|
}
|
|
737
737
|
}
|
|
738
738
|
function Ze(t, e, n, i, s, r) {
|
|
@@ -766,11 +766,11 @@ function tt(t) {
|
|
|
766
766
|
}
|
|
767
767
|
const nt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
768
768
|
__proto__: null,
|
|
769
|
-
Diff:
|
|
769
|
+
Diff: N,
|
|
770
770
|
applyPatch: pe,
|
|
771
771
|
applyPatches: Xe,
|
|
772
772
|
arrayDiff: me,
|
|
773
|
-
canonicalize:
|
|
773
|
+
canonicalize: A,
|
|
774
774
|
characterDiff: ee,
|
|
775
775
|
convertChangesToDMP: Ke,
|
|
776
776
|
convertChangesToXML: et,
|
|
@@ -786,13 +786,13 @@ const nt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
786
786
|
diffTrimmedLines: se,
|
|
787
787
|
diffWords: ie,
|
|
788
788
|
diffWordsWithSpace: M,
|
|
789
|
-
formatPatch:
|
|
789
|
+
formatPatch: j,
|
|
790
790
|
jsonDiff: ue,
|
|
791
791
|
lineDiff: R,
|
|
792
792
|
parsePatch: J,
|
|
793
793
|
reversePatch: we,
|
|
794
794
|
sentenceDiff: oe,
|
|
795
|
-
structuredPatch:
|
|
795
|
+
structuredPatch: q,
|
|
796
796
|
wordDiff: ne,
|
|
797
797
|
wordsWithSpaceDiff: re
|
|
798
798
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
@@ -870,7 +870,7 @@ const lt = new Intl.DateTimeFormat(void 0, {
|
|
|
870
870
|
) }),
|
|
871
871
|
/* @__PURE__ */ a("div", { className: "mw-diff-title--user", children: t.username && /* @__PURE__ */ a(st, { ctx: t.ctx, user: t.username, target: "_blank" }) }),
|
|
872
872
|
/* @__PURE__ */ a("div", { className: "mw-diff-title--timestamp", children: t.timestamp && lt(new Date(t.timestamp)) }),
|
|
873
|
-
/* @__PURE__ */ a("div", { className: "mw-diff-title--comment", children: t.parsedcomment && /* @__PURE__ */ a(
|
|
873
|
+
/* @__PURE__ */ a("div", { className: "mw-diff-title--comment", children: t.parsedcomment && /* @__PURE__ */ a(Ne, { children: [
|
|
874
874
|
"(",
|
|
875
875
|
/* @__PURE__ */ a("i", { innerHTML: t.parsedcomment }),
|
|
876
876
|
")"
|
|
@@ -1021,7 +1021,6 @@ class I extends (be = K) {
|
|
|
1021
1021
|
this.ctx.set("quickDiff", this), this.ctx.on("quick-edit/wiki-page", this.injectQuickEdit.bind(this)), window.RLQ.push(this.injectHistoryPage.bind(this));
|
|
1022
1022
|
}
|
|
1023
1023
|
stop() {
|
|
1024
|
-
this.ctx.off("quick-edit/wiki-page", this.injectQuickEdit.bind(this));
|
|
1025
1024
|
}
|
|
1026
1025
|
injectHistoryPage() {
|
|
1027
1026
|
const e = at("#mw-history-compare");
|
|
@@ -1049,10 +1048,10 @@ class I extends (be = K) {
|
|
|
1049
1048
|
);
|
|
1050
1049
|
});
|
|
1051
1050
|
}
|
|
1052
|
-
injectQuickEdit({ modal: e, wikiPage: n }) {
|
|
1053
|
-
if (n.pageid === 0)
|
|
1051
|
+
injectQuickEdit({ modal: e, wikiPage: n, options: i }) {
|
|
1052
|
+
if (n.pageid === 0 || i.section === "new")
|
|
1054
1053
|
return;
|
|
1055
|
-
let
|
|
1054
|
+
let s;
|
|
1056
1055
|
e.addButton(
|
|
1057
1056
|
{
|
|
1058
1057
|
label: "Diff",
|
|
@@ -1060,26 +1059,26 @@ class I extends (be = K) {
|
|
|
1060
1059
|
keyPress: "ctrl-d",
|
|
1061
1060
|
className: "btn btn-secondary",
|
|
1062
1061
|
method: () => {
|
|
1063
|
-
const
|
|
1064
|
-
return
|
|
1062
|
+
const r = n.title, l = n.revisions?.[0]?.content || "", o = e.get$content().querySelector('textarea[name="text"]')?.value || "";
|
|
1063
|
+
return l === o ? this.ctx.modal.notify("info", { title: "Quick Diff", content: "No changes" }) : (s = this.comparePages(
|
|
1065
1064
|
{
|
|
1066
|
-
fromtitle:
|
|
1067
|
-
fromtext:
|
|
1068
|
-
totitle:
|
|
1069
|
-
totext:
|
|
1065
|
+
fromtitle: r,
|
|
1066
|
+
fromtext: l,
|
|
1067
|
+
totitle: r,
|
|
1068
|
+
totext: o,
|
|
1070
1069
|
topst: !0
|
|
1071
1070
|
},
|
|
1072
|
-
|
|
1071
|
+
s,
|
|
1073
1072
|
{
|
|
1074
1073
|
backdrop: !1,
|
|
1075
1074
|
draggable: !0
|
|
1076
1075
|
}
|
|
1077
|
-
),
|
|
1076
|
+
), s);
|
|
1078
1077
|
}
|
|
1079
1078
|
},
|
|
1080
1079
|
2
|
|
1081
1080
|
), e.on(e.Event.Close, () => {
|
|
1082
|
-
|
|
1081
|
+
s?.destroy(), s = void 0;
|
|
1083
1082
|
});
|
|
1084
1083
|
}
|
|
1085
1084
|
simpleTextDiff(e, n) {
|
|
@@ -1166,7 +1165,7 @@ class I extends (be = K) {
|
|
|
1166
1165
|
"section",
|
|
1167
1166
|
{
|
|
1168
1167
|
style: { height: "70vh", display: "flex", justifyContent: "center", alignItems: "center" },
|
|
1169
|
-
children: /* @__PURE__ */ a(
|
|
1168
|
+
children: /* @__PURE__ */ a(Ee, {})
|
|
1170
1169
|
}
|
|
1171
1170
|
)
|
|
1172
1171
|
), n.bringToFront(), window.mw && mw.loader.getState("mediawiki.diff.styles") !== "ready" && mw.loader.load(["mediawiki.diff.styles"]), this.ctx.api.post({
|
|
@@ -1176,13 +1175,6 @@ class I extends (be = K) {
|
|
|
1176
1175
|
format: "json",
|
|
1177
1176
|
formatversion: 2
|
|
1178
1177
|
}).then((s) => {
|
|
1179
|
-
if (s.data?.error || s.data?.errors) {
|
|
1180
|
-
const o = [s.data?.error, ...s.data?.errors || []].filter(
|
|
1181
|
-
Boolean
|
|
1182
|
-
);
|
|
1183
|
-
throw new Error(o.map((f) => f.info).join(`
|
|
1184
|
-
`), { cause: s });
|
|
1185
|
-
}
|
|
1186
1178
|
if (!s.data.compare)
|
|
1187
1179
|
throw new Error("No compare data received", { cause: s });
|
|
1188
1180
|
const {
|
|
@@ -1254,4 +1246,4 @@ class St extends K {
|
|
|
1254
1246
|
export {
|
|
1255
1247
|
St as PluginQuickDiff
|
|
1256
1248
|
};
|
|
1257
|
-
//# sourceMappingURL=index
|
|
1249
|
+
//# sourceMappingURL=index-CADkQBg0.js.map
|