@manuscripts/body-editor 3.7.13 → 3.7.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/outline/DraggableTree.js +1 -1
- package/dist/cjs/lib/utils.js +2 -1
- package/dist/cjs/plugins/accessibility_element.js +1 -1
- package/dist/cjs/plugins/alt-titles.js +1 -1
- package/dist/cjs/plugins/section-category/section-category-utils.js +1 -0
- package/dist/cjs/useEditor.js +22 -16
- package/dist/cjs/versions.js +1 -1
- package/dist/cjs/views/accessibility_element.js +1 -1
- package/dist/cjs/views/alt_titles_section.js +1 -0
- package/dist/cjs/views/figure_editable.js +1 -0
- package/dist/es/components/outline/DraggableTree.js +1 -1
- package/dist/es/lib/utils.js +2 -1
- package/dist/es/plugins/accessibility_element.js +1 -1
- package/dist/es/plugins/alt-titles.js +1 -1
- package/dist/es/plugins/section-category/section-category-utils.js +1 -0
- package/dist/es/useEditor.js +22 -16
- package/dist/es/versions.js +1 -1
- package/dist/es/views/accessibility_element.js +1 -1
- package/dist/es/views/alt_titles_section.js +1 -0
- package/dist/es/views/figure_editable.js +1 -0
- package/dist/types/classes/collabProvider.d.ts +1 -0
- package/dist/types/lib/utils.d.ts +1 -1
- package/dist/types/versions.d.ts +1 -1
- package/package.json +1 -1
|
@@ -222,7 +222,7 @@ const DraggableTree = ({ tree, view, depth, can, }) => {
|
|
|
222
222
|
const heroImageClass = isHeroImage ? 'hero-image' : '';
|
|
223
223
|
return (react_1.default.createElement(Outline_1.Outline, { ref: ref, className: `${dragClass} ${dropClass} ${deletedClass} ${heroImageClass}` },
|
|
224
224
|
!isTop && node.type.name != 'manuscript' && (react_1.default.createElement(Outline_1.OutlineItem, { depth: isHeroImage ? 1 : depth, onContextMenu: handleContextMenu },
|
|
225
|
-
items.length ? (react_1.default.createElement(Outline_1.OutlineItemArrow, { onClick: toggleOpen }, isOpen ? react_1.default.createElement(style_guide_1.TriangleExpandedIcon, null) : react_1.default.createElement(style_guide_1.TriangleCollapsedIcon, null))) : (react_1.default.createElement(Outline_1.OutlineItemNoArrow, null)),
|
|
225
|
+
items.length ? (react_1.default.createElement(Outline_1.OutlineItemArrow, { "aria-label": `${isOpen ? 'Collapse' : 'Expand'} ${node.type.name}`, onClick: toggleOpen }, isOpen ? react_1.default.createElement(style_guide_1.TriangleExpandedIcon, null) : react_1.default.createElement(style_guide_1.TriangleCollapsedIcon, null))) : (react_1.default.createElement(Outline_1.OutlineItemNoArrow, null)),
|
|
226
226
|
react_1.default.createElement(Outline_1.OutlineItemLink, { to: `#${node.attrs.id}` },
|
|
227
227
|
react_1.default.createElement(Outline_1.OutlineItemIcon, null, (0, node_type_icons_1.nodeTypeIcon)(node.type)),
|
|
228
228
|
react_1.default.createElement(Outline_1.OutlineItemLinkText, { className: `outline-text-${node.type.name}` }, itemText(node))))),
|
package/dist/cjs/lib/utils.js
CHANGED
|
@@ -153,9 +153,10 @@ const isEditAllowed = (state) => {
|
|
|
153
153
|
return !((0, exports.isBodyLocked)(state) && (0, exports.isSelectionInBody)(state));
|
|
154
154
|
};
|
|
155
155
|
exports.isEditAllowed = isEditAllowed;
|
|
156
|
-
const createToggleButton = (listener) => {
|
|
156
|
+
const createToggleButton = (listener, what) => {
|
|
157
157
|
const altTitlesButton = document.createElement('button');
|
|
158
158
|
altTitlesButton.classList.add('toggle-button-open', 'button-reset');
|
|
159
|
+
altTitlesButton.setAttribute('aria-label', `Expand ${what}`);
|
|
159
160
|
altTitlesButton.innerHTML = icons_1.arrowDown;
|
|
160
161
|
altTitlesButton.addEventListener('click', (e) => {
|
|
161
162
|
e.preventDefault();
|
|
@@ -27,7 +27,7 @@ const buildExpandButtonDecorations = (doc) => {
|
|
|
27
27
|
const container = document.createElement('div');
|
|
28
28
|
container.className =
|
|
29
29
|
'accessibility_element_expander_button_container';
|
|
30
|
-
container.appendChild((0, utils_1.createToggleButton)(() => handleExpandButtonClick(view, node)));
|
|
30
|
+
container.appendChild((0, utils_1.createToggleButton)(() => handleExpandButtonClick(view, node), 'additional info'));
|
|
31
31
|
return container;
|
|
32
32
|
}, {
|
|
33
33
|
key: node.attrs.id,
|
|
@@ -42,6 +42,7 @@ function createButton(view, pos, currentCategory, categories, usedCategoryIDs, c
|
|
|
42
42
|
const button = document.createElement('button');
|
|
43
43
|
button.innerHTML = icons_1.sectionCategoryIcon;
|
|
44
44
|
button.classList.add('section-category-button');
|
|
45
|
+
button.setAttribute('aria-label', 'Section categories menu');
|
|
45
46
|
if (currentCategory) {
|
|
46
47
|
button.classList.add('assigned');
|
|
47
48
|
}
|
package/dist/cjs/useEditor.js
CHANGED
|
@@ -38,23 +38,29 @@ const useEditor = (externalProps) => {
|
|
|
38
38
|
view.current.updateState(newState);
|
|
39
39
|
}
|
|
40
40
|
}, [props.doc, props.isComparingMode]);
|
|
41
|
-
|
|
42
|
-
collabProvider.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
if (collabProvider && !props.isComparingMode) {
|
|
43
|
+
collabProvider.onNewSteps(async () => {
|
|
44
|
+
if (state && view.current) {
|
|
45
|
+
let localVersion = (0, prosemirror_collab_1.getVersion)(view.current.state);
|
|
46
|
+
const since = await collabProvider.stepsSince((0, prosemirror_collab_1.getVersion)(view.current.state));
|
|
47
|
+
localVersion = (0, prosemirror_collab_1.getVersion)(view.current.state);
|
|
48
|
+
if (since && since.version <= localVersion) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (since?.steps.length && since.clientIDs.length) {
|
|
52
|
+
view.current.dispatch((0, prosemirror_collab_1.receiveTransaction)(view.current.state, since?.steps, since.clientIDs));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.warn('Inconsistent new steps event from the authority.');
|
|
56
|
+
}
|
|
54
57
|
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return () => {
|
|
61
|
+
collabProvider?.unsubscribe();
|
|
62
|
+
};
|
|
63
|
+
}, [collabProvider, props.isComparingMode, !!view.current]);
|
|
58
64
|
const debounce = (0, use_do_with_debounce_1.useDoWithDebounce)();
|
|
59
65
|
const dispatch = (0, react_1.useCallback)((tr) => {
|
|
60
66
|
if (!view.current) {
|
package/dist/cjs/versions.js
CHANGED
|
@@ -16,7 +16,7 @@ class AccessibilityElementView extends block_view_1.default {
|
|
|
16
16
|
createDOM() {
|
|
17
17
|
this.dom = document.createElement('div');
|
|
18
18
|
this.dom.classList.add('accessibility_element');
|
|
19
|
-
const label = document.createElement('
|
|
19
|
+
const label = document.createElement('div');
|
|
20
20
|
label.contentEditable = 'false';
|
|
21
21
|
label.className = 'accessibility_element_label';
|
|
22
22
|
label.innerText =
|
|
@@ -45,6 +45,7 @@ class AltTitleSectionView extends block_view_1.default {
|
|
|
45
45
|
closingPanel.classList.add('alt-titles-closing-panel');
|
|
46
46
|
const button = document.createElement('button');
|
|
47
47
|
button.classList.add('alt-titles-closing-button', 'button-reset');
|
|
48
|
+
button.setAttribute('aria-label', 'Collapse alternative titles');
|
|
48
49
|
button.innerHTML = icons_1.arrowDown;
|
|
49
50
|
button.addEventListener('click', () => {
|
|
50
51
|
const tr = this.view.state.tr.setMeta(alt_titles_1.altTitlesKey, {
|
|
@@ -185,7 +185,7 @@ export const DraggableTree = ({ tree, view, depth, can, }) => {
|
|
|
185
185
|
const heroImageClass = isHeroImage ? 'hero-image' : '';
|
|
186
186
|
return (React.createElement(Outline, { ref: ref, className: `${dragClass} ${dropClass} ${deletedClass} ${heroImageClass}` },
|
|
187
187
|
!isTop && node.type.name != 'manuscript' && (React.createElement(OutlineItem, { depth: isHeroImage ? 1 : depth, onContextMenu: handleContextMenu },
|
|
188
|
-
items.length ? (React.createElement(OutlineItemArrow, { onClick: toggleOpen }, isOpen ? React.createElement(TriangleExpandedIcon, null) : React.createElement(TriangleCollapsedIcon, null))) : (React.createElement(OutlineItemNoArrow, null)),
|
|
188
|
+
items.length ? (React.createElement(OutlineItemArrow, { "aria-label": `${isOpen ? 'Collapse' : 'Expand'} ${node.type.name}`, onClick: toggleOpen }, isOpen ? React.createElement(TriangleExpandedIcon, null) : React.createElement(TriangleCollapsedIcon, null))) : (React.createElement(OutlineItemNoArrow, null)),
|
|
189
189
|
React.createElement(OutlineItemLink, { to: `#${node.attrs.id}` },
|
|
190
190
|
React.createElement(OutlineItemIcon, null, nodeTypeIcon(node.type)),
|
|
191
191
|
React.createElement(OutlineItemLinkText, { className: `outline-text-${node.type.name}` }, itemText(node))))),
|
package/dist/es/lib/utils.js
CHANGED
|
@@ -135,9 +135,10 @@ export const isBodyLocked = (state) => {
|
|
|
135
135
|
export const isEditAllowed = (state) => {
|
|
136
136
|
return !(isBodyLocked(state) && isSelectionInBody(state));
|
|
137
137
|
};
|
|
138
|
-
export const createToggleButton = (listener) => {
|
|
138
|
+
export const createToggleButton = (listener, what) => {
|
|
139
139
|
const altTitlesButton = document.createElement('button');
|
|
140
140
|
altTitlesButton.classList.add('toggle-button-open', 'button-reset');
|
|
141
|
+
altTitlesButton.setAttribute('aria-label', `Expand ${what}`);
|
|
141
142
|
altTitlesButton.innerHTML = arrowDown;
|
|
142
143
|
altTitlesButton.addEventListener('click', (e) => {
|
|
143
144
|
e.preventDefault();
|
|
@@ -24,7 +24,7 @@ const buildExpandButtonDecorations = (doc) => {
|
|
|
24
24
|
const container = document.createElement('div');
|
|
25
25
|
container.className =
|
|
26
26
|
'accessibility_element_expander_button_container';
|
|
27
|
-
container.appendChild(createToggleButton(() => handleExpandButtonClick(view, node)));
|
|
27
|
+
container.appendChild(createToggleButton(() => handleExpandButtonClick(view, node), 'additional info'));
|
|
28
28
|
return container;
|
|
29
29
|
}, {
|
|
30
30
|
key: node.attrs.id,
|
|
@@ -39,6 +39,7 @@ function createButton(view, pos, currentCategory, categories, usedCategoryIDs, c
|
|
|
39
39
|
const button = document.createElement('button');
|
|
40
40
|
button.innerHTML = sectionCategoryIcon;
|
|
41
41
|
button.classList.add('section-category-button');
|
|
42
|
+
button.setAttribute('aria-label', 'Section categories menu');
|
|
42
43
|
if (currentCategory) {
|
|
43
44
|
button.classList.add('assigned');
|
|
44
45
|
}
|
package/dist/es/useEditor.js
CHANGED
|
@@ -35,23 +35,29 @@ export const useEditor = (externalProps) => {
|
|
|
35
35
|
view.current.updateState(newState);
|
|
36
36
|
}
|
|
37
37
|
}, [props.doc, props.isComparingMode]);
|
|
38
|
-
|
|
39
|
-
collabProvider.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (collabProvider && !props.isComparingMode) {
|
|
40
|
+
collabProvider.onNewSteps(async () => {
|
|
41
|
+
if (state && view.current) {
|
|
42
|
+
let localVersion = getVersion(view.current.state);
|
|
43
|
+
const since = await collabProvider.stepsSince(getVersion(view.current.state));
|
|
44
|
+
localVersion = getVersion(view.current.state);
|
|
45
|
+
if (since && since.version <= localVersion) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (since?.steps.length && since.clientIDs.length) {
|
|
49
|
+
view.current.dispatch(receiveTransaction(view.current.state, since?.steps, since.clientIDs));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.warn('Inconsistent new steps event from the authority.');
|
|
53
|
+
}
|
|
51
54
|
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return () => {
|
|
58
|
+
collabProvider?.unsubscribe();
|
|
59
|
+
};
|
|
60
|
+
}, [collabProvider, props.isComparingMode, !!view.current]);
|
|
55
61
|
const debounce = useDoWithDebounce();
|
|
56
62
|
const dispatch = useCallback((tr) => {
|
|
57
63
|
if (!view.current) {
|
package/dist/es/versions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '3.7.
|
|
1
|
+
export const VERSION = '3.7.15';
|
|
2
2
|
export const MATHJAX_VERSION = '3.2.2';
|
|
@@ -10,7 +10,7 @@ export class AccessibilityElementView extends BlockView {
|
|
|
10
10
|
createDOM() {
|
|
11
11
|
this.dom = document.createElement('div');
|
|
12
12
|
this.dom.classList.add('accessibility_element');
|
|
13
|
-
const label = document.createElement('
|
|
13
|
+
const label = document.createElement('div');
|
|
14
14
|
label.contentEditable = 'false';
|
|
15
15
|
label.className = 'accessibility_element_label';
|
|
16
16
|
label.innerText =
|
|
@@ -39,6 +39,7 @@ export class AltTitleSectionView extends BlockView {
|
|
|
39
39
|
closingPanel.classList.add('alt-titles-closing-panel');
|
|
40
40
|
const button = document.createElement('button');
|
|
41
41
|
button.classList.add('alt-titles-closing-button', 'button-reset');
|
|
42
|
+
button.setAttribute('aria-label', 'Collapse alternative titles');
|
|
42
43
|
button.innerHTML = arrowDown;
|
|
43
44
|
button.addEventListener('click', () => {
|
|
44
45
|
const tr = this.view.state.tr.setMeta(altTitlesKey, {
|
|
@@ -18,6 +18,7 @@ export declare abstract class CollabProvider {
|
|
|
18
18
|
currentVersion: number;
|
|
19
19
|
protected newStepsListener: () => void;
|
|
20
20
|
abstract sendSteps(version: number, steps: readonly Step[], clientID: string | number, flush?: boolean): Promise<void>;
|
|
21
|
+
abstract unsubscribe(): void;
|
|
21
22
|
abstract onNewSteps(listener: CollabProvider['newStepsListener']): void;
|
|
22
23
|
abstract stepsSince(version: number): Promise<{
|
|
23
24
|
steps: Step[];
|
|
@@ -34,7 +34,7 @@ export declare const shouldRenderField: (field: string, type: BibliographyItemTy
|
|
|
34
34
|
export declare const cleanItemValues: (item: BibliographyItemAttrs) => BibliographyItemAttrs;
|
|
35
35
|
export declare const isBodyLocked: (state: EditorState) => boolean;
|
|
36
36
|
export declare const isEditAllowed: (state: EditorState) => boolean;
|
|
37
|
-
export declare const createToggleButton: (listener: () => void) => HTMLButtonElement;
|
|
37
|
+
export declare const createToggleButton: (listener: () => void, what: string) => HTMLButtonElement;
|
|
38
38
|
export declare const getInsertPos: (type: ManuscriptNodeType, parent: ManuscriptNode, pos: number) => number;
|
|
39
39
|
export declare const findInsertionPosition: (type: ManuscriptNodeType, doc: ManuscriptNode) => number;
|
|
40
40
|
export declare const filterBlockNodes: (fragment: Fragment, predicate: (node: ProseMirrorNode) => boolean) => Fragment;
|
package/dist/types/versions.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "3.7.
|
|
1
|
+
export declare const VERSION = "3.7.15";
|
|
2
2
|
export declare const MATHJAX_VERSION = "3.2.2";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manuscripts/body-editor",
|
|
3
3
|
"description": "Prosemirror components for editing and viewing manuscripts",
|
|
4
|
-
"version": "3.7.
|
|
4
|
+
"version": "3.7.15",
|
|
5
5
|
"repository": "github:Atypon-OpenSource/manuscripts-body-editor",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"main": "dist/cjs",
|