if(Object.keys(cursor.getPosition()).length === 0) {
var currentElement = canvas.getCurrentNodeElement();
if(currentElement) {
+ canvas.wlxmlDocument.startTransaction();
added = currentElement.data('wlxmlNode').after({
- tag: currentElement.getWlxmlTag() || 'div',
+ tagName: currentElement.getWlxmlTag() || 'div',
attrs: {'class': currentElement.getWlxmlClass() || 'p'}
});
added.append({text:''});
+ canvas.wlxmlDocument.endTransaction();
canvas.setCurrentElement(utils.findCanvasElement(added), {caretTo: 'start'});
}
return;
if(element instanceof documentElement.DocumentTextElement) {
element = element.parent();
}
+
+ canvas.wlxmlDocument.startTransaction();
added = element.data('wlxmlNode').after(
{tagName: element.getWlxmlTag() || 'div', attrs: {'class': element.getWlxmlClass() || 'p'}}
);
added.append({text: ''});
+ canvas.wlxmlDocument.endTransaction();
canvas.setCurrentElement(utils.findCanvasElement(added), {caretTo: 'start'});
} else {
var result = position.element.data('wlxmlNode').breakContent({offset: position.offset}),
goto, gotoOptions;
if(result.emptyText) {
- goto = result.createdEmpty;
+ goto = result.emptyText;
gotoOptions = {};
} else {
goto = result.second;
caretTo = false;
if(!element) {
// Chrome hack
- var direction;
- if(event.which === KEYS.ARROW_LEFT || event.which === KEYS.ARROW_UP) {
- direction = 'above';
- caretTo = 'end';
- } else {
- direction = 'below';
- caretTo = 'start';
+
+ var moves = [{direction: 'above', caretTo: 'end'}, {direction: 'below', caretTo: 'start'}];
+ if(event.which === KEYS.ARROW_RIGHT || event.which === KEYS.ARROW_DOWN) {
+ moves.reverse();
}
- /* globals window */
- element = canvas.getDocumentElement(utils.nearestInDocumentOrder('[document-text-element]:visible', direction, window.getSelection().focusNode));
+ moves.some(function(move) {
+ /* globals window */
+ var targetNode = utils.nearestInDocumentOrder('[document-text-element]:visible', move.direction, window.getSelection().focusNode);
+ if(targetNode) {
+ element = canvas.getDocumentElement(targetNode);
+ caretTo = move.caretTo;
+ return true; // break
+ }
+ });
+ }
+ if(element) {
+ canvas.setCurrentElement(element, {caretTo: caretTo});
}
- canvas.setCurrentElement(element, {caretTo: caretTo});
}
});
keydown: function(event, canvas) {
var cursor = canvas.getCursor(),
position = canvas.getCursor().getPosition(),
- element = position.element;
+ element = position.element,
+ node = element.data('wlxmlNode');
if(cursor.isSelecting() && !cursor.isSelectingWithinElement()) {
event.preventDefault();
return element.getText().length === 1 || selectsWholeTextElement(cursor);
};
+ canvas.wlxmlDocument.startTransaction();
+
if(willDeleteWholeText()) {
event.preventDefault();
- element.setText('');
+ node.setText('');
}
else if(element.isEmpty()) {
// todo
event.preventDefault();
}
+ canvas.wlxmlDocument.endTransaction();
+
}
});