@inpageedit/core 0.11.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/dist/{PluginPrefSync-PIoKRRu2.js → PluginPrefSync-COidewzp.js} +10 -6
- package/dist/PluginPrefSync-COidewzp.js.map +1 -0
- package/dist/components/index.js +69 -51
- package/dist/components/index.js.map +1 -1
- package/dist/{index-B5vDBMEh.js → index-BNDyaWnI.js} +2 -2
- package/dist/{index-B5vDBMEh.js.map → index-BNDyaWnI.js.map} +1 -1
- package/dist/{index-BP-e8PeH.js → index-BQzuJxBO.js} +2 -2
- package/dist/{index-BP-e8PeH.js.map → index-BQzuJxBO.js.map} +1 -1
- package/dist/{index-DFPN4uYd.js → index-BUI2IX49.js} +25 -20
- package/dist/index-BUI2IX49.js.map +1 -0
- package/dist/{index-BzCqww16.js → index-CBszdxJJ.js} +2 -2
- package/dist/{index-BzCqww16.js.map → index-CBszdxJJ.js.map} +1 -1
- package/dist/{index-CFb1PSJg.js → index-CfgnJ51A.js} +2 -2
- package/dist/{index-CFb1PSJg.js.map → index-CfgnJ51A.js.map} +1 -1
- package/dist/{index-DGOY4X1J.js → index-Cx4qgCJK.js} +452 -450
- package/dist/{index-DGOY4X1J.js.map → index-Cx4qgCJK.js.map} +1 -1
- package/dist/{index-DkQLtTG0.js → index-D5J7RU5I.js} +2 -2
- package/dist/{index-DkQLtTG0.js.map → index-D5J7RU5I.js.map} +1 -1
- package/dist/{index-BVkdBJNf.js → index-MhNAv9Vf.js} +2 -2
- package/dist/{index-BVkdBJNf.js.map → index-MhNAv9Vf.js.map} +1 -1
- package/dist/{index-D7NpqwUe.js → index-U2RPZk8N.js} +2 -2
- package/dist/{index-D7NpqwUe.js.map → index-U2RPZk8N.js.map} +1 -1
- package/dist/{index-DKDtc9IF.js → index-VnRKIVau.js} +2 -2
- package/dist/{index-DKDtc9IF.js.map → index-VnRKIVau.js.map} +1 -1
- package/dist/{index-BjwVNZ_h.js → index-etJXONAj.js} +2 -2
- package/dist/{index-BjwVNZ_h.js.map → index-etJXONAj.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/lib/index.umd.js +18 -18
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/dist/ActionButton-BgbTKTg7.js +0 -24
- package/dist/ActionButton-BgbTKTg7.js.map +0 -1
- package/dist/PluginPrefSync-PIoKRRu2.js.map +0 -1
- package/dist/index-DFPN4uYd.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { j as s } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { B as I, S as d, W as E, I as k } from "./index-
|
|
2
|
+
import { B as I, S as d, W as E, I as k } from "./index-BUI2IX49.js";
|
|
3
3
|
var U = Object.create, u = Object.defineProperty, j = Object.getOwnPropertyDescriptor, b = (o, e) => (e = Symbol[o]) ? e : Symbol.for("Symbol." + o), w = (o) => {
|
|
4
4
|
throw TypeError(o);
|
|
5
|
-
}, C = (o, e, r) => e in o ? u(o, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[e] = r, T = (o, e) => u(o, "name", { value: e, configurable: !0 }), F = (o) => [, , , U(o?.[b("metadata")] ?? null)], L = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], v = (o) => o !== void 0 && typeof o != "function" ? w("Function expected") : o, O = (o, e, r, n, t) => ({ kind: L[o], name: e, metadata: n, addInitializer: (a) => r._ ? w("Already initialized") : t.push(v(a || null)) }), D = (o, e) => C(e, b("metadata"), o[3]),
|
|
5
|
+
}, C = (o, e, r) => e in o ? u(o, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[e] = r, T = (o, e) => u(o, "name", { value: e, configurable: !0 }), F = (o) => [, , , U(o?.[b("metadata")] ?? null)], L = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], v = (o) => o !== void 0 && typeof o != "function" ? w("Function expected") : o, O = (o, e, r, n, t) => ({ kind: L[o], name: e, metadata: n, addInitializer: (a) => r._ ? w("Already initialized") : t.push(v(a || null)) }), D = (o, e) => C(e, b("metadata"), o[3]), N = (o, e, r, n) => {
|
|
6
6
|
for (var t = 0, a = o[e >> 1], i = a && a.length; t < i; t++) a[t].call(r);
|
|
7
7
|
return n;
|
|
8
|
-
},
|
|
8
|
+
}, B = (o, e, r, n, t, a) => {
|
|
9
9
|
var i, l, m, c = e & 7, y = !1, x = 0, P = o[x] || (o[x] = []), p = c && (t = t.prototype, c < 5 && (c > 3 || !y) && j(t, r));
|
|
10
10
|
T(t, r);
|
|
11
11
|
for (var f = n.length - 1; f >= 0; f--)
|
|
@@ -32,6 +32,7 @@ class g extends (_ = I) {
|
|
|
32
32
|
/* @__PURE__ */ s(
|
|
33
33
|
"button",
|
|
34
34
|
{
|
|
35
|
+
className: "btn primary",
|
|
35
36
|
onClick: (r) => {
|
|
36
37
|
r.preventDefault();
|
|
37
38
|
const n = e.preferencesUI.getExistingModal(), t = r.target;
|
|
@@ -47,6 +48,7 @@ class g extends (_ = I) {
|
|
|
47
48
|
/* @__PURE__ */ s(
|
|
48
49
|
"button",
|
|
49
50
|
{
|
|
51
|
+
className: "btn primary",
|
|
50
52
|
onClick: (r) => {
|
|
51
53
|
r.preventDefault();
|
|
52
54
|
const n = r.target;
|
|
@@ -81,6 +83,7 @@ class g extends (_ = I) {
|
|
|
81
83
|
/* @__PURE__ */ s(
|
|
82
84
|
"button",
|
|
83
85
|
{
|
|
86
|
+
className: "btn",
|
|
84
87
|
onClick: (r) => {
|
|
85
88
|
r.preventDefault();
|
|
86
89
|
const n = e.preferencesUI.getExistingModal();
|
|
@@ -111,6 +114,7 @@ class g extends (_ = I) {
|
|
|
111
114
|
/* @__PURE__ */ s(
|
|
112
115
|
"button",
|
|
113
116
|
{
|
|
117
|
+
className: "btn",
|
|
114
118
|
onClick: async (r) => {
|
|
115
119
|
r.preventDefault();
|
|
116
120
|
const n = await e.preferences.getExportableRecord(), t = JSON.stringify(n, null, 2);
|
|
@@ -246,9 +250,9 @@ class g extends (_ = I) {
|
|
|
246
250
|
}
|
|
247
251
|
}
|
|
248
252
|
h = F(_);
|
|
249
|
-
g =
|
|
250
|
-
|
|
253
|
+
g = B(h, 0, "PluginPrefSync", S, g);
|
|
254
|
+
N(h, 1, g);
|
|
251
255
|
export {
|
|
252
256
|
g as PluginPrefSync
|
|
253
257
|
};
|
|
254
|
-
//# sourceMappingURL=PluginPrefSync-
|
|
258
|
+
//# sourceMappingURL=PluginPrefSync-COidewzp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginPrefSync-COidewzp.js","sources":["../src/plugins/preferences-ui/PluginPrefSync.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit.js'\nimport { WatchlistAction } from '@/models/WikiPage/types/WatchlistAction.js'\nimport { IWikiTitle } from '@/models/WikiTitle/index.js'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n prefSync: PluginPrefSync\n }\n}\n\n@Inject(['preferences', 'wikiPage', 'wikiTitle', 'modal', 'preferencesUI'])\nexport class PluginPrefSync extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'pref-sync')\n ctx.set('prefSync', this)\n }\n\n protected start(): Promise<void> | void {\n const ctx = this.ctx\n ctx.preferences.defineCategory({\n name: 'pref-sync',\n label: 'Sync',\n description: 'Import and export preferences',\n index: 98,\n })\n ctx.preferences.registerCustomConfig(\n 'pref-sync-user-page',\n Schema.object({\n 'pref-sync-user-page': Schema.const(\n <section>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <button\n className=\"btn primary\"\n onClick={(e) => {\n e.preventDefault()\n const modal = ctx.preferencesUI.getExistingModal()\n const btn = e.target as HTMLButtonElement\n btn.disabled = true\n modal?.setLoadingState(true)\n this.importFromUserPage()\n .then((record) => {\n this.notifyImportSuccess(record)\n modal?.close?.()\n })\n .finally(() => {\n btn.disabled = false\n modal?.setLoadingState(false)\n })\n }}\n >\n Import\n </button>\n <button\n className=\"btn primary\"\n onClick={(e) => {\n e.preventDefault()\n const btn = e.target as HTMLButtonElement\n btn.disabled = true\n const modal = ctx.preferencesUI.getExistingModal()\n modal?.setLoadingState(true)\n this.exportToUserPage()\n .then((title) => {\n ctx.modal.notify('success', {\n title: 'Preferences Exported',\n content: (\n <p>\n Your preferences have been exported to{' '}\n <a href={title.getURL().toString()} target=\"_blank\">\n {title.getPrefixedText()}\n </a>\n .\n </p>\n ),\n })\n modal?.close?.()\n })\n .finally(() => {\n btn.disabled = false\n modal?.setLoadingState(false)\n })\n }}\n >\n Export\n </button>\n </div>\n </section>\n ).role('raw-html'),\n }).description('Backup your preferences via user page'),\n 'pref-sync'\n )\n ctx.preferences.registerCustomConfig(\n 'pref-sync-manual',\n Schema.object({\n 'pref-sync-manual': Schema.const(\n <section>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <button\n className=\"btn\"\n onClick={(e) => {\n e.preventDefault()\n const modal = ctx.preferencesUI.getExistingModal()\n modal?.setLoadingState(true)\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = 'application/json'\n input.addEventListener('change', async (e) => {\n try {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file) {\n return\n }\n const record = await this.importFromFile(file)\n this.notifyImportSuccess(record)\n modal?.close?.()\n } catch (e) {\n ctx.modal.notify('error', {\n title: 'Import failed',\n content: e instanceof Error ? e.message : String(e),\n })\n } finally {\n modal?.setLoadingState(false)\n }\n })\n input.addEventListener('cancel', () => {\n modal?.setLoadingState(false)\n })\n input.click()\n }}\n >\n Import from file\n </button>\n <button\n className=\"btn\"\n onClick={async (e) => {\n e.preventDefault()\n const data = await ctx.preferences.getExportableRecord()\n const json = JSON.stringify(data, null, 2)\n ctx.modal.dialog(\n {\n title: 'Save to file',\n content: (\n <div>\n <label htmlFor=\"data\">Your InPageEdit preferences:</label>\n <textarea\n name=\"data\"\n id=\"data\"\n rows={10}\n value={json}\n readOnly\n style={{ width: '100%' }}\n ></textarea>\n </div>\n ),\n buttons: [\n {\n label: 'Copy',\n method: () => {\n navigator.clipboard.writeText(json)\n ctx.modal.notify('success', {\n content: 'Copied to clipboard',\n })\n },\n },\n {\n label: 'Download',\n method: () => {\n const a = document.createElement('a')\n a.href = `data:text/json;charset=utf-8,${encodeURIComponent(json)}`\n a.download = `ipe-prefs-${new Date().toISOString()}.json`\n a.click()\n },\n },\n ],\n },\n () => {}\n )\n }}\n >\n Save to file\n </button>\n </div>\n </section>\n ).role('raw-html'),\n }).description('Backup your preferences to file'),\n 'pref-sync'\n )\n }\n\n protected stop(): Promise<void> | void {}\n\n /**\n * 获取用户页配置文件的标题\n */\n private getUserPrefsPageTitle(): IWikiTitle | null {\n try {\n const userName = this.ctx.wiki?.userInfo?.name\n if (!userName) {\n return null\n }\n // 使用 User: 命名空间\n return this.ctx.wikiTitle.newTitle(`User:${userName}/ipe-prefs.json`, 2)\n } catch {\n return null\n }\n }\n\n /**\n * 从用户页加载配置\n */\n async importFromUserPage(): Promise<Record<string, unknown>> {\n const title = this.getUserPrefsPageTitle()\n if (!title) {\n this.logger.debug('Cannot get user page title, skipping load')\n return {}\n }\n\n try {\n // 使用 raw action 获取 JSON 内容\n const rawUrl = title.getURL({ action: 'raw', ctype: 'application/json' })\n\n let response: Response\n try {\n response = await fetch(rawUrl.toString())\n if (!response.ok) {\n if (response.status === 404) {\n this.logger.debug('User preferences page does not exist')\n return {}\n }\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n } catch (error) {\n if (error instanceof TypeError && error.message.includes('Failed to fetch')) {\n this.logger.debug('User preferences page does not exist or network error')\n return {}\n }\n throw error\n }\n\n const blob = await response.blob()\n const changed = await this.importFromFile(blob)\n this.logger.info('Loaded preferences from user page:', title)\n return changed\n } catch (error) {\n this.logger.error('Failed to load preferences from user page:', error)\n return {}\n }\n }\n\n /**\n * 导出配置到用户页\n */\n async exportToUserPage(): Promise<IWikiTitle> {\n const ctx = this.ctx\n const title = this.getUserPrefsPageTitle()\n if (!title) {\n throw new Error('Cannot get user page title')\n }\n\n const json = await ctx.preferences.getExportableRecord()\n const text = JSON.stringify(json, null, 2)\n\n try {\n const page = this.ctx.wikiPage.newBlankPage({\n title: title.toString(),\n ns: 2, // User namespace\n })\n await page.edit({\n text,\n summary: 'Update InPageEdit preferences',\n watchlist: WatchlistAction.nochange,\n })\n\n this.logger.info('Exported preferences to user page:', title)\n return title\n } catch (error) {\n this.logger.error('Failed to export preferences to user page:', error)\n throw error\n }\n }\n\n async importFromFile(input: Blob): Promise<Record<string, unknown>> {\n const text = await input.text()\n const data = JSON.parse(text)\n const changed = await this.ctx.preferences.setMany(data)\n return changed\n }\n\n private notifyImportSuccess(configs?: Record<string, unknown>) {\n const keys = Object.keys(configs ?? {})\n const count = keys.length\n return this.ctx.modal.notify('success', {\n title: 'Preferences Imported',\n content: (\n <section>\n <p>\n Successfully imported {count || ''} {count !== 1 ? 'settings' : 'setting'}:\n </p>\n <ol style={{ listStyle: 'auto', paddingLeft: '1em' }}>\n {keys.map((key) => (\n <li key={key}>{key}</li>\n ))}\n </ol>\n </section>\n ),\n })\n }\n}\n"],"names":["_PluginPrefSync_decorators","_init","_a","Inject","PluginPrefSync","BasePlugin","ctx","Schema","jsx","jsxs","e","modal","btn","record","title","input","file","data","json","userName","rawUrl","response","error","blob","changed","text","WatchlistAction","configs","keys","count","key","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}
|
package/dist/components/index.js
CHANGED
|
@@ -1,80 +1,98 @@
|
|
|
1
|
-
import { M as
|
|
2
|
-
import { j as
|
|
3
|
-
import { P as
|
|
4
|
-
import { T
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
contents_container: m
|
|
1
|
+
import { M as L } from "../index-lZkYoUca.js";
|
|
2
|
+
import { j as o, c as r } from "../index-CvhkVj_L.js";
|
|
3
|
+
import { P as A } from "../index-CvhkVj_L.js";
|
|
4
|
+
import { T } from "../index-Bh70Udzi.js";
|
|
5
|
+
import { C as z } from "../CheckBox-D3rHnX7I.js";
|
|
6
|
+
import { I as C } from "../InputBox-BV4m05Xs.js";
|
|
7
|
+
import { R as I } from "../RadioBox-nJqWsxW2.js";
|
|
8
|
+
const b = "_tabview_zlbug_1", d = "_labels_container_zlbug_4", _ = "_label_zlbug_4", m = "_active_zlbug_32", p = "_contents_container_zlbug_35", l = {
|
|
9
|
+
tabview: b,
|
|
10
|
+
labels_container: d,
|
|
11
|
+
label: _,
|
|
12
|
+
active: m,
|
|
13
|
+
contents_container: p
|
|
15
14
|
};
|
|
16
|
-
function
|
|
17
|
-
tabs:
|
|
18
|
-
defaultActiveIndex:
|
|
15
|
+
function w({
|
|
16
|
+
tabs: n = [],
|
|
17
|
+
defaultActiveIndex: e = 0
|
|
19
18
|
}) {
|
|
20
|
-
const
|
|
21
|
-
/* @__PURE__ */
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
] }), s =
|
|
24
|
-
`.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${
|
|
19
|
+
const i = /* @__PURE__ */ o("div", { className: `ipe-tabView ${l.tabview}`, children: [
|
|
20
|
+
/* @__PURE__ */ o("ul", { className: `ipe-tabView__labels-container ${l.labels_container}`, children: n.map((a) => /* @__PURE__ */ o(f, { name: a.name, children: a.children }, a.name)) }),
|
|
21
|
+
/* @__PURE__ */ o("div", { className: `ipe-tabView__contents ${l.contents_container}`, children: n.map((a) => /* @__PURE__ */ o(u, { name: a.name, children: a.content }, a.name)) })
|
|
22
|
+
] }), s = i.querySelector(
|
|
23
|
+
`.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${e + 1})`
|
|
25
24
|
);
|
|
26
|
-
return s && s.click(),
|
|
25
|
+
return s && s.click(), i;
|
|
27
26
|
}
|
|
28
|
-
function f({ name:
|
|
29
|
-
return /* @__PURE__ */
|
|
27
|
+
function f({ name: n, children: e }) {
|
|
28
|
+
return /* @__PURE__ */ o(
|
|
30
29
|
"li",
|
|
31
30
|
{
|
|
32
|
-
"data-tab-name":
|
|
33
|
-
className: `ipe-tabView__label ${
|
|
34
|
-
onClick: function(
|
|
35
|
-
|
|
31
|
+
"data-tab-name": n,
|
|
32
|
+
className: `ipe-tabView__label ${l.label}`,
|
|
33
|
+
onClick: function(i) {
|
|
34
|
+
i.preventDefault();
|
|
36
35
|
const s = this.closest(".ipe-tabView");
|
|
37
36
|
if (!s) return;
|
|
38
37
|
const a = Array.from(s.children).find(
|
|
39
|
-
(
|
|
38
|
+
(t) => t.classList.contains("ipe-tabView__labels")
|
|
40
39
|
)?.children;
|
|
41
|
-
a && Array.from(a).forEach((
|
|
42
|
-
|
|
43
|
-
}), this.classList.add(
|
|
44
|
-
const
|
|
45
|
-
(
|
|
40
|
+
a && Array.from(a).forEach((t) => {
|
|
41
|
+
t.classList.remove(l.active);
|
|
42
|
+
}), this.classList.add(l.active);
|
|
43
|
+
const c = Array.from(s.children).find(
|
|
44
|
+
(t) => t.classList.contains("ipe-tabView__contents")
|
|
46
45
|
)?.children;
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
c && Array.from(c).forEach((t) => {
|
|
47
|
+
t instanceof HTMLElement && (t.dataset.tabName === n ? (t.style.display = "", t.classList.add(l.active)) : (t.style.display = "none", t.classList.remove(l.active)));
|
|
49
48
|
});
|
|
50
49
|
},
|
|
51
|
-
children: /* @__PURE__ */
|
|
50
|
+
children: /* @__PURE__ */ o("a", { children: e || n })
|
|
52
51
|
}
|
|
53
52
|
);
|
|
54
53
|
}
|
|
55
|
-
function
|
|
56
|
-
return /* @__PURE__ */
|
|
54
|
+
function u({ name: n, children: e }) {
|
|
55
|
+
return /* @__PURE__ */ o(
|
|
57
56
|
"div",
|
|
58
57
|
{
|
|
59
|
-
"data-tab-name":
|
|
58
|
+
"data-tab-name": n,
|
|
60
59
|
className: "ipe-tabView__content-body",
|
|
61
60
|
style: {
|
|
62
61
|
display: "none"
|
|
63
62
|
},
|
|
64
|
-
children:
|
|
63
|
+
children: e
|
|
65
64
|
}
|
|
66
65
|
);
|
|
67
66
|
}
|
|
67
|
+
const v = window?.location?.origin, y = ({
|
|
68
|
+
type: n,
|
|
69
|
+
tag: e,
|
|
70
|
+
href: i,
|
|
71
|
+
target: s,
|
|
72
|
+
children: a,
|
|
73
|
+
...c
|
|
74
|
+
}) => (e = e || (i ? "a" : "button"), typeof s > "u" && i && i.startsWith("http") && !i.startsWith(v) && (s = "_blank"), r(
|
|
75
|
+
e,
|
|
76
|
+
{
|
|
77
|
+
className: `theme-ipe ipe-action-button ipe-modal-btn is-${n || "default"}`,
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
href: e === "a" ? i : void 0,
|
|
80
|
+
target: e === "a" ? s : void 0,
|
|
81
|
+
"data-href": e !== "a" ? i : void 0,
|
|
82
|
+
...c
|
|
83
|
+
},
|
|
84
|
+
a
|
|
85
|
+
));
|
|
68
86
|
export {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
y as ActionButton,
|
|
88
|
+
z as CheckBox,
|
|
89
|
+
C as InputBox,
|
|
90
|
+
L as MBox,
|
|
91
|
+
A as ProgressBar,
|
|
92
|
+
I as RadioBox,
|
|
93
|
+
u as TabContent,
|
|
76
94
|
f as TabLabel,
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
w as TabView,
|
|
96
|
+
T as TwinSwapInput
|
|
79
97
|
};
|
|
80
98
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/components/TabView/index.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\nimport styles from './styles.module.sass'\n\nexport interface TabViewLabelOptions {\n name: string\n children: ReactNode\n}\n\nconsole.log(styles)\n\nexport function TabView({\n tabs = [],\n defaultActiveIndex = 0,\n}: {\n tabs: (TabViewLabelOptions & { content: ReactNode })[]\n defaultActiveIndex?: number\n}) {\n const el = (\n <div className={`ipe-tabView ${styles.tabview}`}>\n <ul className={`ipe-tabView__labels-container ${styles.labels_container}`}>\n {tabs.map((tab) => (\n <TabLabel key={tab.name} name={tab.name}>\n {tab.children}\n </TabLabel>\n ))}\n </ul>\n <div className={`ipe-tabView__contents ${styles.contents_container}`}>\n {tabs.map((tab) => (\n <TabContent key={tab.name} name={tab.name}>\n {tab.content}\n </TabContent>\n ))}\n </div>\n </div>\n )\n\n const defaultActiveLabel = el.querySelector<HTMLAnchorElement>(\n `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${defaultActiveIndex + 1})`\n )\n if (defaultActiveLabel) {\n defaultActiveLabel.click()\n }\n\n return el\n}\n\nexport function TabLabel({ name, children }: { name: string; children: ReactNode }) {\n return (\n <li\n data-tab-name={name}\n className={`ipe-tabView__label ${styles.label}`}\n onClick={function (e) {\n e.preventDefault()\n const container = this.closest('.ipe-tabView')\n if (!container) return\n const labels = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__labels')\n )?.children\n if (labels) {\n Array.from(labels).forEach((label) => {\n label.classList.remove(styles.active)\n })\n }\n this.classList.add(styles.active)\n const contents = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__contents')\n )?.children\n if (contents) {\n Array.from(contents).forEach((content) => {\n if (content instanceof HTMLElement) {\n if (content.dataset.tabName === name) {\n content.style.display = ''\n content.classList.add(styles.active)\n } else {\n content.style.display = 'none'\n content.classList.remove(styles.active)\n }\n }\n })\n }\n }}\n >\n <a>{children || name}</a>\n </li>\n )\n}\n\nexport function TabContent({ name, children }: { name: string; children: ReactNode }) {\n return (\n <div\n data-tab-name={name}\n className=\"ipe-tabView__content-body\"\n style={{\n display: 'none',\n }}\n >\n {children}\n </div>\n )\n}\n"],"names":["TabView","tabs","defaultActiveIndex","el","jsxs","styles","jsx","tab","TabLabel","TabContent","defaultActiveLabel","name","children","e","container","labels","label","contents","content"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/components/TabView/index.tsx","../../src/components/ActionButton.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\nimport styles from './styles.module.sass'\n\nexport interface TabViewLabelOptions {\n name: string\n children: ReactNode\n}\n\nconsole.log(styles)\n\nexport function TabView({\n tabs = [],\n defaultActiveIndex = 0,\n}: {\n tabs: (TabViewLabelOptions & { content: ReactNode })[]\n defaultActiveIndex?: number\n}) {\n const el = (\n <div className={`ipe-tabView ${styles.tabview}`}>\n <ul className={`ipe-tabView__labels-container ${styles.labels_container}`}>\n {tabs.map((tab) => (\n <TabLabel key={tab.name} name={tab.name}>\n {tab.children}\n </TabLabel>\n ))}\n </ul>\n <div className={`ipe-tabView__contents ${styles.contents_container}`}>\n {tabs.map((tab) => (\n <TabContent key={tab.name} name={tab.name}>\n {tab.content}\n </TabContent>\n ))}\n </div>\n </div>\n )\n\n const defaultActiveLabel = el.querySelector<HTMLAnchorElement>(\n `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${defaultActiveIndex + 1})`\n )\n if (defaultActiveLabel) {\n defaultActiveLabel.click()\n }\n\n return el\n}\n\nexport function TabLabel({ name, children }: { name: string; children: ReactNode }) {\n return (\n <li\n data-tab-name={name}\n className={`ipe-tabView__label ${styles.label}`}\n onClick={function (e) {\n e.preventDefault()\n const container = this.closest('.ipe-tabView')\n if (!container) return\n const labels = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__labels')\n )?.children\n if (labels) {\n Array.from(labels).forEach((label) => {\n label.classList.remove(styles.active)\n })\n }\n this.classList.add(styles.active)\n const contents = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__contents')\n )?.children\n if (contents) {\n Array.from(contents).forEach((content) => {\n if (content instanceof HTMLElement) {\n if (content.dataset.tabName === name) {\n content.style.display = ''\n content.classList.add(styles.active)\n } else {\n content.style.display = 'none'\n content.classList.remove(styles.active)\n }\n }\n })\n }\n }}\n >\n <a>{children || name}</a>\n </li>\n )\n}\n\nexport function TabContent({ name, children }: { name: string; children: ReactNode }) {\n return (\n <div\n data-tab-name={name}\n className=\"ipe-tabView__content-body\"\n style={{\n display: 'none',\n }}\n >\n {children}\n </div>\n )\n}\n","import { h, JSX } from 'jsx-dom'\n\nexport interface ActionButtonProps {\n type?: 'primary' | 'secondary' | 'danger' | 'default'\n tag?: 'a' | 'button' | 'div'\n}\n\nconst origin = window?.location?.origin\n\nexport const ActionButton = ({\n type,\n tag,\n href,\n target,\n children,\n ...rest\n}: ActionButtonProps &\n Omit<JSX.IntrinsicElements['button'], 'type'> &\n JSX.IntrinsicElements['a']) => {\n tag = tag || (href ? 'a' : 'button')\n if (\n typeof target === 'undefined' &&\n href &&\n href.startsWith('http') &&\n !href.startsWith(origin)\n ) {\n target = '_blank'\n }\n return h(\n tag,\n {\n className: `theme-ipe ipe-action-button ipe-modal-btn is-${type || 'default'}`,\n // @ts-ignore\n href: tag === 'a' ? href : undefined,\n target: tag === 'a' ? target : undefined,\n 'data-href': tag !== 'a' ? href : undefined,\n ...rest,\n },\n children\n )\n}\n"],"names":["TabView","tabs","defaultActiveIndex","el","jsxs","styles","jsx","tab","TabLabel","TabContent","defaultActiveLabel","name","children","e","container","labels","label","contents","content","origin","ActionButton","type","tag","href","target","rest","h"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as c } from "./index-CvhkVj_L.js";
|
|
2
|
-
import { b as D, I as C, S as f } from "./index-
|
|
2
|
+
import { b as D, I as C, S as f } from "./index-BUI2IX49.js";
|
|
3
3
|
import { R as E } from "./Preferences-DS4-CFWe.js";
|
|
4
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);
|
|
@@ -142,4 +142,4 @@ A(m, 1, x);
|
|
|
142
142
|
export {
|
|
143
143
|
x as PluginToolbox
|
|
144
144
|
};
|
|
145
|
-
//# sourceMappingURL=index-
|
|
145
|
+
//# sourceMappingURL=index-BNDyaWnI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-B5vDBMEh.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
|
+
{"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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"}
|
|
@@ -2512,14 +2512,15 @@ var Ne;
|
|
|
2512
2512
|
r.normalizeBody = t;
|
|
2513
2513
|
})(Ne || (Ne = {}));
|
|
2514
2514
|
var xe = /* @__PURE__ */ ((r) => (r.HTTP_ERROR = "HTTP_ERROR", r.LOGIN_FAILED = "LOGIN_FAILED", r.LOGIN_RETRY_LIMIT_EXCEEDED = "LOGIN_RETRY_LIMIT_EXCEEDED", r.TOKEN_RETRY_LIMIT_EXCEEDED = "TOKEN_RETRY_LIMIT_EXCEEDED", r))(xe || {});
|
|
2515
|
-
|
|
2515
|
+
class z extends Error {
|
|
2516
2516
|
constructor(e, t = "", i) {
|
|
2517
2517
|
super(), this.code = e, this.message = t, this.cause = i, this.name = "WikiSaikouError";
|
|
2518
2518
|
}
|
|
2519
2519
|
static is(e, t) {
|
|
2520
2520
|
return e instanceof this && (t === void 0 || e.code === t);
|
|
2521
2521
|
}
|
|
2522
|
-
}
|
|
2522
|
+
}
|
|
2523
|
+
let pe = class Qt extends Error {
|
|
2523
2524
|
constructor(e, t) {
|
|
2524
2525
|
super(), this.errors = e, this.cause = t, this.name = "MediaWikiApiError", this.errors = Qt.normalizeErrors(e), this.message = e.map((i) => i.text).filter(Boolean).join(`
|
|
2525
2526
|
`), this.code = this.isBadTokenError() ? "badtoken" : this.errors[0]?.code || "Unknown Error";
|
|
@@ -3521,7 +3522,7 @@ class Me {
|
|
|
3521
3522
|
typeof this.options.onClickClose == "function" ? this.options.onClickClose(this) === !1 && (b = !1) : this.options.onClickClose === !1 && (b = !1), b && this.close();
|
|
3522
3523
|
}), c.appendChild(g);
|
|
3523
3524
|
}
|
|
3524
|
-
s.append(a, c),
|
|
3525
|
+
s.append(a, c), this.options.draggable && e && (this.options.draggable = !1), this.options.draggable && (s.style.cursor = "move", s.style.userSelect = "none", s.addEventListener("pointerdown", this.onDragStart.bind(this)), i.classList.add("is-draggable"));
|
|
3525
3526
|
const u = U("div", { className: "ipe-modal-modal__content" }), p = U("div", { className: "ipe-modal-modal__footer" }), y = U("div", {
|
|
3526
3527
|
className: "ipe-modal-modal__buttons ipe-modal-modal__buttons--left"
|
|
3527
3528
|
}), w = U("div", {
|
|
@@ -3529,6 +3530,8 @@ class Me {
|
|
|
3529
3530
|
});
|
|
3530
3531
|
return p.append(y, w), n.append(s, u, p), i.appendChild(n), this.$backdrop = t, this.$modal = i, this.$window = n, this.$header = s, this.$title = a, this.$icons = c, this.$content = u, this.$footer = p, this.$buttonsLeft = y, this.$buttonsRight = w, this.options.title && this.setTitle(this.options.title), this.options.content && this.setContent(this.options.content), this.options.buttons?.length ? this.setButtons(this.options.buttons) : p.style.display = "none", this.options.center && this.$modal.classList.add("is-centered"), this.options.fitScreen && this.$modal.classList.add("is-fullscreen"), this.options.iconButtons && this.$header.classList.add("has-icon-buttons"), this.options.className && this.$window.classList.add(...this.options.className.split(/[\s\.#+]+/g).filter(Boolean)), typeof this.options.fixedHeight == "number" ? this.$window.style.height = `${Math.max(0, this.options.fixedHeight)}px` : this.options.fixedHeight === !0 && this.$window.classList.add("is-fixed-height"), t && t.addEventListener("pointerdown", (g) => {
|
|
3531
3532
|
this.options.outSideClose && g.target === t && this.close();
|
|
3533
|
+
}), this.options.draggable && n.addEventListener("pointerdown", (g) => {
|
|
3534
|
+
g.target && n.contains(g.target) && this.bringToFront();
|
|
3532
3535
|
}), this.onKeyDown = this.onKeyDown.bind(this), this.emit(
|
|
3533
3536
|
"modal.init"
|
|
3534
3537
|
/* Init */
|
|
@@ -4210,6 +4213,7 @@ class Be extends (gr = he) {
|
|
|
4210
4213
|
/* @__PURE__ */ H(
|
|
4211
4214
|
"button",
|
|
4212
4215
|
{
|
|
4216
|
+
className: "btn danger",
|
|
4213
4217
|
onClick: (t) => {
|
|
4214
4218
|
t.preventDefault(), Promise.all(
|
|
4215
4219
|
Object.keys(this.QUERY_DATA).map(
|
|
@@ -5428,7 +5432,8 @@ class bt extends he {
|
|
|
5428
5432
|
}
|
|
5429
5433
|
isWikiLink(e) {
|
|
5430
5434
|
return e.startsWith(this.wikiArticleBaseUrl) || e.startsWith(this.wikiIndexPhpUrl) || // Some servers allow index.php to be omitted
|
|
5431
|
-
e.startsWith(`${this.wikiBaseUrl}/?`)
|
|
5435
|
+
e.startsWith(`${this.wikiBaseUrl}/?`) || // It's the landing page
|
|
5436
|
+
e === this.ctx.wiki.landingPageUrl;
|
|
5432
5437
|
}
|
|
5433
5438
|
static {
|
|
5434
5439
|
this.REG_SKIPPED_HREF = /^(#|javascript:|vbscript:|file:)/i;
|
|
@@ -5616,7 +5621,7 @@ class ge extends q {
|
|
|
5616
5621
|
constructor(e) {
|
|
5617
5622
|
super({
|
|
5618
5623
|
name: "InPageEdit"
|
|
5619
|
-
}), this.version = "0.11.
|
|
5624
|
+
}), this.version = "0.11.1", this.Endpoints = Fe, this.schema = Ze, this.config = _e(ge.DEFAULT_CONFIG, e), this.logger = si({
|
|
5620
5625
|
name: "IPE",
|
|
5621
5626
|
color: "#33aaff",
|
|
5622
5627
|
level: this.config.logLevel
|
|
@@ -5658,24 +5663,24 @@ class ge extends q {
|
|
|
5658
5663
|
// TODO: 这里不应该硬编码,暂时先这样
|
|
5659
5664
|
async #r() {
|
|
5660
5665
|
[
|
|
5661
|
-
import("./index-
|
|
5662
|
-
import("./index-
|
|
5666
|
+
import("./index-CfgnJ51A.js").then(({ PluginAnalytics: t }) => t),
|
|
5667
|
+
import("./index-D5J7RU5I.js").then(
|
|
5663
5668
|
({ PluginInArticleLinks: t }) => t
|
|
5664
5669
|
),
|
|
5665
|
-
import("./index-
|
|
5670
|
+
import("./index-Cx4qgCJK.js").then(
|
|
5666
5671
|
({ PluginPreferencesUI: t }) => t
|
|
5667
5672
|
),
|
|
5668
|
-
import("./index-
|
|
5669
|
-
import("./index-
|
|
5670
|
-
import("./index-
|
|
5671
|
-
import("./index-
|
|
5673
|
+
import("./index-U2RPZk8N.js").then(({ PluginQuickEdit: t }) => t),
|
|
5674
|
+
import("./index-MhNAv9Vf.js").then(({ PluginQuickDelete: t }) => t),
|
|
5675
|
+
import("./index-VnRKIVau.js").then(({ PluginQuickMove: t }) => t),
|
|
5676
|
+
import("./index-BQzuJxBO.js").then(
|
|
5672
5677
|
({ PluginQuickPreview: t }) => t
|
|
5673
5678
|
),
|
|
5674
|
-
import("./index-
|
|
5675
|
-
import("./index-
|
|
5679
|
+
import("./index-etJXONAj.js").then(({ PluginQuickDiff: t }) => t),
|
|
5680
|
+
import("./index-CBszdxJJ.js").then(
|
|
5676
5681
|
({ PluginQuickRedirect: t }) => t
|
|
5677
5682
|
),
|
|
5678
|
-
import("./index-
|
|
5683
|
+
import("./index-BNDyaWnI.js").then(({ PluginToolbox: t }) => t)
|
|
5679
5684
|
].forEach(async (t) => {
|
|
5680
5685
|
this.plugin(await t);
|
|
5681
5686
|
});
|
|
@@ -5696,13 +5701,13 @@ class ge extends q {
|
|
|
5696
5701
|
function xr(r) {
|
|
5697
5702
|
return r.charAt(0).toLowerCase() + r.slice(1);
|
|
5698
5703
|
}
|
|
5699
|
-
function
|
|
5704
|
+
function Mn(r) {
|
|
5700
5705
|
return xr(r).replace(/_/g, "-").replace(/.[A-Z]+/g, (e) => e[0] + "-" + e.slice(1).toLowerCase());
|
|
5701
5706
|
}
|
|
5702
5707
|
function Tn(r) {
|
|
5703
5708
|
return xr(r).replace(/-/g, "_").replace(/.[A-Z]+/g, (e) => e[0] + "_" + e.slice(1).toLowerCase());
|
|
5704
5709
|
}
|
|
5705
|
-
class
|
|
5710
|
+
class Bn {
|
|
5706
5711
|
constructor(e, t = void 0, i) {
|
|
5707
5712
|
this.ctx = e, this.disposeHandlers = [], this.name = i || "", this.config = t || {};
|
|
5708
5713
|
const { promise: n, resolve: s, reject: o } = Promise.withResolvers();
|
|
@@ -5811,7 +5816,7 @@ function Ln(r, e) {
|
|
|
5811
5816
|
}
|
|
5812
5817
|
export {
|
|
5813
5818
|
Wt as $,
|
|
5814
|
-
|
|
5819
|
+
Bn as B,
|
|
5815
5820
|
Fe as E,
|
|
5816
5821
|
le as I,
|
|
5817
5822
|
Ze as S,
|
|
@@ -5821,6 +5826,6 @@ export {
|
|
|
5821
5826
|
ge as c,
|
|
5822
5827
|
si as d,
|
|
5823
5828
|
ri as m,
|
|
5824
|
-
|
|
5829
|
+
Mn as p
|
|
5825
5830
|
};
|
|
5826
|
-
//# sourceMappingURL=index-
|
|
5831
|
+
//# sourceMappingURL=index-BUI2IX49.js.map
|