@inpageedit/core 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/IconQuickEdit-YVn1ANbm.js +27 -0
  2. package/dist/IconQuickEdit-YVn1ANbm.js.map +1 -0
  3. package/dist/InPageEdit.d.ts +7 -5
  4. package/dist/components/Icon/IconEdit.d.ts +2 -0
  5. package/dist/components/Icon/IconQuickEdit.d.ts +2 -0
  6. package/dist/components/MwUserLinks.d.ts +2 -0
  7. package/dist/index-1JtE4urY.js +1256 -0
  8. package/dist/{index-5zB57uWM.js.map → index-1JtE4urY.js.map} +1 -1
  9. package/dist/{index-CPCQc37I.js → index-2AEdgbUL.js} +4 -4
  10. package/dist/index-2AEdgbUL.js.map +1 -0
  11. package/dist/index-2kN4SKmT.js +116 -0
  12. package/dist/index-2kN4SKmT.js.map +1 -0
  13. package/dist/{index-BqqQgaGG.js → index-B3Bsg_nE.js} +5 -4
  14. package/dist/index-B3Bsg_nE.js.map +1 -0
  15. package/dist/{index-clwjxJi5.js → index-BCMwmSfQ.js} +2 -2
  16. package/dist/{index-clwjxJi5.js.map → index-BCMwmSfQ.js.map} +1 -1
  17. package/dist/{index-ClYojws9.js → index-C0ci6Ll1.js} +3 -2
  18. package/dist/index-C0ci6Ll1.js.map +1 -0
  19. package/dist/{index-BHruEVsx.js → index-CZnu6cRK.js} +2 -2
  20. package/dist/{index-BHruEVsx.js.map → index-CZnu6cRK.js.map} +1 -1
  21. package/dist/{index-B7Ok-t-3.js → index-CheNjwas.js} +2 -2
  22. package/dist/{index-B7Ok-t-3.js.map → index-CheNjwas.js.map} +1 -1
  23. package/dist/{index-SDBp__LY.js → index-CrWxZ0yl.js} +66 -63
  24. package/dist/{index-SDBp__LY.js.map → index-CrWxZ0yl.js.map} +1 -1
  25. package/dist/{index-BnRuHI16.js → index-DqfQ7hp6.js} +1018 -925
  26. package/dist/index-DqfQ7hp6.js.map +1 -0
  27. package/dist/index-sfkutNHj.js +201 -0
  28. package/dist/index-sfkutNHj.js.map +1 -0
  29. package/dist/index.js +1 -1
  30. package/dist/models/WikiTitle/index.d.ts +1 -0
  31. package/dist/plugins/in-article-links/index.d.ts +19 -1
  32. package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +2 -0
  33. package/dist/plugins/quick-diff/components/DiffTable.d.ts +17 -0
  34. package/dist/plugins/quick-preview/index.d.ts +2 -2
  35. package/dist/services/ApiService.d.ts +2 -2
  36. package/dist/services/ModalService/IPEModal.d.ts +1 -1
  37. package/dist/services/SiteMetadataService.d.ts +36 -1
  38. package/dist/style.css +1 -1
  39. package/dist/utils/url.d.ts +24 -0
  40. package/lib/index.umd.js +28 -28
  41. package/lib/index.umd.js.map +1 -1
  42. package/lib/style.css +1 -1
  43. package/package.json +10 -1
  44. package/dist/index-5zB57uWM.js +0 -1142
  45. package/dist/index-BnRuHI16.js.map +0 -1
  46. package/dist/index-BqqQgaGG.js.map +0 -1
  47. package/dist/index-Bs5MFAHs.js +0 -110
  48. package/dist/index-Bs5MFAHs.js.map +0 -1
  49. package/dist/index-C9QOZJ8o.js +0 -167
  50. package/dist/index-C9QOZJ8o.js.map +0 -1
  51. package/dist/index-CPCQc37I.js.map +0 -1
  52. package/dist/index-ClYojws9.js.map +0 -1
@@ -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-BnRuHI16.js";
2
+ import { B as I, S as b, a as v, I as S } from "./index-DqfQ7hp6.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) {
@@ -17,7 +17,7 @@ var A = Object.create, h = Object.defineProperty, R = Object.getOwnPropertyDescr
17
17
  p = L(l, t, g = {}, r[3], C), o = (0, i[d])(n, p), g._ = 1, x(o) && (n = o);
18
18
  return T(r, n), c && h(n, t, c), _ ? l ^ 4 ? a : c : n;
19
19
  }, E, f, D;
