@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.
- package/LICENSE +20 -20
- package/README.md +55 -55
- package/dist/ActionButton-BgbTKTg7.js.map +1 -1
- package/dist/CheckBox-D3rHnX7I.js.map +1 -1
- package/dist/IconQuickEdit-CAL1HXIb.js.map +1 -1
- package/dist/InputBox-BV4m05Xs.js.map +1 -1
- package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
- package/dist/RadioBox-nJqWsxW2.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/{index-COlXHFRg.js → index-9Z4ds-WM.js} +281 -268
- package/dist/index-9Z4ds-WM.js.map +1 -0
- package/dist/{index-DwyuBkCK.js → index-BB9MXkUv.js} +3 -3
- package/dist/index-BB9MXkUv.js.map +1 -0
- package/dist/{index-DBV8FBjA.js → index-BDVcDlsf.js} +2 -2
- package/dist/index-BDVcDlsf.js.map +1 -0
- package/dist/index-Bh70Udzi.js.map +1 -1
- package/dist/{index-C8dOYIIz.js → index-CADkQBg0.js} +2 -2
- package/dist/{index-C8dOYIIz.js.map → index-CADkQBg0.js.map} +1 -1
- package/dist/{index-CeXR4lOu.js → index-CBQsBfc2.js} +32 -34
- package/dist/{index-CeXR4lOu.js.map → index-CBQsBfc2.js.map} +1 -1
- package/dist/{index-mntCdHRr.js → index-CNsB3Vcb.js} +3 -3
- package/dist/{index-mntCdHRr.js.map → index-CNsB3Vcb.js.map} +1 -1
- package/dist/{index-9M1QcjCN.js → index-CYdxWw9g.js} +124 -123
- package/dist/index-CYdxWw9g.js.map +1 -0
- package/dist/index-CvhkVj_L.js.map +1 -1
- package/dist/{index-Ba7Wkale.js → index-D7SQwFxl.js} +2 -2
- package/dist/{index-Ba7Wkale.js.map → index-D7SQwFxl.js.map} +1 -1
- package/dist/{index-kRdAN8h3.js → index-DMNUP3fg.js} +2 -2
- package/dist/{index-kRdAN8h3.js.map → index-DMNUP3fg.js.map} +1 -1
- package/dist/{index-Tn22YSmW.js → index-G3k3kjCU.js} +2 -2
- package/dist/index-G3k3kjCU.js.map +1 -0
- package/dist/{index-OBerV4GU.js → index-dp6_MU68.js} +2 -2
- package/dist/index-dp6_MU68.js.map +1 -0
- package/dist/index-lZkYoUca.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/makeCallable-LDU0xZMJ.js.map +1 -1
- package/dist/noop-ClDc6zv4.js.map +1 -1
- package/dist/services/CurrentPageService.d.ts +1 -0
- package/dist/services/WikiMetadataService.d.ts +1 -1
- package/dist/style.css +1 -1
- package/lib/index.umd.js +26 -24
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +3 -3
- package/dist/index-9M1QcjCN.js.map +0 -1
- package/dist/index-COlXHFRg.js.map +0 -1
- package/dist/index-DBV8FBjA.js.map +0 -1
- package/dist/index-DwyuBkCK.js.map +0 -1
- package/dist/index-OBerV4GU.js.map +0 -1
- package/dist/index-Tn22YSmW.js.map +0 -1
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { j as t, F as
|
|
2
|
-
import { B as
|
|
3
|
-
import { m as
|
|
4
|
-
import { R
|
|
5
|
-
import { M as
|
|
6
|
-
import { I as
|
|
7
|
-
import { R as
|
|
8
|
-
import { C as
|
|
9
|
-
import { n as
|
|
10
|
-
const
|
|
11
|
-
var
|
|
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
|
-
},
|
|
14
|
-
for (var n = 0, d = i[e >> 1], s = d && d.length; n < s; n++) d[n].call(
|
|
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
|
-
},
|
|
17
|
-
var s,
|
|
18
|
-
|
|
19
|
-
for (var
|
|
20
|
-
|
|
21
|
-
return
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"quickEdit.editSummary":
|
|
26
|
-
"quickEdit.editMinor":
|
|
27
|
-
"quickEdit.outSideClose":
|
|
28
|
-
"quickEdit.watchList":
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
]).description("Watchlist options").default(
|
|
34
|
-
"quickEdit.keyshortcut.save":
|
|
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
|
|
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",
|
|
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
|
|
62
|
+
const o = new URLSearchParams(window.location.search), v = this.ctx.currentPage.wikiTitle;
|
|
63
63
|
e = {
|
|
64
64
|
...e,
|
|
65
|
-
title:
|
|
66
|
-
revision:
|
|
67
|
-
pageId:
|
|
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
|
|
72
|
-
|
|
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
|
|
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
|
|
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:
|
|
87
|
+
outSideClose: c
|
|
88
88
|
}).init();
|
|
89
|
-
|
|
90
|
-
/* @__PURE__ */ t(
|
|
89
|
+
r.setTitle(
|
|
90
|
+
/* @__PURE__ */ t(b, { children: [
|
|
91
91
|
"Loading: ",
|
|
92
92
|
/* @__PURE__ */ t("u", { children: s.title })
|
|
93
93
|
] })
|
|
94
|
-
),
|
|
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(
|
|
106
|
+
children: /* @__PURE__ */ t(O, {})
|
|
107
107
|
}
|
|
108
108
|
)
|
|
109
|
-
),
|
|
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
|
-
|
|
115
|
+
r.close();
|
|
116
116
|
}
|
|
117
|
-
}),
|
|
118
|
-
let
|
|
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 (
|
|
120
|
+
if (a = await this.getWikiPageFromPayload(s), a.pageInfo.special)
|
|
121
121
|
throw new Error("Special page is not editable");
|
|
122
|
-
} catch (
|
|
123
|
-
|
|
124
|
-
content:
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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:
|
|
134
|
+
/* @__PURE__ */ t("u", { children: a.pageInfo.title }),
|
|
135
|
+
w ? ` (Revision ${f})` : ""
|
|
135
136
|
] })
|
|
136
137
|
);
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
/* @__PURE__ */ t(
|
|
140
|
-
),
|
|
141
|
-
/* @__PURE__ */ t(
|
|
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:
|
|
150
|
-
wikiPage:
|
|
151
|
-
editNotices:
|
|
150
|
+
modal: r,
|
|
151
|
+
wikiPage: a,
|
|
152
|
+
editNotices: m
|
|
152
153
|
});
|
|
153
|
-
const
|
|
154
|
-
/* @__PURE__ */ t("div", { className: "ipe-quickEdit__notices", children:
|
|
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(
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
].map((
|
|
195
|
-
|
|
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:
|
|
199
|
-
inputProps: { checked: l ===
|
|
200
|
-
children:
|
|
199
|
+
value: o,
|
|
200
|
+
inputProps: { checked: l === o },
|
|
201
|
+
children: o
|
|
201
202
|
},
|
|
202
|
-
|
|
203
|
+
o
|
|
203
204
|
)) })
|
|
204
205
|
] }),
|
|
205
206
|
/* @__PURE__ */ t("div", { style: { display: "flex", gap: "1rem" }, children: [
|
|
206
|
-
/* @__PURE__ */ t(
|
|
207
|
-
/* @__PURE__ */ t(
|
|
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
|
-
|
|
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
|
|
222
|
-
|
|
223
|
-
wikiPage:
|
|
224
|
-
text:
|
|
225
|
-
summary:
|
|
226
|
-
minor:
|
|
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:
|
|
229
|
+
createonly: a.pageid === 0,
|
|
229
230
|
watchlist: l
|
|
230
231
|
}).then(async () => {
|
|
231
|
-
|
|
232
|
-
beforeClose:
|
|
233
|
-
}),
|
|
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
|
-
}),
|
|
237
|
-
}).catch((
|
|
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:
|
|
241
|
-
}),
|
|
241
|
+
content: v instanceof Error ? v.message : String(v)
|
|
242
|
+
}), r.setLoadingState(!1);
|
|
242
243
|
});
|
|
243
244
|
}
|
|
244
245
|
},
|
|
245
246
|
0
|
|
246
|
-
),
|
|
247
|
+
), r.setOptions({
|
|
247
248
|
beforeClose: () => {
|
|
248
|
-
const
|
|
249
|
-
return (
|
|
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
|
-
(
|
|
265
|
-
beforeClose:
|
|
266
|
-
}),
|
|
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:
|
|
273
|
-
wikiPage:
|
|
273
|
+
modal: r,
|
|
274
|
+
wikiPage: a
|
|
274
275
|
});
|
|
275
|
-
const
|
|
276
|
-
window.addEventListener("beforeunload",
|
|
277
|
-
window.removeEventListener("beforeunload",
|
|
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
|
|
282
|
-
return
|
|
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:
|
|
287
|
-
section:
|
|
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
|
|
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:
|
|
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
|
-
|
|
349
|
-
|
|
350
|
-
|
|
349
|
+
E = $(A);
|
|
350
|
+
S = V(E, 0, "PluginQuickEdit", B, S);
|
|
351
|
+
J(E, 1, S);
|
|
351
352
|
export {
|
|
352
|
-
|
|
353
|
+
S as PluginQuickEdit
|
|
353
354
|
};
|
|
354
|
-
//# sourceMappingURL=index-
|
|
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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"}
|