carto/lib/mess/tree/reference.js

731 lines
23 KiB
JavaScript

(function(tree) {
tree.Reference = {
'symbolizers' : {
'map': {
'background-color': {
'css': 'background-color',
'default-value': 'none',
'default-meaning': 'transparent',
'type': 'color',
'description': 'Map Background color'
}
},
'polygon': {
'fill': {
'css': 'polygon-fill',
'api': 'fill',
'type': 'color',
'availability': '0.5.1',
'default-value': 'rgb(128,128,128)',
'default-meaning': 'grey',
'doc': 'Fill color to assign to a polygon'
},
'gamma': {
'css': 'polygon-gamma',
'api': 'gamma',
'type': 'float',
'availability': '0.7.0',
'default-value': 1,
'default-meaning': 'fully antialiased',
'range': '0-1',
'doc': 'Level of antialiasing of polygon edges'
},
'fill-opacity': {
'css': 'polygon-opacity',
'type': 'float',
'default-value': 1,
'default-meaning': 'opaque'
},
'meta-output': {
'css': 'polygon-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'polygon-meta-writer',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter specified'
}
},
'line': {
'stroke': {
'css': 'line-color',
'default-value': 'black',
'type': 'color',
'doc': 'The color of a drawn line'
},
'stroke-width': {
'css': 'line-width',
'default-value': 1,
'type': 'float',
'doc': 'The width of a line'
},
'stroke-opacity': {
'css': 'line-opacity',
'default-value': 1,
'type': 'float',
'default-meaning': 'opaque',
'doc': 'The opacity of a line'
},
'stroke-linejoin': {
'css': 'line-join',
'default-value': 'miter',
'type': [
'miter',
'round',
'bevel'
],
'doc': 'The behavior of lines when joining'
},
'stroke-linecap': {
'css': 'line-cap',
'default-value': 'butt',
'type': [
'butt',
'round',
'square'
],
'doc': 'The display of line endings.'
},
'stroke-dasharray': {
'css': 'line-dasharray',
'type': 'numbers',
'doc': 'A pair of length values [a,b], where (a) is the dash length and (b) is the gap length respectively. More than two values are supported as well (e.g. to start the line not with a stroke, but with a gap).',
'default-value': 'none'
},
'meta-output': {
'css': 'line-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'line-meta-writer',
'type': 'string',
'default-value': ''
}
},
'markers': {
'line-color': {
'css': 'marker-line-color',
'type': 'color'
},
'line-width': {
'css': 'marker-line-width',
'type': 'float'
},
'line-opacity': {
'css': 'marker-line-opacity',
'default-value': 1,
'default-meaning': 'opaque',
'type': 'float'
},
'placement': {
'css': 'marker-placement',
'type': [
'point',
'line'
]
},
'type': {
'css': 'marker-type',
'type': [
'arrow',
'ellipse'
]
},
'width': {
'css': 'marker-width',
'type': 'float'
},
'height': {
'css': 'marker-height',
'type': 'float'
},
'fill': {
'css': 'marker-fill',
'type': 'color'
},
'fill-opacity': {
'css': 'marker-opacity',
'default-value': 1,
'default-meaning': 'opaque',
'type': 'float'
},
'file': {
'css': 'marker-file',
'type': 'uri'
},
'allow_overlap': {
'css': 'marker-allow-overlap',
'type': 'boolean',
'default-value': 'false',
'default-meaning': 'do not allow overlap'
},
'spacing': {
'css': 'marker-spacing',
'docs': 'Space between repeated labels',
'type': 'float'
},
'max_error': {
'css': 'marker-max-error',
'type': 'float'
},
'transform': {
'css': 'marker-transform',
'type': 'string'
},
'meta-output': {
'css': 'marker-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'marker-meta-writer',
'type': 'string',
'default-value': 'none'
}
},
'shield': {
'name': {
'css': 'shield-name',
'type': 'none',
'required': true
},
'face_name': {
'css': 'shield-face-name',
'type': 'string',
'validate': 'font',
'required': true
},
'size': {
'css': 'shield-size',
'type': 'float'
},
'fill': {
'css': 'shield-fill',
'type': 'color'
},
'min_distance': {
'css': 'shield-min-distance',
'type': 'float',
'default-value': 0,
'doc': 'Minimum distance to the next shield symbol, not necessarily the same shield.'
},
'spacing': {
'css': 'shield-spacing',
'type': 'float',
'default-value': 0,
'doc': 'The spacing between repeated occurrences of the same shield'
},
'character_spacing': {
'css': 'shield-spacing',
'type': 'float',
'default-value': 0,
'doc': 'Horizontal spacing between characters (in pixels). Currently works for point placement only, not line placement.'
},
'line_spacing': {
'css': 'shield-line-spacing',
'doc': 'Vertical spacing between lines of multiline labels (in pixels)',
'type': 'float'
},
'file': {
'css': 'shield-file',
'type': 'uri',
'default-value': 'none'
},
'width': {
'css': 'shield-width',
'type': 'float',
'default-value': "The image's width"
},
'height': {
'css': 'shield-height',
'type': 'float',
'default-value': "The image's height"
},
'type': {
'css': 'shield-type',
'type': 'None',
'default-value': 'The type of the image file: e.g. png'
},
'meta-output': {
'css': 'shield-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'shield-meta-writer',
'type': 'string',
'default-value': ''
}
},
'line-pattern': {
'file': {
'css': 'line-pattern-file',
'type': 'uri'
},
'width': {
'css': 'line-pattern-width',
'type': 'float'
},
'height': {
'css': 'line-pattern-height',
'type': 'float'
},
'type': {
'css': 'line-pattern-type',
'type': 'none'
},
'meta-output': {
'css': 'line-pattern-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'line-pattern-meta-writer',
'type': 'string',
'default-value': ''
}
},
'polygon-pattern': {
'file': {
'css': 'polygon-pattern-file',
'type': 'uri'
},
'width': {
'css': 'polygon-pattern-width',
'type': 'float'
},
'height': {
'css': 'polygon-pattern-height',
'type': 'float'
},
'type': {
'css': 'polygon-pattern-type',
'type': 'none'
},
'meta-output': {
'css': 'polygon-pattern-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'polygon-pattern-meta-writer',
'type': 'string',
'default-value': ''
}
},
'raster': {
'opacity': {
'css': 'raster-opacity',
'default-value': 1,
'default-meaning': 'opaque',
'type': 'float'
},
'mode': {
'css': 'raster-mode',
'default-value': 'normal',
'type': [
'normal',
'grain_merge',
'grain_merge2',
'multiply',
'multiply2',
'divide',
'divide2',
'screen',
'hard_light'
]
},
'scaling': {
'css': 'raster-scaling',
'type': [
'fast',
'bilinear',
'bilinear8'
]
}
},
'point': {
'file': {
'css': 'point-file',
'type': 'uri'
},
'width': {
'css': 'point-width',
'type': 'float'
},
'height': {
'css': 'point-height',
'type': 'float'
},
'type': {
'css': 'point-type',
'type': 'none'
},
'allow_overlap': {
'css': 'point-allow-overlap',
'type': 'boolean',
'default-value': 'false',
'default-meaning': 'do not allow overlap'
},
'meta-output': {
'css': 'point-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'point-meta-writer',
'type': 'string',
'default-value': ''
}
},
'text': {
'name': {
'css': 'text-name',
'type': 'string',
'required': true
},
'face_name': {
'css': 'text-face-name',
'validate': 'font',
'type': 'string',
'required': true
},
'size': {
'css': 'text-size',
'type': 'float',
'default-value': 10
},
'ratio': {
'css': 'text-ratio',
'doc': 'Define the amount of text (of the total) present on successive lines when wrapping occurs',
'type': 'float',
'type': 'none'
},
'wrap_width': {
'css': 'text-wrap-width',
'doc': 'Length of a chunk of text in characters before wrapping text',
'type': 'float'
},
'spacing': {
'css': 'text-spacing',
'type': 'float'
},
'character_spacing': {
'css': 'text-character-spacing',
'type': 'float',
'default-value': 0
},
'line_spacing': {
'css': 'text-line-spacing',
'default-value': 0,
'type': 'float'
},
'label_position_tolerance': {
'css': 'text-label-position-tolerance',
'type': 'float'
},
'max_char_angle_delta': {
'css': 'text-max-char-angle-delta',
'type': 'float',
'default-value': 'none',
'doc': 'If present, the maximum angle change, in degrees, allowed between adjacent characters in a label. This will stop label placement around sharp corners.'
},
'fill': {
'css': 'text-fill',
'doc': 'Specifies the color for the text',
'default-value': '#000000',
'type': 'color'
},
'halo_fill': {
'css': 'text-halo-fill',
'docs': 'Color of the text halo',
'type': 'color',
'default-value': '#FFFFFF',
'doc': 'Specifies the color of the halo around the text.'
},
'halo_radius': {
'css': 'text-halo-radius',
'doc': 'Specify the radius of the halo in pixels',
'default-value': 0,
'default-meaning': 'no halo',
'type': 'float'
},
'dx': {
'css': 'text-dx',
'type': 'float',
'doc': 'Displace text by fixed amount, in pixels, +/- along the X axis. A positive value will shift the text right',
'default-value': 10
},
'dy': {
'css': 'text-dy',
'type': 'float',
'doc': 'Displace text by fixed amount, in pixels, +/- along the Y axis. A positive value will shift the text down',
'default-value': 10
},
'avoid_edges': {
'css': 'text-avoid-edges',
'doc': 'Tell positioning algorithm to avoid labeling near intersection edges.',
'type': 'boolean'
},
'min_distance': {
'css': 'text-min-distance',
'type': 'float'
},
'allow_overlap': {
'css': 'text-allow-overlap',
'type': 'boolean',
'default-value': 'false',
'default-meaning': 'do not allow overlap'
},
'placement': {
'css': 'text-placement',
'type': [
'point',
'line'
],
'default-value': 'point'
},
'transform': {
'css': 'text-transform',
'type': [
'point',
'line',
'uppercase',
'lowercase'
]
},
'meta-output': {
'css': 'text-meta-output',
'type': 'string',
'default-value': '',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'text-meta-writer',
'type': 'string',
'default-value': ''
}
},
'inline': {
'color': {
'css': 'inline-color',
'default-value': 'black',
'type': 'color'
},
'width': {
'css': 'inline-width',
'type': 'float'
},
'opacity': {
'css': 'inline-opacity',
'default-value': 1,
'default-meaning': 'opaque',
'type': 'float'
},
'join': {
'css': 'inline-join',
'default-value': 'miter',
'type': [
'miter',
'round',
'bevel'
]
},
'cap': {
'css': 'inline-cap',
'default-value': 'butt',
'type': [
'butt',
'round',
'square'
]
},
'dasharray': {
'css': 'inline-dasharray',
'type': 'numbers'
},
'meta-output': {
'css': 'inline-meta-output',
'type': 'string',
'default-value': 'none',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'inline-meta-writer',
'type': 'string',
'default-value': 'none'
}
},
'outline': {
'color': {
'css': 'outline-color',
'default-value': 'black',
'type': 'color'
},
'width': {
'css': 'outline-width',
'default-value': 1,
'type': 'float'
},
'opacity': {
'css': 'outline-opacity',
'default-value': 1,
'default-meaning': 'opaque',
'type': 'float'
},
'join': {
'css': 'outline-join',
'default-value': 'miter',
'type': [
'miter',
'round',
'bevel'
]
},
'cap': {
'css': 'outline-cap',
'default-value': 'butt',
'type': [
'butt',
'round',
'square'
]
},
'dasharray': {
'css': 'outline-dasharray',
'type': 'numbers'
},
'meta-output': {
'css': 'outline-meta-output',
'type': 'string',
'default-value': 'none',
'default-meaning': 'No MetaWriter Output'
},
'meta-writer': {
'css': 'outline-meta-writer',
'type': 'string',
'default-value': 'none'
}
}
}
};
tree.Reference.selectors = tree.Reference.selectors || (function() {
// TODO: HORRIBLE CODE FIX
var list = [];
for (var i in tree.Reference.symbolizers) {
for (var j in tree.Reference.symbolizers[i]) {
if (tree.Reference.symbolizers[i][j].hasOwnProperty('css')) {
list.push(tree.Reference.symbolizers[i][j].css);
}
}
}
return list;
})();
tree.Reference.validSelector = function(selector) {
// TODO: not compatible in browser
return tree.Reference.selectors.indexOf(selector) !== -1;
};
tree.Reference.selectorName = function(selector) {
// TODO: not compatible in browser
for (var i in tree.Reference.symbolizers) {
for (var j in tree.Reference.symbolizers[i]) {
if (selector == tree.Reference.symbolizers[i][j].css) {
return j;
}
}
}
};
tree.Reference.selector = function(selector) {
for (var i in tree.Reference.symbolizers) {
for (var j in tree.Reference.symbolizers[i]) {
if (selector == tree.Reference.symbolizers[i][j].css) {
return tree.Reference.symbolizers[i][j];
}
}
}
};
tree.Reference.symbolizer = function(selector) {
for (var i in tree.Reference.symbolizers) {
for (var j in tree.Reference.symbolizers[i]) {
if (selector == tree.Reference.symbolizers[i][j].css) {
return i;
}
}
}
};
tree.Reference.requiredPropertyList = function(symbolizer_name) {
var properties = [];
for (var j in tree.Reference.symbolizers[symbolizer_name]) {
if (tree.Reference.symbolizers[symbolizer_name][j].required) {
properties.push(tree.Reference.symbolizers[symbolizer_name][j].css);
}
}
return properties;
};
tree.Reference.requiredProperties = function(symbolizer_name, properties) {
var req = tree.Reference.requiredPropertyList(symbolizer_name);
for (i in req) {
if (properties.indexOf(req[i]) === -1) {
return 'Property ' + req[i] + ' required for defining '
+ symbolizer_name + ' styles.';
}
}
};
tree.Reference._validateValue = {
'font': function(env, value) {
if (env.validation_data && env.validation_data.fonts) {
return env.validation_data.fonts.indexOf(value) != -1;
} else {
return true;
}
}
};
tree.Reference.validValue = function(env, selector, value) {
if (value[0]) {
return tree.Reference.selector(selector).type == value[0].is;
} else {
// TODO: handle in reusable way
if (value.value[0].is == 'keyword') {
return tree.Reference.selector(selector).type.indexOf(value.value[0].value) !== -1;
} else if (tree.Reference.selector(selector).type == 'numbers') {
for (i in value.value) {
if (value.value[i].is !== 'float') {
return false;
}
}
return true;
} else {
if (tree.Reference.selector(selector).validate) {
return tree.Reference.selector(selector).type == value.value[0].is &&
tree.Reference._validateValue[tree.Reference.selector(selector).validate];
(env, value.value[0].value);
} else {
return tree.Reference.selector(selector).type == value.value[0].is;
}
}
}
}
})(require('mess/tree'));