diff --git a/externs/olx.js b/externs/olx.js index 07e49b02c8..cb4304b13b 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -46,141 +46,6 @@ olx.interaction.TranslateOptions.prototype.layers; olx.interaction.TranslateOptions.prototype.hitTolerance; -/** - * @typedef {{addCondition: (ol.EventsConditionType|undefined), - * condition: (ol.EventsConditionType|undefined), - * layers: (undefined|Array.|function(ol.layer.Layer): boolean), - * style: (ol.style.Style|Array.|ol.StyleFunction|undefined), - * removeCondition: (ol.EventsConditionType|undefined), - * toggleCondition: (ol.EventsConditionType|undefined), - * multi: (boolean|undefined), - * features: (ol.Collection.|undefined), - * filter: (ol.SelectFilterFunction|undefined), - * wrapX: (boolean|undefined), - * hitTolerance: (number|undefined)}} - */ -olx.interaction.SelectOptions; - - -/** - * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * By default, this is {@link ol.events.condition.never}. Use this if you want - * to use different events for add and remove instead of `toggle`. - * @type {ol.EventsConditionType|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.addCondition; - - -/** - * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * This is the event for the selected features as a whole. By default, this is - * {@link ol.events.condition.singleClick}. Clicking on a feature selects that - * feature and removes any that were in the selection. Clicking outside any - * feature removes all from the selection. - * See `toggle`, `add`, `remove` options for adding/removing extra features to/ - * from the selection. - * @type {ol.EventsConditionType|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.condition; - - -/** - * A list of layers from which features should be - * selected. Alternatively, a filter function can be provided. The - * function will be called for each layer in the map and should return - * `true` for layers that you want to be selectable. If the option is - * absent, all visible layers will be considered selectable. - * @type {undefined|Array.|function(ol.layer.Layer): boolean} - * @api - */ -olx.interaction.SelectOptions.prototype.layers; - - -/** - * Style for the selected features. By default the default edit style is used - * (see {@link ol.style}). - * @type {ol.style.Style|Array.|ol.StyleFunction|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.style; - - -/** - * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * By default, this is {@link ol.events.condition.never}. Use this if you want - * to use different events for add and remove instead of `toggle`. - * @type {ol.EventsConditionType|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.removeCondition; - - -/** - * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * This is in addition to the `condition` event. By default, - * {@link ol.events.condition.shiftKeyOnly}, i.e. pressing `shift` as well as - * the `condition` event, adds that feature to the current selection if it is - * not currently selected, and removes it if it is. - * See `add` and `remove` if you want to use different events instead of a - * toggle. - * @type {ol.EventsConditionType|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.toggleCondition; - - -/** - * A boolean that determines if the default behaviour should select only - * single features or all (overlapping) features at the clicked map - * position. Default is false i.e single select - * @type {boolean|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.multi; - -/** - * Collection where the interaction will place selected features. Optional. If - * not set the interaction will create a collection. In any case the collection - * used by the interaction is returned by - * {@link ol.interaction.Select#getFeatures}. - * @type {ol.Collection.|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.features; - -/** - * A function that takes an {@link module:ol/Feature~Feature} and an {@link ol.layer.Layer} and - * returns `true` if the feature may be selected or `false` otherwise. - * @type {ol.SelectFilterFunction|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.filter; - - -/** - * Wrap the world horizontally on the selection overlay. Default is `true`. - * @type {boolean|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.wrapX; - - -/** - * Hit-detection tolerance. Pixels inside the radius around the given position - * will be checked for features. This only works for the canvas renderer and - * not for WebGL. Default is `0`. - * @type {number|undefined} - * @api - */ -olx.interaction.SelectOptions.prototype.hitTolerance; - - /** * Options for snap * @typedef {{ diff --git a/externs/xol.js b/externs/xol.js index 9f8681b3a7..0cf900cfc3 100644 --- a/externs/xol.js +++ b/externs/xol.js @@ -14,55 +14,6 @@ */ -/** - * @typedef {Object} interaction_SelectOptions - * @property {ol.EventsConditionType|undefined} addCondition A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * By default, this is {@link ol.events.condition.never}. Use this if you want - * to use different events for add and remove instead of `toggle`. - * @property {ol.EventsConditionType|undefined} condition A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * This is the event for the selected features as a whole. By default, this is - * {@link ol.events.condition.singleClick}. Clicking on a feature selects that - * feature and removes any that were in the selection. Clicking outside any - * feature removes all from the selection. - * See `toggle`, `add`, `remove` options for adding/removing extra features to/ - * from the selection. - * @property {undefined|Array.|function(ol.layer.Layer): boolean} layers A list of layers from which features should be - * selected. Alternatively, a filter function can be provided. The - * function will be called for each layer in the map and should return - * `true` for layers that you want to be selectable. If the option is - * absent, all visible layers will be considered selectable. - * @property {ol.style.Style|Array.|ol.StyleFunction|undefined} style Style for the selected features. By default the default edit style is used - * (see {@link ol.style}). - * @property {ol.EventsConditionType|undefined} removeCondition A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * By default, this is {@link ol.events.condition.never}. Use this if you want - * to use different events for add and remove instead of `toggle`. - * @property {ol.EventsConditionType|undefined} toggleCondition A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean - * to indicate whether that event should be handled. - * This is in addition to the `condition` event. By default, - * {@link ol.events.condition.shiftKeyOnly}, i.e. pressing `shift` as well as - * the `condition` event, adds that feature to the current selection if it is - * not currently selected, and removes it if it is. - * See `add` and `remove` if you want to use different events instead of a - * toggle. - * @property {boolean|undefined} multi A boolean that determines if the default behaviour should select only - * single features or all (overlapping) features at the clicked map - * position. Default is false i.e single select - * @property {ol.Collection.|undefined} features Collection where the interaction will place selected features. Optional. If - * not set the interaction will create a collection. In any case the collection - * used by the interaction is returned by - * {@link ol.interaction.Select#getFeatures}. - * @property {ol.SelectFilterFunction|undefined} filter A function that takes an {@link module:ol/Feature~Feature} and an {@link ol.layer.Layer} and - * returns `true` if the feature may be selected or `false` otherwise. - * @property {boolean|undefined} wrapX Wrap the world horizontally on the selection overlay. Default is `true`. - * @property {number|undefined} hitTolerance Hit-detection tolerance. Pixels inside the radius around the given position - * will be checked for features. This only works for the canvas renderer and - * not for WebGL. Default is `0`. - */ - - /** * @typedef {Object} interaction_SnapOptions * @property {ol.Collection.|undefined} features Snap to these features. Either this option or source should be provided. diff --git a/src/ol/interaction/Select.js b/src/ol/interaction/Select.js index 22010432ec..848bb8a175 100644 --- a/src/ol/interaction/Select.js +++ b/src/ol/interaction/Select.js @@ -29,9 +29,77 @@ const SelectEventType = { }; +/** + * A function that takes an {@link module:ol/Feature~Feature} or + * {@link module:ol/render/Feature~Feature} and an + * {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be + * selected or `false` otherwise. + * @typedef {function((module:ol/Feature~Feature|module:ol/render/Feature~Feature), module:ol/layer/Layer~Layer): + * boolean} FilterFunction + */ + + +/** + * @typedef {Object} Options + * @property {module:ol/events/condition~Condition} [addCondition] A function + * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a + * boolean to indicate whether that event should be handled. + * By default, this is {@link module:ol/events/condition~never}. Use this if you + * want to use different events for add and remove instead of `toggle`. + * @property {module:ol/events/condition~Condition} [condition] A function that + * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a + * boolean to indicate whether that event should be handled. This is the event + * for the selected features as a whole. By default, this is + * {@link module:ol/events/condition~singleClick}. Clicking on a feature selects that + * feature and removes any that were in the selection. Clicking outside any + * feature removes all from the selection. + * See `toggle`, `add`, `remove` options for adding/removing extra features to/ + * from the selection. + * @property {Array.|function(module:ol/layer/Layer~Layer): boolean} [layers] + * A list of layers from which features should be selected. Alternatively, a + * filter function can be provided. The function will be called for each layer + * in the map and should return `true` for layers that you want to be + * selectable. If the option is absent, all visible layers will be considered + * selectable. + * @property {module:ol/style/Style~Style|Array.|module:ol/style~StyleFunction} [style] + * Style for the selected features. By default the default edit style is used + * (see {@link module:ol/style}). + * @property {module:ol/events/condition~Condition} [removeCondition] A function + * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a + * boolean to indicate whether that event should be handled. + * By default, this is {@link module:ol/events/condition~never}. Use this if you + * want to use different events for add and remove instead of `toggle`. + * @property {module:ol/events/condition~Condition} [toggleCondition] A function + * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a + * boolean to indicate whether that event should be handled. This is in addition + * to the `condition` event. By default, + * {@link module:ol/events/condition~shiftKeyOnly}, i.e. pressing `shift` as + * well as the `condition` event, adds that feature to the current selection if + * it is not currently selected, and removes it if it is. See `add` and `remove` + * if you want to use different events instead of a toggle. + * @property {boolean} [multi=false] A boolean that determines if the default + * behaviour should select only single features or all (overlapping) features at + * the clicked map position. The default of `false` means single select. + * @property {module:ol/collection/Collection~Collection.} [features] + * Collection where the interaction will place selected features. Optional. If + * not set the interaction will create a collection. In any case the collection + * used by the interaction is returned by + * {@link module:ol/interaction/Select~Select#getFeatures}. + * @property {module:ol/interaction/Select~FilterFunction} [filter] A function + * that takes an {@link module:ol/Feature~Feature} and an + * {@link module:ol/layer/Layer~Layer} and returns `true` if the feature may be + * selected or `false` otherwise. + * @property {boolean} [wrapX=true] Wrap the world horizontally on the selection + * overlay. + * @property {number} [hitTolerance=0] Hit-detection tolerance. Pixels inside + * the radius around the given position will be checked for features. This only + * works for the canvas renderer and not for WebGL. + */ + + /** * @classdesc - * Events emitted by {@link ol.interaction.Select} instances are instances of + * Events emitted by {@link module:ol/interaction/Select~Select} instances are instances of * this type. * * @param {SelectEventType} type The event type. @@ -40,7 +108,7 @@ const SelectEventType = { * @param {module:ol/MapBrowserEvent~MapBrowserEvent} mapBrowserEvent Associated * {@link module:ol/MapBrowserEvent~MapBrowserEvent}. * @implements {oli.SelectEvent} - * @extends {ol.events.Event} + * @extends {module:ol/events/Event~Event} * @constructor */ const SelectEvent = function(type, selected, deselected, mapBrowserEvent) { @@ -84,8 +152,8 @@ inherits(SelectEvent, Event); * Selected features are added to an internal unmanaged layer. * * @constructor - * @extends {ol.interaction.Interaction} - * @param {olx.interaction.SelectOptions=} opt_options Options. + * @extends {module:ol/interaction/Interaction~Interaction} + * @param {module:ol/interaction/Select~Options=} opt_options Options. * @fires SelectEvent * @api */ @@ -129,7 +197,7 @@ const Select = function(opt_options) { /** * @private - * @type {ol.SelectFilterFunction} + * @type {module:ol/interaction/Select~FilterFunction} */ this.filter_ = options.filter ? options.filter : TRUE; @@ -153,11 +221,11 @@ const Select = function(opt_options) { /** * @private - * @type {ol.layer.Vector} + * @type {module:ol/layer/Vector~Vector} */ this.featureOverlay_ = featureOverlay; - /** @type {function(ol.layer.Layer): boolean} */ + /** @type {function(module:ol/layer/Layer~Layer): boolean} */ let layerFilter; if (options.layers) { if (typeof options.layers === 'function') { @@ -174,7 +242,7 @@ const Select = function(opt_options) { /** * @private - * @type {function(ol.layer.Layer): boolean} + * @type {function(module:ol/layer/Layer~Layer): boolean} */ this.layerFilter_ = layerFilter; @@ -182,7 +250,7 @@ const Select = function(opt_options) { * An association between selected feature (key) * and layer (value) * @private - * @type {Object.} + * @type {Object.} */ this.featureLayerAssociation_ = {}; @@ -198,8 +266,8 @@ inherits(Select, Interaction); /** - * @param {module:ol/Feature~Feature|ol.render.Feature} feature Feature. - * @param {ol.layer.Layer} layer Layer. + * @param {module:ol/Feature~Feature|module:ol/render/Feature~Feature} feature Feature. + * @param {module:ol/layer/Layer~Layer} layer Layer. * @private */ Select.prototype.addFeatureLayerAssociation_ = function(feature, layer) { @@ -210,7 +278,7 @@ Select.prototype.addFeatureLayerAssociation_ = function(feature, layer) { /** * Get the selected features. - * @return {ol.Collection.} Features collection. + * @return {module:ol/collection/Collection~Collection.} Features collection. * @api */ Select.prototype.getFeatures = function() { @@ -229,17 +297,17 @@ Select.prototype.getHitTolerance = function() { /** - * Returns the associated {@link ol.layer.Vector vectorlayer} of + * Returns the associated {@link module:ol/layer/Vector~Vector vectorlayer} of * the (last) selected feature. Note that this will not work with any * programmatic method like pushing features to - * {@link ol.interaction.Select#getFeatures collection}. - * @param {module:ol/Feature~Feature|ol.render.Feature} feature Feature - * @return {ol.layer.Vector} Layer. + * {@link module:ol/interaction/Select~Select#getFeatures collection}. + * @param {module:ol/Feature~Feature|module:ol/render/Feature~Feature} feature Feature + * @return {module:ol/layer/Vector~Vector} Layer. * @api */ Select.prototype.getLayer = function(feature) { const key = getUid(feature); - return /** @type {ol.layer.Vector} */ (this.featureLayerAssociation_[key]); + return /** @type {module:ol/layer/Vector~Vector} */ (this.featureLayerAssociation_[key]); }; @@ -248,7 +316,7 @@ Select.prototype.getLayer = function(feature) { * selected state of features. * @param {module:ol/MapBrowserEvent~MapBrowserEvent} mapBrowserEvent Map browser event. * @return {boolean} `false` to stop event propagation. - * @this {ol.interaction.Select} + * @this {module:ol/interaction/Select~Select} */ function handleEvent(mapBrowserEvent) { if (!this.condition_(mapBrowserEvent)) { @@ -270,8 +338,8 @@ function handleEvent(mapBrowserEvent) { map.forEachFeatureAtPixel(mapBrowserEvent.pixel, ( /** - * @param {module:ol/Feature~Feature|ol.render.Feature} feature Feature. - * @param {ol.layer.Layer} layer Layer. + * @param {module:ol/Feature~Feature|module:ol/render/Feature~Feature} feature Feature. + * @param {module:ol/layer/Layer~Layer} layer Layer. * @return {boolean|undefined} Continue to iterate over the features. */ function(feature, layer) { @@ -303,8 +371,8 @@ function handleEvent(mapBrowserEvent) { map.forEachFeatureAtPixel(mapBrowserEvent.pixel, ( /** - * @param {module:ol/Feature~Feature|ol.render.Feature} feature Feature. - * @param {ol.layer.Layer} layer Layer. + * @param {module:ol/Feature~Feature|module:ol/render/Feature~Feature} feature Feature. + * @param {module:ol/layer/Layer~Layer} layer Layer. * @return {boolean|undefined} Continue to iterate over the features. */ function(feature, layer) { @@ -351,7 +419,7 @@ Select.prototype.setHitTolerance = function(hitTolerance) { /** * Remove the interaction from its current map, if any, and attach it to a new * map, if any. Pass `null` to just remove the interaction from the current map. - * @param {ol.PluggableMap} map Map. + * @param {module:ol/PluggableMap~PluggableMap} map Map. * @override * @api */ @@ -388,7 +456,7 @@ function getDefaultStyleFunction() { /** - * @param {ol.CollectionEvent} evt Event. + * @param {module:ol/collection/Collection~CollectionEvent} evt Event. * @private */ Select.prototype.addFeature_ = function(evt) { @@ -400,7 +468,7 @@ Select.prototype.addFeature_ = function(evt) { /** - * @param {ol.CollectionEvent} evt Event. + * @param {module:ol/collection/Collection~CollectionEvent} evt Event. * @private */ Select.prototype.removeFeature_ = function(evt) { @@ -412,7 +480,7 @@ Select.prototype.removeFeature_ = function(evt) { /** - * @param {module:ol/Feature~Feature|ol.render.Feature} feature Feature. + * @param {module:ol/Feature~Feature|module:ol/render/Feature~Feature} feature Feature. * @private */ Select.prototype.removeFeatureLayerAssociation_ = function(feature) { diff --git a/src/ol/typedefs.js b/src/ol/typedefs.js index 960dd8711d..154b6f8b90 100644 --- a/src/ol/typedefs.js +++ b/src/ol/typedefs.js @@ -256,16 +256,6 @@ ol.ReprojTileFunctionType; ol.ReprojTriangle; -/** - * A function that takes an {@link module:ol/Feature~Feature} or {@link ol.render.Feature} and - * an {@link ol.layer.Layer} and returns `true` if the feature may be selected - * or `false` otherwise. - * @typedef {function((module:ol/Feature~Feature|ol.render.Feature), ol.layer.Layer): - * boolean} - */ -ol.SelectFilterFunction; - - /** * @typedef {{ * snapped: {boolean},