@inpageedit/core 0.14.4 → 0.15.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 (71) hide show
  1. package/dist/{BasePlugin-DD7l-5Xw.js → BasePlugin-BCVSn9QJ.js} +2 -2
  2. package/dist/{BasePlugin-DD7l-5Xw.js.map → BasePlugin-BCVSn9QJ.js.map} +1 -1
  3. package/dist/InputBox-CZ1v4_l3.js +50 -0
  4. package/dist/InputBox-CZ1v4_l3.js.map +1 -0
  5. package/dist/PluginImagesUsed-Bq_C_rgg.js +90 -0
  6. package/dist/PluginImagesUsed-Bq_C_rgg.js.map +1 -0
  7. package/dist/{PluginPrefSync-CbFuuC19.js → PluginPrefSync-DP5NyPnI.js} +4 -4
  8. package/dist/{PluginPrefSync-CbFuuC19.js.map → PluginPrefSync-DP5NyPnI.js.map} +1 -1
  9. package/dist/{PluginStoreApp-MbC3G9tu.js → PluginStoreApp-_YWpLgfs.js} +2 -2
  10. package/dist/{PluginStoreApp-MbC3G9tu.js.map → PluginStoreApp-_YWpLgfs.js.map} +1 -1
  11. package/dist/PluginTemplatesUsed-DS_rHctR.js +76 -0
  12. package/dist/PluginTemplatesUsed-DS_rHctR.js.map +1 -0
  13. package/dist/Preferences-DqtjY7XU.js +1541 -0
  14. package/dist/Preferences-DqtjY7XU.js.map +1 -0
  15. package/dist/browser-DR-yCqVg.js +1160 -0
  16. package/dist/browser-DR-yCqVg.js.map +1 -0
  17. package/dist/components/index.js +1 -1
  18. package/dist/{index-BpQ6VGMz.js → index-B9VO3swL.js} +108 -63
  19. package/dist/index-B9VO3swL.js.map +1 -0
  20. package/dist/{index-BanevHQ2.js → index-C3t-Xj3e.js} +85 -82
  21. package/dist/index-C3t-Xj3e.js.map +1 -0
  22. package/dist/{index-WfXtYVMt.js → index-CS1kidKF.js} +149 -117
  23. package/dist/index-CS1kidKF.js.map +1 -0
  24. package/dist/index-Cb2_vqBl.js +44 -0
  25. package/dist/index-Cb2_vqBl.js.map +1 -0
  26. package/dist/{index-B3jld2sl.js → index-CbdkXGs7.js} +4 -4
  27. package/dist/{index-B3jld2sl.js.map → index-CbdkXGs7.js.map} +1 -1
  28. package/dist/{index-BdHmr8jw.js → index-CcAmmXbb.js} +904 -704
  29. package/dist/index-CcAmmXbb.js.map +1 -0
  30. package/dist/index-Cq8xPcEY.js +170 -0
  31. package/dist/index-Cq8xPcEY.js.map +1 -0
  32. package/dist/{index-DensW9qt.js → index-DPA1ptYq.js} +5 -5
  33. package/dist/index-DPA1ptYq.js.map +1 -0
  34. package/dist/{index-BjDTD66_.js → index-DVvsTsLI.js} +29 -15
  35. package/dist/index-DVvsTsLI.js.map +1 -0
  36. package/dist/{index-CnR6CqkM.js → index-DjyjqpeO.js} +2 -2
  37. package/dist/{index-CnR6CqkM.js.map → index-DjyjqpeO.js.map} +1 -1
  38. package/dist/index-FvMu0Ka0.js +342 -0
  39. package/dist/index-FvMu0Ka0.js.map +1 -0
  40. package/dist/index-mFwJhDwE.js +168 -0
  41. package/dist/index-mFwJhDwE.js.map +1 -0
  42. package/dist/{index-De25v1_Q.js → index-n5KKWE9v.js} +6 -6
  43. package/dist/index-n5KKWE9v.js.map +1 -0
  44. package/dist/{index-DKCZDN-Q.js → index-rKL4D_7I.js} +5 -5
  45. package/dist/{index-DKCZDN-Q.js.map → index-rKL4D_7I.js.map} +1 -1
  46. package/dist/index.d.ts +334 -147
  47. package/dist/index.js +5 -5
  48. package/dist/models/index.js +1 -1
  49. package/dist/plugins/index.js +18 -14
  50. package/dist/plugins/index.js.map +1 -1
  51. package/dist/services/index.js +9 -8
  52. package/dist/style.css +1 -1
  53. package/lib/index.umd.js +14 -12
  54. package/lib/index.umd.js.map +1 -1
  55. package/lib/style.css +1 -1
  56. package/package.json +4 -2
  57. package/dist/InputBox-nQKtiWtZ.js +0 -30
  58. package/dist/InputBox-nQKtiWtZ.js.map +0 -1
  59. package/dist/Preferences-C10tZMl1.js +0 -2701
  60. package/dist/Preferences-C10tZMl1.js.map +0 -1
  61. package/dist/index-BXNyXvre.js +0 -116
  62. package/dist/index-BXNyXvre.js.map +0 -1
  63. package/dist/index-BanevHQ2.js.map +0 -1
  64. package/dist/index-BdHmr8jw.js.map +0 -1
  65. package/dist/index-BjDTD66_.js.map +0 -1
  66. package/dist/index-BpQ6VGMz.js.map +0 -1
  67. package/dist/index-DVOc6fB6.js +0 -211
  68. package/dist/index-DVOc6fB6.js.map +0 -1
  69. package/dist/index-De25v1_Q.js.map +0 -1
  70. package/dist/index-DensW9qt.js.map +0 -1
  71. package/dist/index-WfXtYVMt.js.map +0 -1
