64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var LegendBaseDefModel = require('./legend-base-definition-model');
|
||
|
var StyleHelper = require('builder/helpers/style');
|
||
|
|
||
|
module.exports = LegendBaseDefModel.extend({
|
||
|
defaults: _.extend({}, LegendBaseDefModel.prototype.defaults,
|
||
|
{
|
||
|
type: 'custom',
|
||
|
items: [],
|
||
|
html: ''
|
||
|
}
|
||
|
),
|
||
|
|
||
|
parse: function (r, opts) {
|
||
|
var attrs = LegendBaseDefModel.prototype.parse.call(this, r);
|
||
|
|
||
|
if (r.definition) {
|
||
|
attrs.items = r.definition.categories;
|
||
|
attrs.html = r.definition.html || '';
|
||
|
} else {
|
||
|
attrs.items = StyleHelper.getStyleCategories(opts.layerDefinitionModel.styleModel);
|
||
|
}
|
||
|
attrs.type = 'custom';
|
||
|
return attrs;
|
||
|
},
|
||
|
|
||
|
toJSON: function () {
|
||
|
var definition = {
|
||
|
categories: this.get('items').map(function (item) {
|
||
|
return {
|
||
|
title: (item.title || '').toString(),
|
||
|
color: item.color,
|
||
|
icon: item.image || item.icon
|
||
|
};
|
||
|
})
|
||
|
};
|
||
|
|
||
|
if (this.hasCustomHtml()) {
|
||
|
definition.html = this.get('html');
|
||
|
}
|
||
|
|
||
|
return _.extend(
|
||
|
{},
|
||
|
_.omit(this.attributes, 'items', 'html', 'postHTMLSnippet', 'preHTMLSnippet', 'customState'),
|
||
|
{
|
||
|
pre_html: this.get('preHTMLSnippet'),
|
||
|
post_html: this.get('postHTMLSnippet')
|
||
|
},
|
||
|
{
|
||
|
conf: {
|
||
|
columns: this.get('customState')
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
definition: definition
|
||
|
}
|
||
|
);
|
||
|
},
|
||
|
|
||
|
hasCustomHtml: function () {
|
||
|
return this.get('html') !== '';
|
||
|
}
|
||
|
});
|