71 lines
2.0 KiB
JavaScript
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)
|
||
|
};
|