diff --git a/app/components/SimpleEditor/Editor.js b/app/components/SimpleEditor/Editor.js index 27239f72a5515e5fbb80323e165e5be39cf68728..675b040c47730efa591b8379ac8c69200c3fe4ef 100644 --- a/app/components/SimpleEditor/Editor.js +++ b/app/components/SimpleEditor/Editor.js @@ -65,6 +65,7 @@ class Editor extends ProseEditor { // left side: editor and toolbar let toolbar = this._renderToolbar($$) + let toolbarLeft = this._renderToolbarLeft($$) let editor = this._renderEditor($$) let SplitPane = this.componentRegistry.get('split-pane') @@ -107,6 +108,8 @@ class Editor extends ProseEditor { commentsPane ) + let sideNav = $$('div').addClass('sidenav').append(toolbarLeft) + var contentPanel = $$(ScrollPane, { name: 'contentPanel', // contextMenu: 'custom', @@ -114,8 +117,9 @@ class Editor extends ProseEditor { }) .append(editorWithComments, $$(Overlay), - $$(ContextMenu) + $$(ContextMenu), // $$(Dropzones) + sideNav ) .attr('id', 'content-panel') .ref('contentPanel') @@ -167,7 +171,7 @@ class Editor extends ProseEditor { trackChanges: this.props.trackChanges, trackChangesView: this.state.trackChangesView, toolGroups: [ - 'text', + // 'text', 'document', 'annotations', 'default', @@ -179,6 +183,18 @@ class Editor extends ProseEditor { .append(viewMode) } + _renderToolbarLeft ($$) { + let commandStates = this.commandManager.getCommandStates() + return $$('div').addClass('se-toolbar-wrapper').append( + $$(Toolbar, { + commandStates: commandStates, + trackChanges: this.props.trackChanges, + trackChangesView: this.state.trackChangesView, + toolGroups: ['text'] + }).ref('toolbarLeft') + ) + } + _renderEditor ($$) { const configurator = this.props.configurator const editing = this.props.disabled ? 'selection' : 'full' diff --git a/app/components/SimpleEditor/SimpleEditor.jsx b/app/components/SimpleEditor/SimpleEditor.jsx index 05cbd0a49475b97f532e6843851835ca5a0aa881..dd008f79880634143663094f6a6fb5c041258aa8 100644 --- a/app/components/SimpleEditor/SimpleEditor.jsx +++ b/app/components/SimpleEditor/SimpleEditor.jsx @@ -44,6 +44,7 @@ export default class SimpleEditor extends React.Component { const importer = configurator.createImporter('html') const doc = importer.importDocument(source) + const editorSession = new EditorSession(doc, { configurator: configurator }) diff --git a/app/components/SimpleEditor/SimpleEditor.scss b/app/components/SimpleEditor/SimpleEditor.scss index 07b4ec5be3743d6d32e6a7c4c2bb484a875954c4..92210ae6dab2d669bae21f4a10d87565257b3bed 100644 --- a/app/components/SimpleEditor/SimpleEditor.scss +++ b/app/components/SimpleEditor/SimpleEditor.scss @@ -7,7 +7,6 @@ $fa-font-path: '~font-awesome/fonts'; @import './panes/panes'; @import './miniEditor/miniEditor'; - // grays $border: #ccc; $dark-gray: #999; @@ -52,6 +51,7 @@ $active-blue: #4a90e2; .sc-comment-pane-list li .comment-list .single-comment-row { padding: 3px 12px; } + .sc-overlay .se-active-tools .sc-overlay-bubble .sc-comment-icon { top: 0; } @@ -64,6 +64,7 @@ $active-blue: #4a90e2; position: absolute; right: 0; top: 0; + .se-toolbar-wrapper .sc-toolbar { background-color: $primary; border: 1px solid $border; @@ -73,6 +74,7 @@ $active-blue: #4a90e2; padding-left: 0; vertical-align: middle; width: 100%; + @-moz-document url-prefix() { .sc-tool-group > .sc-switch-text-type { margin: 0; @@ -80,16 +82,17 @@ $active-blue: #4a90e2; top: 8px; } } - .sm-target-text { - bottom: 5px; + // bottom: 5px; height: 100%; padding: 0; position: relative; .sc-switch-text-type { + bottom: 5px; margin-left: 1px; width: 150px; + button { color: $transparent-black; height: inherit; @@ -106,11 +109,14 @@ $active-blue: #4a90e2; } .se-options { - top: 36px; + background: transparent; + border: 0; + box-shadow: none; + top: 27px; } .se-option { - background-color: $white; + background-color: #E8E8E8; border: 0; font-family: 'Fira Sans'; } @@ -118,7 +124,6 @@ $active-blue: #4a90e2; } // end dropdown .sm-target-track-change-enable { - button { background-color: $inactive-grey; border-radius: 0; @@ -160,11 +165,13 @@ $active-blue: #4a90e2; button::after { content: 'Changes View Off'; } + .track-changes-view-active { background-color: #228b46; color: $white; padding: 0 19px } + .track-changes-view-active::after { content: 'Changes View On'; } @@ -226,19 +233,57 @@ $active-blue: #4a90e2; background-color: $primary; border-right: 1px solid $light-gray; margin-top: 1px; - } + .sidenav .sc-toolbar ul li.se-option.active { + background-color: #d8d8d8; + } + + .sidenav { + background-color: #e8e8e8; + // box-shadow: 0 0 12px $dark-gray; + box-shadow: 2px 0px 1px -1px #ccc; + height: 100%; + left: 0; + margin-top: 149px; + overflow-x: hidden; + position: fixed; + top: 0; + width: 128px; + z-index: 1; + + .sc-toolbar { + background: transparent; + border: 0; + + ul { + margin: 0; + padding: 0; + + li.se-option { + padding: 3px; + } + } + + .sc-switch-text-type { + bottom: 0px; + margin: 0; + padding: 0; + width: 140px; + } + } + } + } div.se-content { - color: $transparent-black; - font-family: 'Fira Sans'; - word-wrap: break-word; background-color: $white; box-shadow: 0 0 8px $dark-gray; - margin: 1.5% 14% 7%; + color: $transparent-black; + font-family: 'Fira Sans'; + margin: 1.5% 17.8% 7%; min-height: 100vh; padding: 3% 4% 1%; transition: .3s; + word-wrap: break-word; ::selection { background: $light-gray; @@ -287,8 +332,8 @@ $active-blue: #4a90e2; .sc-has-comments { div.se-content { - margin: 1.5% 27% 5% 1%; - transition: .3s; + margin: 1.5% 23.6% 5% 12%; + transition: .3s; } } diff --git a/app/components/SimpleEditor/config.js b/app/components/SimpleEditor/config.js index 4a0825ae6625557d29902d434c5cdc7dd8e93074..2c092e15b05054985031140d19df461d51e24ec6 100644 --- a/app/components/SimpleEditor/config.js +++ b/app/components/SimpleEditor/config.js @@ -12,16 +12,14 @@ import { SpellCheckPackage, StrongPackage, SubscriptPackage, - SuperscriptPackage, - SwitchTextTypePackage + SuperscriptPackage } from 'substance' -// console.log(BlockquotePackage) - // My Elements import CommentPackage from './elements/comment/CommentPackage' import ExtractPackage from './elements/extract/ExtractPackage' import ImagePackage from './elements/images/ImagePackage' +import LeftSwitchTextTypePackage from './elements/left_switch_text_type/LeftSwitchTextTypePackage' import ListPackage from './elements/list/ListPackage' import NotePackage from './elements/note/NotePackage' import SourceNotePackage from './elements/source_note/SourceNotePackage' @@ -40,7 +38,6 @@ let config = { noBaseStyles: options.noBaseStyles }) - config.import(SwitchTextTypePackage) config.import(ParagraphPackage) config.import(HeadingPackage) config.import(EmphasisPackage) @@ -54,6 +51,7 @@ let config = { config.import(CommentPackage) config.import(ExtractPackage) config.import(ImagePackage) + config.import(LeftSwitchTextTypePackage) config.import(LinkPackage) config.import(ListPackage) config.import(NotePackage) diff --git a/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypePackage.js b/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypePackage.js new file mode 100644 index 0000000000000000000000000000000000000000..07d8c896cd5e299afefb95c98020806252cc7781 --- /dev/null +++ b/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypePackage.js @@ -0,0 +1,11 @@ +import {SwitchTextTypeCommand} from 'substance' +import LeftSwitchTextTypeTool from './LeftSwitchTextTypeTool' + +export default { + name: 'switch-text-type', + configure: function (config, options) { + config.addToolGroup('text') + config.addCommand('switch-text-type', SwitchTextTypeCommand) + config.addTool('switch-text-type', LeftSwitchTextTypeTool, {toolGroup: options.toolGroup || 'text'}) + } +} diff --git a/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypeTool.js b/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypeTool.js new file mode 100644 index 0000000000000000000000000000000000000000..b503670091017358bd715ee4bd45d3b0eb35603e --- /dev/null +++ b/app/components/SimpleEditor/elements/left_switch_text_type/LeftSwitchTextTypeTool.js @@ -0,0 +1,60 @@ +import { forEach, Tool } from 'substance' + +class LeftSwitchTextTypeTool extends Tool { + + constructor (...args) { + super(...args) + let text = this.context.editorSession.configurator.config.textTypes + this.extendProps({textTypes: text}) + } + + didMount (...args) { + super.didMount(...args) + } + + render ($$) { + let labelProvider = this.context.labelProvider + let el = $$('ul').addClass('sc-switch-text-type') + + forEach(this.props.textTypes, function (textType) { + let item = $$('li') + .addClass('sm-' + textType.spec.name) + .addClass('se-option') + .attr('data-type', textType.spec.name) + .append(labelProvider.getLabel(textType.spec.name)) + .on('click', this.handleClick) + + item.ref('li-' + textType.spec.name) + + if (this.props.currentTextType && + textType.spec.name === this.props.currentTextType.name) { + item.addClass('active') + } + + el.append(item) + }.bind(this)) + + if (this.props.currentTextType && + this.props.currentTextType.name === 'container-selection') { + el.addClass('sm-disabled') + } + + return el + } + + executeCommand (textType) { + this.context.commandManager.executeCommand(this.getCommandName(), { + textType: textType + }) + } + + handleClick (e) { + e.preventDefault() + this.executeCommand(e.currentTarget.dataset.type) + } + +} + +LeftSwitchTextTypeTool.command = 'switch-text-type' + +export default LeftSwitchTextTypeTool diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js index d5b1d6cdee1dc99f294c20bd7ad15be67cf40bc7..a3ab7adfa9bf1b0a0eb93ba0ac0cb039c7e5fb26 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js @@ -1,6 +1,11 @@ import { Tool } from 'substance' class TrackChangeControlTool extends Tool { + + getClassNames () { + return 'sm-target-track-change-enable' + } + renderButton ($$) { const el = super.renderButton($$) diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlViewTool.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlViewTool.js index 9bbba4442ce36b323a9540c787c4bdf75c4a5666..83f007296d978af289b9b561491a1e1f330f01d0 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlViewTool.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlViewTool.js @@ -1,6 +1,10 @@ import { Tool } from 'substance' class TrackChangeControlViewTool extends Tool { + + getClassNames () { + return 'sm-target-track-change-toggle-view' + } renderButton ($$) { const el = super.renderButton($$) if (this.getViewMode()) el.addClass('track-changes-view-active') @@ -15,8 +19,8 @@ class TrackChangeControlViewTool extends Tool { getViewMode () { const editor = this.context.editor - const { trackChangesView } = editor.state + return trackChangesView } } diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js index 8e7ebe93a759fec60fd4751fd5211198f647c1e1..4406615c2b9d1a97bd1d2d783a4c9826fa22a826 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js @@ -660,7 +660,6 @@ class TrackChangesProvider extends TOCProvider { getAllExistingTrackAnnotations () { const editorSession = this.getEditorSession() - // const selectionState = documentSession.getSelectionState() const selectionState = editorSession.getSelectionState() const annotations = selectionState.getAnnotationsForType('track-change') return annotations @@ -762,7 +761,7 @@ class TrackChangesProvider extends TOCProvider { // const lastChange = last(undoneChanges) // const op = last(lastChange.ops) // - // const isTrack = op.path[0].split('-').slice(0, -1).join('-') === 'track-change' + // const isTrack = op.path[0].split('-').slice(0, -1).join('-') === 'track-change } /*