@mdaemon/html-editor 1.2.1 → 1.4.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/README.md +106 -3
- package/dist/index.d.ts +223 -0
- package/dist/index.js +2643 -73
- package/dist/index.mjs +2643 -73
- package/dist/styles.css +236 -0
- package/package.json +6 -2
package/dist/index.mjs
CHANGED
|
@@ -23055,6 +23055,96 @@ var StarterKit = Extension.create({
|
|
|
23055
23055
|
return extensions;
|
|
23056
23056
|
}
|
|
23057
23057
|
});
|
|
23058
|
+
var Subscript = Mark2.create({
|
|
23059
|
+
name: "subscript",
|
|
23060
|
+
addOptions() {
|
|
23061
|
+
return {
|
|
23062
|
+
HTMLAttributes: {}
|
|
23063
|
+
};
|
|
23064
|
+
},
|
|
23065
|
+
parseHTML() {
|
|
23066
|
+
return [
|
|
23067
|
+
{
|
|
23068
|
+
tag: "sub"
|
|
23069
|
+
},
|
|
23070
|
+
{
|
|
23071
|
+
style: "vertical-align",
|
|
23072
|
+
getAttrs(value) {
|
|
23073
|
+
if (value !== "sub") {
|
|
23074
|
+
return false;
|
|
23075
|
+
}
|
|
23076
|
+
return null;
|
|
23077
|
+
}
|
|
23078
|
+
}
|
|
23079
|
+
];
|
|
23080
|
+
},
|
|
23081
|
+
renderHTML({ HTMLAttributes }) {
|
|
23082
|
+
return ["sub", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
|
|
23083
|
+
},
|
|
23084
|
+
addCommands() {
|
|
23085
|
+
return {
|
|
23086
|
+
setSubscript: () => ({ commands }) => {
|
|
23087
|
+
return commands.setMark(this.name);
|
|
23088
|
+
},
|
|
23089
|
+
toggleSubscript: () => ({ commands }) => {
|
|
23090
|
+
return commands.toggleMark(this.name);
|
|
23091
|
+
},
|
|
23092
|
+
unsetSubscript: () => ({ commands }) => {
|
|
23093
|
+
return commands.unsetMark(this.name);
|
|
23094
|
+
}
|
|
23095
|
+
};
|
|
23096
|
+
},
|
|
23097
|
+
addKeyboardShortcuts() {
|
|
23098
|
+
return {
|
|
23099
|
+
"Mod-,": () => this.editor.commands.toggleSubscript()
|
|
23100
|
+
};
|
|
23101
|
+
}
|
|
23102
|
+
});
|
|
23103
|
+
var Superscript = Mark2.create({
|
|
23104
|
+
name: "superscript",
|
|
23105
|
+
addOptions() {
|
|
23106
|
+
return {
|
|
23107
|
+
HTMLAttributes: {}
|
|
23108
|
+
};
|
|
23109
|
+
},
|
|
23110
|
+
parseHTML() {
|
|
23111
|
+
return [
|
|
23112
|
+
{
|
|
23113
|
+
tag: "sup"
|
|
23114
|
+
},
|
|
23115
|
+
{
|
|
23116
|
+
style: "vertical-align",
|
|
23117
|
+
getAttrs(value) {
|
|
23118
|
+
if (value !== "super") {
|
|
23119
|
+
return false;
|
|
23120
|
+
}
|
|
23121
|
+
return null;
|
|
23122
|
+
}
|
|
23123
|
+
}
|
|
23124
|
+
];
|
|
23125
|
+
},
|
|
23126
|
+
renderHTML({ HTMLAttributes }) {
|
|
23127
|
+
return ["sup", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
|
|
23128
|
+
},
|
|
23129
|
+
addCommands() {
|
|
23130
|
+
return {
|
|
23131
|
+
setSuperscript: () => ({ commands }) => {
|
|
23132
|
+
return commands.setMark(this.name);
|
|
23133
|
+
},
|
|
23134
|
+
toggleSuperscript: () => ({ commands }) => {
|
|
23135
|
+
return commands.toggleMark(this.name);
|
|
23136
|
+
},
|
|
23137
|
+
unsetSuperscript: () => ({ commands }) => {
|
|
23138
|
+
return commands.unsetMark(this.name);
|
|
23139
|
+
}
|
|
23140
|
+
};
|
|
23141
|
+
},
|
|
23142
|
+
addKeyboardShortcuts() {
|
|
23143
|
+
return {
|
|
23144
|
+
"Mod-.": () => this.editor.commands.toggleSuperscript()
|
|
23145
|
+
};
|
|
23146
|
+
}
|
|
23147
|
+
});
|
|
23058
23148
|
var TextAlign = Extension.create({
|
|
23059
23149
|
name: "textAlign",
|
|
23060
23150
|
addOptions() {
|
|
@@ -41869,7 +41959,22 @@ class EmojiPicker {
|
|
|
41869
41959
|
}
|
|
41870
41960
|
}
|
|
41871
41961
|
const DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
41872
|
-
const ACCEPTED_IMAGE_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"];
|
|
41962
|
+
const ACCEPTED_IMAGE_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml", "image/bmp"];
|
|
41963
|
+
const EXT_TO_MIME = {
|
|
41964
|
+
jpg: "image/jpeg",
|
|
41965
|
+
jpeg: "image/jpeg",
|
|
41966
|
+
jpe: "image/jpeg",
|
|
41967
|
+
png: "image/png",
|
|
41968
|
+
gif: "image/gif",
|
|
41969
|
+
bmp: "image/bmp",
|
|
41970
|
+
webp: "image/webp",
|
|
41971
|
+
svg: "image/svg+xml"
|
|
41972
|
+
};
|
|
41973
|
+
function parseImageFileTypes(spec) {
|
|
41974
|
+
if (!spec) return null;
|
|
41975
|
+
const exts = spec.split(/[\s,|]+/).map((s) => s.trim().toLowerCase().replace(/^\./, "")).filter(Boolean);
|
|
41976
|
+
return exts.length > 0 ? exts : null;
|
|
41977
|
+
}
|
|
41873
41978
|
const SVG_DANGEROUS_TAGS = [
|
|
41874
41979
|
"script",
|
|
41875
41980
|
"foreignobject",
|
|
@@ -42144,16 +42249,44 @@ class ImageUpload {
|
|
|
42144
42249
|
errorEl.textContent = "";
|
|
42145
42250
|
}
|
|
42146
42251
|
}
|
|
42147
|
-
|
|
42148
|
-
|
|
42252
|
+
/** Whether the file matches the configured/default accepted image types. */
|
|
42253
|
+
isAcceptedType(file) {
|
|
42254
|
+
const exts = parseImageFileTypes(this.options.fileTypes);
|
|
42255
|
+
if (!exts) {
|
|
42256
|
+
return ACCEPTED_IMAGE_TYPES.includes(file.type);
|
|
42257
|
+
}
|
|
42258
|
+
const name = (file.name ?? "").toLowerCase();
|
|
42259
|
+
const dot = name.lastIndexOf(".");
|
|
42260
|
+
const ext = dot >= 0 ? name.slice(dot + 1) : "";
|
|
42261
|
+
if (ext && exts.includes(ext)) return true;
|
|
42262
|
+
const acceptedMimes = exts.map((e) => EXT_TO_MIME[e]).filter(Boolean);
|
|
42263
|
+
return !!file.type && acceptedMimes.includes(file.type);
|
|
42264
|
+
}
|
|
42265
|
+
/**
|
|
42266
|
+
* Validate a file before upload. Returns an error message (translated) to
|
|
42267
|
+
* reject, or null to allow. Runs the caller's validate hook, then the
|
|
42268
|
+
* type and size guards.
|
|
42269
|
+
*/
|
|
42270
|
+
validateFile(file) {
|
|
42149
42271
|
const t = this.options.trans;
|
|
42150
|
-
if (
|
|
42151
|
-
this.
|
|
42152
|
-
return;
|
|
42272
|
+
if (this.options.validate) {
|
|
42273
|
+
const msg = this.options.validate(file);
|
|
42274
|
+
if (msg) return msg;
|
|
42275
|
+
}
|
|
42276
|
+
if (!this.isAcceptedType(file)) {
|
|
42277
|
+
return t("Invalid file type");
|
|
42153
42278
|
}
|
|
42154
42279
|
const maxSize = this.options.uploadMaxSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
42155
42280
|
if (file.size > maxSize) {
|
|
42156
|
-
|
|
42281
|
+
return t("File too large");
|
|
42282
|
+
}
|
|
42283
|
+
return null;
|
|
42284
|
+
}
|
|
42285
|
+
handleFileSelected(file) {
|
|
42286
|
+
this.clearError();
|
|
42287
|
+
const validationError = this.validateFile(file);
|
|
42288
|
+
if (validationError) {
|
|
42289
|
+
this.showError(validationError);
|
|
42157
42290
|
return;
|
|
42158
42291
|
}
|
|
42159
42292
|
this.currentFile = file;
|
|
@@ -42240,16 +42373,14 @@ class ImageUpload {
|
|
|
42240
42373
|
this.options.onInsert(src, alt);
|
|
42241
42374
|
this.close();
|
|
42242
42375
|
} catch (err) {
|
|
42243
|
-
|
|
42376
|
+
const message = err instanceof Error && err.message ? err.message : this.options.trans("Upload failed");
|
|
42377
|
+
this.showError(message);
|
|
42244
42378
|
}
|
|
42245
42379
|
}
|
|
42246
42380
|
uploadFile(file) {
|
|
42247
|
-
|
|
42248
|
-
|
|
42249
|
-
|
|
42250
|
-
const maxSize = this.options.uploadMaxSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
42251
|
-
if (file.size > maxSize) {
|
|
42252
|
-
return Promise.reject(new Error("File too large"));
|
|
42381
|
+
const validationError = this.validateFile(file);
|
|
42382
|
+
if (validationError) {
|
|
42383
|
+
return Promise.reject(new Error(validationError));
|
|
42253
42384
|
}
|
|
42254
42385
|
if (file.type === "image/svg+xml") {
|
|
42255
42386
|
return this.sanitizeAndUploadSVG(file);
|
|
@@ -42885,6 +43016,687 @@ class LinkEditor {
|
|
|
42885
43016
|
}
|
|
42886
43017
|
}
|
|
42887
43018
|
}
|
|
43019
|
+
class AnchorDialog {
|
|
43020
|
+
options;
|
|
43021
|
+
overlay = null;
|
|
43022
|
+
dialog = null;
|
|
43023
|
+
nameInput = null;
|
|
43024
|
+
errorEl = null;
|
|
43025
|
+
constructor(options) {
|
|
43026
|
+
this.options = options;
|
|
43027
|
+
}
|
|
43028
|
+
get tiptap() {
|
|
43029
|
+
return this.options.editor.getTipTap();
|
|
43030
|
+
}
|
|
43031
|
+
open() {
|
|
43032
|
+
if (!this.overlay) {
|
|
43033
|
+
this.createDialog();
|
|
43034
|
+
}
|
|
43035
|
+
if (this.nameInput) this.nameInput.value = "";
|
|
43036
|
+
this.clearError();
|
|
43037
|
+
this.overlay.style.display = "flex";
|
|
43038
|
+
this.nameInput?.focus();
|
|
43039
|
+
}
|
|
43040
|
+
close() {
|
|
43041
|
+
if (this.overlay) {
|
|
43042
|
+
this.overlay.style.display = "none";
|
|
43043
|
+
}
|
|
43044
|
+
}
|
|
43045
|
+
clearError() {
|
|
43046
|
+
if (this.errorEl) {
|
|
43047
|
+
this.errorEl.style.display = "none";
|
|
43048
|
+
this.errorEl.textContent = "";
|
|
43049
|
+
}
|
|
43050
|
+
}
|
|
43051
|
+
showError(message) {
|
|
43052
|
+
if (this.errorEl) {
|
|
43053
|
+
this.errorEl.textContent = message;
|
|
43054
|
+
this.errorEl.style.display = "block";
|
|
43055
|
+
}
|
|
43056
|
+
}
|
|
43057
|
+
save() {
|
|
43058
|
+
const trans = this.options.trans;
|
|
43059
|
+
const name = this.nameInput?.value.trim() ?? "";
|
|
43060
|
+
if (!name) {
|
|
43061
|
+
this.showError(trans("Anchor name is required"));
|
|
43062
|
+
return;
|
|
43063
|
+
}
|
|
43064
|
+
if (/\s/.test(name)) {
|
|
43065
|
+
this.showError(trans("Anchor name cannot contain spaces"));
|
|
43066
|
+
return;
|
|
43067
|
+
}
|
|
43068
|
+
this.tiptap?.chain().focus().insertContent({ type: "anchor", attrs: { id: name, name } }).run();
|
|
43069
|
+
this.close();
|
|
43070
|
+
}
|
|
43071
|
+
createDialog() {
|
|
43072
|
+
const trans = this.options.trans;
|
|
43073
|
+
const skin = this.options.editor.getConfig().skin ?? "oxide";
|
|
43074
|
+
this.overlay = document.createElement("div");
|
|
43075
|
+
this.overlay.className = "md-dialog-overlay";
|
|
43076
|
+
this.overlay.addEventListener("click", (e) => {
|
|
43077
|
+
if (e.target === this.overlay) {
|
|
43078
|
+
this.close();
|
|
43079
|
+
}
|
|
43080
|
+
});
|
|
43081
|
+
const themeWrapper = document.createElement("div");
|
|
43082
|
+
themeWrapper.className = `md-editor-${skin}`;
|
|
43083
|
+
themeWrapper.style.display = "contents";
|
|
43084
|
+
this.dialog = document.createElement("div");
|
|
43085
|
+
this.dialog.className = "md-dialog md-anchor-dialog";
|
|
43086
|
+
const header = document.createElement("div");
|
|
43087
|
+
header.className = "md-dialog-header";
|
|
43088
|
+
header.innerHTML = `
|
|
43089
|
+
<h3>${trans("Insert anchor")}</h3>
|
|
43090
|
+
<button type="button" class="md-dialog-close">×</button>
|
|
43091
|
+
`;
|
|
43092
|
+
header.querySelector(".md-dialog-close")?.addEventListener("click", () => this.close());
|
|
43093
|
+
const body = document.createElement("div");
|
|
43094
|
+
body.className = "md-dialog-body";
|
|
43095
|
+
const nameRow = document.createElement("div");
|
|
43096
|
+
nameRow.className = "md-anchor-dialog-row";
|
|
43097
|
+
nameRow.innerHTML = `<label>${trans("Anchor name")}</label>`;
|
|
43098
|
+
this.nameInput = document.createElement("input");
|
|
43099
|
+
this.nameInput.type = "text";
|
|
43100
|
+
this.nameInput.className = "md-anchor-dialog-input";
|
|
43101
|
+
nameRow.appendChild(this.nameInput);
|
|
43102
|
+
this.errorEl = document.createElement("div");
|
|
43103
|
+
this.errorEl.className = "md-anchor-dialog-error";
|
|
43104
|
+
this.errorEl.style.display = "none";
|
|
43105
|
+
const footer = document.createElement("div");
|
|
43106
|
+
footer.className = "md-anchor-dialog-footer";
|
|
43107
|
+
footer.innerHTML = `
|
|
43108
|
+
<button type="button" class="md-btn md-anchor-dialog-cancel">${trans("Cancel")}</button>
|
|
43109
|
+
<button type="button" class="md-btn md-btn-primary md-anchor-dialog-save">${trans("Save")}</button>
|
|
43110
|
+
`;
|
|
43111
|
+
footer.querySelector(".md-anchor-dialog-cancel")?.addEventListener("click", () => this.close());
|
|
43112
|
+
footer.querySelector(".md-anchor-dialog-save")?.addEventListener("click", () => this.save());
|
|
43113
|
+
body.appendChild(nameRow);
|
|
43114
|
+
body.appendChild(this.errorEl);
|
|
43115
|
+
body.appendChild(footer);
|
|
43116
|
+
this.dialog.appendChild(header);
|
|
43117
|
+
this.dialog.appendChild(body);
|
|
43118
|
+
themeWrapper.appendChild(this.dialog);
|
|
43119
|
+
this.overlay.appendChild(themeWrapper);
|
|
43120
|
+
this.overlay.addEventListener("keydown", (e) => {
|
|
43121
|
+
if (e.key === "Escape") {
|
|
43122
|
+
this.close();
|
|
43123
|
+
} else if (e.key === "Enter") {
|
|
43124
|
+
this.save();
|
|
43125
|
+
}
|
|
43126
|
+
});
|
|
43127
|
+
document.body.appendChild(this.overlay);
|
|
43128
|
+
}
|
|
43129
|
+
destroy() {
|
|
43130
|
+
if (this.overlay) {
|
|
43131
|
+
this.overlay.remove();
|
|
43132
|
+
this.overlay = null;
|
|
43133
|
+
this.dialog = null;
|
|
43134
|
+
this.nameInput = null;
|
|
43135
|
+
this.errorEl = null;
|
|
43136
|
+
}
|
|
43137
|
+
}
|
|
43138
|
+
}
|
|
43139
|
+
const SPEECH_LANGUAGES = [
|
|
43140
|
+
{ code: "ar-SA", name: "العربية" },
|
|
43141
|
+
{ code: "ca-ES", name: "Català" },
|
|
43142
|
+
{ code: "cs-CZ", name: "Čeština" },
|
|
43143
|
+
{ code: "da-DK", name: "Dansk" },
|
|
43144
|
+
{ code: "de-DE", name: "Deutsch" },
|
|
43145
|
+
{ code: "el-GR", name: "Ελληνικά" },
|
|
43146
|
+
{ code: "en-US", name: "English (US)" },
|
|
43147
|
+
{ code: "en-GB", name: "English (UK)" },
|
|
43148
|
+
{ code: "es-ES", name: "Español" },
|
|
43149
|
+
{ code: "fi-FI", name: "Suomi" },
|
|
43150
|
+
{ code: "fr-FR", name: "Français" },
|
|
43151
|
+
{ code: "fr-CA", name: "Français (Canada)" },
|
|
43152
|
+
{ code: "hu-HU", name: "Magyar" },
|
|
43153
|
+
{ code: "id-ID", name: "Bahasa Indonesia" },
|
|
43154
|
+
{ code: "it-IT", name: "Italiano" },
|
|
43155
|
+
{ code: "ja-JP", name: "日本語" },
|
|
43156
|
+
{ code: "ko-KR", name: "한국어" },
|
|
43157
|
+
{ code: "nb-NO", name: "Norsk Bokmål" },
|
|
43158
|
+
{ code: "nl-NL", name: "Nederlands" },
|
|
43159
|
+
{ code: "pl-PL", name: "Polski" },
|
|
43160
|
+
{ code: "pt-BR", name: "Português" },
|
|
43161
|
+
{ code: "ro-RO", name: "Română" },
|
|
43162
|
+
{ code: "ru-RU", name: "Русский" },
|
|
43163
|
+
{ code: "sl-SI", name: "Slovenščina" },
|
|
43164
|
+
{ code: "sr-RS", name: "Српски" },
|
|
43165
|
+
{ code: "sv-SE", name: "Svenska" },
|
|
43166
|
+
{ code: "th-TH", name: "ไทย" },
|
|
43167
|
+
{ code: "tr-TR", name: "Türkçe" },
|
|
43168
|
+
{ code: "vi-VN", name: "Tiếng Việt" },
|
|
43169
|
+
{ code: "zh-CN", name: "中文 (简体)" },
|
|
43170
|
+
{ code: "zh-TW", name: "中文 (繁體)" }
|
|
43171
|
+
];
|
|
43172
|
+
const LOCALE_TO_BCP47$1 = {
|
|
43173
|
+
"ar": "ar-SA",
|
|
43174
|
+
"ca": "ca-ES",
|
|
43175
|
+
"cs": "cs-CZ",
|
|
43176
|
+
"da": "da-DK",
|
|
43177
|
+
"de": "de-DE",
|
|
43178
|
+
"el": "el-GR",
|
|
43179
|
+
"en": "en-US",
|
|
43180
|
+
"en-gb": "en-GB",
|
|
43181
|
+
"es": "es-ES",
|
|
43182
|
+
"fi": "fi-FI",
|
|
43183
|
+
"fr": "fr-FR",
|
|
43184
|
+
"fr-ca": "fr-CA",
|
|
43185
|
+
"hu": "hu-HU",
|
|
43186
|
+
"id": "id-ID",
|
|
43187
|
+
"it": "it-IT",
|
|
43188
|
+
"ja": "ja-JP",
|
|
43189
|
+
"ko": "ko-KR",
|
|
43190
|
+
"nb": "nb-NO",
|
|
43191
|
+
"nl": "nl-NL",
|
|
43192
|
+
"pl": "pl-PL",
|
|
43193
|
+
"pt": "pt-BR",
|
|
43194
|
+
"ro": "ro-RO",
|
|
43195
|
+
"ru": "ru-RU",
|
|
43196
|
+
"sl": "sl-SI",
|
|
43197
|
+
"sr": "sr-RS",
|
|
43198
|
+
"sv": "sv-SE",
|
|
43199
|
+
"th": "th-TH",
|
|
43200
|
+
"tr": "tr-TR",
|
|
43201
|
+
"vi": "vi-VN",
|
|
43202
|
+
"zh": "zh-CN",
|
|
43203
|
+
"zh-tw": "zh-TW"
|
|
43204
|
+
};
|
|
43205
|
+
function isSpeechRecognitionSupported() {
|
|
43206
|
+
return !!(window.SpeechRecognition || window.webkitSpeechRecognition);
|
|
43207
|
+
}
|
|
43208
|
+
function getSpeechRecognitionConstructor$1() {
|
|
43209
|
+
return window.SpeechRecognition || window.webkitSpeechRecognition || null;
|
|
43210
|
+
}
|
|
43211
|
+
class SpeechToText {
|
|
43212
|
+
options;
|
|
43213
|
+
overlay = null;
|
|
43214
|
+
dialog = null;
|
|
43215
|
+
recognition = null;
|
|
43216
|
+
isListening = false;
|
|
43217
|
+
finalTranscript = "";
|
|
43218
|
+
interimTranscript = "";
|
|
43219
|
+
lastConfidence = 0;
|
|
43220
|
+
restartTimer = null;
|
|
43221
|
+
// DOM references
|
|
43222
|
+
transcriptArea = null;
|
|
43223
|
+
confidenceEl = null;
|
|
43224
|
+
statusEl = null;
|
|
43225
|
+
startStopBtn = null;
|
|
43226
|
+
insertBtn = null;
|
|
43227
|
+
clearBtn = null;
|
|
43228
|
+
languageSelect = null;
|
|
43229
|
+
constructor(options) {
|
|
43230
|
+
this.options = options;
|
|
43231
|
+
}
|
|
43232
|
+
open() {
|
|
43233
|
+
if (this.overlay) {
|
|
43234
|
+
this.overlay.style.display = "flex";
|
|
43235
|
+
return;
|
|
43236
|
+
}
|
|
43237
|
+
this.createDialog();
|
|
43238
|
+
}
|
|
43239
|
+
close() {
|
|
43240
|
+
if (this.overlay) {
|
|
43241
|
+
this.overlay.style.display = "none";
|
|
43242
|
+
}
|
|
43243
|
+
this.stopRecognition();
|
|
43244
|
+
}
|
|
43245
|
+
destroy() {
|
|
43246
|
+
this.stopRecognition();
|
|
43247
|
+
this.overlay?.remove();
|
|
43248
|
+
this.overlay = null;
|
|
43249
|
+
this.dialog = null;
|
|
43250
|
+
this.transcriptArea = null;
|
|
43251
|
+
this.confidenceEl = null;
|
|
43252
|
+
this.statusEl = null;
|
|
43253
|
+
this.startStopBtn = null;
|
|
43254
|
+
this.insertBtn = null;
|
|
43255
|
+
this.clearBtn = null;
|
|
43256
|
+
this.languageSelect = null;
|
|
43257
|
+
}
|
|
43258
|
+
get editorLanguage() {
|
|
43259
|
+
return this.options.editor.getConfig().language ?? "en";
|
|
43260
|
+
}
|
|
43261
|
+
getDefaultSpeechLang() {
|
|
43262
|
+
return LOCALE_TO_BCP47$1[this.editorLanguage] ?? "en-US";
|
|
43263
|
+
}
|
|
43264
|
+
createDialog() {
|
|
43265
|
+
const trans = this.options.trans;
|
|
43266
|
+
this.overlay = document.createElement("div");
|
|
43267
|
+
this.overlay.className = "md-dialog-overlay";
|
|
43268
|
+
this.overlay.addEventListener("click", (e) => {
|
|
43269
|
+
if (e.target === this.overlay) this.close();
|
|
43270
|
+
});
|
|
43271
|
+
this.dialog = document.createElement("div");
|
|
43272
|
+
this.dialog.className = "md-dialog md-speechtotext-dialog";
|
|
43273
|
+
const header = document.createElement("div");
|
|
43274
|
+
header.className = "md-dialog-header";
|
|
43275
|
+
header.innerHTML = `
|
|
43276
|
+
<h3>${trans("Speech to Text")}</h3>
|
|
43277
|
+
<button type="button" class="md-dialog-close">×</button>
|
|
43278
|
+
`;
|
|
43279
|
+
header.querySelector(".md-dialog-close").addEventListener("click", () => this.close());
|
|
43280
|
+
const body = document.createElement("div");
|
|
43281
|
+
body.className = "md-dialog-body md-speechtotext-body";
|
|
43282
|
+
const langRow = document.createElement("div");
|
|
43283
|
+
langRow.className = "md-speechtotext-lang-row";
|
|
43284
|
+
const langLabel = document.createElement("label");
|
|
43285
|
+
langLabel.className = "md-speechtotext-label";
|
|
43286
|
+
langLabel.textContent = trans("Language");
|
|
43287
|
+
this.languageSelect = document.createElement("select");
|
|
43288
|
+
this.languageSelect.className = "md-speechtotext-language";
|
|
43289
|
+
const defaultLang = this.getDefaultSpeechLang();
|
|
43290
|
+
for (const lang of SPEECH_LANGUAGES) {
|
|
43291
|
+
const opt = document.createElement("option");
|
|
43292
|
+
opt.value = lang.code;
|
|
43293
|
+
opt.textContent = lang.name;
|
|
43294
|
+
if (lang.code === defaultLang) opt.selected = true;
|
|
43295
|
+
this.languageSelect.appendChild(opt);
|
|
43296
|
+
}
|
|
43297
|
+
langRow.appendChild(langLabel);
|
|
43298
|
+
langRow.appendChild(this.languageSelect);
|
|
43299
|
+
this.statusEl = document.createElement("div");
|
|
43300
|
+
this.statusEl.className = "md-speechtotext-status";
|
|
43301
|
+
this.statusEl.textContent = "";
|
|
43302
|
+
this.transcriptArea = document.createElement("div");
|
|
43303
|
+
this.transcriptArea.className = "md-speechtotext-transcript";
|
|
43304
|
+
this.confidenceEl = document.createElement("div");
|
|
43305
|
+
this.confidenceEl.className = "md-speechtotext-confidence";
|
|
43306
|
+
this.confidenceEl.textContent = "";
|
|
43307
|
+
const controls = document.createElement("div");
|
|
43308
|
+
controls.className = "md-speechtotext-controls";
|
|
43309
|
+
this.startStopBtn = document.createElement("button");
|
|
43310
|
+
this.startStopBtn.type = "button";
|
|
43311
|
+
this.startStopBtn.className = "md-speechtotext-btn md-speechtotext-btn-start";
|
|
43312
|
+
this.startStopBtn.textContent = trans("Start");
|
|
43313
|
+
this.startStopBtn.addEventListener("click", () => this.toggleRecognition());
|
|
43314
|
+
this.insertBtn = document.createElement("button");
|
|
43315
|
+
this.insertBtn.type = "button";
|
|
43316
|
+
this.insertBtn.className = "md-speechtotext-btn md-speechtotext-btn-insert";
|
|
43317
|
+
this.insertBtn.textContent = trans("Insert");
|
|
43318
|
+
this.insertBtn.addEventListener("click", () => this.insertTranscript());
|
|
43319
|
+
this.clearBtn = document.createElement("button");
|
|
43320
|
+
this.clearBtn.type = "button";
|
|
43321
|
+
this.clearBtn.className = "md-speechtotext-btn md-speechtotext-btn-clear";
|
|
43322
|
+
this.clearBtn.textContent = trans("Clear");
|
|
43323
|
+
this.clearBtn.addEventListener("click", () => this.clearTranscript());
|
|
43324
|
+
controls.appendChild(this.startStopBtn);
|
|
43325
|
+
controls.appendChild(this.insertBtn);
|
|
43326
|
+
controls.appendChild(this.clearBtn);
|
|
43327
|
+
body.appendChild(langRow);
|
|
43328
|
+
body.appendChild(this.statusEl);
|
|
43329
|
+
body.appendChild(this.transcriptArea);
|
|
43330
|
+
body.appendChild(this.confidenceEl);
|
|
43331
|
+
body.appendChild(controls);
|
|
43332
|
+
this.dialog.appendChild(header);
|
|
43333
|
+
this.dialog.appendChild(body);
|
|
43334
|
+
this.overlay.appendChild(this.dialog);
|
|
43335
|
+
document.body.appendChild(this.overlay);
|
|
43336
|
+
this.dialog.addEventListener("keydown", (e) => {
|
|
43337
|
+
if (e.key === "Escape") {
|
|
43338
|
+
this.close();
|
|
43339
|
+
}
|
|
43340
|
+
});
|
|
43341
|
+
}
|
|
43342
|
+
toggleRecognition() {
|
|
43343
|
+
if (this.isListening) {
|
|
43344
|
+
this.stopRecognition();
|
|
43345
|
+
} else {
|
|
43346
|
+
this.startRecognition();
|
|
43347
|
+
}
|
|
43348
|
+
}
|
|
43349
|
+
startRecognition() {
|
|
43350
|
+
const SpeechRecognitionCtor = getSpeechRecognitionConstructor$1();
|
|
43351
|
+
if (!SpeechRecognitionCtor) return;
|
|
43352
|
+
this.recognition = new SpeechRecognitionCtor();
|
|
43353
|
+
this.recognition.continuous = true;
|
|
43354
|
+
this.recognition.interimResults = true;
|
|
43355
|
+
this.recognition.maxAlternatives = 1;
|
|
43356
|
+
this.recognition.lang = this.languageSelect?.value ?? this.getDefaultSpeechLang();
|
|
43357
|
+
this.recognition.onresult = this.handleResult.bind(this);
|
|
43358
|
+
this.recognition.onerror = this.handleError.bind(this);
|
|
43359
|
+
this.recognition.onend = this.handleEnd.bind(this);
|
|
43360
|
+
try {
|
|
43361
|
+
this.recognition.start();
|
|
43362
|
+
this.isListening = true;
|
|
43363
|
+
this.updateButtonState();
|
|
43364
|
+
this.setStatus(this.options.trans("Listening..."));
|
|
43365
|
+
} catch {
|
|
43366
|
+
}
|
|
43367
|
+
}
|
|
43368
|
+
handleResult(event) {
|
|
43369
|
+
this.interimTranscript = "";
|
|
43370
|
+
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
43371
|
+
const result = event.results[i];
|
|
43372
|
+
if (result.isFinal) {
|
|
43373
|
+
const text = result[0].transcript;
|
|
43374
|
+
if (this.finalTranscript.length > 0 && !this.finalTranscript.endsWith(" ") && !text.startsWith(" ")) {
|
|
43375
|
+
this.finalTranscript += " ";
|
|
43376
|
+
}
|
|
43377
|
+
this.finalTranscript += text;
|
|
43378
|
+
this.lastConfidence = result[0].confidence;
|
|
43379
|
+
} else {
|
|
43380
|
+
this.interimTranscript += result[0].transcript;
|
|
43381
|
+
}
|
|
43382
|
+
}
|
|
43383
|
+
this.updateTranscriptDisplay();
|
|
43384
|
+
this.updateConfidenceDisplay();
|
|
43385
|
+
}
|
|
43386
|
+
handleError(event) {
|
|
43387
|
+
const trans = this.options.trans;
|
|
43388
|
+
if (event.error === "no-speech") ;
|
|
43389
|
+
else if (event.error === "not-allowed") {
|
|
43390
|
+
this.stopRecognition();
|
|
43391
|
+
this.setStatus(trans("Microphone access denied"));
|
|
43392
|
+
} else if (event.error === "audio-capture") {
|
|
43393
|
+
this.stopRecognition();
|
|
43394
|
+
this.setStatus(trans("No microphone found"));
|
|
43395
|
+
} else if (event.error === "network") {
|
|
43396
|
+
this.stopRecognition();
|
|
43397
|
+
this.setStatus(trans("Network error - speech recognition requires internet"));
|
|
43398
|
+
} else if (event.error !== "aborted") ;
|
|
43399
|
+
}
|
|
43400
|
+
handleEnd() {
|
|
43401
|
+
if (this.isListening) {
|
|
43402
|
+
this.restartTimer = setTimeout(() => {
|
|
43403
|
+
if (!this.isListening) return;
|
|
43404
|
+
try {
|
|
43405
|
+
this.recognition?.start();
|
|
43406
|
+
} catch {
|
|
43407
|
+
const Ctor = getSpeechRecognitionConstructor$1();
|
|
43408
|
+
if (!Ctor) return;
|
|
43409
|
+
this.recognition = new Ctor();
|
|
43410
|
+
this.recognition.continuous = true;
|
|
43411
|
+
this.recognition.interimResults = true;
|
|
43412
|
+
this.recognition.maxAlternatives = 1;
|
|
43413
|
+
this.recognition.lang = this.languageSelect?.value ?? this.getDefaultSpeechLang();
|
|
43414
|
+
this.recognition.onresult = this.handleResult.bind(this);
|
|
43415
|
+
this.recognition.onerror = this.handleError.bind(this);
|
|
43416
|
+
this.recognition.onend = this.handleEnd.bind(this);
|
|
43417
|
+
try {
|
|
43418
|
+
this.recognition.start();
|
|
43419
|
+
} catch {
|
|
43420
|
+
this.stopRecognition();
|
|
43421
|
+
}
|
|
43422
|
+
}
|
|
43423
|
+
}, 300);
|
|
43424
|
+
}
|
|
43425
|
+
}
|
|
43426
|
+
stopRecognition() {
|
|
43427
|
+
this.isListening = false;
|
|
43428
|
+
if (this.restartTimer) {
|
|
43429
|
+
clearTimeout(this.restartTimer);
|
|
43430
|
+
this.restartTimer = null;
|
|
43431
|
+
}
|
|
43432
|
+
if (this.recognition) {
|
|
43433
|
+
try {
|
|
43434
|
+
this.recognition.stop();
|
|
43435
|
+
} catch {
|
|
43436
|
+
}
|
|
43437
|
+
this.recognition = null;
|
|
43438
|
+
}
|
|
43439
|
+
this.updateButtonState();
|
|
43440
|
+
this.setStatus("");
|
|
43441
|
+
}
|
|
43442
|
+
updateButtonState() {
|
|
43443
|
+
const trans = this.options.trans;
|
|
43444
|
+
if (this.startStopBtn) {
|
|
43445
|
+
if (this.isListening) {
|
|
43446
|
+
this.startStopBtn.textContent = trans("Stop");
|
|
43447
|
+
this.startStopBtn.classList.remove("md-speechtotext-btn-start");
|
|
43448
|
+
this.startStopBtn.classList.add("md-speechtotext-btn-stop");
|
|
43449
|
+
} else {
|
|
43450
|
+
this.startStopBtn.textContent = trans("Start");
|
|
43451
|
+
this.startStopBtn.classList.remove("md-speechtotext-btn-stop");
|
|
43452
|
+
this.startStopBtn.classList.add("md-speechtotext-btn-start");
|
|
43453
|
+
}
|
|
43454
|
+
}
|
|
43455
|
+
if (this.statusEl) {
|
|
43456
|
+
this.statusEl.classList.toggle("md-speechtotext-status-active", this.isListening);
|
|
43457
|
+
}
|
|
43458
|
+
}
|
|
43459
|
+
setStatus(text) {
|
|
43460
|
+
if (this.statusEl) {
|
|
43461
|
+
this.statusEl.textContent = text;
|
|
43462
|
+
}
|
|
43463
|
+
}
|
|
43464
|
+
updateTranscriptDisplay() {
|
|
43465
|
+
if (!this.transcriptArea) return;
|
|
43466
|
+
const finalSpan = `<span class="md-speechtotext-final">${this.escapeHtml(this.finalTranscript)}</span>`;
|
|
43467
|
+
const interimSpan = this.interimTranscript ? `<span class="md-speechtotext-interim">${this.escapeHtml(this.interimTranscript)}</span>` : "";
|
|
43468
|
+
this.transcriptArea.innerHTML = finalSpan + interimSpan;
|
|
43469
|
+
this.transcriptArea.scrollTop = this.transcriptArea.scrollHeight;
|
|
43470
|
+
}
|
|
43471
|
+
updateConfidenceDisplay() {
|
|
43472
|
+
if (!this.confidenceEl) return;
|
|
43473
|
+
if (this.lastConfidence > 0) {
|
|
43474
|
+
const pct = Math.round(this.lastConfidence * 100);
|
|
43475
|
+
this.confidenceEl.textContent = `${this.options.trans("Confidence")}: ${pct}%`;
|
|
43476
|
+
}
|
|
43477
|
+
}
|
|
43478
|
+
insertTranscript() {
|
|
43479
|
+
const text = this.finalTranscript.trim();
|
|
43480
|
+
if (!text) return;
|
|
43481
|
+
const tiptap = this.options.editor.getTipTap();
|
|
43482
|
+
if (tiptap) {
|
|
43483
|
+
tiptap.chain().focus().insertContent(text).run();
|
|
43484
|
+
}
|
|
43485
|
+
this.clearTranscript();
|
|
43486
|
+
this.close();
|
|
43487
|
+
}
|
|
43488
|
+
clearTranscript() {
|
|
43489
|
+
this.finalTranscript = "";
|
|
43490
|
+
this.interimTranscript = "";
|
|
43491
|
+
this.lastConfidence = 0;
|
|
43492
|
+
if (this.transcriptArea) {
|
|
43493
|
+
this.transcriptArea.innerHTML = "";
|
|
43494
|
+
}
|
|
43495
|
+
if (this.confidenceEl) {
|
|
43496
|
+
this.confidenceEl.textContent = "";
|
|
43497
|
+
}
|
|
43498
|
+
}
|
|
43499
|
+
escapeHtml(text) {
|
|
43500
|
+
const div = document.createElement("div");
|
|
43501
|
+
div.textContent = text;
|
|
43502
|
+
return div.innerHTML;
|
|
43503
|
+
}
|
|
43504
|
+
}
|
|
43505
|
+
const LOCALE_TO_BCP47 = {
|
|
43506
|
+
"ar": "ar-SA",
|
|
43507
|
+
"ca": "ca-ES",
|
|
43508
|
+
"cs": "cs-CZ",
|
|
43509
|
+
"da": "da-DK",
|
|
43510
|
+
"de": "de-DE",
|
|
43511
|
+
"el": "el-GR",
|
|
43512
|
+
"en": "en-US",
|
|
43513
|
+
"en-gb": "en-GB",
|
|
43514
|
+
"es": "es-ES",
|
|
43515
|
+
"fi": "fi-FI",
|
|
43516
|
+
"fr": "fr-FR",
|
|
43517
|
+
"fr-ca": "fr-CA",
|
|
43518
|
+
"hu": "hu-HU",
|
|
43519
|
+
"id": "id-ID",
|
|
43520
|
+
"it": "it-IT",
|
|
43521
|
+
"ja": "ja-JP",
|
|
43522
|
+
"ko": "ko-KR",
|
|
43523
|
+
"nb": "nb-NO",
|
|
43524
|
+
"nl": "nl-NL",
|
|
43525
|
+
"pl": "pl-PL",
|
|
43526
|
+
"pt": "pt-BR",
|
|
43527
|
+
"ro": "ro-RO",
|
|
43528
|
+
"ru": "ru-RU",
|
|
43529
|
+
"sl": "sl-SI",
|
|
43530
|
+
"sr": "sr-RS",
|
|
43531
|
+
"sv": "sv-SE",
|
|
43532
|
+
"th": "th-TH",
|
|
43533
|
+
"tr": "tr-TR",
|
|
43534
|
+
"vi": "vi-VN",
|
|
43535
|
+
"zh": "zh-CN",
|
|
43536
|
+
"zh-tw": "zh-TW"
|
|
43537
|
+
};
|
|
43538
|
+
function getSpeechRecognitionConstructor() {
|
|
43539
|
+
return window.SpeechRecognition || window.webkitSpeechRecognition || null;
|
|
43540
|
+
}
|
|
43541
|
+
class Dictation {
|
|
43542
|
+
options;
|
|
43543
|
+
recognition = null;
|
|
43544
|
+
_isActive = false;
|
|
43545
|
+
restartTimer = null;
|
|
43546
|
+
// Tracks the start position of current interim text so we can replace it
|
|
43547
|
+
interimStart = null;
|
|
43548
|
+
interimLength = 0;
|
|
43549
|
+
constructor(options) {
|
|
43550
|
+
this.options = options;
|
|
43551
|
+
}
|
|
43552
|
+
get isActive() {
|
|
43553
|
+
return this._isActive;
|
|
43554
|
+
}
|
|
43555
|
+
toggle() {
|
|
43556
|
+
if (this._isActive) {
|
|
43557
|
+
this.stop();
|
|
43558
|
+
} else {
|
|
43559
|
+
this.start();
|
|
43560
|
+
}
|
|
43561
|
+
}
|
|
43562
|
+
start() {
|
|
43563
|
+
const Ctor = getSpeechRecognitionConstructor();
|
|
43564
|
+
if (!Ctor) return;
|
|
43565
|
+
this.recognition = new Ctor();
|
|
43566
|
+
this.recognition.continuous = true;
|
|
43567
|
+
this.recognition.interimResults = true;
|
|
43568
|
+
this.recognition.maxAlternatives = 1;
|
|
43569
|
+
this.recognition.lang = this.getSpeechLang();
|
|
43570
|
+
this.recognition.onresult = this.handleResult.bind(this);
|
|
43571
|
+
this.recognition.onerror = this.handleError.bind(this);
|
|
43572
|
+
this.recognition.onend = this.handleEnd.bind(this);
|
|
43573
|
+
try {
|
|
43574
|
+
this.recognition.start();
|
|
43575
|
+
this._isActive = true;
|
|
43576
|
+
this.interimStart = null;
|
|
43577
|
+
this.interimLength = 0;
|
|
43578
|
+
this.options.onStateChange?.(true);
|
|
43579
|
+
} catch {
|
|
43580
|
+
}
|
|
43581
|
+
}
|
|
43582
|
+
stop() {
|
|
43583
|
+
this._isActive = false;
|
|
43584
|
+
if (this.restartTimer) {
|
|
43585
|
+
clearTimeout(this.restartTimer);
|
|
43586
|
+
this.restartTimer = null;
|
|
43587
|
+
}
|
|
43588
|
+
this.clearInterim();
|
|
43589
|
+
if (this.recognition) {
|
|
43590
|
+
try {
|
|
43591
|
+
this.recognition.stop();
|
|
43592
|
+
} catch {
|
|
43593
|
+
}
|
|
43594
|
+
this.recognition = null;
|
|
43595
|
+
}
|
|
43596
|
+
this.options.onStateChange?.(false);
|
|
43597
|
+
}
|
|
43598
|
+
destroy() {
|
|
43599
|
+
this.stop();
|
|
43600
|
+
}
|
|
43601
|
+
getSpeechLang() {
|
|
43602
|
+
const locale = this.options.editor.getConfig().language ?? "en";
|
|
43603
|
+
return LOCALE_TO_BCP47[locale] ?? "en-US";
|
|
43604
|
+
}
|
|
43605
|
+
handleResult(event) {
|
|
43606
|
+
const tiptap = this.options.editor.getTipTap();
|
|
43607
|
+
if (!tiptap) return;
|
|
43608
|
+
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
43609
|
+
const result = event.results[i];
|
|
43610
|
+
const transcript = result[0].transcript;
|
|
43611
|
+
if (result.isFinal) {
|
|
43612
|
+
this.clearInterim();
|
|
43613
|
+
let text = transcript;
|
|
43614
|
+
if (this.needsLeadingSpace(text)) {
|
|
43615
|
+
text = " " + text;
|
|
43616
|
+
}
|
|
43617
|
+
tiptap.chain().focus().insertContent(text).run();
|
|
43618
|
+
} else {
|
|
43619
|
+
let text = transcript;
|
|
43620
|
+
if (this.interimStart === null && this.needsLeadingSpace(text)) {
|
|
43621
|
+
text = " " + text;
|
|
43622
|
+
}
|
|
43623
|
+
this.replaceInterim(text);
|
|
43624
|
+
}
|
|
43625
|
+
}
|
|
43626
|
+
}
|
|
43627
|
+
/** Replace the current interim text in the editor with new interim text */
|
|
43628
|
+
replaceInterim(text) {
|
|
43629
|
+
const tiptap = this.options.editor.getTipTap();
|
|
43630
|
+
if (!tiptap) return;
|
|
43631
|
+
if (this.interimStart !== null && this.interimLength > 0) {
|
|
43632
|
+
tiptap.chain().focus().command(({ tr: tr2 }) => {
|
|
43633
|
+
tr2.delete(this.interimStart, this.interimStart + this.interimLength);
|
|
43634
|
+
return true;
|
|
43635
|
+
}).run();
|
|
43636
|
+
}
|
|
43637
|
+
if (this.interimStart === null) {
|
|
43638
|
+
this.interimStart = tiptap.state.selection.from;
|
|
43639
|
+
}
|
|
43640
|
+
tiptap.chain().focus().insertContent(text).run();
|
|
43641
|
+
this.interimLength = text.length;
|
|
43642
|
+
}
|
|
43643
|
+
/** Remove interim text without inserting anything */
|
|
43644
|
+
clearInterim() {
|
|
43645
|
+
if (this.interimStart !== null && this.interimLength > 0) {
|
|
43646
|
+
const tiptap = this.options.editor.getTipTap();
|
|
43647
|
+
if (tiptap) {
|
|
43648
|
+
tiptap.chain().focus().command(({ tr: tr2 }) => {
|
|
43649
|
+
tr2.delete(this.interimStart, this.interimStart + this.interimLength);
|
|
43650
|
+
return true;
|
|
43651
|
+
}).run();
|
|
43652
|
+
}
|
|
43653
|
+
}
|
|
43654
|
+
this.interimStart = null;
|
|
43655
|
+
this.interimLength = 0;
|
|
43656
|
+
}
|
|
43657
|
+
needsLeadingSpace(newText) {
|
|
43658
|
+
if (newText.startsWith(" ")) return false;
|
|
43659
|
+
const tiptap = this.options.editor.getTipTap();
|
|
43660
|
+
if (!tiptap) return false;
|
|
43661
|
+
const { from: from2 } = tiptap.state.selection;
|
|
43662
|
+
if (from2 === 0) return false;
|
|
43663
|
+
const textBefore = tiptap.state.doc.textBetween(Math.max(0, from2 - 1), from2, "");
|
|
43664
|
+
if (!textBefore) return false;
|
|
43665
|
+
return textBefore.trim().length > 0;
|
|
43666
|
+
}
|
|
43667
|
+
handleError(event) {
|
|
43668
|
+
if (event.error === "no-speech") ;
|
|
43669
|
+
else if (event.error === "not-allowed" || event.error === "audio-capture" || event.error === "network") {
|
|
43670
|
+
this.stop();
|
|
43671
|
+
}
|
|
43672
|
+
}
|
|
43673
|
+
handleEnd() {
|
|
43674
|
+
if (this._isActive) {
|
|
43675
|
+
this.restartTimer = setTimeout(() => {
|
|
43676
|
+
if (!this._isActive) return;
|
|
43677
|
+
try {
|
|
43678
|
+
this.recognition?.start();
|
|
43679
|
+
} catch {
|
|
43680
|
+
const Ctor = getSpeechRecognitionConstructor();
|
|
43681
|
+
if (!Ctor) return;
|
|
43682
|
+
this.recognition = new Ctor();
|
|
43683
|
+
this.recognition.continuous = true;
|
|
43684
|
+
this.recognition.interimResults = true;
|
|
43685
|
+
this.recognition.maxAlternatives = 1;
|
|
43686
|
+
this.recognition.lang = this.getSpeechLang();
|
|
43687
|
+
this.recognition.onresult = this.handleResult.bind(this);
|
|
43688
|
+
this.recognition.onerror = this.handleError.bind(this);
|
|
43689
|
+
this.recognition.onend = this.handleEnd.bind(this);
|
|
43690
|
+
try {
|
|
43691
|
+
this.recognition.start();
|
|
43692
|
+
} catch {
|
|
43693
|
+
this.stop();
|
|
43694
|
+
}
|
|
43695
|
+
}
|
|
43696
|
+
}, 300);
|
|
43697
|
+
}
|
|
43698
|
+
}
|
|
43699
|
+
}
|
|
42888
43700
|
const DEFAULT_BUTTON_PRIORITY = {
|
|
42889
43701
|
bold: 1,
|
|
42890
43702
|
italic: 1,
|
|
@@ -42894,6 +43706,13 @@ const DEFAULT_BUTTON_PRIORITY = {
|
|
|
42894
43706
|
link: 1,
|
|
42895
43707
|
forecolor: 1
|
|
42896
43708
|
};
|
|
43709
|
+
const DEFAULT_BLOCK_FORMATS = "Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6";
|
|
43710
|
+
const DEFAULT_STYLE_FORMATS = [
|
|
43711
|
+
{ title: "Blue Title", block: "h3", styles: { color: "Blue" } },
|
|
43712
|
+
{ title: "Red Title", block: "h3", styles: { color: "Red" } },
|
|
43713
|
+
{ title: "Marker: Yellow", inline: "span", styles: { "background-color": "Yellow" } },
|
|
43714
|
+
{ title: "Marker: Green", inline: "span", styles: { "background-color": "Lime" } }
|
|
43715
|
+
];
|
|
42897
43716
|
const DEFAULT_COLORS = [
|
|
42898
43717
|
{ value: "#000000", label: "Black" },
|
|
42899
43718
|
{ value: "#434343", label: "Dark Gray 4" },
|
|
@@ -42947,6 +43766,9 @@ class Toolbar {
|
|
|
42947
43766
|
searchReplace = null;
|
|
42948
43767
|
sourceEditor = null;
|
|
42949
43768
|
linkEditor = null;
|
|
43769
|
+
anchorDialog = null;
|
|
43770
|
+
speechToText = null;
|
|
43771
|
+
dictation = null;
|
|
42950
43772
|
updateInterval = null;
|
|
42951
43773
|
boundClickHandler = null;
|
|
42952
43774
|
boundKeydownHandler = null;
|
|
@@ -43141,6 +43963,33 @@ class Toolbar {
|
|
|
43141
43963
|
return this.createActionButton("strikethrough", this.icon("strikethrough"), this.trans("Strikethrough"), () => {
|
|
43142
43964
|
this.tiptap?.chain().focus().toggleStrike().run();
|
|
43143
43965
|
}, () => this.tiptap?.isActive("strike") ?? false);
|
|
43966
|
+
case "subscript":
|
|
43967
|
+
return this.createActionButton("subscript", this.icon("subscript"), this.trans("Subscript"), () => {
|
|
43968
|
+
this.tiptap?.chain().focus().toggleSubscript().run();
|
|
43969
|
+
}, () => this.tiptap?.isActive("subscript") ?? false);
|
|
43970
|
+
case "superscript":
|
|
43971
|
+
return this.createActionButton("superscript", this.icon("superscript"), this.trans("Superscript"), () => {
|
|
43972
|
+
this.tiptap?.chain().focus().toggleSuperscript().run();
|
|
43973
|
+
}, () => this.tiptap?.isActive("superscript") ?? false);
|
|
43974
|
+
case "hr":
|
|
43975
|
+
return this.createActionButton("hr", this.icon("hr"), this.trans("Horizontal rule"), () => {
|
|
43976
|
+
this.tiptap?.chain().focus().setHorizontalRule().run();
|
|
43977
|
+
});
|
|
43978
|
+
case "blocks":
|
|
43979
|
+
case "formatselect":
|
|
43980
|
+
return this.createFormatDropdown();
|
|
43981
|
+
case "styles":
|
|
43982
|
+
return this.createStylesDropdown();
|
|
43983
|
+
case "table":
|
|
43984
|
+
return this.createTableDropdown();
|
|
43985
|
+
case "anchor":
|
|
43986
|
+
return this.createActionButton("anchor", this.icon("anchor"), this.trans("Insert anchor"), () => {
|
|
43987
|
+
this.openAnchorDialog();
|
|
43988
|
+
});
|
|
43989
|
+
case "unlink":
|
|
43990
|
+
return this.createActionButton("unlink", this.icon("unlink"), this.trans("Unlink"), () => {
|
|
43991
|
+
this.tiptap?.chain().focus().unsetLink().run();
|
|
43992
|
+
}, () => this.tiptap?.isActive("link") ?? false);
|
|
43144
43993
|
case "bullist":
|
|
43145
43994
|
return this.createActionButton("bullist", this.icon("bullist"), this.trans("Bullet list"), () => {
|
|
43146
43995
|
this.tiptap?.chain().focus().toggleBulletList().run();
|
|
@@ -43263,6 +44112,32 @@ class Toolbar {
|
|
|
43263
44112
|
return this.createActionButton("searchreplace", this.icon("searchreplace"), this.trans("Find and replace"), () => {
|
|
43264
44113
|
this.openSearchReplace();
|
|
43265
44114
|
});
|
|
44115
|
+
case "speechtotext": {
|
|
44116
|
+
if (this.options.config.speech_to_text === false) return null;
|
|
44117
|
+
if (!isSpeechRecognitionSupported()) {
|
|
44118
|
+
const btn = this.createActionButton("speechtotext", this.icon("speechtotext"), this.trans("Speech to text is not supported in this browser"), () => {
|
|
44119
|
+
});
|
|
44120
|
+
btn.classList.add("md-toolbar-btn-disabled");
|
|
44121
|
+
btn.setAttribute("aria-disabled", "true");
|
|
44122
|
+
return btn;
|
|
44123
|
+
}
|
|
44124
|
+
return this.createActionButton("speechtotext", this.icon("speechtotext"), this.trans("Speech to Text"), () => {
|
|
44125
|
+
this.openSpeechToText();
|
|
44126
|
+
});
|
|
44127
|
+
}
|
|
44128
|
+
case "dictate": {
|
|
44129
|
+
if (this.options.config.speech_to_text === false) return null;
|
|
44130
|
+
if (!isSpeechRecognitionSupported()) {
|
|
44131
|
+
const btn = this.createActionButton("dictate", this.icon("dictate"), this.trans("Speech to text is not supported in this browser"), () => {
|
|
44132
|
+
});
|
|
44133
|
+
btn.classList.add("md-toolbar-btn-disabled");
|
|
44134
|
+
btn.setAttribute("aria-disabled", "true");
|
|
44135
|
+
return btn;
|
|
44136
|
+
}
|
|
44137
|
+
return this.createActionButton("dictate", this.icon("dictate"), this.trans("Dictate"), () => {
|
|
44138
|
+
this.toggleDictation();
|
|
44139
|
+
});
|
|
44140
|
+
}
|
|
43266
44141
|
case "template":
|
|
43267
44142
|
return this.createTemplateDropdown();
|
|
43268
44143
|
default:
|
|
@@ -43367,6 +44242,126 @@ class Toolbar {
|
|
|
43367
44242
|
}
|
|
43368
44243
|
});
|
|
43369
44244
|
}
|
|
44245
|
+
createFormatDropdown() {
|
|
44246
|
+
const spec = this.options.config.block_formats ?? DEFAULT_BLOCK_FORMATS;
|
|
44247
|
+
const options = spec.split(";").map((entry) => {
|
|
44248
|
+
const [label, value] = entry.split("=");
|
|
44249
|
+
return { label: this.trans(label.trim()), value: (value ?? label).trim().toLowerCase() };
|
|
44250
|
+
}).filter((o) => o.value);
|
|
44251
|
+
return this.createDropdown("blocks", this.trans("Format"), options, (option) => {
|
|
44252
|
+
const chain = this.tiptap?.chain().focus();
|
|
44253
|
+
if (!chain) return;
|
|
44254
|
+
const m = /^h([1-6])$/.exec(option.value);
|
|
44255
|
+
if (m) {
|
|
44256
|
+
chain.toggleHeading({ level: Number(m[1]) }).run();
|
|
44257
|
+
} else {
|
|
44258
|
+
chain.setParagraph().run();
|
|
44259
|
+
}
|
|
44260
|
+
}, () => {
|
|
44261
|
+
for (let level = 1; level <= 6; level++) {
|
|
44262
|
+
if (this.tiptap?.isActive("heading", { level })) return `h${level}`;
|
|
44263
|
+
}
|
|
44264
|
+
return this.tiptap?.isActive("paragraph") ? "p" : "";
|
|
44265
|
+
});
|
|
44266
|
+
}
|
|
44267
|
+
getStyleFormats() {
|
|
44268
|
+
return this.options.config.style_formats ?? DEFAULT_STYLE_FORMATS;
|
|
44269
|
+
}
|
|
44270
|
+
createStylesDropdown() {
|
|
44271
|
+
const formats = this.getStyleFormats();
|
|
44272
|
+
const options = formats.map((f, i) => ({ label: f.title, value: String(i) }));
|
|
44273
|
+
return this.createDropdown("styles", this.trans("Styles"), options, (option) => {
|
|
44274
|
+
const fmt = formats[Number(option.value)];
|
|
44275
|
+
if (fmt) this.applyStyleFormat(fmt);
|
|
44276
|
+
});
|
|
44277
|
+
}
|
|
44278
|
+
/**
|
|
44279
|
+
* Apply a StyleFormat to the current selection. Block elements map to
|
|
44280
|
+
* heading/paragraph; color and background map to the existing Color /
|
|
44281
|
+
* Highlight marks; classes map to the InlineStyle textStyle class.
|
|
44282
|
+
* (Arbitrary element wrapping from CKEditor stylesSet is not supported.)
|
|
44283
|
+
*/
|
|
44284
|
+
applyStyleFormat(fmt) {
|
|
44285
|
+
const chain = this.tiptap?.chain().focus();
|
|
44286
|
+
if (!chain) return;
|
|
44287
|
+
const blockEl = fmt.block;
|
|
44288
|
+
if (blockEl) {
|
|
44289
|
+
const m = /^h([1-6])$/.exec(blockEl);
|
|
44290
|
+
if (m) {
|
|
44291
|
+
chain.setHeading({ level: Number(m[1]) });
|
|
44292
|
+
} else if (blockEl === "p") {
|
|
44293
|
+
chain.setParagraph();
|
|
44294
|
+
}
|
|
44295
|
+
}
|
|
44296
|
+
if (fmt.styles) {
|
|
44297
|
+
if (fmt.styles.color) {
|
|
44298
|
+
chain.setColor(fmt.styles.color);
|
|
44299
|
+
}
|
|
44300
|
+
const bg = fmt.styles["background-color"];
|
|
44301
|
+
if (bg) {
|
|
44302
|
+
chain.setHighlight({ color: bg });
|
|
44303
|
+
}
|
|
44304
|
+
}
|
|
44305
|
+
if (fmt.classes) {
|
|
44306
|
+
chain.setInlineClass(fmt.classes);
|
|
44307
|
+
}
|
|
44308
|
+
chain.run();
|
|
44309
|
+
}
|
|
44310
|
+
createTableDropdown() {
|
|
44311
|
+
const t = this.trans;
|
|
44312
|
+
const options = [
|
|
44313
|
+
{ label: t("Insert table"), value: "insert" },
|
|
44314
|
+
{ label: t("Insert row before"), value: "rowBefore" },
|
|
44315
|
+
{ label: t("Insert row after"), value: "rowAfter" },
|
|
44316
|
+
{ label: t("Delete row"), value: "deleteRow" },
|
|
44317
|
+
{ label: t("Insert column before"), value: "colBefore" },
|
|
44318
|
+
{ label: t("Insert column after"), value: "colAfter" },
|
|
44319
|
+
{ label: t("Delete column"), value: "deleteCol" },
|
|
44320
|
+
{ label: t("Merge cells"), value: "merge" },
|
|
44321
|
+
{ label: t("Split cell"), value: "split" },
|
|
44322
|
+
{ label: t("Toggle header row"), value: "headerRow" },
|
|
44323
|
+
{ label: t("Delete table"), value: "deleteTable" }
|
|
44324
|
+
];
|
|
44325
|
+
return this.createDropdown("table", this.trans("Table"), options, (option) => {
|
|
44326
|
+
const chain = this.tiptap?.chain().focus();
|
|
44327
|
+
if (!chain) return;
|
|
44328
|
+
switch (option.value) {
|
|
44329
|
+
case "insert":
|
|
44330
|
+
chain.insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();
|
|
44331
|
+
break;
|
|
44332
|
+
case "rowBefore":
|
|
44333
|
+
chain.addRowBefore().run();
|
|
44334
|
+
break;
|
|
44335
|
+
case "rowAfter":
|
|
44336
|
+
chain.addRowAfter().run();
|
|
44337
|
+
break;
|
|
44338
|
+
case "deleteRow":
|
|
44339
|
+
chain.deleteRow().run();
|
|
44340
|
+
break;
|
|
44341
|
+
case "colBefore":
|
|
44342
|
+
chain.addColumnBefore().run();
|
|
44343
|
+
break;
|
|
44344
|
+
case "colAfter":
|
|
44345
|
+
chain.addColumnAfter().run();
|
|
44346
|
+
break;
|
|
44347
|
+
case "deleteCol":
|
|
44348
|
+
chain.deleteColumn().run();
|
|
44349
|
+
break;
|
|
44350
|
+
case "merge":
|
|
44351
|
+
chain.mergeCells().run();
|
|
44352
|
+
break;
|
|
44353
|
+
case "split":
|
|
44354
|
+
chain.splitCell().run();
|
|
44355
|
+
break;
|
|
44356
|
+
case "headerRow":
|
|
44357
|
+
chain.toggleHeaderRow().run();
|
|
44358
|
+
break;
|
|
44359
|
+
case "deleteTable":
|
|
44360
|
+
chain.deleteTable().run();
|
|
44361
|
+
break;
|
|
44362
|
+
}
|
|
44363
|
+
});
|
|
44364
|
+
}
|
|
43370
44365
|
/**
|
|
43371
44366
|
* Position a fixed-position menu below its trigger button.
|
|
43372
44367
|
* Uses getBoundingClientRect so the menu escapes any overflow:hidden ancestor.
|
|
@@ -43604,6 +44599,15 @@ class Toolbar {
|
|
|
43604
44599
|
case "strikethrough":
|
|
43605
44600
|
isActive2 = this.tiptap?.isActive("strike") ?? false;
|
|
43606
44601
|
break;
|
|
44602
|
+
case "subscript":
|
|
44603
|
+
isActive2 = this.tiptap?.isActive("subscript") ?? false;
|
|
44604
|
+
break;
|
|
44605
|
+
case "superscript":
|
|
44606
|
+
isActive2 = this.tiptap?.isActive("superscript") ?? false;
|
|
44607
|
+
break;
|
|
44608
|
+
case "unlink":
|
|
44609
|
+
isActive2 = this.tiptap?.isActive("link") ?? false;
|
|
44610
|
+
break;
|
|
43607
44611
|
case "bullist":
|
|
43608
44612
|
isActive2 = this.tiptap?.isActive("bulletList") ?? false;
|
|
43609
44613
|
break;
|
|
@@ -43650,6 +44654,9 @@ class Toolbar {
|
|
|
43650
44654
|
uploadBasePath: this.options.config.images_upload_base_path,
|
|
43651
44655
|
uploadMaxSize: this.options.config.images_upload_max_size,
|
|
43652
44656
|
uploadHeaders: this.options.config.images_upload_headers,
|
|
44657
|
+
fileTypes: this.options.config.images_file_types,
|
|
44658
|
+
validate: this.options.config.images_upload_validate,
|
|
44659
|
+
onError: this.options.config.images_upload_error,
|
|
43653
44660
|
trans: this.trans
|
|
43654
44661
|
});
|
|
43655
44662
|
}
|
|
@@ -43664,6 +44671,25 @@ class Toolbar {
|
|
|
43664
44671
|
}
|
|
43665
44672
|
this.linkEditor.open();
|
|
43666
44673
|
}
|
|
44674
|
+
openAnchorDialog() {
|
|
44675
|
+
if (!this.anchorDialog) {
|
|
44676
|
+
this.anchorDialog = new AnchorDialog({
|
|
44677
|
+
editor: this.options.editor,
|
|
44678
|
+
trans: this.trans
|
|
44679
|
+
});
|
|
44680
|
+
}
|
|
44681
|
+
this.anchorDialog.open();
|
|
44682
|
+
}
|
|
44683
|
+
/**
|
|
44684
|
+
* Enable or disable the whole toolbar (used for read-only mode).
|
|
44685
|
+
* Blocks pointer interaction and dims the toolbar via CSS.
|
|
44686
|
+
*/
|
|
44687
|
+
setEnabled(enabled) {
|
|
44688
|
+
this.container.classList.toggle("md-toolbar-disabled", !enabled);
|
|
44689
|
+
if (!enabled) {
|
|
44690
|
+
this.closeAllDropdowns();
|
|
44691
|
+
}
|
|
44692
|
+
}
|
|
43667
44693
|
openCharMap() {
|
|
43668
44694
|
if (!this.charMap) {
|
|
43669
44695
|
this.charMap = new CharacterMap({
|
|
@@ -43695,6 +44721,31 @@ class Toolbar {
|
|
|
43695
44721
|
}
|
|
43696
44722
|
this.searchReplace.open();
|
|
43697
44723
|
}
|
|
44724
|
+
openSpeechToText() {
|
|
44725
|
+
if (!this.speechToText) {
|
|
44726
|
+
this.speechToText = new SpeechToText({
|
|
44727
|
+
editor: this.options.editor,
|
|
44728
|
+
trans: this.trans
|
|
44729
|
+
});
|
|
44730
|
+
}
|
|
44731
|
+
this.speechToText.open();
|
|
44732
|
+
}
|
|
44733
|
+
toggleDictation() {
|
|
44734
|
+
if (!this.dictation) {
|
|
44735
|
+
this.dictation = new Dictation({
|
|
44736
|
+
editor: this.options.editor,
|
|
44737
|
+
trans: this.trans,
|
|
44738
|
+
onStateChange: (isActive2) => {
|
|
44739
|
+
const btn = this.buttonElements.get("dictate");
|
|
44740
|
+
if (btn) {
|
|
44741
|
+
btn.classList.toggle("md-toolbar-btn-active", isActive2);
|
|
44742
|
+
btn.classList.toggle("md-toolbar-btn-dictating", isActive2);
|
|
44743
|
+
}
|
|
44744
|
+
}
|
|
44745
|
+
});
|
|
44746
|
+
}
|
|
44747
|
+
this.dictation.toggle();
|
|
44748
|
+
}
|
|
43698
44749
|
openSourceCode() {
|
|
43699
44750
|
if (!this.sourceEditor) {
|
|
43700
44751
|
this.sourceEditor = new SourceEditor({
|
|
@@ -43743,6 +44794,16 @@ class Toolbar {
|
|
|
43743
44794
|
this.imageUpload = null;
|
|
43744
44795
|
this.searchReplace?.destroy();
|
|
43745
44796
|
this.searchReplace = null;
|
|
44797
|
+
this.speechToText?.destroy();
|
|
44798
|
+
this.speechToText = null;
|
|
44799
|
+
this.dictation?.destroy();
|
|
44800
|
+
this.dictation = null;
|
|
44801
|
+
this.anchorDialog?.destroy();
|
|
44802
|
+
this.anchorDialog = null;
|
|
44803
|
+
this.linkEditor?.destroy();
|
|
44804
|
+
this.linkEditor = null;
|
|
44805
|
+
this.sourceEditor?.destroy();
|
|
44806
|
+
this.sourceEditor = null;
|
|
43746
44807
|
this.buttonElements.clear();
|
|
43747
44808
|
this.dropdowns.clear();
|
|
43748
44809
|
this.removeBodyMenus();
|
|
@@ -43765,6 +44826,11 @@ class Toolbar {
|
|
|
43765
44826
|
this.emojiPicker?.destroy();
|
|
43766
44827
|
this.imageUpload?.destroy();
|
|
43767
44828
|
this.searchReplace?.destroy();
|
|
44829
|
+
this.speechToText?.destroy();
|
|
44830
|
+
this.dictation?.destroy();
|
|
44831
|
+
this.anchorDialog?.destroy();
|
|
44832
|
+
this.linkEditor?.destroy();
|
|
44833
|
+
this.sourceEditor?.destroy();
|
|
43768
44834
|
this.buttonElements.clear();
|
|
43769
44835
|
this.dropdowns.clear();
|
|
43770
44836
|
this.removeBodyMenus();
|
|
@@ -43783,6 +44849,10 @@ const SVG_ALIGN_RIGHT = '<svg width="16" height="16" viewBox="0 0 24 24" fill="n
|
|
|
43783
44849
|
const SVG_ALIGN_JUSTIFY = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
|
|
43784
44850
|
const SVG_IMAGE = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>';
|
|
43785
44851
|
const SVG_CODE = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>';
|
|
44852
|
+
const SVG_HR = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="3" y1="12" x2="21" y2="12"/></svg>';
|
|
44853
|
+
const SVG_TABLE = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="1"/><line x1="3" y1="9" x2="21" y2="9"/><line x1="3" y1="15" x2="21" y2="15"/><line x1="9" y1="3" x2="9" y2="21"/><line x1="15" y1="3" x2="15" y2="21"/></svg>';
|
|
44854
|
+
const SVG_ANCHOR = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="5" r="3"/><line x1="12" y1="22" x2="12" y2="8"/><path d="M5 12H2a10 10 0 0 0 20 0h-3"/></svg>';
|
|
44855
|
+
const SVG_UNLINK = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.84 12.25l1.72-1.71a4 4 0 0 0-5.66-5.66l-1.71 1.72"/><path d="M5.17 11.75l-1.71 1.71a4 4 0 0 0 5.66 5.66l1.71-1.71"/><line x1="2" y1="2" x2="22" y2="22"/></svg>';
|
|
43786
44856
|
const DEFAULT_ICONS = {
|
|
43787
44857
|
bold: "B",
|
|
43788
44858
|
italic: "I",
|
|
@@ -43814,7 +44884,17 @@ const DEFAULT_ICONS = {
|
|
|
43814
44884
|
ltr: "⇐",
|
|
43815
44885
|
rtl: "⇒",
|
|
43816
44886
|
searchreplace: "🔍",
|
|
43817
|
-
|
|
44887
|
+
speechtotext: "🎤",
|
|
44888
|
+
dictate: "🎙️",
|
|
44889
|
+
togglemore: "…",
|
|
44890
|
+
subscript: "X₂",
|
|
44891
|
+
superscript: "X²",
|
|
44892
|
+
hr: SVG_HR,
|
|
44893
|
+
table: SVG_TABLE,
|
|
44894
|
+
anchor: SVG_ANCHOR,
|
|
44895
|
+
unlink: SVG_UNLINK,
|
|
44896
|
+
blocks: "¶",
|
|
44897
|
+
styles: "A"
|
|
43818
44898
|
};
|
|
43819
44899
|
const CONFAB_ICONS = {
|
|
43820
44900
|
bold: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"/><path d="M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"/></svg>',
|
|
@@ -43847,7 +44927,17 @@ const CONFAB_ICONS = {
|
|
|
43847
44927
|
ltr: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="18" y1="5" x2="18" y2="19"/><path d="M8 5a4 4 0 0 0 0 8h4"/><polyline points="4 17 8 21 12 17"/></svg>',
|
|
43848
44928
|
rtl: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="6" y1="5" x2="6" y2="19"/><path d="M16 5a4 4 0 0 1 0 8h-4"/><polyline points="20 17 16 21 12 17"/></svg>',
|
|
43849
44929
|
searchreplace: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.6" y2="16.6"/></svg>',
|
|
43850
|
-
|
|
44930
|
+
speechtotext: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" y1="19" x2="12" y2="23"/><line x1="8" y1="23" x2="16" y2="23"/></svg>',
|
|
44931
|
+
dictate: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><circle cx="12" cy="12" r="1" fill="currentColor" stroke="none"/><circle cx="12" cy="8" r="1" fill="currentColor" stroke="none"/><circle cx="12" cy="16" r="0.5" fill="currentColor" stroke="none"/></svg>',
|
|
44932
|
+
togglemore: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="1" fill="currentColor"/><circle cx="5" cy="12" r="1" fill="currentColor"/><circle cx="19" cy="12" r="1" fill="currentColor"/></svg>',
|
|
44933
|
+
subscript: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5l8 10M12 5L4 15"/><path d="M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2 2 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"/></svg>',
|
|
44934
|
+
superscript: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 9l8 10M12 9l-8 10"/><path d="M20 8h-4c0-1.5.44-2 1.5-2.5S20 4.33 20 3c0-.47-.17-.93-.48-1.29a2 2 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"/></svg>',
|
|
44935
|
+
hr: SVG_HR,
|
|
44936
|
+
table: SVG_TABLE,
|
|
44937
|
+
anchor: SVG_ANCHOR,
|
|
44938
|
+
unlink: SVG_UNLINK,
|
|
44939
|
+
blocks: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 4v16"/><path d="M17 4v16"/><path d="M19 4H9.5a4.5 4.5 0 0 0 0 9H13"/></svg>',
|
|
44940
|
+
styles: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l4 7h-8z"/><path d="M8 10h8l-4 11z"/></svg>'
|
|
43851
44941
|
};
|
|
43852
44942
|
const FontSize = Extension.create({
|
|
43853
44943
|
name: "fontSize",
|
|
@@ -43992,7 +45082,10 @@ const SignatureBlock = Node3.create({
|
|
|
43992
45082
|
parseHTML() {
|
|
43993
45083
|
return [
|
|
43994
45084
|
{
|
|
43995
|
-
|
|
45085
|
+
// Higher priority than the generic div->paragraph rule used when
|
|
45086
|
+
// forced_root_block is 'div', so the signature wrapper still matches.
|
|
45087
|
+
tag: 'div[id="signature"]',
|
|
45088
|
+
priority: 100
|
|
43996
45089
|
}
|
|
43997
45090
|
];
|
|
43998
45091
|
},
|
|
@@ -44048,6 +45141,80 @@ const Mention = Node3.create({
|
|
|
44048
45141
|
];
|
|
44049
45142
|
}
|
|
44050
45143
|
});
|
|
45144
|
+
const Anchor = Node3.create({
|
|
45145
|
+
name: "anchor",
|
|
45146
|
+
inline: true,
|
|
45147
|
+
group: "inline",
|
|
45148
|
+
atom: true,
|
|
45149
|
+
selectable: true,
|
|
45150
|
+
addOptions() {
|
|
45151
|
+
return {
|
|
45152
|
+
HTMLAttributes: { class: "md-anchor" }
|
|
45153
|
+
};
|
|
45154
|
+
},
|
|
45155
|
+
addAttributes() {
|
|
45156
|
+
return {
|
|
45157
|
+
id: {
|
|
45158
|
+
default: null,
|
|
45159
|
+
parseHTML: (element) => element.getAttribute("id"),
|
|
45160
|
+
renderHTML: (attributes) => attributes.id ? { id: attributes.id } : {}
|
|
45161
|
+
},
|
|
45162
|
+
name: {
|
|
45163
|
+
default: null,
|
|
45164
|
+
parseHTML: (element) => element.getAttribute("name"),
|
|
45165
|
+
renderHTML: (attributes) => attributes.name ? { name: attributes.name } : {}
|
|
45166
|
+
}
|
|
45167
|
+
};
|
|
45168
|
+
},
|
|
45169
|
+
parseHTML() {
|
|
45170
|
+
return [{ tag: "a[id]:not([href])", priority: 60 }];
|
|
45171
|
+
},
|
|
45172
|
+
renderHTML({ HTMLAttributes }) {
|
|
45173
|
+
return ["a", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];
|
|
45174
|
+
},
|
|
45175
|
+
addCommands() {
|
|
45176
|
+
return {
|
|
45177
|
+
setAnchor: (name) => ({ commands }) => commands.insertContent({ type: this.name, attrs: { id: name, name } })
|
|
45178
|
+
};
|
|
45179
|
+
}
|
|
45180
|
+
});
|
|
45181
|
+
const InlineStyle = Extension.create({
|
|
45182
|
+
name: "inlineStyle",
|
|
45183
|
+
addOptions() {
|
|
45184
|
+
return {
|
|
45185
|
+
types: ["textStyle"]
|
|
45186
|
+
};
|
|
45187
|
+
},
|
|
45188
|
+
addGlobalAttributes() {
|
|
45189
|
+
return [
|
|
45190
|
+
{
|
|
45191
|
+
types: this.options.types,
|
|
45192
|
+
attributes: {
|
|
45193
|
+
styleClass: {
|
|
45194
|
+
default: null,
|
|
45195
|
+
parseHTML: (element) => element.getAttribute("class") || null,
|
|
45196
|
+
renderHTML: (attributes) => {
|
|
45197
|
+
if (!attributes.styleClass) {
|
|
45198
|
+
return {};
|
|
45199
|
+
}
|
|
45200
|
+
return { class: attributes.styleClass };
|
|
45201
|
+
}
|
|
45202
|
+
}
|
|
45203
|
+
}
|
|
45204
|
+
}
|
|
45205
|
+
];
|
|
45206
|
+
},
|
|
45207
|
+
addCommands() {
|
|
45208
|
+
return {
|
|
45209
|
+
setInlineClass: (className) => ({ chain }) => {
|
|
45210
|
+
return chain().setMark("textStyle", { styleClass: className }).run();
|
|
45211
|
+
},
|
|
45212
|
+
unsetInlineClass: () => ({ chain }) => {
|
|
45213
|
+
return chain().setMark("textStyle", { styleClass: null }).removeEmptyTextStyle().run();
|
|
45214
|
+
}
|
|
45215
|
+
};
|
|
45216
|
+
}
|
|
45217
|
+
});
|
|
44051
45218
|
const WORD_MARKERS = [
|
|
44052
45219
|
'xmlns:o="urn:schemas-microsoft-com:office:office"',
|
|
44053
45220
|
'xmlns:w="urn:schemas-microsoft-com:office:word"',
|
|
@@ -44496,7 +45663,50 @@ const en = {
|
|
|
44496
45663
|
"Title": "Title",
|
|
44497
45664
|
"Open link in...": "Open link in...",
|
|
44498
45665
|
"Current window": "Current window",
|
|
44499
|
-
"New window": "New window"
|
|
45666
|
+
"New window": "New window",
|
|
45667
|
+
"Speech to Text": "Speech to Text",
|
|
45668
|
+
"Dictate": "Dictate",
|
|
45669
|
+
"Start": "Start",
|
|
45670
|
+
"Stop": "Stop",
|
|
45671
|
+
"Clear": "Clear",
|
|
45672
|
+
"Language": "Language",
|
|
45673
|
+
"Confidence": "Confidence",
|
|
45674
|
+
"Listening...": "Listening...",
|
|
45675
|
+
"Speech to text is not supported in this browser": "Speech to text is not supported in this browser",
|
|
45676
|
+
"No speech detected": "No speech detected",
|
|
45677
|
+
"Microphone access denied": "Microphone access denied",
|
|
45678
|
+
"No microphone found": "No microphone found",
|
|
45679
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
45680
|
+
"Subscript": "Subscript",
|
|
45681
|
+
"Superscript": "Superscript",
|
|
45682
|
+
"Horizontal rule": "Horizontal rule",
|
|
45683
|
+
"Unlink": "Unlink",
|
|
45684
|
+
"Format": "Format",
|
|
45685
|
+
"Paragraph": "Paragraph",
|
|
45686
|
+
"Heading 1": "Heading 1",
|
|
45687
|
+
"Heading 2": "Heading 2",
|
|
45688
|
+
"Heading 3": "Heading 3",
|
|
45689
|
+
"Heading 4": "Heading 4",
|
|
45690
|
+
"Heading 5": "Heading 5",
|
|
45691
|
+
"Heading 6": "Heading 6",
|
|
45692
|
+
"Styles": "Styles",
|
|
45693
|
+
"Insert anchor": "Insert anchor",
|
|
45694
|
+
"Anchor": "Anchor",
|
|
45695
|
+
"Anchor name": "Anchor name",
|
|
45696
|
+
"Anchor name is required": "Anchor name is required",
|
|
45697
|
+
"Anchor name cannot contain spaces": "Anchor name cannot contain spaces",
|
|
45698
|
+
"Table": "Table",
|
|
45699
|
+
"Insert table": "Insert table",
|
|
45700
|
+
"Insert row before": "Insert row before",
|
|
45701
|
+
"Insert row after": "Insert row after",
|
|
45702
|
+
"Delete row": "Delete row",
|
|
45703
|
+
"Insert column before": "Insert column before",
|
|
45704
|
+
"Insert column after": "Insert column after",
|
|
45705
|
+
"Delete column": "Delete column",
|
|
45706
|
+
"Merge cells": "Merge cells",
|
|
45707
|
+
"Split cell": "Split cell",
|
|
45708
|
+
"Toggle header row": "Toggle header row",
|
|
45709
|
+
"Delete table": "Delete table"
|
|
44500
45710
|
};
|
|
44501
45711
|
const ar = {
|
|
44502
45712
|
"Bold": "غامق",
|
|
@@ -44554,7 +45764,7 @@ const ar = {
|
|
|
44554
45764
|
"Browse...": "استعراض...",
|
|
44555
45765
|
"Drop image here or click to browse": "أسقط الصورة هنا أو انقر للاستعراض",
|
|
44556
45766
|
"Alt text": "نص بديل",
|
|
44557
|
-
"Insert": "
|
|
45767
|
+
"Insert": "?????",
|
|
44558
45768
|
"Cancel": "إلغاء",
|
|
44559
45769
|
"Uploading...": "جارٍ الرفع...",
|
|
44560
45770
|
"Upload failed": "فشل الرفع",
|
|
@@ -44568,7 +45778,50 @@ const ar = {
|
|
|
44568
45778
|
"Title": "Title",
|
|
44569
45779
|
"Open link in...": "Open link in...",
|
|
44570
45780
|
"Current window": "Current window",
|
|
44571
|
-
"New window": "New window"
|
|
45781
|
+
"New window": "New window",
|
|
45782
|
+
"Speech to Text": "????? ?????? ??? ??",
|
|
45783
|
+
"Dictate": "إملاء",
|
|
45784
|
+
"Start": "???",
|
|
45785
|
+
"Stop": "?????",
|
|
45786
|
+
"Clear": "???",
|
|
45787
|
+
"Language": "?????",
|
|
45788
|
+
"Confidence": "?????",
|
|
45789
|
+
"Listening...": "???? ????????...",
|
|
45790
|
+
"Speech to text is not supported in this browser": "????? ?????? ??? ?? ??? ????? ?? ??? ???????",
|
|
45791
|
+
"No speech detected": "?? ??? ?????? ????",
|
|
45792
|
+
"Microphone access denied": "?? ??? ?????? ??? ??????????",
|
|
45793
|
+
"No microphone found": "No microphone found",
|
|
45794
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
45795
|
+
"Subscript": "منخفض",
|
|
45796
|
+
"Superscript": "مرتفع",
|
|
45797
|
+
"Horizontal rule": "خط أفقي",
|
|
45798
|
+
"Unlink": "إزالة الرابط",
|
|
45799
|
+
"Format": "تنسيق",
|
|
45800
|
+
"Paragraph": "فقرة",
|
|
45801
|
+
"Heading 1": "عنوان 1",
|
|
45802
|
+
"Heading 2": "عنوان 2",
|
|
45803
|
+
"Heading 3": "عنوان 3",
|
|
45804
|
+
"Heading 4": "عنوان 4",
|
|
45805
|
+
"Heading 5": "عنوان 5",
|
|
45806
|
+
"Heading 6": "عنوان 6",
|
|
45807
|
+
"Styles": "أنماط",
|
|
45808
|
+
"Insert anchor": "إدراج مرساة",
|
|
45809
|
+
"Anchor": "مرساة",
|
|
45810
|
+
"Anchor name": "اسم المرساة",
|
|
45811
|
+
"Anchor name is required": "اسم المرساة مطلوب",
|
|
45812
|
+
"Anchor name cannot contain spaces": "لا يمكن أن يحتوي اسم المرساة على مسافات",
|
|
45813
|
+
"Table": "جدول",
|
|
45814
|
+
"Insert table": "إدراج جدول",
|
|
45815
|
+
"Insert row before": "إدراج صف قبل",
|
|
45816
|
+
"Insert row after": "إدراج صف بعد",
|
|
45817
|
+
"Delete row": "حذف الصف",
|
|
45818
|
+
"Insert column before": "إدراج عمود قبل",
|
|
45819
|
+
"Insert column after": "إدراج عمود بعد",
|
|
45820
|
+
"Delete column": "حذف العمود",
|
|
45821
|
+
"Merge cells": "دمج الخلايا",
|
|
45822
|
+
"Split cell": "تقسيم الخلية",
|
|
45823
|
+
"Toggle header row": "تبديل صف الرأس",
|
|
45824
|
+
"Delete table": "حذف الجدول"
|
|
44572
45825
|
};
|
|
44573
45826
|
const ca = {
|
|
44574
45827
|
"Bold": "Negreta",
|
|
@@ -44640,7 +45893,50 @@ const ca = {
|
|
|
44640
45893
|
"Title": "Title",
|
|
44641
45894
|
"Open link in...": "Open link in...",
|
|
44642
45895
|
"Current window": "Current window",
|
|
44643
|
-
"New window": "New window"
|
|
45896
|
+
"New window": "New window",
|
|
45897
|
+
"Speech to Text": "Veu a text",
|
|
45898
|
+
"Dictate": "Dictar",
|
|
45899
|
+
"Start": "Iniciar",
|
|
45900
|
+
"Stop": "Aturar",
|
|
45901
|
+
"Clear": "Esborrar",
|
|
45902
|
+
"Language": "Idioma",
|
|
45903
|
+
"Confidence": "Confian�a",
|
|
45904
|
+
"Listening...": "Escoltant...",
|
|
45905
|
+
"Speech to text is not supported in this browser": "La veu a text no �s compatible amb aquest navegador",
|
|
45906
|
+
"No speech detected": "No s'ha detectat veu",
|
|
45907
|
+
"Microphone access denied": "Acc�s al micr�fon denegat",
|
|
45908
|
+
"No microphone found": "No microphone found",
|
|
45909
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
45910
|
+
"Subscript": "Subíndex",
|
|
45911
|
+
"Superscript": "Superíndex",
|
|
45912
|
+
"Horizontal rule": "Línia horitzontal",
|
|
45913
|
+
"Unlink": "Treure enllaç",
|
|
45914
|
+
"Format": "Format",
|
|
45915
|
+
"Paragraph": "Paràgraf",
|
|
45916
|
+
"Heading 1": "Encapçalament 1",
|
|
45917
|
+
"Heading 2": "Encapçalament 2",
|
|
45918
|
+
"Heading 3": "Encapçalament 3",
|
|
45919
|
+
"Heading 4": "Encapçalament 4",
|
|
45920
|
+
"Heading 5": "Encapçalament 5",
|
|
45921
|
+
"Heading 6": "Encapçalament 6",
|
|
45922
|
+
"Styles": "Estils",
|
|
45923
|
+
"Insert anchor": "Inserir àncora",
|
|
45924
|
+
"Anchor": "Àncora",
|
|
45925
|
+
"Anchor name": "Nom de l'àncora",
|
|
45926
|
+
"Anchor name is required": "El nom de l'àncora és obligatori",
|
|
45927
|
+
"Anchor name cannot contain spaces": "El nom de l'àncora no pot contenir espais",
|
|
45928
|
+
"Table": "Taula",
|
|
45929
|
+
"Insert table": "Inserir taula",
|
|
45930
|
+
"Insert row before": "Inserir fila a sobre",
|
|
45931
|
+
"Insert row after": "Inserir fila a sota",
|
|
45932
|
+
"Delete row": "Eliminar fila",
|
|
45933
|
+
"Insert column before": "Inserir columna abans",
|
|
45934
|
+
"Insert column after": "Inserir columna després",
|
|
45935
|
+
"Delete column": "Eliminar columna",
|
|
45936
|
+
"Merge cells": "Combinar cel·les",
|
|
45937
|
+
"Split cell": "Dividir cel·la",
|
|
45938
|
+
"Toggle header row": "Alternar fila de capçalera",
|
|
45939
|
+
"Delete table": "Eliminar taula"
|
|
44644
45940
|
};
|
|
44645
45941
|
const zh = {
|
|
44646
45942
|
"Bold": "粗体",
|
|
@@ -44698,7 +45994,7 @@ const zh = {
|
|
|
44698
45994
|
"Browse...": "浏览...",
|
|
44699
45995
|
"Drop image here or click to browse": "将图片拖放到此处或点击浏览",
|
|
44700
45996
|
"Alt text": "替代文本",
|
|
44701
|
-
"Insert": "
|
|
45997
|
+
"Insert": "??",
|
|
44702
45998
|
"Cancel": "取消",
|
|
44703
45999
|
"Uploading...": "上传中...",
|
|
44704
46000
|
"Upload failed": "上传失败",
|
|
@@ -44712,7 +46008,50 @@ const zh = {
|
|
|
44712
46008
|
"Title": "Title",
|
|
44713
46009
|
"Open link in...": "Open link in...",
|
|
44714
46010
|
"Current window": "Current window",
|
|
44715
|
-
"New window": "New window"
|
|
46011
|
+
"New window": "New window",
|
|
46012
|
+
"Speech to Text": "?????",
|
|
46013
|
+
"Dictate": "听写",
|
|
46014
|
+
"Start": "??",
|
|
46015
|
+
"Stop": "??",
|
|
46016
|
+
"Clear": "??",
|
|
46017
|
+
"Language": "??",
|
|
46018
|
+
"Confidence": "???",
|
|
46019
|
+
"Listening...": "????...",
|
|
46020
|
+
"Speech to text is not supported in this browser": "????????????",
|
|
46021
|
+
"No speech detected": "??????",
|
|
46022
|
+
"Microphone access denied": "????????",
|
|
46023
|
+
"No microphone found": "No microphone found",
|
|
46024
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46025
|
+
"Subscript": "下标",
|
|
46026
|
+
"Superscript": "上标",
|
|
46027
|
+
"Horizontal rule": "水平线",
|
|
46028
|
+
"Unlink": "取消链接",
|
|
46029
|
+
"Format": "格式",
|
|
46030
|
+
"Paragraph": "段落",
|
|
46031
|
+
"Heading 1": "标题 1",
|
|
46032
|
+
"Heading 2": "标题 2",
|
|
46033
|
+
"Heading 3": "标题 3",
|
|
46034
|
+
"Heading 4": "标题 4",
|
|
46035
|
+
"Heading 5": "标题 5",
|
|
46036
|
+
"Heading 6": "标题 6",
|
|
46037
|
+
"Styles": "样式",
|
|
46038
|
+
"Insert anchor": "插入锚点",
|
|
46039
|
+
"Anchor": "锚点",
|
|
46040
|
+
"Anchor name": "锚点名称",
|
|
46041
|
+
"Anchor name is required": "锚点名称为必填项",
|
|
46042
|
+
"Anchor name cannot contain spaces": "锚点名称不能包含空格",
|
|
46043
|
+
"Table": "表格",
|
|
46044
|
+
"Insert table": "插入表格",
|
|
46045
|
+
"Insert row before": "在上方插入行",
|
|
46046
|
+
"Insert row after": "在下方插入行",
|
|
46047
|
+
"Delete row": "删除行",
|
|
46048
|
+
"Insert column before": "在左侧插入列",
|
|
46049
|
+
"Insert column after": "在右侧插入列",
|
|
46050
|
+
"Delete column": "删除列",
|
|
46051
|
+
"Merge cells": "合并单元格",
|
|
46052
|
+
"Split cell": "拆分单元格",
|
|
46053
|
+
"Toggle header row": "切换标题行",
|
|
46054
|
+
"Delete table": "删除表格"
|
|
44716
46055
|
};
|
|
44717
46056
|
const cs = {
|
|
44718
46057
|
"Bold": "Tučné",
|
|
@@ -44770,7 +46109,7 @@ const cs = {
|
|
|
44770
46109
|
"Browse...": "Procházet...",
|
|
44771
46110
|
"Drop image here or click to browse": "Přetáhněte obrázek sem nebo klikněte pro výběr",
|
|
44772
46111
|
"Alt text": "Alternativní text",
|
|
44773
|
-
"Insert": "
|
|
46112
|
+
"Insert": "Vlo�it",
|
|
44774
46113
|
"Cancel": "Zrušit",
|
|
44775
46114
|
"Uploading...": "Nahrávání...",
|
|
44776
46115
|
"Upload failed": "Nahrávání selhalo",
|
|
@@ -44784,7 +46123,50 @@ const cs = {
|
|
|
44784
46123
|
"Title": "Title",
|
|
44785
46124
|
"Open link in...": "Open link in...",
|
|
44786
46125
|
"Current window": "Current window",
|
|
44787
|
-
"New window": "New window"
|
|
46126
|
+
"New window": "New window",
|
|
46127
|
+
"Speech to Text": "Rec na text",
|
|
46128
|
+
"Dictate": "Diktovat",
|
|
46129
|
+
"Start": "Spustit",
|
|
46130
|
+
"Stop": "Zastavit",
|
|
46131
|
+
"Clear": "Vymazat",
|
|
46132
|
+
"Language": "Jazyk",
|
|
46133
|
+
"Confidence": "Spolehlivost",
|
|
46134
|
+
"Listening...": "Poslouch�m...",
|
|
46135
|
+
"Speech to text is not supported in this browser": "Rec na text nen� v tomto prohl�eci podporov�na",
|
|
46136
|
+
"No speech detected": "Nebyla detekov�na rec",
|
|
46137
|
+
"Microphone access denied": "Pr�stup k mikrofonu zam�tnut",
|
|
46138
|
+
"No microphone found": "No microphone found",
|
|
46139
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46140
|
+
"Subscript": "Dolní index",
|
|
46141
|
+
"Superscript": "Horní index",
|
|
46142
|
+
"Horizontal rule": "Vodorovná čára",
|
|
46143
|
+
"Unlink": "Odebrat odkaz",
|
|
46144
|
+
"Format": "Formát",
|
|
46145
|
+
"Paragraph": "Odstavec",
|
|
46146
|
+
"Heading 1": "Nadpis 1",
|
|
46147
|
+
"Heading 2": "Nadpis 2",
|
|
46148
|
+
"Heading 3": "Nadpis 3",
|
|
46149
|
+
"Heading 4": "Nadpis 4",
|
|
46150
|
+
"Heading 5": "Nadpis 5",
|
|
46151
|
+
"Heading 6": "Nadpis 6",
|
|
46152
|
+
"Styles": "Styly",
|
|
46153
|
+
"Insert anchor": "Vložit kotvu",
|
|
46154
|
+
"Anchor": "Kotva",
|
|
46155
|
+
"Anchor name": "Název kotvy",
|
|
46156
|
+
"Anchor name is required": "Název kotvy je povinný",
|
|
46157
|
+
"Anchor name cannot contain spaces": "Název kotvy nesmí obsahovat mezery",
|
|
46158
|
+
"Table": "Tabulka",
|
|
46159
|
+
"Insert table": "Vložit tabulku",
|
|
46160
|
+
"Insert row before": "Vložit řádek před",
|
|
46161
|
+
"Insert row after": "Vložit řádek za",
|
|
46162
|
+
"Delete row": "Odstranit řádek",
|
|
46163
|
+
"Insert column before": "Vložit sloupec před",
|
|
46164
|
+
"Insert column after": "Vložit sloupec za",
|
|
46165
|
+
"Delete column": "Odstranit sloupec",
|
|
46166
|
+
"Merge cells": "Sloučit buňky",
|
|
46167
|
+
"Split cell": "Rozdělit buňku",
|
|
46168
|
+
"Toggle header row": "Přepnout řádek záhlaví",
|
|
46169
|
+
"Delete table": "Odstranit tabulku"
|
|
44788
46170
|
};
|
|
44789
46171
|
const da = {
|
|
44790
46172
|
"Bold": "Fed",
|
|
@@ -44842,7 +46224,7 @@ const da = {
|
|
|
44842
46224
|
"Browse...": "Gennemse...",
|
|
44843
46225
|
"Drop image here or click to browse": "Træk billede hertil eller klik for at gennemse",
|
|
44844
46226
|
"Alt text": "Alternativ tekst",
|
|
44845
|
-
"Insert": "
|
|
46227
|
+
"Insert": "Inds�t",
|
|
44846
46228
|
"Cancel": "Annuller",
|
|
44847
46229
|
"Uploading...": "Uploader...",
|
|
44848
46230
|
"Upload failed": "Upload mislykkedes",
|
|
@@ -44856,7 +46238,50 @@ const da = {
|
|
|
44856
46238
|
"Title": "Title",
|
|
44857
46239
|
"Open link in...": "Open link in...",
|
|
44858
46240
|
"Current window": "Current window",
|
|
44859
|
-
"New window": "New window"
|
|
46241
|
+
"New window": "New window",
|
|
46242
|
+
"Speech to Text": "Tale til tekst",
|
|
46243
|
+
"Dictate": "Dikter",
|
|
46244
|
+
"Start": "Start",
|
|
46245
|
+
"Stop": "Stop",
|
|
46246
|
+
"Clear": "Ryd",
|
|
46247
|
+
"Language": "Sprog",
|
|
46248
|
+
"Confidence": "Tillid",
|
|
46249
|
+
"Listening...": "Lytter...",
|
|
46250
|
+
"Speech to text is not supported in this browser": "Tale til tekst underst�ttes ikke i denne browser",
|
|
46251
|
+
"No speech detected": "Ingen tale registreret",
|
|
46252
|
+
"Microphone access denied": "Mikrofonadgang n�gtet",
|
|
46253
|
+
"No microphone found": "No microphone found",
|
|
46254
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46255
|
+
"Subscript": "Sænket skrift",
|
|
46256
|
+
"Superscript": "Hævet skrift",
|
|
46257
|
+
"Horizontal rule": "Vandret streg",
|
|
46258
|
+
"Unlink": "Fjern link",
|
|
46259
|
+
"Format": "Format",
|
|
46260
|
+
"Paragraph": "Afsnit",
|
|
46261
|
+
"Heading 1": "Overskrift 1",
|
|
46262
|
+
"Heading 2": "Overskrift 2",
|
|
46263
|
+
"Heading 3": "Overskrift 3",
|
|
46264
|
+
"Heading 4": "Overskrift 4",
|
|
46265
|
+
"Heading 5": "Overskrift 5",
|
|
46266
|
+
"Heading 6": "Overskrift 6",
|
|
46267
|
+
"Styles": "Typografier",
|
|
46268
|
+
"Insert anchor": "Indsæt anker",
|
|
46269
|
+
"Anchor": "Anker",
|
|
46270
|
+
"Anchor name": "Ankernavn",
|
|
46271
|
+
"Anchor name is required": "Ankernavn er påkrævet",
|
|
46272
|
+
"Anchor name cannot contain spaces": "Ankernavn må ikke indeholde mellemrum",
|
|
46273
|
+
"Table": "Tabel",
|
|
46274
|
+
"Insert table": "Indsæt tabel",
|
|
46275
|
+
"Insert row before": "Indsæt række før",
|
|
46276
|
+
"Insert row after": "Indsæt række efter",
|
|
46277
|
+
"Delete row": "Slet række",
|
|
46278
|
+
"Insert column before": "Indsæt kolonne før",
|
|
46279
|
+
"Insert column after": "Indsæt kolonne efter",
|
|
46280
|
+
"Delete column": "Slet kolonne",
|
|
46281
|
+
"Merge cells": "Flet celler",
|
|
46282
|
+
"Split cell": "Opdel celle",
|
|
46283
|
+
"Toggle header row": "Skift overskriftsrække",
|
|
46284
|
+
"Delete table": "Slet tabel"
|
|
44860
46285
|
};
|
|
44861
46286
|
const enGb = {
|
|
44862
46287
|
"Bold": "Bold",
|
|
@@ -44928,7 +46353,50 @@ const enGb = {
|
|
|
44928
46353
|
"Title": "Title",
|
|
44929
46354
|
"Open link in...": "Open link in...",
|
|
44930
46355
|
"Current window": "Current window",
|
|
44931
|
-
"New window": "New window"
|
|
46356
|
+
"New window": "New window",
|
|
46357
|
+
"Speech to Text": "Speech to Text",
|
|
46358
|
+
"Dictate": "Dictate",
|
|
46359
|
+
"Start": "Start",
|
|
46360
|
+
"Stop": "Stop",
|
|
46361
|
+
"Clear": "Clear",
|
|
46362
|
+
"Language": "Language",
|
|
46363
|
+
"Confidence": "Confidence",
|
|
46364
|
+
"Listening...": "Listening...",
|
|
46365
|
+
"Speech to text is not supported in this browser": "Speech to text is not supported in this browser",
|
|
46366
|
+
"No speech detected": "No speech detected",
|
|
46367
|
+
"Microphone access denied": "Microphone access denied",
|
|
46368
|
+
"No microphone found": "No microphone found",
|
|
46369
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46370
|
+
"Subscript": "Subscript",
|
|
46371
|
+
"Superscript": "Superscript",
|
|
46372
|
+
"Horizontal rule": "Horizontal rule",
|
|
46373
|
+
"Unlink": "Unlink",
|
|
46374
|
+
"Format": "Format",
|
|
46375
|
+
"Paragraph": "Paragraph",
|
|
46376
|
+
"Heading 1": "Heading 1",
|
|
46377
|
+
"Heading 2": "Heading 2",
|
|
46378
|
+
"Heading 3": "Heading 3",
|
|
46379
|
+
"Heading 4": "Heading 4",
|
|
46380
|
+
"Heading 5": "Heading 5",
|
|
46381
|
+
"Heading 6": "Heading 6",
|
|
46382
|
+
"Styles": "Styles",
|
|
46383
|
+
"Insert anchor": "Insert anchor",
|
|
46384
|
+
"Anchor": "Anchor",
|
|
46385
|
+
"Anchor name": "Anchor name",
|
|
46386
|
+
"Anchor name is required": "Anchor name is required",
|
|
46387
|
+
"Anchor name cannot contain spaces": "Anchor name cannot contain spaces",
|
|
46388
|
+
"Table": "Table",
|
|
46389
|
+
"Insert table": "Insert table",
|
|
46390
|
+
"Insert row before": "Insert row before",
|
|
46391
|
+
"Insert row after": "Insert row after",
|
|
46392
|
+
"Delete row": "Delete row",
|
|
46393
|
+
"Insert column before": "Insert column before",
|
|
46394
|
+
"Insert column after": "Insert column after",
|
|
46395
|
+
"Delete column": "Delete column",
|
|
46396
|
+
"Merge cells": "Merge cells",
|
|
46397
|
+
"Split cell": "Split cell",
|
|
46398
|
+
"Toggle header row": "Toggle header row",
|
|
46399
|
+
"Delete table": "Delete table"
|
|
44932
46400
|
};
|
|
44933
46401
|
const fi = {
|
|
44934
46402
|
"Bold": "Lihavoitu",
|
|
@@ -44986,7 +46454,7 @@ const fi = {
|
|
|
44986
46454
|
"Browse...": "Selaa...",
|
|
44987
46455
|
"Drop image here or click to browse": "Pudota kuva tähän tai napsauta selataksesi",
|
|
44988
46456
|
"Alt text": "Vaihtoehtoinen teksti",
|
|
44989
|
-
"Insert": "
|
|
46457
|
+
"Insert": "Lis��",
|
|
44990
46458
|
"Cancel": "Peruuta",
|
|
44991
46459
|
"Uploading...": "Ladataan...",
|
|
44992
46460
|
"Upload failed": "Lataus epäonnistui",
|
|
@@ -45000,7 +46468,50 @@ const fi = {
|
|
|
45000
46468
|
"Title": "Title",
|
|
45001
46469
|
"Open link in...": "Open link in...",
|
|
45002
46470
|
"Current window": "Current window",
|
|
45003
|
-
"New window": "New window"
|
|
46471
|
+
"New window": "New window",
|
|
46472
|
+
"Speech to Text": "Puhe tekstiksi",
|
|
46473
|
+
"Dictate": "Sanele",
|
|
46474
|
+
"Start": "Aloita",
|
|
46475
|
+
"Stop": "Lopeta",
|
|
46476
|
+
"Clear": "Tyhjenn�",
|
|
46477
|
+
"Language": "Kieli",
|
|
46478
|
+
"Confidence": "Luotettavuus",
|
|
46479
|
+
"Listening...": "Kuuntelee...",
|
|
46480
|
+
"Speech to text is not supported in this browser": "Puhe tekstiksi ei ole tuettu t�ss� selaimessa",
|
|
46481
|
+
"No speech detected": "Puhetta ei havaittu",
|
|
46482
|
+
"Microphone access denied": "Mikrofonin k�ytt� estetty",
|
|
46483
|
+
"No microphone found": "No microphone found",
|
|
46484
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46485
|
+
"Subscript": "Alaindeksi",
|
|
46486
|
+
"Superscript": "Yläindeksi",
|
|
46487
|
+
"Horizontal rule": "Vaakaviiva",
|
|
46488
|
+
"Unlink": "Poista linkki",
|
|
46489
|
+
"Format": "Muotoilu",
|
|
46490
|
+
"Paragraph": "Kappale",
|
|
46491
|
+
"Heading 1": "Otsikko 1",
|
|
46492
|
+
"Heading 2": "Otsikko 2",
|
|
46493
|
+
"Heading 3": "Otsikko 3",
|
|
46494
|
+
"Heading 4": "Otsikko 4",
|
|
46495
|
+
"Heading 5": "Otsikko 5",
|
|
46496
|
+
"Heading 6": "Otsikko 6",
|
|
46497
|
+
"Styles": "Tyylit",
|
|
46498
|
+
"Insert anchor": "Lisää ankkuri",
|
|
46499
|
+
"Anchor": "Ankkuri",
|
|
46500
|
+
"Anchor name": "Ankkurin nimi",
|
|
46501
|
+
"Anchor name is required": "Ankkurin nimi vaaditaan",
|
|
46502
|
+
"Anchor name cannot contain spaces": "Ankkurin nimi ei voi sisältää välilyöntejä",
|
|
46503
|
+
"Table": "Taulukko",
|
|
46504
|
+
"Insert table": "Lisää taulukko",
|
|
46505
|
+
"Insert row before": "Lisää rivi ennen",
|
|
46506
|
+
"Insert row after": "Lisää rivi jälkeen",
|
|
46507
|
+
"Delete row": "Poista rivi",
|
|
46508
|
+
"Insert column before": "Lisää sarake ennen",
|
|
46509
|
+
"Insert column after": "Lisää sarake jälkeen",
|
|
46510
|
+
"Delete column": "Poista sarake",
|
|
46511
|
+
"Merge cells": "Yhdistä solut",
|
|
46512
|
+
"Split cell": "Jaa solu",
|
|
46513
|
+
"Toggle header row": "Vaihda otsikkorivi",
|
|
46514
|
+
"Delete table": "Poista taulukko"
|
|
45004
46515
|
};
|
|
45005
46516
|
const fr = {
|
|
45006
46517
|
"Bold": "Gras",
|
|
@@ -45058,7 +46569,7 @@ const fr = {
|
|
|
45058
46569
|
"Browse...": "Parcourir...",
|
|
45059
46570
|
"Drop image here or click to browse": "Déposez l'image ici ou cliquez pour parcourir",
|
|
45060
46571
|
"Alt text": "Texte alternatif",
|
|
45061
|
-
"Insert": "
|
|
46572
|
+
"Insert": "Ins�rer",
|
|
45062
46573
|
"Cancel": "Annuler",
|
|
45063
46574
|
"Uploading...": "Téléchargement...",
|
|
45064
46575
|
"Upload failed": "Échec du téléchargement",
|
|
@@ -45072,7 +46583,50 @@ const fr = {
|
|
|
45072
46583
|
"Title": "Title",
|
|
45073
46584
|
"Open link in...": "Open link in...",
|
|
45074
46585
|
"Current window": "Current window",
|
|
45075
|
-
"New window": "New window"
|
|
46586
|
+
"New window": "New window",
|
|
46587
|
+
"Speech to Text": "Reconnaissance vocale",
|
|
46588
|
+
"Dictate": "Dicter",
|
|
46589
|
+
"Start": "D�marrer",
|
|
46590
|
+
"Stop": "Arr�ter",
|
|
46591
|
+
"Clear": "Effacer",
|
|
46592
|
+
"Language": "Langue",
|
|
46593
|
+
"Confidence": "Confiance",
|
|
46594
|
+
"Listening...": "�coute en cours...",
|
|
46595
|
+
"Speech to text is not supported in this browser": "La reconnaissance vocale n'est pas prise en charge dans ce navigateur",
|
|
46596
|
+
"No speech detected": "Aucune parole d�tect�e",
|
|
46597
|
+
"Microphone access denied": "Acc�s au microphone refus�",
|
|
46598
|
+
"No microphone found": "No microphone found",
|
|
46599
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46600
|
+
"Subscript": "Indice",
|
|
46601
|
+
"Superscript": "Exposant",
|
|
46602
|
+
"Horizontal rule": "Ligne horizontale",
|
|
46603
|
+
"Unlink": "Supprimer le lien",
|
|
46604
|
+
"Format": "Format",
|
|
46605
|
+
"Paragraph": "Paragraphe",
|
|
46606
|
+
"Heading 1": "Titre 1",
|
|
46607
|
+
"Heading 2": "Titre 2",
|
|
46608
|
+
"Heading 3": "Titre 3",
|
|
46609
|
+
"Heading 4": "Titre 4",
|
|
46610
|
+
"Heading 5": "Titre 5",
|
|
46611
|
+
"Heading 6": "Titre 6",
|
|
46612
|
+
"Styles": "Styles",
|
|
46613
|
+
"Insert anchor": "Insérer une ancre",
|
|
46614
|
+
"Anchor": "Ancre",
|
|
46615
|
+
"Anchor name": "Nom de l'ancre",
|
|
46616
|
+
"Anchor name is required": "Le nom de l'ancre est requis",
|
|
46617
|
+
"Anchor name cannot contain spaces": "Le nom de l'ancre ne peut pas contenir d'espaces",
|
|
46618
|
+
"Table": "Tableau",
|
|
46619
|
+
"Insert table": "Insérer un tableau",
|
|
46620
|
+
"Insert row before": "Insérer une ligne avant",
|
|
46621
|
+
"Insert row after": "Insérer une ligne après",
|
|
46622
|
+
"Delete row": "Supprimer la ligne",
|
|
46623
|
+
"Insert column before": "Insérer une colonne avant",
|
|
46624
|
+
"Insert column after": "Insérer une colonne après",
|
|
46625
|
+
"Delete column": "Supprimer la colonne",
|
|
46626
|
+
"Merge cells": "Fusionner les cellules",
|
|
46627
|
+
"Split cell": "Diviser la cellule",
|
|
46628
|
+
"Toggle header row": "Basculer la ligne d'en-tête",
|
|
46629
|
+
"Delete table": "Supprimer le tableau"
|
|
45076
46630
|
};
|
|
45077
46631
|
const frCa = {
|
|
45078
46632
|
"Bold": "Gras",
|
|
@@ -45130,7 +46684,7 @@ const frCa = {
|
|
|
45130
46684
|
"Browse...": "Parcourir...",
|
|
45131
46685
|
"Drop image here or click to browse": "Déposez l'image ici ou cliquez pour parcourir",
|
|
45132
46686
|
"Alt text": "Texte alternatif",
|
|
45133
|
-
"Insert": "
|
|
46687
|
+
"Insert": "Ins�rer",
|
|
45134
46688
|
"Cancel": "Annuler",
|
|
45135
46689
|
"Uploading...": "Téléversement...",
|
|
45136
46690
|
"Upload failed": "Échec du téléversement",
|
|
@@ -45144,7 +46698,50 @@ const frCa = {
|
|
|
45144
46698
|
"Title": "Title",
|
|
45145
46699
|
"Open link in...": "Open link in...",
|
|
45146
46700
|
"Current window": "Current window",
|
|
45147
|
-
"New window": "New window"
|
|
46701
|
+
"New window": "New window",
|
|
46702
|
+
"Speech to Text": "Reconnaissance vocale",
|
|
46703
|
+
"Dictate": "Dicter",
|
|
46704
|
+
"Start": "D�marrer",
|
|
46705
|
+
"Stop": "Arr�ter",
|
|
46706
|
+
"Clear": "Effacer",
|
|
46707
|
+
"Language": "Langue",
|
|
46708
|
+
"Confidence": "Confiance",
|
|
46709
|
+
"Listening...": "�coute en cours...",
|
|
46710
|
+
"Speech to text is not supported in this browser": "La reconnaissance vocale n'est pas prise en charge dans ce navigateur",
|
|
46711
|
+
"No speech detected": "Aucune parole d�tect�e",
|
|
46712
|
+
"Microphone access denied": "Acc�s au microphone refus�",
|
|
46713
|
+
"No microphone found": "No microphone found",
|
|
46714
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46715
|
+
"Subscript": "Indice",
|
|
46716
|
+
"Superscript": "Exposant",
|
|
46717
|
+
"Horizontal rule": "Ligne horizontale",
|
|
46718
|
+
"Unlink": "Supprimer le lien",
|
|
46719
|
+
"Format": "Format",
|
|
46720
|
+
"Paragraph": "Paragraphe",
|
|
46721
|
+
"Heading 1": "Titre 1",
|
|
46722
|
+
"Heading 2": "Titre 2",
|
|
46723
|
+
"Heading 3": "Titre 3",
|
|
46724
|
+
"Heading 4": "Titre 4",
|
|
46725
|
+
"Heading 5": "Titre 5",
|
|
46726
|
+
"Heading 6": "Titre 6",
|
|
46727
|
+
"Styles": "Styles",
|
|
46728
|
+
"Insert anchor": "Insérer une ancre",
|
|
46729
|
+
"Anchor": "Ancre",
|
|
46730
|
+
"Anchor name": "Nom de l'ancre",
|
|
46731
|
+
"Anchor name is required": "Le nom de l'ancre est requis",
|
|
46732
|
+
"Anchor name cannot contain spaces": "Le nom de l'ancre ne peut pas contenir d'espaces",
|
|
46733
|
+
"Table": "Tableau",
|
|
46734
|
+
"Insert table": "Insérer un tableau",
|
|
46735
|
+
"Insert row before": "Insérer une ligne avant",
|
|
46736
|
+
"Insert row after": "Insérer une ligne après",
|
|
46737
|
+
"Delete row": "Supprimer la ligne",
|
|
46738
|
+
"Insert column before": "Insérer une colonne avant",
|
|
46739
|
+
"Insert column after": "Insérer une colonne après",
|
|
46740
|
+
"Delete column": "Supprimer la colonne",
|
|
46741
|
+
"Merge cells": "Fusionner les cellules",
|
|
46742
|
+
"Split cell": "Diviser la cellule",
|
|
46743
|
+
"Toggle header row": "Basculer la ligne d'en-tête",
|
|
46744
|
+
"Delete table": "Supprimer le tableau"
|
|
45148
46745
|
};
|
|
45149
46746
|
const de = {
|
|
45150
46747
|
"Bold": "Fett",
|
|
@@ -45202,7 +46799,7 @@ const de = {
|
|
|
45202
46799
|
"Browse...": "Durchsuchen...",
|
|
45203
46800
|
"Drop image here or click to browse": "Bild hierher ziehen oder klicken zum Durchsuchen",
|
|
45204
46801
|
"Alt text": "Alternativtext",
|
|
45205
|
-
"Insert": "
|
|
46802
|
+
"Insert": "Einf�gen",
|
|
45206
46803
|
"Cancel": "Abbrechen",
|
|
45207
46804
|
"Uploading...": "Wird hochgeladen...",
|
|
45208
46805
|
"Upload failed": "Hochladen fehlgeschlagen",
|
|
@@ -45216,7 +46813,50 @@ const de = {
|
|
|
45216
46813
|
"Title": "Title",
|
|
45217
46814
|
"Open link in...": "Open link in...",
|
|
45218
46815
|
"Current window": "Current window",
|
|
45219
|
-
"New window": "New window"
|
|
46816
|
+
"New window": "New window",
|
|
46817
|
+
"Speech to Text": "Sprache zu Text",
|
|
46818
|
+
"Dictate": "Diktieren",
|
|
46819
|
+
"Start": "Starten",
|
|
46820
|
+
"Stop": "Stoppen",
|
|
46821
|
+
"Clear": "L�schen",
|
|
46822
|
+
"Language": "Sprache",
|
|
46823
|
+
"Confidence": "Zuverl�ssigkeit",
|
|
46824
|
+
"Listening...": "Zuh�ren...",
|
|
46825
|
+
"Speech to text is not supported in this browser": "Sprache-zu-Text wird in diesem Browser nicht unterst�tzt",
|
|
46826
|
+
"No speech detected": "Keine Sprache erkannt",
|
|
46827
|
+
"Microphone access denied": "Mikrofonzugriff verweigert",
|
|
46828
|
+
"No microphone found": "No microphone found",
|
|
46829
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46830
|
+
"Subscript": "Tiefgestellt",
|
|
46831
|
+
"Superscript": "Hochgestellt",
|
|
46832
|
+
"Horizontal rule": "Horizontale Linie",
|
|
46833
|
+
"Unlink": "Link entfernen",
|
|
46834
|
+
"Format": "Format",
|
|
46835
|
+
"Paragraph": "Absatz",
|
|
46836
|
+
"Heading 1": "Überschrift 1",
|
|
46837
|
+
"Heading 2": "Überschrift 2",
|
|
46838
|
+
"Heading 3": "Überschrift 3",
|
|
46839
|
+
"Heading 4": "Überschrift 4",
|
|
46840
|
+
"Heading 5": "Überschrift 5",
|
|
46841
|
+
"Heading 6": "Überschrift 6",
|
|
46842
|
+
"Styles": "Formatvorlagen",
|
|
46843
|
+
"Insert anchor": "Anker einfügen",
|
|
46844
|
+
"Anchor": "Anker",
|
|
46845
|
+
"Anchor name": "Ankername",
|
|
46846
|
+
"Anchor name is required": "Ankername ist erforderlich",
|
|
46847
|
+
"Anchor name cannot contain spaces": "Ankername darf keine Leerzeichen enthalten",
|
|
46848
|
+
"Table": "Tabelle",
|
|
46849
|
+
"Insert table": "Tabelle einfügen",
|
|
46850
|
+
"Insert row before": "Zeile davor einfügen",
|
|
46851
|
+
"Insert row after": "Zeile danach einfügen",
|
|
46852
|
+
"Delete row": "Zeile löschen",
|
|
46853
|
+
"Insert column before": "Spalte davor einfügen",
|
|
46854
|
+
"Insert column after": "Spalte danach einfügen",
|
|
46855
|
+
"Delete column": "Spalte löschen",
|
|
46856
|
+
"Merge cells": "Zellen verbinden",
|
|
46857
|
+
"Split cell": "Zelle teilen",
|
|
46858
|
+
"Toggle header row": "Kopfzeile umschalten",
|
|
46859
|
+
"Delete table": "Tabelle löschen"
|
|
45220
46860
|
};
|
|
45221
46861
|
const el = {
|
|
45222
46862
|
"Bold": "Έντονα",
|
|
@@ -45274,7 +46914,7 @@ const el = {
|
|
|
45274
46914
|
"Browse...": "Αναζήτηση...",
|
|
45275
46915
|
"Drop image here or click to browse": "Σύρτε την εικόνα εδώ ή κάντε κλικ για αναζήτηση",
|
|
45276
46916
|
"Alt text": "Εναλλακτικό κείμενο",
|
|
45277
|
-
"Insert": "
|
|
46917
|
+
"Insert": "??sa????",
|
|
45278
46918
|
"Cancel": "Ακύρωση",
|
|
45279
46919
|
"Uploading...": "Μεταφόρτωση...",
|
|
45280
46920
|
"Upload failed": "Η μεταφόρτωση απέτυχε",
|
|
@@ -45288,7 +46928,50 @@ const el = {
|
|
|
45288
46928
|
"Title": "Title",
|
|
45289
46929
|
"Open link in...": "Open link in...",
|
|
45290
46930
|
"Current window": "Current window",
|
|
45291
|
-
"New window": "New window"
|
|
46931
|
+
"New window": "New window",
|
|
46932
|
+
"Speech to Text": "?�???a se ?e?�e??",
|
|
46933
|
+
"Dictate": "Υπαγόρευση",
|
|
46934
|
+
"Start": "??????s?",
|
|
46935
|
+
"Stop": "??a??p?",
|
|
46936
|
+
"Clear": "???a????s?",
|
|
46937
|
+
"Language": "G??ssa",
|
|
46938
|
+
"Confidence": "????p?st?a",
|
|
46939
|
+
"Listening...": "????e?...",
|
|
46940
|
+
"Speech to text is not supported in this browser": "? ?�???a se ?e?�e?? de? ?p?st????eta? se a?t?? t?? pe?????t?",
|
|
46941
|
+
"No speech detected": "?e? a????e????e ?�???a",
|
|
46942
|
+
"Microphone access denied": "? p??s�as? st? �????f??? ap????f???e",
|
|
46943
|
+
"No microphone found": "No microphone found",
|
|
46944
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
46945
|
+
"Subscript": "Δείκτης",
|
|
46946
|
+
"Superscript": "Εκθέτης",
|
|
46947
|
+
"Horizontal rule": "Οριζόντια γραμμή",
|
|
46948
|
+
"Unlink": "Κατάργηση συνδέσμου",
|
|
46949
|
+
"Format": "Μορφή",
|
|
46950
|
+
"Paragraph": "Παράγραφος",
|
|
46951
|
+
"Heading 1": "Επικεφαλίδα 1",
|
|
46952
|
+
"Heading 2": "Επικεφαλίδα 2",
|
|
46953
|
+
"Heading 3": "Επικεφαλίδα 3",
|
|
46954
|
+
"Heading 4": "Επικεφαλίδα 4",
|
|
46955
|
+
"Heading 5": "Επικεφαλίδα 5",
|
|
46956
|
+
"Heading 6": "Επικεφαλίδα 6",
|
|
46957
|
+
"Styles": "Στυλ",
|
|
46958
|
+
"Insert anchor": "Εισαγωγή αγκύρωσης",
|
|
46959
|
+
"Anchor": "Αγκύρωση",
|
|
46960
|
+
"Anchor name": "Όνομα αγκύρωσης",
|
|
46961
|
+
"Anchor name is required": "Απαιτείται όνομα αγκύρωσης",
|
|
46962
|
+
"Anchor name cannot contain spaces": "Το όνομα αγκύρωσης δεν μπορεί να περιέχει κενά",
|
|
46963
|
+
"Table": "Πίνακας",
|
|
46964
|
+
"Insert table": "Εισαγωγή πίνακα",
|
|
46965
|
+
"Insert row before": "Εισαγωγή γραμμής πριν",
|
|
46966
|
+
"Insert row after": "Εισαγωγή γραμμής μετά",
|
|
46967
|
+
"Delete row": "Διαγραφή γραμμής",
|
|
46968
|
+
"Insert column before": "Εισαγωγή στήλης πριν",
|
|
46969
|
+
"Insert column after": "Εισαγωγή στήλης μετά",
|
|
46970
|
+
"Delete column": "Διαγραφή στήλης",
|
|
46971
|
+
"Merge cells": "Συγχώνευση κελιών",
|
|
46972
|
+
"Split cell": "Διαίρεση κελιού",
|
|
46973
|
+
"Toggle header row": "Εναλλαγή γραμμής κεφαλίδας",
|
|
46974
|
+
"Delete table": "Διαγραφή πίνακα"
|
|
45292
46975
|
};
|
|
45293
46976
|
const hu = {
|
|
45294
46977
|
"Bold": "Félkövér",
|
|
@@ -45346,7 +47029,7 @@ const hu = {
|
|
|
45346
47029
|
"Browse...": "Tallózás...",
|
|
45347
47030
|
"Drop image here or click to browse": "Húzza ide a képet, vagy kattintson a tallózáshoz",
|
|
45348
47031
|
"Alt text": "Alternatív szöveg",
|
|
45349
|
-
"Insert": "
|
|
47032
|
+
"Insert": "Besz�r�s",
|
|
45350
47033
|
"Cancel": "Mégse",
|
|
45351
47034
|
"Uploading...": "Feltöltés...",
|
|
45352
47035
|
"Upload failed": "A feltöltés sikertelen",
|
|
@@ -45360,7 +47043,50 @@ const hu = {
|
|
|
45360
47043
|
"Title": "Title",
|
|
45361
47044
|
"Open link in...": "Open link in...",
|
|
45362
47045
|
"Current window": "Current window",
|
|
45363
|
-
"New window": "New window"
|
|
47046
|
+
"New window": "New window",
|
|
47047
|
+
"Speech to Text": "Besz�d sz�vegg�",
|
|
47048
|
+
"Dictate": "Diktálás",
|
|
47049
|
+
"Start": "Ind�t�s",
|
|
47050
|
+
"Stop": "Le�ll�t�s",
|
|
47051
|
+
"Clear": "T�rl�s",
|
|
47052
|
+
"Language": "Nyelv",
|
|
47053
|
+
"Confidence": "Megb�zhat�s�g",
|
|
47054
|
+
"Listening...": "Hallgat�s...",
|
|
47055
|
+
"Speech to text is not supported in this browser": "A besz�d sz�vegg� alak�t�s nem t�mogatott ebben a b�ng�szoben",
|
|
47056
|
+
"No speech detected": "Nem �szlelheto besz�d",
|
|
47057
|
+
"Microphone access denied": "Mikrofon hozz�f�r�s megtagadva",
|
|
47058
|
+
"No microphone found": "No microphone found",
|
|
47059
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47060
|
+
"Subscript": "Alsó index",
|
|
47061
|
+
"Superscript": "Felső index",
|
|
47062
|
+
"Horizontal rule": "Vízszintes vonal",
|
|
47063
|
+
"Unlink": "Hivatkozás eltávolítása",
|
|
47064
|
+
"Format": "Formátum",
|
|
47065
|
+
"Paragraph": "Bekezdés",
|
|
47066
|
+
"Heading 1": "Címsor 1",
|
|
47067
|
+
"Heading 2": "Címsor 2",
|
|
47068
|
+
"Heading 3": "Címsor 3",
|
|
47069
|
+
"Heading 4": "Címsor 4",
|
|
47070
|
+
"Heading 5": "Címsor 5",
|
|
47071
|
+
"Heading 6": "Címsor 6",
|
|
47072
|
+
"Styles": "Stílusok",
|
|
47073
|
+
"Insert anchor": "Horgony beszúrása",
|
|
47074
|
+
"Anchor": "Horgony",
|
|
47075
|
+
"Anchor name": "Horgony neve",
|
|
47076
|
+
"Anchor name is required": "A horgony neve kötelező",
|
|
47077
|
+
"Anchor name cannot contain spaces": "A horgony neve nem tartalmazhat szóközöket",
|
|
47078
|
+
"Table": "Táblázat",
|
|
47079
|
+
"Insert table": "Táblázat beszúrása",
|
|
47080
|
+
"Insert row before": "Sor beszúrása elé",
|
|
47081
|
+
"Insert row after": "Sor beszúrása mögé",
|
|
47082
|
+
"Delete row": "Sor törlése",
|
|
47083
|
+
"Insert column before": "Oszlop beszúrása elé",
|
|
47084
|
+
"Insert column after": "Oszlop beszúrása mögé",
|
|
47085
|
+
"Delete column": "Oszlop törlése",
|
|
47086
|
+
"Merge cells": "Cellák egyesítése",
|
|
47087
|
+
"Split cell": "Cella felosztása",
|
|
47088
|
+
"Toggle header row": "Fejlécsor be-/kikapcsolása",
|
|
47089
|
+
"Delete table": "Táblázat törlése"
|
|
45364
47090
|
};
|
|
45365
47091
|
const id = {
|
|
45366
47092
|
"Bold": "Tebal",
|
|
@@ -45432,7 +47158,50 @@ const id = {
|
|
|
45432
47158
|
"Title": "Title",
|
|
45433
47159
|
"Open link in...": "Open link in...",
|
|
45434
47160
|
"Current window": "Current window",
|
|
45435
|
-
"New window": "New window"
|
|
47161
|
+
"New window": "New window",
|
|
47162
|
+
"Speech to Text": "Ucapan ke teks",
|
|
47163
|
+
"Dictate": "Dikte",
|
|
47164
|
+
"Start": "Mulai",
|
|
47165
|
+
"Stop": "Berhenti",
|
|
47166
|
+
"Clear": "Hapus",
|
|
47167
|
+
"Language": "Bahasa",
|
|
47168
|
+
"Confidence": "Kepercayaan",
|
|
47169
|
+
"Listening...": "Mendengarkan...",
|
|
47170
|
+
"Speech to text is not supported in this browser": "Ucapan ke teks tidak didukung di browser ini",
|
|
47171
|
+
"No speech detected": "Tidak ada ucapan terdeteksi",
|
|
47172
|
+
"Microphone access denied": "Akses mikrofon ditolak",
|
|
47173
|
+
"No microphone found": "No microphone found",
|
|
47174
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47175
|
+
"Subscript": "Subskrip",
|
|
47176
|
+
"Superscript": "Superskrip",
|
|
47177
|
+
"Horizontal rule": "Garis horizontal",
|
|
47178
|
+
"Unlink": "Hapus tautan",
|
|
47179
|
+
"Format": "Format",
|
|
47180
|
+
"Paragraph": "Paragraf",
|
|
47181
|
+
"Heading 1": "Judul 1",
|
|
47182
|
+
"Heading 2": "Judul 2",
|
|
47183
|
+
"Heading 3": "Judul 3",
|
|
47184
|
+
"Heading 4": "Judul 4",
|
|
47185
|
+
"Heading 5": "Judul 5",
|
|
47186
|
+
"Heading 6": "Judul 6",
|
|
47187
|
+
"Styles": "Gaya",
|
|
47188
|
+
"Insert anchor": "Sisipkan jangkar",
|
|
47189
|
+
"Anchor": "Jangkar",
|
|
47190
|
+
"Anchor name": "Nama jangkar",
|
|
47191
|
+
"Anchor name is required": "Nama jangkar wajib diisi",
|
|
47192
|
+
"Anchor name cannot contain spaces": "Nama jangkar tidak boleh mengandung spasi",
|
|
47193
|
+
"Table": "Tabel",
|
|
47194
|
+
"Insert table": "Sisipkan tabel",
|
|
47195
|
+
"Insert row before": "Sisipkan baris sebelum",
|
|
47196
|
+
"Insert row after": "Sisipkan baris sesudah",
|
|
47197
|
+
"Delete row": "Hapus baris",
|
|
47198
|
+
"Insert column before": "Sisipkan kolom sebelum",
|
|
47199
|
+
"Insert column after": "Sisipkan kolom sesudah",
|
|
47200
|
+
"Delete column": "Hapus kolom",
|
|
47201
|
+
"Merge cells": "Gabungkan sel",
|
|
47202
|
+
"Split cell": "Pisahkan sel",
|
|
47203
|
+
"Toggle header row": "Alihkan baris header",
|
|
47204
|
+
"Delete table": "Hapus tabel"
|
|
45436
47205
|
};
|
|
45437
47206
|
const it = {
|
|
45438
47207
|
"Bold": "Grassetto",
|
|
@@ -45504,7 +47273,50 @@ const it = {
|
|
|
45504
47273
|
"Title": "Title",
|
|
45505
47274
|
"Open link in...": "Open link in...",
|
|
45506
47275
|
"Current window": "Current window",
|
|
45507
|
-
"New window": "New window"
|
|
47276
|
+
"New window": "New window",
|
|
47277
|
+
"Speech to Text": "Riconoscimento vocale",
|
|
47278
|
+
"Dictate": "Dettare",
|
|
47279
|
+
"Start": "Avvia",
|
|
47280
|
+
"Stop": "Ferma",
|
|
47281
|
+
"Clear": "Cancella",
|
|
47282
|
+
"Language": "Lingua",
|
|
47283
|
+
"Confidence": "Affidabilit�",
|
|
47284
|
+
"Listening...": "Ascolto in corso...",
|
|
47285
|
+
"Speech to text is not supported in this browser": "Il riconoscimento vocale non � supportato in questo browser",
|
|
47286
|
+
"No speech detected": "Nessun discorso rilevato",
|
|
47287
|
+
"Microphone access denied": "Accesso al microfono negato",
|
|
47288
|
+
"No microphone found": "No microphone found",
|
|
47289
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47290
|
+
"Subscript": "Pedice",
|
|
47291
|
+
"Superscript": "Apice",
|
|
47292
|
+
"Horizontal rule": "Linea orizzontale",
|
|
47293
|
+
"Unlink": "Rimuovi collegamento",
|
|
47294
|
+
"Format": "Formato",
|
|
47295
|
+
"Paragraph": "Paragrafo",
|
|
47296
|
+
"Heading 1": "Titolo 1",
|
|
47297
|
+
"Heading 2": "Titolo 2",
|
|
47298
|
+
"Heading 3": "Titolo 3",
|
|
47299
|
+
"Heading 4": "Titolo 4",
|
|
47300
|
+
"Heading 5": "Titolo 5",
|
|
47301
|
+
"Heading 6": "Titolo 6",
|
|
47302
|
+
"Styles": "Stili",
|
|
47303
|
+
"Insert anchor": "Inserisci ancora",
|
|
47304
|
+
"Anchor": "Ancora",
|
|
47305
|
+
"Anchor name": "Nome ancora",
|
|
47306
|
+
"Anchor name is required": "Il nome dell'ancora è obbligatorio",
|
|
47307
|
+
"Anchor name cannot contain spaces": "Il nome dell'ancora non può contenere spazi",
|
|
47308
|
+
"Table": "Tabella",
|
|
47309
|
+
"Insert table": "Inserisci tabella",
|
|
47310
|
+
"Insert row before": "Inserisci riga prima",
|
|
47311
|
+
"Insert row after": "Inserisci riga dopo",
|
|
47312
|
+
"Delete row": "Elimina riga",
|
|
47313
|
+
"Insert column before": "Inserisci colonna prima",
|
|
47314
|
+
"Insert column after": "Inserisci colonna dopo",
|
|
47315
|
+
"Delete column": "Elimina colonna",
|
|
47316
|
+
"Merge cells": "Unisci celle",
|
|
47317
|
+
"Split cell": "Dividi cella",
|
|
47318
|
+
"Toggle header row": "Attiva/disattiva riga di intestazione",
|
|
47319
|
+
"Delete table": "Elimina tabella"
|
|
45508
47320
|
};
|
|
45509
47321
|
const ja = {
|
|
45510
47322
|
"Bold": "太字",
|
|
@@ -45562,7 +47374,7 @@ const ja = {
|
|
|
45562
47374
|
"Browse...": "参照...",
|
|
45563
47375
|
"Drop image here or click to browse": "画像をここにドロップするかクリックして参照",
|
|
45564
47376
|
"Alt text": "代替テキスト",
|
|
45565
|
-
"Insert": "
|
|
47377
|
+
"Insert": "??",
|
|
45566
47378
|
"Cancel": "キャンセル",
|
|
45567
47379
|
"Uploading...": "アップロード中...",
|
|
45568
47380
|
"Upload failed": "アップロードに失敗しました",
|
|
@@ -45576,7 +47388,50 @@ const ja = {
|
|
|
45576
47388
|
"Title": "Title",
|
|
45577
47389
|
"Open link in...": "Open link in...",
|
|
45578
47390
|
"Current window": "Current window",
|
|
45579
|
-
"New window": "New window"
|
|
47391
|
+
"New window": "New window",
|
|
47392
|
+
"Speech to Text": "????",
|
|
47393
|
+
"Dictate": "音声入力",
|
|
47394
|
+
"Start": "??",
|
|
47395
|
+
"Stop": "??",
|
|
47396
|
+
"Clear": "???",
|
|
47397
|
+
"Language": "??",
|
|
47398
|
+
"Confidence": "???",
|
|
47399
|
+
"Listening...": "?????...",
|
|
47400
|
+
"Speech to text is not supported in this browser": "????????????????????????",
|
|
47401
|
+
"No speech detected": "?????????????",
|
|
47402
|
+
"Microphone access denied": "?????????????????",
|
|
47403
|
+
"No microphone found": "No microphone found",
|
|
47404
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47405
|
+
"Subscript": "下付き文字",
|
|
47406
|
+
"Superscript": "上付き文字",
|
|
47407
|
+
"Horizontal rule": "水平線",
|
|
47408
|
+
"Unlink": "リンクの解除",
|
|
47409
|
+
"Format": "書式",
|
|
47410
|
+
"Paragraph": "段落",
|
|
47411
|
+
"Heading 1": "見出し 1",
|
|
47412
|
+
"Heading 2": "見出し 2",
|
|
47413
|
+
"Heading 3": "見出し 3",
|
|
47414
|
+
"Heading 4": "見出し 4",
|
|
47415
|
+
"Heading 5": "見出し 5",
|
|
47416
|
+
"Heading 6": "見出し 6",
|
|
47417
|
+
"Styles": "スタイル",
|
|
47418
|
+
"Insert anchor": "アンカーの挿入",
|
|
47419
|
+
"Anchor": "アンカー",
|
|
47420
|
+
"Anchor name": "アンカー名",
|
|
47421
|
+
"Anchor name is required": "アンカー名は必須です",
|
|
47422
|
+
"Anchor name cannot contain spaces": "アンカー名にスペースを含めることはできません",
|
|
47423
|
+
"Table": "テーブル",
|
|
47424
|
+
"Insert table": "テーブルの挿入",
|
|
47425
|
+
"Insert row before": "上に行を挿入",
|
|
47426
|
+
"Insert row after": "下に行を挿入",
|
|
47427
|
+
"Delete row": "行の削除",
|
|
47428
|
+
"Insert column before": "左に列を挿入",
|
|
47429
|
+
"Insert column after": "右に列を挿入",
|
|
47430
|
+
"Delete column": "列の削除",
|
|
47431
|
+
"Merge cells": "セルの結合",
|
|
47432
|
+
"Split cell": "セルの分割",
|
|
47433
|
+
"Toggle header row": "ヘッダー行の切り替え",
|
|
47434
|
+
"Delete table": "テーブルの削除"
|
|
45580
47435
|
};
|
|
45581
47436
|
const ko = {
|
|
45582
47437
|
"Bold": "굵게",
|
|
@@ -45634,7 +47489,7 @@ const ko = {
|
|
|
45634
47489
|
"Browse...": "찾아보기...",
|
|
45635
47490
|
"Drop image here or click to browse": "이미지를 여기에 끌어다 놓거나 클릭하여 찾아보기",
|
|
45636
47491
|
"Alt text": "대체 텍스트",
|
|
45637
|
-
"Insert": "
|
|
47492
|
+
"Insert": "??",
|
|
45638
47493
|
"Cancel": "취소",
|
|
45639
47494
|
"Uploading...": "업로드 중...",
|
|
45640
47495
|
"Upload failed": "업로드 실패",
|
|
@@ -45648,7 +47503,50 @@ const ko = {
|
|
|
45648
47503
|
"Title": "Title",
|
|
45649
47504
|
"Open link in...": "Open link in...",
|
|
45650
47505
|
"Current window": "Current window",
|
|
45651
|
-
"New window": "New window"
|
|
47506
|
+
"New window": "New window",
|
|
47507
|
+
"Speech to Text": "?? ??",
|
|
47508
|
+
"Dictate": "받아쓰기",
|
|
47509
|
+
"Start": "??",
|
|
47510
|
+
"Stop": "??",
|
|
47511
|
+
"Clear": "???",
|
|
47512
|
+
"Language": "??",
|
|
47513
|
+
"Confidence": "???",
|
|
47514
|
+
"Listening...": "?? ?...",
|
|
47515
|
+
"Speech to text is not supported in this browser": "? ??????? ?? ??? ???? ????",
|
|
47516
|
+
"No speech detected": "??? ???? ?????",
|
|
47517
|
+
"Microphone access denied": "??? ??? ???????",
|
|
47518
|
+
"No microphone found": "No microphone found",
|
|
47519
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47520
|
+
"Subscript": "아래 첨자",
|
|
47521
|
+
"Superscript": "위 첨자",
|
|
47522
|
+
"Horizontal rule": "가로줄",
|
|
47523
|
+
"Unlink": "링크 제거",
|
|
47524
|
+
"Format": "형식",
|
|
47525
|
+
"Paragraph": "단락",
|
|
47526
|
+
"Heading 1": "제목 1",
|
|
47527
|
+
"Heading 2": "제목 2",
|
|
47528
|
+
"Heading 3": "제목 3",
|
|
47529
|
+
"Heading 4": "제목 4",
|
|
47530
|
+
"Heading 5": "제목 5",
|
|
47531
|
+
"Heading 6": "제목 6",
|
|
47532
|
+
"Styles": "스타일",
|
|
47533
|
+
"Insert anchor": "앵커 삽입",
|
|
47534
|
+
"Anchor": "앵커",
|
|
47535
|
+
"Anchor name": "앵커 이름",
|
|
47536
|
+
"Anchor name is required": "앵커 이름은 필수입니다",
|
|
47537
|
+
"Anchor name cannot contain spaces": "앵커 이름에 공백을 포함할 수 없습니다",
|
|
47538
|
+
"Table": "표",
|
|
47539
|
+
"Insert table": "표 삽입",
|
|
47540
|
+
"Insert row before": "위에 행 삽입",
|
|
47541
|
+
"Insert row after": "아래에 행 삽입",
|
|
47542
|
+
"Delete row": "행 삭제",
|
|
47543
|
+
"Insert column before": "왼쪽에 열 삽입",
|
|
47544
|
+
"Insert column after": "오른쪽에 열 삽입",
|
|
47545
|
+
"Delete column": "열 삭제",
|
|
47546
|
+
"Merge cells": "셀 병합",
|
|
47547
|
+
"Split cell": "셀 분할",
|
|
47548
|
+
"Toggle header row": "머리글 행 전환",
|
|
47549
|
+
"Delete table": "표 삭제"
|
|
45652
47550
|
};
|
|
45653
47551
|
const nl = {
|
|
45654
47552
|
"Bold": "Vet",
|
|
@@ -45720,7 +47618,50 @@ const nl = {
|
|
|
45720
47618
|
"Title": "Title",
|
|
45721
47619
|
"Open link in...": "Open link in...",
|
|
45722
47620
|
"Current window": "Current window",
|
|
45723
|
-
"New window": "New window"
|
|
47621
|
+
"New window": "New window",
|
|
47622
|
+
"Speech to Text": "Spraak naar tekst",
|
|
47623
|
+
"Dictate": "Dicteren",
|
|
47624
|
+
"Start": "Starten",
|
|
47625
|
+
"Stop": "Stoppen",
|
|
47626
|
+
"Clear": "Wissen",
|
|
47627
|
+
"Language": "Taal",
|
|
47628
|
+
"Confidence": "Betrouwbaarheid",
|
|
47629
|
+
"Listening...": "Luisteren...",
|
|
47630
|
+
"Speech to text is not supported in this browser": "Spraak naar tekst wordt niet ondersteund in deze browser",
|
|
47631
|
+
"No speech detected": "Geen spraak gedetecteerd",
|
|
47632
|
+
"Microphone access denied": "Toegang tot microfoon geweigerd",
|
|
47633
|
+
"No microphone found": "No microphone found",
|
|
47634
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47635
|
+
"Subscript": "Subscript",
|
|
47636
|
+
"Superscript": "Superscript",
|
|
47637
|
+
"Horizontal rule": "Horizontale lijn",
|
|
47638
|
+
"Unlink": "Link verwijderen",
|
|
47639
|
+
"Format": "Opmaak",
|
|
47640
|
+
"Paragraph": "Alinea",
|
|
47641
|
+
"Heading 1": "Kop 1",
|
|
47642
|
+
"Heading 2": "Kop 2",
|
|
47643
|
+
"Heading 3": "Kop 3",
|
|
47644
|
+
"Heading 4": "Kop 4",
|
|
47645
|
+
"Heading 5": "Kop 5",
|
|
47646
|
+
"Heading 6": "Kop 6",
|
|
47647
|
+
"Styles": "Stijlen",
|
|
47648
|
+
"Insert anchor": "Anker invoegen",
|
|
47649
|
+
"Anchor": "Anker",
|
|
47650
|
+
"Anchor name": "Ankernaam",
|
|
47651
|
+
"Anchor name is required": "Ankernaam is verplicht",
|
|
47652
|
+
"Anchor name cannot contain spaces": "Ankernaam mag geen spaties bevatten",
|
|
47653
|
+
"Table": "Tabel",
|
|
47654
|
+
"Insert table": "Tabel invoegen",
|
|
47655
|
+
"Insert row before": "Rij ervoor invoegen",
|
|
47656
|
+
"Insert row after": "Rij erna invoegen",
|
|
47657
|
+
"Delete row": "Rij verwijderen",
|
|
47658
|
+
"Insert column before": "Kolom ervoor invoegen",
|
|
47659
|
+
"Insert column after": "Kolom erna invoegen",
|
|
47660
|
+
"Delete column": "Kolom verwijderen",
|
|
47661
|
+
"Merge cells": "Cellen samenvoegen",
|
|
47662
|
+
"Split cell": "Cel splitsen",
|
|
47663
|
+
"Toggle header row": "Koprij in-/uitschakelen",
|
|
47664
|
+
"Delete table": "Tabel verwijderen"
|
|
45724
47665
|
};
|
|
45725
47666
|
const nb = {
|
|
45726
47667
|
"Bold": "Fet",
|
|
@@ -45792,7 +47733,50 @@ const nb = {
|
|
|
45792
47733
|
"Title": "Title",
|
|
45793
47734
|
"Open link in...": "Open link in...",
|
|
45794
47735
|
"Current window": "Current window",
|
|
45795
|
-
"New window": "New window"
|
|
47736
|
+
"New window": "New window",
|
|
47737
|
+
"Speech to Text": "Tale til tekst",
|
|
47738
|
+
"Dictate": "Dikter",
|
|
47739
|
+
"Start": "Start",
|
|
47740
|
+
"Stop": "Stopp",
|
|
47741
|
+
"Clear": "T�m",
|
|
47742
|
+
"Language": "Spr�k",
|
|
47743
|
+
"Confidence": "P�litelighet",
|
|
47744
|
+
"Listening...": "Lytter...",
|
|
47745
|
+
"Speech to text is not supported in this browser": "Tale til tekst st�ttes ikke i denne nettleseren",
|
|
47746
|
+
"No speech detected": "Ingen tale oppdaget",
|
|
47747
|
+
"Microphone access denied": "Mikrofontilgang nektet",
|
|
47748
|
+
"No microphone found": "No microphone found",
|
|
47749
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47750
|
+
"Subscript": "Senket skrift",
|
|
47751
|
+
"Superscript": "Hevet skrift",
|
|
47752
|
+
"Horizontal rule": "Horisontal linje",
|
|
47753
|
+
"Unlink": "Fjern lenke",
|
|
47754
|
+
"Format": "Format",
|
|
47755
|
+
"Paragraph": "Avsnitt",
|
|
47756
|
+
"Heading 1": "Overskrift 1",
|
|
47757
|
+
"Heading 2": "Overskrift 2",
|
|
47758
|
+
"Heading 3": "Overskrift 3",
|
|
47759
|
+
"Heading 4": "Overskrift 4",
|
|
47760
|
+
"Heading 5": "Overskrift 5",
|
|
47761
|
+
"Heading 6": "Overskrift 6",
|
|
47762
|
+
"Styles": "Stiler",
|
|
47763
|
+
"Insert anchor": "Sett inn anker",
|
|
47764
|
+
"Anchor": "Anker",
|
|
47765
|
+
"Anchor name": "Ankernavn",
|
|
47766
|
+
"Anchor name is required": "Ankernavn er påkrevd",
|
|
47767
|
+
"Anchor name cannot contain spaces": "Ankernavn kan ikke inneholde mellomrom",
|
|
47768
|
+
"Table": "Tabell",
|
|
47769
|
+
"Insert table": "Sett inn tabell",
|
|
47770
|
+
"Insert row before": "Sett inn rad før",
|
|
47771
|
+
"Insert row after": "Sett inn rad etter",
|
|
47772
|
+
"Delete row": "Slett rad",
|
|
47773
|
+
"Insert column before": "Sett inn kolonne før",
|
|
47774
|
+
"Insert column after": "Sett inn kolonne etter",
|
|
47775
|
+
"Delete column": "Slett kolonne",
|
|
47776
|
+
"Merge cells": "Slå sammen celler",
|
|
47777
|
+
"Split cell": "Del celle",
|
|
47778
|
+
"Toggle header row": "Veksle overskriftsrad",
|
|
47779
|
+
"Delete table": "Slett tabell"
|
|
45796
47780
|
};
|
|
45797
47781
|
const pl = {
|
|
45798
47782
|
"Bold": "Pogrubienie",
|
|
@@ -45864,7 +47848,50 @@ const pl = {
|
|
|
45864
47848
|
"Title": "Title",
|
|
45865
47849
|
"Open link in...": "Open link in...",
|
|
45866
47850
|
"Current window": "Current window",
|
|
45867
|
-
"New window": "New window"
|
|
47851
|
+
"New window": "New window",
|
|
47852
|
+
"Speech to Text": "Mowa na tekst",
|
|
47853
|
+
"Dictate": "Dyktuj",
|
|
47854
|
+
"Start": "Rozpocznij",
|
|
47855
|
+
"Stop": "Zatrzymaj",
|
|
47856
|
+
"Clear": "Wyczysc",
|
|
47857
|
+
"Language": "Jezyk",
|
|
47858
|
+
"Confidence": "Pewnosc",
|
|
47859
|
+
"Listening...": "Nasluchiwanie...",
|
|
47860
|
+
"Speech to text is not supported in this browser": "Mowa na tekst nie jest obslugiwana w tej przegladarce",
|
|
47861
|
+
"No speech detected": "Nie wykryto mowy",
|
|
47862
|
+
"Microphone access denied": "Odmowa dostepu do mikrofonu",
|
|
47863
|
+
"No microphone found": "No microphone found",
|
|
47864
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47865
|
+
"Subscript": "Indeks dolny",
|
|
47866
|
+
"Superscript": "Indeks górny",
|
|
47867
|
+
"Horizontal rule": "Linia pozioma",
|
|
47868
|
+
"Unlink": "Usuń odnośnik",
|
|
47869
|
+
"Format": "Format",
|
|
47870
|
+
"Paragraph": "Akapit",
|
|
47871
|
+
"Heading 1": "Nagłówek 1",
|
|
47872
|
+
"Heading 2": "Nagłówek 2",
|
|
47873
|
+
"Heading 3": "Nagłówek 3",
|
|
47874
|
+
"Heading 4": "Nagłówek 4",
|
|
47875
|
+
"Heading 5": "Nagłówek 5",
|
|
47876
|
+
"Heading 6": "Nagłówek 6",
|
|
47877
|
+
"Styles": "Style",
|
|
47878
|
+
"Insert anchor": "Wstaw kotwicę",
|
|
47879
|
+
"Anchor": "Kotwica",
|
|
47880
|
+
"Anchor name": "Nazwa kotwicy",
|
|
47881
|
+
"Anchor name is required": "Nazwa kotwicy jest wymagana",
|
|
47882
|
+
"Anchor name cannot contain spaces": "Nazwa kotwicy nie może zawierać spacji",
|
|
47883
|
+
"Table": "Tabela",
|
|
47884
|
+
"Insert table": "Wstaw tabelę",
|
|
47885
|
+
"Insert row before": "Wstaw wiersz przed",
|
|
47886
|
+
"Insert row after": "Wstaw wiersz po",
|
|
47887
|
+
"Delete row": "Usuń wiersz",
|
|
47888
|
+
"Insert column before": "Wstaw kolumnę przed",
|
|
47889
|
+
"Insert column after": "Wstaw kolumnę po",
|
|
47890
|
+
"Delete column": "Usuń kolumnę",
|
|
47891
|
+
"Merge cells": "Scal komórki",
|
|
47892
|
+
"Split cell": "Podziel komórkę",
|
|
47893
|
+
"Toggle header row": "Przełącz wiersz nagłówka",
|
|
47894
|
+
"Delete table": "Usuń tabelę"
|
|
45868
47895
|
};
|
|
45869
47896
|
const pt = {
|
|
45870
47897
|
"Bold": "Negrito",
|
|
@@ -45936,7 +47963,50 @@ const pt = {
|
|
|
45936
47963
|
"Title": "Title",
|
|
45937
47964
|
"Open link in...": "Open link in...",
|
|
45938
47965
|
"Current window": "Current window",
|
|
45939
|
-
"New window": "New window"
|
|
47966
|
+
"New window": "New window",
|
|
47967
|
+
"Speech to Text": "Voz para texto",
|
|
47968
|
+
"Dictate": "Ditar",
|
|
47969
|
+
"Start": "Iniciar",
|
|
47970
|
+
"Stop": "Parar",
|
|
47971
|
+
"Clear": "Limpar",
|
|
47972
|
+
"Language": "Idioma",
|
|
47973
|
+
"Confidence": "Confian�a",
|
|
47974
|
+
"Listening...": "Ouvindo...",
|
|
47975
|
+
"Speech to text is not supported in this browser": "Voz para texto n�o � suportado neste navegador",
|
|
47976
|
+
"No speech detected": "Nenhuma fala detectada",
|
|
47977
|
+
"Microphone access denied": "Acesso ao microfone negado",
|
|
47978
|
+
"No microphone found": "No microphone found",
|
|
47979
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
47980
|
+
"Subscript": "Subscrito",
|
|
47981
|
+
"Superscript": "Sobrescrito",
|
|
47982
|
+
"Horizontal rule": "Linha horizontal",
|
|
47983
|
+
"Unlink": "Remover link",
|
|
47984
|
+
"Format": "Formato",
|
|
47985
|
+
"Paragraph": "Parágrafo",
|
|
47986
|
+
"Heading 1": "Título 1",
|
|
47987
|
+
"Heading 2": "Título 2",
|
|
47988
|
+
"Heading 3": "Título 3",
|
|
47989
|
+
"Heading 4": "Título 4",
|
|
47990
|
+
"Heading 5": "Título 5",
|
|
47991
|
+
"Heading 6": "Título 6",
|
|
47992
|
+
"Styles": "Estilos",
|
|
47993
|
+
"Insert anchor": "Inserir âncora",
|
|
47994
|
+
"Anchor": "Âncora",
|
|
47995
|
+
"Anchor name": "Nome da âncora",
|
|
47996
|
+
"Anchor name is required": "O nome da âncora é obrigatório",
|
|
47997
|
+
"Anchor name cannot contain spaces": "O nome da âncora não pode conter espaços",
|
|
47998
|
+
"Table": "Tabela",
|
|
47999
|
+
"Insert table": "Inserir tabela",
|
|
48000
|
+
"Insert row before": "Inserir linha antes",
|
|
48001
|
+
"Insert row after": "Inserir linha depois",
|
|
48002
|
+
"Delete row": "Excluir linha",
|
|
48003
|
+
"Insert column before": "Inserir coluna antes",
|
|
48004
|
+
"Insert column after": "Inserir coluna depois",
|
|
48005
|
+
"Delete column": "Excluir coluna",
|
|
48006
|
+
"Merge cells": "Mesclar células",
|
|
48007
|
+
"Split cell": "Dividir célula",
|
|
48008
|
+
"Toggle header row": "Alternar linha de cabeçalho",
|
|
48009
|
+
"Delete table": "Excluir tabela"
|
|
45940
48010
|
};
|
|
45941
48011
|
const ro = {
|
|
45942
48012
|
"Bold": "Îngroșat",
|
|
@@ -45994,7 +48064,7 @@ const ro = {
|
|
|
45994
48064
|
"Browse...": "Răsfoiește...",
|
|
45995
48065
|
"Drop image here or click to browse": "Trage imaginea aici sau dă clic pentru a răsfoi",
|
|
45996
48066
|
"Alt text": "Text alternativ",
|
|
45997
|
-
"Insert": "
|
|
48067
|
+
"Insert": "Inserare",
|
|
45998
48068
|
"Cancel": "Anulează",
|
|
45999
48069
|
"Uploading...": "Se încarcă...",
|
|
46000
48070
|
"Upload failed": "Încarcare eșuată",
|
|
@@ -46008,7 +48078,50 @@ const ro = {
|
|
|
46008
48078
|
"Title": "Title",
|
|
46009
48079
|
"Open link in...": "Open link in...",
|
|
46010
48080
|
"Current window": "Current window",
|
|
46011
|
-
"New window": "New window"
|
|
48081
|
+
"New window": "New window",
|
|
48082
|
+
"Speech to Text": "Voce �n text",
|
|
48083
|
+
"Dictate": "Dictare",
|
|
48084
|
+
"Start": "Pornire",
|
|
48085
|
+
"Stop": "Oprire",
|
|
48086
|
+
"Clear": "?tergere",
|
|
48087
|
+
"Language": "Limba",
|
|
48088
|
+
"Confidence": "�ncredere",
|
|
48089
|
+
"Listening...": "Ascultare...",
|
|
48090
|
+
"Speech to text is not supported in this browser": "Voce �n text nu este acceptata �n acest browser",
|
|
48091
|
+
"No speech detected": "Nu a fost detectata nicio voce",
|
|
48092
|
+
"Microphone access denied": "Accesul la microfon a fost refuzat",
|
|
48093
|
+
"No microphone found": "No microphone found",
|
|
48094
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48095
|
+
"Subscript": "Indice",
|
|
48096
|
+
"Superscript": "Exponent",
|
|
48097
|
+
"Horizontal rule": "Linie orizontală",
|
|
48098
|
+
"Unlink": "Eliminare link",
|
|
48099
|
+
"Format": "Format",
|
|
48100
|
+
"Paragraph": "Paragraf",
|
|
48101
|
+
"Heading 1": "Titlu 1",
|
|
48102
|
+
"Heading 2": "Titlu 2",
|
|
48103
|
+
"Heading 3": "Titlu 3",
|
|
48104
|
+
"Heading 4": "Titlu 4",
|
|
48105
|
+
"Heading 5": "Titlu 5",
|
|
48106
|
+
"Heading 6": "Titlu 6",
|
|
48107
|
+
"Styles": "Stiluri",
|
|
48108
|
+
"Insert anchor": "Inserare ancoră",
|
|
48109
|
+
"Anchor": "Ancoră",
|
|
48110
|
+
"Anchor name": "Nume ancoră",
|
|
48111
|
+
"Anchor name is required": "Numele ancorei este obligatoriu",
|
|
48112
|
+
"Anchor name cannot contain spaces": "Numele ancorei nu poate conține spații",
|
|
48113
|
+
"Table": "Tabel",
|
|
48114
|
+
"Insert table": "Inserare tabel",
|
|
48115
|
+
"Insert row before": "Inserare rând înainte",
|
|
48116
|
+
"Insert row after": "Inserare rând după",
|
|
48117
|
+
"Delete row": "Ștergere rând",
|
|
48118
|
+
"Insert column before": "Inserare coloană înainte",
|
|
48119
|
+
"Insert column after": "Inserare coloană după",
|
|
48120
|
+
"Delete column": "Ștergere coloană",
|
|
48121
|
+
"Merge cells": "Îmbinare celule",
|
|
48122
|
+
"Split cell": "Divizare celulă",
|
|
48123
|
+
"Toggle header row": "Comutare rând antet",
|
|
48124
|
+
"Delete table": "Ștergere tabel"
|
|
46012
48125
|
};
|
|
46013
48126
|
const ru = {
|
|
46014
48127
|
"Bold": "Полужирный",
|
|
@@ -46066,7 +48179,7 @@ const ru = {
|
|
|
46066
48179
|
"Browse...": "Обзор...",
|
|
46067
48180
|
"Drop image here or click to browse": "Перетащите изображение сюда или нажмите для обзора",
|
|
46068
48181
|
"Alt text": "Альтернативный текст",
|
|
46069
|
-
"Insert": "
|
|
48182
|
+
"Insert": "????????",
|
|
46070
48183
|
"Cancel": "Отмена",
|
|
46071
48184
|
"Uploading...": "Загрузка...",
|
|
46072
48185
|
"Upload failed": "Ошибка загрузки",
|
|
@@ -46080,7 +48193,50 @@ const ru = {
|
|
|
46080
48193
|
"Title": "Title",
|
|
46081
48194
|
"Open link in...": "Open link in...",
|
|
46082
48195
|
"Current window": "Current window",
|
|
46083
|
-
"New window": "New window"
|
|
48196
|
+
"New window": "New window",
|
|
48197
|
+
"Speech to Text": "????? ? ?????",
|
|
48198
|
+
"Dictate": "Диктовать",
|
|
48199
|
+
"Start": "??????",
|
|
48200
|
+
"Stop": "??????????",
|
|
48201
|
+
"Clear": "????????",
|
|
48202
|
+
"Language": "????",
|
|
48203
|
+
"Confidence": "????????",
|
|
48204
|
+
"Listening...": "??????...",
|
|
48205
|
+
"Speech to text is not supported in this browser": "????????? ???? ?? ?????????????? ? ???? ????????",
|
|
48206
|
+
"No speech detected": "???? ?? ??????????",
|
|
48207
|
+
"Microphone access denied": "?????? ? ????????? ????????",
|
|
48208
|
+
"No microphone found": "No microphone found",
|
|
48209
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48210
|
+
"Subscript": "Подстрочный",
|
|
48211
|
+
"Superscript": "Надстрочный",
|
|
48212
|
+
"Horizontal rule": "Горизонтальная линия",
|
|
48213
|
+
"Unlink": "Удалить ссылку",
|
|
48214
|
+
"Format": "Формат",
|
|
48215
|
+
"Paragraph": "Абзац",
|
|
48216
|
+
"Heading 1": "Заголовок 1",
|
|
48217
|
+
"Heading 2": "Заголовок 2",
|
|
48218
|
+
"Heading 3": "Заголовок 3",
|
|
48219
|
+
"Heading 4": "Заголовок 4",
|
|
48220
|
+
"Heading 5": "Заголовок 5",
|
|
48221
|
+
"Heading 6": "Заголовок 6",
|
|
48222
|
+
"Styles": "Стили",
|
|
48223
|
+
"Insert anchor": "Вставить якорь",
|
|
48224
|
+
"Anchor": "Якорь",
|
|
48225
|
+
"Anchor name": "Имя якоря",
|
|
48226
|
+
"Anchor name is required": "Требуется имя якоря",
|
|
48227
|
+
"Anchor name cannot contain spaces": "Имя якоря не может содержать пробелы",
|
|
48228
|
+
"Table": "Таблица",
|
|
48229
|
+
"Insert table": "Вставить таблицу",
|
|
48230
|
+
"Insert row before": "Вставить строку выше",
|
|
48231
|
+
"Insert row after": "Вставить строку ниже",
|
|
48232
|
+
"Delete row": "Удалить строку",
|
|
48233
|
+
"Insert column before": "Вставить столбец слева",
|
|
48234
|
+
"Insert column after": "Вставить столбец справа",
|
|
48235
|
+
"Delete column": "Удалить столбец",
|
|
48236
|
+
"Merge cells": "Объединить ячейки",
|
|
48237
|
+
"Split cell": "Разделить ячейку",
|
|
48238
|
+
"Toggle header row": "Переключить строку заголовка",
|
|
48239
|
+
"Delete table": "Удалить таблицу"
|
|
46084
48240
|
};
|
|
46085
48241
|
const sr = {
|
|
46086
48242
|
"Bold": "Подебљано",
|
|
@@ -46138,7 +48294,7 @@ const sr = {
|
|
|
46138
48294
|
"Browse...": "Претражи...",
|
|
46139
48295
|
"Drop image here or click to browse": "Превуците слику овде или кликните за претрагу",
|
|
46140
48296
|
"Alt text": "Алтернативни текст",
|
|
46141
|
-
"Insert": "
|
|
48297
|
+
"Insert": "?????",
|
|
46142
48298
|
"Cancel": "Откажи",
|
|
46143
48299
|
"Uploading...": "Отпремање...",
|
|
46144
48300
|
"Upload failed": "Отпремање није успело",
|
|
@@ -46152,7 +48308,50 @@ const sr = {
|
|
|
46152
48308
|
"Title": "Title",
|
|
46153
48309
|
"Open link in...": "Open link in...",
|
|
46154
48310
|
"Current window": "Current window",
|
|
46155
|
-
"New window": "New window"
|
|
48311
|
+
"New window": "New window",
|
|
48312
|
+
"Speech to Text": "????? ? ?????",
|
|
48313
|
+
"Dictate": "Диктирање",
|
|
48314
|
+
"Start": "???????",
|
|
48315
|
+
"Stop": "????????",
|
|
48316
|
+
"Clear": "??????",
|
|
48317
|
+
"Language": "?????",
|
|
48318
|
+
"Confidence": "??????????",
|
|
48319
|
+
"Listening...": "??????...",
|
|
48320
|
+
"Speech to text is not supported in this browser": "????? ? ????? ???? ??????? ? ???? ??????????",
|
|
48321
|
+
"No speech detected": "????? ???? ????????",
|
|
48322
|
+
"Microphone access denied": "??????? ????????? ???????",
|
|
48323
|
+
"No microphone found": "No microphone found",
|
|
48324
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48325
|
+
"Subscript": "Индекс",
|
|
48326
|
+
"Superscript": "Експонент",
|
|
48327
|
+
"Horizontal rule": "Хоризонтална линија",
|
|
48328
|
+
"Unlink": "Уклони везу",
|
|
48329
|
+
"Format": "Формат",
|
|
48330
|
+
"Paragraph": "Пасус",
|
|
48331
|
+
"Heading 1": "Наслов 1",
|
|
48332
|
+
"Heading 2": "Наслов 2",
|
|
48333
|
+
"Heading 3": "Наслов 3",
|
|
48334
|
+
"Heading 4": "Наслов 4",
|
|
48335
|
+
"Heading 5": "Наслов 5",
|
|
48336
|
+
"Heading 6": "Наслов 6",
|
|
48337
|
+
"Styles": "Стилови",
|
|
48338
|
+
"Insert anchor": "Уметни сидро",
|
|
48339
|
+
"Anchor": "Сидро",
|
|
48340
|
+
"Anchor name": "Назив сидра",
|
|
48341
|
+
"Anchor name is required": "Назив сидра је обавезан",
|
|
48342
|
+
"Anchor name cannot contain spaces": "Назив сидра не може садржати размаке",
|
|
48343
|
+
"Table": "Табела",
|
|
48344
|
+
"Insert table": "Уметни табелу",
|
|
48345
|
+
"Insert row before": "Уметни ред изнад",
|
|
48346
|
+
"Insert row after": "Уметни ред испод",
|
|
48347
|
+
"Delete row": "Обриши ред",
|
|
48348
|
+
"Insert column before": "Уметни колону лево",
|
|
48349
|
+
"Insert column after": "Уметни колону десно",
|
|
48350
|
+
"Delete column": "Обриши колону",
|
|
48351
|
+
"Merge cells": "Споји ћелије",
|
|
48352
|
+
"Split cell": "Подели ћелију",
|
|
48353
|
+
"Toggle header row": "Укључи/искључи ред заглавља",
|
|
48354
|
+
"Delete table": "Обриши табелу"
|
|
46156
48355
|
};
|
|
46157
48356
|
const sl = {
|
|
46158
48357
|
"Bold": "Krepko",
|
|
@@ -46224,7 +48423,50 @@ const sl = {
|
|
|
46224
48423
|
"Title": "Title",
|
|
46225
48424
|
"Open link in...": "Open link in...",
|
|
46226
48425
|
"Current window": "Current window",
|
|
46227
|
-
"New window": "New window"
|
|
48426
|
+
"New window": "New window",
|
|
48427
|
+
"Speech to Text": "Govor v besedilo",
|
|
48428
|
+
"Dictate": "Narekovanje",
|
|
48429
|
+
"Start": "Zacni",
|
|
48430
|
+
"Stop": "Ustavi",
|
|
48431
|
+
"Clear": "Pocisti",
|
|
48432
|
+
"Language": "Jezik",
|
|
48433
|
+
"Confidence": "Zaupanje",
|
|
48434
|
+
"Listening...": "Poslu�am...",
|
|
48435
|
+
"Speech to text is not supported in this browser": "Govor v besedilo ni podprt v tem brskalniku",
|
|
48436
|
+
"No speech detected": "Govor ni bil zaznan",
|
|
48437
|
+
"Microphone access denied": "Dostop do mikrofona zavrnjen",
|
|
48438
|
+
"No microphone found": "No microphone found",
|
|
48439
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48440
|
+
"Subscript": "Podpisano",
|
|
48441
|
+
"Superscript": "Nadpisano",
|
|
48442
|
+
"Horizontal rule": "Vodoravna črta",
|
|
48443
|
+
"Unlink": "Odstrani povezavo",
|
|
48444
|
+
"Format": "Oblika",
|
|
48445
|
+
"Paragraph": "Odstavek",
|
|
48446
|
+
"Heading 1": "Naslov 1",
|
|
48447
|
+
"Heading 2": "Naslov 2",
|
|
48448
|
+
"Heading 3": "Naslov 3",
|
|
48449
|
+
"Heading 4": "Naslov 4",
|
|
48450
|
+
"Heading 5": "Naslov 5",
|
|
48451
|
+
"Heading 6": "Naslov 6",
|
|
48452
|
+
"Styles": "Slogi",
|
|
48453
|
+
"Insert anchor": "Vstavi sidro",
|
|
48454
|
+
"Anchor": "Sidro",
|
|
48455
|
+
"Anchor name": "Ime sidra",
|
|
48456
|
+
"Anchor name is required": "Ime sidra je obvezno",
|
|
48457
|
+
"Anchor name cannot contain spaces": "Ime sidra ne sme vsebovati presledkov",
|
|
48458
|
+
"Table": "Tabela",
|
|
48459
|
+
"Insert table": "Vstavi tabelo",
|
|
48460
|
+
"Insert row before": "Vstavi vrstico pred",
|
|
48461
|
+
"Insert row after": "Vstavi vrstico za",
|
|
48462
|
+
"Delete row": "Izbriši vrstico",
|
|
48463
|
+
"Insert column before": "Vstavi stolpec pred",
|
|
48464
|
+
"Insert column after": "Vstavi stolpec za",
|
|
48465
|
+
"Delete column": "Izbriši stolpec",
|
|
48466
|
+
"Merge cells": "Združi celice",
|
|
48467
|
+
"Split cell": "Razdeli celico",
|
|
48468
|
+
"Toggle header row": "Preklopi vrstico glave",
|
|
48469
|
+
"Delete table": "Izbriši tabelo"
|
|
46228
48470
|
};
|
|
46229
48471
|
const es = {
|
|
46230
48472
|
"Bold": "Negrita",
|
|
@@ -46296,7 +48538,50 @@ const es = {
|
|
|
46296
48538
|
"Title": "Title",
|
|
46297
48539
|
"Open link in...": "Open link in...",
|
|
46298
48540
|
"Current window": "Current window",
|
|
46299
|
-
"New window": "New window"
|
|
48541
|
+
"New window": "New window",
|
|
48542
|
+
"Speech to Text": "Voz a texto",
|
|
48543
|
+
"Dictate": "Dictar",
|
|
48544
|
+
"Start": "Iniciar",
|
|
48545
|
+
"Stop": "Detener",
|
|
48546
|
+
"Clear": "Borrar",
|
|
48547
|
+
"Language": "Idioma",
|
|
48548
|
+
"Confidence": "Confianza",
|
|
48549
|
+
"Listening...": "Escuchando...",
|
|
48550
|
+
"Speech to text is not supported in this browser": "La voz a texto no es compatible con este navegador",
|
|
48551
|
+
"No speech detected": "No se detect� voz",
|
|
48552
|
+
"Microphone access denied": "Acceso al micr�fono denegado",
|
|
48553
|
+
"No microphone found": "No microphone found",
|
|
48554
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48555
|
+
"Subscript": "Subíndice",
|
|
48556
|
+
"Superscript": "Superíndice",
|
|
48557
|
+
"Horizontal rule": "Línea horizontal",
|
|
48558
|
+
"Unlink": "Quitar enlace",
|
|
48559
|
+
"Format": "Formato",
|
|
48560
|
+
"Paragraph": "Párrafo",
|
|
48561
|
+
"Heading 1": "Encabezado 1",
|
|
48562
|
+
"Heading 2": "Encabezado 2",
|
|
48563
|
+
"Heading 3": "Encabezado 3",
|
|
48564
|
+
"Heading 4": "Encabezado 4",
|
|
48565
|
+
"Heading 5": "Encabezado 5",
|
|
48566
|
+
"Heading 6": "Encabezado 6",
|
|
48567
|
+
"Styles": "Estilos",
|
|
48568
|
+
"Insert anchor": "Insertar ancla",
|
|
48569
|
+
"Anchor": "Ancla",
|
|
48570
|
+
"Anchor name": "Nombre del ancla",
|
|
48571
|
+
"Anchor name is required": "El nombre del ancla es obligatorio",
|
|
48572
|
+
"Anchor name cannot contain spaces": "El nombre del ancla no puede contener espacios",
|
|
48573
|
+
"Table": "Tabla",
|
|
48574
|
+
"Insert table": "Insertar tabla",
|
|
48575
|
+
"Insert row before": "Insertar fila antes",
|
|
48576
|
+
"Insert row after": "Insertar fila después",
|
|
48577
|
+
"Delete row": "Eliminar fila",
|
|
48578
|
+
"Insert column before": "Insertar columna antes",
|
|
48579
|
+
"Insert column after": "Insertar columna después",
|
|
48580
|
+
"Delete column": "Eliminar columna",
|
|
48581
|
+
"Merge cells": "Combinar celdas",
|
|
48582
|
+
"Split cell": "Dividir celda",
|
|
48583
|
+
"Toggle header row": "Alternar fila de encabezado",
|
|
48584
|
+
"Delete table": "Eliminar tabla"
|
|
46300
48585
|
};
|
|
46301
48586
|
const sv = {
|
|
46302
48587
|
"Bold": "Fet",
|
|
@@ -46368,7 +48653,50 @@ const sv = {
|
|
|
46368
48653
|
"Title": "Title",
|
|
46369
48654
|
"Open link in...": "Open link in...",
|
|
46370
48655
|
"Current window": "Current window",
|
|
46371
|
-
"New window": "New window"
|
|
48656
|
+
"New window": "New window",
|
|
48657
|
+
"Speech to Text": "Tal till text",
|
|
48658
|
+
"Dictate": "Diktera",
|
|
48659
|
+
"Start": "Starta",
|
|
48660
|
+
"Stop": "Stoppa",
|
|
48661
|
+
"Clear": "Rensa",
|
|
48662
|
+
"Language": "Spr�k",
|
|
48663
|
+
"Confidence": "Tillf�rlitlighet",
|
|
48664
|
+
"Listening...": "Lyssnar...",
|
|
48665
|
+
"Speech to text is not supported in this browser": "Tal till text st�ds inte i denna webbl�sare",
|
|
48666
|
+
"No speech detected": "Inget tal detekterat",
|
|
48667
|
+
"Microphone access denied": "Mikrofon�tkomst nekad",
|
|
48668
|
+
"No microphone found": "No microphone found",
|
|
48669
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48670
|
+
"Subscript": "Nedsänkt",
|
|
48671
|
+
"Superscript": "Upphöjd",
|
|
48672
|
+
"Horizontal rule": "Vågrät linje",
|
|
48673
|
+
"Unlink": "Ta bort länk",
|
|
48674
|
+
"Format": "Format",
|
|
48675
|
+
"Paragraph": "Stycke",
|
|
48676
|
+
"Heading 1": "Rubrik 1",
|
|
48677
|
+
"Heading 2": "Rubrik 2",
|
|
48678
|
+
"Heading 3": "Rubrik 3",
|
|
48679
|
+
"Heading 4": "Rubrik 4",
|
|
48680
|
+
"Heading 5": "Rubrik 5",
|
|
48681
|
+
"Heading 6": "Rubrik 6",
|
|
48682
|
+
"Styles": "Stilar",
|
|
48683
|
+
"Insert anchor": "Infoga ankare",
|
|
48684
|
+
"Anchor": "Ankare",
|
|
48685
|
+
"Anchor name": "Ankarnamn",
|
|
48686
|
+
"Anchor name is required": "Ankarnamn krävs",
|
|
48687
|
+
"Anchor name cannot contain spaces": "Ankarnamn får inte innehålla mellanslag",
|
|
48688
|
+
"Table": "Tabell",
|
|
48689
|
+
"Insert table": "Infoga tabell",
|
|
48690
|
+
"Insert row before": "Infoga rad före",
|
|
48691
|
+
"Insert row after": "Infoga rad efter",
|
|
48692
|
+
"Delete row": "Ta bort rad",
|
|
48693
|
+
"Insert column before": "Infoga kolumn före",
|
|
48694
|
+
"Insert column after": "Infoga kolumn efter",
|
|
48695
|
+
"Delete column": "Ta bort kolumn",
|
|
48696
|
+
"Merge cells": "Slå samman celler",
|
|
48697
|
+
"Split cell": "Dela cell",
|
|
48698
|
+
"Toggle header row": "Växla rubrikrad",
|
|
48699
|
+
"Delete table": "Ta bort tabell"
|
|
46372
48700
|
};
|
|
46373
48701
|
const zhTw = {
|
|
46374
48702
|
"Bold": "粗體",
|
|
@@ -46426,7 +48754,7 @@ const zhTw = {
|
|
|
46426
48754
|
"Browse...": "瀏覽...",
|
|
46427
48755
|
"Drop image here or click to browse": "將圖片拖放至此處或點擊瀏覽",
|
|
46428
48756
|
"Alt text": "替代文字",
|
|
46429
|
-
"Insert": "
|
|
48757
|
+
"Insert": "??",
|
|
46430
48758
|
"Cancel": "取消",
|
|
46431
48759
|
"Uploading...": "上傳中...",
|
|
46432
48760
|
"Upload failed": "上傳失敗",
|
|
@@ -46440,7 +48768,50 @@ const zhTw = {
|
|
|
46440
48768
|
"Title": "Title",
|
|
46441
48769
|
"Open link in...": "Open link in...",
|
|
46442
48770
|
"Current window": "Current window",
|
|
46443
|
-
"New window": "New window"
|
|
48771
|
+
"New window": "New window",
|
|
48772
|
+
"Speech to Text": "?????",
|
|
48773
|
+
"Dictate": "聽寫",
|
|
48774
|
+
"Start": "??",
|
|
48775
|
+
"Stop": "??",
|
|
48776
|
+
"Clear": "??",
|
|
48777
|
+
"Language": "??",
|
|
48778
|
+
"Confidence": "???",
|
|
48779
|
+
"Listening...": "????...",
|
|
48780
|
+
"Speech to text is not supported in this browser": "????????????",
|
|
48781
|
+
"No speech detected": "??????",
|
|
48782
|
+
"Microphone access denied": "????????",
|
|
48783
|
+
"No microphone found": "No microphone found",
|
|
48784
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48785
|
+
"Subscript": "下標",
|
|
48786
|
+
"Superscript": "上標",
|
|
48787
|
+
"Horizontal rule": "水平線",
|
|
48788
|
+
"Unlink": "移除連結",
|
|
48789
|
+
"Format": "格式",
|
|
48790
|
+
"Paragraph": "段落",
|
|
48791
|
+
"Heading 1": "標題 1",
|
|
48792
|
+
"Heading 2": "標題 2",
|
|
48793
|
+
"Heading 3": "標題 3",
|
|
48794
|
+
"Heading 4": "標題 4",
|
|
48795
|
+
"Heading 5": "標題 5",
|
|
48796
|
+
"Heading 6": "標題 6",
|
|
48797
|
+
"Styles": "樣式",
|
|
48798
|
+
"Insert anchor": "插入錨點",
|
|
48799
|
+
"Anchor": "錨點",
|
|
48800
|
+
"Anchor name": "錨點名稱",
|
|
48801
|
+
"Anchor name is required": "錨點名稱為必填",
|
|
48802
|
+
"Anchor name cannot contain spaces": "錨點名稱不能包含空格",
|
|
48803
|
+
"Table": "表格",
|
|
48804
|
+
"Insert table": "插入表格",
|
|
48805
|
+
"Insert row before": "在上方插入列",
|
|
48806
|
+
"Insert row after": "在下方插入列",
|
|
48807
|
+
"Delete row": "刪除列",
|
|
48808
|
+
"Insert column before": "在左側插入欄",
|
|
48809
|
+
"Insert column after": "在右側插入欄",
|
|
48810
|
+
"Delete column": "刪除欄",
|
|
48811
|
+
"Merge cells": "合併儲存格",
|
|
48812
|
+
"Split cell": "分割儲存格",
|
|
48813
|
+
"Toggle header row": "切換標題列",
|
|
48814
|
+
"Delete table": "刪除表格"
|
|
46444
48815
|
};
|
|
46445
48816
|
const th = {
|
|
46446
48817
|
"Bold": "ตัวหนา",
|
|
@@ -46498,7 +48869,7 @@ const th = {
|
|
|
46498
48869
|
"Browse...": "เรียกดู...",
|
|
46499
48870
|
"Drop image here or click to browse": "ลากรูปภาพมาที่นี่หรือคลิกเพื่อเรียกดู",
|
|
46500
48871
|
"Alt text": "ข้อความทดแทน",
|
|
46501
|
-
"Insert": "
|
|
48872
|
+
"Insert": "????",
|
|
46502
48873
|
"Cancel": "ยกเลิก",
|
|
46503
48874
|
"Uploading...": "กำลังอัปโหลด...",
|
|
46504
48875
|
"Upload failed": "อัปโหลดล้มเหลว",
|
|
@@ -46512,7 +48883,50 @@ const th = {
|
|
|
46512
48883
|
"Title": "Title",
|
|
46513
48884
|
"Open link in...": "Open link in...",
|
|
46514
48885
|
"Current window": "Current window",
|
|
46515
|
-
"New window": "New window"
|
|
48886
|
+
"New window": "New window",
|
|
48887
|
+
"Speech to Text": "????????????????",
|
|
48888
|
+
"Dictate": "เขียนตามคำบอก",
|
|
48889
|
+
"Start": "?????",
|
|
48890
|
+
"Stop": "????",
|
|
48891
|
+
"Clear": "????",
|
|
48892
|
+
"Language": "????",
|
|
48893
|
+
"Confidence": "?????????????",
|
|
48894
|
+
"Listening...": "????????...",
|
|
48895
|
+
"Speech to text is not supported in this browser": "?????????????????????????????????????????",
|
|
48896
|
+
"No speech detected": "?????????????",
|
|
48897
|
+
"Microphone access denied": "???????????????????????????",
|
|
48898
|
+
"No microphone found": "No microphone found",
|
|
48899
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
48900
|
+
"Subscript": "ตัวห้อย",
|
|
48901
|
+
"Superscript": "ตัวยก",
|
|
48902
|
+
"Horizontal rule": "เส้นแนวนอน",
|
|
48903
|
+
"Unlink": "ลบลิงก์",
|
|
48904
|
+
"Format": "รูปแบบ",
|
|
48905
|
+
"Paragraph": "ย่อหน้า",
|
|
48906
|
+
"Heading 1": "หัวข้อ 1",
|
|
48907
|
+
"Heading 2": "หัวข้อ 2",
|
|
48908
|
+
"Heading 3": "หัวข้อ 3",
|
|
48909
|
+
"Heading 4": "หัวข้อ 4",
|
|
48910
|
+
"Heading 5": "หัวข้อ 5",
|
|
48911
|
+
"Heading 6": "หัวข้อ 6",
|
|
48912
|
+
"Styles": "สไตล์",
|
|
48913
|
+
"Insert anchor": "แทรกจุดยึด",
|
|
48914
|
+
"Anchor": "จุดยึด",
|
|
48915
|
+
"Anchor name": "ชื่อจุดยึด",
|
|
48916
|
+
"Anchor name is required": "ต้องระบุชื่อจุดยึด",
|
|
48917
|
+
"Anchor name cannot contain spaces": "ชื่อจุดยึดต้องไม่มีช่องว่าง",
|
|
48918
|
+
"Table": "ตาราง",
|
|
48919
|
+
"Insert table": "แทรกตาราง",
|
|
48920
|
+
"Insert row before": "แทรกแถวก่อนหน้า",
|
|
48921
|
+
"Insert row after": "แทรกแถวถัดไป",
|
|
48922
|
+
"Delete row": "ลบแถว",
|
|
48923
|
+
"Insert column before": "แทรกคอลัมน์ก่อนหน้า",
|
|
48924
|
+
"Insert column after": "แทรกคอลัมน์ถัดไป",
|
|
48925
|
+
"Delete column": "ลบคอลัมน์",
|
|
48926
|
+
"Merge cells": "ผสานเซลล์",
|
|
48927
|
+
"Split cell": "แยกเซลล์",
|
|
48928
|
+
"Toggle header row": "สลับแถวส่วนหัว",
|
|
48929
|
+
"Delete table": "ลบตาราง"
|
|
46516
48930
|
};
|
|
46517
48931
|
const tr = {
|
|
46518
48932
|
"Bold": "Kalın",
|
|
@@ -46584,7 +48998,50 @@ const tr = {
|
|
|
46584
48998
|
"Title": "Title",
|
|
46585
48999
|
"Open link in...": "Open link in...",
|
|
46586
49000
|
"Current window": "Current window",
|
|
46587
|
-
"New window": "New window"
|
|
49001
|
+
"New window": "New window",
|
|
49002
|
+
"Speech to Text": "Konusmayi metne �evir",
|
|
49003
|
+
"Dictate": "Dikte et",
|
|
49004
|
+
"Start": "Baslat",
|
|
49005
|
+
"Stop": "Durdur",
|
|
49006
|
+
"Clear": "Temizle",
|
|
49007
|
+
"Language": "Dil",
|
|
49008
|
+
"Confidence": "G�venilirlik",
|
|
49009
|
+
"Listening...": "Dinliyor...",
|
|
49010
|
+
"Speech to text is not supported in this browser": "Bu tarayicida konusmayi metne �evirme desteklenmiyor",
|
|
49011
|
+
"No speech detected": "Konusma algilanmadi",
|
|
49012
|
+
"Microphone access denied": "Mikrofon erisimi reddedildi",
|
|
49013
|
+
"No microphone found": "No microphone found",
|
|
49014
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
49015
|
+
"Subscript": "Alt simge",
|
|
49016
|
+
"Superscript": "Üst simge",
|
|
49017
|
+
"Horizontal rule": "Yatay çizgi",
|
|
49018
|
+
"Unlink": "Bağlantıyı kaldır",
|
|
49019
|
+
"Format": "Biçim",
|
|
49020
|
+
"Paragraph": "Paragraf",
|
|
49021
|
+
"Heading 1": "Başlık 1",
|
|
49022
|
+
"Heading 2": "Başlık 2",
|
|
49023
|
+
"Heading 3": "Başlık 3",
|
|
49024
|
+
"Heading 4": "Başlık 4",
|
|
49025
|
+
"Heading 5": "Başlık 5",
|
|
49026
|
+
"Heading 6": "Başlık 6",
|
|
49027
|
+
"Styles": "Stiller",
|
|
49028
|
+
"Insert anchor": "Çapa ekle",
|
|
49029
|
+
"Anchor": "Çapa",
|
|
49030
|
+
"Anchor name": "Çapa adı",
|
|
49031
|
+
"Anchor name is required": "Çapa adı gereklidir",
|
|
49032
|
+
"Anchor name cannot contain spaces": "Çapa adı boşluk içeremez",
|
|
49033
|
+
"Table": "Tablo",
|
|
49034
|
+
"Insert table": "Tablo ekle",
|
|
49035
|
+
"Insert row before": "Önceye satır ekle",
|
|
49036
|
+
"Insert row after": "Sonraya satır ekle",
|
|
49037
|
+
"Delete row": "Satırı sil",
|
|
49038
|
+
"Insert column before": "Önceye sütun ekle",
|
|
49039
|
+
"Insert column after": "Sonraya sütun ekle",
|
|
49040
|
+
"Delete column": "Sütunu sil",
|
|
49041
|
+
"Merge cells": "Hücreleri birleştir",
|
|
49042
|
+
"Split cell": "Hücreyi böl",
|
|
49043
|
+
"Toggle header row": "Başlık satırını aç/kapat",
|
|
49044
|
+
"Delete table": "Tabloyu sil"
|
|
46588
49045
|
};
|
|
46589
49046
|
const vi = {
|
|
46590
49047
|
"Bold": "In đậm",
|
|
@@ -46642,7 +49099,7 @@ const vi = {
|
|
|
46642
49099
|
"Browse...": "Duyệt...",
|
|
46643
49100
|
"Drop image here or click to browse": "Kéo thả hình ảnh vào đây hoặc nhấp để duyệt",
|
|
46644
49101
|
"Alt text": "Văn bản thay thế",
|
|
46645
|
-
"Insert": "
|
|
49102
|
+
"Insert": "Ch�n",
|
|
46646
49103
|
"Cancel": "Hủy",
|
|
46647
49104
|
"Uploading...": "Đang tải lên...",
|
|
46648
49105
|
"Upload failed": "Tải lên thất bại",
|
|
@@ -46656,7 +49113,50 @@ const vi = {
|
|
|
46656
49113
|
"Title": "Title",
|
|
46657
49114
|
"Open link in...": "Open link in...",
|
|
46658
49115
|
"Current window": "Current window",
|
|
46659
|
-
"New window": "New window"
|
|
49116
|
+
"New window": "New window",
|
|
49117
|
+
"Speech to Text": "Gi?ng n�i th�nh van b?n",
|
|
49118
|
+
"Dictate": "Đọc chính tả",
|
|
49119
|
+
"Start": "B?t d?u",
|
|
49120
|
+
"Stop": "D?ng",
|
|
49121
|
+
"Clear": "X�a",
|
|
49122
|
+
"Language": "Ng�n ng?",
|
|
49123
|
+
"Confidence": "�? tin c?y",
|
|
49124
|
+
"Listening...": "�ang nghe...",
|
|
49125
|
+
"Speech to text is not supported in this browser": "Gi?ng n�i th�nh van b?n kh�ng du?c h? tr? trong tr�nh duy?t n�y",
|
|
49126
|
+
"No speech detected": "Kh�ng ph�t hi?n gi?ng n�i",
|
|
49127
|
+
"Microphone access denied": "Quy?n truy c?p micr� b? t? ch?i",
|
|
49128
|
+
"No microphone found": "No microphone found",
|
|
49129
|
+
"Network error - speech recognition requires internet": "Network error - speech recognition requires internet",
|
|
49130
|
+
"Subscript": "Chỉ số dưới",
|
|
49131
|
+
"Superscript": "Chỉ số trên",
|
|
49132
|
+
"Horizontal rule": "Đường kẻ ngang",
|
|
49133
|
+
"Unlink": "Bỏ liên kết",
|
|
49134
|
+
"Format": "Định dạng",
|
|
49135
|
+
"Paragraph": "Đoạn văn",
|
|
49136
|
+
"Heading 1": "Tiêu đề 1",
|
|
49137
|
+
"Heading 2": "Tiêu đề 2",
|
|
49138
|
+
"Heading 3": "Tiêu đề 3",
|
|
49139
|
+
"Heading 4": "Tiêu đề 4",
|
|
49140
|
+
"Heading 5": "Tiêu đề 5",
|
|
49141
|
+
"Heading 6": "Tiêu đề 6",
|
|
49142
|
+
"Styles": "Kiểu",
|
|
49143
|
+
"Insert anchor": "Chèn neo",
|
|
49144
|
+
"Anchor": "Neo",
|
|
49145
|
+
"Anchor name": "Tên neo",
|
|
49146
|
+
"Anchor name is required": "Tên neo là bắt buộc",
|
|
49147
|
+
"Anchor name cannot contain spaces": "Tên neo không được chứa khoảng trắng",
|
|
49148
|
+
"Table": "Bảng",
|
|
49149
|
+
"Insert table": "Chèn bảng",
|
|
49150
|
+
"Insert row before": "Chèn hàng phía trước",
|
|
49151
|
+
"Insert row after": "Chèn hàng phía sau",
|
|
49152
|
+
"Delete row": "Xóa hàng",
|
|
49153
|
+
"Insert column before": "Chèn cột phía trước",
|
|
49154
|
+
"Insert column after": "Chèn cột phía sau",
|
|
49155
|
+
"Delete column": "Xóa cột",
|
|
49156
|
+
"Merge cells": "Gộp ô",
|
|
49157
|
+
"Split cell": "Tách ô",
|
|
49158
|
+
"Toggle header row": "Bật/tắt hàng tiêu đề",
|
|
49159
|
+
"Delete table": "Xóa bảng"
|
|
46660
49160
|
};
|
|
46661
49161
|
const locales = {
|
|
46662
49162
|
en,
|
|
@@ -46702,8 +49202,8 @@ const availableLocales = Object.keys(locales);
|
|
|
46702
49202
|
const TRANSLATION_KEYS = Object.keys(en);
|
|
46703
49203
|
const lowlight = createLowlight(grammars);
|
|
46704
49204
|
const fontNames = "Andale Mono=andale mono,times; Arial=arial,helvetica,sans-serif; Arial Black=arial black,avant garde; Book Antiqua=book antiqua,palatino; Comic Sans MS=comic sans ms,sans-serif; Courier New=courier new,courier; Georgia=georgia,palatino; Helvetica=helvetica; Impact=impact,chicago; Tahoma=tahoma,arial,helvetica,sans-serif; Terminal=terminal,monaco; Times New Roman=times new roman,times; Trebuchet MS=trebuchet ms,geneva; Verdana=verdana,geneva";
|
|
46705
|
-
const FULL_TOOLBAR = "bold italic underline strikethrough | bullist numlist outdent indent blockquote | fontfamily fontsize | lineheight alignleft aligncenter alignright alignjustify | forecolor backcolor | removeformat copy cut paste | undo redo | image charmap emoticons | fullscreen preview | code link codesample | ltr rtl | searchreplace";
|
|
46706
|
-
const BASIC_TOOLBAR = "bold italic underline strikethrough | bullist numlist outdent indent | fontfamily fontsize blockquote | lineheight alignleft aligncenter alignright alignjustify | forecolor backcolor | removeformat copy cut paste | undo redo | charmap emoticons | link | ltr rtl | searchreplace";
|
|
49205
|
+
const FULL_TOOLBAR = "bold italic underline strikethrough subscript superscript | blocks styles | bullist numlist outdent indent blockquote | fontfamily fontsize | lineheight alignleft aligncenter alignright alignjustify | forecolor backcolor | removeformat copy cut paste | undo redo | image table charmap emoticons hr | fullscreen preview | code link unlink anchor codesample | ltr rtl | searchreplace";
|
|
49206
|
+
const BASIC_TOOLBAR = "bold italic underline strikethrough subscript superscript | bullist numlist outdent indent | fontfamily fontsize blockquote | lineheight alignleft aligncenter alignright alignjustify | forecolor backcolor | removeformat copy cut paste | undo redo | charmap emoticons | link unlink | ltr rtl | searchreplace";
|
|
46707
49207
|
const DEFAULT_FONT_SIZES = "8pt 9pt 10pt 12pt 14pt 18pt 24pt 36pt";
|
|
46708
49208
|
let editorIdCounter = 0;
|
|
46709
49209
|
let globalTranslate = (key) => key;
|
|
@@ -46759,6 +49259,8 @@ class HTMLEditor {
|
|
|
46759
49259
|
normalizeConfig(config) {
|
|
46760
49260
|
return {
|
|
46761
49261
|
basicEditor: config.basicEditor ?? false,
|
|
49262
|
+
readonly: config.readonly ?? false,
|
|
49263
|
+
forced_root_block: config.forced_root_block ?? "p",
|
|
46762
49264
|
includeTemplates: config.includeTemplates ?? false,
|
|
46763
49265
|
templates: config.templates ?? [],
|
|
46764
49266
|
dropbox: config.dropbox ?? false,
|
|
@@ -46767,8 +49269,14 @@ class HTMLEditor {
|
|
|
46767
49269
|
images_upload_base_path: config.images_upload_base_path ?? "/",
|
|
46768
49270
|
images_upload_max_size: config.images_upload_max_size,
|
|
46769
49271
|
images_upload_headers: config.images_upload_headers,
|
|
46770
|
-
|
|
46771
|
-
|
|
49272
|
+
images_file_types: config.images_file_types,
|
|
49273
|
+
images_upload_validate: config.images_upload_validate,
|
|
49274
|
+
images_upload_error: config.images_upload_error,
|
|
49275
|
+
// CKEditor aliases: font_names / fontSize_sizes map to the TinyMCE keys
|
|
49276
|
+
font_family_formats: config.font_family_formats ?? config.font_names ?? fontNames,
|
|
49277
|
+
font_size_formats: config.font_size_formats ?? config.fontSize_sizes ?? DEFAULT_FONT_SIZES,
|
|
49278
|
+
block_formats: config.block_formats,
|
|
49279
|
+
style_formats: config.style_formats,
|
|
46772
49280
|
fontName: config.fontName,
|
|
46773
49281
|
fontSize: config.fontSize,
|
|
46774
49282
|
directionality: config.directionality ?? "ltr",
|
|
@@ -46797,7 +49305,8 @@ class HTMLEditor {
|
|
|
46797
49305
|
format_empty_lines: config.format_empty_lines ?? true,
|
|
46798
49306
|
toolbar_narrow_breakpoint: config.toolbar_narrow_breakpoint,
|
|
46799
49307
|
toolbar_priority: config.toolbar_priority,
|
|
46800
|
-
paste_from_office: config.paste_from_office ?? true
|
|
49308
|
+
paste_from_office: config.paste_from_office ?? true,
|
|
49309
|
+
speech_to_text: config.speech_to_text ?? true
|
|
46801
49310
|
};
|
|
46802
49311
|
}
|
|
46803
49312
|
createEditor() {
|
|
@@ -46841,6 +49350,7 @@ class HTMLEditor {
|
|
|
46841
49350
|
element: editorContent,
|
|
46842
49351
|
extensions,
|
|
46843
49352
|
content: "",
|
|
49353
|
+
editable: !this.config.readonly,
|
|
46844
49354
|
editorProps: {
|
|
46845
49355
|
attributes: {
|
|
46846
49356
|
class: "md-editor-body",
|
|
@@ -46879,6 +49389,10 @@ class HTMLEditor {
|
|
|
46879
49389
|
narrowBreakpoint: this.config.toolbar_narrow_breakpoint ?? 768,
|
|
46880
49390
|
priorityOverrides: this.config.toolbar_priority ?? {}
|
|
46881
49391
|
});
|
|
49392
|
+
if (this.config.readonly) {
|
|
49393
|
+
this.editorWrapper.classList.add("md-editor-readonly");
|
|
49394
|
+
this.toolbar.setEnabled(false);
|
|
49395
|
+
}
|
|
46882
49396
|
if (this.config.auto_focus) {
|
|
46883
49397
|
setTimeout(() => this.focus(), 10);
|
|
46884
49398
|
} else if (this.config.setFocus) {
|
|
@@ -46903,6 +49417,9 @@ class HTMLEditor {
|
|
|
46903
49417
|
uploadBasePath: this.config.images_upload_base_path,
|
|
46904
49418
|
uploadMaxSize: this.config.images_upload_max_size,
|
|
46905
49419
|
uploadHeaders: this.config.images_upload_headers,
|
|
49420
|
+
fileTypes: this.config.images_file_types,
|
|
49421
|
+
validate: this.config.images_upload_validate,
|
|
49422
|
+
onError: this.config.images_upload_error,
|
|
46906
49423
|
trans: globalTranslate
|
|
46907
49424
|
});
|
|
46908
49425
|
}
|
|
@@ -46951,19 +49468,29 @@ class HTMLEditor {
|
|
|
46951
49468
|
const helper = this.getImageUploadHelper();
|
|
46952
49469
|
helper.uploadFile(file).then((src) => {
|
|
46953
49470
|
this.tiptap?.chain().focus().setImage({ src }).run();
|
|
46954
|
-
}).catch(() => {
|
|
49471
|
+
}).catch((err) => {
|
|
49472
|
+
const message = err instanceof Error && err.message ? err.message : globalTranslate("Upload failed");
|
|
49473
|
+
this.config.images_upload_error?.(message);
|
|
46955
49474
|
});
|
|
46956
49475
|
}
|
|
46957
49476
|
buildExtensions() {
|
|
49477
|
+
const useDivBlocks = this.config.forced_root_block === "div";
|
|
46958
49478
|
const extensions = [
|
|
46959
49479
|
StarterKit.configure({
|
|
46960
|
-
codeBlock: false
|
|
49480
|
+
codeBlock: false,
|
|
46961
49481
|
// We use CodeBlockLowlight instead
|
|
49482
|
+
// When forced_root_block is 'div', swap StarterKit's <p> paragraph for
|
|
49483
|
+
// a custom Paragraph that renders as <div> (CKEditor ENTER_DIV parity).
|
|
49484
|
+
...useDivBlocks ? { paragraph: false } : {}
|
|
46962
49485
|
}),
|
|
46963
49486
|
SignatureBlock,
|
|
46964
49487
|
Mention,
|
|
49488
|
+
Anchor,
|
|
49489
|
+
Subscript,
|
|
49490
|
+
Superscript,
|
|
46965
49491
|
Underline,
|
|
46966
49492
|
TextStyle,
|
|
49493
|
+
InlineStyle,
|
|
46967
49494
|
FontFamily,
|
|
46968
49495
|
FontSize,
|
|
46969
49496
|
LineHeight,
|
|
@@ -47000,6 +49527,18 @@ class HTMLEditor {
|
|
|
47000
49527
|
}),
|
|
47001
49528
|
TextDirection
|
|
47002
49529
|
];
|
|
49530
|
+
if (useDivBlocks) {
|
|
49531
|
+
extensions.push(
|
|
49532
|
+
Paragraph.extend({
|
|
49533
|
+
parseHTML() {
|
|
49534
|
+
return [{ tag: "p" }, { tag: "div" }];
|
|
49535
|
+
},
|
|
49536
|
+
renderHTML({ HTMLAttributes }) {
|
|
49537
|
+
return ["div", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
|
|
49538
|
+
}
|
|
49539
|
+
})
|
|
49540
|
+
);
|
|
49541
|
+
}
|
|
47003
49542
|
if (this.config.paste_from_office !== false) {
|
|
47004
49543
|
extensions.push(PasteFromOffice);
|
|
47005
49544
|
}
|
|
@@ -47069,6 +49608,12 @@ class HTMLEditor {
|
|
|
47069
49608
|
case "strikethrough":
|
|
47070
49609
|
chain.toggleStrike().run();
|
|
47071
49610
|
return true;
|
|
49611
|
+
case "subscript":
|
|
49612
|
+
chain.toggleSubscript().run();
|
|
49613
|
+
return true;
|
|
49614
|
+
case "superscript":
|
|
49615
|
+
chain.toggleSuperscript().run();
|
|
49616
|
+
return true;
|
|
47072
49617
|
case "fontname":
|
|
47073
49618
|
if (typeof value === "string") {
|
|
47074
49619
|
chain.setFontFamily(value).run();
|
|
@@ -47132,6 +49677,12 @@ class HTMLEditor {
|
|
|
47132
49677
|
case "removeformat":
|
|
47133
49678
|
chain.unsetAllMarks().clearNodes().run();
|
|
47134
49679
|
return true;
|
|
49680
|
+
case "unlink":
|
|
49681
|
+
chain.unsetLink().run();
|
|
49682
|
+
return true;
|
|
49683
|
+
case "inserthorizontalrule":
|
|
49684
|
+
chain.setHorizontalRule().run();
|
|
49685
|
+
return true;
|
|
47135
49686
|
case "mceremoveeditor":
|
|
47136
49687
|
this.destroy();
|
|
47137
49688
|
return true;
|
|
@@ -47149,6 +49700,19 @@ class HTMLEditor {
|
|
|
47149
49700
|
this.fire("dirty", false);
|
|
47150
49701
|
}
|
|
47151
49702
|
}
|
|
49703
|
+
/**
|
|
49704
|
+
* Toggle read-only mode. Disables editing and dims the toolbar.
|
|
49705
|
+
* Mirrors CKEditor's editor.setReadOnly(bool).
|
|
49706
|
+
*/
|
|
49707
|
+
setReadOnly(state) {
|
|
49708
|
+
this.config.readonly = state;
|
|
49709
|
+
this.tiptap?.setEditable(!state);
|
|
49710
|
+
this.editorWrapper?.classList.toggle("md-editor-readonly", state);
|
|
49711
|
+
this.toolbar?.setEnabled(!state);
|
|
49712
|
+
}
|
|
49713
|
+
isReadOnly() {
|
|
49714
|
+
return this.config.readonly ?? false;
|
|
49715
|
+
}
|
|
47152
49716
|
focus() {
|
|
47153
49717
|
this.tiptap?.commands.focus();
|
|
47154
49718
|
}
|
|
@@ -47217,14 +49781,18 @@ class HTMLEditor {
|
|
|
47217
49781
|
}
|
|
47218
49782
|
}
|
|
47219
49783
|
export {
|
|
49784
|
+
Anchor,
|
|
49785
|
+
AnchorDialog,
|
|
47220
49786
|
CHAR_MAP,
|
|
47221
49787
|
CONFAB_ICONS,
|
|
47222
49788
|
CharacterMap,
|
|
47223
49789
|
DEFAULT_ICONS,
|
|
49790
|
+
Dictation,
|
|
47224
49791
|
EMOJI_CATEGORIES,
|
|
47225
49792
|
EmojiPicker,
|
|
47226
49793
|
FontSize,
|
|
47227
49794
|
HTMLEditor,
|
|
49795
|
+
InlineStyle,
|
|
47228
49796
|
LineHeight,
|
|
47229
49797
|
LinkEditor,
|
|
47230
49798
|
Mention,
|
|
@@ -47232,6 +49800,7 @@ export {
|
|
|
47232
49800
|
SearchReplace,
|
|
47233
49801
|
SignatureBlock,
|
|
47234
49802
|
SourceEditor,
|
|
49803
|
+
SpeechToText,
|
|
47235
49804
|
TRANSLATION_KEYS,
|
|
47236
49805
|
TextDirection,
|
|
47237
49806
|
Toolbar,
|
|
@@ -47241,6 +49810,7 @@ export {
|
|
|
47241
49810
|
getGetFileSrc,
|
|
47242
49811
|
getLocale,
|
|
47243
49812
|
getTranslate,
|
|
49813
|
+
isSpeechRecognitionSupported,
|
|
47244
49814
|
resetTranslate,
|
|
47245
49815
|
setGetFileSrc,
|
|
47246
49816
|
setTranslate
|