@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,140 @@
|
|
|
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 'prosemirror-view/style/prosemirror.css'
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
ManuscriptNode,
|
|
21
|
+
ManuscriptNodeType,
|
|
22
|
+
schema,
|
|
23
|
+
SectionCategory,
|
|
24
|
+
UserProfile,
|
|
25
|
+
} from '@manuscripts/transform'
|
|
26
|
+
import { EditorState } from 'prosemirror-state'
|
|
27
|
+
import { EditorView } from 'prosemirror-view'
|
|
28
|
+
import { Location, NavigateFunction } from 'react-router-dom'
|
|
29
|
+
import { DefaultTheme } from 'styled-components'
|
|
30
|
+
|
|
31
|
+
import { CollabProvider } from '../classes/collabProvider'
|
|
32
|
+
import { clipboardParser } from '../clipboard'
|
|
33
|
+
import { Dispatch } from '../commands'
|
|
34
|
+
import { Language } from '../lib/languages'
|
|
35
|
+
import { Capabilities } from '../lib/capabilities'
|
|
36
|
+
import { transformCopied } from '../lib/copy'
|
|
37
|
+
import { FileAttachment, FileManagement } from '../lib/files'
|
|
38
|
+
import { handleScrollToSelectedTarget } from '../lib/helpers'
|
|
39
|
+
import { handlePaste, transformPasted, transformPastedHTML } from '../lib/paste'
|
|
40
|
+
import { INIT_META } from '../lib/plugins'
|
|
41
|
+
import { PopperManager } from '../lib/popper'
|
|
42
|
+
import plugins from './editor-plugins'
|
|
43
|
+
import views from './editor-views'
|
|
44
|
+
|
|
45
|
+
export type FetchOEmbedHtml = (
|
|
46
|
+
url: string,
|
|
47
|
+
maxWidth: number,
|
|
48
|
+
maxHeight: number
|
|
49
|
+
) => Promise<string | undefined>
|
|
50
|
+
|
|
51
|
+
export type CSLProps = {
|
|
52
|
+
style?: string
|
|
53
|
+
locale?: string
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface EditorProps {
|
|
57
|
+
attributes?: { [key: string]: string }
|
|
58
|
+
locale: string
|
|
59
|
+
theme: DefaultTheme
|
|
60
|
+
getCurrentUser: () => UserProfile
|
|
61
|
+
|
|
62
|
+
projectID: string
|
|
63
|
+
doc: ManuscriptNode
|
|
64
|
+
getFiles: () => FileAttachment[]
|
|
65
|
+
fileManagement: FileManagement
|
|
66
|
+
|
|
67
|
+
popper: PopperManager
|
|
68
|
+
|
|
69
|
+
getCapabilities: () => Capabilities
|
|
70
|
+
userID: string
|
|
71
|
+
debug: boolean
|
|
72
|
+
cslProps: CSLProps
|
|
73
|
+
languages: Language[]
|
|
74
|
+
sectionCategories: Map<string, SectionCategory>
|
|
75
|
+
collabProvider?: CollabProvider
|
|
76
|
+
navigate: NavigateFunction
|
|
77
|
+
location: Location
|
|
78
|
+
isComparingMode?: boolean
|
|
79
|
+
dispatch?: Dispatch
|
|
80
|
+
onEditorClick: (event: Event) => void
|
|
81
|
+
lockBody: boolean
|
|
82
|
+
isViewingMode?: boolean
|
|
83
|
+
hiddenNodeTypes?: ManuscriptNodeType[] | undefined
|
|
84
|
+
fetchOEmbedHtml: FetchOEmbedHtml
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export type ExternalProps = Omit<EditorProps, 'popper' | 'dispatch'>
|
|
88
|
+
|
|
89
|
+
export const createEditorState = (props: EditorProps) =>
|
|
90
|
+
EditorState.create({
|
|
91
|
+
doc: props.doc,
|
|
92
|
+
schema,
|
|
93
|
+
plugins: plugins(props),
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
export const createEditorView = (
|
|
97
|
+
props: EditorProps,
|
|
98
|
+
root: HTMLElement,
|
|
99
|
+
state: EditorState,
|
|
100
|
+
dispatch: Dispatch
|
|
101
|
+
) => {
|
|
102
|
+
const view = new EditorView(root, {
|
|
103
|
+
state,
|
|
104
|
+
editable: () => props.getCapabilities().editArticle,
|
|
105
|
+
scrollMargin: {
|
|
106
|
+
top: 100,
|
|
107
|
+
bottom: 100,
|
|
108
|
+
left: 0,
|
|
109
|
+
right: 0,
|
|
110
|
+
},
|
|
111
|
+
dispatchTransaction: dispatch,
|
|
112
|
+
nodeViews: views(props, dispatch),
|
|
113
|
+
attributes: props.attributes,
|
|
114
|
+
transformPastedHTML,
|
|
115
|
+
transformPasted,
|
|
116
|
+
handlePaste,
|
|
117
|
+
clipboardParser,
|
|
118
|
+
handleScrollToSelection: handleScrollToSelectedTarget,
|
|
119
|
+
transformCopied,
|
|
120
|
+
handleClickOn: (view, pos, node, nodePos, event) => {
|
|
121
|
+
props.onEditorClick(event)
|
|
122
|
+
// This to prevent changing editor selection when clicking on table cell context menu button
|
|
123
|
+
if (
|
|
124
|
+
event?.target &&
|
|
125
|
+
(event.target as HTMLElement).classList.contains(
|
|
126
|
+
'table-context-menu-button'
|
|
127
|
+
)
|
|
128
|
+
) {
|
|
129
|
+
return true
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// running an init transaction allowing plugins to caught up with the document for the first time
|
|
135
|
+
const tr = view.state.tr.setMeta(INIT_META, true)
|
|
136
|
+
|
|
137
|
+
const nextState = view.state.apply(tr)
|
|
138
|
+
view.updateState(nextState)
|
|
139
|
+
return view
|
|
140
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2026 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 'prosemirror-gapcursor/style/gapcursor.css'
|
|
18
|
+
import 'prosemirror-tables/style/tables.css'
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
trackChangesPlugin,
|
|
22
|
+
TrackChangesStatus,
|
|
23
|
+
} from '@manuscripts/track-changes-plugin'
|
|
24
|
+
import { collab } from 'prosemirror-collab'
|
|
25
|
+
import { dropCursor } from 'prosemirror-dropcursor'
|
|
26
|
+
import { history } from 'prosemirror-history'
|
|
27
|
+
import { tableEditing } from 'prosemirror-tables'
|
|
28
|
+
|
|
29
|
+
import keys from '../keys'
|
|
30
|
+
import accessibility_element from '../plugins/accessibility_element'
|
|
31
|
+
import add_subtitle from '../plugins/add-subtitle'
|
|
32
|
+
import affiliations from '../plugins/affiliations'
|
|
33
|
+
import alt_titles from '../plugins/alt-titles'
|
|
34
|
+
import bibliography from '../plugins/bibliography'
|
|
35
|
+
import comments from '../plugins/comments'
|
|
36
|
+
import cross_references from '../plugins/cross-references'
|
|
37
|
+
import detect_inconsistency from '../plugins/detect-inconsistency'
|
|
38
|
+
import doi from '../plugins/doi'
|
|
39
|
+
import editorProps from '../plugins/editor-props'
|
|
40
|
+
import elements from '../plugins/elements'
|
|
41
|
+
import footnotes from '../plugins/footnotes'
|
|
42
|
+
import link from '../plugins/link'
|
|
43
|
+
import lock_body from '../plugins/lock-body'
|
|
44
|
+
import move_node from '../plugins/move-node'
|
|
45
|
+
import objects from '../plugins/objects'
|
|
46
|
+
import paragraphs from '../plugins/paragraphs'
|
|
47
|
+
import persist from '../plugins/persist'
|
|
48
|
+
import persistent_cursor from '../plugins/persistent-cursor'
|
|
49
|
+
import placeholder from '../plugins/placeholder'
|
|
50
|
+
import prevent_empty from '../plugins/prevent-empty'
|
|
51
|
+
import search_replace from '../plugins/search-replace'
|
|
52
|
+
import section_title from '../plugins/section_title'
|
|
53
|
+
import section_category from '../plugins/section_category'
|
|
54
|
+
import selected_suggestion from '../plugins/selected-suggestion'
|
|
55
|
+
import table_editing_fix from '../plugins/tables-cursor-fix'
|
|
56
|
+
import translations from '../plugins/translations'
|
|
57
|
+
import rules from '../rules'
|
|
58
|
+
import { EditorProps } from './ManuscriptsEditor'
|
|
59
|
+
|
|
60
|
+
export default (props: EditorProps) => {
|
|
61
|
+
const allPlugins = [
|
|
62
|
+
rules,
|
|
63
|
+
...keys,
|
|
64
|
+
dropCursor(),
|
|
65
|
+
history(),
|
|
66
|
+
trackChangesPlugin({
|
|
67
|
+
userID: props.userID,
|
|
68
|
+
debug: props.debug,
|
|
69
|
+
initialStatus:
|
|
70
|
+
props.isViewingMode || props.isComparingMode
|
|
71
|
+
? TrackChangesStatus.viewSnapshots
|
|
72
|
+
: props.getCapabilities().editWithoutTracking
|
|
73
|
+
? TrackChangesStatus.disabled
|
|
74
|
+
: TrackChangesStatus.enabled,
|
|
75
|
+
}),
|
|
76
|
+
section_title(),
|
|
77
|
+
table_editing_fix(),
|
|
78
|
+
elements(),
|
|
79
|
+
persist(),
|
|
80
|
+
bibliography(props),
|
|
81
|
+
objects(),
|
|
82
|
+
affiliations(),
|
|
83
|
+
comments(),
|
|
84
|
+
paragraphs(),
|
|
85
|
+
placeholder(),
|
|
86
|
+
add_subtitle(props),
|
|
87
|
+
translations(props),
|
|
88
|
+
tableEditing(),
|
|
89
|
+
selected_suggestion(),
|
|
90
|
+
footnotes(props),
|
|
91
|
+
editorProps(props),
|
|
92
|
+
doi(),
|
|
93
|
+
section_category(props),
|
|
94
|
+
cross_references(),
|
|
95
|
+
detect_inconsistency(props),
|
|
96
|
+
search_replace(),
|
|
97
|
+
lock_body(),
|
|
98
|
+
alt_titles(),
|
|
99
|
+
accessibility_element(),
|
|
100
|
+
prevent_empty(),
|
|
101
|
+
move_node(),
|
|
102
|
+
link(),
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
if (!window.Cypress) {
|
|
107
|
+
allPlugins.push(persistent_cursor())
|
|
108
|
+
// this is a temporal workaround until cypress tests are switched to working with prosemirrors selection instead of browsers direct selection
|
|
109
|
+
// this plugin is incompatible with current implementation of our tests in cypress,
|
|
110
|
+
// which relies on browser native Selection.AddRange and Range APIs
|
|
111
|
+
} else {
|
|
112
|
+
console.warn('Skipping cursor imitation plugin for automated testing runs.')
|
|
113
|
+
}
|
|
114
|
+
if (props.collabProvider) {
|
|
115
|
+
allPlugins.push(collab({ version: props.collabProvider.currentVersion }))
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return allPlugins
|
|
119
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
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
|
+
import { ManuscriptNodeView, Nodes } from '@manuscripts/transform'
|
|
17
|
+
|
|
18
|
+
import { Dispatch } from '../commands'
|
|
19
|
+
import { NodeViewCreator } from '../types'
|
|
20
|
+
import abstracts from '../views/abstracts'
|
|
21
|
+
import accessibilityElement from '../views/accessibility_element'
|
|
22
|
+
import affiliations from '../views/affiliations'
|
|
23
|
+
import alt_title from '../views/alt_title'
|
|
24
|
+
import alt_titles_section from '../views/alt_titles_section'
|
|
25
|
+
import attachment from '../views/attachment'
|
|
26
|
+
import attachments from '../views/attachments'
|
|
27
|
+
import authorNotes from '../views/author_notes'
|
|
28
|
+
import award from '../views/award'
|
|
29
|
+
import awards from '../views/awards'
|
|
30
|
+
import bibliographyElement from '../views/bibliography_element'
|
|
31
|
+
import blockquoteElement from '../views/blockquote_element_editable'
|
|
32
|
+
import boxElement from '../views/box_element'
|
|
33
|
+
import caption from '../views/caption'
|
|
34
|
+
import captionTitle from '../views/caption_title'
|
|
35
|
+
import citation from '../views/citation_editable'
|
|
36
|
+
import contributors from '../views/contributors'
|
|
37
|
+
import crossReference from '../views/cross_reference_editable'
|
|
38
|
+
import embed from '../views/embed'
|
|
39
|
+
import empty from '../views/empty'
|
|
40
|
+
import equation from '../views/equation_editable'
|
|
41
|
+
import equationElement from '../views/equation_element_editable'
|
|
42
|
+
import figure from '../views/figure_editable'
|
|
43
|
+
import figureElement from '../views/figure_element_editable'
|
|
44
|
+
import footnote from '../views/footnote'
|
|
45
|
+
import footnotesElement from '../views/footnotes_element'
|
|
46
|
+
import generalTableFootnote from '../views/general_table_footnote'
|
|
47
|
+
import heroImage from '../views/hero_image_editable'
|
|
48
|
+
import imageElement from '../views/image_element_editable'
|
|
49
|
+
import inlineEquation from '../views/inline_equation_editable'
|
|
50
|
+
import inlineFootnote from '../views/inline_footnote_editable'
|
|
51
|
+
import keyword from '../views/keyword'
|
|
52
|
+
import keywordGroup from '../views/keyword_group'
|
|
53
|
+
import link from '../views/link_editable'
|
|
54
|
+
import list from '../views/list'
|
|
55
|
+
import list_item from '../views/list_item'
|
|
56
|
+
import paragraph from '../views/paragraph_editable'
|
|
57
|
+
import placeholder from '../views/placeholder'
|
|
58
|
+
import placeholderElement from '../views/placeholder_element_editable'
|
|
59
|
+
import pullquoteElement from '../views/pullquote_element_editable'
|
|
60
|
+
import quoteImage from '../views/quote_image_editable'
|
|
61
|
+
import section from '../views/section'
|
|
62
|
+
import sectionLabel from '../views/section_label'
|
|
63
|
+
import sectionTitle from '../views/section_title_editable'
|
|
64
|
+
import subtitle from '../views/subtitle_editable'
|
|
65
|
+
import subtitles from '../views/subtitles_editable'
|
|
66
|
+
import supplement from '../views/supplement_editable'
|
|
67
|
+
import supplements from '../views/supplements_editable'
|
|
68
|
+
import tableCell from '../views/table_cell'
|
|
69
|
+
import tableElement from '../views/table_element_editable'
|
|
70
|
+
import tableElementFooter from '../views/table_element_footer'
|
|
71
|
+
import title from '../views/title_editable'
|
|
72
|
+
import transAbstract from '../views/translated_abstract_editable'
|
|
73
|
+
import transGraphicalAbstract from '../views/trans_graphical_abstract_editable'
|
|
74
|
+
import { EditorProps } from './ManuscriptsEditor'
|
|
75
|
+
|
|
76
|
+
export default (
|
|
77
|
+
props: EditorProps,
|
|
78
|
+
dispatch: Dispatch
|
|
79
|
+
): Partial<Record<Nodes, NodeViewCreator<ManuscriptNodeView>>> => {
|
|
80
|
+
return {
|
|
81
|
+
title: title(props, dispatch),
|
|
82
|
+
subtitles: subtitles(props, dispatch),
|
|
83
|
+
subtitle: subtitle(props, dispatch),
|
|
84
|
+
alt_title: alt_title(props),
|
|
85
|
+
alt_titles: alt_titles_section(props),
|
|
86
|
+
bibliography_element: bibliographyElement(props, dispatch),
|
|
87
|
+
blockquote_element: blockquoteElement(props),
|
|
88
|
+
quote_image: quoteImage(props, dispatch),
|
|
89
|
+
box_element: boxElement(props),
|
|
90
|
+
caption_title: captionTitle(props),
|
|
91
|
+
caption: caption(props),
|
|
92
|
+
citation: citation(props, dispatch),
|
|
93
|
+
cross_reference: crossReference(props, dispatch),
|
|
94
|
+
contributors: contributors(props, dispatch),
|
|
95
|
+
affiliations: affiliations(props, dispatch),
|
|
96
|
+
embed: embed(props, dispatch),
|
|
97
|
+
equation: equation(props),
|
|
98
|
+
equation_element: equationElement(props),
|
|
99
|
+
figure: figure(props, dispatch),
|
|
100
|
+
figure_element: figureElement(props, dispatch),
|
|
101
|
+
image_element: imageElement(props, dispatch),
|
|
102
|
+
footnote: footnote(props),
|
|
103
|
+
footnotes_element: footnotesElement(props),
|
|
104
|
+
general_table_footnote: generalTableFootnote(props, dispatch),
|
|
105
|
+
inline_equation: inlineEquation(props),
|
|
106
|
+
inline_footnote: inlineFootnote(props, dispatch),
|
|
107
|
+
keyword: keyword(props, dispatch),
|
|
108
|
+
keyword_group: keywordGroup(props, dispatch),
|
|
109
|
+
link: link(props, dispatch),
|
|
110
|
+
list: list(props),
|
|
111
|
+
list_item: list_item(props),
|
|
112
|
+
paragraph: paragraph(props),
|
|
113
|
+
placeholder: placeholder(props),
|
|
114
|
+
placeholder_element: placeholderElement(props),
|
|
115
|
+
section: section(props),
|
|
116
|
+
graphical_abstract_section: section(props),
|
|
117
|
+
pullquote_element: pullquoteElement(props),
|
|
118
|
+
section_title: sectionTitle(props),
|
|
119
|
+
section_label: sectionLabel(props),
|
|
120
|
+
table_element: tableElement(props),
|
|
121
|
+
table_cell: tableCell(props),
|
|
122
|
+
table_header: tableCell(props),
|
|
123
|
+
table_element_footer: tableElementFooter(props),
|
|
124
|
+
comments: empty('comments'),
|
|
125
|
+
supplements: supplements(props, dispatch),
|
|
126
|
+
supplement: supplement(props, dispatch),
|
|
127
|
+
author_notes: authorNotes(props, dispatch),
|
|
128
|
+
awards: awards(props, dispatch),
|
|
129
|
+
award: award(props, dispatch),
|
|
130
|
+
long_desc: accessibilityElement(props, dispatch),
|
|
131
|
+
alt_text: accessibilityElement(props, dispatch),
|
|
132
|
+
hero_image: heroImage(props, dispatch),
|
|
133
|
+
abstracts: abstracts(props),
|
|
134
|
+
trans_abstract: transAbstract(props),
|
|
135
|
+
trans_graphical_abstract: transGraphicalAbstract(props),
|
|
136
|
+
attachment: attachment(props, dispatch),
|
|
137
|
+
attachments: attachments(props, dispatch),
|
|
138
|
+
}
|
|
139
|
+
}
|
package/src/icons.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
import {
|
|
17
|
+
AddAuthorIcon,
|
|
18
|
+
AlertIcon,
|
|
19
|
+
ArrowDownCircleIcon,
|
|
20
|
+
ArrowUpIcon,
|
|
21
|
+
DeleteIcon,
|
|
22
|
+
DraggableIcon,
|
|
23
|
+
EditIcon,
|
|
24
|
+
FileCorruptedIcon,
|
|
25
|
+
FileMainDocumentIcon,
|
|
26
|
+
ImageDefaultIcon,
|
|
27
|
+
ImageLeftIcon,
|
|
28
|
+
ImageRightIcon,
|
|
29
|
+
LinkIcon,
|
|
30
|
+
LockIcon,
|
|
31
|
+
ORCIDIcon as ORCID,
|
|
32
|
+
PlusIcon,
|
|
33
|
+
ScrollIcon,
|
|
34
|
+
SectionCategoryIcon,
|
|
35
|
+
TickIcon,
|
|
36
|
+
TranslateIcon,
|
|
37
|
+
} from '@manuscripts/style-guide'
|
|
38
|
+
import React, { createElement } from 'react'
|
|
39
|
+
import { renderToStaticMarkup } from 'react-dom/server'
|
|
40
|
+
|
|
41
|
+
const renderIcon = (c: React.FC) => renderToStaticMarkup(createElement(c))
|
|
42
|
+
|
|
43
|
+
export const addAuthorIcon = renderIcon(AddAuthorIcon)
|
|
44
|
+
export const arrowDown = renderIcon(ArrowDownCircleIcon)
|
|
45
|
+
export const arrowUp = renderIcon(ArrowUpIcon)
|
|
46
|
+
export const alertIcon = renderIcon(AlertIcon)
|
|
47
|
+
export const deleteIcon = renderIcon(DeleteIcon)
|
|
48
|
+
export const editIcon = renderIcon(EditIcon)
|
|
49
|
+
export const sectionCategoryIcon = renderIcon(SectionCategoryIcon)
|
|
50
|
+
export const scrollIcon = renderIcon(ScrollIcon)
|
|
51
|
+
export const lockIcon = renderIcon(LockIcon)
|
|
52
|
+
export const plusIcon = renderIcon(PlusIcon)
|
|
53
|
+
export const imageRightIcon = renderIcon(ImageRightIcon)
|
|
54
|
+
export const imageLeftIcon = renderIcon(ImageLeftIcon)
|
|
55
|
+
export const imageDefaultIcon = renderIcon(ImageDefaultIcon)
|
|
56
|
+
export const fileCorruptedIcon = renderIcon(FileCorruptedIcon)
|
|
57
|
+
export const draggableIcon = renderIcon(DraggableIcon)
|
|
58
|
+
export const translateIcon = renderIcon(TranslateIcon)
|
|
59
|
+
export const linkIcon = renderIcon(LinkIcon)
|
|
60
|
+
export const fileMainDocumentIcon = renderIcon(FileMainDocumentIcon)
|
|
61
|
+
export const tickIcon = renderIcon(TickIcon)
|
|
62
|
+
export const ORCIDIcon = renderIcon(ORCID)
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
export * from './commands'
|
|
18
|
+
export { ManuscriptOutline } from './components/outline/ManuscriptOutline'
|
|
19
|
+
export { OutlineItemIcon } from './components/outline/Outline'
|
|
20
|
+
export { TypeSelector } from './components/toolbar/type-selector/TypeSelector'
|
|
21
|
+
export { default as LanguageDropdown } from './components/LanguageDropdown'
|
|
22
|
+
export {
|
|
23
|
+
KeyboardShortcutsModal,
|
|
24
|
+
openKeyboardShortcuts,
|
|
25
|
+
} from './components/keyboard-shortcuts-modal/KeyboardShortcutsModal'
|
|
26
|
+
export * from './components/toolbar/ListMenuItem'
|
|
27
|
+
export * from './components/toolbar/InsertTableDialog'
|
|
28
|
+
export * from './menus'
|
|
29
|
+
export { CollabProvider } from './classes/collabProvider'
|
|
30
|
+
export { PopperManager } from './lib/popper'
|
|
31
|
+
export * from './toolbar'
|
|
32
|
+
export * from './lib/capabilities'
|
|
33
|
+
export * from './lib/navigation-utils'
|
|
34
|
+
export * from './lib/comments'
|
|
35
|
+
export * from './lib/files'
|
|
36
|
+
export * from './lib/footnotes'
|
|
37
|
+
export * from './lib/template'
|
|
38
|
+
export * from './lib/doc'
|
|
39
|
+
export * from './lib/media'
|
|
40
|
+
export type { FetchOEmbedHtml } from './configs/ManuscriptsEditor'
|
|
41
|
+
export * from './plugins/comments'
|
|
42
|
+
export { selectedSuggestionKey } from './plugins/selected-suggestion'
|
|
43
|
+
export * from './selection'
|
|
44
|
+
export * from './lib/utils'
|
|
45
|
+
export * from './lib/track-changes-utils'
|
|
46
|
+
export * from './useEditor'
|
|
47
|
+
export * from './lib/math'
|
|
48
|
+
export * from './lib/get-media-type'
|
|
49
|
+
export { objectsKey as objectsPluginKey } from './plugins/objects'
|
|
50
|
+
export { footnotesKey as footnotesPluginKey } from './plugins/footnotes'
|
|
51
|
+
export { bibliographyKey as bibliographyPluginKey } from './plugins/bibliography'
|
|
52
|
+
export {
|
|
53
|
+
searchReplaceKey as searchReplacePluginKey,
|
|
54
|
+
SearchReplacePluginState,
|
|
55
|
+
} from './plugins/search-replace'
|
|
56
|
+
export { detectInconsistencyKey as detectInconsistencyPluginKey } from './plugins/detect-inconsistency'
|
|
57
|
+
export { getNewMatch, getClosestMatch } from './plugins/search-replace/lib'
|
|
58
|
+
export { metadata, bibliographyItemTypes } from './lib/references'
|
|
59
|
+
export {
|
|
60
|
+
authorLabel,
|
|
61
|
+
affiliationLabel,
|
|
62
|
+
AffiliationAttrs,
|
|
63
|
+
ContributorAttrs,
|
|
64
|
+
} from './lib/authors'
|
|
65
|
+
export type { Inconsistency } from './plugins/detect-inconsistency'
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
isHighlightMarkerNode,
|
|
19
|
+
ManuscriptEditorState,
|
|
20
|
+
} from '@manuscripts/transform'
|
|
21
|
+
import { Selection } from 'prosemirror-state'
|
|
22
|
+
|
|
23
|
+
import { Dispatch, isTextSelection } from '../commands'
|
|
24
|
+
import { EditorAction } from '../types'
|
|
25
|
+
|
|
26
|
+
const skipHighlightNode =
|
|
27
|
+
(dir: number): EditorAction =>
|
|
28
|
+
(state: ManuscriptEditorState, dispatch?: Dispatch) => {
|
|
29
|
+
const { selection, tr } = state
|
|
30
|
+
|
|
31
|
+
if (isTextSelection(selection)) {
|
|
32
|
+
const { $anchor, $cursor } = selection
|
|
33
|
+
|
|
34
|
+
if ($cursor) {
|
|
35
|
+
const adjacentNode = dir === -1 ? $cursor.nodeBefore : $cursor.nodeAfter
|
|
36
|
+
|
|
37
|
+
if (adjacentNode && isHighlightMarkerNode(adjacentNode)) {
|
|
38
|
+
const $adjacentPos = tr.doc.resolve($anchor.pos + dir)
|
|
39
|
+
|
|
40
|
+
const adjacentSelection = Selection.findFrom($adjacentPos, dir, true)
|
|
41
|
+
|
|
42
|
+
if (adjacentSelection) {
|
|
43
|
+
// TODO: handle multiple adjacent markers
|
|
44
|
+
|
|
45
|
+
tr.setSelection(adjacentSelection)
|
|
46
|
+
|
|
47
|
+
if (dispatch) {
|
|
48
|
+
dispatch(tr)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const highlightKeymap: { [key: string]: EditorAction } = {
|
|
59
|
+
Backspace: skipHighlightNode(-1),
|
|
60
|
+
Delete: skipHighlightNode(1),
|
|
61
|
+
ArrowLeft: skipHighlightNode(-1),
|
|
62
|
+
ArrowRight: skipHighlightNode(1),
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export default highlightKeymap
|
|
@@ -0,0 +1,33 @@
|
|
|
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 { baseKeymap } from 'prosemirror-commands'
|
|
18
|
+
import { keymap } from 'prosemirror-keymap'
|
|
19
|
+
|
|
20
|
+
import highlightKeymap from './highlight'
|
|
21
|
+
import keywordKeymap from './keyword'
|
|
22
|
+
import listKeymap from './list'
|
|
23
|
+
import miscKeymap from './misc'
|
|
24
|
+
import titleKeymap from './title'
|
|
25
|
+
|
|
26
|
+
export default [
|
|
27
|
+
keymap(keywordKeymap),
|
|
28
|
+
keymap(listKeymap),
|
|
29
|
+
keymap(titleKeymap),
|
|
30
|
+
keymap(miscKeymap),
|
|
31
|
+
keymap(baseKeymap),
|
|
32
|
+
keymap(highlightKeymap),
|
|
33
|
+
]
|