diff --git a/core/server/data/importer/importers/data/posts.js b/core/server/data/importer/importers/data/posts.js index 959861b78e..61703dffe3 100644 --- a/core/server/data/importer/importers/data/posts.js +++ b/core/server/data/importer/importers/data/posts.js @@ -2,7 +2,7 @@ const debug = require('ghost-ignition').debug('importer:posts'); const _ = require('lodash'); const uuid = require('uuid'); const BaseImporter = require('./base'); -const renderers = require('../../../../lib/mobiledoc/renderers'); +const mobiledocLib = require('../../../../lib/mobiledoc'); const validation = require('../../../validation'); const postsMetaSchema = require('../../../schema').tables.posts_meta; const metaAttrs = _.keys(_.omit(postsMetaSchema, ['id'])); @@ -200,11 +200,11 @@ class PostsImporter extends BaseImporter { mobiledoc = JSON.parse(model.mobiledoc); if (!mobiledoc.cards || !_.isArray(mobiledoc.cards)) { - model.mobiledoc = renderers.mobiledocHtmlRenderer.blankStructure(); + model.mobiledoc = mobiledocLib.blankDocument; mobiledoc = model.mobiledoc; } } catch (err) { - mobiledoc = renderers.mobiledocHtmlRenderer.blankStructure(); + mobiledoc = mobiledocLib.blankDocument; } mobiledoc.cards.forEach((card) => { @@ -216,7 +216,7 @@ class PostsImporter extends BaseImporter { }); model.mobiledoc = JSON.stringify(mobiledoc); - model.html = renderers.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc)); + model.html = mobiledocLib.renderers.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc)); } this.sanitizePostsMeta(model); }); diff --git a/core/server/data/migrations/versions/2.0/2-update-posts.js b/core/server/data/migrations/versions/2.0/2-update-posts.js index c7712e774a..bcdb50e522 100644 --- a/core/server/data/migrations/versions/2.0/2-update-posts.js +++ b/core/server/data/migrations/versions/2.0/2-update-posts.js @@ -1,7 +1,7 @@ const _ = require('lodash'), Promise = require('bluebird'), common = require('../../../../lib/common'), - renderers = require('../../../../lib/mobiledoc/renderers'), + mobiledocLib = require('../../../../lib/mobiledoc'), message1 = 'Updating posts: apply new editor format and set comment_id field.', message2 = 'Updated posts: apply new editor format and set comment_id field.', message3 = 'Rollback: Updating posts: use old editor format', @@ -50,18 +50,18 @@ module.exports.up = (options) => { mobiledoc = JSON.parse(post.mobiledoc || null); if (!mobiledoc) { - mobiledoc = renderers.mobiledocHtmlRenderer.blankStructure(); + mobiledoc = mobiledocLib.blankDocument; } } catch (err) { common.logging.warn(`Invalid mobiledoc structure for ${post.id}. Falling back to blank structure.`); - mobiledoc = renderers.mobiledocHtmlRenderer.blankStructure(); + mobiledoc = mobiledocLib.blankDocument; } // CASE: convert all old editor posts to the new editor format // CASE: if mobiledoc field is null, we auto set a blank structure in the model layer // CASE: if html field is null, we auto generate the html in the model layer if (mobiledoc && post.html && post.html.match(/^
/)) { - html = renderers.mobiledocHtmlRenderer.render(mobiledoc); + html = mobiledocLib.renderers.mobiledocHtmlRenderer.render(mobiledoc); } return localOptions .transacting('posts') diff --git a/core/server/lib/mobiledoc/index.js b/core/server/lib/mobiledoc/index.js index ed08771586..631464718c 100644 --- a/core/server/lib/mobiledoc/index.js +++ b/core/server/lib/mobiledoc/index.js @@ -4,6 +4,20 @@ const config = require('../../config'); let cardFactory, cards; module.exports = { + get blankDocument() { + return { + version: '0.3.1', + markups: [], + atoms: [], + cards: [], + sections: [ + [1, 'p', [ + [0, [], 0, ''] + ]] + ] + }; + }, + get cards() { if (cards) { return cards; diff --git a/core/server/lib/mobiledoc/renderers/mobiledoc-html-renderer.js b/core/server/lib/mobiledoc/renderers/mobiledoc-html-renderer.js index 734b0164fe..6e3b4895d3 100644 --- a/core/server/lib/mobiledoc/renderers/mobiledoc-html-renderer.js +++ b/core/server/lib/mobiledoc/renderers/mobiledoc-html-renderer.js @@ -111,19 +111,5 @@ module.exports = { modifier.modifyChildren(rendered.result); return serializer.serializeChildren(rendered.result); - }, - - blankStructure() { - return { - version: '0.3.1', - markups: [], - atoms: [], - cards: [], - sections: [ - [1, 'p', [ - [0, [], 0, ''] - ]] - ] - }; } }; diff --git a/core/server/models/post.js b/core/server/models/post.js index edb692d5f7..67dee5150e 100644 --- a/core/server/models/post.js +++ b/core/server/models/post.js @@ -9,7 +9,7 @@ const htmlToText = require('html-to-text'); const ghostBookshelf = require('./base'); const config = require('../config'); const settingsCache = require('../services/settings/cache'); -const renderers = require('../lib/mobiledoc/renderers'); +const mobiledocLib = require('../lib/mobiledoc'); const relations = require('./relations'); const urlUtils = require('../lib/url-utils'); const MOBILEDOC_REVISIONS_COUNT = 10; @@ -365,7 +365,7 @@ Post = ghostBookshelf.Model.extend({ } if (!this.get('mobiledoc')) { - this.set('mobiledoc', JSON.stringify(renderers.mobiledocHtmlRenderer.blankStructure())); + this.set('mobiledoc', JSON.stringify(mobiledocLib.blankDocument)); } // ensure all URLs are stored as relative @@ -405,7 +405,7 @@ Post = ghostBookshelf.Model.extend({ // CASE: html is null, but mobiledoc exists (only important for migrations & importing) if (this.hasChanged('mobiledoc') || (!this.get('html') && (options.migrating || options.importing))) { try { - this.set('html', renderers.mobiledocHtmlRenderer.render(JSON.parse(this.get('mobiledoc')))); + this.set('html', mobiledocLib.renderers.mobiledocHtmlRenderer.render(JSON.parse(this.get('mobiledoc')))); } catch (err) { throw new common.errors.ValidationError({ message: 'Invalid mobiledoc structure.',