From cc2ae552998dfc7bdbde308932d8d0898b563de4 Mon Sep 17 00:00:00 2001 From: Andy Trevorah Date: Tue, 28 Oct 2014 22:59:30 +0000 Subject: [PATCH 1/2] added emojify function that uses emojify-parser --- lib/emojify.js | 35 +++++++++++++++++++++++++++++++++++ package.json | 5 ++++- tests/emojify-test.js | 18 ++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 lib/emojify.js create mode 100644 tests/emojify-test.js diff --git a/lib/emojify.js b/lib/emojify.js new file mode 100644 index 00000000..44b9d2a8 --- /dev/null +++ b/lib/emojify.js @@ -0,0 +1,35 @@ +"use strict"; + +var parser = require('emojify-parser'); + +var emojify = function(element, options) { + var document = options.document; + + var nodeToReplace = element.childNodes[0]; + var tokens = parser.parse(nodeToReplace.textContent); + + var newChildren = tokens.map(function(token) { + if(token.type === 'emoji') { + var emojiElement = document.createElement('img'); + emojiElement.setAttribute('class', 'emoji'); + emojiElement.setAttribute('src', '/' + token.name + '.png'); + emojiElement.setAttribute('title', token.raw); + emojiElement.setAttribute('alt', token.raw); + emojiElement.setAttribute('align', 'absmiddle'); + + return emojiElement; + } else { + return document.createTextNode(token.raw); + } + }); + + newChildren.forEach(function(node) { + element.insertBefore(node, nodeToReplace); + }); + + element.removeChild(nodeToReplace); + + return tokens; +}; + +module.exports = emojify; diff --git a/package.json b/package.json index c88c8201..7c0db012 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "url": "https://github.com/hassankhan/emojify.js/issues" }, "devDependencies": { + "jsdom": "^1.0.3", "jstest": "~1.0.4", "q": "^1.0.1", "chai": "~1.9.1", @@ -50,5 +51,7 @@ "android-browser/latest" ] }, - "dependencies": {} + "dependencies": { + "emojify-parser": "git://github.com/trevorah/emojify-parser" + } } diff --git a/tests/emojify-test.js b/tests/emojify-test.js new file mode 100644 index 00000000..5377c927 --- /dev/null +++ b/tests/emojify-test.js @@ -0,0 +1,18 @@ +var emojify = require('../lib/emojify'); +var jsdom = require('jsdom'); +var assert = require('assert'); + +describe('emojify', function() { + it('emojifies an element', function(done) { + jsdom.env('hello :cat:', function(err, window) { + if(err) return done(err); + + var el = window.document.getElementById('cat'); + + emojify(el, { document: window.document }); + + assert.equal(el.outerHTML, 'hello :cat:'); + done(); + }); + }); +}); From 66ce99f08309c26dcdb1e370f7a5acdcaf742c8d Mon Sep 17 00:00:00 2001 From: Andy Trevorah Date: Thu, 6 Nov 2014 22:07:29 +0000 Subject: [PATCH 2/2] removed dependency on window.document --- lib/emojify.js | 37 +++++++++++++------------------------ tests/emojify-test.js | 4 ++-- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/lib/emojify.js b/lib/emojify.js index 44b9d2a8..87ed372b 100644 --- a/lib/emojify.js +++ b/lib/emojify.js @@ -2,34 +2,23 @@ var parser = require('emojify-parser'); -var emojify = function(element, options) { - var document = options.document; +var createHTML = function(token) { + if(token.type === 'emoji') { + return ''+token.raw+''; + } else { + return token.raw; + } +}; + +var emojify = function(element) { var nodeToReplace = element.childNodes[0]; var tokens = parser.parse(nodeToReplace.textContent); - var newChildren = tokens.map(function(token) { - if(token.type === 'emoji') { - var emojiElement = document.createElement('img'); - emojiElement.setAttribute('class', 'emoji'); - emojiElement.setAttribute('src', '/' + token.name + '.png'); - emojiElement.setAttribute('title', token.raw); - emojiElement.setAttribute('alt', token.raw); - emojiElement.setAttribute('align', 'absmiddle'); - - return emojiElement; - } else { - return document.createTextNode(token.raw); - } - }); - - newChildren.forEach(function(node) { - element.insertBefore(node, nodeToReplace); - }); - - element.removeChild(nodeToReplace); - - return tokens; + var html = tokens.reduce(function(html, token) { + return html + createHTML(token); + }, ''); + element.innerHTML = html; }; module.exports = emojify; diff --git a/tests/emojify-test.js b/tests/emojify-test.js index 5377c927..93d34803 100644 --- a/tests/emojify-test.js +++ b/tests/emojify-test.js @@ -9,9 +9,9 @@ describe('emojify', function() { var el = window.document.getElementById('cat'); - emojify(el, { document: window.document }); + emojify(el); - assert.equal(el.outerHTML, 'hello :cat:'); + assert.equal(el.outerHTML, 'hello :cat:'); done(); }); });