From 620a7d196ada7e95c73418e92715076cfed39f76 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Aleksander=20=C5=81ukasz?=
 <aleksander.lukasz@nowoczesnapolska.org.pl>
Date: Wed, 6 Aug 2014 11:46:00 +0200
Subject: [PATCH] editor: canvas fix

---
 src/editor/plugins/core/core.js      | 11 ++++++++++-
 src/editor/plugins/core/core.test.js | 17 ++++++++++++++++-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/editor/plugins/core/core.js b/src/editor/plugins/core/core.js
index 76be9e8..3921635 100644
--- a/src/editor/plugins/core/core.js
+++ b/src/editor/plugins/core/core.js
@@ -224,7 +224,16 @@ plugin.documentExtension.documentNode.transformations = {
                     } else if(prev.is({tagName: 'span'})) {
                         if((txtNode = prev.getLastTextNode())) {
                             txt = txtNode.getText();
-                            txtNode.setText(txt.substr(0, txt.length-1));
+                            if(txt.length > 1) {
+                                txtNode.setText(txt.substr(0, txt.length-1));
+                            } else {
+                                if(txtNode.parent().contents().length === 1) {
+                                    txtNode.parent().detach();
+                                } else {
+                                    txtNode.detach();
+                                }
+
+                            }
                             return toret;
                         }
                     }
diff --git a/src/editor/plugins/core/core.test.js b/src/editor/plugins/core/core.test.js
index a33ae61..27a7254 100644
--- a/src/editor/plugins/core/core.test.js
+++ b/src/editor/plugins/core/core.test.js
@@ -546,7 +546,7 @@ describe('Keyboard interactions', function() {
             expect(selection.element.sameNode(getTextElement('has a cat', c))).to.equal(true);
             expect(selection.offset).to.equal(0);
         });
-        it('deletes span if it contains only one character', function() {
+        it('deletes span if it contains only one character (1)', function() {
             var c = getCanvasFromXML('<section>Alice <span>h</span> a cat</section>'),
                 k = new Keyboard(c);
 
@@ -561,6 +561,21 @@ describe('Keyboard interactions', function() {
             expect(selection.element.sameNode(getTextElement('Alice  a cat', c))).to.equal(true);
             expect(selection.offset).to.equal(6);
         });
+        it('deletes span if it contains only one character (2)', function() {
+            var c = getCanvasFromXML('<section><span>a</span><span>b</span></section>'),
+                k = new Keyboard(c);
+
+            k.withCaret('|b').press(K.BACKSPACE);
+
+            var rootContents = c.wlxmlDocument.root.contents();
+            expect(rootContents.length).to.equal(1);
+            expect(rootContents[0].contents()[0].getText()).to.equal('b');
+
+            var selection = c.getSelection();
+            expect(selection.type).to.equal('caret');
+            expect(selection.element.sameNode(getTextElement('b', c))).to.equal(true);
+            expect(selection.offset).to.equal(0);
+        });
     });
 
     describe('splitting with enter', function() {
-- 
2.20.1