cartodb/lib/assets/javascripts/builder/data/visualization-table-model.js
2020-06-15 10:58:47 +08:00

94 lines
2.4 KiB
JavaScript
Executable File

var Backbone = require('backbone');
var _ = require('underscore');
var TableModel = require('./table-model');
var PermissionModel = require('./permission-model');
var SynchronizationModel = require('./synchronization-model');
/**
* Model that represents a table visualization (v3)
*
*/
var PRIVACY_OPTIONS = ['PUBLIC', 'LINK', 'PRIVATE'];
module.exports = Backbone.Model.extend({
urlRoot: function () {
var baseUrl = this._configModel.get('base_url');
var version = this._configModel.urlVersion('visualization');
return baseUrl + '/api/' + version + '/viz';
},
initialize: function (attrs, opts) {
if (!opts.configModel) throw new Error('configModel is required');
this._configModel = opts.configModel;
this._initModels();
},
_initModels: function () {
var d = this.get('table');
if (!_.isEmpty(this.get('external_source'))) {
d = this.get('external_source');
}
this._tableModel = new TableModel(d, {
configModel: this._configModel,
parse: true
});
if (this.get('permission')) {
this._permissionModel = new PermissionModel(this.get('permission'), {
configModel: this._configModel
});
this.unset('permission');
}
if (this.get('synchronization')) {
this._synchronizationModel = new SynchronizationModel(this.get('synchronization'), {
configModel: this._configModel
});
this._synchronizationModel.linkToTable(this._tableModel);
}
},
isVisualization: function () {
return false;
},
getTableModel: function () {
return this._tableModel;
},
getPermissionModel: function () {
return this._permissionModel;
},
getSynchronizationModel: function () {
return this._synchronizationModel;
},
vizjsonURL: function () {
var baseUrl = this._configModel.get('base_url');
var version = this._configModel.urlVersion('vizjson', 'read', 'v3');
return baseUrl + '/api/' + version + '/viz/' + this.id + '/viz.json';
},
isRaster: function () {
return this.get('kind') === 'raster';
},
datasetURL: function () {
var baseUrl = this._configModel.get('base_url');
var tableName = this.getTableModel().getUnquotedName();
return baseUrl + '/dataset/' + tableName;
},
privacyOptions: function () {
return PRIVACY_OPTIONS;
},
toJSON: function () {
return _.omit(this.attributes, 'synchronization', 'stats', 'table');
}
});