Mercurial > pub > ImplabJs
diff src/djol/Map.js @ 34:27e8e9e38e07 default tip
Слияние
author | nickolay |
---|---|
date | Wed, 05 Jun 2019 20:44:15 +0300 |
parents | 8af8e840dd49 1dc2fd263b90 |
children |
line wrap: on
line diff
--- a/src/djol/Map.js Wed Jun 05 17:44:17 2019 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -define([ - "dijit/registry", - "dojo/_base/declare", - "dijit/_WidgetBase", - "dojo/dom-construct", - "./PopupContainer", - "dojo/_base/array", - "ol", - "ol3/listen", - "dojo/Deferred", - "implab/safe" -], function (registry, declare, _WidgetBase, dom, PopupContainer, array, ol, listen, Deferred, safe) { - - return declare([_WidgetBase], { - popupOverlays: null, - olMap: null, - - _pending: null, - - constructor: function () { - this._pending = {}; - }, - - buildRendering: function () { - this.domNode = dom.create("div"); - }, - - postCreate: function () { - this.inherited(arguments); - this.popupOverlays = {}; - this.olMap = new ol.Map({ - target: this.domNode, - layers: this.layers, - view: this.view, - controls: this.controls || [], - }); - }, - - getProjection : function() { - return this.view.getProjection(); - }, - - addInteraction: function (value) { - this.olMap.addInteraction(value); - }, - - addLayer: function (layer) { - if (layer) { - if (layer.get("layerType") == "base") - this.olMap.getLayers().insertAt(0, layer); - else - this.olMap.addLayer(layer); - } - }, - - removeLayer: function(layer) { - this.olMap.removeLayer(layer); - }, - - startup: function () { - this.inherited(arguments); - - this.olMap.updateSize(); - }, - - showPopup: function (contentWidget, position, opts) { - // Скрыть popups указанной в opts.role роли, если (opts.hint == - // "replace") - // Если не задан opts или opta.hint скрывать все popup - - var me = this; - - if ((!opts) || (!opts.hint)) { - this.closeAllPopups(); - } else if ((opts.hint) && (opts.hint == "replace")) { - if (opts.role) { - this.closePopupsByRole(opts.role); - } else { - this.closeAllPopups(); - } - } - var overlay = new ol.Overlay({}); - - if (opts && (opts.role)) { - if (this.popupOverlays[opts.role]) { - this.popupOverlays[opts.role].push(overlay); - } else { - this.popupOverlays[opts.role] = [overlay]; - } - } - - // Отображение popUp start - this.olMap.addOverlay(overlay); - var popup = new PopupContainer({ - overlay: overlay, - map: this.olMap, - onClose: function () { - // registry.byNode(overlay.getElement()).destroyRecursive(); - array.forEach(me.popupOverlays[opts.role], function (o) { - if (o === overlay) { - var index = me.popupOverlays[opts.role].indexOf(o); - if (index > -1) { - me.popupOverlays[opts.role].splice(index, 1); - } - } - }); - } - }); - overlay.setElement(popup.domNode); - popup.show(contentWidget); - overlay.setPosition(position); - popup.hideOverlay(); - // end - return popup; - }, - - closeAllPopups: function () { - var overlays = this.olMap.getOverlays(); - overlays.forEach(function (elenemt, index) { - registry.byNode(elenemt.getElement()).destroyRecursive(); - }, this); - this.popupOverlays = {}; - }, - - closePopupsByRole: function (role) { - if (this.popupOverlays[role]) { - array.forEach(this.popupOverlays[role], function (overlay) { - registry.byNode(overlay.getElement()).destroyRecursive(); - }); - this.popupOverlays[role] = []; - } - }, - - /** - * Подписывается на событие карты - * - * @param {String} - * name Имя события - * @param {function(evt)} - * filter Фильтр того, что событие нужное - * - * @returns {ol.ObjectEvent | ol.MapBroeserEvent | ol.MapEvent} Событие - * на которое подписались. - */ - awaitMapEvent: function (name, filter) { - safe.argumentNotEmptyString(name, "name"); - var map = this.olMap, - handle, d, me = this; - - if (me._pending[name]) - throw new Error("An event is already pending: " + name); - - me._pending[name] = d = new Deferred(function () { - handle.remove(); - }); - - handle = listen.once(map, name, function (evt) { - if (!filter || filter(evt)) - d.resolve(evt); - }); - - return d.then(function (evt) { - delete me._pending[name]; - return evt; - }, function (err) { - delete me._pending[name]; - throw err; - }); - }, - - cancelPendingEvents: function () { - for (var name in this._pending) - this._pending[name].cancel(); - } - }); -}); \ No newline at end of file