@inpageedit/core 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) 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/InputBox-BV4m05Xs.js.map +1 -1
  7. package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
  8. package/dist/RadioBox-nJqWsxW2.js.map +1 -1
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/{index-COlXHFRg.js → index-9Z4ds-WM.js} +281 -268
  11. package/dist/index-9Z4ds-WM.js.map +1 -0
  12. package/dist/{index-DwyuBkCK.js → index-BB9MXkUv.js} +3 -3
  13. package/dist/index-BB9MXkUv.js.map +1 -0
  14. package/dist/{index-DBV8FBjA.js → index-BDVcDlsf.js} +2 -2
  15. package/dist/index-BDVcDlsf.js.map +1 -0
  16. package/dist/index-Bh70Udzi.js.map +1 -1
  17. package/dist/{index-C8dOYIIz.js → index-CADkQBg0.js} +2 -2
  18. package/dist/{index-C8dOYIIz.js.map → index-CADkQBg0.js.map} +1 -1
  19. package/dist/{index-CeXR4lOu.js → index-CBQsBfc2.js} +32 -34
  20. package/dist/{index-CeXR4lOu.js.map → index-CBQsBfc2.js.map} +1 -1
  21. package/dist/{index-mntCdHRr.js → index-CNsB3Vcb.js} +3 -3
  22. package/dist/{index-mntCdHRr.js.map → index-CNsB3Vcb.js.map} +1 -1
  23. package/dist/{index-9M1QcjCN.js → index-CYdxWw9g.js} +124 -123
  24. package/dist/index-CYdxWw9g.js.map +1 -0
  25. package/dist/index-CvhkVj_L.js.map +1 -1
  26. package/dist/{index-Ba7Wkale.js → index-D7SQwFxl.js} +2 -2
  27. package/dist/{index-Ba7Wkale.js.map → index-D7SQwFxl.js.map} +1 -1
  28. package/dist/{index-kRdAN8h3.js → index-DMNUP3fg.js} +2 -2
  29. package/dist/{index-kRdAN8h3.js.map → index-DMNUP3fg.js.map} +1 -1
  30. package/dist/{index-Tn22YSmW.js → index-G3k3kjCU.js} +2 -2
  31. package/dist/index-G3k3kjCU.js.map +1 -0
  32. package/dist/{index-OBerV4GU.js → index-dp6_MU68.js} +2 -2
  33. package/dist/index-dp6_MU68.js.map +1 -0
  34. package/dist/index-lZkYoUca.js.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
  37. package/dist/noop-ClDc6zv4.js.map +1 -1
  38. package/dist/services/CurrentPageService.d.ts +1 -0
  39. package/dist/services/WikiMetadataService.d.ts +1 -1
  40. package/dist/style.css +1 -1
  41. package/lib/index.umd.js +26 -24
  42. package/lib/index.umd.js.map +1 -1
  43. package/lib/style.css +1 -1
  44. package/package.json +3 -3
  45. package/dist/index-9M1QcjCN.js.map +0 -1
  46. package/dist/index-COlXHFRg.js.map +0 -1
  47. package/dist/index-DBV8FBjA.js.map +0 -1
  48. package/dist/index-DwyuBkCK.js.map +0 -1
  49. package/dist/index-OBerV4GU.js.map +0 -1
  50. package/dist/index-Tn22YSmW.js.map +0 -1
