diff --git a/examples/epsg-4326.js b/examples/epsg-4326.js
index 303da4c23e..5219ed456a 100644
--- a/examples/epsg-4326.js
+++ b/examples/epsg-4326.js
@@ -4,6 +4,7 @@ goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.control.ScaleLineUnits');
+goog.require('ol.control.defaults');
goog.require('ol.layer.TileLayer');
goog.require('ol.projection');
goog.require('ol.source.TiledWMS');
@@ -24,11 +25,16 @@ var layers = new ol.Collection([
]);
var map = new ol.Map({
+ controls: ol.control.defaults({
+ scaleLine: true,
+ // FIXME The typecast here is only needed if the example is compiled
+ scaleLineOptions: /** @type {ol.control.ScaleLineOptions} */ ({
+ units: ol.control.ScaleLineUnits.DEGREES
+ })
+ }),
layers: layers,
// The OSgeo server does not set cross origin headers, so we cannot use WebGL
renderers: [ol.RendererHint.CANVAS, ol.RendererHint.DOM],
- scaleLineControl: true,
- scaleLineUnits: ol.control.ScaleLineUnits.DEGREES,
target: 'map',
view: new ol.View2D({
projection: ol.projection.getFromCode('EPSG:4326'),
diff --git a/examples/full-screen.js b/examples/full-screen.js
index bced263c93..6eaf791e76 100644
--- a/examples/full-screen.js
+++ b/examples/full-screen.js
@@ -5,6 +5,7 @@ goog.require('ol.Geolocation');
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
+goog.require('ol.control.defaults');
goog.require('ol.layer.TileLayer');
goog.require('ol.source.MapQuestOpenAerial');
@@ -13,9 +14,11 @@ var layer = new ol.layer.TileLayer({
source: new ol.source.MapQuestOpenAerial()
});
var map = new ol.Map({
+ controls: ol.control.defaults({
+ scaleLine: true
+ }),
layers: new ol.Collection([layer]),
renderers: ol.RendererHints.createFromQueryData(),
- scaleLineControl: true,
target: 'map',
view: new ol.View2D({
center: new ol.Coordinate(0, 0),
diff --git a/examples/side-by-side.js b/examples/side-by-side.js
index 3a02b02e89..983c8e1528 100644
--- a/examples/side-by-side.js
+++ b/examples/side-by-side.js
@@ -5,6 +5,7 @@ goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.animation');
goog.require('ol.control.MousePosition');
+goog.require('ol.control.defaults');
goog.require('ol.easing');
goog.require('ol.interaction.Keyboard');
goog.require('ol.layer.TileLayer');
@@ -26,22 +27,28 @@ var view = new ol.View2D({
zoom: 1
});
-var domMap = new ol.Map({
- layers: new ol.Collection([layer]),
- renderer: ol.RendererHint.DOM,
- target: 'domMap',
- view: view
-});
-
var domMousePosition = new ol.control.MousePosition({
coordinateFormat: ol.Coordinate.toStringHDMS,
projection: ol.projection.getFromCode('EPSG:4326'),
target: document.getElementById('domMousePosition'),
undefinedHTML: ' '
});
-domMousePosition.setMap(domMap);
+var domMap = new ol.Map({
+ controls: ol.control.defaults({}, [domMousePosition]),
+ layers: new ol.Collection([layer]),
+ renderer: ol.RendererHint.DOM,
+ target: 'domMap',
+ view: view
+});
+var webglMousePosition = new ol.control.MousePosition({
+ coordinateFormat: ol.Coordinate.toStringHDMS,
+ projection: ol.projection.getFromCode('EPSG:4326'),
+ target: document.getElementById('webglMousePosition'),
+ undefinedHTML: ' '
+});
var webglMap = new ol.Map({
+ controls: ol.control.defaults({}, [webglMousePosition]),
renderer: ol.RendererHint.WEBGL,
target: 'webglMap'
});
@@ -50,22 +57,6 @@ if (webglMap !== null) {
webglMap.bindTo('view', domMap);
}
-var webglMousePosition = new ol.control.MousePosition({
- coordinateFormat: ol.Coordinate.toStringHDMS,
- projection: ol.projection.getFromCode('EPSG:4326'),
- target: document.getElementById('webglMousePosition'),
- undefinedHTML: ' '
-});
-webglMousePosition.setMap(webglMap);
-
-var canvasMap = new ol.Map({
- renderer: ol.RendererHint.CANVAS,
- target: 'canvasMap'
-});
-if (canvasMap !== null) {
- canvasMap.bindTo('layers', domMap);
- canvasMap.bindTo('view', domMap);
-}
var canvasMousePosition = new ol.control.MousePosition({
coordinateFormat: ol.Coordinate.toStringHDMS,
@@ -73,7 +64,15 @@ var canvasMousePosition = new ol.control.MousePosition({
target: document.getElementById('canvasMousePosition'),
undefinedHtml: ' '
});
-canvasMousePosition.setMap(canvasMap);
+var canvasMap = new ol.Map({
+ controls: ol.control.defaults({}, [canvasMousePosition]),
+ renderer: ol.RendererHint.CANVAS,
+ target: 'canvasMap'
+});
+if (canvasMap !== null) {
+ canvasMap.bindTo('layers', domMap);
+ canvasMap.bindTo('view', domMap);
+}
var keyboardInteraction = new ol.interaction.Keyboard();
keyboardInteraction.addCallback('0', function() {
diff --git a/examples/stamen.js b/examples/stamen.js
index 3c947baf84..233c04cdb8 100644
--- a/examples/stamen.js
+++ b/examples/stamen.js
@@ -22,7 +22,6 @@ var layers = new ol.Collection([
var map = new ol.Map({
layers: layers,
renderers: ol.RendererHints.createFromQueryData(),
- scaleLineControl: true,
target: 'map',
view: new ol.View2D({
center: new ol.Coordinate(0, 0),
diff --git a/src/objectliterals.exports b/src/objectliterals.exports
index 87a20a44c6..7ed3f72d17 100644
--- a/src/objectliterals.exports
+++ b/src/objectliterals.exports
@@ -1,24 +1,11 @@
@exportObjectLiteral ol.MapOptions
-@exportObjectLiteralProperty ol.MapOptions.attributionControl boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.doubleClickZoom boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.dragPan boolean|undefined
+@exportObjectLiteralProperty ol.MapOptions.controls Array.
|undefined
@exportObjectLiteralProperty ol.MapOptions.interactions ol.Collection|undefined
-@exportObjectLiteralProperty ol.MapOptions.keyboard boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.keyboardPanOffset number|undefined
@exportObjectLiteralProperty ol.MapOptions.layers ol.Collection|undefined
-@exportObjectLiteralProperty ol.MapOptions.mouseWheelZoom boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.renderer ol.RendererHint|undefined
@exportObjectLiteralProperty ol.MapOptions.renderers Array.|undefined
-@exportObjectLiteralProperty ol.MapOptions.scaleLineControl boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.scaleLineUnits ol.control.ScaleLineUnits|undefined
-@exportObjectLiteralProperty ol.MapOptions.shiftDragZoom boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.target Element|string
-@exportObjectLiteralProperty ol.MapOptions.touchPan boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.touchRotate boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.touchZoom boolean|undefined
@exportObjectLiteralProperty ol.MapOptions.view ol.IView|undefined
-@exportObjectLiteralProperty ol.MapOptions.zoomControl boolean|undefined
-@exportObjectLiteralProperty ol.MapOptions.zoomDelta number|undefined
@exportObjectLiteral ol.View2DOptions
@exportObjectLiteralProperty ol.View2DOptions.center ol.Coordinate|undefined
@@ -59,6 +46,14 @@
@exportObjectLiteralProperty ol.control.AttributionOptions.map ol.Map|undefined
@exportObjectLiteralProperty ol.control.AttributionOptions.target Element|undefined
+@exportObjectLiteral ol.control.DefaultsOptions
+@exportObjectLiteralProperty ol.control.DefaultsOptions.attribution boolean|undefined
+@exportObjectLiteralProperty ol.control.DefaultsOptions.attributionOptions ol.control.AttributionOptions|undefined
+@exportObjectLiteralProperty ol.control.DefaultsOptions.scaleLine boolean|undefined
+@exportObjectLiteralProperty ol.control.DefaultsOptions.scaleLineOptions ol.control.ScaleLineOptions|undefined
+@exportObjectLiteralProperty ol.control.DefaultsOptions.zoom boolean|undefined
+@exportObjectLiteralProperty ol.control.DefaultsOptions.zoomOptions ol.control.ZoomOptions|undefined
+
@exportObjectLiteral ol.control.ScaleLineOptions
@exportObjectLiteralProperty ol.control.ScaleLineOptions.map ol.Map|undefined
@exportObjectLiteralProperty ol.control.ScaleLineOptions.minWidth number|undefined
@@ -77,6 +72,17 @@
@exportObjectLiteralProperty ol.control.ZoomOptions.map ol.Map|undefined
@exportObjectLiteralProperty ol.control.ZoomOptions.target Element|undefined
+@exportObjectLiteral ol.interaction.DefaultOptions
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.doubleClickZoom boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.dragPan boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.keyboard boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.keyboardPanOffset number|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.mouseWheelZoom boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.shiftDragZoom boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.touchPan boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.touchRotate boolean|undefined
+@exportObjectLiteralProperty ol.interaction.DefaultOptions.touchZoom boolean|undefined
+
@exportObjectLiteral ol.layer.LayerOptions
@exportObjectLiteralProperty ol.layer.LayerOptions.brightness number|undefined
@exportObjectLiteralProperty ol.layer.LayerOptions.contrast number|undefined
diff --git a/src/ol/collection.js b/src/ol/collection.js
index 86c331302f..f8cf78ddab 100644
--- a/src/ol/collection.js
+++ b/src/ol/collection.js
@@ -99,6 +99,17 @@ ol.Collection.prototype.clear = function() {
};
+/**
+ * @param {Array} arr Array.
+ */
+ol.Collection.prototype.extend = function(arr) {
+ var i;
+ for (i = 0; i < arr.length; ++i) {
+ this.push(arr[i]);
+ }
+};
+
+
/**
* @param {Function} f Function.
* @param {Object=} opt_obj Object.
diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js
index c6f79717aa..23c5b6d241 100644
--- a/src/ol/control/attributioncontrol.js
+++ b/src/ol/control/attributioncontrol.js
@@ -21,10 +21,11 @@ goog.require('ol.source.Source');
/**
* @constructor
* @extends {ol.control.Control}
- * @param {ol.control.AttributionOptions} attributionOptions Attribution
- * options.
+ * @param {ol.control.AttributionOptions=} opt_options Options.
*/
-ol.control.Attribution = function(attributionOptions) {
+ol.control.Attribution = function(opt_options) {
+
+ var options = goog.isDef(opt_options) ? opt_options : {};
this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL);
@@ -34,8 +35,8 @@ ol.control.Attribution = function(attributionOptions) {
goog.base(this, {
element: element,
- map: attributionOptions.map,
- target: attributionOptions.target
+ map: options.map,
+ target: options.target
});
/**
diff --git a/src/ol/control/defaults.exports b/src/ol/control/defaults.exports
new file mode 100644
index 0000000000..0023131772
--- /dev/null
+++ b/src/ol/control/defaults.exports
@@ -0,0 +1 @@
+@exportSymbol ol.control.defaults ol.control.defaults
diff --git a/src/ol/control/defaults.js b/src/ol/control/defaults.js
new file mode 100644
index 0000000000..6217c59a7a
--- /dev/null
+++ b/src/ol/control/defaults.js
@@ -0,0 +1,51 @@
+goog.provide('ol.control.defaults');
+
+goog.require('goog.array');
+goog.require('ol.control.Attribution');
+goog.require('ol.control.ScaleLine');
+goog.require('ol.control.Zoom');
+
+
+/**
+ * @param {ol.control.DefaultsOptions=} opt_options Options.
+ * @param {Array.=} opt_controls Additional controls.
+ * @return {Array.} Controls.
+ */
+ol.control.defaults = function(opt_options, opt_controls) {
+
+ var options = goog.isDef(opt_options) ? opt_options : {};
+
+ /** @type {Array.} */
+ var controls = [];
+
+ var attributionControl = goog.isDef(options.attribution) ?
+ options.attribution : true;
+ if (attributionControl) {
+ var attributionControlOptions = goog.isDef(options.attributionOptions) ?
+ options.attributionOptions : undefined;
+ controls.push(new ol.control.Attribution(attributionControlOptions));
+ }
+
+ var scaleLineControl = goog.isDef(options.scaleLine) ?
+ options.scaleLine : false;
+ if (scaleLineControl) {
+ var scaleLineOptions = goog.isDef(options.scaleLineOptions) ?
+ options.scaleLineOptions : undefined;
+ controls.push(new ol.control.ScaleLine(scaleLineOptions));
+ }
+
+ var zoomControl = goog.isDef(options.zoom) ?
+ options.zoom : true;
+ if (zoomControl) {
+ var zoomControlOptions = goog.isDef(options.zoomControlOptions) ?
+ options.zoomControlOptions : undefined;
+ controls.push(new ol.control.Zoom(zoomControlOptions));
+ }
+
+ if (goog.isDef(opt_controls)) {
+ goog.array.extend(controls, opt_controls);
+ }
+
+ return controls;
+
+};
diff --git a/src/ol/control/mousepositioncontrol.js b/src/ol/control/mousepositioncontrol.js
index 60a667f4a0..fc736fe5a2 100644
--- a/src/ol/control/mousepositioncontrol.js
+++ b/src/ol/control/mousepositioncontrol.js
@@ -23,10 +23,11 @@ goog.require('ol.projection');
/**
* @constructor
* @extends {ol.control.Control}
- * @param {ol.control.MousePositionOptions} mousePositionOptions Mouse position
- * options.
+ * @param {ol.control.MousePositionOptions=} opt_options Options.
*/
-ol.control.MousePosition = function(mousePositionOptions) {
+ol.control.MousePosition = function(opt_options) {
+
+ var options = goog.isDef(opt_options) ? opt_options : {};
var element = goog.dom.createDom(goog.dom.TagName.DIV, {
'class': 'ol-mouse-position'
@@ -34,28 +35,28 @@ ol.control.MousePosition = function(mousePositionOptions) {
goog.base(this, {
element: element,
- map: mousePositionOptions.map,
- target: mousePositionOptions.target
+ map: options.map,
+ target: options.target
});
/**
* @private
* @type {ol.Projection|undefined}
*/
- this.projection_ = mousePositionOptions.projection;
+ this.projection_ = options.projection;
/**
* @private
* @type {ol.CoordinateFormatType|undefined}
*/
- this.coordinateFormat_ = mousePositionOptions.coordinateFormat;
+ this.coordinateFormat_ = options.coordinateFormat;
/**
* @private
* @type {string}
*/
- this.undefinedHTML_ = goog.isDef(mousePositionOptions.undefinedHTML) ?
- mousePositionOptions.undefinedHTML : '';
+ this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ?
+ options.undefinedHTML : '';
/**
* @private
diff --git a/src/ol/control/zoomcontrol.js b/src/ol/control/zoomcontrol.js
index 63e3345cbf..ca3d316378 100644
--- a/src/ol/control/zoomcontrol.js
+++ b/src/ol/control/zoomcontrol.js
@@ -19,9 +19,11 @@ ol.control.ZOOM_DURATION = 250;
/**
* @constructor
* @extends {ol.control.Control}
- * @param {ol.control.ZoomOptions} zoomOptions Zoom options.
+ * @param {ol.control.ZoomOptions=} opt_options Options.
*/
-ol.control.Zoom = function(zoomOptions) {
+ol.control.Zoom = function(opt_options) {
+
+ var options = goog.isDef(opt_options) ? opt_options : {};
var inElement = goog.dom.createDom(goog.dom.TagName.A, {
'href': '#zoomIn',
@@ -46,15 +48,15 @@ ol.control.Zoom = function(zoomOptions) {
goog.base(this, {
element: element,
- map: zoomOptions.map,
- target: zoomOptions.target
+ map: options.map,
+ target: options.target
});
/**
* @type {number}
* @private
*/
- this.delta_ = goog.isDef(zoomOptions.delta) ? zoomOptions.delta : 1;
+ this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
};
goog.inherits(ol.control.Zoom, ol.control.Control);
diff --git a/src/ol/interaction/defaults.exports b/src/ol/interaction/defaults.exports
new file mode 100644
index 0000000000..2ab5e46392
--- /dev/null
+++ b/src/ol/interaction/defaults.exports
@@ -0,0 +1 @@
+@exportSymbol ol.interaction.defaults ol.interaction.defaults
diff --git a/src/ol/interaction/defaults.js b/src/ol/interaction/defaults.js
new file mode 100644
index 0000000000..e776f9e1d0
--- /dev/null
+++ b/src/ol/interaction/defaults.js
@@ -0,0 +1,101 @@
+goog.provide('ol.interaction.defaults');
+
+goog.require('ol.Collection');
+goog.require('ol.Kinetic');
+goog.require('ol.interaction.DblClickZoom');
+goog.require('ol.interaction.DragPan');
+goog.require('ol.interaction.DragRotate');
+goog.require('ol.interaction.DragZoom');
+goog.require('ol.interaction.Interaction');
+goog.require('ol.interaction.KeyboardPan');
+goog.require('ol.interaction.KeyboardZoom');
+goog.require('ol.interaction.MouseWheelZoom');
+goog.require('ol.interaction.TouchPan');
+goog.require('ol.interaction.TouchRotate');
+goog.require('ol.interaction.TouchZoom');
+goog.require('ol.interaction.condition');
+
+
+/**
+ * @param {ol.interaction.DefaultOptions=} opt_options Options.
+ * @param {Array.=} opt_interactions Additional
+ * interactions.
+ * @return {ol.Collection} Interactions.
+ */
+ol.interaction.defaults = function(opt_options, opt_interactions) {
+
+ var options = goog.isDef(opt_options) ? opt_options : {};
+
+ var interactions = new ol.Collection();
+
+ var rotate = goog.isDef(options.rotate) ?
+ options.rotate : true;
+ if (rotate) {
+ interactions.push(new ol.interaction.DragRotate(
+ ol.interaction.condition.altShiftKeysOnly));
+ }
+
+ var doubleClickZoom = goog.isDef(options.doubleClickZoom) ?
+ options.doubleClickZoom : true;
+ if (doubleClickZoom) {
+ var zoomDelta = goog.isDef(options.zoomDelta) ?
+ options.zoomDelta : 1;
+ interactions.push(new ol.interaction.DblClickZoom(zoomDelta));
+ }
+
+ var touchPan = goog.isDef(options.touchPan) ?
+ options.touchPan : true;
+ if (touchPan) {
+ interactions.push(new ol.interaction.TouchPan(
+ new ol.Kinetic(-0.005, 0.05, 100)));
+ }
+
+ var touchRotate = goog.isDef(options.touchRotate) ?
+ options.touchRotate : true;
+ if (touchRotate) {
+ interactions.push(new ol.interaction.TouchRotate());
+ }
+
+ var touchZoom = goog.isDef(options.touchZoom) ?
+ options.touchZoom : true;
+ if (touchZoom) {
+ interactions.push(new ol.interaction.TouchZoom());
+ }
+
+ var dragPan = goog.isDef(options.dragPan) ?
+ options.dragPan : true;
+ if (dragPan) {
+ interactions.push(
+ new ol.interaction.DragPan(ol.interaction.condition.noModifierKeys,
+ new ol.Kinetic(-0.005, 0.05, 100)));
+ }
+
+ var keyboard = goog.isDef(options.keyboard) ?
+ options.keyboard : true;
+ var keyboardPanOffset = goog.isDef(options.keyboardPanOffset) ?
+ options.keyboardPanOffset : 80;
+ if (keyboard) {
+ interactions.push(new ol.interaction.KeyboardPan(keyboardPanOffset));
+ interactions.push(new ol.interaction.KeyboardZoom());
+ }
+
+ var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ?
+ options.mouseWheelZoom : true;
+ if (mouseWheelZoom) {
+ interactions.push(new ol.interaction.MouseWheelZoom());
+ }
+
+ var shiftDragZoom = goog.isDef(options.shiftDragZoom) ?
+ options.shiftDragZoom : true;
+ if (shiftDragZoom) {
+ interactions.push(
+ new ol.interaction.DragZoom(ol.interaction.condition.shiftKeyOnly));
+ }
+
+ if (goog.isDef(opt_interactions)) {
+ interactions.extend(opt_interactions);
+ }
+
+ return interactions;
+
+};
diff --git a/src/ol/map.js b/src/ol/map.js
index 605d1044b6..06f997f7b4 100644
--- a/src/ol/map.js
+++ b/src/ol/map.js
@@ -28,7 +28,6 @@ goog.require('ol.Coordinate');
goog.require('ol.Extent');
goog.require('ol.FrameState');
goog.require('ol.IView');
-goog.require('ol.Kinetic');
goog.require('ol.MapBrowserEvent');
goog.require('ol.MapBrowserEvent.EventType');
goog.require('ol.MapBrowserEventHandler');
@@ -44,22 +43,8 @@ goog.require('ol.Tile');
goog.require('ol.TileQueue');
goog.require('ol.View');
goog.require('ol.View2D');
-goog.require('ol.control.Attribution');
-goog.require('ol.control.Control');
-goog.require('ol.control.ScaleLine');
-goog.require('ol.control.Zoom');
-goog.require('ol.interaction.DblClickZoom');
-goog.require('ol.interaction.DragPan');
-goog.require('ol.interaction.DragRotate');
-goog.require('ol.interaction.DragZoom');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.KeyboardPan');
-goog.require('ol.interaction.KeyboardZoom');
-goog.require('ol.interaction.MouseWheelZoom');
-goog.require('ol.interaction.TouchPan');
-goog.require('ol.interaction.TouchRotate');
-goog.require('ol.interaction.TouchZoom');
-goog.require('ol.interaction.condition');
+goog.require('ol.control.defaults');
+goog.require('ol.interaction.defaults');
goog.require('ol.layer.Layer');
goog.require('ol.projection');
goog.require('ol.projection.addCommonProjections');
@@ -293,15 +278,15 @@ ol.Map = function(mapOptions) {
// this gives the map an initial size
this.handleBrowserWindowResize();
- /** @type {Array.} */
- var controls = mapOptionsInternal.controls;
- goog.array.forEach(controls,
- /**
- * @param {ol.control.Control} control Control.
- */
- function(control) {
- control.setMap(this);
- }, this);
+ if (goog.isDef(mapOptionsInternal.controls)) {
+ goog.array.forEach(mapOptionsInternal.controls,
+ /**
+ * @param {ol.control.Control} control Control.
+ */
+ function(control) {
+ control.setMap(this);
+ }, this);
+ }
};
goog.inherits(ol.Map, ol.Object);
@@ -882,20 +867,11 @@ ol.Map.createOptionsInternal = function(mapOptions) {
}
}
- /**
- * @type {Array.}
- */
- var controls = ol.Map.createControls_(mapOptions);
+ var controls = goog.isDef(mapOptions.controls) ?
+ mapOptions.controls : ol.control.defaults();
- /**
- * @type {ol.Collection}
- */
- var interactions;
- if (goog.isDef(mapOptions.interactions)) {
- interactions = mapOptions.interactions;
- } else {
- interactions = ol.Map.createInteractions_(mapOptions);
- }
+ var interactions = goog.isDef(mapOptions.interactions) ?
+ mapOptions.interactions : ol.interaction.defaults();
/**
* @type {Element}
@@ -913,123 +889,6 @@ ol.Map.createOptionsInternal = function(mapOptions) {
};
-/**
- * @private
- * @param {ol.MapOptions} mapOptions Map options.
- * @return {Array.} Controls.
- */
-ol.Map.createControls_ = function(mapOptions) {
- /** @type {Array.} */
- var controls = [];
-
- var attributionControl = goog.isDef(mapOptions.attributionControl) ?
- mapOptions.attributionControl : true;
- if (attributionControl) {
- controls.push(new ol.control.Attribution({}));
- }
-
- var scaleLineControl = goog.isDef(mapOptions.scaleLineControl) ?
- mapOptions.scaleLineControl : false;
- if (scaleLineControl) {
- var scaleLineUnits = goog.isDef(mapOptions.scaleLineUnits) ?
- mapOptions.scaleLineUnits : undefined;
- controls.push(new ol.control.ScaleLine({
- units: scaleLineUnits
- }));
- }
-
- var zoomControl = goog.isDef(mapOptions.zoomControl) ?
- mapOptions.zoomControl : true;
- if (zoomControl) {
- var zoomDelta = goog.isDef(mapOptions.zoomDelta) ?
- mapOptions.zoomDelta : 1;
- controls.push(new ol.control.Zoom({
- delta: zoomDelta
- }));
- }
-
- return controls;
-};
-
-
-/**
- * @private
- * @param {ol.MapOptions} mapOptions Map options.
- * @return {ol.Collection} Interactions.
- */
-ol.Map.createInteractions_ = function(mapOptions) {
-
- var interactions = new ol.Collection();
-
- var rotate = goog.isDef(mapOptions.rotate) ?
- mapOptions.rotate : true;
- if (rotate) {
- interactions.push(new ol.interaction.DragRotate(
- ol.interaction.condition.altShiftKeysOnly));
- }
-
- var doubleClickZoom = goog.isDef(mapOptions.doubleClickZoom) ?
- mapOptions.doubleClickZoom : true;
- if (doubleClickZoom) {
- var zoomDelta = goog.isDef(mapOptions.zoomDelta) ?
- mapOptions.zoomDelta : 1;
- interactions.push(new ol.interaction.DblClickZoom(zoomDelta));
- }
-
- var touchPan = goog.isDef(mapOptions.touchPan) ?
- mapOptions.touchPan : true;
- if (touchPan) {
- interactions.push(new ol.interaction.TouchPan(
- new ol.Kinetic(-0.005, 0.05, 100)));
- }
-
- var touchRotate = goog.isDef(mapOptions.touchRotate) ?
- mapOptions.touchRotate : true;
- if (touchRotate) {
- interactions.push(new ol.interaction.TouchRotate());
- }
-
- var touchZoom = goog.isDef(mapOptions.touchZoom) ?
- mapOptions.touchZoom : true;
- if (touchZoom) {
- interactions.push(new ol.interaction.TouchZoom());
- }
-
- var dragPan = goog.isDef(mapOptions.dragPan) ?
- mapOptions.dragPan : true;
- if (dragPan) {
- interactions.push(
- new ol.interaction.DragPan(ol.interaction.condition.noModifierKeys,
- new ol.Kinetic(-0.005, 0.05, 100)));
- }
-
- var keyboard = goog.isDef(mapOptions.keyboard) ?
- mapOptions.keyboard : true;
- var keyboardPanOffset = goog.isDef(mapOptions.keyboardPanOffset) ?
- mapOptions.keyboardPanOffset : 80;
- if (keyboard) {
- interactions.push(new ol.interaction.KeyboardPan(keyboardPanOffset));
- interactions.push(new ol.interaction.KeyboardZoom());
- }
-
- var mouseWheelZoom = goog.isDef(mapOptions.mouseWheelZoom) ?
- mapOptions.mouseWheelZoom : true;
- if (mouseWheelZoom) {
- interactions.push(new ol.interaction.MouseWheelZoom());
- }
-
- var shiftDragZoom = goog.isDef(mapOptions.shiftDragZoom) ?
- mapOptions.shiftDragZoom : true;
- if (shiftDragZoom) {
- interactions.push(
- new ol.interaction.DragZoom(ol.interaction.condition.shiftKeyOnly));
- }
-
- return interactions;
-
-};
-
-
/**
* @param {goog.Uri.QueryData=} opt_queryData Query data.
* @return {Array.} Renderer hints.
diff --git a/test/spec/ol/collection.test.js b/test/spec/ol/collection.test.js
index a5923b540d..81ef412fbb 100644
--- a/test/spec/ol/collection.test.js
+++ b/test/spec/ol/collection.test.js
@@ -235,6 +235,17 @@ describe('ol.collection', function() {
});
});
});
+
+ describe('extending a collection', function() {
+ it('adds elements to end of the collection', function() {
+ collection.extend([1, 2]);
+ expect(collection.getLength()).toEqual(2);
+ expect(goog.array.equals(collection.getArray(), [1, 2])).toBeTruthy();
+ expect(collection.getAt(0)).toEqual(1);
+ expect(collection.getAt(1)).toEqual(2);
+ });
+ });
+
});
goog.require('goog.array');
diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js
index 38e5758437..388ba11a43 100644
--- a/test/spec/ol/map.test.js
+++ b/test/spec/ol/map.test.js
@@ -87,7 +87,7 @@ describe('ol.Map', function() {
describe('create mousewheel interaction', function() {
it('creates mousewheel interaction', function() {
options.mouseWheelZoom = true;
- var interactions = ol.Map.createInteractions_(options);
+ var interactions = ol.interaction.defaults(options);
expect(interactions.getLength()).toEqual(1);
expect(interactions.getAt(0)).toBeA(ol.interaction.MouseWheelZoom);
});
@@ -101,7 +101,7 @@ describe('ol.Map', function() {
describe('default zoomDelta', function() {
it('create double click interaction with default delta', function() {
- var interactions = ol.Map.createInteractions_(options);
+ var interactions = ol.interaction.defaults(options);
expect(interactions.getLength()).toEqual(1);
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
expect(interactions.getAt(0).delta_).toEqual(1);
@@ -111,7 +111,7 @@ describe('ol.Map', function() {
describe('set zoomDelta', function() {
it('create double click interaction with set delta', function() {
options.zoomDelta = 7;
- var interactions = ol.Map.createInteractions_(options);
+ var interactions = ol.interaction.defaults(options);
expect(interactions.getLength()).toEqual(1);
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
expect(interactions.getAt(0).delta_).toEqual(7);
@@ -233,5 +233,6 @@ goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.interaction.DblClickZoom');
goog.require('ol.interaction.MouseWheelZoom');
+goog.require('ol.interaction.defaults');
goog.require('ol.layer.TileLayer');
goog.require('ol.source.XYZ');