From c331390895b911b4eee4fab57ca340274d388026 Mon Sep 17 00:00:00 2001 From: iseulde <*@iseulde.com> Date: Thu, 12 Mar 2015 17:36:49 +0000 Subject: [PATCH] Don't replace text nodes if there's nothing to replace --- test.js | 15 +++++++++++---- twemoji.js | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/test.js b/test.js index c7eb5ccc..bb93ab53 100644 --- a/test.js +++ b/test.js @@ -146,10 +146,8 @@ wru.test([{ div = document.createElement('div'); div.appendChild(document.createTextNode('I \u2764\uFE0E emoji!')); twemoji.parse(div); - wru.assert('default parsing created 3 nodes anyway', div.childNodes.length === 3); - wru.assert('first child is the expected one', div.removeChild(div.firstChild).nodeValue === 'I '); - wru.assert('emoji child is unchanged', div.removeChild(div.firstChild).nodeValue === '\u2764\uFE0E'); - wru.assert('last child is the expected one', div.removeChild(div.firstChild).nodeValue === ' emoji!'); + wru.assert('default parsing created 1 node', div.childNodes.length === 1); + wru.assert('first child is the expected one', div.removeChild(div.firstChild).nodeValue === 'I \u2764\uFE0E emoji!'); } },{ name: 'DOM parsing + size', @@ -421,4 +419,13 @@ wru.test([{ wru.assert('correct length', div.getElementsByTagName('img').length === 0); wru.assert('expected html', div.innerHTML === '"\u2b1c\uFE0E"'); } +},{ + name: 'callback can return false and prevent changes', + test: function () { + var div = document.createElement('div'); + var text = document.createTextNode('I \u2764 emoji!'); + div.appendChild(text); + twemoji.parse(div, function() { return false; }); + wru.assert('text node is preserved', div.firstChild === text); + } }]); \ No newline at end of file diff --git a/twemoji.js b/twemoji.js index 59570cf8..4fe24408 100644 --- a/twemoji.js +++ b/twemoji.js @@ -369,10 +369,10 @@ var twemoji = (function ( } } fragment.appendChild(img || createText(alt)); - img = null; } // is there actually anything to replace in here ? - if (0 < i) { + if (img) { + img = null; // any text left to be added ? if (i < text.length) { fragment.appendChild(