@kerebron/extension-odt 0.0.13 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/editor/src/CoreEditor.d.ts +3 -8
- package/esm/editor/src/CoreEditor.d.ts.map +1 -1
- package/esm/editor/src/CoreEditor.js +12 -30
- package/esm/editor/src/Extension.d.ts +1 -1
- package/esm/editor/src/Extension.d.ts.map +1 -1
- package/esm/editor/src/Extension.js +1 -1
- package/esm/editor/src/ExtensionManager.js +2 -2
- package/esm/editor/src/mod.d.ts +1 -0
- package/esm/editor/src/mod.d.ts.map +1 -1
- package/esm/editor/src/mod.js +1 -0
- package/esm/editor/src/nodeToTreeString.d.ts +4 -0
- package/esm/editor/src/nodeToTreeString.d.ts.map +1 -0
- package/esm/editor/src/nodeToTreeString.js +53 -0
- package/esm/editor/src/utilities/createNodeFromContent.d.ts +2 -6
- package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -1
- package/esm/editor/src/utilities/createNodeFromContent.js +5 -90
- package/esm/extension-odt/src/ExtensionOdt.d.ts +7 -2
- package/esm/extension-odt/src/ExtensionOdt.d.ts.map +1 -1
- package/esm/extension-odt/src/ExtensionOdt.js +23 -5
- package/esm/extension-odt/src/OdtParser.d.ts +72 -3
- package/esm/extension-odt/src/OdtParser.d.ts.map +1 -1
- package/esm/extension-odt/src/OdtParser.js +375 -113
- package/esm/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.d.ts +3 -0
- package/esm/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.d.ts.map +1 -0
- package/esm/extension-odt/src/postprocess/convertCodeParagraphsToCodeBlocks.js +72 -0
- package/esm/extension-odt/src/postprocess/fixContinuedLists.d.ts +3 -0
- package/esm/extension-odt/src/postprocess/fixContinuedLists.d.ts.map +1 -0
- package/esm/extension-odt/src/postprocess/fixContinuedLists.js +83 -0
- package/esm/extension-odt/src/postprocess/postProcess.d.ts +3 -0
- package/esm/extension-odt/src/postprocess/postProcess.d.ts.map +1 -0
- package/esm/extension-odt/src/postprocess/postProcess.js +10 -0
- package/esm/extension-odt/src/postprocess/removeUnusedBookmarks.d.ts +3 -0
- package/esm/extension-odt/src/postprocess/removeUnusedBookmarks.d.ts.map +1 -0
- package/esm/extension-odt/src/postprocess/removeUnusedBookmarks.js +27 -0
- package/package.json +4 -4
- package/esm/editor/src/debugDoc.d.ts +0 -3
- package/esm/editor/src/debugDoc.d.ts.map +0 -1
- package/esm/editor/src/debugDoc.js +0 -33
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixContinuedLists.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/postprocess/fixContinuedLists.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA6D5C,eAAO,MAAM,iBAAiB,EAAE,OAsD/B,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Fragment, Slice, } from 'prosemirror-model';
|
|
2
|
+
import { nodeToTreeString } from '../../../editor/src/mod.js';
|
|
3
|
+
const ANY_LIST = ['ordered_list', 'bullet_list'];
|
|
4
|
+
function getListEndingMaxDepth(list) {
|
|
5
|
+
if (!list) {
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
if (ANY_LIST.indexOf(list.type.name) === -1) {
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
if (list.lastChild?.type.name === 'list_item') {
|
|
12
|
+
return 1 + getListEndingMaxDepth(list.lastChild?.lastChild);
|
|
13
|
+
}
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
function convertToStitchingLevels(list, array = []) {
|
|
17
|
+
if (ANY_LIST.indexOf(list.type.name) === -1) {
|
|
18
|
+
throw new Error(`Incorrect list type: ${list.type.name}`);
|
|
19
|
+
}
|
|
20
|
+
if (!list?.firstChild) {
|
|
21
|
+
return array;
|
|
22
|
+
}
|
|
23
|
+
const firstChildParagraph = list.firstChild.firstChild;
|
|
24
|
+
if (firstChildParagraph?.content.size === 0) {
|
|
25
|
+
if (list?.firstChild.children.length < 2) {
|
|
26
|
+
array.push(new Slice(Fragment.from([]), 0, 0));
|
|
27
|
+
// array.push(list.slice(list.firstChild.nodeSize, list.firstChild.nodeSize)) // empty slice
|
|
28
|
+
return array;
|
|
29
|
+
}
|
|
30
|
+
const subList = list?.firstChild.child(1);
|
|
31
|
+
array.push(list.slice(list.firstChild.nodeSize, list.content.size));
|
|
32
|
+
if (ANY_LIST.indexOf(subList?.type.name) > -1) {
|
|
33
|
+
convertToStitchingLevels(subList, array);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
array.push(list.slice(0, list.content.size));
|
|
38
|
+
}
|
|
39
|
+
return array;
|
|
40
|
+
}
|
|
41
|
+
export const fixContinuedLists = (state, dispatch) => {
|
|
42
|
+
const doc = state.doc;
|
|
43
|
+
let tr = state.tr;
|
|
44
|
+
let previousList = null;
|
|
45
|
+
// console.debug(nodeToTreeString(doc));
|
|
46
|
+
doc.forEach((child, childPos) => {
|
|
47
|
+
if (child.type.name === 'ordered_list') {
|
|
48
|
+
const start = childPos;
|
|
49
|
+
const end = start + child.nodeSize;
|
|
50
|
+
if (previousList) {
|
|
51
|
+
console.log('xxxxx');
|
|
52
|
+
console.debug(nodeToTreeString(child));
|
|
53
|
+
const stitchingLevels = convertToStitchingLevels(child);
|
|
54
|
+
if (stitchingLevels.length <= previousList.stitchingDepth) {
|
|
55
|
+
const betweenStart = previousList.end;
|
|
56
|
+
const betweenNodes = doc.slice(betweenStart, start);
|
|
57
|
+
tr = tr.delete(tr.mapping.map(betweenStart), tr.mapping.map(end));
|
|
58
|
+
let posToInsert = tr.mapping.map(previousList.end);
|
|
59
|
+
for (const level of stitchingLevels) {
|
|
60
|
+
posToInsert -= 1; // Before /OL token
|
|
61
|
+
tr = tr.replace(posToInsert, posToInsert, level);
|
|
62
|
+
posToInsert -= 1; // Before /LI token
|
|
63
|
+
}
|
|
64
|
+
if (betweenNodes.size > 0) {
|
|
65
|
+
tr = tr.replace(posToInsert, posToInsert, betweenNodes);
|
|
66
|
+
}
|
|
67
|
+
previousList.stitchingDepth = getListEndingMaxDepth(child);
|
|
68
|
+
previousList.end = end;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
previousList = {
|
|
73
|
+
stitchingDepth: getListEndingMaxDepth(child),
|
|
74
|
+
start,
|
|
75
|
+
end,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (dispatch) {
|
|
80
|
+
dispatch(tr);
|
|
81
|
+
}
|
|
82
|
+
return tr.steps.length > 0;
|
|
83
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postProcess.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/postprocess/postProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAM5C,wBAAgB,6BAA6B,IAAI,KAAK,CAAC,OAAO,CAAC,CAM9D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { convertCodeParagraphsToCodeBlocks } from './convertCodeParagraphsToCodeBlocks.js';
|
|
2
|
+
import { removeUnusedBookmarks } from './removeUnusedBookmarks.js';
|
|
3
|
+
import { fixContinuedLists } from './fixContinuedLists.js';
|
|
4
|
+
export function getDefaultsPostProcessFilters() {
|
|
5
|
+
return [
|
|
6
|
+
convertCodeParagraphsToCodeBlocks,
|
|
7
|
+
removeUnusedBookmarks,
|
|
8
|
+
fixContinuedLists
|
|
9
|
+
];
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeUnusedBookmarks.d.ts","sourceRoot":"","sources":["../../../../src/extension-odt/src/postprocess/removeUnusedBookmarks.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,eAAO,MAAM,qBAAqB,EAAE,OAgCnC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const removeUnusedBookmarks = (state, dispatch) => {
|
|
2
|
+
return false;
|
|
3
|
+
function condition(mark) {
|
|
4
|
+
console.log('rrrr', mark.type.name);
|
|
5
|
+
return mark.type.name === "bookmark";
|
|
6
|
+
}
|
|
7
|
+
if (node.marks) {
|
|
8
|
+
// For text nodes, filter out the marks that match the condition
|
|
9
|
+
const newMarks = node.marks.filter(mark => !condition(mark));
|
|
10
|
+
// If marks were removed, return a new text node with the remaining marks
|
|
11
|
+
if (newMarks.length !== node.marks.length) {
|
|
12
|
+
return node.mark(newMarks);
|
|
13
|
+
}
|
|
14
|
+
// Otherwise, return the original text node
|
|
15
|
+
return node;
|
|
16
|
+
}
|
|
17
|
+
// if (Array.isArray(node.content)) {
|
|
18
|
+
// const content: Node[] = node.content.content.map(childNode => removeUnusedBookmarks(childNode));
|
|
19
|
+
// return node.copy(content);
|
|
20
|
+
// } else {
|
|
21
|
+
// console.log('node.content', node.content);
|
|
22
|
+
// }
|
|
23
|
+
if (dispatch) {
|
|
24
|
+
dispatch(tr);
|
|
25
|
+
}
|
|
26
|
+
return tr.steps.length > 0;
|
|
27
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kerebron/extension-odt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"module": "./esm/extension-odt/src/ExtensionOdt.js",
|
|
6
6
|
"exports": {
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"scripts": {},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"prosemirror-keymap": "1.2.2",
|
|
14
|
-
"prosemirror-model": "1.
|
|
14
|
+
"prosemirror-model": "1.25.1",
|
|
15
15
|
"prosemirror-state": "1.4.3",
|
|
16
|
-
"prosemirror-transform": "1.10.
|
|
17
|
-
"prosemirror-view": "1.
|
|
16
|
+
"prosemirror-transform": "1.10.4",
|
|
17
|
+
"prosemirror-view": "1.40.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "^20.9.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debugDoc.d.ts","sourceRoot":"","sources":["../../../src/editor/src/debugDoc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAYvC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,SAAI,EAAE,UAAU,SAAI,QAgC7D"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
function trimText(str, maxLen = 20) {
|
|
2
|
-
str = str.replaceAll('\n', '\\n');
|
|
3
|
-
if (str.length <= maxLen) {
|
|
4
|
-
return str;
|
|
5
|
-
}
|
|
6
|
-
return str.slice(0, maxLen) + '...';
|
|
7
|
-
}
|
|
8
|
-
export function debugDoc(node, level = 0, currentPos = 0) {
|
|
9
|
-
let delim = '';
|
|
10
|
-
for (let i = 0; i < level; i++) {
|
|
11
|
-
delim += ' ';
|
|
12
|
-
}
|
|
13
|
-
// https://prosemirror.net/docs/guide/#doc.indexing
|
|
14
|
-
let line = '';
|
|
15
|
-
line += ` - [${node.type.name}] `;
|
|
16
|
-
line += `pos: ${currentPos}, `;
|
|
17
|
-
line += `nodeSize: ${node.nodeSize}, `; // isLeaf ? 1 : 2 + this.content.size
|
|
18
|
-
line += `fragment.size: ${node.content.size}, `;
|
|
19
|
-
console.log(delim + line);
|
|
20
|
-
let marksLine = '';
|
|
21
|
-
for (const mark of node.marks) {
|
|
22
|
-
marksLine += `(${mark.type.name}), `;
|
|
23
|
-
}
|
|
24
|
-
if (marksLine) {
|
|
25
|
-
console.log(delim + ' ' + marksLine);
|
|
26
|
-
}
|
|
27
|
-
if (node.text) {
|
|
28
|
-
console.log(delim + ' "' + trimText(node.text) + '"');
|
|
29
|
-
}
|
|
30
|
-
node.forEach((child, offset) => {
|
|
31
|
-
debugDoc(child, level + 1, currentPos + offset); // + (node.isLeaf ? 1 : 2)
|
|
32
|
-
});
|
|
33
|
-
}
|