@inpageedit/core 0.8.1 → 0.9.2

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 (77) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +55 -55
  3. package/dist/ActionButton-BgbTKTg7.js.map +1 -1
  4. package/dist/CheckBox-D3rHnX7I.js.map +1 -1
  5. package/dist/IconQuickEdit-CAL1HXIb.js.map +1 -1
  6. package/dist/InPageEdit.d.ts +1 -1
  7. package/dist/InputBox-BV4m05Xs.js.map +1 -1
  8. package/dist/Preferences-DS4-CFWe.js +9 -0
  9. package/dist/Preferences-DS4-CFWe.js.map +1 -0
  10. package/dist/RadioBox-nJqWsxW2.js.map +1 -1
  11. package/dist/components/index.js.map +1 -1
  12. package/dist/decorators/Preferences.d.ts +2 -3
  13. package/dist/index-Bh70Udzi.js.map +1 -1
  14. package/dist/{index-Tn22YSmW.js → index-C-A3jSMx.js} +2 -2
  15. package/dist/index-C-A3jSMx.js.map +1 -0
  16. package/dist/index-CInRo1qR.js +357 -0
  17. package/dist/index-CInRo1qR.js.map +1 -0
  18. package/dist/{index-OBerV4GU.js → index-CWbHdYKu.js} +3 -3
  19. package/dist/index-CWbHdYKu.js.map +1 -0
  20. package/dist/{index-CeXR4lOu.js → index-CaI9BFuB.js} +32 -34
  21. package/dist/{index-CeXR4lOu.js.map → index-CaI9BFuB.js.map} +1 -1
  22. package/dist/index-CvhkVj_L.js.map +1 -1
  23. package/dist/{index-mntCdHRr.js → index-D6055L55.js} +1568 -1505
  24. package/dist/{index-mntCdHRr.js.map → index-D6055L55.js.map} +1 -1
  25. package/dist/{index-kRdAN8h3.js → index-DxGjTpIn.js} +3 -3
  26. package/dist/index-DxGjTpIn.js.map +1 -0
  27. package/dist/index-Ek5d60jn.js +5583 -0
  28. package/dist/index-Ek5d60jn.js.map +1 -0
  29. package/dist/{index-Ba7Wkale.js → index-RFAZzS9C.js} +3 -3
  30. package/dist/{index-Ba7Wkale.js.map → index-RFAZzS9C.js.map} +1 -1
  31. package/dist/{index-9M1QcjCN.js → index-UjgKGkN2.js} +124 -123
  32. package/dist/index-UjgKGkN2.js.map +1 -0
  33. package/dist/{index-DBV8FBjA.js → index-btJ_NMuF.js} +3 -3
  34. package/dist/index-btJ_NMuF.js.map +1 -0
  35. package/dist/index-lZkYoUca.js.map +1 -1
  36. package/dist/index.js +1 -1
  37. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  38. package/dist/models/WikiPage/index.d.ts +1 -2
  39. package/dist/noop-ClDc6zv4.js.map +1 -1
  40. package/dist/plugins/BasePlugin.d.ts +0 -2
  41. package/dist/plugins/{preferences/ui → preferences-ui}/index.d.ts +4 -3
  42. package/dist/plugins/quick-delete/index.d.ts +2 -2
  43. package/dist/plugins/quick-diff/components/DiffTable.d.ts +2 -2
  44. package/dist/plugins/quick-diff/index.d.ts +60 -1
  45. package/dist/plugins/quick-edit/index.d.ts +2 -2
  46. package/dist/plugins/quick-move/index.d.ts +2 -2
  47. package/dist/plugins/quick-redirect/index.d.ts +2 -2
  48. package/dist/services/ApiService.d.ts +1 -1
  49. package/dist/services/CurrentPageService.d.ts +3 -2
  50. package/dist/{plugins/preferences/index.d.ts → services/PreferencesService.d.ts} +9 -9
  51. package/dist/services/WikiMetadataService.d.ts +2 -2
  52. package/dist/services/WikiPageService.d.ts +2 -2
  53. package/dist/services/WikiTitleService.d.ts +7 -3
  54. package/dist/services/storage/IDBStorage.d.ts +52 -0
  55. package/dist/services/storage/index.d.ts +53 -0
  56. package/dist/style.css +1 -1
  57. package/dist/utils/vueHooks.d.ts +2 -1
  58. package/lib/index.umd.js +36 -45
  59. package/lib/index.umd.js.map +1 -1
  60. package/lib/style.css +1 -1
  61. package/package.json +8 -14
  62. package/dist/Preferences-Bg3J5Ur9.js +0 -9
  63. package/dist/Preferences-Bg3J5Ur9.js.map +0 -1
  64. package/dist/index-9M1QcjCN.js.map +0 -1
  65. package/dist/index-C8dOYIIz.js +0 -1249
  66. package/dist/index-C8dOYIIz.js.map +0 -1
  67. package/dist/index-COlXHFRg.js +0 -6326
  68. package/dist/index-COlXHFRg.js.map +0 -1
  69. package/dist/index-DBV8FBjA.js.map +0 -1
  70. package/dist/index-DwyuBkCK.js +0 -171
  71. package/dist/index-DwyuBkCK.js.map +0 -1
  72. package/dist/index-OBerV4GU.js.map +0 -1
  73. package/dist/index-Tn22YSmW.js.map +0 -1
  74. package/dist/index-kRdAN8h3.js.map +0 -1
  75. package/dist/plugins/quick-diff/JsDiffService.d.ts +0 -23
  76. package/dist/plugins/quick-diff/PluginQuickDiffCore.d.ts +0 -72
  77. package/dist/services/StorageService.d.ts +0 -56
