731 lines
23 KiB
JavaScript
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'));
|