Mercurial > pub > ImplabJs
view src/djol/DynamicStyle.js @ 20:9718e8de0cb2
Слияние
author | nickolay |
---|---|
date | Fri, 06 Oct 2017 09:17:41 +0300 |
parents | f0035923ff3e |
children |
line wrap: on
line source
define([ "./declare-style", "dojo/_base/declare", "ol", "implab/safe" ], function(declare, dojoDeclare, ol, safe) { return declare([], { _cache : null, _getKey : null, _getZoom : null, defaultStyle : null, style : null, styleFunction : null, filter : null, constructor : function(opts) { if (opts) dojoDeclare.safeMixin(this, opts); this._cache = {}; if (this.zoom) { if (this.zoom instanceof Function) { this._getZoom = this.zoom; } else { var levels = [], max = "max"; for ( var p in this.zoom) { if (safe.isNumber(this.zoom[p])) levels.push({ name : p, zoom : Number(this.zoom[p]) }); else if (this.zoom[p] == "max") max = p; } levels.sort(function(x, y) { return x.zoom - y.zoom; }); this.zoomMax = max; this.zoomLevels = levels; this._getZoom = function(z) { for (var i = 0; i < levels.length; i++) { if (z <= levels[i].zoom) return levels[i].name; } return max; }; } } else { this._getZoom = function(z) { return "max"; }; } if (this.key) { if (this.key instanceof Function) { this._getKey = this.key; } else if (typeof this.key === "string") { this._getKey = function(ft) { return ft.get(this.key); }; } else { this._getKey = function(ft, z) { var k = this.key[z]; if (k instanceof Function) return k.call(this, ft, z); else if (typeof k == "string") return ft.get(k); else return this.defaultStyle; }; } } else { this._getKey = function() { return this.defaultStyle; }; } if (this.style) { if (this.style instanceof Function) { this._style = this.style; } else { this._style = function(ft, res, key, zoom) { var s = this.style[zoom]; return s && (s instanceof Function) ? s.apply( this, arguments) : s; }; } } }, getFeatureStyle : function(ft, res) { safe.argumentNotNull(ft, "ft"); if (this.filter && this.filter(ft) === false) return null; var z = this._getZoom(res); var k = this._getKey(ft, z); var cid = [ k, z ].join('-'); var style = this._cache[cid]; if (!style) { style = this._style ? this._style(ft, res, k, z) : null; this._cache[cid] = style; } return safe.isNull(style) || style instanceof Array ? style : [ style ]; } }); });