Initial commit
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
var _ = require('underscore');
|
||||
var layerTypesAndKinds = require('builder/data/layer-types-and-kinds');
|
||||
var BaseTiledLayerView = require('./layer-views/base-tiled-layer-view');
|
||||
var PlainColorLayerView = require('./layer-views/plain-color-layer-view');
|
||||
var BackgroundImageLayerView = require('./layer-views/background-image-layer-view');
|
||||
var GoogleMapsBaseLayerView = require('./layer-views/google-maps-base-layer-view');
|
||||
var DataLayerView = require('./layer-views/data-layer-view');
|
||||
var ErroredDataLayerView = require('./layer-views/errored-data-layer-view');
|
||||
var LabelsLayerView = require('./layer-views/labels-layer-view');
|
||||
var LayerAnalysesView = require('./layer-analyses-view');
|
||||
var LayerAnalysisViewFactory = require('./layer-analysis-view-factory');
|
||||
var checkAndBuildOpts = require('builder/helpers/required-opts');
|
||||
|
||||
var REQUIRED_OPTS = [
|
||||
'userActions',
|
||||
'layerDefinitionsCollection',
|
||||
'analysisDefinitionNodesCollection',
|
||||
'modals',
|
||||
'configModel',
|
||||
'sortableSelector',
|
||||
'stateDefinitionModel',
|
||||
'visDefinitionModel',
|
||||
'widgetDefinitionsCollection'
|
||||
];
|
||||
|
||||
var LayerViewFactory = function (opts) {
|
||||
opts = opts || {};
|
||||
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype.createLayerView = function (layerDefinitionModel) {
|
||||
var layerViewOptions = {
|
||||
model: layerDefinitionModel,
|
||||
modals: this._modals,
|
||||
stateDefinitionModel: this._stateDefinitionModel,
|
||||
configModel: this._configModel
|
||||
};
|
||||
|
||||
if (layerDefinitionModel.isDataLayer()) {
|
||||
layerViewOptions = _.extend(layerViewOptions, {
|
||||
userActions: this._userActions,
|
||||
layerDefinitionsCollection: this._layerDefinitionsCollection,
|
||||
newAnalysesView: this._newAnalysesView.bind(this),
|
||||
widgetDefinitionsCollection: this._widgetDefinitionsCollection,
|
||||
visDefinitionModel: this._visDefinitionModel,
|
||||
analysisDefinitionNodesCollection: this._analysisDefinitionNodesCollection
|
||||
});
|
||||
}
|
||||
|
||||
var LayerViewClass = this._getLayerViewClass(layerDefinitionModel);
|
||||
return new LayerViewClass(layerViewOptions);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._getLayerViewClass = function (layerDefinitionModel) {
|
||||
// Base layers
|
||||
if (this._isTiledBaseLayer(layerDefinitionModel)) {
|
||||
return BaseTiledLayerView;
|
||||
}
|
||||
if (this._isPlainColorBaseLayer(layerDefinitionModel)) {
|
||||
return PlainColorLayerView;
|
||||
}
|
||||
if (this._isBackgroundImageBaseLayer(layerDefinitionModel)) {
|
||||
return BackgroundImageLayerView;
|
||||
}
|
||||
if (this._isGoogleMapsBaseLayer(layerDefinitionModel)) {
|
||||
return GoogleMapsBaseLayerView;
|
||||
}
|
||||
|
||||
// Data layers
|
||||
if (layerDefinitionModel.isDataLayer()) {
|
||||
var nodeDefModel = layerDefinitionModel.getAnalysisDefinitionNodeModel();
|
||||
if (nodeDefModel) {
|
||||
return DataLayerView;
|
||||
} else {
|
||||
// Ghost node layer (😱)
|
||||
return ErroredDataLayerView;
|
||||
}
|
||||
}
|
||||
|
||||
// Labels layer
|
||||
if (this.isLabelsLayer(layerDefinitionModel)) {
|
||||
return LabelsLayerView;
|
||||
}
|
||||
|
||||
throw new Error('No layer view for type "' + layerDefinitionModel.get('type') + '" just yet.');
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._isBaseLayer = function (layerDefinitionModel) {
|
||||
return layerDefinitionModel.get('order') === 0;
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._isTiledBaseLayer = function (layerDefinitionModel) {
|
||||
var layerType = layerDefinitionModel.get('type');
|
||||
return layerTypesAndKinds.isTiledType(layerType) &&
|
||||
this._isBaseLayer(layerDefinitionModel);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._isPlainColorBaseLayer = function (layerDefinitionModel) {
|
||||
var layerType = layerDefinitionModel.get('type');
|
||||
return layerTypesAndKinds.isPlainType(layerType) &&
|
||||
this._isBaseLayer(layerDefinitionModel) &&
|
||||
layerDefinitionModel.get('color');
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._isBackgroundImageBaseLayer = function (layerDefinitionModel) {
|
||||
var layerType = layerDefinitionModel.get('type');
|
||||
return layerTypesAndKinds.isPlainType(layerType) &&
|
||||
this._isBaseLayer(layerDefinitionModel) &&
|
||||
layerDefinitionModel.get('image');
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._isGoogleMapsBaseLayer = function (layerDefinitionModel) {
|
||||
var layerType = layerDefinitionModel.get('type');
|
||||
return layerTypesAndKinds.isGMapsBase(layerType) &&
|
||||
this._isBaseLayer(layerDefinitionModel);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype.isLabelsLayer = function (layerDefinitionModel) {
|
||||
var layerType = layerDefinitionModel.get('type');
|
||||
return layerTypesAndKinds.isTiledType(layerType) &&
|
||||
!this._isBaseLayer(layerDefinitionModel);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype.isBasemapLayer = function (layerDefinitionModel) {
|
||||
return this._isBaseLayer(layerDefinitionModel);
|
||||
};
|
||||
|
||||
LayerViewFactory.prototype._newAnalysesView = function (el, layerDefinitionModel) {
|
||||
var layerAnalysisViewFactory = new LayerAnalysisViewFactory(this._analysisDefinitionNodesCollection);
|
||||
return new LayerAnalysesView({
|
||||
el: el,
|
||||
model: layerDefinitionModel,
|
||||
layerAnalysisViewFactory: layerAnalysisViewFactory,
|
||||
sortableSelector: this._sortableSelector
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = LayerViewFactory;
|
||||
Reference in New Issue
Block a user