mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
refs https://github.com/TryGhost/Ghost/issues/9505 - updates mobiledoc converter's `render` method to accept a `version` argument - `1` === Ghost 1.0's markdown-only renderer output - `2` === Koenig's full mobiledoc renderer output - switch between mobiledoc renderer versions in Post model's `onSaving` hook - version 1 by default - version 2 if Koenig is enabled (currently behind dev experiments config + labs flag) - version 2 if the post's mobiledoc is not compatible with the markdown-only renderer - "version 2" full-Koenig mobiledoc renderer output - wraps content in a `.kg-post` div - removes wrapper around markdown and html card output - adds classes to image card output including selected image size/style - standardises es6 usage across mobiledoc related files
73 lines
2.6 KiB
JavaScript
73 lines
2.6 KiB
JavaScript
var SimpleDom = require('simple-dom'),
|
|
Renderer = require('mobiledoc-dom-renderer').default,
|
|
common = require('../../common'),
|
|
atoms = require('../atoms'),
|
|
cards = require('../cards'),
|
|
options = {
|
|
dom: new SimpleDom.Document(),
|
|
cards: cards,
|
|
atoms: atoms,
|
|
unknownCardHandler: function (args) {
|
|
common.logging.error(new common.errors.InternalServerError({
|
|
message: 'Mobiledoc card \'' + args.env.name + '\' not found.'
|
|
}));
|
|
}
|
|
};
|
|
|
|
// function getCards() {
|
|
// return config.get('apps:internal').reduce(
|
|
// function (cards, appName) {
|
|
// var app = require(path.join(config.get('paths').internalAppPath, appName));
|
|
// if (app.hasOwnProperty('cards')) {
|
|
// cards = cards.concat(app.cards);
|
|
// }
|
|
// return cards;
|
|
// }, [ ]);
|
|
// }
|
|
// function getAtoms() {
|
|
// return config.get('apps:internal').reduce(
|
|
// function (atoms, appName) {
|
|
// var app = require(path.join(config.get('paths').internalAppPath, appName));
|
|
// if (app.hasOwnProperty('atoms')) {
|
|
// atoms = atoms.concat(app.atoms);
|
|
// }
|
|
// return atoms;
|
|
// }, [ ]);
|
|
// }
|
|
|
|
module.exports = {
|
|
// version 1 === Ghost 1.0 markdown-only mobiledoc
|
|
// version 2 === Ghost 2.0 full mobiledoc
|
|
render: function (mobiledoc, version) {
|
|
version = version || 1;
|
|
|
|
// pass the version through to the card renderers.
|
|
// create a new object here to avoid modifying the default options
|
|
// object because the version can change per-render until 2.0 is released
|
|
let versionedOptions = Object.assign({}, options, {
|
|
cardOptions: {version}
|
|
});
|
|
|
|
let renderer = new Renderer(versionedOptions);
|
|
let rendered = renderer.render(mobiledoc);
|
|
let serializer = new SimpleDom.HTMLSerializer(SimpleDom.voidMap);
|
|
|
|
// Koenig keeps a blank paragraph at the end of a doc but we want to
|
|
// make sure it doesn't get rendered
|
|
let lastChild = rendered.result.lastChild;
|
|
if (lastChild && lastChild.tagName === 'P' && !lastChild.firstChild) {
|
|
rendered.result.removeChild(lastChild);
|
|
}
|
|
|
|
let html = serializer.serializeChildren(rendered.result);
|
|
|
|
// full version of Koenig wraps the content with a specific class to
|
|
// be targetted with our default stylesheet for vertical rhythm and
|
|
// card-specific styles
|
|
if (version === 2) {
|
|
html = `<div class="kg-post">\n${html}\n</div>`;
|
|
}
|
|
|
|
return html;
|
|
}
|
|
};
|