Skip to content
Snippets Groups Projects
Commit f0f9e42a authored by john's avatar john
Browse files

handle addition annotation in firefox

parent 0905f37a
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,7 @@ import { ...@@ -10,7 +10,7 @@ import {
class ContainerEditor extends SubstanceContainerEditor { class ContainerEditor extends SubstanceContainerEditor {
render ($$) { render ($$) {
// TODO -- better ways to write this in es6 // TODO -- call with super
var el = Surface.prototype.render.call(this, $$) var el = Surface.prototype.render.call(this, $$)
var doc = this.getDocument() var doc = this.getDocument()
...@@ -83,6 +83,17 @@ class ContainerEditor extends SubstanceContainerEditor { ...@@ -83,6 +83,17 @@ class ContainerEditor extends SubstanceContainerEditor {
}) })
} }
onTextInputShim (event) {
if (!this.props.trackChanges) return super.onTextInputShim(event)
this.handleTracking({
event: event,
status: 'add',
surfaceEvent: 'input',
keypress: true
})
}
_handleDeleteKey (event) { _handleDeleteKey (event) {
if (!this.props.trackChanges) return super._handleDeleteKey(event) if (!this.props.trackChanges) return super._handleDeleteKey(event)
...@@ -103,15 +114,48 @@ class ContainerEditor extends SubstanceContainerEditor { ...@@ -103,15 +114,48 @@ class ContainerEditor extends SubstanceContainerEditor {
}) })
} }
shouldIgnoreKeypress (event) {
// see Surface's onTextInputShim for comments
if (
event.which === 0 ||
event.charCode === 0 ||
event.keyCode === keys.TAB ||
event.keyCode === keys.ESCAPE ||
Boolean(event.metaKey) ||
(Boolean(event.ctrlKey) ^ Boolean(event.altKey))
) {
return true
}
return false
}
getTextFromKeypress (event) {
let character = String.fromCharCode(event.which)
if (!event.shiftKey) character = character.toLowerCase()
if (character.length === 0) return null
return character
}
handleTracking (options) { handleTracking (options) {
const trackChangesProvider = this.context.trackChangesProvider const trackChangesProvider = this.context.trackChangesProvider
const { event, surfaceEvent } = options const { event, keypress, surfaceEvent } = options
event.preventDefault() if (!keypress) {
event.stopPropagation() event.preventDefault()
event.stopPropagation()
}
if (surfaceEvent === 'input') { if (surfaceEvent === 'input') {
if (!event.data) return if (keypress) {
if (this.shouldIgnoreKeypress(event)) return
const text = this.getTextFromKeypress(event)
event.data = text
event.preventDefault()
event.stopPropagation()
}
if (!keypress && !event.data) return
this._state.skipNextObservation = true this._state.skipNextObservation = true
} }
......
import { pickBy, clone, map, sortBy, findIndex } from 'lodash'
import { AnnotationComponent, createAnnotation, deleteNode } from 'substance' import { AnnotationComponent, createAnnotation, deleteNode } from 'substance'
import {pickBy, clone, map, sortBy, findIndex} from 'lodash'
class TrackChangeComponent extends AnnotationComponent { class TrackChangeComponent extends AnnotationComponent {
render ($$) { render ($$) {
const { status } = this.props.node const { status } = this.props.node
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment