@inpageedit/core 0.10.0 → 0.11.1
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/README.md +9 -2
- package/dist/PluginPrefSync-COidewzp.js +258 -0
- package/dist/PluginPrefSync-COidewzp.js.map +1 -0
- package/dist/__test__/utils/constants.d.ts +3 -2
- package/dist/components/index.js +69 -51
- package/dist/components/index.js.map +1 -1
- package/dist/constants/endpoints.d.ts +1 -1
- package/dist/{index-BR6gK_ki.js → index-BNDyaWnI.js} +44 -38
- package/dist/index-BNDyaWnI.js.map +1 -0
- package/dist/{index-BnAhw94L.js → index-BQzuJxBO.js} +2 -2
- package/dist/{index-BnAhw94L.js.map → index-BQzuJxBO.js.map} +1 -1
- package/dist/{index-Z-_kjibx.js → index-BUI2IX49.js} +763 -699
- package/dist/index-BUI2IX49.js.map +1 -0
- package/dist/{index-Cx-YiN1j.js → index-CBszdxJJ.js} +22 -21
- package/dist/index-CBszdxJJ.js.map +1 -0
- package/dist/index-CfgnJ51A.js +185 -0
- package/dist/index-CfgnJ51A.js.map +1 -0
- package/dist/index-Cx4qgCJK.js +4914 -0
- package/dist/{index-DqJUIV2e.js.map → index-Cx4qgCJK.js.map} +1 -1
- package/dist/index-D5J7RU5I.js +211 -0
- package/dist/index-D5J7RU5I.js.map +1 -0
- package/dist/{index-ByzgI28q.js → index-MhNAv9Vf.js} +6 -2
- package/dist/index-MhNAv9Vf.js.map +1 -0
- package/dist/{index-ByJfEsN8.js → index-U2RPZk8N.js} +148 -110
- package/dist/index-U2RPZk8N.js.map +1 -0
- package/dist/{index-CAiGct8U.js → index-VnRKIVau.js} +42 -42
- package/dist/index-VnRKIVau.js.map +1 -0
- package/dist/{index-eOIVMf9E.js → index-etJXONAj.js} +46 -35
- package/dist/index-etJXONAj.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/models/WikiTitle/index.d.ts +2 -2
- package/dist/plugins/analytics/index.d.ts +41 -0
- package/dist/plugins/in-article-links/index.d.ts +14 -0
- package/dist/plugins/preferences-ui/PluginPrefSync.d.ts +2 -0
- package/dist/plugins/preferences-ui/index.d.ts +3 -1
- package/dist/plugins/quick-delete/index.d.ts +3 -0
- package/dist/plugins/quick-diff/index.d.ts +17 -0
- package/dist/plugins/quick-edit/index.d.ts +8 -0
- package/dist/plugins/quick-move/index.d.ts +16 -0
- package/dist/plugins/quick-redirect/index.d.ts +15 -0
- package/dist/plugins/toolbox/index.d.ts +9 -0
- package/dist/services/PreferencesService.d.ts +9 -2
- package/dist/services/WikiMetadataService.d.ts +23 -23
- package/dist/style.css +1 -1
- package/dist/types/WikiMetadata.d.ts +6 -8
- package/lib/index.umd.js +24 -24
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +3 -3
- package/dist/ActionButton-BgbTKTg7.js +0 -24
- package/dist/ActionButton-BgbTKTg7.js.map +0 -1
- package/dist/PluginPrefSync-CNCU2DJU.js +0 -171
- package/dist/PluginPrefSync-CNCU2DJU.js.map +0 -1
- package/dist/index-2mNdeL-V.js +0 -193
- package/dist/index-2mNdeL-V.js.map +0 -1
- package/dist/index-BR6gK_ki.js.map +0 -1
- package/dist/index-ByJfEsN8.js.map +0 -1
- package/dist/index-ByzgI28q.js.map +0 -1
- package/dist/index-CAiGct8U.js.map +0 -1
- package/dist/index-Cx-YiN1j.js.map +0 -1
- package/dist/index-DqJUIV2e.js +0 -4861
- package/dist/index-Z-_kjibx.js.map +0 -1
- package/dist/index-eOIVMf9E.js.map +0 -1
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import {
|
|
3
|
-
import { R as
|
|
4
|
-
var
|
|
1
|
+
import { j as c } from "./index-CvhkVj_L.js";
|
|
2
|
+
import { b as D, I as C, S as f } from "./index-BUI2IX49.js";
|
|
3
|
+
import { R as E } from "./Preferences-DS4-CFWe.js";
|
|
4
|
+
var T = Object.create, v = Object.defineProperty, q = Object.getOwnPropertyDescriptor, y = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), _ = (e) => {
|
|
5
5
|
throw TypeError(e);
|
|
6
|
-
}, I = (e, t, o) => t in e ?
|
|
7
|
-
for (var r = 0, i = e[t >> 1],
|
|
6
|
+
}, I = (e, t, o) => t in e ? v(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, $ = (e, t) => v(e, "name", { value: t, configurable: !0 }), z = (e) => [, , , T(e?.[y("metadata")] ?? null)], O = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], w = (e) => e !== void 0 && typeof e != "function" ? _("Function expected") : e, j = (e, t, o, n, r) => ({ kind: O[e], name: t, metadata: n, addInitializer: (i) => o._ ? _("Already initialized") : r.push(w(i || null)) }), k = (e, t) => I(t, y("metadata"), e[3]), A = (e, t, o, n) => {
|
|
7
|
+
for (var r = 0, i = e[t >> 1], a = i && i.length; r < a; r++) i[r].call(o);
|
|
8
8
|
return n;
|
|
9
|
-
},
|
|
10
|
-
var
|
|
9
|
+
}, M = (e, t, o, n, r, i) => {
|
|
10
|
+
var a, h, g, l = t & 7, b = !1, s = 0, u = e[s] || (e[s] = []), d = l && (r = r.prototype, l < 5 && (l > 3 || !b) && q(r, o));
|
|
11
11
|
$(r, o);
|
|
12
12
|
for (var p = n.length - 1; p >= 0; p--)
|
|
13
|
-
g =
|
|
14
|
-
return
|
|
15
|
-
}, S,
|
|
16
|
-
S = [
|
|
17
|
-
|
|
18
|
-
toolboxAlwaysShow:
|
|
13
|
+
g = j(l, o, h = {}, e[3], u), a = (0, n[p])(r, g), h._ = 1, w(a) && (r = a);
|
|
14
|
+
return k(e, r), d && v(r, o, d), b ? l ^ 4 ? i : d : r;
|
|
15
|
+
}, S, m, P;
|
|
16
|
+
S = [E(
|
|
17
|
+
f.object({
|
|
18
|
+
toolboxAlwaysShow: f.boolean().description("Make the toolbox opened by default").default(!1)
|
|
19
19
|
}).description("Toolbox preferences")
|
|
20
20
|
), C(["preferences"])];
|
|
21
|
-
class
|
|
21
|
+
class x extends (P = D) {
|
|
22
22
|
constructor(t) {
|
|
23
23
|
super(t, "toolbox", !1), this.ctx = t, this.container = void 0;
|
|
24
24
|
}
|
|
@@ -60,17 +60,17 @@ class v extends (P = D) {
|
|
|
60
60
|
updateButtonDelays() {
|
|
61
61
|
this.container.querySelectorAll(".btn-group").forEach((o) => {
|
|
62
62
|
const n = o.querySelectorAll(".btn-tip-group"), r = n.length;
|
|
63
|
-
n.forEach((i,
|
|
64
|
-
const
|
|
65
|
-
i.style.setProperty("--transition-delay", `${
|
|
63
|
+
n.forEach((i, a) => {
|
|
64
|
+
const h = this.calculateButtonDelay(a, r);
|
|
65
|
+
i.style.setProperty("--transition-delay", `${h}s`), i.style.setProperty("--max-transition-delay", "0.15s");
|
|
66
66
|
});
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
createToolbox() {
|
|
70
|
-
return /* @__PURE__ */
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
-
/* @__PURE__ */
|
|
70
|
+
return /* @__PURE__ */ c("div", { id: "ipe-edit-toolbox", children: [
|
|
71
|
+
/* @__PURE__ */ c("ul", { className: "btn-group group1", style: { display: "flex", flexDirection: "column" } }),
|
|
72
|
+
/* @__PURE__ */ c("ul", { className: "btn-group group2", style: { display: "flex", flexDirection: "row" } }),
|
|
73
|
+
/* @__PURE__ */ c(
|
|
74
74
|
"button",
|
|
75
75
|
{
|
|
76
76
|
className: "ipe-toolbox-btn",
|
|
@@ -78,9 +78,9 @@ class v extends (P = D) {
|
|
|
78
78
|
onClick: () => {
|
|
79
79
|
this.toggle();
|
|
80
80
|
},
|
|
81
|
-
children: /* @__PURE__ */
|
|
82
|
-
/* @__PURE__ */
|
|
83
|
-
/* @__PURE__ */
|
|
81
|
+
children: /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", width: "448", height: "512", viewBox: "0 0 448 512", children: [
|
|
82
|
+
/* @__PURE__ */ c("rect", { width: "448", height: "512", fill: "none" }),
|
|
83
|
+
/* @__PURE__ */ c(
|
|
84
84
|
"path",
|
|
85
85
|
{
|
|
86
86
|
fill: "currentColor",
|
|
@@ -96,22 +96,28 @@ class v extends (P = D) {
|
|
|
96
96
|
return t || (t = Math.random().toString(36).substring(2, 8)), `ipe-toolbox__${t.trim()}`.replace(/\s\.#/g, "-");
|
|
97
97
|
}
|
|
98
98
|
addButton(t) {
|
|
99
|
-
let { id: o, group: n, icon: r, tooltip: i, itemProps:
|
|
99
|
+
let { id: o, group: n, icon: r, tooltip: i, itemProps: a, buttonProps: h, onClick: g, index: l } = t;
|
|
100
100
|
o = this.normalizeButtonId(o);
|
|
101
101
|
const b = this.container.querySelector(`#${o}`);
|
|
102
102
|
b && (this.ctx.logger("toolbox").warn(`Button with id ${o} already exists, replacing it.`), b.remove());
|
|
103
103
|
let s = null;
|
|
104
104
|
if (typeof n > "u" || n === "auto") {
|
|
105
|
-
const
|
|
106
|
-
s = B <= L ?
|
|
105
|
+
const d = this.container.querySelector(".btn-group.group1"), p = this.container.querySelector(".btn-group.group2"), B = d?.children.length || 0, L = p?.children.length || 0;
|
|
106
|
+
s = B <= L ? d : p;
|
|
107
107
|
} else
|
|
108
108
|
s = this.container.querySelector(`.btn-group.${n}`);
|
|
109
109
|
if (!s) throw new Error(`Button group ${n} not found`);
|
|
110
|
-
const u = /* @__PURE__ */
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
/* @__PURE__ */
|
|
110
|
+
const u = /* @__PURE__ */ c("li", { class: "btn-tip-group", id: o, onClick: g, ...a, children: [
|
|
111
|
+
/* @__PURE__ */ c("div", { class: "btn-tip", children: i }),
|
|
112
|
+
/* @__PURE__ */ c("button", { id: `${o}-btn`, "data-id": t.id, class: "ipe-toolbox-btn", ...h, children: r })
|
|
113
113
|
] });
|
|
114
|
-
return
|
|
114
|
+
return u.addEventListener("click", (d) => {
|
|
115
|
+
this.ctx.emit("toolbox/button-clicked", {
|
|
116
|
+
ctx: this.ctx,
|
|
117
|
+
button: d.target,
|
|
118
|
+
id: t.id
|
|
119
|
+
});
|
|
120
|
+
}), typeof l == "number" ? l <= 0 ? s.prepend(u) : l >= s.children.length ? s.appendChild(u) : s.children[l]?.before(u) : s.appendChild(u), this.ctx.emit("toolbox/button-added", {
|
|
115
121
|
ctx: this.ctx,
|
|
116
122
|
button: u
|
|
117
123
|
}), this.updateButtonDelays(), u;
|
|
@@ -127,13 +133,13 @@ class v extends (P = D) {
|
|
|
127
133
|
}
|
|
128
134
|
toggle(t) {
|
|
129
135
|
const o = this.isPersistent, n = typeof t == "boolean" ? t : !o;
|
|
130
|
-
this.container.classList.toggle("is-persistent", n), this.container.classList.remove("is-hovered"), this.ctx.preferences.set("toolboxAlwaysShow", n);
|
|
136
|
+
this.container.classList.toggle("is-persistent", n), this.container.classList.remove("is-hovered"), this.ctx.preferences.set("toolboxAlwaysShow", n), this.ctx.emit("toolbox/toggle", { ctx: this.ctx, opened: this.isOpened });
|
|
131
137
|
}
|
|
132
138
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
m = z(P);
|
|
140
|
+
x = M(m, 0, "PluginToolbox", S, x);
|
|
141
|
+
A(m, 1, x);
|
|
136
142
|
export {
|
|
137
|
-
|
|
143
|
+
x as PluginToolbox
|
|
138
144
|
};
|
|
139
|
-
//# sourceMappingURL=index-
|
|
145
|
+
//# sourceMappingURL=index-BNDyaWnI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BNDyaWnI.js","sources":["../src/plugins/toolbox/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { JSX, ReactElement } from 'jsx-dom'\nimport './styles.scss'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n toolbox: PluginToolbox\n }\n interface Events {\n 'toolbox/button-added'(payload: { ctx: InPageEdit; button: HTMLElement }): void\n 'toolbox/button-removed'(payload: { ctx: InPageEdit; id: string }): void\n 'toolbox/button-clicked'(payload: { ctx: InPageEdit; button: HTMLElement; id: string }): void\n 'toolbox/toggle'(payload: { ctx: InPageEdit; opened: boolean }): void\n }\n}\n\n@RegisterPreferences(\n Schema.object({\n toolboxAlwaysShow: Schema.boolean()\n .description('Make the toolbox opened by default')\n .default(false),\n }).description('Toolbox preferences')\n)\n@Inject(['preferences'])\nexport class PluginToolbox extends Service {\n container!: HTMLElement\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'toolbox', false)\n }\n\n protected async start(): Promise<void> {\n this.container = this.createToolbox()\n this.ctx.preferences.get('toolboxAlwaysShow').then((val) => {\n if (val) {\n this.container.classList.add('is-persistent')\n }\n })\n this.setupHoverLogic()\n document.body.appendChild(this.container)\n\n // 初始化时更新按钮延迟\n this.updateButtonDelays()\n }\n\n protected stop(): void | Promise<void> {\n this.container?.remove()\n }\n\n private get isPersistent() {\n return this.container.classList.contains('is-persistent')\n }\n\n private setupHoverLogic() {\n let hoverTimeout: number | null = null\n\n // 鼠标进入时暂时展开\n this.container.addEventListener('mouseenter', () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout)\n hoverTimeout = null\n }\n\n // 如果不在持久化状态,则添加hover展开效果\n if (!this.isPersistent) {\n this.container.classList.add('is-hovered')\n }\n })\n\n // 鼠标离开时收起(如果不是持久化状态)\n this.container.addEventListener('mouseleave', () => {\n if (!this.isPersistent) {\n hoverTimeout = window.setTimeout(() => {\n this.container.classList.remove('is-hovered')\n }, 150) // 延迟150ms收起,避免快速移动鼠标时闪烁\n }\n })\n }\n\n /**\n * 计算按钮动画延迟\n * @param index 按钮索引(从0开始)\n * @param totalCount 总按钮数量\n * @returns 延迟时间(秒)\n */\n private calculateButtonDelay(index: number, totalCount: number): number {\n if (totalCount <= 1) return 0\n\n // 总动画时长150ms = 0.15s\n const totalDuration = 0.15\n // 使用平方根函数创建非线性延迟,差值逐渐缩小\n const normalizedIndex = index / (totalCount - 1)\n const delay = totalDuration * Math.sqrt(normalizedIndex)\n\n return Math.round(delay * 1000) / 1000 // 保留3位小数\n }\n\n /**\n * 更新按钮组的动画延迟\n */\n private updateButtonDelays() {\n const btnGroups = this.container.querySelectorAll('.btn-group')\n\n btnGroups.forEach((group) => {\n const buttons = group.querySelectorAll('.btn-tip-group')\n const totalCount = buttons.length\n\n buttons.forEach((button, index) => {\n const delay = this.calculateButtonDelay(index, totalCount)\n ;(button as HTMLElement).style.setProperty('--transition-delay', `${delay}s`)\n ;(button as HTMLElement).style.setProperty('--max-transition-delay', '0.15s')\n })\n })\n }\n\n private createToolbox() {\n const toggler = (\n <button\n className=\"ipe-toolbox-btn\"\n id=\"toolbox-toggler\"\n onClick={() => {\n this.toggle()\n }}\n >\n {/* Font Awesome 5 Solid: Plus */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"448\" height=\"512\" viewBox=\"0 0 448 512\">\n <rect width=\"448\" height=\"512\" fill=\"none\" />\n <path\n fill=\"currentColor\"\n d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32\"\n />\n </svg>\n </button>\n )\n const element = (\n <div id=\"ipe-edit-toolbox\">\n <ul className=\"btn-group group1\" style={{ display: 'flex', flexDirection: 'column' }}></ul>\n <ul className=\"btn-group group2\" style={{ display: 'flex', flexDirection: 'row' }}></ul>\n {toggler}\n </div>\n )\n\n return element as HTMLElement\n }\n\n private normalizeButtonId(id: string) {\n if (!id) {\n id = Math.random().toString(36).substring(2, 8)\n }\n return `ipe-toolbox__${id.trim()}`.replace(/\\s\\.#/g, '-')\n }\n\n addButton(payload: {\n id: string\n group?: 'auto' | 'group1' | 'group2'\n icon: string | HTMLElement | SVGElement | ReactElement\n tooltip?: string | HTMLElement\n itemProps?: JSX.IntrinsicElements['li']\n buttonProps?: JSX.IntrinsicElements['button']\n onClick?: (event: MouseEvent) => void\n index?: number\n }) {\n let { id, group, icon, tooltip, itemProps, buttonProps, onClick, index } = payload\n id = this.normalizeButtonId(id)\n\n const existingButton = this.container.querySelector(`#${id}`)\n if (existingButton) {\n this.ctx.logger('toolbox').warn(`Button with id ${id} already exists, replacing it.`)\n existingButton.remove()\n }\n\n let groupEl: HTMLElement | null = null\n if (typeof group === 'undefined' || group === 'auto') {\n // 选择按钮最少的那一组,一样多就选第一组\n const group1 = this.container.querySelector('.btn-group.group1') as HTMLElement\n const group2 = this.container.querySelector('.btn-group.group2') as HTMLElement\n const group1Count = group1?.children.length || 0\n const group2Count = group2?.children.length || 0\n groupEl = group1Count <= group2Count ? group1 : group2\n } else {\n groupEl = this.container.querySelector(`.btn-group.${group}`)\n }\n if (!groupEl) throw new Error(`Button group ${group} not found`)\n\n const button = (\n <li class=\"btn-tip-group\" id={id} onClick={onClick} {...itemProps}>\n <div class=\"btn-tip\">{tooltip}</div>\n <button id={`${id}-btn`} data-id={payload.id} class=\"ipe-toolbox-btn\" {...buttonProps}>\n {icon}\n </button>\n </li>\n )\n\n button.addEventListener('click', (e) => {\n this.ctx.emit('toolbox/button-clicked', {\n ctx: this.ctx,\n button: e.target as HTMLElement,\n id: payload.id,\n })\n })\n\n if (typeof index === 'number') {\n if (index <= 0) {\n groupEl.prepend(button)\n } else if (index >= groupEl.children.length) {\n groupEl.appendChild(button)\n } else {\n groupEl.children[index]?.before(button)\n }\n } else {\n groupEl.appendChild(button)\n }\n\n this.ctx.emit('toolbox/button-added', {\n ctx: this.ctx,\n button: button as HTMLElement,\n })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n\n return button as HTMLElement\n }\n\n removeButton(id: string) {\n const button = this.container.querySelector(`.ipe-toolbox-btn#${id}`)\n button?.remove()\n this.ctx.emit('toolbox/button-removed', { ctx: this.ctx, id })\n\n // 更新按钮延迟\n this.updateButtonDelays()\n }\n\n getContainer() {\n return this.container\n }\n\n get isOpened() {\n return (\n this.container.classList.contains('is-persistent') ||\n this.container.classList.contains('is-hovered')\n )\n }\n\n toggle(force?: boolean) {\n const isPersistent = this.isPersistent\n const newPersistent = typeof force === 'boolean' ? force : !isPersistent\n this.container.classList.toggle('is-persistent', newPersistent)\n this.container.classList.remove('is-hovered')\n this.ctx.preferences.set('toolboxAlwaysShow', newPersistent)\n this.ctx.emit('toolbox/toggle', { ctx: this.ctx, opened: this.isOpened })\n }\n}\n"],"names":["_PluginToolbox_decorators","_init","_a","RegisterPreferences","Schema","Inject","PluginToolbox","Service","ctx","val","hoverTimeout","index","totalCount","totalDuration","normalizedIndex","delay","group","buttons","button","jsxs","jsx","id","payload","icon","tooltip","itemProps","buttonProps","onClick","existingButton","groupEl","group1","group2","group1Count","group2Count","e","force","isPersistent","newPersistent","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as l, F as q, P as j } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { B as S, I as E, S as P } from "./index-
|
|
2
|
+
import { B as S, I as E, S as P } from "./index-BUI2IX49.js";
|
|
3
3
|
import { R as Q } from "./Preferences-DS4-CFWe.js";
|
|
4
4
|
import { m as C } from "./makeCallable-LDU0xZMJ.js";
|
|
5
5
|
var F = Object.create, w = Object.defineProperty, T = Object.getOwnPropertyDescriptor, f = (t, i) => (i = Symbol[t]) ? i : Symbol.for("Symbol." + t), x = (t) => {
|
|
@@ -124,4 +124,4 @@ M(h, 1, v);
|
|
|
124
124
|
export {
|
|
125
125
|
v as PluginQuickPreview
|
|
126
126
|
};
|
|
127
|
-
//# sourceMappingURL=index-
|
|
127
|
+
//# sourceMappingURL=index-BQzuJxBO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-BQzuJxBO.js","sources":["../src/plugins/quick-preview/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\nimport { IWikiPage } from '@/models/WikiPage'\nimport { MwApiParams } from 'wiki-saikou'\nimport { PageParseData } from '@/models/WikiPage/types/PageParseData'\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\nimport { QuickDeleteInitPayload } from '../quick-delete/index.js'\n\ninterface QuickPreviewEventPayload {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: IWikiPage\n text: string\n parseData: PageParseData\n}\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickPreview: PluginQuickPreview & {\n // for backward compatibility\n (\n ...args: Parameters<PluginQuickPreview['previewWikitext']>\n ): ReturnType<PluginQuickPreview['previewWikitext']>\n }\n }\n interface Events {\n 'quick-preview/show-modal'(payload: Omit<QuickPreviewEventPayload, 'parseData'>): void\n 'quick-preview/loaded'(payload: QuickPreviewEventPayload): void\n }\n}\n\n@Inject(['api', 'wikiPage', 'modal', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'quickPreview.keyshortcut': Schema.string()\n .default('ctrl-p')\n .description('Key shortcut to open quick preview in quick edit modal'),\n })\n .extra('category', 'edit')\n .description('Quick preview options')\n)\nexport class PluginQuickPreview extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quickPreview')\n this.ctx.set('quickPreview', makeCallable(this, 'previewWikitext'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n this.ctx.on('quick-delete/wiki-page', this.injectQuickDelete.bind(this))\n }\n\n protected stop(): Promise<void> | void {}\n\n previewWikitext(\n text: string,\n params?: MwApiParams,\n wikiPage?: IWikiPage,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n wikiPage ||= this.ctx.wikiPage.newBlankPage({\n title: 'API',\n })\n\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n className: 'in-page-edit ipe-quickPreview',\n sizeClass: 'large',\n center: false,\n ...modalOptions,\n })\n .init()\n }\n\n modal.show()\n modal.setTitle('Preview - Loading...')\n modal.setContent(<ProgressBar />)\n modal.bringToFront()\n this.ctx.emit('quick-preview/show-modal', {\n ctx: this.ctx,\n text,\n modal,\n wikiPage,\n })\n\n wikiPage\n .preview(text, params)\n .then((ret) => {\n const {\n data: { parse },\n } = ret\n modal.setTitle(`Preview - ${parse.title}`)\n let outputRef: HTMLElement | null = null\n modal.setContent(\n (\n <section>\n <div\n ref={(el) => (outputRef = el)}\n className=\"mw-parser-output\"\n innerHTML={parse.text}\n ></div>\n </section>\n ) as HTMLElement\n )\n window.mw?.hook('wikipage.content').fire($(outputRef!))\n this.ctx.emit('quick-preview/loaded', {\n ctx: this.ctx,\n modal,\n wikiPage,\n text,\n parseData: parse,\n })\n })\n .catch((error) => {\n modal.setTitle('Preview - Failed')\n modal.setContent(\n <>\n <p>Failed to preview</p>\n <p>{error instanceof Error ? error.message : String(error)}</p>\n </>\n )\n })\n\n return modal\n }\n\n private async injectQuickEdit({ options, modal, wikiPage }: QuickEditEventPayload) {\n let latestPreviewModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: 'Preview',\n side: 'left',\n className: 'btn btn-secondary',\n keyPress:\n (await this.ctx.preferences.get('quickPreview.keyshortcut.quickEdit')) || undefined,\n method: () => {\n let wikitext =\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || ''\n if (options.section === 'new') {\n const title = modal\n .get$content()\n .querySelector<HTMLInputElement>('input[name=\"summary\"]')?.value\n if (title) {\n wikitext = `==${title}==\\n${wikitext}`\n }\n }\n\n latestPreviewModal = this.previewWikitext(\n wikitext,\n undefined,\n wikiPage,\n latestPreviewModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n },\n },\n 1\n )\n modal.on(modal.Event.Close, () => {\n latestPreviewModal?.destroy()\n latestPreviewModal = undefined\n })\n }\n\n private injectQuickDelete({ ctx, modal, wikiPage }: QuickDeleteInitPayload) {\n modal.addButton(\n {\n label: 'Preview',\n side: 'left',\n className: 'btn btn-secondary',\n method: () => {\n this.logger.warn('To be implemented: preview wikitext for quick delete')\n },\n },\n 2\n )\n }\n}\n"],"names":["_PluginQuickPreview_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickPreview","BasePlugin","ctx","makeCallable","text","params","wikiPage","modal","modalOptions","jsx","ProgressBar","ret","parse","outputRef","el","error","jsxs","Fragment","options","latestPreviewModal","wikitext","title","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|