@opentiny/fluent-editor 3.25.4 → 4.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/attributors/font-style.es.js +1 -1
- package/es/attributors/font-style.es.js.map +1 -1
- package/es/attributors/line-height.es.js +1 -1
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/editor.utils.es.js +0 -9
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js +33 -4
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +33 -4
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/index.es.js +1 -2
- package/es/core/fluent-editor.es.js +3 -0
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +12 -9
- package/es/fluent-editor.es.js.map +1 -1
- package/es/index.es.js +5 -2
- package/es/index.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +1 -57
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/i18n.es.js +4 -3
- package/es/modules/i18n.es.js.map +1 -1
- package/es/modules/link/index.es.js +0 -17
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/shortcut-key/index.es.js +213 -0
- package/es/modules/shortcut-key/index.es.js.map +1 -0
- package/es/modules/table-up/index.es.js +61 -0
- package/es/modules/table-up/index.es.js.map +1 -0
- package/es/modules/toolbar/better-picker.es.js +21 -269
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/index.es.js +0 -1
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/modules/toolbar/toolbar-tip.es.js +38 -8
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
- package/es/themes/snow.es.js +185 -46
- package/es/themes/snow.es.js.map +1 -1
- package/es/ui/icons.config.es.js +6 -5
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +3 -12
- package/es/ui/icons.es.js.map +1 -1
- package/lib/attributors/font-style.cjs.js +1 -1
- package/lib/attributors/font-style.cjs.js.map +1 -1
- package/lib/attributors/line-height.cjs.js +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +0 -9
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +33 -4
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +33 -4
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +0 -1
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +3 -0
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +12 -9
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/index.cjs.js +7 -1
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +0 -56
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/i18n.cjs.js +4 -3
- package/lib/modules/i18n.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js +0 -17
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/shortcut-key/index.cjs.js +213 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
- package/lib/modules/table-up/index.cjs.js +61 -0
- package/lib/modules/table-up/index.cjs.js.map +1 -0
- package/lib/modules/toolbar/better-picker.cjs.js +21 -270
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/index.cjs.js +0 -1
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js +38 -8
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js +187 -48
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +2 -11
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +6 -5
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/package.json +4 -2
- package/style.css +315 -2135
- package/types/attributors/font-style.d.ts +1 -1
- package/types/config/editor.config.d.ts +62 -6
- package/types/config/editor.utils.d.ts +0 -1
- package/types/config/i18n/en-us.d.ts +31 -3
- package/types/config/i18n/zh-cn.d.ts +31 -3
- package/types/config/types/toolbar-item.interface.d.ts +11 -11
- package/types/core/fluent-editor.d.ts +1 -0
- package/types/index.d.ts +2 -0
- package/types/modules/i18n.d.ts +1 -1
- package/types/modules/shortcut-key/index.d.ts +97 -0
- package/types/modules/table-up/index.d.ts +66 -0
- package/types/modules/toolbar/better-picker.d.ts +15 -0
- package/types/themes/snow.d.ts +10 -2
- package/types/ui/icons.config.d.ts +2 -2
- package/es/modules/global-link/constants.es.js +0 -9
- package/es/modules/global-link/constants.es.js.map +0 -1
- package/es/modules/global-link/formats/customer-widget-link.es.js +0 -28
- package/es/modules/global-link/formats/customer-widget-link.es.js.map +0 -1
- package/es/modules/global-link/formats/doc-link.es.js +0 -42
- package/es/modules/global-link/formats/doc-link.es.js.map +0 -1
- package/es/modules/global-link/formats/wiki-link.es.js +0 -34
- package/es/modules/global-link/formats/wiki-link.es.js.map +0 -1
- package/es/modules/global-link/formats/work-item-link.es.js +0 -36
- package/es/modules/global-link/formats/work-item-link.es.js.map +0 -1
- package/es/modules/global-link/global-link-panel.es.js +0 -2
- package/es/modules/global-link/global-link-panel.es.js.map +0 -1
- package/es/modules/global-link/index.es.js +0 -139
- package/es/modules/global-link/index.es.js.map +0 -1
- package/es/modules/global-link/utils/createTable.es.js +0 -50
- package/es/modules/global-link/utils/createTable.es.js.map +0 -1
- package/es/modules/quick-menu.es.js +0 -82
- package/es/modules/quick-menu.es.js.map +0 -1
- package/es/modules/table/better-table.es.js +0 -485
- package/es/modules/table/better-table.es.js.map +0 -1
- package/es/modules/table/formats/header.es.js +0 -94
- package/es/modules/table/formats/header.es.js.map +0 -1
- package/es/modules/table/formats/list.es.js +0 -163
- package/es/modules/table/formats/list.es.js.map +0 -1
- package/es/modules/table/formats/table.es.js +0 -969
- package/es/modules/table/formats/table.es.js.map +0 -1
- package/es/modules/table/modules/table-column-tool.es.js +0 -400
- package/es/modules/table/modules/table-column-tool.es.js.map +0 -1
- package/es/modules/table/modules/table-operation-menu.es.js +0 -475
- package/es/modules/table/modules/table-operation-menu.es.js.map +0 -1
- package/es/modules/table/modules/table-scroll-bar.es.js +0 -190
- package/es/modules/table/modules/table-scroll-bar.es.js.map +0 -1
- package/es/modules/table/modules/table-selection.es.js +0 -305
- package/es/modules/table/modules/table-selection.es.js.map +0 -1
- package/es/modules/table/modules/table-selector.es.js +0 -158
- package/es/modules/table/modules/table-selector.es.js.map +0 -1
- package/es/modules/table/table-config.es.js +0 -74
- package/es/modules/table/table-config.es.js.map +0 -1
- package/es/modules/table/utils/index.es.js +0 -54
- package/es/modules/table/utils/index.es.js.map +0 -1
- package/es/modules/table/utils/node-matchers.es.js +0 -292
- package/es/modules/table/utils/node-matchers.es.js.map +0 -1
- package/lib/modules/global-link/constants.cjs.js +0 -9
- package/lib/modules/global-link/constants.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js +0 -28
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/doc-link.cjs.js +0 -42
- package/lib/modules/global-link/formats/doc-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/wiki-link.cjs.js +0 -34
- package/lib/modules/global-link/formats/wiki-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/work-item-link.cjs.js +0 -36
- package/lib/modules/global-link/formats/work-item-link.cjs.js.map +0 -1
- package/lib/modules/global-link/global-link-panel.cjs.js +0 -2
- package/lib/modules/global-link/global-link-panel.cjs.js.map +0 -1
- package/lib/modules/global-link/index.cjs.js +0 -139
- package/lib/modules/global-link/index.cjs.js.map +0 -1
- package/lib/modules/global-link/utils/createTable.cjs.js +0 -50
- package/lib/modules/global-link/utils/createTable.cjs.js.map +0 -1
- package/lib/modules/quick-menu.cjs.js +0 -82
- package/lib/modules/quick-menu.cjs.js.map +0 -1
- package/lib/modules/table/better-table.cjs.js +0 -485
- package/lib/modules/table/better-table.cjs.js.map +0 -1
- package/lib/modules/table/formats/header.cjs.js +0 -94
- package/lib/modules/table/formats/header.cjs.js.map +0 -1
- package/lib/modules/table/formats/list.cjs.js +0 -163
- package/lib/modules/table/formats/list.cjs.js.map +0 -1
- package/lib/modules/table/formats/table.cjs.js +0 -969
- package/lib/modules/table/formats/table.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-column-tool.cjs.js +0 -400
- package/lib/modules/table/modules/table-column-tool.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-operation-menu.cjs.js +0 -475
- package/lib/modules/table/modules/table-operation-menu.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-scroll-bar.cjs.js +0 -190
- package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selection.cjs.js +0 -305
- package/lib/modules/table/modules/table-selection.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selector.cjs.js +0 -158
- package/lib/modules/table/modules/table-selector.cjs.js.map +0 -1
- package/lib/modules/table/table-config.cjs.js +0 -74
- package/lib/modules/table/table-config.cjs.js.map +0 -1
- package/lib/modules/table/utils/index.cjs.js +0 -54
- package/lib/modules/table/utils/index.cjs.js.map +0 -1
- package/lib/modules/table/utils/node-matchers.cjs.js +0 -292
- package/lib/modules/table/utils/node-matchers.cjs.js.map +0 -1
- package/types/modules/global-link/constants.d.ts +0 -3
- package/types/modules/global-link/formats/customer-widget-link.d.ts +0 -14
- package/types/modules/global-link/formats/doc-link.d.ts +0 -17
- package/types/modules/global-link/formats/wiki-link.d.ts +0 -16
- package/types/modules/global-link/formats/work-item-link.d.ts +0 -16
- package/types/modules/global-link/global-link-panel.d.ts +0 -19
- package/types/modules/global-link/index.d.ts +0 -18
- package/types/modules/global-link/utils/createTable.d.ts +0 -1
- package/types/modules/quick-menu.d.ts +0 -22
- package/types/modules/table/better-table.d.ts +0 -35
- package/types/modules/table/formats/header.d.ts +0 -23
- package/types/modules/table/formats/list.d.ts +0 -34
- package/types/modules/table/formats/table.d.ts +0 -147
- package/types/modules/table/modules/table-column-tool.d.ts +0 -23
- package/types/modules/table/modules/table-operation-menu.d.ts +0 -38
- package/types/modules/table/modules/table-scroll-bar.d.ts +0 -33
- package/types/modules/table/modules/table-selection.d.ts +0 -37
- package/types/modules/table/modules/table-selector.d.ts +0 -22
- package/types/modules/table/table-config.d.ts +0 -38
- package/types/modules/table/utils/index.d.ts +0 -17
- package/types/modules/table/utils/node-matchers.d.ts +0 -9
|
@@ -1,134 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
element.setAttribute(
|
|
8
|
-
attribute,
|
|
9
|
-
element.getAttribute(attribute) !== "true"
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
class Picker {
|
|
13
|
-
constructor(select) {
|
|
14
|
-
this.select = select;
|
|
15
|
-
this.container = document.createElement("span");
|
|
16
|
-
this.buildPicker();
|
|
17
|
-
this.select.style.display = "none";
|
|
18
|
-
this.select.parentNode.insertBefore(this.container, this.select);
|
|
19
|
-
this.label.addEventListener("mousedown", (e) => {
|
|
20
|
-
this.togglePicker();
|
|
21
|
-
e.preventDefault();
|
|
22
|
-
});
|
|
23
|
-
this.label.addEventListener("keydown", (event) => {
|
|
24
|
-
switch (event.key) {
|
|
25
|
-
case "Enter":
|
|
26
|
-
this.togglePicker();
|
|
27
|
-
break;
|
|
28
|
-
case "Escape":
|
|
29
|
-
this.escape();
|
|
30
|
-
event.preventDefault();
|
|
31
|
-
break;
|
|
32
|
-
default:
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
this.select.addEventListener("change", this.update.bind(this));
|
|
36
|
-
}
|
|
37
|
-
togglePicker() {
|
|
38
|
-
this.container.classList.toggle("ql-expanded");
|
|
39
|
-
toggleAriaAttribute(this.label, "aria-expanded");
|
|
40
|
-
toggleAriaAttribute(this.options, "aria-hidden");
|
|
41
|
-
}
|
|
42
|
-
buildItem(option) {
|
|
43
|
-
const item = document.createElement("span");
|
|
44
|
-
item.tabIndex = 0;
|
|
45
|
-
item.setAttribute("role", "button");
|
|
46
|
-
item.classList.add("ql-picker-item");
|
|
47
|
-
if (option.hasAttribute("value")) {
|
|
48
|
-
item.setAttribute("data-value", option.getAttribute("value"));
|
|
49
|
-
}
|
|
50
|
-
if (option.textContent) {
|
|
51
|
-
item.setAttribute("data-label", option.textContent);
|
|
52
|
-
}
|
|
53
|
-
item.addEventListener("click", () => {
|
|
54
|
-
this.selectItem(item, true);
|
|
55
|
-
});
|
|
56
|
-
item.addEventListener("keydown", (event) => {
|
|
57
|
-
switch (event.key) {
|
|
58
|
-
case "Enter":
|
|
59
|
-
this.selectItem(item, true);
|
|
60
|
-
event.preventDefault();
|
|
61
|
-
break;
|
|
62
|
-
case "Escape":
|
|
63
|
-
this.escape();
|
|
64
|
-
event.preventDefault();
|
|
65
|
-
break;
|
|
66
|
-
default:
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return item;
|
|
70
|
-
}
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const quillEasyColor = require("quill-easy-color");
|
|
4
|
+
const fluentEditor = require("../../core/fluent-editor.cjs.js");
|
|
5
|
+
const OriginPicker = fluentEditor.default.import("ui/picker");
|
|
6
|
+
class Picker extends OriginPicker {
|
|
71
7
|
buildLabel() {
|
|
72
8
|
const label = document.createElement("span");
|
|
73
9
|
label.classList.add("ql-picker-label");
|
|
74
|
-
label.innerHTML =
|
|
75
|
-
<svg viewbox="0 0 18 18">
|
|
76
|
-
<polygon class="ql-stroke" points="7 11 9 13 11 11 7 11"></polygon>
|
|
77
|
-
<polygon class="ql-stroke" points="7 7 9 5 11 7 7 7"></polygon>
|
|
78
|
-
</svg>
|
|
79
|
-
`;
|
|
10
|
+
label.innerHTML = `<i class="icon" />`;
|
|
80
11
|
label.tabIndex = 0;
|
|
81
12
|
label.setAttribute("role", "button");
|
|
82
13
|
label.setAttribute("aria-expanded", "false");
|
|
83
14
|
this.container.appendChild(label);
|
|
84
15
|
return label;
|
|
85
16
|
}
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
options.id = `ql-picker-options-${optionsCounter}`;
|
|
92
|
-
optionsCounter += 1;
|
|
93
|
-
this.label.setAttribute("aria-controls", options.id);
|
|
94
|
-
this.options = options;
|
|
95
|
-
Array.from(this.select.options).forEach((option) => {
|
|
96
|
-
const item = this.buildItem(option);
|
|
97
|
-
options.appendChild(item);
|
|
98
|
-
if (option.selected === true) {
|
|
99
|
-
this.selectItem(item);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
this.container.appendChild(options);
|
|
103
|
-
}
|
|
104
|
-
buildPicker() {
|
|
105
|
-
Array.from(this.select.attributes).forEach((item) => {
|
|
106
|
-
this.container.setAttribute(item.name, item.value);
|
|
107
|
-
});
|
|
108
|
-
this.container.classList.add("ql-picker");
|
|
109
|
-
this.label = this.buildLabel();
|
|
110
|
-
this.buildOptions();
|
|
111
|
-
}
|
|
112
|
-
escape() {
|
|
113
|
-
this.close();
|
|
114
|
-
setTimeout(() => this.label.focus(), 1);
|
|
115
|
-
}
|
|
116
|
-
close() {
|
|
117
|
-
this.container.classList.remove("ql-expanded");
|
|
118
|
-
this.label.setAttribute("aria-expanded", "false");
|
|
119
|
-
this.options.setAttribute("aria-hidden", "true");
|
|
17
|
+
buildItem(option) {
|
|
18
|
+
const item = super.buildItem(option);
|
|
19
|
+
const value = option.getAttribute("value");
|
|
20
|
+
item.style.setProperty("--value", value);
|
|
21
|
+
return item;
|
|
120
22
|
}
|
|
121
23
|
selectItem(item, trigger = false) {
|
|
122
24
|
const selected = this.container.querySelector(".ql-selected");
|
|
123
|
-
if (item === selected) return;
|
|
124
|
-
if (
|
|
25
|
+
if (item === selected || item == null) return;
|
|
26
|
+
if (selected != null) {
|
|
125
27
|
selected.classList.remove("ql-selected");
|
|
126
28
|
}
|
|
127
|
-
if (editor_utils.isNullOrUndefined(item)) return;
|
|
128
29
|
item.classList.add("ql-selected");
|
|
129
|
-
this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(
|
|
130
|
-
item
|
|
131
|
-
);
|
|
30
|
+
this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item);
|
|
132
31
|
if (item.hasAttribute("data-value")) {
|
|
133
32
|
this.label.setAttribute("data-value", item.getAttribute("data-value"));
|
|
134
33
|
} else {
|
|
@@ -140,169 +39,21 @@ class Picker {
|
|
|
140
39
|
this.label.removeAttribute("data-label");
|
|
141
40
|
}
|
|
142
41
|
if (trigger) {
|
|
143
|
-
|
|
144
|
-
if (typeof Event === "function") {
|
|
145
|
-
ev = new Event("change");
|
|
146
|
-
} else {
|
|
147
|
-
ev = document.createEvent("Event");
|
|
148
|
-
ev.initEvent("change", true, true);
|
|
149
|
-
}
|
|
150
|
-
this.select.dispatchEvent(ev);
|
|
42
|
+
this.select.dispatchEvent(new Event("change"));
|
|
151
43
|
this.close();
|
|
152
44
|
}
|
|
153
45
|
}
|
|
154
|
-
update() {
|
|
155
|
-
let option;
|
|
156
|
-
if (this.select.selectedIndex > -1) {
|
|
157
|
-
const item = this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex];
|
|
158
|
-
option = this.select.options[this.select.selectedIndex];
|
|
159
|
-
this.selectItem(item);
|
|
160
|
-
} else {
|
|
161
|
-
this.selectItem(null);
|
|
162
|
-
}
|
|
163
|
-
const isActive = !editor_utils.isNullOrUndefined(option) && option !== this.select.querySelector("option[selected]");
|
|
164
|
-
if (isActive) {
|
|
165
|
-
this.label.classList.add("ql-active");
|
|
166
|
-
} else {
|
|
167
|
-
this.label.classList.remove("ql-active");
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
46
|
}
|
|
171
|
-
class
|
|
172
|
-
constructor(select,
|
|
173
|
-
super(select);
|
|
174
|
-
this.container.classList.add("ql-icon-picker");
|
|
175
|
-
Array.from(this.container.querySelectorAll(".ql-picker-item")).forEach(
|
|
176
|
-
(item) => {
|
|
177
|
-
item.innerHTML = icons[item.getAttribute("data-value") || ""];
|
|
178
|
-
}
|
|
179
|
-
);
|
|
180
|
-
this.defaultItem = this.container.querySelector(".ql-selected");
|
|
181
|
-
this.selectItem(this.defaultItem, null);
|
|
182
|
-
}
|
|
183
|
-
selectItem(target, trigger) {
|
|
184
|
-
super.selectItem(target, trigger);
|
|
185
|
-
const item = target || this.defaultItem;
|
|
186
|
-
if (this.label.innerHTML === item.innerHTML) return;
|
|
187
|
-
this.label.innerHTML = item.innerHTML;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
class ColorPicker extends Picker {
|
|
191
|
-
constructor(select, label) {
|
|
192
|
-
super(select);
|
|
193
|
-
this.label.innerHTML = label;
|
|
194
|
-
this.container.classList.add("ql-color-picker");
|
|
195
|
-
Array.from(this.container.querySelectorAll(".ql-picker-item")).slice(0, 7).forEach((item) => {
|
|
196
|
-
item.classList.add("ql-primary");
|
|
197
|
-
});
|
|
47
|
+
class ColorPicker extends quillEasyColor.EasyColorPicker {
|
|
48
|
+
constructor(select, label, options) {
|
|
49
|
+
super(select, label, options);
|
|
198
50
|
}
|
|
199
51
|
buildItem(option) {
|
|
200
52
|
const item = super.buildItem(option);
|
|
201
|
-
item.
|
|
53
|
+
item.setAttribute("title", option.getAttribute("value"));
|
|
202
54
|
return item;
|
|
203
55
|
}
|
|
204
|
-
selectItem(item, trigger) {
|
|
205
|
-
super.selectItem(item, trigger);
|
|
206
|
-
const colorLabel = this.label.querySelector(".ql-color-label");
|
|
207
|
-
const value = item ? item.getAttribute("data-value") || "" : "";
|
|
208
|
-
if (colorLabel) {
|
|
209
|
-
if (colorLabel.tagName === "line") {
|
|
210
|
-
colorLabel.style.stroke = value;
|
|
211
|
-
} else {
|
|
212
|
-
colorLabel.style.fill = value;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
Quill.register("ui/picker", Picker, true);
|
|
218
|
-
Quill.register("ui/icon-picker", IconPicker, true);
|
|
219
|
-
Quill.register("ui/color-picker", ColorPicker, true);
|
|
220
|
-
const ALIGNS = [false, "center", "right"];
|
|
221
|
-
const COLORS = [
|
|
222
|
-
"#000000",
|
|
223
|
-
"#e60000",
|
|
224
|
-
"#ff9900",
|
|
225
|
-
"#ffff00",
|
|
226
|
-
"#008a00",
|
|
227
|
-
"#0066cc",
|
|
228
|
-
"#9933ff",
|
|
229
|
-
"#ffffff",
|
|
230
|
-
"#facccc",
|
|
231
|
-
"#ffebcc",
|
|
232
|
-
"#ffffcc",
|
|
233
|
-
"#cce8cc",
|
|
234
|
-
"#cce0f5",
|
|
235
|
-
"#ebd6ff",
|
|
236
|
-
"#bbbbbb",
|
|
237
|
-
"#f06666",
|
|
238
|
-
"#ffc266",
|
|
239
|
-
"#ffff66",
|
|
240
|
-
"#66b966",
|
|
241
|
-
"#66a3e0",
|
|
242
|
-
"#c285ff",
|
|
243
|
-
"#888888",
|
|
244
|
-
"#a10000",
|
|
245
|
-
"#b26b00",
|
|
246
|
-
"#b2b200",
|
|
247
|
-
"#006100",
|
|
248
|
-
"#0047b2",
|
|
249
|
-
"#6b24b2",
|
|
250
|
-
"#444444",
|
|
251
|
-
"#5c0000",
|
|
252
|
-
"#663d00",
|
|
253
|
-
"#666600",
|
|
254
|
-
"#003700",
|
|
255
|
-
"#002966",
|
|
256
|
-
"#3d1466"
|
|
257
|
-
];
|
|
258
|
-
const FONTS = [false, "serif", "monospace"];
|
|
259
|
-
const HEADERS = ["1", "2", "3", false];
|
|
260
|
-
const SIZES = ["small", false, "large", "huge"];
|
|
261
|
-
SnowTheme.prototype.buildPickers = function(selects, icons) {
|
|
262
|
-
this.pickers = Array.from(selects).map((select) => {
|
|
263
|
-
if (select.classList.contains("ql-align")) {
|
|
264
|
-
if (editor_utils.isNullOrUndefined(select.querySelector("option"))) {
|
|
265
|
-
fillSelect(select, ALIGNS);
|
|
266
|
-
}
|
|
267
|
-
return new IconPicker(select, icons.align);
|
|
268
|
-
}
|
|
269
|
-
if (select.classList.contains("ql-background") || select.classList.contains("ql-color")) {
|
|
270
|
-
const format = select.classList.contains("ql-background") ? "background" : "color";
|
|
271
|
-
if (editor_utils.isNullOrUndefined(select.querySelector("option"))) {
|
|
272
|
-
fillSelect(
|
|
273
|
-
select,
|
|
274
|
-
COLORS
|
|
275
|
-
);
|
|
276
|
-
}
|
|
277
|
-
return new ColorPicker(select, icons[format]);
|
|
278
|
-
}
|
|
279
|
-
if (editor_utils.isNullOrUndefined(select.querySelector("option"))) {
|
|
280
|
-
if (select.classList.contains("ql-font")) {
|
|
281
|
-
fillSelect(select, FONTS);
|
|
282
|
-
} else if (select.classList.contains("ql-header")) {
|
|
283
|
-
fillSelect(select, HEADERS);
|
|
284
|
-
} else if (select.classList.contains("ql-size")) {
|
|
285
|
-
fillSelect(select, SIZES);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
return new Picker(select);
|
|
289
|
-
});
|
|
290
|
-
const update = () => {
|
|
291
|
-
this.pickers.forEach((picker) => {
|
|
292
|
-
picker.update();
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
|
-
this.quill.on(Quill.events.EDITOR_CHANGE, update);
|
|
296
|
-
};
|
|
297
|
-
function fillSelect(select, values, defaultValue = false) {
|
|
298
|
-
values.forEach((value) => {
|
|
299
|
-
const option = document.createElement("option");
|
|
300
|
-
if (value === defaultValue) {
|
|
301
|
-
option.setAttribute("selected", "selected");
|
|
302
|
-
} else {
|
|
303
|
-
option.setAttribute("value", value);
|
|
304
|
-
}
|
|
305
|
-
select.appendChild(option);
|
|
306
|
-
});
|
|
307
56
|
}
|
|
57
|
+
exports.ColorPicker = ColorPicker;
|
|
58
|
+
exports.Picker = Picker;
|
|
308
59
|
//# sourceMappingURL=better-picker.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-picker.cjs.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst SnowTheme = Quill.imports['themes/snow']\r\n\r\nlet optionsCounter = 0\r\n\r\nfunction toggleAriaAttribute(element, attribute) {\r\n element.setAttribute(\r\n attribute,\r\n element.getAttribute(attribute) !== 'true',\r\n )\r\n}\r\n\r\nclass Picker {\r\n container: any\r\n label: any\r\n options: any\r\n select: any\r\n constructor(select) {\r\n this.select = select\r\n this.container = document.createElement('span')\r\n this.buildPicker()\r\n this.select.style.display = 'none'\r\n this.select.parentNode.insertBefore(this.container, this.select)\r\n\r\n this.label.addEventListener('mousedown', (e) => {\r\n this.togglePicker()\r\n e.preventDefault()\r\n })\r\n this.label.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.togglePicker()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n this.select.addEventListener('change', this.update.bind(this))\r\n }\r\n\r\n togglePicker() {\r\n this.container.classList.toggle('ql-expanded')\r\n // Toggle aria-expanded and aria-hidden to make the picker accessible\r\n toggleAriaAttribute(this.label, 'aria-expanded')\r\n toggleAriaAttribute(this.options, 'aria-hidden')\r\n }\r\n\r\n buildItem(option) {\r\n const item = document.createElement('span')\r\n item.tabIndex = 0\r\n item.setAttribute('role', 'button')\r\n item.classList.add('ql-picker-item')\r\n if (option.hasAttribute('value')) {\r\n item.setAttribute('data-value', option.getAttribute('value'))\r\n }\r\n if (option.textContent) {\r\n item.setAttribute('data-label', option.textContent)\r\n }\r\n item.addEventListener('click', () => {\r\n this.selectItem(item, true)\r\n })\r\n item.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.selectItem(item, true)\r\n event.preventDefault()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n\r\n return item\r\n }\r\n\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `\r\n <svg viewbox=\"0 0 18 18\">\r\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n </svg>\r\n `\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildOptions() {\r\n const options = document.createElement('span')\r\n options.classList.add('ql-picker-options')\r\n\r\n // Don't want screen readers to read this until options are visible\r\n options.setAttribute('aria-hidden', 'true')\r\n options.tabIndex = -1\r\n\r\n // Need a unique id for aria-controls\r\n options.id = `ql-picker-options-${optionsCounter}`\r\n optionsCounter += 1\r\n this.label.setAttribute('aria-controls', options.id)\r\n\r\n this.options = options\r\n\r\n Array.from(this.select.options).forEach((option: any) => {\r\n const item = this.buildItem(option)\r\n options.appendChild(item)\r\n if (option.selected === true) {\r\n this.selectItem(item)\r\n }\r\n })\r\n this.container.appendChild(options)\r\n }\r\n\r\n buildPicker() {\r\n Array.from(this.select.attributes).forEach((item: any) => {\r\n this.container.setAttribute(item.name, item.value)\r\n })\r\n this.container.classList.add('ql-picker')\r\n this.label = this.buildLabel()\r\n this.buildOptions()\r\n }\r\n\r\n escape() {\r\n // Close menu and return focus to trigger label\r\n this.close()\r\n // Need setTimeout for accessibility to ensure that the browser executes\r\n // focus on the next process thread and after any DOM content changes\r\n setTimeout(() => this.label.focus(), 1)\r\n }\r\n\r\n close() {\r\n this.container.classList.remove('ql-expanded')\r\n this.label.setAttribute('aria-expanded', 'false')\r\n this.options.setAttribute('aria-hidden', 'true')\r\n }\r\n\r\n selectItem(item, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected) return\r\n if (!isNullOrUndefined(selected)) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n if (isNullOrUndefined(item)) return\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\r\n item,\r\n )\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n let ev\r\n if (typeof Event === 'function') {\r\n ev = new Event('change')\r\n }\r\n else {\r\n ev = document.createEvent('Event')\r\n ev.initEvent('change', true, true)\r\n }\r\n this.select.dispatchEvent(ev)\r\n this.close()\r\n }\r\n }\r\n\r\n update() {\r\n let option\r\n if (this.select.selectedIndex > -1) {\r\n const item = this.container.querySelector('.ql-picker-options').children[\r\n this.select.selectedIndex\r\n ]\r\n option = this.select.options[this.select.selectedIndex]\r\n this.selectItem(item)\r\n }\r\n else {\r\n this.selectItem(null)\r\n }\r\n const isActive\r\n = !isNullOrUndefined(option)\r\n && option !== this.select.querySelector('option[selected]')\r\n\r\n if (isActive) {\r\n this.label.classList.add('ql-active')\r\n }\r\n else {\r\n this.label.classList.remove('ql-active')\r\n }\r\n }\r\n}\r\n\r\nclass IconPicker extends Picker {\r\n defaultItem: any\r\n constructor(select, icons) {\r\n super(select)\r\n this.container.classList.add('ql-icon-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\r\n (item: any) => {\r\n item.innerHTML = icons[item.getAttribute('data-value') || '']\r\n },\r\n )\r\n this.defaultItem = this.container.querySelector('.ql-selected')\r\n this.selectItem(this.defaultItem, null)\r\n }\r\n\r\n selectItem(target, trigger) {\r\n super.selectItem(target, trigger)\r\n const item = target || this.defaultItem\r\n if (this.label.innerHTML === item.innerHTML) return\r\n this.label.innerHTML = item.innerHTML\r\n }\r\n}\r\n\r\nclass ColorPicker extends Picker {\r\n constructor(select, label) {\r\n super(select)\r\n this.label.innerHTML = label\r\n this.container.classList.add('ql-color-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\r\n .slice(0, 7)\r\n .forEach((item: any) => {\r\n item.classList.add('ql-primary')\r\n })\r\n }\r\n\r\n buildItem(option) {\r\n const item = super.buildItem(option)\r\n item.style.backgroundColor = option.getAttribute('value') || ''\r\n return item\r\n }\r\n\r\n selectItem(item, trigger) {\r\n super.selectItem(item, trigger)\r\n const colorLabel = this.label.querySelector('.ql-color-label')\r\n const value = item ? item.getAttribute('data-value') || '' : ''\r\n if (colorLabel) {\r\n if (colorLabel.tagName === 'line') {\r\n colorLabel.style.stroke = value\r\n }\r\n else {\r\n colorLabel.style.fill = value\r\n }\r\n }\r\n }\r\n}\r\n\r\nQuill.register('ui/picker', Picker, true)\r\nQuill.register('ui/icon-picker', IconPicker, true)\r\nQuill.register('ui/color-picker', ColorPicker, true)\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\n\r\nconst COLORS = [\r\n '#000000',\r\n '#e60000',\r\n '#ff9900',\r\n '#ffff00',\r\n '#008a00',\r\n '#0066cc',\r\n '#9933ff',\r\n '#ffffff',\r\n '#facccc',\r\n '#ffebcc',\r\n '#ffffcc',\r\n '#cce8cc',\r\n '#cce0f5',\r\n '#ebd6ff',\r\n '#bbbbbb',\r\n '#f06666',\r\n '#ffc266',\r\n '#ffff66',\r\n '#66b966',\r\n '#66a3e0',\r\n '#c285ff',\r\n '#888888',\r\n '#a10000',\r\n '#b26b00',\r\n '#b2b200',\r\n '#006100',\r\n '#0047b2',\r\n '#6b24b2',\r\n '#444444',\r\n '#5c0000',\r\n '#663d00',\r\n '#666600',\r\n '#003700',\r\n '#002966',\r\n '#3d1466',\r\n]\r\n\r\nconst FONTS = [false, 'serif', 'monospace']\r\n\r\nconst HEADERS = ['1', '2', '3', false]\r\n\r\nconst SIZES = ['small', false, 'large', 'huge']\r\n\r\nSnowTheme.prototype.buildPickers = function (selects, icons) {\r\n this.pickers = Array.from(selects).map((select: any) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align)\r\n }\r\n if (\r\n select.classList.contains('ql-background')\r\n || select.classList.contains('ql-color')\r\n ) {\r\n const format = select.classList.contains('ql-background')\r\n ? 'background'\r\n : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(\r\n select,\r\n COLORS,\r\n )\r\n }\r\n return new ColorPicker(select, icons[format])\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"better-picker.cjs.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import type TypePicker from 'quill/ui/picker'\r\nimport { EasyColorPicker } from 'quill-easy-color'\r\nimport FluentEditor from '../../core/fluent-editor'\r\n\r\nconst OriginPicker = FluentEditor.import('ui/picker') as typeof TypePicker\r\nexport class Picker extends OriginPicker {\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `<i class=\"icon\" />`\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n const value = option.getAttribute('value')\r\n item.style.setProperty('--value', value)\r\n return item\r\n }\r\n\r\n selectItem(item: HTMLElement | null, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected || item == null) return\r\n // move ql-selected clear after judge.\r\n // ql-selected is the class for check mark in picker\r\n if (selected != null) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item)\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n this.select.dispatchEvent(new Event('change'))\r\n this.close()\r\n }\r\n }\r\n}\r\n\r\nexport class ColorPicker extends EasyColorPicker {\r\n static clearText: string\r\n static customText: string\r\n\r\n constructor(select: HTMLSelectElement, label: string, options: any) {\r\n super(select, label, options)\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n item.setAttribute('title', option.getAttribute('value'))\r\n return item\r\n }\r\n}\r\n"],"names":["FluentEditor","EasyColorPicker"],"mappings":";;;;AAIA,MAAM,eAAeA,aAAAA,QAAa,OAAO,WAAW;AAC7C,MAAM,eAAe,aAAa;AAAA,EACvC,aAAa;AACL,UAAA,QAAQ,SAAS,cAAc,MAAM;AACrC,UAAA,UAAU,IAAI,iBAAiB;AACrC,UAAM,YAAY;AAClB,UAAM,WAAW;AACX,UAAA,aAAa,QAAQ,QAAQ;AAC7B,UAAA,aAAa,iBAAiB,OAAO;AACtC,SAAA,UAAU,YAAY,KAAK;AACzB,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AAC7B,UAAA,QAAQ,OAAO,aAAa,OAAO;AACpC,SAAA,MAAM,YAAY,WAAW,KAAK;AAChC,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW,MAA0B,UAAU,OAAO;AACpD,UAAM,WAAW,KAAK,UAAU,cAAc,cAAc;AACxD,QAAA,SAAS,YAAY,QAAQ,KAAM;AAGvC,QAAI,YAAY,MAAM;AACX,eAAA,UAAU,OAAO,aAAa;AAAA,IAAA;AAEpC,SAAA,UAAU,IAAI,aAAa;AAC3B,SAAA,OAAO,gBAAgB,MAAM,KAAK,KAAK,WAAW,QAAQ,EAAE,QAAQ,IAAI;AACzE,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAErC,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAEzC,QAAI,SAAS;AACX,WAAK,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC7C,WAAK,MAAM;AAAA,IAAA;AAAA,EACb;AAEJ;AAEO,MAAM,oBAAoBC,eAAAA,gBAAgB;AAAA,EAI/C,YAAY,QAA2B,OAAe,SAAc;AAC5D,UAAA,QAAQ,OAAO,OAAO;AAAA,EAAA;AAAA,EAG9B,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AACnC,SAAK,aAAa,SAAS,OAAO,aAAa,OAAO,CAAC;AAChD,WAAA;AAAA,EAAA;AAEX;;;"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const Quill = require("quill");
|
|
4
4
|
const editor_utils = require("../../config/editor.utils.cjs.js");
|
|
5
|
-
require("./better-picker.cjs.js");
|
|
6
5
|
const toolbarTip = require("./toolbar-tip.cjs.js");
|
|
7
6
|
const Delta = Quill.import("delta");
|
|
8
7
|
const Parchment = Quill.import("parchment");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\nimport './better-picker'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\nexport * from './toolbar-tip'\r\n"],"names":["isNullOrUndefined"],"mappings":";;;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,MAAM,SAAS,CAAC,SAAS,QAAQ,OAAO,MAAM;AAC9C,IAAI,QAAQ;AAEZ,SAAS,YAAY,WAAkC,MAAM;AAC3D,MAAI,OAAO,QAAQ,MAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI;AAAA,EAAA;AAE3B;AAEA,SAAS,UAAU,IAAI;AACrB,SAAO,OAAO,OAAO,CAAC,QAAQ,WAAW;AACvC,WAAO,MAAM,IAAI,YAAY,KAAK,SAAS,QAAQ,EAAE;AAC9C,WAAA;AAAA,EACT,GAAG,EAA2D;AAChE;AAEA,UAAU,QAAQ,CAAC,aAAa;AACtB,UAAA;AACV;AACA,YAAY,QAAQ,UAAU;AAC9B,MAAM,QAAQ,UAAU,eAAe;AAEvC,MAAM,UAAU,MAAM,OAAO,iBAAiB;AAG9C,MAAM,sBAAsB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACN,UAAA,UAAUA,+BAAkB,KAAK,IAAI,CAAK,IAAA,KAAK,MAAM,UAAU,KAAK;AACrE,SAAA,SAAS,QAAQ,CAAC,SAAS;AACxB,YAAA,CAAC,QAAQ,KAAK,IAAI;AACpB,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA;AACA,YAAAA,aAAAA,kBAAkB,KAAK,GAAG;AACnB,mBAAA;AAAA,QAEF,WAAAA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AAClC,mBAAA,OAAO,cAAc,kBAAkB;AAAA,QAAA,WAEzC,CAAC,MAAM,QAAQ,QAAQ,MAAM,CAAC,GAAG;AACpC,cAAA,QAAQ,WAAW,WAAW,QAAQ,MAAM,EAAE,QAAQ,QAAQ,MAAM;AACpE,cAAA,OAAO,UAAU,UAAU;AACrB,oBAAA,MAAM,QAAQ,MAAM,KAAK;AAAA,UAAA;AAEnC,mBAAS,OAAO,cAAc,iBAAiB,KAAK,IAAI;AAAA,QAAA;AAEtD,YAAAA,aAAAA,kBAAkB,MAAM,GAAG;AAC7B,iBAAO,QAAQ;AACf,iBAAO,gBAAgB;AAAA,QAAA,OAEpB;AACH,iBAAO,WAAW;AAAA,QAAA;AAAA,MACpB,WAEOA,aAAAA,kBAAkB,KAAK,GAAG;AAC3B,cAAA,UAAU,OAAO,WAAW;AAAA,MAE3B,WAAA,MAAM,aAAa,OAAO,GAAG;AAGpC,YAAI,WACA,QAAQ,MAAM,MAAM,MAAM,aAAa,OAAO,KAC1C,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,MAChC,QAAQ,MAAM,EAAE,UAAU,MAAM,aAAa,OAAO,KACnD,QAAQ,MAAM,EAAE,SAAS,MAAM,MAAM,aAAa,OAAO,MAC1DA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO;AAE3E,YAAI,CAAC,UAAU;AACP,gBAAA,cAAc,QAAQ,MAAM;AAC9B,cAAA,gBAAgB,aAAa,gBAAgB,aAAa;AACjD,uBAAA,MAAM,aAAa,OAAO,MAAM;AAAA,UAAA;AAAA,QAC7C;AAGF,YAAI,UAAU;AACN,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QAAA;AAAA,MACpC,OAEG;AACH,YAAI,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AACjC,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QAAA;AAAA,MACpC;AAAA,IACF,CACD;AAAA,EAAA;AAAA,EAGH,OAAO,OAAoB;AACrB,QAAA,SAAS,MAAM,KAAK,MAAM,SAAS,EAAE,KAAK,CAAC,cAAc;AACpD,aAAA,UAAU,QAAQ,KAAK,MAAM;AAAA,IAAA,CACrC;AACD,QAAI,CAAC,OAAQ;AACJ,aAAA,OAAO,MAAM,MAAM,MAAM;AAE9B,QAAA,MAAM,YAAY,UAAU;AACxB,YAAA,aAAa,QAAQ,QAAQ;AAAA,IAAA;AAGjC,QAAA,KAAK,SAAS,MAAM,KAAK,QAAQ,KAAK,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACtE,YAAA,KAAK,4CAA4C,QAAQ,KAAK;AACpE;AAAA,IAAA;AAGF,UAAM,YAAY,MAAM,YAAY,WAAW,WAAW;AACpD,UAAA,iBAAiB,WAAW,CAAC,MAAM;AACnC,UAAA;AAEA,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA,OAAO,gBAAgB,EAAG;AAC9B,cAAM,WAAW,OAAO,QAAQ,OAAO,aAAa;AAEhD,YAAA,SAAS,aAAa,UAAU,GAAG;AAC7B,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,SAAS,SAAS;AAAA,QAAA;AAAA,MAC5B,OAEG;AACH,cAAM,SAAS;AACf,YAAI,OAAO,UAAU,SAAS,WAAW,GAAG;AAClC,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,OAAO,SAAS,CAAC,OAAO,aAAa,OAAO;AAAA,QAAA;AAEtD,UAAE,eAAe;AAAA,MAAA;AAGnB,WAAK,MAAM,MAAM,EAAE,eAAe,WAAW,cAAc;AAC3D,YAAM,CAAC,KAAK,IAAI,KAAK,MAAM,UAAU,SAAS;AAC9C,UAAI,KAAK,SAAS,MAAM,KAAK,MAAM;AAEjC,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QAAA;AAEF,aAAK,SAAS,MAAM,EAAE,KAAK,MAAM,KAAK;AAAA,MAAA;AAAA;AAAA,QAItC,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,qBAAqB,UAAU;AAAA,QAC/D;AACQ,gBAAA,OAAO,SAAS,MAAM,EAAE;AAChC,YAAI,CAAC,MAAO;AACZ,aAAK,MAAM;AAAA,UACT,IAAI,MAAM,EACP,OAAO,MAAM,KAAK,EAClB,OAAO,MAAM,MAAM,EACnB,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO;AAAA,UAC7B,MAAM,QAAQ;AAAA,QAChB;AAAA,MAAA,OAEG;AAEH,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QAAA;AAEF,aAAK,MAAM,OAAO,QAAQ,OAAO,MAAM,QAAQ,IAAI;AAAA,MAAA;AAGrD,WAAK,OAAO,KAAK;AAAA,IAAA,CAClB;AACD,SAAK,SAAS,KAAK,CAAC,QAAQ,KAAK,CAAC;AAAA,EAAA;AAEtC;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\nexport * from './toolbar-tip'\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
|
|
@@ -19,7 +19,39 @@ function generateToolbarTip(QuillToolbarTip) {
|
|
|
19
19
|
resolveOptions(options) {
|
|
20
20
|
const result = super.resolveOptions(options);
|
|
21
21
|
if (!this.quill.lang) return result;
|
|
22
|
+
const shortKeyMap = {
|
|
23
|
+
"bold": "Ctrl + B",
|
|
24
|
+
"italic": "Ctrl + I",
|
|
25
|
+
"underline": "Ctrl + U",
|
|
26
|
+
"strike": "Ctrl + D",
|
|
27
|
+
"clean": "Ctrl + /",
|
|
28
|
+
"align-left": "Alt + L",
|
|
29
|
+
"align-center": "Alt + C",
|
|
30
|
+
"align-right": "Alt + R",
|
|
31
|
+
"align-justify": "Alt + J",
|
|
32
|
+
"indent-+1": "Ctrl + ]",
|
|
33
|
+
"indent--1": "Ctrl + [",
|
|
34
|
+
"script-sub": "Ctrl + ;",
|
|
35
|
+
"script-super": "Ctrl + '",
|
|
36
|
+
"code": "Ctrl + E",
|
|
37
|
+
"direction-rtl": "Ctrl + R",
|
|
38
|
+
"direction-ltr": "Ctrl + L",
|
|
39
|
+
"undo": "Ctrl + Z",
|
|
40
|
+
"redo": "Ctrl + shift + Z",
|
|
41
|
+
"color": "Ctrl + Alt + C",
|
|
42
|
+
"background": "Ctrl + Alt + B",
|
|
43
|
+
"link": "Ctrl + K"
|
|
44
|
+
};
|
|
45
|
+
const shortcutModule = this.quill.getModule("shortcut-key");
|
|
46
|
+
const getShortKey = (name) => {
|
|
47
|
+
if (!shortcutModule) return "";
|
|
48
|
+
const shortKey = shortKeyMap[name];
|
|
49
|
+
return shortKey ? `
|
|
50
|
+
${shortKey}` : "";
|
|
51
|
+
};
|
|
22
52
|
const btnTips = [
|
|
53
|
+
"color",
|
|
54
|
+
"background",
|
|
23
55
|
"bold",
|
|
24
56
|
"italic",
|
|
25
57
|
"strike",
|
|
@@ -36,25 +68,23 @@ function generateToolbarTip(QuillToolbarTip) {
|
|
|
36
68
|
"emoji",
|
|
37
69
|
"video",
|
|
38
70
|
"screenshot",
|
|
39
|
-
"better-table",
|
|
40
71
|
"code-block",
|
|
41
72
|
"formula",
|
|
42
73
|
"format-painter",
|
|
43
|
-
"header-list"
|
|
74
|
+
"header-list",
|
|
75
|
+
"table-up"
|
|
44
76
|
].reduce((map, name) => {
|
|
45
|
-
map[name] = this.quill.getLangText(name);
|
|
77
|
+
map[name] = this.quill.getLangText(name) + getShortKey(name);
|
|
46
78
|
return map;
|
|
47
79
|
}, {});
|
|
48
80
|
const selectTips = [
|
|
49
|
-
"color",
|
|
50
|
-
"background",
|
|
51
81
|
"font",
|
|
52
82
|
"size",
|
|
53
|
-
"
|
|
83
|
+
"line-height"
|
|
54
84
|
].reduce((map, name) => {
|
|
55
85
|
map[name] = {
|
|
56
86
|
onShow: () => {
|
|
57
|
-
return this.quill.getLangText(name);
|
|
87
|
+
return this.quill.getLangText(name) + getShortKey(name);
|
|
58
88
|
}
|
|
59
89
|
};
|
|
60
90
|
return map;
|
|
@@ -79,7 +109,7 @@ function generateToolbarTip(QuillToolbarTip) {
|
|
|
79
109
|
value = "normal";
|
|
80
110
|
}
|
|
81
111
|
}
|
|
82
|
-
return this.quill.getLangText(`${name}-${value}`);
|
|
112
|
+
return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`);
|
|
83
113
|
}
|
|
84
114
|
};
|
|
85
115
|
return map;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const btnTips = [\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n '
|
|
1
|
+
{"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...options.tipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT"],"mappings":"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"}
|