8 var gridToggled = false;
 
  12     register: function(name, command) {
 
  13         this._cmds[name] = command;
 
  16     run: function(name, params, canvas) {
 
  17         return this._cmds[name](canvas, params);
 
  21 commands.register('unwrap-node', function(canvas) {
 
  22     var cursor = canvas.getCursor(),
 
  23         selectionStart = cursor.getSelectionStart(),
 
  24         selectionEnd = cursor.getSelectionEnd(),
 
  25         parent1 = selectionStart.element.parent() || undefined,
 
  26         parent2 = selectionEnd.element.parent() || undefined;
 
  28     if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) {
 
  29         var selectionAnchor = cursor.getSelectionAnchor();
 
  30         canvas.list.extractItems({element1: parent1, element2: parent2});
 
  31         canvas.setCurrentElement(selectionAnchor.element, {caretTo: selectionAnchor.offset});
 
  32     } else if(!cursor.isSelecting()) {
 
  33         var toUnwrap = cursor.getPosition().element,
 
  34             parent = toUnwrap.unwrap();
 
  35         canvas.setCurrentElement(parent);
 
  39 commands.register('wrap-node', function(canvas) {
 
  40     var cursor = canvas.getCursor(),
 
  41         selectionStart = cursor.getSelectionStart(),
 
  42         selectionEnd = cursor.getSelectionEnd(),
 
  43         parent1 = selectionStart.element.parent() || undefined,
 
  44         parent2 = selectionEnd.element.parent() || undefined;
 
  46     if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) {
 
  47         canvas.list.create({element1: parent1, element2: parent2});
 
  51 commands.register('toggle-list', function(canvas, params) {
 
  52     var cursor = canvas.getCursor(),
 
  53         selectionStart = cursor.getSelectionStart(),
 
  54         selectionEnd = cursor.getSelectionEnd(),
 
  55         parent1 = selectionStart.element.parent() || undefined,
 
  56         parent2 = selectionEnd.element.parent() || undefined;
 
  59         var selectionFocus = cursor.getSelectionFocus();
 
  60         canvas.list.create({element1: parent1, element2: parent2});
 
  61         canvas.setCurrentElement(selectionFocus.element, {caretTo: selectionFocus.offset});
 
  63         if(canvas.list.areItemsOfTheSameList({element1: parent1, element2: parent2})) {
 
  64             canvas.list.extractItems({element1: parent1, element2: parent2, merge: false});
 
  69 commands.register('toggle-grid', function(canvas, params) {
 
  70     canvas.doc().dom().find('[wlxml-tag]').toggleClass('rng-common-hoveredNode', params.toggle);
 
  71     gridToggled = params.toggle;
 
  74 commands.register('newNodeRequested', function(canvas, params) {
 
  75     var cursor = canvas.getCursor(),
 
  76         selectionStart = cursor.getSelectionStart(),
 
  77         selectionEnd = cursor.getSelectionEnd();
 
  79     if(cursor.isSelecting() && cursor.isSelectingSiblings()) {
 
  80         if(cursor.isSelectingWithinElement()) {
 
  81             var newElement = selectionStart.element.wrapWithNodeElement({tag: params.wlxmlTag, klass: params.wlxmlClass, start: selectionStart.offset, end: selectionEnd.offset}),
 
  82                 caretTo = selectionStart.offset < selectionEnd.offset ? 'start' : 'end';
 
  83             canvas.setCurrentElement(newElement.children()[0], {caretTo: caretTo});
 
  86             var parent = selectionStart.element.parent(),
 
  87                 caretTo = selectionStart.element.sameNode(cursor.getSelectionAnchor().element) ? 'end' : 'start';
 
  89             var wrapper = canvas.wrapText({
 
  91                 _with: {tag: params.wlxmlTag, klass: params.wlxmlClass},
 
  92                 offsetStart: selectionStart.offset,
 
  93                 offsetEnd: selectionEnd.offset,
 
  94                 textNodeIdx: [parent.childIndex(selectionStart.element), parent.childIndex(selectionEnd.element)]
 
  97             canvas.setCurrentElement(wrapper.children()[caretTo === 0 ? 0 : wrapper.children().length - 1], {caretTo: caretTo});
 
 104     run: function(name, params, canvas) {
 
 105         return commands.run(name, params, canvas);