rittenhop-ghost/versions/5.94.2/core/server/models/custom-theme-setting.js

65 lines
2.1 KiB
JavaScript

const _ = require('lodash');
const ghostBookshelf = require('./base');
const urlUtils = require('../../shared/url-utils');
const CustomThemeSetting = ghostBookshelf.Model.extend({
tableName: 'custom_theme_settings',
parse() {
const attrs = ghostBookshelf.Model.prototype.parse.apply(this, arguments);
const settingType = attrs.type;
// transform "0" to false for boolean type
if (settingType === 'boolean' && (attrs.value === '0' || attrs.value === '1')) {
attrs.value = !!+attrs.value;
}
// transform "false" to false for boolean type
if (settingType === 'boolean' && (attrs.value === 'false' || attrs.value === 'true')) {
attrs.value = JSON.parse(attrs.value);
}
// transform URLs to absolute for image settings
if (settingType === 'image' && attrs.value) {
attrs.value = urlUtils.transformReadyToAbsolute(attrs.value);
}
return attrs;
},
format() {
const attrs = ghostBookshelf.Model.prototype.format.apply(this, arguments);
const settingType = attrs.type;
if (settingType === 'boolean') {
// CASE: Ensure we won't forward strings, otherwise model events or model interactions can fail
if (attrs.value === '0' || attrs.value === '1') {
attrs.value = !!+attrs.value;
}
// CASE: Ensure we won't forward strings, otherwise model events or model interactions can fail
if (attrs.value === 'false' || attrs.value === 'true') {
attrs.value = JSON.parse(attrs.value);
}
if (_.isBoolean(attrs.value)) {
attrs.value = attrs.value.toString();
}
}
return attrs;
},
formatOnWrite(attrs) {
if (attrs.type === 'image' && attrs.value) {
attrs.value = urlUtils.toTransformReady(attrs.value);
}
return attrs;
}
});
module.exports = {
CustomThemeSetting: ghostBookshelf.model('CustomThemeSetting', CustomThemeSetting)
};