@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,96 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2023 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 { AuthorNotesNode, ManuscriptNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { createHeader } from '../lib/utils'
|
|
20
|
+
import { Trackable } from '../types'
|
|
21
|
+
import BlockView from './block_view'
|
|
22
|
+
import { createNodeView } from './creators'
|
|
23
|
+
|
|
24
|
+
export class AuthorNotesView extends BlockView<Trackable<AuthorNotesNode>> {
|
|
25
|
+
container: HTMLElement
|
|
26
|
+
allowedTypes = ['corresp', 'footnote', 'paragraph']
|
|
27
|
+
correspondenceHeader = 'Correspondence'
|
|
28
|
+
genericHeader = 'Author notes'
|
|
29
|
+
genericHeaderIsDisplayed: boolean
|
|
30
|
+
|
|
31
|
+
public ignoreMutation = () => true
|
|
32
|
+
public stopEvent = () => true
|
|
33
|
+
|
|
34
|
+
public createElement = () => {
|
|
35
|
+
this.container = document.createElement('div')
|
|
36
|
+
this.container.classList.add('block', 'author-notes-container')
|
|
37
|
+
this.dom.appendChild(this.container)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public updateContents() {
|
|
41
|
+
super.updateContents()
|
|
42
|
+
this.genericHeaderIsDisplayed = false
|
|
43
|
+
this.dom.setAttribute('contenteditable', 'false')
|
|
44
|
+
this.container.innerHTML = ''
|
|
45
|
+
|
|
46
|
+
const items: { [key: string]: ManuscriptNode[] } = {}
|
|
47
|
+
this.allowedTypes.forEach((type) => (items[type] = []))
|
|
48
|
+
|
|
49
|
+
// Fill items with nodes of allowed types
|
|
50
|
+
this.node.descendants((node) => {
|
|
51
|
+
if (this.allowedTypes.includes(node.type.name)) {
|
|
52
|
+
items[node.type.name].push(node)
|
|
53
|
+
return false
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
this.allowedTypes.forEach((typeName) => {
|
|
58
|
+
if (items[typeName] && items[typeName].length) {
|
|
59
|
+
const content = this.createContent(typeName, items[typeName])
|
|
60
|
+
if (content) {
|
|
61
|
+
this.container.appendChild(content)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public createContent = (typeName: string, nodes: ManuscriptNode[]) => {
|
|
68
|
+
let isNotEmpty = false
|
|
69
|
+
if (nodes.length) {
|
|
70
|
+
const container = document.createElement('div')
|
|
71
|
+
container.classList.add(`${typeName}s-container`)
|
|
72
|
+
// Show title 'Correspondence' for corresp items
|
|
73
|
+
// or 'Author notes' for other items, but only once
|
|
74
|
+
if (typeName === this.allowedTypes[0]) {
|
|
75
|
+
container.append(createHeader(typeName, this.correspondenceHeader))
|
|
76
|
+
} else if (!this.genericHeaderIsDisplayed) {
|
|
77
|
+
this.genericHeaderIsDisplayed = true
|
|
78
|
+
container.append(createHeader(typeName, this.genericHeader))
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
nodes.forEach((node) => {
|
|
82
|
+
if (node.textContent) {
|
|
83
|
+
isNotEmpty = true
|
|
84
|
+
const div = document.createElement('div')
|
|
85
|
+
div.classList.add(typeName)
|
|
86
|
+
div.textContent = node.textContent
|
|
87
|
+
container.append(div)
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
return isNotEmpty ? container : null
|
|
91
|
+
}
|
|
92
|
+
return null
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default createNodeView(AuthorNotesView)
|
|
@@ -0,0 +1,194 @@
|
|
|
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 { AwardNode, schema } from '@manuscripts/transform'
|
|
19
|
+
|
|
20
|
+
import { AwardModal, AwardModalProps } from '../components/awards/AwardModal'
|
|
21
|
+
import {
|
|
22
|
+
DeleteAwardDialog,
|
|
23
|
+
DeleteAwardDialogProps,
|
|
24
|
+
} from '../components/awards/DeleteAwardDiaolog'
|
|
25
|
+
import { updateNodeAttrs } from '../lib/view'
|
|
26
|
+
import { Trackable, TrackableAttributes } from '../types'
|
|
27
|
+
import BlockView from './block_view'
|
|
28
|
+
import { createNodeView } from './creators'
|
|
29
|
+
import ReactSubView from './ReactSubView'
|
|
30
|
+
import { isDeleted } from '@manuscripts/track-changes-plugin'
|
|
31
|
+
|
|
32
|
+
export type AwardAttrs = TrackableAttributes<AwardNode>
|
|
33
|
+
export class AwardView extends BlockView<Trackable<AwardNode>> {
|
|
34
|
+
protected popperContainer: HTMLDivElement
|
|
35
|
+
private dialog: HTMLElement
|
|
36
|
+
contextMenu: HTMLElement
|
|
37
|
+
|
|
38
|
+
public ignoreMutation = () => true
|
|
39
|
+
public stopEvent = () => true
|
|
40
|
+
|
|
41
|
+
public updateContents() {
|
|
42
|
+
super.updateContents()
|
|
43
|
+
if (!this.contentDOM) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
const { recipient, code, source } = this.node.attrs
|
|
47
|
+
if (!source) {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.contentDOM.innerHTML = ''
|
|
52
|
+
const notAvailable = 'N/A'
|
|
53
|
+
const fragment = document.createDocumentFragment()
|
|
54
|
+
|
|
55
|
+
fragment.appendChild(this.createAwardFragment('award-source', '', source))
|
|
56
|
+
|
|
57
|
+
fragment.appendChild(
|
|
58
|
+
this.createAwardFragment(
|
|
59
|
+
'award-code',
|
|
60
|
+
'Grant Number(s): ',
|
|
61
|
+
code ? code.split(';').join(', ') : notAvailable
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
fragment.appendChild(
|
|
66
|
+
this.createAwardFragment(
|
|
67
|
+
'award-recipient',
|
|
68
|
+
'Recipient: ',
|
|
69
|
+
recipient ? recipient : notAvailable
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
this.contentDOM.appendChild(fragment)
|
|
73
|
+
this.updateClasses()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private createAwardFragment = (
|
|
77
|
+
className: string,
|
|
78
|
+
title: string,
|
|
79
|
+
content: string
|
|
80
|
+
): HTMLDivElement => {
|
|
81
|
+
const awardFragment = document.createElement('div')
|
|
82
|
+
awardFragment.classList.add(className)
|
|
83
|
+
if (title) {
|
|
84
|
+
const titleElement = document.createElement('span')
|
|
85
|
+
titleElement.classList.add('title')
|
|
86
|
+
titleElement.textContent = title
|
|
87
|
+
awardFragment.appendChild(titleElement)
|
|
88
|
+
}
|
|
89
|
+
if (content) {
|
|
90
|
+
const contentElement = document.createElement('span')
|
|
91
|
+
contentElement.classList.add('content')
|
|
92
|
+
contentElement.textContent = content
|
|
93
|
+
awardFragment.appendChild(contentElement)
|
|
94
|
+
}
|
|
95
|
+
return awardFragment
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public awardContextMenu = (): HTMLElement | undefined => {
|
|
99
|
+
const can = this.props.getCapabilities()
|
|
100
|
+
if (!can.editArticle || isDeleted(this.node)) {
|
|
101
|
+
return undefined
|
|
102
|
+
}
|
|
103
|
+
const componentProps: ContextMenuProps = {
|
|
104
|
+
actions: [
|
|
105
|
+
{
|
|
106
|
+
label: 'Edit Funder Info',
|
|
107
|
+
action: () => {
|
|
108
|
+
this.props.popper.destroy()
|
|
109
|
+
this.showAwardModal(this.node)
|
|
110
|
+
},
|
|
111
|
+
icon: 'Edit',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: 'Delete Funder Info',
|
|
115
|
+
action: () => {
|
|
116
|
+
this.props.popper.destroy()
|
|
117
|
+
this.showDeleteAwardDialog()
|
|
118
|
+
},
|
|
119
|
+
icon: 'Delete',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
}
|
|
123
|
+
this.contextMenu = ReactSubView(
|
|
124
|
+
this.props,
|
|
125
|
+
ContextMenu,
|
|
126
|
+
componentProps,
|
|
127
|
+
this.node,
|
|
128
|
+
this.getPos,
|
|
129
|
+
this.view,
|
|
130
|
+
['context-menu']
|
|
131
|
+
)
|
|
132
|
+
return this.contextMenu
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public actionGutterButtons = (): HTMLElement[] => {
|
|
136
|
+
const contextMenu = this.awardContextMenu()
|
|
137
|
+
return contextMenu ? [contextMenu] : []
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
showAwardModal = (award: AwardNode) => {
|
|
141
|
+
this.dialog?.remove()
|
|
142
|
+
this.popperContainer?.remove()
|
|
143
|
+
|
|
144
|
+
const componentProps: AwardModalProps = {
|
|
145
|
+
initialData: award?.attrs || ({} as AwardAttrs),
|
|
146
|
+
onSaveAward: this.handleSaveAward,
|
|
147
|
+
}
|
|
148
|
+
this.popperContainer = ReactSubView(
|
|
149
|
+
this.props,
|
|
150
|
+
AwardModal,
|
|
151
|
+
componentProps,
|
|
152
|
+
this.node,
|
|
153
|
+
this.getPos,
|
|
154
|
+
this.view,
|
|
155
|
+
['award-editor']
|
|
156
|
+
)
|
|
157
|
+
this.props.popper.show(this.dom, this.popperContainer, 'auto', false)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
showDeleteAwardDialog = () => {
|
|
161
|
+
this.dialog?.remove()
|
|
162
|
+
const componentProps: DeleteAwardDialogProps = {
|
|
163
|
+
handleDelete: this.handleDeleteAward,
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this.popperContainer = ReactSubView(
|
|
167
|
+
this.props,
|
|
168
|
+
DeleteAwardDialog,
|
|
169
|
+
componentProps,
|
|
170
|
+
this.node,
|
|
171
|
+
this.getPos,
|
|
172
|
+
this.view,
|
|
173
|
+
['award-editor']
|
|
174
|
+
)
|
|
175
|
+
this.props.popper.show(this.dom, this.popperContainer, 'auto', false)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
handleSaveAward = (award: AwardAttrs) => {
|
|
179
|
+
updateNodeAttrs(this.view, schema.nodes.award, award)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
handleDeleteAward = () => {
|
|
183
|
+
const award = this.node
|
|
184
|
+
const pos = this.getPos()
|
|
185
|
+
if (award) {
|
|
186
|
+
const tr = this.view.state.tr
|
|
187
|
+
const from = pos
|
|
188
|
+
const to = pos + award.nodeSize
|
|
189
|
+
this.view.dispatch(tr.delete(from, to))
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export default createNodeView(AwardView)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2024 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 { AwardsNode } from '@manuscripts/transform'
|
|
18
|
+
|
|
19
|
+
import { createHeader } from '../lib/utils'
|
|
20
|
+
import { BaseNodeView } from './base_node_view'
|
|
21
|
+
import { createNodeView } from './creators'
|
|
22
|
+
|
|
23
|
+
export class AwardsView extends BaseNodeView<AwardsNode> {
|
|
24
|
+
public elementType = 'div'
|
|
25
|
+
container: HTMLElement
|
|
26
|
+
|
|
27
|
+
public initialise() {
|
|
28
|
+
this.createDOM()
|
|
29
|
+
this.createElement()
|
|
30
|
+
this.updateContents()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public createDOM() {
|
|
34
|
+
this.dom = document.createElement(this.elementType)
|
|
35
|
+
this.dom.classList.add(`block-${this.node.type.name}`)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public createElement = () => {
|
|
39
|
+
this.contentDOM = document.createElement(this.elementType)
|
|
40
|
+
this.contentDOM.className = 'block'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public updateContents() {
|
|
44
|
+
super.updateContents()
|
|
45
|
+
if (!this.contentDOM) {
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
this.dom.innerHTML = ''
|
|
49
|
+
this.dom.setAttribute('contenteditable', 'false')
|
|
50
|
+
this.contentDOM.setAttribute('contenteditable', 'false')
|
|
51
|
+
|
|
52
|
+
if (this.node.content.size !== 0) {
|
|
53
|
+
const header = createHeader(this.node.type.name, 'Funder Information')
|
|
54
|
+
this.dom.append(header, this.contentDOM)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default createNodeView(AwardsView)
|
|
@@ -0,0 +1,85 @@
|
|
|
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 { ManuscriptEditorView, ManuscriptNode } from '@manuscripts/transform'
|
|
18
|
+
import { NodeView } from 'prosemirror-view'
|
|
19
|
+
|
|
20
|
+
import { EditorProps } from '../configs/ManuscriptsEditor'
|
|
21
|
+
import {
|
|
22
|
+
addTrackChangesAttributes,
|
|
23
|
+
addTrackChangesClassNames,
|
|
24
|
+
} from '@manuscripts/track-changes-plugin'
|
|
25
|
+
|
|
26
|
+
export class BaseNodeView<Node extends ManuscriptNode> implements NodeView {
|
|
27
|
+
public dom: HTMLElement
|
|
28
|
+
public contentDOM?: HTMLElement
|
|
29
|
+
public elementType = 'div'
|
|
30
|
+
|
|
31
|
+
public constructor(
|
|
32
|
+
public readonly props: EditorProps,
|
|
33
|
+
public node: Node,
|
|
34
|
+
public readonly view: ManuscriptEditorView,
|
|
35
|
+
public readonly getPos: () => number
|
|
36
|
+
) {}
|
|
37
|
+
|
|
38
|
+
public update(newNode: ManuscriptNode) {
|
|
39
|
+
// if (!newNode.sameMarkup(this.node)) return false
|
|
40
|
+
if (newNode.attrs.id !== this.node.attrs.id) {
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
if (newNode.type.name !== this.node.type.name) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
this.node = newNode as Node
|
|
47
|
+
this.updateContents()
|
|
48
|
+
this.props.popper.update()
|
|
49
|
+
return true
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public initialise() {
|
|
53
|
+
// extend this
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public updateContents() {
|
|
57
|
+
//this should be in initialize
|
|
58
|
+
if (this.node.attrs.id) {
|
|
59
|
+
this.dom.id = this.node.attrs.id
|
|
60
|
+
}
|
|
61
|
+
if (this.contentDOM) {
|
|
62
|
+
this.contentDOM.removeAttribute('id')
|
|
63
|
+
}
|
|
64
|
+
this.handleTrackChanges()
|
|
65
|
+
// extend this
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public handleTrackChanges() {
|
|
69
|
+
addTrackChangesAttributes(this.node.attrs, this.dom)
|
|
70
|
+
addTrackChangesClassNames(this.node.attrs, this.dom)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public selectNode() {
|
|
74
|
+
this.dom.classList.add('ProseMirror-selectednode')
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public deselectNode() {
|
|
78
|
+
this.dom.classList.remove('ProseMirror-selectednode')
|
|
79
|
+
this.props.popper.destroy()
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public destroy() {
|
|
83
|
+
this.props.popper.destroy()
|
|
84
|
+
}
|
|
85
|
+
}
|