UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

156 lines (143 loc) 4.58 kB
define([ "dojo/_base/lang", "dojo/_base/declare", "dojo/_base/array", "dojo/dom-geometry", "dojo/query", "dijit/_Widget", "../_base", "../Map", "../Layer", "../GfxLayer" ], function(lang, declare, array, domgeo, query, Widget, openlayers, Map, Layer, GfxLayer){ return declare("dojox.geo.openlayers.widget.Map", Widget, { // summary: // A widget version of the `dojox.geo.openlayers.Map` component. // description: // The `dojox.geo.openlayers.widget.Map` widget is the widget // version of the `dojox.geo.openlayers.Map` component. // With this widget, user can specify some attributes in the markup such as // // - `baseLayerType`: The type of the base layer. Permitted values are // - `initialLocation`: The initial location as for the dojox.geo.openlayers.Map.fitTo method // - `touchHandler`: Tells if we attach touch handler or not. // // example: // | <div id="map" dojoType="dojox.geo.openlayers.widget.Map" baseLayerType="Google" initialLocation="{ // | position: [7.154126, 43.651748], // | extent: 0.2 }" // | style="background-color: #b5d0d0; width: 100%; height: 100%;"> // // baseLayerType: String // Base layer type as defined in `dojox.geo.openlayer.BaseLayerType`. Can be one of: // // - `OSM` // - `WMS` // - `Google` // - `VirtualEarth` // - `Yahoo` // - `ArcGIS` baseLayerType: openlayers.BaseLayerType.OSM, // initialLocation: String // The part of the map shown at startup time. It is the string description of the location shown at // startup time. Format is the same as for the `dojox.geo.openlayers.widget.Map.fitTo` // method. // | { // | bounds: [ulx, uly, lrx, lry] // | } // The map is fit on the specified bounds expressed as decimal degrees latitude and longitude. // The bounds are defined with their upper left and lower right corners coordinates. // // | { // | position: [longitude, latitude], // | extent: degrees // | } // The map is fit on the specified position showing the extent `<extent>` around // the specified center position. initialLocation: null, // touchHandler: Boolean // Tells if the touch handler should be attached to the map or not. // Touch handler handles touch events so that the widget can be used // on mobile applications. touchHandler: false, // map: [readonly] Map // The underlying `dojox/geo/openlayers/Map` object. map : null, startup: function(){ // summary: // Processing after the DOM fragment is added to the document this.inherited(arguments); this.map.initialFit({ initialLocation: this.initialLocation }); }, buildRendering: function(){ // summary: // Construct the UI for this widget, creates the real dojox.geo.openlayers.Map object. // tags: // protected this.inherited(arguments); var div = this.domNode; var map = new Map(div, { baseLayerType: this.baseLayerType, touchHandler: this.touchHandler }); this.map = map; this._makeLayers(); }, _makeLayers: function(){ // summary: // Creates layers defined as markup. // tags: // private var n = this.domNode; var layers = /* ?? query. */query("> .layer", n); array.forEach(layers, function(l){ var type = l.getAttribute("type"); var name = l.getAttribute("name"); var cls = "dojox.geo.openlayers." + type; var p = lang.getObject(cls); if(p){ var layer = new p(name, {}); if(layer){ this.map.addLayer(layer); } } }, this); }, resize : function(b,h){ // summary: // Resize the widget. // description: // Resize the domNode and the widget to the dimensions of a box of the following form: // `{ l: 50, t: 200, w: 300: h: 150 }` // b: Object|Number? // If passed, denotes the new size of the widget. // Can be either nothing (widget adapts to the div), // an Object describing a box, or a Number representing the width. // h: Number? // The new height. Requires that a width has been specified in the first parameter. var olm = this.map.getOLMap(); var box; switch(arguments.length){ case 0: // case 0, do not resize the div, just the surface break; case 1: // argument, override node box box = lang.mixin({}, b); domgeo.setMarginBox(olm.div, box); break; case 2: // two argument, width, height box = { w: arguments[0], h: arguments[1] }; domgeo.setMarginBox(olm.div, box); break; } olm.updateSize(); } }); });