From f81f3e2e9ffe56bfa701304f1aea6e7fe299d090 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 21 Feb 2018 15:55:22 -0800 Subject: [PATCH] Remove static members from Draw interaction --- examples/draw-shapes.js | 6 +- src/ol/interaction/Draw.js | 104 ++++++++++++++------------ src/ol/interaction/DrawEventType.js | 21 ------ test/spec/ol/interaction/draw.test.js | 10 +-- 4 files changed, 65 insertions(+), 76 deletions(-) delete mode 100644 src/ol/interaction/DrawEventType.js diff --git a/examples/draw-shapes.js b/examples/draw-shapes.js index e8eb59c1b4..8125b1428f 100644 --- a/examples/draw-shapes.js +++ b/examples/draw-shapes.js @@ -1,7 +1,7 @@ import Map from '../src/ol/Map.js'; import View from '../src/ol/View.js'; import Polygon from '../src/ol/geom/Polygon.js'; -import Draw from '../src/ol/interaction/Draw.js'; +import Draw, {createRegularPolygon, createBox} from '../src/ol/interaction/Draw.js'; import TileLayer from '../src/ol/layer/Tile.js'; import VectorLayer from '../src/ol/layer/Vector.js'; import OSM from '../src/ol/source/OSM.js'; @@ -35,10 +35,10 @@ function addInteraction() { let geometryFunction; if (value === 'Square') { value = 'Circle'; - geometryFunction = Draw.createRegularPolygon(4); + geometryFunction = createRegularPolygon(4); } else if (value === 'Box') { value = 'Circle'; - geometryFunction = Draw.createBox(); + geometryFunction = createBox(); } else if (value === 'Star') { value = 'Circle'; geometryFunction = function(coordinates, geometry) { diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index 86e91e829f..30d7f12c3a 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -22,7 +22,6 @@ import MultiPolygon from '../geom/MultiPolygon.js'; import MouseSource from '../pointer/MouseSource.js'; import Point from '../geom/Point.js'; import Polygon, {fromCircle, makeRegular} from '../geom/Polygon.js'; -import DrawEventType from '../interaction/DrawEventType.js'; import PointerInteraction, {handleEvent as handlePointerEvent} from '../interaction/Pointer.js'; import InteractionProperty from '../interaction/Property.js'; import VectorLayer from '../layer/Vector.js'; @@ -43,13 +42,59 @@ const Mode = { }; +/** + * @enum {string} + */ +const DrawEventType = { + /** + * Triggered upon feature draw start + * @event ol.interaction.Draw.Event#drawstart + * @api + */ + DRAWSTART: 'drawstart', + /** + * Triggered upon feature draw end + * @event ol.interaction.Draw.Event#drawend + * @api + */ + DRAWEND: 'drawend' +}; + + +/** + * @classdesc + * Events emitted by {@link ol.interaction.Draw} instances are instances of + * this type. + * + * @constructor + * @extends {ol.events.Event} + * @implements {oli.DrawEvent} + * @param {ol.interaction.DrawEventType} type Type. + * @param {ol.Feature} feature The feature drawn. + */ +const DrawEvent = function(type, feature) { + + Event.call(this, type); + + /** + * The feature being drawn. + * @type {ol.Feature} + * @api + */ + this.feature = feature; + +}; + +inherits(DrawEvent, Event); + + /** * @classdesc * Interaction for drawing feature geometries. * * @constructor * @extends {ol.interaction.Pointer} - * @fires ol.interaction.Draw.Event + * @fires ol.interaction.DrawEvent * @param {olx.interaction.DrawOptions} options Options. * @api */ @@ -290,7 +335,7 @@ const Draw = function(options) { wrapX: options.wrapX ? options.wrapX : false }), style: options.style ? options.style : - Draw.getDefaultStyleFunction(), + getDefaultStyleFunction(), updateWhileInteracting: true }); @@ -331,12 +376,12 @@ inherits(Draw, PointerInteraction); /** * @return {ol.StyleFunction} Styles. */ -Draw.getDefaultStyleFunction = function() { +function getDefaultStyleFunction() { const styles = Style.createDefaultEditing(); return function(feature, resolution) { return styles[feature.getGeometry().getType()]; }; -}; +} /** @@ -589,7 +634,7 @@ Draw.prototype.startDrawing_ = function(event) { } this.sketchFeature_.setGeometry(geometry); this.updateSketchFeatures_(); - this.dispatchEvent(new Draw.Event(DrawEventType.DRAWSTART, this.sketchFeature_)); + this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)); }; @@ -751,7 +796,7 @@ Draw.prototype.finishDrawing = function() { } // First dispatch event to allow full set up of feature - this.dispatchEvent(new Draw.Event(DrawEventType.DRAWEND, sketchFeature)); + this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature)); // Then insert feature if (this.features_) { @@ -797,7 +842,7 @@ Draw.prototype.extend = function(feature) { this.finishCoordinate_ = last.slice(); this.sketchCoords_.push(last.slice()); this.updateSketchFeatures_(); - this.dispatchEvent(new Draw.Event(DrawEventType.DRAWSTART, this.sketchFeature_)); + this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)); }; @@ -854,13 +899,8 @@ Draw.prototype.updateState_ = function() { * polygon. * @api */ -Draw.createRegularPolygon = function(opt_sides, opt_angle) { +export function createRegularPolygon(opt_sides, opt_angle) { return ( - /** - * @param {ol.Coordinate|Array.|Array.>} coordinates - * @param {ol.geom.SimpleGeometry=} opt_geometry - * @return {ol.geom.SimpleGeometry} - */ function(coordinates, opt_geometry) { const center = coordinates[0]; const end = coordinates[1]; @@ -874,7 +914,7 @@ Draw.createRegularPolygon = function(opt_sides, opt_angle) { return geometry; } ); -}; +} /** @@ -884,13 +924,8 @@ Draw.createRegularPolygon = function(opt_sides, opt_angle) { * @return {ol.DrawGeometryFunctionType} Function that draws a box-shaped polygon. * @api */ -Draw.createBox = function() { +export function createBox() { return ( - /** - * @param {Array.} coordinates - * @param {ol.geom.SimpleGeometry=} opt_geometry - * @return {ol.geom.SimpleGeometry} - */ function(coordinates, opt_geometry) { const extent = boundingExtent(coordinates); const geometry = opt_geometry || new Polygon(null); @@ -904,7 +939,7 @@ Draw.createBox = function() { return geometry; } ); -}; +} /** @@ -931,29 +966,4 @@ function getMode(type) { } -/** - * @classdesc - * Events emitted by {@link ol.interaction.Draw} instances are instances of - * this type. - * - * @constructor - * @extends {ol.events.Event} - * @implements {oli.DrawEvent} - * @param {ol.interaction.DrawEventType} type Type. - * @param {ol.Feature} feature The feature drawn. - */ -Draw.Event = function(type, feature) { - - Event.call(this, type); - - /** - * The feature being drawn. - * @type {ol.Feature} - * @api - */ - this.feature = feature; - -}; -inherits(Draw.Event, Event); - export default Draw; diff --git a/src/ol/interaction/DrawEventType.js b/src/ol/interaction/DrawEventType.js deleted file mode 100644 index e4cc412384..0000000000 --- a/src/ol/interaction/DrawEventType.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @module ol/interaction/DrawEventType - */ - -/** - * @enum {string} - */ -export default { - /** - * Triggered upon feature draw start - * @event ol.interaction.Draw.Event#drawstart - * @api - */ - DRAWSTART: 'drawstart', - /** - * Triggered upon feature draw end - * @event ol.interaction.Draw.Event#drawend - * @api - */ - DRAWEND: 'drawend' -}; diff --git a/test/spec/ol/interaction/draw.test.js b/test/spec/ol/interaction/draw.test.js index eebab9845e..da4598a89f 100644 --- a/test/spec/ol/interaction/draw.test.js +++ b/test/spec/ol/interaction/draw.test.js @@ -12,7 +12,7 @@ import MultiPoint from '../../../../src/ol/geom/MultiPoint.js'; import MultiPolygon from '../../../../src/ol/geom/MultiPolygon.js'; import Point from '../../../../src/ol/geom/Point.js'; import Polygon from '../../../../src/ol/geom/Polygon.js'; -import Draw from '../../../../src/ol/interaction/Draw.js'; +import Draw, {createRegularPolygon, createBox} from '../../../../src/ol/interaction/Draw.js'; import Interaction from '../../../../src/ol/interaction/Interaction.js'; import VectorLayer from '../../../../src/ol/layer/Vector.js'; import PointerEvent from '../../../../src/ol/pointer/PointerEvent.js'; @@ -1054,13 +1054,13 @@ describe('ol.interaction.Draw', function() { }); }); - describe('ol.interaction.Draw.createRegularPolygon', function() { + describe('createRegularPolygon', function() { it('creates a regular polygon in Circle mode', function() { const draw = new Draw({ source: source, type: 'Circle', geometryFunction: - Draw.createRegularPolygon(4, Math.PI / 4) + createRegularPolygon(4, Math.PI / 4) }); map.addInteraction(draw); @@ -1084,12 +1084,12 @@ describe('ol.interaction.Draw', function() { }); }); - describe('ol.interaction.Draw.createBox', function() { + describe('createBox', function() { it('creates a box-shaped polygon in Circle mode', function() { const draw = new Draw({ source: source, type: 'Circle', - geometryFunction: Draw.createBox() + geometryFunction: createBox() }); map.addInteraction(draw);