@manuscripts/body-editor 3.12.67 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/toolbar/type-selector/styles.js +2 -1
- package/dist/cjs/versions.js +1 -1
- package/dist/es/components/toolbar/type-selector/styles.js +2 -1
- package/dist/es/versions.js +1 -1
- package/dist/types/components/toolbar/type-selector/styles.d.ts +2 -2
- package/dist/types/lib/footnotes.d.ts +4 -2
- package/dist/types/lib/utils.d.ts +5 -4
- package/dist/types/versions.d.ts +1 -1
- package/package.json +37 -36
- package/{dist/es/lib/statistics.js → src/__mocks__/styleMock.ts} +2 -14
- package/src/assets.ts +20 -0
- package/src/classes/collabProvider.ts +38 -0
- package/src/clipboard.ts +54 -0
- package/src/commands.ts +2109 -0
- package/src/components/ChangeHandlingForm.tsx +54 -0
- package/src/components/LanguageDropdown/index.tsx +343 -0
- package/src/components/affiliations/AffiliationForm.tsx +238 -0
- package/src/components/affiliations/AffiliationItem.tsx +151 -0
- package/src/components/affiliations/AffiliationList.tsx +71 -0
- package/src/components/affiliations/AffiliationsModal.tsx +676 -0
- package/src/components/affiliations/AffiliationsPanel.tsx +76 -0
- package/src/components/affiliations/CreateAffiliationModal.tsx +135 -0
- package/src/components/authors/AuthorDetailsForm.tsx +438 -0
- package/src/components/authors/AuthorList.tsx +81 -0
- package/src/components/authors/AuthorsModal.tsx +642 -0
- package/src/components/authors/AuthorsPanel.tsx +69 -0
- package/src/components/authors/CreateAuthorModal.tsx +172 -0
- package/src/components/authors/CreditDrawer.tsx +71 -0
- package/src/components/authors/DraggableAuthor.tsx +228 -0
- package/src/components/authors/useManageAffiliations.tsx +77 -0
- package/src/components/authors/useManageCredit.tsx +63 -0
- package/src/components/authors-affiliations/AuthorsAndAffiliationsModals.tsx +170 -0
- package/src/components/authors-affiliations/GenericPanel.tsx +164 -0
- package/src/components/authors-affiliations/ModalTabs.tsx +100 -0
- package/src/components/awards/AwardForm.tsx +338 -0
- package/src/components/awards/AwardModal.tsx +120 -0
- package/src/components/awards/DeleteAwardDiaolog.tsx +52 -0
- package/src/components/dialog/ConfirmationDialog.tsx +131 -0
- package/src/components/form/CreateModalStyles.tsx +37 -0
- package/src/components/form/FormFooter.tsx +54 -0
- package/src/components/form/FormPlaceholder.tsx +71 -0
- package/src/components/form/ModalFormActions.tsx +88 -0
- package/src/components/form/UnsavedLabel.tsx +49 -0
- package/src/components/hooks/use-debounce.ts +56 -0
- package/src/components/hooks/useAffiliationShowsErrorIndicator.ts +51 -0
- package/src/components/hooks/useAuthorShowsErrorIndicator.ts +73 -0
- package/src/components/keyboard-shortcuts-modal/FormattedShortcut.tsx +56 -0
- package/src/components/keyboard-shortcuts-modal/KeyboardShortcutsModal.tsx +283 -0
- package/src/components/keyboard-shortcuts-modal/keyboard-shortcuts.ts +304 -0
- package/src/components/keywords/AddKeywordInline.tsx +284 -0
- package/src/components/keywords/DeleteKeywordDialog.tsx +52 -0
- package/src/components/modal-drawer/GenericDrawer.tsx +65 -0
- package/src/components/modal-drawer/GenericDrawerGroup.tsx +125 -0
- package/src/components/outline/DraggableTree.tsx +438 -0
- package/src/components/outline/ManuscriptOutline.tsx +127 -0
- package/src/components/outline/Outline.tsx +141 -0
- package/src/components/references/BibliographyItemSource.ts +80 -0
- package/src/components/references/CitationEditor.tsx +301 -0
- package/src/components/references/CitationViewer.tsx +62 -0
- package/src/components/references/ImportBibliographyForm.tsx +232 -0
- package/src/components/references/ImportBibliographyModal.tsx +159 -0
- package/src/components/references/ReferenceForm/PersonDropDown.tsx +93 -0
- package/src/components/references/ReferenceForm/ReferenceForm.tsx +701 -0
- package/src/components/references/ReferenceForm/config.ts +133 -0
- package/src/components/references/ReferenceForm/styled-components.ts +156 -0
- package/src/components/references/ReferenceLine.tsx +43 -0
- package/src/components/references/ReferenceSearch.tsx +163 -0
- package/src/components/references/ReferenceSearchResults.tsx +113 -0
- package/src/components/references/ReferenceSearchResultsPlaceholder.tsx +71 -0
- package/src/components/references/ReferenceSearchSection.tsx +124 -0
- package/src/components/references/ReferencesEditor.tsx +61 -0
- package/src/components/references/ReferencesModal.tsx +352 -0
- package/src/components/references/SearchInput.tsx +98 -0
- package/src/components/toolbar/InsertEmbedDialog.tsx +222 -0
- package/src/components/toolbar/InsertTableDialog.tsx +208 -0
- package/src/components/toolbar/ListMenuItem.tsx +203 -0
- package/src/components/toolbar/helpers.ts +547 -0
- package/src/components/toolbar/type-selector/OptionComponent.tsx +89 -0
- package/src/components/toolbar/type-selector/TypeSelector.tsx +157 -0
- package/src/components/toolbar/type-selector/styles.ts +79 -0
- package/src/components/views/CrossReferenceItems.tsx +199 -0
- package/src/components/views/DeleteEmbedDialog.tsx +83 -0
- package/src/components/views/DeleteFootnoteDialog.tsx +54 -0
- package/src/components/views/FigureDropdown.tsx +423 -0
- package/src/components/views/FootnotesSelector.tsx +255 -0
- package/src/components/views/InsertSpecialCharacter.tsx +245 -0
- package/src/components/views/LinkForm.tsx +220 -0
- package/src/components/views/TableCellContextMenu.tsx +241 -0
- package/src/configs/ManuscriptsEditor.ts +140 -0
- package/src/configs/editor-plugins.ts +119 -0
- package/src/configs/editor-views.ts +139 -0
- package/src/icons.ts +62 -0
- package/src/index.ts +65 -0
- package/src/keys/highlight.ts +65 -0
- package/src/keys/index.ts +33 -0
- package/src/keys/keyword.ts +69 -0
- package/src/keys/list.ts +156 -0
- package/src/keys/misc.ts +112 -0
- package/src/keys/title.ts +221 -0
- package/src/lib/__tests__/__fixtures__/doc.json +388 -0
- package/src/lib/__tests__/__snapshots__/paste.test.ts.snap +24 -0
- package/src/lib/__tests__/authors.test.ts +202 -0
- package/src/lib/__tests__/helpers.test.ts +46 -0
- package/src/lib/__tests__/paste.test.ts +57 -0
- package/src/lib/__tests__/plugins.test.ts +176 -0
- package/src/lib/__tests__/url.test.ts +31 -0
- package/src/lib/array-reducer.ts +68 -0
- package/src/lib/authors-and-affiliations.ts +81 -0
- package/src/lib/authors.ts +67 -0
- package/src/lib/capabilities.ts +55 -0
- package/src/lib/codemirror.ts +37 -0
- package/src/lib/comments.ts +123 -0
- package/src/lib/context-menu.ts +745 -0
- package/src/lib/copy.ts +30 -0
- package/src/lib/crossref.ts +90 -0
- package/src/lib/dnd.ts +29 -0
- package/src/lib/doc.ts +167 -0
- package/src/lib/dompurify.ts +28 -0
- package/src/lib/files.ts +180 -0
- package/src/lib/footnotes.ts +83 -0
- package/src/lib/get-media-type.ts +105 -0
- package/src/lib/helpers.ts +199 -0
- package/src/lib/hierarchy.ts +117 -0
- package/src/lib/languages.ts +37 -0
- package/src/lib/lists.ts +56 -0
- package/src/lib/math.ts +111 -0
- package/src/lib/media.ts +334 -0
- package/src/lib/navigation-utils.ts +235 -0
- package/src/lib/normalize.ts +70 -0
- package/src/lib/paste.ts +304 -0
- package/src/lib/placeholder.ts +32 -0
- package/src/lib/platform.ts +18 -0
- package/src/lib/plugins.ts +22 -0
- package/src/lib/popper.ts +180 -0
- package/src/lib/position-menu.ts +184 -0
- package/src/lib/references.ts +94 -0
- package/src/lib/template.ts +29 -0
- package/src/lib/track-changes-utils.ts +34 -0
- package/{dist/types/lib/statistics.d.ts → src/lib/url.ts} +11 -8
- package/src/lib/use-do-with-debounce.ts +39 -0
- package/src/lib/utils.ts +323 -0
- package/src/lib/view.ts +100 -0
- package/src/menus.tsx +684 -0
- package/src/node-type-icons.tsx +83 -0
- package/src/plugins/__tests__/__fixtures__/deleted-footnote.json +140 -0
- package/src/plugins/__tests__/__fixtures__/inserted-footnote.json +153 -0
- package/src/plugins/__tests__/footnotes.test.ts +67 -0
- package/src/plugins/accessibility_element.ts +219 -0
- package/src/plugins/add-subtitle.ts +102 -0
- package/src/plugins/affiliations.ts +136 -0
- package/src/plugins/alt-titles.ts +219 -0
- package/src/plugins/bibliography.ts +235 -0
- package/src/plugins/comments.ts +328 -0
- package/src/plugins/cross-references.ts +70 -0
- package/src/plugins/detect-inconsistency/detect-inconsistency-utils.ts +102 -0
- package/src/plugins/detect-inconsistency/index.ts +55 -0
- package/src/plugins/detect-inconsistency/validators.ts +283 -0
- package/src/plugins/doi.ts +66 -0
- package/src/plugins/editor-props.ts +39 -0
- package/src/plugins/elements.ts +60 -0
- package/src/plugins/footnotes.ts +298 -0
- package/src/plugins/link.ts +53 -0
- package/src/plugins/lock-body.ts +136 -0
- package/src/plugins/move-node.ts +55 -0
- package/src/plugins/objects.ts +125 -0
- package/src/plugins/paragraphs.ts +90 -0
- package/src/plugins/persist.ts +64 -0
- package/src/plugins/persistent-cursor.ts +66 -0
- package/src/plugins/placeholder.ts +219 -0
- package/src/plugins/prevent-empty.ts +50 -0
- package/src/plugins/search-replace/index.ts +157 -0
- package/src/plugins/search-replace/lib.ts +95 -0
- package/src/plugins/section_category.ts +212 -0
- package/src/plugins/section_title/autocompletion.ts +87 -0
- package/src/plugins/section_title/index.ts +105 -0
- package/src/plugins/selected-suggestion.ts +243 -0
- package/src/plugins/tables-cursor-fix.ts +143 -0
- package/src/plugins/translations.ts +263 -0
- package/src/rules.ts +60 -0
- package/src/selection.ts +112 -0
- package/src/testing/default-capabilities.ts +48 -0
- package/src/testing/default-editor-data.ts +73 -0
- package/src/testing/empty-editor-doc.json +62 -0
- package/src/testing/polyfill-dom.ts +43 -0
- package/src/testing/section-categories.json +161 -0
- package/src/testing/setup-editor.ts +55 -0
- package/src/tests.ts +42 -0
- package/src/toolbar.tsx +259 -0
- package/src/types/@citation-js/core.d.ts +16 -0
- package/src/types/@citation-js/index.d.ts +16 -0
- package/src/types/@citation-js/plugin-bibtex.d.ts +16 -0
- package/src/types/@citation-js/plugin-csl.d.ts +16 -0
- package/src/types/@citation-js/plugin-doi.d.ts +16 -0
- package/src/types/@citation-js/plugin-enw.d.ts +16 -0
- package/src/types/@citation-js/plugin-pubmed.d.ts +16 -0
- package/src/types/@citation-js/plugin-ris.d.ts +16 -0
- package/src/types/citeproc.d.ts +124 -0
- package/src/types/css.d.ts +16 -0
- package/src/types/json.d.ts +17 -0
- package/src/types/prosemirror-dev-tools.d.ts +16 -0
- package/src/types/prosemirror-dropcursor.d.ts +16 -0
- package/src/types/styled-components.d.ts +23 -0
- package/src/types.ts +49 -0
- package/src/useEditor.ts +244 -0
- package/src/versions.ts +3 -0
- package/src/views/ReactSubView.tsx +145 -0
- package/src/views/abstracts.ts +46 -0
- package/src/views/accessibility_element.ts +86 -0
- package/src/views/affiliations.ts +254 -0
- package/src/views/alt_title.ts +85 -0
- package/src/views/alt_titles_section.ts +97 -0
- package/src/views/attachment.ts +160 -0
- package/src/views/attachments.ts +72 -0
- package/src/views/author_notes.ts +96 -0
- package/src/views/award.ts +194 -0
- package/src/views/awards.ts +59 -0
- package/src/views/base_node_view.ts +85 -0
- package/src/views/bibliography_element.ts +313 -0
- package/src/views/block_view.ts +100 -0
- package/src/views/blockquote_element.ts +26 -0
- package/src/views/blockquote_element_editable.ts +24 -0
- package/src/views/box_element.ts +33 -0
- package/src/views/caption.ts +37 -0
- package/src/views/caption_title.ts +33 -0
- package/src/views/citation.ts +67 -0
- package/src/views/citation_editable.ts +312 -0
- package/src/views/contributors.ts +341 -0
- package/src/views/creators.ts +82 -0
- package/src/views/cross_reference.ts +74 -0
- package/src/views/cross_reference_editable.ts +113 -0
- package/src/views/editable_block.ts +141 -0
- package/src/views/embed.ts +345 -0
- package/src/views/empty.ts +26 -0
- package/src/views/equation.ts +47 -0
- package/src/views/equation_editable.ts +84 -0
- package/src/views/equation_element.ts +29 -0
- package/src/views/equation_element_editable.ts +21 -0
- package/src/views/figure.ts +84 -0
- package/src/views/figure_editable.ts +361 -0
- package/src/views/figure_element.ts +197 -0
- package/src/views/figure_element_editable.ts +21 -0
- package/src/views/footnote.ts +236 -0
- package/src/views/footnotes_element.ts +54 -0
- package/src/views/general_table_footnote.ts +140 -0
- package/src/views/hero_image.ts +76 -0
- package/src/views/hero_image_editable.ts +21 -0
- package/src/views/image_element.ts +373 -0
- package/src/views/image_element_editable.ts +21 -0
- package/src/views/inline_equation.ts +47 -0
- package/src/views/inline_equation_editable.ts +70 -0
- package/src/views/inline_footnote.ts +264 -0
- package/src/views/inline_footnote_editable.ts +20 -0
- package/src/views/keyword.ts +127 -0
- package/src/views/keyword_group.ts +109 -0
- package/src/views/link.ts +27 -0
- package/src/views/link_editable.ts +169 -0
- package/src/views/list.ts +46 -0
- package/src/views/list_item.ts +26 -0
- package/src/views/paragraph.ts +26 -0
- package/src/views/paragraph_editable.ts +21 -0
- package/src/views/placeholder.ts +35 -0
- package/src/views/placeholder_element.ts +38 -0
- package/src/views/placeholder_element_editable.ts +21 -0
- package/src/views/pullquote_element.ts +106 -0
- package/src/views/pullquote_element_editable.ts +24 -0
- package/src/views/quote_image_editable.ts +84 -0
- package/src/views/section.ts +64 -0
- package/src/views/section_label.ts +20 -0
- package/src/views/section_title.ts +87 -0
- package/src/views/section_title_editable.ts +21 -0
- package/src/views/subtitle.ts +42 -0
- package/src/views/subtitle_editable.ts +20 -0
- package/src/views/subtitles.ts +34 -0
- package/src/views/subtitles_editable.ts +21 -0
- package/src/views/supplement.ts +236 -0
- package/src/views/supplement_editable.ts +20 -0
- package/src/views/supplements.ts +65 -0
- package/src/views/supplements_editable.ts +21 -0
- package/src/views/table_cell.ts +150 -0
- package/src/views/table_element.ts +33 -0
- package/src/views/table_element_editable.ts +21 -0
- package/src/views/table_element_footer.ts +41 -0
- package/src/views/title.ts +46 -0
- package/src/views/title_editable.ts +20 -0
- package/src/views/trans_graphical_abstract.ts +55 -0
- package/src/views/trans_graphical_abstract_editable.ts +21 -0
- package/src/views/translated_abstract.ts +53 -0
- package/src/views/translated_abstract_editable.ts +21 -0
- package/dist/cjs/lib/statistics.js +0 -38
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { schema } from '@manuscripts/transform'
|
|
18
|
+
import { TextSelection } from 'prosemirror-state'
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
LinkForm,
|
|
22
|
+
LinkFormProps,
|
|
23
|
+
LinkValue,
|
|
24
|
+
} from '../components/views/LinkForm'
|
|
25
|
+
import { allowedHref } from '../lib/url'
|
|
26
|
+
import { createEditableNodeView } from './creators'
|
|
27
|
+
import { LinkView } from './link'
|
|
28
|
+
import ReactSubView from './ReactSubView'
|
|
29
|
+
import { isDeleted } from '@manuscripts/track-changes-plugin'
|
|
30
|
+
|
|
31
|
+
export class LinkEditableView extends LinkView {
|
|
32
|
+
protected popperContainer: HTMLDivElement
|
|
33
|
+
|
|
34
|
+
public ignoreMutation = () => true
|
|
35
|
+
|
|
36
|
+
public initialise = () => {
|
|
37
|
+
this.createDOM()
|
|
38
|
+
this.updateContents()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public updateContents() {
|
|
42
|
+
super.updateContents()
|
|
43
|
+
this.contentDOM = this.dom
|
|
44
|
+
|
|
45
|
+
const attrs = this.node.attrs
|
|
46
|
+
const href = attrs.href
|
|
47
|
+
const title = attrs.title
|
|
48
|
+
// This to prevent joining other inline nodes to link LEAN-4374
|
|
49
|
+
this.dom.setAttribute('contenteditable', 'false')
|
|
50
|
+
this.dom.setAttribute('href', allowedHref(href) ? href : '')
|
|
51
|
+
this.dom.setAttribute('target', '_blank')
|
|
52
|
+
this.dom.setAttribute('title', title || '')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
protected createDOM = () => {
|
|
56
|
+
this.dom = document.createElement('a')
|
|
57
|
+
this.dom.classList.add('link')
|
|
58
|
+
this.dom.addEventListener('click', this.handleClick)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public selectNode = () => {
|
|
62
|
+
if (!isDeleted(this.node)) {
|
|
63
|
+
this.showForm()
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public destroy = () => {
|
|
68
|
+
this.closeForm()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public deselectNode = () => {
|
|
72
|
+
this.closeForm()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private showForm = () => {
|
|
76
|
+
if (!this.props.getCapabilities().editArticle) {
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const attrs = this.node.attrs
|
|
81
|
+
|
|
82
|
+
const value: LinkValue = {
|
|
83
|
+
href: attrs.href,
|
|
84
|
+
title: attrs.title,
|
|
85
|
+
text: this.node.textContent,
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const componentProps: LinkFormProps = {
|
|
89
|
+
value,
|
|
90
|
+
onCancel: this.handleCancel,
|
|
91
|
+
onRemove: this.handleRemove,
|
|
92
|
+
onSave: this.handleSave,
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
this.popperContainer = ReactSubView(
|
|
96
|
+
this.props,
|
|
97
|
+
LinkForm,
|
|
98
|
+
componentProps,
|
|
99
|
+
this.node,
|
|
100
|
+
this.getPos,
|
|
101
|
+
this.view,
|
|
102
|
+
['link-editor']
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
this.props.popper.show(this.dom, this.popperContainer, 'bottom')
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private handleClick = (e: Event) => {
|
|
109
|
+
if (this.props.getCapabilities().editArticle) {
|
|
110
|
+
e.preventDefault()
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private handleCancel = () => {
|
|
115
|
+
const attrs = this.node.attrs
|
|
116
|
+
if (!this.node.content.size || !attrs.href) {
|
|
117
|
+
this.removeLink()
|
|
118
|
+
}
|
|
119
|
+
this.closeForm()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private handleRemove = () => {
|
|
123
|
+
this.removeLink()
|
|
124
|
+
this.closeForm()
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private handleSave = (value: LinkValue) => {
|
|
128
|
+
const tr = this.view.state.tr
|
|
129
|
+
|
|
130
|
+
const attrs = this.node.attrs
|
|
131
|
+
const pos = this.getPos()
|
|
132
|
+
|
|
133
|
+
if (value.href !== attrs.href || value.title !== attrs.title) {
|
|
134
|
+
tr.setNodeMarkup(pos, undefined, {
|
|
135
|
+
...this.node.attrs,
|
|
136
|
+
href: value.href,
|
|
137
|
+
title: value.title,
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
if (value.text !== this.node.textContent) {
|
|
141
|
+
tr.delete(pos + 1, pos + this.node.nodeSize - 1)
|
|
142
|
+
tr.insert(pos + 1, schema.text(value.text))
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
tr.setSelection(TextSelection.create(tr.doc, pos))
|
|
146
|
+
this.view.focus()
|
|
147
|
+
this.view.dispatch(tr)
|
|
148
|
+
this.closeForm()
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private removeLink = () => {
|
|
152
|
+
const tr = this.view.state.tr
|
|
153
|
+
const pos = this.getPos()
|
|
154
|
+
tr.delete(pos, pos + this.node.nodeSize)
|
|
155
|
+
const text = this.node.textContent
|
|
156
|
+
if (text) {
|
|
157
|
+
tr.insert(pos, schema.text(text))
|
|
158
|
+
}
|
|
159
|
+
tr.setSelection(TextSelection.create(tr.doc, pos))
|
|
160
|
+
this.view.dispatch(tr)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private closeForm = () => {
|
|
164
|
+
this.props.popper.destroy()
|
|
165
|
+
this.popperContainer?.remove()
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export default createEditableNodeView(LinkEditableView)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ListNode, ManuscriptNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { writeCssListStyleType } from '../lib/lists'
|
|
20
|
+
import { Trackable } from '../types'
|
|
21
|
+
import BlockView from './block_view'
|
|
22
|
+
import { createNodeOrElementView } from './creators'
|
|
23
|
+
import { EditableBlock } from './editable_block'
|
|
24
|
+
|
|
25
|
+
export class ListView extends BlockView<Trackable<ListNode>> {
|
|
26
|
+
public elementType = 'ul'
|
|
27
|
+
|
|
28
|
+
public updateContents() {
|
|
29
|
+
super.updateContents()
|
|
30
|
+
if (this.contentDOM) {
|
|
31
|
+
const type = this.node.attrs.listStyleType
|
|
32
|
+
this.contentDOM.style.listStyleType = writeCssListStyleType(type)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const listCallback = (node: ManuscriptNode, dom: HTMLElement) => {
|
|
38
|
+
dom.classList.add('list')
|
|
39
|
+
const type = node.attrs.listStyleType
|
|
40
|
+
dom.style.listStyleType = writeCssListStyleType(type)
|
|
41
|
+
}
|
|
42
|
+
export default createNodeOrElementView(
|
|
43
|
+
EditableBlock(ListView),
|
|
44
|
+
'ul',
|
|
45
|
+
listCallback
|
|
46
|
+
)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ListItemNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import BlockView from './block_view'
|
|
20
|
+
import { createNodeOrElementView } from './creators'
|
|
21
|
+
|
|
22
|
+
export class ListItemView extends BlockView<ListItemNode> {
|
|
23
|
+
public elementType = 'li'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default createNodeOrElementView(ListItemView, 'li')
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ParagraphNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import BlockView from './block_view'
|
|
20
|
+
import { createNodeOrElementView } from './creators'
|
|
21
|
+
|
|
22
|
+
export class ParagraphView extends BlockView<ParagraphNode> {
|
|
23
|
+
public elementType = 'p'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default createNodeOrElementView(ParagraphView, 'p')
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { createNodeOrElementView } from './creators'
|
|
18
|
+
import { EditableBlock } from './editable_block'
|
|
19
|
+
import { ParagraphView } from './paragraph'
|
|
20
|
+
|
|
21
|
+
export default createNodeOrElementView(EditableBlock(ParagraphView), 'p')
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ManuscriptNodeView, PlaceholderNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { createPlaceholderContent } from '../lib/placeholder'
|
|
20
|
+
import { BaseNodeView } from './base_node_view'
|
|
21
|
+
import { createNodeView } from './creators'
|
|
22
|
+
|
|
23
|
+
export class PlaceholderView
|
|
24
|
+
extends BaseNodeView<PlaceholderNode>
|
|
25
|
+
implements ManuscriptNodeView
|
|
26
|
+
{
|
|
27
|
+
public ignoreMutation = () => true
|
|
28
|
+
|
|
29
|
+
public initialise = () => {
|
|
30
|
+
this.dom = createPlaceholderContent(this.node.attrs.label)
|
|
31
|
+
this.dom.classList.add('placeholder-item')
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default createNodeView(PlaceholderView)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { PlaceholderNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { createPlaceholderContent } from '../lib/placeholder'
|
|
20
|
+
import BlockView from './block_view'
|
|
21
|
+
import { createNodeView } from './creators'
|
|
22
|
+
|
|
23
|
+
export class PlaceholderElementView extends BlockView<PlaceholderNode> {
|
|
24
|
+
private element: HTMLElement
|
|
25
|
+
|
|
26
|
+
public createElement = () => {
|
|
27
|
+
this.element = document.createElement('div')
|
|
28
|
+
this.element.className = 'block'
|
|
29
|
+
this.element.setAttribute('id', this.node.attrs.id)
|
|
30
|
+
this.dom.appendChild(this.element)
|
|
31
|
+
|
|
32
|
+
const content = createPlaceholderContent()
|
|
33
|
+
content.className = 'placeholder-item'
|
|
34
|
+
this.element.appendChild(content)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default createNodeView(PlaceholderElementView)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { createEditableNodeView } from './creators'
|
|
18
|
+
import { EditableBlock } from './editable_block'
|
|
19
|
+
import { PlaceholderElementView } from './placeholder_element'
|
|
20
|
+
|
|
21
|
+
export default createEditableNodeView(EditableBlock(PlaceholderElementView))
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ContextMenu, ContextMenuProps } from '@manuscripts/style-guide'
|
|
18
|
+
import { PullquoteElementNode, schema } from '@manuscripts/transform'
|
|
19
|
+
import { NodeSelection } from 'prosemirror-state'
|
|
20
|
+
import { findChildrenByType } from 'prosemirror-utils'
|
|
21
|
+
|
|
22
|
+
import { CommentKey } from '../lib/comments'
|
|
23
|
+
import { setCommentSelection } from '../plugins/comments'
|
|
24
|
+
import BlockView from './block_view'
|
|
25
|
+
import { createNodeOrElementView } from './creators'
|
|
26
|
+
import ReactSubView from './ReactSubView'
|
|
27
|
+
|
|
28
|
+
export class PullquoteElementView extends BlockView<PullquoteElementNode> {
|
|
29
|
+
public elementType = 'aside'
|
|
30
|
+
contextMenu: HTMLElement
|
|
31
|
+
|
|
32
|
+
public ignoreMutation = () => true
|
|
33
|
+
public stopEvent = () => true
|
|
34
|
+
|
|
35
|
+
private handleClick = (event: Event) => {
|
|
36
|
+
const element = event.target as HTMLElement
|
|
37
|
+
// Handle click on comment marker
|
|
38
|
+
const marker = element.closest('.comment-marker') as HTMLElement
|
|
39
|
+
if (marker) {
|
|
40
|
+
const key = marker.dataset.key as CommentKey
|
|
41
|
+
const tr = this.view.state.tr
|
|
42
|
+
setCommentSelection(tr, key, undefined, false)
|
|
43
|
+
tr.setSelection(NodeSelection.create(this.view.state.doc, this.getPos()))
|
|
44
|
+
this.view.dispatch(tr)
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public createElement = () => {
|
|
50
|
+
this.contentDOM = document.createElement(this.elementType)
|
|
51
|
+
this.contentDOM.className = 'block'
|
|
52
|
+
this.contentDOM.classList.add('pullquote')
|
|
53
|
+
|
|
54
|
+
this.dom.appendChild(this.contentDOM)
|
|
55
|
+
|
|
56
|
+
// Add click event listener to handle comment marker clicks
|
|
57
|
+
this.dom.addEventListener('click', this.handleClick)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
handleAddFigure() {
|
|
61
|
+
const tr = this.view.state.tr
|
|
62
|
+
tr.insert(this.getPos() + 1, schema.nodes.quote_image.create())
|
|
63
|
+
this.view.dispatch(tr)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public actionGutterButtons = (): HTMLElement[] => {
|
|
67
|
+
const contextMenu = this.addFigureContextMenu()
|
|
68
|
+
return contextMenu ? [contextMenu] : []
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
addFigureContextMenu = (): HTMLElement | undefined => {
|
|
72
|
+
const can = this.props.getCapabilities()
|
|
73
|
+
const componentProps: ContextMenuProps = {
|
|
74
|
+
actions: [],
|
|
75
|
+
}
|
|
76
|
+
if (can.editArticle) {
|
|
77
|
+
componentProps.actions.push({
|
|
78
|
+
label: 'Add Image',
|
|
79
|
+
action: () => this.handleAddFigure(),
|
|
80
|
+
icon: 'AddFigure',
|
|
81
|
+
disabled: !!findChildrenByType(this.node, schema.nodes.quote_image)
|
|
82
|
+
.length,
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
this.contextMenu = ReactSubView(
|
|
86
|
+
this.props,
|
|
87
|
+
ContextMenu,
|
|
88
|
+
componentProps,
|
|
89
|
+
this.node,
|
|
90
|
+
this.getPos,
|
|
91
|
+
this.view,
|
|
92
|
+
['context-menu']
|
|
93
|
+
)
|
|
94
|
+
return this.contextMenu
|
|
95
|
+
}
|
|
96
|
+
return undefined
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public destroy = () => {
|
|
100
|
+
// Clean up event listener
|
|
101
|
+
this.dom.removeEventListener('click', this.handleClick)
|
|
102
|
+
super.destroy()
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default createNodeOrElementView(PullquoteElementView, 'aside')
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { createNodeOrElementView } from './creators'
|
|
18
|
+
import { EditableBlock } from './editable_block'
|
|
19
|
+
import { PullquoteElementView } from './pullquote_element'
|
|
20
|
+
|
|
21
|
+
export default createNodeOrElementView(
|
|
22
|
+
EditableBlock(PullquoteElementView),
|
|
23
|
+
'aside'
|
|
24
|
+
)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
addTrackChangesAttributes,
|
|
19
|
+
addTrackChangesClassNames,
|
|
20
|
+
isDeleted,
|
|
21
|
+
} from '@manuscripts/track-changes-plugin'
|
|
22
|
+
import { plusIcon } from '../icons'
|
|
23
|
+
import { createEditableNodeView } from './creators'
|
|
24
|
+
import { FigureEditableView } from './figure_editable'
|
|
25
|
+
|
|
26
|
+
export class QuoteImageEditableView extends FigureEditableView {
|
|
27
|
+
closeButton: HTMLButtonElement
|
|
28
|
+
isInPullQuote: boolean
|
|
29
|
+
|
|
30
|
+
override createDOM() {
|
|
31
|
+
this.dom = document.createElement('figure')
|
|
32
|
+
|
|
33
|
+
this.container = document.createElement('div')
|
|
34
|
+
this.container.className = 'pullquote-figure'
|
|
35
|
+
this.container.contentEditable = 'false'
|
|
36
|
+
this.dom.appendChild(this.container)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override addTools() {
|
|
40
|
+
if (!this.closeButton) {
|
|
41
|
+
const closeButton = document.createElement('button')
|
|
42
|
+
closeButton.innerHTML = plusIcon
|
|
43
|
+
closeButton.classList.add('figure-remove-button', 'button-reset')
|
|
44
|
+
|
|
45
|
+
closeButton.addEventListener('click', () => {
|
|
46
|
+
if (this.node.attrs.src) {
|
|
47
|
+
this.setSrc('')
|
|
48
|
+
} else {
|
|
49
|
+
const { tr } = this.view.state
|
|
50
|
+
tr.delete(this.getPos(), this.getPos() + this.node.nodeSize)
|
|
51
|
+
this.view.dispatch(tr)
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
this.closeButton = closeButton
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public override updateContents() {
|
|
60
|
+
super.updateContents()
|
|
61
|
+
|
|
62
|
+
if (!isDeleted(this.node)) {
|
|
63
|
+
this.container.appendChild(this.closeButton)
|
|
64
|
+
}
|
|
65
|
+
addTrackChangesAttributes(this.node.attrs, this.dom)
|
|
66
|
+
addTrackChangesClassNames(this.node.attrs, this.dom)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
protected override createPlaceholder = () => {
|
|
70
|
+
const element = document.createElement('div')
|
|
71
|
+
element.classList.add('figure', 'placeholder')
|
|
72
|
+
element.tabIndex = 0
|
|
73
|
+
|
|
74
|
+
const instructions = document.createElement('div')
|
|
75
|
+
instructions.classList.add('instructions')
|
|
76
|
+
instructions.innerHTML = `${plusIcon}<div>Drag or click here to upload image</div>`
|
|
77
|
+
|
|
78
|
+
element.appendChild(instructions)
|
|
79
|
+
|
|
80
|
+
return element
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export default createEditableNodeView(QuoteImageEditableView)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { SectionNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { sectionTitleKey } from '../plugins/section_title'
|
|
20
|
+
import BlockView from './block_view'
|
|
21
|
+
import { createNodeView } from './creators'
|
|
22
|
+
|
|
23
|
+
export class SectionView extends BlockView<SectionNode> {
|
|
24
|
+
public elementType = 'section'
|
|
25
|
+
|
|
26
|
+
public initialise() {
|
|
27
|
+
this.createDOM()
|
|
28
|
+
this.createElement()
|
|
29
|
+
this.updateContents()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public createElement() {
|
|
33
|
+
this.contentDOM = document.createElement(this.elementType)
|
|
34
|
+
this.dom.appendChild(this.contentDOM)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public updateContents() {
|
|
38
|
+
super.updateContents()
|
|
39
|
+
this.dom.setAttribute('data-category', this.node.attrs.category)
|
|
40
|
+
this.handleSectionNumbering()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// handle sections numbering after track-changes process
|
|
44
|
+
//todo move to plugin
|
|
45
|
+
handleSectionNumbering() {
|
|
46
|
+
const sections = sectionTitleKey.getState(this.view.state)
|
|
47
|
+
if (!sections) {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
sections.forEach((sectionNumber, id) => {
|
|
51
|
+
const section = document.getElementById(id)
|
|
52
|
+
const sectionTitle = section?.querySelector('h1')
|
|
53
|
+
if (sectionTitle) {
|
|
54
|
+
sectionTitle.dataset.sectionNumber = sectionNumber
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public destroy() {
|
|
60
|
+
super.destroy()
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export default createNodeView(SectionView)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2019 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import BlockView from './block_view'
|
|
18
|
+
import { createNodeView } from './creators'
|
|
19
|
+
|
|
20
|
+
export default createNodeView(BlockView)
|