@@ -1,43 +1,45 @@
1
- import { j as i, F as _, P as R } from "./index-CM_6yF2v.js";
2
- import { W as h } from "./WatchlistAction-BbNAyryN.js";
3
- import { m as $ } from "./makeCallable-LDU0xZMJ.js";
4
- import { T as U, I as Q, R as W, S as l } from "./Preferences-C10tZMl1.js";
5
- import { B as z } from "./BasePlugin-DD7l-5Xw.js";
6
- import { M as T } from "./index-CG38LlAh.js";
7
- import { I, C } from "./InputBox-nQKtiWtZ.js";
1
+ import { j as i, F as E, P as Q } from "./index-CM_6yF2v.js";
2
+ import { W as f } from "./WatchlistAction-BbNAyryN.js";
3
+ import { m as R } from "./makeCallable-LDU0xZMJ.js";
4
+ import { S as $ } from "./browser-DR-yCqVg.js";
5
+ import { I as U, R as W, S as d } from "./Preferences-DqtjY7XU.js";
6
+ import { B as z } from "./BasePlugin-BCVSn9QJ.js";
7
+ import { M as I } from "./index-CG38LlAh.js";
8
+ import { I as T, C } from "./InputBox-CZ1v4_l3.js";
8
9
  import { R as Y } from "./RadioBox-0UuxlcWZ.js";
9
10
  import { n as F } from "./noop-ClDc6zv4.js";
