From 4650efdafb4213141a8dff3960c8b01f624e4c1b Mon Sep 17 00:00:00 2001 From: john <johnbarlas39@gmail.com> Date: Wed, 11 Jan 2017 21:36:15 +0200 Subject: [PATCH] author cannot toggle track changes --- .../track_change/TrackChangeComponent.js | 23 +++++++++++++++--- .../track_change/TrackChangeControlCommand.js | 2 +- .../track_change/TrackChangeControlTool.js | 13 ++++++++++ .../track_change/TrackChangePackage.js | 5 ++-- .../track_change/TrackChangesProvider.js | 16 +++++++++---- .../elements/track_change/trackChange.scss | 24 +++++++++++-------- 6 files changed, 63 insertions(+), 20 deletions(-) diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js index 763c6fa..605a73b 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangeComponent.js @@ -3,7 +3,8 @@ import { AnnotationComponent } from 'substance' class TrackChangeComponent extends AnnotationComponent { render ($$) { const { id, status } = this.props.node - const trackChangesView = this.context.controller.state.trackChangesView + const canAct = this.canAct() + const viewMode = this.getViewMode() const accept = $$('a') .addClass('sc-track-item-accept') @@ -26,11 +27,12 @@ class TrackChangeComponent extends AnnotationComponent { .attr('data-id', id) .addClass(this.getClassNames()) .append(this.props.children) - .append(container) + + if (canAct) el.append(container) el.addClass('sc-track-change-' + status) - if (trackChangesView === false) { + if (viewMode === false) { if (status === 'delete') el.addClass('sc-track-delete-hide') if (status === 'add') el.addClass('sc-track-add-show') } @@ -41,6 +43,11 @@ class TrackChangeComponent extends AnnotationComponent { return el } + canAct () { + const provider = this.getProvider() + return provider.canAct() + } + accept () { this.resolve('accept') } @@ -56,10 +63,20 @@ class TrackChangeComponent extends AnnotationComponent { provider.resolve(annotation, action) } + getController () { + return this.context.controller + } + getProvider () { return this.context.trackChangesProvider } + getViewMode () { + const controller = this.getController() + const { trackChangesView } = controller.state + return trackChangesView + } + } export default TrackChangeComponent diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js index fb48eb0..a955efb 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlCommand.js @@ -9,8 +9,8 @@ class TrackChangeControlCommand extends Command { return newState } + execute (params, context) { - console.log('in execute') const surface = context.surfaceManager.getSurface('body') surface.send('trackChangesUpdate') return true diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js index e12deb6..b594f52 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangeControlTool.js @@ -3,8 +3,14 @@ import { Tool } from 'substance' class TrackChangeControlTool extends Tool { renderButton ($$) { const el = super.renderButton($$) + let trackChangesMode = this.isTrackChangesOn() if (trackChangesMode === true) el.addClass('track-changes-active') + + if (!this.canAct()) { + console.log('deffo not') + el.attr('disabled', true) + } return el } @@ -19,6 +25,13 @@ class TrackChangeControlTool extends Tool { if (!surface) return return surface.props.trackChanges } + + canAct () { + console.log('can act?') + const provider = this.context.trackChangesProvider + console.log(provider.canAct()) + return provider.canAct() + } } TrackChangeControlTool.type = 'track-change-enable' diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js b/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js index 1b79646..1be7351 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangePackage.js @@ -15,11 +15,12 @@ export default { config.addComponent(TrackChange.type, TrackChangeComponent) config.addConverter('html', TrackChangeHTMLConverter) - config.addTool('track-change-enable', TrackChangeControlTool, { + // TODO -- both tools should go to the same target + config.addTool('Toggle recording changes', TrackChangeControlTool, { target: 'track-change-enable' }) - config.addTool('track-change-toggle-view', TrackChangeControlViewTool, { + config.addTool('Toggle tracked changes view', TrackChangeControlViewTool, { target: 'track-change-toggle-view' }) diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js index 4ab5116..4237c39 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js @@ -4,12 +4,14 @@ import { filter, find, findIndex, + includes, keys, last, map, maxBy, minBy, pickBy, + some, sortBy } from 'lodash' @@ -546,14 +548,14 @@ class TrackChangesProvider extends TOCProvider { } computeEntries () { - let doc = this.getDocument() - let nodes = doc.getNodes() + const doc = this.getDocument() + const nodes = doc.getNodes() - let changes = pickBy(nodes, node => { + const changes = pickBy(nodes, node => { return node.type === 'track-change' }) - let entries = this.sortNodes(changes) + const entries = this.sortNodes(changes) return entries } @@ -606,6 +608,12 @@ class TrackChangesProvider extends TOCProvider { surface.setSelection(annotation.getSelection()) } + canAct () { + const { user } = this.config + const accepted = ['admin', 'production-editor', 'copy-editor'] + return some(accepted, (role) => includes(user.roles, role)) + } + /* ANNOTATION HELPERS diff --git a/app/components/SimpleEditor/elements/track_change/trackChange.scss b/app/components/SimpleEditor/elements/track_change/trackChange.scss index d135232..ed46fc3 100644 --- a/app/components/SimpleEditor/elements/track_change/trackChange.scss +++ b/app/components/SimpleEditor/elements/track_change/trackChange.scss @@ -2,16 +2,12 @@ $blue: #4a90e2; $red: #f00; $yellow: #f7f70c; - - .se-selection-fragment { - .sc-accept-reject-container:only-of-type { - display: none; - } +.se-selection-fragment { + .sc-accept-reject-container:only-of-type { + display: none; + } } - - - .sc-track-change-add { color: $blue; text-decoration: none; @@ -30,8 +26,8 @@ $yellow: #f7f70c; color: inherit !important; .sc-accept-reject-container { - display: none; -} + display: none; + } } .sc-track-item-accept::after { @@ -66,3 +62,11 @@ $yellow: #f7f70c; margin-top: 20px; position: absolute; } + +.sm-target-track-change-enable { + .se-tool { + button { + cursor: default; + } + } +} -- GitLab