rittenhop-ghost/versions/5.94.2/core/server/models/snippet.js

71 lines
2.0 KiB
JavaScript

const ghostBookshelf = require('./base');
const urlUtils = require('../../shared/url-utils');
const mobiledocLib = require('../lib/mobiledoc');
const lexicalLib = require('../lib/lexical');
const _ = require('lodash');
const Snippet = ghostBookshelf.Model.extend({
tableName: 'snippets',
formatOnWrite(attrs) {
if (attrs.mobiledoc) {
attrs.mobiledoc = urlUtils.mobiledocToTransformReady(attrs.mobiledoc, {cardTransformers: mobiledocLib.cards});
}
if (attrs.lexical) {
attrs.lexical = urlUtils.lexicalToTransformReady(attrs.lexical, {
nodes: lexicalLib.nodes,
transformMap: lexicalLib.urlTransformMap
});
}
return attrs;
},
parse() {
const attrs = ghostBookshelf.Model.prototype.parse.apply(this, arguments);
if (attrs.mobiledoc) {
attrs.mobiledoc = urlUtils.transformReadyToAbsolute(attrs.mobiledoc);
}
if (attrs.lexical) {
attrs.lexical = urlUtils.transformReadyToAbsolute(attrs.lexical);
}
return attrs;
},
formatsToJSON: function formatsToJSON(attrs, options) {
const defaultFormats = ['mobiledoc'];
const formatsToKeep = options.formats || defaultFormats;
// Iterate over all known formats, and if they are not in the keep list, remove them
_.each(Snippet.allowedFormats, function (format) {
if (formatsToKeep.indexOf(format) === -1) {
delete attrs[format];
}
});
return attrs;
},
toJSON: function toJSON(options) {
let attrs = ghostBookshelf.Model.prototype.toJSON.call(this, options);
attrs = this.formatsToJSON(attrs, options);
return attrs;
}
}, {
allowedFormats: ['mobiledoc', 'lexical']
});
const Snippets = ghostBookshelf.Collection.extend({
model: Snippet
});
module.exports = {
Snippet: ghostBookshelf.model('Snippet', Snippet),
Snippets: ghostBookshelf.collection('Snippets', Snippets)
};