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:
parent
bd75d7551d
commit
f54db75ed1
3 changed files with 80 additions and 7 deletions
24
core/server/lib/mobiledoc/cards/code.js
Normal file
24
core/server/lib/mobiledoc/cards/code.js
Normal 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;
|
||||
}
|
||||
};
|
|
@ -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
core/test/unit/lib/mobiledoc/cards/code_spec.js
Normal file
48
core/test/unit/lib/mobiledoc/cards/code_spec.js
Normal 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><p>Test</p></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"><p>Test</p></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('');
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue