From: Aleksander Ɓukasz Date: Wed, 6 Aug 2014 09:46:00 +0000 (+0200) Subject: editor: canvas fix X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/620a7d196ada7e95c73418e92715076cfed39f76?hp=5028701711e4a1ee85e88f5ff7f1caf911dad8e5 editor: canvas fix --- 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('
Alice h a cat
'), 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('
ab
'), + 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() {