$.extend(Canvas.prototype, Backbone.Events, {
+ createElementType: function(elementPrototype) {
+ /* TODO: reconcile this with ElementsRegister behavior */
+ var Constructor = function() {
+ documentElement.DocumentNodeElement.apply(this, Array.prototype.slice.call(arguments, 0));
+ };
+ Constructor.prototype = elementPrototype;
+ return Constructor;
+ },
+
getElementOffset: function(element) {
return element.dom.offset().top - this.dom.offset().top;
},
//return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
return $element.data('canvas-element');
}
+
+ /* experimental */
+ if($element.parent().data('canvas-element')) {
+ return $element.parent().data('canvas-element');
+ }
},
reloadRoot: function() {
triggerKeyEvent: function(keyEvent, selection) {
selection = selection || this.getSelection();
- if(selection && (selection.type === 'caret' || selection.type === 'textSelection') && selection.toDocumentFragment().isValid()) {
+ if(selection && (
+ (selection.type === 'caret' || selection.type === 'textSelection') && selection.toDocumentFragment().isValid()
+ || selection.type == 'nodeSelection')) {
keyboard.handleKeyEvent(keyEvent, selection);
}
},
if(mutation.target.data === '') {
mutation.target.data = utils.unicode.ZWS;
}
- else if(mutation.oldValue === utils.unicode.ZWS) {
+ if(mutation.target.data === mutation.oldValue) {
+ return; // shouldn't happen, but better be safe
+ }
+ if(mutation.oldValue === utils.unicode.ZWS) {
mutation.target.data = mutation.target.data.replace(utils.unicode.ZWS, '');
canvas._moveCaretToTextElement(canvas.getDocumentElement(mutation.target), 'end');
}
return this.getSelectionAnchor();
},
getSelectionStart: function() {
- return this.getSelectionBoundry('start');
+ return this.getSelectionBoundary('start');
},
getSelectionEnd: function() {
- return this.getSelectionBoundry('end');
+ return this.getSelectionBoundary('end');
},
getSelectionAnchor: function() {
- return this.getSelectionBoundry('anchor');
+ return this.getSelectionBoundary('anchor');
},
getSelectionFocus: function() {
- return this.getSelectionBoundry('focus');
+ return this.getSelectionBoundary('focus');
},
- getSelectionBoundry: function(which) {
+ getSelectionBoundary: function(which) {
/* globals window */
var selection = window.getSelection(),
anchorElement = this.canvas.getDocumentElement(selection.anchorNode),