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';
|
'use strict';
|
||||||
|
|
||||||
const hr = require('./hr');
|
module.exports = [
|
||||||
const html = require('./html');
|
require('./card-markdown'),
|
||||||
const image = require('./image');
|
require('./code'),
|
||||||
const markdown = require('./markdown');
|
require('./hr'),
|
||||||
const cardMarkdown = require('./card-markdown');
|
require('./html'),
|
||||||
|
require('./image'),
|
||||||
module.exports = [hr, html, image, markdown, cardMarkdown];
|
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