20
- E = [S(["sitemeta", "storage"])];
20
+ E = [S(["storage"])];
21
21
  class u extends (D = I) {
22
22
  constructor(e) {
23
23
  super(e, {}, "preferences"), this.ctx = e, this.db = void 0, this.customRegistries = [], this.categoryDefinitions = [], this._defaultPreferences = {}, this.db = e.storage.createDatabse("preferences", 1 / 0), this.ctx.set("preferences", this);
@@ -87,7 +87,7 @@ class u extends (D = I) {
87
87
  }).description(""),
88
88
  "about",
89
89
  {}
90
- ), import("./index-SDBp__LY.js").then((e) => {
90
+ ), import("./index-CrWxZ0yl.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-CPCQc37I.js.map
171
+ //# sourceMappingURL=index-2AEdgbUL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-2AEdgbUL.js","sources":["../src/utils/computeable.ts","../src/plugins/preferences/index.tsx"],"sourcesContent":["export type ComputeAble<T> = (() => T | Promise<T>) | T\nconst isFunction = (value: any): value is Function => typeof value === 'function'\nexport async function computeFallback<T>(value: ComputeAble<T>): Promise<T> {\n if (isFunction(value)) {\n return await value()\n } else {\n return value\n }\n}\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit.js'\nimport { IPEStorageItem, IPEStorageManager } from '@/services/StorageService.js'\nimport { computeFallback, ComputeAble } from '@/utils/computeable.js'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n preferences: PluginPreferences\n }\n}\n\nexport interface InPageEditPreferenceUICategory {\n name: string\n label: string\n description?: string\n index?: number\n}\n\nexport interface InPageEditPreferenceUIRegistryItem {\n name: string\n schema: Schema\n defaults: Record<string, any>\n category: string\n}\n\n@Inject(['storage'])\nexport class PluginPreferences extends BasePlugin {\n private db: IPEStorageManager<any>\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\n private _defaultPreferences: Record<string, any> = {}\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'preferences')\n this.db = ctx.storage.createDatabse<any>('preferences', Infinity)\n this.ctx.set('preferences', this)\n }\n\n async start() {\n this.defineCategory({\n name: 'general',\n label: 'General',\n description: 'General settings',\n })\n this.defineCategory({\n name: 'edit',\n label: 'Editing',\n description: 'Settings related to editing content',\n })\n this.defineCategory({\n name: 'about',\n label: 'About',\n description: 'About InPageEdit',\n index: 99,\n })\n\n this.registerCustomConfig(\n 'about',\n Schema.object({\n about: Schema.const(\n <div className=\"prose\">\n <h2>✏️ InPageEdit NEXT</h2>\n <i>v{this.ctx.version}</i>\n <h2>Portals</h2>\n <div style=\"display: flex; flex-direction: column; gap: 1rem\">\n <a\n href={this.ctx.Endpoints.HOME_URL}\n target=\"_blank\"\n style={{ display: 'block', width: '100%' }}\n >\n Official Website & Help Center\n </a>\n <ActionButton\n href={`${this.ctx.Endpoints.UPDATE_LOGS_URL}#${this.ctx.version}`}\n style={{ display: 'block', width: '100%' }}\n >\n Update Logs\n </ActionButton>\n </div>\n <h2>Join us</h2>\n <ul>\n <li>\n <strong>GitHub</strong>:{' '}\n <a href={this.ctx.Endpoints.GITHUB_URL} target=\"_blank\">\n inpageedit/inpageedit-next\n </a>\n </li>\n <li>\n <strong>QQ Group</strong>: 1026023666\n </li>\n </ul>\n <hr />\n <p>🚀 Modular, Extensible Supercharged Plugin for MediaWiki.</p>\n <p>InPageEdit-NEXT Copyright © 2025-present dragon-fish</p>\n </div>\n ).role('raw-html'),\n }).description(''),\n 'about',\n {}\n )\n\n import('./ui/index').then((module) => {\n const fork = this.ctx.plugin(module.PluginPreferencesUI)\n this.addDisposeHandler(() => {\n fork.dispose()\n })\n })\n }\n\n async get<T = any>(key: string, fallback?: ComputeAble<T>): Promise<T | null> {\n fallback ??= () => {\n const defaultValue = this.getDefaultValue(key)\n this.logger.debug(key, `(fallback value: ${defaultValue})`)\n return defaultValue as T\n }\n const value = (await this.db.get(key, undefined)) as T | null\n return value !== null ? value : ((await computeFallback(fallback)) as T)\n }\n\n getDefaultValue(key: string): unknown {\n return (this._defaultPreferences[key] ??= this.loadDefaultConfigs()[key])\n }\n\n set<T = any>(key: string, value: T): Promise<IPEStorageItem<T> | void> {\n const defaultValue = this.getDefaultValue(key)\n if (value === defaultValue) {\n return this.db.delete(key)\n } else {\n return this.db.set(key, value)\n }\n }\n\n async getAll() {\n const data = this.loadDefaultConfigs()\n await this.db.iterate((value: IPEStorageItem, key: string) => {\n data[key] = value\n })\n return data\n }\n\n private loadDefaultConfigs() {\n const data = {} as Record<string, any>\n this.getConfigRegistries().forEach((item) => {\n // 首先读取 schema 上的默认值\n try {\n const defaultValues = item.schema({}) as any\n Object.entries(defaultValues).forEach(([key, val]) => {\n data[key] = val\n })\n } catch {}\n\n // 然后读取注册时定义的默认值\n item.defaults &&\n Object.entries(item.defaults).forEach(([key, val]) => {\n data[key] = val\n })\n })\n\n Object.entries(data).forEach(([key, val]) => {\n this._defaultPreferences[key] = val\n })\n\n return data\n }\n\n registerCustomConfig(\n name: string,\n schema: Schema,\n category: string,\n defaults: Record<string, any>\n ) {\n this.customRegistries.push({\n name,\n schema,\n category,\n defaults,\n })\n return this\n }\n\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\n return Array.from(this.ctx.registry.entries())\n .map<{\n name: string\n schema: Schema\n defaults: Record<string, any>\n }>(([plugin, fork]) => {\n if (plugin === null) {\n return {\n name: '@root',\n schema: (InPageEdit as any)?.PreferencesSchema || null,\n defaults: (InPageEdit as any)?.PreferencesDefaults || {},\n }\n } else {\n return {\n name: plugin.name,\n schema: (plugin as any)?.PreferencesSchema || null,\n defaults: (plugin as any)?.PreferencesDefaults || {},\n }\n }\n })\n .filter((item) => item.schema !== null)\n .map((item) => {\n return {\n ...item,\n category: item.schema.meta.category || 'general',\n }\n })\n .concat(this.customRegistries)\n .filter((item) => !category || item.category === category)\n }\n\n defineCategory(category: InPageEditPreferenceUICategory) {\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\n if (index < 0) {\n this.categoryDefinitions.push(category)\n } else {\n this.categoryDefinitions[index] = category\n }\n this.categoryDefinitions.sort((a, b) => {\n return (a.index ?? 0) - (b.index ?? 0)\n })\n return this\n }\n\n getConfigCategories() {\n return this.categoryDefinitions\n }\n}\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":";;;AACA,MAAMA,IAAa,CAACC,MAAkC,OAAOA,KAAU;AACvE,eAAsBC,EAAmBD,GAAmC;AAC1E,SAAID,EAAWC,CAAK,IACX,MAAMA,EAAA,IAENA;AAEX;;;;;;;;;;;;GCRAE,GAAAC,GAAAC;AAwBAF,IAAA,CAACG,EAAO,CAAC,SAAS,CAAC,CAAA;AACZ,MAAMC,WAA0BF,IAAAG,GAAW;AAAA,EAMhD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,aAAa,GADX,KAAA,MAAAA,GALnB,KAAQ,KAAR,QACA,KAAO,mBAAyD,CAAA,GAChE,KAAO,sBAAwD,CAAA,GAC/D,KAAQ,sBAA2C,CAAA,GAIjD,KAAK,KAAKA,EAAI,QAAQ,cAAmB,eAAe,KAAQ,GAChE,KAAK,IAAI,IAAI,eAAe,IAAI;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ;AACZ,SAAK,eAAe;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA,CACd,GACD,KAAK,eAAe;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA,CACd,GACD,KAAK,eAAe;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,IAAA,CACR,GAED,KAAK;AAAA,MACH;AAAA,MACAC,EAAO,OAAO;AAAA,QACZ,OAAOA,EAAO;AAAA,UACZC,gBAAAA,EAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAG,UAAA,qBAAA,CAAkB;AAAA,8BACrB,KAAA,EAAE,UAAA;AAAA,cAAA;AAAA,cAAE,KAAK,IAAI;AAAA,YAAA,GAAQ;AAAA,YACtB,gBAAAA,EAAC,QAAG,UAAA,UAAA,CAAO;AAAA,YACXD,gBAAAA,EAAC,OAAA,EAAI,OAAM,oDACT,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAM,KAAK,IAAI,UAAU;AAAA,kBACzB,QAAO;AAAA,kBACP,OAAO,EAAE,SAAS,SAAS,OAAO,OAAA;AAAA,kBACnC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAA;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,MAAM,GAAG,KAAK,IAAI,UAAU,eAAe,IAAI,KAAK,IAAI,OAAO;AAAA,kBAC/D,OAAO,EAAE,SAAS,SAAS,OAAO,OAAA;AAAA,kBACnC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED,GACF;AAAA,YACA,gBAAAD,EAAC,QAAG,UAAA,UAAA,CAAO;AAAA,8BACV,MAAA,EACC,UAAA;AAAA,cAAAD,gBAAAA,EAAC,MAAA,EACC,UAAA;AAAA,gBAAA,gBAAAC,EAAC,YAAO,UAAA,SAAA,CAAM;AAAA,gBAAS;AAAA,gBAAE;AAAA,gBACzB,gBAAAA,EAAC,OAAE,MAAM,KAAK,IAAI,UAAU,YAAY,QAAO,UAAS,UAAA,6BAAA,CAExD;AAAA,cAAA,GACF;AAAA,gCACC,MAAA,EACC,UAAA;AAAA,gBAAA,gBAAAA,EAAC,YAAO,UAAA,WAAA,CAAQ;AAAA,gBAAS;AAAA,cAAA,EAAA,CAC3B;AAAA,YAAA,GACF;AAAA,8BACC,MAAA,EAAG;AAAA,YACJ,gBAAAA,EAAC,OAAE,UAAA,4DAAA,CAAyD;AAAA,YAC5D,gBAAAA,EAAC,OAAE,UAAA,uDAAA,CAAoD;AAAA,UAAA,EAAA,CACzD;AAAA,QAAA,EACA,KAAK,UAAU;AAAA,MAAA,CAClB,EAAE,YAAY,EAAE;AAAA,MACjB;AAAA,MACA,CAAA;AAAA,IAAC,GAGH,OAAO,qBAAY,EAAE,KAAK,CAACE,MAAW;AACpC,YAAMC,IAAO,KAAK,IAAI,OAAOD,EAAO,mBAAmB;AACvD,WAAK,kBAAkB,MAAM;AAC3B,QAAAC,EAAK,QAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAaC,GAAaC,GAA8C;AAC5E,IAAAA,MAAa,MAAM;AACjB,YAAMC,IAAe,KAAK,gBAAgBF,CAAG;AAC7C,kBAAK,OAAO,MAAMA,GAAK,oBAAoBE,CAAY,GAAG,GACnDA;AAAA,IACT;AACA,UAAMjB,IAAS,MAAM,KAAK,GAAG,IAAIe,GAAK,MAAS;AAC/C,WAAOf,MAAU,OAAOA,IAAU,MAAMC,EAAgBe,CAAQ;AAAA,EAClE;AAAA,EAEA,gBAAgBD,GAAsB;AACpC,WAAQ,KAAK,oBAAoBA,CAAG,MAAM,KAAK,mBAAA,EAAqBA,CAAG;AAAA,EACzE;AAAA,EAEA,IAAaA,GAAaf,GAA6C;AACrE,UAAMiB,IAAe,KAAK,gBAAgBF,CAAG;AAC7C,WAAIf,MAAUiB,IACL,KAAK,GAAG,OAAOF,CAAG,IAElB,KAAK,GAAG,IAAIA,GAAKf,CAAK;AAAA,EAEjC;AAAA,EAEA,MAAM,SAAS;AACb,UAAMkB,IAAO,KAAK,mBAAA;AAClB,iBAAM,KAAK,GAAG,QAAQ,CAAClB,GAAuBe,MAAgB;AAC5D,MAAAG,EAAKH,CAAG,IAAIf;AAAA,IACd,CAAC,GACMkB;AAAA,EACT;AAAA,EAEQ,qBAAqB;AAC3B,UAAMA,IAAO,CAAA;AACb,gBAAK,oBAAA,EAAsB,QAAQ,CAACC,MAAS;AAE3C,UAAI;AACF,cAAMC,IAAgBD,EAAK,OAAO,EAAE;AACpC,eAAO,QAAQC,CAAa,EAAE,QAAQ,CAAC,CAACL,GAAKM,CAAG,MAAM;AACpD,UAAAH,EAAKH,CAAG,IAAIM;AAAA,QACd,CAAC;AAAA,MACH,QAAQ;AAAA,MAAC;AAGT,MAAAF,EAAK,YACH,OAAO,QAAQA,EAAK,QAAQ,EAAE,QAAQ,CAAC,CAACJ,GAAKM,CAAG,MAAM;AACpD,QAAAH,EAAKH,CAAG,IAAIM;AAAA,MACd,CAAC;AAAA,IACL,CAAC,GAED,OAAO,QAAQH,CAAI,EAAE,QAAQ,CAAC,CAACH,GAAKM,CAAG,MAAM;AAC3C,WAAK,oBAAoBN,CAAG,IAAIM;AAAA,IAClC,CAAC,GAEMH;AAAA,EACT;AAAA,EAEA,qBACEI,GACAC,GACAC,GACAC,GACA;AACA,gBAAK,iBAAiB,KAAK;AAAA,MACzB,MAAAH;AAAA,MACA,QAAAC;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,IAAA,CACD,GACM;AAAA,EACT;AAAA,EAEA,oBAAoBD,GAAyD;AAC3E,WAAO,MAAM,KAAK,KAAK,IAAI,SAAS,QAAA,CAAS,EAC1C,IAIE,CAAC,CAACE,GAAQZ,CAAI,MACXY,MAAW,OACN;AAAA,MACL,MAAM;AAAA,MACN,QAASC,GAAoB,qBAAqB;AAAA,MAClD,UAAWA,GAAoB,uBAAuB,CAAA;AAAA,IAAC,IAGlD;AAAA,MACL,MAAMD,EAAO;AAAA,MACb,QAASA,GAAgB,qBAAqB;AAAA,MAC9C,UAAWA,GAAgB,uBAAuB,CAAA;AAAA,IAAC,CAGxD,EACA,OAAO,CAACP,MAASA,EAAK,WAAW,IAAI,EACrC,IAAI,CAACA,OACG;AAAA,MACL,GAAGA;AAAA,MACH,UAAUA,EAAK,OAAO,KAAK,YAAY;AAAA,IAAA,EAE1C,EACA,OAAO,KAAK,gBAAgB,EAC5B,OAAO,CAACA,MAAS,CAACK,KAAYL,EAAK,aAAaK,CAAQ;AAAA,EAC7D;AAAA,EAEA,eAAeA,GAA0C;AACvD,UAAMI,IAAQ,KAAK,oBAAoB,UAAU,CAACC,MAAQA,EAAI,SAASL,EAAS,IAAI;AACpF,WAAII,IAAQ,IACV,KAAK,oBAAoB,KAAKJ,CAAQ,IAEtC,KAAK,oBAAoBI,CAAK,IAAIJ,GAEpC,KAAK,oBAAoB,KAAK,CAACM,GAAGC,OACxBD,EAAE,SAAS,MAAMC,EAAE,SAAS,EACrC,GACM;AAAA,EACT;AAAA,EAEA,sBAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AACF;AA1MO5B,IAAA6B,EAAA5B,CAAA;AAAME,IAAN2B,6BADP/B,GACaI,CAAA;AAAN4B,EAAA/B,GAAA,GAAMG,CAAA;"}
@@ -0,0 +1,116 @@
1
+ import { j as l, F as j, P as q } from "./index-CvhkVj_L.js";
2
+ import { B as y, I as Q } from "./index-DqfQ7hp6.js";
3
+ import { m as E } from "./makeCallable-LDU0xZMJ.js";
4
+ var S = Object.create, h = Object.defineProperty, C = Object.getOwnPropertyDescriptor, x = (t, i) => (i = Symbol[t]) ? i : Symbol.for("Symbol." + t), f = (t) => {
5
+ throw TypeError(t);
6
+ }, D = (t, i, r) => i in t ? h(t, i, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[i] = r, F = (t, i) => h(t, "name", { value: i, configurable: !0 }), T = (t) => [, , , S(t?.[x("metadata")] ?? null)], B = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], P = (t) => t !== void 0 && typeof t != "function" ? f("Function expected") : t, I = (t, i, r, a, e) => ({ kind: B[t], name: i, metadata: a, addInitializer: (c) => r._ ? f("Already initialized") : e.push(P(c || null)) }), O = (t, i) => D(i, x("metadata"), t[3]), z = (t, i, r, a) => {
7
+ for (var e = 0, c = t[i >> 1], n = c && c.length; e < n; e++) c[e].call(r);
8
+ return a;
9
+ }, N = (t, i, r, a, e, c) => {
10
+ var n, o, d, s = i & 7, _ = !1, k = 0, m = t[k] || (t[k] = []), u = s && (e = e.prototype, s < 5 && (s > 3 || !_) && C(e, r));
11
+ F(e, r);
12
+ for (var v = a.length - 1; v >= 0; v--)
13
+ d = I(s, r, o = {}, t[3], m), n = (0, a[v])(e, d), o._ = 1, P(n) && (e = n);
14
+ return O(t, e), u && h(e, r, u), _ ? s ^ 4 ? c : u : e;
15
+ }, b, w, g;
16
+ b = [Q(["api", "wikiPage", "modal"])];
17
+ class p extends (g = y) {
18
+ constructor(i) {
19
+ super(i, {}, "quickPreview"), this.ctx = i, this.ctx.set("quickPreview", E(this, "previewWikitext"));
20
+ }
21
+ start() {
22
+ this.ctx.on("quick-edit/wiki-page", this.injectQuickEdit.bind(this)), this.ctx.on("quick-delete/wiki-page", this.injectQuickDelete.bind(this));
23
+ }
24
+ stop() {
25
+ this.ctx.off("quick-edit/wiki-page", this.injectQuickEdit.bind(this)), this.ctx.off("quick-delete/wiki-page", this.injectQuickDelete.bind(this));
26
+ }
27
+ previewWikitext(i, r, a, e, c) {
28
+ return a ||= this.ctx.wikiPage.newBlankPage({
29
+ title: "API"
30
+ }), (!e || e.isDestroyed) && (e = this.ctx.modal.createObject({
31
+ className: "in-page-edit ipe-quickPreview",
32
+ sizeClass: "large",
33
+ center: !1,
34
+ ...c
35
+ }).init()), e.show(), e.setTitle("Preview - Loading..."), e.setContent(/* @__PURE__ */ l(q, {})), e.bringToFront(), this.ctx.emit("quick-preview/show-modal", {
36
+ ctx: this.ctx,
37
+ text: i,
38
+ modal: e,
39
+ wikiPage: a
40
+ }), a.preview(i, r).then((n) => {
41
+ const {
42
+ data: { parse: o }
43
+ } = n;
44
+ e.setTitle(`Preview - ${o.title}`);
45
+ let d = null;
46
+ e.setContent(
47
+ /* @__PURE__ */ l("section", { children: /* @__PURE__ */ l(
48
+ "div",
49
+ {
50
+ ref: (s) => d = s,
51
+ className: "mw-parser-output",
52
+ innerHTML: o.text
53
+ }
54
+ ) })
55
+ ), window.mw?.hook("wikipage.content").fire($(d)), this.ctx.emit("quick-preview/loaded", {
56
+ ctx: this.ctx,
57
+ modal: e,
58
+ wikiPage: a,
59
+ text: i,
60
+ parseData: o
61
+ });
62
+ }).catch((n) => {
63
+ e.setTitle("Preview - Failed"), e.setContent(
64
+ /* @__PURE__ */ l(j, { children: [
65
+ /* @__PURE__ */ l("p", { children: "Failed to preview" }),
66
+ /* @__PURE__ */ l("p", { children: n instanceof Error ? n.message : String(n) })
67
+ ] })
68
+ );
69
+ }), e;
70
+ }
71
+ injectQuickEdit({ ctx: i, modal: r, wikiPage: a }) {
72
+ let e;
73
+ r.addButton(
74
+ {
75
+ label: "Preview",
76
+ side: "left",
77
+ className: "btn btn-secondary",
78
+ method: () => {
79
+ e = this.previewWikitext(
80
+ r.get$content().querySelector('textarea[name="text"]')?.value || "",
81
+ void 0,
82
+ a,
83
+ e,
84
+ {
85
+ backdrop: !1,
86
+ draggable: !0
87
+ }
88
+ );
89
+ }
90
+ },
91
+ 1
92
+ ), r.on(r.Event.Close, () => {
93
+ e?.destroy(), e = void 0;
94
+ });
95
+ }
96
+ injectQuickDelete({ ctx: i, modal: r, wikiPage: a }) {
97
+ r.addButton(
98
+ {
99
+ label: "Preview",
100
+ side: "left",
101
+ className: "btn btn-secondary",
102
+ method: () => {
103
+ this.logger.warn("To be implemented: preview wikitext for quick delete");
104
+ }
105
+ },
106
+ 2
107
+ );
108
+ }
109
+ }
110
+ w = T(g);
111
+ p = N(w, 0, "PluginQuickPreview", b, p);
112
+ z(w, 1, p);
113
+ export {
114
+ p as PluginQuickPreview
115
+ };
116
+ //# sourceMappingURL=index-2kN4SKmT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-2kN4SKmT.js","sources":["../src/plugins/quick-preview/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\nimport { type QuickEditInitPayload } from '@/plugins/quick-edit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { MwApiParams } from 'wiki-saikou'\nimport { PageParseData } from '@/models/WikiPage/types/PageParseData'\nimport { IPEModal, IPEModalOptions } from '@/services/ModalService/IPEModal.js'\nimport { QuickDeleteInitPayload } from '../quick-delete/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickPreview: PluginQuickPreview & {\n // for backward compatibility\n (\n ...args: Parameters<PluginQuickPreview['previewWikitext']>\n ): ReturnType<PluginQuickPreview['previewWikitext']>\n }\n }\n interface Events {\n 'quick-preview/show-modal'(payload: {\n ctx: InPageEdit\n text: string\n modal: IPEModal\n wikiPage: WikiPage\n }): void\n 'quick-preview/loaded'(payload: {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: WikiPage\n text: string\n parseData: PageParseData\n }): void\n }\n}\n\n@Inject(['api', 'wikiPage', 'modal'])\nexport class PluginQuickPreview extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quickPreview')\n this.ctx.set('quickPreview', makeCallable(this, 'previewWikitext'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n this.ctx.on('quick-delete/wiki-page', this.injectQuickDelete.bind(this))\n }\n\n protected stop(): Promise<void> | void {\n this.ctx.off('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n this.ctx.off('quick-delete/wiki-page', this.injectQuickDelete.bind(this))\n }\n\n previewWikitext(\n text: string,\n params?: MwApiParams,\n wikiPage?: WikiPage,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n wikiPage ||= this.ctx.wikiPage.newBlankPage({\n title: 'API',\n })\n\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n className: 'in-page-edit ipe-quickPreview',\n sizeClass: 'large',\n center: false,\n ...modalOptions,\n })\n .init()\n }\n\n modal.show()\n modal.setTitle('Preview - Loading...')\n modal.setContent(<ProgressBar />)\n modal.bringToFront()\n this.ctx.emit('quick-preview/show-modal', {\n ctx: this.ctx,\n text,\n modal,\n wikiPage,\n })\n\n wikiPage\n .preview(text, params)\n .then((ret) => {\n const {\n data: { parse },\n } = ret\n modal.setTitle(`Preview - ${parse.title}`)\n let outputRef: HTMLElement | null = null\n modal.setContent(\n (\n <section>\n <div\n ref={(el) => (outputRef = el)}\n className=\"mw-parser-output\"\n innerHTML={parse.text}\n ></div>\n </section>\n ) as HTMLElement\n )\n window.mw?.hook('wikipage.content').fire($(outputRef!))\n this.ctx.emit('quick-preview/loaded', {\n ctx: this.ctx,\n modal,\n wikiPage,\n text,\n parseData: parse,\n })\n })\n .catch((error) => {\n modal.setTitle('Preview - Failed')\n modal.setContent(\n <>\n <p>Failed to preview</p>\n <p>{error instanceof Error ? error.message : String(error)}</p>\n </>\n )\n })\n\n return modal\n }\n\n private injectQuickEdit({ ctx, modal, wikiPage }: QuickEditInitPayload) {\n let latestPreviewModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: 'Preview',\n side: 'left',\n className: 'btn btn-secondary',\n method: () => {\n latestPreviewModal = this.previewWikitext(\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || '',\n undefined,\n wikiPage,\n latestPreviewModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n },\n },\n 1\n )\n modal.on(modal.Event.Close, () => {\n latestPreviewModal?.destroy()\n latestPreviewModal = undefined\n })\n }\n\n private injectQuickDelete({ ctx, modal, wikiPage }: QuickDeleteInitPayload) {\n modal.addButton(\n {\n label: 'Preview',\n side: 'left',\n className: 'btn btn-secondary',\n method: () => {\n this.logger.warn('To be implemented: preview wikitext for quick delete')\n },\n },\n 2\n )\n }\n}\n"],"names":["_PluginQuickPreview_decorators","_init","_a","Inject","PluginQuickPreview","BasePlugin","ctx","makeCallable","text","params","wikiPage","modal","modalOptions","jsx","ProgressBar","ret","parse","outputRef","el","error","jsxs","Fragment","latestPreviewModal","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { j as e, P as l } from "./index-CvhkVj_L.js";
2
- import { B as d } from "./index-BnRuHI16.js";
2
+ import { B as d } from "./index-DqfQ7hp6.js";
3
3
  import { T as m } from "./index-Bh70Udzi.js";
4
4
  import { I as u } from "./InputBox-BV4m05Xs.js";
5
5
  import { C as h } from "./CheckBox-D3rHnX7I.js";
6
- class x extends d {
6
+ class v extends d {
7
7
  constructor(t) {
8
8
  super(t, {}, "quick-redirect"), this.ctx = t;
9
9
  }
@@ -40,6 +40,7 @@ class x extends d {
40
40
  ),
41
41
  tooltip: "Quick Redirect",
42
42
  group: "group1",
43
+ index: 2,
43
44
  onClick: () => {
44
45
  this.quickRedirect(
45
46
  r ? {
@@ -154,6 +155,6 @@ class x extends d {
154
155
  }
155
156
  }
156
157
  export {
157
- x as PluginQuickRedirect
158
+ v as PluginQuickRedirect
158
159
  };
159
- //# sourceMappingURL=index-BqqQgaGG.js.map
160
+ //# sourceMappingURL=index-B3Bsg_nE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B3Bsg_nE.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect['quickRedirect']\n redirectPage: PluginQuickRedirect['redirectPage']\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\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-redirect')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickRedirect', this.quickRedirect.bind(this))\n this.ctx.set('redirectPage', this.redirectPage.bind(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.quickRedirect(\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 quickRedirect(options?: Partial<QuickRedirectOptions>) {\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 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 label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\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 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 const res = await wikiPage.edit(\n {\n text: content,\n summary: reason,\n },\n {\n createonly: !overwrite,\n }\n )\n if (res.data?.errors) {\n throw new Error(res.data.errors[0].text, { cause: res })\n }\n return res\n }\n}\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","reason","overwrite","wikiPage","content"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as i, F as f, P as R } from "./index-CvhkVj_L.js";
2
- import { B as S, I as N, S as w } from "./index-BnRuHI16.js";
2
+ import { B as S, I as N, S as w } from "./index-DqfQ7hp6.js";
3
3
  import { m as T } from "./makeCallable-LDU0xZMJ.js";
4
4
  import { R as q } from "./Preferences-Bg3J5Ur9.js";
5
5
  import { M as _ } from "./index-lZkYoUca.js";
@@ -292,4 +292,4 @@ Q(v, 1, u);
292
292
  export {
293
293
  u as PluginQuickDelete
294
294
  };
295
- //# sourceMappingURL=index-clwjxJi5.js.map
295
+ //# sourceMappingURL=index-BCMwmSfQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-clwjxJi5.js","sources":["../src/plugins/quick-delete/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickDelete: PluginQuickDelete & {\n (\n ...args: Parameters<PluginQuickDelete['showModal']>\n ): ReturnType<PluginQuickDelete['showModal']>\n }\n }\n interface Events {\n 'quick-delete/init-options'(payload: Omit<QuickDeleteInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-delete/show-modal'(payload: Omit<QuickDeleteInitPayload, 'wikiPage'>): void\n 'quick-delete/wiki-page'(payload: QuickDeleteInitPayload): void\n 'quick-delete/delete-notice'(\n payload: QuickDeleteInitPayload & { deleteNotices: ReactNode[] }\n ): void\n }\n}\n\nexport interface QuickDeleteOptions {\n title: string\n pageId: number\n revision: number\n deleteReason: string\n reloadAfterDelete: boolean\n}\n\nexport interface QuickDeleteInitPayload {\n ctx: InPageEdit\n options: QuickDeleteOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickDeleteSubmitPayload {\n wikiPage: WikiPage\n reason?: string\n}\n\n@Inject(['api', 'wikiPage', 'sitemeta', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n deleteReason: Schema.string()\n .description('Default delete reason for quick delete')\n .default('[IPE-NEXT] Quick delete'),\n })\n .description('Quick delete options')\n .extra('category', 'delete')\n)\nexport class PluginQuickDelete extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickDeleteOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n deleteReason: '',\n reloadAfterDelete: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-delete')\n this.ctx.root.set('quickDelete', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n this.ctx.preferences.defineCategory({\n label: 'Delete',\n name: 'delete',\n description: 'Settings related to deleting pages',\n index: 3,\n })\n }\n\n async showModal(payload?: string | Partial<QuickDeleteOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickDeleteOptions>\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }\n }\n\n const deleteReason =\n typeof payload.deleteReason === 'string'\n ? payload.deleteReason\n : (await this.ctx.preferences.get<string>('deleteReason'))!\n\n const options: QuickDeleteOptions = {\n ...this.DEFAULT_OPTIONS,\n deleteReason,\n ...payload,\n }\n if (!options.deleteReason) {\n options.deleteReason = (await this.ctx.preferences.get<string>('deleteReason')) || ''\n }\n if (!options) this.ctx.emit('quick-delete/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickDelete',\n sizeClass: 'small',\n center: true,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(<ProgressBar />)\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-delete/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page cannot be deleted')\n }\n if (wikiPage.pageInfo.pageid === 0) {\n throw new Error('Page does not exist, cannot be deleted')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick Delete: <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const deleteNotices = [] as ReactNode[]\n\n // Check delete permissions\n if (!wikiPage.userCan('delete')) {\n deleteNotices.push(\n <MBox title=\"Permission Denied\" type=\"error\">\n <p>You do not have permission to delete this page.</p>\n </MBox>\n )\n }\n\n // Check if page has protection\n if (wikiPage.pageInfo.protection && wikiPage.pageInfo.protection.length > 0) {\n deleteNotices.push(\n <MBox title=\"Warning\" type=\"warning\">\n <p>\n This page is protected and may has special use or purpose. Delete it at your own risk.\n </p>\n </MBox>\n )\n }\n\n this.ctx.emit('quick-delete/delete-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n deleteNotices,\n })\n\n const deleteForm = (\n <form className=\"ipe-quickDelete__form\">\n <div className=\"ipe-quickDelete__notices\">{deleteNotices}</div>\n <div className=\"ipe-quickDelete__content\">\n <div\n className=\"ipe-quickDelete__page-info\"\n style={{\n padding: '1rem',\n backgroundColor: '#f8f9fa',\n border: '1px solid #dee2e6',\n borderRadius: '4px',\n marginBottom: '1rem',\n }}\n >\n <ul>\n <li>\n <strong>Title:</strong> {wikiPage.pageInfo.title}\n </li>\n <li>\n <strong>Page ID:</strong> {wikiPage.pageInfo.pageid}\n </li>\n <li>\n <strong>Last Revision:</strong> {wikiPage.pageInfo.lastrevid}\n </li>\n <li>\n <strong>Length:</strong> {wikiPage.pageInfo.length} characters\n </li>\n </ul>\n </div>\n </div>\n <div\n class=\"ipe-quickDelete__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox\n label=\"Delete Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options.deleteReason}\n inputProps={{\n placeholder: 'Enter reason for deletion...',\n required: true,\n }}\n />\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(deleteForm)\n\n // Add delete button\n modal.addButton(\n {\n side: 'left',\n className: 'is-danger submit-btn',\n label: 'Delete Page',\n method: () => {\n const formData = new FormData(deleteForm)\n const reason = formData.get('reason') as string\n\n if (!reason || reason.trim() === '') {\n this.ctx.modal.notify('error', {\n title: 'Missing Reason',\n content: 'Please provide a reason for deletion.',\n })\n return\n }\n\n // 二次确认删除\n this.ctx.modal.confirm(\n {\n className: 'is-danger',\n title: 'Confirm Deletion',\n content: (\n <>\n <p>\n <strong>{wikiPage.pageInfo.title}</strong>\n </p>\n </>\n ) as HTMLElement,\n center: true,\n okBtn: {\n label: 'Delete it now',\n className: 'is-danger',\n },\n cancelBtn: {\n label: 'Cancel',\n className: 'is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n console.info(wikiPage, deleteForm, {\n reason: reason,\n })\n\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n reason,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Deletion Successful',\n content: `The page \"${wikiPage.pageInfo.title}\" has been deleted.`,\n })\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Deletion Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n }\n return true\n }\n )\n },\n },\n 0\n )\n\n this.ctx.emit('quick-delete/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n }\n\n async handleSubmit(payload: QuickDeleteSubmitPayload) {\n const wikiPage = payload.wikiPage\n const reason = payload.reason || ''\n\n return wikiPage.delete(reason)\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-delete',\n group: 'group2',\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-trash\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 7l16 0\" />\n <path d=\"M10 11l0 6\" />\n <path d=\"M14 11l0 6\" />\n <path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\" />\n <path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Delete this page',\n onClick: () => {\n const hasPermission = this.ctx.sitemeta.hasAnyRight('delete')\n if (hasPermission) {\n this.showModal({\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n })\n } else {\n this.ctx.modal.notify('error', {\n title: 'Permission Denied',\n content: 'You do not have permission to delete pages.',\n })\n }\n },\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-delete')\n }\n}\n"],"names":["_PluginQuickDelete_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDelete","BasePlugin","ctx","makeCallable","payload","deleteReason","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","deleteNotices","MBox","deleteForm","InputBox","reason","confirmed","noop","error","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
1
+ {"version":3,"file":"index-BCMwmSfQ.js","sources":["../src/plugins/quick-delete/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickDelete: PluginQuickDelete & {\n (\n ...args: Parameters<PluginQuickDelete['showModal']>\n ): ReturnType<PluginQuickDelete['showModal']>\n }\n }\n interface Events {\n 'quick-delete/init-options'(payload: Omit<QuickDeleteInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-delete/show-modal'(payload: Omit<QuickDeleteInitPayload, 'wikiPage'>): void\n 'quick-delete/wiki-page'(payload: QuickDeleteInitPayload): void\n 'quick-delete/delete-notice'(\n payload: QuickDeleteInitPayload & { deleteNotices: ReactNode[] }\n ): void\n }\n}\n\nexport interface QuickDeleteOptions {\n title: string\n pageId: number\n revision: number\n deleteReason: string\n reloadAfterDelete: boolean\n}\n\nexport interface QuickDeleteInitPayload {\n ctx: InPageEdit\n options: QuickDeleteOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickDeleteSubmitPayload {\n wikiPage: WikiPage\n reason?: string\n}\n\n@Inject(['api', 'wikiPage', 'sitemeta', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n deleteReason: Schema.string()\n .description('Default delete reason for quick delete')\n .default('[IPE-NEXT] Quick delete'),\n })\n .description('Quick delete options')\n .extra('category', 'delete')\n)\nexport class PluginQuickDelete extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickDeleteOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n deleteReason: '',\n reloadAfterDelete: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-delete')\n this.ctx.root.set('quickDelete', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n this.ctx.preferences.defineCategory({\n label: 'Delete',\n name: 'delete',\n description: 'Settings related to deleting pages',\n index: 3,\n })\n }\n\n async showModal(payload?: string | Partial<QuickDeleteOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickDeleteOptions>\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }\n }\n\n const deleteReason =\n typeof payload.deleteReason === 'string'\n ? payload.deleteReason\n : (await this.ctx.preferences.get<string>('deleteReason'))!\n\n const options: QuickDeleteOptions = {\n ...this.DEFAULT_OPTIONS,\n deleteReason,\n ...payload,\n }\n if (!options.deleteReason) {\n options.deleteReason = (await this.ctx.preferences.get<string>('deleteReason')) || ''\n }\n if (!options) this.ctx.emit('quick-delete/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickDelete',\n sizeClass: 'small',\n center: true,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(<ProgressBar />)\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-delete/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page cannot be deleted')\n }\n if (wikiPage.pageInfo.pageid === 0) {\n throw new Error('Page does not exist, cannot be deleted')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick Delete: <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const deleteNotices = [] as ReactNode[]\n\n // Check delete permissions\n if (!wikiPage.userCan('delete')) {\n deleteNotices.push(\n <MBox title=\"Permission Denied\" type=\"error\">\n <p>You do not have permission to delete this page.</p>\n </MBox>\n )\n }\n\n // Check if page has protection\n if (wikiPage.pageInfo.protection && wikiPage.pageInfo.protection.length > 0) {\n deleteNotices.push(\n <MBox title=\"Warning\" type=\"warning\">\n <p>\n This page is protected and may has special use or purpose. Delete it at your own risk.\n </p>\n </MBox>\n )\n }\n\n this.ctx.emit('quick-delete/delete-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n deleteNotices,\n })\n\n const deleteForm = (\n <form className=\"ipe-quickDelete__form\">\n <div className=\"ipe-quickDelete__notices\">{deleteNotices}</div>\n <div className=\"ipe-quickDelete__content\">\n <div\n className=\"ipe-quickDelete__page-info\"\n style={{\n padding: '1rem',\n backgroundColor: '#f8f9fa',\n border: '1px solid #dee2e6',\n borderRadius: '4px',\n marginBottom: '1rem',\n }}\n >\n <ul>\n <li>\n <strong>Title:</strong> {wikiPage.pageInfo.title}\n </li>\n <li>\n <strong>Page ID:</strong> {wikiPage.pageInfo.pageid}\n </li>\n <li>\n <strong>Last Revision:</strong> {wikiPage.pageInfo.lastrevid}\n </li>\n <li>\n <strong>Length:</strong> {wikiPage.pageInfo.length} characters\n </li>\n </ul>\n </div>\n </div>\n <div\n class=\"ipe-quickDelete__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox\n label=\"Delete Reason\"\n id=\"reason\"\n name=\"reason\"\n value={options.deleteReason}\n inputProps={{\n placeholder: 'Enter reason for deletion...',\n required: true,\n }}\n />\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(deleteForm)\n\n // Add delete button\n modal.addButton(\n {\n side: 'left',\n className: 'is-danger submit-btn',\n label: 'Delete Page',\n method: () => {\n const formData = new FormData(deleteForm)\n const reason = formData.get('reason') as string\n\n if (!reason || reason.trim() === '') {\n this.ctx.modal.notify('error', {\n title: 'Missing Reason',\n content: 'Please provide a reason for deletion.',\n })\n return\n }\n\n // 二次确认删除\n this.ctx.modal.confirm(\n {\n className: 'is-danger',\n title: 'Confirm Deletion',\n content: (\n <>\n <p>\n <strong>{wikiPage.pageInfo.title}</strong>\n </p>\n </>\n ) as HTMLElement,\n center: true,\n okBtn: {\n label: 'Delete it now',\n className: 'is-danger',\n },\n cancelBtn: {\n label: 'Cancel',\n className: 'is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n console.info(wikiPage, deleteForm, {\n reason: reason,\n })\n\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n reason,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Deletion Successful',\n content: `The page \"${wikiPage.pageInfo.title}\" has been deleted.`,\n })\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Deletion Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n }\n return true\n }\n )\n },\n },\n 0\n )\n\n this.ctx.emit('quick-delete/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n }\n\n async handleSubmit(payload: QuickDeleteSubmitPayload) {\n const wikiPage = payload.wikiPage\n const reason = payload.reason || ''\n\n return wikiPage.delete(reason)\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-delete',\n group: 'group2',\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-trash\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 7l16 0\" />\n <path d=\"M10 11l0 6\" />\n <path d=\"M14 11l0 6\" />\n <path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\" />\n <path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Delete this page',\n onClick: () => {\n const hasPermission = this.ctx.sitemeta.hasAnyRight('delete')\n if (hasPermission) {\n this.showModal({\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n })\n } else {\n this.ctx.modal.notify('error', {\n title: 'Permission Denied',\n content: 'You do not have permission to delete pages.',\n })\n }\n },\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-delete')\n }\n}\n"],"names":["_PluginQuickDelete_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDelete","BasePlugin","ctx","makeCallable","payload","deleteReason","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","deleteNotices","MBox","deleteForm","InputBox","reason","confirmed","noop","error","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as i, P as y } from "./index-CvhkVj_L.js";
2
- import { B as S, I as q } from "./index-BnRuHI16.js";
2
+ import { B as S, I as q } from "./index-DqfQ7hp6.js";
3
3
  import { T as F } from "./index-Bh70Udzi.js";
4
4
  import { C as u } from "./CheckBox-D3rHnX7I.js";
5
5
  import { I as j } from "./InputBox-BV4m05Xs.js";
@@ -55,6 +55,7 @@ class v extends (x = S) {
55
55
  ),
56
56
  tooltip: "Quick Move",
57
57
  group: "group1",
58
+ index: 1,
58
59
  onClick: () => {
59
60
  this.quickMove(
60
61
  a ? {
@@ -163,4 +164,4 @@ N(p, 1, v);
163
164
  export {
164
165
  v as PluginQuickMove
165
166
  };
166
- //# sourceMappingURL=index-ClYojws9.js.map
167
+ //# sourceMappingURL=index-C0ci6Ll1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C0ci6Ll1.js","sources":["../src/plugins/quick-move/index.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickMove: PluginQuickMove['quickMove']\n movePage: PluginQuickMove['movePage']\n }\n}\n\nexport interface MovePageOptions {\n from: string\n to: string\n reason?: string\n movetalk?: boolean\n movesubpages?: boolean\n noredirect?: boolean\n}\nexport interface QuickMoveOptions extends Partial<MovePageOptions> {\n lockFromField?: boolean\n lockToField?: boolean\n}\n\n@Inject(['modal', 'sitemeta'])\nexport class PluginQuickMove extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-move')\n ctx.set('quickMove', this.quickMove.bind(this))\n ctx.set('movePage', this.movePage.bind(this))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n })\n }\n\n private injectToolbox(ctx: InPageEdit) {\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n ctx.toolbox.addButton({\n id: 'quick-move',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-forms\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3\" />\n <path d=\"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3\" />\n <path d=\"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7\" />\n <path d=\"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1\" />\n <path d=\"M17 12h.01\" />\n <path d=\"M13 12h.01\" />\n </svg>\n ),\n tooltip: 'Quick Move',\n group: 'group1',\n index: 1,\n onClick: () => {\n this.quickMove(\n canEdit\n ? {\n lockFromField: true,\n from: curPageName,\n }\n : {}\n )\n },\n })\n }\n\n quickMove(options?: Partial<QuickMoveOptions>) {\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Move',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-move compact-buttons',\n sizeClass: 'smallToMedium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n movetalk: formData.get('movetalk') === 'on',\n movesubpages: formData.get('movesubpages') === 'on',\n noredirect: formData.get('noredirect') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: 'From and to are required.',\n })\n return\n }\n modal.setLoadingState(true)\n this.movePage(options)\n .then(() => {\n location.reload()\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to move',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'Move from',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'Move to',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <div>\n <CheckBox name=\"movetalk\" id=\"movetalk\" checked={options?.movetalk}>\n Move talk page\n </CheckBox>\n </div>\n <div>\n <CheckBox name=\"movesubpages\" id=\"movesubpages\" checked={options?.movesubpages}>\n Move subpage(s) (up to 100)\n </CheckBox>\n </div>\n {this.ctx.sitemeta.hasRight('suppressredirect') && (\n <div>\n <CheckBox name=\"noredirect\" id=\"noredirect\" checked={options?.noredirect}>\n Move without leaving a redirect\n </CheckBox>\n </div>\n )}\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\n </form>\n ) as HTMLElement\n )\n\n modal.setButtons([\n {\n label: 'Move',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async movePage(options: MovePageOptions) {\n const { from, to, reason = '', ...rest } = options\n\n if (!from || !to) {\n throw new Error('From and to titles are required.')\n }\n if (from === to) {\n throw new Error('From and to titles cannot be the same.')\n }\n\n const wikiPage = await this.ctx.wikiPage.newFromTitle(from)\n return wikiPage.moveTo(to, reason, rest)\n }\n}\n"],"names":["_PluginQuickMove_decorators","_init","_a","Inject","PluginQuickMove","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","error","TwinSwapInput","CheckBox","InputBox","from","to","reason","rest","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as i, F as k, P as q } from "./index-CvhkVj_L.js";
2
- import { B as M, W as u, I as A, S as h } from "./index-BnRuHI16.js";
2
+ import { B as M, W as u, I as A, S as h } from "./index-DqfQ7hp6.js";
3
3
  import { m as T } from "./makeCallable-LDU0xZMJ.js";
4
4
  import { R as F } from "./Preferences-Bg3J5Ur9.js";
5
5
  import { M as _ } from "./index-lZkYoUca.js";
@@ -316,4 +316,4 @@ G(b, 1, w);
316
316
  export {
317
317
  w as PluginQuickEdit
318
318
  };
319
- //# sourceMappingURL=index-BHruEVsx.js.map
319
+ //# sourceMappingURL=index-CZnu6cRK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BHruEVsx.js","sources":["../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["export const sleep = (ms: number = 0) =>\n new Promise((resolve) => setTimeout(resolve, ms))\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickEdit: PluginQuickEdit & {\n (...args: Parameters<PluginQuickEdit['showModal']>): ReturnType<PluginQuickEdit['showModal']>\n }\n }\n interface Events {\n 'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditInitPayload & { editNotices: ReactNode[] }): void\n }\n}\n\nexport interface QuickEditOptions {\n title: string\n pageId: number\n revision: number\n /**\n * - `undefined` for full article edit\n * - `0` for the first section\n * - `\"new\"` for a new section\n */\n section: number | 'new' | undefined\n editMinor: boolean\n editSummary: string\n createOnly: boolean\n reloadAfterSave: boolean\n}\n\nexport interface QuickEditInitPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: WikiPage\n text?: string\n summary?: string\n section?: number | 'new' | undefined\n minor?: boolean\n createonly?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'sitemeta', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n editSummary: Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\n watchList: Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n })\n .description('Quick edit options')\n .extra('category', 'edit')\n)\nexport class PluginQuickEdit extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n section: undefined,\n editMinor: false,\n editSummary: '',\n createOnly: false,\n reloadAfterSave: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-edit')\n this.ctx.root.set('quickEdit', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n }\n\n async showModal(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('editSummary')) || ''\n }\n if (!options) this.ctx.emit('quick-edit/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickEdit',\n sizeClass: 'large',\n // backdrop: false,\n // draggable: true,\n center: false,\n outSideClose,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(\n (\n <section\n className=\"ipe-quickEdit-loading\"\n style={{\n height: '70vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-danger is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-edit/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page is not editable')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (wikiPage.pageInfo.pageid === 0) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"important\">\n <p>This page does not exist.</p>\n </MBox>\n )\n }\n // Edit based on old revision\n if (wikiPage.pageInfo.pageid && wikiPage.pageInfo.lastrevid !== wikiPage.revisions[0]?.revid) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"warning\">\n <p>\n You are editing a <em>historical version</em>; the content is not the latest!\n </p>\n </MBox>\n )\n }\n this.ctx.emit('quick-edit/edit-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n editNotices,\n })\n\n const editForm = (\n <form className=\"ipe-quickEdit__form\">\n <div className=\"ipe-quickEdit__notices\">{editNotices}</div>\n <div className=\"ipe-quickEdit__content\">\n <textarea className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {wikiPage.revisions[0]?.content || ''}\n </textarea>\n </div>\n <div\n class=\"ipe-quickEdit__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n Watchlist\n </label>\n <div style={{ display: 'flex', gap: '1rem' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n section: options.section,\n createonly: wikiPage.pageid === 0,\n watchlist: watchList,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Submission Successful',\n content: 'Your changes have been saved.',\n })\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Submission Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n },\n },\n 0\n )\n modal.setOptions({\n beforeClose: () => {\n const oldStr = wikiPage.revisions[0]?.content || ''\n const newStr = editForm.querySelector('textarea')?.value || ''\n if (newStr === oldStr) {\n return true\n } else {\n this.ctx.modal.confirm(\n {\n className: 'is-primary',\n title: 'Unsaved Changes',\n content:\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\n center: true,\n okBtn: {\n label: 'Give Up',\n className: 'is-danger is-ghost',\n },\n cancelBtn: {\n label: 'Continue Editing',\n className: 'is-primary is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n }\n return true\n }\n )\n return false\n }\n },\n })\n this.ctx.emit('quick-edit/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (editForm.querySelector('textarea')?.value === wikiPage.revisions[0]?.content) {\n return true\n }\n e.preventDefault()\n return 'You have unsaved changes. Are you sure you want to leave?'\n }\n window.addEventListener('beforeunload', beforeUnload)\n modal.on(modal.Event.Close, () => {\n window.removeEventListener('beforeunload', beforeUnload)\n })\n }\n\n async handleSubmit(payload: QuickEditSubmitPayload) {\n const wikiPage = payload.wikiPage\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor\n const createonly = payload.createonly\n const watchlist = payload.watchlist\n const section = payload.section\n\n return wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-edit',\n group: 'group1',\n index: 0,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Edit this page quickly',\n onClick: () =>\n this.showModal({\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }),\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["sleep","ms","resolve","_PluginQuickEdit_decorators","_init","_a","Inject","RegisterPreferences","Schema","WatchlistAction","PluginQuickEdit","BasePlugin","ctx","makeCallable","payload","outSideClose","watchList","editSummary","editMinor","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","editNotices","MBox","editForm","InputBox","action","RadioBox","CheckBox","formData","noop","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist","section","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
1
+ {"version":3,"file":"index-CZnu6cRK.js","sources":["../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["export const sleep = (ms: number = 0) =>\n new Promise((resolve) => setTimeout(resolve, ms))\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickEdit: PluginQuickEdit & {\n (...args: Parameters<PluginQuickEdit['showModal']>): ReturnType<PluginQuickEdit['showModal']>\n }\n }\n interface Events {\n 'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditInitPayload & { editNotices: ReactNode[] }): void\n }\n}\n\nexport interface QuickEditOptions {\n title: string\n pageId: number\n revision: number\n /**\n * - `undefined` for full article edit\n * - `0` for the first section\n * - `\"new\"` for a new section\n */\n section: number | 'new' | undefined\n editMinor: boolean\n editSummary: string\n createOnly: boolean\n reloadAfterSave: boolean\n}\n\nexport interface QuickEditInitPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: WikiPage\n text?: string\n summary?: string\n section?: number | 'new' | undefined\n minor?: boolean\n createonly?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'sitemeta', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n editSummary: Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\n watchList: Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n })\n .description('Quick edit options')\n .extra('category', 'edit')\n)\nexport class PluginQuickEdit extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n section: undefined,\n editMinor: false,\n editSummary: '',\n createOnly: false,\n reloadAfterSave: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-edit')\n this.ctx.root.set('quickEdit', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n }\n\n async showModal(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('editSummary')) || ''\n }\n if (!options) this.ctx.emit('quick-edit/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickEdit',\n sizeClass: 'large',\n // backdrop: false,\n // draggable: true,\n center: false,\n outSideClose,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(\n (\n <section\n className=\"ipe-quickEdit-loading\"\n style={{\n height: '70vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-danger is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-edit/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n if (wikiPage.pageInfo.special) {\n throw new Error('Special page is not editable')\n }\n } catch (e) {\n modal.off(modal.Event.Close)\n modal.close()\n this.ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (wikiPage.pageInfo.pageid === 0) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"important\">\n <p>This page does not exist.</p>\n </MBox>\n )\n }\n // Edit based on old revision\n if (wikiPage.pageInfo.pageid && wikiPage.pageInfo.lastrevid !== wikiPage.revisions[0]?.revid) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"warning\">\n <p>\n You are editing a <em>historical version</em>; the content is not the latest!\n </p>\n </MBox>\n )\n }\n this.ctx.emit('quick-edit/edit-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n editNotices,\n })\n\n const editForm = (\n <form className=\"ipe-quickEdit__form\">\n <div className=\"ipe-quickEdit__notices\">{editNotices}</div>\n <div className=\"ipe-quickEdit__content\">\n <textarea className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {wikiPage.revisions[0]?.content || ''}\n </textarea>\n </div>\n <div\n class=\"ipe-quickEdit__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n Watchlist\n </label>\n <div style={{ display: 'flex', gap: '1rem' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n section: options.section,\n createonly: wikiPage.pageid === 0,\n watchlist: watchList,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Submission Successful',\n content: 'Your changes have been saved.',\n })\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Submission Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n },\n },\n 0\n )\n modal.setOptions({\n beforeClose: () => {\n const oldStr = wikiPage.revisions[0]?.content || ''\n const newStr = editForm.querySelector('textarea')?.value || ''\n if (newStr === oldStr) {\n return true\n } else {\n this.ctx.modal.confirm(\n {\n className: 'is-primary',\n title: 'Unsaved Changes',\n content:\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\n center: true,\n okBtn: {\n label: 'Give Up',\n className: 'is-danger is-ghost',\n },\n cancelBtn: {\n label: 'Continue Editing',\n className: 'is-primary is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n }\n return true\n }\n )\n return false\n }\n },\n })\n this.ctx.emit('quick-edit/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (editForm.querySelector('textarea')?.value === wikiPage.revisions[0]?.content) {\n return true\n }\n e.preventDefault()\n return 'You have unsaved changes. Are you sure you want to leave?'\n }\n window.addEventListener('beforeunload', beforeUnload)\n modal.on(modal.Event.Close, () => {\n window.removeEventListener('beforeunload', beforeUnload)\n })\n }\n\n async handleSubmit(payload: QuickEditSubmitPayload) {\n const wikiPage = payload.wikiPage\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor\n const createonly = payload.createonly\n const watchlist = payload.watchlist\n const section = payload.section\n\n return wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\n }\n throw new Error('Invalid payload')\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-edit',\n group: 'group1',\n index: 0,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Edit this page quickly',\n onClick: () =>\n this.showModal({\n title: this.ctx.sitemeta.mwConfig.get('wgPageName'),\n pageId: this.ctx.sitemeta.mwConfig.get('wgArticleId'),\n revision: this.ctx.sitemeta.mwConfig.get('wgRevisionId'),\n }),\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["sleep","ms","resolve","_PluginQuickEdit_decorators","_init","_a","Inject","RegisterPreferences","Schema","WatchlistAction","PluginQuickEdit","BasePlugin","ctx","makeCallable","payload","outSideClose","watchList","editSummary","editMinor","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","editNotices","MBox","editForm","InputBox","action","RadioBox","CheckBox","formData","noop","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist","section","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as l } from "./index-CvhkVj_L.js";
2
- import { b as D, I as L, S as m } from "./index-BnRuHI16.js";
2
+ import { b as D, I as L, S as m } from "./index-DqfQ7hp6.js";
3
3
  import { R as T } from "./Preferences-Bg3J5Ur9.js";
4
4
  var C = Object.create, v = Object.defineProperty, E = Object.getOwnPropertyDescriptor, y = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), _ = (e) => {
5
5
  throw TypeError(e);
@@ -125,4 +125,4 @@ M(f, 1, x);
125
125
  export {
126
126
  x as PluginToolbox
127
127
  };
128
- //# sourceMappingURL=index-B7Ok-t-3.js.map
128
+ //# sourceMappingURL=index-CheNjwas.js.map