@inpageedit/core 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +55 -55
- package/dist/ActionButton-BgbTKTg7.js.map +1 -1
- package/dist/InputBox-FIzJ-rPN.js.map +1 -1
- package/dist/Preferences-Bg3J5Ur9.js.map +1 -1
- package/dist/RadioBox-CaA8VgLu.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/{index-QF8lvEam.js → index-3FdvKxaN.js} +3 -3
- package/dist/index-3FdvKxaN.js.map +1 -0
- package/dist/{index-Dk3xR25y.js → index-6bp2nmez.js} +15 -15
- package/dist/index-6bp2nmez.js.map +1 -0
- package/dist/{index-BIgWRk98.js → index-B0QzYk-q.js} +3 -3
- package/dist/{index-BIgWRk98.js.map → index-B0QzYk-q.js.map} +1 -1
- package/dist/index-Bh70Udzi.js.map +1 -1
- package/dist/{index-BMmKF_kG.js → index-BwVAO_o4.js} +2 -2
- package/dist/index-BwVAO_o4.js.map +1 -0
- package/dist/{index-CBphMyYJ.js → index-CIzmjtBz.js} +9 -9
- package/dist/index-CIzmjtBz.js.map +1 -0
- package/dist/index-CvhkVj_L.js.map +1 -1
- package/dist/{index-DNm9SNqM.js → index-D1plOuGc.js} +21 -21
- package/dist/{index-DNm9SNqM.js.map → index-D1plOuGc.js.map} +1 -1
- package/dist/{index-CJLKdEqr.js → index-DXvJqlhL.js} +2 -2
- package/dist/index-DXvJqlhL.js.map +1 -0
- package/dist/{index-Djd6Ddcm.js → index-DlE7PWxs.js} +152 -138
- package/dist/index-DlE7PWxs.js.map +1 -0
- package/dist/{index-CX5H4xCe.js → index-DnpXoEP3.js} +4 -4
- package/dist/index-DnpXoEP3.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/plugins/in-article-links/index.d.ts +31 -0
- package/dist/plugins/quick-edit/index.d.ts +7 -3
- package/dist/plugins/quick-preview/index.d.ts +2 -2
- package/dist/plugins/toolbox/index.d.ts +2 -2
- package/dist/sleep-DpyIipK-.js.map +1 -1
- package/dist/style.css +1 -1
- package/lib/index.umd.js +26 -26
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/dist/index-BMmKF_kG.js.map +0 -1
- package/dist/index-CBphMyYJ.js.map +0 -1
- package/dist/index-CJLKdEqr.js.map +0 -1
- package/dist/index-CX5H4xCe.js.map +0 -1
- package/dist/index-Djd6Ddcm.js.map +0 -1
- package/dist/index-Dk3xR25y.js.map +0 -1
- package/dist/index-QF8lvEam.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as e, P as l } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { B as d } from "./index-
|
|
2
|
+
import { B as d } from "./index-CIzmjtBz.js";
|
|
3
3
|
import { T as m } from "./index-Bh70Udzi.js";
|
|
4
4
|
import { I as u, C as h } from "./InputBox-FIzJ-rPN.js";
|
|
5
5
|
class v extends d {
|
|
@@ -155,4 +155,4 @@ class v extends d {
|
|
|
155
155
|
export {
|
|
156
156
|
v as PluginQuickRedirect
|
|
157
157
|
};
|
|
158
|
-
//# sourceMappingURL=index-
|
|
158
|
+
//# sourceMappingURL=index-DXvJqlhL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DXvJqlhL.js","sources":["../src/plugins/quick-redirect/index.tsx"],"sourcesContent":["import { InPageEdit } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickRedirect: PluginQuickRedirect['quickRedirect']\n redirectPage: PluginQuickRedirect['redirectPage']\n }\n}\n\nexport interface RedirectPageOptions {\n from: string\n to: string\n reason?: string\n overwrite?: boolean\n}\nexport interface QuickRedirectOptions extends Partial<RedirectPageOptions> {}\n\nexport class PluginQuickRedirect extends BasePlugin {\n static readonly inject = ['api', 'wikiPage', 'modal']\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quick-redirect')\n }\n\n protected start(): Promise<void> | void {\n this.ctx.set('quickRedirect', this.quickRedirect.bind(this))\n this.ctx.set('redirectPage', this.redirectPage.bind(this))\n\n const curPageName = window.mw?.config.get('wgPageName') || ''\n const canEdit = window.mw?.config.get('wgIsProbablyEditable')\n this.ctx.inject(['toolbox'], (ctx) => {\n this.ctx = ctx\n ctx.toolbox.addButton({\n id: 'quick-redirect',\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-file-symlink\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 21v-4a3 3 0 0 1 3 -3h5\" />\n <path d=\"M9 17l3 -3l-3 -3\" />\n <path d=\"M14 3v4a1 1 0 0 0 1 1h4\" />\n <path d=\"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Quick Redirect',\n group: 'group1',\n onClick: () => {\n this.quickRedirect(\n canEdit\n ? {\n to: curPageName,\n }\n : {}\n )\n },\n })\n this.addDisposeHandler((ctx) => {\n ctx.toolbox.removeButton('quick-redirect')\n })\n })\n }\n\n protected stop(): Promise<void> | void {}\n\n quickRedirect(options?: Partial<QuickRedirectOptions>) {\n const modal = this.ctx.modal\n .createObject({\n title: 'Quick Redirect',\n content: (<ProgressBar />) as HTMLElement,\n className: 'quick-redirect compact-buttons',\n sizeClass: 'medium',\n center: true,\n })\n .init()\n\n let formRef: HTMLFormElement | null = null\n modal.setContent(\n (\n <form\n ref={(el) => (formRef = el)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n }}\n onSubmit={(e) => {\n e.preventDefault()\n formRef?.checkValidity()\n if (!formRef?.reportValidity()) {\n return\n }\n const formData = new FormData(formRef!)\n const options = {\n from: formData.get('from')?.toString().trim()!,\n to: formData.get('to')?.toString().trim()!,\n reason: (formData.get('reason') as string) || '',\n overwrite: formData.get('overwrite') === 'on',\n }\n if (!options.from || !options.to) {\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: 'From and to are required.',\n })\n return\n }\n modal.setLoadingState(true)\n this.redirectPage(options)\n .then((res) => {\n modal.close()\n this.ctx.modal.notify('success', {\n title: 'Redirect successful',\n content: 'The redirect has been created.',\n })\n })\n .catch((error) => {\n modal.setLoadingState(false)\n this.ctx.modal.notify('error', {\n title: 'Failed to redirect',\n content: error instanceof Error ? error.message : String(error),\n })\n })\n }}\n >\n <TwinSwapInput\n inputs={[\n {\n label: 'From',\n name: 'from',\n value: options?.from,\n required: true,\n },\n {\n label: 'To',\n name: 'to',\n value: options?.to,\n required: true,\n },\n ]}\n />\n <InputBox label=\"Reason\" id=\"reason\" name=\"reason\" value={options?.reason} />\n <div>\n <CheckBox name=\"overwrite\" id=\"overwrite\" checked={options?.overwrite}>\n Force create redirect even if the from page already exists\n </CheckBox>\n </div>\n </form>\n ) as HTMLFormElement\n )\n modal.setButtons([\n {\n label: 'Create Redirect',\n className: 'is-primary is-ghost',\n method: () => {\n formRef?.dispatchEvent(new Event('submit'))\n },\n },\n ])\n\n return modal.show()\n }\n\n async redirectPage(options: RedirectPageOptions) {\n const { from, to, reason = '', overwrite = false } = options\n const wikiPage = await this.ctx.wikiPage.newBlankPage({\n title: from,\n })\n const content = `#REDIRECT [[:${to}]]`\n const res = await wikiPage.edit(\n {\n text: content,\n summary: reason,\n },\n {\n createonly: !overwrite,\n }\n )\n if (res.data?.errors) {\n throw new Error(res.data.errors[0].text, { cause: res })\n }\n return res\n }\n}\n"],"names":["PluginQuickRedirect","BasePlugin","ctx","curPageName","canEdit","jsxs","jsx","options","modal","ProgressBar","formRef","el","e","formData","res","error","TwinSwapInput","InputBox","CheckBox","from","to","reason","overwrite","wikiPage","content"],"mappings":"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"}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { B as
|
|
1
|
+
import { j as o, F as E, P as D } from "./index-CvhkVj_L.js";
|
|
2
|
+
import { B as A, a as q, S as m, W as f } from "./index-CIzmjtBz.js";
|
|
3
3
|
import { R as C } from "./Preferences-Bg3J5Ur9.js";
|
|
4
|
-
import {
|
|
5
|
-
import { I as z, C as
|
|
4
|
+
import { R as Q, M as y } from "./RadioBox-CaA8VgLu.js";
|
|
5
|
+
import { I as z, C as P } from "./InputBox-FIzJ-rPN.js";
|
|
6
6
|
import { s as R } from "./sleep-DpyIipK-.js";
|
|
7
|
-
var W = Object.create,
|
|
7
|
+
var W = Object.create, _ = Object.defineProperty, H = Object.getOwnPropertyDescriptor, N = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), $ = (t) => {
|
|
8
8
|
throw TypeError(t);
|
|
9
|
-
},
|
|
10
|
-
for (var i = 0,
|
|
11
|
-
return
|
|
12
|
-
}, ee = (t, e, r,
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
for (var
|
|
16
|
-
|
|
17
|
-
return V(t, i),
|
|
18
|
-
}, M,
|
|
19
|
-
M = [
|
|
20
|
-
|
|
21
|
-
redLinkEdit:
|
|
9
|
+
}, Y = (t, e, r) => e in t ? _(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, X = (t, e) => _(t, "name", { value: e, configurable: !0 }), G = (t) => [, , , W(t?.[N("metadata")] ?? null)], K = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], L = (t) => t !== void 0 && typeof t != "function" ? $("Function expected") : t, J = (t, e, r, c, i) => ({ kind: K[t], name: e, metadata: c, addInitializer: (a) => r._ ? $("Already initialized") : i.push(L(a || null)) }), V = (t, e) => Y(e, N("metadata"), t[3]), Z = (t, e, r, c) => {
|
|
10
|
+
for (var i = 0, a = t[e >> 1], s = a && a.length; i < s; i++) a[i].call(r);
|
|
11
|
+
return c;
|
|
12
|
+
}, ee = (t, e, r, c, i, a) => {
|
|
13
|
+
var s, n, l, u = e & 7, p = !1, v = 0, d = t[v] || (t[v] = []), h = u && (i = i.prototype, u < 5 && (u > 3 || !p) && H(i, r));
|
|
14
|
+
X(i, r);
|
|
15
|
+
for (var g = c.length - 1; g >= 0; g--)
|
|
16
|
+
l = J(u, r, n = {}, t[3], d), s = (0, c[g])(i, l), n._ = 1, L(s) && (i = s);
|
|
17
|
+
return V(t, i), h && _(i, r, h), p ? u ^ 4 ? a : h : i;
|
|
18
|
+
}, M, x, B;
|
|
19
|
+
M = [q(["sitemeta", "quickEdit"]), C(
|
|
20
|
+
m.object({
|
|
21
|
+
redLinkEdit: m.boolean().description("Show quick edit entry after red links").default(!0)
|
|
22
22
|
}).description("In-article quick edit links"),
|
|
23
23
|
{
|
|
24
24
|
redLinkEdit: !0
|
|
25
25
|
}
|
|
26
26
|
)];
|
|
27
|
-
class w extends (
|
|
27
|
+
class w extends (B = A) {
|
|
28
28
|
constructor(e) {
|
|
29
|
-
const r = e.sitemeta.mwConfig,
|
|
29
|
+
const r = e.sitemeta.mwConfig, c = r.wgArticlePath.replace("$1", ""), i = `${location.protocol}//${r.wgServer.split("//")[1]}`;
|
|
30
30
|
super(
|
|
31
31
|
e,
|
|
32
32
|
{
|
|
33
33
|
wikiBaseUrl: i,
|
|
34
|
-
wikiArticlePath:
|
|
35
|
-
wikiArticleBaseUrl: `${i}${
|
|
34
|
+
wikiArticlePath: c,
|
|
35
|
+
wikiArticleBaseUrl: `${i}${c}`,
|
|
36
36
|
wikiScriptBaseUrl: `${i}${r.wgScriptPath}`,
|
|
37
37
|
linkClassName: "ipe-quickEdit__in-article-link"
|
|
38
38
|
},
|
|
@@ -42,23 +42,23 @@ class w extends (N = I) {
|
|
|
42
42
|
async start() {
|
|
43
43
|
mw.hook("wikipage.content").add(() => {
|
|
44
44
|
document.querySelectorAll("#mw-content-text a[href]").forEach((r) => {
|
|
45
|
-
const
|
|
46
|
-
if (!
|
|
45
|
+
const c = this.checkEditAnchor(r);
|
|
46
|
+
if (!c || r.dataset.ipeQuickEditLink)
|
|
47
47
|
return;
|
|
48
|
-
const i = /* @__PURE__ */
|
|
48
|
+
const i = /* @__PURE__ */ o(
|
|
49
49
|
"a",
|
|
50
50
|
{
|
|
51
|
-
href: `#/IPE/quickEdit/${
|
|
51
|
+
href: `#/IPE/quickEdit/${c.title}`,
|
|
52
52
|
className: this.config.linkClassName,
|
|
53
53
|
style: {
|
|
54
54
|
userSelect: "none",
|
|
55
55
|
marginLeft: "0.2em",
|
|
56
56
|
verticalAlign: "middle"
|
|
57
57
|
},
|
|
58
|
-
onClick: (
|
|
59
|
-
|
|
58
|
+
onClick: (a) => {
|
|
59
|
+
a.preventDefault(), this.ctx.quickEdit(c);
|
|
60
60
|
},
|
|
61
|
-
children: /* @__PURE__ */
|
|
61
|
+
children: /* @__PURE__ */ o(
|
|
62
62
|
"svg",
|
|
63
63
|
{
|
|
64
64
|
style: "width: 1em; height: 1em",
|
|
@@ -73,10 +73,10 @@ class w extends (N = I) {
|
|
|
73
73
|
"stroke-linejoin": "round",
|
|
74
74
|
class: "icon icon-tabler icons-tabler-outline icon-tabler-pencil-bolt",
|
|
75
75
|
children: [
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
/* @__PURE__ */
|
|
76
|
+
/* @__PURE__ */ o("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
|
|
77
|
+
/* @__PURE__ */ o("path", { d: "M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" }),
|
|
78
|
+
/* @__PURE__ */ o("path", { d: "M13.5 6.5l4 4" }),
|
|
79
|
+
/* @__PURE__ */ o("path", { d: "M19 16l-2 3h4l-2 3" })
|
|
80
80
|
]
|
|
81
81
|
}
|
|
82
82
|
)
|
|
@@ -95,61 +95,61 @@ class w extends (N = I) {
|
|
|
95
95
|
const r = e.href || "";
|
|
96
96
|
if (!r.startsWith(this.config.wikiArticleBaseUrl) && !r.startsWith(this.config.wikiScriptBaseUrl))
|
|
97
97
|
return null;
|
|
98
|
-
const
|
|
98
|
+
const c = new URL(r), i = c.searchParams, a = i.get("action") || "view", s = i.get("title") || decodeURI(c.pathname.substring(this.config.wikiArticlePath.length)) || "", n = i.get("section")?.replace(/^T-/, "") || void 0, l = i.get("oldid");
|
|
99
99
|
if (
|
|
100
100
|
// 不合法的 title
|
|
101
|
-
!
|
|
102
|
-
!["edit", "editsource", "editredlink", "submit"].includes(
|
|
101
|
+
!s || s.endsWith(".php") || // 不是 edit 相关操作
|
|
102
|
+
!["edit", "editsource", "editredlink", "submit"].includes(a) || // 暂时未兼容 undo
|
|
103
103
|
i.get("undo") || // 暂时未兼容 preload
|
|
104
104
|
i.get("preload")
|
|
105
105
|
)
|
|
106
106
|
return null;
|
|
107
|
-
let
|
|
108
|
-
return n === "new" ?
|
|
109
|
-
title:
|
|
110
|
-
section:
|
|
111
|
-
revision: parseInt("" +
|
|
107
|
+
let u;
|
|
108
|
+
return n === "new" ? u = "new" : n && /^\d+$/.test(n) && (u = parseInt(n, 10)), {
|
|
109
|
+
title: s,
|
|
110
|
+
section: u,
|
|
111
|
+
revision: parseInt("" + l, 10) || 0,
|
|
112
112
|
createOnly: !!i.get("redlink")
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
|
|
117
|
-
w = ee(
|
|
118
|
-
Z(
|
|
119
|
-
const
|
|
116
|
+
x = G(B);
|
|
117
|
+
w = ee(x, 0, "PluginQuickEditInArticleLinks", M, w);
|
|
118
|
+
Z(x, 1, w);
|
|
119
|
+
const I = () => {
|
|
120
120
|
};
|
|
121
|
-
var te = Object.create, b = Object.defineProperty, ie = Object.getOwnPropertyDescriptor, O = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t),
|
|
121
|
+
var te = Object.create, b = Object.defineProperty, ie = Object.getOwnPropertyDescriptor, O = (t, e) => (e = Symbol[t]) ? e : Symbol.for("Symbol." + t), T = (t) => {
|
|
122
122
|
throw TypeError(t);
|
|
123
|
-
}, re = (t, e, r) => e in t ? b(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, ne = (t, e) => b(t, "name", { value: e, configurable: !0 }), oe = (t) => [, , , te(t?.[O("metadata")] ?? null)], se = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"],
|
|
124
|
-
for (var i = 0,
|
|
125
|
-
return
|
|
126
|
-
}, de = (t, e, r,
|
|
127
|
-
var
|
|
123
|
+
}, re = (t, e, r) => e in t ? b(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, ne = (t, e) => b(t, "name", { value: e, configurable: !0 }), oe = (t) => [, , , te(t?.[O("metadata")] ?? null)], se = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], j = (t) => t !== void 0 && typeof t != "function" ? T("Function expected") : t, ce = (t, e, r, c, i) => ({ kind: se[t], name: e, metadata: c, addInitializer: (a) => r._ ? T("Already initialized") : i.push(j(a || null)) }), ae = (t, e) => re(e, O("metadata"), t[3]), le = (t, e, r, c) => {
|
|
124
|
+
for (var i = 0, a = t[e >> 1], s = a && a.length; i < s; i++) a[i].call(r);
|
|
125
|
+
return c;
|
|
126
|
+
}, de = (t, e, r, c, i, a) => {
|
|
127
|
+
var s, n, l, u = e & 7, p = !1, v = 0, d = t[v] || (t[v] = []), h = u && (i = i.prototype, u < 5 && (u > 3 || !p) && ie(i, r));
|
|
128
128
|
ne(i, r);
|
|
129
|
-
for (var
|
|
130
|
-
|
|
131
|
-
return
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
editSummary:
|
|
136
|
-
editMinor:
|
|
137
|
-
outSideClose:
|
|
138
|
-
watchList:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
]).description("Watchlist options").default(
|
|
129
|
+
for (var g = c.length - 1; g >= 0; g--)
|
|
130
|
+
l = ce(u, r, n = {}, t[3], d), s = (0, c[g])(i, l), n._ = 1, j(s) && (i = s);
|
|
131
|
+
return ae(t, i), h && b(i, r, h), p ? u ^ 4 ? a : h : i;
|
|
132
|
+
}, F, S, U;
|
|
133
|
+
F = [q(["api", "wikiPage", "modal", "preferences"]), C(
|
|
134
|
+
m.object({
|
|
135
|
+
editSummary: m.string().description("Default edit summary for quick edits").default("[IPE-NEXT] Quick edit"),
|
|
136
|
+
editMinor: m.boolean().description("Whether to mark the edit as minor").default(!1),
|
|
137
|
+
outSideClose: m.boolean().description("Whether to close the modal outside").default(!0),
|
|
138
|
+
watchList: m.union([
|
|
139
|
+
m.const(f.preferences).description("Follow my preferences"),
|
|
140
|
+
m.const(f.nochange).description("Keep the current watchlist status"),
|
|
141
|
+
m.const(f.watch).description("Add the page to watchlist"),
|
|
142
|
+
m.const(f.unwatch).description("Remove the page from watchlist")
|
|
143
|
+
]).description("Watchlist options").default(f.preferences)
|
|
144
144
|
}).description("Quick edit options").extra("category", "edit"),
|
|
145
145
|
{
|
|
146
146
|
editSummary: "[IPE-NEXT] Quick edit",
|
|
147
147
|
editMinor: !1,
|
|
148
148
|
outSideClose: !0,
|
|
149
|
-
watchList:
|
|
149
|
+
watchList: f.preferences
|
|
150
150
|
}
|
|
151
151
|
)];
|
|
152
|
-
class k extends (
|
|
152
|
+
class k extends (U = A) {
|
|
153
153
|
constructor(e) {
|
|
154
154
|
super(e, {}, "quick-edit"), this.ctx = e, this.DEFAULT_OPTIONS = {
|
|
155
155
|
title: "",
|
|
@@ -178,13 +178,13 @@ class k extends (F = I) {
|
|
|
178
178
|
pageId: mw.config.get("wgArticleId"),
|
|
179
179
|
revision: mw.config.get("wgRevisionId")
|
|
180
180
|
});
|
|
181
|
-
const r = await this.ctx.preferences.get("outSideClose"),
|
|
181
|
+
const r = await this.ctx.preferences.get("outSideClose"), c = await this.ctx.preferences.get("watchList"), i = typeof e.editSummary == "string" ? e.editSummary : await this.ctx.preferences.get("editSummary"), a = typeof e.editMinor == "boolean" ? e.editMinor : await this.ctx.preferences.get("editMinor"), s = {
|
|
182
182
|
...this.DEFAULT_OPTIONS,
|
|
183
183
|
editSummary: i,
|
|
184
|
-
editMinor:
|
|
184
|
+
editMinor: a,
|
|
185
185
|
...e
|
|
186
186
|
};
|
|
187
|
-
|
|
187
|
+
s.editSummary || (s.editSummary = await this.ctx.preferences.get("editSummary") || ""), s || this.ctx.emit("quick-edit/init-options", { ctx: this.ctx, options: s });
|
|
188
188
|
const n = this.ctx.modal.createObject({
|
|
189
189
|
className: "ipe-quickEdit",
|
|
190
190
|
sizeClass: "large",
|
|
@@ -194,12 +194,12 @@ class k extends (F = I) {
|
|
|
194
194
|
outSideClose: r
|
|
195
195
|
}).init();
|
|
196
196
|
n.setTitle(
|
|
197
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ o(E, { children: [
|
|
198
198
|
"Loading: ",
|
|
199
|
-
/* @__PURE__ */
|
|
199
|
+
/* @__PURE__ */ o("u", { children: s.title })
|
|
200
200
|
] })
|
|
201
201
|
), n.setContent(
|
|
202
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ o(
|
|
203
203
|
"section",
|
|
204
204
|
{
|
|
205
205
|
className: "ipe-quickEdit-loading",
|
|
@@ -210,7 +210,7 @@ class k extends (F = I) {
|
|
|
210
210
|
justifyContent: "center",
|
|
211
211
|
alignItems: "center"
|
|
212
212
|
},
|
|
213
|
-
children: /* @__PURE__ */
|
|
213
|
+
children: /* @__PURE__ */ o(D, {})
|
|
214
214
|
}
|
|
215
215
|
)
|
|
216
216
|
), n.addButton({
|
|
@@ -221,33 +221,45 @@ class k extends (F = I) {
|
|
|
221
221
|
method() {
|
|
222
222
|
n.close();
|
|
223
223
|
}
|
|
224
|
-
}), n.show(), this.ctx.emit("
|
|
225
|
-
let
|
|
224
|
+
}), n.show(), this.ctx.emit("quick-edit/show-modal", { ctx: this.ctx, modal: n, options: s });
|
|
225
|
+
let l;
|
|
226
226
|
try {
|
|
227
|
-
|
|
228
|
-
} catch (
|
|
227
|
+
l = await this.getWikiPageFromPayload(s);
|
|
228
|
+
} catch (d) {
|
|
229
229
|
n.close(), this.ctx.modal.notify("error", {
|
|
230
230
|
title: "Error",
|
|
231
|
-
content:
|
|
231
|
+
content: d instanceof Error ? d.message : String(d)
|
|
232
232
|
});
|
|
233
233
|
return;
|
|
234
234
|
}
|
|
235
235
|
n.setTitle(
|
|
236
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ o(E, { children: [
|
|
237
237
|
"Quick ",
|
|
238
|
-
|
|
238
|
+
l.pageInfo.pageid === 0 ? "Create" : "Edit",
|
|
239
239
|
":",
|
|
240
240
|
" ",
|
|
241
|
-
/* @__PURE__ */
|
|
241
|
+
/* @__PURE__ */ o("u", { children: l.pageInfo.title })
|
|
242
242
|
] })
|
|
243
243
|
);
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
/* @__PURE__ */
|
|
247
|
-
|
|
244
|
+
const u = [];
|
|
245
|
+
l.pageInfo.pageid === 0 && u.push(
|
|
246
|
+
/* @__PURE__ */ o(y, { title: "Attention", type: "important", children: /* @__PURE__ */ o("p", { children: "This page does not exist." }) })
|
|
247
|
+
), l.pageInfo.pageid && l.pageInfo.lastrevid !== l.revisions[0]?.revid && u.push(
|
|
248
|
+
/* @__PURE__ */ o(y, { title: "Attention", type: "warning", children: /* @__PURE__ */ o("p", { children: "You are editing a revision that is not the latest." }) })
|
|
249
|
+
), this.ctx.emit("quick-edit/edit-notice", {
|
|
250
|
+
ctx: this.ctx,
|
|
251
|
+
options: s,
|
|
252
|
+
modal: n,
|
|
253
|
+
wikiPage: l,
|
|
254
|
+
editNotices: u
|
|
255
|
+
});
|
|
256
|
+
const p = /* @__PURE__ */ o("form", { className: "ipe-quickEdit__form", children: [
|
|
257
|
+
/* @__PURE__ */ o("div", { className: "ipe-quickEdit__notices", children: u }),
|
|
258
|
+
/* @__PURE__ */ o("div", { className: "ipe-quickEdit__content", children: /* @__PURE__ */ o("textarea", { className: "ipe-quickEdit__textarea", name: "text", id: "wpTextbox1", children: l.revisions[0]?.content || "" }) }),
|
|
259
|
+
/* @__PURE__ */ o(
|
|
248
260
|
"div",
|
|
249
261
|
{
|
|
250
|
-
class: "ipe-
|
|
262
|
+
class: "ipe-quickEdit__options",
|
|
251
263
|
style: {
|
|
252
264
|
display: "flex",
|
|
253
265
|
flexDirection: "column",
|
|
@@ -255,59 +267,59 @@ class k extends (F = I) {
|
|
|
255
267
|
marginTop: "1rem"
|
|
256
268
|
},
|
|
257
269
|
children: [
|
|
258
|
-
/* @__PURE__ */
|
|
259
|
-
/* @__PURE__ */
|
|
260
|
-
/* @__PURE__ */
|
|
261
|
-
/* @__PURE__ */
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
].map((
|
|
270
|
+
/* @__PURE__ */ o(z, { label: "Summary", id: "summary", name: "summary", value: s.editSummary }),
|
|
271
|
+
/* @__PURE__ */ o("div", { className: "ipe-input-box", children: [
|
|
272
|
+
/* @__PURE__ */ o("label", { htmlFor: "watchlist", style: { display: "block" }, children: "Watchlist" }),
|
|
273
|
+
/* @__PURE__ */ o("div", { style: { display: "flex", gap: "1rem" }, children: [
|
|
274
|
+
f.preferences,
|
|
275
|
+
f.nochange,
|
|
276
|
+
f.watch,
|
|
277
|
+
f.unwatch
|
|
278
|
+
].map((d) => /* @__PURE__ */ o(
|
|
267
279
|
Q,
|
|
268
280
|
{
|
|
269
281
|
name: "watchlist",
|
|
270
|
-
value:
|
|
271
|
-
inputProps: { checked:
|
|
272
|
-
children:
|
|
282
|
+
value: d,
|
|
283
|
+
inputProps: { checked: c === d },
|
|
284
|
+
children: d
|
|
273
285
|
},
|
|
274
|
-
|
|
286
|
+
d
|
|
275
287
|
)) })
|
|
276
288
|
] }),
|
|
277
|
-
/* @__PURE__ */
|
|
278
|
-
/* @__PURE__ */
|
|
279
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ o("div", { style: { display: "flex", gap: "1rem" }, children: [
|
|
290
|
+
/* @__PURE__ */ o(P, { name: "minor", id: "minor", checked: s.editMinor, children: "Minor edit" }),
|
|
291
|
+
/* @__PURE__ */ o(P, { name: "reloadAfterSave", id: "reloadAfterSave", checked: s.reloadAfterSave, children: "Reload after save" })
|
|
280
292
|
] })
|
|
281
293
|
]
|
|
282
294
|
}
|
|
283
295
|
),
|
|
284
296
|
!1
|
|
285
297
|
] });
|
|
286
|
-
n.setContent(
|
|
298
|
+
n.setContent(p), n.addButton(
|
|
287
299
|
{
|
|
288
300
|
side: "left",
|
|
289
301
|
className: "is-primary submit-btn",
|
|
290
302
|
label: "Submit",
|
|
291
303
|
method: () => {
|
|
292
|
-
const
|
|
304
|
+
const d = new FormData(p);
|
|
293
305
|
n.setLoadingState(!0), this.handleSubmit(
|
|
294
|
-
{ ctx: this.ctx, modal: n, wikiPage:
|
|
306
|
+
{ ctx: this.ctx, modal: n, wikiPage: l, options: s },
|
|
295
307
|
{
|
|
296
|
-
text:
|
|
297
|
-
summary:
|
|
298
|
-
minor:
|
|
308
|
+
text: d.get("text"),
|
|
309
|
+
summary: d.get("summary"),
|
|
310
|
+
minor: d.get("minor") === "on"
|
|
299
311
|
}
|
|
300
312
|
).then(async () => {
|
|
301
313
|
n.setOptions({
|
|
302
|
-
beforeClose:
|
|
314
|
+
beforeClose: I
|
|
303
315
|
}), n.close(), this.ctx.modal.notify("success", {
|
|
304
316
|
title: "Submission Successful",
|
|
305
317
|
content: "Your changes have been saved."
|
|
306
|
-
}),
|
|
307
|
-
}).catch((
|
|
318
|
+
}), d.get("reloadAfterSave") && (await R(500), location.reload());
|
|
319
|
+
}).catch((h) => {
|
|
308
320
|
this.ctx.modal.notify("error", {
|
|
309
321
|
title: "Submission Error",
|
|
310
|
-
content:
|
|
322
|
+
content: h instanceof Error ? h.message : String(h)
|
|
311
323
|
}), n.setLoadingState(!1);
|
|
312
324
|
});
|
|
313
325
|
}
|
|
@@ -315,8 +327,8 @@ class k extends (F = I) {
|
|
|
315
327
|
0
|
|
316
328
|
), n.setOptions({
|
|
317
329
|
beforeClose: () => {
|
|
318
|
-
const
|
|
319
|
-
return (
|
|
330
|
+
const d = l.revisions[0]?.content || "";
|
|
331
|
+
return (p.querySelector("textarea")?.value || "") === d ? !0 : (this.ctx.modal.confirm(
|
|
320
332
|
{
|
|
321
333
|
className: "is-primary",
|
|
322
334
|
title: "Unsaved Changes",
|
|
@@ -331,34 +343,34 @@ class k extends (F = I) {
|
|
|
331
343
|
className: "is-primary is-ghost"
|
|
332
344
|
}
|
|
333
345
|
},
|
|
334
|
-
(
|
|
335
|
-
beforeClose:
|
|
346
|
+
(g) => (g && (n.setOptions({
|
|
347
|
+
beforeClose: I
|
|
336
348
|
}), n.close()), !0)
|
|
337
349
|
), !1);
|
|
338
350
|
}
|
|
339
|
-
}), this.ctx.emit("
|
|
351
|
+
}), this.ctx.emit("quick-edit/wiki-page", {
|
|
340
352
|
ctx: this.ctx,
|
|
341
|
-
options:
|
|
353
|
+
options: s,
|
|
342
354
|
modal: n,
|
|
343
|
-
wikiPage:
|
|
355
|
+
wikiPage: l
|
|
344
356
|
});
|
|
345
|
-
const
|
|
346
|
-
window.addEventListener("beforeunload",
|
|
347
|
-
window.removeEventListener("beforeunload",
|
|
357
|
+
const v = (d) => p.querySelector("textarea")?.value === l.revisions[0]?.content ? !0 : (d.preventDefault(), "You have unsaved changes. Are you sure you want to leave?");
|
|
358
|
+
window.addEventListener("beforeunload", v), n.on(n.Event.Close, () => {
|
|
359
|
+
window.removeEventListener("beforeunload", v);
|
|
348
360
|
});
|
|
349
361
|
}
|
|
350
362
|
handleSubmit(e, r) {
|
|
351
|
-
const
|
|
363
|
+
const c = r.summary || "", i = r.text || "", a = r.minor || !1, s = r.createonly || !1, n = r.watchlist || f.nochange, l = e.options.section;
|
|
352
364
|
return e.wikiPage.edit(
|
|
353
365
|
{
|
|
354
|
-
summary:
|
|
366
|
+
summary: c,
|
|
355
367
|
text: i,
|
|
356
368
|
watchlist: n,
|
|
357
|
-
section:
|
|
369
|
+
section: l
|
|
358
370
|
},
|
|
359
371
|
{
|
|
360
|
-
minor:
|
|
361
|
-
createonly:
|
|
372
|
+
minor: a,
|
|
373
|
+
createonly: s
|
|
362
374
|
}
|
|
363
375
|
);
|
|
364
376
|
}
|
|
@@ -367,7 +379,7 @@ class k extends (F = I) {
|
|
|
367
379
|
id: "quick-edit",
|
|
368
380
|
group: "group1",
|
|
369
381
|
index: 0,
|
|
370
|
-
icon: /* @__PURE__ */
|
|
382
|
+
icon: /* @__PURE__ */ o(
|
|
371
383
|
"svg",
|
|
372
384
|
{
|
|
373
385
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -381,15 +393,17 @@ class k extends (F = I) {
|
|
|
381
393
|
"stroke-linejoin": "round",
|
|
382
394
|
class: "icon icon-tabler icons-tabler-outline icon-tabler-edit",
|
|
383
395
|
children: [
|
|
384
|
-
/* @__PURE__ */
|
|
385
|
-
/* @__PURE__ */
|
|
386
|
-
/* @__PURE__ */
|
|
387
|
-
/* @__PURE__ */
|
|
396
|
+
/* @__PURE__ */ o("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
|
|
397
|
+
/* @__PURE__ */ o("path", { d: "M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1" }),
|
|
398
|
+
/* @__PURE__ */ o("path", { d: "M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z" }),
|
|
399
|
+
/* @__PURE__ */ o("path", { d: "M16 5l3 3" })
|
|
388
400
|
]
|
|
389
401
|
}
|
|
390
402
|
),
|
|
391
403
|
tooltip: "Edit this page quickly",
|
|
392
|
-
onClick: () => this.quickEdit(
|
|
404
|
+
onClick: () => this.quickEdit({
|
|
405
|
+
revision: mw.config.get("wgRevisionId")
|
|
406
|
+
})
|
|
393
407
|
});
|
|
394
408
|
}
|
|
395
409
|
async getWikiPageFromPayload(e) {
|
|
@@ -405,10 +419,10 @@ class k extends (F = I) {
|
|
|
405
419
|
e.toolbox.removeButton("quick-edit");
|
|
406
420
|
}
|
|
407
421
|
}
|
|
408
|
-
S = oe(
|
|
409
|
-
k = de(S, 0, "PluginQuickEdit",
|
|
422
|
+
S = oe(U);
|
|
423
|
+
k = de(S, 0, "PluginQuickEdit", F, k);
|
|
410
424
|
le(S, 1, k);
|
|
411
425
|
export {
|
|
412
426
|
k as PluginQuickEdit
|
|
413
427
|
};
|
|
414
|
-
//# sourceMappingURL=index-
|
|
428
|
+
//# sourceMappingURL=index-DlE7PWxs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DlE7PWxs.js","sources":["../src/plugins/quick-edit/PluginQuickEditInArticleLinks.tsx","../src/utils/noop.ts","../src/plugins/quick-edit/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { QuickEditOptions } from '.'\n\n@Inject(['sitemeta', 'quickEdit'])\n@RegisterPreferences(\n Schema.object({\n redLinkEdit: Schema.boolean()\n .description('Show quick edit entry after red links')\n .default(true),\n }).description('In-article quick edit links'),\n {\n redLinkEdit: true,\n }\n)\nexport class PluginQuickEditInArticleLinks extends BasePlugin<{\n wikiBaseUrl: string\n wikiArticlePath: string\n wikiArticleBaseUrl: string\n wikiScriptBaseUrl: string\n linkClassName: string\n}> {\n constructor(ctx: InPageEdit) {\n const mwConfig = ctx.sitemeta.mwConfig\n const wikiArticlePath = mwConfig.wgArticlePath.replace('$1', '')\n const wikiBaseUrl = `${location.protocol}//${mwConfig.wgServer.split('//')[1]}`\n super(\n ctx,\n {\n wikiBaseUrl,\n wikiArticlePath,\n wikiArticleBaseUrl: `${wikiBaseUrl}${wikiArticlePath}`,\n wikiScriptBaseUrl: `${wikiBaseUrl}${mwConfig.wgScriptPath}`,\n linkClassName: 'ipe-quickEdit__in-article-link',\n },\n 'QuickEditInArticleLinks'\n )\n }\n\n protected async start() {\n mw.hook('wikipage.content').add(() => {\n const anchorList = document.querySelectorAll<HTMLAnchorElement>('#mw-content-text a[href]')\n anchorList.forEach((anchor) => {\n const info = this.checkEditAnchor(anchor)\n if (!info || anchor.dataset.ipeQuickEditLink) {\n return\n }\n\n const link = (\n <a\n href={`#/IPE/quickEdit/${info.title}`}\n className={this.config.linkClassName}\n style={{\n userSelect: 'none',\n marginLeft: '0.2em',\n verticalAlign: 'middle',\n }}\n onClick={(e) => {\n e.preventDefault()\n this.ctx.quickEdit(info)\n }}\n >\n <svg\n style=\"width: 1em; height: 1em\"\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-pencil-bolt\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\" />\n <path d=\"M13.5 6.5l4 4\" />\n <path d=\"M19 16l-2 3h4l-2 3\" />\n </svg>\n </a>\n )\n\n anchor.insertAdjacentElement('afterend', link)\n anchor.dataset.ipeQuickEditLink = 'true'\n })\n })\n }\n\n stop() {\n document.querySelectorAll(`.${this.config.linkClassName}`).forEach((el) => el.remove())\n }\n\n checkEditAnchor(\n anchor: HTMLAnchorElement\n ): Pick<QuickEditOptions, 'title' | 'section' | 'revision' | 'createOnly'> | null {\n if (!(anchor instanceof HTMLAnchorElement)) {\n return null\n }\n\n const href = anchor.href || ''\n if (\n !href.startsWith(this.config.wikiArticleBaseUrl) &&\n !href.startsWith(this.config.wikiScriptBaseUrl)\n ) {\n return null\n }\n const hrefURL = new URL(href)\n const params = hrefURL.searchParams\n const action = params.get('action') || 'view'\n const title =\n params.get('title') ||\n decodeURI(hrefURL.pathname.substring(this.config.wikiArticlePath.length)) ||\n ''\n const section = params.get('section')?.replace(/^T-/, '') || undefined\n const revision = params.get('oldid')\n\n if (\n // 不合法的 title\n !title ||\n title.endsWith('.php') ||\n // 不是 edit 相关操作\n !['edit', 'editsource', 'editredlink', 'submit'].includes(action) ||\n // 暂时未兼容 undo\n params.get('undo') ||\n // 暂时未兼容 preload\n params.get('preload')\n ) {\n return null\n }\n\n let sectionNum: 'new' | number | undefined = undefined\n if (section === 'new') {\n sectionNum = 'new'\n } else if (section && /^\\d+$/.test(section)) {\n sectionNum = parseInt(section, 10)\n }\n\n return {\n title,\n section: sectionNum,\n revision: parseInt('' + revision, 10) || 0,\n createOnly: !!params.get('redlink'),\n }\n }\n}\n","export const noop = () => {}\n","import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { WikiPage } from '@/models/WikiPage'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction'\nimport { PluginQuickEditInArticleLinks } from './PluginQuickEditInArticleLinks'\nimport { IPEModal } from '@/services/ModalService/IPEModal'\nimport { ReactNode } from 'jsx-dom'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickEdit: PluginQuickEdit['quickEdit']\n }\n interface Events {\n 'quick-edit/init-options'(payload: Omit<QuickEditInitPayload, 'modal' | 'wikiPage'>): void\n 'quick-edit/show-modal'(payload: Omit<QuickEditInitPayload, 'wikiPage'>): void\n 'quick-edit/wiki-page'(payload: QuickEditInitPayload): void\n 'quick-edit/edit-notice'(payload: QuickEditInitPayload & { editNotices: ReactNode[] }): void\n }\n}\n\nexport interface QuickEditOptions {\n title: string\n pageId: number\n revision: number\n /**\n * - `undefined` for full article edit\n * - `0` for the first section\n * - `\"new\"` for a new section\n */\n section: number | 'new' | undefined\n editMinor: boolean\n editSummary: string\n createOnly: boolean\n reloadAfterSave: boolean\n}\n\nexport interface QuickEditInitPayload {\n ctx: InPageEdit\n options: QuickEditOptions\n modal: IPEModal\n wikiPage: WikiPage\n}\n\nexport interface QuickEditSubmitPayload {\n text?: string\n summary?: string\n minor?: boolean\n createonly?: boolean\n watchlist?: WatchlistAction\n}\n\n@Inject(['api', 'wikiPage', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n editSummary: Schema.string()\n .description('Default edit summary for quick edits')\n .default('[IPE-NEXT] Quick edit'),\n editMinor: Schema.boolean().description('Whether to mark the edit as minor').default(false),\n outSideClose: Schema.boolean().description('Whether to close the modal outside').default(true),\n watchList: Schema.union([\n Schema.const(WatchlistAction.preferences).description('Follow my preferences'),\n Schema.const(WatchlistAction.nochange).description('Keep the current watchlist status'),\n Schema.const(WatchlistAction.watch).description('Add the page to watchlist'),\n Schema.const(WatchlistAction.unwatch).description('Remove the page from watchlist'),\n ])\n .description('Watchlist options')\n .default(WatchlistAction.preferences),\n })\n .description('Quick edit options')\n .extra('category', 'edit'),\n {\n editSummary: '[IPE-NEXT] Quick edit',\n editMinor: false,\n outSideClose: true,\n watchList: WatchlistAction.preferences,\n }\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 }\n\n protected start(): Promise<void> | void {\n this.ctx.root.set('quickEdit', this.quickEdit.bind(this))\n this.ctx.inject(['toolbox'], (ctx) => {\n this.injectToolbox(ctx)\n ctx.on('dispose', () => {\n this.removeToolbox(ctx)\n })\n })\n\n this.ctx.plugin(PluginQuickEditInArticleLinks)\n }\n\n async quickEdit(payload?: string | Partial<QuickEditOptions>) {\n if (typeof payload === 'undefined') {\n payload = {}\n } else if (typeof payload === 'string') {\n payload = {\n title: payload,\n } as Partial<QuickEditOptions>\n }\n\n // @ts-expect-error legacy `page` option\n if (payload?.page) {\n // @ts-expect-error\n payload.title = payload.page\n // @ts-expect-error\n delete payload.page\n }\n\n if (!payload.title && !payload.pageId && !payload.revision) {\n this.logger.warn('None of the title, pageId or revision provided. Using defaults.')\n payload = {\n ...payload,\n title: mw.config.get('wgPageName'),\n pageId: mw.config.get('wgArticleId'),\n revision: mw.config.get('wgRevisionId'),\n }\n }\n\n const outSideClose = (await this.ctx.preferences.get<boolean>('outSideClose'))!\n const watchList = (await this.ctx.preferences.get<WatchlistAction>('watchList'))!\n const editSummary =\n typeof payload.editSummary === 'string'\n ? payload.editSummary\n : (await this.ctx.preferences.get<string>('editSummary'))!\n const editMinor =\n typeof payload.editMinor === 'boolean'\n ? payload.editMinor\n : (await this.ctx.preferences.get<boolean>('editMinor'))!\n\n const options: QuickEditOptions = {\n ...this.DEFAULT_OPTIONS,\n editSummary,\n editMinor,\n ...payload,\n }\n if (!options.editSummary) {\n options.editSummary = (await this.ctx.preferences.get<string>('editSummary')) || ''\n }\n if (!options) this.ctx.emit('quick-edit/init-options', { ctx: this.ctx, options })\n\n const modal = this.ctx.modal\n .createObject({\n className: 'ipe-quickEdit',\n sizeClass: 'large',\n // backdrop: false,\n // draggable: true,\n center: false,\n outSideClose,\n })\n .init()\n modal.setTitle(\n (\n <>\n Loading: <u>{options.title}</u>\n </>\n ) as HTMLElement\n )\n modal.setContent(\n (\n <section\n className=\"ipe-quickEdit-loading\"\n style={{\n height: '70vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <ProgressBar />\n </section>\n ) as HTMLElement\n )\n modal.addButton({\n side: 'right',\n type: 'button',\n className: 'is-danger is-ghost',\n label: 'Cancel',\n method() {\n modal.close()\n },\n })\n modal.show()\n this.ctx.emit('quick-edit/show-modal', { ctx: this.ctx, modal, options })\n\n let wikiPage: WikiPage\n try {\n wikiPage = await this.getWikiPageFromPayload(options)\n } catch (e) {\n modal.close()\n this.ctx.modal.notify('error', {\n title: 'Error',\n content: e instanceof Error ? e.message : String(e),\n })\n return\n }\n modal.setTitle(\n (\n <>\n Quick {wikiPage.pageInfo.pageid === 0 ? 'Create' : 'Edit'}:{' '}\n <u>{wikiPage.pageInfo.title}</u>\n </>\n ) as HTMLElement\n )\n\n const editNotices = [] as ReactNode[]\n // Page not exists\n if (wikiPage.pageInfo.pageid === 0) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"important\">\n <p>This page does not exist.</p>\n </MBox>\n )\n }\n // Edit based on old revision\n if (wikiPage.pageInfo.pageid && wikiPage.pageInfo.lastrevid !== wikiPage.revisions[0]?.revid) {\n editNotices.push(\n <MBox title=\"Attention\" type=\"warning\">\n <p>You are editing a revision that is not the latest.</p>\n </MBox>\n )\n }\n this.ctx.emit('quick-edit/edit-notice', {\n ctx: this.ctx,\n options,\n modal,\n wikiPage,\n editNotices,\n })\n\n const editForm = (\n <form className=\"ipe-quickEdit__form\">\n <div className=\"ipe-quickEdit__notices\">{editNotices}</div>\n <div className=\"ipe-quickEdit__content\">\n <textarea className=\"ipe-quickEdit__textarea\" name=\"text\" id=\"wpTextbox1\">\n {wikiPage.revisions[0]?.content || ''}\n </textarea>\n </div>\n <div\n class=\"ipe-quickEdit__options\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n marginTop: '1rem',\n }}\n >\n <InputBox label=\"Summary\" id=\"summary\" name=\"summary\" value={options.editSummary} />\n <div className=\"ipe-input-box\">\n <label htmlFor=\"watchlist\" style={{ display: 'block' }}>\n Watchlist\n </label>\n <div style={{ display: 'flex', gap: '1rem' }}>\n {[\n WatchlistAction.preferences,\n WatchlistAction.nochange,\n WatchlistAction.watch,\n WatchlistAction.unwatch,\n ].map((action) => (\n <RadioBox\n key={action}\n name=\"watchlist\"\n value={action}\n inputProps={{ checked: watchList === action }}\n >\n {action}\n </RadioBox>\n ))}\n </div>\n </div>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <CheckBox name=\"minor\" id=\"minor\" checked={options.editMinor}>\n Minor edit\n </CheckBox>\n <CheckBox name=\"reloadAfterSave\" id=\"reloadAfterSave\" checked={options.reloadAfterSave}>\n Reload after save\n </CheckBox>\n </div>\n </div>\n {/* Debug Info */}\n {import.meta.env.DEV && (\n <div className=\"debug\" style={{ marginTop: '1rem' }}>\n <details>\n <pre>{JSON.stringify(wikiPage.pageInfo, null, 2)}</pre>\n </details>\n </div>\n )}\n </form>\n ) as HTMLFormElement\n modal.setContent(editForm)\n // shamefully fix: make sure the submit button is always the first\n modal.addButton(\n {\n side: 'left',\n className: 'is-primary submit-btn',\n label: 'Submit',\n method: () => {\n const formData = new FormData(editForm)\n console.info(wikiPage, editForm, {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n })\n modal.setLoadingState(true)\n this.handleSubmit(\n { ctx: this.ctx, modal, wikiPage, options },\n {\n text: formData.get('text') as string,\n summary: formData.get('summary') as string,\n minor: formData.get('minor') === 'on',\n }\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',\n className: 'is-primary is-ghost',\n },\n },\n (result) => {\n if (result) {\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 private handleSubmit(init: QuickEditInitPayload, payload: QuickEditSubmitPayload) {\n const summary = payload.summary || ''\n const text = payload.text || ''\n const minor = payload.minor || false\n const createonly = payload.createonly || false\n const watchlist = payload.watchlist || WatchlistAction.nochange\n const section = init.options.section\n\n return init.wikiPage.edit(\n {\n summary,\n text,\n watchlist,\n section,\n },\n {\n minor,\n createonly,\n }\n )\n }\n\n private injectToolbox(ctx: InPageEdit) {\n ctx.toolbox.addButton({\n id: 'quick-edit',\n group: 'group1',\n index: 0,\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n ) as HTMLElement,\n tooltip: 'Edit this page quickly',\n onClick: () =>\n this.quickEdit({\n revision: mw.config.get('wgRevisionId'),\n }),\n })\n }\n\n private 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 protected removeToolbox(ctx: InPageEdit) {\n ctx.toolbox.removeButton('quick-edit')\n }\n}\n"],"names":["_PluginQuickEditInArticleLinks_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickEditInArticleLinks","BasePlugin","ctx","mwConfig","wikiArticlePath","wikiBaseUrl","anchor","info","link","jsx","e","jsxs","el","href","hrefURL","params","action","title","section","revision","sectionNum","__decoratorStart","__decorateElement","__runInitializers","noop","_PluginQuickEdit_decorators","WatchlistAction","PluginQuickEdit","payload","outSideClose","watchList","editSummary","editMinor","options","modal","Fragment","ProgressBar","wikiPage","editNotices","MBox","editForm","InputBox","RadioBox","CheckBox","formData","sleep","error","oldStr","result","beforeUnload","init","summary","text","minor","createonly","watchlist"],"mappings":"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"}
|