Initial commit
@@ -0,0 +1,19 @@
|
||||
<div class="Modal">
|
||||
<div class="Modal-header">
|
||||
<div class="Modal-headerContainer">
|
||||
<h2 class="CDB-Text CDB-Size-huge is-light u-bSpace"><%- _t('components.modals.add-analysis.modal-title') %></h2>
|
||||
<h3 class="CDB-Text CDB-Size-medium u-secondaryTextColor"><%- _t('components.modals.add-analysis.modal-desc') %></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Modal-container Modal-container--analysis">
|
||||
<div class="Modal-inner js-body">
|
||||
</div>
|
||||
</div>
|
||||
<div class="Modal-footer">
|
||||
<div class="Modal-footerContainer u-flex u-justifyEnd">
|
||||
<button class="CDB-Button CDB-Button--primary CDB-Button--big is-disabled js-add">
|
||||
<span class="CDB-Button-Text CDB-Text is-semibold CDB-Size-medium u-upperCase"><%- _t('components.modals.add-analysis.add-btn') %></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,106 @@
|
||||
var _ = require('underscore');
|
||||
var CoreView = require('backbone/core-view');
|
||||
var AnalysisOptionsCollection = require('./analysis-options-collection');
|
||||
var analysisOptions = require('./analysis-options');
|
||||
var AnalysisViewPane = require('./analysis-view-pane');
|
||||
var renderLoading = require('builder/components/loading/render-loading');
|
||||
var DataServicesApiCheck = require('builder/editor/layers/layer-content-views/analyses/analyses-quota/analyses-quota-info');
|
||||
var checkAndBuildOpts = require('builder/helpers/required-opts');
|
||||
|
||||
var REQUIRED_OPTS = [
|
||||
'modalModel',
|
||||
'configModel',
|
||||
'userModel',
|
||||
'layerDefinitionModel'
|
||||
];
|
||||
|
||||
/**
|
||||
* View to add a new analysis node.
|
||||
* Expected to be rendered in a modal.
|
||||
*/
|
||||
module.exports = CoreView.extend({
|
||||
className: 'Dialog-content Dialog-content--expanded',
|
||||
|
||||
initialize: function (opts) {
|
||||
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
|
||||
|
||||
this._analysisDefinitionNodeModel = this._layerDefinitionModel.getAnalysisDefinitionNodeModel();
|
||||
|
||||
this._queryGeometryModel = this._analysisDefinitionNodeModel.queryGeometryModel;
|
||||
this.listenTo(this._queryGeometryModel, 'change', this.render);
|
||||
|
||||
this._analysisOptions = analysisOptions({
|
||||
userModel: this._userModel,
|
||||
configModel: this._configModel,
|
||||
queryGeometryModel: this._queryGeometryModel
|
||||
});
|
||||
this._analysisOptionsCollection = new AnalysisOptionsCollection();
|
||||
|
||||
this._dataservicesApiHealth = DataServicesApiCheck.get();
|
||||
|
||||
if (!this._isFetchingGeometry()) {
|
||||
this._queryGeometryModel.fetch();
|
||||
}
|
||||
|
||||
this._initOptions();
|
||||
},
|
||||
|
||||
render: function () {
|
||||
this.clearSubViews();
|
||||
|
||||
var render = this.render.bind(this);
|
||||
var dsApiNeedsCheck = this._dataservicesApiHealth.needsCheck();
|
||||
if (dsApiNeedsCheck) {
|
||||
this._dataservicesApiHealth.fetch({
|
||||
success: render
|
||||
});
|
||||
}
|
||||
|
||||
if (this._isFetchingGeometry() || dsApiNeedsCheck) {
|
||||
this._renderLoadingView();
|
||||
} else {
|
||||
this._renderStackView();
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_renderLoadingView: function () {
|
||||
this.$el.html(
|
||||
renderLoading({
|
||||
title: _t('components.modals.add-widgets.loading-title')
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
_renderStackView: function () {
|
||||
var view = new AnalysisViewPane({
|
||||
modalModel: this._modalModel,
|
||||
analysisOptions: this._analysisOptions,
|
||||
analysisOptionsCollection: this._analysisOptionsCollection,
|
||||
layerDefinitionModel: this._layerDefinitionModel,
|
||||
queryGeometryModel: this._queryGeometryModel
|
||||
});
|
||||
|
||||
this.$el.html(view.render().$el);
|
||||
this.addView(view);
|
||||
},
|
||||
|
||||
_isFetchingGeometry: function () {
|
||||
return this._queryGeometryModel.get('status') === 'fetching';
|
||||
},
|
||||
|
||||
_initOptions: function () {
|
||||
// Flatten the options hierarchy to a flat array structure that's easier to handle programmatically.
|
||||
var modelsAttrs = _.reduce(Object.keys(this._analysisOptions), function (memo, category) {
|
||||
var categoryDef = this._analysisOptions[category];
|
||||
categoryDef.analyses.forEach(function (d) {
|
||||
memo.push(_.extend({}, d, { category: category, type: d.nodeAttrs.type }));
|
||||
});
|
||||
|
||||
return memo;
|
||||
}, [], this);
|
||||
|
||||
this._analysisOptionsCollection.reset(modelsAttrs);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,51 @@
|
||||
var _ = require('underscore');
|
||||
var AnalysisCategoryView = require('./analysis-category-pane-view');
|
||||
|
||||
module.exports = function (analysisOptions) {
|
||||
return [{
|
||||
type: 'create_clean',
|
||||
createTabPaneItem: function (optionsCollection, opts) {
|
||||
return {
|
||||
label: _t('analysis-category.create-clean'),
|
||||
name: 'create_clean',
|
||||
createContentView: function () {
|
||||
return new AnalysisCategoryView(_.extend({
|
||||
analysisOptions: analysisOptions,
|
||||
analysisType: 'create_clean',
|
||||
collection: optionsCollection
|
||||
}, opts));
|
||||
}
|
||||
};
|
||||
}
|
||||
}, {
|
||||
type: 'analyze_predict',
|
||||
createTabPaneItem: function (optionsCollection, opts) {
|
||||
return {
|
||||
label: _t('analysis-category.analyze-predict'),
|
||||
name: 'analyze_predict',
|
||||
createContentView: function () {
|
||||
return new AnalysisCategoryView(_.extend({
|
||||
analysisOptions: analysisOptions,
|
||||
analysisType: 'analyze_predict',
|
||||
collection: optionsCollection
|
||||
}, opts));
|
||||
}
|
||||
};
|
||||
}
|
||||
}, {
|
||||
type: 'data_transformation',
|
||||
createTabPaneItem: function (optionsCollection, opts) {
|
||||
return {
|
||||
label: _t('analysis-category.data-transformation'),
|
||||
name: 'data_transformation',
|
||||
createContentView: function () {
|
||||
return new AnalysisCategoryView(_.extend({
|
||||
analysisOptions: analysisOptions,
|
||||
analysisType: 'data_transformation',
|
||||
collection: optionsCollection
|
||||
}, opts));
|
||||
}
|
||||
};
|
||||
}
|
||||
}];
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
var CoreView = require('backbone/core-view');
|
||||
var ScrollView = require('builder/components/scroll/scroll-view');
|
||||
var AnalysisCategoryPane = require('./analysis-category-pane');
|
||||
|
||||
/**
|
||||
* View to add a new analysis node.
|
||||
* Expected to be rendered in a modal.
|
||||
*/
|
||||
module.exports = CoreView.extend({
|
||||
className: 'Dialog-content Dialog-content--expanded',
|
||||
|
||||
initialize: function (opts) {
|
||||
if (!opts.modalModel) throw new Error('modalModel is required');
|
||||
if (!opts.analysisOptionsCollection) throw new Error('analysisOptionsCollection is required');
|
||||
if (!opts.analysisType) throw new Error('analysisType is required');
|
||||
if (!opts.analysisOptions) throw new Error('analysisOptions is required');
|
||||
if (!opts.queryGeometryModel) throw new Error('queryGeometryModel is required');
|
||||
|
||||
this._modalModel = opts.modalModel;
|
||||
this._queryGeometryModel = opts.queryGeometryModel;
|
||||
this._analysisOptionsCollection = opts.analysisOptionsCollection;
|
||||
this._analysisType = opts.analysisType;
|
||||
this._analysisOptions = opts.analysisOptions;
|
||||
},
|
||||
|
||||
render: function () {
|
||||
this.clearSubViews();
|
||||
|
||||
var view = new ScrollView({
|
||||
createContentView: function () {
|
||||
return new AnalysisCategoryPane({
|
||||
collection: this._analysisOptionsCollection,
|
||||
title: this.options.categoryTitle || this.options.category,
|
||||
category: this._analysisType === 'all' ? null : this._analysisType,
|
||||
categoryTitle: this._analysisType === 'all' ? null : this._analysisOptions[this._analysisType].label,
|
||||
simpleGeometryType: this._queryGeometryModel.get('simple_geom')
|
||||
});
|
||||
}.bind(this)
|
||||
});
|
||||
|
||||
this.addView(view);
|
||||
this.$el.append(view.render().el);
|
||||
|
||||
return this;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,50 @@
|
||||
var CoreView = require('backbone/core-view');
|
||||
var AnalysisOptionView = require('./analysis-option-view');
|
||||
var template = require('./analysis-category.tpl');
|
||||
|
||||
/**
|
||||
* View to render an individual analysis category and its analysis options
|
||||
*/
|
||||
module.exports = CoreView.extend({
|
||||
|
||||
className: 'Modal-analysisContainer',
|
||||
|
||||
options: {
|
||||
category: '',
|
||||
categoryTitle: '',
|
||||
simpleGeometryType: ''
|
||||
},
|
||||
|
||||
render: function () {
|
||||
this.clearSubViews();
|
||||
|
||||
this.$el.html(this._html());
|
||||
this.collection.each(this._renderOption, this);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_html: function () {
|
||||
return template({
|
||||
title: this.options.title
|
||||
});
|
||||
},
|
||||
|
||||
_renderOption: function (analysisOptionModel) {
|
||||
if (this.options.category && !analysisOptionModel.belongsTo(this.options.category)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var view = new AnalysisOptionView({
|
||||
model: analysisOptionModel,
|
||||
simpleGeometryTypeInput: this.options.simpleGeometryType
|
||||
});
|
||||
|
||||
this.addView(view);
|
||||
this._$list().append(view.render().el);
|
||||
},
|
||||
|
||||
_$list: function () {
|
||||
return this.$('.js-analyses-list');
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
<ul class="ModalBlockList js-analyses-list"></ul>
|
||||
@@ -0,0 +1,51 @@
|
||||
var _ = require('underscore');
|
||||
var Backbone = require('backbone');
|
||||
var camshaftReference = require('builder/data/camshaft-reference');
|
||||
var nodeIds = require('builder/value-objects/analysis-node-ids');
|
||||
|
||||
module.exports = Backbone.Model.extend({
|
||||
|
||||
defaults: {
|
||||
title: '',
|
||||
category: '',
|
||||
selected: false,
|
||||
type_group: '',
|
||||
desc: '',
|
||||
link: ''
|
||||
},
|
||||
|
||||
initialize: function (attrs, opts) {
|
||||
if (!opts.nodeAttrs) throw new Error('nodeAttrs is required');
|
||||
|
||||
this._nodeAttrs = opts.nodeAttrs;
|
||||
},
|
||||
|
||||
belongsTo: function (category) {
|
||||
return this.get('category') === category;
|
||||
},
|
||||
|
||||
acceptsGeometryTypeAsInput: function (simpleGeometryType) {
|
||||
if (this.get('dummy') === true) return true;
|
||||
return camshaftReference.isValidInputGeometryForType(simpleGeometryType, this._nodeAttrs.type);
|
||||
},
|
||||
|
||||
getValidInputGeometries: function () {
|
||||
return camshaftReference.getValidInputGeometriesForType(this._nodeAttrs.type);
|
||||
},
|
||||
|
||||
getFormAttrs: function (layerDefModel) {
|
||||
var letter = layerDefModel.get('letter');
|
||||
var sourceId = layerDefModel.get('source');
|
||||
|
||||
return _.extend(
|
||||
{
|
||||
source: sourceId,
|
||||
id: letter === nodeIds.letter(sourceId)
|
||||
? nodeIds.next(sourceId)
|
||||
: letter + '1'
|
||||
},
|
||||
this._nodeAttrs
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
var _ = require('underscore');
|
||||
var AnalysisOptionModel = require('./analysis-option-model');
|
||||
|
||||
/**
|
||||
* Custom model for deprecated SQL function type, to set correct primary source
|
||||
*/
|
||||
module.exports = AnalysisOptionModel.extend({
|
||||
|
||||
/**
|
||||
* @override {AnalysisOptionModel.getNodeAttrs}
|
||||
*/
|
||||
getFormAttrs: function (layerDefModel) {
|
||||
var attrs = AnalysisOptionModel.prototype.getFormAttrs.apply(this, arguments);
|
||||
delete attrs.source;
|
||||
|
||||
_.extend(attrs, {
|
||||
primary_source: layerDefModel.get('source')
|
||||
});
|
||||
|
||||
return attrs;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
var _ = require('underscore');
|
||||
var AnalysisOptionModel = require('./analysis-option-model');
|
||||
var camshaftReference = require('builder/data/camshaft-reference');
|
||||
|
||||
/**
|
||||
* Model to represent a generated analysis option.
|
||||
*/
|
||||
module.exports = AnalysisOptionModel.extend({
|
||||
|
||||
/**
|
||||
* @override {AnalysisOptionModel.getNodeAttrs}
|
||||
*/
|
||||
getFormAttrs: function () {
|
||||
var attrs = AnalysisOptionModel.prototype.getFormAttrs.apply(this, arguments);
|
||||
|
||||
this._removeSourceIfThereAreMultipleSources(attrs);
|
||||
|
||||
return attrs;
|
||||
},
|
||||
|
||||
_removeSourceIfThereAreMultipleSources: function (attrs) {
|
||||
var params = camshaftReference.paramsForType(attrs.type);
|
||||
var sourceCount = _.reduce(Object.keys(params), function (memo, name) {
|
||||
if (params[name].type === 'node') {
|
||||
memo++;
|
||||
}
|
||||
return memo;
|
||||
}, 0);
|
||||
|
||||
if (sourceCount > 1) {
|
||||
delete attrs.source;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,24 @@
|
||||
var _ = require('underscore');
|
||||
var AnalysisOptionModel = require('./analysis-option-model');
|
||||
|
||||
/**
|
||||
* Custom model for merge type, to set correct primary source
|
||||
*/
|
||||
module.exports = AnalysisOptionModel.extend({
|
||||
|
||||
/**
|
||||
* @override {AnalysisOptionModel.getNodeAttrs}
|
||||
*/
|
||||
getFormAttrs: function (layerDefModel) {
|
||||
var attrs = AnalysisOptionModel.prototype.getFormAttrs.apply(this, arguments);
|
||||
delete attrs.source;
|
||||
|
||||
_.extend(attrs, {
|
||||
primary_source_name: 'left_source',
|
||||
left_source: layerDefModel.get('source')
|
||||
});
|
||||
|
||||
return attrs;
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,91 @@
|
||||
var _ = require('underscore');
|
||||
var $ = require('jquery');
|
||||
var CoreView = require('backbone/core-view');
|
||||
var template = require('./analysis-option.tpl');
|
||||
var Analyses = require('builder/data/analyses');
|
||||
|
||||
/**
|
||||
* View for an individual analysis option.
|
||||
*/
|
||||
module.exports = CoreView.extend({
|
||||
|
||||
tagName: 'li',
|
||||
className: 'ModalBlockList-item',
|
||||
|
||||
events: {
|
||||
'mouseenter': '_onMouseEnter',
|
||||
'mouseleave': '_onMouseLeave',
|
||||
'click': '_onClick'
|
||||
},
|
||||
|
||||
initialize: function (opts) {
|
||||
this._simpleGeometryTypeInput = opts.simpleGeometryTypeInput; // might be undefined/null, so don't check
|
||||
|
||||
this.listenTo(this.model, 'change:selected', this.render);
|
||||
},
|
||||
|
||||
render: function () {
|
||||
var props = this.model.pick('title', 'type_group', 'desc', 'selected', 'link');
|
||||
|
||||
props.enabled = this._acceptsInputGeometry();
|
||||
|
||||
if (!props.enabled) {
|
||||
props.desc = this._disabledDesc();
|
||||
}
|
||||
|
||||
var analysisType = this.model.get('type');
|
||||
var analysisItem = Analyses.getAnalysisByType(analysisType);
|
||||
var animationTemplate = analysisItem && analysisItem.animationTemplate;
|
||||
var genericType = '';
|
||||
|
||||
if (animationTemplate) {
|
||||
genericType = analysisItem.genericType || analysisType;
|
||||
}
|
||||
|
||||
this.$el.html(template(_.extend(props, { type: genericType })));
|
||||
|
||||
if (animationTemplate) {
|
||||
this.$('.js-animation').append(animationTemplate);
|
||||
}
|
||||
|
||||
this.$el.toggleClass('is-selected', this.model.get('selected'));
|
||||
this.$el.toggleClass('is-disabled', !props.enabled);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_onMouseEnter: function () {
|
||||
if (this._acceptsInputGeometry()) {
|
||||
this.$('.js-animation').addClass('has-autoplay');
|
||||
}
|
||||
},
|
||||
|
||||
_onMouseLeave: function () {
|
||||
if (this._acceptsInputGeometry()) {
|
||||
this.$('.js-animation').removeClass('has-autoplay');
|
||||
}
|
||||
},
|
||||
|
||||
_onClick: function (event) {
|
||||
var linkClicked = event && event.target && $(event.target).hasClass('js-more');
|
||||
if (!linkClicked && this._acceptsInputGeometry()) {
|
||||
this.model.set('selected', true);
|
||||
}
|
||||
},
|
||||
|
||||
_disabledDesc: function (desc) {
|
||||
return _t('components.modals.add-analysis.disabled-option-desc', {
|
||||
simpleGeometryType: this._simpleGeometryTypeInput || _t('components.modals.add-analysis.unknown-geometry-type'),
|
||||
requiredInputGeometries: this._getRequiredInputGeometries()
|
||||
});
|
||||
},
|
||||
|
||||
_getRequiredInputGeometries: function () {
|
||||
return _t('components.modals.add-analysis.geometry-types.' + this.model.getValidInputGeometries());
|
||||
},
|
||||
|
||||
_acceptsInputGeometry: function () {
|
||||
return this.model.acceptsGeometryTypeAsInput(this._simpleGeometryTypeInput);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
<div class="Analysis-animation <% if (enabled) { %>is-enabled<% } %> <% if (type) { %>is-<%- type %><% } %> js-animation u-flex u-alignCenter u-justifyCenter"></div>
|
||||
<div class="Analysis-info u-flex">
|
||||
<div class="ModalBlockList-itemInput CDB-Size-large">
|
||||
<input class="CDB-Radio" type="radio" value="true"
|
||||
<% if (selected) { %>checked="checked"<% } %>
|
||||
<% if (!enabled) { %>disabled="disabled"<% } %>
|
||||
>
|
||||
<span class="u-iBlock CDB-Radio-face"></span>
|
||||
</div>
|
||||
<div class="ModalBlockList-inner">
|
||||
<div class="ModalBlockList-item-header u-bSpace">
|
||||
<h2 class="ModalBlockList-item-headerTitle CDB-Text CDB-Size-large u-rSpace--m u-ellipsis" title="<%- title %>">
|
||||
<%- title %>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="ModalBlockList-item-body">
|
||||
<p class="CDB-Text CDB-Size-small u-secondaryTextColor">
|
||||
<%- desc %>
|
||||
</p>
|
||||
<% if (link) { %>
|
||||
<a class="Analysis-link CDB-Text CDB-Size-small u-tSpace-xl u-actionTextColor u-upperCase js-more track-<%- type %>-modal-learn" href="<%- link %>" target="_blank">
|
||||
<%- _t('components.modals.add-analysis.more-info') %>
|
||||
</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,28 @@
|
||||
var _ = require('underscore');
|
||||
var Backbone = require('backbone');
|
||||
var AnalysisOptionModel = require('./analysis-option-models/analysis-option-model');
|
||||
|
||||
module.exports = Backbone.Collection.extend({
|
||||
|
||||
model: function (d, opts) {
|
||||
var Model = d.Model || AnalysisOptionModel;
|
||||
|
||||
var attrs = _.omit(d, 'Model', 'nodeAttrs');
|
||||
|
||||
return new Model(attrs, {nodeAttrs: d.nodeAttrs});
|
||||
},
|
||||
|
||||
initialize: function (models, opts) {
|
||||
this.on('change:selected', this._onSelectedChange, this);
|
||||
},
|
||||
|
||||
_onSelectedChange: function (changedModel, isSelected) {
|
||||
if (isSelected) {
|
||||
this.each(function (m) {
|
||||
if (m !== changedModel) {
|
||||
m.set('selected', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,64 @@
|
||||
var _ = require('underscore');
|
||||
var GeneratedAnalysisOptionModel = require('./analysis-option-models/generated-analysis-option-model');
|
||||
var camshaftReference = require('camshaft-reference');
|
||||
var latestCamshaftReference = camshaftReference.getVersion('latest');
|
||||
var Analyses = require('builder/data/analyses');
|
||||
|
||||
/**
|
||||
* Analysis definitions, organized in buckets per top-level category
|
||||
*
|
||||
* - {Obj} -> options (userModel, configModel, queryGeometryModel)
|
||||
*/
|
||||
module.exports = function (options) {
|
||||
var categories = {
|
||||
create_clean: {
|
||||
title: _t('analysis-category.create-clean'),
|
||||
analyses: Analyses.getAnalysesByModalCategory('create_clean', options)
|
||||
},
|
||||
data_transformation: {
|
||||
title: _t('analysis-category.data-transformation'),
|
||||
analyses: Analyses.getAnalysesByModalCategory('data_transformation', options)
|
||||
},
|
||||
analyze_predict: {
|
||||
title: _t('analysis-category.analyze-predict'),
|
||||
analyses: Analyses.getAnalysesByModalCategory('analyze_predict', options)
|
||||
}
|
||||
};
|
||||
|
||||
var alsoGenerateFromCamshaftReference = options.userModel.featureEnabled('generate_analysis_options');
|
||||
|
||||
if (alsoGenerateFromCamshaftReference) {
|
||||
var implementedAnalyses = _.reduce(Object.keys(categories), function (memo, category) {
|
||||
return memo.concat(
|
||||
categories[category].analyses.map(function (analysis) {
|
||||
return analysis.nodeAttrs.type;
|
||||
})
|
||||
);
|
||||
}, []);
|
||||
|
||||
categories['generated'] = {
|
||||
title: 'Generated analyses by the Camshaft reference v' + _.last(camshaftReference.versions),
|
||||
analyses: _.compact(
|
||||
Object
|
||||
.keys(latestCamshaftReference.analyses)
|
||||
.filter(function (type) {
|
||||
return type !== 'source' && !_.contains(implementedAnalyses, type);
|
||||
})
|
||||
.map(function (type) {
|
||||
if (!Analyses.isAnalysisValidByType(type, options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return {
|
||||
Model: GeneratedAnalysisOptionModel,
|
||||
nodeAttrs: {type: type},
|
||||
title: type,
|
||||
desc: JSON.stringify(latestCamshaftReference.analyses[type])
|
||||
};
|
||||
})
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
return categories;
|
||||
};
|
||||
@@ -0,0 +1,122 @@
|
||||
var _ = require('underscore');
|
||||
var CoreView = require('backbone/core-view');
|
||||
var AnalysisCategoryView = require('./analysis-category-pane-view');
|
||||
var createTemplateTabPane = require('builder/components/tab-pane/create-template-tab-pane');
|
||||
var template = require('./add-analyses.tpl');
|
||||
var tabPaneButtonTemplate = require('./tab-pane-button-template.tpl');
|
||||
var tabPaneTemplate = require('./tab-pane-template.tpl');
|
||||
var analysesTypes = require('./analyses-types');
|
||||
var Router = require('builder/routes/router');
|
||||
|
||||
/**
|
||||
* View to select the analysis to create.
|
||||
*/
|
||||
module.exports = CoreView.extend({
|
||||
className: 'Dialog-content Dialog-content--expanded',
|
||||
|
||||
events: {
|
||||
'click .js-add': '_onAddAnalysis'
|
||||
},
|
||||
|
||||
initialize: function (opts) {
|
||||
if (!opts.modalModel) throw new Error('modalModel is required');
|
||||
if (!opts.analysisOptionsCollection) throw new Error('analysisOptionsCollection is required');
|
||||
if (!opts.analysisOptions) throw new Error('analysisOptions is required');
|
||||
if (!opts.layerDefinitionModel) throw new Error('layerDefinitionModel is required');
|
||||
if (!opts.queryGeometryModel) throw new Error('queryGeometryModel is required');
|
||||
|
||||
this._modalModel = opts.modalModel;
|
||||
this._analysisOptions = opts.analysisOptions;
|
||||
this._analysisOptionsCollection = opts.analysisOptionsCollection;
|
||||
this._layerDefinitionModel = opts.layerDefinitionModel;
|
||||
this._queryGeometryModel = opts.queryGeometryModel;
|
||||
|
||||
this.listenTo(this._analysisOptionsCollection, 'change:selected', this._toggleAddButton);
|
||||
this._generateTabPaneItems();
|
||||
},
|
||||
|
||||
render: function () {
|
||||
this.clearSubViews();
|
||||
|
||||
this.$el.html(template());
|
||||
|
||||
var options = {
|
||||
tabPaneOptions: {
|
||||
template: tabPaneTemplate,
|
||||
tabPaneItemOptions: {
|
||||
tagName: 'li',
|
||||
klassName: 'CDB-NavMenu-item'
|
||||
}
|
||||
},
|
||||
tabPaneTemplateOptions: {
|
||||
tagName: 'button',
|
||||
className: 'CDB-NavMenu-link u-upperCase',
|
||||
template: tabPaneButtonTemplate
|
||||
}
|
||||
};
|
||||
|
||||
this._tabPane = createTemplateTabPane(this._tabPaneItems, options);
|
||||
this.addView(this._tabPane);
|
||||
this._$body().append(this._tabPane.render().el);
|
||||
return this;
|
||||
},
|
||||
|
||||
goToTabItem: function (tabItemName) {
|
||||
var tabItem = _.first(this._tabPane.collection.where({ name: tabItemName }));
|
||||
if (tabItem) {
|
||||
tabItem.set('selected', true);
|
||||
this._toggleAddButton(); // set the right state for the add button
|
||||
}
|
||||
},
|
||||
|
||||
_generateTabPaneItems: function () {
|
||||
var availableTypes = _.unique(_.keys(this._analysisOptions));
|
||||
|
||||
this._tabPaneItems = _.map(analysesTypes(this._analysisOptions), function (d) {
|
||||
if (_.contains(availableTypes, d.type)) {
|
||||
return d.createTabPaneItem(this._analysisOptionsCollection, {
|
||||
modalModel: this._modalModel,
|
||||
analysisOptionsCollection: this._analysisOptionsCollection,
|
||||
queryGeometryModel: this._queryGeometryModel
|
||||
});
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
this._tabPaneItems.unshift({
|
||||
label: _t('analysis-category.all'),
|
||||
name: 'all',
|
||||
createContentView: function () {
|
||||
return new AnalysisCategoryView({
|
||||
analysisType: 'all',
|
||||
modalModel: this._modalModel,
|
||||
analysisOptions: this._analysisOptions,
|
||||
analysisOptionsCollection: this._analysisOptionsCollection,
|
||||
queryGeometryModel: this._queryGeometryModel
|
||||
});
|
||||
}.bind(this)
|
||||
});
|
||||
},
|
||||
|
||||
_$body: function () {
|
||||
return this.$('.js-body');
|
||||
},
|
||||
|
||||
_onAddAnalysis: function () {
|
||||
var selectedOptionModel = this._analysisOptionsCollection.find(this._isSelected);
|
||||
var layerDefinitionModel = this._layerDefinitionModel;
|
||||
|
||||
if (selectedOptionModel) {
|
||||
var analysisFormAttrs = selectedOptionModel.getFormAttrs(layerDefinitionModel);
|
||||
this._modalModel.destroy(analysisFormAttrs);
|
||||
Router.goToAnalysisNode(layerDefinitionModel.get('id'), analysisFormAttrs.id);
|
||||
}
|
||||
},
|
||||
|
||||
_toggleAddButton: function () {
|
||||
this.$('.js-add').toggleClass('is-disabled', !this._analysisOptionsCollection.any(this._isSelected));
|
||||
},
|
||||
|
||||
_isSelected: function (m) {
|
||||
return !!m.get('selected');
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
<svg width="308px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#9DE0AD" fill-rule="evenodd" transform="translate(50, 8)">
|
||||
<circle class="aoi-area area01" fill="#5A7E6D" cx="20" cy="36" r="20"></circle>
|
||||
<circle class="aoi-point area-point01" cx="20" cy="36" r="4"></circle>
|
||||
<circle class="aoi-area area02" fill="#5A7E6D" cx="56" cy="28" r="20"></circle>
|
||||
<circle class="aoi-point area-point02" cx="56" cy="28" r="4"></circle>
|
||||
<circle class="aoi-area area03" fill="#5A7E6D" cx="76" cy="44" r="20"></circle>
|
||||
<circle class="aoi-point area-point03" cx="76" cy="44" r="4"></circle>
|
||||
<circle class="aoi-area area04" fill="#5A7E6D" cx="138" cy="60" r="20"></circle>
|
||||
<circle class="aoi-point area-point04" cx="138" cy="60" r="4"></circle>
|
||||
<circle class="aoi-area area05" fill="#5A7E6D" cx="156" cy="20" r="20"></circle>
|
||||
<circle class="aoi-point area-point05" cx="156" cy="20" r="4"></circle>
|
||||
<circle class="aoi-area area06" fill="#5A7E6D" cx="188" cy="28" r="20"></circle>
|
||||
<circle class="aoi-point area-point06" cx="188" cy="28" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,16 @@
|
||||
<svg width="148px" height="141px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#636D72" fill-rule="evenodd">
|
||||
<circle class="Centroid-pointsHighlight" fill="#9DE0AD" cx="74" cy="70" r="4"></circle>
|
||||
<circle class="Centroid-line" fill="none" stroke="#9DE0AD" cx="74.5" cy="70" r="70"></circle>
|
||||
<circle class="Centroid-points Centroid-points01" cx="4" cy="65" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points02" cx="34" cy="85" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points03" cx="103" cy="50" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points04" cx="83" cy="40" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points05" cx="63" cy="90" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points06" cx="144" cy="65" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points07" cx="93" cy="96" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points08" cx="44" cy="55" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points09" cx="112" cy="83" r="4"></circle>
|
||||
<circle class="Centroid-points Centroid-points10" cx="24" cy="45" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,37 @@
|
||||
<svg width="306" height="98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g transform="translate(30, 16)" fill="#636D72">
|
||||
|
||||
<g>
|
||||
<path class="Line Line-01" d="M109,32 L42,29"></path>
|
||||
<path class="Line Line-02" d="M109,32 L72,49"></path>
|
||||
<path class="Line Line-03" d="M109,32 L101,54"></path>
|
||||
<path class="Line Line-04" d="M109,32 L131,60"></path>
|
||||
<path class="Line Line-05" d="M109,32 L82,19"></path>
|
||||
<path class="Line Line-06" d="M109,32 L150,47"></path>
|
||||
<path class="Line Line-07" d="M109,32 L121,4"></path>
|
||||
<path class="Line Line-08" d="M109,32 L141,14"></path>
|
||||
<path class="Line Line-09" d="M109,32 L159,25"></path>
|
||||
</g>
|
||||
|
||||
<circle class="Dot Dot--withColorChange Dot-01" cx="42" cy="29" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-02" cx="72" cy="49" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-03" cx="101" cy="54" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-04" cx="131" cy="60" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-05" cx="82" cy="19" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-06" cx="150" cy="47" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-07" cx="141" cy="14" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-08" cx="121" cy="4" r="4"></circle>
|
||||
<circle class="Dot Dot--withColorChange Dot-09" cx="159" cy="25" r="4"></circle>
|
||||
|
||||
<circle class="Dot Dot--withFadeOut Dot-10" cx="52" cy="54" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-11" cx="4" cy="54" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-12" cx="28" cy="14" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-13" cx="188" cy="6" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-14" cx="196" cy="46" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-15" cx="228" cy="26" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-16" cx="182" cy="29" r="4"></circle>
|
||||
<circle class="Dot Dot--withFadeOut Dot-17" cx="62" cy="9" r="4"></circle>
|
||||
|
||||
<circle class="Dot" fill="white" cx="109" cy="32" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,16 @@
|
||||
<svg width="148px" height="64px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g stroke="none" fill="#636D72">
|
||||
<polyline class="Line" stroke="#9DE0AD" points="4.08007812 29.7382812 34.2617188 49.4335938 24.2285156 9.83007812 43.7246094 18.7578125 62.9414062 54.7128906 73.6425781 30.9160156 92.3808594 59.359375 83.328125 3.75585938 103.042969 14.6777344 111.734375 47.1640625 144.171875 28.3574219"></polyline>
|
||||
<circle class="Dot Dot-01" cx="4" cy="29" r="4"></circle>
|
||||
<circle class="Dot Dot-02" cx="34" cy="49" r="4"></circle>
|
||||
<circle class="Dot Dot-03" cx="24" cy="9" r="4"></circle>
|
||||
<circle class="Dot Dot-04" cx="44" cy="19" r="4"></circle>
|
||||
<circle class="Dot Dot-05" cx="63" cy="54" r="4"></circle>
|
||||
<circle class="Dot Dot-06" cx="74" cy="32" r="4"></circle>
|
||||
<circle class="Dot Dot-07" cx="93" cy="60" r="4"></circle>
|
||||
<circle class="Dot Dot-08" cx="83" cy="4" r="4"></circle>
|
||||
<circle class="Dot Dot-09" cx="103" cy="14" r="4"></circle>
|
||||
<circle class="Dot Dot-10" cx="112" cy="47" r="4"></circle>
|
||||
<circle class="Dot Dot-11" cx="144" cy="29" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,54 @@
|
||||
<svg width="302px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<rect id="path-1" x="0" y="0" width="304" height="96"></rect>
|
||||
<rect id="path-3" x="48" y="0" width="48" height="64"></rect>
|
||||
<mask id="mask-4" x="0" y="0" width="48" height="64" fill="white">
|
||||
<use xlink:href="#path-3"></use>
|
||||
</mask>
|
||||
<rect id="path-5" x="0" y="31" width="49" height="33"></rect>
|
||||
<mask id="mask-6" x="0" y="0" width="49" height="33" fill="white">
|
||||
<use xlink:href="#path-5"></use>
|
||||
</mask>
|
||||
<rect id="path-7" x="95" y="0" width="57" height="24"></rect>
|
||||
<mask id="mask-8" x="0" y="0" width="57" height="24" fill="white">
|
||||
<use xlink:href="#path-7"></use>
|
||||
</mask>
|
||||
<rect id="path-9" x="151" y="8" width="18" height="16"></rect>
|
||||
<mask id="mask-10" x="0" y="0" width="18" height="16" fill="white">
|
||||
<use xlink:href="#path-9"></use>
|
||||
</mask>
|
||||
<rect id="path-11" x="24" y="16" width="25" height="16"></rect>
|
||||
<mask id="mask-12" x="0" y="0" width="25" height="16" fill="white">
|
||||
<use xlink:href="#path-11"></use>
|
||||
</mask>
|
||||
<rect id="path-13" x="95" y="23" width="25" height="25"></rect>
|
||||
<mask id="mask-14" x="0" y="0" width="25" height="25" fill="white">
|
||||
<use xlink:href="#path-13"></use>
|
||||
</mask>
|
||||
<rect id="path-15" x="119" y="23" width="58" height="33"></rect>
|
||||
<mask id="mask-16" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="58" height="33" fill="white">
|
||||
<use xlink:href="#path-15"></use>
|
||||
</mask>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use id="Rectangle-10" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
<g transform="translate(64, 16)" stroke="#282C2F" stroke-width="2" fill="#9DE0AD">
|
||||
<use class="rect-01" mask="url(#mask-4)" fill-opacity="0.32" xlink:href="#path-3"></use>
|
||||
<use class="rect-02" mask="url(#mask-6)" fill-opacity="0.8" xlink:href="#path-5"></use>
|
||||
<use class="rect-03" mask="url(#mask-8)" fill-opacity="0.639999986" xlink:href="#path-7"></use>
|
||||
<use class="rect-04" mask="url(#mask-10)" fill-opacity="0.160000011" xlink:href="#path-9"></use>
|
||||
<use class="rect-05" mask="url(#mask-12)" fill-opacity="0.48" xlink:href="#path-11"></use>
|
||||
<use class="rect-06" mask="url(#mask-14)" xlink:href="#path-13"></use>
|
||||
<use class="rect-07" mask="url(#mask-16)" fill-opacity="0.800000012" xlink:href="#path-15"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,24 @@
|
||||
<svg width="306" height="98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<circle class="Dot" cx="117" cy="33" r="4"></circle>
|
||||
<circle class="Dot" cx="91" cy="57" r="4"></circle>
|
||||
<circle class="Dot--withSplash Dot--withSplash--01" cx="91" cy="57" r="4"></circle>
|
||||
<circle class="Dot" cx="73" cy="27" r="4"></circle>
|
||||
<circle class="Dot" cx="223" cy="39" r="4"></circle>
|
||||
<circle class="Dot--withSplash Dot--withSplash--02" cx="223" cy="39" r="4"></circle>
|
||||
<circle class="Dot" cx="125" cy="69" r="4"></circle>
|
||||
<circle class="Dot" cx="64" cy="65" r="4"></circle>
|
||||
<circle class="Dot" cx="151" cy="71" r="4"></circle>
|
||||
<circle class="Dot--withSplash Dot--withSplash--03" cx="151" cy="71" r="4"></circle>
|
||||
<circle class="Dot" cx="205" cy="75" r="4"></circle>
|
||||
<circle class="Dot" cx="163" cy="61" r="4"></circle>
|
||||
<circle class="Dot" cx="133" cy="43" r="4"></circle>
|
||||
<circle class="Dot" cx="189" cy="46" r="4"></circle>
|
||||
<circle class="Dot--withSplash Dot--withSplash--04" cx="189" cy="46" r="4"></circle>
|
||||
<circle class="Dot" cx="242" cy="45" r="4"></circle>
|
||||
<circle class="Dot" cx="155" cy="39" r="4"></circle>
|
||||
<circle class="Dot" cx="195" cy="23" r="4"></circle>
|
||||
<circle class="Dot--green Dot-01" cx="91" cy="57" r="4"></circle>
|
||||
<circle class="Dot--green Dot-02" cx="223" cy="39" r="4"></circle>
|
||||
<circle class="Dot--green Dot-03" cx="151" cy="71" r="4"></circle>
|
||||
<circle class="Dot--green Dot-04" cx="189" cy="46" r="4"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,38 @@
|
||||
<svg width="304" height="96" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#636D72" stroke="none" stroke-width="1">
|
||||
<g stroke="#FFFFFF" stroke-linecap="square">
|
||||
<path class="Line" d="M174.5,58.5 L166.5,35.5" id="Line"></path>
|
||||
<path class="Line" d="M174.5,58.5 L145.5,40.5" id="Line"></path>
|
||||
<path class="Line" d="M128.5,29.5 L145.5,40.5" id="Line"></path>
|
||||
<path class="Line" d="M128.5,29.5 L84.5,24.5" id="Line"></path>
|
||||
<path class="Line--withHighlight" d="M174.5,58.5 L136.5,66.5" id="Line"></path>
|
||||
<path class="Line--withHighlight" d="M103.5,53.5 L136.5,66.5" id="Line"></path>
|
||||
<path class="Line--withHighlight" d="M76.5,61.5 L104.5,53.5" id="Line"></path>
|
||||
<path class="Line" d="M174.5,58.5 L162.5,68.5" id="Line"></path>
|
||||
<path class="Line" d="M174.5,58.5 L217.5,71.5" id="Line"></path>
|
||||
<path class="Line" d="M235.5,35.5 L217.5,71.5" id="Line"></path>
|
||||
<path class="Line" d="M235.5,35.5 L253.5,41.5" id="Line"></path>
|
||||
<path class="Line" d="M202.5,42.5 L166.5,35.5" id="Line"></path>
|
||||
<path class="Line" d="M202.5,42.5 L207.5,18.5" id="Line"></path>
|
||||
<path class="Line--withFade" d="M174.5,58.5 L136.5,66.5" id="Line"></path>
|
||||
<path class="Line--withFade" d="M103.5,53.5 L136.5,66.5" id="Line"></path>
|
||||
<path class="Line--withFade" d="M76.5,61.5 L104.5,53.5" id="Line"></path>
|
||||
</g>
|
||||
|
||||
<circle class="Dot Dot-01" cx="129" cy="30" r="4"></circle>
|
||||
<circle class="Dot Dot-02" cx="85" cy="24" r="4"></circle>
|
||||
<circle class="Dot Dot-03" cx="235" cy="36" r="4"></circle>
|
||||
<circle class="Dot Dot-04" cx="163" cy="68" r="4"></circle>
|
||||
<circle class="Dot Dot-05" cx="217" cy="72" r="4"></circle>
|
||||
<circle class="Dot Dot-06" cx="145" cy="40" r="4"></circle>
|
||||
<circle class="Dot Dot-07" cx="201" cy="43" r="4"></circle>
|
||||
<circle class="Dot Dot-08" cx="254" cy="42" r="4"></circle>
|
||||
<circle class="Dot Dot-09" cx="167" cy="36" r="4"></circle>
|
||||
<circle class="Dot Dot-10" cx="207" cy="20" r="4"></circle>
|
||||
|
||||
<circle class="Dot-11 Dot--withHighlight" cx="103" cy="54" r="4"></circle>
|
||||
<circle class="Dot-12 Dot--withHighlight" cx="137" cy="66" r="4"></circle>
|
||||
<circle class="Dot-13 Dot--withHighlight" cx="76" cy="62" r="4"></circle>
|
||||
<circle class="Dot-14 Dot--withHighlight" cx="175" cy="58" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,19 @@
|
||||
<svg width="306px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#636D72" fill-rule="evenodd" transform="translate(70, 15)">
|
||||
<polygon fill="none" class="Filter-line" stroke="#9DE0AD" points="73.703125 13.6435547 97.5439453 17.5722656 106.554688 42.9824219 92.5517578 55.5849609 63.3261719 53.5224609 54.0126953 15.3515625 59.0839844 11.4414062"></polygon>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--01" cx="95" cy="20" r="4"></circle>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--06" cx="73" cy="24" r="4"></circle>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--02" cx="103" cy="42" r="4"></circle>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--03" cx="91" cy="52" r="4"></circle>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--05" cx="57" cy="14" r="4"></circle>
|
||||
<circle class="Filter-dotHighlight Filter-dotHighlight--04" cx="65" cy="50" r="4"></circle>
|
||||
<circle class="Filter-dot circle08" cx="163" cy="20" r="4"></circle>
|
||||
<circle class="Filter-dot circle07" cx="31" cy="38" r="4"></circle>
|
||||
<circle class="Filter-dot circle06" cx="13" cy="8" r="4"></circle>
|
||||
<circle class="Filter-dot circle05" cx="4" cy="46" r="4"></circle>
|
||||
<circle class="Filter-dot circle04" cx="145" cy="56" r="4"></circle>
|
||||
<circle class="Filter-dot circle03" cx="129" cy="27" r="4"></circle>
|
||||
<circle class="Filter-dot circle02" cx="182" cy="26" r="4"></circle>
|
||||
<circle class="Filter-dot circle01" cx="135" cy="4" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,16 @@
|
||||
<svg width="302px" height="99px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#9DE0AD" fill-rule="evenodd">
|
||||
<path d="M0.5,41.5 L305.5,24.5" class="Georeference-street00" stroke="#282C2F" stroke-width="8" stroke-linecap="square"></path>
|
||||
<path d="M134,0 L141,91" class="Georeference-street01" stroke="#282C2F" stroke-width="8" stroke-linecap="square"></path>
|
||||
<path d="M258,0 L265,91" class="Georeference-street02" stroke="#282C2F" stroke-width="8" stroke-linecap="square"></path>
|
||||
<text class="Georeference-point02-text" font-family="Open Sans" font-size="10" font-weight="300" fill="#FFFFFF">
|
||||
<tspan x="63" y="62">-63.578373</tspan>
|
||||
<tspan x="63" y="76">44.642619</tspan>
|
||||
</text>
|
||||
<text class="Georeference-point01-text" font-family="Open Sans" font-size="10" font-weight="300" fill="#FFFFFF">
|
||||
<tspan x="198" y="54">IP 214.80.33.47</tspan>
|
||||
</text>
|
||||
<circle class="Dot Dot-01" fill="#9DE0AD" cx="43" cy="40" r="8"></circle>
|
||||
<circle class="Dot Dot-02" fill="#9DE0AD" cx="183" cy="32" r="8"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,20 @@
|
||||
<svg width="176" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#9DE0AD">
|
||||
<polygon fill="none" class="Group-line" stroke="#9EE0AD" points="88.4493047 0.0859375 175.58896 0.0859375 175.58896 23.2574383 135.581141 32.7431641 135.581141 54.9504597 117.092373 54.9504597 101.982508 63.6816406 59.4503976 63.6816406 44.9366094 55.6914063 1 55.6914063 1 24.8914834 44.6201536 24.8914834 56.9346563 0"></polygon>
|
||||
<circle class="Group-point Group-point01" cx="60" cy="60" r="4"></circle>
|
||||
<circle class="Group-point Group-point02" cx="100" cy="4" r="4"></circle>
|
||||
<circle class="Group-point Group-point03" cx="132" cy="52" r="4"></circle>
|
||||
<circle class="Group-point Group-point04" cx="116" cy="52" r="4"></circle>
|
||||
<circle class="Group-point Group-point05" cx="116" cy="36" r="4"></circle>
|
||||
<circle class="Group-point Group-point06" cx="116" cy="20" r="4"></circle>
|
||||
<circle class="Group-point Group-point07" cx="172" cy="20" r="4"></circle>
|
||||
<circle class="Group-point Group-point08" cx="172" cy="4" r="4"></circle>
|
||||
<circle class="Group-point Group-point09" cx="44" cy="28" r="4"></circle>
|
||||
<circle class="Group-point Group-point10" cx="4" cy="28" r="4"></circle>
|
||||
<circle class="Group-point Group-point11" cx="4" cy="52" r="4"></circle>
|
||||
<circle class="Group-point Group-point12" cx="44" cy="52" r="4"></circle>
|
||||
<circle class="Group-point Group-point13" cx="100" cy="60" r="4"></circle>
|
||||
<circle class="Group-point Group-point14" cx="132" cy="36" r="4"></circle>
|
||||
<circle class="Group-point Group-point15" cx="60" cy="4" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,19 @@
|
||||
<svg width="308px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g fill="#636D72" fill-rule="evenodd" transform="translate(55, 15)">
|
||||
<circle class="intersect intersect-layer" fill="#5A7E6D" stroke="#9DE0AD" cx="101" cy="32" r="32"></circle>
|
||||
<circle class="intersect intersect-circle1" cx="57" cy="14" r="4"></circle>
|
||||
<circle class="intersect intersect-circle2" cx="31" cy="38" r="4"></circle>
|
||||
<circle class="intersect intersect-circle3" cx="13" cy="8" r="4"></circle>
|
||||
<circle class="intersect intersect-circle4" cx="163" cy="20" r="4"></circle>
|
||||
<circle class="intersect intersect-circle5" cx="65" cy="50" r="4"></circle>
|
||||
<circle class="intersect intersect-circle6" cx="4" cy="46" r="4"></circle>
|
||||
<circle class="intersect intersect-circle1Highlight" cx="91" cy="52" r="4"></circle>
|
||||
<circle class="intersect intersect-circle7" cx="145" cy="56" r="4"></circle>
|
||||
<circle class="intersect intersect-circle2Highlight" cx="103" cy="42" r="4"></circle>
|
||||
<circle class="intersect intersect-circle3Highlight" cx="73" cy="24" r="4"></circle>
|
||||
<circle class="intersect intersect-circle4Highlight" cx="129" cy="27" r="4"></circle>
|
||||
<circle class="intersect intersect-circle8" cx="182" cy="26" r="4"></circle>
|
||||
<circle class="intersect intersect-circle5Highlight" cx="95" cy="20" r="4"></circle>
|
||||
<circle class="intersect intersect-circle9" cx="135" cy="4" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,13 @@
|
||||
<svg width="185px" height="64px" viewBox="512 388 185 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="Group" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(513.000000, 389.000000)">
|
||||
<polygon class="Path Path-01" stroke="#FFFFFF" points="7.92876627e-08 47 22.7004054 47 22.7004054 62.1132254 0 62.1132254"></polygon>
|
||||
<polygon class="Path Path-03" stroke="#FFFFFF" points="160 24 182.700012 24 182.700012 38.9848139 160 38.9848139"></polygon>
|
||||
<polygon class="Path Path-02" stroke="#FFFFFF" points="87.7216797 0.278320312 110.836973 0.278320312 110.836973 24.2279707 87.8211856 24.2279707"></polygon>
|
||||
<polygon class="Path Path-03Green" stroke="#9DE0AD" points="128 24 182.862039 24 182.862039 55.6141883 128.202651 55.6141883"></polygon>
|
||||
<polygon class="Path Path-01Green" stroke="#9DE0AD" points="0.0502868199 31 47.7467919 31 47.7467919 62.177811 0 62.177811"></polygon>
|
||||
<polygon class="Path Path-02Green" stroke="#9DE0AD" points="63.9970703 0.033203125 110.710209 0.033203125 110.710209 62.0109574 63.8597689 62.0109574"></polygon>
|
||||
<circle class="Dot Dot-01" fill="#FFFFFF" cx="7" cy="55" r="4"></circle>
|
||||
<circle class="Dot Dot-02" fill="#FFFFFF" cx="99" cy="11" r="4"></circle>
|
||||
<circle class="Dot Dot-03" fill="#FFFFFF" cx="171" cy="31" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,18 @@
|
||||
<svg width="306" height="98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g transform="translate(50, 20)">
|
||||
<circle class="Dot Dot--01 Dot--gray" cx="4" cy="46" r="4"></circle>
|
||||
<circle class="Dot Dot--02 Dot--gray" cx="31" cy="38" r="4"></circle>
|
||||
<circle class="Dot Dot--03 Dot--gray" cx="13" cy="8" r="4"></circle>
|
||||
<circle class="Dot Dot--04 Dot--green" cx="57" cy="14" r="4"></circle>
|
||||
<circle class="Dot Dot--05 Dot--green" cx="65" cy="50" r="4"></circle>
|
||||
<circle class="Dot Dot--06 Dot--green" cx="91" cy="52" r="4"></circle>
|
||||
<circle class="Dot Dot--07 Dot--green" cx="103" cy="42" r="4"></circle>
|
||||
<circle class="Dot Dot--08 Dot--green" cx="73" cy="24" r="4"></circle>
|
||||
<circle class="Dot Dot--09 Dot--green" cx="95" cy="20" r="4"></circle>
|
||||
<circle class="Dot Dot--10 Dot--darkGray" cx="145" cy="56" r="4"></circle>
|
||||
<circle class="Dot Dot--11 Dot--darkGray" cx="129" cy="27" r="4"></circle>
|
||||
<circle class="Dot Dot--12 Dot--darkGray" cx="135" cy="4" r="4"></circle>
|
||||
<circle class="Dot Dot--13 Dot--white" cx="163" cy="20" r="4"></circle>
|
||||
<circle class="Dot Dot--14 Dot--white" cx="182" cy="26" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg width="306px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="Mod-Analysis" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g fill="#9DE0AD">
|
||||
<text x="8" y="19" class="Text Text-LH" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal">
|
||||
<%- _t('components.modals.add-analysis.option-types.moran-cluster.low-high') %>
|
||||
</text>
|
||||
<text x="227" y="19" class="Text Text-HH" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal">
|
||||
<%- _t('components.modals.add-analysis.option-types.moran-cluster.high-high') %>
|
||||
</text>
|
||||
<text x="233" y="85" class="Text Text-HL" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal">
|
||||
<%- _t('components.modals.add-analysis.option-types.moran-cluster.high-low') %>
|
||||
</text>
|
||||
<text x="10" y="85" class="Text Text-LL" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal">
|
||||
<%- _t('components.modals.add-analysis.option-types.moran-cluster.low-low') %>
|
||||
</text>
|
||||
</g>
|
||||
<g fill="#FFF">
|
||||
<circle class="Dot Dot-04" fill-opacity="0.4" cx="106" cy="57" r="4"></circle>
|
||||
<circle class="Dot Dot-04" fill-opacity="0.4" cx="137" cy="66" r="4"></circle>
|
||||
<circle class="Dot Dot-04" fill-opacity="0.4" cx="79" cy="62" r="4"></circle>
|
||||
<circle class="Dot Dot-06" fill-opacity="0.6" cx="193" cy="70" r="4"></circle>
|
||||
<circle class="Dot Dot-06" fill-opacity="0.6" cx="175" cy="58" r="4"></circle>
|
||||
<circle class="Dot Dot-08" fill-opacity="0.8" cx="129" cy="30" r="4"></circle>
|
||||
<circle class="Dot Dot-08" fill-opacity="0.8" cx="145" cy="40" r="4"></circle>
|
||||
<circle class="Dot Dot-1" cx="231" cy="36" r="4"></circle>
|
||||
<circle class="Dot Dot-1" cx="197" cy="40" r="4"></circle>
|
||||
<circle class="Dot Dot-1" cx="250" cy="38" r="4"></circle>
|
||||
<circle class="Dot Dot-1" cx="167" cy="36" r="4"></circle>
|
||||
<circle class="Dot Dot-1" cx="203" cy="20" r="4"></circle>
|
||||
</g>
|
||||
<g stroke="#9DE0AD">
|
||||
<path d="M0,49 L304,49" class="Line Line-horizontal" stroke-dasharray="2,3"></path>
|
||||
<path d="M152,0 L152,98" class="Line Line-vertical" stroke-dasharray="2,3"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,37 @@
|
||||
<svg width="306px" height="98px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g transform="translate(87, 22)" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="square">
|
||||
<path class="Arrow-04" d="M98.5,45.5 L97.5,40.5" stroke="#9CE0AC"></path>
|
||||
<path class="Arrow-04" d="M98.5,45.5 L92.5,46.5" stroke="#9CE0AC"></path>
|
||||
<path class="Line-04" d="M75.5,34.5 L98.5,45.5" stroke="#9DE0AD"></path>
|
||||
|
||||
<path class="Line-03" d="M0.5,44.5 L3.5,39.5" stroke="#9CE0AC"></path>
|
||||
<path class="Line-03" d="M0.5,44.5 L5.5,47.5" stroke="#9CE0AC"></path>
|
||||
<path class="Line-03" d="M0.5,44.5 L55.5,32.5" stroke="#9DE0AD"></path>
|
||||
|
||||
<g transform="translate(75.000000, 1.000000)">
|
||||
<path class="Arrow-01" d="M31.5,8.5 L32.5,2.5" stroke="#95D6A6"></path>
|
||||
<path class="Arrow-01" d="M26.5,0.5 L32.5,2.5" stroke="#95D6A6"></path>
|
||||
<path class="Line-01" d="M0.5,18.5 L32.5,2.5" stroke="#9DE0AD"></path>
|
||||
</g>
|
||||
|
||||
<g transform="translate(19.000000, 0.000000)" stroke="#979797">
|
||||
<path class="Arrow-02" d="M36.5,19.5 L35.5,14.5"></path>
|
||||
<path class="Arrow-02" d="M36.5,19.5 L31.5,21.5"></path>
|
||||
<path class="Line-02" d="M0.5,0.5 L36.5,19.5"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g stroke="#636D72">
|
||||
<path d="M0,49 L304,49" class="Line Line-horizontal" stroke-dasharray="2,3"></path>
|
||||
<path d="M152,0 L152,98" class="Line Line-vertical" stroke-dasharray="2,3"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="translate(72, 11)">
|
||||
<circle class="Dot Dot--center" cx="80" cy="38" r="4" stroke="#9DE0AD" fill="#2E3C43"></circle>
|
||||
<circle class="Dot Dot-01" fill="#9DE0AD" cx="133" cy="10" r="4"></circle>
|
||||
<circle class="Dot Dot-02" fill="#979EA1" cx="24" cy="4" r="4"></circle>
|
||||
<circle class="Dot Dot-03" fill="#9DE0AD" cx="4" cy="57" r="4"></circle>
|
||||
<circle class="Dot Dot-04" fill="#9DE0AD" cx="122" cy="61" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,22 @@
|
||||
<svg width="306" height="98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g transform="translate(30, 16)" fill="#9DE0AD">
|
||||
<circle class="Dot" cx="42" cy="29" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-01" cx="72" cy="49" r="4"></circle>
|
||||
<circle class="Dot" cx="52" cy="54" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-02" cx="4" cy="54" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-03" cx="28" cy="14" r="4"></circle>
|
||||
<circle class="Dot" cx="188" cy="6" r="4"></circle>
|
||||
<circle class="Dot" cx="196" cy="46" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-03" cx="159" cy="25" r="4"></circle>
|
||||
<circle class="Dot" cx="228" cy="26" r="4"></circle>
|
||||
<circle class="Dot" cx="141" cy="14" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-04" cx="121" cy="4" r="4"></circle>
|
||||
<circle class="Dot" cx="101" cy="54" r="4"></circle>
|
||||
<circle class="Dot" cx="182" cy="29" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-05" cx="131" cy="60" r="4"></circle>
|
||||
<circle class="Dot" cx="82" cy="19" r="4"></circle>
|
||||
<circle class="Dot" cx="150" cy="47" r="4"></circle>
|
||||
<circle class="Dot--withFadeOut Dot-06" cx="62" cy="9" r="4"></circle>
|
||||
<circle class="Dot" cx="109" cy="32" r="4"></circle>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<%- label %>
|
||||
@@ -0,0 +1,5 @@
|
||||
<div class="Modal-navigation">
|
||||
<ul class="Modal-navigationInner CDB-Text is-semibold CDB-Size-medium js-menu"></ul>
|
||||
</div>
|
||||
<div class="Modal-inner Modal-inner--with-navigation js-content">
|
||||
</div>
|
||||