@@ -1,40 +1,40 @@
1
- import { j as t, F as w, P as C } from "./index-CvhkVj_L.js";
2
- import { B as M, W as f, I as B, S as m } from "./index-COlXHFRg.js";
3
- import { m as A } from "./makeCallable-LDU0xZMJ.js";
4
- import { R as F } from "./Preferences-Bg3J5Ur9.js";
5
- import { M as S } from "./index-lZkYoUca.js";
6
- import { I as _ } from "./InputBox-BV4m05Xs.js";
7
- import { R as O } from "./RadioBox-nJqWsxW2.js";
8
- import { C as E } from "./CheckBox-D3rHnX7I.js";
9
- import { n as P } from "./noop-ClDc6zv4.js";
10
- const D = (i = 0) => new Promise((e) => setTimeout(e, i));
11
- var j = Object.create, k = Object.defineProperty, L = Object.getOwnPropertyDescriptor, y = (i, e) => (e = Symbol[i]) ? e : Symbol.for("Symbol." + i), q = (i) => {
1
+ import { j as t, F as b, P as O } from "./index-CvhkVj_L.js";
2
+ import { B as D, W as h, I as j, S as u } from "./index-9Z4ds-WM.js";
3
+ import { m as L } from "./makeCallable-LDU0xZMJ.js";
4
+ import { R } from "./Preferences-Bg3J5Ur9.js";
5
+ import { M as y } from "./index-lZkYoUca.js";
6
+ import { I as q } from "./InputBox-BV4m05Xs.js";
7
+ import { R as U } from "./RadioBox-nJqWsxW2.js";
8
+ import { C as N } from "./CheckBox-D3rHnX7I.js";
9
+ import { n as C } from "./noop-ClDc6zv4.js";
10
+ const W = (i = 0) => new Promise((e) => setTimeout(e, i));
11
+ var z = Object.create, _ = Object.defineProperty, Q = Object.getOwnPropertyDescriptor, I = (i, e) => (e = Symbol[i]) ? e : Symbol.for("Symbol." + i), T = (i) => {
12
12
  throw TypeError(i);
13
- }, R = (i, e, a) => e in i ? k(i, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : i[e] = a, U = (i, e) => k(i, "name", { value: e, configurable: !0 }), W = (i) => [, , , j(i?.[y("metadata")] ?? null)], z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], I = (i) => i !== void 0 && typeof i != "function" ? q("Function expected") : i, Q = (i, e, a, l, n) => ({ kind: z[i], name: e, metadata: l, addInitializer: (d) => a._ ? q("Already initialized") : n.push(I(d || null)) }), K = (i, e) => R(e, y("metadata"), i[3]), Y = (i, e, a, l) => {
14
- for (var n = 0, d = i[e >> 1], s = d && d.length; n < s; n++) d[n].call(a);
13
+ }, K = (i, e, c) => e in i ? _(i, e, { enumerable: !0, configurable: !0, writable: !0, value: c }) : i[e] = c, Y = (i, e) => _(i, "name", { value: e, configurable: !0 }), $ = (i) => [, , , z(i?.[I("metadata")] ?? null)], G = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], M = (i) => i !== void 0 && typeof i != "function" ? T("Function expected") : i, H = (i, e, c, l, n) => ({ kind: G[i], name: e, metadata: l, addInitializer: (d) => c._ ? T("Already initialized") : n.push(M(d || null)) }), X = (i, e) => K(e, I("metadata"), i[3]), J = (i, e, c, l) => {
14
+ for (var n = 0, d = i[e >> 1], s = d && d.length; n < s; n++) d[n].call(c);
15
15
  return l;
16
- }, G = (i, e, a, l, n, d) => {
17
- var s, o, c, u = e & 7, g = !1, p = 0, r = i[p] || (i[p] = []), h = u && (n = n.prototype, u < 5 && (u > 3 || !g) && L(n, a));
18
- U(n, a);
19
- for (var v = l.length - 1; v >= 0; v--)
20
- c = Q(u, a, o = {}, i[3], r), s = (0, l[v])(n, c), o._ = 1, I(s) && (n = s);
21
- return K(i, n), h && k(n, a, h), g ? u ^ 4 ? d : h : n;
22
- }, T, b, N;
23
- T = [B(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences"]), F(
24
- m.object({
25
- "quickEdit.editSummary": m.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
26
- "quickEdit.editMinor": m.boolean().description("Whether to mark the edit as minor").default(!1),
27
- "quickEdit.outSideClose": m.boolean().description("Whether to close the modal outside").default(!0),
28
- "quickEdit.watchList": m.union([
29
- m.const(f.preferences).description("Follow my preferences"),
30
- m.const(f.nochange).description("Keep the current watchlist status"),
31
- m.const(f.watch).description("Add the page to watchlist"),
32
- m.const(f.unwatch).description("Remove the page from watchlist")
33
- ]).description("Watchlist options").default(f.preferences),
34
- "quickEdit.keyshortcut.save": m.string().default("ctrl-s").description("save button key shortcut (blank to disable)")
16
+ }, V = (i, e, c, l, n, d) => {
17
+ var s, r, a, g = e & 7, f = !1, w = 0, x = i[w] || (i[w] = []), p = g && (n = n.prototype, g < 5 && (g > 3 || !f) && Q(n, c));
18
+ Y(n, c);
19
+ for (var m = l.length - 1; m >= 0; m--)
20
+ a = H(g, c, r = {}, i[3], x), s = (0, l[m])(n, a), r._ = 1, M(s) && (n = s);
21
+ return X(i, n), p && _(n, c, p), f ? g ^ 4 ? d : p : n;
22
+ }, B, E, A;
23
+ B = [j(["api", "wikiPage", "wikiTitle", "currentPage", "wiki", "modal", "preferences"]), R(
24
+ u.object({
25
+ "quickEdit.editSummary": u.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
26
+ "quickEdit.editMinor": u.boolean().description("Whether to mark the edit as minor").default(!1),
27
+ "quickEdit.outSideClose": u.boolean().description("Whether to close the modal outside").default(!0),
28
+ "quickEdit.watchList": u.union([
29
+ u.const(h.preferences).description("Follow my preferences"),
30
+ u.const(h.nochange).description("Keep the current watchlist status"),
31
+ u.const(h.watch).description("Add the page to watchlist"),
32
+ u.const(h.unwatch).description("Remove the page from watchlist")
33
+ ]).description("Watchlist options").default(h.preferences),
34
+ "quickEdit.keyshortcut.save": u.string().default("ctrl-s").description("save button key shortcut (blank to disable)")
35
35
  }).description("Quick edit options").extra("category", "edit")
36
36
  )];
37
- class x extends (N = M) {
37
+ class S extends (A = D) {
38
38
  constructor(e) {
39
39
  super(e, {}, "quick-edit"), this.ctx = e, this.DEFAULT_OPTIONS = {
40
40
  title: "",
@@ -45,7 +45,7 @@ class x extends (N = M) {
45
45
  editSummary: "",
46
46
  createOnly: !1,
47
47
  reloadAfterSave: !0
48
- }, this.ctx.root.set("quickEdit", A(this, "showModal"));
48
+ }, this.ctx.root.set("quickEdit", L(this, "showModal"));
49
49
  }
50
50
  start() {
51
51
  this.ctx.inject(["toolbox"], (e) => {
@@ -59,39 +59,39 @@ class x extends (N = M) {
59
59
  title: e
60
60
  }), e?.page && (e.title = e.page, delete e.page), !e.title && !e.pageId && !e.revision) {
61
61
  this.logger.warn("None of the title, pageId or revision provided. Using defaults.");
62
- const r = new URLSearchParams(window.location.search), h = this.ctx.currentPage.wikiTitle;
62
+ const o = new URLSearchParams(window.location.search), v = this.ctx.currentPage.wikiTitle;
63
63
  e = {
64
64
  ...e,
65
- title: h?.getPrefixedDBKey(),
66
- revision: r.has("oldid") ? Number(r.get("oldid")) : void 0,
67
- pageId: r.has("curid") ? Number(r.get("curid")) : void 0
65
+ title: v?.getPrefixedDBKey(),
66
+ revision: o.has("oldid") ? Number(o.get("oldid")) : void 0,
67
+ pageId: o.has("curid") ? Number(o.get("curid")) : void 0
68
68
  };
69
69
  }
70
70
  if (!e.revision && !e.pageId && e.title) {
71
- const r = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
72
- r && r.title.getNamespaceId() >= 0 && (e.title = r.title.getPrefixedDBKey(), e.section ??= r.section);
71
+ const o = this.ctx.wikiTitle.resolveSpecialPageTarget(e.title);
72
+ o && o.title.getNamespaceId() >= 0 && (e.title = o.title.getPrefixedDBKey(), e.section ??= o.section);
73
73
  }
74
- const a = await this.ctx.preferences.get("quickEdit.outSideClose"), l = await this.ctx.preferences.get("quickEdit.watchList"), n = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), d = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), s = {
74
+ const c = await this.ctx.preferences.get("quickEdit.outSideClose"), l = await this.ctx.preferences.get("quickEdit.watchList"), n = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("quickEdit.editSummary"), d = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("quickEdit.editMinor"), s = {
75
75
  ...this.DEFAULT_OPTIONS,
76
76
  editSummary: n,
77
77
  editMinor: d,
78
78
  ...e
79
79
  };
80
80
  s.editSummary || (s.editSummary = await this.ctx.preferences.get("quickEdit.editSummary") || ""), this.ctx.emit("quick-edit/init-options", { ctx: this.ctx, options: s });
81
- const o = this.ctx.modal.createObject({
81
+ const r = this.ctx.modal.createObject({
82
82
  className: "ipe-quickEdit",
83
83
  sizeClass: "large",
84
84
  // backdrop: false,
85
85
  // draggable: true,
86
86
  center: !1,
87
- outSideClose: a
87
+ outSideClose: c
88
88
  }).init();
89
- o.setTitle(
90
- /* @__PURE__ */ t(w, { children: [
89
+ r.setTitle(
90
+ /* @__PURE__ */ t(b, { children: [
91
91
  "Loading: ",
92
92
  /* @__PURE__ */ t("u", { children: s.title })
93
93
  ] })
94
- ), o.setContent(
94
+ ), r.setContent(
95
95
  /* @__PURE__ */ t(
96
96
  "section",
97
97
  {
@@ -103,42 +103,43 @@ class x extends (N = M) {
103
103
  justifyContent: "center",
104
104
  alignItems: "center"
105
105
  },
106
- children: /* @__PURE__ */ t(C, {})
106
+ children: /* @__PURE__ */ t(O, {})
107
107
  }
108
108
  )
109
- ), o.addButton({
109
+ ), r.addButton({
110
110
  side: "right",
111
111
  type: "button",
112
112
  className: "is-danger is-ghost",
113
113
  label: "Cancel",
114
114
  method() {
115
- o.close();
115
+ r.close();
116
116
  }
117
- }), o.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: o, options: s });
118
- let c;
117
+ }), r.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: r, options: s });
118
+ let a;
119
119
  try {
120
- if (c = await this.getWikiPageFromPayload(s), c.pageInfo.special)
120
+ if (a = await this.getWikiPageFromPayload(s), a.pageInfo.special)
121
121
  throw new Error("Special page is not editable");
122
- } catch (r) {
123
- o.off(o.Event.Close), o.close(), this.ctx.modal.notify("error", {
124
- content: r instanceof Error ? r.message : String(r)
122
+ } catch (o) {
123
+ r.off(r.Event.Close), r.close(), this.ctx.modal.notify("error", {
124
+ content: o instanceof Error ? o.message : String(o)
125
125
  });
126
126
  return;
127
127
  }
128
- o.setTitle(
129
- /* @__PURE__ */ t(w, { children: [
130
- "Quick ",
131
- c.pageInfo.pageid === 0 ? "Create" : "Edit",
128
+ const g = s.section === "new" ? "" : a.revisions[0]?.content || "", f = a.revisions[0]?.revid, w = f && f !== a.lastrevid, x = s.section === "new", p = a.pageid === 0;
129
+ r.setTitle(
130
+ /* @__PURE__ */ t(b, { children: [
131
+ x ? "New section" : `Quick ${p ? "Create" : "Edit"}`,
132
132
  ":",
133
133
  " ",
134
- /* @__PURE__ */ t("u", { children: c.pageInfo.title })
134
+ /* @__PURE__ */ t("u", { children: a.pageInfo.title }),
135
+ w ? ` (Revision ${f})` : ""
135
136
  ] })
136
137
  );
137
- const u = [];
138
- c.pageInfo.pageid === 0 && u.push(
139
- /* @__PURE__ */ t(S, { title: "Attention", type: "important", children: /* @__PURE__ */ t("p", { children: "This page does not exist." }) })
140
- ), c.pageInfo.pageid && c.pageInfo.lastrevid !== c.revisions[0]?.revid && u.push(
141
- /* @__PURE__ */ t(S, { title: "Attention", type: "warning", children: /* @__PURE__ */ t("p", { children: [
138
+ const m = [];
139
+ p && m.push(
140
+ /* @__PURE__ */ t(y, { title: "Attention", type: "important", children: /* @__PURE__ */ t("p", { children: "This page does not exist." }) })
141
+ ), w && m.push(
142
+ /* @__PURE__ */ t(y, { title: "Attention", type: "warning", children: /* @__PURE__ */ t("p", { children: [
142
143
  "You are editing a ",
143
144
  /* @__PURE__ */ t("em", { children: "historical version" }),
144
145
  "; the content is not the latest!"
@@ -146,20 +147,20 @@ class x extends (N = M) {
146
147
  ), this.ctx.emit("quick-edit/edit-notice", {
147
148
  ctx: this.ctx,
148
149
  options: s,
149
- modal: o,
150
- wikiPage: c,
151
- editNotices: u
150
+ modal: r,
151
+ wikiPage: a,
152
+ editNotices: m
152
153
  });
153
- const g = /* @__PURE__ */ t("form", { className: "ipe-quickEdit__form", children: [
154
- /* @__PURE__ */ t("div", { className: "ipe-quickEdit__notices", children: u }),
154
+ const k = /* @__PURE__ */ t("form", { className: "ipe-quickEdit__form", children: [
155
+ /* @__PURE__ */ t("div", { className: "ipe-quickEdit__notices", children: m }),
155
156
  /* @__PURE__ */ t(
156
157
  "div",
157
158
  {
158
159
  className: "ipe-quickEdit__content",
159
160
  style: { display: "flex", flexDirection: "column", gap: "1rem" },
160
161
  children: [
161
- s.section === "new" && /* @__PURE__ */ t(w, { children: /* @__PURE__ */ t(
162
- _,
162
+ s.section === "new" && /* @__PURE__ */ t(b, { children: /* @__PURE__ */ t(
163
+ q,
163
164
  {
164
165
  label: "Section title",
165
166
  id: "summary",
@@ -168,7 +169,7 @@ class x extends (N = M) {
168
169
  inputProps: { placeholder: "Topic for new section, this will be the h2 heading" }
169
170
  }
170
171
  ) }),
171
- /* @__PURE__ */ t("textarea", { className: "ipe-quickEdit__textarea", name: "text", id: "wpTextbox1", children: s.section === "new" ? "" : c.revisions[0]?.content || "" })
172
+ /* @__PURE__ */ t("textarea", { className: "ipe-quickEdit__textarea", name: "text", id: "wpTextbox1", children: g })
172
173
  ]
173
174
  }
174
175
  ),
@@ -183,70 +184,70 @@ class x extends (N = M) {
183
184
  marginTop: "1rem"
184
185
  },
185
186
  children: [
186
- s.section !== "new" && /* @__PURE__ */ t(_, { label: "Summary", id: "summary", name: "summary", value: s.editSummary }),
187
+ !x && /* @__PURE__ */ t(q, { label: "Summary", id: "summary", name: "summary", value: s.editSummary }),
187
188
  /* @__PURE__ */ t("div", { className: "ipe-input-box", children: [
188
189
  /* @__PURE__ */ t("label", { htmlFor: "watchlist", style: { display: "block" }, children: "Watchlist" }),
189
190
  /* @__PURE__ */ t("div", { style: { display: "flex", gap: "1rem" }, children: [
190
- f.preferences,
191
- f.nochange,
192
- f.watch,
193
- f.unwatch
194
- ].map((r) => /* @__PURE__ */ t(
195
- O,
191
+ h.preferences,
192
+ h.nochange,
193
+ h.watch,
194
+ h.unwatch
195
+ ].map((o) => /* @__PURE__ */ t(
196
+ U,
196
197
  {
197
198
  name: "watchlist",
198
- value: r,
199
- inputProps: { checked: l === r },
200
- children: r
199
+ value: o,
200
+ inputProps: { checked: l === o },
201
+ children: o
201
202
  },
202
- r
203
+ o
203
204
  )) })
204
205
  ] }),
205
206
  /* @__PURE__ */ t("div", { style: { display: "flex", gap: "1rem" }, children: [
206
- /* @__PURE__ */ t(E, { name: "minor", id: "minor", checked: s.editMinor, children: "Minor edit" }),
207
- /* @__PURE__ */ t(E, { name: "reloadAfterSave", id: "reloadAfterSave", checked: s.reloadAfterSave, children: "Reload after save" })
207
+ /* @__PURE__ */ t(N, { name: "minor", id: "minor", checked: s.editMinor, children: "Minor edit" }),
208
+ /* @__PURE__ */ t(N, { name: "reloadAfterSave", id: "reloadAfterSave", checked: s.reloadAfterSave, children: "Reload after save" })
208
209
  ] })
209
210
  ]
210
211
  }
211
212
  ),
212
213
  !1
213
214
  ] });
214
- o.setContent(g), o.addButton(
215
+ r.setContent(k), r.addButton(
215
216
  {
216
217
  side: "left",
217
218
  className: "is-primary submit-btn",
218
219
  label: "Submit",
219
220
  keyPress: await this.ctx.preferences.get("quickEdit.keyshortcut.save") || void 0,
220
221
  method: () => {
221
- const r = new FormData(g);
222
- o.setLoadingState(!0), this.handleSubmit({
223
- wikiPage: c,
224
- text: r.get("text"),
225
- summary: r.get("summary"),
226
- minor: r.get("minor") === "on",
222
+ const o = new FormData(k);
223
+ r.setLoadingState(!0), this.handleSubmit({
224
+ wikiPage: a,
225
+ text: o.get("text"),
226
+ summary: o.get("summary"),
227
+ minor: o.get("minor") === "on",
227
228
  section: s.section,
228
- createonly: c.pageid === 0,
229
+ createonly: a.pageid === 0,
229
230
  watchlist: l
230
231
  }).then(async () => {
231
- o.setOptions({
232
- beforeClose: P
233
- }), o.close(), this.ctx.modal.notify("success", {
232
+ r.setOptions({
233
+ beforeClose: C
234
+ }), r.close(), this.ctx.modal.notify("success", {
234
235
  title: "Submission Successful",
235
236
  content: "Your changes have been saved."
236
- }), r.get("reloadAfterSave") && (await D(500), location.reload());
237
- }).catch((h) => {
237
+ }), o.get("reloadAfterSave") && (await W(500), location.reload());
238
+ }).catch((v) => {
238
239
  this.ctx.modal.notify("error", {
239
240
  title: "Submission Error",
240
- content: h instanceof Error ? h.message : String(h)
241
- }), o.setLoadingState(!1);
241
+ content: v instanceof Error ? v.message : String(v)
242
+ }), r.setLoadingState(!1);
242
243
  });
243
244
  }
244
245
  },
245
246
  0
246
- ), o.setOptions({
247
+ ), r.setOptions({
247
248
  beforeClose: () => {
248
- const r = c.revisions[0]?.content || "";
249
- return (g.querySelector("textarea")?.value || "") === r ? !0 : (this.ctx.modal.confirm(
249
+ const o = a.revisions[0]?.content || "";
250
+ return (k.querySelector("textarea")?.value || "") === o ? !0 : (this.ctx.modal.confirm(
250
251
  {
251
252
  className: "is-primary",
252
253
  title: "Unsaved Changes",
@@ -261,30 +262,30 @@ class x extends (N = M) {
261
262
  className: "is-primary is-ghost"
262
263
  }
263
264
  },
264
- (v) => (v && (o.setOptions({
265
- beforeClose: P
266
- }), o.close()), !0)
265
+ (F) => (F && (r.setOptions({
266
+ beforeClose: C
267
+ }), r.close()), !0)
267
268
  ), !1);
268
269
  }
269
270
  }), this.ctx.emit("quick-edit/wiki-page", {
270
271
  ctx: this.ctx,
271
272
  options: s,
272
- modal: o,
273
- wikiPage: c
273
+ modal: r,
274
+ wikiPage: a
274
275
  });
275
- const p = (r) => g.querySelector("textarea")?.value === c.revisions[0]?.content ? !0 : (r.preventDefault(), "You have unsaved changes. Are you sure you want to leave?");
276
- window.addEventListener("beforeunload", p), o.on(o.Event.Close, () => {
277
- window.removeEventListener("beforeunload", p);
276
+ const P = (o) => k.querySelector("textarea")?.value === a.revisions[0]?.content ? !0 : (o.preventDefault(), "You have unsaved changes. Are you sure you want to leave?");
277
+ window.addEventListener("beforeunload", P), r.on(r.Event.Close, () => {
278
+ window.removeEventListener("beforeunload", P);
278
279
  });
279
280
  }
280
281
  async handleSubmit(e) {
281
- const a = e.wikiPage, l = e.summary || "", n = e.text || "", d = e.minor, s = e.createonly, o = e.watchlist, c = e.section;
282
- return a.edit(
282
+ const c = e.wikiPage, l = e.summary || "", n = e.text || "", d = e.minor, s = e.createonly, r = e.watchlist, a = e.section;
283
+ return c.edit(
283
284
  {
284
285
  summary: l,
285
286
  text: n,
286
- watchlist: o,
287
- section: c
287
+ watchlist: r,
288
+ section: a
288
289
  },
289
290
  {
290
291
  minor: d,
@@ -302,7 +303,7 @@ class x extends (N = M) {
302
303
  throw new Error("Invalid payload");
303
304
  }
304
305
  async injectToolbox(e) {
305
- const a = this.ctx.currentPage.wikiTitle, l = this.ctx.wiki.hasRight("edit") && a && a.getNamespaceId() >= 0;
306
+ const c = this.ctx.currentPage.wikiTitle, l = this.ctx.wiki.hasRight("edit") && c && c.getNamespaceId() >= 0;
306
307
  e.toolbox.addButton({
307
308
  id: "quick-edit",
308
309
  group: "group1",
@@ -335,7 +336,7 @@ class x extends (N = M) {
335
336
  onClick: () => {
336
337
  const n = new URLSearchParams(window.location.search).get("oldid");
337
338
  this.showModal({
338
- title: a?.getPrefixedText(),
339
+ title: c?.getPrefixedText(),
339
340
  revision: n ? Number(n) : void 0
340
341
  });
341
342
  }
@@ -345,10 +346,10 @@ class x extends (N = M) {
345
346
  e.toolbox.removeButton("quick-edit");
346
347
  }
347
348
  }
348
- b = W(N);
349
- x = G(b, 0, "PluginQuickEdit", T, x);
350
- Y(b, 1, x);
349
+ E = $(A);
350
+ S = V(E, 0, "PluginQuickEdit", B, S);
351
+ J(E, 1, S);
351
352
  export {
352
- x as PluginQuickEdit
353
+ S as PluginQuickEdit
353
354
  };
354
- //# sourceMappingURL=index-9M1QcjCN.js.map
355
+ //# sourceMappingURL=index-CYdxWw9g.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CYdxWw9g.js","sources":["../src/utils/sleep.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["export const sleep = (ms: number = 0) =>\r\n new Promise((resolve) => setTimeout(resolve, ms))\r\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'\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 }\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 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('Whether to mark the edit as minor')\n .default(false),\n 'quickEdit.outSideClose': Schema.boolean()\n .description('Whether to close the modal outside')\n .default(true),\n 'quickEdit.watchList': Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n 'quickEdit.keyshortcut.save': Schema.string()\n .default('ctrl-s')\n .description('save button key shortcut (blank to disable)'),\n })\n .description('Quick edit options')\n .extra('category', 'edit')\n)\nexport class PluginQuickEdit extends BasePlugin {\n private readonly DEFAULT_OPTIONS: QuickEditOptions = {\n title: '',\n pageId: 0,\n revision: 0,\n section: undefined,\n editMinor: false,\n editSummary: '',\n createOnly: false,\n reloadAfterSave: true,\n }\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-edit')\n this.ctx.root.set('quickEdit', makeCallable(this, 'showModal'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n }\n\n async showModal(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n 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<boolean>('quickEdit.outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('quickEdit.watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('quickEdit.editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('quickEdit.editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('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 editContent = options.section === 'new' ? '' : wikiPage.revisions[0]?.content || ''\n const editRevId = wikiPage.revisions[0]?.revid\n const isEdittingOld = editRevId && editRevId !== wikiPage.lastrevid\n const isCreatingNewSection = options.section === 'new'\n const isCreatingNewPage = wikiPage.pageid === 0\n\n modal.setTitle(\n (\n <>\n {isCreatingNewSection ? 'New section' : `Quick ${isCreatingNewPage ? 'Create' : 'Edit'}`}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n {isEdittingOld ? ` (Revision ${editRevId})` : ''}\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 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 className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {editContent}\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' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n keyPress:\n (await this.ctx.preferences.get<string>('quickEdit.keyshortcut.save')) || undefined,\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit({\n wikiPage,\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n section: options.section,\n createonly: wikiPage.pageid === 0,\n watchlist: watchList,\n })\n .then(async () => {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Submission Successful',\n content: 'Your changes have been saved.',\n })\n if (formData.get('reloadAfterSave')) {\n await sleep(500)\n location.reload()\n }\n })\n .catch((error) => {\n this.ctx.modal.notify('error', {\n title: 'Submission Error',\n content: error instanceof Error ? error.message : String(error),\n })\n modal.setLoadingState(false)\n })\n },\n },\n 0\n )\n modal.setOptions({\n beforeClose: () => {\n const oldStr = wikiPage.revisions[0]?.content || ''\n const newStr = editForm.querySelector('textarea')?.value || ''\n if (newStr === oldStr) {\n return true\n } else {\n this.ctx.modal.confirm(\n {\n className: 'is-primary',\n title: 'Unsaved Changes',\n content:\n 'All edit contents will be lost after closing the modal. Are you sure you want to close?',\n center: true,\n okBtn: {\n label: 'Give Up',\n className: 'is-danger is-ghost',\n },\n cancelBtn: {\n label: 'Continue Editing',\n className: 'is-primary is-ghost',\n },\n },\n (confirmed) => {\n if (confirmed) {\n modal.setOptions({\n beforeClose: noop,\n })\n modal.close()\n }\n return true\n }\n )\n return false\n }\n },\n })\n this.ctx.emit('quick-edit/wiki-page', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n })\n\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (editForm.querySelector('textarea')?.value === wikiPage.revisions[0]?.content) {\n return true\n }\n e.preventDefault()\n return 'You have unsaved changes. Are you sure you want to leave?'\n }\n window.addEventListener('beforeunload', beforeUnload)\n modal.on(modal.Event.Close, () => {\n window.removeEventListener('beforeunload', beforeUnload)\n })\n }\n\n async handleSubmit(payload: QuickEditSubmitPayload) {\n const wikiPage = payload.wikiPage\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor\n const createonly = payload.createonly\n const watchlist = payload.watchlist\n const section = payload.section\n\n return wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n async getWikiPageFromPayload(payload: Partial<QuickEditOptions>) {\n if (payload.revision) {\n return this.ctx.wikiPage.newFromRevision(payload.revision, payload.section)\n } else if (payload.pageId) {\n return this.ctx.wikiPage.newFromPageId(payload.pageId, payload.section)\n } else if (payload.title) {\n return this.ctx.wikiPage.newFromTitle(payload.title, false, payload.section)\n }\n throw new Error('Invalid payload')\n }\n\n private async injectToolbox(ctx: InPageEdit) {\n const title = this.ctx.currentPage.wikiTitle\n const canEdit = this.ctx.wiki.hasRight('edit') && 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"],"names":["sleep","ms","resolve","_PluginQuickEdit_decorators","_init","_a","Inject","RegisterPreferences","Schema","WatchlistAction","PluginQuickEdit","BasePlugin","ctx","makeCallable","payload","searchParams","title","realTarget","outSideClose","watchList","editSummary","editMinor","options","modal","jsxs","Fragment","jsx","ProgressBar","wikiPage","e","editContent","editRevId","isEdittingOld","isCreatingNewSection","isCreatingNewPage","editNotices","MBox","editForm","InputBox","action","RadioBox","CheckBox","formData","noop","error","oldStr","confirmed","beforeUnload","summary","text","minor","createonly","watchlist","section","canEdit","revision","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}