Skip to content

Commit

Permalink
Koenig - Code card server-side rendering
Browse files Browse the repository at this point in the history
refs #9623
- add support for `code` card that renders into `<pre><code>...</code></pre>`
- render language class if one is provided
  • Loading branch information
kevinansfield committed May 15, 2018
1 parent bd75d75 commit f54db75
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 7 deletions.
24 changes: 24 additions & 0 deletions core/server/lib/mobiledoc/cards/code.js
Original file line number Diff line number Diff line change
@@ -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;
}
};
15 changes: 8 additions & 7 deletions core/server/lib/mobiledoc/cards/index.js
Original file line number Diff line number Diff line change
@@ -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')
];
48 changes: 48 additions & 0 deletions core/test/unit/lib/mobiledoc/cards/code_spec.js
Original file line number Diff line number Diff line change
@@ -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: '<p>Test</p>'
}
};

serializer.serialize(card.render(opts)).should.match('<pre><code>&lt;p&gt;Test&lt;/p&gt;</code></pre>');
});

it('Renders language class if provided', function () {
let opts = {
env: {
dom: new SimpleDom.Document()
},
payload: {
code: '<p>Test</p>',
language: 'html'
}
};

serializer.serialize(card.render(opts)).should.match('<pre><code class="language-html">&lt;p&gt;Test&lt;/p&gt;</code></pre>');
});

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('');
});
});

0 comments on commit f54db75

Please sign in to comment.