10
- const K = (s = 0) => new Promise((e) => setTimeout(e, s));
11
- var H = Object.create, E = Object.defineProperty, G = Object.getOwnPropertyDescriptor, O = (s, e) => (e = Symbol[s]) ? e : Symbol.for("Symbol." + s), M = (s) => {
12
- throw TypeError(s);
13
- }, X = (s, e, t) => e in s ? E(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t, J = (s, e) => E(s, "name", { value: e, configurable: !0 }), V = (s) => [, , , H(s?.[O("metadata")] ?? null)], Z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], B = (s) => s !== void 0 && typeof s != "function" ? M("Function expected") : s, ee = (s, e, t, d, n) => ({ kind: Z[s], name: e, metadata: d, addInitializer: (u) => t._ ? M("Already initialized") : n.push(B(u || null)) }), te = (s, e) => X(e, O("metadata"), s[3]), ie = (s, e, t, d) => {
14
- for (var n = 0, u = s[e >> 1], f = u && u.length; n < f; n++) u[n].call(t);
15
- return d;
16
- }, se = (s, e, t, d, n, u) => {
17
- var f, w, c, o = e & 7, a = !1, v = 0, x = s[v] || (s[v] = []), p = o && (n = n.prototype, o < 5 && (o > 3 || !a) && G(n, t));
18
- J(n, t);
19
- for (var g = d.length - 1; g >= 0; g--)
20
- c = ee(o, t, w = {}, s[3], x), f = (0, d[g])(n, c), w._ = 1, B(f) && (n = f);
21
- return te(s, n), p && E(n, t, p), a ? o ^ 4 ? u : p : n;
11
+ import { I as K } from "./IconQuickEdit-CMCQncyj.js";
12
+ const H = (o = 0) => new Promise((e) => setTimeout(e, o));
13
+ var X = Object.create, _ = Object.defineProperty, G = Object.getOwnPropertyDescriptor, O = (o, e) => (e = Symbol[o]) ? e : Symbol.for("Symbol." + o), M = (o) => {
14
+ throw TypeError(o);
15
+ }, V = (o, e, t) => e in o ? _(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t, J = (o, e) => _(o, "name", { value: e, configurable: !0 }), Z = (o) => [, , , X(o?.[O("metadata")] ?? null)], ee = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], B = (o) => o !== void 0 && typeof o != "function" ? M("Function expected") : o, te = (o, e, t, a, r) => ({ kind: ee[o], name: e, metadata: a, addInitializer: (u) => t._ ? M("Already initialized") : r.push(B(u || null)) }), ie = (o, e) => V(e, O("metadata"), o[3]), oe = (o, e, t, a) => {
16
+ for (var r = 0, u = o[e >> 1], h = u && u.length; r < h; r++) u[r].call(t);
17
+ return a;
18
+ }, se = (o, e, t, a, r, u) => {
19
+ var h, w, c, s = e & 7, l = !1, v = 0, x = o[v] || (o[v] = []), p = s && (r = r.prototype, s < 5 && (s > 3 || !l) && G(r, t));
20
+ J(r, t);
21
+ for (var g = a.length - 1; g >= 0; g--)
22
+ c = te(s, t, w = {}, o[3], x), h = (0, a[g])(r, c), w._ = 1, B(h) && (r = h);
23
+ return ie(o, r), p && _(r, t, p), l ? s ^ 4 ? u : p : r;
22
24
  }, A, P, L;
23
- A = [Q(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences", "$"]), W(
24
- l.object({
25
- "quickEdit.editSummary": l.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
26
- "quickEdit.editMinor": l.boolean().description('Default to checking "minor edit" option').default(!1),
27
- "quickEdit.outSideClose": l.boolean().description("Close editor modal by clicking outside").default(!0),
28
- "quickEdit.watchList": l.union([
29
- l.const(h.preferences).description("Follow MW preferences"),
30
- l.const(h.nochange).description("Keep the current watchlist status"),
31
- l.const(h.watch).description("Add the page to watchlist"),
32
- l.const(h.unwatch).description("Remove the page from watchlist")
33
- ]).description("Watchlist options").default(h.preferences),
34
- "quickEdit.keyshortcut.save": l.string().default("ctrl-s").description("save button key shortcut (blank to disable)"),
35
- "quickEdit.editFont": l.union([
36
- l.const("preferences").description("Follow MW preferences"),
37
- l.const("monospace").description("Monospace"),
38
- l.const("sans-serif").description("Sans-serif"),
39
- l.const("serif").description("Serif"),
40
- l.string().description("Custom font (same as CSS `font-family` property)").default("")
25
+ A = [U(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences", "$"]), W(
26
+ d.object({
27
+ "quickEdit.editSummary": d.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
28
+ "quickEdit.editMinor": d.boolean().description('Default to checking "minor edit" option').default(!1),
29
+ "quickEdit.outSideClose": d.boolean().description("Close editor modal by clicking outside").default(!0),
30
+ "quickEdit.watchList": d.union([
31
+ d.const(f.preferences).description("Follow MW preferences"),
32
+ d.const(f.nochange).description("Keep the current watchlist status"),
33
+ d.const(f.watch).description("Add the page to watchlist"),
34
+ d.const(f.unwatch).description("Remove the page from watchlist")
35
+ ]).description("Watchlist options").default(f.preferences),
36
+ "quickEdit.keyshortcut.save": d.string().default("ctrl-s").description("save button key shortcut (blank to disable)"),
37
+ "quickEdit.editFont": d.union([
38
+ d.const("preferences").description("Follow MW preferences"),
39
+ d.const("monospace").description("Monospace"),
40
+ d.const("sans-serif").description("Sans-serif"),
41
+ d.const("serif").description("Serif"),
42
+ d.string().description("Custom font (same as CSS `font-family` property)").default("")
41
43
  ]).description("Font to use in quick edit's textarea").default("preferences")
42
44
  }).description("Quick edit options").extra("category", "editor")
43
45
  )];
@@ -52,7 +54,7 @@ let S = class D extends (L = z) {
52
54
  editSummary: "",
53
55
  createOnly: !1,
54
56
  reloadAfterSave: !0
55
- }, this.ctx.root.set("quickEdit", $(this, "showModal"));
57
+ }, this.ctx.root.set("quickEdit", R(this, "showModal"));
56
58
  }
57
59
  start() {
58
60
  this.ctx.inject(["toolbox"], (e) => {
@@ -62,44 +64,44 @@ let S = class D extends (L = z) {
62
64
  });
63
65
  }
64
66
  async showModal(e) {
65
- const t = this.ctx.$;
67
+ const { $: t } = this.ctx;
66
68
  if (typeof e > "u" ? e = {} : typeof e == "string" && (e = {
67
69
  title: e
68
70
  }), e?.page && (e.title = e.page, delete e.page), !e.title && !e.pageId && !e.revision) {
69
71
  this.logger.warn("None of the title, pageId or revision provided. Using defaults.");
70
- const r = new URLSearchParams(window.location.search), m = this.ctx.currentPage.wikiTitle;
72
+ const n = new URLSearchParams(window.location.search), m = this.ctx.currentPage.wikiTitle;
71
73
  e = {
72
74
  ...e,
73
75
  title: m?.getPrefixedDBKey(),
74
- revision: r.has("oldid") ? Number(r.get("oldid")) : void 0,
75
- pageId: r.has("curid") ? Number(r.get("curid")) : void 0
76
+ revision: n.has("oldid") ? Number(n.get("oldid")) : void 0,
77
+ pageId: n.has("curid") ? Number(n.get("curid")) : void 0
76
78
  };
77
79
  }
78
80
  if (!e.revision && !e.pageId && e.title) {
79
- const r = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
80
- r && r.title.getNamespaceId() >= 0 && (e.title = r.title.getPrefixedDBKey(), e.section ??= r.section);
81
+ const n = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
82
+ n && n.title.getNamespaceId() >= 0 && (e.title = n.title.getPrefixedDBKey(), e.section ??= n.section);
81
83
  }
82
- const d = await this.ctx.preferences.get("quickEdit.outSideClose"), n = await this.ctx.preferences.get("quickEdit.watchList"), u = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), f = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), w = await this.getEditFontOptions(), c = {
84
+ const a = await this.ctx.preferences.get("quickEdit.outSideClose"), r = await this.ctx.preferences.get("quickEdit.watchList"), u = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), h = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), w = await this.getEditFontOptions(), c = {
83
85
  ...this.DEFAULT_OPTIONS,
84
86
  editSummary: u,
85
- editMinor: f,
87
+ editMinor: h,
86
88
  ...e
87
89
  };
88
90
  c.editSummary || (c.editSummary = await this.ctx.preferences.get("quickEdit.editSummary") || ""), this.ctx.emit("quick-edit/init-options", { ctx: this.ctx, options: c });
89
- const o = this.ctx.modal.createObject({
91
+ const s = this.ctx.modal.createObject({
90
92
  className: "ipe-quickEdit",
91
93
  sizeClass: "large",
92
94
  // backdrop: false,
93
95
  // draggable: true,
94
96
  center: !1,
95
- outSideClose: d
97
+ outSideClose: a
96
98
  }).init();
97
- o.setTitle(
98
- /* @__PURE__ */ i(_, { children: [
99
+ s.setTitle(
100
+ /* @__PURE__ */ i(E, { children: [
99
101
  "Loading: ",
100
102
  /* @__PURE__ */ i("u", { children: c.title })
101
103
  ] })
102
- ), o.setContent(
104
+ ), s.setContent(
103
105
  /* @__PURE__ */ i(
104
106
  "section",
105
107
  {
@@ -111,42 +113,42 @@ let S = class D extends (L = z) {
111
113
  justifyContent: "center",
112
114
  alignItems: "center"
113
115
  },
114
- children: /* @__PURE__ */ i(R, {})
116
+ children: /* @__PURE__ */ i(Q, {})
115
117
  }
116
118
  )
117
- ), o.addButton({
119
+ ), s.addButton({
118
120
  side: "right",
119
121
  type: "button",
120
122
  className: "is-danger is-ghost",
121
123
  label: t`Cancel`,
122
124
  method() {
123
- o.close();
125
+ s.close();
124
126
  }
125
- }), o.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: o, options: c });
126
- let a;
127
+ }), s.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: s, options: c });
128
+ let l;
127
129
  try {
128
- if (a = await this.getWikiPageFromPayload(c), a.pageInfo.special)
130
+ if (l = await this.getWikiPageFromPayload(c), l.pageInfo.special)
129
131
  throw new Error(t`Special page is not editable.`);
130
- } catch (r) {
131
- o.off(o.Event.Close), o.close(), this.ctx.modal.notify("error", {
132
- content: r instanceof Error ? r.message : String(r)
132
+ } catch (n) {
133
+ s.off(s.Event.Close), s.close(), this.ctx.modal.notify("error", {
134
+ content: n instanceof Error ? n.message : String(n)
133
135
  });
134
136
  return;
135
137
  }
136
- const v = c.section === "new" ? "" : a.revisions[0]?.content || "", x = a.revisions[0]?.revid, p = x && x !== a.lastrevid, g = c.section === "new", N = a.pageid === 0;
137
- o.setTitle(
138
- /* @__PURE__ */ i(_, { children: [
138
+ const v = c.section === "new" ? "" : l.revisions[0]?.content || "", x = l.revisions[0]?.revid, p = x && x !== l.lastrevid, g = c.section === "new", N = l.pageid === 0;
139
+ s.setTitle(
140
+ /* @__PURE__ */ i(E, { children: [
139
141
  g ? t`New Section` : t`Quick ${N ? "Create" : "Edit"}`,
140
142
  ": ",
141
- /* @__PURE__ */ i("u", { children: a.pageInfo.title }),
143
+ /* @__PURE__ */ i("u", { children: l.pageInfo.title }),
142
144
  p ? ` (${t`Revision`} ${x})` : ""
143
145
  ] })
144
146
  );
145
147
  const k = [];
146
148
  N && k.push(
147
- /* @__PURE__ */ i(T, { title: t`Attention`, type: "important", children: /* @__PURE__ */ i("p", { children: t`This page does not exist.` }) })
149
+ /* @__PURE__ */ i(I, { title: t`Attention`, type: "important", children: /* @__PURE__ */ i("p", { children: t`This page does not exist.` }) })
148
150
  ), p && k.push(
149
- /* @__PURE__ */ i(T, { title: t`Attention`, type: "warning", children: /* @__PURE__ */ i(
151
+ /* @__PURE__ */ i(I, { title: t`Attention`, type: "warning", children: /* @__PURE__ */ i(
150
152
  "p",
151
153
  {
152
154
  innerHTML: t`You are editing a <em>historical version</em>; the content is not the latest!`
@@ -155,8 +157,8 @@ let S = class D extends (L = z) {
155
157
  ), this.ctx.emit("quick-edit/edit-notice", {
156
158
  ctx: this.ctx,
157
159
  options: c,
158
- modal: o,
159
- wikiPage: a,
160
+ modal: s,
161
+ wikiPage: l,
160
162
  editNotices: k
161
163
  });
162
164
  const b = /* @__PURE__ */ i("form", { className: "ipe-quickEdit__form", children: [
@@ -167,8 +169,8 @@ let S = class D extends (L = z) {
167
169
  className: "ipe-quickEdit__content",
168
170
  style: { display: "flex", flexDirection: "column", gap: "1rem" },
169
171
  children: [
170
- c.section === "new" && /* @__PURE__ */ i(_, { children: /* @__PURE__ */ i(
171
- I,
172
+ c.section === "new" && /* @__PURE__ */ i(E, { children: /* @__PURE__ */ i(
173
+ T,
172
174
  {
173
175
  label: t`Section title`,
174
176
  id: "summary",
@@ -201,23 +203,31 @@ let S = class D extends (L = z) {
201
203
  marginTop: "1rem"
202
204
  },
203
205
  children: [
204
- !g && /* @__PURE__ */ i(I, { label: t`Summary`, id: "summary", name: "summary", value: c.editSummary }),
206
+ !g && /* @__PURE__ */ i(T, { label: t`Summary`, id: "summary", name: "summary", value: c.editSummary }),
205
207
  /* @__PURE__ */ i("div", { className: "ipe-input-box", children: [
206
208
  /* @__PURE__ */ i("label", { htmlFor: "watchlist", style: { display: "block" }, children: t`Watchlist` }),
207
- /* @__PURE__ */ i("div", { style: { display: "flex", gap: "1rem" }, children: [
208
- h.preferences,
209
- h.nochange,
210
- h.watch,
211
- h.unwatch
212
- ].map((r) => /* @__PURE__ */ i(
209
+ /* @__PURE__ */ i("div", { style: { display: "flex", gap: "1rem", whiteSpace: "nowrap", overflowX: "auto" }, children: [
210
+ f.preferences,
211
+ f.nochange,
212
+ f.watch,
213
+ f.unwatch
214
+ ].map((n) => /* @__PURE__ */ i(
213
215
  Y,
214
216
  {
215
217
  name: "watchlist",
216
- value: r,
217
- inputProps: { checked: n === r },
218
- children: t`watchlist.${r}`
218
+ value: n,
219
+ inputProps: {
220
+ checked: r === n,
221
+ onChange: (m) => {
222
+ m.target && m.target.closest("label")?.scrollIntoView({
223
+ behavior: "smooth",
224
+ inline: "center"
225
+ });
226
+ }
227
+ },
228
+ children: t`watchlist.${n}`
219
229
  },
220
- r
230
+ n
221
231
  )) })
222
232
  ] }),
223
233
  /* @__PURE__ */ i("div", { style: { display: "flex", gap: "1rem" }, children: [
@@ -229,36 +239,36 @@ let S = class D extends (L = z) {
229
239
  ),
230
240
  !1
231
241
  ] });
232
- o.setContent(b);
242
+ s.setContent(b);
233
243
  let y = !1;
234
- o.addButton(
244
+ s.addButton(
235
245
  {
236
246
  side: "left",
237
247
  className: "is-primary submit-btn",
238
248
  label: t`Submit`,
239
249
  keyPress: await this.ctx.preferences.get("quickEdit.keyshortcut.save") || void 0,
240
250
  method: async () => {
241
- const r = new FormData(b);
242
- o.setLoadingState(!0);
251
+ const n = new FormData(b);
252
+ s.setLoadingState(!0);
243
253
  try {
244
254
  await this.handleSubmit({
245
- wikiPage: a,
246
- text: r.get("text"),
247
- summary: r.get("summary"),
248
- minor: r.get("minor") === "on",
255
+ wikiPage: l,
256
+ text: n.get("text"),
257
+ summary: n.get("summary"),
258
+ minor: n.get("minor") === "on",
249
259
  section: c.section,
250
- watchlist: n,
260
+ watchlist: r,
251
261
  // 如果无视风险,那么就不再尝试解决冲突,直接重建页面
252
- createonly: a.pageid === 0 && !y,
253
- recreate: a.pageid === 0 && y
254
- }), o.setOptions({
262
+ createonly: l.pageid === 0 && !y,
263
+ recreate: l.pageid === 0 && y
264
+ }), s.setOptions({
255
265
  beforeClose: F
256
- }), o.close(), this.ctx.modal.notify("success", {
266
+ }), s.close(), this.ctx.modal.notify("success", {
257
267
  title: t`Submission Successful`,
258
268
  content: t`Your changes have been saved.`
259
- }), r.get("reloadAfterSave") && (await K(500), location.reload());
269
+ }), n.get("reloadAfterSave") && (await H(500), location.reload());
260
270
  } catch (m) {
261
- if (o.setLoadingState(!1), U.is(m) && (m.code === "pagedeleted" || m.code === "editconflict" || m.code === "articleexists")) {
271
+ if (s.setLoadingState(!1), $.is(m) && (m.code === "pagedeleted" || m.code === "editconflict" || m.code === "articleexists")) {
262
272
  y = !0, this.ctx.modal.notify("warning", {
263
273
  title: t`Submission Error`,
264
274
  content: /* @__PURE__ */ i("div", { children: [
@@ -277,10 +287,10 @@ let S = class D extends (L = z) {
277
287
  }
278
288
  },
279
289
  0
280
- ), o.setOptions({
290
+ ), s.setOptions({
281
291
  beforeClose: () => {
282
- const r = a.revisions[0]?.content || "";
283
- return (b.querySelector("textarea")?.value || "") === r ? !0 : (this.ctx.modal.confirm(
292
+ const n = l.revisions[0]?.content || "";
293
+ return (b.querySelector("textarea")?.value || "") === n ? !0 : (this.ctx.modal.confirm(
284
294
  {
285
295
  className: "is-primary",
286
296
  title: t`Unsaved Changes`,
@@ -295,30 +305,30 @@ let S = class D extends (L = z) {
295
305
  className: "is-primary is-ghost"
296
306
  }
297
307
  },
298
- (j) => (j && (o.setOptions({
308
+ (j) => (j && (s.setOptions({
299
309
  beforeClose: F
300
- }), o.close()), !0)
310
+ }), s.close()), !0)
301
311
  ), !1);
302
312
  }
303
313
  }), this.ctx.emit("quick-edit/wiki-page", {
304
314
  ctx: this.ctx,
305
315
  options: c,
306
- modal: o,
307
- wikiPage: a
316
+ modal: s,
317
+ wikiPage: l
308
318
  });
309
- const q = (r) => b.querySelector("textarea")?.value === v ? !0 : (r.preventDefault(), t`You have unsaved changes. Are you sure you want to leave?`);
310
- window.addEventListener("beforeunload", q), o.on(o.Event.Close, () => {
319
+ const q = (n) => b.querySelector("textarea")?.value === v ? !0 : (n.preventDefault(), t`You have unsaved changes. Are you sure you want to leave?`);
320
+ window.addEventListener("beforeunload", q), s.on(s.Event.Close, () => {
311
321
  window.removeEventListener("beforeunload", q);
312
322
  });
313
323
  }
314
324
  async handleSubmit(e) {
315
- const { wikiPage: t, ...d } = e;
325
+ const { wikiPage: t, ...a } = e;
316
326
  return this.ctx.emit("quick-edit/submit", {
317
327
  ctx: this.ctx,
318
328
  wikiPage: t,
319
- ...d
329
+ ...a
320
330
  }), t.edit({
321
- ...d
331
+ ...a
322
332
  });
323
333
  }
324
334
  static {
@@ -344,7 +354,7 @@ let S = class D extends (L = z) {
344
354
  throw new Error("Invalid payload");
345
355
  }
346
356
  async injectToolbox(e) {
347
- const t = this.ctx.$, d = this.ctx.currentPage.wikiTitle, n = d && d.getNamespaceId() >= 0;
357
+ const { $: t } = this.ctx, a = this.ctx.currentPage.wikiTitle, r = a && a.getNamespaceId() >= 0;
348
358
  e.toolbox.addButton({
349
359
  id: "quick-edit",
350
360
  group: "group1",
@@ -371,13 +381,13 @@ let S = class D extends (L = z) {
371
381
  }
372
382
  ),
373
383
  buttonProps: {
374
- disabled: !n
384
+ disabled: !r
375
385
  },
376
- tooltip: () => n ? t`Quick Edit` : t`Not editable`,
386
+ tooltip: () => r ? t`Quick Edit` : t`Not editable`,
377
387
  onClick: () => {
378
388
  const u = new URLSearchParams(window.location.search).get("oldid");
379
389
  this.showModal({
380
- title: d?.getPrefixedText(),
390
+ title: a?.getPrefixedText(),
381
391
  revision: u ? Number(u) : void 0
382
392
  });
383
393
  }
@@ -386,12 +396,34 @@ let S = class D extends (L = z) {
386
396
  removeToolbox(e) {
387
397
  e.toolbox.removeButton("quick-edit");
388
398
  }
399
+ createQuickEditButton(e, t) {
400
+ const { $: a } = this.ctx, r = t?.icon ?? /* @__PURE__ */ i(K, { className: "ipe-icon" }), u = t?.label ?? a`Quick Edit`;
401
+ return /* @__PURE__ */ i(
402
+ "a",
403
+ {
404
+ href: "#ipe://quick-edit/",
405
+ dataset: e,
406
+ className: `ipe-quick-edit ${e.createOnly ? "ipe-quick-edit--create-only" : ""}`,
407
+ style: {
408
+ userSelect: "none",
409
+ marginLeft: "0.2em"
410
+ },
411
+ onClick: (h) => {
412
+ h.preventDefault(), this.showModal(e);
413
+ },
414
+ children: [
415
+ r,
416
+ u
417
+ ]
418
+ }
419
+ );
420
+ }
389
421
  };
390
- P = V(L);
422
+ P = Z(L);
391
423
  S = se(P, 0, "PluginQuickEdit", A, S);
392
- ie(P, 1, S);
393
- let he = S;
424
+ oe(P, 1, S);
425
+ let ge = S;
394
426
  export {
395
- he as PluginQuickEdit
427
+ ge as PluginQuickEdit
396
428
  };
397
- //# sourceMappingURL=index-WfXtYVMt.js.map
429
+ //# sourceMappingURL=index-CS1kidKF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CS1kidKF.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 { IWikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { IPEModal } from '@inpageedit/modal'\nimport { ReactNode } from 'jsx-dom'\nimport { makeCallable } from '@/utils/makeCallable.js'\nimport { MediaWikiApiError } from 'wiki-saikou'\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<QuickEditEventPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditEventPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditEventPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditEventPayload & { editNotices: ReactNode[] }): void\n 'quick-edit/submit'(payload: QuickEditSubmitPayload & { ctx: InPageEdit }): void\n }\n interface PreferencesMap {\n 'quickEdit.editSummary': string\n 'quickEdit.editMinor': boolean\n 'quickEdit.outSideClose': boolean\n 'quickEdit.watchList': WatchlistAction\n 'quickEdit.keyshortcut.save': string\n 'quickEdit.editFont': string\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 QuickEditEventPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: IWikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n wikiPage: IWikiPage\n text?: string\n summary?: string\n section?: number | 'new' | undefined\n minor?: boolean\n createonly?: boolean\n recreate?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'wikiTitle', 'currentPage', 'wiki', 'modal', 'preferences', '$'])\n@RegisterPreferences(\n Schema.object({\n 'quickEdit.editSummary': Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n 'quickEdit.editMinor': Schema.boolean()\n .description('Default to checking \"minor edit\" option')\n .default(false),\n 'quickEdit.outSideClose': Schema.boolean()\n .description('Close editor modal by clicking outside')\n .default(true),\n 'quickEdit.watchList': Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow MW 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 'quickEdit.keyshortcut.save': Schema.string()\n .default('ctrl-s')\n .description('save button key shortcut (blank to disable)'),\n 'quickEdit.editFont': Schema.union([\n Schema.const('preferences').description('Follow MW preferences'),\n Schema.const('monospace').description('Monospace'),\n Schema.const('sans-serif').description('Sans-serif'),\n Schema.const('serif').description('Serif'),\n Schema.string().description('Custom font (same as CSS `font-family` property)').default(''),\n ])\n .description(\"Font to use in quick edit's textarea\")\n .default('preferences'),\n })\n .description('Quick edit options')\n .extra('category', 'editor')\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 const { $ } = this.ctx\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 const searchParams = new URLSearchParams(window.location.search)\n const title = this.ctx.currentPage.wikiTitle\n payload = {\n ...payload,\n title: title?.getPrefixedDBKey(),\n revision: searchParams.has('oldid') ? Number(searchParams.get('oldid')) : undefined,\n pageId: searchParams.has('curid') ? Number(searchParams.get('curid')) : undefined,\n }\n }\n\n if (!payload.revision && !payload.pageId && payload.title) {\n const realTarget = this.ctx.wikiTitle.resolveSpecialPageTarget(payload.title)\n if (realTarget && realTarget.title.getNamespaceId() >= 0) {\n payload.title = realTarget.title.getPrefixedDBKey()\n payload.section ??= realTarget.section\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get('quickEdit.outSideClose'))!\n const watchList = (await this.ctx.preferences.get('quickEdit.watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get('quickEdit.editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get('quickEdit.editMinor'))!\n const fontOptions = await this.getEditFontOptions()\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('quickEdit.editSummary')) || ''\n }\n 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: IWikiPage\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\n const edittingContent = options.section === 'new' ? '' : wikiPage.revisions[0]?.content || ''\n const edittingRevId = wikiPage.revisions[0]?.revid\n const isEdittingOld = edittingRevId && edittingRevId !== wikiPage.lastrevid\n const isCreatingNewSection = options.section === 'new'\n const isCreatingNewPage = wikiPage.pageid === 0\n\n modal.setTitle(\n (\n <>\n {isCreatingNewSection\n ? $`New Section`\n : $`Quick ${isCreatingNewPage ? 'Create' : 'Edit'}`}\n : <u>{wikiPage.pageInfo.title}</u>\n {isEdittingOld ? ` (${$`Revision`} ${edittingRevId})` : ''}\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (isCreatingNewPage) {\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 (isEdittingOld) {\n editNotices.push(\n <MBox title={$`Attention`} type=\"warning\">\n <p\n innerHTML={$`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\n className=\"ipe-quickEdit__content\"\n style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}\n >\n {options.section === 'new' && (\n <>\n <InputBox\n label={$`Section title`}\n id=\"summary\"\n name=\"summary\"\n value={''}\n inputProps={{ placeholder: $`Topic for new section, this will be the h2 heading` }}\n />\n </>\n )}\n <textarea\n className={`ipe-quickEdit__textarea ${fontOptions.className}`}\n style={{ fontFamily: fontOptions.fontFamily }}\n name=\"text\"\n id=\"wpTextbox1\"\n >\n {edittingContent}\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 {!isCreatingNewSection && (\n <InputBox label={$`Summary`} id=\"summary\" name=\"summary\" value={options.editSummary} />\n )}\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n {$`Watchlist`}\n </label>\n <div style={{ display: 'flex', gap: '1rem', whiteSpace: 'nowrap', overflowX: 'auto' }}>\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={{\n checked: watchList === action,\n onChange: (e) => {\n e.target &&\n (e.target as HTMLElement).closest('label')?.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n })\n },\n }}\n >\n {$`watchlist.${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\n let dismissWarnings = false\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: $`Submit`,\n keyPress: (await this.ctx.preferences.get('quickEdit.keyshortcut.save')) || undefined,\n method: async () => {\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\n try {\n await 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 watchlist: watchList,\n // 如果无视风险,那么就不再尝试解决冲突,直接重建页面\n createonly: wikiPage.pageid === 0 && !dismissWarnings,\n recreate: wikiPage.pageid === 0 && dismissWarnings,\n })\n\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n\n this.ctx.modal.notify('success', {\n title: $`Submission Successful`,\n content: $`Your changes have been saved.`,\n })\n\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n } catch (error) {\n modal.setLoadingState(false)\n\n if (MediaWikiApiError.is(error)) {\n if (\n error.code === 'pagedeleted' ||\n error.code === 'editconflict' ||\n error.code === 'articleexists'\n ) {\n dismissWarnings = true\n this.ctx.modal.notify('warning', {\n title: $`Submission Error`,\n content: (\n <div>\n <p>\n <strong>{error.message}</strong>\n </p>\n <p>{$`You can try to submit again to dismiss the warnings.`}</p>\n </div>\n ),\n closeAfter: 15 * 1000,\n })\n return // can be dismissed by re-submission\n }\n }\n\n // Errors not handled above\n this.ctx.modal.notify('error', {\n title: $`Submission Error`,\n content: error instanceof Error ? error.message : String(error),\n })\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: $`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 === edittingContent) {\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, ...rest } = payload\n\n this.ctx.emit('quick-edit/submit', {\n ctx: this.ctx,\n wikiPage,\n ...rest,\n })\n\n return wikiPage.edit({\n ...rest,\n })\n }\n\n static readonly BUILT_IN_FONT_OPTIONS = ['preferences', 'monospace', 'sans-serif', 'serif']\n async getEditFontOptions() {\n const prefEditFont = (await this.ctx.preferences.get('quickEdit.editFont'))!\n if (PluginQuickEdit.BUILT_IN_FONT_OPTIONS.includes(prefEditFont)) {\n const editfont =\n prefEditFont === 'preferences'\n ? this.ctx.wiki.userOptions?.editfont || 'monospace'\n : prefEditFont\n return {\n className: `mw-editfont-${editfont}`,\n fontFamily: '',\n }\n } else {\n return {\n className: 'mw-editfont-custom',\n fontFamily: prefEditFont,\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 async injectToolbox(ctx: InPageEdit) {\n const { $ } = this.ctx\n const title = this.ctx.currentPage.wikiTitle\n const canEdit = title && title.getNamespaceId() >= 0\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 buttonProps: {\n disabled: !canEdit,\n },\n tooltip: () => (canEdit ? $`Quick Edit` : $`Not editable`),\n onClick: () => {\n const revision = new URLSearchParams(window.location.search).get('oldid')\n this.showModal({\n title: title?.getPrefixedText(),\n revision: revision ? Number(revision) : undefined,\n })\n },\n })\n }\n\n protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n\n createQuickEditButton(\n payload: Partial<QuickEditOptions>,\n options?: {\n icon?: ReactNode\n label?: ReactNode\n }\n ) {\n const { $ } = this.ctx\n const icon = options?.icon ?? <IconQuickEdit className=\"ipe-icon\" />\n const label = options?.label ?? $`Quick Edit`\n return (\n <a\n href={`#ipe://quick-edit/`}\n dataset={payload as any}\n className={`ipe-quick-edit ${payload.createOnly ? 'ipe-quick-edit--create-only' : ''}`}\n style={{\n userSelect: 'none',\n marginLeft: '0.2em',\n }}\n onClick={(e) => {\n e.preventDefault()\n this.showModal(payload)\n }}\n >\n {icon}\n {label}\n </a>\n ) as HTMLAnchorElement\n }\n}\n"],"names":["sleep","ms","resolve","_PluginQuickEdit_decorators","_init","_a","Inject","RegisterPreferences","Schema","WatchlistAction","_PluginQuickEdit","BasePlugin","ctx","makeCallable","payload","$","searchParams","title","realTarget","outSideClose","watchList","editSummary","editMinor","fontOptions","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","edittingContent","edittingRevId","isEdittingOld","isCreatingNewSection","isCreatingNewPage","editNotices","MBox","editForm","InputBox","action","RadioBox","CheckBox","dismissWarnings","formData","noop","error","MediaWikiApiError","oldStr","confirmed","beforeUnload","rest","prefEditFont","canEdit","revision","icon","IconQuickEdit","label","__decoratorStart","__decorateElement","__runInitializers","PluginQuickEdit"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { j as i } from "./index-CM_6yF2v.js";
2
+ import { B as s } from "./BasePlugin-BCVSn9QJ.js";
3
+ class o extends s {
4
+ constructor(e) {
5
+ super(e, {}, "quick-usage"), this.ctx = e, e.set("quickUsage", this);
6
+ }
7
+ async start() {
8
+ import("./PluginTemplatesUsed-DS_rHctR.js").then(
9
+ ({ PluginTemplatesUsed: e }) => this.ctx.plugin(e)
10
+ ), import("./PluginImagesUsed-Bq_C_rgg.js").then(
11
+ ({ PluginImagesUsed: e }) => this.ctx.plugin(e)
12
+ ), this.ctx.inject(["quickUpload", "$"], (e) => {
13
+ e.on("quick-edit/wiki-page", ({ modal: t }) => {
14
+ const { $: a } = e;
15
+ this.getWrapperForQuickEdit(t).appendChild(
16
+ /* @__PURE__ */ i(
17
+ "a",
18
+ {
19
+ href: "#ipe:quick-upload",
20
+ onClick: (r) => {
21
+ r.preventDefault(), e.quickUpload.showModal(), e.emit("analytics/event", { feature: "quick-usage", subtype: "quick-upload" });
22
+ },
23
+ children: a`Quick Upload`
24
+ }
25
+ )
26
+ );
27
+ });
28
+ });
29
+ }
30
+ getWrapperForQuickEdit(e) {
31
+ const t = e.get$content().querySelector(".ipe-quickEdit__usages") || /* @__PURE__ */ i(
32
+ "div",
33
+ {
34
+ className: "ipe-quickEdit__usages",
35
+ style: { display: "flex", gap: "1em", flexWrap: "wrap" }
36
+ }
37
+ );
38
+ return e.get$content().querySelector(".ipe-quickEdit__content")?.insertAdjacentElement("afterend", t), t;
39
+ }
40
+ }
41
+ export {
42
+ o as PluginQuickUsage
43
+ };
44
+ //# sourceMappingURL=index-Cb2_vqBl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Cb2_vqBl.js","sources":["../src/plugins/quick-usage/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\nimport { IPEModal } from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickUsage: PluginQuickUsage\n }\n}\n\nexport class PluginQuickUsage extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-usage')\n ctx.set('quickUsage', this)\n }\n protected async start() {\n import('./PluginTemplatesUsed.js').then(({ PluginTemplatesUsed }) =>\n this.ctx.plugin(PluginTemplatesUsed)\n )\n import('./PluginImagesUsed.js').then(({ PluginImagesUsed }) =>\n this.ctx.plugin(PluginImagesUsed)\n )\n this.ctx.inject(['quickUpload', '$'], (ctx) => {\n ctx.on('quick-edit/wiki-page', ({ modal }) => {\n const { $ } = ctx\n const wrapper = this.getWrapperForQuickEdit(modal)\n wrapper.appendChild(\n <a\n href=\"#ipe:quick-upload\"\n onClick={(e) => {\n e.preventDefault()\n ctx.quickUpload.showModal()\n ctx.emit('analytics/event', { feature: 'quick-usage', subtype: 'quick-upload' })\n }}\n >{$`Quick Upload`}</a>\n )\n })\n })\n }\n getWrapperForQuickEdit(modal: IPEModal) {\n const wrapper = modal.get$content().querySelector('.ipe-quickEdit__usages') || (\n <div\n className=\"ipe-quickEdit__usages\"\n style={{ display: 'flex', gap: '1em', flexWrap: 'wrap' }}\n ></div>\n )\n modal\n .get$content()\n .querySelector('.ipe-quickEdit__content')\n ?.insertAdjacentElement('afterend', wrapper)\n return wrapper\n }\n}\n"],"names":["PluginQuickUsage","BasePlugin","ctx","PluginTemplatesUsed","PluginImagesUsed","modal","$","jsx","e","wrapper"],"mappings":";;AASO,MAAMA,UAAyBC,EAAW;AAAA,EAC/C,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,aAAa,GADX,KAAA,MAAAA,GAEjBA,EAAI,IAAI,cAAc,IAAI;AAAA,EAC5B;AAAA,EACA,MAAgB,QAAQ;AACtB,WAAO,mCAA0B,EAAE;AAAA,MAAK,CAAC,EAAE,qBAAAC,EAAA,MACzC,KAAK,IAAI,OAAOA,CAAmB;AAAA,IAAA,GAErC,OAAO,gCAAuB,EAAE;AAAA,MAAK,CAAC,EAAE,kBAAAC,EAAA,MACtC,KAAK,IAAI,OAAOA,CAAgB;AAAA,IAAA,GAElC,KAAK,IAAI,OAAO,CAAC,eAAe,GAAG,GAAG,CAACF,MAAQ;AAC7C,MAAAA,EAAI,GAAG,wBAAwB,CAAC,EAAE,OAAAG,QAAY;AAC5C,cAAM,EAAE,GAAAC,MAAMJ;AAEd,QADgB,KAAK,uBAAuBG,CAAK,EACzC;AAAA,UACN,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,CAACC,MAAM;AACd,gBAAAA,EAAE,eAAA,GACFN,EAAI,YAAY,UAAA,GAChBA,EAAI,KAAK,mBAAmB,EAAE,SAAS,eAAe,SAAS,gBAAgB;AAAA,cACjF;AAAA,cACA,UAAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QAAgB;AAAA,MAEtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EACA,uBAAuBD,GAAiB;AACtC,UAAMI,IAAUJ,EAAM,YAAA,EAAc,cAAc,wBAAwB,KACxE,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,UAAU,OAAA;AAAA,MAAO;AAAA,IAAA;AAG3D,WAAAF,EACG,cACA,cAAc,yBAAyB,GACtC,sBAAsB,YAAYI,CAAO,GACtCA;AAAA,EACT;AACF;"}
@@ -1,6 +1,6 @@
1
1
  import { j as R } from "./index-CM_6yF2v.js";
2
- import { S as s, E as C, I as j } from "./Preferences-C10tZMl1.js";
3
- import { B as L } from "./BasePlugin-DD7l-5Xw.js";
2
+ import { S as s, E as C, I as j } from "./Preferences-DqtjY7XU.js";
3
+ import { B as L } from "./BasePlugin-BCVSn9QJ.js";
4
4
  import { c as O, d as F } from "./vueHooks-l04s8cIl.js";
5
5
  const G = 1;
6
6
  var m;
@@ -111,7 +111,7 @@ let w = class x extends (T = L) {
111
111
  this.install(t.registry, t.id, t.source, "user-preference");
112
112
  }
113
113
  async _createManagementApp() {
114
- const e = await this.ctx.withInject(["store"]), t = F(() => import("./PluginStoreApp-MbC3G9tu.js"));
114
+ const e = await this.ctx.withInject(["store"]), t = F(() => import("./PluginStoreApp-_YWpLgfs.js"));
115
115
  return O(e, t);
116
116
  }
117
117
  async _injectPreferenceUI() {
@@ -388,4 +388,4 @@ let X = w;
388
388
  export {
389
389
  X as PluginPluginStore
390
390
  };
391
- //# sourceMappingURL=index-B3jld2sl.js.map
391
+ //# sourceMappingURL=index-CbdkXGs7.js.map