@@ -0,0 +1,357 @@
1
+ import { j as i, F as S, P as E } from "./index-CvhkVj_L.js";
2
+ import { B as C, I as z, S as y } from "./index-Ek5d60jn.js";
3
+ import { I as j } from "./IconQuickEdit-CAL1HXIb.js";
4
+ import { R as q } from "./Preferences-DS4-CFWe.js";
5
+ import { M as I } from "./index-lZkYoUca.js";
6
+ const T = (t) => {
7
+ let { user: e, target: r, ctx: o } = t;
8
+ const n = o.getUrl.bind(o);
9
+ return /* @__PURE__ */ i("span", { className: "mw-userlinks", children: [
10
+ /* @__PURE__ */ i("a", { href: n(`User:${e}`), className: "mw-userlink", target: r, children: e }),
11
+ " ",
12
+ /* @__PURE__ */ i("span", { className: "mw-usertoollinks", children: [
13
+ "(",
14
+ /* @__PURE__ */ i("a", { href: n(`User_talk:${e}`), className: "mw-usertoollinks-talk", target: r, children: "talk" }),
15
+ " | ",
16
+ /* @__PURE__ */ i(
17
+ "a",
18
+ {
19
+ href: n(`Special:Contributions/${e}`),
20
+ className: "mw-usertoollinks-contribs",
21
+ target: r,
22
+ children: "contribs"
23
+ }
24
+ ),
25
+ " | ",
26
+ /* @__PURE__ */ i(
27
+ "a",
28
+ {
29
+ href: n(`Special:Block/${e}`),
30
+ className: "mw-usertoollinks-block",
31
+ target: r,
32
+ children: "block"
33
+ }
34
+ ),
35
+ ")"
36
+ ] })
37
+ ] });
38
+ };
39
+ var f = /* @__PURE__ */ ((t) => (t.update = "ipe:diff-table/update", t.edit = "ipe:diff-table/edit", t))(f || {});
40
+ const O = new Intl.DateTimeFormat(void 0, {
41
+ dateStyle: "medium",
42
+ timeStyle: "medium"
43
+ }).format, k = (t) => {
44
+ let e = ["diff-title"];
45
+ if (t.type === "from" ? e.push("diff-otitle") : t.type === "to" && e.push("diff-ntitle"), !t.pageid || !t.userid)
46
+ return /* @__PURE__ */ i("td", { colSpan: 2, className: e, children: /* @__PURE__ */ i("div", { className: "mw-diff-title--title", children: t.type === "from" ? "Original content" : t.type === "to" ? "Your content" : "" }) });
47
+ const r = (o) => {
48
+ o.preventDefault(), o.target.dispatchEvent(
49
+ new CustomEvent("ipe:diff-table/edit", {
50
+ detail: { revid: t.revid },
51
+ bubbles: !0
52
+ })
53
+ );
54
+ };
55
+ return /* @__PURE__ */ i("td", { colSpan: 2, className: e, children: [
56
+ /* @__PURE__ */ i("div", { className: "mw-diff-title--title", children: [
57
+ t.pagetitle || t.timestamp,
58
+ t.revid ? ` (rev#${t.revid})` : ""
59
+ ] }),
60
+ /* @__PURE__ */ i("div", { className: "mw-diff-title--actions", children: /* @__PURE__ */ i(
61
+ "a",
62
+ {
63
+ href: t.ctx.getUrl("", { action: "edit", oldid: t.revid }),
64
+ onClick: r,
65
+ children: [
66
+ /* @__PURE__ */ i(j, { style: "width: 1em; height: 1em" }),
67
+ "Quick edit"
68
+ ]
69
+ }
70
+ ) }),
71
+ /* @__PURE__ */ i("div", { className: "mw-diff-title--user", children: t.username && /* @__PURE__ */ i(T, { ctx: t.ctx, user: t.username, target: "_blank" }) }),
72
+ /* @__PURE__ */ i("div", { className: "mw-diff-title--timestamp", children: t.timestamp && O(new Date(t.timestamp)) }),
73
+ /* @__PURE__ */ i("div", { className: "mw-diff-title--comment", children: t.parsedcomment && /* @__PURE__ */ i(S, { children: [
74
+ "(",
75
+ /* @__PURE__ */ i("i", { innerHTML: t.parsedcomment }),
76
+ ")"
77
+ ] }) })
78
+ ] });
79
+ }, $ = (t) => {
80
+ const e = t.data;
81
+ if (!e.prev && !e.next)
82
+ return null;
83
+ const r = (o, n, a) => {
84
+ o.preventDefault(), o.target.dispatchEvent(
85
+ new CustomEvent("ipe:diff-table/update", {
86
+ detail: { fromrev: n, torev: a },
87
+ bubbles: !0
88
+ })
89
+ );
90
+ };
91
+ return /* @__PURE__ */ i("tr", { className: "mw-diff-title--navigation", children: [
92
+ /* @__PURE__ */ i("td", { colSpan: 2, children: e.prev ? /* @__PURE__ */ i(
93
+ "a",
94
+ {
95
+ href: t.ctx.getUrl("", { diff: e.prev, oldid: e.fromrevid }),
96
+ onClick: (o) => r(o, e.prev, e.fromrevid),
97
+ children: "← Previous"
98
+ }
99
+ ) : /* @__PURE__ */ i("i", { children: "Oldest version" }) }),
100
+ /* @__PURE__ */ i("td", { colSpan: 2, children: e.next ? /* @__PURE__ */ i(
101
+ "a",
102
+ {
103
+ href: t.ctx.getUrl("", { diff: e.next, oldid: e.torevid }),
104
+ onClick: (o) => r(o, e.torevid, e.next),
105
+ children: "Next →"
106
+ }
107
+ ) : /* @__PURE__ */ i("i", { children: "Newest version" }) })
108
+ ] });
109
+ }, L = (t) => {
110
+ const { data: e, ...r } = t, o = /* @__PURE__ */ i("table", { className: "theme-ipe diff diff-type-table", "data-mw": "interface", ...r, children: [
111
+ /* @__PURE__ */ i("colgroup", { children: [
112
+ /* @__PURE__ */ i("col", { className: "diff-marker" }),
113
+ /* @__PURE__ */ i("col", { className: "diff-content" }),
114
+ /* @__PURE__ */ i("col", { className: "diff-marker" }),
115
+ /* @__PURE__ */ i("col", { className: "diff-content" })
116
+ ] }),
117
+ /* @__PURE__ */ i("tbody", { children: [
118
+ /* @__PURE__ */ i("tr", { children: [
119
+ /* @__PURE__ */ i(
120
+ k,
121
+ {
122
+ ctx: t.ctx,
123
+ type: "from",
124
+ pageid: e.fromid,
125
+ pagetitle: e.fromtitle,
126
+ revid: e.fromrevid,
127
+ size: e.fromsize,
128
+ timestamp: e.fromtimestamp,
129
+ username: e.fromuser,
130
+ userid: e.fromuserid,
131
+ comment: e.fromcomment,
132
+ parsedcomment: e.fromparsedcomment
133
+ }
134
+ ),
135
+ /* @__PURE__ */ i(
136
+ k,
137
+ {
138
+ ctx: t.ctx,
139
+ type: "to",
140
+ pageid: e.toid,
141
+ pagetitle: e.totitle,
142
+ revid: e.torevid,
143
+ size: e.tosize,
144
+ timestamp: e.totimestamp,
145
+ username: e.touser,
146
+ userid: e.touserid,
147
+ comment: e.tocomment,
148
+ parsedcomment: e.toparsedcomment
149
+ }
150
+ )
151
+ ] }),
152
+ /* @__PURE__ */ i($, { data: e, ctx: t.ctx }),
153
+ /* @__PURE__ */ i("div", { id: "diffbody" }),
154
+ /* @__PURE__ */ i("tr", { className: "diff-size", style: { textAlign: "center" }, children: [
155
+ /* @__PURE__ */ i("td", { colSpan: 2, className: "diff-size-old", children: e.fromsize !== void 0 && `${e.fromsize} bytes` }),
156
+ /* @__PURE__ */ i("td", { colSpan: 2, className: "diff-size-new", children: e.tosize !== void 0 && `${e.tosize} bytes` })
157
+ ] })
158
+ ] })
159
+ ] });
160
+ return o.querySelector("#diffbody").outerHTML = e.body || (/* @__PURE__ */ i("tr", { children: /* @__PURE__ */ i("td", { colSpan: 4, children: /* @__PURE__ */ i(
161
+ "div",
162
+ {
163
+ style: {
164
+ display: "flex",
165
+ justifyContent: "center",
166
+ alignItems: "center",
167
+ height: "5rem"
168
+ },
169
+ children: /* @__PURE__ */ i("i", { children: "No changes" })
170
+ }
171
+ ) }) })).outerHTML, o;
172
+ }, Q = (t, e = document) => e.querySelector(t), U = (t, e = document) => e.querySelectorAll(t);
173
+ var F = Object.create, v = Object.defineProperty, M = Object.getOwnPropertyDescriptor, w = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), x = (t) => {
174
+ throw TypeError(t);
175
+ }, B = (t, e, r) => e in t ? v(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, A = (t, e) => v(t, "name", { value: e, configurable: !0 }), H = (t) => [, , , F(t?.[w("metadata")] ?? null)], R = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], _ = (t) => t !== void 0 && typeof t != "function" ? x("Function expected") : t, K = (t, e, r, o, n) => ({ kind: R[t], name: e, metadata: o, addInitializer: (a) => r._ ? x("Already initialized") : n.push(_(a || null)) }), Y = (t, e) => B(e, w("metadata"), t[3]), G = (t, e, r, o) => {
176
+ for (var n = 0, a = t[e >> 1], s = a && a.length; n < s; n++) a[n].call(r);
177
+ return o;
178
+ }, J = (t, e, r, o, n, a) => {
179
+ var s, c, l, d = e & 7, g = !1, b = 0, P = t[b] || (t[b] = []), m = d && (n = n.prototype, d < 5 && (d > 3 || !g) && M(n, r));
180
+ A(n, r);
181
+ for (var u = o.length - 1; u >= 0; u--)
182
+ l = K(d, r, c = {}, t[3], P), s = (0, o[u])(n, l), c._ = 1, _(s) && (n = s);
183
+ return Y(t, n), m && v(n, r, m), g ? d ^ 4 ? a : m : n;
184
+ }, N, p, D;
185
+ N = [z(["wiki", "getUrl", "preferences"]), q(
186
+ y.object({
187
+ "quickDiff.keyshortcut": y.string().default("ctrl-d").description("Key shortcut to open quick diff in quick edit modal")
188
+ }).description("Quick diff options").extra("category", "edit")
189
+ )];
190
+ class h extends (D = C) {
191
+ constructor(e) {
192
+ super(e, {}, "quick-diff"), this.ctx = e, this.COMPARE_API_DEFAULT_OPTIONS = {
193
+ prop: [
194
+ "comment",
195
+ "diff",
196
+ "diffsize",
197
+ "ids",
198
+ "parsedcomment",
199
+ "size",
200
+ "timestamp",
201
+ "title",
202
+ "user",
203
+ "rel"
204
+ ].join("|"),
205
+ difftype: "table"
206
+ };
207
+ }
208
+ start() {
209
+ this.ctx.set("quickDiff", this), this.ctx.on("quick-edit/wiki-page", this.injectQuickEdit.bind(this)), window.RLQ.push(this.injectHistoryPage.bind(this));
210
+ }
211
+ stop() {
212
+ }
213
+ injectHistoryPage() {
214
+ const e = Q("#mw-history-compare");
215
+ if (!e)
216
+ return;
217
+ U(".mw-history-compareselectedversions-button", e).forEach((o) => {
218
+ o.after(
219
+ /* @__PURE__ */ i(
220
+ "button",
221
+ {
222
+ className: "cdx-button",
223
+ onClick: (n) => {
224
+ n.preventDefault();
225
+ const a = new FormData(e), s = Number(a.get("oldid")) || 0, c = Number(a.get("diff")) || 0;
226
+ if (!a.get("title") || !s || !c)
227
+ return this.logger.warn("Missing title or revision IDs");
228
+ this.comparePages({
229
+ fromrev: s,
230
+ torev: c
231
+ });
232
+ },
233
+ children: "Quick Diff"
234
+ }
235
+ )
236
+ );
237
+ });
238
+ }
239
+ async injectQuickEdit({ modal: e, wikiPage: r, options: o }) {
240
+ if (r.pageid === 0 || o.section === "new")
241
+ return;
242
+ let n;
243
+ e.addButton(
244
+ {
245
+ label: "Diff",
246
+ side: "left",
247
+ keyPress: await this.ctx.preferences.get("quickDiff.keyshortcut") || void 0,
248
+ className: "btn btn-secondary",
249
+ method: () => {
250
+ const a = r.title, s = r.revisions?.[0]?.content || "", c = e.get$content().querySelector('textarea[name="text"]')?.value || "";
251
+ return s === c ? this.ctx.modal.notify("info", { title: "Quick Diff", content: "No changes" }) : (n = this.comparePages(
252
+ {
253
+ fromtitle: a,
254
+ fromtext: s,
255
+ totitle: a,
256
+ totext: c,
257
+ topst: !0
258
+ },
259
+ n,
260
+ {
261
+ backdrop: !1,
262
+ draggable: !0
263
+ }
264
+ ), n);
265
+ }
266
+ },
267
+ 2
268
+ ), e.on(e.Event.Close, () => {
269
+ n?.destroy(), n = void 0;
270
+ });
271
+ }
272
+ comparePages(e, r, o) {
273
+ return !r || r.isDestroyed ? r = this.ctx.modal.createObject({
274
+ title: "Loading diff...",
275
+ content: "",
276
+ className: "quick-diff",
277
+ center: !1,
278
+ ...o
279
+ }).init() : r.removeButton("*"), r.setContent(
280
+ /* @__PURE__ */ i(
281
+ "section",
282
+ {
283
+ style: { height: "70vh", display: "flex", justifyContent: "center", alignItems: "center" },
284
+ children: /* @__PURE__ */ i(E, {})
285
+ }
286
+ )
287
+ ), r.bringToFront(), window.mw && mw.loader.getState("mediawiki.diff.styles") !== "ready" && mw.loader.load(["mediawiki.diff.styles"]), this.ctx.api.post({
288
+ ...this.COMPARE_API_DEFAULT_OPTIONS,
289
+ ...e,
290
+ action: "compare",
291
+ format: "json",
292
+ formatversion: 2
293
+ }).then((n) => {
294
+ if (!n.data.compare)
295
+ throw new Error("No compare data received", { cause: n });
296
+ const {
297
+ data: { compare: a }
298
+ } = n;
299
+ r.setTitle(
300
+ a.fromtitle && a.totitle ? `${a.fromtitle}${a.fromrevid ? ` (${a.fromrevid})` : ""} ⇔ ${a.totitle}${a.torevid ? ` (${a.torevid})` : ""}` : "Differences"
301
+ );
302
+ let s;
303
+ r.setContent(
304
+ /* @__PURE__ */ i(
305
+ "section",
306
+ {
307
+ style: {
308
+ minHeight: "70vh"
309
+ },
310
+ children: /* @__PURE__ */ i(L, { ref: (c) => s = c, data: a, ctx: this.ctx })
311
+ }
312
+ )
313
+ ), s.addEventListener(
314
+ f.update,
315
+ (c) => {
316
+ c.stopPropagation(), this.comparePages(
317
+ {
318
+ fromrev: c.detail.fromrev,
319
+ torev: c.detail.torev
320
+ },
321
+ r,
322
+ o
323
+ );
324
+ },
325
+ { once: !0 }
326
+ ), this.ctx.inject(["quickEdit"], (c) => {
327
+ const l = (d) => {
328
+ d.stopPropagation(), c.quickEdit({ revision: d.detail.revid });
329
+ };
330
+ s.addEventListener(f.edit, l), r.on(r.Event.Close, () => {
331
+ s.removeEventListener(f.edit, l);
332
+ });
333
+ }), a.fromrevid && a.torevid && r.addButton({
334
+ label: "Original Compare Page",
335
+ side: "right",
336
+ className: "btn btn-secondary",
337
+ method: () => {
338
+ window.location.href = this.ctx.getUrl("", {
339
+ oldid: a.fromrevid,
340
+ diff: a.torevid
341
+ });
342
+ }
343
+ });
344
+ }).catch((n) => {
345
+ r.setContent(
346
+ /* @__PURE__ */ i(I, { title: "Failed to load diff", type: "error", children: /* @__PURE__ */ i("pre", { children: n instanceof Error ? n.message : String(n) }) })
347
+ );
348
+ }), r.show();
349
+ }
350
+ }
351
+ p = H(D);
352
+ h = J(p, 0, "PluginQuickDiff", N, h);
353
+ G(p, 1, h);
354
+ export {
355
+ h as PluginQuickDiff
356
+ };
357
+ //# sourceMappingURL=index-CInRo1qR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CInRo1qR.js","sources":["../src/components/MwUserLinks.tsx","../src/plugins/quick-diff/components/DiffTable.tsx","../src/components/utils.tsx","../src/plugins/quick-diff/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\r\n\r\nexport const MwUserLinks = (props: { user: string; target?: string; ctx: InPageEdit }) => {\r\n let { user, target, ctx } = props\r\n const getUrl = ctx.getUrl.bind(ctx)\r\n return (\r\n <span className=\"mw-userlinks\">\r\n <a href={getUrl(`User:${user}`)} className=\"mw-userlink\" target={target}>\r\n {user}\r\n </a>{' '}\r\n <span className=\"mw-usertoollinks\">\r\n (\r\n <a href={getUrl(`User_talk:${user}`)} className=\"mw-usertoollinks-talk\" target={target}>\r\n talk\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Contributions/${user}`)}\r\n className=\"mw-usertoollinks-contribs\"\r\n target={target}\r\n >\r\n contribs\r\n </a>\r\n {' | '}\r\n <a\r\n href={getUrl(`Special:Block/${user}`)}\r\n className=\"mw-usertoollinks-block\"\r\n target={target}\r\n >\r\n block\r\n </a>\r\n )\r\n </span>\r\n </span>\r\n )\r\n}\r\n","import './style.scss'\r\nimport { JSX } from 'jsx-dom/jsx-runtime'\r\nimport { CompareApiResponse } from '../index.js'\r\nimport { InPageEdit } from '@/InPageEdit.js'\r\n\r\nexport type DiffTableProps = {\r\n data: Partial<CompareApiResponse['compare']>\r\n ctx: InPageEdit\r\n} & JSX.IntrinsicElements['table']\r\n\r\nexport enum DiffTableEvent {\r\n update = 'ipe:diff-table/update',\r\n edit = 'ipe:diff-table/edit',\r\n}\r\n\r\n// DOM 事件类型定义\r\ndeclare global {\r\n interface HTMLElementEventMap {\r\n [DiffTableEvent.update]: CustomEvent<{\r\n fromrev: number\r\n torev: number\r\n }>\r\n [DiffTableEvent.edit]: CustomEvent<{\r\n revid: number\r\n }>\r\n }\r\n}\r\n\r\nconst formatDate = new Intl.DateTimeFormat(undefined, {\r\n dateStyle: 'medium',\r\n timeStyle: 'medium',\r\n}).format\r\n\r\nconst DiffTableHeader = (props: {\r\n ctx: InPageEdit\r\n type?: 'from' | 'to'\r\n pageid?: number\r\n pagetitle?: string\r\n revid?: number\r\n size?: number\r\n timestamp?: string\r\n username?: string\r\n userid?: number\r\n comment?: string\r\n parsedcomment?: string\r\n}) => {\r\n let classList = ['diff-title']\r\n if (props.type === 'from') {\r\n classList.push('diff-otitle')\r\n } else if (props.type === 'to') {\r\n classList.push('diff-ntitle')\r\n }\r\n if (!props.pageid || !props.userid) {\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.type === 'from' ? 'Original content' : props.type === 'to' ? 'Your content' : ''}\r\n </div>\r\n </td>\r\n )\r\n }\r\n const handleEditClick = (e: Event) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.edit, {\r\n detail: { revid: props.revid! },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n return (\r\n <td colSpan={2} className={classList}>\r\n <div className=\"mw-diff-title--title\">\r\n {props.pagetitle || props.timestamp}\r\n {props.revid ? ` (rev#${props.revid})` : ''}\r\n </div>\r\n <div className=\"mw-diff-title--actions\">\r\n <a\r\n href={props.ctx.getUrl('', { action: 'edit', oldid: props.revid! })}\r\n onClick={handleEditClick}\r\n >\r\n <IconQuickEdit style=\"width: 1em; height: 1em\" />\r\n Quick edit\r\n </a>\r\n </div>\r\n <div className=\"mw-diff-title--user\">\r\n {props.username && <MwUserLinks ctx={props.ctx} user={props.username} target=\"_blank\" />}\r\n </div>\r\n <div className=\"mw-diff-title--timestamp\">\r\n {props.timestamp && formatDate(new Date(props.timestamp))}\r\n </div>\r\n <div className=\"mw-diff-title--comment\">\r\n {props.parsedcomment && (\r\n <>\r\n (<i innerHTML={props.parsedcomment}></i>)\r\n </>\r\n )}\r\n </div>\r\n </td>\r\n )\r\n}\r\n\r\nconst DiffTableNavigation = (props: { data: DiffTableProps['data']; ctx: InPageEdit }) => {\r\n const data = props.data\r\n if (!data.prev && !data.next) {\r\n return null\r\n }\r\n\r\n // 统一的事件处理器\r\n const handleNavigationClick = (e: Event, fromrev: number, torev: number) => {\r\n e.preventDefault()\r\n e.target!.dispatchEvent(\r\n new CustomEvent(DiffTableEvent.update, {\r\n detail: { fromrev, torev },\r\n bubbles: true,\r\n })\r\n )\r\n }\r\n\r\n return (\r\n <tr className=\"mw-diff-title--navigation\">\r\n <td colSpan={2}>\r\n {data.prev ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.prev!, oldid: data.fromrevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.prev!, data.fromrevid!)}\r\n >\r\n ← Previous\r\n </a>\r\n ) : (\r\n <i>Oldest version</i>\r\n )}\r\n </td>\r\n <td colSpan={2}>\r\n {data.next ? (\r\n <a\r\n href={props.ctx.getUrl('', { diff: data.next!, oldid: data.torevid! })}\r\n onClick={(e) => handleNavigationClick(e, data.torevid!, data.next!)}\r\n >\r\n Next →\r\n </a>\r\n ) : (\r\n <i>Newest version</i>\r\n )}\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nexport const DiffTable = (props: DiffTableProps) => {\r\n const { data, ...rest } = props\r\n const table = (\r\n <table className={`theme-ipe diff diff-type-table`} data-mw=\"interface\" {...rest}>\r\n <colgroup>\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n <col className=\"diff-marker\" />\r\n <col className=\"diff-content\" />\r\n </colgroup>\r\n <tbody>\r\n <tr>\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"from\"\r\n pageid={data.fromid}\r\n pagetitle={data.fromtitle}\r\n revid={data.fromrevid}\r\n size={data.fromsize}\r\n timestamp={data.fromtimestamp}\r\n username={data.fromuser}\r\n userid={data.fromuserid}\r\n comment={data.fromcomment}\r\n parsedcomment={data.fromparsedcomment}\r\n />\r\n <DiffTableHeader\r\n ctx={props.ctx}\r\n type=\"to\"\r\n pageid={data.toid}\r\n pagetitle={data.totitle}\r\n revid={data.torevid}\r\n size={data.tosize}\r\n timestamp={data.totimestamp}\r\n username={data.touser}\r\n userid={data.touserid}\r\n comment={data.tocomment}\r\n parsedcomment={data.toparsedcomment}\r\n />\r\n </tr>\r\n <DiffTableNavigation data={data} ctx={props.ctx} />\r\n <div id=\"diffbody\"></div>\r\n <tr className=\"diff-size\" style={{ textAlign: 'center' }}>\r\n <td colSpan={2} className=\"diff-size-old\">\r\n {data.fromsize !== undefined && `${data.fromsize} bytes`}\r\n </td>\r\n <td colSpan={2} className=\"diff-size-new\">\r\n {data.tosize !== undefined && `${data.tosize} bytes`}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n )\r\n table.querySelector('#diffbody')!.outerHTML =\r\n data.body ||\r\n (\r\n <tr>\r\n <td colSpan={4}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '5rem',\r\n }}\r\n >\r\n <i>No changes</i>\r\n </div>\r\n </td>\r\n </tr>\r\n ).outerHTML\r\n return table\r\n}\r\n","import { CSSProperties, ReactElement } from 'jsx-dom'\r\n\r\nexport const qs = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelector(selector) as T | null\r\n}\r\nexport const qsa = <T extends Element>(\r\n selector: string,\r\n parent: HTMLElement | Document = document\r\n) => {\r\n return parent.querySelectorAll(selector) as NodeListOf<T>\r\n}\r\n\r\nexport const setStyles = (el: HTMLElement | ReactElement, style: CSSProperties) => {\r\n Object.entries(style).forEach(([key, value]) => {\r\n if (typeof value === 'undefined' || value === null) {\r\n el.style.removeProperty(key)\r\n } else {\r\n const isImportant = typeof value === 'string' && value.endsWith('!important')\r\n // @ts-ignore\r\n el.style.setProperty(\r\n key,\r\n value.replace('!important', '').trim(),\r\n isImportant ? 'important' : undefined\r\n )\r\n }\r\n })\r\n return el\r\n}\r\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\r\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\r\nimport { DiffTable, DiffTableEvent } from './components/DiffTable'\r\nimport { MwApiResponse } from 'wiki-saikou'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickDiff: PluginQuickDiff\r\n }\r\n}\r\n\r\nexport interface CompareApiRequestOptions {\r\n fromtitle: string\r\n fromid: number\r\n fromrev: number\r\n frompst: boolean\r\n totitle: string\r\n toid: number\r\n torev: number\r\n torelative?: 'cur' | 'prev' | 'next'\r\n topst: boolean\r\n prop: string\r\n difftype: 'table' | 'unified'\r\n // deprecated, but still works\r\n fromtext: string\r\n fromsection: string | number\r\n fromcontentmodel: string\r\n totext: string\r\n tosection: string | number\r\n tocontentmodel: string\r\n}\r\n\r\nexport interface CompareApiResponse {\r\n compare: Partial<{\r\n fromid: number\r\n fromrevid: number\r\n fromns: number\r\n fromtitle: string\r\n fromsize: number\r\n fromtimestamp: string\r\n fromuser: string\r\n fromuserid: number\r\n fromcomment: string\r\n fromparsedcomment?: string\r\n toid: number\r\n torevid: number\r\n tons: number\r\n totitle: string\r\n tosize: number\r\n totimestamp: string\r\n touser: string\r\n touserid: number\r\n tocomment: string\r\n toparsedcomment: string\r\n diffsize: number\r\n prev: number\r\n next: number\r\n }> & {\r\n body: string\r\n }\r\n}\r\n\r\n@Inject(['wiki', 'getUrl', 'preferences'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n 'quickDiff.keyshortcut': Schema.string()\r\n .default('ctrl-d')\r\n .description('Key shortcut to open quick diff in quick edit modal'),\r\n })\r\n .description('Quick diff options')\r\n .extra('category', 'edit')\r\n)\r\nexport class PluginQuickDiff extends BasePlugin {\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-diff')\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.set('quickDiff', this)\r\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\r\n window.RLQ.push(this.injectHistoryPage.bind(this))\r\n }\r\n\r\n protected stop(): Promise<void> | void {}\r\n\r\n private injectHistoryPage() {\r\n const mwCompareForm = qs<HTMLFormElement>('#mw-history-compare')\r\n if (!mwCompareForm) {\r\n return\r\n }\r\n const compareButtons = qsa('.mw-history-compareselectedversions-button', mwCompareForm)\r\n compareButtons.forEach((el) => {\r\n el.after(\r\n <button\r\n className=\"cdx-button\"\r\n onClick={(e) => {\r\n e.preventDefault()\r\n const formData = new FormData(mwCompareForm)\r\n const fromrev = Number(formData.get('oldid')) || 0\r\n const torev = Number(formData.get('diff')) || 0\r\n const title = formData.get('title') as string\r\n if (!title || !fromrev || !torev) {\r\n return this.logger.warn('Missing title or revision IDs')\r\n }\r\n this.comparePages({\r\n fromrev,\r\n torev,\r\n })\r\n }}\r\n >\r\n Quick Diff\r\n </button>\r\n )\r\n })\r\n }\r\n\r\n private async injectQuickEdit({ modal, wikiPage, options }: QuickEditEventPayload) {\r\n if (wikiPage.pageid === 0 || options.section === 'new') {\r\n // User is creating a new page, no need to show diff button\r\n return\r\n }\r\n let latestDiffModal: IPEModal | undefined = undefined\r\n modal.addButton(\r\n {\r\n label: 'Diff',\r\n side: 'left',\r\n keyPress: (await this.ctx.preferences.get<string>('quickDiff.keyshortcut')) || undefined,\r\n className: 'btn btn-secondary',\r\n method: () => {\r\n const pageTitle = wikiPage.title\r\n const fromtext = wikiPage.revisions?.[0]?.content || ''\r\n const totext =\r\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\r\n ?.value as string) || ''\r\n\r\n if (fromtext === totext) {\r\n return this.ctx.modal.notify('info', { title: 'Quick Diff', content: 'No changes' })\r\n }\r\n\r\n latestDiffModal = this.comparePages(\r\n {\r\n fromtitle: pageTitle,\r\n fromtext,\r\n totitle: pageTitle,\r\n totext,\r\n topst: true,\r\n },\r\n latestDiffModal,\r\n {\r\n backdrop: false,\r\n draggable: true,\r\n }\r\n )\r\n return latestDiffModal\r\n },\r\n },\r\n 2\r\n )\r\n modal.on(modal.Event.Close, () => {\r\n latestDiffModal?.destroy()\r\n latestDiffModal = undefined\r\n })\r\n }\r\n\r\n readonly COMPARE_API_DEFAULT_OPTIONS: Partial<CompareApiRequestOptions> = {\r\n prop: [\r\n 'comment',\r\n 'diff',\r\n 'diffsize',\r\n 'ids',\r\n 'parsedcomment',\r\n 'size',\r\n 'timestamp',\r\n 'title',\r\n 'user',\r\n 'rel',\r\n ].join('|'),\r\n difftype: 'table',\r\n }\r\n\r\n comparePages(\r\n options: Partial<CompareApiRequestOptions>,\r\n modal?: IPEModal,\r\n modalOptions?: Partial<IPEModalOptions>\r\n ) {\r\n if (!modal || modal.isDestroyed) {\r\n modal = this.ctx.modal\r\n .createObject({\r\n title: 'Loading diff...',\r\n content: '',\r\n className: 'quick-diff',\r\n center: false,\r\n ...modalOptions,\r\n })\r\n .init()\r\n } else {\r\n modal.removeButton('*')\r\n }\r\n\r\n modal.setContent(\r\n <section\r\n style={{ height: '70vh', display: 'flex', justifyContent: 'center', alignItems: 'center' }}\r\n >\r\n <ProgressBar />\r\n </section>\r\n )\r\n modal.bringToFront()\r\n\r\n if (window.mw && mw.loader.getState('mediawiki.diff.styles') !== 'ready') {\r\n mw.loader.load(['mediawiki.diff.styles'])\r\n }\r\n\r\n this.ctx.api\r\n .post<MwApiResponse<CompareApiResponse>>({\r\n ...this.COMPARE_API_DEFAULT_OPTIONS,\r\n ...options,\r\n action: 'compare',\r\n format: 'json',\r\n formatversion: 2,\r\n })\r\n .then((res) => {\r\n if (!res.data.compare) {\r\n throw new Error('No compare data received', { cause: res })\r\n }\r\n const {\r\n data: { compare },\r\n } = res\r\n modal.setTitle(\r\n compare.fromtitle && compare.totitle\r\n ? `${compare.fromtitle}${compare.fromrevid ? ` (${compare.fromrevid})` : ''} ⇔ ${compare.totitle}${compare.torevid ? ` (${compare.torevid})` : ''}`\r\n : 'Differences'\r\n )\r\n let diffTable!: HTMLElement\r\n modal.setContent(\r\n (\r\n <section\r\n style={{\r\n minHeight: '70vh',\r\n }}\r\n >\r\n <DiffTable ref={(ref) => (diffTable = ref)} data={compare} ctx={this.ctx} />\r\n </section>\r\n ) as HTMLElement\r\n )\r\n diffTable.addEventListener(\r\n DiffTableEvent.update,\r\n (e) => {\r\n e.stopPropagation()\r\n this.comparePages(\r\n {\r\n fromrev: e.detail.fromrev,\r\n torev: e.detail.torev,\r\n },\r\n modal,\r\n modalOptions\r\n )\r\n },\r\n { once: true }\r\n )\r\n\r\n // TODO: 不应该硬编码,移动到 in-article-links 插件中\r\n this.ctx.inject(['quickEdit'], (ctx) => {\r\n const handleQuickEdit = (e: CustomEvent<{ revid: number }>) => {\r\n e.stopPropagation()\r\n ctx.quickEdit({ revision: e.detail.revid })\r\n }\r\n diffTable.addEventListener(DiffTableEvent.edit, handleQuickEdit)\r\n modal.on(modal.Event.Close, () => {\r\n diffTable.removeEventListener(DiffTableEvent.edit, handleQuickEdit)\r\n })\r\n })\r\n\r\n if (compare.fromrevid && compare.torevid) {\r\n modal.addButton({\r\n label: 'Original Compare Page',\r\n side: 'right',\r\n className: 'btn btn-secondary',\r\n method: () => {\r\n window.location.href = this.ctx.getUrl('', {\r\n oldid: compare.fromrevid,\r\n diff: compare.torevid,\r\n })\r\n },\r\n })\r\n }\r\n })\r\n .catch((err) => {\r\n modal.setContent(\r\n (\r\n <MBox title=\"Failed to load diff\" type=\"error\">\r\n <pre>{err instanceof Error ? err.message : String(err)}</pre>\r\n </MBox>\r\n ) as HTMLElement\r\n )\r\n })\r\n\r\n return modal.show()\r\n }\r\n}\r\n"],"names":["MwUserLinks","props","user","target","ctx","getUrl","jsxs","jsx","DiffTableEvent","formatDate","DiffTableHeader","classList","handleEditClick","e","IconQuickEdit","Fragment","DiffTableNavigation","data","handleNavigationClick","fromrev","torev","DiffTable","rest","table","qs","selector","parent","qsa","_PluginQuickDiff_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDiff","BasePlugin","mwCompareForm","el","formData","modal","wikiPage","options","latestDiffModal","pageTitle","fromtext","totext","modalOptions","ProgressBar","res","compare","diffTable","ref","handleQuickEdit","err","MBox","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;AAEO,MAAMA,IAAc,CAACC,MAA8D;AACxF,MAAI,EAAE,MAAAC,GAAM,QAAAC,GAAQ,KAAAC,EAAA,IAAQH;AAC5B,QAAMI,IAASD,EAAI,OAAO,KAAKA,CAAG;AAClC,SACEE,gBAAAA,EAAC,QAAA,EAAK,WAAU,gBACd,UAAA;AAAA,IAAA,gBAAAC,EAAC,KAAA,EAAE,MAAMF,EAAO,QAAQH,CAAI,EAAE,GAAG,WAAU,eAAc,QAAAC,GACtD,UAAAD,EAAA,CACH;AAAA,IAAK;AAAA,IACLI,gBAAAA,EAAC,QAAA,EAAK,WAAU,oBAAmB,UAAA;AAAA,MAAA;AAAA,MAEjC,gBAAAC,EAAC,KAAA,EAAE,MAAMF,EAAO,aAAaH,CAAI,EAAE,GAAG,WAAU,yBAAwB,QAAAC,GAAgB,UAAA,OAAA,CAExF;AAAA,MACC;AAAA,MACD,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMF,EAAO,yBAAyBH,CAAI,EAAE;AAAA,UAC5C,WAAU;AAAA,UACV,QAAAC;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGA;AAAA,MACD,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMF,EAAO,iBAAiBH,CAAI,EAAE;AAAA,UACpC,WAAU;AAAA,UACV,QAAAC;AAAA,UACD,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEG;AAAA,IAAA,EAAA,CAEN;AAAA,EAAA,GACF;AAEJ;ACzBO,IAAKK,sBAAAA,OACVA,EAAA,SAAS,yBACTA,EAAA,OAAO,uBAFGA,IAAAA,KAAA,CAAA,CAAA;AAkBZ,MAAMC,IAAa,IAAI,KAAK,eAAe,QAAW;AAAA,EACpD,WAAW;AAAA,EACX,WAAW;AACb,CAAC,EAAE,QAEGC,IAAkB,CAACT,MAYnB;AACJ,MAAIU,IAAY,CAAC,YAAY;AAM7B,MALIV,EAAM,SAAS,SACjBU,EAAU,KAAK,aAAa,IACnBV,EAAM,SAAS,QACxBU,EAAU,KAAK,aAAa,GAE1B,CAACV,EAAM,UAAU,CAACA,EAAM;AAC1B,6BACG,MAAA,EAAG,SAAS,GAAG,WAAWU,GACzB,4BAAC,OAAA,EAAI,WAAU,wBACZ,UAAAV,EAAM,SAAS,SAAS,qBAAqBA,EAAM,SAAS,OAAO,iBAAiB,IACvF,EAAA,CACF;AAGJ,QAAMW,IAAkB,CAACC,MAAa;AACpC,IAAAA,EAAE,eAAA,GACFA,EAAE,OAAQ;AAAA,MACR,IAAI,YAAY,uBAAqB;AAAA,QACnC,QAAQ,EAAE,OAAOZ,EAAM,MAAA;AAAA,QACvB,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAAA,EAEL;AACA,SACEK,gBAAAA,EAAC,MAAA,EAAG,SAAS,GAAG,WAAWK,GACzB,UAAA;AAAA,IAAAL,gBAAAA,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAA;AAAA,MAAAL,EAAM,aAAaA,EAAM;AAAA,MACzBA,EAAM,QAAQ,SAASA,EAAM,KAAK,MAAM;AAAA,IAAA,GAC3C;AAAA,IACA,gBAAAM,EAAC,OAAA,EAAI,WAAU,0BACb,UAAAD,gBAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAML,EAAM,IAAI,OAAO,IAAI,EAAE,QAAQ,QAAQ,OAAOA,EAAM,MAAA,CAAQ;AAAA,QAClE,SAASW;AAAA,QAET,UAAA;AAAA,UAAA,gBAAAL,EAACO,GAAA,EAAc,OAAM,0BAAA,CAA0B;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAGrD;AAAA,sBACC,OAAA,EAAI,WAAU,uBACZ,UAAAb,EAAM,YAAY,gBAAAM,EAACP,GAAA,EAAY,KAAKC,EAAM,KAAK,MAAMA,EAAM,UAAU,QAAO,UAAS,GACxF;AAAA,IACA,gBAAAM,EAAC,OAAA,EAAI,WAAU,4BACZ,UAAAN,EAAM,aAAaQ,EAAW,IAAI,KAAKR,EAAM,SAAS,CAAC,EAAA,CAC1D;AAAA,sBACC,OAAA,EAAI,WAAU,0BACZ,UAAAA,EAAM,iBACLK,gBAAAA,EAAAS,GAAA,EAAE,UAAA;AAAA,MAAA;AAAA,MACC,gBAAAR,EAAC,KAAA,EAAE,WAAWN,EAAM,cAAA,CAAe;AAAA,MAAI;AAAA,IAAA,EAAA,CAC1C,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ,GAEMe,IAAsB,CAACf,MAA6D;AACxF,QAAMgB,IAAOhB,EAAM;AACnB,MAAI,CAACgB,EAAK,QAAQ,CAACA,EAAK;AACtB,WAAO;AAIT,QAAMC,IAAwB,CAACL,GAAUM,GAAiBC,MAAkB;AAC1E,IAAAP,EAAE,eAAA,GACFA,EAAE,OAAQ;AAAA,MACR,IAAI,YAAY,yBAAuB;AAAA,QACrC,QAAQ,EAAE,SAAAM,GAAS,OAAAC,EAAA;AAAA,QACnB,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAAA,EAEL;AAEA,SACEd,gBAAAA,EAAC,MAAA,EAAG,WAAU,6BACZ,UAAA;AAAA,IAAA,gBAAAC,EAAC,MAAA,EAAG,SAAS,GACV,UAAAU,EAAK,OACJ,gBAAAV;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAMN,EAAM,IAAI,OAAO,IAAI,EAAE,MAAMgB,EAAK,MAAO,OAAOA,EAAK,UAAA,CAAY;AAAA,QACvE,SAAS,CAACJ,MAAMK,EAAsBL,GAAGI,EAAK,MAAOA,EAAK,SAAU;AAAA,QACrE,UAAA;AAAA,MAAA;AAAA,IAAA,IAID,gBAAAV,EAAC,KAAA,EAAE,UAAA,iBAAA,CAAc,EAAA,CAErB;AAAA,IACA,gBAAAA,EAAC,MAAA,EAAG,SAAS,GACV,YAAK,OACJ,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAMN,EAAM,IAAI,OAAO,IAAI,EAAE,MAAMgB,EAAK,MAAO,OAAOA,EAAK,QAAA,CAAU;AAAA,QACrE,SAAS,CAACJ,MAAMK,EAAsBL,GAAGI,EAAK,SAAUA,EAAK,IAAK;AAAA,QACnE,UAAA;AAAA,MAAA;AAAA,IAAA,IAID,gBAAAV,EAAC,KAAA,EAAE,UAAA,iBAAA,CAAc,EAAA,CAErB;AAAA,EAAA,GACF;AAEJ,GAEac,IAAY,CAACpB,MAA0B;AAClD,QAAM,EAAE,MAAAgB,GAAM,GAAGK,EAAA,IAASrB,GACpBsB,sBACH,SAAA,EAAM,WAAW,kCAAkC,WAAQ,aAAa,GAAGD,GAC1E,UAAA;AAAA,IAAAhB,gBAAAA,EAAC,YAAA,EACC,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,cAAA,CAAc;AAAA,MAC7B,gBAAAA,EAAC,OAAA,EAAI,WAAU,eAAA,CAAe;AAAA,MAC9B,gBAAAA,EAAC,OAAA,EAAI,WAAU,cAAA,CAAc;AAAA,MAC7B,gBAAAA,EAAC,OAAA,EAAI,WAAU,eAAA,CAAe;AAAA,IAAA,GAChC;AAAA,sBACC,SAAA,EACC,UAAA;AAAA,MAAAD,gBAAAA,EAAC,MAAA,EACC,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAKT,EAAM;AAAA,YACX,MAAK;AAAA,YACL,QAAQgB,EAAK;AAAA,YACb,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,MAAMA,EAAK;AAAA,YACX,WAAWA,EAAK;AAAA,YAChB,UAAUA,EAAK;AAAA,YACf,QAAQA,EAAK;AAAA,YACb,SAASA,EAAK;AAAA,YACd,eAAeA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEtB,gBAAAV;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAKT,EAAM;AAAA,YACX,MAAK;AAAA,YACL,QAAQgB,EAAK;AAAA,YACb,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,MAAMA,EAAK;AAAA,YACX,WAAWA,EAAK;AAAA,YAChB,UAAUA,EAAK;AAAA,YACf,QAAQA,EAAK;AAAA,YACb,SAASA,EAAK;AAAA,YACd,eAAeA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACtB,GACF;AAAA,MACA,gBAAAV,EAACS,GAAA,EAAoB,MAAAC,GAAY,KAAKhB,EAAM,KAAK;AAAA,MACjD,gBAAAM,EAAC,OAAA,EAAI,IAAG,WAAA,CAAW;AAAA,MACnBD,gBAAAA,EAAC,QAAG,WAAU,aAAY,OAAO,EAAE,WAAW,YAC5C,UAAA;AAAA,QAAA,gBAAAC,EAAC,MAAA,EAAG,SAAS,GAAG,WAAU,iBACvB,UAAAU,EAAK,aAAa,UAAa,GAAGA,EAAK,QAAQ,UAClD;AAAA,QACA,gBAAAV,EAAC,MAAA,EAAG,SAAS,GAAG,WAAU,iBACvB,UAAAU,EAAK,WAAW,UAAa,GAAGA,EAAK,MAAM,SAAA,CAC9C;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEF,SAAAM,EAAM,cAAc,WAAW,EAAG,YAChCN,EAAK,SAEH,gBAAAV,EAAC,MAAA,EACC,UAAA,gBAAAA,EAAC,MAAA,EAAG,SAAS,GACX,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,QAAQ;AAAA,MAAA;AAAA,MAGV,UAAA,gBAAAA,EAAC,OAAE,UAAA,aAAA,CAAU;AAAA,IAAA;AAAA,EAAA,EACf,CACF,GACF,GACA,WACGgB;AACT,GC1NaC,IAAK,CAChBC,GACAC,IAAiC,aAE1BA,EAAO,cAAcD,CAAQ,GAEzBE,IAAM,CACjBF,GACAC,IAAiC,aAE1BA,EAAO,iBAAiBD,CAAQ;;;;;;;;;;;;GCZzCG,GAAAC,GAAAC;AA+DAF,IAAA,CAACG,EAAO,CAAC,QAAQ,UAAU,aAAa,CAAC,GACxCC;AAAA,EACCC,EAAO,OAAO;AAAA,IACZ,yBAAyBA,EAAO,OAAA,EAC7B,QAAQ,QAAQ,EAChB,YAAY,qDAAqD;AAAA,EAAA,CACrE,EACE,YAAY,oBAAoB,EAChC,MAAM,YAAY,MAAM;AAC7B,CAAA;AACO,MAAMC,WAAwBJ,IAAAK,GAAW;AAAA,EAC9C,YAAmB/B,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,YAAY,GADV,KAAA,MAAAA,GA2FnB,KAAS,8BAAiE;AAAA,MACxE,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,KAAK,GAAG;AAAA,MACV,UAAU;AAAA,IAAA;AAAA,EAtGZ;AAAA,EAEU,QAA8B;AACtC,SAAK,IAAI,IAAI,aAAa,IAAI,GAC9B,KAAK,IAAI,GAAG,wBAAwB,KAAK,gBAAgB,KAAK,IAAI,CAAC,GACnE,OAAO,IAAI,KAAK,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EAEU,OAA6B;AAAA,EAAC;AAAA,EAEhC,oBAAoB;AAC1B,UAAMgC,IAAgBZ,EAAoB,qBAAqB;AAC/D,QAAI,CAACY;AACH;AAGF,IADuBT,EAAI,8CAA8CS,CAAa,EACvE,QAAQ,CAACC,MAAO;AAC7B,MAAAA,EAAG;AAAA,QACD,gBAAA9B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,CAACM,MAAM;AACd,cAAAA,EAAE,eAAA;AACF,oBAAMyB,IAAW,IAAI,SAASF,CAAa,GACrCjB,IAAU,OAAOmB,EAAS,IAAI,OAAO,CAAC,KAAK,GAC3ClB,IAAQ,OAAOkB,EAAS,IAAI,MAAM,CAAC,KAAK;AAE9C,kBAAI,CADUA,EAAS,IAAI,OAAO,KACpB,CAACnB,KAAW,CAACC;AACzB,uBAAO,KAAK,OAAO,KAAK,+BAA+B;AAEzD,mBAAK,aAAa;AAAA,gBAChB,SAAAD;AAAA,gBACA,OAAAC;AAAA,cAAA,CACD;AAAA,YACH;AAAA,YACD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAEJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,gBAAgB,EAAE,OAAAmB,GAAO,UAAAC,GAAU,SAAAC,KAAkC;AACjF,QAAID,EAAS,WAAW,KAAKC,EAAQ,YAAY;AAE/C;AAEF,QAAIC;AACJ,IAAAH,EAAM;AAAA,MACJ;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAW,MAAM,KAAK,IAAI,YAAY,IAAY,uBAAuB,KAAM;AAAA,QAC/E,WAAW;AAAA,QACX,QAAQ,MAAM;AACZ,gBAAMI,IAAYH,EAAS,OACrBI,IAAWJ,EAAS,YAAY,CAAC,GAAG,WAAW,IAC/CK,IACHN,EAAM,YAAA,EAAc,cAAmC,uBAAuB,GAC3E,SAAoB;AAE1B,iBAAIK,MAAaC,IACR,KAAK,IAAI,MAAM,OAAO,QAAQ,EAAE,OAAO,cAAc,SAAS,cAAc,KAGrFH,IAAkB,KAAK;AAAA,YACrB;AAAA,cACE,WAAWC;AAAA,cACX,UAAAC;AAAA,cACA,SAASD;AAAA,cACT,QAAAE;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,YAETH;AAAA,YACA;AAAA,cACE,UAAU;AAAA,cACV,WAAW;AAAA,YAAA;AAAA,UACb,GAEKA;AAAA,QACT;AAAA,MAAA;AAAA,MAEF;AAAA,IAAA,GAEFH,EAAM,GAAGA,EAAM,MAAM,OAAO,MAAM;AAChC,MAAAG,GAAiB,QAAA,GACjBA,IAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAkBA,aACED,GACAF,GACAO,GACA;AACA,WAAI,CAACP,KAASA,EAAM,cAClBA,IAAQ,KAAK,IAAI,MACd,aAAa;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,GAAGO;AAAA,IAAA,CACJ,EACA,KAAA,IAEHP,EAAM,aAAa,GAAG,GAGxBA,EAAM;AAAA,MACJ,gBAAAhC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,EAAE,QAAQ,QAAQ,SAAS,QAAQ,gBAAgB,UAAU,YAAY,SAAA;AAAA,UAEhF,4BAACwC,GAAA,CAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACf,GAEFR,EAAM,aAAA,GAEF,OAAO,MAAM,GAAG,OAAO,SAAS,uBAAuB,MAAM,WAC/D,GAAG,OAAO,KAAK,CAAC,uBAAuB,CAAC,GAG1C,KAAK,IAAI,IACN,KAAwC;AAAA,MACvC,GAAG,KAAK;AAAA,MACR,GAAGE;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,eAAe;AAAA,IAAA,CAChB,EACA,KAAK,CAACO,MAAQ;AACb,UAAI,CAACA,EAAI,KAAK;AACZ,cAAM,IAAI,MAAM,4BAA4B,EAAE,OAAOA,GAAK;AAE5D,YAAM;AAAA,QACJ,MAAM,EAAE,SAAAC,EAAA;AAAA,MAAQ,IACdD;AACJ,MAAAT,EAAM;AAAA,QACJU,EAAQ,aAAaA,EAAQ,UACzB,GAAGA,EAAQ,SAAS,GAAGA,EAAQ,YAAY,KAAKA,EAAQ,SAAS,MAAM,EAAE,MAAMA,EAAQ,OAAO,GAAGA,EAAQ,UAAU,KAAKA,EAAQ,OAAO,MAAM,EAAE,KAC/I;AAAA,MAAA;AAEN,UAAIC;AACJ,MAAAX,EAAM;AAAA,QAEF,gBAAAhC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA,gBAAAA,EAACc,GAAA,EAAU,KAAK,CAAC8B,MAASD,IAAYC,GAAM,MAAMF,GAAS,KAAK,KAAK,IAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5E,GAGJC,EAAU;AAAA,QACR1C,EAAe;AAAA,QACf,CAACK,MAAM;AACL,UAAAA,EAAE,gBAAA,GACF,KAAK;AAAA,YACH;AAAA,cACE,SAASA,EAAE,OAAO;AAAA,cAClB,OAAOA,EAAE,OAAO;AAAA,YAAA;AAAA,YAElB0B;AAAA,YACAO;AAAA,UAAA;AAAA,QAEJ;AAAA,QACA,EAAE,MAAM,GAAA;AAAA,MAAK,GAIf,KAAK,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC1C,MAAQ;AACtC,cAAMgD,IAAkB,CAACvC,MAAsC;AAC7D,UAAAA,EAAE,gBAAA,GACFT,EAAI,UAAU,EAAE,UAAUS,EAAE,OAAO,OAAO;AAAA,QAC5C;AACA,QAAAqC,EAAU,iBAAiB1C,EAAe,MAAM4C,CAAe,GAC/Db,EAAM,GAAGA,EAAM,MAAM,OAAO,MAAM;AAChC,UAAAW,EAAU,oBAAoB1C,EAAe,MAAM4C,CAAe;AAAA,QACpE,CAAC;AAAA,MACH,CAAC,GAEGH,EAAQ,aAAaA,EAAQ,WAC/BV,EAAM,UAAU;AAAA,QACd,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ,MAAM;AACZ,iBAAO,SAAS,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,YACzC,OAAOU,EAAQ;AAAA,YACf,MAAMA,EAAQ;AAAA,UAAA,CACf;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAEL,CAAC,EACA,MAAM,CAACI,MAAQ;AACd,MAAAd,EAAM;AAAA,QAEF,gBAAAhC,EAAC+C,GAAA,EAAK,OAAM,uBAAsB,MAAK,SACrC,UAAA,gBAAA/C,EAAC,OAAA,EAAK,UAAA8C,aAAe,QAAQA,EAAI,UAAU,OAAOA,CAAG,GAAE,EAAA,CACzD;AAAA,MAAA;AAAA,IAGN,CAAC,GAEId,EAAM,KAAA;AAAA,EACf;AACF;AAlOOV,IAAA0B,EAAAzB,CAAA;AAAMI,IAANsB,2BAVP5B,GAUaM,CAAA;AAANuB,EAAA5B,GAAA,GAAMK,CAAA;"}
@@ -1,7 +1,7 @@
1
1
  import { j as i, F as m, P as N } from "./index-CvhkVj_L.js";
