@mdaemon/html-editor 1.0.5 → 1.0.7
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 +432 -12
- package/dist/index.d.ts +81 -2
- package/dist/index.js +3261 -157
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3261 -157
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +538 -10
- package/package.json +22 -20
package/dist/index.mjs
CHANGED
|
@@ -2432,7 +2432,7 @@ function isTagRule(rule) {
|
|
|
2432
2432
|
function isStyleRule(rule) {
|
|
2433
2433
|
return rule.style != null;
|
|
2434
2434
|
}
|
|
2435
|
-
|
|
2435
|
+
let DOMParser$1 = class DOMParser2 {
|
|
2436
2436
|
/**
|
|
2437
2437
|
Create a parser that targets the given schema, using the given
|
|
2438
2438
|
parsing rules.
|
|
@@ -2558,9 +2558,9 @@ class DOMParser {
|
|
|
2558
2558
|
[priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).
|
|
2559
2559
|
*/
|
|
2560
2560
|
static fromSchema(schema) {
|
|
2561
|
-
return schema.cached.domParser || (schema.cached.domParser = new
|
|
2561
|
+
return schema.cached.domParser || (schema.cached.domParser = new DOMParser2(schema, DOMParser2.schemaRules(schema)));
|
|
2562
2562
|
}
|
|
2563
|
-
}
|
|
2563
|
+
};
|
|
2564
2564
|
const blockTags = {
|
|
2565
2565
|
address: true,
|
|
2566
2566
|
article: true,
|
|
@@ -3621,11 +3621,11 @@ class Step {
|
|
|
3621
3621
|
register an ID for your step classes. Try to pick something
|
|
3622
3622
|
that's unlikely to clash with steps from other modules.
|
|
3623
3623
|
*/
|
|
3624
|
-
static jsonID(
|
|
3625
|
-
if (
|
|
3626
|
-
throw new RangeError("Duplicate use of step JSON ID " +
|
|
3627
|
-
stepsByID[
|
|
3628
|
-
stepClass.prototype.jsonID =
|
|
3624
|
+
static jsonID(id2, stepClass) {
|
|
3625
|
+
if (id2 in stepsByID)
|
|
3626
|
+
throw new RangeError("Duplicate use of step JSON ID " + id2);
|
|
3627
|
+
stepsByID[id2] = stepClass;
|
|
3628
|
+
stepClass.prototype.jsonID = id2;
|
|
3629
3629
|
return stepClass;
|
|
3630
3630
|
}
|
|
3631
3631
|
}
|
|
@@ -5300,11 +5300,11 @@ class Selection {
|
|
|
5300
5300
|
can be disambiguated. Try to pick something that's unlikely to
|
|
5301
5301
|
clash with classes from other modules.
|
|
5302
5302
|
*/
|
|
5303
|
-
static jsonID(
|
|
5304
|
-
if (
|
|
5305
|
-
throw new RangeError("Duplicate use of selection JSON ID " +
|
|
5306
|
-
classesById[
|
|
5307
|
-
selectionClass.prototype.jsonID =
|
|
5303
|
+
static jsonID(id2, selectionClass) {
|
|
5304
|
+
if (id2 in classesById)
|
|
5305
|
+
throw new RangeError("Duplicate use of selection JSON ID " + id2);
|
|
5306
|
+
classesById[id2] = selectionClass;
|
|
5307
|
+
selectionClass.prototype.jsonID = id2;
|
|
5308
5308
|
return selectionClass;
|
|
5309
5309
|
}
|
|
5310
5310
|
/**
|
|
@@ -9247,7 +9247,7 @@ function parseFromClipboard(view, text, html, plainText, $context) {
|
|
|
9247
9247
|
dom = child;
|
|
9248
9248
|
}
|
|
9249
9249
|
if (!slice2) {
|
|
9250
|
-
let parser = view.someProp("clipboardParser") || view.someProp("domParser") || DOMParser.fromSchema(view.state.schema);
|
|
9250
|
+
let parser = view.someProp("clipboardParser") || view.someProp("domParser") || DOMParser$1.fromSchema(view.state.schema);
|
|
9251
9251
|
slice2 = parser.parseSlice(dom, {
|
|
9252
9252
|
preserveWhitespace: !!(asText || sliceData),
|
|
9253
9253
|
context: $context,
|
|
@@ -11111,7 +11111,7 @@ function parseBetween(view, from_, to_) {
|
|
|
11111
11111
|
}
|
|
11112
11112
|
}
|
|
11113
11113
|
let startDoc = view.state.doc;
|
|
11114
|
-
let parser = view.someProp("domParser") || DOMParser.fromSchema(view.state.schema);
|
|
11114
|
+
let parser = view.someProp("domParser") || DOMParser$1.fromSchema(view.state.schema);
|
|
11115
11115
|
let $from = startDoc.resolve(from2);
|
|
11116
11116
|
let sel = null, doc2 = parser.parse(parent, {
|
|
11117
11117
|
topNode: $from.parent,
|
|
@@ -12428,7 +12428,6 @@ function isMarkInSet(marks, type, attributes = {}) {
|
|
|
12428
12428
|
return !!findMarkInSet(marks, type, attributes);
|
|
12429
12429
|
}
|
|
12430
12430
|
function getMarkRange($pos, type, attributes) {
|
|
12431
|
-
var _a;
|
|
12432
12431
|
if (!$pos || !type) {
|
|
12433
12432
|
return;
|
|
12434
12433
|
}
|
|
@@ -12439,7 +12438,12 @@ function getMarkRange($pos, type, attributes) {
|
|
|
12439
12438
|
if (!start.node || !start.node.marks.some((mark2) => mark2.type === type)) {
|
|
12440
12439
|
return;
|
|
12441
12440
|
}
|
|
12442
|
-
|
|
12441
|
+
if (!attributes) {
|
|
12442
|
+
const firstMark = start.node.marks.find((mark2) => mark2.type === type);
|
|
12443
|
+
if (firstMark) {
|
|
12444
|
+
attributes = firstMark.attrs;
|
|
12445
|
+
}
|
|
12446
|
+
}
|
|
12443
12447
|
const mark = findMarkInSet([...start.node.marks], type, attributes);
|
|
12444
12448
|
if (!mark) {
|
|
12445
12449
|
return;
|
|
@@ -12470,7 +12474,7 @@ function getMarkType(nameOrType, schema) {
|
|
|
12470
12474
|
}
|
|
12471
12475
|
return nameOrType;
|
|
12472
12476
|
}
|
|
12473
|
-
var extendMarkRange = (typeOrName, attributes
|
|
12477
|
+
var extendMarkRange = (typeOrName, attributes) => ({ tr: tr2, state, dispatch }) => {
|
|
12474
12478
|
const type = getMarkType(typeOrName, state.schema);
|
|
12475
12479
|
const { doc: doc2, selection } = tr2;
|
|
12476
12480
|
const { $from, from: from2, to } = selection;
|
|
@@ -12655,9 +12659,9 @@ function createNodeFromContent(content, schema, options) {
|
|
|
12655
12659
|
})
|
|
12656
12660
|
});
|
|
12657
12661
|
if (options.slice) {
|
|
12658
|
-
DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);
|
|
12662
|
+
DOMParser$1.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);
|
|
12659
12663
|
} else {
|
|
12660
|
-
DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);
|
|
12664
|
+
DOMParser$1.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);
|
|
12661
12665
|
}
|
|
12662
12666
|
if (options.errorOnInvalidContent && hasInvalidContent) {
|
|
12663
12667
|
throw new Error("[tiptap error]: Invalid HTML content", {
|
|
@@ -12665,7 +12669,7 @@ function createNodeFromContent(content, schema, options) {
|
|
|
12665
12669
|
});
|
|
12666
12670
|
}
|
|
12667
12671
|
}
|
|
12668
|
-
const parser = DOMParser.fromSchema(schema);
|
|
12672
|
+
const parser = DOMParser$1.fromSchema(schema);
|
|
12669
12673
|
if (options.slice) {
|
|
12670
12674
|
return parser.parseSlice(elementFromString(content), options.parseOptions).content;
|
|
12671
12675
|
}
|
|
@@ -12781,7 +12785,7 @@ var insertContentAt = (position, value, options) => ({ tr: tr2, dispatch, editor
|
|
|
12781
12785
|
const fromSelectionAtStart = $from.parentOffset === 0;
|
|
12782
12786
|
const isTextSelection2 = $fromNode.isText || $fromNode.isTextblock;
|
|
12783
12787
|
const hasContent = $fromNode.content.size > 0;
|
|
12784
|
-
if (fromSelectionAtStart && isTextSelection2 && hasContent) {
|
|
12788
|
+
if (fromSelectionAtStart && isTextSelection2 && hasContent && isOnlyBlockContent) {
|
|
12785
12789
|
from2 = Math.max(0, from2 - 1);
|
|
12786
12790
|
}
|
|
12787
12791
|
tr2.replaceWith(from2, to, newContent);
|
|
@@ -13224,6 +13228,9 @@ function getAttributesFromExtensions(extensions) {
|
|
|
13224
13228
|
keepOnSplit: true,
|
|
13225
13229
|
isRequired: false
|
|
13226
13230
|
};
|
|
13231
|
+
const nodeExtensionTypes = nodeExtensions.filter((ext) => ext.name !== "text").map((ext) => ext.name);
|
|
13232
|
+
const markExtensionTypes = markExtensions.map((ext) => ext.name);
|
|
13233
|
+
const allExtensionTypes = [...nodeExtensionTypes, ...markExtensionTypes];
|
|
13227
13234
|
extensions.forEach((extension) => {
|
|
13228
13235
|
const context = {
|
|
13229
13236
|
name: extension.name,
|
|
@@ -13241,7 +13248,19 @@ function getAttributesFromExtensions(extensions) {
|
|
|
13241
13248
|
}
|
|
13242
13249
|
const globalAttributes = addGlobalAttributes();
|
|
13243
13250
|
globalAttributes.forEach((globalAttribute) => {
|
|
13244
|
-
|
|
13251
|
+
let resolvedTypes;
|
|
13252
|
+
if (Array.isArray(globalAttribute.types)) {
|
|
13253
|
+
resolvedTypes = globalAttribute.types;
|
|
13254
|
+
} else if (globalAttribute.types === "*") {
|
|
13255
|
+
resolvedTypes = allExtensionTypes;
|
|
13256
|
+
} else if (globalAttribute.types === "nodes") {
|
|
13257
|
+
resolvedTypes = nodeExtensionTypes;
|
|
13258
|
+
} else if (globalAttribute.types === "marks") {
|
|
13259
|
+
resolvedTypes = markExtensionTypes;
|
|
13260
|
+
} else {
|
|
13261
|
+
resolvedTypes = [];
|
|
13262
|
+
}
|
|
13263
|
+
resolvedTypes.forEach((type) => {
|
|
13245
13264
|
Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => {
|
|
13246
13265
|
extensionAttributes.push({
|
|
13247
13266
|
type,
|
|
@@ -13290,6 +13309,67 @@ function getAttributesFromExtensions(extensions) {
|
|
|
13290
13309
|
});
|
|
13291
13310
|
return extensionAttributes;
|
|
13292
13311
|
}
|
|
13312
|
+
function splitStyleDeclarations(styles) {
|
|
13313
|
+
const result = [];
|
|
13314
|
+
let current = "";
|
|
13315
|
+
let inSingleQuote = false;
|
|
13316
|
+
let inDoubleQuote = false;
|
|
13317
|
+
let parenDepth = 0;
|
|
13318
|
+
const length = styles.length;
|
|
13319
|
+
for (let i = 0; i < length; i += 1) {
|
|
13320
|
+
const char = styles[i];
|
|
13321
|
+
if (char === "'" && !inDoubleQuote) {
|
|
13322
|
+
inSingleQuote = !inSingleQuote;
|
|
13323
|
+
current += char;
|
|
13324
|
+
continue;
|
|
13325
|
+
}
|
|
13326
|
+
if (char === '"' && !inSingleQuote) {
|
|
13327
|
+
inDoubleQuote = !inDoubleQuote;
|
|
13328
|
+
current += char;
|
|
13329
|
+
continue;
|
|
13330
|
+
}
|
|
13331
|
+
if (!inSingleQuote && !inDoubleQuote) {
|
|
13332
|
+
if (char === "(") {
|
|
13333
|
+
parenDepth += 1;
|
|
13334
|
+
current += char;
|
|
13335
|
+
continue;
|
|
13336
|
+
}
|
|
13337
|
+
if (char === ")" && parenDepth > 0) {
|
|
13338
|
+
parenDepth -= 1;
|
|
13339
|
+
current += char;
|
|
13340
|
+
continue;
|
|
13341
|
+
}
|
|
13342
|
+
if (char === ";" && parenDepth === 0) {
|
|
13343
|
+
result.push(current);
|
|
13344
|
+
current = "";
|
|
13345
|
+
continue;
|
|
13346
|
+
}
|
|
13347
|
+
}
|
|
13348
|
+
current += char;
|
|
13349
|
+
}
|
|
13350
|
+
if (current) {
|
|
13351
|
+
result.push(current);
|
|
13352
|
+
}
|
|
13353
|
+
return result;
|
|
13354
|
+
}
|
|
13355
|
+
function parseStyleEntries(styles) {
|
|
13356
|
+
const pairs = [];
|
|
13357
|
+
const declarations = splitStyleDeclarations(styles || "");
|
|
13358
|
+
const numDeclarations = declarations.length;
|
|
13359
|
+
for (let i = 0; i < numDeclarations; i += 1) {
|
|
13360
|
+
const declaration = declarations[i];
|
|
13361
|
+
const firstColonIndex = declaration.indexOf(":");
|
|
13362
|
+
if (firstColonIndex === -1) {
|
|
13363
|
+
continue;
|
|
13364
|
+
}
|
|
13365
|
+
const property = declaration.slice(0, firstColonIndex).trim();
|
|
13366
|
+
const value = declaration.slice(firstColonIndex + 1).trim();
|
|
13367
|
+
if (property && value) {
|
|
13368
|
+
pairs.push([property, value]);
|
|
13369
|
+
}
|
|
13370
|
+
}
|
|
13371
|
+
return pairs;
|
|
13372
|
+
}
|
|
13293
13373
|
function mergeAttributes(...objects) {
|
|
13294
13374
|
return objects.filter((item) => !!item).reduce((items, item) => {
|
|
13295
13375
|
const mergedAttributes = { ...items };
|
|
@@ -13305,17 +13385,7 @@ function mergeAttributes(...objects) {
|
|
|
13305
13385
|
const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));
|
|
13306
13386
|
mergedAttributes[key] = [...existingClasses, ...insertClasses].join(" ");
|
|
13307
13387
|
} else if (key === "style") {
|
|
13308
|
-
const
|
|
13309
|
-
const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(";").map((style2) => style2.trim()).filter(Boolean) : [];
|
|
13310
|
-
const styleMap = /* @__PURE__ */ new Map();
|
|
13311
|
-
existingStyles.forEach((style2) => {
|
|
13312
|
-
const [property, val] = style2.split(":").map((part) => part.trim());
|
|
13313
|
-
styleMap.set(property, val);
|
|
13314
|
-
});
|
|
13315
|
-
newStyles.forEach((style2) => {
|
|
13316
|
-
const [property, val] = style2.split(":").map((part) => part.trim());
|
|
13317
|
-
styleMap.set(property, val);
|
|
13318
|
-
});
|
|
13388
|
+
const styleMap = new Map([...parseStyleEntries(mergedAttributes[key]), ...parseStyleEntries(value)]);
|
|
13319
13389
|
mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join("; ");
|
|
13320
13390
|
} else {
|
|
13321
13391
|
mergedAttributes[key] = value;
|
|
@@ -13503,7 +13573,7 @@ function getSchemaByResolvedExtensions(extensions, editor) {
|
|
|
13503
13573
|
});
|
|
13504
13574
|
}
|
|
13505
13575
|
function findDuplicates(items) {
|
|
13506
|
-
const filtered = items.filter((
|
|
13576
|
+
const filtered = items.filter((el2, index) => items.indexOf(el2) !== index);
|
|
13507
13577
|
return Array.from(new Set(filtered));
|
|
13508
13578
|
}
|
|
13509
13579
|
function sortExtensions(extensions) {
|
|
@@ -13739,6 +13809,9 @@ function isMarkActive(state, typeOrName, attributes = {}) {
|
|
|
13739
13809
|
const from2 = $from.pos;
|
|
13740
13810
|
const to = $to.pos;
|
|
13741
13811
|
state.doc.nodesBetween(from2, to, (node, pos) => {
|
|
13812
|
+
if (type && node.inlineContent && !node.type.allowsMarkType(type)) {
|
|
13813
|
+
return false;
|
|
13814
|
+
}
|
|
13742
13815
|
if (!node.isText && !node.marks.length) {
|
|
13743
13816
|
return;
|
|
13744
13817
|
}
|
|
@@ -13847,7 +13920,7 @@ function isNodeEmpty(node, {
|
|
|
13847
13920
|
return true;
|
|
13848
13921
|
}
|
|
13849
13922
|
if (node.isText) {
|
|
13850
|
-
return
|
|
13923
|
+
return !/\S/.test((_a = node.text) != null ? _a : "");
|
|
13851
13924
|
}
|
|
13852
13925
|
}
|
|
13853
13926
|
if (node.isText) {
|
|
@@ -14235,6 +14308,16 @@ var joinListForwards = (tr2, listType) => {
|
|
|
14235
14308
|
tr2.join(after);
|
|
14236
14309
|
return true;
|
|
14237
14310
|
};
|
|
14311
|
+
function createInnerSelectionForWholeDocList(tr2) {
|
|
14312
|
+
const doc2 = tr2.doc;
|
|
14313
|
+
const list = doc2.firstChild;
|
|
14314
|
+
if (!list) {
|
|
14315
|
+
return null;
|
|
14316
|
+
}
|
|
14317
|
+
const from2 = 1;
|
|
14318
|
+
const to = list.nodeSize - 1;
|
|
14319
|
+
return TextSelection.create(doc2, from2, to);
|
|
14320
|
+
}
|
|
14238
14321
|
var toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr: tr2, state, dispatch, chain, commands, can }) => {
|
|
14239
14322
|
const { extensions, splittableMarks } = editor.extensionManager;
|
|
14240
14323
|
const listType = getNodeType(listTypeOrName, state.schema);
|
|
@@ -14247,13 +14330,36 @@ var toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) =>
|
|
|
14247
14330
|
return false;
|
|
14248
14331
|
}
|
|
14249
14332
|
const parentList = findParentNode((node) => isList(node.type.name, extensions))(selection);
|
|
14250
|
-
|
|
14251
|
-
|
|
14333
|
+
const isAllSelection = selection.from === 0 && selection.to === state.doc.content.size;
|
|
14334
|
+
const topLevelNodes = state.doc.content.content;
|
|
14335
|
+
const soleTopLevelNode = topLevelNodes.length === 1 ? topLevelNodes[0] : null;
|
|
14336
|
+
const allSelectionList = isAllSelection && soleTopLevelNode && isList(soleTopLevelNode.type.name, extensions) ? {
|
|
14337
|
+
node: soleTopLevelNode,
|
|
14338
|
+
pos: 0
|
|
14339
|
+
} : null;
|
|
14340
|
+
const currentList = parentList != null ? parentList : allSelectionList;
|
|
14341
|
+
const isInsideExistingList = !!parentList && range.depth >= 1 && range.depth - parentList.depth <= 1;
|
|
14342
|
+
const hasWholeDocSelectedList = !!allSelectionList;
|
|
14343
|
+
if ((isInsideExistingList || hasWholeDocSelectedList) && currentList) {
|
|
14344
|
+
if (currentList.node.type === listType) {
|
|
14345
|
+
if (isAllSelection && hasWholeDocSelectedList) {
|
|
14346
|
+
return chain().command(({ tr: trx, dispatch: disp }) => {
|
|
14347
|
+
const nextSelection = createInnerSelectionForWholeDocList(trx);
|
|
14348
|
+
if (!nextSelection) {
|
|
14349
|
+
return false;
|
|
14350
|
+
}
|
|
14351
|
+
trx.setSelection(nextSelection);
|
|
14352
|
+
if (disp) {
|
|
14353
|
+
disp(trx);
|
|
14354
|
+
}
|
|
14355
|
+
return true;
|
|
14356
|
+
}).liftListItem(itemType).run();
|
|
14357
|
+
}
|
|
14252
14358
|
return commands.liftListItem(itemType);
|
|
14253
14359
|
}
|
|
14254
|
-
if (isList(
|
|
14360
|
+
if (isList(currentList.node.type.name, extensions) && listType.validContent(currentList.node.content)) {
|
|
14255
14361
|
return chain().command(() => {
|
|
14256
|
-
tr2.setNodeMarkup(
|
|
14362
|
+
tr2.setNodeMarkup(currentList.pos, listType);
|
|
14257
14363
|
return true;
|
|
14258
14364
|
}).command(() => joinListBackwards(tr2, listType)).command(() => joinListForwards(tr2, listType)).run();
|
|
14259
14365
|
}
|
|
@@ -15247,6 +15353,39 @@ var ExtensionManager = class {
|
|
|
15247
15353
|
};
|
|
15248
15354
|
}, baseDispatch);
|
|
15249
15355
|
}
|
|
15356
|
+
/**
|
|
15357
|
+
* Get the composed transformPastedHTML function from all extensions.
|
|
15358
|
+
* @param baseTransform The base transform function (e.g. from the editor props)
|
|
15359
|
+
* @returns A composed transform function that chains all extension transforms
|
|
15360
|
+
*/
|
|
15361
|
+
transformPastedHTML(baseTransform) {
|
|
15362
|
+
const { editor } = this;
|
|
15363
|
+
const extensions = sortExtensions([...this.extensions]);
|
|
15364
|
+
return extensions.reduce(
|
|
15365
|
+
(transform, extension) => {
|
|
15366
|
+
const context = {
|
|
15367
|
+
name: extension.name,
|
|
15368
|
+
options: extension.options,
|
|
15369
|
+
storage: this.editor.extensionStorage[extension.name],
|
|
15370
|
+
editor,
|
|
15371
|
+
type: getSchemaTypeByName(extension.name, this.schema)
|
|
15372
|
+
};
|
|
15373
|
+
const extensionTransform = getExtensionField(
|
|
15374
|
+
extension,
|
|
15375
|
+
"transformPastedHTML",
|
|
15376
|
+
context
|
|
15377
|
+
);
|
|
15378
|
+
if (!extensionTransform) {
|
|
15379
|
+
return transform;
|
|
15380
|
+
}
|
|
15381
|
+
return (html, view) => {
|
|
15382
|
+
const transformedHtml = transform(html, view);
|
|
15383
|
+
return extensionTransform.call(context, transformedHtml);
|
|
15384
|
+
};
|
|
15385
|
+
},
|
|
15386
|
+
baseTransform || ((html) => html)
|
|
15387
|
+
);
|
|
15388
|
+
}
|
|
15250
15389
|
get markViews() {
|
|
15251
15390
|
const { editor } = this;
|
|
15252
15391
|
const { markExtensions } = splitExtensions(this.extensions);
|
|
@@ -15465,7 +15604,7 @@ var Delete = Extension.create({
|
|
|
15465
15604
|
const newEnd = mapping.slice(index).map(step.to);
|
|
15466
15605
|
const oldStart = mapping.invert().map(newStart, -1);
|
|
15467
15606
|
const oldEnd = mapping.invert().map(newEnd);
|
|
15468
|
-
const foundBeforeMark = (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark));
|
|
15607
|
+
const foundBeforeMark = newStart > 0 ? (_a3 = nextTransaction.doc.nodeAt(newStart - 1)) == null ? void 0 : _a3.marks.some((mark) => mark.eq(step.mark)) : false;
|
|
15469
15608
|
const foundAfterMark = (_b3 = nextTransaction.doc.nodeAt(newEnd)) == null ? void 0 : _b3.marks.some((mark) => mark.eq(step.mark));
|
|
15470
15609
|
this.editor.emit("delete", {
|
|
15471
15610
|
type: "mark",
|
|
@@ -16102,13 +16241,13 @@ var Editor = class extends EventEmitter {
|
|
|
16102
16241
|
/**
|
|
16103
16242
|
* Attach the editor to the DOM, creating a new editor view.
|
|
16104
16243
|
*/
|
|
16105
|
-
mount(
|
|
16244
|
+
mount(el2) {
|
|
16106
16245
|
if (typeof document === "undefined") {
|
|
16107
16246
|
throw new Error(
|
|
16108
16247
|
`[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`
|
|
16109
16248
|
);
|
|
16110
16249
|
}
|
|
16111
|
-
this.createView(
|
|
16250
|
+
this.createView(el2);
|
|
16112
16251
|
this.emit("mount", { editor: this });
|
|
16113
16252
|
if (this.css && !document.head.contains(this.css)) {
|
|
16114
16253
|
document.head.appendChild(this.css);
|
|
@@ -16217,7 +16356,7 @@ var Editor = class extends EventEmitter {
|
|
|
16217
16356
|
return this.options.editable && this.view && this.view.editable;
|
|
16218
16357
|
}
|
|
16219
16358
|
/**
|
|
16220
|
-
* Returns the editor
|
|
16359
|
+
* Returns the editor view.
|
|
16221
16360
|
*/
|
|
16222
16361
|
get view() {
|
|
16223
16362
|
if (this.editorView) {
|
|
@@ -16385,6 +16524,8 @@ var Editor = class extends EventEmitter {
|
|
|
16385
16524
|
const { editorProps, enableExtensionDispatchTransaction } = this.options;
|
|
16386
16525
|
const baseDispatch = editorProps.dispatchTransaction || this.dispatchTransaction.bind(this);
|
|
16387
16526
|
const dispatch = enableExtensionDispatchTransaction ? this.extensionManager.dispatchTransaction(baseDispatch) : baseDispatch;
|
|
16527
|
+
const baseTransformPastedHTML = editorProps.transformPastedHTML;
|
|
16528
|
+
const transformPastedHTML = this.extensionManager.transformPastedHTML(baseTransformPastedHTML);
|
|
16388
16529
|
this.editorView = new EditorView(element, {
|
|
16389
16530
|
...editorProps,
|
|
16390
16531
|
attributes: {
|
|
@@ -16393,6 +16534,7 @@ var Editor = class extends EventEmitter {
|
|
|
16393
16534
|
...editorProps == null ? void 0 : editorProps.attributes
|
|
16394
16535
|
},
|
|
16395
16536
|
dispatchTransaction: dispatch,
|
|
16537
|
+
transformPastedHTML,
|
|
16396
16538
|
state: this.editorState,
|
|
16397
16539
|
markViews: this.extensionManager.markViews,
|
|
16398
16540
|
nodeViews: this.extensionManager.nodeViews
|
|
@@ -16900,7 +17042,7 @@ var ResizableNodeView = class {
|
|
|
16900
17042
|
const element = document.createElement("div");
|
|
16901
17043
|
element.dataset.resizeContainer = "";
|
|
16902
17044
|
element.dataset.node = this.node.type.name;
|
|
16903
|
-
element.style.display = "flex";
|
|
17045
|
+
element.style.display = this.node.type.isInline ? "inline-flex" : "flex";
|
|
16904
17046
|
if (this.classNames.container) {
|
|
16905
17047
|
element.className = this.classNames.container;
|
|
16906
17048
|
}
|
|
@@ -17015,7 +17157,7 @@ var ResizableNodeView = class {
|
|
|
17015
17157
|
* Cleans up the handle map and removes each handle element from the DOM.
|
|
17016
17158
|
*/
|
|
17017
17159
|
removeHandles() {
|
|
17018
|
-
this.handleMap.forEach((
|
|
17160
|
+
this.handleMap.forEach((el2) => el2.remove());
|
|
17019
17161
|
this.handleMap.clear();
|
|
17020
17162
|
}
|
|
17021
17163
|
/**
|
|
@@ -17702,17 +17844,21 @@ function renderNestedMarkdownContent(node, h2, prefixOrGenerator, ctx) {
|
|
|
17702
17844
|
const prefix = typeof prefixOrGenerator === "function" ? prefixOrGenerator(ctx) : prefixOrGenerator;
|
|
17703
17845
|
const [content, ...children] = node.content;
|
|
17704
17846
|
const mainContent = h2.renderChildren([content]);
|
|
17705
|
-
|
|
17847
|
+
let output = `${prefix}${mainContent}`;
|
|
17706
17848
|
if (children && children.length > 0) {
|
|
17707
|
-
children.forEach((child) => {
|
|
17708
|
-
|
|
17709
|
-
|
|
17710
|
-
|
|
17711
|
-
|
|
17849
|
+
children.forEach((child, index) => {
|
|
17850
|
+
var _a, _b;
|
|
17851
|
+
const childContent = (_b = (_a = h2.renderChild) == null ? void 0 : _a.call(h2, child, index + 1)) != null ? _b : h2.renderChildren([child]);
|
|
17852
|
+
if (childContent !== void 0 && childContent !== null) {
|
|
17853
|
+
const indentedChild = childContent.split("\n").map((line) => line ? h2.indent(line) : h2.indent("")).join("\n");
|
|
17854
|
+
output += child.type === "paragraph" ? `
|
|
17855
|
+
|
|
17856
|
+
${indentedChild}` : `
|
|
17857
|
+
${indentedChild}`;
|
|
17712
17858
|
}
|
|
17713
17859
|
});
|
|
17714
17860
|
}
|
|
17715
|
-
return output
|
|
17861
|
+
return output;
|
|
17716
17862
|
}
|
|
17717
17863
|
function updateMarkViewAttributes(checkMark, editor, attrs = {}) {
|
|
17718
17864
|
const { state } = editor;
|
|
@@ -17802,7 +17948,10 @@ function markPasteRule(config) {
|
|
|
17802
17948
|
}
|
|
17803
17949
|
markEnd = range.from + startSpaces + captureGroup.length;
|
|
17804
17950
|
tr2.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));
|
|
17805
|
-
|
|
17951
|
+
const isMatchAtEndOfText = match.index !== void 0 && match.input !== void 0 && match.index + match[0].length >= match.input.length;
|
|
17952
|
+
if (!isMatchAtEndOfText) {
|
|
17953
|
+
tr2.removeStoredMark(config.type);
|
|
17954
|
+
}
|
|
17806
17955
|
}
|
|
17807
17956
|
}
|
|
17808
17957
|
});
|
|
@@ -17838,7 +17987,9 @@ var Blockquote = Node3.create({
|
|
|
17838
17987
|
return /* @__PURE__ */ h("blockquote", { ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), children: /* @__PURE__ */ h("slot", {}) });
|
|
17839
17988
|
},
|
|
17840
17989
|
parseMarkdown: (token, helpers) => {
|
|
17841
|
-
|
|
17990
|
+
var _a;
|
|
17991
|
+
const parseBlockChildren = (_a = helpers.parseBlockChildren) != null ? _a : helpers.parseChildren;
|
|
17992
|
+
return helpers.createNode("blockquote", void 0, parseBlockChildren(token.tokens || []));
|
|
17842
17993
|
},
|
|
17843
17994
|
renderMarkdown: (node, h2) => {
|
|
17844
17995
|
if (!node.content) {
|
|
@@ -17846,8 +17997,9 @@ var Blockquote = Node3.create({
|
|
|
17846
17997
|
}
|
|
17847
17998
|
const prefix = ">";
|
|
17848
17999
|
const result = [];
|
|
17849
|
-
node.content.forEach((child) => {
|
|
17850
|
-
|
|
18000
|
+
node.content.forEach((child, index) => {
|
|
18001
|
+
var _a, _b;
|
|
18002
|
+
const childContent = (_b = (_a = h2.renderChild) == null ? void 0 : _a.call(h2, child, index)) != null ? _b : h2.renderChildren([child]);
|
|
17851
18003
|
const lines = childContent.split("\n");
|
|
17852
18004
|
const linesWithPrefix = lines.map((line) => {
|
|
17853
18005
|
if (line.trim() === "") {
|
|
@@ -17925,6 +18077,12 @@ var Bold = Mark2.create({
|
|
|
17925
18077
|
parseMarkdown: (token, helpers) => {
|
|
17926
18078
|
return helpers.applyMark("bold", helpers.parseInline(token.tokens || []));
|
|
17927
18079
|
},
|
|
18080
|
+
markdownOptions: {
|
|
18081
|
+
htmlReopen: {
|
|
18082
|
+
open: "<strong>",
|
|
18083
|
+
close: "</strong>"
|
|
18084
|
+
}
|
|
18085
|
+
},
|
|
17928
18086
|
renderMarkdown: (node, h2) => {
|
|
17929
18087
|
return `**${h2.renderChildren(node)}**`;
|
|
17930
18088
|
},
|
|
@@ -18101,8 +18259,8 @@ var CodeBlock = Node3.create({
|
|
|
18101
18259
|
},
|
|
18102
18260
|
markdownTokenName: "code",
|
|
18103
18261
|
parseMarkdown: (token, helpers) => {
|
|
18104
|
-
var _a;
|
|
18105
|
-
if (((_a = token.raw) == null ? void 0 : _a.startsWith("```")) === false && token.codeBlockStyle !== "indented") {
|
|
18262
|
+
var _a, _b;
|
|
18263
|
+
if (((_a = token.raw) == null ? void 0 : _a.startsWith("```")) === false && ((_b = token.raw) == null ? void 0 : _b.startsWith("~~~")) === false && token.codeBlockStyle !== "indented") {
|
|
18106
18264
|
return [];
|
|
18107
18265
|
}
|
|
18108
18266
|
return helpers.createNode(
|
|
@@ -18344,7 +18502,6 @@ var CodeBlock = Node3.create({
|
|
|
18344
18502
|
];
|
|
18345
18503
|
}
|
|
18346
18504
|
});
|
|
18347
|
-
var index_default = CodeBlock;
|
|
18348
18505
|
var Document = Node3.create({
|
|
18349
18506
|
name: "doc",
|
|
18350
18507
|
topNode: true,
|
|
@@ -18621,6 +18778,12 @@ var Italic = Mark2.create({
|
|
|
18621
18778
|
parseMarkdown: (token, helpers) => {
|
|
18622
18779
|
return helpers.applyMark("italic", helpers.parseInline(token.tokens || []));
|
|
18623
18780
|
},
|
|
18781
|
+
markdownOptions: {
|
|
18782
|
+
htmlReopen: {
|
|
18783
|
+
open: "<em>",
|
|
18784
|
+
close: "</em>"
|
|
18785
|
+
}
|
|
18786
|
+
},
|
|
18624
18787
|
renderMarkdown: (node, h2) => {
|
|
18625
18788
|
return `*${h2.renderChildren(node)}*`;
|
|
18626
18789
|
},
|
|
@@ -18869,7 +19032,7 @@ State.prototype = {
|
|
|
18869
19032
|
}
|
|
18870
19033
|
};
|
|
18871
19034
|
const ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);
|
|
18872
|
-
const tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);
|
|
19035
|
+
const tr$1 = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);
|
|
18873
19036
|
const ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);
|
|
18874
19037
|
const tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);
|
|
18875
19038
|
const WORD = "WORD";
|
|
@@ -19047,58 +19210,58 @@ function init$2(customSchemes = []) {
|
|
|
19047
19210
|
tt(Start, "_", UNDERSCORE);
|
|
19048
19211
|
tt(Start, "\\", BACKSLASH);
|
|
19049
19212
|
tt(Start, "・", FULLWIDTHMIDDLEDOT);
|
|
19050
|
-
const Num = tr(Start, DIGIT, NUM, {
|
|
19213
|
+
const Num = tr$1(Start, DIGIT, NUM, {
|
|
19051
19214
|
[numeric]: true
|
|
19052
19215
|
});
|
|
19053
|
-
tr(Num, DIGIT, Num);
|
|
19054
|
-
const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {
|
|
19216
|
+
tr$1(Num, DIGIT, Num);
|
|
19217
|
+
const Asciinumeric = tr$1(Num, ASCII_LETTER, ASCIINUMERICAL, {
|
|
19055
19218
|
[asciinumeric]: true
|
|
19056
19219
|
});
|
|
19057
|
-
const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {
|
|
19220
|
+
const Alphanumeric = tr$1(Num, LETTER, ALPHANUMERICAL, {
|
|
19058
19221
|
[alphanumeric]: true
|
|
19059
19222
|
});
|
|
19060
|
-
const Word = tr(Start, ASCII_LETTER, WORD, {
|
|
19223
|
+
const Word = tr$1(Start, ASCII_LETTER, WORD, {
|
|
19061
19224
|
[ascii]: true
|
|
19062
19225
|
});
|
|
19063
|
-
tr(Word, DIGIT, Asciinumeric);
|
|
19064
|
-
tr(Word, ASCII_LETTER, Word);
|
|
19065
|
-
tr(Asciinumeric, DIGIT, Asciinumeric);
|
|
19066
|
-
tr(Asciinumeric, ASCII_LETTER, Asciinumeric);
|
|
19067
|
-
const UWord = tr(Start, LETTER, UWORD, {
|
|
19226
|
+
tr$1(Word, DIGIT, Asciinumeric);
|
|
19227
|
+
tr$1(Word, ASCII_LETTER, Word);
|
|
19228
|
+
tr$1(Asciinumeric, DIGIT, Asciinumeric);
|
|
19229
|
+
tr$1(Asciinumeric, ASCII_LETTER, Asciinumeric);
|
|
19230
|
+
const UWord = tr$1(Start, LETTER, UWORD, {
|
|
19068
19231
|
[alpha]: true
|
|
19069
19232
|
});
|
|
19070
|
-
tr(UWord, ASCII_LETTER);
|
|
19071
|
-
tr(UWord, DIGIT, Alphanumeric);
|
|
19072
|
-
tr(UWord, LETTER, UWord);
|
|
19073
|
-
tr(Alphanumeric, DIGIT, Alphanumeric);
|
|
19074
|
-
tr(Alphanumeric, ASCII_LETTER);
|
|
19075
|
-
tr(Alphanumeric, LETTER, Alphanumeric);
|
|
19233
|
+
tr$1(UWord, ASCII_LETTER);
|
|
19234
|
+
tr$1(UWord, DIGIT, Alphanumeric);
|
|
19235
|
+
tr$1(UWord, LETTER, UWord);
|
|
19236
|
+
tr$1(Alphanumeric, DIGIT, Alphanumeric);
|
|
19237
|
+
tr$1(Alphanumeric, ASCII_LETTER);
|
|
19238
|
+
tr$1(Alphanumeric, LETTER, Alphanumeric);
|
|
19076
19239
|
const Nl2 = tt(Start, LF, NL, {
|
|
19077
19240
|
[whitespace]: true
|
|
19078
19241
|
});
|
|
19079
19242
|
const Cr = tt(Start, CR, WS, {
|
|
19080
19243
|
[whitespace]: true
|
|
19081
19244
|
});
|
|
19082
|
-
const Ws = tr(Start, SPACE, WS, {
|
|
19245
|
+
const Ws = tr$1(Start, SPACE, WS, {
|
|
19083
19246
|
[whitespace]: true
|
|
19084
19247
|
});
|
|
19085
19248
|
tt(Start, OBJECT_REPLACEMENT, Ws);
|
|
19086
19249
|
tt(Cr, LF, Nl2);
|
|
19087
19250
|
tt(Cr, OBJECT_REPLACEMENT, Ws);
|
|
19088
|
-
tr(Cr, SPACE, Ws);
|
|
19251
|
+
tr$1(Cr, SPACE, Ws);
|
|
19089
19252
|
tt(Ws, CR);
|
|
19090
19253
|
tt(Ws, LF);
|
|
19091
|
-
tr(Ws, SPACE, Ws);
|
|
19254
|
+
tr$1(Ws, SPACE, Ws);
|
|
19092
19255
|
tt(Ws, OBJECT_REPLACEMENT, Ws);
|
|
19093
|
-
const Emoji = tr(Start, EMOJI, EMOJI$1, {
|
|
19256
|
+
const Emoji = tr$1(Start, EMOJI, EMOJI$1, {
|
|
19094
19257
|
[emoji]: true
|
|
19095
19258
|
});
|
|
19096
19259
|
tt(Emoji, "#");
|
|
19097
|
-
tr(Emoji, EMOJI, Emoji);
|
|
19260
|
+
tr$1(Emoji, EMOJI, Emoji);
|
|
19098
19261
|
tt(Emoji, EMOJI_VARIATION, Emoji);
|
|
19099
19262
|
const EmojiJoiner = tt(Emoji, EMOJI_JOINER);
|
|
19100
19263
|
tt(EmojiJoiner, "#");
|
|
19101
|
-
tr(EmojiJoiner, EMOJI, Emoji);
|
|
19264
|
+
tr$1(EmojiJoiner, EMOJI, Emoji);
|
|
19102
19265
|
const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];
|
|
19103
19266
|
const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];
|
|
19104
19267
|
for (let i = 0; i < tlds.length; i++) {
|
|
@@ -20319,14 +20482,16 @@ var ListItem = Node3.create({
|
|
|
20319
20482
|
},
|
|
20320
20483
|
markdownTokenName: "list_item",
|
|
20321
20484
|
parseMarkdown: (token, helpers) => {
|
|
20485
|
+
var _a;
|
|
20322
20486
|
if (token.type !== "list_item") {
|
|
20323
20487
|
return [];
|
|
20324
20488
|
}
|
|
20489
|
+
const parseBlockChildren = (_a = helpers.parseBlockChildren) != null ? _a : helpers.parseChildren;
|
|
20325
20490
|
let content = [];
|
|
20326
20491
|
if (token.tokens && token.tokens.length > 0) {
|
|
20327
20492
|
const hasParagraphTokens = token.tokens.some((t) => t.type === "paragraph");
|
|
20328
20493
|
if (hasParagraphTokens) {
|
|
20329
|
-
content =
|
|
20494
|
+
content = parseBlockChildren(token.tokens);
|
|
20330
20495
|
} else {
|
|
20331
20496
|
const firstToken = token.tokens[0];
|
|
20332
20497
|
if (firstToken && firstToken.type === "text" && firstToken.tokens && firstToken.tokens.length > 0) {
|
|
@@ -20339,11 +20504,11 @@ var ListItem = Node3.create({
|
|
|
20339
20504
|
];
|
|
20340
20505
|
if (token.tokens.length > 1) {
|
|
20341
20506
|
const remainingTokens = token.tokens.slice(1);
|
|
20342
|
-
const additionalContent =
|
|
20507
|
+
const additionalContent = parseBlockChildren(remainingTokens);
|
|
20343
20508
|
content.push(...additionalContent);
|
|
20344
20509
|
}
|
|
20345
20510
|
} else {
|
|
20346
|
-
content =
|
|
20511
|
+
content = parseBlockChildren(token.tokens);
|
|
20347
20512
|
}
|
|
20348
20513
|
}
|
|
20349
20514
|
}
|
|
@@ -21261,18 +21426,22 @@ var Paragraph = Node3.create({
|
|
|
21261
21426
|
return helpers.parseChildren([tokens[0]]);
|
|
21262
21427
|
}
|
|
21263
21428
|
const content = helpers.parseInline(tokens);
|
|
21264
|
-
|
|
21429
|
+
const hasExplicitEmptyParagraphMarker = tokens.length === 1 && tokens[0].type === "text" && (tokens[0].raw === EMPTY_PARAGRAPH_MARKDOWN || tokens[0].text === EMPTY_PARAGRAPH_MARKDOWN || tokens[0].raw === NBSP_CHAR || tokens[0].text === NBSP_CHAR);
|
|
21430
|
+
if (hasExplicitEmptyParagraphMarker && content.length === 1 && content[0].type === "text" && (content[0].text === EMPTY_PARAGRAPH_MARKDOWN || content[0].text === NBSP_CHAR)) {
|
|
21265
21431
|
return helpers.createNode("paragraph", void 0, []);
|
|
21266
21432
|
}
|
|
21267
21433
|
return helpers.createNode("paragraph", void 0, content);
|
|
21268
21434
|
},
|
|
21269
|
-
renderMarkdown: (node, h2) => {
|
|
21435
|
+
renderMarkdown: (node, h2, ctx) => {
|
|
21436
|
+
var _a, _b;
|
|
21270
21437
|
if (!node) {
|
|
21271
21438
|
return "";
|
|
21272
21439
|
}
|
|
21273
21440
|
const content = Array.isArray(node.content) ? node.content : [];
|
|
21274
21441
|
if (content.length === 0) {
|
|
21275
|
-
|
|
21442
|
+
const previousContent = Array.isArray((_a = ctx == null ? void 0 : ctx.previousNode) == null ? void 0 : _a.content) ? ctx.previousNode.content : [];
|
|
21443
|
+
const previousNodeIsEmptyParagraph = ((_b = ctx == null ? void 0 : ctx.previousNode) == null ? void 0 : _b.type) === "paragraph" && previousContent.length === 0;
|
|
21444
|
+
return previousNodeIsEmptyParagraph ? EMPTY_PARAGRAPH_MARKDOWN : "";
|
|
21276
21445
|
}
|
|
21277
21446
|
return h2.renderChildren(content);
|
|
21278
21447
|
},
|
|
@@ -22531,6 +22700,9 @@ var Placeholder = Extension.create({
|
|
|
22531
22700
|
doc2.descendants((node, pos) => {
|
|
22532
22701
|
const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;
|
|
22533
22702
|
const isEmpty2 = !node.isLeaf && isNodeEmpty(node);
|
|
22703
|
+
if (!node.type.isTextblock) {
|
|
22704
|
+
return this.options.includeChildren;
|
|
22705
|
+
}
|
|
22534
22706
|
if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty2) {
|
|
22535
22707
|
const classes = [this.options.emptyNodeClass];
|
|
22536
22708
|
if (isEmptyDoc) {
|
|
@@ -22584,6 +22756,7 @@ Extension.create({
|
|
|
22584
22756
|
];
|
|
22585
22757
|
}
|
|
22586
22758
|
});
|
|
22759
|
+
var skipTrailingNodeMeta = "skipTrailingNode";
|
|
22587
22760
|
function nodeEqualsType({ types, node }) {
|
|
22588
22761
|
return node && Array.isArray(types) && types.includes(node.type) || (node == null ? void 0 : node.type) === types;
|
|
22589
22762
|
}
|
|
@@ -22603,11 +22776,14 @@ var TrailingNode = Extension.create({
|
|
|
22603
22776
|
return [
|
|
22604
22777
|
new Plugin({
|
|
22605
22778
|
key: plugin,
|
|
22606
|
-
appendTransaction: (
|
|
22779
|
+
appendTransaction: (transactions, __, state) => {
|
|
22607
22780
|
const { doc: doc2, tr: tr2, schema } = state;
|
|
22608
22781
|
const shouldInsertNodeAtEnd = plugin.getState(state);
|
|
22609
22782
|
const endPosition = doc2.content.size;
|
|
22610
22783
|
const type = schema.nodes[defaultNode];
|
|
22784
|
+
if (transactions.some((transaction) => transaction.getMeta(skipTrailingNodeMeta))) {
|
|
22785
|
+
return;
|
|
22786
|
+
}
|
|
22611
22787
|
if (!shouldInsertNodeAtEnd) {
|
|
22612
22788
|
return;
|
|
22613
22789
|
}
|
|
@@ -23302,7 +23478,7 @@ var Image = Node3.create({
|
|
|
23302
23478
|
}
|
|
23303
23479
|
const { directions, minWidth, minHeight, alwaysPreserveAspectRatio } = this.options.resize;
|
|
23304
23480
|
return ({ node, getPos, HTMLAttributes, editor }) => {
|
|
23305
|
-
const
|
|
23481
|
+
const el2 = document.createElement("img");
|
|
23306
23482
|
Object.entries(HTMLAttributes).forEach(([key, value]) => {
|
|
23307
23483
|
if (value != null) {
|
|
23308
23484
|
switch (key) {
|
|
@@ -23310,20 +23486,20 @@ var Image = Node3.create({
|
|
|
23310
23486
|
case "height":
|
|
23311
23487
|
break;
|
|
23312
23488
|
default:
|
|
23313
|
-
|
|
23489
|
+
el2.setAttribute(key, value);
|
|
23314
23490
|
break;
|
|
23315
23491
|
}
|
|
23316
23492
|
}
|
|
23317
23493
|
});
|
|
23318
|
-
|
|
23494
|
+
el2.src = HTMLAttributes.src;
|
|
23319
23495
|
const nodeView = new ResizableNodeView({
|
|
23320
|
-
element:
|
|
23496
|
+
element: el2,
|
|
23321
23497
|
editor,
|
|
23322
23498
|
node,
|
|
23323
23499
|
getPos,
|
|
23324
23500
|
onResize: (width, height) => {
|
|
23325
|
-
|
|
23326
|
-
|
|
23501
|
+
el2.style.width = `${width}px`;
|
|
23502
|
+
el2.style.height = `${height}px`;
|
|
23327
23503
|
},
|
|
23328
23504
|
onCommit: (width, height) => {
|
|
23329
23505
|
const pos = getPos();
|
|
@@ -23353,7 +23529,7 @@ var Image = Node3.create({
|
|
|
23353
23529
|
const dom = nodeView.dom;
|
|
23354
23530
|
dom.style.visibility = "hidden";
|
|
23355
23531
|
dom.style.pointerEvents = "none";
|
|
23356
|
-
|
|
23532
|
+
el2.onload = () => {
|
|
23357
23533
|
dom.style.visibility = "";
|
|
23358
23534
|
dom.style.pointerEvents = "";
|
|
23359
23535
|
};
|
|
@@ -25105,6 +25281,35 @@ function tableEditing({ allowTableNodeSelection = false } = {}) {
|
|
|
25105
25281
|
}
|
|
25106
25282
|
});
|
|
25107
25283
|
}
|
|
25284
|
+
function normalizeTableCellAlign(value) {
|
|
25285
|
+
if (value === "left" || value === "right" || value === "center") {
|
|
25286
|
+
return value;
|
|
25287
|
+
}
|
|
25288
|
+
return null;
|
|
25289
|
+
}
|
|
25290
|
+
function parseAlign(element) {
|
|
25291
|
+
const styleAlign = (element.style.textAlign || "").trim().toLowerCase();
|
|
25292
|
+
const attrAlign = (element.getAttribute("align") || "").trim().toLowerCase();
|
|
25293
|
+
const align = styleAlign || attrAlign;
|
|
25294
|
+
return normalizeTableCellAlign(align);
|
|
25295
|
+
}
|
|
25296
|
+
function normalizeTableCellAlignFromAttributes(attributes) {
|
|
25297
|
+
return normalizeTableCellAlign(attributes == null ? void 0 : attributes.align);
|
|
25298
|
+
}
|
|
25299
|
+
function createAlignAttribute() {
|
|
25300
|
+
return {
|
|
25301
|
+
default: null,
|
|
25302
|
+
parseHTML: (element) => parseAlign(element),
|
|
25303
|
+
renderHTML: (attributes) => {
|
|
25304
|
+
if (!attributes.align) {
|
|
25305
|
+
return {};
|
|
25306
|
+
}
|
|
25307
|
+
return {
|
|
25308
|
+
style: `text-align: ${attributes.align}`
|
|
25309
|
+
};
|
|
25310
|
+
}
|
|
25311
|
+
};
|
|
25312
|
+
}
|
|
25108
25313
|
var TableCell = Node3.create({
|
|
25109
25314
|
name: "tableCell",
|
|
25110
25315
|
addOptions() {
|
|
@@ -25137,7 +25342,8 @@ var TableCell = Node3.create({
|
|
|
25137
25342
|
}
|
|
25138
25343
|
return value;
|
|
25139
25344
|
}
|
|
25140
|
-
}
|
|
25345
|
+
},
|
|
25346
|
+
align: createAlignAttribute()
|
|
25141
25347
|
};
|
|
25142
25348
|
},
|
|
25143
25349
|
tableRole: "cell",
|
|
@@ -25172,7 +25378,8 @@ var TableHeader = Node3.create({
|
|
|
25172
25378
|
const value = colwidth ? colwidth.split(",").map((width) => parseInt(width, 10)) : null;
|
|
25173
25379
|
return value;
|
|
25174
25380
|
}
|
|
25175
|
-
}
|
|
25381
|
+
},
|
|
25382
|
+
align: createAlignAttribute()
|
|
25176
25383
|
};
|
|
25177
25384
|
},
|
|
25178
25385
|
tableRole: "header_cell",
|
|
@@ -25400,7 +25607,8 @@ function renderTableToMarkdown(node, h2, options = {}) {
|
|
|
25400
25607
|
}
|
|
25401
25608
|
const text = collapseWhitespace(raw);
|
|
25402
25609
|
const isHeader = cellNode.type === "tableHeader";
|
|
25403
|
-
|
|
25610
|
+
const align = normalizeTableCellAlignFromAttributes(cellNode.attrs);
|
|
25611
|
+
cells.push({ text, isHeader, align });
|
|
25404
25612
|
});
|
|
25405
25613
|
}
|
|
25406
25614
|
rows.push(cells);
|
|
@@ -25426,11 +25634,33 @@ function renderTableToMarkdown(node, h2, options = {}) {
|
|
|
25426
25634
|
const pad = (s, width) => s + " ".repeat(Math.max(0, width - s.length));
|
|
25427
25635
|
const headerRow = rows[0];
|
|
25428
25636
|
const hasHeader = headerRow.some((c2) => c2.isHeader);
|
|
25637
|
+
const colAlignments = new Array(columnCount).fill(null);
|
|
25638
|
+
rows.forEach((r2) => {
|
|
25639
|
+
var _a2;
|
|
25640
|
+
for (let i = 0; i < columnCount; i += 1) {
|
|
25641
|
+
if (!colAlignments[i] && ((_a2 = r2[i]) == null ? void 0 : _a2.align)) {
|
|
25642
|
+
colAlignments[i] = r2[i].align;
|
|
25643
|
+
}
|
|
25644
|
+
}
|
|
25645
|
+
});
|
|
25429
25646
|
let out = "\n";
|
|
25430
25647
|
const headerTexts = new Array(columnCount).fill(0).map((_, i) => hasHeader ? headerRow[i] && headerRow[i].text || "" : "");
|
|
25431
25648
|
out += `| ${headerTexts.map((t, i) => pad(t, colWidths[i])).join(" | ")} |
|
|
25432
25649
|
`;
|
|
25433
|
-
out += `| ${colWidths.map((w
|
|
25650
|
+
out += `| ${colWidths.map((w, index) => {
|
|
25651
|
+
const dashCount = Math.max(3, w);
|
|
25652
|
+
const alignment = colAlignments[index];
|
|
25653
|
+
if (alignment === "left") {
|
|
25654
|
+
return `:${"-".repeat(dashCount)}`;
|
|
25655
|
+
}
|
|
25656
|
+
if (alignment === "right") {
|
|
25657
|
+
return `${"-".repeat(dashCount)}:`;
|
|
25658
|
+
}
|
|
25659
|
+
if (alignment === "center") {
|
|
25660
|
+
return `:${"-".repeat(dashCount)}:`;
|
|
25661
|
+
}
|
|
25662
|
+
return "-".repeat(dashCount);
|
|
25663
|
+
}).join(" | ")} |
|
|
25434
25664
|
`;
|
|
25435
25665
|
const body = hasHeader ? rows.slice(1) : rows;
|
|
25436
25666
|
body.forEach((r2) => {
|
|
@@ -25484,18 +25714,27 @@ var Table = Node3.create({
|
|
|
25484
25714
|
},
|
|
25485
25715
|
parseMarkdown: (token, h2) => {
|
|
25486
25716
|
const rows = [];
|
|
25717
|
+
const alignments = Array.isArray(token.align) ? token.align : [];
|
|
25487
25718
|
if (token.header) {
|
|
25488
25719
|
const headerCells = [];
|
|
25489
|
-
token.header.forEach((cell) => {
|
|
25490
|
-
|
|
25720
|
+
token.header.forEach((cell, index) => {
|
|
25721
|
+
var _a;
|
|
25722
|
+
const align = normalizeTableCellAlign((_a = alignments[index]) != null ? _a : cell.align);
|
|
25723
|
+
const attrs = align ? { align } : {};
|
|
25724
|
+
headerCells.push(
|
|
25725
|
+
h2.createNode("tableHeader", attrs, [{ type: "paragraph", content: h2.parseInline(cell.tokens) }])
|
|
25726
|
+
);
|
|
25491
25727
|
});
|
|
25492
25728
|
rows.push(h2.createNode("tableRow", {}, headerCells));
|
|
25493
25729
|
}
|
|
25494
25730
|
if (token.rows) {
|
|
25495
25731
|
token.rows.forEach((row) => {
|
|
25496
25732
|
const bodyCells = [];
|
|
25497
|
-
row.forEach((cell) => {
|
|
25498
|
-
|
|
25733
|
+
row.forEach((cell, index) => {
|
|
25734
|
+
var _a;
|
|
25735
|
+
const align = normalizeTableCellAlign((_a = alignments[index]) != null ? _a : cell.align);
|
|
25736
|
+
const attrs = align ? { align } : {};
|
|
25737
|
+
bodyCells.push(h2.createNode("tableCell", attrs, [{ type: "paragraph", content: h2.parseInline(cell.tokens) }]));
|
|
25499
25738
|
});
|
|
25500
25739
|
rows.push(h2.createNode("tableRow", {}, bodyCells));
|
|
25501
25740
|
});
|
|
@@ -25841,7 +26080,7 @@ function requireCore() {
|
|
|
25841
26080
|
static _collapse(node) {
|
|
25842
26081
|
if (typeof node === "string") return;
|
|
25843
26082
|
if (!node.children) return;
|
|
25844
|
-
if (node.children.every((
|
|
26083
|
+
if (node.children.every((el2) => typeof el2 === "string")) {
|
|
25845
26084
|
node.children = [node.children.join("")];
|
|
25846
26085
|
} else {
|
|
25847
26086
|
node.children.forEach((child) => {
|
|
@@ -26363,7 +26602,7 @@ function requireCore() {
|
|
|
26363
26602
|
if (this.regexes.length === 0) {
|
|
26364
26603
|
this.exec = () => null;
|
|
26365
26604
|
}
|
|
26366
|
-
const terminators = this.regexes.map((
|
|
26605
|
+
const terminators = this.regexes.map((el2) => el2[1]);
|
|
26367
26606
|
this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: "|" }), true);
|
|
26368
26607
|
this.lastIndex = 0;
|
|
26369
26608
|
}
|
|
@@ -26374,7 +26613,7 @@ function requireCore() {
|
|
|
26374
26613
|
if (!match) {
|
|
26375
26614
|
return null;
|
|
26376
26615
|
}
|
|
26377
|
-
const i = match.findIndex((
|
|
26616
|
+
const i = match.findIndex((el2, i2) => i2 > 0 && el2 !== void 0);
|
|
26378
26617
|
const matchData = this.matchIndexes[i];
|
|
26379
26618
|
match.splice(0, i);
|
|
26380
26619
|
return Object.assign(match, matchData);
|
|
@@ -27134,10 +27373,10 @@ function requireCore() {
|
|
|
27134
27373
|
}
|
|
27135
27374
|
});
|
|
27136
27375
|
}
|
|
27137
|
-
function deprecateHighlightBlock(
|
|
27376
|
+
function deprecateHighlightBlock(el2) {
|
|
27138
27377
|
deprecated("10.7.0", "highlightBlock will be removed entirely in v12.0");
|
|
27139
27378
|
deprecated("10.7.0", "Please use highlightElement now.");
|
|
27140
|
-
return highlightElement(
|
|
27379
|
+
return highlightElement(el2);
|
|
27141
27380
|
}
|
|
27142
27381
|
Object.assign(hljs, {
|
|
27143
27382
|
highlight: highlight2,
|
|
@@ -27296,7 +27535,7 @@ function LowlightPlugin({
|
|
|
27296
27535
|
});
|
|
27297
27536
|
return lowlightPlugin;
|
|
27298
27537
|
}
|
|
27299
|
-
var CodeBlockLowlight =
|
|
27538
|
+
var CodeBlockLowlight = CodeBlock.extend({
|
|
27300
27539
|
addOptions() {
|
|
27301
27540
|
var _a;
|
|
27302
27541
|
return {
|
|
@@ -41484,6 +41723,506 @@ class EmojiPicker {
|
|
|
41484
41723
|
}
|
|
41485
41724
|
}
|
|
41486
41725
|
}
|
|
41726
|
+
const DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
41727
|
+
const ACCEPTED_IMAGE_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"];
|
|
41728
|
+
const SVG_DANGEROUS_TAGS = [
|
|
41729
|
+
"script",
|
|
41730
|
+
"foreignobject",
|
|
41731
|
+
"set",
|
|
41732
|
+
"animate",
|
|
41733
|
+
"animatetransform",
|
|
41734
|
+
"animatemotion",
|
|
41735
|
+
"handler",
|
|
41736
|
+
"listener"
|
|
41737
|
+
];
|
|
41738
|
+
const SVG_EVENT_ATTR_PATTERN = /^on/i;
|
|
41739
|
+
const SVG_DANGEROUS_ATTR_VALUES = /javascript:|data:text\/html/i;
|
|
41740
|
+
function sanitizeSVG(svgText) {
|
|
41741
|
+
const parser = new DOMParser();
|
|
41742
|
+
const doc2 = parser.parseFromString(svgText, "image/svg+xml");
|
|
41743
|
+
const parseError = doc2.querySelector("parsererror");
|
|
41744
|
+
if (parseError) {
|
|
41745
|
+
return null;
|
|
41746
|
+
}
|
|
41747
|
+
const walk = (node) => {
|
|
41748
|
+
const tagName = node.tagName.toLowerCase();
|
|
41749
|
+
if (SVG_DANGEROUS_TAGS.includes(tagName)) {
|
|
41750
|
+
node.remove();
|
|
41751
|
+
return;
|
|
41752
|
+
}
|
|
41753
|
+
const attrs = Array.from(node.attributes);
|
|
41754
|
+
for (const attr of attrs) {
|
|
41755
|
+
if (SVG_EVENT_ATTR_PATTERN.test(attr.name)) {
|
|
41756
|
+
node.removeAttribute(attr.name);
|
|
41757
|
+
} else if (SVG_DANGEROUS_ATTR_VALUES.test(attr.value)) {
|
|
41758
|
+
node.removeAttribute(attr.name);
|
|
41759
|
+
}
|
|
41760
|
+
}
|
|
41761
|
+
const children = Array.from(node.children);
|
|
41762
|
+
for (const child of children) {
|
|
41763
|
+
walk(child);
|
|
41764
|
+
}
|
|
41765
|
+
};
|
|
41766
|
+
walk(doc2.documentElement);
|
|
41767
|
+
return new XMLSerializer().serializeToString(doc2.documentElement);
|
|
41768
|
+
}
|
|
41769
|
+
class ImageUpload {
|
|
41770
|
+
options;
|
|
41771
|
+
overlay = null;
|
|
41772
|
+
dialog = null;
|
|
41773
|
+
activeTab = "upload";
|
|
41774
|
+
currentFile = null;
|
|
41775
|
+
fileInput = null;
|
|
41776
|
+
uploading = false;
|
|
41777
|
+
constructor(options) {
|
|
41778
|
+
this.options = options;
|
|
41779
|
+
}
|
|
41780
|
+
open() {
|
|
41781
|
+
if (this.overlay) {
|
|
41782
|
+
this.reset();
|
|
41783
|
+
this.overlay.style.display = "flex";
|
|
41784
|
+
return;
|
|
41785
|
+
}
|
|
41786
|
+
this.createDialog();
|
|
41787
|
+
}
|
|
41788
|
+
close() {
|
|
41789
|
+
if (this.overlay) {
|
|
41790
|
+
this.overlay.style.display = "none";
|
|
41791
|
+
}
|
|
41792
|
+
this.reset();
|
|
41793
|
+
}
|
|
41794
|
+
reset() {
|
|
41795
|
+
this.currentFile = null;
|
|
41796
|
+
this.uploading = false;
|
|
41797
|
+
if (!this.dialog) return;
|
|
41798
|
+
if (this.fileInput) {
|
|
41799
|
+
this.fileInput.value = "";
|
|
41800
|
+
}
|
|
41801
|
+
const dropzoneText = this.dialog.querySelector(".md-image-upload-dropzone-text");
|
|
41802
|
+
if (dropzoneText) {
|
|
41803
|
+
dropzoneText.textContent = this.options.trans("Drop image here or click to browse");
|
|
41804
|
+
}
|
|
41805
|
+
const urlInput = this.dialog.querySelector(".md-image-upload-url-input");
|
|
41806
|
+
if (urlInput) {
|
|
41807
|
+
urlInput.value = "";
|
|
41808
|
+
}
|
|
41809
|
+
const altInput = this.dialog.querySelector(".md-image-upload-alt-input");
|
|
41810
|
+
if (altInput) {
|
|
41811
|
+
altInput.value = "";
|
|
41812
|
+
}
|
|
41813
|
+
const preview = this.dialog.querySelector(".md-image-upload-preview");
|
|
41814
|
+
if (preview) {
|
|
41815
|
+
preview.innerHTML = "";
|
|
41816
|
+
preview.style.display = "none";
|
|
41817
|
+
}
|
|
41818
|
+
const progress = this.dialog.querySelector(".md-image-upload-progress");
|
|
41819
|
+
if (progress) {
|
|
41820
|
+
progress.style.display = "none";
|
|
41821
|
+
}
|
|
41822
|
+
const insertBtn = this.dialog.querySelector(".md-image-upload-insert");
|
|
41823
|
+
if (insertBtn) {
|
|
41824
|
+
insertBtn.disabled = true;
|
|
41825
|
+
}
|
|
41826
|
+
const error = this.dialog.querySelector(".md-image-upload-error");
|
|
41827
|
+
if (error) {
|
|
41828
|
+
error.style.display = "none";
|
|
41829
|
+
error.textContent = "";
|
|
41830
|
+
}
|
|
41831
|
+
this.switchTab("upload");
|
|
41832
|
+
}
|
|
41833
|
+
createDialog() {
|
|
41834
|
+
const t = this.options.trans;
|
|
41835
|
+
this.overlay = document.createElement("div");
|
|
41836
|
+
this.overlay.className = "md-dialog-overlay";
|
|
41837
|
+
this.overlay.addEventListener("click", (e) => {
|
|
41838
|
+
if (e.target === this.overlay) {
|
|
41839
|
+
this.close();
|
|
41840
|
+
}
|
|
41841
|
+
});
|
|
41842
|
+
this.dialog = document.createElement("div");
|
|
41843
|
+
this.dialog.className = "md-dialog md-image-upload-dialog";
|
|
41844
|
+
const header = document.createElement("div");
|
|
41845
|
+
header.className = "md-dialog-header";
|
|
41846
|
+
header.innerHTML = `
|
|
41847
|
+
<h3>${t("Insert image")}</h3>
|
|
41848
|
+
<button type="button" class="md-dialog-close">×</button>
|
|
41849
|
+
`;
|
|
41850
|
+
header.querySelector(".md-dialog-close")?.addEventListener("click", () => this.close());
|
|
41851
|
+
const body = document.createElement("div");
|
|
41852
|
+
body.className = "md-dialog-body";
|
|
41853
|
+
const tabs = document.createElement("div");
|
|
41854
|
+
tabs.className = "md-image-upload-tabs";
|
|
41855
|
+
const uploadTab = document.createElement("button");
|
|
41856
|
+
uploadTab.type = "button";
|
|
41857
|
+
uploadTab.className = "md-image-upload-tab md-image-upload-tab-active";
|
|
41858
|
+
uploadTab.textContent = t("Upload");
|
|
41859
|
+
uploadTab.addEventListener("click", () => this.switchTab("upload"));
|
|
41860
|
+
const urlTab = document.createElement("button");
|
|
41861
|
+
urlTab.type = "button";
|
|
41862
|
+
urlTab.className = "md-image-upload-tab";
|
|
41863
|
+
urlTab.textContent = t("URL");
|
|
41864
|
+
urlTab.addEventListener("click", () => this.switchTab("url"));
|
|
41865
|
+
tabs.appendChild(uploadTab);
|
|
41866
|
+
tabs.appendChild(urlTab);
|
|
41867
|
+
const uploadPanel = document.createElement("div");
|
|
41868
|
+
uploadPanel.className = "md-image-upload-panel md-image-upload-panel-upload";
|
|
41869
|
+
this.fileInput = document.createElement("input");
|
|
41870
|
+
this.fileInput.type = "file";
|
|
41871
|
+
this.fileInput.accept = "image/*";
|
|
41872
|
+
this.fileInput.style.display = "none";
|
|
41873
|
+
this.fileInput.addEventListener("change", () => {
|
|
41874
|
+
const file = this.fileInput?.files?.[0];
|
|
41875
|
+
if (file) {
|
|
41876
|
+
this.handleFileSelected(file);
|
|
41877
|
+
}
|
|
41878
|
+
});
|
|
41879
|
+
const dropzone = document.createElement("div");
|
|
41880
|
+
dropzone.className = "md-image-upload-dropzone";
|
|
41881
|
+
dropzone.innerHTML = `
|
|
41882
|
+
<div class="md-image-upload-dropzone-icon">
|
|
41883
|
+
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
|
|
41884
|
+
<rect x="3" y="3" width="18" height="18" rx="2"/>
|
|
41885
|
+
<circle cx="8.5" cy="8.5" r="1.5"/>
|
|
41886
|
+
<polyline points="21 15 16 10 5 21"/>
|
|
41887
|
+
</svg>
|
|
41888
|
+
</div>
|
|
41889
|
+
<div class="md-image-upload-dropzone-text">${t("Drop image here or click to browse")}</div>
|
|
41890
|
+
<button type="button" class="md-btn md-btn-primary md-image-upload-browse">${t("Browse...")}</button>
|
|
41891
|
+
`;
|
|
41892
|
+
dropzone.querySelector(".md-image-upload-browse")?.addEventListener("click", (e) => {
|
|
41893
|
+
e.stopPropagation();
|
|
41894
|
+
this.fileInput?.click();
|
|
41895
|
+
});
|
|
41896
|
+
dropzone.addEventListener("click", () => {
|
|
41897
|
+
this.fileInput?.click();
|
|
41898
|
+
});
|
|
41899
|
+
dropzone.addEventListener("dragover", (e) => {
|
|
41900
|
+
e.preventDefault();
|
|
41901
|
+
e.stopPropagation();
|
|
41902
|
+
dropzone.classList.add("md-image-upload-dropzone-active");
|
|
41903
|
+
if (e.dataTransfer) {
|
|
41904
|
+
e.dataTransfer.dropEffect = "copy";
|
|
41905
|
+
}
|
|
41906
|
+
});
|
|
41907
|
+
dropzone.addEventListener("dragleave", (e) => {
|
|
41908
|
+
e.preventDefault();
|
|
41909
|
+
e.stopPropagation();
|
|
41910
|
+
dropzone.classList.remove("md-image-upload-dropzone-active");
|
|
41911
|
+
});
|
|
41912
|
+
dropzone.addEventListener("drop", (e) => {
|
|
41913
|
+
e.preventDefault();
|
|
41914
|
+
e.stopPropagation();
|
|
41915
|
+
dropzone.classList.remove("md-image-upload-dropzone-active");
|
|
41916
|
+
const file = e.dataTransfer?.files?.[0];
|
|
41917
|
+
if (file) {
|
|
41918
|
+
this.handleFileSelected(file);
|
|
41919
|
+
}
|
|
41920
|
+
});
|
|
41921
|
+
uploadPanel.appendChild(this.fileInput);
|
|
41922
|
+
uploadPanel.appendChild(dropzone);
|
|
41923
|
+
const urlPanel = document.createElement("div");
|
|
41924
|
+
urlPanel.className = "md-image-upload-panel md-image-upload-panel-url";
|
|
41925
|
+
urlPanel.style.display = "none";
|
|
41926
|
+
const urlRow = document.createElement("div");
|
|
41927
|
+
urlRow.className = "md-image-upload-row";
|
|
41928
|
+
urlRow.innerHTML = `
|
|
41929
|
+
<label>${t("URL")}</label>
|
|
41930
|
+
<input type="url" class="md-image-upload-url-input" placeholder="https://..." />
|
|
41931
|
+
`;
|
|
41932
|
+
const urlInput = urlRow.querySelector(".md-image-upload-url-input");
|
|
41933
|
+
urlInput.addEventListener("input", () => {
|
|
41934
|
+
this.handleUrlInput(urlInput.value);
|
|
41935
|
+
});
|
|
41936
|
+
urlPanel.appendChild(urlRow);
|
|
41937
|
+
const preview = document.createElement("div");
|
|
41938
|
+
preview.className = "md-image-upload-preview";
|
|
41939
|
+
preview.style.display = "none";
|
|
41940
|
+
const altRow = document.createElement("div");
|
|
41941
|
+
altRow.className = "md-image-upload-row";
|
|
41942
|
+
altRow.innerHTML = `
|
|
41943
|
+
<label>${t("Alt text")}</label>
|
|
41944
|
+
<input type="text" class="md-image-upload-alt-input" />
|
|
41945
|
+
`;
|
|
41946
|
+
const errorEl = document.createElement("div");
|
|
41947
|
+
errorEl.className = "md-image-upload-error";
|
|
41948
|
+
errorEl.style.display = "none";
|
|
41949
|
+
const progressEl = document.createElement("div");
|
|
41950
|
+
progressEl.className = "md-image-upload-progress";
|
|
41951
|
+
progressEl.style.display = "none";
|
|
41952
|
+
progressEl.innerHTML = `
|
|
41953
|
+
<div class="md-image-upload-progress-bar"><div class="md-image-upload-progress-fill"></div></div>
|
|
41954
|
+
<span class="md-image-upload-progress-text">${t("Uploading...")}</span>
|
|
41955
|
+
`;
|
|
41956
|
+
const footer = document.createElement("div");
|
|
41957
|
+
footer.className = "md-image-upload-footer";
|
|
41958
|
+
footer.innerHTML = `
|
|
41959
|
+
<button type="button" class="md-btn md-image-upload-cancel">${t("Cancel")}</button>
|
|
41960
|
+
<button type="button" class="md-btn md-btn-primary md-image-upload-insert" disabled>${t("Insert")}</button>
|
|
41961
|
+
`;
|
|
41962
|
+
footer.querySelector(".md-image-upload-cancel")?.addEventListener("click", () => this.close());
|
|
41963
|
+
footer.querySelector(".md-image-upload-insert")?.addEventListener("click", () => this.handleInsert());
|
|
41964
|
+
body.appendChild(tabs);
|
|
41965
|
+
body.appendChild(uploadPanel);
|
|
41966
|
+
body.appendChild(urlPanel);
|
|
41967
|
+
body.appendChild(preview);
|
|
41968
|
+
body.appendChild(errorEl);
|
|
41969
|
+
body.appendChild(progressEl);
|
|
41970
|
+
body.appendChild(altRow);
|
|
41971
|
+
body.appendChild(footer);
|
|
41972
|
+
this.dialog.appendChild(header);
|
|
41973
|
+
this.dialog.appendChild(body);
|
|
41974
|
+
this.overlay.appendChild(this.dialog);
|
|
41975
|
+
document.body.appendChild(this.overlay);
|
|
41976
|
+
}
|
|
41977
|
+
switchTab(tab) {
|
|
41978
|
+
this.activeTab = tab;
|
|
41979
|
+
if (!this.dialog) return;
|
|
41980
|
+
const tabs = this.dialog.querySelectorAll(".md-image-upload-tab");
|
|
41981
|
+
tabs[0]?.classList.toggle("md-image-upload-tab-active", tab === "upload");
|
|
41982
|
+
tabs[1]?.classList.toggle("md-image-upload-tab-active", tab === "url");
|
|
41983
|
+
const uploadPanel = this.dialog.querySelector(".md-image-upload-panel-upload");
|
|
41984
|
+
const urlPanel = this.dialog.querySelector(".md-image-upload-panel-url");
|
|
41985
|
+
if (uploadPanel) uploadPanel.style.display = tab === "upload" ? "" : "none";
|
|
41986
|
+
if (urlPanel) urlPanel.style.display = tab === "url" ? "" : "none";
|
|
41987
|
+
}
|
|
41988
|
+
showError(message) {
|
|
41989
|
+
const errorEl = this.dialog?.querySelector(".md-image-upload-error");
|
|
41990
|
+
if (errorEl) {
|
|
41991
|
+
errorEl.textContent = message;
|
|
41992
|
+
errorEl.style.display = "block";
|
|
41993
|
+
}
|
|
41994
|
+
}
|
|
41995
|
+
clearError() {
|
|
41996
|
+
const errorEl = this.dialog?.querySelector(".md-image-upload-error");
|
|
41997
|
+
if (errorEl) {
|
|
41998
|
+
errorEl.style.display = "none";
|
|
41999
|
+
errorEl.textContent = "";
|
|
42000
|
+
}
|
|
42001
|
+
}
|
|
42002
|
+
handleFileSelected(file) {
|
|
42003
|
+
this.clearError();
|
|
42004
|
+
const t = this.options.trans;
|
|
42005
|
+
if (!ACCEPTED_IMAGE_TYPES.includes(file.type)) {
|
|
42006
|
+
this.showError(t("Invalid file type"));
|
|
42007
|
+
return;
|
|
42008
|
+
}
|
|
42009
|
+
const maxSize = this.options.uploadMaxSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
42010
|
+
if (file.size > maxSize) {
|
|
42011
|
+
this.showError(t("File too large"));
|
|
42012
|
+
return;
|
|
42013
|
+
}
|
|
42014
|
+
this.currentFile = file;
|
|
42015
|
+
this.showFilePreview(file);
|
|
42016
|
+
const dropzoneText = this.dialog?.querySelector(".md-image-upload-dropzone-text");
|
|
42017
|
+
if (dropzoneText) {
|
|
42018
|
+
dropzoneText.textContent = file.name;
|
|
42019
|
+
}
|
|
42020
|
+
const insertBtn = this.dialog?.querySelector(".md-image-upload-insert");
|
|
42021
|
+
if (insertBtn) {
|
|
42022
|
+
insertBtn.disabled = false;
|
|
42023
|
+
}
|
|
42024
|
+
}
|
|
42025
|
+
showFilePreview(file) {
|
|
42026
|
+
const preview = this.dialog?.querySelector(".md-image-upload-preview");
|
|
42027
|
+
if (!preview) return;
|
|
42028
|
+
const objectUrl = URL.createObjectURL(file);
|
|
42029
|
+
const img = document.createElement("img");
|
|
42030
|
+
img.src = objectUrl;
|
|
42031
|
+
img.alt = "Preview";
|
|
42032
|
+
img.onload = () => URL.revokeObjectURL(objectUrl);
|
|
42033
|
+
preview.innerHTML = "";
|
|
42034
|
+
preview.appendChild(img);
|
|
42035
|
+
preview.style.display = "block";
|
|
42036
|
+
}
|
|
42037
|
+
handleUrlInput(url) {
|
|
42038
|
+
this.clearError();
|
|
42039
|
+
const preview = this.dialog?.querySelector(".md-image-upload-preview");
|
|
42040
|
+
const insertBtn = this.dialog?.querySelector(".md-image-upload-insert");
|
|
42041
|
+
if (!url.trim()) {
|
|
42042
|
+
if (preview) {
|
|
42043
|
+
preview.innerHTML = "";
|
|
42044
|
+
preview.style.display = "none";
|
|
42045
|
+
}
|
|
42046
|
+
if (insertBtn) insertBtn.disabled = true;
|
|
42047
|
+
return;
|
|
42048
|
+
}
|
|
42049
|
+
if (!this.isValidUrl(url)) {
|
|
42050
|
+
if (insertBtn) insertBtn.disabled = true;
|
|
42051
|
+
return;
|
|
42052
|
+
}
|
|
42053
|
+
if (preview) {
|
|
42054
|
+
const img = document.createElement("img");
|
|
42055
|
+
img.src = url;
|
|
42056
|
+
img.alt = "Preview";
|
|
42057
|
+
img.onerror = () => {
|
|
42058
|
+
preview.innerHTML = "";
|
|
42059
|
+
preview.style.display = "none";
|
|
42060
|
+
if (insertBtn) insertBtn.disabled = true;
|
|
42061
|
+
this.showError(this.options.trans("Invalid image URL"));
|
|
42062
|
+
};
|
|
42063
|
+
img.onload = () => {
|
|
42064
|
+
if (insertBtn) insertBtn.disabled = false;
|
|
42065
|
+
};
|
|
42066
|
+
preview.innerHTML = "";
|
|
42067
|
+
preview.appendChild(img);
|
|
42068
|
+
preview.style.display = "block";
|
|
42069
|
+
}
|
|
42070
|
+
}
|
|
42071
|
+
isValidUrl(url) {
|
|
42072
|
+
try {
|
|
42073
|
+
const parsed = new URL(url, window.location.href);
|
|
42074
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
42075
|
+
} catch {
|
|
42076
|
+
return false;
|
|
42077
|
+
}
|
|
42078
|
+
}
|
|
42079
|
+
async handleInsert() {
|
|
42080
|
+
if (this.uploading) return;
|
|
42081
|
+
const altInput = this.dialog?.querySelector(".md-image-upload-alt-input");
|
|
42082
|
+
const alt = altInput?.value?.trim() || void 0;
|
|
42083
|
+
if (this.activeTab === "url") {
|
|
42084
|
+
const urlInput = this.dialog?.querySelector(".md-image-upload-url-input");
|
|
42085
|
+
const url = urlInput?.value?.trim();
|
|
42086
|
+
if (url && this.isValidUrl(url)) {
|
|
42087
|
+
this.options.onInsert(url, alt);
|
|
42088
|
+
this.close();
|
|
42089
|
+
}
|
|
42090
|
+
return;
|
|
42091
|
+
}
|
|
42092
|
+
if (!this.currentFile) return;
|
|
42093
|
+
try {
|
|
42094
|
+
const src = await this.uploadFile(this.currentFile);
|
|
42095
|
+
this.options.onInsert(src, alt);
|
|
42096
|
+
this.close();
|
|
42097
|
+
} catch (err) {
|
|
42098
|
+
this.showError(this.options.trans("Upload failed"));
|
|
42099
|
+
}
|
|
42100
|
+
}
|
|
42101
|
+
uploadFile(file) {
|
|
42102
|
+
if (!ACCEPTED_IMAGE_TYPES.includes(file.type)) {
|
|
42103
|
+
return Promise.reject(new Error("Invalid file type"));
|
|
42104
|
+
}
|
|
42105
|
+
const maxSize = this.options.uploadMaxSize ?? DEFAULT_MAX_FILE_SIZE;
|
|
42106
|
+
if (file.size > maxSize) {
|
|
42107
|
+
return Promise.reject(new Error("File too large"));
|
|
42108
|
+
}
|
|
42109
|
+
if (file.type === "image/svg+xml") {
|
|
42110
|
+
return this.sanitizeAndUploadSVG(file);
|
|
42111
|
+
}
|
|
42112
|
+
if (!this.options.uploadUrl) {
|
|
42113
|
+
return this.readAsBase64(file);
|
|
42114
|
+
}
|
|
42115
|
+
return this.uploadViaXHR(file);
|
|
42116
|
+
}
|
|
42117
|
+
sanitizeAndUploadSVG(file) {
|
|
42118
|
+
return new Promise((resolve, reject) => {
|
|
42119
|
+
const reader = new FileReader();
|
|
42120
|
+
reader.onload = () => {
|
|
42121
|
+
const svgText = reader.result;
|
|
42122
|
+
const sanitized = sanitizeSVG(svgText);
|
|
42123
|
+
if (!sanitized) {
|
|
42124
|
+
reject(new Error("Invalid SVG file"));
|
|
42125
|
+
return;
|
|
42126
|
+
}
|
|
42127
|
+
const sanitizedBlob = new Blob([sanitized], { type: "image/svg+xml" });
|
|
42128
|
+
const sanitizedFile = new File([sanitizedBlob], file.name, { type: "image/svg+xml" });
|
|
42129
|
+
if (!this.options.uploadUrl) {
|
|
42130
|
+
this.readAsBase64(sanitizedFile).then(resolve, reject);
|
|
42131
|
+
} else {
|
|
42132
|
+
this.uploadViaXHR(sanitizedFile).then(resolve, reject);
|
|
42133
|
+
}
|
|
42134
|
+
};
|
|
42135
|
+
reader.onerror = () => reject(new Error("Failed to read file"));
|
|
42136
|
+
reader.readAsText(file);
|
|
42137
|
+
});
|
|
42138
|
+
}
|
|
42139
|
+
readAsBase64(file) {
|
|
42140
|
+
return new Promise((resolve, reject) => {
|
|
42141
|
+
const reader = new FileReader();
|
|
42142
|
+
reader.onload = () => {
|
|
42143
|
+
if (typeof reader.result === "string") {
|
|
42144
|
+
resolve(reader.result);
|
|
42145
|
+
} else {
|
|
42146
|
+
reject(new Error("Failed to read file"));
|
|
42147
|
+
}
|
|
42148
|
+
};
|
|
42149
|
+
reader.onerror = () => reject(new Error("Failed to read file"));
|
|
42150
|
+
reader.readAsDataURL(file);
|
|
42151
|
+
});
|
|
42152
|
+
}
|
|
42153
|
+
uploadViaXHR(file) {
|
|
42154
|
+
return new Promise((resolve, reject) => {
|
|
42155
|
+
this.uploading = true;
|
|
42156
|
+
const progressEl = this.dialog?.querySelector(".md-image-upload-progress");
|
|
42157
|
+
const progressFill = this.dialog?.querySelector(".md-image-upload-progress-fill");
|
|
42158
|
+
const progressText = this.dialog?.querySelector(".md-image-upload-progress-text");
|
|
42159
|
+
const insertBtn = this.dialog?.querySelector(".md-image-upload-insert");
|
|
42160
|
+
if (progressEl) progressEl.style.display = "flex";
|
|
42161
|
+
if (insertBtn) insertBtn.disabled = true;
|
|
42162
|
+
const xhr = new XMLHttpRequest();
|
|
42163
|
+
const formData = new FormData();
|
|
42164
|
+
formData.append("file", file, file.name);
|
|
42165
|
+
xhr.upload.addEventListener("progress", (e) => {
|
|
42166
|
+
if (e.lengthComputable && progressFill && progressText) {
|
|
42167
|
+
const pct = Math.round(e.loaded / e.total * 100);
|
|
42168
|
+
progressFill.style.width = `${pct}%`;
|
|
42169
|
+
progressText.textContent = `${pct}%`;
|
|
42170
|
+
}
|
|
42171
|
+
});
|
|
42172
|
+
xhr.addEventListener("load", () => {
|
|
42173
|
+
this.uploading = false;
|
|
42174
|
+
if (progressEl) progressEl.style.display = "none";
|
|
42175
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
42176
|
+
try {
|
|
42177
|
+
const response = JSON.parse(xhr.responseText);
|
|
42178
|
+
let url = response.location || response.url || response.link;
|
|
42179
|
+
if (!url) {
|
|
42180
|
+
reject(new Error("No URL returned from server"));
|
|
42181
|
+
return;
|
|
42182
|
+
}
|
|
42183
|
+
const basePath = this.options.uploadBasePath ?? "/";
|
|
42184
|
+
if (url && !url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("data:")) {
|
|
42185
|
+
url = basePath.replace(/\/$/, "") + "/" + url.replace(/^\//, "");
|
|
42186
|
+
}
|
|
42187
|
+
resolve(url);
|
|
42188
|
+
} catch {
|
|
42189
|
+
reject(new Error("Invalid server response"));
|
|
42190
|
+
}
|
|
42191
|
+
} else {
|
|
42192
|
+
reject(new Error(`Upload failed: ${xhr.status}`));
|
|
42193
|
+
}
|
|
42194
|
+
});
|
|
42195
|
+
xhr.addEventListener("error", () => {
|
|
42196
|
+
this.uploading = false;
|
|
42197
|
+
if (progressEl) progressEl.style.display = "none";
|
|
42198
|
+
reject(new Error("Network error"));
|
|
42199
|
+
});
|
|
42200
|
+
xhr.addEventListener("abort", () => {
|
|
42201
|
+
this.uploading = false;
|
|
42202
|
+
if (progressEl) progressEl.style.display = "none";
|
|
42203
|
+
reject(new Error("Upload aborted"));
|
|
42204
|
+
});
|
|
42205
|
+
xhr.open("POST", this.options.uploadUrl);
|
|
42206
|
+
if (this.options.uploadCredentials !== false) {
|
|
42207
|
+
xhr.withCredentials = true;
|
|
42208
|
+
}
|
|
42209
|
+
if (this.options.uploadHeaders) {
|
|
42210
|
+
for (const [key, value] of Object.entries(this.options.uploadHeaders)) {
|
|
42211
|
+
xhr.setRequestHeader(key, value);
|
|
42212
|
+
}
|
|
42213
|
+
}
|
|
42214
|
+
xhr.send(formData);
|
|
42215
|
+
});
|
|
42216
|
+
}
|
|
42217
|
+
destroy() {
|
|
42218
|
+
if (this.overlay) {
|
|
42219
|
+
this.overlay.remove();
|
|
42220
|
+
this.overlay = null;
|
|
42221
|
+
this.dialog = null;
|
|
42222
|
+
this.fileInput = null;
|
|
42223
|
+
}
|
|
42224
|
+
}
|
|
42225
|
+
}
|
|
41487
42226
|
class SearchReplace {
|
|
41488
42227
|
options;
|
|
41489
42228
|
overlay = null;
|
|
@@ -41771,8 +42510,13 @@ class Toolbar {
|
|
|
41771
42510
|
dropdowns = /* @__PURE__ */ new Map();
|
|
41772
42511
|
charMap = null;
|
|
41773
42512
|
emojiPicker = null;
|
|
42513
|
+
imageUpload = null;
|
|
41774
42514
|
searchReplace = null;
|
|
41775
42515
|
updateInterval = null;
|
|
42516
|
+
boundClickHandler = null;
|
|
42517
|
+
boundKeydownHandler = null;
|
|
42518
|
+
overflowEl = null;
|
|
42519
|
+
toggleBtn = null;
|
|
41776
42520
|
constructor(container, options) {
|
|
41777
42521
|
this.container = container;
|
|
41778
42522
|
this.options = options;
|
|
@@ -41790,10 +42534,36 @@ class Toolbar {
|
|
|
41790
42534
|
get trans() {
|
|
41791
42535
|
return getTranslate();
|
|
41792
42536
|
}
|
|
42537
|
+
icon(name) {
|
|
42538
|
+
return this.options.iconSet[name] ?? name;
|
|
42539
|
+
}
|
|
41793
42540
|
render() {
|
|
41794
42541
|
this.container.innerHTML = "";
|
|
41795
42542
|
this.container.className = `md-toolbar md-toolbar-${this.options.mode}${this.options.sticky ? " md-toolbar-sticky" : ""}`;
|
|
41796
|
-
const
|
|
42543
|
+
const rows = this.options.buttons.split("||");
|
|
42544
|
+
const hasOverflow = rows.length > 1;
|
|
42545
|
+
if (hasOverflow) {
|
|
42546
|
+
const primaryEl = document.createElement("div");
|
|
42547
|
+
primaryEl.className = "md-toolbar-primary";
|
|
42548
|
+
this.renderGroups(rows[0].trim(), primaryEl);
|
|
42549
|
+
this.toggleBtn = this.createToggleButton();
|
|
42550
|
+
primaryEl.appendChild(this.toggleBtn);
|
|
42551
|
+
this.container.appendChild(primaryEl);
|
|
42552
|
+
this.overflowEl = document.createElement("div");
|
|
42553
|
+
this.overflowEl.className = "md-toolbar-overflow";
|
|
42554
|
+
const overflowStr = rows.slice(1).join("||").trim();
|
|
42555
|
+
this.renderGroups(overflowStr, this.overflowEl);
|
|
42556
|
+
this.container.appendChild(this.overflowEl);
|
|
42557
|
+
if (this.state.showMoreButtons) {
|
|
42558
|
+
this.overflowEl.classList.add("md-toolbar-overflow-visible");
|
|
42559
|
+
this.toggleBtn.classList.add("md-toolbar-btn-active");
|
|
42560
|
+
}
|
|
42561
|
+
} else {
|
|
42562
|
+
this.renderGroups(this.options.buttons, this.container);
|
|
42563
|
+
}
|
|
42564
|
+
}
|
|
42565
|
+
renderGroups(buttonsStr, parent) {
|
|
42566
|
+
const groups = buttonsStr.split("|").map((g) => g.trim()).filter(Boolean);
|
|
41797
42567
|
groups.forEach((group, index) => {
|
|
41798
42568
|
const groupEl = document.createElement("div");
|
|
41799
42569
|
groupEl.className = "md-toolbar-group";
|
|
@@ -41805,14 +42575,36 @@ class Toolbar {
|
|
|
41805
42575
|
this.buttonElements.set(buttonName, buttonEl);
|
|
41806
42576
|
}
|
|
41807
42577
|
});
|
|
41808
|
-
|
|
42578
|
+
parent.appendChild(groupEl);
|
|
41809
42579
|
if (index < groups.length - 1) {
|
|
41810
42580
|
const separator = document.createElement("div");
|
|
41811
42581
|
separator.className = "md-toolbar-separator";
|
|
41812
|
-
|
|
42582
|
+
parent.appendChild(separator);
|
|
41813
42583
|
}
|
|
41814
42584
|
});
|
|
41815
42585
|
}
|
|
42586
|
+
createToggleButton() {
|
|
42587
|
+
const button = document.createElement("button");
|
|
42588
|
+
button.type = "button";
|
|
42589
|
+
button.className = "md-toolbar-btn md-toolbar-toggle-btn";
|
|
42590
|
+
button.setAttribute("data-button", "togglemore");
|
|
42591
|
+
button.title = this.trans("More");
|
|
42592
|
+
button.innerHTML = `<span class="md-toolbar-btn-icon">${this.icon("togglemore")}</span>`;
|
|
42593
|
+
button.addEventListener("click", (e) => {
|
|
42594
|
+
e.preventDefault();
|
|
42595
|
+
this.toggleOverflow();
|
|
42596
|
+
});
|
|
42597
|
+
return button;
|
|
42598
|
+
}
|
|
42599
|
+
toggleOverflow() {
|
|
42600
|
+
this.state.showMoreButtons = !this.state.showMoreButtons;
|
|
42601
|
+
if (this.overflowEl) {
|
|
42602
|
+
this.overflowEl.classList.toggle("md-toolbar-overflow-visible", this.state.showMoreButtons);
|
|
42603
|
+
}
|
|
42604
|
+
if (this.toggleBtn) {
|
|
42605
|
+
this.toggleBtn.classList.toggle("md-toolbar-btn-active", this.state.showMoreButtons);
|
|
42606
|
+
}
|
|
42607
|
+
}
|
|
41816
42608
|
createButton(name) {
|
|
41817
42609
|
const customSpec = this.options.customButtons.get(name);
|
|
41818
42610
|
if (customSpec) {
|
|
@@ -41820,43 +42612,43 @@ class Toolbar {
|
|
|
41820
42612
|
}
|
|
41821
42613
|
switch (name.toLowerCase()) {
|
|
41822
42614
|
case "bold":
|
|
41823
|
-
return this.createActionButton("bold", "
|
|
42615
|
+
return this.createActionButton("bold", this.icon("bold"), this.trans("Bold"), () => {
|
|
41824
42616
|
this.tiptap?.chain().focus().toggleBold().run();
|
|
41825
42617
|
}, () => this.tiptap?.isActive("bold") ?? false);
|
|
41826
42618
|
case "italic":
|
|
41827
|
-
return this.createActionButton("italic", "
|
|
42619
|
+
return this.createActionButton("italic", this.icon("italic"), this.trans("Italic"), () => {
|
|
41828
42620
|
this.tiptap?.chain().focus().toggleItalic().run();
|
|
41829
42621
|
}, () => this.tiptap?.isActive("italic") ?? false);
|
|
41830
42622
|
case "underline":
|
|
41831
|
-
return this.createActionButton("underline", "
|
|
42623
|
+
return this.createActionButton("underline", this.icon("underline"), this.trans("Underline"), () => {
|
|
41832
42624
|
this.tiptap?.chain().focus().toggleUnderline().run();
|
|
41833
42625
|
}, () => this.tiptap?.isActive("underline") ?? false);
|
|
41834
42626
|
case "strikethrough":
|
|
41835
|
-
return this.createActionButton("strikethrough", "
|
|
42627
|
+
return this.createActionButton("strikethrough", this.icon("strikethrough"), this.trans("Strikethrough"), () => {
|
|
41836
42628
|
this.tiptap?.chain().focus().toggleStrike().run();
|
|
41837
42629
|
}, () => this.tiptap?.isActive("strike") ?? false);
|
|
41838
42630
|
case "bullist":
|
|
41839
|
-
return this.createActionButton("bullist", "
|
|
42631
|
+
return this.createActionButton("bullist", this.icon("bullist"), this.trans("Bullet list"), () => {
|
|
41840
42632
|
this.tiptap?.chain().focus().toggleBulletList().run();
|
|
41841
42633
|
}, () => this.tiptap?.isActive("bulletList") ?? false);
|
|
41842
42634
|
case "numlist":
|
|
41843
|
-
return this.createActionButton("numlist",
|
|
42635
|
+
return this.createActionButton("numlist", this.icon("numlist"), this.trans("Numbered list"), () => {
|
|
41844
42636
|
this.tiptap?.chain().focus().toggleOrderedList().run();
|
|
41845
42637
|
}, () => this.tiptap?.isActive("orderedList") ?? false);
|
|
41846
42638
|
case "outdent":
|
|
41847
|
-
return this.createActionButton("outdent", "
|
|
42639
|
+
return this.createActionButton("outdent", this.icon("outdent"), this.trans("Decrease indent"), () => {
|
|
41848
42640
|
if (this.tiptap?.isActive("listItem")) {
|
|
41849
42641
|
this.tiptap?.chain().focus().liftListItem("listItem").run();
|
|
41850
42642
|
}
|
|
41851
42643
|
});
|
|
41852
42644
|
case "indent":
|
|
41853
|
-
return this.createActionButton("indent", "
|
|
42645
|
+
return this.createActionButton("indent", this.icon("indent"), this.trans("Increase indent"), () => {
|
|
41854
42646
|
if (this.tiptap?.isActive("listItem")) {
|
|
41855
42647
|
this.tiptap?.chain().focus().sinkListItem("listItem").run();
|
|
41856
42648
|
}
|
|
41857
42649
|
});
|
|
41858
42650
|
case "blockquote":
|
|
41859
|
-
return this.createActionButton("blockquote",
|
|
42651
|
+
return this.createActionButton("blockquote", this.icon("blockquote"), this.trans("Blockquote"), () => {
|
|
41860
42652
|
this.tiptap?.chain().focus().toggleBlockquote().run();
|
|
41861
42653
|
}, () => this.tiptap?.isActive("blockquote") ?? false);
|
|
41862
42654
|
case "fontfamily":
|
|
@@ -41866,19 +42658,19 @@ class Toolbar {
|
|
|
41866
42658
|
case "lineheight":
|
|
41867
42659
|
return this.createLineHeightDropdown();
|
|
41868
42660
|
case "alignleft":
|
|
41869
|
-
return this.createActionButton("alignleft", "
|
|
42661
|
+
return this.createActionButton("alignleft", this.icon("alignleft"), this.trans("Align left"), () => {
|
|
41870
42662
|
this.tiptap?.chain().focus().setTextAlign("left").run();
|
|
41871
42663
|
}, () => this.tiptap?.isActive({ textAlign: "left" }) ?? false);
|
|
41872
42664
|
case "aligncenter":
|
|
41873
|
-
return this.createActionButton("aligncenter", "
|
|
42665
|
+
return this.createActionButton("aligncenter", this.icon("aligncenter"), this.trans("Align center"), () => {
|
|
41874
42666
|
this.tiptap?.chain().focus().setTextAlign("center").run();
|
|
41875
42667
|
}, () => this.tiptap?.isActive({ textAlign: "center" }) ?? false);
|
|
41876
42668
|
case "alignright":
|
|
41877
|
-
return this.createActionButton("alignright", "
|
|
42669
|
+
return this.createActionButton("alignright", this.icon("alignright"), this.trans("Align right"), () => {
|
|
41878
42670
|
this.tiptap?.chain().focus().setTextAlign("right").run();
|
|
41879
42671
|
}, () => this.tiptap?.isActive({ textAlign: "right" }) ?? false);
|
|
41880
42672
|
case "alignjustify":
|
|
41881
|
-
return this.createActionButton("alignjustify", "
|
|
42673
|
+
return this.createActionButton("alignjustify", this.icon("alignjustify"), this.trans("Justify"), () => {
|
|
41882
42674
|
this.tiptap?.chain().focus().setTextAlign("justify").run();
|
|
41883
42675
|
}, () => this.tiptap?.isActive({ textAlign: "justify" }) ?? false);
|
|
41884
42676
|
case "forecolor":
|
|
@@ -41890,71 +42682,71 @@ class Toolbar {
|
|
|
41890
42682
|
this.tiptap?.chain().focus().setHighlight({ color }).run();
|
|
41891
42683
|
});
|
|
41892
42684
|
case "removeformat":
|
|
41893
|
-
return this.createActionButton("removeformat", "
|
|
42685
|
+
return this.createActionButton("removeformat", this.icon("removeformat"), this.trans("Remove formatting"), () => {
|
|
41894
42686
|
this.tiptap?.chain().focus().unsetAllMarks().clearNodes().run();
|
|
41895
42687
|
});
|
|
41896
42688
|
case "copy":
|
|
41897
|
-
return this.createActionButton("copy", "
|
|
42689
|
+
return this.createActionButton("copy", this.icon("copy"), this.trans("Copy"), () => {
|
|
41898
42690
|
document.execCommand("copy");
|
|
41899
42691
|
});
|
|
41900
42692
|
case "cut":
|
|
41901
|
-
return this.createActionButton("cut", "
|
|
42693
|
+
return this.createActionButton("cut", this.icon("cut"), this.trans("Cut"), () => {
|
|
41902
42694
|
document.execCommand("cut");
|
|
41903
42695
|
});
|
|
41904
42696
|
case "paste":
|
|
41905
|
-
return this.createActionButton("paste", "
|
|
42697
|
+
return this.createActionButton("paste", this.icon("paste"), this.trans("Paste"), () => {
|
|
41906
42698
|
document.execCommand("paste");
|
|
41907
42699
|
});
|
|
41908
42700
|
case "undo":
|
|
41909
|
-
return this.createActionButton("undo", "
|
|
42701
|
+
return this.createActionButton("undo", this.icon("undo"), this.trans("Undo"), () => {
|
|
41910
42702
|
this.tiptap?.chain().focus().undo().run();
|
|
41911
42703
|
});
|
|
41912
42704
|
case "redo":
|
|
41913
|
-
return this.createActionButton("redo", "
|
|
42705
|
+
return this.createActionButton("redo", this.icon("redo"), this.trans("Redo"), () => {
|
|
41914
42706
|
this.tiptap?.chain().focus().redo().run();
|
|
41915
42707
|
});
|
|
41916
42708
|
case "image":
|
|
41917
|
-
return this.createActionButton("image", "
|
|
42709
|
+
return this.createActionButton("image", this.icon("image"), this.trans("Insert image"), () => {
|
|
41918
42710
|
this.openImageDialog();
|
|
41919
42711
|
});
|
|
41920
42712
|
case "charmap":
|
|
41921
|
-
return this.createActionButton("charmap", "
|
|
42713
|
+
return this.createActionButton("charmap", this.icon("charmap"), this.trans("Special character"), () => {
|
|
41922
42714
|
this.openCharMap();
|
|
41923
42715
|
});
|
|
41924
42716
|
case "emoticons":
|
|
41925
|
-
return this.createActionButton("emoticons", "
|
|
42717
|
+
return this.createActionButton("emoticons", this.icon("emoticons"), this.trans("Emoticons"), () => {
|
|
41926
42718
|
this.openEmojiPicker();
|
|
41927
42719
|
});
|
|
41928
42720
|
case "fullscreen":
|
|
41929
|
-
return this.createActionButton("fullscreen", "
|
|
42721
|
+
return this.createActionButton("fullscreen", this.icon("fullscreen"), this.trans("Fullscreen"), () => {
|
|
41930
42722
|
this.toggleFullscreen();
|
|
41931
42723
|
}, () => this.state.isFullscreen);
|
|
41932
42724
|
case "preview":
|
|
41933
|
-
return this.createActionButton("preview", "
|
|
42725
|
+
return this.createActionButton("preview", this.icon("preview"), this.trans("Preview"), () => {
|
|
41934
42726
|
this.openPreview();
|
|
41935
42727
|
});
|
|
41936
42728
|
case "code":
|
|
41937
|
-
return this.createActionButton("code", "
|
|
42729
|
+
return this.createActionButton("code", this.icon("code"), this.trans("Source code"), () => {
|
|
41938
42730
|
this.openSourceCode();
|
|
41939
42731
|
});
|
|
41940
42732
|
case "link":
|
|
41941
|
-
return this.createActionButton("link", "
|
|
42733
|
+
return this.createActionButton("link", this.icon("link"), this.trans("Insert link"), () => {
|
|
41942
42734
|
this.openLinkDialog();
|
|
41943
42735
|
}, () => this.tiptap?.isActive("link") ?? false);
|
|
41944
42736
|
case "codesample":
|
|
41945
|
-
return this.createActionButton("codesample", "
|
|
42737
|
+
return this.createActionButton("codesample", this.icon("codesample"), this.trans("Code sample"), () => {
|
|
41946
42738
|
this.tiptap?.chain().focus().toggleCodeBlock().run();
|
|
41947
42739
|
}, () => this.tiptap?.isActive("codeBlock") ?? false);
|
|
41948
42740
|
case "ltr":
|
|
41949
|
-
return this.createActionButton("ltr", "
|
|
42741
|
+
return this.createActionButton("ltr", this.icon("ltr"), this.trans("Left to right"), () => {
|
|
41950
42742
|
this.tiptap?.chain().focus().setTextDirection("ltr").run();
|
|
41951
42743
|
});
|
|
41952
42744
|
case "rtl":
|
|
41953
|
-
return this.createActionButton("rtl", "
|
|
42745
|
+
return this.createActionButton("rtl", this.icon("rtl"), this.trans("Right to left"), () => {
|
|
41954
42746
|
this.tiptap?.chain().focus().setTextDirection("rtl").run();
|
|
41955
42747
|
});
|
|
41956
42748
|
case "searchreplace":
|
|
41957
|
-
return this.createActionButton("searchreplace", "
|
|
42749
|
+
return this.createActionButton("searchreplace", this.icon("searchreplace"), this.trans("Find and replace"), () => {
|
|
41958
42750
|
this.openSearchReplace();
|
|
41959
42751
|
});
|
|
41960
42752
|
case "template":
|
|
@@ -42053,8 +42845,12 @@ class Toolbar {
|
|
|
42053
42845
|
value: t.content,
|
|
42054
42846
|
description: t.description
|
|
42055
42847
|
}));
|
|
42056
|
-
return this.createDropdown("template", this.trans("Templates"), options, (
|
|
42057
|
-
this.tiptap?.chain().focus().insertContent(
|
|
42848
|
+
return this.createDropdown("template", this.trans("Templates"), options, (selected) => {
|
|
42849
|
+
this.tiptap?.chain().focus().insertContent(selected.value).run();
|
|
42850
|
+
const matched = templates.find((t) => t.content === selected.value);
|
|
42851
|
+
if (matched) {
|
|
42852
|
+
this.options.editor.fire("templatechange", matched);
|
|
42853
|
+
}
|
|
42058
42854
|
});
|
|
42059
42855
|
}
|
|
42060
42856
|
createDropdown(name, label, options, onSelect, getCurrentValue) {
|
|
@@ -42192,13 +42988,15 @@ class Toolbar {
|
|
|
42192
42988
|
return wrapper;
|
|
42193
42989
|
}
|
|
42194
42990
|
bindEvents() {
|
|
42195
|
-
|
|
42991
|
+
this.unbindEvents();
|
|
42992
|
+
this.boundClickHandler = (e) => {
|
|
42196
42993
|
const target = e.target;
|
|
42197
42994
|
if (!target.closest(".md-toolbar-dropdown, .md-toolbar-colorpicker")) {
|
|
42198
42995
|
this.closeAllDropdowns();
|
|
42199
42996
|
}
|
|
42200
|
-
}
|
|
42201
|
-
document.addEventListener("
|
|
42997
|
+
};
|
|
42998
|
+
document.addEventListener("click", this.boundClickHandler);
|
|
42999
|
+
this.boundKeydownHandler = (e) => {
|
|
42202
43000
|
if (!this.tiptap?.isFocused) return;
|
|
42203
43001
|
const isMod = e.ctrlKey || e.metaKey;
|
|
42204
43002
|
if (isMod && e.key === "b") {
|
|
@@ -42221,7 +43019,18 @@ class Toolbar {
|
|
|
42221
43019
|
e.preventDefault();
|
|
42222
43020
|
this.openSearchReplace();
|
|
42223
43021
|
}
|
|
42224
|
-
}
|
|
43022
|
+
};
|
|
43023
|
+
document.addEventListener("keydown", this.boundKeydownHandler);
|
|
43024
|
+
}
|
|
43025
|
+
unbindEvents() {
|
|
43026
|
+
if (this.boundClickHandler) {
|
|
43027
|
+
document.removeEventListener("click", this.boundClickHandler);
|
|
43028
|
+
this.boundClickHandler = null;
|
|
43029
|
+
}
|
|
43030
|
+
if (this.boundKeydownHandler) {
|
|
43031
|
+
document.removeEventListener("keydown", this.boundKeydownHandler);
|
|
43032
|
+
this.boundKeydownHandler = null;
|
|
43033
|
+
}
|
|
42225
43034
|
}
|
|
42226
43035
|
closeAllDropdowns() {
|
|
42227
43036
|
this.dropdowns.forEach((dropdown) => {
|
|
@@ -42290,10 +43099,20 @@ class Toolbar {
|
|
|
42290
43099
|
}
|
|
42291
43100
|
// Dialog methods
|
|
42292
43101
|
openImageDialog() {
|
|
42293
|
-
|
|
42294
|
-
|
|
42295
|
-
|
|
43102
|
+
if (!this.imageUpload) {
|
|
43103
|
+
this.imageUpload = new ImageUpload({
|
|
43104
|
+
onInsert: (src, alt) => {
|
|
43105
|
+
this.tiptap?.chain().focus().setImage({ src, alt: alt ?? "" }).run();
|
|
43106
|
+
},
|
|
43107
|
+
uploadUrl: this.options.config.images_upload_url,
|
|
43108
|
+
uploadCredentials: this.options.config.images_upload_credentials,
|
|
43109
|
+
uploadBasePath: this.options.config.images_upload_base_path,
|
|
43110
|
+
uploadMaxSize: this.options.config.images_upload_max_size,
|
|
43111
|
+
uploadHeaders: this.options.config.images_upload_headers,
|
|
43112
|
+
trans: this.trans
|
|
43113
|
+
});
|
|
42296
43114
|
}
|
|
43115
|
+
this.imageUpload.open();
|
|
42297
43116
|
}
|
|
42298
43117
|
openLinkDialog() {
|
|
42299
43118
|
const previousUrl = this.tiptap?.getAttributes("link").href ?? "";
|
|
@@ -42373,18 +43192,108 @@ class Toolbar {
|
|
|
42373
43192
|
}
|
|
42374
43193
|
this.updateButtonStates();
|
|
42375
43194
|
}
|
|
43195
|
+
rebuild() {
|
|
43196
|
+
this.charMap?.destroy();
|
|
43197
|
+
this.charMap = null;
|
|
43198
|
+
this.emojiPicker?.destroy();
|
|
43199
|
+
this.emojiPicker = null;
|
|
43200
|
+
this.imageUpload?.destroy();
|
|
43201
|
+
this.imageUpload = null;
|
|
43202
|
+
this.searchReplace?.destroy();
|
|
43203
|
+
this.searchReplace = null;
|
|
43204
|
+
this.buttonElements.clear();
|
|
43205
|
+
this.dropdowns.clear();
|
|
43206
|
+
this.overflowEl = null;
|
|
43207
|
+
this.toggleBtn = null;
|
|
43208
|
+
this.render();
|
|
43209
|
+
this.bindEvents();
|
|
43210
|
+
}
|
|
42376
43211
|
destroy() {
|
|
42377
43212
|
if (this.updateInterval) {
|
|
42378
43213
|
clearInterval(this.updateInterval);
|
|
42379
43214
|
}
|
|
43215
|
+
this.unbindEvents();
|
|
42380
43216
|
this.charMap?.destroy();
|
|
42381
43217
|
this.emojiPicker?.destroy();
|
|
43218
|
+
this.imageUpload?.destroy();
|
|
42382
43219
|
this.searchReplace?.destroy();
|
|
42383
43220
|
this.buttonElements.clear();
|
|
42384
43221
|
this.dropdowns.clear();
|
|
42385
43222
|
this.container.innerHTML = "";
|
|
42386
43223
|
}
|
|
42387
43224
|
}
|
|
43225
|
+
const SVG_ALIGN_LEFT = '<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="15" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
|
|
43226
|
+
const SVG_ALIGN_CENTER = '<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="6" y1="12" x2="18" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
|
|
43227
|
+
const SVG_ALIGN_RIGHT = '<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="9" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>';
|
|
43228
|
+
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>';
|
|
43229
|
+
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>';
|
|
43230
|
+
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>';
|
|
43231
|
+
const DEFAULT_ICONS = {
|
|
43232
|
+
bold: "B",
|
|
43233
|
+
italic: "I",
|
|
43234
|
+
underline: "U",
|
|
43235
|
+
strikethrough: "S",
|
|
43236
|
+
bullist: "•",
|
|
43237
|
+
numlist: "1.",
|
|
43238
|
+
outdent: "←",
|
|
43239
|
+
indent: "→",
|
|
43240
|
+
blockquote: '"',
|
|
43241
|
+
alignleft: SVG_ALIGN_LEFT,
|
|
43242
|
+
aligncenter: SVG_ALIGN_CENTER,
|
|
43243
|
+
alignright: SVG_ALIGN_RIGHT,
|
|
43244
|
+
alignjustify: SVG_ALIGN_JUSTIFY,
|
|
43245
|
+
removeformat: "✕",
|
|
43246
|
+
copy: "📋",
|
|
43247
|
+
cut: "✂",
|
|
43248
|
+
paste: "📄",
|
|
43249
|
+
undo: "↩",
|
|
43250
|
+
redo: "↪",
|
|
43251
|
+
image: SVG_IMAGE,
|
|
43252
|
+
charmap: "Ω",
|
|
43253
|
+
emoticons: "😀",
|
|
43254
|
+
fullscreen: "⛶",
|
|
43255
|
+
preview: "👁",
|
|
43256
|
+
code: SVG_CODE,
|
|
43257
|
+
link: "🔗",
|
|
43258
|
+
codesample: "{}",
|
|
43259
|
+
ltr: "⇐",
|
|
43260
|
+
rtl: "⇒",
|
|
43261
|
+
searchreplace: "🔍",
|
|
43262
|
+
togglemore: "…"
|
|
43263
|
+
};
|
|
43264
|
+
const CONFAB_ICONS = {
|
|
43265
|
+
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>',
|
|
43266
|
+
italic: '<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="19" y1="4" x2="10" y2="4"/><line x1="14" y1="20" x2="5" y2="20"/><line x1="15" y1="4" x2="9" y2="20"/></svg>',
|
|
43267
|
+
underline: '<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 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3"/><line x1="4" y1="21" x2="20" y2="21"/></svg>',
|
|
43268
|
+
strikethrough: '<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="M16 4c-1.5-1-3.2-1.5-5-1.5C7.7 2.5 5 4.6 5 7.5c0 1.5.7 2.7 1.8 3.5"/><path d="M8 20c1.5 1 3.2 1.5 5 1.5 3.3 0 6-2.1 6-5 0-1.5-.7-2.7-1.8-3.5"/><line x1="2" y1="12" x2="22" y2="12"/></svg>',
|
|
43269
|
+
bullist: '<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="9" y1="6" x2="20" y2="6"/><line x1="9" y1="12" x2="20" y2="12"/><line x1="9" y1="18" x2="20" y2="18"/><circle cx="5" cy="6" r="1" fill="currentColor" stroke="none"/><circle cx="5" cy="12" r="1" fill="currentColor" stroke="none"/><circle cx="5" cy="18" r="1" fill="currentColor" stroke="none"/></svg>',
|
|
43270
|
+
numlist: '<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="10" y1="6" x2="21" y2="6"/><line x1="10" y1="12" x2="21" y2="12"/><line x1="10" y1="18" x2="21" y2="18"/><text x="3" y="8" font-size="7" fill="currentColor" stroke="none" font-family="sans-serif">1</text><text x="3" y="14" font-size="7" fill="currentColor" stroke="none" font-family="sans-serif">2</text><text x="3" y="20" font-size="7" fill="currentColor" stroke="none" font-family="sans-serif">3</text></svg>',
|
|
43271
|
+
outdent: '<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="3" y1="4" x2="21" y2="4"/><line x1="3" y1="20" x2="21" y2="20"/><line x1="11" y1="9" x2="21" y2="9"/><line x1="11" y1="15" x2="21" y2="15"/><polyline points="7 9 3 12 7 15"/></svg>',
|
|
43272
|
+
indent: '<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="3" y1="4" x2="21" y2="4"/><line x1="3" y1="20" x2="21" y2="20"/><line x1="11" y1="9" x2="21" y2="9"/><line x1="11" y1="15" x2="21" y2="15"/><polyline points="3 9 7 12 3 15"/></svg>',
|
|
43273
|
+
blockquote: '<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="M3 21c3 0 7-1 7-8V5c0-1.25-.76-2.02-2-2H4c-1.25 0-2 .76-2 2v6c0 1.25.76 2 2 2h4.5c-1 2-3.5 3.5-5.5 3.5"/><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.76-2.02-2-2h-4c-1.25 0-2 .76-2 2v6c0 1.25.76 2 2 2h4.5c-1 2-3.5 3.5-5.5 3.5"/></svg>',
|
|
43274
|
+
alignleft: SVG_ALIGN_LEFT,
|
|
43275
|
+
aligncenter: SVG_ALIGN_CENTER,
|
|
43276
|
+
alignright: SVG_ALIGN_RIGHT,
|
|
43277
|
+
alignjustify: SVG_ALIGN_JUSTIFY,
|
|
43278
|
+
removeformat: '<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 7h11l-3 14"/><line x1="4" y1="7" x2="9" y2="3"/><line x1="18" y1="4" x2="22" y2="8"/><line x1="18" y1="8" x2="22" y2="4"/></svg>',
|
|
43279
|
+
copy: '<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="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',
|
|
43280
|
+
cut: '<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="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><line x1="20" y1="4" x2="8.1" y2="15.9"/><line x1="14.5" y1="9.5" x2="20" y2="4"/><line x1="8.1" y1="8.1" x2="20" y2="20"/></svg>',
|
|
43281
|
+
paste: '<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="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><rect x="8" y="2" width="8" height="4" rx="1"/></svg>',
|
|
43282
|
+
undo: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="1 4 1 10 7 10"/><path d="M3.5 14a9 9 0 1 0 2.2-5.8L1 10"/></svg>',
|
|
43283
|
+
redo: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><path d="M20.5 14a9 9 0 1 1-2.2-5.8L23 10"/></svg>',
|
|
43284
|
+
image: SVG_IMAGE,
|
|
43285
|
+
charmap: "Ω",
|
|
43286
|
+
emoticons: "😀",
|
|
43287
|
+
fullscreen: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 3 21 3 21 9"/><polyline points="9 21 3 21 3 15"/><line x1="21" y1="3" x2="14" y2="10"/><line x1="3" y1="21" x2="10" y2="14"/></svg>',
|
|
43288
|
+
preview: '<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="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>',
|
|
43289
|
+
code: SVG_CODE,
|
|
43290
|
+
link: '<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="M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7.1-7.1l-1.7 1.7"/><path d="M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7.1 7.1l1.7-1.7"/></svg>',
|
|
43291
|
+
codesample: '<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="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5a2 2 0 0 0 2 2h1"/><path d="M16 3h1a2 2 0 0 1 2 2v5a2 2 0 0 0 2 2 2 2 0 0 0-2 2v5a2 2 0 0 1-2 2h-1"/></svg>',
|
|
43292
|
+
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>',
|
|
43293
|
+
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>',
|
|
43294
|
+
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>',
|
|
43295
|
+
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>'
|
|
43296
|
+
};
|
|
42388
43297
|
const FontSize = Extension.create({
|
|
42389
43298
|
name: "fontSize",
|
|
42390
43299
|
addOptions() {
|
|
@@ -42512,20 +43421,2107 @@ const TextDirection = Extension.create({
|
|
|
42512
43421
|
};
|
|
42513
43422
|
}
|
|
42514
43423
|
});
|
|
43424
|
+
const SignatureBlock = Node3.create({
|
|
43425
|
+
name: "signatureBlock",
|
|
43426
|
+
group: "block",
|
|
43427
|
+
content: "block+",
|
|
43428
|
+
defining: true,
|
|
43429
|
+
isolating: true,
|
|
43430
|
+
addAttributes() {
|
|
43431
|
+
return {
|
|
43432
|
+
id: {
|
|
43433
|
+
default: "signature"
|
|
43434
|
+
}
|
|
43435
|
+
};
|
|
43436
|
+
},
|
|
43437
|
+
parseHTML() {
|
|
43438
|
+
return [
|
|
43439
|
+
{
|
|
43440
|
+
tag: 'div[id="signature"]'
|
|
43441
|
+
}
|
|
43442
|
+
];
|
|
43443
|
+
},
|
|
43444
|
+
renderHTML({ HTMLAttributes }) {
|
|
43445
|
+
return ["div", mergeAttributes(HTMLAttributes), 0];
|
|
43446
|
+
}
|
|
43447
|
+
});
|
|
43448
|
+
const en = {
|
|
43449
|
+
"Bold": "Bold",
|
|
43450
|
+
"Italic": "Italic",
|
|
43451
|
+
"Underline": "Underline",
|
|
43452
|
+
"Strikethrough": "Strikethrough",
|
|
43453
|
+
"Bullet list": "Bullet list",
|
|
43454
|
+
"Numbered list": "Numbered list",
|
|
43455
|
+
"Decrease indent": "Decrease indent",
|
|
43456
|
+
"Increase indent": "Increase indent",
|
|
43457
|
+
"Blockquote": "Blockquote",
|
|
43458
|
+
"Align left": "Align left",
|
|
43459
|
+
"Align center": "Align center",
|
|
43460
|
+
"Align right": "Align right",
|
|
43461
|
+
"Justify": "Justify",
|
|
43462
|
+
"Text color": "Text color",
|
|
43463
|
+
"Background color": "Background color",
|
|
43464
|
+
"Remove formatting": "Remove formatting",
|
|
43465
|
+
"Copy": "Copy",
|
|
43466
|
+
"Cut": "Cut",
|
|
43467
|
+
"Paste": "Paste",
|
|
43468
|
+
"Undo": "Undo",
|
|
43469
|
+
"Redo": "Redo",
|
|
43470
|
+
"Insert image": "Insert image",
|
|
43471
|
+
"Special character": "Special character",
|
|
43472
|
+
"Emoticons": "Emoticons",
|
|
43473
|
+
"Fullscreen": "Fullscreen",
|
|
43474
|
+
"Preview": "Preview",
|
|
43475
|
+
"Source code": "Source code",
|
|
43476
|
+
"Insert link": "Insert link",
|
|
43477
|
+
"Code sample": "Code sample",
|
|
43478
|
+
"Left to right": "Left to right",
|
|
43479
|
+
"Right to left": "Right to left",
|
|
43480
|
+
"Find and replace": "Find and replace",
|
|
43481
|
+
"Font": "Font",
|
|
43482
|
+
"Font size": "Font size",
|
|
43483
|
+
"Line height": "Line height",
|
|
43484
|
+
"Templates": "Templates",
|
|
43485
|
+
"Apply": "Apply",
|
|
43486
|
+
"Enter image URL:": "Enter image URL:",
|
|
43487
|
+
"Enter URL:": "Enter URL:",
|
|
43488
|
+
"Edit HTML source:": "Edit HTML source:",
|
|
43489
|
+
"Find and Replace": "Find and Replace",
|
|
43490
|
+
"Find": "Find",
|
|
43491
|
+
"Replace": "Replace",
|
|
43492
|
+
"Case sensitive": "Case sensitive",
|
|
43493
|
+
"Whole word": "Whole word",
|
|
43494
|
+
"Previous": "Previous",
|
|
43495
|
+
"Next": "Next",
|
|
43496
|
+
"Replace All": "Replace All",
|
|
43497
|
+
"Search...": "Search...",
|
|
43498
|
+
"Special Character": "Special Character",
|
|
43499
|
+
"Upload": "Upload",
|
|
43500
|
+
"URL": "URL",
|
|
43501
|
+
"Browse...": "Browse...",
|
|
43502
|
+
"Drop image here or click to browse": "Drop image here or click to browse",
|
|
43503
|
+
"Alt text": "Alt text",
|
|
43504
|
+
"Insert": "Insert",
|
|
43505
|
+
"Cancel": "Cancel",
|
|
43506
|
+
"Uploading...": "Uploading...",
|
|
43507
|
+
"Upload failed": "Upload failed",
|
|
43508
|
+
"Invalid image URL": "Invalid image URL",
|
|
43509
|
+
"File too large": "File too large",
|
|
43510
|
+
"Invalid file type": "Invalid file type",
|
|
43511
|
+
"More": "More"
|
|
43512
|
+
};
|
|
43513
|
+
const ar = {
|
|
43514
|
+
"Bold": "غامق",
|
|
43515
|
+
"Italic": "مائل",
|
|
43516
|
+
"Underline": "تسطير",
|
|
43517
|
+
"Strikethrough": "يتوسطه خط",
|
|
43518
|
+
"Bullet list": "قائمة نقطية",
|
|
43519
|
+
"Numbered list": "قائمة مرقمة",
|
|
43520
|
+
"Decrease indent": "تقليل المسافة البادئة",
|
|
43521
|
+
"Increase indent": "زيادة المسافة البادئة",
|
|
43522
|
+
"Blockquote": "اقتباس",
|
|
43523
|
+
"Align left": "محاذاة لليسار",
|
|
43524
|
+
"Align center": "توسيط",
|
|
43525
|
+
"Align right": "محاذاة لليمين",
|
|
43526
|
+
"Justify": "ضبط",
|
|
43527
|
+
"Text color": "لون النص",
|
|
43528
|
+
"Background color": "لون الخلفية",
|
|
43529
|
+
"Remove formatting": "إزالة التنسيق",
|
|
43530
|
+
"Copy": "نسخ",
|
|
43531
|
+
"Cut": "قص",
|
|
43532
|
+
"Paste": "لصق",
|
|
43533
|
+
"Undo": "تراجع",
|
|
43534
|
+
"Redo": "إعادة",
|
|
43535
|
+
"Insert image": "إدراج صورة",
|
|
43536
|
+
"Special character": "حرف خاص",
|
|
43537
|
+
"Emoticons": "رموز تعبيرية",
|
|
43538
|
+
"Fullscreen": "ملء الشاشة",
|
|
43539
|
+
"Preview": "معاينة",
|
|
43540
|
+
"Source code": "شفرة المصدر",
|
|
43541
|
+
"Insert link": "إدراج رابط",
|
|
43542
|
+
"Code sample": "عينة من الشفرة",
|
|
43543
|
+
"Left to right": "من اليسار إلى اليمين",
|
|
43544
|
+
"Right to left": "من اليمين إلى اليسار",
|
|
43545
|
+
"Find and replace": "بحث واستبدال",
|
|
43546
|
+
"Font": "الخط",
|
|
43547
|
+
"Font size": "حجم الخط",
|
|
43548
|
+
"Line height": "ارتفاع السطر",
|
|
43549
|
+
"Templates": "قوالب",
|
|
43550
|
+
"Apply": "تطبيق",
|
|
43551
|
+
"Enter image URL:": "أدخل رابط الصورة:",
|
|
43552
|
+
"Enter URL:": "أدخل الرابط:",
|
|
43553
|
+
"Edit HTML source:": "تحرير مصدر HTML:",
|
|
43554
|
+
"Find and Replace": "بحث واستبدال",
|
|
43555
|
+
"Find": "بحث",
|
|
43556
|
+
"Replace": "استبدال",
|
|
43557
|
+
"Case sensitive": "حساس لحالة الأحرف",
|
|
43558
|
+
"Whole word": "كلمة كاملة",
|
|
43559
|
+
"Previous": "السابق",
|
|
43560
|
+
"Next": "التالي",
|
|
43561
|
+
"Replace All": "استبدال الكل",
|
|
43562
|
+
"Search...": "بحث...",
|
|
43563
|
+
"Special Character": "حرف خاص",
|
|
43564
|
+
"Upload": "رفع",
|
|
43565
|
+
"URL": "رابط",
|
|
43566
|
+
"Browse...": "استعراض...",
|
|
43567
|
+
"Drop image here or click to browse": "أسقط الصورة هنا أو انقر للاستعراض",
|
|
43568
|
+
"Alt text": "نص بديل",
|
|
43569
|
+
"Insert": "إدراج",
|
|
43570
|
+
"Cancel": "إلغاء",
|
|
43571
|
+
"Uploading...": "جارٍ الرفع...",
|
|
43572
|
+
"Upload failed": "فشل الرفع",
|
|
43573
|
+
"Invalid image URL": "رابط صورة غير صالح",
|
|
43574
|
+
"File too large": "الملف كبير جداً",
|
|
43575
|
+
"Invalid file type": "نوع ملف غير صالح",
|
|
43576
|
+
"More": "المزيد"
|
|
43577
|
+
};
|
|
43578
|
+
const ca = {
|
|
43579
|
+
"Bold": "Negreta",
|
|
43580
|
+
"Italic": "Cursiva",
|
|
43581
|
+
"Underline": "Subratllat",
|
|
43582
|
+
"Strikethrough": "Barrat",
|
|
43583
|
+
"Bullet list": "Llista de pics",
|
|
43584
|
+
"Numbered list": "Llista numerada",
|
|
43585
|
+
"Decrease indent": "Reduir sagnat",
|
|
43586
|
+
"Increase indent": "Augmentar sagnat",
|
|
43587
|
+
"Blockquote": "Citació",
|
|
43588
|
+
"Align left": "Alinear a l'esquerra",
|
|
43589
|
+
"Align center": "Centrar",
|
|
43590
|
+
"Align right": "Alinear a la dreta",
|
|
43591
|
+
"Justify": "Justificar",
|
|
43592
|
+
"Text color": "Color del text",
|
|
43593
|
+
"Background color": "Color de fons",
|
|
43594
|
+
"Remove formatting": "Eliminar format",
|
|
43595
|
+
"Copy": "Copiar",
|
|
43596
|
+
"Cut": "Tallar",
|
|
43597
|
+
"Paste": "Enganxar",
|
|
43598
|
+
"Undo": "Desfer",
|
|
43599
|
+
"Redo": "Refer",
|
|
43600
|
+
"Insert image": "Inserir imatge",
|
|
43601
|
+
"Special character": "Caràcter especial",
|
|
43602
|
+
"Emoticons": "Emoticones",
|
|
43603
|
+
"Fullscreen": "Pantalla completa",
|
|
43604
|
+
"Preview": "Previsualització",
|
|
43605
|
+
"Source code": "Codi font",
|
|
43606
|
+
"Insert link": "Inserir enllaç",
|
|
43607
|
+
"Code sample": "Mostra de codi",
|
|
43608
|
+
"Left to right": "D'esquerra a dreta",
|
|
43609
|
+
"Right to left": "De dreta a esquerra",
|
|
43610
|
+
"Find and replace": "Cercar i reemplaçar",
|
|
43611
|
+
"Font": "Tipus de lletra",
|
|
43612
|
+
"Font size": "Mida de lletra",
|
|
43613
|
+
"Line height": "Alçada de línia",
|
|
43614
|
+
"Templates": "Plantilles",
|
|
43615
|
+
"Apply": "Aplicar",
|
|
43616
|
+
"Enter image URL:": "Introduïu l'URL de la imatge:",
|
|
43617
|
+
"Enter URL:": "Introduïu l'URL:",
|
|
43618
|
+
"Edit HTML source:": "Editar codi font HTML:",
|
|
43619
|
+
"Find and Replace": "Cercar i reemplaçar",
|
|
43620
|
+
"Find": "Cercar",
|
|
43621
|
+
"Replace": "Reemplaçar",
|
|
43622
|
+
"Case sensitive": "Distingir majúscules",
|
|
43623
|
+
"Whole word": "Paraula sencera",
|
|
43624
|
+
"Previous": "Anterior",
|
|
43625
|
+
"Next": "Següent",
|
|
43626
|
+
"Replace All": "Reemplaçar tot",
|
|
43627
|
+
"Search...": "Cercar...",
|
|
43628
|
+
"Special Character": "Caràcter especial",
|
|
43629
|
+
"Upload": "Pujar",
|
|
43630
|
+
"URL": "URL",
|
|
43631
|
+
"Browse...": "Explorar...",
|
|
43632
|
+
"Drop image here or click to browse": "Deixa anar la imatge aquí o fes clic per explorar",
|
|
43633
|
+
"Alt text": "Text alternatiu",
|
|
43634
|
+
"Insert": "Inserir",
|
|
43635
|
+
"Cancel": "Cancel·lar",
|
|
43636
|
+
"Uploading...": "Pujant...",
|
|
43637
|
+
"Upload failed": "Error en pujar",
|
|
43638
|
+
"Invalid image URL": "URL d'imatge no vàlida",
|
|
43639
|
+
"File too large": "Fitxer massa gran",
|
|
43640
|
+
"Invalid file type": "Tipus de fitxer no vàlid",
|
|
43641
|
+
"More": "Més"
|
|
43642
|
+
};
|
|
43643
|
+
const zh = {
|
|
43644
|
+
"Bold": "粗体",
|
|
43645
|
+
"Italic": "斜体",
|
|
43646
|
+
"Underline": "下划线",
|
|
43647
|
+
"Strikethrough": "删除线",
|
|
43648
|
+
"Bullet list": "项目符号列表",
|
|
43649
|
+
"Numbered list": "编号列表",
|
|
43650
|
+
"Decrease indent": "减少缩进",
|
|
43651
|
+
"Increase indent": "增加缩进",
|
|
43652
|
+
"Blockquote": "引用",
|
|
43653
|
+
"Align left": "左对齐",
|
|
43654
|
+
"Align center": "居中对齐",
|
|
43655
|
+
"Align right": "右对齐",
|
|
43656
|
+
"Justify": "两端对齐",
|
|
43657
|
+
"Text color": "文字颜色",
|
|
43658
|
+
"Background color": "背景颜色",
|
|
43659
|
+
"Remove formatting": "清除格式",
|
|
43660
|
+
"Copy": "复制",
|
|
43661
|
+
"Cut": "剪切",
|
|
43662
|
+
"Paste": "粘贴",
|
|
43663
|
+
"Undo": "撤销",
|
|
43664
|
+
"Redo": "重做",
|
|
43665
|
+
"Insert image": "插入图片",
|
|
43666
|
+
"Special character": "特殊字符",
|
|
43667
|
+
"Emoticons": "表情符号",
|
|
43668
|
+
"Fullscreen": "全屏",
|
|
43669
|
+
"Preview": "预览",
|
|
43670
|
+
"Source code": "源代码",
|
|
43671
|
+
"Insert link": "插入链接",
|
|
43672
|
+
"Code sample": "代码示例",
|
|
43673
|
+
"Left to right": "从左到右",
|
|
43674
|
+
"Right to left": "从右到左",
|
|
43675
|
+
"Find and replace": "查找和替换",
|
|
43676
|
+
"Font": "字体",
|
|
43677
|
+
"Font size": "字号",
|
|
43678
|
+
"Line height": "行高",
|
|
43679
|
+
"Templates": "模板",
|
|
43680
|
+
"Apply": "应用",
|
|
43681
|
+
"Enter image URL:": "输入图片链接:",
|
|
43682
|
+
"Enter URL:": "输入链接:",
|
|
43683
|
+
"Edit HTML source:": "编辑HTML源代码:",
|
|
43684
|
+
"Find and Replace": "查找和替换",
|
|
43685
|
+
"Find": "查找",
|
|
43686
|
+
"Replace": "替换",
|
|
43687
|
+
"Case sensitive": "区分大小写",
|
|
43688
|
+
"Whole word": "全字匹配",
|
|
43689
|
+
"Previous": "上一个",
|
|
43690
|
+
"Next": "下一个",
|
|
43691
|
+
"Replace All": "全部替换",
|
|
43692
|
+
"Search...": "搜索...",
|
|
43693
|
+
"Special Character": "特殊字符",
|
|
43694
|
+
"Upload": "上传",
|
|
43695
|
+
"URL": "URL",
|
|
43696
|
+
"Browse...": "浏览...",
|
|
43697
|
+
"Drop image here or click to browse": "将图片拖放到此处或点击浏览",
|
|
43698
|
+
"Alt text": "替代文本",
|
|
43699
|
+
"Insert": "插入",
|
|
43700
|
+
"Cancel": "取消",
|
|
43701
|
+
"Uploading...": "上传中...",
|
|
43702
|
+
"Upload failed": "上传失败",
|
|
43703
|
+
"Invalid image URL": "无效的图片 URL",
|
|
43704
|
+
"File too large": "文件过大",
|
|
43705
|
+
"Invalid file type": "无效的文件类型",
|
|
43706
|
+
"More": "更多"
|
|
43707
|
+
};
|
|
43708
|
+
const cs = {
|
|
43709
|
+
"Bold": "Tučné",
|
|
43710
|
+
"Italic": "Kurzíva",
|
|
43711
|
+
"Underline": "Podtržené",
|
|
43712
|
+
"Strikethrough": "Přeškrtnuté",
|
|
43713
|
+
"Bullet list": "Odrážkový seznam",
|
|
43714
|
+
"Numbered list": "Číslovaný seznam",
|
|
43715
|
+
"Decrease indent": "Zmenšit odsazení",
|
|
43716
|
+
"Increase indent": "Zvětšit odsazení",
|
|
43717
|
+
"Blockquote": "Citace",
|
|
43718
|
+
"Align left": "Zarovnat vlevo",
|
|
43719
|
+
"Align center": "Zarovnat na střed",
|
|
43720
|
+
"Align right": "Zarovnat vpravo",
|
|
43721
|
+
"Justify": "Zarovnat do bloku",
|
|
43722
|
+
"Text color": "Barva textu",
|
|
43723
|
+
"Background color": "Barva pozadí",
|
|
43724
|
+
"Remove formatting": "Odstranit formátování",
|
|
43725
|
+
"Copy": "Kopírovat",
|
|
43726
|
+
"Cut": "Vyjmout",
|
|
43727
|
+
"Paste": "Vložit",
|
|
43728
|
+
"Undo": "Zpět",
|
|
43729
|
+
"Redo": "Znovu",
|
|
43730
|
+
"Insert image": "Vložit obrázek",
|
|
43731
|
+
"Special character": "Speciální znak",
|
|
43732
|
+
"Emoticons": "Emotikony",
|
|
43733
|
+
"Fullscreen": "Celá obrazovka",
|
|
43734
|
+
"Preview": "Náhled",
|
|
43735
|
+
"Source code": "Zdrojový kód",
|
|
43736
|
+
"Insert link": "Vložit odkaz",
|
|
43737
|
+
"Code sample": "Ukázka kódu",
|
|
43738
|
+
"Left to right": "Zleva doprava",
|
|
43739
|
+
"Right to left": "Zprava doleva",
|
|
43740
|
+
"Find and replace": "Najít a nahradit",
|
|
43741
|
+
"Font": "Písmo",
|
|
43742
|
+
"Font size": "Velikost písma",
|
|
43743
|
+
"Line height": "Výška řádku",
|
|
43744
|
+
"Templates": "Šablony",
|
|
43745
|
+
"Apply": "Použít",
|
|
43746
|
+
"Enter image URL:": "Zadejte URL obrázku:",
|
|
43747
|
+
"Enter URL:": "Zadejte URL:",
|
|
43748
|
+
"Edit HTML source:": "Upravit HTML zdroj:",
|
|
43749
|
+
"Find and Replace": "Najít a nahradit",
|
|
43750
|
+
"Find": "Najít",
|
|
43751
|
+
"Replace": "Nahradit",
|
|
43752
|
+
"Case sensitive": "Rozlišovat velikost písmen",
|
|
43753
|
+
"Whole word": "Celé slovo",
|
|
43754
|
+
"Previous": "Předchozí",
|
|
43755
|
+
"Next": "Další",
|
|
43756
|
+
"Replace All": "Nahradit vše",
|
|
43757
|
+
"Search...": "Hledat...",
|
|
43758
|
+
"Special Character": "Speciální znak",
|
|
43759
|
+
"Upload": "Nahrát",
|
|
43760
|
+
"URL": "URL",
|
|
43761
|
+
"Browse...": "Procházet...",
|
|
43762
|
+
"Drop image here or click to browse": "Přetáhněte obrázek sem nebo klikněte pro výběr",
|
|
43763
|
+
"Alt text": "Alternativní text",
|
|
43764
|
+
"Insert": "Vložit",
|
|
43765
|
+
"Cancel": "Zrušit",
|
|
43766
|
+
"Uploading...": "Nahrávání...",
|
|
43767
|
+
"Upload failed": "Nahrávání selhalo",
|
|
43768
|
+
"Invalid image URL": "Neplatná URL obrázku",
|
|
43769
|
+
"File too large": "Soubor je příliš velký",
|
|
43770
|
+
"Invalid file type": "Neplatný typ souboru",
|
|
43771
|
+
"More": "Více"
|
|
43772
|
+
};
|
|
43773
|
+
const da = {
|
|
43774
|
+
"Bold": "Fed",
|
|
43775
|
+
"Italic": "Kursiv",
|
|
43776
|
+
"Underline": "Understreget",
|
|
43777
|
+
"Strikethrough": "Gennemstreget",
|
|
43778
|
+
"Bullet list": "Punktliste",
|
|
43779
|
+
"Numbered list": "Nummereret liste",
|
|
43780
|
+
"Decrease indent": "Formindsk indrykning",
|
|
43781
|
+
"Increase indent": "Forøg indrykning",
|
|
43782
|
+
"Blockquote": "Blokcitat",
|
|
43783
|
+
"Align left": "Venstrejuster",
|
|
43784
|
+
"Align center": "Centrer",
|
|
43785
|
+
"Align right": "Højrejuster",
|
|
43786
|
+
"Justify": "Lige margener",
|
|
43787
|
+
"Text color": "Tekstfarve",
|
|
43788
|
+
"Background color": "Baggrundsfarve",
|
|
43789
|
+
"Remove formatting": "Fjern formatering",
|
|
43790
|
+
"Copy": "Kopier",
|
|
43791
|
+
"Cut": "Klip",
|
|
43792
|
+
"Paste": "Indsæt",
|
|
43793
|
+
"Undo": "Fortryd",
|
|
43794
|
+
"Redo": "Annuller fortryd",
|
|
43795
|
+
"Insert image": "Indsæt billede",
|
|
43796
|
+
"Special character": "Specialtegn",
|
|
43797
|
+
"Emoticons": "Humørikoner",
|
|
43798
|
+
"Fullscreen": "Fuldskærm",
|
|
43799
|
+
"Preview": "Forhåndsvisning",
|
|
43800
|
+
"Source code": "Kildekode",
|
|
43801
|
+
"Insert link": "Indsæt link",
|
|
43802
|
+
"Code sample": "Kodeeksempel",
|
|
43803
|
+
"Left to right": "Venstre mod højre",
|
|
43804
|
+
"Right to left": "Højre mod venstre",
|
|
43805
|
+
"Find and replace": "Søg og erstat",
|
|
43806
|
+
"Font": "Skrifttype",
|
|
43807
|
+
"Font size": "Skriftstørrelse",
|
|
43808
|
+
"Line height": "Linjehøjde",
|
|
43809
|
+
"Templates": "Skabeloner",
|
|
43810
|
+
"Apply": "Anvend",
|
|
43811
|
+
"Enter image URL:": "Indtast billed-URL:",
|
|
43812
|
+
"Enter URL:": "Indtast URL:",
|
|
43813
|
+
"Edit HTML source:": "Rediger HTML-kilde:",
|
|
43814
|
+
"Find and Replace": "Søg og erstat",
|
|
43815
|
+
"Find": "Søg",
|
|
43816
|
+
"Replace": "Erstat",
|
|
43817
|
+
"Case sensitive": "Forskel på store/små bogstaver",
|
|
43818
|
+
"Whole word": "Helt ord",
|
|
43819
|
+
"Previous": "Forrige",
|
|
43820
|
+
"Next": "Næste",
|
|
43821
|
+
"Replace All": "Erstat alle",
|
|
43822
|
+
"Search...": "Søg...",
|
|
43823
|
+
"Special Character": "Specialtegn",
|
|
43824
|
+
"Upload": "Upload",
|
|
43825
|
+
"URL": "URL",
|
|
43826
|
+
"Browse...": "Gennemse...",
|
|
43827
|
+
"Drop image here or click to browse": "Træk billede hertil eller klik for at gennemse",
|
|
43828
|
+
"Alt text": "Alternativ tekst",
|
|
43829
|
+
"Insert": "Indsæt",
|
|
43830
|
+
"Cancel": "Annuller",
|
|
43831
|
+
"Uploading...": "Uploader...",
|
|
43832
|
+
"Upload failed": "Upload mislykkedes",
|
|
43833
|
+
"Invalid image URL": "Ugyldig billed-URL",
|
|
43834
|
+
"File too large": "Filen er for stor",
|
|
43835
|
+
"Invalid file type": "Ugyldig filtype",
|
|
43836
|
+
"More": "Mere"
|
|
43837
|
+
};
|
|
43838
|
+
const enGb = {
|
|
43839
|
+
"Bold": "Bold",
|
|
43840
|
+
"Italic": "Italic",
|
|
43841
|
+
"Underline": "Underline",
|
|
43842
|
+
"Strikethrough": "Strikethrough",
|
|
43843
|
+
"Bullet list": "Bullet list",
|
|
43844
|
+
"Numbered list": "Numbered list",
|
|
43845
|
+
"Decrease indent": "Decrease indent",
|
|
43846
|
+
"Increase indent": "Increase indent",
|
|
43847
|
+
"Blockquote": "Blockquote",
|
|
43848
|
+
"Align left": "Align left",
|
|
43849
|
+
"Align center": "Align centre",
|
|
43850
|
+
"Align right": "Align right",
|
|
43851
|
+
"Justify": "Justify",
|
|
43852
|
+
"Text color": "Text colour",
|
|
43853
|
+
"Background color": "Background colour",
|
|
43854
|
+
"Remove formatting": "Remove formatting",
|
|
43855
|
+
"Copy": "Copy",
|
|
43856
|
+
"Cut": "Cut",
|
|
43857
|
+
"Paste": "Paste",
|
|
43858
|
+
"Undo": "Undo",
|
|
43859
|
+
"Redo": "Redo",
|
|
43860
|
+
"Insert image": "Insert image",
|
|
43861
|
+
"Special character": "Special character",
|
|
43862
|
+
"Emoticons": "Emoticons",
|
|
43863
|
+
"Fullscreen": "Fullscreen",
|
|
43864
|
+
"Preview": "Preview",
|
|
43865
|
+
"Source code": "Source code",
|
|
43866
|
+
"Insert link": "Insert link",
|
|
43867
|
+
"Code sample": "Code sample",
|
|
43868
|
+
"Left to right": "Left to right",
|
|
43869
|
+
"Right to left": "Right to left",
|
|
43870
|
+
"Find and replace": "Find and replace",
|
|
43871
|
+
"Font": "Font",
|
|
43872
|
+
"Font size": "Font size",
|
|
43873
|
+
"Line height": "Line height",
|
|
43874
|
+
"Templates": "Templates",
|
|
43875
|
+
"Apply": "Apply",
|
|
43876
|
+
"Enter image URL:": "Enter image URL:",
|
|
43877
|
+
"Enter URL:": "Enter URL:",
|
|
43878
|
+
"Edit HTML source:": "Edit HTML source:",
|
|
43879
|
+
"Find and Replace": "Find and Replace",
|
|
43880
|
+
"Find": "Find",
|
|
43881
|
+
"Replace": "Replace",
|
|
43882
|
+
"Case sensitive": "Case sensitive",
|
|
43883
|
+
"Whole word": "Whole word",
|
|
43884
|
+
"Previous": "Previous",
|
|
43885
|
+
"Next": "Next",
|
|
43886
|
+
"Replace All": "Replace All",
|
|
43887
|
+
"Search...": "Search...",
|
|
43888
|
+
"Special Character": "Special Character",
|
|
43889
|
+
"Upload": "Upload",
|
|
43890
|
+
"URL": "URL",
|
|
43891
|
+
"Browse...": "Browse...",
|
|
43892
|
+
"Drop image here or click to browse": "Drop image here or click to browse",
|
|
43893
|
+
"Alt text": "Alt text",
|
|
43894
|
+
"Insert": "Insert",
|
|
43895
|
+
"Cancel": "Cancel",
|
|
43896
|
+
"Uploading...": "Uploading...",
|
|
43897
|
+
"Upload failed": "Upload failed",
|
|
43898
|
+
"Invalid image URL": "Invalid image URL",
|
|
43899
|
+
"File too large": "File too large",
|
|
43900
|
+
"Invalid file type": "Invalid file type",
|
|
43901
|
+
"More": "More"
|
|
43902
|
+
};
|
|
43903
|
+
const fi = {
|
|
43904
|
+
"Bold": "Lihavoitu",
|
|
43905
|
+
"Italic": "Kursivoitu",
|
|
43906
|
+
"Underline": "Alleviivattu",
|
|
43907
|
+
"Strikethrough": "Yliviivattu",
|
|
43908
|
+
"Bullet list": "Luettelomerkkilista",
|
|
43909
|
+
"Numbered list": "Numeroitu lista",
|
|
43910
|
+
"Decrease indent": "Pienennä sisennystä",
|
|
43911
|
+
"Increase indent": "Suurenna sisennystä",
|
|
43912
|
+
"Blockquote": "Lainaus",
|
|
43913
|
+
"Align left": "Tasaa vasemmalle",
|
|
43914
|
+
"Align center": "Keskitä",
|
|
43915
|
+
"Align right": "Tasaa oikealle",
|
|
43916
|
+
"Justify": "Tasaa molemmat reunat",
|
|
43917
|
+
"Text color": "Tekstin väri",
|
|
43918
|
+
"Background color": "Taustaväri",
|
|
43919
|
+
"Remove formatting": "Poista muotoilu",
|
|
43920
|
+
"Copy": "Kopioi",
|
|
43921
|
+
"Cut": "Leikkaa",
|
|
43922
|
+
"Paste": "Liitä",
|
|
43923
|
+
"Undo": "Kumoa",
|
|
43924
|
+
"Redo": "Tee uudelleen",
|
|
43925
|
+
"Insert image": "Lisää kuva",
|
|
43926
|
+
"Special character": "Erikoismerkki",
|
|
43927
|
+
"Emoticons": "Hymiöt",
|
|
43928
|
+
"Fullscreen": "Koko näyttö",
|
|
43929
|
+
"Preview": "Esikatselu",
|
|
43930
|
+
"Source code": "Lähdekoodi",
|
|
43931
|
+
"Insert link": "Lisää linkki",
|
|
43932
|
+
"Code sample": "Koodiesimerkki",
|
|
43933
|
+
"Left to right": "Vasemmalta oikealle",
|
|
43934
|
+
"Right to left": "Oikealta vasemmalle",
|
|
43935
|
+
"Find and replace": "Etsi ja korvaa",
|
|
43936
|
+
"Font": "Kirjasin",
|
|
43937
|
+
"Font size": "Kirjasinkoko",
|
|
43938
|
+
"Line height": "Rivin korkeus",
|
|
43939
|
+
"Templates": "Mallipohjat",
|
|
43940
|
+
"Apply": "Käytä",
|
|
43941
|
+
"Enter image URL:": "Syötä kuvan URL:",
|
|
43942
|
+
"Enter URL:": "Syötä URL:",
|
|
43943
|
+
"Edit HTML source:": "Muokkaa HTML-lähdekoodia:",
|
|
43944
|
+
"Find and Replace": "Etsi ja korvaa",
|
|
43945
|
+
"Find": "Etsi",
|
|
43946
|
+
"Replace": "Korvaa",
|
|
43947
|
+
"Case sensitive": "Huomioi kirjainkoko",
|
|
43948
|
+
"Whole word": "Koko sana",
|
|
43949
|
+
"Previous": "Edellinen",
|
|
43950
|
+
"Next": "Seuraava",
|
|
43951
|
+
"Replace All": "Korvaa kaikki",
|
|
43952
|
+
"Search...": "Etsi...",
|
|
43953
|
+
"Special Character": "Erikoismerkki",
|
|
43954
|
+
"Upload": "Lataa",
|
|
43955
|
+
"URL": "URL",
|
|
43956
|
+
"Browse...": "Selaa...",
|
|
43957
|
+
"Drop image here or click to browse": "Pudota kuva tähän tai napsauta selataksesi",
|
|
43958
|
+
"Alt text": "Vaihtoehtoinen teksti",
|
|
43959
|
+
"Insert": "Lisää",
|
|
43960
|
+
"Cancel": "Peruuta",
|
|
43961
|
+
"Uploading...": "Ladataan...",
|
|
43962
|
+
"Upload failed": "Lataus epäonnistui",
|
|
43963
|
+
"Invalid image URL": "Virheellinen kuvan URL",
|
|
43964
|
+
"File too large": "Tiedosto on liian suuri",
|
|
43965
|
+
"Invalid file type": "Virheellinen tiedostotyyppi",
|
|
43966
|
+
"More": "Lisää"
|
|
43967
|
+
};
|
|
43968
|
+
const fr = {
|
|
43969
|
+
"Bold": "Gras",
|
|
43970
|
+
"Italic": "Italique",
|
|
43971
|
+
"Underline": "Souligné",
|
|
43972
|
+
"Strikethrough": "Barré",
|
|
43973
|
+
"Bullet list": "Liste à puces",
|
|
43974
|
+
"Numbered list": "Liste numérotée",
|
|
43975
|
+
"Decrease indent": "Réduire le retrait",
|
|
43976
|
+
"Increase indent": "Augmenter le retrait",
|
|
43977
|
+
"Blockquote": "Citation",
|
|
43978
|
+
"Align left": "Aligner à gauche",
|
|
43979
|
+
"Align center": "Centrer",
|
|
43980
|
+
"Align right": "Aligner à droite",
|
|
43981
|
+
"Justify": "Justifier",
|
|
43982
|
+
"Text color": "Couleur du texte",
|
|
43983
|
+
"Background color": "Couleur d'arrière-plan",
|
|
43984
|
+
"Remove formatting": "Supprimer la mise en forme",
|
|
43985
|
+
"Copy": "Copier",
|
|
43986
|
+
"Cut": "Couper",
|
|
43987
|
+
"Paste": "Coller",
|
|
43988
|
+
"Undo": "Annuler",
|
|
43989
|
+
"Redo": "Rétablir",
|
|
43990
|
+
"Insert image": "Insérer une image",
|
|
43991
|
+
"Special character": "Caractère spécial",
|
|
43992
|
+
"Emoticons": "Émoticônes",
|
|
43993
|
+
"Fullscreen": "Plein écran",
|
|
43994
|
+
"Preview": "Aperçu",
|
|
43995
|
+
"Source code": "Code source",
|
|
43996
|
+
"Insert link": "Insérer un lien",
|
|
43997
|
+
"Code sample": "Exemple de code",
|
|
43998
|
+
"Left to right": "De gauche à droite",
|
|
43999
|
+
"Right to left": "De droite à gauche",
|
|
44000
|
+
"Find and replace": "Rechercher et remplacer",
|
|
44001
|
+
"Font": "Police",
|
|
44002
|
+
"Font size": "Taille de police",
|
|
44003
|
+
"Line height": "Hauteur de ligne",
|
|
44004
|
+
"Templates": "Modèles",
|
|
44005
|
+
"Apply": "Appliquer",
|
|
44006
|
+
"Enter image URL:": "Entrez l'URL de l'image :",
|
|
44007
|
+
"Enter URL:": "Entrez l'URL :",
|
|
44008
|
+
"Edit HTML source:": "Modifier le code source HTML :",
|
|
44009
|
+
"Find and Replace": "Rechercher et remplacer",
|
|
44010
|
+
"Find": "Rechercher",
|
|
44011
|
+
"Replace": "Remplacer",
|
|
44012
|
+
"Case sensitive": "Sensible à la casse",
|
|
44013
|
+
"Whole word": "Mot entier",
|
|
44014
|
+
"Previous": "Précédent",
|
|
44015
|
+
"Next": "Suivant",
|
|
44016
|
+
"Replace All": "Tout remplacer",
|
|
44017
|
+
"Search...": "Rechercher...",
|
|
44018
|
+
"Special Character": "Caractère spécial",
|
|
44019
|
+
"Upload": "Télécharger",
|
|
44020
|
+
"URL": "URL",
|
|
44021
|
+
"Browse...": "Parcourir...",
|
|
44022
|
+
"Drop image here or click to browse": "Déposez l'image ici ou cliquez pour parcourir",
|
|
44023
|
+
"Alt text": "Texte alternatif",
|
|
44024
|
+
"Insert": "Insérer",
|
|
44025
|
+
"Cancel": "Annuler",
|
|
44026
|
+
"Uploading...": "Téléchargement...",
|
|
44027
|
+
"Upload failed": "Échec du téléchargement",
|
|
44028
|
+
"Invalid image URL": "URL d'image invalide",
|
|
44029
|
+
"File too large": "Fichier trop volumineux",
|
|
44030
|
+
"Invalid file type": "Type de fichier invalide",
|
|
44031
|
+
"More": "Plus"
|
|
44032
|
+
};
|
|
44033
|
+
const frCa = {
|
|
44034
|
+
"Bold": "Gras",
|
|
44035
|
+
"Italic": "Italique",
|
|
44036
|
+
"Underline": "Souligné",
|
|
44037
|
+
"Strikethrough": "Barré",
|
|
44038
|
+
"Bullet list": "Liste à puces",
|
|
44039
|
+
"Numbered list": "Liste numérotée",
|
|
44040
|
+
"Decrease indent": "Réduire le retrait",
|
|
44041
|
+
"Increase indent": "Augmenter le retrait",
|
|
44042
|
+
"Blockquote": "Citation",
|
|
44043
|
+
"Align left": "Aligner à gauche",
|
|
44044
|
+
"Align center": "Centrer",
|
|
44045
|
+
"Align right": "Aligner à droite",
|
|
44046
|
+
"Justify": "Justifier",
|
|
44047
|
+
"Text color": "Couleur du texte",
|
|
44048
|
+
"Background color": "Couleur d'arrière-plan",
|
|
44049
|
+
"Remove formatting": "Supprimer la mise en forme",
|
|
44050
|
+
"Copy": "Copier",
|
|
44051
|
+
"Cut": "Couper",
|
|
44052
|
+
"Paste": "Coller",
|
|
44053
|
+
"Undo": "Annuler",
|
|
44054
|
+
"Redo": "Rétablir",
|
|
44055
|
+
"Insert image": "Insérer une image",
|
|
44056
|
+
"Special character": "Caractère spécial",
|
|
44057
|
+
"Emoticons": "Émoticônes",
|
|
44058
|
+
"Fullscreen": "Plein écran",
|
|
44059
|
+
"Preview": "Aperçu",
|
|
44060
|
+
"Source code": "Code source",
|
|
44061
|
+
"Insert link": "Insérer un lien",
|
|
44062
|
+
"Code sample": "Exemple de code",
|
|
44063
|
+
"Left to right": "De gauche à droite",
|
|
44064
|
+
"Right to left": "De droite à gauche",
|
|
44065
|
+
"Find and replace": "Rechercher et remplacer",
|
|
44066
|
+
"Font": "Police",
|
|
44067
|
+
"Font size": "Taille de police",
|
|
44068
|
+
"Line height": "Hauteur de ligne",
|
|
44069
|
+
"Templates": "Modèles",
|
|
44070
|
+
"Apply": "Appliquer",
|
|
44071
|
+
"Enter image URL:": "Entrez l'URL de l'image :",
|
|
44072
|
+
"Enter URL:": "Entrez l'URL :",
|
|
44073
|
+
"Edit HTML source:": "Modifier le code source HTML :",
|
|
44074
|
+
"Find and Replace": "Rechercher et remplacer",
|
|
44075
|
+
"Find": "Rechercher",
|
|
44076
|
+
"Replace": "Remplacer",
|
|
44077
|
+
"Case sensitive": "Sensible à la casse",
|
|
44078
|
+
"Whole word": "Mot entier",
|
|
44079
|
+
"Previous": "Précédent",
|
|
44080
|
+
"Next": "Suivant",
|
|
44081
|
+
"Replace All": "Tout remplacer",
|
|
44082
|
+
"Search...": "Rechercher...",
|
|
44083
|
+
"Special Character": "Caractère spécial",
|
|
44084
|
+
"Upload": "Téléverser",
|
|
44085
|
+
"URL": "URL",
|
|
44086
|
+
"Browse...": "Parcourir...",
|
|
44087
|
+
"Drop image here or click to browse": "Déposez l'image ici ou cliquez pour parcourir",
|
|
44088
|
+
"Alt text": "Texte alternatif",
|
|
44089
|
+
"Insert": "Insérer",
|
|
44090
|
+
"Cancel": "Annuler",
|
|
44091
|
+
"Uploading...": "Téléversement...",
|
|
44092
|
+
"Upload failed": "Échec du téléversement",
|
|
44093
|
+
"Invalid image URL": "URL d'image invalide",
|
|
44094
|
+
"File too large": "Fichier trop volumineux",
|
|
44095
|
+
"Invalid file type": "Type de fichier invalide",
|
|
44096
|
+
"More": "Plus"
|
|
44097
|
+
};
|
|
44098
|
+
const de = {
|
|
44099
|
+
"Bold": "Fett",
|
|
44100
|
+
"Italic": "Kursiv",
|
|
44101
|
+
"Underline": "Unterstrichen",
|
|
44102
|
+
"Strikethrough": "Durchgestrichen",
|
|
44103
|
+
"Bullet list": "Aufzählung",
|
|
44104
|
+
"Numbered list": "Nummerierte Liste",
|
|
44105
|
+
"Decrease indent": "Einzug verkleinern",
|
|
44106
|
+
"Increase indent": "Einzug vergrößern",
|
|
44107
|
+
"Blockquote": "Zitat",
|
|
44108
|
+
"Align left": "Linksbündig",
|
|
44109
|
+
"Align center": "Zentriert",
|
|
44110
|
+
"Align right": "Rechtsbündig",
|
|
44111
|
+
"Justify": "Blocksatz",
|
|
44112
|
+
"Text color": "Textfarbe",
|
|
44113
|
+
"Background color": "Hintergrundfarbe",
|
|
44114
|
+
"Remove formatting": "Formatierung entfernen",
|
|
44115
|
+
"Copy": "Kopieren",
|
|
44116
|
+
"Cut": "Ausschneiden",
|
|
44117
|
+
"Paste": "Einfügen",
|
|
44118
|
+
"Undo": "Rückgängig",
|
|
44119
|
+
"Redo": "Wiederherstellen",
|
|
44120
|
+
"Insert image": "Bild einfügen",
|
|
44121
|
+
"Special character": "Sonderzeichen",
|
|
44122
|
+
"Emoticons": "Emoticons",
|
|
44123
|
+
"Fullscreen": "Vollbild",
|
|
44124
|
+
"Preview": "Vorschau",
|
|
44125
|
+
"Source code": "Quellcode",
|
|
44126
|
+
"Insert link": "Link einfügen",
|
|
44127
|
+
"Code sample": "Codebeispiel",
|
|
44128
|
+
"Left to right": "Links nach rechts",
|
|
44129
|
+
"Right to left": "Rechts nach links",
|
|
44130
|
+
"Find and replace": "Suchen und ersetzen",
|
|
44131
|
+
"Font": "Schriftart",
|
|
44132
|
+
"Font size": "Schriftgröße",
|
|
44133
|
+
"Line height": "Zeilenhöhe",
|
|
44134
|
+
"Templates": "Vorlagen",
|
|
44135
|
+
"Apply": "Anwenden",
|
|
44136
|
+
"Enter image URL:": "Bild-URL eingeben:",
|
|
44137
|
+
"Enter URL:": "URL eingeben:",
|
|
44138
|
+
"Edit HTML source:": "HTML-Quellcode bearbeiten:",
|
|
44139
|
+
"Find and Replace": "Suchen und Ersetzen",
|
|
44140
|
+
"Find": "Suchen",
|
|
44141
|
+
"Replace": "Ersetzen",
|
|
44142
|
+
"Case sensitive": "Groß-/Kleinschreibung",
|
|
44143
|
+
"Whole word": "Ganzes Wort",
|
|
44144
|
+
"Previous": "Zurück",
|
|
44145
|
+
"Next": "Weiter",
|
|
44146
|
+
"Replace All": "Alle ersetzen",
|
|
44147
|
+
"Search...": "Suchen...",
|
|
44148
|
+
"Special Character": "Sonderzeichen",
|
|
44149
|
+
"Upload": "Hochladen",
|
|
44150
|
+
"URL": "URL",
|
|
44151
|
+
"Browse...": "Durchsuchen...",
|
|
44152
|
+
"Drop image here or click to browse": "Bild hierher ziehen oder klicken zum Durchsuchen",
|
|
44153
|
+
"Alt text": "Alternativtext",
|
|
44154
|
+
"Insert": "Einfügen",
|
|
44155
|
+
"Cancel": "Abbrechen",
|
|
44156
|
+
"Uploading...": "Wird hochgeladen...",
|
|
44157
|
+
"Upload failed": "Hochladen fehlgeschlagen",
|
|
44158
|
+
"Invalid image URL": "Ungültige Bild-URL",
|
|
44159
|
+
"File too large": "Datei zu groß",
|
|
44160
|
+
"Invalid file type": "Ungültiger Dateityp",
|
|
44161
|
+
"More": "Mehr"
|
|
44162
|
+
};
|
|
44163
|
+
const el = {
|
|
44164
|
+
"Bold": "Έντονα",
|
|
44165
|
+
"Italic": "Πλάγια",
|
|
44166
|
+
"Underline": "Υπογράμμιση",
|
|
44167
|
+
"Strikethrough": "Διαγράμμιση",
|
|
44168
|
+
"Bullet list": "Λίστα με κουκκίδες",
|
|
44169
|
+
"Numbered list": "Αριθμημένη λίστα",
|
|
44170
|
+
"Decrease indent": "Μείωση εσοχής",
|
|
44171
|
+
"Increase indent": "Αύξηση εσοχής",
|
|
44172
|
+
"Blockquote": "Παράθεση",
|
|
44173
|
+
"Align left": "Στοίχιση αριστερά",
|
|
44174
|
+
"Align center": "Κεντράρισμα",
|
|
44175
|
+
"Align right": "Στοίχιση δεξιά",
|
|
44176
|
+
"Justify": "Πλήρης στοίχιση",
|
|
44177
|
+
"Text color": "Χρώμα κειμένου",
|
|
44178
|
+
"Background color": "Χρώμα φόντου",
|
|
44179
|
+
"Remove formatting": "Αφαίρεση μορφοποίησης",
|
|
44180
|
+
"Copy": "Αντιγραφή",
|
|
44181
|
+
"Cut": "Αποκοπή",
|
|
44182
|
+
"Paste": "Επικόλληση",
|
|
44183
|
+
"Undo": "Αναίρεση",
|
|
44184
|
+
"Redo": "Επανάληψη",
|
|
44185
|
+
"Insert image": "Εισαγωγή εικόνας",
|
|
44186
|
+
"Special character": "Ειδικός χαρακτήρας",
|
|
44187
|
+
"Emoticons": "Εικονίδια συναισθημάτων",
|
|
44188
|
+
"Fullscreen": "Πλήρης οθόνη",
|
|
44189
|
+
"Preview": "Προεπισκόπηση",
|
|
44190
|
+
"Source code": "Πηγαίος κώδικας",
|
|
44191
|
+
"Insert link": "Εισαγωγή συνδέσμου",
|
|
44192
|
+
"Code sample": "Δείγμα κώδικα",
|
|
44193
|
+
"Left to right": "Αριστερά προς δεξιά",
|
|
44194
|
+
"Right to left": "Δεξιά προς αριστερά",
|
|
44195
|
+
"Find and replace": "Εύρεση και αντικατάσταση",
|
|
44196
|
+
"Font": "Γραμματοσειρά",
|
|
44197
|
+
"Font size": "Μέγεθος γραμματοσειράς",
|
|
44198
|
+
"Line height": "Ύψος γραμμής",
|
|
44199
|
+
"Templates": "Πρότυπα",
|
|
44200
|
+
"Apply": "Εφαρμογή",
|
|
44201
|
+
"Enter image URL:": "Εισάγετε URL εικόνας:",
|
|
44202
|
+
"Enter URL:": "Εισάγετε URL:",
|
|
44203
|
+
"Edit HTML source:": "Επεξεργασία πηγαίου κώδικα HTML:",
|
|
44204
|
+
"Find and Replace": "Εύρεση και αντικατάσταση",
|
|
44205
|
+
"Find": "Εύρεση",
|
|
44206
|
+
"Replace": "Αντικατάσταση",
|
|
44207
|
+
"Case sensitive": "Διάκριση πεζών-κεφαλαίων",
|
|
44208
|
+
"Whole word": "Ολόκληρη λέξη",
|
|
44209
|
+
"Previous": "Προηγούμενο",
|
|
44210
|
+
"Next": "Επόμενο",
|
|
44211
|
+
"Replace All": "Αντικατάσταση όλων",
|
|
44212
|
+
"Search...": "Αναζήτηση...",
|
|
44213
|
+
"Special Character": "Ειδικός χαρακτήρας",
|
|
44214
|
+
"Upload": "Μεταφόρτωση",
|
|
44215
|
+
"URL": "URL",
|
|
44216
|
+
"Browse...": "Αναζήτηση...",
|
|
44217
|
+
"Drop image here or click to browse": "Σύρτε την εικόνα εδώ ή κάντε κλικ για αναζήτηση",
|
|
44218
|
+
"Alt text": "Εναλλακτικό κείμενο",
|
|
44219
|
+
"Insert": "Εισαγωγή",
|
|
44220
|
+
"Cancel": "Ακύρωση",
|
|
44221
|
+
"Uploading...": "Μεταφόρτωση...",
|
|
44222
|
+
"Upload failed": "Η μεταφόρτωση απέτυχε",
|
|
44223
|
+
"Invalid image URL": "Μη έγκυρο URL εικόνας",
|
|
44224
|
+
"File too large": "Το αρχείο είναι πολύ μεγάλο",
|
|
44225
|
+
"Invalid file type": "Μη έγκυρος τύπος αρχείου",
|
|
44226
|
+
"More": "Περισσότερα"
|
|
44227
|
+
};
|
|
44228
|
+
const hu = {
|
|
44229
|
+
"Bold": "Félkövér",
|
|
44230
|
+
"Italic": "Dőlt",
|
|
44231
|
+
"Underline": "Aláhúzott",
|
|
44232
|
+
"Strikethrough": "Áthúzott",
|
|
44233
|
+
"Bullet list": "Felsorolás",
|
|
44234
|
+
"Numbered list": "Számozott lista",
|
|
44235
|
+
"Decrease indent": "Behúzás csökkentése",
|
|
44236
|
+
"Increase indent": "Behúzás növelése",
|
|
44237
|
+
"Blockquote": "Idézet",
|
|
44238
|
+
"Align left": "Balra igazítás",
|
|
44239
|
+
"Align center": "Középre igazítás",
|
|
44240
|
+
"Align right": "Jobbra igazítás",
|
|
44241
|
+
"Justify": "Sorkizárt",
|
|
44242
|
+
"Text color": "Szöveg színe",
|
|
44243
|
+
"Background color": "Háttérszín",
|
|
44244
|
+
"Remove formatting": "Formázás eltávolítása",
|
|
44245
|
+
"Copy": "Másolás",
|
|
44246
|
+
"Cut": "Kivágás",
|
|
44247
|
+
"Paste": "Beillesztés",
|
|
44248
|
+
"Undo": "Visszavonás",
|
|
44249
|
+
"Redo": "Újra",
|
|
44250
|
+
"Insert image": "Kép beszúrása",
|
|
44251
|
+
"Special character": "Speciális karakter",
|
|
44252
|
+
"Emoticons": "Hangulatjelek",
|
|
44253
|
+
"Fullscreen": "Teljes képernyő",
|
|
44254
|
+
"Preview": "Előnézet",
|
|
44255
|
+
"Source code": "Forráskód",
|
|
44256
|
+
"Insert link": "Hivatkozás beszúrása",
|
|
44257
|
+
"Code sample": "Kódminta",
|
|
44258
|
+
"Left to right": "Balról jobbra",
|
|
44259
|
+
"Right to left": "Jobbról balra",
|
|
44260
|
+
"Find and replace": "Keresés és csere",
|
|
44261
|
+
"Font": "Betűtípus",
|
|
44262
|
+
"Font size": "Betűméret",
|
|
44263
|
+
"Line height": "Sormagasság",
|
|
44264
|
+
"Templates": "Sablonok",
|
|
44265
|
+
"Apply": "Alkalmaz",
|
|
44266
|
+
"Enter image URL:": "Adja meg a kép URL-jét:",
|
|
44267
|
+
"Enter URL:": "Adja meg az URL-t:",
|
|
44268
|
+
"Edit HTML source:": "HTML forráskód szerkesztése:",
|
|
44269
|
+
"Find and Replace": "Keresés és csere",
|
|
44270
|
+
"Find": "Keresés",
|
|
44271
|
+
"Replace": "Csere",
|
|
44272
|
+
"Case sensitive": "Kis- és nagybetű érzékeny",
|
|
44273
|
+
"Whole word": "Teljes szó",
|
|
44274
|
+
"Previous": "Előző",
|
|
44275
|
+
"Next": "Következő",
|
|
44276
|
+
"Replace All": "Összes cseréje",
|
|
44277
|
+
"Search...": "Keresés...",
|
|
44278
|
+
"Special Character": "Speciális karakter",
|
|
44279
|
+
"Upload": "Feltöltés",
|
|
44280
|
+
"URL": "URL",
|
|
44281
|
+
"Browse...": "Tallózás...",
|
|
44282
|
+
"Drop image here or click to browse": "Húzza ide a képet, vagy kattintson a tallózáshoz",
|
|
44283
|
+
"Alt text": "Alternatív szöveg",
|
|
44284
|
+
"Insert": "Beszúrás",
|
|
44285
|
+
"Cancel": "Mégse",
|
|
44286
|
+
"Uploading...": "Feltöltés...",
|
|
44287
|
+
"Upload failed": "A feltöltés sikertelen",
|
|
44288
|
+
"Invalid image URL": "Érvénytelen kép URL",
|
|
44289
|
+
"File too large": "A fájl túl nagy",
|
|
44290
|
+
"Invalid file type": "Érvénytelen fájltípus",
|
|
44291
|
+
"More": "Több"
|
|
44292
|
+
};
|
|
44293
|
+
const id = {
|
|
44294
|
+
"Bold": "Tebal",
|
|
44295
|
+
"Italic": "Miring",
|
|
44296
|
+
"Underline": "Garis bawah",
|
|
44297
|
+
"Strikethrough": "Coret",
|
|
44298
|
+
"Bullet list": "Daftar berpoin",
|
|
44299
|
+
"Numbered list": "Daftar bernomor",
|
|
44300
|
+
"Decrease indent": "Kurangi indentasi",
|
|
44301
|
+
"Increase indent": "Tambah indentasi",
|
|
44302
|
+
"Blockquote": "Kutipan",
|
|
44303
|
+
"Align left": "Rata kiri",
|
|
44304
|
+
"Align center": "Rata tengah",
|
|
44305
|
+
"Align right": "Rata kanan",
|
|
44306
|
+
"Justify": "Rata kiri-kanan",
|
|
44307
|
+
"Text color": "Warna teks",
|
|
44308
|
+
"Background color": "Warna latar belakang",
|
|
44309
|
+
"Remove formatting": "Hapus pemformatan",
|
|
44310
|
+
"Copy": "Salin",
|
|
44311
|
+
"Cut": "Potong",
|
|
44312
|
+
"Paste": "Tempel",
|
|
44313
|
+
"Undo": "Batalkan",
|
|
44314
|
+
"Redo": "Ulangi",
|
|
44315
|
+
"Insert image": "Sisipkan gambar",
|
|
44316
|
+
"Special character": "Karakter khusus",
|
|
44317
|
+
"Emoticons": "Emotikon",
|
|
44318
|
+
"Fullscreen": "Layar penuh",
|
|
44319
|
+
"Preview": "Pratinjau",
|
|
44320
|
+
"Source code": "Kode sumber",
|
|
44321
|
+
"Insert link": "Sisipkan tautan",
|
|
44322
|
+
"Code sample": "Contoh kode",
|
|
44323
|
+
"Left to right": "Kiri ke kanan",
|
|
44324
|
+
"Right to left": "Kanan ke kiri",
|
|
44325
|
+
"Find and replace": "Cari dan ganti",
|
|
44326
|
+
"Font": "Font",
|
|
44327
|
+
"Font size": "Ukuran font",
|
|
44328
|
+
"Line height": "Tinggi baris",
|
|
44329
|
+
"Templates": "Templat",
|
|
44330
|
+
"Apply": "Terapkan",
|
|
44331
|
+
"Enter image URL:": "Masukkan URL gambar:",
|
|
44332
|
+
"Enter URL:": "Masukkan URL:",
|
|
44333
|
+
"Edit HTML source:": "Edit kode sumber HTML:",
|
|
44334
|
+
"Find and Replace": "Cari dan ganti",
|
|
44335
|
+
"Find": "Cari",
|
|
44336
|
+
"Replace": "Ganti",
|
|
44337
|
+
"Case sensitive": "Peka huruf besar/kecil",
|
|
44338
|
+
"Whole word": "Kata utuh",
|
|
44339
|
+
"Previous": "Sebelumnya",
|
|
44340
|
+
"Next": "Berikutnya",
|
|
44341
|
+
"Replace All": "Ganti semua",
|
|
44342
|
+
"Search...": "Cari...",
|
|
44343
|
+
"Special Character": "Karakter khusus",
|
|
44344
|
+
"Upload": "Unggah",
|
|
44345
|
+
"URL": "URL",
|
|
44346
|
+
"Browse...": "Telusuri...",
|
|
44347
|
+
"Drop image here or click to browse": "Seret gambar ke sini atau klik untuk menelusuri",
|
|
44348
|
+
"Alt text": "Teks alternatif",
|
|
44349
|
+
"Insert": "Sisipkan",
|
|
44350
|
+
"Cancel": "Batal",
|
|
44351
|
+
"Uploading...": "Mengunggah...",
|
|
44352
|
+
"Upload failed": "Gagal mengunggah",
|
|
44353
|
+
"Invalid image URL": "URL gambar tidak valid",
|
|
44354
|
+
"File too large": "File terlalu besar",
|
|
44355
|
+
"Invalid file type": "Jenis file tidak valid",
|
|
44356
|
+
"More": "Lainnya"
|
|
44357
|
+
};
|
|
44358
|
+
const it = {
|
|
44359
|
+
"Bold": "Grassetto",
|
|
44360
|
+
"Italic": "Corsivo",
|
|
44361
|
+
"Underline": "Sottolineato",
|
|
44362
|
+
"Strikethrough": "Barrato",
|
|
44363
|
+
"Bullet list": "Elenco puntato",
|
|
44364
|
+
"Numbered list": "Elenco numerato",
|
|
44365
|
+
"Decrease indent": "Riduci rientro",
|
|
44366
|
+
"Increase indent": "Aumenta rientro",
|
|
44367
|
+
"Blockquote": "Citazione",
|
|
44368
|
+
"Align left": "Allinea a sinistra",
|
|
44369
|
+
"Align center": "Centra",
|
|
44370
|
+
"Align right": "Allinea a destra",
|
|
44371
|
+
"Justify": "Giustifica",
|
|
44372
|
+
"Text color": "Colore testo",
|
|
44373
|
+
"Background color": "Colore sfondo",
|
|
44374
|
+
"Remove formatting": "Rimuovi formattazione",
|
|
44375
|
+
"Copy": "Copia",
|
|
44376
|
+
"Cut": "Taglia",
|
|
44377
|
+
"Paste": "Incolla",
|
|
44378
|
+
"Undo": "Annulla",
|
|
44379
|
+
"Redo": "Ripristina",
|
|
44380
|
+
"Insert image": "Inserisci immagine",
|
|
44381
|
+
"Special character": "Carattere speciale",
|
|
44382
|
+
"Emoticons": "Emoticon",
|
|
44383
|
+
"Fullscreen": "Schermo intero",
|
|
44384
|
+
"Preview": "Anteprima",
|
|
44385
|
+
"Source code": "Codice sorgente",
|
|
44386
|
+
"Insert link": "Inserisci collegamento",
|
|
44387
|
+
"Code sample": "Esempio di codice",
|
|
44388
|
+
"Left to right": "Da sinistra a destra",
|
|
44389
|
+
"Right to left": "Da destra a sinistra",
|
|
44390
|
+
"Find and replace": "Trova e sostituisci",
|
|
44391
|
+
"Font": "Carattere",
|
|
44392
|
+
"Font size": "Dimensione carattere",
|
|
44393
|
+
"Line height": "Altezza riga",
|
|
44394
|
+
"Templates": "Modelli",
|
|
44395
|
+
"Apply": "Applica",
|
|
44396
|
+
"Enter image URL:": "Inserisci URL immagine:",
|
|
44397
|
+
"Enter URL:": "Inserisci URL:",
|
|
44398
|
+
"Edit HTML source:": "Modifica codice sorgente HTML:",
|
|
44399
|
+
"Find and Replace": "Trova e sostituisci",
|
|
44400
|
+
"Find": "Trova",
|
|
44401
|
+
"Replace": "Sostituisci",
|
|
44402
|
+
"Case sensitive": "Maiuscole/minuscole",
|
|
44403
|
+
"Whole word": "Parola intera",
|
|
44404
|
+
"Previous": "Precedente",
|
|
44405
|
+
"Next": "Successivo",
|
|
44406
|
+
"Replace All": "Sostituisci tutto",
|
|
44407
|
+
"Search...": "Cerca...",
|
|
44408
|
+
"Special Character": "Carattere speciale",
|
|
44409
|
+
"Upload": "Carica",
|
|
44410
|
+
"URL": "URL",
|
|
44411
|
+
"Browse...": "Sfoglia...",
|
|
44412
|
+
"Drop image here or click to browse": "Trascina l'immagine qui o fai clic per sfogliare",
|
|
44413
|
+
"Alt text": "Testo alternativo",
|
|
44414
|
+
"Insert": "Inserisci",
|
|
44415
|
+
"Cancel": "Annulla",
|
|
44416
|
+
"Uploading...": "Caricamento...",
|
|
44417
|
+
"Upload failed": "Caricamento fallito",
|
|
44418
|
+
"Invalid image URL": "URL immagine non valido",
|
|
44419
|
+
"File too large": "File troppo grande",
|
|
44420
|
+
"Invalid file type": "Tipo di file non valido",
|
|
44421
|
+
"More": "Altro"
|
|
44422
|
+
};
|
|
44423
|
+
const ja = {
|
|
44424
|
+
"Bold": "太字",
|
|
44425
|
+
"Italic": "斜体",
|
|
44426
|
+
"Underline": "下線",
|
|
44427
|
+
"Strikethrough": "取り消し線",
|
|
44428
|
+
"Bullet list": "箇条書き",
|
|
44429
|
+
"Numbered list": "番号付きリスト",
|
|
44430
|
+
"Decrease indent": "インデント解除",
|
|
44431
|
+
"Increase indent": "インデント",
|
|
44432
|
+
"Blockquote": "引用",
|
|
44433
|
+
"Align left": "左揃え",
|
|
44434
|
+
"Align center": "中央揃え",
|
|
44435
|
+
"Align right": "右揃え",
|
|
44436
|
+
"Justify": "両端揃え",
|
|
44437
|
+
"Text color": "文字色",
|
|
44438
|
+
"Background color": "背景色",
|
|
44439
|
+
"Remove formatting": "書式のクリア",
|
|
44440
|
+
"Copy": "コピー",
|
|
44441
|
+
"Cut": "切り取り",
|
|
44442
|
+
"Paste": "貼り付け",
|
|
44443
|
+
"Undo": "元に戻す",
|
|
44444
|
+
"Redo": "やり直し",
|
|
44445
|
+
"Insert image": "画像の挿入",
|
|
44446
|
+
"Special character": "特殊文字",
|
|
44447
|
+
"Emoticons": "絵文字",
|
|
44448
|
+
"Fullscreen": "全画面",
|
|
44449
|
+
"Preview": "プレビュー",
|
|
44450
|
+
"Source code": "ソースコード",
|
|
44451
|
+
"Insert link": "リンクの挿入",
|
|
44452
|
+
"Code sample": "コードサンプル",
|
|
44453
|
+
"Left to right": "左から右",
|
|
44454
|
+
"Right to left": "右から左",
|
|
44455
|
+
"Find and replace": "検索と置換",
|
|
44456
|
+
"Font": "フォント",
|
|
44457
|
+
"Font size": "フォントサイズ",
|
|
44458
|
+
"Line height": "行の高さ",
|
|
44459
|
+
"Templates": "テンプレート",
|
|
44460
|
+
"Apply": "適用",
|
|
44461
|
+
"Enter image URL:": "画像のURLを入力:",
|
|
44462
|
+
"Enter URL:": "URLを入力:",
|
|
44463
|
+
"Edit HTML source:": "HTMLソースを編集:",
|
|
44464
|
+
"Find and Replace": "検索と置換",
|
|
44465
|
+
"Find": "検索",
|
|
44466
|
+
"Replace": "置換",
|
|
44467
|
+
"Case sensitive": "大文字小文字を区別",
|
|
44468
|
+
"Whole word": "単語全体",
|
|
44469
|
+
"Previous": "前へ",
|
|
44470
|
+
"Next": "次へ",
|
|
44471
|
+
"Replace All": "すべて置換",
|
|
44472
|
+
"Search...": "検索...",
|
|
44473
|
+
"Special Character": "特殊文字",
|
|
44474
|
+
"Upload": "アップロード",
|
|
44475
|
+
"URL": "URL",
|
|
44476
|
+
"Browse...": "参照...",
|
|
44477
|
+
"Drop image here or click to browse": "画像をここにドロップするかクリックして参照",
|
|
44478
|
+
"Alt text": "代替テキスト",
|
|
44479
|
+
"Insert": "挿入",
|
|
44480
|
+
"Cancel": "キャンセル",
|
|
44481
|
+
"Uploading...": "アップロード中...",
|
|
44482
|
+
"Upload failed": "アップロードに失敗しました",
|
|
44483
|
+
"Invalid image URL": "無効な画像URL",
|
|
44484
|
+
"File too large": "ファイルが大きすぎます",
|
|
44485
|
+
"Invalid file type": "無効なファイル形式",
|
|
44486
|
+
"More": "もっと見る"
|
|
44487
|
+
};
|
|
44488
|
+
const ko = {
|
|
44489
|
+
"Bold": "굵게",
|
|
44490
|
+
"Italic": "기울임꼴",
|
|
44491
|
+
"Underline": "밑줄",
|
|
44492
|
+
"Strikethrough": "취소선",
|
|
44493
|
+
"Bullet list": "글머리 기호 목록",
|
|
44494
|
+
"Numbered list": "번호 매기기 목록",
|
|
44495
|
+
"Decrease indent": "내어쓰기",
|
|
44496
|
+
"Increase indent": "들여쓰기",
|
|
44497
|
+
"Blockquote": "인용구",
|
|
44498
|
+
"Align left": "왼쪽 맞춤",
|
|
44499
|
+
"Align center": "가운데 맞춤",
|
|
44500
|
+
"Align right": "오른쪽 맞춤",
|
|
44501
|
+
"Justify": "양쪽 맞춤",
|
|
44502
|
+
"Text color": "글자 색",
|
|
44503
|
+
"Background color": "배경색",
|
|
44504
|
+
"Remove formatting": "서식 제거",
|
|
44505
|
+
"Copy": "복사",
|
|
44506
|
+
"Cut": "잘라내기",
|
|
44507
|
+
"Paste": "붙여넣기",
|
|
44508
|
+
"Undo": "실행 취소",
|
|
44509
|
+
"Redo": "다시 실행",
|
|
44510
|
+
"Insert image": "이미지 삽입",
|
|
44511
|
+
"Special character": "특수 문자",
|
|
44512
|
+
"Emoticons": "이모티콘",
|
|
44513
|
+
"Fullscreen": "전체 화면",
|
|
44514
|
+
"Preview": "미리보기",
|
|
44515
|
+
"Source code": "소스 코드",
|
|
44516
|
+
"Insert link": "링크 삽입",
|
|
44517
|
+
"Code sample": "코드 샘플",
|
|
44518
|
+
"Left to right": "왼쪽에서 오른쪽",
|
|
44519
|
+
"Right to left": "오른쪽에서 왼쪽",
|
|
44520
|
+
"Find and replace": "찾기 및 바꾸기",
|
|
44521
|
+
"Font": "글꼴",
|
|
44522
|
+
"Font size": "글꼴 크기",
|
|
44523
|
+
"Line height": "줄 높이",
|
|
44524
|
+
"Templates": "템플릿",
|
|
44525
|
+
"Apply": "적용",
|
|
44526
|
+
"Enter image URL:": "이미지 URL 입력:",
|
|
44527
|
+
"Enter URL:": "URL 입력:",
|
|
44528
|
+
"Edit HTML source:": "HTML 소스 편집:",
|
|
44529
|
+
"Find and Replace": "찾기 및 바꾸기",
|
|
44530
|
+
"Find": "찾기",
|
|
44531
|
+
"Replace": "바꾸기",
|
|
44532
|
+
"Case sensitive": "대/소문자 구분",
|
|
44533
|
+
"Whole word": "단어 단위",
|
|
44534
|
+
"Previous": "이전",
|
|
44535
|
+
"Next": "다음",
|
|
44536
|
+
"Replace All": "모두 바꾸기",
|
|
44537
|
+
"Search...": "검색...",
|
|
44538
|
+
"Special Character": "특수 문자",
|
|
44539
|
+
"Upload": "업로드",
|
|
44540
|
+
"URL": "URL",
|
|
44541
|
+
"Browse...": "찾아보기...",
|
|
44542
|
+
"Drop image here or click to browse": "이미지를 여기에 끌어다 놓거나 클릭하여 찾아보기",
|
|
44543
|
+
"Alt text": "대체 텍스트",
|
|
44544
|
+
"Insert": "삽입",
|
|
44545
|
+
"Cancel": "취소",
|
|
44546
|
+
"Uploading...": "업로드 중...",
|
|
44547
|
+
"Upload failed": "업로드 실패",
|
|
44548
|
+
"Invalid image URL": "잘못된 이미지 URL",
|
|
44549
|
+
"File too large": "파일이 너무 큽니다",
|
|
44550
|
+
"Invalid file type": "잘못된 파일 형식",
|
|
44551
|
+
"More": "더 보기"
|
|
44552
|
+
};
|
|
44553
|
+
const nl = {
|
|
44554
|
+
"Bold": "Vet",
|
|
44555
|
+
"Italic": "Cursief",
|
|
44556
|
+
"Underline": "Onderstreept",
|
|
44557
|
+
"Strikethrough": "Doorgehaald",
|
|
44558
|
+
"Bullet list": "Opsommingslijst",
|
|
44559
|
+
"Numbered list": "Genummerde lijst",
|
|
44560
|
+
"Decrease indent": "Inspringing verkleinen",
|
|
44561
|
+
"Increase indent": "Inspringing vergroten",
|
|
44562
|
+
"Blockquote": "Citaat",
|
|
44563
|
+
"Align left": "Links uitlijnen",
|
|
44564
|
+
"Align center": "Centreren",
|
|
44565
|
+
"Align right": "Rechts uitlijnen",
|
|
44566
|
+
"Justify": "Uitvullen",
|
|
44567
|
+
"Text color": "Tekstkleur",
|
|
44568
|
+
"Background color": "Achtergrondkleur",
|
|
44569
|
+
"Remove formatting": "Opmaak verwijderen",
|
|
44570
|
+
"Copy": "Kopiëren",
|
|
44571
|
+
"Cut": "Knippen",
|
|
44572
|
+
"Paste": "Plakken",
|
|
44573
|
+
"Undo": "Ongedaan maken",
|
|
44574
|
+
"Redo": "Opnieuw",
|
|
44575
|
+
"Insert image": "Afbeelding invoegen",
|
|
44576
|
+
"Special character": "Speciaal teken",
|
|
44577
|
+
"Emoticons": "Emoticons",
|
|
44578
|
+
"Fullscreen": "Volledig scherm",
|
|
44579
|
+
"Preview": "Voorbeeld",
|
|
44580
|
+
"Source code": "Broncode",
|
|
44581
|
+
"Insert link": "Link invoegen",
|
|
44582
|
+
"Code sample": "Codevoorbeeld",
|
|
44583
|
+
"Left to right": "Links naar rechts",
|
|
44584
|
+
"Right to left": "Rechts naar links",
|
|
44585
|
+
"Find and replace": "Zoeken en vervangen",
|
|
44586
|
+
"Font": "Lettertype",
|
|
44587
|
+
"Font size": "Lettergrootte",
|
|
44588
|
+
"Line height": "Regelhoogte",
|
|
44589
|
+
"Templates": "Sjablonen",
|
|
44590
|
+
"Apply": "Toepassen",
|
|
44591
|
+
"Enter image URL:": "Voer afbeeldings-URL in:",
|
|
44592
|
+
"Enter URL:": "Voer URL in:",
|
|
44593
|
+
"Edit HTML source:": "HTML-bron bewerken:",
|
|
44594
|
+
"Find and Replace": "Zoeken en vervangen",
|
|
44595
|
+
"Find": "Zoeken",
|
|
44596
|
+
"Replace": "Vervangen",
|
|
44597
|
+
"Case sensitive": "Hoofdlettergevoelig",
|
|
44598
|
+
"Whole word": "Heel woord",
|
|
44599
|
+
"Previous": "Vorige",
|
|
44600
|
+
"Next": "Volgende",
|
|
44601
|
+
"Replace All": "Alles vervangen",
|
|
44602
|
+
"Search...": "Zoeken...",
|
|
44603
|
+
"Special Character": "Speciaal teken",
|
|
44604
|
+
"Upload": "Uploaden",
|
|
44605
|
+
"URL": "URL",
|
|
44606
|
+
"Browse...": "Bladeren...",
|
|
44607
|
+
"Drop image here or click to browse": "Sleep afbeelding hierheen of klik om te bladeren",
|
|
44608
|
+
"Alt text": "Alt-tekst",
|
|
44609
|
+
"Insert": "Invoegen",
|
|
44610
|
+
"Cancel": "Annuleren",
|
|
44611
|
+
"Uploading...": "Uploaden...",
|
|
44612
|
+
"Upload failed": "Upload mislukt",
|
|
44613
|
+
"Invalid image URL": "Ongeldige afbeeldings-URL",
|
|
44614
|
+
"File too large": "Bestand te groot",
|
|
44615
|
+
"Invalid file type": "Ongeldig bestandstype",
|
|
44616
|
+
"More": "Meer"
|
|
44617
|
+
};
|
|
44618
|
+
const nb = {
|
|
44619
|
+
"Bold": "Fet",
|
|
44620
|
+
"Italic": "Kursiv",
|
|
44621
|
+
"Underline": "Understreket",
|
|
44622
|
+
"Strikethrough": "Gjennomstreket",
|
|
44623
|
+
"Bullet list": "Punktliste",
|
|
44624
|
+
"Numbered list": "Nummerert liste",
|
|
44625
|
+
"Decrease indent": "Reduser innrykk",
|
|
44626
|
+
"Increase indent": "Øk innrykk",
|
|
44627
|
+
"Blockquote": "Blokksitat",
|
|
44628
|
+
"Align left": "Venstrejuster",
|
|
44629
|
+
"Align center": "Midtstill",
|
|
44630
|
+
"Align right": "Høyrejuster",
|
|
44631
|
+
"Justify": "Blokkjuster",
|
|
44632
|
+
"Text color": "Tekstfarge",
|
|
44633
|
+
"Background color": "Bakgrunnsfarge",
|
|
44634
|
+
"Remove formatting": "Fjern formatering",
|
|
44635
|
+
"Copy": "Kopier",
|
|
44636
|
+
"Cut": "Klipp ut",
|
|
44637
|
+
"Paste": "Lim inn",
|
|
44638
|
+
"Undo": "Angre",
|
|
44639
|
+
"Redo": "Gjør om",
|
|
44640
|
+
"Insert image": "Sett inn bilde",
|
|
44641
|
+
"Special character": "Spesialtegn",
|
|
44642
|
+
"Emoticons": "Humørifjes",
|
|
44643
|
+
"Fullscreen": "Fullskjerm",
|
|
44644
|
+
"Preview": "Forhåndsvisning",
|
|
44645
|
+
"Source code": "Kildekode",
|
|
44646
|
+
"Insert link": "Sett inn lenke",
|
|
44647
|
+
"Code sample": "Kodeeksempel",
|
|
44648
|
+
"Left to right": "Venstre mot høyre",
|
|
44649
|
+
"Right to left": "Høyre mot venstre",
|
|
44650
|
+
"Find and replace": "Søk og erstatt",
|
|
44651
|
+
"Font": "Skrifttype",
|
|
44652
|
+
"Font size": "Skriftstørrelse",
|
|
44653
|
+
"Line height": "Linjehøyde",
|
|
44654
|
+
"Templates": "Maler",
|
|
44655
|
+
"Apply": "Bruk",
|
|
44656
|
+
"Enter image URL:": "Skriv inn bilde-URL:",
|
|
44657
|
+
"Enter URL:": "Skriv inn URL:",
|
|
44658
|
+
"Edit HTML source:": "Rediger HTML-kilde:",
|
|
44659
|
+
"Find and Replace": "Søk og erstatt",
|
|
44660
|
+
"Find": "Søk",
|
|
44661
|
+
"Replace": "Erstatt",
|
|
44662
|
+
"Case sensitive": "Skille mellom store/små bokstaver",
|
|
44663
|
+
"Whole word": "Helt ord",
|
|
44664
|
+
"Previous": "Forrige",
|
|
44665
|
+
"Next": "Neste",
|
|
44666
|
+
"Replace All": "Erstatt alle",
|
|
44667
|
+
"Search...": "Søk...",
|
|
44668
|
+
"Special Character": "Spesialtegn",
|
|
44669
|
+
"Upload": "Last opp",
|
|
44670
|
+
"URL": "URL",
|
|
44671
|
+
"Browse...": "Bla gjennom...",
|
|
44672
|
+
"Drop image here or click to browse": "Slipp bildet her eller klikk for å bla gjennom",
|
|
44673
|
+
"Alt text": "Alternativ tekst",
|
|
44674
|
+
"Insert": "Sett inn",
|
|
44675
|
+
"Cancel": "Avbryt",
|
|
44676
|
+
"Uploading...": "Laster opp...",
|
|
44677
|
+
"Upload failed": "Opplasting mislyktes",
|
|
44678
|
+
"Invalid image URL": "Ugyldig bilde-URL",
|
|
44679
|
+
"File too large": "Filen er for stor",
|
|
44680
|
+
"Invalid file type": "Ugyldig filtype",
|
|
44681
|
+
"More": "Mer"
|
|
44682
|
+
};
|
|
44683
|
+
const pl = {
|
|
44684
|
+
"Bold": "Pogrubienie",
|
|
44685
|
+
"Italic": "Kursywa",
|
|
44686
|
+
"Underline": "Podkreślenie",
|
|
44687
|
+
"Strikethrough": "Przekreślenie",
|
|
44688
|
+
"Bullet list": "Lista punktowana",
|
|
44689
|
+
"Numbered list": "Lista numerowana",
|
|
44690
|
+
"Decrease indent": "Zmniejsz wcięcie",
|
|
44691
|
+
"Increase indent": "Zwiększ wcięcie",
|
|
44692
|
+
"Blockquote": "Cytat blokowy",
|
|
44693
|
+
"Align left": "Wyrównaj do lewej",
|
|
44694
|
+
"Align center": "Wyśrodkuj",
|
|
44695
|
+
"Align right": "Wyrównaj do prawej",
|
|
44696
|
+
"Justify": "Wyjustuj",
|
|
44697
|
+
"Text color": "Kolor tekstu",
|
|
44698
|
+
"Background color": "Kolor tła",
|
|
44699
|
+
"Remove formatting": "Usuń formatowanie",
|
|
44700
|
+
"Copy": "Kopiuj",
|
|
44701
|
+
"Cut": "Wytnij",
|
|
44702
|
+
"Paste": "Wklej",
|
|
44703
|
+
"Undo": "Cofnij",
|
|
44704
|
+
"Redo": "Ponów",
|
|
44705
|
+
"Insert image": "Wstaw obraz",
|
|
44706
|
+
"Special character": "Znak specjalny",
|
|
44707
|
+
"Emoticons": "Emotikony",
|
|
44708
|
+
"Fullscreen": "Pełny ekran",
|
|
44709
|
+
"Preview": "Podgląd",
|
|
44710
|
+
"Source code": "Kod źródłowy",
|
|
44711
|
+
"Insert link": "Wstaw odnośnik",
|
|
44712
|
+
"Code sample": "Przykład kodu",
|
|
44713
|
+
"Left to right": "Od lewej do prawej",
|
|
44714
|
+
"Right to left": "Od prawej do lewej",
|
|
44715
|
+
"Find and replace": "Znajdź i zamień",
|
|
44716
|
+
"Font": "Czcionka",
|
|
44717
|
+
"Font size": "Rozmiar czcionki",
|
|
44718
|
+
"Line height": "Wysokość wiersza",
|
|
44719
|
+
"Templates": "Szablony",
|
|
44720
|
+
"Apply": "Zastosuj",
|
|
44721
|
+
"Enter image URL:": "Wprowadź adres URL obrazu:",
|
|
44722
|
+
"Enter URL:": "Wprowadź adres URL:",
|
|
44723
|
+
"Edit HTML source:": "Edytuj źródło HTML:",
|
|
44724
|
+
"Find and Replace": "Znajdź i zamień",
|
|
44725
|
+
"Find": "Znajdź",
|
|
44726
|
+
"Replace": "Zamień",
|
|
44727
|
+
"Case sensitive": "Rozróżniaj wielkość liter",
|
|
44728
|
+
"Whole word": "Całe słowo",
|
|
44729
|
+
"Previous": "Poprzedni",
|
|
44730
|
+
"Next": "Następny",
|
|
44731
|
+
"Replace All": "Zamień wszystko",
|
|
44732
|
+
"Search...": "Szukaj...",
|
|
44733
|
+
"Special Character": "Znak specjalny",
|
|
44734
|
+
"Upload": "Prześlij",
|
|
44735
|
+
"URL": "URL",
|
|
44736
|
+
"Browse...": "Przeglądaj...",
|
|
44737
|
+
"Drop image here or click to browse": "Przeciągnij obraz tutaj lub kliknij, aby przeglądać",
|
|
44738
|
+
"Alt text": "Tekst alternatywny",
|
|
44739
|
+
"Insert": "Wstaw",
|
|
44740
|
+
"Cancel": "Anuluj",
|
|
44741
|
+
"Uploading...": "Przesyłanie...",
|
|
44742
|
+
"Upload failed": "Przesyłanie nie powiodło się",
|
|
44743
|
+
"Invalid image URL": "Nieprawidłowy URL obrazu",
|
|
44744
|
+
"File too large": "Plik jest za duży",
|
|
44745
|
+
"Invalid file type": "Nieprawidłowy typ pliku",
|
|
44746
|
+
"More": "Więcej"
|
|
44747
|
+
};
|
|
44748
|
+
const pt = {
|
|
44749
|
+
"Bold": "Negrito",
|
|
44750
|
+
"Italic": "Itálico",
|
|
44751
|
+
"Underline": "Sublinhado",
|
|
44752
|
+
"Strikethrough": "Riscado",
|
|
44753
|
+
"Bullet list": "Lista com marcadores",
|
|
44754
|
+
"Numbered list": "Lista numerada",
|
|
44755
|
+
"Decrease indent": "Diminuir recuo",
|
|
44756
|
+
"Increase indent": "Aumentar recuo",
|
|
44757
|
+
"Blockquote": "Citação",
|
|
44758
|
+
"Align left": "Alinhar à esquerda",
|
|
44759
|
+
"Align center": "Centralizar",
|
|
44760
|
+
"Align right": "Alinhar à direita",
|
|
44761
|
+
"Justify": "Justificar",
|
|
44762
|
+
"Text color": "Cor do texto",
|
|
44763
|
+
"Background color": "Cor de fundo",
|
|
44764
|
+
"Remove formatting": "Remover formatação",
|
|
44765
|
+
"Copy": "Copiar",
|
|
44766
|
+
"Cut": "Cortar",
|
|
44767
|
+
"Paste": "Colar",
|
|
44768
|
+
"Undo": "Desfazer",
|
|
44769
|
+
"Redo": "Refazer",
|
|
44770
|
+
"Insert image": "Inserir imagem",
|
|
44771
|
+
"Special character": "Caractere especial",
|
|
44772
|
+
"Emoticons": "Emoticons",
|
|
44773
|
+
"Fullscreen": "Tela cheia",
|
|
44774
|
+
"Preview": "Pré-visualização",
|
|
44775
|
+
"Source code": "Código fonte",
|
|
44776
|
+
"Insert link": "Inserir link",
|
|
44777
|
+
"Code sample": "Exemplo de código",
|
|
44778
|
+
"Left to right": "Esquerda para a direita",
|
|
44779
|
+
"Right to left": "Direita para a esquerda",
|
|
44780
|
+
"Find and replace": "Localizar e substituir",
|
|
44781
|
+
"Font": "Fonte",
|
|
44782
|
+
"Font size": "Tamanho da fonte",
|
|
44783
|
+
"Line height": "Altura da linha",
|
|
44784
|
+
"Templates": "Modelos",
|
|
44785
|
+
"Apply": "Aplicar",
|
|
44786
|
+
"Enter image URL:": "Insira o URL da imagem:",
|
|
44787
|
+
"Enter URL:": "Insira o URL:",
|
|
44788
|
+
"Edit HTML source:": "Editar código fonte HTML:",
|
|
44789
|
+
"Find and Replace": "Localizar e substituir",
|
|
44790
|
+
"Find": "Localizar",
|
|
44791
|
+
"Replace": "Substituir",
|
|
44792
|
+
"Case sensitive": "Diferenciar maiúsculas/minúsculas",
|
|
44793
|
+
"Whole word": "Palavra inteira",
|
|
44794
|
+
"Previous": "Anterior",
|
|
44795
|
+
"Next": "Próximo",
|
|
44796
|
+
"Replace All": "Substituir tudo",
|
|
44797
|
+
"Search...": "Pesquisar...",
|
|
44798
|
+
"Special Character": "Caractere especial",
|
|
44799
|
+
"Upload": "Carregar",
|
|
44800
|
+
"URL": "URL",
|
|
44801
|
+
"Browse...": "Procurar...",
|
|
44802
|
+
"Drop image here or click to browse": "Arraste a imagem aqui ou clique para procurar",
|
|
44803
|
+
"Alt text": "Texto alternativo",
|
|
44804
|
+
"Insert": "Inserir",
|
|
44805
|
+
"Cancel": "Cancelar",
|
|
44806
|
+
"Uploading...": "Carregando...",
|
|
44807
|
+
"Upload failed": "Falha no carregamento",
|
|
44808
|
+
"Invalid image URL": "URL de imagem inválido",
|
|
44809
|
+
"File too large": "Arquivo muito grande",
|
|
44810
|
+
"Invalid file type": "Tipo de arquivo inválido",
|
|
44811
|
+
"More": "Mais"
|
|
44812
|
+
};
|
|
44813
|
+
const ro = {
|
|
44814
|
+
"Bold": "Îngroșat",
|
|
44815
|
+
"Italic": "Cursiv",
|
|
44816
|
+
"Underline": "Subliniat",
|
|
44817
|
+
"Strikethrough": "Tăiat",
|
|
44818
|
+
"Bullet list": "Listă cu marcatori",
|
|
44819
|
+
"Numbered list": "Listă numerotată",
|
|
44820
|
+
"Decrease indent": "Micșorare indentare",
|
|
44821
|
+
"Increase indent": "Mărire indentare",
|
|
44822
|
+
"Blockquote": "Citat",
|
|
44823
|
+
"Align left": "Aliniere la stânga",
|
|
44824
|
+
"Align center": "Centrare",
|
|
44825
|
+
"Align right": "Aliniere la dreapta",
|
|
44826
|
+
"Justify": "Aliniere stânga-dreapta",
|
|
44827
|
+
"Text color": "Culoare text",
|
|
44828
|
+
"Background color": "Culoare fundal",
|
|
44829
|
+
"Remove formatting": "Eliminare formatare",
|
|
44830
|
+
"Copy": "Copiere",
|
|
44831
|
+
"Cut": "Decupare",
|
|
44832
|
+
"Paste": "Lipire",
|
|
44833
|
+
"Undo": "Anulare",
|
|
44834
|
+
"Redo": "Refacere",
|
|
44835
|
+
"Insert image": "Inserare imagine",
|
|
44836
|
+
"Special character": "Caracter special",
|
|
44837
|
+
"Emoticons": "Emoticoane",
|
|
44838
|
+
"Fullscreen": "Ecran complet",
|
|
44839
|
+
"Preview": "Previzualizare",
|
|
44840
|
+
"Source code": "Cod sursă",
|
|
44841
|
+
"Insert link": "Inserare link",
|
|
44842
|
+
"Code sample": "Exemplu de cod",
|
|
44843
|
+
"Left to right": "De la stânga la dreapta",
|
|
44844
|
+
"Right to left": "De la dreapta la stânga",
|
|
44845
|
+
"Find and replace": "Căutare și înlocuire",
|
|
44846
|
+
"Font": "Font",
|
|
44847
|
+
"Font size": "Dimensiune font",
|
|
44848
|
+
"Line height": "Înălțime linie",
|
|
44849
|
+
"Templates": "Șabloane",
|
|
44850
|
+
"Apply": "Aplicare",
|
|
44851
|
+
"Enter image URL:": "Introduceți URL-ul imaginii:",
|
|
44852
|
+
"Enter URL:": "Introduceți URL-ul:",
|
|
44853
|
+
"Edit HTML source:": "Editare sursă HTML:",
|
|
44854
|
+
"Find and Replace": "Căutare și înlocuire",
|
|
44855
|
+
"Find": "Căutare",
|
|
44856
|
+
"Replace": "Înlocuire",
|
|
44857
|
+
"Case sensitive": "Sensibil la majuscule",
|
|
44858
|
+
"Whole word": "Cuvânt întreg",
|
|
44859
|
+
"Previous": "Anterior",
|
|
44860
|
+
"Next": "Următor",
|
|
44861
|
+
"Replace All": "Înlocuire totală",
|
|
44862
|
+
"Search...": "Căutare...",
|
|
44863
|
+
"Special Character": "Caracter special",
|
|
44864
|
+
"Upload": "Încarcă",
|
|
44865
|
+
"URL": "URL",
|
|
44866
|
+
"Browse...": "Răsfoiește...",
|
|
44867
|
+
"Drop image here or click to browse": "Trage imaginea aici sau dă clic pentru a răsfoi",
|
|
44868
|
+
"Alt text": "Text alternativ",
|
|
44869
|
+
"Insert": "Inserează",
|
|
44870
|
+
"Cancel": "Anulează",
|
|
44871
|
+
"Uploading...": "Se încarcă...",
|
|
44872
|
+
"Upload failed": "Încarcare eșuată",
|
|
44873
|
+
"Invalid image URL": "URL imagine invalid",
|
|
44874
|
+
"File too large": "Fișierul este prea mare",
|
|
44875
|
+
"Invalid file type": "Tip de fișier invalid",
|
|
44876
|
+
"More": "Mai mult"
|
|
44877
|
+
};
|
|
44878
|
+
const ru = {
|
|
44879
|
+
"Bold": "Полужирный",
|
|
44880
|
+
"Italic": "Курсив",
|
|
44881
|
+
"Underline": "Подчёркнутый",
|
|
44882
|
+
"Strikethrough": "Зачёркнутый",
|
|
44883
|
+
"Bullet list": "Маркированный список",
|
|
44884
|
+
"Numbered list": "Нумерованный список",
|
|
44885
|
+
"Decrease indent": "Уменьшить отступ",
|
|
44886
|
+
"Increase indent": "Увеличить отступ",
|
|
44887
|
+
"Blockquote": "Цитата",
|
|
44888
|
+
"Align left": "По левому краю",
|
|
44889
|
+
"Align center": "По центру",
|
|
44890
|
+
"Align right": "По правому краю",
|
|
44891
|
+
"Justify": "По ширине",
|
|
44892
|
+
"Text color": "Цвет текста",
|
|
44893
|
+
"Background color": "Цвет фона",
|
|
44894
|
+
"Remove formatting": "Очистить форматирование",
|
|
44895
|
+
"Copy": "Копировать",
|
|
44896
|
+
"Cut": "Вырезать",
|
|
44897
|
+
"Paste": "Вставить",
|
|
44898
|
+
"Undo": "Отменить",
|
|
44899
|
+
"Redo": "Повторить",
|
|
44900
|
+
"Insert image": "Вставить изображение",
|
|
44901
|
+
"Special character": "Специальный символ",
|
|
44902
|
+
"Emoticons": "Смайлики",
|
|
44903
|
+
"Fullscreen": "Полный экран",
|
|
44904
|
+
"Preview": "Предварительный просмотр",
|
|
44905
|
+
"Source code": "Исходный код",
|
|
44906
|
+
"Insert link": "Вставить ссылку",
|
|
44907
|
+
"Code sample": "Пример кода",
|
|
44908
|
+
"Left to right": "Слева направо",
|
|
44909
|
+
"Right to left": "Справа налево",
|
|
44910
|
+
"Find and replace": "Найти и заменить",
|
|
44911
|
+
"Font": "Шрифт",
|
|
44912
|
+
"Font size": "Размер шрифта",
|
|
44913
|
+
"Line height": "Высота строки",
|
|
44914
|
+
"Templates": "Шаблоны",
|
|
44915
|
+
"Apply": "Применить",
|
|
44916
|
+
"Enter image URL:": "Введите URL изображения:",
|
|
44917
|
+
"Enter URL:": "Введите URL:",
|
|
44918
|
+
"Edit HTML source:": "Редактировать HTML-код:",
|
|
44919
|
+
"Find and Replace": "Найти и заменить",
|
|
44920
|
+
"Find": "Найти",
|
|
44921
|
+
"Replace": "Заменить",
|
|
44922
|
+
"Case sensitive": "С учётом регистра",
|
|
44923
|
+
"Whole word": "Слово целиком",
|
|
44924
|
+
"Previous": "Предыдущий",
|
|
44925
|
+
"Next": "Следующий",
|
|
44926
|
+
"Replace All": "Заменить все",
|
|
44927
|
+
"Search...": "Поиск...",
|
|
44928
|
+
"Special Character": "Специальный символ",
|
|
44929
|
+
"Upload": "Загрузить",
|
|
44930
|
+
"URL": "URL",
|
|
44931
|
+
"Browse...": "Обзор...",
|
|
44932
|
+
"Drop image here or click to browse": "Перетащите изображение сюда или нажмите для обзора",
|
|
44933
|
+
"Alt text": "Альтернативный текст",
|
|
44934
|
+
"Insert": "Вставить",
|
|
44935
|
+
"Cancel": "Отмена",
|
|
44936
|
+
"Uploading...": "Загрузка...",
|
|
44937
|
+
"Upload failed": "Ошибка загрузки",
|
|
44938
|
+
"Invalid image URL": "Недопустимый URL изображения",
|
|
44939
|
+
"File too large": "Файл слишком большой",
|
|
44940
|
+
"Invalid file type": "Недопустимый тип файла",
|
|
44941
|
+
"More": "Ещё"
|
|
44942
|
+
};
|
|
44943
|
+
const sr = {
|
|
44944
|
+
"Bold": "Подебљано",
|
|
44945
|
+
"Italic": "Курзив",
|
|
44946
|
+
"Underline": "Подвучено",
|
|
44947
|
+
"Strikethrough": "Прецртано",
|
|
44948
|
+
"Bullet list": "Листа са знаковима",
|
|
44949
|
+
"Numbered list": "Нумерисана листа",
|
|
44950
|
+
"Decrease indent": "Смањи увлачење",
|
|
44951
|
+
"Increase indent": "Повећај увлачење",
|
|
44952
|
+
"Blockquote": "Цитат",
|
|
44953
|
+
"Align left": "Поравнај лево",
|
|
44954
|
+
"Align center": "Центрирај",
|
|
44955
|
+
"Align right": "Поравнај десно",
|
|
44956
|
+
"Justify": "Обострано поравнање",
|
|
44957
|
+
"Text color": "Боја текста",
|
|
44958
|
+
"Background color": "Боја позадине",
|
|
44959
|
+
"Remove formatting": "Уклони форматирање",
|
|
44960
|
+
"Copy": "Копирај",
|
|
44961
|
+
"Cut": "Исеци",
|
|
44962
|
+
"Paste": "Налепи",
|
|
44963
|
+
"Undo": "Опозови",
|
|
44964
|
+
"Redo": "Понови",
|
|
44965
|
+
"Insert image": "Уметни слику",
|
|
44966
|
+
"Special character": "Специјални знак",
|
|
44967
|
+
"Emoticons": "Емотикони",
|
|
44968
|
+
"Fullscreen": "Цео екран",
|
|
44969
|
+
"Preview": "Преглед",
|
|
44970
|
+
"Source code": "Изворни код",
|
|
44971
|
+
"Insert link": "Уметни везу",
|
|
44972
|
+
"Code sample": "Пример кода",
|
|
44973
|
+
"Left to right": "Слева надесно",
|
|
44974
|
+
"Right to left": "Здесна налево",
|
|
44975
|
+
"Find and replace": "Пронађи и замени",
|
|
44976
|
+
"Font": "Фонт",
|
|
44977
|
+
"Font size": "Величина фонта",
|
|
44978
|
+
"Line height": "Висина реда",
|
|
44979
|
+
"Templates": "Шаблони",
|
|
44980
|
+
"Apply": "Примени",
|
|
44981
|
+
"Enter image URL:": "Унесите URL слике:",
|
|
44982
|
+
"Enter URL:": "Унесите URL:",
|
|
44983
|
+
"Edit HTML source:": "Уреди HTML извор:",
|
|
44984
|
+
"Find and Replace": "Пронађи и замени",
|
|
44985
|
+
"Find": "Пронађи",
|
|
44986
|
+
"Replace": "Замени",
|
|
44987
|
+
"Case sensitive": "Разликуј велика/мала слова",
|
|
44988
|
+
"Whole word": "Цела реч",
|
|
44989
|
+
"Previous": "Претходно",
|
|
44990
|
+
"Next": "Следеће",
|
|
44991
|
+
"Replace All": "Замени све",
|
|
44992
|
+
"Search...": "Претрага...",
|
|
44993
|
+
"Special Character": "Специјални знак",
|
|
44994
|
+
"Upload": "Отпреми",
|
|
44995
|
+
"URL": "URL",
|
|
44996
|
+
"Browse...": "Претражи...",
|
|
44997
|
+
"Drop image here or click to browse": "Превуците слику овде или кликните за претрагу",
|
|
44998
|
+
"Alt text": "Алтернативни текст",
|
|
44999
|
+
"Insert": "Уметни",
|
|
45000
|
+
"Cancel": "Откажи",
|
|
45001
|
+
"Uploading...": "Отпремање...",
|
|
45002
|
+
"Upload failed": "Отпремање није успело",
|
|
45003
|
+
"Invalid image URL": "Неважећи URL слике",
|
|
45004
|
+
"File too large": "Датотека је превелика",
|
|
45005
|
+
"Invalid file type": "Неважећи тип датотеке",
|
|
45006
|
+
"More": "Још"
|
|
45007
|
+
};
|
|
45008
|
+
const sl = {
|
|
45009
|
+
"Bold": "Krepko",
|
|
45010
|
+
"Italic": "Ležeče",
|
|
45011
|
+
"Underline": "Podčrtano",
|
|
45012
|
+
"Strikethrough": "Prečrtano",
|
|
45013
|
+
"Bullet list": "Seznam z oznakami",
|
|
45014
|
+
"Numbered list": "Oštevilčen seznam",
|
|
45015
|
+
"Decrease indent": "Zmanjšaj zamik",
|
|
45016
|
+
"Increase indent": "Povečaj zamik",
|
|
45017
|
+
"Blockquote": "Citat",
|
|
45018
|
+
"Align left": "Poravnaj levo",
|
|
45019
|
+
"Align center": "Sredinska poravnava",
|
|
45020
|
+
"Align right": "Poravnaj desno",
|
|
45021
|
+
"Justify": "Obojestranska poravnava",
|
|
45022
|
+
"Text color": "Barva besedila",
|
|
45023
|
+
"Background color": "Barva ozadja",
|
|
45024
|
+
"Remove formatting": "Odstrani oblikovanje",
|
|
45025
|
+
"Copy": "Kopiraj",
|
|
45026
|
+
"Cut": "Izreži",
|
|
45027
|
+
"Paste": "Prilepi",
|
|
45028
|
+
"Undo": "Razveljavi",
|
|
45029
|
+
"Redo": "Uveljavi",
|
|
45030
|
+
"Insert image": "Vstavi sliko",
|
|
45031
|
+
"Special character": "Posebni znak",
|
|
45032
|
+
"Emoticons": "Emotikoni",
|
|
45033
|
+
"Fullscreen": "Celoten zaslon",
|
|
45034
|
+
"Preview": "Predogled",
|
|
45035
|
+
"Source code": "Izvorna koda",
|
|
45036
|
+
"Insert link": "Vstavi povezavo",
|
|
45037
|
+
"Code sample": "Primer kode",
|
|
45038
|
+
"Left to right": "Od leve proti desni",
|
|
45039
|
+
"Right to left": "Od desne proti levi",
|
|
45040
|
+
"Find and replace": "Najdi in zamenjaj",
|
|
45041
|
+
"Font": "Pisava",
|
|
45042
|
+
"Font size": "Velikost pisave",
|
|
45043
|
+
"Line height": "Višina vrstice",
|
|
45044
|
+
"Templates": "Predloge",
|
|
45045
|
+
"Apply": "Uporabi",
|
|
45046
|
+
"Enter image URL:": "Vnesite URL slike:",
|
|
45047
|
+
"Enter URL:": "Vnesite URL:",
|
|
45048
|
+
"Edit HTML source:": "Uredi HTML izvorno kodo:",
|
|
45049
|
+
"Find and Replace": "Najdi in zamenjaj",
|
|
45050
|
+
"Find": "Najdi",
|
|
45051
|
+
"Replace": "Zamenjaj",
|
|
45052
|
+
"Case sensitive": "Razlikuj velike/male črke",
|
|
45053
|
+
"Whole word": "Cela beseda",
|
|
45054
|
+
"Previous": "Prejšnji",
|
|
45055
|
+
"Next": "Naslednji",
|
|
45056
|
+
"Replace All": "Zamenjaj vse",
|
|
45057
|
+
"Search...": "Iskanje...",
|
|
45058
|
+
"Special Character": "Posebni znak",
|
|
45059
|
+
"Upload": "Naloži",
|
|
45060
|
+
"URL": "URL",
|
|
45061
|
+
"Browse...": "Prebrskaj...",
|
|
45062
|
+
"Drop image here or click to browse": "Povlecite sliko sem ali kliknite za brskanje",
|
|
45063
|
+
"Alt text": "Nadomestno besedilo",
|
|
45064
|
+
"Insert": "Vstavi",
|
|
45065
|
+
"Cancel": "Prekliči",
|
|
45066
|
+
"Uploading...": "Nalaganje...",
|
|
45067
|
+
"Upload failed": "Nalaganje ni uspelo",
|
|
45068
|
+
"Invalid image URL": "Neveljaven URL slike",
|
|
45069
|
+
"File too large": "Datoteka je prevelika",
|
|
45070
|
+
"Invalid file type": "Neveljavna vrsta datoteke",
|
|
45071
|
+
"More": "Več"
|
|
45072
|
+
};
|
|
45073
|
+
const es = {
|
|
45074
|
+
"Bold": "Negrita",
|
|
45075
|
+
"Italic": "Cursiva",
|
|
45076
|
+
"Underline": "Subrayado",
|
|
45077
|
+
"Strikethrough": "Tachado",
|
|
45078
|
+
"Bullet list": "Lista con viñetas",
|
|
45079
|
+
"Numbered list": "Lista numerada",
|
|
45080
|
+
"Decrease indent": "Disminuir sangría",
|
|
45081
|
+
"Increase indent": "Aumentar sangría",
|
|
45082
|
+
"Blockquote": "Cita",
|
|
45083
|
+
"Align left": "Alinear a la izquierda",
|
|
45084
|
+
"Align center": "Centrar",
|
|
45085
|
+
"Align right": "Alinear a la derecha",
|
|
45086
|
+
"Justify": "Justificar",
|
|
45087
|
+
"Text color": "Color del texto",
|
|
45088
|
+
"Background color": "Color de fondo",
|
|
45089
|
+
"Remove formatting": "Quitar formato",
|
|
45090
|
+
"Copy": "Copiar",
|
|
45091
|
+
"Cut": "Cortar",
|
|
45092
|
+
"Paste": "Pegar",
|
|
45093
|
+
"Undo": "Deshacer",
|
|
45094
|
+
"Redo": "Rehacer",
|
|
45095
|
+
"Insert image": "Insertar imagen",
|
|
45096
|
+
"Special character": "Carácter especial",
|
|
45097
|
+
"Emoticons": "Emoticonos",
|
|
45098
|
+
"Fullscreen": "Pantalla completa",
|
|
45099
|
+
"Preview": "Vista previa",
|
|
45100
|
+
"Source code": "Código fuente",
|
|
45101
|
+
"Insert link": "Insertar enlace",
|
|
45102
|
+
"Code sample": "Ejemplo de código",
|
|
45103
|
+
"Left to right": "De izquierda a derecha",
|
|
45104
|
+
"Right to left": "De derecha a izquierda",
|
|
45105
|
+
"Find and replace": "Buscar y reemplazar",
|
|
45106
|
+
"Font": "Fuente",
|
|
45107
|
+
"Font size": "Tamaño de fuente",
|
|
45108
|
+
"Line height": "Altura de línea",
|
|
45109
|
+
"Templates": "Plantillas",
|
|
45110
|
+
"Apply": "Aplicar",
|
|
45111
|
+
"Enter image URL:": "Introduzca la URL de la imagen:",
|
|
45112
|
+
"Enter URL:": "Introduzca la URL:",
|
|
45113
|
+
"Edit HTML source:": "Editar código fuente HTML:",
|
|
45114
|
+
"Find and Replace": "Buscar y reemplazar",
|
|
45115
|
+
"Find": "Buscar",
|
|
45116
|
+
"Replace": "Reemplazar",
|
|
45117
|
+
"Case sensitive": "Distinguir mayúsculas/minúsculas",
|
|
45118
|
+
"Whole word": "Palabra completa",
|
|
45119
|
+
"Previous": "Anterior",
|
|
45120
|
+
"Next": "Siguiente",
|
|
45121
|
+
"Replace All": "Reemplazar todo",
|
|
45122
|
+
"Search...": "Buscar...",
|
|
45123
|
+
"Special Character": "Carácter especial",
|
|
45124
|
+
"Upload": "Subir",
|
|
45125
|
+
"URL": "URL",
|
|
45126
|
+
"Browse...": "Examinar...",
|
|
45127
|
+
"Drop image here or click to browse": "Arrastra la imagen aquí o haz clic para examinar",
|
|
45128
|
+
"Alt text": "Texto alternativo",
|
|
45129
|
+
"Insert": "Insertar",
|
|
45130
|
+
"Cancel": "Cancelar",
|
|
45131
|
+
"Uploading...": "Subiendo...",
|
|
45132
|
+
"Upload failed": "Error al subir",
|
|
45133
|
+
"Invalid image URL": "URL de imagen no válida",
|
|
45134
|
+
"File too large": "Archivo demasiado grande",
|
|
45135
|
+
"Invalid file type": "Tipo de archivo no válido",
|
|
45136
|
+
"More": "Más"
|
|
45137
|
+
};
|
|
45138
|
+
const sv = {
|
|
45139
|
+
"Bold": "Fet",
|
|
45140
|
+
"Italic": "Kursiv",
|
|
45141
|
+
"Underline": "Understruken",
|
|
45142
|
+
"Strikethrough": "Genomstruken",
|
|
45143
|
+
"Bullet list": "Punktlista",
|
|
45144
|
+
"Numbered list": "Numrerad lista",
|
|
45145
|
+
"Decrease indent": "Minska indrag",
|
|
45146
|
+
"Increase indent": "Öka indrag",
|
|
45147
|
+
"Blockquote": "Blockcitat",
|
|
45148
|
+
"Align left": "Vänsterjustera",
|
|
45149
|
+
"Align center": "Centrera",
|
|
45150
|
+
"Align right": "Högerjustera",
|
|
45151
|
+
"Justify": "Marginaljustera",
|
|
45152
|
+
"Text color": "Textfärg",
|
|
45153
|
+
"Background color": "Bakgrundsfärg",
|
|
45154
|
+
"Remove formatting": "Ta bort formatering",
|
|
45155
|
+
"Copy": "Kopiera",
|
|
45156
|
+
"Cut": "Klipp ut",
|
|
45157
|
+
"Paste": "Klistra in",
|
|
45158
|
+
"Undo": "Ångra",
|
|
45159
|
+
"Redo": "Gör om",
|
|
45160
|
+
"Insert image": "Infoga bild",
|
|
45161
|
+
"Special character": "Specialtecken",
|
|
45162
|
+
"Emoticons": "Emotikoner",
|
|
45163
|
+
"Fullscreen": "Helskärm",
|
|
45164
|
+
"Preview": "Förhandsgranska",
|
|
45165
|
+
"Source code": "Källkod",
|
|
45166
|
+
"Insert link": "Infoga länk",
|
|
45167
|
+
"Code sample": "Kodexempel",
|
|
45168
|
+
"Left to right": "Vänster till höger",
|
|
45169
|
+
"Right to left": "Höger till vänster",
|
|
45170
|
+
"Find and replace": "Sök och ersätt",
|
|
45171
|
+
"Font": "Teckensnitt",
|
|
45172
|
+
"Font size": "Teckenstorlek",
|
|
45173
|
+
"Line height": "Radhöjd",
|
|
45174
|
+
"Templates": "Mallar",
|
|
45175
|
+
"Apply": "Tillämpa",
|
|
45176
|
+
"Enter image URL:": "Ange bild-URL:",
|
|
45177
|
+
"Enter URL:": "Ange URL:",
|
|
45178
|
+
"Edit HTML source:": "Redigera HTML-källa:",
|
|
45179
|
+
"Find and Replace": "Sök och ersätt",
|
|
45180
|
+
"Find": "Sök",
|
|
45181
|
+
"Replace": "Ersätt",
|
|
45182
|
+
"Case sensitive": "Skiftlägeskänslig",
|
|
45183
|
+
"Whole word": "Helt ord",
|
|
45184
|
+
"Previous": "Föregående",
|
|
45185
|
+
"Next": "Nästa",
|
|
45186
|
+
"Replace All": "Ersätt alla",
|
|
45187
|
+
"Search...": "Sök...",
|
|
45188
|
+
"Special Character": "Specialtecken",
|
|
45189
|
+
"Upload": "Ladda upp",
|
|
45190
|
+
"URL": "URL",
|
|
45191
|
+
"Browse...": "Bläddra...",
|
|
45192
|
+
"Drop image here or click to browse": "Dra bilden hit eller klicka för att bläddra",
|
|
45193
|
+
"Alt text": "Alternativtext",
|
|
45194
|
+
"Insert": "Infoga",
|
|
45195
|
+
"Cancel": "Avbryt",
|
|
45196
|
+
"Uploading...": "Laddar upp...",
|
|
45197
|
+
"Upload failed": "Uppladdning misslyckades",
|
|
45198
|
+
"Invalid image URL": "Ogiltig bild-URL",
|
|
45199
|
+
"File too large": "Filen är för stor",
|
|
45200
|
+
"Invalid file type": "Ogiltig filtyp",
|
|
45201
|
+
"More": "Mer"
|
|
45202
|
+
};
|
|
45203
|
+
const zhTw = {
|
|
45204
|
+
"Bold": "粗體",
|
|
45205
|
+
"Italic": "斜體",
|
|
45206
|
+
"Underline": "底線",
|
|
45207
|
+
"Strikethrough": "刪除線",
|
|
45208
|
+
"Bullet list": "項目符號清單",
|
|
45209
|
+
"Numbered list": "編號清單",
|
|
45210
|
+
"Decrease indent": "減少縮排",
|
|
45211
|
+
"Increase indent": "增加縮排",
|
|
45212
|
+
"Blockquote": "引用",
|
|
45213
|
+
"Align left": "靠左對齊",
|
|
45214
|
+
"Align center": "置中對齊",
|
|
45215
|
+
"Align right": "靠右對齊",
|
|
45216
|
+
"Justify": "左右對齊",
|
|
45217
|
+
"Text color": "文字顏色",
|
|
45218
|
+
"Background color": "背景顏色",
|
|
45219
|
+
"Remove formatting": "清除格式",
|
|
45220
|
+
"Copy": "複製",
|
|
45221
|
+
"Cut": "剪下",
|
|
45222
|
+
"Paste": "貼上",
|
|
45223
|
+
"Undo": "復原",
|
|
45224
|
+
"Redo": "重做",
|
|
45225
|
+
"Insert image": "插入圖片",
|
|
45226
|
+
"Special character": "特殊字元",
|
|
45227
|
+
"Emoticons": "表情符號",
|
|
45228
|
+
"Fullscreen": "全螢幕",
|
|
45229
|
+
"Preview": "預覽",
|
|
45230
|
+
"Source code": "原始碼",
|
|
45231
|
+
"Insert link": "插入連結",
|
|
45232
|
+
"Code sample": "程式碼範例",
|
|
45233
|
+
"Left to right": "由左至右",
|
|
45234
|
+
"Right to left": "由右至左",
|
|
45235
|
+
"Find and replace": "尋找與取代",
|
|
45236
|
+
"Font": "字型",
|
|
45237
|
+
"Font size": "字型大小",
|
|
45238
|
+
"Line height": "行高",
|
|
45239
|
+
"Templates": "範本",
|
|
45240
|
+
"Apply": "套用",
|
|
45241
|
+
"Enter image URL:": "輸入圖片網址:",
|
|
45242
|
+
"Enter URL:": "輸入網址:",
|
|
45243
|
+
"Edit HTML source:": "編輯HTML原始碼:",
|
|
45244
|
+
"Find and Replace": "尋找與取代",
|
|
45245
|
+
"Find": "尋找",
|
|
45246
|
+
"Replace": "取代",
|
|
45247
|
+
"Case sensitive": "區分大小寫",
|
|
45248
|
+
"Whole word": "全字拼寫",
|
|
45249
|
+
"Previous": "上一個",
|
|
45250
|
+
"Next": "下一個",
|
|
45251
|
+
"Replace All": "全部取代",
|
|
45252
|
+
"Search...": "搜尋...",
|
|
45253
|
+
"Special Character": "特殊字元",
|
|
45254
|
+
"Upload": "上傳",
|
|
45255
|
+
"URL": "URL",
|
|
45256
|
+
"Browse...": "瀏覽...",
|
|
45257
|
+
"Drop image here or click to browse": "將圖片拖放至此處或點擊瀏覽",
|
|
45258
|
+
"Alt text": "替代文字",
|
|
45259
|
+
"Insert": "插入",
|
|
45260
|
+
"Cancel": "取消",
|
|
45261
|
+
"Uploading...": "上傳中...",
|
|
45262
|
+
"Upload failed": "上傳失敗",
|
|
45263
|
+
"Invalid image URL": "無效的圖片 URL",
|
|
45264
|
+
"File too large": "檔案過大",
|
|
45265
|
+
"Invalid file type": "無效的檔案類型",
|
|
45266
|
+
"More": "更多"
|
|
45267
|
+
};
|
|
45268
|
+
const th = {
|
|
45269
|
+
"Bold": "ตัวหนา",
|
|
45270
|
+
"Italic": "ตัวเอียง",
|
|
45271
|
+
"Underline": "ขีดเส้นใต้",
|
|
45272
|
+
"Strikethrough": "ขีดฆ่า",
|
|
45273
|
+
"Bullet list": "รายการสัญลักษณ์",
|
|
45274
|
+
"Numbered list": "รายการลำดับเลข",
|
|
45275
|
+
"Decrease indent": "ลดการเยื้อง",
|
|
45276
|
+
"Increase indent": "เพิ่มการเยื้อง",
|
|
45277
|
+
"Blockquote": "บล็อกอ้างอิง",
|
|
45278
|
+
"Align left": "จัดชิดซ้าย",
|
|
45279
|
+
"Align center": "จัดกึ่งกลาง",
|
|
45280
|
+
"Align right": "จัดชิดขวา",
|
|
45281
|
+
"Justify": "จัดเต็มบรรทัด",
|
|
45282
|
+
"Text color": "สีตัวอักษร",
|
|
45283
|
+
"Background color": "สีพื้นหลัง",
|
|
45284
|
+
"Remove formatting": "ล้างการจัดรูปแบบ",
|
|
45285
|
+
"Copy": "คัดลอก",
|
|
45286
|
+
"Cut": "ตัด",
|
|
45287
|
+
"Paste": "วาง",
|
|
45288
|
+
"Undo": "เลิกทำ",
|
|
45289
|
+
"Redo": "ทำซ้ำ",
|
|
45290
|
+
"Insert image": "แทรกรูปภาพ",
|
|
45291
|
+
"Special character": "อักขระพิเศษ",
|
|
45292
|
+
"Emoticons": "อิโมติคอน",
|
|
45293
|
+
"Fullscreen": "เต็มจอ",
|
|
45294
|
+
"Preview": "ดูตัวอย่าง",
|
|
45295
|
+
"Source code": "ซอร์สโค้ด",
|
|
45296
|
+
"Insert link": "แทรกลิงก์",
|
|
45297
|
+
"Code sample": "ตัวอย่างโค้ด",
|
|
45298
|
+
"Left to right": "ซ้ายไปขวา",
|
|
45299
|
+
"Right to left": "ขวาไปซ้าย",
|
|
45300
|
+
"Find and replace": "ค้นหาและแทนที่",
|
|
45301
|
+
"Font": "แบบอักษร",
|
|
45302
|
+
"Font size": "ขนาดอักษร",
|
|
45303
|
+
"Line height": "ความสูงบรรทัด",
|
|
45304
|
+
"Templates": "เทมเพลต",
|
|
45305
|
+
"Apply": "นำไปใช้",
|
|
45306
|
+
"Enter image URL:": "ป้อน URL รูปภาพ:",
|
|
45307
|
+
"Enter URL:": "ป้อน URL:",
|
|
45308
|
+
"Edit HTML source:": "แก้ไขซอร์สโค้ด HTML:",
|
|
45309
|
+
"Find and Replace": "ค้นหาและแทนที่",
|
|
45310
|
+
"Find": "ค้นหา",
|
|
45311
|
+
"Replace": "แทนที่",
|
|
45312
|
+
"Case sensitive": "ตรงตามตัวพิมพ์",
|
|
45313
|
+
"Whole word": "ทั้งคำ",
|
|
45314
|
+
"Previous": "ก่อนหน้า",
|
|
45315
|
+
"Next": "ถัดไป",
|
|
45316
|
+
"Replace All": "แทนที่ทั้งหมด",
|
|
45317
|
+
"Search...": "ค้นหา...",
|
|
45318
|
+
"Special Character": "อักขระพิเศษ",
|
|
45319
|
+
"Upload": "อัปโหลด",
|
|
45320
|
+
"URL": "URL",
|
|
45321
|
+
"Browse...": "เรียกดู...",
|
|
45322
|
+
"Drop image here or click to browse": "ลากรูปภาพมาที่นี่หรือคลิกเพื่อเรียกดู",
|
|
45323
|
+
"Alt text": "ข้อความทดแทน",
|
|
45324
|
+
"Insert": "แทรก",
|
|
45325
|
+
"Cancel": "ยกเลิก",
|
|
45326
|
+
"Uploading...": "กำลังอัปโหลด...",
|
|
45327
|
+
"Upload failed": "อัปโหลดล้มเหลว",
|
|
45328
|
+
"Invalid image URL": "URL รูปภาพไม่ถูกต้อง",
|
|
45329
|
+
"File too large": "ไฟล์ใหญ่เกินไป",
|
|
45330
|
+
"Invalid file type": "ประเภทไฟล์ไม่ถูกต้อง",
|
|
45331
|
+
"More": "เพิ่มเติม"
|
|
45332
|
+
};
|
|
45333
|
+
const tr = {
|
|
45334
|
+
"Bold": "Kalın",
|
|
45335
|
+
"Italic": "İtalik",
|
|
45336
|
+
"Underline": "Altı çizili",
|
|
45337
|
+
"Strikethrough": "Üstü çizili",
|
|
45338
|
+
"Bullet list": "Madde işaretli liste",
|
|
45339
|
+
"Numbered list": "Numaralı liste",
|
|
45340
|
+
"Decrease indent": "Girintiyi azalt",
|
|
45341
|
+
"Increase indent": "Girintiyi artır",
|
|
45342
|
+
"Blockquote": "Alıntı",
|
|
45343
|
+
"Align left": "Sola hizala",
|
|
45344
|
+
"Align center": "Ortala",
|
|
45345
|
+
"Align right": "Sağa hizala",
|
|
45346
|
+
"Justify": "İki yana yasla",
|
|
45347
|
+
"Text color": "Metin rengi",
|
|
45348
|
+
"Background color": "Arka plan rengi",
|
|
45349
|
+
"Remove formatting": "Biçimlendirmeyi kaldır",
|
|
45350
|
+
"Copy": "Kopyala",
|
|
45351
|
+
"Cut": "Kes",
|
|
45352
|
+
"Paste": "Yapıştır",
|
|
45353
|
+
"Undo": "Geri al",
|
|
45354
|
+
"Redo": "Yinele",
|
|
45355
|
+
"Insert image": "Resim ekle",
|
|
45356
|
+
"Special character": "Özel karakter",
|
|
45357
|
+
"Emoticons": "İfadeler",
|
|
45358
|
+
"Fullscreen": "Tam ekran",
|
|
45359
|
+
"Preview": "Önizleme",
|
|
45360
|
+
"Source code": "Kaynak kodu",
|
|
45361
|
+
"Insert link": "Bağlantı ekle",
|
|
45362
|
+
"Code sample": "Kod örneği",
|
|
45363
|
+
"Left to right": "Soldan sağa",
|
|
45364
|
+
"Right to left": "Sağdan sola",
|
|
45365
|
+
"Find and replace": "Bul ve değiştir",
|
|
45366
|
+
"Font": "Yazı tipi",
|
|
45367
|
+
"Font size": "Yazı tipi boyutu",
|
|
45368
|
+
"Line height": "Satır yüksekliği",
|
|
45369
|
+
"Templates": "Şablonlar",
|
|
45370
|
+
"Apply": "Uygula",
|
|
45371
|
+
"Enter image URL:": "Resim URL'sini girin:",
|
|
45372
|
+
"Enter URL:": "URL girin:",
|
|
45373
|
+
"Edit HTML source:": "HTML kaynağını düzenle:",
|
|
45374
|
+
"Find and Replace": "Bul ve değiştir",
|
|
45375
|
+
"Find": "Bul",
|
|
45376
|
+
"Replace": "Değiştir",
|
|
45377
|
+
"Case sensitive": "Büyük/küçük harf duyarlı",
|
|
45378
|
+
"Whole word": "Tam kelime",
|
|
45379
|
+
"Previous": "Önceki",
|
|
45380
|
+
"Next": "Sonraki",
|
|
45381
|
+
"Replace All": "Tümünü değiştir",
|
|
45382
|
+
"Search...": "Ara...",
|
|
45383
|
+
"Special Character": "Özel karakter",
|
|
45384
|
+
"Upload": "Yükle",
|
|
45385
|
+
"URL": "URL",
|
|
45386
|
+
"Browse...": "Gözat...",
|
|
45387
|
+
"Drop image here or click to browse": "Resmi buraya sürükleyin veya gözatmak için tıklayın",
|
|
45388
|
+
"Alt text": "Alternatif metin",
|
|
45389
|
+
"Insert": "Ekle",
|
|
45390
|
+
"Cancel": "İptal",
|
|
45391
|
+
"Uploading...": "Yükleniyor...",
|
|
45392
|
+
"Upload failed": "Yükleme başarısız",
|
|
45393
|
+
"Invalid image URL": "Geçersiz resim URL'si",
|
|
45394
|
+
"File too large": "Dosya çok büyük",
|
|
45395
|
+
"Invalid file type": "Geçersiz dosya türü",
|
|
45396
|
+
"More": "Daha fazla"
|
|
45397
|
+
};
|
|
45398
|
+
const vi = {
|
|
45399
|
+
"Bold": "In đậm",
|
|
45400
|
+
"Italic": "In nghiêng",
|
|
45401
|
+
"Underline": "Gạch chân",
|
|
45402
|
+
"Strikethrough": "Gạch ngang",
|
|
45403
|
+
"Bullet list": "Danh sách có dấu đầu dòng",
|
|
45404
|
+
"Numbered list": "Danh sách đánh số",
|
|
45405
|
+
"Decrease indent": "Giảm thụt lề",
|
|
45406
|
+
"Increase indent": "Tăng thụt lề",
|
|
45407
|
+
"Blockquote": "Trích dẫn",
|
|
45408
|
+
"Align left": "Căn trái",
|
|
45409
|
+
"Align center": "Căn giữa",
|
|
45410
|
+
"Align right": "Căn phải",
|
|
45411
|
+
"Justify": "Căn đều",
|
|
45412
|
+
"Text color": "Màu chữ",
|
|
45413
|
+
"Background color": "Màu nền",
|
|
45414
|
+
"Remove formatting": "Xóa định dạng",
|
|
45415
|
+
"Copy": "Sao chép",
|
|
45416
|
+
"Cut": "Cắt",
|
|
45417
|
+
"Paste": "Dán",
|
|
45418
|
+
"Undo": "Hoàn tác",
|
|
45419
|
+
"Redo": "Làm lại",
|
|
45420
|
+
"Insert image": "Chèn hình ảnh",
|
|
45421
|
+
"Special character": "Ký tự đặc biệt",
|
|
45422
|
+
"Emoticons": "Biểu tượng cảm xúc",
|
|
45423
|
+
"Fullscreen": "Toàn màn hình",
|
|
45424
|
+
"Preview": "Xem trước",
|
|
45425
|
+
"Source code": "Mã nguồn",
|
|
45426
|
+
"Insert link": "Chèn liên kết",
|
|
45427
|
+
"Code sample": "Mẫu mã",
|
|
45428
|
+
"Left to right": "Trái sang phải",
|
|
45429
|
+
"Right to left": "Phải sang trái",
|
|
45430
|
+
"Find and replace": "Tìm và thay thế",
|
|
45431
|
+
"Font": "Phông chữ",
|
|
45432
|
+
"Font size": "Cỡ chữ",
|
|
45433
|
+
"Line height": "Chiều cao dòng",
|
|
45434
|
+
"Templates": "Mẫu",
|
|
45435
|
+
"Apply": "Áp dụng",
|
|
45436
|
+
"Enter image URL:": "Nhập URL hình ảnh:",
|
|
45437
|
+
"Enter URL:": "Nhập URL:",
|
|
45438
|
+
"Edit HTML source:": "Chỉnh sửa mã nguồn HTML:",
|
|
45439
|
+
"Find and Replace": "Tìm và thay thế",
|
|
45440
|
+
"Find": "Tìm",
|
|
45441
|
+
"Replace": "Thay thế",
|
|
45442
|
+
"Case sensitive": "Phân biệt chữ hoa/thường",
|
|
45443
|
+
"Whole word": "Toàn bộ từ",
|
|
45444
|
+
"Previous": "Trước",
|
|
45445
|
+
"Next": "Tiếp",
|
|
45446
|
+
"Replace All": "Thay thế tất cả",
|
|
45447
|
+
"Search...": "Tìm kiếm...",
|
|
45448
|
+
"Special Character": "Ký tự đặc biệt",
|
|
45449
|
+
"Upload": "Tải lên",
|
|
45450
|
+
"URL": "URL",
|
|
45451
|
+
"Browse...": "Duyệt...",
|
|
45452
|
+
"Drop image here or click to browse": "Kéo thả hình ảnh vào đây hoặc nhấp để duyệt",
|
|
45453
|
+
"Alt text": "Văn bản thay thế",
|
|
45454
|
+
"Insert": "Chèn",
|
|
45455
|
+
"Cancel": "Hủy",
|
|
45456
|
+
"Uploading...": "Đang tải lên...",
|
|
45457
|
+
"Upload failed": "Tải lên thất bại",
|
|
45458
|
+
"Invalid image URL": "URL hình ảnh không hợp lệ",
|
|
45459
|
+
"File too large": "Tệp quá lớn",
|
|
45460
|
+
"Invalid file type": "Loại tệp không hợp lệ",
|
|
45461
|
+
"More": "Thêm"
|
|
45462
|
+
};
|
|
45463
|
+
const locales = {
|
|
45464
|
+
en,
|
|
45465
|
+
ar,
|
|
45466
|
+
ca,
|
|
45467
|
+
zh,
|
|
45468
|
+
cs,
|
|
45469
|
+
da,
|
|
45470
|
+
"en-gb": enGb,
|
|
45471
|
+
fi,
|
|
45472
|
+
fr,
|
|
45473
|
+
"fr-ca": frCa,
|
|
45474
|
+
de,
|
|
45475
|
+
el,
|
|
45476
|
+
hu,
|
|
45477
|
+
id,
|
|
45478
|
+
it,
|
|
45479
|
+
ja,
|
|
45480
|
+
ko,
|
|
45481
|
+
nl,
|
|
45482
|
+
nb,
|
|
45483
|
+
pl,
|
|
45484
|
+
pt,
|
|
45485
|
+
ro,
|
|
45486
|
+
ru,
|
|
45487
|
+
sr,
|
|
45488
|
+
sl,
|
|
45489
|
+
es,
|
|
45490
|
+
sv,
|
|
45491
|
+
"zh-tw": zhTw,
|
|
45492
|
+
th,
|
|
45493
|
+
tr,
|
|
45494
|
+
vi
|
|
45495
|
+
};
|
|
45496
|
+
function getLocale(code) {
|
|
45497
|
+
return locales[code] ?? locales["en"];
|
|
45498
|
+
}
|
|
45499
|
+
function createTranslateFunction(code) {
|
|
45500
|
+
const locale = getLocale(code);
|
|
45501
|
+
return (key) => locale[key] ?? key;
|
|
45502
|
+
}
|
|
45503
|
+
const availableLocales = Object.keys(locales);
|
|
45504
|
+
const TRANSLATION_KEYS = Object.keys(en);
|
|
42515
45505
|
const lowlight = createLowlight(grammars);
|
|
42516
45506
|
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";
|
|
42517
|
-
const FULL_TOOLBAR = "bold italic underline strikethrough | bullist numlist outdent indent blockquote | fontfamily fontsize
|
|
42518
|
-
const BASIC_TOOLBAR = "bold italic underline strikethrough | bullist numlist outdent indent | fontfamily fontsize blockquote
|
|
45507
|
+
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";
|
|
45508
|
+
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";
|
|
42519
45509
|
const DEFAULT_FONT_SIZES = "8pt 9pt 10pt 12pt 14pt 18pt 24pt 36pt";
|
|
42520
45510
|
let editorIdCounter = 0;
|
|
42521
45511
|
let globalTranslate = (key) => key;
|
|
45512
|
+
let globalTranslateCustomized = false;
|
|
42522
45513
|
let globalGetFileSrc = (path) => path;
|
|
42523
45514
|
function setTranslate(fn) {
|
|
42524
45515
|
globalTranslate = fn;
|
|
45516
|
+
globalTranslateCustomized = true;
|
|
42525
45517
|
}
|
|
42526
45518
|
function getTranslate() {
|
|
42527
45519
|
return globalTranslate;
|
|
42528
45520
|
}
|
|
45521
|
+
function resetTranslate() {
|
|
45522
|
+
globalTranslate = (key) => key;
|
|
45523
|
+
globalTranslateCustomized = false;
|
|
45524
|
+
}
|
|
42529
45525
|
function setGetFileSrc(fn) {
|
|
42530
45526
|
globalGetFileSrc = fn;
|
|
42531
45527
|
}
|
|
@@ -42544,6 +45540,7 @@ class HTMLEditor {
|
|
|
42544
45540
|
customButtons = /* @__PURE__ */ new Map();
|
|
42545
45541
|
eventListeners = /* @__PURE__ */ new Map();
|
|
42546
45542
|
changeTimeout = null;
|
|
45543
|
+
imageUploadHelper = null;
|
|
42547
45544
|
constructor(container, config = {}) {
|
|
42548
45545
|
this.id = `md-editor-${++editorIdCounter}`;
|
|
42549
45546
|
this.container = container;
|
|
@@ -42570,6 +45567,8 @@ class HTMLEditor {
|
|
|
42570
45567
|
images_upload_url: config.images_upload_url,
|
|
42571
45568
|
images_upload_credentials: config.images_upload_credentials ?? true,
|
|
42572
45569
|
images_upload_base_path: config.images_upload_base_path ?? "/",
|
|
45570
|
+
images_upload_max_size: config.images_upload_max_size,
|
|
45571
|
+
images_upload_headers: config.images_upload_headers,
|
|
42573
45572
|
font_family_formats: config.font_family_formats ?? fontNames,
|
|
42574
45573
|
font_size_formats: config.font_size_formats ?? DEFAULT_FONT_SIZES,
|
|
42575
45574
|
fontName: config.fontName,
|
|
@@ -42577,13 +45576,15 @@ class HTMLEditor {
|
|
|
42577
45576
|
directionality: config.directionality ?? "ltr",
|
|
42578
45577
|
language: config.language ?? "en",
|
|
42579
45578
|
height: config.height ?? 300,
|
|
45579
|
+
min_height: config.min_height,
|
|
45580
|
+
max_height: config.max_height,
|
|
42580
45581
|
auto_focus: config.auto_focus,
|
|
42581
45582
|
setFocus: config.setFocus,
|
|
42582
45583
|
skin: config.skin ?? "oxide",
|
|
42583
45584
|
content_css: config.content_css ?? "default",
|
|
42584
45585
|
content_style: config.content_style,
|
|
42585
45586
|
toolbar: config.toolbar ?? (config.basicEditor ? BASIC_TOOLBAR : FULL_TOOLBAR),
|
|
42586
|
-
toolbar_mode: config.toolbar_mode ?? "
|
|
45587
|
+
toolbar_mode: config.toolbar_mode ?? "wrap",
|
|
42587
45588
|
toolbar_sticky: config.toolbar_sticky ?? true,
|
|
42588
45589
|
menubar: config.menubar ?? false,
|
|
42589
45590
|
contextmenu: config.contextmenu ?? "",
|
|
@@ -42599,6 +45600,9 @@ class HTMLEditor {
|
|
|
42599
45600
|
};
|
|
42600
45601
|
}
|
|
42601
45602
|
createEditor() {
|
|
45603
|
+
if (!globalTranslateCustomized) {
|
|
45604
|
+
globalTranslate = createTranslateFunction(this.config.language ?? "en");
|
|
45605
|
+
}
|
|
42602
45606
|
this.editorWrapper = document.createElement("div");
|
|
42603
45607
|
this.editorWrapper.className = `md-editor md-editor-${this.config.skin}`;
|
|
42604
45608
|
this.editorWrapper.id = this.id;
|
|
@@ -42610,6 +45614,20 @@ class HTMLEditor {
|
|
|
42610
45614
|
this.editorWrapper.style.height = this.config.height;
|
|
42611
45615
|
}
|
|
42612
45616
|
}
|
|
45617
|
+
if (this.config.min_height) {
|
|
45618
|
+
if (typeof this.config.min_height === "number") {
|
|
45619
|
+
this.editorWrapper.style.minHeight = `${this.config.min_height}px`;
|
|
45620
|
+
} else {
|
|
45621
|
+
this.editorWrapper.style.minHeight = this.config.min_height;
|
|
45622
|
+
}
|
|
45623
|
+
}
|
|
45624
|
+
if (this.config.max_height) {
|
|
45625
|
+
if (typeof this.config.max_height === "number") {
|
|
45626
|
+
this.editorWrapper.style.maxHeight = `${this.config.max_height}px`;
|
|
45627
|
+
} else {
|
|
45628
|
+
this.editorWrapper.style.maxHeight = this.config.max_height;
|
|
45629
|
+
}
|
|
45630
|
+
}
|
|
42613
45631
|
const toolbarContainer = document.createElement("div");
|
|
42614
45632
|
toolbarContainer.className = "md-editor-toolbar";
|
|
42615
45633
|
this.editorWrapper.appendChild(toolbarContainer);
|
|
@@ -42648,13 +45666,15 @@ class HTMLEditor {
|
|
|
42648
45666
|
}
|
|
42649
45667
|
};
|
|
42650
45668
|
this.tiptap = new Editor(editorOptions);
|
|
45669
|
+
const iconSet = this.config.skin?.startsWith("confab") ? CONFAB_ICONS : DEFAULT_ICONS;
|
|
42651
45670
|
this.toolbar = new Toolbar(toolbarContainer, {
|
|
42652
45671
|
editor: this,
|
|
42653
45672
|
buttons: this.config.toolbar ?? BASIC_TOOLBAR,
|
|
42654
45673
|
mode: this.config.toolbar_mode ?? "sliding",
|
|
42655
45674
|
sticky: this.config.toolbar_sticky ?? true,
|
|
42656
45675
|
customButtons: this.customButtons,
|
|
42657
|
-
config: this.config
|
|
45676
|
+
config: this.config,
|
|
45677
|
+
iconSet
|
|
42658
45678
|
});
|
|
42659
45679
|
if (this.config.auto_focus) {
|
|
42660
45680
|
setTimeout(() => this.focus(), 10);
|
|
@@ -42666,6 +45686,70 @@ class HTMLEditor {
|
|
|
42666
45686
|
}
|
|
42667
45687
|
}, 10);
|
|
42668
45688
|
}
|
|
45689
|
+
if (!this.config.basicEditor) {
|
|
45690
|
+
this.setupImageHandlers(editorContent);
|
|
45691
|
+
}
|
|
45692
|
+
}
|
|
45693
|
+
getImageUploadHelper() {
|
|
45694
|
+
if (!this.imageUploadHelper) {
|
|
45695
|
+
this.imageUploadHelper = new ImageUpload({
|
|
45696
|
+
onInsert: () => {
|
|
45697
|
+
},
|
|
45698
|
+
uploadUrl: this.config.images_upload_url,
|
|
45699
|
+
uploadCredentials: this.config.images_upload_credentials,
|
|
45700
|
+
uploadBasePath: this.config.images_upload_base_path,
|
|
45701
|
+
uploadMaxSize: this.config.images_upload_max_size,
|
|
45702
|
+
uploadHeaders: this.config.images_upload_headers,
|
|
45703
|
+
trans: globalTranslate
|
|
45704
|
+
});
|
|
45705
|
+
}
|
|
45706
|
+
return this.imageUploadHelper;
|
|
45707
|
+
}
|
|
45708
|
+
setupImageHandlers(editorContent) {
|
|
45709
|
+
editorContent.addEventListener("dragover", (e) => {
|
|
45710
|
+
if (e.dataTransfer?.types.includes("Files")) {
|
|
45711
|
+
e.preventDefault();
|
|
45712
|
+
e.dataTransfer.dropEffect = "copy";
|
|
45713
|
+
this.editorWrapper?.classList.add("md-editor-dragover");
|
|
45714
|
+
}
|
|
45715
|
+
});
|
|
45716
|
+
editorContent.addEventListener("dragleave", (e) => {
|
|
45717
|
+
const related = e.relatedTarget;
|
|
45718
|
+
if (!related || !editorContent.contains(related)) {
|
|
45719
|
+
this.editorWrapper?.classList.remove("md-editor-dragover");
|
|
45720
|
+
}
|
|
45721
|
+
});
|
|
45722
|
+
editorContent.addEventListener("drop", (e) => {
|
|
45723
|
+
this.editorWrapper?.classList.remove("md-editor-dragover");
|
|
45724
|
+
const files = e.dataTransfer?.files;
|
|
45725
|
+
if (!files || files.length === 0) return;
|
|
45726
|
+
const imageFile = Array.from(files).find((f) => f.type.startsWith("image/"));
|
|
45727
|
+
if (!imageFile) return;
|
|
45728
|
+
e.preventDefault();
|
|
45729
|
+
e.stopPropagation();
|
|
45730
|
+
this.handleImageFileUpload(imageFile);
|
|
45731
|
+
});
|
|
45732
|
+
editorContent.addEventListener("paste", (e) => {
|
|
45733
|
+
const items = e.clipboardData?.items;
|
|
45734
|
+
if (!items) return;
|
|
45735
|
+
for (const item of Array.from(items)) {
|
|
45736
|
+
if (item.type.startsWith("image/")) {
|
|
45737
|
+
const file = item.getAsFile();
|
|
45738
|
+
if (file) {
|
|
45739
|
+
e.preventDefault();
|
|
45740
|
+
this.handleImageFileUpload(file);
|
|
45741
|
+
return;
|
|
45742
|
+
}
|
|
45743
|
+
}
|
|
45744
|
+
}
|
|
45745
|
+
});
|
|
45746
|
+
}
|
|
45747
|
+
handleImageFileUpload(file) {
|
|
45748
|
+
const helper = this.getImageUploadHelper();
|
|
45749
|
+
helper.uploadFile(file).then((src) => {
|
|
45750
|
+
this.tiptap?.chain().focus().setImage({ src }).run();
|
|
45751
|
+
}).catch(() => {
|
|
45752
|
+
});
|
|
42669
45753
|
}
|
|
42670
45754
|
buildExtensions() {
|
|
42671
45755
|
const extensions = [
|
|
@@ -42673,6 +45757,7 @@ class HTMLEditor {
|
|
|
42673
45757
|
codeBlock: false
|
|
42674
45758
|
// We use CodeBlockLowlight instead
|
|
42675
45759
|
}),
|
|
45760
|
+
SignatureBlock,
|
|
42676
45761
|
Underline,
|
|
42677
45762
|
TextStyle,
|
|
42678
45763
|
FontFamily,
|
|
@@ -42876,6 +45961,8 @@ class HTMLEditor {
|
|
|
42876
45961
|
this.toolbar = null;
|
|
42877
45962
|
this.tiptap?.destroy();
|
|
42878
45963
|
this.tiptap = null;
|
|
45964
|
+
this.imageUploadHelper?.destroy();
|
|
45965
|
+
this.imageUploadHelper = null;
|
|
42879
45966
|
if (this.editorWrapper) {
|
|
42880
45967
|
this.editorWrapper.remove();
|
|
42881
45968
|
}
|
|
@@ -42886,6 +45973,15 @@ class HTMLEditor {
|
|
|
42886
45973
|
getTipTap() {
|
|
42887
45974
|
return this.tiptap;
|
|
42888
45975
|
}
|
|
45976
|
+
/**
|
|
45977
|
+
* Set the UI language, updating all toolbar and dialog translations.
|
|
45978
|
+
*/
|
|
45979
|
+
setLanguage(code) {
|
|
45980
|
+
this.config.language = code;
|
|
45981
|
+
globalTranslate = createTranslateFunction(code);
|
|
45982
|
+
this.toolbar?.rebuild();
|
|
45983
|
+
this.fire("languagechange", code);
|
|
45984
|
+
}
|
|
42889
45985
|
/**
|
|
42890
45986
|
* Get the editor config
|
|
42891
45987
|
*/
|
|
@@ -42901,18 +45997,26 @@ class HTMLEditor {
|
|
|
42901
45997
|
}
|
|
42902
45998
|
export {
|
|
42903
45999
|
CHAR_MAP,
|
|
46000
|
+
CONFAB_ICONS,
|
|
42904
46001
|
CharacterMap,
|
|
46002
|
+
DEFAULT_ICONS,
|
|
42905
46003
|
EMOJI_CATEGORIES,
|
|
42906
46004
|
EmojiPicker,
|
|
42907
46005
|
FontSize,
|
|
42908
46006
|
HTMLEditor,
|
|
42909
46007
|
LineHeight,
|
|
42910
46008
|
SearchReplace,
|
|
46009
|
+
SignatureBlock,
|
|
46010
|
+
TRANSLATION_KEYS,
|
|
42911
46011
|
TextDirection,
|
|
42912
46012
|
Toolbar,
|
|
46013
|
+
availableLocales,
|
|
46014
|
+
createTranslateFunction,
|
|
42913
46015
|
fontNames,
|
|
42914
46016
|
getGetFileSrc,
|
|
46017
|
+
getLocale,
|
|
42915
46018
|
getTranslate,
|
|
46019
|
+
resetTranslate,
|
|
42916
46020
|
setGetFileSrc,
|
|
42917
46021
|
setTranslate
|
|
42918
46022
|
};
|