diff --git a/core/server/lib/mobiledoc/cards/code.js b/core/server/lib/mobiledoc/cards/code.js new file mode 100644 index 0000000000..15096567c0 --- /dev/null +++ b/core/server/lib/mobiledoc/cards/code.js @@ -0,0 +1,24 @@ +module.exports = { + name: 'code', + type: 'dom', + render(opts) { + let payload = opts.payload; + let dom = opts.env.dom; + + if (!payload.code) { + return ''; + } + + let pre = dom.createElement('pre'); + let code = dom.createElement('code'); + + if (payload.language) { + code.setAttribute('class', `language-${payload.language}`); + } + + code.appendChild(dom.createTextNode(payload.code)); + pre.appendChild(code); + + return pre; + } +}; diff --git a/core/server/lib/mobiledoc/cards/index.js b/core/server/lib/mobiledoc/cards/index.js index 1cbca3a3ba..a9f79356b8 100644 --- a/core/server/lib/mobiledoc/cards/index.js +++ b/core/server/lib/mobiledoc/cards/index.js @@ -1,9 +1,10 @@ 'use strict'; -const hr = require('./hr'); -const html = require('./html'); -const image = require('./image'); -const markdown = require('./markdown'); -const cardMarkdown = require('./card-markdown'); - -module.exports = [hr, html, image, markdown, cardMarkdown]; +module.exports = [ + require('./card-markdown'), + require('./code'), + require('./hr'), + require('./html'), + require('./image'), + require('./markdown') +]; diff --git a/core/test/unit/lib/mobiledoc/cards/code_spec.js b/core/test/unit/lib/mobiledoc/cards/code_spec.js new file mode 100644 index 0000000000..2cb6b1addd --- /dev/null +++ b/core/test/unit/lib/mobiledoc/cards/code_spec.js @@ -0,0 +1,48 @@ +'use strict'; + +const should = require('should'); // jshint ignore:line +const card = require('../../../../../server/lib/mobiledoc/cards/code'); +const SimpleDom = require('simple-dom'); +const serializer = new SimpleDom.HTMLSerializer(SimpleDom.voidMap); + +describe('Code card', function () { + it('Renders and escapes', function () { + let opts = { + env: { + dom: new SimpleDom.Document() + }, + payload: { + code: '
Test
' + } + }; + + serializer.serialize(card.render(opts)).should.match('<p>Test</p>
');
+ });
+
+ it('Renders language class if provided', function () {
+ let opts = {
+ env: {
+ dom: new SimpleDom.Document()
+ },
+ payload: {
+ code: 'Test
', + language: 'html' + } + }; + + serializer.serialize(card.render(opts)).should.match('<p>Test</p>
');
+ });
+
+ it('Renders nothing when payload is undefined', function () {
+ let opts = {
+ env: {
+ dom: new SimpleDom.Document()
+ },
+ payload: {
+ code: undefined
+ }
+ };
+
+ serializer.serialize(card.render(opts)).should.match('');
+ });
+});