2
- import { B as S, I as R, S as w } from "./index-COlXHFRg.js";
2
+ import { B as S, I as R, S as w } from "./index-Ek5d60jn.js";
3
3
  import { m as q } from "./makeCallable-LDU0xZMJ.js";
4
- import { R as C } from "./Preferences-Bg3J5Ur9.js";
4
+ import { R as C } from "./Preferences-DS4-CFWe.js";
5
5
  import { M as k } from "./index-lZkYoUca.js";
6
6
  import { I as E } from "./InputBox-BV4m05Xs.js";
7
7
  import { n as y } from "./noop-ClDc6zv4.js";
@@ -295,4 +295,4 @@ A(v, 1, f);
295
295
  export {
296
296
  f as PluginQuickDelete
297
297
  };
298
- //# sourceMappingURL=index-OBerV4GU.js.map
298
+ //# sourceMappingURL=index-CWbHdYKu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CWbHdYKu.js","sources":["../src/plugins/quick-delete/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\r\nimport { IWikiPage } from '@/models/WikiPage'\r\nimport { IPEModal } from '@inpageedit/modal'\r\nimport { ReactNode } from 'jsx-dom'\r\nimport { makeCallable } from '@/utils/makeCallable.js'\r\n\r\ndeclare module '@/InPageEdit' {\r\n interface InPageEdit {\r\n quickDelete: PluginQuickDelete & {\r\n (\r\n ...args: Parameters<PluginQuickDelete['showModal']>\r\n ): ReturnType<PluginQuickDelete['showModal']>\r\n }\r\n }\r\n interface Events {\r\n 'quick-delete/init-options'(payload: Omit<QuickDeleteInitPayload, 'modal' | 'wikiPage'>): void\r\n 'quick-delete/show-modal'(payload: Omit<QuickDeleteInitPayload, 'wikiPage'>): void\r\n 'quick-delete/wiki-page'(payload: QuickDeleteInitPayload): void\r\n 'quick-delete/delete-notice'(\r\n payload: QuickDeleteInitPayload & { deleteNotices: ReactNode[] }\r\n ): void\r\n }\r\n}\r\n\r\nexport interface QuickDeleteOptions {\r\n title: string\r\n pageId: number\r\n revision: number\r\n deleteReason: string\r\n reloadAfterDelete: boolean\r\n}\r\n\r\nexport interface QuickDeleteInitPayload {\r\n ctx: InPageEdit\r\n options: QuickDeleteOptions\r\n modal: IPEModal\r\n wikiPage: IWikiPage\r\n}\r\n\r\nexport interface QuickDeleteSubmitPayload {\r\n wikiPage: IWikiPage\r\n reason?: string\r\n}\r\n\r\n@Inject(['api', 'wikiPage', 'wikiTitle', 'currentPage', 'wiki', 'modal', 'preferences'])\r\n@RegisterPreferences(\r\n Schema.object({\r\n deleteReason: Schema.string()\r\n .description('Default delete reason for quick delete')\r\n .default('[IPE-NEXT] Quick delete'),\r\n })\r\n .description('Quick delete options')\r\n .extra('category', 'delete')\r\n)\r\nexport class PluginQuickDelete extends BasePlugin {\r\n private readonly DEFAULT_OPTIONS: QuickDeleteOptions = {\r\n title: '',\r\n pageId: 0,\r\n revision: 0,\r\n deleteReason: '',\r\n reloadAfterDelete: true,\r\n }\r\n\r\n constructor(public ctx: InPageEdit) {\r\n super(ctx, {}, 'quick-delete')\r\n this.ctx.root.set('quickDelete', makeCallable(this, 'showModal'))\r\n }\r\n\r\n protected start(): Promise<void> | void {\r\n this.ctx.inject(['toolbox'], (ctx) => {\r\n this.injectToolbox(ctx)\r\n ctx.on('dispose', () => {\r\n this.removeToolbox(ctx)\r\n })\r\n })\r\n this.ctx.preferences.defineCategory({\r\n label: 'Delete',\r\n name: 'delete',\r\n description: 'Settings related to deleting pages',\r\n index: 3,\r\n })\r\n }\r\n\r\n async showModal(payload?: string | Partial<QuickDeleteOptions>) {\r\n if (typeof payload === 'undefined') {\r\n payload = {}\r\n } else if (typeof payload === 'string') {\r\n payload = {\r\n title: payload,\r\n } as Partial<QuickDeleteOptions>\r\n }\r\n\r\n if (!payload.title && !payload.pageId && !payload.revision) {\r\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\r\n const searchParams = new URLSearchParams(window.location.search)\r\n const title = this.ctx.currentPage.wikiTitle\r\n payload = {\r\n ...payload,\r\n title: title?.getPrefixedDBKey(),\r\n revision: searchParams.has('oldid') ? Number(searchParams.get('oldid')) : undefined,\r\n pageId: searchParams.has('curid') ? Number(searchParams.get('curid')) : undefined,\r\n }\r\n }\r\n\r\n const deleteReason =\r\n typeof payload.deleteReason === 'string'\r\n ? payload.deleteReason\r\n : (await this.ctx.preferences.get<string>('deleteReason'))!\r\n\r\n const options: QuickDeleteOptions = {\r\n ...this.DEFAULT_OPTIONS,\r\n deleteReason,\r\n ...payload,\r\n }\r\n if (!options.deleteReason) {\r\n options.deleteReason = (await this.ctx.preferences.get<string>('deleteReason')) || ''\r\n }\r\n if (!options) this.ctx.emit('quick-delete/init-options', { ctx: this.ctx, options })\r\n\r\n const modal = this.ctx.modal\r\n .createObject({\r\n className: 'ipe-quickDelete',\r\n sizeClass: 'small',\r\n center: true,\r\n })\r\n .init()\r\n modal.setTitle(\r\n (\r\n <>\r\n Loading: <u>{options.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n modal.setContent(<ProgressBar />)\r\n modal.addButton({\r\n side: 'right',\r\n type: 'button',\r\n className: 'is-ghost',\r\n label: 'Cancel',\r\n method() {\r\n modal.close()\r\n },\r\n })\r\n modal.show()\r\n this.ctx.emit('quick-delete/show-modal', { ctx: this.ctx, modal, options })\r\n\r\n let wikiPage: IWikiPage\r\n try {\r\n wikiPage = await this.getWikiPageFromPayload(options)\r\n if (wikiPage.pageInfo.special) {\r\n throw new Error('Special page cannot be deleted')\r\n }\r\n if (wikiPage.pageInfo.pageid === 0) {\r\n throw new Error('Page does not exist, cannot be deleted')\r\n }\r\n } catch (e) {\r\n modal.off(modal.Event.Close)\r\n modal.close()\r\n this.ctx.modal.notify('error', {\r\n content: e instanceof Error ? e.message : String(e),\r\n })\r\n return\r\n }\r\n modal.setTitle(\r\n (\r\n <>\r\n Quick Delete: <u>{wikiPage.pageInfo.title}</u>\r\n </>\r\n ) as HTMLElement\r\n )\r\n\r\n const deleteNotices = [] as ReactNode[]\r\n\r\n // Check delete permissions\r\n if (!wikiPage.userCan('delete')) {\r\n deleteNotices.push(\r\n <MBox title=\"Permission Denied\" type=\"error\">\r\n <p>You do not have permission to delete this page.</p>\r\n </MBox>\r\n )\r\n }\r\n\r\n // Check if page has protection\r\n if (wikiPage.pageInfo.protection && wikiPage.pageInfo.protection.length > 0) {\r\n deleteNotices.push(\r\n <MBox title=\"Warning\" type=\"warning\">\r\n <p>\r\n This page is protected and may has special use or purpose. Delete it at your own risk.\r\n </p>\r\n </MBox>\r\n )\r\n }\r\n\r\n this.ctx.emit('quick-delete/delete-notice', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n deleteNotices,\r\n })\r\n\r\n const deleteForm = (\r\n <form className=\"ipe-quickDelete__form\">\r\n <div className=\"ipe-quickDelete__notices\">{deleteNotices}</div>\r\n <div className=\"ipe-quickDelete__content\">\r\n <div\r\n className=\"ipe-quickDelete__page-info\"\r\n style={{\r\n padding: '1rem',\r\n backgroundColor: '#f8f9fa',\r\n border: '1px solid #dee2e6',\r\n borderRadius: '4px',\r\n marginBottom: '1rem',\r\n }}\r\n >\r\n <ul>\r\n <li>\r\n <strong>Title:</strong> {wikiPage.pageInfo.title}\r\n </li>\r\n <li>\r\n <strong>Page ID:</strong> {wikiPage.pageInfo.pageid}\r\n </li>\r\n <li>\r\n <strong>Last Revision:</strong> {wikiPage.pageInfo.lastrevid}\r\n </li>\r\n <li>\r\n <strong>Length:</strong> {wikiPage.pageInfo.length} characters\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"ipe-quickDelete__options\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem',\r\n marginTop: '1rem',\r\n }}\r\n >\r\n <InputBox\r\n label=\"Delete Reason\"\r\n id=\"reason\"\r\n name=\"reason\"\r\n value={options.deleteReason}\r\n inputProps={{\r\n placeholder: 'Enter reason for deletion...',\r\n required: true,\r\n }}\r\n />\r\n </div>\r\n {/* Debug Info */}\r\n {import.meta.env.DEV && (\r\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\r\n <details>\r\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\r\n </details>\r\n </div>\r\n )}\r\n </form>\r\n ) as HTMLFormElement\r\n modal.setContent(deleteForm)\r\n\r\n // Add delete button\r\n modal.addButton(\r\n {\r\n side: 'left',\r\n className: 'is-danger submit-btn',\r\n label: 'Delete Page',\r\n method: () => {\r\n const formData = new FormData(deleteForm)\r\n const reason = formData.get('reason') as string\r\n\r\n if (!reason || reason.trim() === '') {\r\n this.ctx.modal.notify('error', {\r\n title: 'Missing Reason',\r\n content: 'Please provide a reason for deletion.',\r\n })\r\n return\r\n }\r\n\r\n // 二次确认删除\r\n this.ctx.modal.confirm(\r\n {\r\n className: 'is-danger',\r\n title: 'Confirm Deletion',\r\n content: (\r\n <>\r\n <p>\r\n <strong>{wikiPage.pageInfo.title}</strong>\r\n </p>\r\n </>\r\n ) as HTMLElement,\r\n center: true,\r\n okBtn: {\r\n label: 'Delete it now',\r\n className: 'is-danger',\r\n },\r\n cancelBtn: {\r\n label: 'Cancel',\r\n className: 'is-ghost',\r\n },\r\n },\r\n (confirmed) => {\r\n if (confirmed) {\r\n console.info(wikiPage, deleteForm, {\r\n reason: reason,\r\n })\r\n\r\n modal.setLoadingState(true)\r\n this.handleSubmit({\r\n wikiPage,\r\n reason,\r\n })\r\n .then(async () => {\r\n modal.setOptions({\r\n beforeClose: noop,\r\n })\r\n modal.close()\r\n this.ctx.modal.notify('success', {\r\n title: 'Deletion Successful',\r\n content: `The page \"${wikiPage.pageInfo.title}\" has been deleted.`,\r\n })\r\n })\r\n .catch((error) => {\r\n this.ctx.modal.notify('error', {\r\n title: 'Deletion Error',\r\n content: error instanceof Error ? error.message : String(error),\r\n })\r\n modal.setLoadingState(false)\r\n })\r\n }\r\n return true\r\n }\r\n )\r\n },\r\n },\r\n 0\r\n )\r\n\r\n this.ctx.emit('quick-delete/wiki-page', {\r\n ctx: this.ctx,\r\n options,\r\n modal,\r\n wikiPage,\r\n })\r\n }\r\n\r\n async handleSubmit(payload: QuickDeleteSubmitPayload) {\r\n const wikiPage = payload.wikiPage\r\n const reason = payload.reason || ''\r\n\r\n return wikiPage.delete(reason)\r\n }\r\n\r\n async getWikiPageFromPayload(payload: Partial<QuickDeleteOptions>) {\r\n if (payload.revision) {\r\n return this.ctx.wikiPage.newFromRevision(payload.revision)\r\n } else if (payload.pageId) {\r\n return this.ctx.wikiPage.newFromPageId(payload.pageId)\r\n } else if (payload.title) {\r\n return this.ctx.wikiPage.newFromTitle(payload.title, false)\r\n }\r\n throw new Error('Invalid payload')\r\n }\r\n\r\n private async injectToolbox(ctx: InPageEdit) {\r\n const title = this.ctx.currentPage.wikiTitle\r\n const canDelete = title && this.ctx.wiki.hasRight('delete') && title.getNamespaceId() >= 0\r\n ctx.toolbox.addButton({\r\n id: 'quick-delete',\r\n group: 'group2',\r\n icon: (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-trash\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 7l16 0\" />\r\n <path d=\"M10 11l0 6\" />\r\n <path d=\"M14 11l0 6\" />\r\n <path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\" />\r\n <path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\" />\r\n </svg>\r\n ) as HTMLElement,\r\n buttonProps: {\r\n disabled: !canDelete,\r\n },\r\n tooltip: canDelete ? 'Quick Delete' : 'Not deletable',\r\n onClick: () => {\r\n this.showModal({\r\n title: title?.getPrefixedText(),\r\n })\r\n },\r\n })\r\n }\r\n\r\n protected removeToolbox(ctx: InPageEdit) {\r\n ctx.toolbox.removeButton('quick-delete')\r\n }\r\n}\r\n"],"names":["_PluginQuickDelete_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickDelete","BasePlugin","ctx","makeCallable","payload","searchParams","title","deleteReason","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","deleteNotices","MBox","deleteForm","InputBox","reason","confirmed","noop","error","canDelete","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { j as e, P as l } from "./index-CvhkVj_L.js";
2
- import { B as d } from "./index-COlXHFRg.js";
3
- import { T as m } from "./index-Bh70Udzi.js";
4
- import { I as u } from "./InputBox-BV4m05Xs.js";
5
- import { C as h } from "./CheckBox-D3rHnX7I.js";
6
- class x extends d {
1
+ import { j as e, P as c } from "./index-CvhkVj_L.js";
2
+ import { B as l } from "./index-Ek5d60jn.js";
3
+ import { T as d } from "./index-Bh70Udzi.js";
4
+ import { I as m } from "./InputBox-BV4m05Xs.js";
5
+ import { C as u } from "./CheckBox-D3rHnX7I.js";
6
+ class v extends l {
7
7
  constructor(t) {
8
8
  super(t, {}, "quick-redirect"), this.ctx = t;
9
9
  }
@@ -12,9 +12,9 @@ class x extends d {
12
12
  }
13
13
  start() {
14
14
  this.ctx.set("quickRedirect", this.quickRedirect.bind(this)), this.ctx.set("redirectPage", this.redirectPage.bind(this));
15
- const t = window.mw?.config.get("wgPageName") || "", r = window.mw?.config.get("wgIsProbablyEditable");
16
- this.ctx.inject(["toolbox"], (i) => {
17
- this.ctx = i, i.toolbox.addButton({
15
+ const t = window.mw?.config.get("wgPageName") || "", i = window.mw?.config.get("wgIsProbablyEditable");
16
+ this.ctx.inject(["toolbox"], (r) => {
17
+ this.ctx = r, r.toolbox.addButton({
18
18
  id: "quick-redirect",
19
19
  icon: /* @__PURE__ */ e(
20
20
  "svg",
@@ -43,7 +43,7 @@ class x extends d {
43
43
  index: 2,
44
44
  onClick: () => {
45
45
  this.quickRedirect(
46
- r ? {
46
+ i ? {
47
47
  to: t
48
48
  } : {}
49
49
  );
@@ -56,28 +56,28 @@ class x extends d {
56
56
  stop() {
57
57
  }
58
58
  quickRedirect(t) {
59
- const r = this.ctx.modal.createObject({
59
+ const i = this.ctx.modal.createObject({
60
60
  title: "Quick Redirect",
61
- content: /* @__PURE__ */ e(l, {}),
61
+ content: /* @__PURE__ */ e(c, {}),
62
62
  className: "quick-redirect compact-buttons",
63
63
  sizeClass: "smallToMedium",
64
64
  center: !0
65
65
  }).init();
66
- let i = null;
67
- return r.setContent(
66
+ let r = null;
67
+ return i.setContent(
68
68
  /* @__PURE__ */ e(
69
69
  "form",
70
70
  {
71
- ref: (o) => i = o,
71
+ ref: (o) => r = o,
72
72
  style: {
73
73
  display: "flex",
74
74
  flexDirection: "column",
75
75
  gap: "1rem"
76
76
  },
77
77
  onSubmit: (o) => {
78
- if (o.preventDefault(), i?.checkValidity(), !i?.reportValidity())
78
+ if (o.preventDefault(), r?.checkValidity(), !r?.reportValidity())
79
79
  return;
80
- const a = new FormData(i), s = {
80
+ const a = new FormData(r), s = {
81
81
  from: a.get("from")?.toString().trim(),
82
82
  to: a.get("to")?.toString().trim(),
83
83
  reason: a.get("reason") || "",
@@ -90,13 +90,13 @@ class x extends d {
90
90
  });
91
91
  return;
92
92
  }
93
- r.setLoadingState(!0), this.redirectPage(s).then((n) => {
94
- r.close(), this.ctx.modal.notify("success", {
93
+ i.setLoadingState(!0), this.redirectPage(s).then((n) => {
94
+ i.close(), this.ctx.modal.notify("success", {
95
95
  title: "Redirect successful",
96
96
  content: "The redirect has been created."
97
97
  });
98
98
  }).catch((n) => {
99
- r.setLoadingState(!1), this.ctx.modal.notify("error", {
99
+ i.setLoadingState(!1), this.ctx.modal.notify("error", {
100
100
  title: "Failed to redirect",
101
101
  content: n instanceof Error ? n.message : String(n)
102
102
  });
@@ -104,7 +104,7 @@ class x extends d {
104
104
  },
105
105
  children: [
106
106
  /* @__PURE__ */ e(
107
- m,
107
+ d,
108
108
  {
109
109
  inputs: [
110
110
  {
@@ -122,25 +122,26 @@ class x extends d {
122
122
  ]
123
123
  }
124
124
  ),
125
- /* @__PURE__ */ e(u, { label: "Reason", id: "reason", name: "reason", value: t?.reason }),
126
- /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(h, { name: "overwrite", id: "overwrite", checked: t?.overwrite, children: "Force create redirect even if the from page already exists" }) })
125
+ /* @__PURE__ */ e(m, { label: "Reason", id: "reason", name: "reason", value: t?.reason }),
126
+ /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(u, { name: "overwrite", id: "overwrite", checked: t?.overwrite, children: "Force create redirect even if the from page already exists" }) })
127
127
  ]
128
128
  }
129
129
  )
130
- ), r.setButtons([
130
+ ), i.setButtons([
131
131
  {
132
132
  label: "Create Redirect",
133
133
  className: "is-primary is-ghost",
134
134
  method: () => {
135
- i?.dispatchEvent(new Event("submit"));
135
+ r?.dispatchEvent(new Event("submit"));
136
136
  }
137
137
  }
138
- ]), r.show();
138
+ ]), i.show();
139
139
  }
140
140
  async redirectPage(t) {
141
- const { from: r, to: i, reason: o = "", overwrite: a = !1 } = t, s = await this.ctx.wikiPage.newBlankPage({
142
- title: r
143
- }), n = `#REDIRECT [[:${i}]]`, c = await s.edit(
141
+ const { from: i, to: r, reason: o = "", overwrite: a = !1 } = t, s = await this.ctx.wikiPage.newBlankPage({
142
+ title: i
143
+ }), n = `#REDIRECT [[:${r}]]`;
144
+ return s.edit(
144
145
  {
145
146
  text: n,
146
147
  summary: o
@@ -149,12 +150,9 @@ class x extends d {
149
150
  createonly: !a
150
151
  }
151
152
  );
152
- if (c.data?.errors)
153
- throw new Error(c.data.errors[0].info, { cause: c });
154
- return c;
155
153
  }
156
154
  }
157
155
  export {
158
- x as PluginQuickRedirect
156
+ v as PluginQuickRedirect
159
157
  };
160
- //# sourceMappingURL=index-CeXR4lOu.js.map
158
+ //# sourceMappingURL=index-CaI9BFuB.js.map