0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Koenig - Code card server-side rendering

refs https://github.com/TryGhost/Ghost/issues/9623
- add support for `code` card that renders into `<pre><code>...</code></pre>`
- render language class if one is provided
This commit is contained in:
Kevin Ansfield 2018-05-15 16:27:34 +01:00
parent bd75d7551d
commit f54db75ed1
3 changed files with 80 additions and 7 deletions

View file

@ -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;
}
};

View file

@ -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')
];

View file

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