], function(documentElement, utils) {
'use strict';
-
+/* globals gettext */
var KEYS = {
ENTER: 13,
event.preventDefault();
var cursor = canvas.getCursor(),
position = cursor.getPosition(),
- element = position.element,
- added;
+ element = position.element;
if(Object.keys(cursor.getPosition()).length === 0) {
var currentElement = canvas.getCurrentNodeElement();
if(currentElement) {
- canvas.wlxmlDocument.startTransaction();
- added = currentElement.data('wlxmlNode').after({
- tagName: currentElement.getWlxmlTag() || 'div',
- attrs: {'class': currentElement.getWlxmlClass() || 'p'}
+ canvas.wlxmlDocument.transaction(function() {
+ var added = currentElement.wlxmlNode.after({
+ tagName: currentElement.wlxmlNode.getTagName() || 'div',
+ attrs: {'class': currentElement.getWlxmlClass() || 'p'}
+ });
+ added.append({text:''});
+ return added;
+ }, {
+ metadata: {
+ description: gettext('Splitting text')
+ },
+ success: function(ret) {
+ canvas.setCurrentElement(utils.getElementForNode(ret), {caretTo: 'start'});
+ }
});
- added.append({text:''});
- canvas.wlxmlDocument.endTransaction();
- canvas.setCurrentElement(utils.findCanvasElement(added), {caretTo: 'start'});
+
}
return;
}
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'});
+ canvas.wlxmlDocument.transaction(function() {
+ var added = element.wlxmlNode.after(
+ {tagName: element.wlxmlNode.getTagName() || 'div', attrs: {'class': element.getWlxmlClass() || 'p'}}
+ );
+ added.append({text: ''});
+ return added;
+ }, {
+ metadata: {
+ description: gettext('Splitting text')
+ },
+ success: function(ret) {
+ canvas.setCurrentElement(utils.getElementForNode(ret), {caretTo: 'start'});
+ }
+ });
} else {
// goto = nodes.second;
// gotoOptions = {caretTo: 'start'};
// }
+ var node = position.element.wlxmlNode,
+ result, goto, gotoOptions;
+
+ node.document.transaction(function() {
+ result = position.element.wlxmlNode.breakContent({offset: position.offset});
+ }, {
+ metadata: {
+ description: gettext('Splitting text')
+ }
+ });
- var result = position.element.data('wlxmlNode').breakContent({offset: position.offset}),
- goto, gotoOptions;
if(result.emptyText) {
goto = result.emptyText;
gotoOptions = {};
gotoOptions = {caretTo: 'start'};
}
- canvas.setCurrentElement(utils.findCanvasElement(goto), gotoOptions);
+ canvas.setCurrentElement(utils.getElementForNode(goto), gotoOptions);
}
}
}
direction = 'below';
caretTo = 'start';
}
- var el = canvas.getDocumentElement(utils.nearestInDocumentOrder('[document-text-element]', direction, element.dom()[0]));
- canvas.setCurrentElement(el, {caretTo: caretTo});
+ var el = canvas.getDocumentElement(utils.nearestInDocumentOrder('[document-text-element]', direction, element.dom[0]));
+ if(el) {
+ canvas.setCurrentElement(el, {caretTo: caretTo});
+ }
}
},
keyup: function(event, canvas) {
var cursor = canvas.getCursor(),
position = canvas.getCursor().getPosition(),
element = position.element,
- node = element.data('wlxmlNode'),
+ node = element ? element.wlxmlNode : null,
direction = 'above',
caretTo = 'end',
goto;
+ if(!element || !node) {
+ return;
+ }
if(event.which === KEYS.DELETE) {
direction = 'below';
if(direction === 'above') {
if(start.offsetAtBeginning) {
- goto = start.element.getNearestTextElement('above');
+ goto = canvas.getNearestTextElement('above', start.element);
caretTo = 'end';
} else {
goto = start.element;
}
} else {
if(end.offsetAtEnd) {
- goto = start.element.getNearestTextElement('below');
+ goto = canvas.getNearestTextElement('below', start.element);
caretTo = 'start';
} else {
goto = end.element;
canvas.wlxmlDocument.deleteText({
from: {
- node: start.element.data('wlxmlNode'),
+ node: start.element.wlxmlNode,
offset: start.offset
},
to: {
- node: end.element.data('wlxmlNode'),
+ node: end.element.wlxmlNode,
offset: end.offset
}
});
event.preventDefault();
var parent = element.parent(),
grandParent = parent ? parent.parent() : null;
+ if(!grandParent && parent.children().length === 1) {
+ return;
+ }
if(parent.children().length === 1 && parent.children()[0].sameNode(element)) {
if(grandParent && grandParent.children().length === 1) {
- goto = grandParent.data('wlxmlNode').append({text: ''});
+ goto = grandParent.wlxmlNode.append({text: ''});
} else {
- goto = element.getNearestTextElement(direction);
+ goto = canvas.getNearestTextElement(direction, element);
}
- parent.data('wlxmlNode').detach();
+ parent.wlxmlNode.detach();
} else {
- goto = element.getNearestTextElement(direction);
- element.data('wlxmlNode').detach();
+ goto = canvas.getNearestTextElement(direction, element);
+ element.wlxmlNode.detach();
}
canvas.setCurrentElement(goto, {caretTo: caretTo});
- canvas.publisher('contentChanged');
}
else if(cursorAtOperationEdge) {
if(direction === 'below') {
- element = element.getNearestTextElement(direction);
+ element = canvas.getNearestTextElement(direction, element);
}
if(element) {
- goto = element.data('wlxmlNode').mergeContentUp();
- canvas.setCurrentElement(goto.node, {caretTo: goto.offset});
+ goto = element.wlxmlNode.mergeContentUp();
+ if(goto) {
+ canvas.setCurrentElement(goto.node, {caretTo: goto.offset});
+ }
}
event.preventDefault();
}
+ }, {
+ metadata: {
+ description: gettext('Remove text')
+ }
});
}
});