Compare commits

..

538 Commits

Author SHA1 Message Date
Andreas Hocevar
badc350746 Merge pull request #8554 from openlayers/release-v5.2.0
Release v5.2.0
2018-08-28 21:39:23 +02:00
Andreas Hocevar
50293200d7 Merge pull request #8504 from ahocevar/browserify-readme
Link to Browserify example project
2018-08-28 21:35:18 +02:00
ahocevar
b2b3d6b05c Update package version to 5.2.0 2018-08-28 21:32:36 +02:00
ahocevar
34fefe3103 Changelog for v5.2.0 2018-08-28 21:32:36 +02:00
Pierre GIRAUD
27dadef8ef Merge pull request #8511 from openlayers/pgiraud-patch-1
Update IGN API key
2018-08-27 10:36:35 +02:00
Pierre GIRAUD
f456c56ddd Merge pull request #8547 from pgiraud/serve-examples
Fix port number in developing doc
2018-08-27 09:32:44 +02:00
Pierre GIRAUD
bdb80d3368 Fix port number in developing doc 2018-08-27 09:14:23 +02:00
Pierre GIRAUD
b039e17015 Update IGN API key
Fixes #8509
2018-08-27 09:11:26 +02:00
Andreas Hocevar
bd9635f6ef Merge pull request #8546 from ahocevar/proj-faq
Update projection FAQ for v5
2018-08-27 08:14:28 +02:00
ahocevar
a0e72c7d42 Update projection FAQ for v5 2018-08-26 21:41:16 +02:00
Andreas Hocevar
bb77fbe703 Merge pull request #8543 from openlayers/greenkeeper/rollup-0.65.0
Update rollup to the latest version 🚀
2018-08-26 07:21:28 +02:00
greenkeeper[bot]
0c47890bdd chore(package): update rollup to version 0.65.0 2018-08-25 14:41:44 +00:00
Andreas Hocevar
2d974c6f1f Merge pull request #8541 from openlayers/greenkeeper/proj4-2.5.0
Update proj4 to the latest version 🚀
2018-08-25 00:37:38 +02:00
Andreas Hocevar
d95b2bc2ae Merge pull request #8542 from openlayers/greenkeeper/rollup-plugin-commonjs-9.1.6
Update rollup-plugin-commonjs to the latest version 🚀
2018-08-25 00:36:35 +02:00
greenkeeper[bot]
0ada02f12a chore(package): update rollup-plugin-commonjs to version 9.1.6 2018-08-24 22:10:50 +00:00
greenkeeper[bot]
786bb608b9 chore(package): update proj4 to version 2.5.0 2018-08-24 21:25:55 +00:00
Frédéric Junod
2342ec90aa Merge pull request #8481 from gberaudo/expose_some_internal_functions
Expose some internal functions
2018-08-23 10:42:19 +02:00
Andreas Hocevar
7a05b671d8 Merge pull request #8533 from openlayers/greenkeeper/webpack-4.17.1
Update webpack to the latest version 🚀
2018-08-22 13:32:22 +02:00
Andreas Hocevar
ea9517ffd5 Merge pull request #8510 from gberaudo/fix_WMTS_dimensions_handling
Fix WMTS URLs with dimensions
2018-08-22 13:31:53 +02:00
Frédéric Junod
d84c64b3e7 Merge pull request #8524 from NeoRaider/xhtml-fixes
Fix compatiblity with XHTML content type
2018-08-22 13:13:22 +02:00
greenkeeper[bot]
017d2e4802 chore(package): update webpack to version 4.17.1 2018-08-22 10:49:35 +00:00
Andreas Hocevar
3b36477fc3 Merge pull request #8532 from ahocevar/rendercomplete
Add 'rendercomplete' event
2018-08-22 11:01:00 +02:00
ahocevar
1baa8be269 Add 'rendercomplete' event 2018-08-22 09:53:24 +02:00
Andreas Hocevar
158b54156a Merge pull request #8530 from openlayers/greenkeeper/webpack-4.17.0
Update webpack to the latest version 🚀
2018-08-21 19:34:45 +02:00
greenkeeper[bot]
5752bd0028 chore(package): update webpack to version 4.17.0 2018-08-21 09:50:38 +00:00
Andreas Hocevar
3f98094d9d Merge pull request #8529 from TDesjardins/patch-1
Update link to base class in docs
2018-08-20 17:56:50 +02:00
Tino Desjardins
b56a7c0fa3 Update link to base class in docs 2018-08-20 17:03:59 +02:00
Tim Schaub
b7aa6c6513 Merge pull request #8528 from TDesjardins/patch-1
Update link to base class in docs
2018-08-20 05:36:47 -06:00
Tino Desjardins
1605741a92 Update link to base class in docs 2018-08-20 10:23:22 +02:00
Tim Schaub
a18da7d55a Merge pull request #8525 from tschaub/re-export-projection
Re-export Projection from ol/proj for convenience
2018-08-19 19:52:17 -06:00
Tim Schaub
68cf960028 Re-export Projection from ol/proj for convenience 2018-08-18 14:14:10 -06:00
Matthias Schiffer
94c6afd65d Avoid HTML entities like   and ©
Use numerical entities instead for XHTML compatiblity.
2018-08-18 13:13:27 +02:00
Matthias Schiffer
321166849b Consistently use lowercase HTML tag names
Unlike HTML, XHTML is case-sensitive.
2018-08-18 12:48:14 +02:00
Andreas Hocevar
26cc0a3ded Merge pull request #8522 from openlayers/greenkeeper/marked-0.5.0
Update marked to the latest version 🚀
2018-08-17 11:30:38 +02:00
greenkeeper[bot]
fffcf4415c chore(package): update marked to version 0.5.0 2018-08-17 09:00:28 +00:00
Andreas Hocevar
07cb678271 Merge pull request #8499 from ahocevar/focus
Round center in viewState to pixels
2018-08-16 16:41:15 +02:00
Guillaume Beraudo
315cfa1033 Fix WMTS layers URLs with dimensions 2018-08-16 15:34:56 +02:00
Andreas Hocevar
38349d8c37 Merge pull request #8520 from openlayers/redundant-if
Remove redundant if block
2018-08-16 08:31:29 +02:00
Andreas Hocevar
adce78e19e Remove redundant if block 2018-08-16 07:04:53 +02:00
Andreas Hocevar
eb0fcdb588 Merge pull request #8515 from ahocevar/getoverlay
More convenient select and sketch layer management
2018-08-15 13:21:48 +02:00
ahocevar
161c5b0105 Better documentation of the zIndex default 2018-08-15 11:24:29 +02:00
ahocevar
8ab1589f9a Add getOverlay method to access sketch and selection layers 2018-08-15 10:59:38 +02:00
ahocevar
95533e2425 Use configured zIndex for unmanaged layers 2018-08-15 10:58:52 +02:00
Andreas Hocevar
a94dff2c06 Merge pull request #8505 from openlayers/greenkeeper/karma-3.0.0
Update karma to the latest version 🚀
2018-08-10 11:34:21 +02:00
greenkeeper[bot]
fc75fc691b chore(package): update karma to version 3.0.0 2018-08-09 21:20:04 +00:00
ahocevar
b9aceb23ac Let renderer decide whether to snapToPixel or not, also for text 2018-08-09 18:16:58 +02:00
ahocevar
f382ddf230 Remove snapToPixel option and deprecate getters/setters 2018-08-09 18:16:58 +02:00
ahocevar
dbdaa73cf2 Only change interacting flag when dragging 2018-08-09 18:16:58 +02:00
ahocevar
f3cd1d8dfd Round center in viewState 2018-08-09 18:16:58 +02:00
Andreas Hocevar
e5944682df Merge pull request #8503 from ahocevar/callback-closure
Avoid block scope issues in transpiled code
2018-08-09 13:55:17 +02:00
Andreas Hocevar
147a86c867 Merge pull request #8501 from openlayers/greenkeeper/rollup-plugin-commonjs-9.1.5
Update rollup-plugin-commonjs to the latest version 🚀
2018-08-09 10:57:34 +02:00
ahocevar
2d08811485 Link to Browserify example project 2018-08-09 10:34:31 +02:00
ahocevar
fc19e3e12e Avoid block scope issues in transpiled code 2018-08-09 10:22:42 +02:00
greenkeeper[bot]
a5fc8bdd25 chore(package): update rollup-plugin-commonjs to version 9.1.5 2018-08-09 05:49:21 +00:00
Andreas Hocevar
7f8b2d2e1f Merge pull request #8495 from openlayers/greenkeeper/rollup-0.64.1
Update rollup to the latest version 🚀
2018-08-07 21:43:35 +02:00
greenkeeper[bot]
80a00fce47 chore(package): update rollup to version 0.64.1 2018-08-07 19:20:14 +00:00
Andreas Hocevar
ee8ed5193c Merge pull request #8493 from openlayers/greenkeeper/clean-css-cli-4.2.1
Update clean-css-cli to the latest version 🚀
2018-08-07 11:26:54 +02:00
greenkeeper[bot]
cc7d825a13 chore(package): update clean-css-cli to version 4.2.1 2018-08-07 09:02:18 +00:00
Andreas Hocevar
fd4e0f14cc Merge pull request #8490 from MarquesDeAzevedo/patch-1
WMTS getCapabilities readCoodinates more than one whitespace delimiter
2018-08-07 10:46:28 +02:00
MarquesDeAzevedo
85e1f11adb WMTS getCapabilities readCoodinates more than one whitespace delimiter
remove not required regexp modifier
2018-08-07 10:40:08 +02:00
MarquesDeAzevedo
47c4e1a165 WMTS getCapabilities readCoodinates more than one whitespace delimiter
combine split and replace
2018-08-07 09:56:17 +02:00
Andreas Hocevar
0bff75a067 Merge pull request #8491 from openlayers/greenkeeper/rollup-0.64.0
Update rollup to the latest version 🚀
2018-08-07 09:21:42 +02:00
greenkeeper[bot]
ab81deb242 chore(package): update rollup to version 0.64.0 2018-08-07 07:12:54 +00:00
MarquesDeAzevedo
654073cd3d WMTS getCapabilities readCoodinates more than one whitespace delimiter
Some WMTS getCapabilities return <MatrixSet><TopLeftCorner> with more than one whitespace as delimiter between the coordinates. This leads to the layer not being displayed, because the origin_ property of ol.tilegrid.TileGrid is not set.
Error in ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndZ_: JavaScript runtime error: Unable to get property '0' of undefined or null reference
2018-08-07 08:40:42 +02:00
Andreas Hocevar
a354e842ab Merge pull request #8489 from ahocevar/prototype
Use .prototype. only where necessary
2018-08-06 15:44:06 +02:00
ahocevar
1eeea2aa4d Use class method syntax instead of .prototype.method = function 2018-08-06 15:30:17 +02:00
ahocevar
2f92e48e93 Use super.method instead of prototype.method.call 2018-08-06 15:30:17 +02:00
ahocevar
c5b42c49d5 Fix Disposable's prototype handling 2018-08-06 15:30:17 +02:00
Andreas Hocevar
03d47e49ed Merge pull request #8486 from openlayers/greenkeeper/webpack-4.16.5
Update webpack to the latest version 🚀
2018-08-06 11:40:44 +02:00
Guillaume Beraudo
abbfb5c653 Document the stableSort function 2018-08-06 10:50:18 +02:00
greenkeeper[bot]
a78c163a4f chore(package): update webpack to version 4.16.5 2018-08-06 08:14:58 +00:00
Guillaume Beraudo
a4178d05ef Expose the stableSort function
This is a low level function, essential to OpenLayers so it is always
shipped with OpenLayers.
2018-08-06 09:18:56 +02:00
Guillaume Beraudo
dbf9048d8f Expose the getUid function
It is often useful in application code to have a way to uniquely identify
and object.

Exposing the OpenLayers mechanism allows for best performance and avoid
unneccessary dirt.
2018-08-06 09:18:56 +02:00
Andreas Hocevar
824ad48488 Merge pull request #8478 from ahocevar/available-font-weights
Check font availability with multiple font weights
2018-08-06 06:52:53 +02:00
Frédéric Junod
8cd9eabe68 Merge pull request #8483 from fredj/draw-shapes-null-coordinates
Don't create Polygon with null coordinates
2018-08-05 19:30:34 +02:00
Frederic Junod
a50a4efeca Don't create Polygon with null coordinates 2018-08-04 07:35:19 +02:00
Frédéric Junod
d49be1393e Merge pull request #8471 from samuel-girard/imagestatic_properties
Add getUrl and getImageExtent to ImageStatic API
2018-08-03 09:22:53 +02:00
Andreas Hocevar
a991bb21d6 Merge pull request #8470 from scroach/tile-api-doc
Update Tile loading API docs
2018-08-03 09:13:48 +02:00
Andreas Hocevar
df848d6673 Add basic tileLoadFunction example and refine advanced example 2018-08-03 09:04:24 +02:00
scroach
68ce6de0ca Updated Tile loading API docs 2018-08-03 09:01:47 +02:00
Tim Schaub
141fe5fe49 Merge pull request #8477 from gberaudo/expose_gutter
Expose original getGutter
2018-08-02 22:33:23 -06:00
Andreas Hocevar
57baa15cc3 Merge pull request #8476 from openlayers/greenkeeper/webpack-4.16.4
Update webpack to the latest version 🚀
2018-08-02 22:46:57 +02:00
Andreas Hocevar
64138bb94f Merge pull request #8475 from openlayers/greenkeeper/clean-css-cli-4.2.0
Update clean-css-cli to the latest version 🚀
2018-08-02 22:41:09 +02:00
ahocevar
62188502e9 Check font availability in 3 different weight ranges 2018-08-02 18:57:26 +02:00
Guillaume Beraudo
fe86d2e7f7 Expose original getGutter
TileWMS objects take a gutter option but do not have a public getter
for it. This makes it convoluted for user code to recreate the object
(ex: in the case of serialization/deserialization).

- the getGutterInternal() method is renamed to getGutter;
- the getGutter(projection) method is renamed to getGutterForProjection,
  which is also more explicit.

The getGutter method was not API and is only used by the renderer.
2018-08-02 17:12:41 +02:00
greenkeeper[bot]
69ae9d7180 chore(package): update webpack to version 4.16.4 2018-08-02 14:55:46 +00:00
greenkeeper[bot]
adc83ba484 chore(package): update clean-css-cli to version 4.2.0 2018-08-02 13:08:28 +00:00
Samuel Girard
4012280ad4 Use class property for url 2018-08-02 09:02:04 +02:00
Samuel Girard
e48c85a689 Add getUrl and getImageExtent to ImageStatic API 2018-08-01 12:23:38 +02:00
Andreas Hocevar
c74faaa7ca Merge pull request #8469 from openlayers/greenkeeper/rollup-0.63.5
Update rollup to the latest version 🚀
2018-08-01 10:52:23 +02:00
greenkeeper[bot]
236b6832fb chore(package): update rollup to version 0.63.5 2018-08-01 07:39:36 +00:00
Andreas Hocevar
93b92d3990 Merge pull request #8466 from ahocevar/on-focus-only
Add onFocusOnly option to interaction defaults
2018-07-31 13:27:14 +02:00
Andreas Hocevar
a36ab978e7 Merge pull request #8465 from ahocevar/no-prevent-default-on-pointermove
Do not prevent default on pointermove
2018-07-31 13:26:46 +02:00
ahocevar
55fb62c551 Add onFocusOnly option to interaction defaults 2018-07-31 09:01:42 +02:00
ahocevar
c74b9c1d55 Do not prevent default on pointermove
Instead, only prevent default on handled pointerdown events. This makes 
the `focus` condition work with interactions that involve dragging on 
touch devices.
2018-07-31 08:33:15 +02:00
Andreas Hocevar
a56ca57ac6 Merge pull request #8461 from lionralfs/lionralfs-patch-1
Fix double backtick typo
2018-07-28 14:40:33 +02:00
Lion Ralfs
1aadd51c57 Fix double backtick typo 2018-07-28 12:58:37 +02:00
Tim Schaub
a1391a2083 Merge pull request #8453 from openlayers/greenkeeper/webpack-4.16.3
Update webpack to the latest version 🚀
2018-07-27 17:55:28 -06:00
Frédéric Junod
5adf0be4a3 Merge pull request #8452 from fredj/f_8409
Remove extra translate function in Geometry, add missing api tag
2018-07-27 15:53:53 +02:00
Frédéric Junod
4c71ddb3c7 Merge pull request #8451 from fredj/rm_f
Remove unimplemented functions
2018-07-27 13:22:35 +02:00
greenkeeper[bot]
efe15402cc chore(package): update webpack to version 4.16.3 2018-07-27 11:19:38 +00:00
Frederic Junod
b3586bed8d Remove extra translate function in Geometry, add missing api tag 2018-07-27 13:19:12 +02:00
Frederic Junod
1e332f52d6 Remove unimplemented functions
The TypeScript checker complain about it.
It was a workaround for closure-compiler, it's not needed anymore.
2018-07-27 13:10:45 +02:00
Frédéric Junod
c0f44f6d9d Merge pull request #8450 from fredj/types
Mark properties of ReadOptions and WriteOptions as optional
2018-07-27 11:45:25 +02:00
Andreas Hocevar
efe0dd7fbf Merge pull request #8447 from openlayers/greenkeeper/rollup-plugin-commonjs-9.1.4
Update rollup-plugin-commonjs to the latest version 🚀
2018-07-27 11:39:47 +02:00
Frederic Junod
219629458b Mark properties of ReadOptions and WriteOptions as optional 2018-07-27 11:25:52 +02:00
greenkeeper[bot]
b13feb0046 chore(package): update rollup-plugin-commonjs to version 9.1.4 2018-07-27 06:27:33 +00:00
Tim Schaub
df293d8a2e Merge pull request #8443 from tschaub/void
Explicit void
2018-07-26 17:28:26 -06:00
Tim Schaub
6cfa2b22a7 Explicit void 2018-07-26 10:46:39 -06:00
Tim Schaub
8346bb7454 Merge pull request #8437 from tschaub/target
Avoid shadowing EventTarget
2018-07-26 09:21:57 -07:00
Tim Schaub
40486a0ecc Avoid shadowing EventTarget 2018-07-26 10:14:58 -06:00
Tim Schaub
d8efa569d9 Merge pull request #8439 from tschaub/dotless
Fewer dots in types
2018-07-26 06:16:33 -07:00
Frédéric Junod
adfb3dd229 Merge pull request #8441 from fredj/f_8440
Fix loaded script for the example-verbatim examples
2018-07-26 14:02:33 +02:00
Frederic Junod
3c0be4e611 Fix loaded script for the example-verbatim examples 2018-07-26 13:46:17 +02:00
Tim Schaub
2eb07aa081 Use Template<Foo> instead of Template.<Foo> 2018-07-25 18:37:08 -07:00
Tim Schaub
affbf59b77 Use Object<Foo, Bar> instead of Object.<Foo, Bar> 2018-07-25 18:33:49 -07:00
Tim Schaub
d12ef20b12 Use Array<Foo> instead of Array.<Foo> 2018-07-25 18:32:43 -07:00
Frédéric Junod
5a6502572f Merge pull request #8435 from fredj/f_8434
Call setCoordinates on the point instance
2018-07-25 16:55:05 +02:00
Frederic Junod
d7adf0b4f3 Call setCoordinates on the point instance 2018-07-25 16:10:56 +02:00
Tim Schaub
f7551623e7 Merge pull request #8428 from tschaub/ts-fixes
Type name on same line as type
2018-07-24 07:24:13 -07:00
Tim Schaub
6f22f1b7ac Param name on same line as type 2018-07-23 16:28:22 -07:00
Tim Schaub
6cdfbe3116 Merge pull request #8422 from jkoelewijn/improveJsDocForAngularCli
Improve JSDoc such that `ng build --prod` with angular/cli 6.0.8 succeeds again
2018-07-23 14:40:50 -07:00
Jaap Koelewijn
704845e37a Use alternative JSDoc annotation for optional parameter which passes the tests. 2018-07-23 21:29:52 +02:00
Jaap Koelewijn
fd9219f035 Incorporate review comments of ahocevar and tschaub. 2018-07-23 21:12:43 +02:00
Tim Schaub
f3786f9cff Merge pull request #8426 from openlayers/greenkeeper/webpack-4.16.2
Update webpack to the latest version 🚀
2018-07-23 07:23:19 -07:00
greenkeeper[bot]
436633b990 chore(package): update webpack to version 4.16.2 2018-07-23 12:03:50 +00:00
Andreas Hocevar
a89ae25134 Merge pull request #8396 from iamplex/fix-createRegularPolygon
Fix ol.interaction.Draw~createRegularPolygon
2018-07-23 10:51:32 +02:00
Jaap Koelewijn
2769953204 Fix JSDoc such that ng build --prod with angular/cli 6.0.8 succeeds again. 2018-07-23 01:05:26 +02:00
Andreas Hocevar
14ead39440 Merge pull request #8420 from ahocevar/raster-lib-fn-names
Keep function names when building examples
2018-07-22 22:55:05 +02:00
ahocevar
39261af940 Keep function names when building examples 2018-07-22 17:39:20 +02:00
Tim Schaub
9ec623380a Merge pull request #8419 from tschaub/release-v5.1.3
Release v5.1.3
2018-07-21 08:45:16 -07:00
Tim Schaub
28104527b0 Updates for v5.1.3 2018-07-21 09:44:10 -06:00
Tim Schaub
b50bc1febf Merge pull request #8417 from tschaub/bad-info
Minor doc updates
2018-07-21 08:34:01 -07:00
Andreas Hocevar
c046c2a1ba Merge pull request #8418 from ahocevar/classdesc-constructor-api
Set api annotation on classdesc, not constructor
2018-07-21 17:33:30 +02:00
ahocevar
bbe0a66d07 Set api annotation on classdesc, not constructor 2018-07-21 17:25:22 +02:00
Tim Schaub
d8b290966b Tracking 2018-07-21 09:11:30 -06:00
Tim Schaub
0edb39c8ab Single quote instead of backtick 2018-07-21 08:40:03 -06:00
Tim Schaub
f0ffb48633 Update concepts 2018-07-21 08:37:38 -06:00
Tim Schaub
171195a836 Remove broken link to sources 2018-07-21 08:24:44 -06:00
ahocevar
45cf296ed4 Simplify calculation and add tests 2018-07-21 10:22:42 +02:00
plex
b377bbac59 fix: change the start angle of the regular polygon to match the sketch 2018-07-21 09:44:00 +02:00
Tim Schaub
2767ddfdc7 Merge pull request #8414 from tschaub/release-v5.1.2
Updates for 5.1.2
2018-07-20 19:04:08 -07:00
Tim Schaub
cd85e30d08 Updates for 5.1.2 2018-07-20 20:03:15 -06:00
Tim Schaub
139fcd7bae Merge pull request #8413 from tschaub/jsdoc-fix
Remove extra curly in type
2018-07-20 19:00:34 -07:00
Tim Schaub
2a04415264 Remove extra curly in type 2018-07-20 19:57:49 -06:00
Tim Schaub
515eca797f Correct link to release notes 2018-07-20 19:44:04 -06:00
Tim Schaub
0b0d5c63da Merge pull request #8412 from tschaub/release-v5.1.1
Changes for 5.1.1.
2018-07-20 18:38:59 -07:00
Tim Schaub
1ad3e8fe37 Changes for 5.1.1. 2018-07-20 19:33:45 -06:00
Tim Schaub
e5d7b30c31 Merge pull request #8411 from tschaub/release-v5.1.0
Release v5.1.0
2018-07-20 17:40:21 -07:00
Tim Schaub
1b745dc7b7 Update the publish.sh script 2018-07-20 18:31:25 -06:00
Tim Schaub
f8c5a79242 Collapsed dependency updates 2018-07-20 18:22:28 -06:00
Tim Schaub
9061e93c59 Update package version to 5.1.0 2018-07-20 18:20:17 -06:00
Tim Schaub
b04728d907 Changelog for v5.1.0 2018-07-20 18:20:11 -06:00
Tim Schaub
154827c5d5 Merge pull request #8409 from pjeweb/patch-2
Add abstract translate to ol/geom/Geometry
2018-07-20 09:57:06 -07:00
Andreas Hocevar
f1d03702b2 Merge pull request #8410 from openlayers/greenkeeper/rollup-0.63.4
Update rollup to the latest version 🚀
2018-07-20 18:24:18 +02:00
greenkeeper[bot]
23f9110f1f chore(package): update rollup to version 0.63.4 2018-07-20 16:02:19 +00:00
Tim Schaub
d3e221bd10 Merge pull request #8408 from openlayers/greenkeeper/rollup-0.63.3
Update rollup to the latest version 🚀
2018-07-20 07:56:15 -07:00
Paul Golmann
e3e6a28e18 Add abstract translate to ol/geom/Geometry 2018-07-20 15:40:53 +02:00
greenkeeper[bot]
f3089efd19 chore(package): update rollup to version 0.63.3 2018-07-20 12:53:36 +00:00
Tim Schaub
2cfc2fd369 Merge pull request #8405 from tschaub/ts-fixes
Minor type fixes
2018-07-19 15:55:25 -07:00
Tim Schaub
c860aed960 Import inherits, getUid, and VERSION from ol/util 2018-07-19 10:26:17 -06:00
Tim Schaub
83972b00a5 Use single quote instead of backtick 2018-07-19 10:22:10 -06:00
Tim Schaub
cf58ee9bf1 Only use getUid from ol/util 2018-07-19 10:19:41 -06:00
Tim Schaub
e5493d1288 Add ol/pixel module for Pixel type 2018-07-19 10:17:00 -06:00
Andreas Hocevar
f77b6be8e9 Merge pull request #8401 from ahocevar/css-side-effects
Make webpack's css loader work
2018-07-19 17:27:49 +02:00
Tim Schaub
1c5cc6ea7f Merge pull request #8386 from openlayers/greenkeeper/fs-extra-7.0.0
Update fs-extra to the latest version 🚀
2018-07-19 08:12:16 -07:00
Tim Schaub
b7c49e1007 Merge pull request #8403 from tschaub/md-links
Markdown links
2018-07-19 08:06:43 -07:00
Tim Schaub
e1e34e5636 Replace @see with See. 2018-07-19 08:37:32 -06:00
Tim Schaub
d46471d763 Replace {@link https://www.example.com/} with https://www.example.com/ 2018-07-19 08:34:35 -06:00
Frédéric Junod
dae843a98d Merge pull request #8402 from fredj/fixes_from_ts
Type fixes from the typescript checks
2018-07-19 16:28:18 +02:00
Frederic Junod
85d836d909 Remove 'Geolocation' prefix from types
So they are recognized by the TypeScript type checker.
2018-07-19 16:02:58 +02:00
Frederic Junod
323eb3f251 Fix reprojectionErrorThreshold property type 2018-07-19 16:02:58 +02:00
Frederic Junod
5d2cf66380 Add missing 'targetRotation' property in Animation typedef 2018-07-19 16:02:58 +02:00
Frederic Junod
2e60961700 Use 'HTMLElement' type instead of 'Element' in controls 2018-07-19 16:02:58 +02:00
Frederic Junod
c1ffb0a2a9 Move template type at the class level
This removes the TS1092 error from TypeScript: Type parameters cannot appear on a constructor declaration.
2018-07-19 15:53:52 +02:00
Tim Schaub
8f7b52f266 Merge pull request #8400 from tschaub/eslint-config-update
ESLint config update
2018-07-18 10:48:09 -07:00
ahocevar
bcefb07cf2 Make webpack's css loader work 2018-07-18 19:02:59 +02:00
Andreas Hocevar
52c75e32ee Merge pull request #8399 from ahocevar/copy-css
Copy ol.css to build dir when building package
2018-07-18 19:01:27 +02:00
ahocevar
60c8360330 Copy ol.css to build dir when building package 2018-07-18 18:37:05 +02:00
Tim Schaub
b8c9125602 Remove lint 2018-07-18 10:35:54 -06:00
Tim Schaub
71555002a8 Latest linter config 2018-07-18 10:33:31 -06:00
Tim Schaub
5d029f4256 Merge pull request #8397 from tschaub/rollupdate
Update rollup
2018-07-18 09:32:01 -07:00
Tim Schaub
6fa4fa59d6 Update rollup 2018-07-18 10:25:24 -06:00
Tim Schaub
b4ce8e4b3d Merge pull request #8385 from openlayers/class
Use class syntax
2018-07-18 09:16:27 -07:00
ahocevar
4cdab30201 Replace VERSION correctly in transpiled code 2018-07-18 18:05:02 +02:00
ahocevar
47c58d8a34 Transpile sources for testing 2018-07-18 17:54:29 +02:00
ahocevar
5124c98fb5 Default VERSION to 'latest' 2018-07-18 17:41:22 +02:00
ahocevar
aecb7e1789 Remove unused inherits 2018-07-18 16:33:35 +02:00
ahocevar
0a126b620c Use class keyword in tests 2018-07-18 16:30:09 +02:00
ahocevar
9ed3540edf Fix this access in WMTS source 2018-07-18 16:29:53 +02:00
ahocevar
4589345fac Remove leftover this in super call 2018-07-18 15:41:35 +02:00
ahocevar
e52cabcb31 Fix DragZoom tests 2018-07-18 15:41:13 +02:00
ahocevar
6f32d1a15b Deprecate ol/inherits 2018-07-18 15:40:53 +02:00
ahocevar
95533bef66 Fix WKT geometry type lookup and tests 2018-07-18 15:40:39 +02:00
ahocevar
4adab51768 stopPropagation and preventDefault are now separate functions 2018-07-18 12:21:42 +02:00
ahocevar
b813937991 Access the correct element 2018-07-18 12:19:33 +02:00
ahocevar
87a3510c83 Clean up super calls 2018-07-18 12:19:15 +02:00
ahocevar
d6190a0cd7 Remove accidently added .only() 2018-07-18 12:15:02 +02:00
ahocevar
8991dc9718 Do not use this before super() 2018-07-18 12:09:04 +02:00
Frederic Junod
65b306891b Remove 'struct' jsdoc tags, code indentation 2018-07-18 09:07:27 +02:00
Tim Schaub
b4e0d4c188 Super before this in TileJSON source 2018-07-18 01:00:19 -06:00
Tim Schaub
1309cf9b69 Call super before accessing this in Carto source 2018-07-18 00:53:57 -06:00
Tim Schaub
023bb638b2 Call super before accessing this in raster source 2018-07-18 00:53:17 -06:00
Tim Schaub
d885771d8d Call super before accessing this in BingMaps source 2018-07-18 00:52:23 -06:00
Tim Schaub
7713015b26 Call super before accessing this in icon 2018-07-18 00:49:00 -06:00
Tim Schaub
fe8fcfbc7e Call super in WebGL context 2018-07-18 00:45:19 -06:00
Tim Schaub
3f4ba0af5f Call super in regular shape 2018-07-18 00:44:24 -06:00
Tim Schaub
1e4ab17513 Assign to this after super in WMTS tile grid 2018-07-18 00:43:29 -06:00
Tim Schaub
5f058e877f Call super and fix up comments in render box 2018-07-18 00:39:51 -06:00
Tim Schaub
9ce36da349 Remove @extends and @constructor annotations 2018-07-18 00:36:29 -06:00
Tim Schaub
b7b15eb7f0 Remove unused inherits 2018-07-18 00:13:43 -06:00
Tim Schaub
1a5cf52b61 Remove remaining use of inherits in src 2018-07-17 23:43:10 -06:00
Tim Schaub
f6046c023c Clean up remaining ol/format/filter class 2018-07-17 18:30:15 -06:00
Tim Schaub
c4e5a7467e Clean up ol/renderer classes 2018-07-17 18:26:51 -06:00
Tim Schaub
9ee5edf19c Clean up ol/renderer/webgl classes 2018-07-17 18:23:52 -06:00
Tim Schaub
792e7e54f1 Clean up ol/renderer/canvas classes 2018-07-17 18:15:47 -06:00
Tim Schaub
45e0926896 Cleaned up ol/proj 2018-07-17 17:54:24 -06:00
Tim Schaub
069187859d Cleaned up ol/pointer classes 2018-07-17 17:48:27 -06:00
Tim Schaub
d855f5ba0a Call super instead of BaseObject 2018-07-17 14:57:57 -06:00
Tim Schaub
2f4aa5aa05 No inherits in ZoomToExtent 2018-07-17 14:56:19 -06:00
Tim Schaub
bd7328675a Construct error with message 2018-07-17 14:55:10 -06:00
Tim Schaub
7c6755d3ec Scripts for generating the package and legacy build 2018-07-17 14:48:17 -06:00
Tim Schaub
524b4c99d5 Bad @const annotation 2018-07-17 14:48:17 -06:00
ahocevar
e79add2e77 Use extends, super and proper constructor jsdoc for ol/interaction 2018-07-17 21:09:06 +02:00
ahocevar
fd962caa1c Use extends, super and proper constructor comments for format/filter/ 2018-07-17 18:36:26 +02:00
ahocevar
414d1556a7 Use extends and super for format/XMLFeature 2018-07-17 18:03:21 +02:00
ahocevar
a02c1713a4 Use extends and super for format/WMTSCapabilities 2018-07-17 18:02:01 +02:00
ahocevar
ba431421a1 Use extends and super for format/WMSGetFeatureInfo 2018-07-17 18:01:07 +02:00
ahocevar
a4abd990df Use extends and super for format/WMSCapabilities 2018-07-17 17:59:53 +02:00
ahocevar
df89b0718a Use extends and super for format/WKT 2018-07-17 17:56:30 +02:00
ahocevar
942a219c30 Use extends and super for format/WFS 2018-07-17 17:49:08 +02:00
ahocevar
788f932550 Use extends and super for format/TopoJSON 2018-07-17 17:15:41 +02:00
ahocevar
c969afcddc Use extends and super for format/TextFeature 2018-07-17 17:14:14 +02:00
ahocevar
9b2b921f7b Use extends and super for format/Polyline 2018-07-17 17:13:13 +02:00
ahocevar
092441017d Use extends and super for format/OWS 2018-07-17 17:04:02 +02:00
ahocevar
5e71e6ce80 Use extends and super for format/OSMXML 2018-07-17 17:02:55 +02:00
ahocevar
cf15af43e3 Use extends and super for format/MVT 2018-07-17 17:00:43 +02:00
ahocevar
a8bd0c5dd7 Use extends and super for format/KML 2018-07-17 16:59:13 +02:00
ahocevar
ad4e192ee9 Use extends and super for format/JSONFeature 2018-07-17 16:54:17 +02:00
ahocevar
6a39b9f412 Use extends and super for format/IGC 2018-07-17 16:49:38 +02:00
Frederic Junod
f140ff368d Move jsdoc constructor comments for controls 2018-07-17 16:44:53 +02:00
ahocevar
e1e5e54d74 Use extends and super for format/GPX 2018-07-17 16:43:54 +02:00
ahocevar
9a28af76ca Use extends and super for GMLBase 2018-07-17 16:43:54 +02:00
ahocevar
7f05bf1d7e Use extends and super for format/GML3 2018-07-17 16:43:54 +02:00
ahocevar
84e9d7c72e Use extends and super for format/GML2 2018-07-17 16:43:54 +02:00
ahocevar
672a462b1e Use extends and super for format/GeoJSON 2018-07-17 16:43:53 +02:00
Frederic Junod
c707b4c746 Use extends and super for geom 2018-07-17 16:21:54 +02:00
ahocevar
44bea898b8 Use extends and super for format/JSONFeature 2018-07-17 16:10:11 +02:00
ahocevar
a235dc906f Use extends and super for events/EventTarget 2018-07-17 16:01:04 +02:00
ahocevar
f5272bb391 Use extends and super for control/ZoomToExtent 2018-07-17 15:02:38 +02:00
ahocevar
6530119918 Use extends and super for control/ZoomSlider 2018-07-17 14:58:37 +02:00
ahocevar
11f1f5b25c Use new eslint config to enforce no-this-before-super 2018-07-17 14:58:12 +02:00
ahocevar
600205f4d9 Use extends and super for control/Zoom 2018-07-17 14:44:27 +02:00
ahocevar
1da14a6d97 Use extends and super for control/ScaleLine 2018-07-17 14:41:27 +02:00
ahocevar
7d5efd0348 Use extends and super for control/Rotate 2018-07-17 14:41:27 +02:00
ahocevar
6ffda39b14 Use extends and super for control/OverviewMap 2018-07-17 14:41:27 +02:00
ahocevar
353a00af89 Use extends and super for control/MousePosition 2018-07-17 14:41:26 +02:00
ahocevar
b9f08c6a2a Use extends and super for control/FullScreen 2018-07-17 14:41:26 +02:00
ahocevar
322a51d822 Use extends and super for control/Control 2018-07-17 14:41:25 +02:00
ahocevar
49c4a75777 Use extends and super for control/Attribution 2018-07-17 14:41:25 +02:00
ahocevar
778e867c79 Use extends and super for WebGLMap 2018-07-17 14:21:50 +02:00
ahocevar
4f26f145ae Use extends and super for View 2018-07-17 14:20:48 +02:00
ahocevar
9c994138ad Use extends and super for VectorTile 2018-07-17 14:19:43 +02:00
ahocevar
603f489708 Use extends and super for VectorImageTile 2018-07-17 14:18:40 +02:00
ahocevar
2e5054d11c Use extends and super for TileQueue 2018-07-17 14:15:34 +02:00
ahocevar
64190b7109 Use extends and super for TileCache 2018-07-17 14:15:34 +02:00
ahocevar
9e259c471d Use extends and super for Tile 2018-07-17 14:15:34 +02:00
ahocevar
505f88031b Use extends and super for PluggableMap 2018-07-17 14:15:33 +02:00
ahocevar
0f6ee28c19 Use extends and super for Overlay 2018-07-17 14:15:33 +02:00
ahocevar
2fd022d215 Use extends and super for Observable 2018-07-17 14:15:32 +02:00
ahocevar
2792ba701a Use extends and super for Object 2018-07-17 14:15:32 +02:00
ahocevar
e1fedca22e Use extends and super for MapEvent 2018-07-17 14:15:32 +02:00
ahocevar
5a90203aa0 Use extends and super for MapBrowserPointerEvent 2018-07-17 13:54:30 +02:00
ahocevar
edd23dbf6a Use extends and super for MapBrowserEventHandler 2018-07-17 13:53:05 +02:00
ahocevar
16849a3611 Use extends and super for MapBrowserEvent 2018-07-17 13:51:32 +02:00
ahocevar
de104d6e22 Use extends and super for Map 2018-07-17 13:49:53 +02:00
ahocevar
5f40b5b66b Use extends and super for ImageTile 2018-07-17 13:47:13 +02:00
ahocevar
6ca865375e Use extends and super for ImageCanvas 2018-07-17 13:45:54 +02:00
ahocevar
61c48ce09f Use extends and super for ImageBase 2018-07-17 13:40:49 +02:00
ahocevar
fb59d7a65b Use extends and super for Image 2018-07-17 13:28:27 +02:00
ahocevar
ec495bfcec Use extends and super for Geolocation 2018-07-17 11:56:21 +02:00
ahocevar
6f4d2e34a9 Use extends and super for Feature 2018-07-17 11:49:37 +02:00
ahocevar
aa7b6350ec Use extends and super for Collection 2018-07-17 11:46:19 +02:00
ahocevar
0224e2b3c5 Use extends and super for AssertionError 2018-07-17 11:45:50 +02:00
Frederic Junod
540b1793e7 Move jsdoc constructor comments 2018-07-17 10:20:26 +02:00
Frederic Junod
f2d0b11d24 Move jsdoc constructor comments 2018-07-17 09:59:00 +02:00
Frederic Junod
384920734f Fix webgl.js path import in webgl shaders 2018-07-17 09:19:04 +02:00
Frederic Junod
7e3e0e54ca Fix comments indentation 2018-07-17 09:15:16 +02:00
greenkeeper[bot]
c49d2e0115 chore(package): update fs-extra to version 7.0.0 2018-07-17 02:22:58 +00:00
Tim Schaub
d0ab8dce38 Lint removal 2018-07-16 17:57:57 -06:00
Tim Schaub
f78d0d4cfa Manual class transform 2018-07-16 17:09:50 -06:00
Tim Schaub
7b4a73f3b9 Automated class transform
npx lebab --replace src --transform class
2018-07-16 16:18:16 -06:00
Tim Schaub
60e85e7d89 Merge pull request #8383 from Turbo87/set-anchor
style/Icon: Add `setAnchor()` method
2018-07-16 04:56:03 -07:00
Tobias Bieniek
2096a1d0db style/Icon: Add setAnchor() method
This allows users to adjust the anchor after the `Icon` is defined. This can be useful if the anchor should depend on the rotation of the icon.
2018-07-16 12:48:52 +02:00
Andreas Hocevar
41fd1d4222 Merge pull request #8382 from openlayers/greenkeeper/webpack-4.16.1
Update webpack to the latest version 🚀
2018-07-16 12:26:31 +02:00
greenkeeper[bot]
b1f80a5998 chore(package): update webpack to version 4.16.1 2018-07-16 09:31:10 +00:00
Andreas Hocevar
19ca2c25c6 Merge pull request #8368 from ahocevar/imagemode-render-listeners
Make render listeners work with image render mode
2018-07-14 11:52:40 +02:00
Andreas Hocevar
84d2c3a42e Merge pull request #8376 from virtualcitySYSTEMS/feature-polygonMakeRegularXYZ
copy ZM values to polygon in makeRegular
2018-07-12 18:00:54 +02:00
Ben Kuster
88fbd6e35d moved copying of ZM values to Polygon.fromCircle 2018-07-12 17:25:31 +02:00
Ben Kuster
33ef64c912 copy ZM values to polygon in makeRegular 2018-07-12 12:52:05 +02:00
Andreas Hocevar
ed7788ca37 Merge pull request #8373 from openlayers/greenkeeper/webpack-4.16.0
Update webpack to the latest version 🚀
2018-07-11 20:54:07 +02:00
greenkeeper[bot]
623c887579 chore(package): update webpack to version 4.16.0 2018-07-11 09:53:51 +00:00
Andreas Hocevar
f2b7dfc26c Merge pull request #8372 from openlayers/release-v5.0.3
Release v5.0.3
2018-07-11 11:11:07 +02:00
ahocevar
349e602ee5 Update package version to 5.0.3 2018-07-11 11:01:34 +02:00
ahocevar
9cb10efe4b Changelog for v5.0.3 2018-07-11 10:56:05 +02:00
Andreas Hocevar
871a283601 Merge pull request #8364 from ahocevar/ie-examples
Make examples work in IE11
2018-07-11 10:51:08 +02:00
Andreas Hocevar
d1a609e0a3 Merge pull request #8363 from ahocevar/package-json-autogenerate
Autogenerate src/ol/package.json
2018-07-11 10:49:43 +02:00
Andreas Hocevar
e0c5529878 Merge pull request #8371 from ahocevar/empty-replay-groups
Skip rendering when there is no replay group
2018-07-11 10:47:42 +02:00
Andreas Hocevar
186d5466f4 Merge pull request #8364 from ahocevar/ie-examples
Make examples work in IE11
2018-07-11 10:16:45 +02:00
Andreas Hocevar
dc9e0a6bc4 Merge pull request #8363 from ahocevar/package-json-autogenerate
Autogenerate src/ol/package.json
2018-07-11 09:35:42 +02:00
Andreas Hocevar
b74dd515d5 Merge pull request #8371 from ahocevar/empty-replay-groups
Skip rendering when there is no replay group
2018-07-10 22:21:48 +02:00
ahocevar
1ee1ea6a1a Skip rendering when there is no replay group 2018-07-10 22:03:14 +02:00
ahocevar
fe0f91cb29 Add renderMode property to Heatmap layer 2018-07-10 14:10:35 +02:00
ahocevar
5d6721192d Make render listeners work with image render mode 2018-07-10 11:22:16 +02:00
Andreas Hocevar
d0a8043edc Merge pull request #8362 from ahocevar/smart-flat-coordinates
Smart flat coordinates
2018-07-09 10:27:11 +02:00
ahocevar
f3f0403cec Transpile examples for use with IE 11 2018-07-08 23:31:04 +02:00
ahocevar
84a88616a8 Match filename only when seraching source 2018-07-08 23:31:04 +02:00
ahocevar
4055a08043 Remove unused fields from package.json 2018-07-08 22:52:24 +02:00
ahocevar
afec93ae62 Autogenerate src/ol/package.json from package.json 2018-07-08 22:51:51 +02:00
ahocevar
e7d6bc055a Describe change in upgrade notes 2018-07-07 18:09:51 +02:00
ahocevar
97f6171b4c Rename setFlatCoordinatesInternal to setFlatCoordinates 2018-07-07 18:04:13 +02:00
ahocevar
e2f8d96763 Accept flat coordinates in Circle constructor 2018-07-07 18:02:38 +02:00
ahocevar
ce97cee6a6 Accept polygons and flat coordinates in MultiPolygon constructor 2018-07-07 17:31:35 +02:00
ahocevar
0ec0491ef6 Accept flat coordinates in LinearRing constructor 2018-07-07 17:12:12 +02:00
ahocevar
a09b6c91c9 Accept linestrings and flat coordinates in MultiLineString constructor 2018-07-07 17:01:39 +02:00
ahocevar
3871f7785a Accept flat coordinates for MultiPoint constructor 2018-07-07 16:26:24 +02:00
ahocevar
160f1bc286 Accept flat coordinates in LineString constructor 2018-07-07 16:04:43 +02:00
ahocevar
c0d04ea077 Do not accept null coordinates in Point constructor 2018-07-07 14:48:46 +02:00
ahocevar
da0838dde2 Treat WKT EMPTY geometries properly
Empty points have NaN as each coordinate, other geometry types have
empty arrays.
2018-07-07 14:48:06 +02:00
ahocevar
1da43d90af Allow flat coordinates for Polygon constructor 2018-07-07 14:16:39 +02:00
Andreas Hocevar
9ddd7e4751 Merge pull request #8355 from openlayers/greenkeeper/recast-0.15.2
Update recast to the latest version 🚀
2018-07-06 09:50:30 +02:00
Andreas Hocevar
538315f682 Merge pull request #8354 from openlayers/greenkeeper/webpack-4.15.1
Update webpack to the latest version 🚀
2018-07-06 09:33:56 +02:00
Tim Schaub
b8db6bf087 Merge pull request #8352 from tschaub/false
Set `sideEffects` to `false` instead of `"false"`
2018-07-05 12:51:13 -06:00
greenkeeper[bot]
42228ed87d chore(package): update recast to version 0.15.2 2018-07-05 17:32:58 +00:00
greenkeeper[bot]
707afeab06 chore(package): update webpack to version 4.15.1 2018-07-05 14:36:50 +00:00
Andreas Hocevar
7a7414447f Merge pull request #8348 from openlayers/greenkeeper/webpack-4.15.0
Update webpack to the latest version 🚀
2018-07-05 11:03:03 +02:00
Tim Schaub
fb28071dd1 Use false instead of "false" 2018-07-04 17:01:55 -06:00
Andreas Hocevar
6b39353ccb Merge pull request #8351 from ahocevar/post-release-fix
Fix typo in release notes
2018-07-05 00:19:28 +02:00
ahocevar
6f6e9a2af1 Fix typo in release notes 2018-07-05 00:18:53 +02:00
Andreas Hocevar
bc3e348b0d Merge pull request #8350 from ahocevar/release-v5.0.2
Updates for v5.0.2
2018-07-05 00:05:33 +02:00
ahocevar
59c3eedbab Updates for v5.0.2 2018-07-05 00:04:32 +02:00
Andreas Hocevar
60600d3108 Merge pull request #8349 from ahocevar/release-v5.0.1
Release v5.0.1
2018-07-04 23:57:53 +02:00
Andreas Hocevar
49050063d5 Merge pull request #8343 from tschaub/starter-project
Starter projects
2018-07-04 23:53:48 +02:00
Andreas Hocevar
1b9cad6b8d Merge pull request #8343 from tschaub/starter-project
Starter projects
2018-07-04 23:52:14 +02:00
greenkeeper[bot]
9c16cc4200 chore(package): update webpack to version 4.15.0 2018-07-04 20:45:17 +00:00
Andreas Hocevar
c9b638f5fd Merge pull request #8347 from ahocevar/post-release-notes-fixes
Fix typos in release notes
2018-07-04 22:17:50 +02:00
ahocevar
f3b79c57f7 Fix typos in release notes 2018-07-04 22:17:18 +02:00
Andreas Hocevar
769a14d0dc Merge pull request #8346 from openlayers/release-v5.0.1
Release v5.0.1
2018-07-04 22:07:56 +02:00
ahocevar
11024ad294 Update package version to 5.0.1 2018-07-04 22:02:38 +02:00
ahocevar
73f1428701 Changelog for v5.0.1 2018-07-04 21:52:27 +02:00
Andreas Hocevar
a579b168f7 Merge pull request #8341 from ahocevar/side-effects
Set sideEffects: false flag
2018-07-04 21:46:51 +02:00
Andreas Hocevar
537a21fd48 Merge pull request #8342 from ahocevar/quickstart-links
Fix links and description in quickstart tutorial
2018-07-04 21:46:29 +02:00
Andreas Hocevar
e18d485d01 Merge pull request #8342 from ahocevar/quickstart-links
Fix links and description in quickstart tutorial
2018-07-04 19:20:33 +02:00
Tim Schaub
853fc77f2a Merge pull request #8344 from tschaub/issue-templates
Updated issue and pr templates
2018-07-04 10:43:50 -06:00
Tim Schaub
c678354aec Remove Rollup/Closure gist 2018-07-04 09:05:04 -06:00
Tim Schaub
1f06f7c2ac Updated issue and pr templates 2018-07-04 08:58:29 -06:00
Tim Schaub
9c085e37de Starter project with Parcel 2018-07-04 08:45:39 -06:00
Tim Schaub
a6896ed531 New starter projects 2018-07-04 08:32:15 -06:00
ahocevar
9304ee25af Fix links and description in quickstart tutorial 2018-07-04 14:52:14 +02:00
Andreas Hocevar
f0f21d583a Merge pull request #8338 from openlayers/greenkeeper/recast-0.15.1
Update recast to the latest version 🚀
2018-07-04 13:46:23 +02:00
Andreas Hocevar
54d50af2c3 Merge pull request #8341 from ahocevar/side-effects
Set sideEffects: false flag
2018-07-04 13:44:37 +02:00
ahocevar
9f84494b02 Set sideEffects: false flag 2018-07-04 13:10:20 +02:00
greenkeeper[bot]
e18a23c877 chore(package): update recast to version 0.15.1 2018-07-04 02:57:20 +00:00
Andreas Hocevar
cb78019825 Merge pull request #8332 from openlayers/greenkeeper/webpack-4.14.0
Update webpack to the latest version 🚀
2018-07-02 07:17:08 +02:00
Frédéric Junod
352d77e2ec Merge pull request #8333 from openlayers/cleanup
Fix wrong return type for readHref function
2018-07-01 07:31:56 +02:00
greenkeeper[bot]
a978467726 chore(package): update webpack to version 4.14.0 2018-06-29 13:18:58 +00:00
Frederic Junod
ddeb091871 Fix wrong return type for readHref function 2018-06-29 14:15:07 +02:00
Frédéric Junod
bc60c8ec32 Merge pull request #8329 from fredj/better_typing
Better jsdoc typing
2018-06-29 13:12:09 +02:00
Frederic Junod
6da2e4cef4 More precise Event typing 2018-06-29 12:53:20 +02:00
Andreas Hocevar
001add5a28 Merge pull request #8326 from openlayers/greenkeeper/webpack-4.13.0
Update webpack to the latest version 🚀
2018-06-29 11:05:46 +02:00
Frederic Junod
8c4c70e9f0 Change 'Element' type to 'HTMLElement' 2018-06-29 09:31:59 +02:00
Frederic Junod
0c300d651f Change 'Image' type to 'HTMLImageElement' 2018-06-29 09:31:32 +02:00
greenkeeper[bot]
b072dc5968 chore(package): update webpack to version 4.13.0 2018-06-28 16:39:52 +00:00
Frédéric Junod
52e286b03c Merge pull request #8319 from fredj/cleanup
Remove reference to setProj4 function in documentation
2018-06-27 11:20:15 +02:00
Andreas Hocevar
7dcc720029 Improve readability 2018-06-27 11:15:49 +02:00
Frederic Junod
770407f1ba Remove reference to setProj4 function in documentation
The function was removed in #7598
2018-06-27 10:35:03 +02:00
Andreas Hocevar
53cb47cab9 Merge pull request #8321 from openlayers/greenkeeper/rollup-0.62.0
Update rollup to the latest version 🚀
2018-06-27 10:26:02 +02:00
greenkeeper[bot]
5ba08b7291 chore(package): update rollup to version 0.62.0 2018-06-27 08:11:02 +00:00
Andreas Hocevar
43e67b73c2 Merge pull request #8318 from openlayers/greenkeeper/webpack-4.12.2
Update webpack to the latest version 🚀
2018-06-27 09:39:54 +02:00
greenkeeper[bot]
4ed9f27cd1 chore(package): update webpack to version 4.12.2 2018-06-27 06:41:38 +00:00
Andreas Hocevar
bde6caf082 Merge pull request #8317 from openlayers/release-v5.0.0
Release v5.0.0
2018-06-26 22:08:29 +02:00
Tim Schaub
062b743f89 Collapsible details 2018-06-26 13:47:28 -06:00
Tim Schaub
79b959da66 Update version 2018-06-26 13:39:03 -06:00
Tim Schaub
234b05a48a Changelog wording 2018-06-26 13:27:27 -06:00
Tim Schaub
1627e1fe79 Update package versions 2018-06-26 13:21:36 -06:00
Tim Schaub
37bb4ea056 Changelog for v5.0.0 2018-06-26 13:19:12 -06:00
Andreas Hocevar
fd44f0d4cb Merge pull request #8315 from openlayers/greenkeeper/eslint-5.0.1
Update eslint to the latest version 🚀
2018-06-26 11:36:36 +02:00
greenkeeper[bot]
0994712602 chore(package): update eslint to version 5.0.1 2018-06-26 08:47:12 +00:00
Tim Schaub
2d5bc174dd Merge pull request #8314 from tschaub/hit-tolerance
Accept hitTolerance in map.forEachLayerAtPixel()
2018-06-25 10:41:43 -06:00
simonseyock
a4f29890f7 Upgrade notes about map.forEachLayerAtPixel() 2018-06-25 09:09:15 -06:00
simonseyock
fcc7d87b06 Support hitTolerance in forEachLayerAtPixel 2018-06-25 09:09:02 -06:00
Tim Schaub
3b64641e5a Merge pull request #7750 from schmidtk/canvas-polygon-replay
Don't assume fill for canvas polygon hit detection.
2018-06-25 08:36:30 -06:00
Tim Schaub
dfe3b8ac3d Merge pull request #8309 from openlayers/greenkeeper/eslint-5.0.0
Update eslint to the latest version 🚀
2018-06-24 10:58:24 -06:00
Tim Schaub
81f864bb4c Add doc for return 2018-06-24 10:08:16 -06:00
greenkeeper[bot]
6f481e0b6a chore(package): update eslint to version 5.0.0 2018-06-24 09:45:04 -06:00
Tim Schaub
2c6b3f3ae6 Merge pull request #8311 from openlayers/greenkeeper/webpack-4.12.1
Update webpack to the latest version 🚀
2018-06-24 09:44:03 -06:00
Tim Schaub
5c5dd8852c Merge pull request #8310 from openlayers/greenkeeper/rollup-0.61.2
Update rollup to the latest version 🚀
2018-06-24 09:41:23 -06:00
greenkeeper[bot]
c13d6cf7bb chore(package): update webpack to version 4.12.1 2018-06-24 09:48:04 +00:00
greenkeeper[bot]
8ab81942d2 chore(package): update rollup to version 0.61.2 2018-06-23 15:09:16 +00:00
Andreas Hocevar
c81ee8b92e Merge pull request #8305 from ahocevar/v5-tutorial
Update quickstart and tutorials for v5
2018-06-22 18:38:27 +02:00
ahocevar
eef39d3d1d Update quickstart and tutorials for v5 2018-06-22 17:27:50 +02:00
Andreas Hocevar
5b105c5601 Merge pull request #8301 from ahocevar/imagemode-shortcut
Do not render vectors in image mode
2018-06-22 14:19:24 +02:00
Andreas Hocevar
d85b7ffed7 Merge pull request #8302 from ahocevar/ignore-ol-nodemodules
Ignore node_modules everywhere
2018-06-22 14:18:19 +02:00
Andreas Hocevar
75bd4ed391 Merge pull request #8297 from openlayers/greenkeeper/rollup-0.61.1
Update rollup to the latest version 🚀
2018-06-22 13:52:02 +02:00
ahocevar
cd35c6731f Ignore node_modules everywhere
This allows users to use npm link directly from src/ol, without risiking
to commit the src/ol/node_modules directory.
2018-06-22 13:43:50 +02:00
ahocevar
130c0eb436 Do not render vectors in image mode 2018-06-22 13:40:53 +02:00
Andreas Hocevar
93eca62cf2 Merge pull request #8299 from ahocevar/ol-named-exports
Make classes in ol/ available as named exports from ol
2018-06-22 13:09:12 +02:00
ahocevar
785bef7640 Also re-export non-API classes 2018-06-21 18:29:20 +02:00
ahocevar
28409486a5 Make classes in ol/ available as named exports from ol 2018-06-21 18:08:17 +02:00
Andreas Hocevar
cc3dc1d681 Merge pull request #8298 from ahocevar/ol-readme
Add README for ol package
2018-06-21 14:59:04 +02:00
ahocevar
2e863b095e Add README for ol package
The links in the readme should be updated at some point.
2018-06-21 14:50:07 +02:00
greenkeeper[bot]
7ba58e011c chore(package): update rollup to version 0.61.1 2018-06-21 12:23:38 +00:00
Andreas Hocevar
15d116b3c1 Merge pull request #8295 from ahocevar/build-5
Prepare for building/publishing v5
2018-06-21 13:59:19 +02:00
Frédéric Junod
9034f721b5 Merge pull request #8296 from fredj/cleanup
Fix style documentation
2018-06-21 13:50:01 +02:00
Frederic Junod
3f55c0a985 Remove extra property in Vector and VectorTile typedef 2018-06-21 11:39:39 +02:00
Frederic Junod
bb3bd7380f Fix style documentation 2018-06-21 11:32:58 +02:00
ahocevar
dc514d14e9 Serve examples with webpack-dev-server 2018-06-21 11:19:18 +02:00
ahocevar
5582914ffa Add set-version task to set version from package.json 2018-06-21 11:18:52 +02:00
ahocevar
6cddd2d44a Add ol package.json 2018-06-21 11:17:26 +02:00
ahocevar
57110058fd Move css to src/ol 2018-06-21 11:16:57 +02:00
Andreas Hocevar
d74c8813e1 Merge pull request #8294 from ahocevar/no-typecheck
Remove non-functional type checks from testing
2018-06-21 08:20:30 +02:00
Frédéric Junod
0a8fa8f0ed Merge pull request #8292 from fredj/cleanup
Remove now unneeded single quotes in examples
2018-06-21 08:19:53 +02:00
Frédéric Junod
2af63ad0fa Merge pull request #8291 from fredj/graticule_cleanup
Graticule code cleanup
2018-06-21 08:19:29 +02:00
ahocevar
2de37be014 Remove non-functional type checks from testing 2018-06-21 07:55:10 +02:00
Andreas Hocevar
67f06deeff Merge pull request #8293 from openlayers/greenkeeper/rollup-0.61.0
Update rollup to the latest version 🚀
2018-06-21 07:50:05 +02:00
greenkeeper[bot]
b1c300629d chore(package): update rollup to version 0.61.0 2018-06-20 20:05:58 +00:00
Frederic Junod
a8fa6e53ff Remove now unneeded single quotes in examples 2018-06-20 17:11:59 +02:00
Frederic Junod
e91fde00c9 Better variables scoping 2018-06-20 15:51:11 +02:00
Frederic Junod
40236fbd8b Remove local variables in ol/Graticule 2018-06-20 15:51:07 +02:00
Frédéric Junod
ff34bb75cd Merge pull request #8287 from fredj/rename_TileUTFGrid
Rename ol/source/TileUTFGrid to ol/source/UTFGrid
2018-06-19 15:36:06 +02:00
Frédéric Junod
ea7536ea67 Merge pull request #8286 from fredj/f_4872
Fix class name property in Overlay documentation
2018-06-19 14:02:47 +02:00
Frederic Junod
f257a8938f Rename ol/source/TileUTFGrid to ol/source/UTFGrid 2018-06-19 14:02:15 +02:00
Frederic Junod
26b47b7e3c Fix class name property in Overlay documentation
Fixes #4872
2018-06-19 08:55:09 +02:00
Frédéric Junod
dbaf3d25fe Merge pull request #8285 from openlayers/greenkeeper/google-closure-compiler-20180610.0.2
Update google-closure-compiler to the latest version 🚀
2018-06-19 08:32:03 +02:00
greenkeeper[bot]
d53e518df0 chore(package): update google-closure-compiler to version 20180610.0.2 2018-06-18 21:35:07 +00:00
Tim Schaub
64282a3531 Merge pull request #8281 from gberaudo/rename_default_data_projection
Rename default data projection
2018-06-18 12:50:17 -07:00
Frédéric Junod
bf213f613c Merge pull request #8283 from fredj/rm_custom-builds_ref
Remove references to tutorials/custom-builds.html
2018-06-18 15:19:05 +02:00
Frederic Junod
39037caaf2 Remove references to tutorials/custom-builds.html 2018-06-18 15:04:06 +02:00
Guillaume Beraudo
e131fe3728 Update upgrade notes 2018-06-18 14:08:56 +02:00
ThomasG77
cbaa9a7567 Rename defaultDataProjection to dataProjection #8152 2018-06-18 14:08:50 +02:00
Frédéric Junod
6c538c12f6 Merge pull request #8280 from fredj/cleanup
Add missing property in VectorTile options, remove params from createRenderer
2018-06-18 13:41:02 +02:00
Andreas Hocevar
17bfc71048 Merge pull request #8277 from ahocevar/fix-tilesource-docs
Fix code block in comment
2018-06-18 12:38:53 +02:00
Frederic Junod
1c897c33ea Remove extra parameters passed to createRenderer 2018-06-18 11:45:09 +02:00
Frederic Junod
eb902974f3 Add missing properties in option typedef 2018-06-18 11:44:57 +02:00
ahocevar
4127c26ecc Fix code block in comment 2018-06-18 11:19:15 +02:00
Andreas Hocevar
6903c1a88a Merge pull request #8273 from ahocevar/rm-externs
Remove the externs/ directory
2018-06-16 00:30:08 +02:00
Andreas Hocevar
8458be2bba Merge pull request #8275 from openlayers/greenkeeper/serve-9.0.0
Update serve to the latest version 🚀
2018-06-15 21:29:26 +02:00
greenkeeper[bot]
0d5eb14529 chore(package): update serve to version 9.0.0 2018-06-15 19:18:06 +00:00
ahocevar
a7c6df4d80 Remove the externs/ directory 2018-06-15 19:43:10 +02:00
Andreas Hocevar
25c3b55d8e Merge pull request #8271 from openlayers/greenkeeper/google-closure-compiler-20180610.0.1
chore(package): update google-closure-compiler to version 20180610.0.1
2018-06-14 16:39:03 +02:00
greenkeeper[bot]
7934f66c0b chore(package): update google-closure-compiler to version 20180610.0.1
Closes #8268
2018-06-14 13:44:04 +00:00
Andreas Hocevar
8980ab7b11 Merge pull request #8246 from ahocevar/movetolerance-dragging
Don't go back to not moving when dragging
2018-06-14 13:28:48 +02:00
Andreas Hocevar
9de086b561 Merge pull request #8270 from openlayers/greenkeeper/rollup-0.60.7
chore(package): update rollup to version 0.60.7
2018-06-14 13:22:57 +02:00
greenkeeper[bot]
5772504e3e chore(package): update rollup to version 0.60.7
Closes #8269
2018-06-14 07:17:50 +00:00
Tim Schaub
7c7cca4702 Merge pull request #8266 from openlayers/greenkeeper/rollup-0.60.4
chore(package): update rollup to version 0.60.4
2018-06-13 17:13:12 -06:00
greenkeeper[bot]
bbd12cf897 chore(package): update rollup to version 0.60.4
Closes #8264
2018-06-13 07:39:03 +00:00
Andreas Hocevar
affc59e2c5 Merge pull request #8261 from openlayers/greenkeeper/rollup-0.60.2
Update rollup to the latest version 🚀
2018-06-11 14:00:46 +02:00
greenkeeper[bot]
a67ca1f46c chore(package): update rollup to version 0.60.2 2018-06-11 09:51:32 +00:00
Andreas Hocevar
653e273214 Merge pull request #8260 from openlayers/greenkeeper/sinon-6.0.0
Update sinon to the latest version 🚀
2018-06-11 11:02:39 +02:00
greenkeeper[bot]
2c893d19a4 chore(package): update sinon to version 6.0.0 2018-06-11 07:23:59 +00:00
Andreas Hocevar
288ac0acdd Merge pull request #8258 from ahocevar/webpack-4
Use Webpack 4 for tests (and examples)
2018-06-08 14:56:52 +02:00
ahocevar
b2fef55ae9 Move uglifyjs-webpack-plugin to devDependencies 2018-06-08 13:55:42 +02:00
ahocevar
da755d9e84 Make tests (and sourcemap) work with webpack4 2018-06-08 13:00:10 +02:00
ahocevar
2837272590 Make webpack4 module structure work 2018-06-08 12:58:16 +02:00
ahocevar
649b7be4c2 Make common chunk (and sourcemap) work 2018-06-08 12:57:38 +02:00
ahocevar
f8abb5def1 Update dependencies 2018-06-08 12:56:32 +02:00
Tim Schaub
48cbca1f6e Upgrade to Webpack 4 2018-06-07 11:24:39 +02:00
Andreas Hocevar
79a5bd6538 Merge pull request #8252 from openlayers/greenkeeper/rollup-0.60.1
Update rollup to the latest version 🚀
2018-06-07 10:48:02 +02:00
greenkeeper[bot]
a3a092624e chore(package): update rollup to version 0.60.1 2018-06-07 06:23:01 +00:00
Frédéric Junod
7f71137147 Merge pull request #8250 from fredj/cleanup
Fix various jsdoc types
2018-06-06 16:47:14 +02:00
Andreas Hocevar
3683e1ef6e Merge pull request #8248 from openlayers/greenkeeper/serve-8.0.0
Update serve to the latest version 🚀
2018-06-06 16:15:56 +02:00
Frederic Junod
6444e6989d Add missing properties in option typedef 2018-06-06 16:14:22 +02:00
Frederic Junod
abc9d14dca Convert projection like to Projection in transform function 2018-06-06 16:14:22 +02:00
Frederic Junod
972781ea9d Better array typing 2018-06-06 16:14:22 +02:00
Frederic Junod
104a9a56e9 Simplify opt param test for undefined value
To make the closure compiler happy
2018-06-06 16:14:22 +02:00
greenkeeper[bot]
52a76ded63 chore(package): update serve to version 8.0.0 2018-06-06 10:37:52 +00:00
Andreas Hocevar
a2070362f9 Merge pull request #8247 from openlayers/greenkeeper/rollup-0.60.0
Update rollup to the latest version 🚀
2018-06-06 09:56:37 +02:00
greenkeeper[bot]
9b8883a871 chore(package): update rollup to version 0.60.0 2018-06-06 06:12:52 +00:00
ahocevar
5080a6d401 Don't go back to not moving when dragging 2018-06-05 21:09:38 +02:00
Andreas Hocevar
448a33eb4b Merge pull request #8245 from ahocevar/fix-vectortile-docs
Fix vector tile docs and types
2018-06-05 17:03:40 +02:00
ahocevar
08e0a0dfea Fix vector tile docs and types 2018-06-05 16:38:15 +02:00
Andreas Hocevar
7e2814d110 Merge pull request #8241 from openlayers/greenkeeper/recast-0.15.0
Update recast to the latest version 🚀
2018-06-04 08:47:15 +02:00
greenkeeper[bot]
c21d39840c chore(package): update recast to version 0.15.0 2018-06-02 04:22:24 +00:00
Andreas Hocevar
94b7641f90 Merge pull request #8233 from ahocevar/rollup
Use rollup instead of webpack for the full build
2018-05-30 18:21:16 +02:00
Andreas Hocevar
95b38a1744 Merge pull request #8231 from bjornharrtell/fix-jsts2
Fix JSTS usage with OL classes injected
2018-05-30 14:00:54 +02:00
ahocevar
04e825e49a Use rollup instead of webpack for the full build 2018-05-29 15:24:51 +02:00
Tim Schaub
ab72edd698 Merge pull request #8230 from openlayers/greenkeeper/serve-7.0.0
Update serve to the latest version 🚀
2018-05-28 21:43:17 -06:00
Andreas Hocevar
25034ffd95 Merge pull request #8229 from ahocevar/raster-from-vectorlayer
Support layers instead of renderers for ol/source/Raster
2018-05-28 22:15:02 +02:00
Björn Harrtell
6e27a89fef Fix and simplify import/inject 2018-05-28 21:09:27 +02:00
Björn Harrtell
8369da365f Fix JSTS usage with OL classes injected 2018-05-28 21:09:21 +02:00
greenkeeper[bot]
f02d0afdcf chore(package): update serve to version 7.0.0 2018-05-28 17:11:33 +00:00
ahocevar
f5399de58d Improve API docs 2018-05-28 10:39:29 +02:00
ahocevar
93287cb9fe Remove redundant check 2018-05-28 10:37:22 +02:00
ahocevar
81c0c80a2b Support tile, image and vector layers 2018-05-28 10:28:27 +02:00
ahocevar
137c875df7 Support vector layers instead of renderers for ol/source/Raster 2018-05-28 10:23:47 +02:00
Andreas Hocevar
97dedc7d07 Merge pull request #8227 from ahocevar/better-vectortile-experience
Better vectortile experience
2018-05-28 09:49:26 +02:00
ahocevar
8e42f0601a Add a note about the disabled transition option 2018-05-27 13:48:48 +02:00
ahocevar
da570c3a74 Update tests 2018-05-27 13:48:48 +02:00
Andreas Hocevar
a59dd8ea65 Merge pull request #8225 from ahocevar/image-vector-fixes
renderMode: 'image' fixes for ol/layer/Vector
2018-05-25 14:46:53 +02:00
Andreas Hocevar
eca6918471 Merge pull request #8226 from ahocevar/rastersource-renderer
Accept renderers as sources for the Raster source
2018-05-25 14:45:42 +02:00
ahocevar
3e07eef17e Remove extra param annotation 2018-05-25 12:27:21 +02:00
ahocevar
f53a1e7507 Accept renderers as sources for the raster source 2018-05-25 12:18:02 +02:00
ahocevar
c7207c5a07 Allow using the image renderer vor vector layers 2018-05-25 12:18:02 +02:00
ahocevar
e666b7cdeb Do not clip the image for vector layers 2018-05-25 10:40:20 +02:00
ahocevar
c2c9cdc9ea Update documentation for renderMode: image 2018-05-25 09:47:42 +02:00
ahocevar
4f471c786f Fix prepare/compose sequence to support icon loading 2018-05-25 09:46:44 +02:00
ahocevar
d867ae1f0e Avoid duplicate precompose and postcompose events 2018-05-25 09:45:09 +02:00
ahocevar
c24976155b Prepare tiles for rendering earlier
By overriding getTile() and creating replay and image there, we can do
all preparations earlier and stop creating new tiles when we have maxed
out the frame time budget. It also allows us to get rid of the
drawTileImage override.
2018-05-24 15:56:26 +02:00
ahocevar
690efda169 Stop preparing new tiles when out of frame time budget 2018-05-24 15:55:36 +02:00
ahocevar
d60987b33c Move getTile logic to a dedicated method 2018-05-24 15:49:00 +02:00
ahocevar
710cefc8dc Create interim tiles for vector image tiles 2018-05-24 15:42:30 +02:00
ahocevar
dcdfc22b95 For performance, remove transition for vector tiles 2018-05-24 15:39:33 +02:00
ahocevar
64ad81cffa Use calculated extent 2018-05-23 16:23:37 +02:00
Andreas Hocevar
7149b6ddab Merge pull request #8210 from ahocevar/stable-pattern-offset
Align patterns and gradients to a grid
2018-05-22 17:30:59 +02:00
ahocevar
976bb6b23c Indicate required fill alignment with boolean 2018-05-22 16:30:42 +02:00
ahocevar
7cfa65b8c3 Align patterns and gradients to a grid 2018-05-22 16:05:32 +02:00
Tim Schaub
c32bd2274c Merge pull request #8208 from openlayers/greenkeeper/marked-0.4.0
Update marked to the latest version 🚀
2018-05-21 13:44:08 -06:00
greenkeeper[bot]
791115b826 chore(package): update marked to version 0.4.0 2018-05-21 14:04:05 +00:00
Andreas Hocevar
27313bf65a Merge pull request #8205 from openlayers/greenkeeper/mocha-5.2.0
Update mocha to the latest version 🚀
2018-05-21 04:54:15 -05:00
Andreas Hocevar
8eafdf1884 Merge pull request #8201 from ahocevar/no-babelrc
Remove babelrc, transform using babel-core
2018-05-21 03:52:00 -05:00
ahocevar
614b8cd7be Add babel-core as explicit dev dependency 2018-05-21 10:36:47 +02:00
greenkeeper[bot]
8717f10e60 chore(package): update mocha to version 5.2.0 2018-05-19 02:22:04 +00:00
Andreas Hocevar
9d5983ee68 Merge pull request #8203 from ahocevar/typechecking-complete
Type checking complete
2018-05-18 08:24:01 -05:00
Andreas Hocevar
2949e8d594 Merge pull request #8204 from ahocevar/control-defaults
Document ol/control~defaults in the right place
2018-05-18 08:23:39 -05:00
ahocevar
83e00269b7 Document ol/control~defaults in the right place 2018-05-17 18:19:14 -05:00
ahocevar
ee395c325c Change typecheck warnings to errors 2018-05-17 12:30:01 -05:00
ahocevar
64e1139230 Fix remaining type issues 2018-05-17 12:29:22 -05:00
ahocevar
8b8d94c78a Remove babelrc, transform using babel-core 2018-05-17 11:40:48 -05:00
Frédéric Junod
848de0ab64 Merge pull request #8200 from fredj/f_8199
Set textAlign to the canvas context
2018-05-17 14:57:48 +02:00
Frederic Junod
b34cdb58e3 Set textAlign to the canvas context 2018-05-17 13:15:04 +02:00
Frédéric Junod
8271a51f65 Merge pull request #8194 from fredj/cleanup
miscellaneous code cleanup
2018-05-16 08:31:27 +02:00
Andreas Hocevar
39ce30f09a Merge pull request #8189 from ahocevar/more-apidoc-fixes
More apidoc fixes
2018-05-14 23:11:39 -05:00
Frederic Junod
90ce02941a Better code indentation 2018-05-14 14:58:36 +02:00
Frederic Junod
9f3b103bbf Better variables scoping 2018-05-14 14:49:09 +02:00
Frederic Junod
7f0043694d Remove NOCOMPILE from examples 2018-05-14 14:42:57 +02:00
Andreas Hocevar
ab5efa37b1 Merge pull request #8191 from ahocevar/fix-text-stroke
Do not scale text outline width
2018-05-14 07:29:16 -05:00
ahocevar
26b84f09bd Do not scale text outline width 2018-05-13 18:04:53 -05:00
Kevin Schmidt
791f8b9917 Don't assume fill for canvas polygon hit detection.
This brings canvas polygon hit detection in parity with WebGL, where an
unfilled polygon will not be hit detected hovering inside the polygon.

Fixes #4846
2018-02-27 13:12:46 -07:00
460 changed files with 46497 additions and 49912 deletions

View File

@@ -1,9 +0,0 @@
{
"plugins": ["jsdoc-closure"],
"parserOpts": {
"parser": "recast"
},
"generatorOpts": {
"generator": "recast"
}
}

View File

@@ -1,8 +1,9 @@
<!--
Thank you for your interest in making OpenLayers better!
To keep this project manageable for maintainers, we ask you to please check all boxes below before submitting an issue.
If you are reporting a bug, please link to an example that reproduces the problem. This will make it easier for people who may want to help you debug.
- [ ] I am submitting a bug or feature request, not a usage question. Go to https://stackoverflow.com/questions/tagged/openlayers for questions.
- [ ] I have searched GitHub to see if a similar bug or feature request has already been reported.
- [ ] I have verified that the issue is present in the latest version of OpenLayers (see 'LATEST' on https://openlayers.org/).
- [ ] If reporting a bug, I have created a [CodePen](https://codepen.io) or prepared a stack trace (using the latest version and unminified code, so e.g. `ol-debug.js`, not `ol.js`) that shows the issue.
If you have a usage question, you might want to try Stack Overflow first: https://stackoverflow.com/questions/tagged/openlayers
Thanks
-->

View File

@@ -1,8 +1,13 @@
<!--
Thank you for your interest in making OpenLayers better!
In order to get your proposed changes merged into the master branch, we ask you to please make sure the following boxes are checked *before* submitting your pull request.
Before submitting a pull request, it is best to open an issue describing the bug you are fixing or the feature you are proposing to add.
- [ ] This pull request addresses an issue that has been marked with the 'Pull request accepted' label & I have added the link to that issue.
- [ ] It contains one or more small, incremental, logically separate commits, with no merge commits.
- [ ] I have used clear commit messages.
- [ ] Existing tests pass for me locally & I have added or updated tests for new or changed functionality.
Here are some other tips that make pull requests easier to review:
* Commits in the branch are small and logically separated (with no unnecessary merge commits).
* Commit messages are clear.
* Existing tests pass, new functionality is covered by new tests, and fixes have regression tests.
Thanks
-->

3
.gitignore vendored
View File

@@ -1,5 +1,4 @@
/build/
/coverage/
/dist/
/node_modules/
src/index.js
node_modules/

View File

@@ -30,7 +30,7 @@ To run the examples you first need to start the dev server:
$ npm run serve-examples
Then, load <http://localhost:5000/> in your browser.
Then, load <http://localhost:8080/> in your browser.
## Running tests

View File

@@ -1,23 +1,45 @@
# OpenLayers
[![Travis CI Status](https://secure.travis-ci.org/openlayers/openlayers.svg)](http://travis-ci.org/#!/openlayers/openlayers)
[![Greenkeeper badge](https://badges.greenkeeper.io/openlayers/openlayers.svg)](https://greenkeeper.io/)
[![Coverage Status](https://coveralls.io/repos/github/openlayers/openlayers/badge.svg?branch=master)](https://coveralls.io/github/openlayers/openlayers?branch=master)
[![OSGeo Project](https://img.shields.io/badge/OSGeo-Project-brightgreen.svg)](http://osgeo.org/)
[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/openlayers/badge?style=rounded)](https://www.jsdelivr.com/package/npm/openlayers)
[OpenLayers](https://openlayers.org/) is a high-performance, feature-packed library for creating interactive maps on the web. It can display map tiles, vector data and markers loaded from any source on any web page. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).
## Getting Started
Use one of the following methods to use OpenLayers in your project:
Install the [`ol` package](https://www.npmjs.com/package/ol):
* For use with webpack, Rollup, Browserify, or other module bundlers, install the [`ol` package](https://www.npmjs.com/package/ol):
```
npm install ol
```
```
npm install ol
```
* If you just want to add a `<script>` tag to test things out, you can link directly to one of the full builds from [cdnjs](https://cdnjs.com/libraries/openlayers) (not recommended for production)
Import just what you need for your application:
```js
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
new Map({
target: 'map',
layers: [
new TileLayer({
source: new XYZ({
url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
})
})
],
view: new View({
center: [0, 0],
zoom: 2
})
});
```
See the following examples for more detail on bundling OpenLayers with your application:
* Using [Rollup](https://github.com/openlayers/ol-rollup)
* Using [Webpack](https://github.com/openlayers/ol-webpack)
* Using [Parcel](https://github.com/openlayers/ol-parcel)
* Using [Browserify](https://github.com/openlayers/ol-browserify)
## Supported Browsers
@@ -39,3 +61,5 @@ Please see our guide on [contributing](CONTRIBUTING.md) if you're interested in
- Need help? Find it on [Stack Overflow using the tag 'openlayers'](http://stackoverflow.com/questions/tagged/openlayers)
- Follow [@openlayers](https://twitter.com/openlayers) on Twitter
[![Build Status](https://travis-ci.org/openlayers/openlayers.svg?branch=master)](https://travis-ci.org/openlayers/openlayers)

View File

@@ -1,6 +1,40 @@
## Upgrade notes
### Next release
### Next version
### v5.2.0
#### Removal of the `snapToPixel` option for `ol/style/Image` subclasses
The `snapToPixel` option has been removed, and the `getSnapToPixel` and `setSnapToPixel` methods are deprecated.
The renderer now snaps to integer pixels when no interaction or animation is running to get crisp rendering. During interaction or animation, it does not snap to integer pixels to avoid jitter.
When rendering with the Immediate API, symbols will no longer be snapped to integer pixels. To get crisp images, set `context.imageSmoothingEnabled = false` before rendering with the Immediate API, and `context.imageSmoothingEnabled = true` afterwards.
### v5.1.0
#### Geometry constructor and `setCoordinates` no longer accept `null` coordinates
Geometries (`ol/geom/*`) now need to be constructed with valid coordinates (center for `ol/geom/Circle`) as first constructor argument. The same applies to the `setCoordinates()` (`setCenter() for `ol/geom/Circle`) method.
### v5.0.0
#### Renamed `ol/source/TileUTFGrid` to `ol/source/UTFGrid`
The module name is now `ol/source/UTFGrid` (`ol.source.UTFGrid` in the full build).
#### Renaming of the `defaultDataProjection` in the options and property of the `ol/format/Feature` class and its subclasses
The `defaultDataProjection` option is now named `dataProjection`. The protected property available on the class is also renamed.
#### `transition` option of `ol/source/VectorTile` is ignored
The `transition` option to get an opacity transition to fade in tiles has been disabled for `ol/source/VectorTile`. Vector tiles are now always rendered without an opacity transition.
#### `ol/style/Fill` with `CanvasGradient` or `CanvasPattern`
The origin for gradients and patterns has changed from the top-left corner of the extent of the geometry being filled to 512 css pixel increments from map coordinate `[0, 0]`. This allows repeat patterns to be aligned properly with vector tiles. For seamless repeat patterns, width and height of the pattern image must be a factor of two (2, 4, 8, ..., 512).
#### Removal of the renderer option for maps
@@ -143,14 +177,37 @@ var poly = circularPolygon(center, radius);
#### Removal of optional this arguments.
The following methods did get the optional this (i.e. opt_this) arguments removed. Please use closures, the es6 arrow function or the bind method to achieve this effect (Bind is explained here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
The optional this (i.e. opt_this) arguments were removed from the following methods. Please use closures, the es6 arrow function or the bind method to achieve this effect (Bind is explained here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
* Collection#forEach
* geom/LineString#forEachSegment
* Observable#on, #once, #un
* Map#forEachLayerAtPixel
* source/TileUTFGrid#forDataAtCoordinateAndResolution
* source/Vector#forEachFeature, #forEachFeatureInExtent, #forEachFeatureIntersectingExtent
#### `Map#forEachLayerAtPixel` parameters have changed
If you are using the layer filter, please note that you now have to pass in the layer filter via an `AtPixelOptions` object. If you are not using the layer filter the usage has not changed.
Old syntax:
```
map.forEachLayerAtPixel(pixel, callback, callbackThis, layerFilterFn, layerFilterThis);
```
New syntax:
```
map.forEachLayerAtPixel(pixel, callback, {
layerFilter: layerFilterFn
});
```
To bind a function to a this, please use the bind method of the function (See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
This change is due to the introduction of the `hitTolerance` parameter which can be passed in via this `AtPixelOptions` object, too.
### v4.6.0
#### Renamed `exceedLength` option of `ol.style.Text` to `overflow`

667
changelog/v5.0.0.md Normal file
View File

@@ -0,0 +1,667 @@
# v5.0.0
The main theme of the v5.0.0 release is an improved developer/user experience with OpenLayers. Toward this end, we have reworked the library as a set of ES Modules, completely removing any dependency on the Closure Compiler, and improving compatibility with mainstream module bundlers.
See the [hosted examples](https://openlayers.org/en/latest/examples/), [API docs](https://openlayers.org/en/latest/apidoc/), and [bundle tutorial](https://openlayers.org/en/latest/doc/tutorials/bundle.html) for the new syntax, but basic usage looks like this:
```js
import 'ol/ol.css';
import {Map, View} from 'ol';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
const map = new Map({
target: 'map',
layers: [
new TileLayer({
source: new OSM()
})
],
view: new View({
center: [0, 0],
zoom: 0
})
});
```
See below for specific notes on upgrading from 4.x releases. We'll be working on updating the website with improved documentation and examples. Take a look at the issue tracker if you're interested in contributing.
### Upgrade Notes
#### Renamed `ol/source/TileUTFGrid` to `ol/source/UTFGrid`
The module name is now `ol/source/UTFGrid` (`ol.source.UTFGrid` in the full build).
#### Renaming of the `defaultDataProjection` in the options and property of the `ol/format/Feature` class and its subclasses
The `defaultDataProjection` option is now named `dataProjection`. The protected property available on the class is also renamed.
#### `transition` option of `ol/source/VectorTile` is ignored
The `transition` option to get an opacity transition to fade in tiles has been disabled for `ol/source/VectorTile`. Vector tiles are now always rendered without an opacity transition.
#### `ol/style/Fill` with `CanvasGradient` or `CanvasPattern`
The origin for gradients and patterns has changed from the top-left corner of the extent of the geometry being filled to 512 css pixel increments from map coordinate `[0, 0]`. This allows repeat patterns to be aligned properly with vector tiles. For seamless repeat patterns, width and height of the pattern image must be a factor of two (2, 4, 8, ..., 512).
#### Removal of the renderer option for maps
The `renderer` option has been removed from the `Map` constructor. The purpose of this change is to avoid bundling code in your application that you do not need. Previously, code for both the Canvas and WebGL renderers was included in all applications - even though most people only use one renderer. The `Map` constructor now gives you a Canvas (2D) based renderer. If you want to try the WebGL renderer, you can import the constructor from `ol/WebGLMap`.
Old code:
```js
import Map from 'ol/Map';
const canvasMap = new Map({
renderer: ['canvas']
// other options...
});
const webglMap = new Map({
renderer: ['webgl']
// other options...
});
```
New code:
```js
import Map from 'ol/Map';
import WebGLMap from 'ol/WebGLMap';
const canvasMap = new Map({
// options...
});
const webglMap = new WebGLMap({
// options...
});
```
#### Removal of ol.FeatureStyleFunction
The signature of the vector style function passed to the feature has changed. The function now always takes the `feature` and the `resolution` as arguments, the `feature` is no longer bound to `this`.
Old code:
```js
feature.setStyle(function(resolution) {
var text = this.get('name');
...
});
```
New code:
```js
feature.setStyle(function(feature, resolution) {
var text = feature.get('name');
...
});
```
#### Changed behavior of the `Draw` interaction
For better drawing experience, two changes were made to the behavior of the Draw interaction:
1. On long press, the current vertex can be dragged to its desired position.
2. On touch move (e.g. when panning the map on a mobile device), no draw cursor is shown, and the geometry being drawn is not updated. But because of 1., the draw cursor will appear on long press. Mouse moves are not affected by this change.
#### Changes in proj4 integration
Because relying on a globally available proj4 is not practical with ES modules, we have made a change to the way we integrate proj4:
* The `setProj4()` function from the `ol/proj` module was removed.
* A new `ol/proj/proj4` module with a `register()` function was added. Regardless of whether the application imports `proj4` or uses a global `proj4`, this function needs to be called with the proj4 instance as argument whenever projection definitions were added to proj4's registry with (`proj4.defs`).
It is also recommended to no longer use a global `proj4`. Instead,
npm install proj4
and import it:
```js
import proj4 from 'proj4';
```
Applications can be updated by importing the `register` function from the `ol/proj/proj4` module
```js
import {register} from 'ol/proj/proj4'
```
and calling it before using projections, and any time the proj4 registry was changed by `proj4.defs()` calls:
```js
register(proj4);
```
#### Removal of logos
The map and sources no longer accept a `logo` option. Instead, if you wish to append a logo to your map, add the desired markup directly in your HTML. In addition, you can use the `attributions` property of a source to display arbitrary markup per-source with the attribution control.
#### Replacement of `ol/Sphere` constructor with `ol/sphere` functions
The `ol/Sphere` constructor has been removed. If you were using the `getGeodesicArea` method, use the `getArea` function instead. If you were using the `haversineDistance` method, use the `getDistance` function instead.
Examples before:
```js
// using ol@4
import Sphere from 'ol/sphere';
var sphere = new Sphere(Sphere.DEFAULT_RADIUS);
var area = sphere.getGeodesicArea(polygon);
var distance = sphere.haversineDistance(g1, g2);
```
Examples after:
```js
// using ol@5
import {circular as circularPolygon} from 'ol/geom/Polygon';
import {getArea, getDistance} from 'ol/sphere';
var area = getArea(polygon);
var distance = getDistance(g1, g2);
var circle = circularPolygon(center, radius);
```
#### New signature for the `circular` function for creating polygons
The `circular` function exported from `ol/geom/Polygon` no longer requires a `Sphere` as the first argument.
Example before:
```js
// using ol@4
import Polygon from 'ol/geom/polygon';
import Sphere from 'ol/sphere';
var poly = Polygon.circular(new Sphere(Sphere.DEFAULT_RADIUS), center, radius);
```
Example after:
```js
// using ol@5
import {circular as circularPolygon} from 'ol/geom/Polygon';
var poly = circularPolygon(center, radius);
```
#### Removal of optional this arguments.
The optional this (i.e. opt_this) arguments were removed from the following methods. Please use closures, the es6 arrow function or the bind method to achieve this effect (Bind is explained here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
* Collection#forEach
* geom/LineString#forEachSegment
* Observable#on, #once, #un
* Map#forEachLayerAtPixel
* source/TileUTFGrid#forDataAtCoordinateAndResolution
* source/Vector#forEachFeature, #forEachFeatureInExtent, #forEachFeatureIntersectingExtent
#### `Map#forEachLayerAtPixel` parameters have changed
If you are using the layer filter, please note that you now have to pass in the layer filter via an `AtPixelOptions` object. If you are not using the layer filter the usage has not changed.
Old syntax:
```
map.forEachLayerAtPixel(pixel, callback, callbackThis, layerFilterFn, layerFilterThis);
```
New syntax:
```
map.forEachLayerAtPixel(pixel, callback, {
layerFilter: layerFilterFn
});
```
To bind a function to a this, please use the bind method of the function (See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
This change is due to the introduction of the `hitTolerance` parameter which can be passed in via this `AtPixelOptions` object, too.
### New Features and Fixes
* [#8314](https://github.com/openlayers/openlayers/pull/8314) - Accept hitTolerance in map.forEachLayerAtPixel() ([@simonseyock](https://github.com/simonseyock))
* [#7750](https://github.com/openlayers/openlayers/pull/7750) - Don't assume fill for canvas polygon hit detection. ([@schmidtk](https://github.com/schmidtk))
* [#8305](https://github.com/openlayers/openlayers/pull/8305) - Update quickstart and tutorials for v5 ([@ahocevar](https://github.com/ahocevar))
* [#8301](https://github.com/openlayers/openlayers/pull/8301) - Do not render vectors in image mode ([@ahocevar](https://github.com/ahocevar))
* [#8302](https://github.com/openlayers/openlayers/pull/8302) - Ignore node_modules everywhere ([@ahocevar](https://github.com/ahocevar))
* [#8299](https://github.com/openlayers/openlayers/pull/8299) - Make classes in ol/ available as named exports from ol ([@ahocevar](https://github.com/ahocevar))
* [#8298](https://github.com/openlayers/openlayers/pull/8298) - Add README for ol package ([@ahocevar](https://github.com/ahocevar))
* [#8295](https://github.com/openlayers/openlayers/pull/8295) - Prepare for building/publishing v5 ([@ahocevar](https://github.com/ahocevar))
* [#8296](https://github.com/openlayers/openlayers/pull/8296) - Fix style documentation ([@fredj](https://github.com/fredj))
* [#8294](https://github.com/openlayers/openlayers/pull/8294) - Remove non-functional type checks from testing ([@ahocevar](https://github.com/ahocevar))
* [#8292](https://github.com/openlayers/openlayers/pull/8292) - Remove now unneeded single quotes in examples ([@fredj](https://github.com/fredj))
* [#8291](https://github.com/openlayers/openlayers/pull/8291) - Graticule code cleanup ([@fredj](https://github.com/fredj))
* [#8287](https://github.com/openlayers/openlayers/pull/8287) - Rename ol/source/TileUTFGrid to ol/source/UTFGrid ([@fredj](https://github.com/fredj))
* [#8286](https://github.com/openlayers/openlayers/pull/8286) - Fix class name property in Overlay documentation ([@fredj](https://github.com/fredj))
* [#8281](https://github.com/openlayers/openlayers/pull/8281) - Rename default data projection ([@gberaudo](https://github.com/gberaudo))
* [#8283](https://github.com/openlayers/openlayers/pull/8283) - Remove references to tutorials/custom-builds.html ([@fredj](https://github.com/fredj))
* [#8280](https://github.com/openlayers/openlayers/pull/8280) - Add missing property in VectorTile options, remove params from createRenderer ([@fredj](https://github.com/fredj))
* [#8277](https://github.com/openlayers/openlayers/pull/8277) - Fix code block in comment ([@ahocevar](https://github.com/ahocevar))
* [#8273](https://github.com/openlayers/openlayers/pull/8273) - Remove the externs/ directory ([@ahocevar](https://github.com/ahocevar))
* [#8246](https://github.com/openlayers/openlayers/pull/8246) - Don't go back to not moving when dragging ([@ahocevar](https://github.com/ahocevar))
* [#8258](https://github.com/openlayers/openlayers/pull/8258) - Use Webpack 4 for tests (and examples) ([@ahocevar](https://github.com/ahocevar))
* [#8250](https://github.com/openlayers/openlayers/pull/8250) - Fix various jsdoc types ([@fredj](https://github.com/fredj))
* [#8245](https://github.com/openlayers/openlayers/pull/8245) - Fix vector tile docs and types ([@ahocevar](https://github.com/ahocevar))
* [#8233](https://github.com/openlayers/openlayers/pull/8233) - Use rollup instead of webpack for the full build ([@ahocevar](https://github.com/ahocevar))
* [#8231](https://github.com/openlayers/openlayers/pull/8231) - Fix JSTS usage with OL classes injected ([@bjornharrtell](https://github.com/bjornharrtell))
* [#8229](https://github.com/openlayers/openlayers/pull/8229) - Support layers instead of renderers for ol/source/Raster ([@ahocevar](https://github.com/ahocevar))
* [#8227](https://github.com/openlayers/openlayers/pull/8227) - Better vectortile experience ([@ahocevar](https://github.com/ahocevar))
* [#8225](https://github.com/openlayers/openlayers/pull/8225) - renderMode: 'image' fixes for ol/layer/Vector ([@ahocevar](https://github.com/ahocevar))
* [#8226](https://github.com/openlayers/openlayers/pull/8226) - Accept renderers as sources for the Raster source ([@ahocevar](https://github.com/ahocevar))
* [#8210](https://github.com/openlayers/openlayers/pull/8210) - Align patterns and gradients to a grid ([@ahocevar](https://github.com/ahocevar))
* [#8201](https://github.com/openlayers/openlayers/pull/8201) - Remove babelrc, transform using babel-core ([@ahocevar](https://github.com/ahocevar))
* [#8203](https://github.com/openlayers/openlayers/pull/8203) - Type checking complete ([@ahocevar](https://github.com/ahocevar))
* [#8204](https://github.com/openlayers/openlayers/pull/8204) - Document ol/control~defaults in the right place ([@ahocevar](https://github.com/ahocevar))
* [#8200](https://github.com/openlayers/openlayers/pull/8200) - Set textAlign to the canvas context ([@fredj](https://github.com/fredj))
* [#8194](https://github.com/openlayers/openlayers/pull/8194) - miscellaneous code cleanup ([@fredj](https://github.com/fredj))
* [#8189](https://github.com/openlayers/openlayers/pull/8189) - More apidoc fixes ([@ahocevar](https://github.com/ahocevar))
* [#8191](https://github.com/openlayers/openlayers/pull/8191) - Do not scale text outline width ([@ahocevar](https://github.com/ahocevar))
* [#8187](https://github.com/openlayers/openlayers/pull/8187) - Hide attribution control if there are no attributions ([@tschaub](https://github.com/tschaub))
* [#8186](https://github.com/openlayers/openlayers/pull/8186) - Updates to get the examples building ([@tschaub](https://github.com/tschaub))
* [#8180](https://github.com/openlayers/openlayers/pull/8180) - Fix some JSDoc issues ([@ahocevar](https://github.com/ahocevar))
* [#8175](https://github.com/openlayers/openlayers/pull/8175) - More typing fixes ([@fredj](https://github.com/fredj))
* [#8177](https://github.com/openlayers/openlayers/pull/8177) - Remove documentation related to the closure compiler ([@gberaudo](https://github.com/gberaudo))
* [#8174](https://github.com/openlayers/openlayers/pull/8174) - Fix typo in ol/style/Image~Options typedef ([@fredj](https://github.com/fredj))
* [#8172](https://github.com/openlayers/openlayers/pull/8172) - Ignore 'this' type in function typedef ([@fredj](https://github.com/fredj))
* [#8173](https://github.com/openlayers/openlayers/pull/8173) - Fix typing in ol/xml module ([@fredj](https://github.com/fredj))
* [#8169](https://github.com/openlayers/openlayers/pull/8169) - Shorter module paths for default exports ([@fredj](https://github.com/fredj))
* [#8171](https://github.com/openlayers/openlayers/pull/8171) - Remove wrong override tags ([@fredj](https://github.com/fredj))
* [#8170](https://github.com/openlayers/openlayers/pull/8170) - Basic apidocs ([@ahocevar](https://github.com/ahocevar))
* [#8167](https://github.com/openlayers/openlayers/pull/8167) - Remove externs/oli.js ([@tschaub](https://github.com/tschaub))
* [#8166](https://github.com/openlayers/openlayers/pull/8166) - Updated type annotations ([@tschaub](https://github.com/tschaub))
* [#8165](https://github.com/openlayers/openlayers/pull/8165) - Update linter config ([@tschaub](https://github.com/tschaub))
* [#8163](https://github.com/openlayers/openlayers/pull/8163) - Fix type syntax ([@ahocevar](https://github.com/ahocevar))
* [#8161](https://github.com/openlayers/openlayers/pull/8161) - Fix skipping of texts with background ([@ahocevar](https://github.com/ahocevar))
* [#8156](https://github.com/openlayers/openlayers/pull/8156) - fix assert 36 on error documentation #8147 ([@mainakae](https://github.com/mainakae))
* [#8143](https://github.com/openlayers/openlayers/pull/8143) - Shorter module paths for default exports ([@openlayers](https://github.com/openlayers))
* [#8137](https://github.com/openlayers/openlayers/pull/8137) - Avoid `this` at top level of modules ([@tschaub](https://github.com/tschaub))
* [#8138](https://github.com/openlayers/openlayers/pull/8138) - Update tasks to use native async/await ([@tschaub](https://github.com/tschaub))
* [#8139](https://github.com/openlayers/openlayers/pull/8139) - Add @module annotation for ol/control/util ([@tschaub](https://github.com/tschaub))
* [#8135](https://github.com/openlayers/openlayers/pull/8135) - Break the circular dependency: overview map, map, controls, overview map ([@tschaub](https://github.com/tschaub))
* [#8132](https://github.com/openlayers/openlayers/pull/8132) - Add minZoom to the createResolutionConstraint function return type ([@fredj](https://github.com/fredj))
* [#8129](https://github.com/openlayers/openlayers/pull/8129) - Fix some types ([@ahocevar](https://github.com/ahocevar))
* [#8127](https://github.com/openlayers/openlayers/pull/8127) - Move RasterOperationType into ol/source/Raster ([@fredj](https://github.com/fredj))
* [#8123](https://github.com/openlayers/openlayers/pull/8123) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8125](https://github.com/openlayers/openlayers/pull/8125) - Shorter module paths for default exports ([@ahocevar](https://github.com/ahocevar))
* [#8122](https://github.com/openlayers/openlayers/pull/8122) - Remove unused 'format' options from Cluster source constructor ([@fredj](https://github.com/fredj))
* [#8121](https://github.com/openlayers/openlayers/pull/8121) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8117](https://github.com/openlayers/openlayers/pull/8117) - Re-export style constructors from ol/style ([@tschaub](https://github.com/tschaub))
* [#8115](https://github.com/openlayers/openlayers/pull/8115) - Re-export layer constructors from ol/layer ([@tschaub](https://github.com/tschaub))
* [#8114](https://github.com/openlayers/openlayers/pull/8114) - Re-export interaction constructors from ol/interaction ([@tschaub](https://github.com/tschaub))
* [#8116](https://github.com/openlayers/openlayers/pull/8116) - Re-export source constructors from ol/source ([@tschaub](https://github.com/tschaub))
* [#8113](https://github.com/openlayers/openlayers/pull/8113) - Re-export geometry constructors from ol/geom ([@tschaub](https://github.com/tschaub))
* [#8112](https://github.com/openlayers/openlayers/pull/8112) - Re-export format constructors from ol/format ([@tschaub](https://github.com/tschaub))
* [#8111](https://github.com/openlayers/openlayers/pull/8111) - Re-export control constructors ([@tschaub](https://github.com/tschaub))
* [#8118](https://github.com/openlayers/openlayers/pull/8118) - Use list for cloak entries ([@tschaub](https://github.com/tschaub))
* [#8109](https://github.com/openlayers/openlayers/pull/8109) - Make any falsey undefinedHTML retain the mouse position ([@tschaub](https://github.com/tschaub))
* [#8103](https://github.com/openlayers/openlayers/pull/8103) - Fix some jsdoc path types ([@ahocevar](https://github.com/ahocevar))
* [#7784](https://github.com/openlayers/openlayers/pull/7784) - Adds option to retain MousePosition when pointer leaves viewport ([@pedros007](https://github.com/pedros007))
* [#8101](https://github.com/openlayers/openlayers/pull/8101) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#7908](https://github.com/openlayers/openlayers/pull/7908) - ScaleLine fix for non-degree based units ([@hyperknot](https://github.com/hyperknot))
* [#8099](https://github.com/openlayers/openlayers/pull/8099) - More Jsdoc module fixes ([@openlayers](https://github.com/openlayers))
* [#8098](https://github.com/openlayers/openlayers/pull/8098) - Remove externs/olx.js and src/ol/typedefs.js ([@tschaub](https://github.com/tschaub))
* [#8096](https://github.com/openlayers/openlayers/pull/8096) - Fix rotation default ([@ahocevar](https://github.com/ahocevar))
* [#8081](https://github.com/openlayers/openlayers/pull/8081) - Move olx.render.* and related typedefs to ol/render/* ([@pfirpfel](https://github.com/pfirpfel))
* [#8087](https://github.com/openlayers/openlayers/pull/8087) - Move various typedefs out of typdefs.js ([@pfirpfel](https://github.com/pfirpfel))
* [#8052](https://github.com/openlayers/openlayers/pull/8052) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8048](https://github.com/openlayers/openlayers/pull/8048) - Remove all comments from shaders ([@fredj](https://github.com/fredj))
* [#8089](https://github.com/openlayers/openlayers/pull/8089) - Allow unprefixed WMTS tileMatrix identifiers ([@fredj](https://github.com/fredj))
* [#8088](https://github.com/openlayers/openlayers/pull/8088) - Correct type for TextPlacement (jsdoc) ([@camptocamp](https://github.com/camptocamp))
* [#8083](https://github.com/openlayers/openlayers/pull/8083) - Move structs typedefs to ol/structs/* ([@pfirpfel](https://github.com/pfirpfel))
* [#8077](https://github.com/openlayers/openlayers/pull/8077) - Add hasFeature method to ol.source.Vector ([@icholy](https://github.com/icholy))
* [#8080](https://github.com/openlayers/openlayers/pull/8080) - #8079 Mark functions setRotateWithView and setSnapToPixel of ol/style/Image with @api ([@iagafonov](https://github.com/iagafonov))
* [#8084](https://github.com/openlayers/openlayers/pull/8084) - Move ol.Reproj* typedefs to ol/reproj ([@pfirpfel](https://github.com/pfirpfel))
* [#8082](https://github.com/openlayers/openlayers/pull/8082) - Remove unused typedefs ([@pfirpfel](https://github.com/pfirpfel))
* [#8076](https://github.com/openlayers/openlayers/pull/8076) - Move olx.style.* and ol.Style* to ol/style/* ([@pfirpfel](https://github.com/pfirpfel))
* [#8075](https://github.com/openlayers/openlayers/pull/8075) - Move olx.tilegrid.* to ol/tilegrid/* ([@pfirpfel](https://github.com/pfirpfel))
* [#8073](https://github.com/openlayers/openlayers/pull/8073) - Remove dependency on deprecated sinon@5 ([@tschaub](https://github.com/tschaub))
* [#7994](https://github.com/openlayers/openlayers/pull/7994) - Explicit renderer dependencies ([@tschaub](https://github.com/tschaub))
* [#7863](https://github.com/openlayers/openlayers/pull/7863) - Add note about null geom in VectorSource.forEachFeature ([@fredj](https://github.com/fredj))
* [#8055](https://github.com/openlayers/openlayers/pull/8055) - Mark optional property with square brackets ([@fredj](https://github.com/fredj))
* [#8054](https://github.com/openlayers/openlayers/pull/8054) - Generate correct includes list for `build-index` script on windows hosts. ([@lilliputten](https://github.com/lilliputten))
* [#8053](https://github.com/openlayers/openlayers/pull/8053) - Don't import from 'functions' multiple times ([@fredj](https://github.com/fredj))
* [#8041](https://github.com/openlayers/openlayers/pull/8041) - Remove olx typedefs ol/source ([@fgravin](https://github.com/fgravin))
* [#8026](https://github.com/openlayers/openlayers/pull/8026) - [doc] dispatchChangeEvent -> changed ([@nyurik](https://github.com/nyurik))
* [#8003](https://github.com/openlayers/openlayers/pull/8003) - Add an example showing Chaikins smoothing algorithm ([@marcjansen](https://github.com/marcjansen))
* [#8044](https://github.com/openlayers/openlayers/pull/8044) - Rename constructor options typedef to 'Options' ([@fredj](https://github.com/fredj))
* [#8042](https://github.com/openlayers/openlayers/pull/8042) - Only process loaded tiles ([@ahocevar](https://github.com/ahocevar))
* [#8036](https://github.com/openlayers/openlayers/pull/8036) - Move the temporary arrays to the module level ([@fredj](https://github.com/fredj))
* [#8032](https://github.com/openlayers/openlayers/pull/8032) - Start removing externs for `ol/source` ([@romanzoller](https://github.com/romanzoller))
* [#8038](https://github.com/openlayers/openlayers/pull/8038) - Fix ZoomToExtent default tipLabel value ([@fredj](https://github.com/fredj))
* [#8034](https://github.com/openlayers/openlayers/pull/8034) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8029](https://github.com/openlayers/openlayers/pull/8029) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8030](https://github.com/openlayers/openlayers/pull/8030) - Set `user-select: text` for .ol-selectable ([@walkermatt](https://github.com/walkermatt))
* [#8025](https://github.com/openlayers/openlayers/pull/8025) - Move olx.layer.* to ol/layer/* ([@romanzoller](https://github.com/romanzoller))
* [#8023](https://github.com/openlayers/openlayers/pull/8023) - Module type changes for ol.webgl ([@fredj](https://github.com/fredj))
* [#8021](https://github.com/openlayers/openlayers/pull/8021) - Move olx.ViewState to ol/View ([@fredj](https://github.com/fredj))
* [#8012](https://github.com/openlayers/openlayers/pull/8012) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#8015](https://github.com/openlayers/openlayers/pull/8015) - Remove some typedefs from src/ol/typedefs.js ([@fredj](https://github.com/fredj))
* [#8016](https://github.com/openlayers/openlayers/pull/8016) - Move olx.layer.BaseOptions to ol/layer/Base ([@romanzoller](https://github.com/romanzoller))
* [#8005](https://github.com/openlayers/openlayers/pull/8005) - Add vector tile selection example ([@chrismayer](https://github.com/chrismayer))
* [#7999](https://github.com/openlayers/openlayers/pull/7999) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#7998](https://github.com/openlayers/openlayers/pull/7998) - More Jsdoc module fixes ([@fredj](https://github.com/fredj))
* [#7992](https://github.com/openlayers/openlayers/pull/7992) - Fix freeze on export PDF example ([@trenneman](https://github.com/trenneman))
* [#7997](https://github.com/openlayers/openlayers/pull/7997) - Jsdoc module ([@fredj](https://github.com/fredj))
* [#7986](https://github.com/openlayers/openlayers/pull/7986) - Use module syntax for type annotations ([@fredj](https://github.com/fredj))
* [#7996](https://github.com/openlayers/openlayers/pull/7996) - 4.6.5 ([@openlayers](https://github.com/openlayers))
* [#7993](https://github.com/openlayers/openlayers/pull/7993) - Module types ([@tschaub](https://github.com/tschaub))
* [#7989](https://github.com/openlayers/openlayers/pull/7989) - Redistribute olx types for ol/interaction ([@ahocevar](https://github.com/ahocevar))
* [#7991](https://github.com/openlayers/openlayers/pull/7991) - Fix some type paths ([@ahocevar](https://github.com/ahocevar))
* [#7985](https://github.com/openlayers/openlayers/pull/7985) - Use path type instead of ol.tilegrid ([@fredj](https://github.com/fredj))
* [#7983](https://github.com/openlayers/openlayers/pull/7983) - Use path type instead of ol.Extent ([@ahocevar](https://github.com/ahocevar))
* [#7980](https://github.com/openlayers/openlayers/pull/7980) - Use module syntax for type annotations ([@fredj](https://github.com/fredj))
* [#7979](https://github.com/openlayers/openlayers/pull/7979) - Mark optional property with square brackets ([@fredj](https://github.com/fredj))
* [#7975](https://github.com/openlayers/openlayers/pull/7975) - Mark optional property with square brackets ([@fredj](https://github.com/fredj))
* [#7960](https://github.com/openlayers/openlayers/pull/7960) - Fix memory leak in CanvasImageRenderer ([@PetroDE](https://github.com/PetroDE))
* [#7974](https://github.com/openlayers/openlayers/pull/7974) - Fix spelling ([@fredj](https://github.com/fredj))
* [#7973](https://github.com/openlayers/openlayers/pull/7973) - Remove setAttributeNS function from ol/xml ([@fredj](https://github.com/fredj))
* [#7971](https://github.com/openlayers/openlayers/pull/7971) - Use module syntax for type annotations ([@tschaub](https://github.com/tschaub))
* [#7968](https://github.com/openlayers/openlayers/pull/7968) - More types in the right places ([@tschaub](https://github.com/tschaub))
* [#7966](https://github.com/openlayers/openlayers/pull/7966) - Remove namespaces from olx.js ([@tschaub](https://github.com/tschaub))
* [#7965](https://github.com/openlayers/openlayers/pull/7965) - Redistribute types from externs/olx.js ([@tschaub](https://github.com/tschaub))
* [#7608](https://github.com/openlayers/openlayers/pull/7608) - Facilitate the removal of externs/olx.js ([@tschaub](https://github.com/tschaub))
* [#7964](https://github.com/openlayers/openlayers/pull/7964) - Coordinate type typo ([@tschaub](https://github.com/tschaub))
* [#7961](https://github.com/openlayers/openlayers/pull/7961) - Correct type for style ([@tschaub](https://github.com/tschaub))
* [#7958](https://github.com/openlayers/openlayers/pull/7958) - miscellaneous fixes to the types annotation ([@fredj](https://github.com/fredj))
* [#7953](https://github.com/openlayers/openlayers/pull/7953) - Get rid of externs/olx.js and src/ol/typedefs.js typedefs for ol/ and ol/events/ ([@ahocevar](https://github.com/ahocevar))
* [#7956](https://github.com/openlayers/openlayers/pull/7956) - Make sure namespaces are populated after they were created ([@ahocevar](https://github.com/ahocevar))
* [#7952](https://github.com/openlayers/openlayers/pull/7952) - Fix typo in jsdoc type ([@fredj](https://github.com/fredj))
* [#7948](https://github.com/openlayers/openlayers/pull/7948) - Better type definition ([@fredj](https://github.com/fredj))
* [#7946](https://github.com/openlayers/openlayers/pull/7946) - New typedef syntax and module path types for some modules ([@ahocevar](https://github.com/ahocevar))
* [#7944](https://github.com/openlayers/openlayers/pull/7944) - Make wrap work with points in the vector-labels example ([@ahocevar](https://github.com/ahocevar))
* [#7933](https://github.com/openlayers/openlayers/pull/7933) - Better code indentation ([@fredj](https://github.com/fredj))
* [#7930](https://github.com/openlayers/openlayers/pull/7930) - Use listen function instead of on ([@openlayers](https://github.com/openlayers))
* [#7929](https://github.com/openlayers/openlayers/pull/7929) - Remove unused devDependencies ([@openlayers](https://github.com/openlayers))
* [#7927](https://github.com/openlayers/openlayers/pull/7927) - Remove unused deps, unused tasks, and outdated info ([@tschaub](https://github.com/tschaub))
* [#7923](https://github.com/openlayers/openlayers/pull/7923) - Fix exports and use of constants ([@ahocevar](https://github.com/ahocevar))
* [#7914](https://github.com/openlayers/openlayers/pull/7914) - Some easy window cleanups ([@gberaudo](https://github.com/gberaudo))
* [#7915](https://github.com/openlayers/openlayers/pull/7915) - Untie feature loader and XML code ([@gberaudo](https://github.com/gberaudo))
* [#7918](https://github.com/openlayers/openlayers/pull/7918) - Move the nullFunction to ol/functions ([@fredj](https://github.com/fredj))
* [#7910](https://github.com/openlayers/openlayers/pull/7910) - Better code indentation ([@fredj](https://github.com/fredj))
* [#7904](https://github.com/openlayers/openlayers/pull/7904) - Add focus condition, e.g. for wheel zoom ([@ahocevar](https://github.com/ahocevar))
* [#7902](https://github.com/openlayers/openlayers/pull/7902) - Add a unicode symbol for symbol font detection ([@ahocevar](https://github.com/ahocevar))
* [#7899](https://github.com/openlayers/openlayers/pull/7899) - Use nomnom@1.8.1 ([@tschaub](https://github.com/tschaub))
* [#7897](https://github.com/openlayers/openlayers/pull/7897) - Better variables scoping ([@fredj](https://github.com/fredj))
* [#7894](https://github.com/openlayers/openlayers/pull/7894) - More named exports, fewer static members ([@tschaub](https://github.com/tschaub))
* [#7881](https://github.com/openlayers/openlayers/pull/7881) - Better variables scoping ([@fredj](https://github.com/fredj))
* [#7888](https://github.com/openlayers/openlayers/pull/7888) - Rework away static members from pointer related classes ([@bjornharrtell](https://github.com/bjornharrtell))
* [#7880](https://github.com/openlayers/openlayers/pull/7880) - Named exports from ol/style/Style ([@tschaub](https://github.com/tschaub))
* [#7872](https://github.com/openlayers/openlayers/pull/7872) - More named export ([@fredj](https://github.com/fredj))
* [#7874](https://github.com/openlayers/openlayers/pull/7874) - Cleaning up exports ([@tschaub](https://github.com/tschaub))
* [#7871](https://github.com/openlayers/openlayers/pull/7871) - Memory optimization ([@fredj](https://github.com/fredj))
* [#7870](https://github.com/openlayers/openlayers/pull/7870) - Use exported function from ol/webgl ([@fredj](https://github.com/fredj))
* [#7868](https://github.com/openlayers/openlayers/pull/7868) - Named export ([@fredj](https://github.com/fredj))
* [#7861](https://github.com/openlayers/openlayers/pull/7861) - Named exports from ol/structs/PriorityQueue ([@fredj](https://github.com/fredj))
* [#7860](https://github.com/openlayers/openlayers/pull/7860) - Don't export private constant from ol/webgl ([@openlayers](https://github.com/openlayers))
* [#7855](https://github.com/openlayers/openlayers/pull/7855) - More named exports ([@tschaub](https://github.com/tschaub))
* [#7851](https://github.com/openlayers/openlayers/pull/7851) - Replacing static functions with named exports ([@tschaub](https://github.com/tschaub))
* [#7852](https://github.com/openlayers/openlayers/pull/7852) - Rename extent ([@nicholas-l](https://github.com/nicholas-l))
* [#7840](https://github.com/openlayers/openlayers/pull/7840) - More export renaming ([@raiyni](https://github.com/raiyni))
* [#7843](https://github.com/openlayers/openlayers/pull/7843) - Better code indentation ([@fredj](https://github.com/fredj))
* [#7842](https://github.com/openlayers/openlayers/pull/7842) - Allow setting the label cache size ([@ahocevar](https://github.com/ahocevar))
* [#7791](https://github.com/openlayers/openlayers/pull/7791) - Named exports from ol/tilecoord ([@marcjansen](https://github.com/marcjansen))
* [#7835](https://github.com/openlayers/openlayers/pull/7835) - Add and use a constant for the collapsed CSS class ([@marcjansen](https://github.com/marcjansen))
* [#7834](https://github.com/openlayers/openlayers/pull/7834) - Named exports from ol/transform ([@marcjansen](https://github.com/marcjansen))
* [#7831](https://github.com/openlayers/openlayers/pull/7831) - Add new maxTilesLoading option to ol/PluggableMap ([@fredj](https://github.com/fredj))
* [#7833](https://github.com/openlayers/openlayers/pull/7833) - Fix createEmptyTexture function call in ol/webgl/Context ([@fredj](https://github.com/fredj))
* [#7832](https://github.com/openlayers/openlayers/pull/7832) - Webgl Layer and Context named exports ([@fgravin](https://github.com/fgravin))
* [#7826](https://github.com/openlayers/openlayers/pull/7826) - Better code indentation and modules renaming ([@fredj](https://github.com/fredj))
* [#7828](https://github.com/openlayers/openlayers/pull/7828) - Refactor constraints static methods to module functions ([@bjornharrtell](https://github.com/bjornharrtell))
* [#7827](https://github.com/openlayers/openlayers/pull/7827) - Named exports from ol/render/canvas ([@tschaub](https://github.com/tschaub))
* [#7823](https://github.com/openlayers/openlayers/pull/7823) - Replace static members with named exports ([@fredj](https://github.com/fredj))
* [#7820](https://github.com/openlayers/openlayers/pull/7820) - ol/geom/flat/* exports ([@raiyni](https://github.com/raiyni))
* [#7824](https://github.com/openlayers/openlayers/pull/7824) - Fix code indentation ([@fredj](https://github.com/fredj))
* [#7821](https://github.com/openlayers/openlayers/pull/7821) - Add new canvas instruction array in ol/render/canvas/Instruction ([@fredj](https://github.com/fredj))
* [#7817](https://github.com/openlayers/openlayers/pull/7817) - Remove more private static members ([@tschaub](https://github.com/tschaub))
* [#7814](https://github.com/openlayers/openlayers/pull/7814) - Remove more private static members ([@tschaub](https://github.com/tschaub))
* [#7816](https://github.com/openlayers/openlayers/pull/7816) - Use toString instead of asString in asColorLike ([@openlayers](https://github.com/openlayers))
* [#7811](https://github.com/openlayers/openlayers/pull/7811) - Remove ol.FeatureStyleFunction support ([@fredj](https://github.com/fredj))
* [#7815](https://github.com/openlayers/openlayers/pull/7815) - Remove private statics from webgl related modules ([@bjornharrtell](https://github.com/bjornharrtell))
* [#7803](https://github.com/openlayers/openlayers/pull/7803) - Remove private static members from constructors ([@tschaub](https://github.com/tschaub))
* [#7808](https://github.com/openlayers/openlayers/pull/7808) - Make sure the requested image size matches the desired ratio ([@ahocevar](https://github.com/ahocevar))
* [#7807](https://github.com/openlayers/openlayers/pull/7807) - Run typecheck after tests, because of its current verbosity ([@ahocevar](https://github.com/ahocevar))
* [#7805](https://github.com/openlayers/openlayers/pull/7805) - Remove private static members from constructors ([@fredj](https://github.com/fredj))
* [#7806](https://github.com/openlayers/openlayers/pull/7806) - Fix rotate import ([@ahocevar](https://github.com/ahocevar))
* [#7800](https://github.com/openlayers/openlayers/pull/7800) - More named exports ([@tschaub](https://github.com/tschaub))
* [#7741](https://github.com/openlayers/openlayers/pull/7741) - Type checking and full build creation ([@ahocevar](https://github.com/ahocevar))
* [#7797](https://github.com/openlayers/openlayers/pull/7797) - Better default export names for WebGL modules ([@tschaub](https://github.com/tschaub))
* [#7794](https://github.com/openlayers/openlayers/pull/7794) - Call animation callback in a timeout ([@tschaub](https://github.com/tschaub))
* [#7793](https://github.com/openlayers/openlayers/pull/7793) - More renaming of default exports ([@tschaub](https://github.com/tschaub))
* [#7799](https://github.com/openlayers/openlayers/pull/7799) - Use tmpSize to reduce garbage generation ([@fredj](https://github.com/fredj))
* [#7788](https://github.com/openlayers/openlayers/pull/7788) - Fix shaders generation ([@fredj](https://github.com/fredj))
* [#7789](https://github.com/openlayers/openlayers/pull/7789) - Use STATIC_DRAW as default WebGL buffer usage ([@fredj](https://github.com/fredj))
* [#7787](https://github.com/openlayers/openlayers/pull/7787) - More renaming ([@fredj](https://github.com/fredj))
* [#7782](https://github.com/openlayers/openlayers/pull/7782) - Named exports from specific proj modules ([@tschaub](https://github.com/tschaub))
* [#7780](https://github.com/openlayers/openlayers/pull/7780) - More named exports ([@tschaub](https://github.com/tschaub))
* [#7783](https://github.com/openlayers/openlayers/pull/7783) - Named exports from ol/xml ([@raiyni](https://github.com/raiyni))
* [#7774](https://github.com/openlayers/openlayers/pull/7774) - Pass destination extent to avoid garbage generation ([@fredj](https://github.com/fredj))
* [#7771](https://github.com/openlayers/openlayers/pull/7771) - Named exports from loadingstrategy ([@marcjansen](https://github.com/marcjansen))
* [#7772](https://github.com/openlayers/openlayers/pull/7772) - Named exports from filter module ([@marcjansen](https://github.com/marcjansen))
* [#7770](https://github.com/openlayers/openlayers/pull/7770) - Rename _ol_render_Box_ to RenderBox ([@marcjansen](https://github.com/marcjansen))
* [#7763](https://github.com/openlayers/openlayers/pull/7763) - Use the temporary extent in VectorTileLayer ([@fredj](https://github.com/fredj))
* [#7765](https://github.com/openlayers/openlayers/pull/7765) - Named exports from events condition ([@marcjansen](https://github.com/marcjansen))
* [#7767](https://github.com/openlayers/openlayers/pull/7767) - Transformation functions: Fix spelling and use the symbol × ([@marcjansen](https://github.com/marcjansen))
* [#7764](https://github.com/openlayers/openlayers/pull/7764) - Named exports from ol/has ([@tschaub](https://github.com/tschaub))
* [#7761](https://github.com/openlayers/openlayers/pull/7761) - Rename _ol_render_canvas_Instruction_ to CanvasInstruction ([@fredj](https://github.com/fredj))
* [#7749](https://github.com/openlayers/openlayers/pull/7749) - Check if the sketch feature is defined in finishDrawing ([@fredj](https://github.com/fredj))
* [#7745](https://github.com/openlayers/openlayers/pull/7745) - More named exports ([@fredj](https://github.com/fredj))
* [#7743](https://github.com/openlayers/openlayers/pull/7743) - Set enableHighAccuracy in geolocation example ([@fredj](https://github.com/fredj))
* [#7738](https://github.com/openlayers/openlayers/pull/7738) - Named exports from ol/events ([@tschaub](https://github.com/tschaub))
* [#7724](https://github.com/openlayers/openlayers/pull/7724) - Update prism library ([@fredj](https://github.com/fredj))
* [#7727](https://github.com/openlayers/openlayers/pull/7727) - Deactivate transition effect for semi transparent layer example ([@fredj](https://github.com/fredj))
* [#7726](https://github.com/openlayers/openlayers/pull/7726) - Named exports from ol/string ([@fredj](https://github.com/fredj))
* [#7725](https://github.com/openlayers/openlayers/pull/7725) - Remove extra comment ([@fredj](https://github.com/fredj))
* [#7721](https://github.com/openlayers/openlayers/pull/7721) - More renaming ([@fredj](https://github.com/fredj))
* [#7716](https://github.com/openlayers/openlayers/pull/7716) - Better variables scoping ([@fredj](https://github.com/fredj))
* [#7698](https://github.com/openlayers/openlayers/pull/7698) - Fix for loop in color test ([@fredj](https://github.com/fredj))
* [#7703](https://github.com/openlayers/openlayers/pull/7703) - Improved drawing experience on touch devices ([@ahocevar](https://github.com/ahocevar))
* [#7713](https://github.com/openlayers/openlayers/pull/7713) - Better variables scoping ([@fredj](https://github.com/fredj))
* [#7711](https://github.com/openlayers/openlayers/pull/7711) - Do not use (I)CLA anymore ([@bartvde](https://github.com/bartvde))
* [#7709](https://github.com/openlayers/openlayers/pull/7709) - More named export ([@fredj](https://github.com/fredj))
* [#7705](https://github.com/openlayers/openlayers/pull/7705) - More renaming ([@fredj](https://github.com/fredj))
* [#7700](https://github.com/openlayers/openlayers/pull/7700) - Fix ScaleLine control for Projections in degrees ([@pedros007](https://github.com/pedros007))
* [#7697](https://github.com/openlayers/openlayers/pull/7697) - Use const and let ([@tschaub](https://github.com/tschaub))
* [#7695](https://github.com/openlayers/openlayers/pull/7695) - More renaming ([@tschaub](https://github.com/tschaub))
* [#7693](https://github.com/openlayers/openlayers/pull/7693) - More import renaming ([@fredj](https://github.com/fredj))
* [#7678](https://github.com/openlayers/openlayers/pull/7678) - Add jsDelivr hits badge ([@LukasDrgon](https://github.com/LukasDrgon))
* [#7686](https://github.com/openlayers/openlayers/pull/7686) - More import renaming ([@tschaub](https://github.com/tschaub))
* [#7669](https://github.com/openlayers/openlayers/pull/7669) - Use declutter tree only for text and image replays ([@ahocevar](https://github.com/ahocevar))
* [#7683](https://github.com/openlayers/openlayers/pull/7683) - Move IGCZ enum to src/ol/format/IGC.js ([@fredj](https://github.com/fredj))
* [#7682](https://github.com/openlayers/openlayers/pull/7682) - Add new condition to MouseWheelZoom interaction ([@fredj](https://github.com/fredj))
* [#7676](https://github.com/openlayers/openlayers/pull/7676) - Check fonts against two reference fonts ([@ahocevar](https://github.com/ahocevar))
* [#7668](https://github.com/openlayers/openlayers/pull/7668) - Hit detect text background ([@ahocevar](https://github.com/ahocevar))
* [#7661](https://github.com/openlayers/openlayers/pull/7661) - Background fill stroke ([@ahocevar](https://github.com/ahocevar))
* [#7654](https://github.com/openlayers/openlayers/pull/7654) - Add named export for transformWithOptions function ([@fredj](https://github.com/fredj))
* [#7652](https://github.com/openlayers/openlayers/pull/7652) - More renaming ([@fredj](https://github.com/fredj))
* [#7649](https://github.com/openlayers/openlayers/pull/7649) - Named Map export for ol/Map ([@raiyni](https://github.com/raiyni))
* [#7646](https://github.com/openlayers/openlayers/pull/7646) - Named export for Polyline format and SimpleGeometry ([@openlayers](https://github.com/openlayers))
* [#7650](https://github.com/openlayers/openlayers/pull/7650) - Rename _ol_PluggableMap_ to PluggableMap ([@fredj](https://github.com/fredj))
* [#7642](https://github.com/openlayers/openlayers/pull/7642) - Don't store private function into GPX ([@fredj](https://github.com/fredj))
* [#7643](https://github.com/openlayers/openlayers/pull/7643) - Replace ol/Sphere with ol/sphere ([@tschaub](https://github.com/tschaub))
* [#7644](https://github.com/openlayers/openlayers/pull/7644) - Named exports from ol/math module ([@raiyni](https://github.com/raiyni))
* [#7636](https://github.com/openlayers/openlayers/pull/7636) - Named exports from the ol/array module ([@marcjansen](https://github.com/marcjansen))
* [#7614](https://github.com/openlayers/openlayers/pull/7614) - Remove opt_this from the API ([@KlausBenndorf](https://github.com/KlausBenndorf))
* [#7640](https://github.com/openlayers/openlayers/pull/7640) - Remove unneeded and already skipped test ([@openlayers](https://github.com/openlayers))
* [#7637](https://github.com/openlayers/openlayers/pull/7637) - Named exports from the ol/color module ([@marcjansen](https://github.com/marcjansen))
* [#7639](https://github.com/openlayers/openlayers/pull/7639) - Don't store private function into GeoJSON ([@fredj](https://github.com/fredj))
* [#7635](https://github.com/openlayers/openlayers/pull/7635) - More module renaming ([@fredj](https://github.com/fredj))
* [#7632](https://github.com/openlayers/openlayers/pull/7632) - Named exports from ol/css module ([@marcjansen](https://github.com/marcjansen))
* [#7634](https://github.com/openlayers/openlayers/pull/7634) - Rename _ol_layer_Tile_ to TileLayer ([@marcjansen](https://github.com/marcjansen))
* [#7633](https://github.com/openlayers/openlayers/pull/7633) - Import assert function directly ([@marcjansen](https://github.com/marcjansen))
* [#7631](https://github.com/openlayers/openlayers/pull/7631) - More named export and rename ([@fredj](https://github.com/fredj))
* [#7627](https://github.com/openlayers/openlayers/pull/7627) - Nicer import name ([@fredj](https://github.com/fredj))
* [#7622](https://github.com/openlayers/openlayers/pull/7622) - Named export ([@fredj](https://github.com/fredj))
* [#7624](https://github.com/openlayers/openlayers/pull/7624) - Remove eslint-plugin-openlayers-internal rules ([@fredj](https://github.com/fredj))
* [#7625](https://github.com/openlayers/openlayers/pull/7625) - Named export for ol/control and ol/interaction ([@fredj](https://github.com/fredj))
* [#7623](https://github.com/openlayers/openlayers/pull/7623) - Named export for ol/tileurlfunction ([@fredj](https://github.com/fredj))
* [#7621](https://github.com/openlayers/openlayers/pull/7621) - Replace ZeroClipboard with Clipboard.js ([@fredj](https://github.com/fredj))
* [#7620](https://github.com/openlayers/openlayers/pull/7620) - Rename variables in format modules ([@tschaub](https://github.com/tschaub))
* [#7619](https://github.com/openlayers/openlayers/pull/7619) - More variable renaming ([@fredj](https://github.com/fredj))
* [#7612](https://github.com/openlayers/openlayers/pull/7612) - Better import name for _ol_ext_* import ([@fredj](https://github.com/fredj))
* [#7611](https://github.com/openlayers/openlayers/pull/7611) - Change olx.SphereMetricOptions to SphereMetricOptions ([@fredj](https://github.com/fredj))
* [#7615](https://github.com/openlayers/openlayers/pull/7615) - Remove logos ([@tschaub](https://github.com/tschaub))
* [#7610](https://github.com/openlayers/openlayers/pull/7610) - More variable renaming ([@fredj](https://github.com/fredj))
* [#7609](https://github.com/openlayers/openlayers/pull/7609) - Redistribute a few types and docs ([@tschaub](https://github.com/tschaub))
* [#7598](https://github.com/openlayers/openlayers/pull/7598) - Modular proj4 integration ([@ahocevar](https://github.com/ahocevar))
* [#7607](https://github.com/openlayers/openlayers/pull/7607) - Rename interaction variables ([@tschaub](https://github.com/tschaub))
* [#7599](https://github.com/openlayers/openlayers/pull/7599) - Rename event variables ([@marcjansen](https://github.com/marcjansen))
* [#7605](https://github.com/openlayers/openlayers/pull/7605) - Better import and class name in ol/format/filter/ ([@fredj](https://github.com/fredj))
* [#7604](https://github.com/openlayers/openlayers/pull/7604) - Named exports from ol/functions ([@fredj](https://github.com/fredj))
* [#7603](https://github.com/openlayers/openlayers/pull/7603) - Simplify default export ([@fredj](https://github.com/fredj))
* [#7602](https://github.com/openlayers/openlayers/pull/7602) - Remove now unused DEVICE_ORIENTATION ([@fredj](https://github.com/fredj))
* [#7597](https://github.com/openlayers/openlayers/pull/7597) - More es6 named export ([@fredj](https://github.com/fredj))
* [#7600](https://github.com/openlayers/openlayers/pull/7600) - Simplify default export of ol/events/KeyCode ([@marcjansen](https://github.com/marcjansen))
* [#7594](https://github.com/openlayers/openlayers/pull/7594) - Rename control variables ([@tschaub](https://github.com/tschaub))
* [#7593](https://github.com/openlayers/openlayers/pull/7593) - Simplify default export ([@tschaub](https://github.com/tschaub))
* [#7591](https://github.com/openlayers/openlayers/pull/7591) - Rename geometry variables ([@tschaub](https://github.com/tschaub))
* [#7586](https://github.com/openlayers/openlayers/pull/7586) - Named exports from ol/dom ([@fredj](https://github.com/fredj))
* [#7581](https://github.com/openlayers/openlayers/pull/7581) - Named exports from ol/proj ([@tschaub](https://github.com/tschaub))
* [#7585](https://github.com/openlayers/openlayers/pull/7585) - Remove leftovers olx.animation typedefs ([@fredj](https://github.com/fredj))
* [#7584](https://github.com/openlayers/openlayers/pull/7584) - Named exports from ol/easing ([@fredj](https://github.com/fredj))
* [#7582](https://github.com/openlayers/openlayers/pull/7582) - Remove default export from ol/extent ([@ahocevar](https://github.com/ahocevar))
* [#7580](https://github.com/openlayers/openlayers/pull/7580) - No default export from lowercase modules ([@tschaub](https://github.com/tschaub))
* [#7575](https://github.com/openlayers/openlayers/pull/7575) - Add named exports for extent ([@ahocevar](https://github.com/ahocevar))
* [#7579](https://github.com/openlayers/openlayers/pull/7579) - VectorImageTile: call changed() before removing listeners on dispose ([@mbleichner](https://github.com/mbleichner))
* [#7578](https://github.com/openlayers/openlayers/pull/7578) - Remove deprecated functionality from 4.x ([@tschaub](https://github.com/tschaub))
* [#7577](https://github.com/openlayers/openlayers/pull/7577) - Redistribute things in ol/index.js ([@tschaub](https://github.com/tschaub))
* [#7576](https://github.com/openlayers/openlayers/pull/7576) - Named exports from ol/index.js ([@tschaub](https://github.com/tschaub))
* [#7570](https://github.com/openlayers/openlayers/pull/7570) - Transform sources to ES modules ([@tschaub](https://github.com/tschaub))
* [#7569](https://github.com/openlayers/openlayers/pull/7569) - Remove unnecessary require ([@tschaub](https://github.com/tschaub))
* [#7568](https://github.com/openlayers/openlayers/pull/7568) - Remove unneeded configs from test ([@ahocevar](https://github.com/ahocevar))
* [#7566](https://github.com/openlayers/openlayers/pull/7566) - Proper projection construction ([@tschaub](https://github.com/tschaub))
* [#7565](https://github.com/openlayers/openlayers/pull/7565) - Release v4.6.4 ([@openlayers](https://github.com/openlayers))
* [#7563](https://github.com/openlayers/openlayers/pull/7563) - Use full precision for the declutter box ([@ahocevar](https://github.com/ahocevar))
* [#7559](https://github.com/openlayers/openlayers/pull/7559) - Handle skipping and unskipping features with renderMode: 'image' ([@ahocevar](https://github.com/ahocevar))
* [#7562](https://github.com/openlayers/openlayers/pull/7562) - Remove unused, confusing projection code ([@ahocevar](https://github.com/ahocevar))
* [#7555](https://github.com/openlayers/openlayers/pull/7555) - Release v4.6.3 ([@openlayers](https://github.com/openlayers))
* [#7554](https://github.com/openlayers/openlayers/pull/7554) - Only compose image vector frame when the replay group has changed ([@ahocevar](https://github.com/ahocevar))
* [#7550](https://github.com/openlayers/openlayers/pull/7550) - Update examples to d3.js v4 ([@fredj](https://github.com/fredj))
* [#7548](https://github.com/openlayers/openlayers/pull/7548) - Fix pull request link ([@openlayers](https://github.com/openlayers))
* [#7547](https://github.com/openlayers/openlayers/pull/7547) - Release v4.6.2 ([@openlayers](https://github.com/openlayers))
* [#7546](https://github.com/openlayers/openlayers/pull/7546) - Do not request features for wrapped extent ([@ahocevar](https://github.com/ahocevar))
* [#7545](https://github.com/openlayers/openlayers/pull/7545) - Release v4.6.1 ([@openlayers](https://github.com/openlayers))
* [#7543](https://github.com/openlayers/openlayers/pull/7543) - Donut polygon labels do not get a chance to get rendered ([@ahocevar](https://github.com/ahocevar))
* [#7542](https://github.com/openlayers/openlayers/pull/7542) - Still respect deprecated exceedLength option ([@ahocevar](https://github.com/ahocevar))
* [#7541](https://github.com/openlayers/openlayers/pull/7541) - Fix case of vectorrendertype.js ([@ahocevar](https://github.com/ahocevar))
<details>
<summary>Dependency Updates</summary>
* [#8315](https://github.com/openlayers/openlayers/pull/8315) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8309](https://github.com/openlayers/openlayers/pull/8309) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8311](https://github.com/openlayers/openlayers/pull/8311) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8310](https://github.com/openlayers/openlayers/pull/8310) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8297](https://github.com/openlayers/openlayers/pull/8297) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8293](https://github.com/openlayers/openlayers/pull/8293) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8285](https://github.com/openlayers/openlayers/pull/8285) - Update google-closure-compiler to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8275](https://github.com/openlayers/openlayers/pull/8275) - Update serve to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8271](https://github.com/openlayers/openlayers/pull/8271) - chore(package): update google-closure-compiler to version 20180610.0.1 ([@openlayers](https://github.com/openlayers))
* [#8270](https://github.com/openlayers/openlayers/pull/8270) - chore(package): update rollup to version 0.60.7 ([@openlayers](https://github.com/openlayers))
* [#8266](https://github.com/openlayers/openlayers/pull/8266) - chore(package): update rollup to version 0.60.4 ([@openlayers](https://github.com/openlayers))
* [#8261](https://github.com/openlayers/openlayers/pull/8261) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8260](https://github.com/openlayers/openlayers/pull/8260) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8252](https://github.com/openlayers/openlayers/pull/8252) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8248](https://github.com/openlayers/openlayers/pull/8248) - Update serve to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8247](https://github.com/openlayers/openlayers/pull/8247) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8241](https://github.com/openlayers/openlayers/pull/8241) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8230](https://github.com/openlayers/openlayers/pull/8230) - Update serve to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8208](https://github.com/openlayers/openlayers/pull/8208) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8205](https://github.com/openlayers/openlayers/pull/8205) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8179](https://github.com/openlayers/openlayers/pull/8179) - Update google-closure-compiler to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8146](https://github.com/openlayers/openlayers/pull/8146) - Update coveralls to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8145](https://github.com/openlayers/openlayers/pull/8145) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8140](https://github.com/openlayers/openlayers/pull/8140) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8131](https://github.com/openlayers/openlayers/pull/8131) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8130](https://github.com/openlayers/openlayers/pull/8130) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8128](https://github.com/openlayers/openlayers/pull/8128) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8124](https://github.com/openlayers/openlayers/pull/8124) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8102](https://github.com/openlayers/openlayers/pull/8102) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8095](https://github.com/openlayers/openlayers/pull/8095) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8094](https://github.com/openlayers/openlayers/pull/8094) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8093](https://github.com/openlayers/openlayers/pull/8093) - chore(package): update serve to version 6.5.5 ([@openlayers](https://github.com/openlayers))
* [#8090](https://github.com/openlayers/openlayers/pull/8090) - chore(package): update url-polyfill to version 1.0.13 ([@openlayers](https://github.com/openlayers))
* [#8091](https://github.com/openlayers/openlayers/pull/8091) - chore(package): update karma-firefox-launcher to version 1.1.0 ([@openlayers](https://github.com/openlayers))
* [#8085](https://github.com/openlayers/openlayers/pull/8085) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8071](https://github.com/openlayers/openlayers/pull/8071) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8060](https://github.com/openlayers/openlayers/pull/8060) - Update google-closure-compiler to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8039](https://github.com/openlayers/openlayers/pull/8039) - Update google-closure-compiler to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8028](https://github.com/openlayers/openlayers/pull/8028) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8019](https://github.com/openlayers/openlayers/pull/8019) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8017](https://github.com/openlayers/openlayers/pull/8017) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8018](https://github.com/openlayers/openlayers/pull/8018) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8014](https://github.com/openlayers/openlayers/pull/8014) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8009](https://github.com/openlayers/openlayers/pull/8009) - chore(package): update sinon to version 5.0.0 ([@openlayers](https://github.com/openlayers))
* [#8008](https://github.com/openlayers/openlayers/pull/8008) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8000](https://github.com/openlayers/openlayers/pull/8000) - Update karma-webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7990](https://github.com/openlayers/openlayers/pull/7990) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7984](https://github.com/openlayers/openlayers/pull/7984) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7981](https://github.com/openlayers/openlayers/pull/7981) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7977](https://github.com/openlayers/openlayers/pull/7977) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7972](https://github.com/openlayers/openlayers/pull/7972) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7963](https://github.com/openlayers/openlayers/pull/7963) - chore(package): update url-polyfill to version 1.0.11 ([@openlayers](https://github.com/openlayers))
* [#7962](https://github.com/openlayers/openlayers/pull/7962) - chore(package): update serve to version 6.5.2 ([@openlayers](https://github.com/openlayers))
* [#7959](https://github.com/openlayers/openlayers/pull/7959) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7957](https://github.com/openlayers/openlayers/pull/7957) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7950](https://github.com/openlayers/openlayers/pull/7950) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7945](https://github.com/openlayers/openlayers/pull/7945) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7943](https://github.com/openlayers/openlayers/pull/7943) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7940](https://github.com/openlayers/openlayers/pull/7940) - Update babel-plugin-jsdoc-closure to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7938](https://github.com/openlayers/openlayers/pull/7938) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7925](https://github.com/openlayers/openlayers/pull/7925) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7921](https://github.com/openlayers/openlayers/pull/7921) - Update clean-css-cli to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7916](https://github.com/openlayers/openlayers/pull/7916) - chore(package): update html-webpack-plugin to version 3.0.1 ([@openlayers](https://github.com/openlayers))
* [#7905](https://github.com/openlayers/openlayers/pull/7905) - Update karma-webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7903](https://github.com/openlayers/openlayers/pull/7903) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7901](https://github.com/openlayers/openlayers/pull/7901) - Update karma-webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7898](https://github.com/openlayers/openlayers/pull/7898) - chore(package): update karma-webpack to version 2.0.11 ([@openlayers](https://github.com/openlayers))
* [#7893](https://github.com/openlayers/openlayers/pull/7893) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7891](https://github.com/openlayers/openlayers/pull/7891) - chore(package): update recast to version 0.14.4 ([@openlayers](https://github.com/openlayers))
* [#7886](https://github.com/openlayers/openlayers/pull/7886) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7882](https://github.com/openlayers/openlayers/pull/7882) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7876](https://github.com/openlayers/openlayers/pull/7876) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7877](https://github.com/openlayers/openlayers/pull/7877) - Update webpack-merge to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7865](https://github.com/openlayers/openlayers/pull/7865) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7866](https://github.com/openlayers/openlayers/pull/7866) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7867](https://github.com/openlayers/openlayers/pull/7867) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7858](https://github.com/openlayers/openlayers/pull/7858) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7850](https://github.com/openlayers/openlayers/pull/7850) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7849](https://github.com/openlayers/openlayers/pull/7849) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7848](https://github.com/openlayers/openlayers/pull/7848) - Update nomnom to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7847](https://github.com/openlayers/openlayers/pull/7847) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7845](https://github.com/openlayers/openlayers/pull/7845) - chore(package): update marked to version 0.3.14 ([@openlayers](https://github.com/openlayers))
* [#7841](https://github.com/openlayers/openlayers/pull/7841) - Greenkeeper/babel plugin jsdoc closure 1.2.0 ([@openlayers](https://github.com/openlayers))
* [#7822](https://github.com/openlayers/openlayers/pull/7822) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7813](https://github.com/openlayers/openlayers/pull/7813) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7809](https://github.com/openlayers/openlayers/pull/7809) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7812](https://github.com/openlayers/openlayers/pull/7812) - chore(package): update sinon to version 4.3.0 ([@openlayers](https://github.com/openlayers))
* [#7777](https://github.com/openlayers/openlayers/pull/7777) - Update babel-minify-webpack-plugin to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7759](https://github.com/openlayers/openlayers/pull/7759) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7746](https://github.com/openlayers/openlayers/pull/7746) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7735](https://github.com/openlayers/openlayers/pull/7735) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7729](https://github.com/openlayers/openlayers/pull/7729) - Update jquery to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7732](https://github.com/openlayers/openlayers/pull/7732) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7731](https://github.com/openlayers/openlayers/pull/7731) - Update webpack-dev-server to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7728](https://github.com/openlayers/openlayers/pull/7728) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7720](https://github.com/openlayers/openlayers/pull/7720) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7712](https://github.com/openlayers/openlayers/pull/7712) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7702](https://github.com/openlayers/openlayers/pull/7702) - Update webpack-dev-server to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7701](https://github.com/openlayers/openlayers/pull/7701) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7691](https://github.com/openlayers/openlayers/pull/7691) - Update webpack-dev-server to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7688](https://github.com/openlayers/openlayers/pull/7688) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7685](https://github.com/openlayers/openlayers/pull/7685) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7681](https://github.com/openlayers/openlayers/pull/7681) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7680](https://github.com/openlayers/openlayers/pull/7680) - Update webpack-dev-server to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7667](https://github.com/openlayers/openlayers/pull/7667) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7656](https://github.com/openlayers/openlayers/pull/7656) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7655](https://github.com/openlayers/openlayers/pull/7655) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7651](https://github.com/openlayers/openlayers/pull/7651) - Update karma to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7647](https://github.com/openlayers/openlayers/pull/7647) - Update rbush to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7596](https://github.com/openlayers/openlayers/pull/7596) - Update karma-webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7589](https://github.com/openlayers/openlayers/pull/7589) - chore(package): update karma-webpack to version 2.0.8 ([@openlayers](https://github.com/openlayers))
* [#7571](https://github.com/openlayers/openlayers/pull/7571) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7567](https://github.com/openlayers/openlayers/pull/7567) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7558](https://github.com/openlayers/openlayers/pull/7558) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7552](https://github.com/openlayers/openlayers/pull/7552) - Update jscodeshift to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#7551](https://github.com/openlayers/openlayers/pull/7551) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
</details>

8
changelog/v5.0.1.md Normal file
View File

@@ -0,0 +1,8 @@
# 5.0.1
The v5.0.1 release helps reduce bundle sizes for bundlers that support the `"sideEffects": "false"`option in `package.json`, and fixes website documentation regarding cdn locations and debug build which has been replaced by source maps.
## Fixes
* [#8341](https://github.com/openlayers/openlayers/pull/8341) - Set sideEffects: false flag ([@ahocevar](https://github.com/ahocevar))
* [#8342](https://github.com/openlayers/openlayers/pull/8342) - Fix links and description in quickstart tutorial ([@ahocevar](https://github.com/ahocevar))

7
changelog/v5.0.2.md Normal file
View File

@@ -0,0 +1,7 @@
# 5.0.2
The v5.0.2 release updates the package readme with new example projects.
## Fixes
* [#8332](https://github.com/openlayers/openlayers/pull/8343) - Starter projects ([@tschaub](https://github.com/tschaub))

9
changelog/v5.0.3.md Normal file
View File

@@ -0,0 +1,9 @@
# 5.0.3
The v5.0.3 fixes a regression in the vector tile renderer and improves the built examples and release package.
## Fixes
* [#8364](https://github.com/openlayers/openlayers/pull/8364) - Make examples work in IE11 ([@ahocevar](https://github.com/ahocevar))
* [#8363](https://github.com/openlayers/openlayers/pull/8363) - Autogenerate src/ol/package.json ([@ahocevar](https://github.com/ahocevar))
* [#8371](https://github.com/openlayers/openlayers/pull/8371) - Skip rendering when there is no replay group ([@ahocevar](https://github.com/ahocevar))

64
changelog/v5.1.0.md Normal file
View File

@@ -0,0 +1,64 @@
# v5.1.0
The 5.1 release adds a few new features a handful of fixes. You should be able to upgrade without any additional work. See the one note below regarding `null` geometry coordinates.
We're working toward type checking with TypeScript. This will complete our move away from using the Closure Compiler for type checking and compilation. We're excited about the improved experience for application developers and will highlight some of the benefit in upcoming releases.
### Upgrade Notes
#### Geometry constructor and `setCoordinates` no longer accept `null` coordinates
Geometries (`ol/geom/*`) now need to be constructed with valid coordinates (center for `ol/geom/Circle`) as first constructor argument. The same applies to the `setCoordinates()` (`setCenter() for `ol/geom/Circle`) method.
### New Features and Fixes
* [#8409](https://github.com/openlayers/openlayers/pull/8409) - Add abstract translate to ol/geom/Geometry ([@pjeweb](https://github.com/pjeweb))
* [#8405](https://github.com/openlayers/openlayers/pull/8405) - Minor type fixes ([@tschaub](https://github.com/tschaub))
* [#8401](https://github.com/openlayers/openlayers/pull/8401) - Make webpack's css loader work ([@ahocevar](https://github.com/ahocevar))
* [#8403](https://github.com/openlayers/openlayers/pull/8403) - Markdown links ([@tschaub](https://github.com/tschaub))
* [#8402](https://github.com/openlayers/openlayers/pull/8402) - Type fixes from the typescript checks ([@fredj](https://github.com/fredj))
* [#8400](https://github.com/openlayers/openlayers/pull/8400) - ESLint config update ([@tschaub](https://github.com/tschaub))
* [#8399](https://github.com/openlayers/openlayers/pull/8399) - Copy ol.css to build dir when building package ([@ahocevar](https://github.com/ahocevar))
* [#8397](https://github.com/openlayers/openlayers/pull/8397) - Update rollup ([@tschaub](https://github.com/tschaub))
* [#8385](https://github.com/openlayers/openlayers/pull/8385) - Use class syntax ([@openlayers](https://github.com/openlayers))
* [#8383](https://github.com/openlayers/openlayers/pull/8383) - style/Icon: Add `setAnchor()` method ([@Turbo87](https://github.com/Turbo87))
* [#8368](https://github.com/openlayers/openlayers/pull/8368) - Make render listeners work with image render mode ([@ahocevar](https://github.com/ahocevar))
* [#8376](https://github.com/openlayers/openlayers/pull/8376) - copy ZM values to polygon in makeRegular ([@virtualcitySYSTEMS](https://github.com/virtualcitySYSTEMS))
* [#8372](https://github.com/openlayers/openlayers/pull/8372) - Release v5.0.3 ([@openlayers](https://github.com/openlayers))
* [#8364](https://github.com/openlayers/openlayers/pull/8364) - Make examples work in IE11 ([@ahocevar](https://github.com/ahocevar))
* [#8363](https://github.com/openlayers/openlayers/pull/8363) - Autogenerate src/ol/package.json ([@ahocevar](https://github.com/ahocevar))
* [#8371](https://github.com/openlayers/openlayers/pull/8371) - Skip rendering when there is no replay group ([@ahocevar](https://github.com/ahocevar))
* [#8362](https://github.com/openlayers/openlayers/pull/8362) - Smart flat coordinates ([@ahocevar](https://github.com/ahocevar))
* [#8352](https://github.com/openlayers/openlayers/pull/8352) - Set `sideEffects` to `false` instead of `"false"` ([@tschaub](https://github.com/tschaub))
* [#8351](https://github.com/openlayers/openlayers/pull/8351) - Fix typo in release notes ([@ahocevar](https://github.com/ahocevar))
* [#8350](https://github.com/openlayers/openlayers/pull/8350) - Updates for v5.0.2 ([@ahocevar](https://github.com/ahocevar))
* [#8349](https://github.com/openlayers/openlayers/pull/8349) - Release v5.0.1 ([@ahocevar](https://github.com/ahocevar))
* [#8343](https://github.com/openlayers/openlayers/pull/8343) - Starter projects ([@tschaub](https://github.com/tschaub))
* [#8347](https://github.com/openlayers/openlayers/pull/8347) - Fix typos in release notes ([@ahocevar](https://github.com/ahocevar))
* [#8346](https://github.com/openlayers/openlayers/pull/8346) - Release v5.0.1 ([@openlayers](https://github.com/openlayers))
* [#8342](https://github.com/openlayers/openlayers/pull/8342) - Fix links and description in quickstart tutorial ([@ahocevar](https://github.com/ahocevar))
* [#8344](https://github.com/openlayers/openlayers/pull/8344) - Updated issue and pr templates ([@tschaub](https://github.com/tschaub))
* [#8341](https://github.com/openlayers/openlayers/pull/8341) - Set sideEffects: false flag ([@ahocevar](https://github.com/ahocevar))
* [#8333](https://github.com/openlayers/openlayers/pull/8333) - Fix wrong return type for readHref function ([@openlayers](https://github.com/openlayers))
* [#8329](https://github.com/openlayers/openlayers/pull/8329) - Better jsdoc typing ([@fredj](https://github.com/fredj))
* [#8319](https://github.com/openlayers/openlayers/pull/8319) - Remove reference to setProj4 function in documentation ([@fredj](https://github.com/fredj))
<details>
<summary>Dependency Updates</summary>
* [#8410](https://github.com/openlayers/openlayers/pull/8410) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8408](https://github.com/openlayers/openlayers/pull/8408) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8386](https://github.com/openlayers/openlayers/pull/8386) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8382](https://github.com/openlayers/openlayers/pull/8382) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8373](https://github.com/openlayers/openlayers/pull/8373) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8355](https://github.com/openlayers/openlayers/pull/8355) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8354](https://github.com/openlayers/openlayers/pull/8354) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8348](https://github.com/openlayers/openlayers/pull/8348) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8338](https://github.com/openlayers/openlayers/pull/8338) - Update recast to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8332](https://github.com/openlayers/openlayers/pull/8332) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8326](https://github.com/openlayers/openlayers/pull/8326) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8321](https://github.com/openlayers/openlayers/pull/8321) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8318](https://github.com/openlayers/openlayers/pull/8318) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
</details>

3
changelog/v5.1.1.md Normal file
View File

@@ -0,0 +1,3 @@
# 5.1.1
The 5.1.1 release is a patch to include the readme in the package. See the [5.1.0 notes](https://github.com/openlayers/openlayers/releases/tag/v5.1.0) for detail on the 5.1 release.

5
changelog/v5.1.2.md Normal file
View File

@@ -0,0 +1,5 @@
# 5.1.2
The 5.1.2 release is a patch to fix the API docs. See the [5.1.0 notes](https://github.com/openlayers/openlayers/releases/tag/v5.1.0) for detail on the 5.1 release.
* [#8413](https://github.com/openlayers/openlayers/pull/8413) - Remove extra curly in type ([@tschaub](https://github.com/tschaub))

6
changelog/v5.1.3.md Normal file
View File

@@ -0,0 +1,6 @@
# 5.1.3
The 5.1.3 release is a patch to fix the API docs and the legacy full build. See the [5.1.0 notes](https://github.com/openlayers/openlayers/releases/tag/v5.1.0) for detail on the 5.1 release.
* [#8417](https://github.com/openlayers/openlayers/pull/8417) - Minor doc updates ([@tschaub](https://github.com/tschaub))
* [#8418](https://github.com/openlayers/openlayers/pull/8418) - Set api annotation on classdesc, not constructor ([@ahocevar](https://github.com/ahocevar))

86
changelog/v5.2.0.md Normal file
View File

@@ -0,0 +1,86 @@
# v5.1.0
The 5.2 release adds a few new features a handful of fixes, including regressions that were reported after the 5.1 release. You should be able to upgrade without any additional work. See the one note below regarding `snapToPixel` on `ol/style/Image` and subclasses.
We're still working toward type checking with TypeScript. Until that is complete, we apologize for some flwas in the online API documentation. We're excited about the improved experience for application developers when the effort is finished, and will highlight some of the benefit in upcoming releases.
### Upgrade Notes
#### Removal of the `snapToPixel` option for `ol/style/Image` subclasses
The `snapToPixel` option has been removed, and the `getSnapToPixel` and `setSnapToPixel` methods are deprecated.
The renderer now snaps to integer pixels when no interaction or animation is running to get crisp rendering. During interaction or animation, it does not snap to integer pixels to avoid jitter.
When rendering with the Immediate API, symbols will no longer be snapped to integer pixels. To get crisp images, set `context.imageSmoothingEnabled = false` before rendering with the Immediate API, and `context.imageSmoothingEnabled = true` afterwards.
### New Features and Fixes
* [#8511](https://github.com/openlayers/openlayers/pull/8511) - Update IGN API key ([@openlayers](https://github.com/openlayers))
* [#8547](https://github.com/openlayers/openlayers/pull/8547) - Fix port number in developing doc ([@pgiraud](https://github.com/pgiraud))
* [#8546](https://github.com/openlayers/openlayers/pull/8546) - Update projection FAQ for v5 ([@ahocevar](https://github.com/ahocevar))
* [#8481](https://github.com/openlayers/openlayers/pull/8481) - Expose some internal functions ([@gberaudo](https://github.com/gberaudo))
* [#8510](https://github.com/openlayers/openlayers/pull/8510) - Fix WMTS URLs with dimensions ([@gberaudo](https://github.com/gberaudo))
* [#8524](https://github.com/openlayers/openlayers/pull/8524) - Fix compatiblity with XHTML content type ([@NeoRaider](https://github.com/NeoRaider))
* [#8532](https://github.com/openlayers/openlayers/pull/8532) - Add 'rendercomplete' event ([@ahocevar](https://github.com/ahocevar))
* [#8529](https://github.com/openlayers/openlayers/pull/8529) - Update link to base class in docs ([@TDesjardins](https://github.com/TDesjardins))
* [#8528](https://github.com/openlayers/openlayers/pull/8528) - Update link to base class in docs ([@TDesjardins](https://github.com/TDesjardins))
* [#8525](https://github.com/openlayers/openlayers/pull/8525) - Re-export Projection from ol/proj for convenience ([@tschaub](https://github.com/tschaub))
* [#8499](https://github.com/openlayers/openlayers/pull/8499) - Round center in viewState to pixels ([@ahocevar](https://github.com/ahocevar))
* [#8520](https://github.com/openlayers/openlayers/pull/8520) - Remove redundant if block ([@openlayers](https://github.com/openlayers))
* [#8515](https://github.com/openlayers/openlayers/pull/8515) - More convenient select and sketch layer management ([@ahocevar](https://github.com/ahocevar))
* [#8503](https://github.com/openlayers/openlayers/pull/8503) - Avoid block scope issues in transpiled code ([@ahocevar](https://github.com/ahocevar))
* [#8490](https://github.com/openlayers/openlayers/pull/8490) - WMTS getCapabilities readCoodinates more than one whitespace delimiter ([@MarquesDeAzevedo](https://github.com/MarquesDeAzevedo))
* [#8489](https://github.com/openlayers/openlayers/pull/8489) - Use .prototype. only where necessary ([@ahocevar](https://github.com/ahocevar))
* [#8478](https://github.com/openlayers/openlayers/pull/8478) - Check font availability with multiple font weights ([@ahocevar](https://github.com/ahocevar))
* [#8483](https://github.com/openlayers/openlayers/pull/8483) - Don't create Polygon with null coordinates ([@fredj](https://github.com/fredj))
* [#8471](https://github.com/openlayers/openlayers/pull/8471) - Add getUrl and getImageExtent to ImageStatic API ([@samuel-girard](https://github.com/samuel-girard))
* [#8470](https://github.com/openlayers/openlayers/pull/8470) - Update Tile loading API docs ([@scroach](https://github.com/scroach))
* [#8477](https://github.com/openlayers/openlayers/pull/8477) - Expose original getGutter ([@gberaudo](https://github.com/gberaudo))
* [#8466](https://github.com/openlayers/openlayers/pull/8466) - Add onFocusOnly option to interaction defaults ([@ahocevar](https://github.com/ahocevar))
* [#8465](https://github.com/openlayers/openlayers/pull/8465) - Do not prevent default on pointermove ([@ahocevar](https://github.com/ahocevar))
* [#8461](https://github.com/openlayers/openlayers/pull/8461) - Fix double backtick typo ([@lionralfs](https://github.com/lionralfs))
* [#8452](https://github.com/openlayers/openlayers/pull/8452) - Remove extra translate function in Geometry, add missing api tag ([@fredj](https://github.com/fredj))
* [#8451](https://github.com/openlayers/openlayers/pull/8451) - Remove unimplemented functions ([@fredj](https://github.com/fredj))
* [#8450](https://github.com/openlayers/openlayers/pull/8450) - Mark properties of ReadOptions and WriteOptions as optional ([@fredj](https://github.com/fredj))
* [#8443](https://github.com/openlayers/openlayers/pull/8443) - Explicit void ([@tschaub](https://github.com/tschaub))
* [#8437](https://github.com/openlayers/openlayers/pull/8437) - Avoid shadowing EventTarget ([@tschaub](https://github.com/tschaub))
* [#8439](https://github.com/openlayers/openlayers/pull/8439) - Fewer dots in types ([@tschaub](https://github.com/tschaub))
* [#8441](https://github.com/openlayers/openlayers/pull/8441) - Fix loaded script for the example-verbatim examples ([@fredj](https://github.com/fredj))
* [#8435](https://github.com/openlayers/openlayers/pull/8435) - Call setCoordinates on the point instance ([@fredj](https://github.com/fredj))
* [#8428](https://github.com/openlayers/openlayers/pull/8428) - Type name on same line as type ([@tschaub](https://github.com/tschaub))
* [#8422](https://github.com/openlayers/openlayers/pull/8422) - Improve JSDoc such that `ng build --prod` with angular/cli 6.0.8 succeeds again ([@jkoelewijn](https://github.com/jkoelewijn))
* [#8396](https://github.com/openlayers/openlayers/pull/8396) - Fix ol.interaction.Draw~createRegularPolygon ([@iamplex](https://github.com/iamplex))
* [#8420](https://github.com/openlayers/openlayers/pull/8420) - Keep function names when building examples ([@ahocevar](https://github.com/ahocevar))
* [#8419](https://github.com/openlayers/openlayers/pull/8419) - Release v5.1.3 ([@tschaub](https://github.com/tschaub))
* [#8417](https://github.com/openlayers/openlayers/pull/8417) - Minor doc updates ([@tschaub](https://github.com/tschaub))
* [#8418](https://github.com/openlayers/openlayers/pull/8418) - Set api annotation on classdesc, not constructor ([@ahocevar](https://github.com/ahocevar))
* [#8414](https://github.com/openlayers/openlayers/pull/8414) - Updates for 5.1.2 ([@tschaub](https://github.com/tschaub))
* [#8413](https://github.com/openlayers/openlayers/pull/8413) - Remove extra curly in type ([@tschaub](https://github.com/tschaub))
* [#8412](https://github.com/openlayers/openlayers/pull/8412) - Changes for 5.1.1. ([@tschaub](https://github.com/tschaub))
<details>
<summary>Dependency Updates</summary>
* [#8543](https://github.com/openlayers/openlayers/pull/8543) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8541](https://github.com/openlayers/openlayers/pull/8541) - Update proj4 to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8542](https://github.com/openlayers/openlayers/pull/8542) - Update rollup-plugin-commonjs to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8533](https://github.com/openlayers/openlayers/pull/8533) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8530](https://github.com/openlayers/openlayers/pull/8530) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8522](https://github.com/openlayers/openlayers/pull/8522) - Update marked to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8505](https://github.com/openlayers/openlayers/pull/8505) - Update karma to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8501](https://github.com/openlayers/openlayers/pull/8501) - Update rollup-plugin-commonjs to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8495](https://github.com/openlayers/openlayers/pull/8495) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8493](https://github.com/openlayers/openlayers/pull/8493) - Update clean-css-cli to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8491](https://github.com/openlayers/openlayers/pull/8491) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8486](https://github.com/openlayers/openlayers/pull/8486) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8476](https://github.com/openlayers/openlayers/pull/8476) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8475](https://github.com/openlayers/openlayers/pull/8475) - Update clean-css-cli to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8469](https://github.com/openlayers/openlayers/pull/8469) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8453](https://github.com/openlayers/openlayers/pull/8453) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8447](https://github.com/openlayers/openlayers/pull/8447) - Update rollup-plugin-commonjs to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
* [#8426](https://github.com/openlayers/openlayers/pull/8426) - Update webpack to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
</details>

View File

@@ -168,9 +168,9 @@ function generateSourceFiles(sourceFiles) {
* for display purposes. This function mutates the original arrays.
*
* @private
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
* @param {Array<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
* check.
* @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
* @param {Array<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
*/
function attachModuleSymbols(doclets, modules) {
const symbols = {};
@@ -313,7 +313,7 @@ exports.publish = function(taffyData, opts, tutorials) {
if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
caption = RegExp.$1;
code = RegExp.$3;
code = RegExp.$3;
}
return {

View File

@@ -4,6 +4,13 @@ var version = obj.packageInfo.version;
<!DOCTYPE html>
<html lang="en">
<head>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-2577926-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-2577926-1');
</script>
<meta charset="utf-8">
<title>OpenLayers v<?js= version ?> API - <?js= title ?></title>
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch"></script>

21
config/rollup.js Normal file
View File

@@ -0,0 +1,21 @@
// Rollup configuration for the full build
import noderesolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import {uglify} from 'rollup-plugin-uglify';
import buble from 'rollup-plugin-buble';
import sourcemaps from 'rollup-plugin-sourcemaps';
export default {
input: 'build/index.js',
output: [
{file: 'build/ol.js', format: 'iife', sourcemap: true}
],
plugins: [
noderesolve(),
commonjs(),
buble(),
uglify(),
sourcemaps()
]
};

View File

@@ -1,14 +0,0 @@
const webpack = require('webpack');
const MinifyPlugin = require('babel-minify-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'build/ol.js'
},
devtool: 'source-map',
plugins: [
new webpack.optimize.ModuleConcatenationPlugin(),
new MinifyPlugin()
]
};

View File

@@ -5,7 +5,7 @@ layout: doc.hbs
# Frequently Asked Questions (FAQ)
Certain questions arise more often than others when users ask for help. This
Certain questions arise more often than others when users ask for help. This
document tries to list some of the common questions that frequently get asked,
e.g. on [Stack Overflow](http://stackoverflow.com/questions/tagged/openlayers).
@@ -65,20 +65,19 @@ var map = new ol.Map({
```
```javascript
// To use other projections, you have to register the projection in OpenLayers:
// To use other projections, you have to register the projection in OpenLayers.
// This can easily be done with [https://proj4js.org](proj4)
//
// By default OpenLayers does not know about the EPSG:21781 (Swiss) projection.
// So we create a projection instance for EPSG:21781 and pass it to
// ol.proj.addProjection to make it available to the library for lookup by its
// code.
var swissProjection = new ol.proj.Projection({
code: 'EPSG:21781',
// The extent is used to determine zoom level 0. Recommended values for a
// projection's validity extent can be found at https://epsg.io/.
extent: [485869.5728, 76443.1884, 837076.5648, 299941.7864],
units: 'm'
});
ol.proj.addProjection(swissProjection);
proj4.defs('EPSG:21781',
'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 ' +
'+x_0=600000 +y_0=200000 +ellps=bessel ' +
'+towgs84=660.077,13.551,369.344,2.484,1.783,2.939,5.66 +units=m +no_defs');
ol.proj.proj4.register(proj4);
var swissProjection = ol.proj.get('EPSG:21781');
// we can now use the projection:
var map = new ol.Map({
@@ -287,7 +286,7 @@ been populated with features), you should use an event listener function on the
vector.getSource().on('change', function(evt){
var source = evt.target;
if (source.getState() === 'ready') {
var numFeatures = source.getFeatures().length;
var numFeatures = source.getFeatures().length;
console.log("Count after change: " + numFeatures);
}
});

View File

@@ -5,6 +5,11 @@ layout: doc.hbs
# Quick Start
This primer shows you how to put a simple map on a web page.
**For production, we strongly recommend bundling the application together with its dependencies, as explained in the [Building an OpenLayers Application](./tutorials/bundle.html) tutorial.**
## Put a map on a page
Below you'll find a complete working example. Create a new file, copy in the contents below, and open in a browser:
@@ -13,14 +18,14 @@ Below you'll find a complete working example. Create a new file, copy in the co
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://openlayers.org/en/{{ latest }}/css/ol.css" type="text/css">
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/{{ latest }}/css/ol.css" type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="https://openlayers.org/en/{{ latest }}/build/ol.js" type="text/javascript"></script>
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/{{ latest }}/build/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
@@ -55,7 +60,7 @@ To include a map a web page you will need 3 things:
### Include OpenLayers
```xml
<script src="https://openlayers.org/en/{{ latest }}/build/ol.js" type="text/javascript"></script>
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/{{ latest }}/build/ol.js"></script>
```
The first part is to include the JavaScript library. For the purpose of this tutorial, here we simply point to the openlayers.org website to get the whole library. In a production environment, we would build a custom version of the library including only the module needed for our application.
@@ -125,7 +130,7 @@ The `layers: [ ... ]` array is used to define the list of layers available in th
]
```
Layers in OpenLayers are defined with a type (Image, Tile or Vector) which contains a source. The source is the protocol used to get the map tiles. You can consult the list of [available layer sources here](/en/{{ latest }}/apidoc/ol.source.html)
Layers in OpenLayers are defined with a type (Image, Tile or Vector) which contains a source. The source is the protocol used to get the map tiles.
The next part of the `Map` object is the `View`. The view allows to specify the center, resolution, and rotation of the map. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out.

View File

@@ -0,0 +1,49 @@
---
title: Introduction
layout: doc.hbs
---
# Introduction
## Objectives
OpenLayers is a modular, high-performance, feature-packed library for displaying and interacting with maps and geospatial data.
The library comes with built-in support for a wide range of commercial and free image and vector tile sources, and the most popular open and proprietary vector data formats. With OpenLayers's map projection support, data can be in any projection.
## Public API
OpenLayers is available as [`ol` npm package](https://npmjs.com/package/ol), which provides all modules of the officially supported [API](../../apidoc).
## Renderers and Browser Support
By default, OpenLayers uses a performance optimized Canvas renderer. An experimental WebGL renderer (without text rendering support) is also avaialble.
OpenLayers runs on all modern browsers that support [HTML5](https://html.spec.whatwg.org/multipage/) and [ECMAScript 5](http://www.ecma-international.org/ecma-262/5.1/). This includes Chrome, Firefox, Safari and Edge. For older browsers and platforms like Internet Explorer (down to version 9) and Android 4.x, [polyfills](http://polyfill.io), the application bundle needs to be transpiled (e.g. using [Babel](https://babeljs.io)) and bundled with polyfills for `requestAnimationFrame`, `Element.prototype.classList` and `URL`.
The library is intended for use on both desktop/laptop and mobile devices, and supports pointer and touch interactions.
## Module and Naming Conventions
OpenLayers modules with CamelCase names provide classes as default exports, and may contain additional constants or functions as named exports:
```js
import Map from 'ol/Map';
import View from 'ol/View';
```
Class hierarchies grouped by their parent are provided in a subfolder of the package, e.g. `layer/`.
For convenience, these are also available as named exports, e.g.
```js
import {Map, View} from 'ol';
import {Tile, Vector} from 'ol/layer';
```
In addition to these re-exported classes, modules with lowercase names also provide constants or functions as named exports:
```js
import {inherits} from 'ol';
import {fromLonLat} from 'ol/proj';
```

View File

@@ -1,87 +0,0 @@
---
title: Basic project setup using NPM and Browserify
layout: doc.hbs
---
# Introduction
When going beyond modifying existing examples you might be looking for a way to setup your own code with dependency management together with external dependencies like OpenLayers.
This tutorial serves as a suggested project setup using NPM and Browserify for the most basic needs. There are several other options, and in particular you might be interested in a more modern one (ES2015) [using Webpack with OpenLayers](https://gist.github.com/tschaub/79025aef325cd2837364400a105405b8).
## Initial steps
Create a new empty directory for your project and navigate to it by running `mkdir new-project && cd new-project`. Initialize your project using `npm init` and answer the questions asked.
Add OpenLayers as dependency to your application with `npm install --save ol`.
At this point you can ask NPM to add required development dependencies by running
```
npm install --save-dev cssify browserify cssify http-server uglify-js watchify
npm install --save-dev babelify babel-plugin-transform-es2015-modules-commonjs
```
We will be using `cssify` to include the css definitions required by OpenLayers in our bundle. `watchify`, `http-server` and `uglify-js` are used to monitor for changes and to build into a minified bundle. `babelify` and `babel-plugin-transform-es2015-modules-commonjs` are used to make the `ol` package, which was created using ES2015 modules, work with CommonJS.
## Application code and index.html
Place your application code in `index.js`. Here is a simple starting point:
```js
require('ol/ol.css');
var ol_Map = require('ol/map').default;
var ol_layer_Tile = require('ol/layer/tile').default;
var ol_source_OSM = require('ol/source/osm').default;
var ol_View = require('ol/view').default;
var map = new ol_Map({
target: 'map',
layers: [
new ol_layer_Tile({
source: new ol_source_OSM()
})
],
view: new ol_View({
center: [0, 0],
zoom: 0
})
});
```
You will also need an `ìndex.html` file that will use your bundle. Here is a simple example:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using Browserify with OpenLayers</title>
<style>
#map {
width: 400px;
height: 250px;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="bundle.js"></script>
</body>
</html>
```
## Creating a bundle
With simple scripts you can introduce the commands `npm run build` and `npm start` to manually build your bundle and watch for changes, respectively. Add the following to the script section in `package.json`:
```json
"scripts": {
"start": "watchify index.js -g cssify --outfile bundle.js & http-server",
"build": "browserify -g cssify index.js | uglifyjs --compress --output bundle.js"
}
```
Now to test your application open http://localhost:8080/ in your browser. `watchify` will update `bundle.js` whenever you change something. You simply need to reload the page in your browser to see the changes.
```
$ npm start
```
Note that `bundle.js` will contain your application code and all dependencies used in your application. From OpenLayers, it only contains the required components.

93
doc/tutorials/bundle.md Normal file
View File

@@ -0,0 +1,93 @@
---
title: Basic project setup using NPM and Parcel
layout: doc.hbs
---
# Introduction
Modern JavaScript works best when using and authoring modules. The recommended way of using OpenLayers is installing the [`ol`](https://npmjs.com/package/ol) package. This tutorial walks you through setting up a simple dev environment, which requires [node](https://nodejs.org) for everything to work.
In this tutorial, we will be using [Parcel](https://parceljs.org) to bundle our application. There are several other options, some of which are linked from the [README](https://npmjs.com/package/ol).
## Initial steps
Create a new empty directory for your project and navigate to it by running `mkdir new-project && cd new-project`. Initialize your project using `npm init` and answer the questions asked.
Add OpenLayers as dependency to your application with
npm install ol
At this point you can ask NPM to add required development dependencies by running
npm install --save-dev parcel-bundler
## Application code and index.html
Place your application code in `index.js`. Here is a simple starting point:
```js
import 'ol/ol.css';
import {Map, View} from 'ol';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
const map = new Map({
target: 'map',
layers: [
new TileLayer({
source: new OSM()
})
],
view: new View({
center: [0, 0],
zoom: 0
})
});
```
You will also need an `index.html` file that will use your bundle. Here is a simple example:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using Parcel with OpenLayers</title>
<style>
#map {
width: 400px;
height: 250px;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="./index.js"></script>
</body>
</html>
```
## Creating a bundle
With simple scripts you can introduce the commands `npm run build` and `npm start` to manually build your bundle and watch for changes, respectively. Add the following to the script section in `package.json`:
```json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "parcel index.html",
"build": "parcel build --public-url . index.html"
}
```
That's it. Now to run your application, enter
npm start
in your console. To test your application, open http://localhost:1234/ in your browser. Whenever you change something, the page will reload automatically to show the result of your changes.
Note that a single JavaScript file with all your application code and all dependencies used in your application has been created. From the OpenLayers package, it only contains the required components.
To create a production bundle of your application, simply type
npm run build
and copy the `dist/` folder to your production server.

View File

@@ -6,68 +6,85 @@ layout: doc.hbs
# Basic Concepts
## Map
The core component of OpenLayers is the map (`ol.Map`). It is rendered to a `target` container (e.g. a `div` element on the web page that contains the map). All map properties can either be configured at construction time, or by using setter methods, e.g. `setTarget()`.
The core component of OpenLayers is the map (`ol/Map`). It is rendered to a `target` container (e.g. a `div` element on the web page that contains the map). All map properties can either be configured at construction time, or by using setter methods, e.g. `setTarget()`.
The markup below could be used to create a `<div>` that contains your map.
```xml
<div id="map" style="width: 100%, height: 400px"></div>
<script>
var map = new ol.Map({target: 'map'});
</script>
```
The script below constructs a map that is rendered in the `<div>` above, using the `map` id of the element as a selector.
```js
import Map from 'ol/Map';
var map = new Map({target: 'map'});
```
## View
`ol.Map` is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of an `ol.View` instance.
The map is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of a `ol/View` instance.
```js
map.setView(new ol.View({
center: [0, 0],
zoom: 2
}));
import View from 'ol/View';
map.setView(new View({
center: [0, 0],
zoom: 2
}));
```
An `ol.View` also has a `projection`. The projection determines the coordinate system of the `center` and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units.
A `View` also has a `projection`. The projection determines the coordinate system of the `center` and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units.
The `zoom` option is a convenient way to specify the map resolution. The available zoom levels are determined by `maxZoom` (default: 28), `zoomFactor` (default: 2) and `maxResolution` (default is calculated in such a way that the projection's validity extent fits in a 256x256 pixel tile). Starting at zoom level 0 with a resolution of `maxResolution` units per pixel, subsequent zoom levels are calculated by dividing the previous zoom level's resolution by `zoomFactor`, until zoom level `maxZoom` is reached.
## Source
To get remote data for a layer, OpenLayers uses `ol.source.Source` subclasses. These are available for free and commercial map tile services like OpenStreetMap or Bing, for OGC sources like WMS or WMTS, and for vector data in formats like GeoJSON or KML.
To get remote data for a layer, OpenLayers uses `ol/source/Source` subclasses. These are available for free and commercial map tile services like OpenStreetMap or Bing, for OGC sources like WMS or WMTS, and for vector data in formats like GeoJSON or KML.
```js
var osmSource = new ol.source.OSM();
import OSM from 'ol/source/OSM';
var osmSource = OSM();
```
## Layer
A layer is a visual representation of data from a `source`. OpenLayers has three basic types of layers: `ol.layer.Tile`, `ol.layer.Image` and `ol.layer.Vector`.
`ol.layer.Tile` is for layer sources that provide pre-rendered, tiled images in grids that are organized by zoom levels for specific resolutions.
A layer is a visual representation of data from a `source`. OpenLayers has four basic types of layers:
`ol.layer.Image` is for server rendered images that are available for arbitrary extents and resolutions.
`ol.layer.Vector` is for vector data that is rendered client-side.
* `ol/layer/Tile` - Renders sources that provide tiled images in grids that are organized by zoom levels for specific resolutions.
* `ol/layer/Image` - Renders sources that provide map images at arbitrary extents and resolutions.
* `ol/layer/Vector` - Renders vector data client-side.
* `ol/layer/VectorTile` - Renders data that is provided as vector tiles.
```js
var osmLayer = new ol.layer.Tile({source: osmSource});
map.addLayer(osmLayer);
import TileLayer from 'ol/layer/Tile';
var osmLayer = new TileLayer({source: osmSource});
map.addLayer(osmLayer);
```
## Putting it all together
The above snippets can be combined into a single script that renders a map with a single tile layer:
The above snippets can be conflated to a self contained map configuration with view and layers:
```js
import Map from 'ol/Map';
import View from 'ol/View';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/source/Tile';
```xml
<div id="map" style="width: 100%, height: 400px"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
center: [0, 0],
zoom: 2
}),
target: 'map'
});
</script>
new Map({
layers: [
new TileLayer({source: new OSM()})
],
view: new View({
center: [0, 0],
zoom: 2
}),
target: 'map'
});
```

View File

@@ -5,8 +5,7 @@ layout: doc.hbs
# Tutorials
* [Introduction to OpenLayers](introduction.html)
* [Building an OpenLayers Application](bundle.html)
* [Basic Concepts](concepts.html)
* [Create Custom Builds](custom-builds.html)
* [Bundle Application and OpenLayers using Browserify](browserify.html)
* [Some Background on OpenLayers](background.html)
* [Raster Reprojection](raster-reprojection.html)

View File

@@ -1,39 +0,0 @@
---
title: Introduction
layout: doc.hbs
---
# Introduction
## Objectives
With version 3, the OpenLayers web mapping library was fundamentally redesigned. The widely used version 2 dates from the early days of Javascript development, and was increasingly showing its age. So it has been rewritten from the ground up to use modern design patterns.
The initial release aims to support much of the functionality provided by version 2, with support for a wide range of commercial and free tile sources, and the most popular open-source vector data formats. As with version 2, data can be in any projection. The initial release also adds some additional functionality, such as the ability to easily rotate or animate maps.
It is also designed such that major new features, such as displaying 3D maps, or using WebGL to quickly display large vector data sets, can be added in later releases.
## Public API
Using the advanced optimizations of the Closure Compiler means that properties and methods are renamed &ndash; `longMeaningfulName` might become `xB` &ndash; and so are effectively unusable in applications using the library. To be usable, they have to be explicitly `exported`. This means the exported names, those not renamed, effectively become the public API of the library. These __exportable__ properties and methods are marked in the source, and documented in the [API docs](../../apidoc). This is the officially supported API of the library. A build containing all these exportable names is known as a __full build__. A hosted version of this is available, which can be used by any application.
## Custom Builds
Unlike in, say, Node, where a module's exports are fixed in the source, with Closure Compiler, exports can be defined at compile time. This makes it easy to create builds that are customized to the needs of a particular site or application: a __custom build__ only exports those properties and methods needed by the site or application. As the full build is large, and will probably become larger as new features are added to the API, it's recommended that sites create a custom build for production software.
## Renderers and Browser Support
The library currently includes two renderers: Canvas and WebGL. Both of them support both raster data from tile/image servers, and vector data; WebGL however does not support labels. Clearly only those browsers that [support Canvas](http://caniuse.com/canvas) can use the Canvas renderer. Equally, the WebGL renderer can only be used on those devices and [browsers](http://caniuse.com/webgl) that support WebGL.
OpenLayers runs on all modern browsers that support [HTML5](https://html.spec.whatwg.org/multipage/) and [ECMAScript 5](http://www.ecma-international.org/ecma-262/5.1/). This includes Chrome, Firefox, Safari and Edge. For older browsers and platforms like Internet Explorer (down to version 9) and Android 4.x, [polyfills](http://polyfill.io) for `requestAnimationFrame` and `Element.prototype.classList` are required, and using the KML format requires a polyfill for `URL`.
The library is intended for use on both desktop/laptop and mobile devices.
## Objects and Naming Conventions
The top-level namespace is `ol` (basically, `var ol = {};`). Subdivisions of this are:
* further namespaces, such as `ol.layer`; these have a lower-case initial
* simple objects containing static properties and methods, such as `ol.easing`; these also have a lower-case initial
* types, which have an upper-case initial. These are mainly 'classes', which here means a constructor function with prototypal inheritance, such as `ol.Map` or `ol.layer.Vector` (the Vector class within the layer namespace). There are however other, simpler, types, such as `ol.Extent`, which is an array.
Class namespaces, such as `ol.layer` have a base class type with the same name, such as `ol.layer.Layer`. These are mainly abstract classes, from which the other subclasses inherit.
Source files are similarly organised, with a directory for each class namespace. Names are however all lower-case, for example, `ol/layer/vector.js`.
OpenLayers follows the convention that the names of private properties and methods, that is, those that are not part of the API, end in an underscore. In general, instance properties are private and accessed using accessors.

View File

@@ -10,18 +10,22 @@ Transformation of the map projections of the image happens directly in a web bro
The view in any Proj4js supported coordinate reference system is possible and previously incompatible layers can now be combined and overlaid.
# Usage
The API usage is very simple. Just specify proper projection (using [EPSG](https://epsg.io) code) on `ol.View`:
``` javascript
var map = new ol.Map({
The API usage is very simple. Just specify proper projection (e.g. using [EPSG](https://epsg.io) code) on `ol/View`:
```js
import {Map, View} from 'ol';
import TileLayer from 'ol/layer/Tile';
import TileWMS from 'ol/source/TileWMS';
var map = new Map({
target: 'map',
view: new ol.View({
view: new View({
projection: 'EPSG:3857', //HERE IS THE VIEW PROJECTION
center: [0, 0],
zoom: 2
}),
layers: [
new ol.layer.Tile({
source: new ol.source.TileWMS({
new TileLayer({
source: new TileWMS({
projection: 'EPSG:4326', //HERE IS THE DATA SOURCE PROJECTION
url: 'http://demo.boundlessgeo.com/geoserver/wms',
params: {
@@ -32,7 +36,7 @@ var map = new ol.Map({
]
});
```
If a source (based on `ol.source.TileImage` or `ol.source.Image`) has a projection different from the current `ol.View`s projection then the reprojection happens automatically under the hood.
If a source (based on `ol/source/TileImage` or `ol/source/Image`) has a projection different from the current `ol/View`s projection then the reprojection happens automatically under the hood.
### Examples
- [Raster reprojection demo](https://openlayers.org/en/master/examples/reprojection.html)
@@ -41,26 +45,29 @@ If a source (based on `ol.source.TileImage` or `ol.source.Image`) has a projecti
- [Image reprojection](https://openlayers.org/en/master/examples/reprojection-image.html)
### Custom projection
The easiest way to use a custom projection is to add the [Proj4js](http://proj4js.org/) library to your project and then define the projection using a proj4 definition string.
The easiest way to use a custom projection is to add the [Proj4js](http://proj4js.org/) library to your project and then define the projection using a proj4 definition string. It can be installed with
npm install proj4
Following example shows definition of a [British National Grid](https://epsg.io/27700):
``` html
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js"></script>
```
```js
import proj4 from 'proj4';
import {get as getProjection, register} from 'ol/proj';
``` javascript
proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
'+x_0=400000 +y_0=-100000 +ellps=airy ' +
'+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
'+units=m +no_defs');
var proj27700 = ol.proj.get('EPSG:27700');
register(proj4);
var proj27700 = getProjection('EPSG:27700');
proj27700.setExtent([0, 0, 700000, 1300000]);
```
### Change of the view projection
To switch the projection used to display the map you have to set a new `ol.View` with selected projection on the `ol.Map`:
To switch the projection used to display the map you have to set a new `ol/View` with selected projection on the `ol/Map`:
``` javascript
map.setView(new ol.View({
map.setView(new View({
projection: 'EPSG:27700',
center: [400000, 650000],
zoom: 4
@@ -69,16 +76,16 @@ map.setView(new ol.View({
## TileGrid and Extents
When reprojection is needed, new tiles (in the target projection) are under the hood created from the original source tiles.
The TileGrid of the reprojected tiles is by default internally constructed using `ol.tilegrid.getForProjection(projection)`.
The TileGrid of the reprojected tiles is by default internally constructed using `ol/tilegrid~getForProjection(projection)`.
The projection should have extent defined (see above) for this to work properly.
Alternatively, a custom target TileGrid can be constructed manually and set on the source instance using `ol.source.TileImage#setTileGridForProjection(projection, tilegrid)`.
Alternatively, a custom target TileGrid can be constructed manually and set on the source instance using `ol/source/TileImage~setTileGridForProjection(projection, tilegrid)`.
This TileGrid will then be used when reprojecting to the specified projection instead of creating the default one.
In certain cases, this can be used to optimize performance (by tweaking tile sizes) or visual quality (by specifying resolutions).
# How it works
The reprojection process is based on triangles -- the target raster is divided into a limited number of triangles with vertices transformed using `ol.proj` capabilities ([proj4js](http://proj4js.org/) is usually utilized to define custom transformations).
The reprojection process is based on triangles -- the target raster is divided into a limited number of triangles with vertices transformed using `ol/proj` capabilities ([proj4js](http://proj4js.org/) is usually utilized to define custom transformations).
The reprojection of pixels inside the triangle is approximated with an affine transformation (with rendering hardware-accelerated by the canvas 2d context):
<img src="raster-reprojection-resources/how-it-works.jpg" alt="How it works" width="600" />
@@ -102,10 +109,6 @@ For debugging, rendering of the reprojection edges can be enabled by `ol.source.
# Advanced
### Disabling reprojection
In case you are creating a custom build of OpenLayers and do not need the reprojection code, you can reduce the build size by setting `ol.ENABLE_RASTER_REPROJECTION` to `false`, which completely disables the reprojection support.
See [Custom builds](custom-builds.html#defines) tutorial on how to do this.
### Triangulation precision threshold
The default [triangulation error threshold](#dynamic-triangulation) in pixels is given by `ERROR_THRESHOLD` (0.5 pixel).
In case a different threshold needs to be defined for different sources, the `reprojectionErrorThreshold` option can be passed when constructing the tile image source.
@@ -126,7 +129,7 @@ Setting such a limit is demonstrated in the [reprojection demo example](https://
### Resolution calculation
When determining source tiles to load, the ideal source resolution needs to be calculated.
The `ol.reproj.calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution)` function calculates the ideal value in order to achieve pixel mapping as close as possible to 1:1 during reprojection, which is then used to select proper zoom level from the source.
The `ol/reproj~calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution)` function calculates the ideal value in order to achieve pixel mapping as close as possible to 1:1 during reprojection, which is then used to select proper zoom level from the source.
It is, however, generally not practical to use the same source zoom level for the whole target zoom level -- different projections can have significantly different resolutions in different parts of the world (e.g. polar regions in EPSG:3857 vs EPSG:4326) and enforcing a single resolution for the whole zoom level would result in some tiles being scaled up/down, possibly requiring a huge number of source tiles to be loaded.
Therefore, the resolution mapping is calculated separately for each reprojected tile (in the middle of the tile extent).

View File

@@ -3,10 +3,11 @@ layout: example.html
title: Styling feature with CanvasGradient or CanvasPattern
shortdesc: Example showing the countries vector layer styled with patterns and gradients.
docs: >
First this example creates a reusable [`CanvasPattern`](https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern)
This example creates a [`CanvasPattern`](https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern)
and a [`CanvasGradient`](https://developer.mozilla.org/en/docs/Web/API/CanvasGradient). The countries are loaded from
a GeoJSON file. A style function determines for each country whether to use a fill with the pregenerated
CanvasGradient (rainbow colors) or a CanvasPattern (repeating stacked circles).
a GeoJSON file. A style function determines for each country whether to use a fill with the
CanvasGradient (rainbow colors) or a CanvasPattern (repeating stacked circles). **Note**: For seamless repeat patterns,
image width and height of the pattern image must be a factor of two (2, 4, 8, ..., 512).
tags: "canvas, gradient, pattern, style"
---
<div id="map" class="map"></div>

View File

@@ -1,6 +1,5 @@
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {getWidth} from '../src/ol/extent.js';
import GeoJSON from '../src/ol/format/GeoJSON.js';
import {DEVICE_PIXEL_RATIO} from '../src/ol/has.js';
import VectorLayer from '../src/ol/layer/Vector.js';
@@ -16,14 +15,8 @@ const context = canvas.getContext('2d');
const pixelRatio = DEVICE_PIXEL_RATIO;
// Generate a rainbow gradient
function gradient(feature, resolution) {
const extent = feature.getGeometry().getExtent();
// Gradient starts on the left edge of each feature, and ends on the right.
// Coordinate origin is the top-left corner of the extent of the geometry, so
// we just divide the geometry's extent width by resolution and multiply with
// pixelRatio to match the renderer's pixel coordinate system.
const grad = context.createLinearGradient(0, 0,
getWidth(extent) / resolution * pixelRatio, 0);
const gradient = (function() {
const grad = context.createLinearGradient(0, 0, 512 * pixelRatio, 0);
grad.addColorStop(0, 'red');
grad.addColorStop(1 / 6, 'orange');
grad.addColorStop(2 / 6, 'yellow');
@@ -32,24 +25,24 @@ function gradient(feature, resolution) {
grad.addColorStop(5 / 6, 'blue');
grad.addColorStop(1, 'purple');
return grad;
}
})();
// Generate a canvasPattern with two circles on white background
const pattern = (function() {
canvas.width = 11 * pixelRatio;
canvas.height = 11 * pixelRatio;
canvas.width = 8 * pixelRatio;
canvas.height = 8 * pixelRatio;
// white background
context.fillStyle = 'white';
context.fillRect(0, 0, canvas.width, canvas.height);
// outer circle
context.fillStyle = 'rgba(102, 0, 102, 0.5)';
context.beginPath();
context.arc(5 * pixelRatio, 5 * pixelRatio, 4 * pixelRatio, 0, 2 * Math.PI);
context.arc(4 * pixelRatio, 4 * pixelRatio, 3 * pixelRatio, 0, 2 * Math.PI);
context.fill();
// inner circle
context.fillStyle = 'rgb(55, 0, 170)';
context.beginPath();
context.arc(5 * pixelRatio, 5 * pixelRatio, 2 * pixelRatio, 0, 2 * Math.PI);
context.arc(4 * pixelRatio, 4 * pixelRatio, 1.5 * pixelRatio, 0, 2 * Math.PI);
context.fill();
return context.createPattern(canvas, 'repeat');
}());
@@ -69,12 +62,11 @@ const style = new Style({
* which either contains the aboove gradient or pattern.
*
* @param {module:ol/Feature~Feature} feature The feature to style.
* @param {number} resolution Resolution.
* @return {module:ol/style/Style} The style to use for the feature.
*/
const getStackedStyle = function(feature, resolution) {
const getStackedStyle = function(feature) {
const id = feature.getId();
fill.setColor(id > 'J' ? gradient(feature, resolution) : pattern);
fill.setColor(id > 'J' ? gradient : pattern);
return style;
};
@@ -94,7 +86,7 @@ const map = new Map({
],
target: 'map',
view: new View({
center: fromLonLat([7, 52]),
center: fromLonLat([16, 48]),
zoom: 3
})
});

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import ImageLayer from '../src/ol/layer/Image.js';
@@ -21,8 +20,8 @@ const twoPi = 2 * Math.PI;
/**
* Convert an RGB pixel into an HCL pixel.
* @param {Array.<number>} pixel A pixel in RGB space.
* @return {Array.<number>} A pixel in HCL space.
* @param {Array<number>} pixel A pixel in RGB space.
* @return {Array<number>} A pixel in HCL space.
*/
function rgb2hcl(pixel) {
const red = rgb2xyz(pixel[0]);
@@ -56,8 +55,8 @@ function rgb2hcl(pixel) {
/**
* Convert an HCL pixel into an RGB pixel.
* @param {Array.<number>} pixel A pixel in HCL space.
* @return {Array.<number>} A pixel in RGB space.
* @param {Array<number>} pixel A pixel in HCL space.
* @return {Array<number>} A pixel in RGB space.
*/
function hcl2rgb(pixel) {
const h = pixel[0];

View File

@@ -1,4 +1,4 @@
import {inherits} from '../src/ol/index.js';
import {inherits} from '../src/ol/util.js';
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultControls, Control} from '../src/ol/control.js';

View File

@@ -1,4 +1,4 @@
import {inherits} from '../src/ol/index.js';
import {inherits} from '../src/ol/util.js';
import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
@@ -29,7 +29,7 @@ app.Drag = function() {
});
/**
* @type {module:ol~Pixel}
* @type {module:ol/pixel~Pixel}
* @private
*/
this.coordinate_ = null;

1
examples/d3.js vendored
View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {getWidth, getCenter} from '../src/ol/extent.js';

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js';

View File

@@ -40,9 +40,6 @@ function addInteraction() {
} else if (value === 'Star') {
value = 'Circle';
geometryFunction = function(coordinates, geometry) {
if (!geometry) {
geometry = new Polygon(null);
}
const center = coordinates[0];
const last = coordinates[1];
const dx = center[0] - last[0];
@@ -59,7 +56,11 @@ function addInteraction() {
newCoordinates.push([center[0] + offsetX, center[1] + offsetY]);
}
newCoordinates.push(newCoordinates[0].slice());
geometry.setCoordinates([newCoordinates]);
if (!geometry) {
geometry = new Polygon([newCoordinates]);
} else {
geometry.setCoordinates([newCoordinates]);
}
return geometry;
};
}

View File

@@ -22,7 +22,6 @@ const map = new Map({
const imageStyle = new Style({
image: new CircleStyle({
radius: 5,
snapToPixel: false,
fill: new Fill({color: 'yellow'}),
stroke: new Stroke({color: 'red', width: 1})
})
@@ -31,7 +30,6 @@ const imageStyle = new Style({
const headInnerImageStyle = new Style({
image: new CircleStyle({
radius: 2,
snapToPixel: false,
fill: new Fill({color: 'blue'})
})
});
@@ -39,7 +37,6 @@ const headInnerImageStyle = new Style({
const headOuterImageStyle = new Style({
image: new CircleStyle({
radius: 5,
snapToPixel: false,
fill: new Fill({color: 'black'})
})
});

View File

@@ -136,7 +136,7 @@ const map = new Map({
layers: [raster, vector],
interactions: defaultInteractions().extend([new Select({
condition: function(evt) {
return evt.type == 'pointermove' ||
return evt.type == 'pointermove' ||
evt.type == 'singleclick';
},
style: selectStyleFunction

View File

@@ -1,5 +1,3 @@
// NOCOMPILE
// this example uses FileSaver.js for which we don't have an externs file.
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js';
@@ -32,7 +30,7 @@ const map = new Map({
});
document.getElementById('export-png').addEventListener('click', function() {
map.once('postcompose', function(event) {
map.once('rendercomplete', function(event) {
const canvas = event.context.canvas;
if (navigator.msSaveBlob) {
navigator.msSaveBlob(canvas.msToBlob(), 'map.png');

View File

@@ -1,10 +1,8 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js';
import WKT from '../src/ol/format/WKT.js';
import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import {unByKey} from '../src/ol/Observable.js';
import {OSM, Vector as VectorSource} from '../src/ol/source.js';
const raster = new TileLayer({
@@ -49,9 +47,6 @@ const dims = {
a5: [210, 148]
};
let loading = 0;
let loaded = 0;
const exportButton = document.getElementById('export-pdf');
exportButton.addEventListener('click', function() {
@@ -67,57 +62,22 @@ exportButton.addEventListener('click', function() {
const size = /** @type {module:ol/size~Size} */ (map.getSize());
const extent = map.getView().calculateExtent(size);
const source = raster.getSource();
const tileLoadStart = function() {
++loading;
};
let timer;
let keys = [];
function tileLoadEndFactory(canvas) {
return () => {
++loaded;
if (timer) {
clearTimeout(timer);
timer = null;
}
if (loading === loaded) {
timer = window.setTimeout(() => {
loading = 0;
loaded = 0;
const data = canvas.toDataURL('image/jpeg');
const pdf = new jsPDF('landscape', undefined, format);
pdf.addImage(data, 'JPEG', 0, 0, dim[0], dim[1]);
pdf.save('map.pdf');
keys.forEach(unByKey);
keys = [];
map.setSize(size);
map.getView().fit(extent, {size});
map.renderSync();
exportButton.disabled = false;
document.body.style.cursor = 'auto';
}, 500);
}
};
}
map.once('postcompose', function(event) {
map.once('rendercomplete', function(event) {
const canvas = event.context.canvas;
const tileLoadEnd = tileLoadEndFactory(canvas);
keys = [
source.on('tileloadstart', tileLoadStart),
source.on('tileloadend', tileLoadEnd),
source.on('tileloaderror', tileLoadEnd)
];
tileLoadEnd();
const data = canvas.toDataURL('image/jpeg');
const pdf = new jsPDF('landscape', undefined, format);
pdf.addImage(data, 'JPEG', 0, 0, dim[0], dim[1]);
pdf.save('map.pdf');
// Reset original map size
map.setSize(size);
map.getView().fit(extent, {size});
exportButton.disabled = false;
document.body.style.cursor = 'auto';
});
// Set print size
const printSize = [width, height];
map.setSize(printSize);
map.getView().fit(extent, {size: printSize});
loaded = -1;
map.renderSync();
}, false);

View File

@@ -65,7 +65,6 @@ function flash(feature) {
const style = new Style({
image: new CircleStyle({
radius: radius,
snapToPixel: false,
stroke: new Stroke({
color: 'rgba(255, 0, 0, ' + opacity + ')',
width: 0.25 + opacity

View File

@@ -94,7 +94,6 @@ const styles = {
'geoMarker': new Style({
image: new CircleStyle({
radius: 7,
snapToPixel: false,
fill: new Fill({color: 'black'}),
stroke: new Stroke({
color: 'white', width: 2

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import GeoJSON from '../src/ol/format/GeoJSON.js';

View File

@@ -44,7 +44,7 @@ tags: "fullscreen, geolocation, orientation, mobile"
<button id="geolocate">Geolocate Me!</button>
<button id="simulate">Simulate</button>
</div>
<script src="./resources/common.js" type="text/javascript"></script>
<script src="loader.js?id=geolocation-orientation" type="text/javascript"></script>
<script src="common.js"></script>
<script src="geolocation-orientation.js"></script>
</body>
</html>

View File

@@ -71,9 +71,9 @@ map.on('click', function(evt) {
const coordinates = feature.getGeometry().getCoordinates();
popup.setPosition(coordinates);
$(element).popover({
'placement': 'top',
'html': true,
'content': feature.get('name')
placement: 'top',
html: true,
content: feature.get('name')
});
$(element).popover('show');
} else {

View File

@@ -101,7 +101,7 @@ imagery.on('postcompose', function(event) {
* Apply a convolution kernel to canvas. This works for any size kernel, but
* performance starts degrading above 3 x 3.
* @param {CanvasRenderingContext2D} context Canvas 2d context.
* @param {Array.<number>} kernel Kernel.
* @param {Array<number>} kernel Kernel.
*/
function convolve(context, kernel) {
const canvas = context.canvas;

View File

@@ -0,0 +1,19 @@
---
layout: example.html
title: Interaction Options
shortdesc: Shows interaction options for custom scroll and zoom behavior.
docs: >
This example uses a custom `ol/interaction/defaults` configuration:
* By default, wheel/trackpad zoom and drag panning is always active, which
can be unexpected on pages with a lot of scrollable content and an embedded
map. To perform wheel/trackpad zoom and drag-pan actions only when the map
has the focus, set `onFocusOnly: true` as option. This requires a map div
with a `tabindex` attribute set.
* By default, pinch-zoom and wheel/trackpad zoom interactions can leave the
map at fractional zoom levels. If instead you want to constrain
wheel/trackpad zooming to integer zoom levels, set
`constrainResolution: true`.
tags: "trackpad, mousewheel, zoom, scroll, interaction, fractional"
---
<div tabindex="1" id="map" class="map"></div>

View File

@@ -0,0 +1,22 @@
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js';
import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js';
const map = new Map({
interactions: defaultInteractions({
constrainResolution: true, onFocusOnly: true
}),
layers: [
new TileLayer({
source: new OSM()
})
],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2
})
});

View File

@@ -7,6 +7,6 @@ docs: >
with OpenLayers.
tags: "vector, jsts, buffer"
resources:
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/1.4.0/jsts.min.js
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/1.6.0/jsts.min.js
---
<div id="map" class="map"></div>

View File

@@ -1,5 +1,3 @@
// NOCOMPILE
// this example uses JSTS for which we don't have an externs file.
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import GeoJSON from '../src/ol/format/GeoJSON.js';
@@ -7,7 +5,8 @@ import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import {fromLonLat} from '../src/ol/proj.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
import LinearRing from '../src/ol/geom/LinearRing.js';
import {Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon} from '../src/ol/geom.js';
const source = new VectorSource();
fetch('data/geojson/roads-seoul.geojson').then(function(response) {
@@ -17,6 +16,7 @@ fetch('data/geojson/roads-seoul.geojson').then(function(response) {
const features = format.readFeatures(json, {featureProjection: 'EPSG:3857'});
const parser = new jsts.io.OL3Parser();
parser.inject(Point, LineString, LinearRing, Polygon, MultiPoint, MultiLineString, MultiPolygon);
for (let i = 0; i < features.length; i++) {
const feature = features[i];

View File

@@ -25,8 +25,7 @@ cloak:
</head>
<body>
<div id="map" class="map"></div>
<script src="https://code.jquery.com/jquery-2.2.3.min.js" type="text/javascript"></script>
<script src="./resources/common.js" type="text/javascript"></script>
<script src="loader.js?id=mobile-full-screen" type="text/javascript"></script>
<script src="common.js"></script>
<script src="mobile-full-screen.js"></script>
</body>
</html>

View File

@@ -1,18 +0,0 @@
---
layout: example.html
title: Mousewheel/Trackpad Zoom
shortdesc: Shows advanced wheel/trackpad zoom options.
docs: >
This example uses a custom `ol/interaction/MouseWheelZoom` configuration:
* By default, wheel/trackpad zoom is always active, which can be unexpected
on pages with a lot of scrollable content and an embedded map. To perform
wheel/trackpad zoom actions only when the map has the focus, set
`condition: focus` as constructor option. This requires
a map div with a `tabindex` attribute set.
* By default, the interaction can leave the map at fractional zoom levels. If
instead you want to constrain wheel/trackpad zooming to integer zoom
levels, set `constrainResolution: true`.
tags: "trackpad, mousewheel, zoom, scroll, interaction"
---
<div tabindex="1" id="map" class="map"></div>

View File

@@ -1,26 +0,0 @@
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {defaults as defaultInteractions, MouseWheelZoom} from '../src/ol/interaction.js';
import {focus} from '../src/ol/events/condition.js';
import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js';
const map = new Map({
interactions: defaultInteractions({mouseWheelZoom: false}).extend([
new MouseWheelZoom({
constrainResolution: true, // force zooming to a integer zoom
condition: focus // only wheel/trackpad zoom when the map has the focus
})
]),
layers: [
new TileLayer({
source: new OSM()
})
],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2
})
});

View File

@@ -51,12 +51,11 @@ map.on('click', function(evt) {
$(element).popover('destroy');
popup.setPosition(coordinate);
// the keys are quoted to prevent renaming in ADVANCED mode.
$(element).popover({
'placement': 'top',
'animation': false,
'html': true,
'content': '<p>The location you clicked was:</p><code>' + hdms + '</code>'
placement: 'top',
animation: false,
html: true,
content: '<p>The location you clicked was:</p><code>' + hdms + '</code>'
});
$(element).popover('show');
});

View File

@@ -1,5 +1,3 @@
// NOCOMPILE
// this example uses d3 for which we don't have an externs file.
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';
@@ -14,7 +12,7 @@ const bins = 10;
/**
* Calculate the Vegetation Greenness Index (VGI) from an input pixel. This
* is a rough estimate assuming that pixel values correspond to reflectance.
* @param {Array.<number>} pixel An array of [R, G, B, A] values.
* @param {Array<number>} pixel An array of [R, G, B, A] values.
* @return {number} The VGI value for the given pixel.
*/
function vgi(pixel) {

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';

View File

@@ -27,7 +27,7 @@ const map = new Map({
})
});
let select = null; // ref to currently selected interaction
let select = null; // ref to currently selected interaction
// select interaction working on "singleclick"
const selectSingleClick = new Select();

View File

@@ -1,4 +1,3 @@
// NOCOMPILE
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';
@@ -8,7 +7,7 @@ import {OSM, Raster, XYZ} from '../src/ol/source.js';
/**
* Generates a shaded relief image given elevation data. Uses a 3x3
* neighborhood for determining slope and aspect.
* @param {Array.<ImageData>} inputs Array of input images.
* @param {Array<ImageData>} inputs Array of input images.
* @param {Object} data Data added in the "beforeoperations" event.
* @return {ImageData} Output image.
*/

View File

@@ -1,7 +1,7 @@
---
layout: example.html
title: Street Labels
shortdesc: Render street names with a custom render.
shortdesc: Render street names.
docs: >
Example showing the use of a text style with `placement: 'line'` to render text along a path.
tags: "vector, label, streets"

View File

@@ -1,13 +1,20 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-2577926-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-2577926-1');
</script>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="./css/ol.css" type="text/css">
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
{{{ extraHead.local }}}
{{{ css.tag }}}

View File

@@ -1,6 +1,3 @@
// NOCOMPILE
// this example uses topolis and toastr for which we don't have an externs file.
import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';

View File

@@ -1,5 +1,3 @@
// NOCOMPILE
// this example uses turf.js for which we don't have an externs file.
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import GeoJSON from '../src/ol/format/GeoJSON.js';

View File

@@ -1,11 +1,11 @@
---
layout: example.html
title: Tiled UTFGrid
shortdesc: This example shows how to read data from a TileUTFGrid layer.
title: UTFGrid
shortdesc: This example shows how to read data from a UTFGrid source.
docs: >
<p>Point to a country to see its name and flag.</p>
Tiles made with [TileMill](http://tilemill.com). Hosting on MapBox.com or with open-source [TileServer](https://github.com/klokantech/tileserver-php/).
tags: "utfgrid, tileutfgrid, tilejson"
tags: "utfgrid, tilejson"
cloak:
- key: pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg
value: Your Mapbox access token from http://mapbox.com/ here

View File

@@ -3,7 +3,7 @@ import Overlay from '../src/ol/Overlay.js';
import View from '../src/ol/View.js';
import TileLayer from '../src/ol/layer/Tile.js';
import TileJSON from '../src/ol/source/TileJSON.js';
import UTFGrid from '../src/ol/source/TileUTFGrid.js';
import UTFGrid from '../src/ol/source/UTFGrid.js';
const key = 'pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg';

View File

@@ -1,10 +1,8 @@
const MinifyPlugin = require('babel-minify-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
const ExampleBuilder = require('./example-builder');
const fs = require('fs');
const merge = require('webpack-merge');
const path = require('path');
const webpack = require('webpack');
const src = path.join(__dirname, '..');
@@ -17,66 +15,58 @@ examples.forEach(example => {
entry[example] = `./${example}.js`;
});
const main = {
module.exports = {
context: src,
target: 'web',
entry: entry,
plugins: [
new webpack.optimize.CommonsChunkPlugin({
module: {
rules: [{
use: {
loader: 'buble-loader'
},
test: /\.js$/,
include: [
path.join(__dirname, '..', '..', 'src'),
path.join(__dirname, '..')
]
}]
},
optimization: {
minimizer: [
new UglifyJsPlugin({
sourceMap: true,
uglifyOptions: {
mangle: {
keep_fnames: true
}
}
})
],
runtimeChunk: {
name: 'common'
},
splitChunks: {
name: 'common',
chunks: 'initial',
minChunks: 2
}),
}
},
plugins: [
new ExampleBuilder({
templates: path.join(__dirname, '..', 'templates'),
common: 'common'
}),
new CopyPlugin([
{from: '../css', to: 'css'},
{from: '../src/ol/ol.css', to: 'css'},
{from: 'data', to: 'data'},
{from: 'resources', to: 'resources'},
{from: 'Jugl.js', to: 'Jugl.js'},
{from: 'index.html', to: 'index.html'}
])
],
devtool: 'source-map',
output: {
filename: '[name].js',
path: path.join(__dirname, '..', '..', 'build', 'examples')
}
};
// configuration specific to the dev environment
const dev = {
devtool: 'source-map',
plugins: [
new webpack.EnvironmentPlugin(
Object.assign({NODE_ENV: 'development'}, process.env)
)
]
};
// configuration specific to the prod environment
const prod = {
plugins: [
new webpack.EnvironmentPlugin(
Object.assign({NODE_ENV: 'production'}, process.env)
),
new MinifyPlugin()
]
};
module.exports = env => {
let config;
switch (env) {
case 'prod': {
config = merge(main, prod);
break;
}
default: {
config = merge(main, dev);
}
}
return config;
};

View File

@@ -5,6 +5,7 @@ const marked = require('marked');
const path = require('path');
const pkg = require('../../package.json');
const promisify = require('util').promisify;
const RawSource = require('webpack-sources').RawSource;
const readFile = promisify(fs.readFile);
const isCssRegEx = /\.css$/;
@@ -25,7 +26,7 @@ handlebars.registerHelper('indent', (text, options) => {
* Create an inverted index of keywords from examples. Property names are
* lowercased words. Property values are objects mapping example index to word
* count.
* @param {Array.<Object>} exampleData Array of example data objects.
* @param {Array<Object>} exampleData Array of example data objects.
* @return {Object} Word index.
*/
function createWordIndex(exampleData) {
@@ -60,6 +61,28 @@ function createWordIndex(exampleData) {
return index;
}
/**
* Gets the source for the chunk that matches the jsPath
* @param {Object} chunk Chunk.
* @param {string} jsName Name of the file.
* @return {string} The source.
*/
function getJsSource(chunk, jsName) {
let jsSource;
for (let i = 0, ii = chunk.modules.length; i < ii; ++i) {
const module = chunk.modules[i];
if (module.modules) {
jsSource = getJsSource(module, jsName);
if (jsSource) {
return jsSource;
}
}
if (module.identifier.endsWith(jsName)) {
return module.source;
}
}
}
/**
* A webpack plugin that builds the html files for our examples.
* @param {Object} config Plugin configuration. Requires a `templates` property
@@ -77,7 +100,7 @@ function ExampleBuilder(config) {
* @param {Object} compiler The webpack compiler.
*/
ExampleBuilder.prototype.apply = function(compiler) {
compiler.plugin('emit', async (compilation, callback) => {
compiler.hooks.emit.tapPromise('ExampleBuilder', async (compilation) => {
const chunks = compilation.getStats().toJson().chunks
.filter(chunk => chunk.names[0] !== this.common);
@@ -94,19 +117,11 @@ ExampleBuilder.prototype.apply = function(compiler) {
});
for (const file in assets) {
compilation.assets[file] = {
source: () => assets[file],
size: () => assets[file].length
};
compilation.assets[file] = new RawSource(assets[file]);
}
});
try {
await Promise.all(promises);
} catch (err) {
callback(err);
return;
}
await Promise.all(promises);
const info = {
examples: exampleData,
@@ -114,12 +129,7 @@ ExampleBuilder.prototype.apply = function(compiler) {
};
const indexSource = `var info = ${JSON.stringify(info)}`;
compilation.assets['index.js'] = {
source: () => indexSource,
size: () => indexSource.length
};
callback();
compilation.assets['index.js'] = new RawSource(indexSource);
});
};
@@ -141,15 +151,7 @@ ExampleBuilder.prototype.render = async function(dir, chunk) {
// add in script tag
const jsName = `${name}.js`;
const jsPath = path.join(dir, jsName);
let jsSource;
for (let i = 0, ii = chunk.modules.length; i < ii; ++i) {
const module = chunk.modules[i];
if (module.identifier == jsPath) {
jsSource = module.source;
break;
}
}
let jsSource = getJsSource(chunk, path.join('.', jsName));
jsSource = jsSource.replace(/'\.\.\/src\//g, '\'');
if (data.cloak) {
for (const entry of data.cloak) {

View File

@@ -37,12 +37,11 @@ const tileGrid = new WMTSTileGrid({
matrixIds: matrixIds
});
// API key valid for 'openlayers.org' and 'localhost'.
// Expiration date is 06/29/2018.
const key = '2mqbg0z6cx7ube8gsou10nrt';
// For more information about the IGN API key see
// https://geoservices.ign.fr/blog/2017/06/28/geoportail_sans_compte.html
const ign_source = new WMTS({
url: 'https://wxs.ign.fr/' + key + '/wmts',
url: 'https://wxs.ign.fr/pratique/geoportail/wmts',
layer: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
matrixSet: 'PM',
format: 'image/jpeg',

View File

@@ -8,7 +8,7 @@ const imgHeight = 6100;
const zoomifyUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?zoomify=' +
'/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF/';
const iipUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?FIF=' + '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF' + '&JTL={z},{tileIndex}';
const iipUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?FIF=' + '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF' + '&JTL={z},{tileIndex}';
const layer = new TileLayer({
source: new Zoomify({

View File

@@ -1,165 +0,0 @@
/**
* @externs
*/
/**
* @constructor
*/
var BingMapsCoverageArea = function() {};
/**
* @type {Array.<number>}
*/
BingMapsCoverageArea.prototype.bbox;
/**
* @type {number}
*/
BingMapsCoverageArea.prototype.zoomMax;
/**
* @type {number}
*/
BingMapsCoverageArea.prototype.zoomMin;
/**
* @constructor
*/
var BingMapsImageryProvider = function() {};
/**
* @type {string}
*/
BingMapsImageryProvider.prototype.attribution;
/**
* @type {Array.<BingMapsCoverageArea>}
*/
BingMapsImageryProvider.prototype.coverageAreas;
/**
* @constructor
*/
var BingMapsImageryMetadataResponse = function() {};
/**
* @type {string}
*/
BingMapsImageryMetadataResponse.prototype.authenticationResultCode;
/**
* @type {string}
*/
BingMapsImageryMetadataResponse.prototype.copyright;
/**
* @type {Array.<BingMapsResourceSet>}
*/
BingMapsImageryMetadataResponse.prototype.resourceSets;
/**
* @type {number}
*/
BingMapsImageryMetadataResponse.prototype.statusCode;
/**
* @type {string}
*/
BingMapsImageryMetadataResponse.prototype.statusDescription;
/**
* @type {string}
*/
BingMapsImageryMetadataResponse.prototype.traceId;
/**
* @constructor
*/
var BingMapsResource = function() {};
/**
* @type {number}
*/
BingMapsResource.prototype.imageHeight;
/**
* @type {string}
*/
BingMapsResource.prototype.imageUrl;
/**
* @type {Array.<string>}
*/
BingMapsResource.prototype.imageUrlSubdomains;
/**
* @type {number}
*/
BingMapsResource.prototype.imageWidth;
/**
* @type {Array.<BingMapsImageryProvider>}
*/
BingMapsResource.prototype.imageryProviders;
/**
* @type {Object}
*/
BingMapsResource.prototype.vintageEnd;
/**
* @type {Object}
*/
BingMapsResource.prototype.vintageStart;
/**
* @type {number}
*/
BingMapsResource.prototype.zoomMax;
/**
* @type {number}
*/
BingMapsResource.prototype.zoomMin;
/**
* @constructor
*/
var BingMapsResourceSet = function() {};
/**
* @type {number}
*/
BingMapsResourceSet.prototype.estimatedTotal;
/**
* @type {Array.<BingMapsResource>}
*/
BingMapsResourceSet.prototype.resources;

20
externs/bootstrap.js vendored
View File

@@ -1,20 +0,0 @@
/**
* @fileoverview Externs for bootstrap.js
*
* @see http://twitter.github.com/bootstrap/javascript.html
* @externs
*/
/**
* @param {string|Object.<string,*>=} opt_option
* @return {!jQuery}
*/
jQuery.prototype.popover = function(opt_option) {};
/**
* @param {string|Object.<string,*>=} opt_option
* @return {!jQuery}
*/
jQuery.prototype.tooltip = function(opt_option) {};

View File

@@ -1,34 +0,0 @@
/**
* @externs
*/
/**
* @constructor
*/
var CartoDBLayerInfo = function() {};
/**
* @type {string}
*/
CartoDBLayerInfo.prototype.layergroupid;
/**
* @type {string}
*/
CartoDBLayerInfo.prototype.updated_at;
/**
* @type {Object}
*/
CartoDBLayerInfo.prototype.metadata;
/**
* @type {{http: string, https: string}}
*/
CartoDBLayerInfo.prototype.cdn_url;

View File

@@ -1,9 +0,0 @@
/**
* @fileoverview Definitions for externs that are either missing or incorrect
* in the current release version of the closure compiler we use.
*
* The entries must be removed once they are available/correct in the
* version we use.
*
* @externs
*/

View File

@@ -1,198 +0,0 @@
/**
* @fileoverview Externs for EsriJSON.
* @see http://resources.arcgis.com/en/help/rest/apiref/geometry.html
* @externs
*/
/**
* @constructor
*/
var EsriJSONObject = function() {};
/**
* @type {!EsriJSONCRS}
*/
EsriJSONObject.prototype.spatialReference;
/**
* @constructor
*/
var EsriJSONCRS = function() {};
/**
* CRS well know identifier.
* @type {number}
*/
EsriJSONCRS.prototype.wkid;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONPoint = function() {};
/**
* M value of point.
* @type {number}
*/
EsriJSONPoint.prototype.m;
/**
* X coordinate of point.
* @type {number}
*/
EsriJSONPoint.prototype.x;
/**
* Y coordinate of point.
* @type {number}
*/
EsriJSONPoint.prototype.y;
/**
* Z coordinate of point.
* @type {number|undefined}
*/
EsriJSONPoint.prototype.z;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONMultipoint = function() {};
/**
* Does Multipoint have M values?
* @type {boolean|undefined}
*/
EsriJSONMultipoint.prototype.hasM;
/**
* Does Multipoint have Z values?
* @type {boolean|undefined}
*/
EsriJSONMultipoint.prototype.hasZ;
/**
* @type {!Array.<!Array.<number>>}
*/
EsriJSONMultipoint.prototype.points;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONPolyline = function() {};
/**
* Does Polyline have M values?
* @type {boolean|undefined}
*/
EsriJSONPolyline.prototype.hasM;
/**
* Does Polyline have Z values?
* @type {boolean|undefined}
*/
EsriJSONPolyline.prototype.hasZ;
/**
* @type {!Array.<!Array.<!Array.<number>>>}
*/
EsriJSONPolyline.prototype.paths;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONPolygon = function() {};
/**
* Does Polygon have M values?
* @type {boolean|undefined}
*/
EsriJSONPolygon.prototype.hasM;
/**
* Does Polygon have Z values?
* @type {boolean|undefined}
*/
EsriJSONPolygon.prototype.hasZ;
/**
* @type {!Array.<!Array.<!Array.<number>>>}
*/
EsriJSONPolygon.prototype.rings;
/**
* @typedef {(EsriJSONPoint|EsriJSONMultipoint|EsriJSONPolyline|
EsriJSONPolygon)}
*/
var EsriJSONGeometry;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONFeature = function() {};
/**
* @type {EsriJSONGeometry}
*/
EsriJSONFeature.prototype.geometry;
/**
* @type {Object.<string, *>}
*/
EsriJSONFeature.prototype.attributes;
/**
* @constructor
* @extends {EsriJSONObject}
*/
var EsriJSONFeatureCollection = function() {};
/**
* @type {!Array.<EsriJSONFeature>}
*/
EsriJSONFeatureCollection.prototype.features;
/**
* The name of the attribute that contains ids.
* @type {string}
*/
EsriJSONFeatureCollection.prototype.objectIdFieldName;

View File

@@ -1,23 +0,0 @@
/**
* @type {Object}
*/
let common;
/**
* @param {string=} opt_default Default renderer.
* @return {string} Renderer type.
*/
common.getRendererFromQueryString = function(opt_default) {};
/**
* @param {function(new:ol.style.Style, module:ol/style/Style~Options=)} Style Style constructor.
* @param {function(new:ol.style.Fill, module:ol/style/Fill~Options=)} Fill Fill constructor.
* @param {function(new:ol.style.Stroke, module:ol/style/Stroke~Options=)} Stroke Stroke constructor.
* @param {function(new:ol.style.Icon, module:ol/style/Icon~Options=)} Icon Icon constructor.
* @param {function(new:ol.style.Text, module:ol/style/Text~Options=)} Text Text constructor.
* @return {function((module:ol/Feature~Feature|ol.render.Feature), number):
* Array.<ol.style.Style>}
*/
const createMapboxStreetsV6Style = function(Style, Fill, Stroke, Icon, Text) {};

View File

@@ -1,155 +0,0 @@
/**
* @fileoverview Externs for GeoJSON.
* @see http://geojson.org/geojson-spec.html
* @externs
*/
/**
* @constructor
*/
var GeoJSONObject = function() {};
/**
* @type {!Array.<number>|undefined}
*/
GeoJSONObject.prototype.bbox;
/**
* @type {string}
*/
GeoJSONObject.prototype.type;
/**
* @type {!GeoJSONCRS|undefined}
*/
GeoJSONObject.prototype.crs;
/**
* @constructor
*/
var GeoJSONCRS = function() {};
/**
* CRS type. One of `link` or `name`.
* @type {string}
*/
GeoJSONCRS.prototype.type;
/**
* @type {!GeoJSONCRSName|!GeoJSONLink}
*/
GeoJSONCRS.prototype.properties;
/**
* @constructor
*/
var GeoJSONCRSName = function() {};
/**
* @type {string}
*/
GeoJSONCRSName.prototype.name;
/**
* @constructor
* @extends {GeoJSONObject}
*/
var GeoJSONGeometry = function() {};
/**
* @type {!Array.<number>|!Array.<!Array.<number>>|
* !Array.<!Array.<!Array.<number>>>}
*/
GeoJSONGeometry.prototype.coordinates;
/**
* @constructor
* @extends {GeoJSONObject}
*/
var GeoJSONGeometryCollection = function() {};
/**
* @type {!Array.<GeoJSONGeometry>}
*/
GeoJSONGeometryCollection.prototype.geometries;
/**
* @constructor
* @extends {GeoJSONObject}
*/
var GeoJSONFeature = function() {};
/**
* @type {GeoJSONGeometry|GeoJSONGeometryCollection}
*/
GeoJSONFeature.prototype.geometry;
/**
* @type {number|string|undefined}
*/
GeoJSONFeature.prototype.id;
/**
* @type {Object.<string, *>}
*/
GeoJSONFeature.prototype.properties;
/**
* @type {string|undefined}
*/
GeoJSONFeature.prototype.geometry_name;
/**
* @constructor
* @extends {GeoJSONObject}
*/
var GeoJSONFeatureCollection = function() {};
/**
* @type {!Array.<GeoJSONFeature>}
*/
GeoJSONFeatureCollection.prototype.features;
/**
* @constructor
*/
var GeoJSONLink = function() {};
/**
* @type {string}
*/
GeoJSONLink.prototype.href;
/**
* @type {string}
*/
GeoJSONLink.prototype.type;

1828
externs/jquery-1.9.js vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,37 +0,0 @@
/**
* @externs
* @see http://proj4js.org/
*/
/**
* @constructor
*/
var Proj4 = function() {};
/**
* @param {ol.Coordinate} coordinates
* @return {ol.Coordinate}
*/
Proj4.prototype.forward = function(coordinates) {};
/**
* @param {ol.Coordinate} coordinates
* @return {ol.Coordinate}
*/
Proj4.prototype.inverse = function(coordinates) {};
/**
* @param {string} name
* @param {(string|Object)=} opt_def
* @return {undefined|Object.<string, Object.<{axis: string, units: string, to_meter: number}>>}
*/
Proj4.prototype.defs = function(name, opt_def) {};
/**
* @type {Proj4}
*/
var proj4;

View File

@@ -1,3 +0,0 @@
# Externs
TODO: remove this directory

View File

@@ -1,120 +0,0 @@
/**
* @externs
* @see https://github.com/mapbox/tilejson-spec
* @see https://github.com/mapbox/utfgrid-spec
*/
/**
* @constructor
*/
var TileJSON = function() {};
/**
* @type {string}
*/
TileJSON.prototype.tilejson;
/**
* @type {string|undefined}
*/
TileJSON.prototype.name;
/**
* @type {string|undefined}
*/
TileJSON.prototype.description;
/**
* @type {string|undefined}
*/
TileJSON.prototype.version;
/**
* @type {string|undefined}
*/
TileJSON.prototype.attribution;
/**
* @type {string|undefined}
*/
TileJSON.prototype.template;
/**
* @type {string|undefined}
*/
TileJSON.prototype.legend;
/**
* @type {string|undefined}
*/
TileJSON.prototype.scheme;
/**
* @type {!Array.<string>}
*/
TileJSON.prototype.tiles;
/**
* @type {!Array.<string>|undefined}
*/
TileJSON.prototype.grids;
/**
* @type {number|undefined}
*/
TileJSON.prototype.minzoom;
/**
* @type {number|undefined}
*/
TileJSON.prototype.maxzoom;
/**
* @type {!Array.<number>|undefined}
*/
TileJSON.prototype.bounds;
/**
* @type {!Array.<number>|undefined}
*/
TileJSON.prototype.center;
/**
* @constructor
*/
var UTFGridJSON = function() {};
/**
* @type {!Array.<string>}
*/
UTFGridJSON.prototype.grid;
/**
* @type {!Array.<string>}
*/
UTFGridJSON.prototype.keys;
/**
* @type {!Object.<string, Object>|undefined}
*/
UTFGridJSON.prototype.data;

View File

@@ -1,177 +0,0 @@
/**
* @fileoverview Externs for TopoJSON.
* @see https://github.com/mbostock/topojson/wiki/Specification
* @externs
*/
/**
* @constructor
*/
var TopoJSONTopology = function() {};
/**
* @type {string}
*/
TopoJSONTopology.prototype.type;
/**
* @type {TopoJSONTransform|undefined}
*/
TopoJSONTopology.prototype.transform;
/**
* @type {Object.<string, (TopoJSONGeometry|TopoJSONGeometryCollection)>}
*/
TopoJSONTopology.prototype.objects;
/**
* @type {!Array.<Array.<Array.<number>>>}
*/
TopoJSONTopology.prototype.arcs;
/**
* @constructor
*/
var TopoJSONTransform = function() {};
/**
* @type {!Array.<number>}
*/
TopoJSONTransform.prototype.scale;
/**
* @type {!Array.<number>}
*/
TopoJSONTransform.prototype.translate;
/**
* @constructor
*/
var TopoJSONGeometry = function() {};
/**
* @type {string}
*/
TopoJSONGeometry.prototype.type;
/**
* @type {string|number|undefined}
*/
TopoJSONGeometry.prototype.id;
/**
* @type {Object.<string, *>|undefined}
*/
TopoJSONGeometry.prototype.properties;
/**
* @constructor
*/
var TopoJSONGeometryCollection = function() {};
/**
* @type {Array.<TopoJSONGeometry>}
*/
TopoJSONGeometryCollection.prototype.geometries;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONPoint = function() {};
/**
* @type {!Array.<number>}
*/
TopoJSONPoint.prototype.coordinates;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONLineString = function() {};
/**
* @type {!Array.<number>}
*/
TopoJSONLineString.prototype.arcs;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONPolygon = function() {};
/**
* @type {!Array.<Array.<number>>}
*/
TopoJSONPolygon.prototype.arcs;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONMultiPoint = function() {};
/**
* @type {!Array.<Array.<number>>}
*/
TopoJSONMultiPoint.prototype.coordinates;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONMultiLineString = function() {};
/**
* @type {!Array.<Array.<number>>}
*/
TopoJSONMultiLineString.prototype.arcs;
/**
* @constructor
* @extends {TopoJSONGeometry}
*/
var TopoJSONMultiPolygon = function() {};
/**
* @type {!Array.<Array.<Array.<number>>>}
*/
TopoJSONMultiPolygon.prototype.arcs;

View File

@@ -1,31 +1,29 @@
{
"name": "openlayers",
"version": "5.0.0-beta.12",
"description": "Build tools and sources for developing OpenLayers based mapping applications",
"name": "ol",
"version": "5.2.0",
"description": "OpenLayers mapping library",
"keywords": [
"map",
"mapping",
"ol"
],
"private": true,
"homepage": "https://openlayers.org/",
"scripts": {
"lint": "eslint tasks test src/ol examples config",
"pretest": "npm run lint",
"posttest": "npm run typecheck",
"test": "npm run karma -- --single-run",
"karma": "karma start test/karma.config.js",
"serve-examples": "mkdir -p build/examples && webpack --config examples/webpack/config.js --watch & serve build/examples",
"build-examples": "webpack --config examples/webpack/config.js --env=prod",
"build-index": "node tasks/generate-index.js",
"prebuild": "npm run build-index",
"build": "webpack --config config/webpack.js",
"presrc-closure": "npm run prebuild",
"src-closure": "babel -q --out-dir build/src-closure src/",
"pretypecheck": "npm run src-closure",
"typecheck": "node tasks/typecheck",
"serve-examples": "webpack-dev-server --config examples/webpack/config.js --mode development --watch",
"build-examples": "webpack --config examples/webpack/config.js --mode production",
"build-package": "npm run transpile && npm run copy-css && node tasks/prepare-package && cp README.md build/ol",
"build-index": "npm run build-package && node tasks/generate-index",
"build-legacy": "rm -rf build && npm run build-index && rollup --config config/rollup.js && cleancss --source-map src/ol/ol.css -o build/ol.css",
"copy-css": "cp src/ol/ol.css build/ol/ol.css",
"transpile": "rm -rf build/ol && mkdir -p build && buble --input src/ol --output build/ol --no modules --sourcemap",
"apidoc": "jsdoc config/jsdoc/api/index.md -c config/jsdoc/api/conf.json -P package.json -d build/apidoc"
},
"main": "src/ol/index.js",
"main": "index.js",
"repository": {
"type": "git",
"url": "git://github.com/openlayers/openlayers.git"
@@ -34,56 +32,59 @@
"bugs": {
"url": "https://github.com/openlayers/openlayers/issues"
},
"browser": "dist/ol.js",
"style": [
"css/ol.css"
],
"dependencies": {
"pbf": "3.1.0",
"pixelworks": "1.1.0",
"rbush": "2.0.2"
},
"devDependencies": {
"babel-cli": "6.26.0",
"babel-minify-webpack-plugin": "^0.3.0",
"babel-plugin-jsdoc-closure": "1.5.1",
"chaikin-smooth": "1.0.4",
"clean-css-cli": "4.1.11",
"copy-webpack-plugin": "^4.0.1",
"buble": "^0.19.3",
"buble-loader": "^0.5.1",
"chaikin-smooth": "^1.0.4",
"clean-css-cli": "4.2.1",
"copy-webpack-plugin": "^4.4.1",
"coveralls": "3.0.1",
"eslint": "4.19.1",
"eslint-config-openlayers": "^9.2.0",
"eslint": "5.0.1",
"eslint-config-openlayers": "^11.0.0",
"expect.js": "0.3.1",
"front-matter": "^2.1.2",
"fs-extra": "^6.0.0",
"google-closure-compiler": "20180506.0.0",
"fs-extra": "^7.0.0",
"glob": "^7.1.2",
"handlebars": "4.0.11",
"html-webpack-plugin": "^3.0.1",
"istanbul": "0.4.5",
"jquery": "3.3.1",
"jsdoc": "3.5.5",
"karma": "^2.0.0",
"karma": "^3.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-coverage": "^1.1.1",
"karma-firefox-launcher": "^1.1.0",
"karma-mocha": "1.3.0",
"karma-sauce-launcher": "1.2.0",
"karma-webpack": "3.0.0",
"marked": "0.3.19",
"mocha": "5.1.1",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "4.0.0-beta.0",
"marked": "0.5.0",
"mocha": "5.2.0",
"mustache": "^2.3.0",
"pixelmatch": "^4.0.2",
"proj4": "2.4.4",
"recast": "0.14.7",
"serve": "^6.5.5",
"sinon": "^5.0.1",
"proj4": "2.5.0",
"rollup": "0.65.0",
"rollup-plugin-buble": "0.19.2",
"rollup-plugin-commonjs": "9.1.6",
"rollup-plugin-node-resolve": "3.3.0",
"rollup-plugin-sourcemaps": "0.4.2",
"rollup-plugin-uglify": "4.0.0",
"sinon": "^6.0.0",
"uglifyjs-webpack-plugin": "^1.2.5",
"url-polyfill": "^1.0.13",
"walk": "^2.3.9",
"webpack": "3.11.0",
"webpack-merge": "4.1.2"
"webpack": "4.17.1",
"webpack-cli": "^3.0.8",
"webpack-dev-server": "^3.1.4"
},
"eslintConfig": {
"extends": "openlayers"
},
"sideEffects": false
"sideEffects": [
"ol.css"
]
}

View File

@@ -1,40 +1,44 @@
/**
* @module ol/AssertionError
*/
import {VERSION, inherits} from './index.js';
import {VERSION} from './util.js';
/**
* Error object thrown when an assertion failed. This is an ECMA-262 Error,
* extended with a `code` property.
* @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error}
* @constructor
* @extends {Error}
* @param {number} code Error code.
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.
*/
const AssertionError = function(code) {
const path = VERSION ? VERSION.split('-')[0] : 'latest';
class AssertionError extends Error {
/**
* @type {string}
* @param {number} code Error code.
*/
this.message = 'Assertion failed. See https://openlayers.org/en/' + path +
'/doc/errors/#' + code + ' for details.';
constructor(code) {
const path = VERSION.split('-')[0];
const message = 'Assertion failed. See https://openlayers.org/en/' + path +
'/doc/errors/#' + code + ' for details.';
/**
* Error code. The meaning of the code can be found on
* {@link https://openlayers.org/en/latest/doc/errors/} (replace `latest` with
* the version found in the OpenLayers script's header comment if a version
* other than the latest is used).
* @type {number}
* @api
*/
this.code = code;
super(message);
this.name = 'AssertionError';
/**
* Error code. The meaning of the code can be found on
* https://openlayers.org/en/latest/doc/errors/ (replace `latest` with
* the version found in the OpenLayers script's header comment if a version
* other than the latest is used).
* @type {number}
* @api
*/
this.code = code;
};
/**
* @type {string}
*/
this.name = 'AssertionError';
inherits(AssertionError, Error);
// Re-assign message, see https://github.com/Rich-Harris/buble/issues/40
this.message = message;
}
}
export default AssertionError;

View File

@@ -1,7 +1,6 @@
/**
* @module ol/Collection
*/
import {inherits} from './index.js';
import AssertionError from './AssertionError.js';
import CollectionEventType from './CollectionEventType.js';
import BaseObject from './Object.js';
@@ -21,26 +20,26 @@ const Property = {
* @classdesc
* Events emitted by {@link module:ol/Collection~Collection} instances are instances of this
* type.
*
* @constructor
* @extends {module:ol/events/Event}
* @param {module:ol/CollectionEventType} type Type.
* @param {*=} opt_element Element.
*/
export const CollectionEvent = function(type, opt_element) {
Event.call(this, type);
export class CollectionEvent extends Event {
/**
* The element that is added to or removed from the collection.
* @type {*}
* @api
* @param {module:ol/CollectionEventType} type Type.
* @param {*=} opt_element Element.
*/
this.element = opt_element;
constructor(type, opt_element) {
super(type);
};
/**
* The element that is added to or removed from the collection.
* @type {*}
* @api
*/
this.element = opt_element;
inherits(CollectionEvent, Event);
}
}
/**
@@ -57,247 +56,231 @@ inherits(CollectionEvent, Event);
* Collection; they trigger events on the appropriate object, not on the
* Collection as a whole.
*
* @constructor
* @extends {module:ol/Object}
* @fires module:ol/Collection~CollectionEvent
* @param {Array.<T>=} opt_array Array.
* @param {module:ol/Collection~Options=} opt_options Collection options.
* @template T
* @api
*/
const Collection = function(opt_array, opt_options) {
BaseObject.call(this);
const options = opt_options || {};
class Collection extends BaseObject {
/**
* @private
* @type {boolean}
* @param {Array<T>=} opt_array Array.
* @param {module:ol/Collection~Options=} opt_options Collection options.
*/
this.unique_ = !!options.unique;
constructor(opt_array, opt_options) {
/**
* @private
* @type {!Array.<T>}
*/
this.array_ = opt_array ? opt_array : [];
super();
if (this.unique_) {
for (let i = 0, ii = this.array_.length; i < ii; ++i) {
this.assertUnique_(this.array_[i], i);
}
}
const options = opt_options || {};
this.updateLength_();
/**
* @private
* @type {boolean}
*/
this.unique_ = !!options.unique;
};
/**
* @private
* @type {!Array<T>}
*/
this.array_ = opt_array ? opt_array : [];
inherits(Collection, BaseObject);
/**
* Remove all elements from the collection.
* @api
*/
Collection.prototype.clear = function() {
while (this.getLength() > 0) {
this.pop();
}
};
/**
* Add elements to the collection. This pushes each item in the provided array
* to the end of the collection.
* @param {!Array.<T>} arr Array.
* @return {module:ol/Collection.<T>} This collection.
* @api
*/
Collection.prototype.extend = function(arr) {
let i, ii;
for (i = 0, ii = arr.length; i < ii; ++i) {
this.push(arr[i]);
}
return this;
};
/**
* Iterate over each element, calling the provided callback.
* @param {function(T, number, Array.<T>): *} f The function to call
* for every element. This function takes 3 arguments (the element, the
* index and the array). The return value is ignored.
* @api
*/
Collection.prototype.forEach = function(f) {
const array = this.array_;
for (let i = 0, ii = array.length; i < ii; ++i) {
f(array[i], i, array);
}
};
/**
* Get a reference to the underlying Array object. Warning: if the array
* is mutated, no events will be dispatched by the collection, and the
* collection's "length" property won't be in sync with the actual length
* of the array.
* @return {!Array.<T>} Array.
* @api
*/
Collection.prototype.getArray = function() {
return this.array_;
};
/**
* Get the element at the provided index.
* @param {number} index Index.
* @return {T} Element.
* @api
*/
Collection.prototype.item = function(index) {
return this.array_[index];
};
/**
* Get the length of this collection.
* @return {number} The length of the array.
* @observable
* @api
*/
Collection.prototype.getLength = function() {
return /** @type {number} */ (this.get(Property.LENGTH));
};
/**
* Insert an element at the provided index.
* @param {number} index Index.
* @param {T} elem Element.
* @api
*/
Collection.prototype.insertAt = function(index, elem) {
if (this.unique_) {
this.assertUnique_(elem);
}
this.array_.splice(index, 0, elem);
this.updateLength_();
this.dispatchEvent(
new CollectionEvent(CollectionEventType.ADD, elem));
};
/**
* Remove the last element of the collection and return it.
* Return `undefined` if the collection is empty.
* @return {T|undefined} Element.
* @api
*/
Collection.prototype.pop = function() {
return this.removeAt(this.getLength() - 1);
};
/**
* Insert the provided element at the end of the collection.
* @param {T} elem Element.
* @return {number} New length of the collection.
* @api
*/
Collection.prototype.push = function(elem) {
if (this.unique_) {
this.assertUnique_(elem);
}
const n = this.getLength();
this.insertAt(n, elem);
return this.getLength();
};
/**
* Remove the first occurrence of an element from the collection.
* @param {T} elem Element.
* @return {T|undefined} The removed element or undefined if none found.
* @api
*/
Collection.prototype.remove = function(elem) {
const arr = this.array_;
let i, ii;
for (i = 0, ii = arr.length; i < ii; ++i) {
if (arr[i] === elem) {
return this.removeAt(i);
}
}
return undefined;
};
/**
* Remove the element at the provided index and return it.
* Return `undefined` if the collection does not contain this index.
* @param {number} index Index.
* @return {T|undefined} Value.
* @api
*/
Collection.prototype.removeAt = function(index) {
const prev = this.array_[index];
this.array_.splice(index, 1);
this.updateLength_();
this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev));
return prev;
};
/**
* Set the element at the provided index.
* @param {number} index Index.
* @param {T} elem Element.
* @api
*/
Collection.prototype.setAt = function(index, elem) {
const n = this.getLength();
if (index < n) {
if (this.unique_) {
this.assertUnique_(elem, index);
for (let i = 0, ii = this.array_.length; i < ii; ++i) {
this.assertUnique_(this.array_[i], i);
}
}
const prev = this.array_[index];
this.array_[index] = elem;
this.dispatchEvent(
new CollectionEvent(CollectionEventType.REMOVE, prev));
this.updateLength_();
}
/**
* Remove all elements from the collection.
* @api
*/
clear() {
while (this.getLength() > 0) {
this.pop();
}
}
/**
* Add elements to the collection. This pushes each item in the provided array
* to the end of the collection.
* @param {!Array<T>} arr Array.
* @return {module:ol/Collection<T>} This collection.
* @api
*/
extend(arr) {
for (let i = 0, ii = arr.length; i < ii; ++i) {
this.push(arr[i]);
}
return this;
}
/**
* Iterate over each element, calling the provided callback.
* @param {function(T, number, Array<T>): *} f The function to call
* for every element. This function takes 3 arguments (the element, the
* index and the array). The return value is ignored.
* @api
*/
forEach(f) {
const array = this.array_;
for (let i = 0, ii = array.length; i < ii; ++i) {
f(array[i], i, array);
}
}
/**
* Get a reference to the underlying Array object. Warning: if the array
* is mutated, no events will be dispatched by the collection, and the
* collection's "length" property won't be in sync with the actual length
* of the array.
* @return {!Array<T>} Array.
* @api
*/
getArray() {
return this.array_;
}
/**
* Get the element at the provided index.
* @param {number} index Index.
* @return {T} Element.
* @api
*/
item(index) {
return this.array_[index];
}
/**
* Get the length of this collection.
* @return {number} The length of the array.
* @observable
* @api
*/
getLength() {
return /** @type {number} */ (this.get(Property.LENGTH));
}
/**
* Insert an element at the provided index.
* @param {number} index Index.
* @param {T} elem Element.
* @api
*/
insertAt(index, elem) {
if (this.unique_) {
this.assertUnique_(elem);
}
this.array_.splice(index, 0, elem);
this.updateLength_();
this.dispatchEvent(
new CollectionEvent(CollectionEventType.ADD, elem));
} else {
let j;
for (j = n; j < index; ++j) {
this.insertAt(j, undefined);
}
this.insertAt(index, elem);
}
};
/**
* Remove the last element of the collection and return it.
* Return `undefined` if the collection is empty.
* @return {T|undefined} Element.
* @api
*/
pop() {
return this.removeAt(this.getLength() - 1);
}
/**
* @private
*/
Collection.prototype.updateLength_ = function() {
this.set(Property.LENGTH, this.array_.length);
};
/**
* Insert the provided element at the end of the collection.
* @param {T} elem Element.
* @return {number} New length of the collection.
* @api
*/
push(elem) {
if (this.unique_) {
this.assertUnique_(elem);
}
const n = this.getLength();
this.insertAt(n, elem);
return this.getLength();
}
/**
* Remove the first occurrence of an element from the collection.
* @param {T} elem Element.
* @return {T|undefined} The removed element or undefined if none found.
* @api
*/
remove(elem) {
const arr = this.array_;
for (let i = 0, ii = arr.length; i < ii; ++i) {
if (arr[i] === elem) {
return this.removeAt(i);
}
}
return undefined;
}
/**
* @private
* @param {T} elem Element.
* @param {number=} opt_except Optional index to ignore.
*/
Collection.prototype.assertUnique_ = function(elem, opt_except) {
for (let i = 0, ii = this.array_.length; i < ii; ++i) {
if (this.array_[i] === elem && i !== opt_except) {
throw new AssertionError(58);
/**
* Remove the element at the provided index and return it.
* Return `undefined` if the collection does not contain this index.
* @param {number} index Index.
* @return {T|undefined} Value.
* @api
*/
removeAt(index) {
const prev = this.array_[index];
this.array_.splice(index, 1);
this.updateLength_();
this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev));
return prev;
}
/**
* Set the element at the provided index.
* @param {number} index Index.
* @param {T} elem Element.
* @api
*/
setAt(index, elem) {
const n = this.getLength();
if (index < n) {
if (this.unique_) {
this.assertUnique_(elem, index);
}
const prev = this.array_[index];
this.array_[index] = elem;
this.dispatchEvent(
new CollectionEvent(CollectionEventType.REMOVE, prev));
this.dispatchEvent(
new CollectionEvent(CollectionEventType.ADD, elem));
} else {
for (let j = n; j < index; ++j) {
this.insertAt(j, undefined);
}
this.insertAt(index, elem);
}
}
};
/**
* @private
*/
updateLength_() {
this.set(Property.LENGTH, this.array_.length);
}
/**
* @private
* @param {T} elem Element.
* @param {number=} opt_except Optional index to ignore.
*/
assertUnique_(elem, opt_except) {
for (let i = 0, ii = this.array_.length; i < ii; ++i) {
if (this.array_[i] === elem && i !== opt_except) {
throw new AssertionError(58);
}
}
}
}
export default Collection;

View File

@@ -1,34 +1,37 @@
/**
* @module ol/Disposable
*/
import {UNDEFINED} from './functions.js';
/**
* @classdesc
* Objects that need to clean up after themselves.
* @constructor
*/
const Disposable = function() {};
class Disposable {
/**
* The object has already been disposed.
* @type {boolean}
* @private
*/
Disposable.prototype.disposed_ = false;
/**
* Clean up.
*/
Disposable.prototype.dispose = function() {
if (!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
constructor() {
/**
* The object has already been disposed.
* @type {boolean}
* @private
*/
this.disposed_ = false;
}
};
/**
* Extension point for disposable objects.
* @protected
*/
Disposable.prototype.disposeInternal = UNDEFINED;
/**
* Clean up.
*/
dispose() {
if (!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
}
}
/**
* Extension point for disposable objects.
* @protected
*/
disposeInternal() {}
}
export default Disposable;

View File

@@ -4,7 +4,6 @@
import {assert} from './asserts.js';
import {listen, unlisten, unlistenByKey} from './events.js';
import EventType from './events/EventType.js';
import {inherits} from './index.js';
import BaseObject, {getChangeEventType} from './Object.js';
import Geometry from './geom/Geometry.js';
import Style from './style/Style.js';
@@ -51,242 +50,230 @@ import Style from './style/Style.js';
* var point = feature.getGeometry();
* ```
*
* @constructor
* @extends {module:ol/Object}
* @param {module:ol/geom/Geometry|Object.<string, *>=} opt_geometryOrProperties
* You may pass a Geometry object directly, or an object literal containing
* properties. If you pass an object literal, you may include a Geometry
* associated with a `geometry` key.
* @api
*/
const Feature = function(opt_geometryOrProperties) {
BaseObject.call(this);
class Feature extends BaseObject {
/**
* @private
* @type {number|string|undefined}
* @param {module:ol/geom/Geometry|Object<string, *>=} opt_geometryOrProperties
* You may pass a Geometry object directly, or an object literal containing
* properties. If you pass an object literal, you may include a Geometry
* associated with a `geometry` key.
*/
this.id_ = undefined;
constructor(opt_geometryOrProperties) {
/**
* @type {string}
* @private
*/
this.geometryName_ = 'geometry';
super();
/**
* User provided style.
* @private
* @type {module:ol/style/Style|Array.<module:ol/style/Style>|module:ol/style/Style~StyleFunction}
*/
this.style_ = null;
/**
* @private
* @type {number|string|undefined}
*/
this.id_ = undefined;
/**
* @private
* @type {module:ol/style/Style~StyleFunction|undefined}
*/
this.styleFunction_ = undefined;
/**
* @type {string}
* @private
*/
this.geometryName_ = 'geometry';
/**
* @private
* @type {?module:ol/events~EventsKey}
*/
this.geometryChangeKey_ = null;
/**
* User provided style.
* @private
* @type {module:ol/style/Style|Array<module:ol/style/Style>|module:ol/style/Style~StyleFunction}
*/
this.style_ = null;
listen(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
/**
* @private
* @type {module:ol/style/Style~StyleFunction|undefined}
*/
this.styleFunction_ = undefined;
if (opt_geometryOrProperties !== undefined) {
if (opt_geometryOrProperties instanceof Geometry ||
!opt_geometryOrProperties) {
const geometry = opt_geometryOrProperties;
this.setGeometry(geometry);
} else {
/** @type {Object.<string, *>} */
const properties = opt_geometryOrProperties;
this.setProperties(properties);
/**
* @private
* @type {?module:ol/events~EventsKey}
*/
this.geometryChangeKey_ = null;
listen(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
if (opt_geometryOrProperties !== undefined) {
if (opt_geometryOrProperties instanceof Geometry ||
!opt_geometryOrProperties) {
const geometry = opt_geometryOrProperties;
this.setGeometry(geometry);
} else {
/** @type {Object<string, *>} */
const properties = opt_geometryOrProperties;
this.setProperties(properties);
}
}
}
};
inherits(Feature, BaseObject);
/**
* Clone this feature. If the original feature has a geometry it
* is also cloned. The feature id is not set in the clone.
* @return {module:ol/Feature} The clone.
* @api
*/
Feature.prototype.clone = function() {
const clone = new Feature(this.getProperties());
clone.setGeometryName(this.getGeometryName());
const geometry = this.getGeometry();
if (geometry) {
clone.setGeometry(geometry.clone());
/**
* Clone this feature. If the original feature has a geometry it
* is also cloned. The feature id is not set in the clone.
* @return {module:ol/Feature} The clone.
* @api
*/
clone() {
const clone = new Feature(this.getProperties());
clone.setGeometryName(this.getGeometryName());
const geometry = this.getGeometry();
if (geometry) {
clone.setGeometry(geometry.clone());
}
const style = this.getStyle();
if (style) {
clone.setStyle(style);
}
return clone;
}
const style = this.getStyle();
if (style) {
clone.setStyle(style);
/**
* Get the feature's default geometry. A feature may have any number of named
* geometries. The "default" geometry (the one that is rendered by default) is
* set when calling {@link module:ol/Feature~Feature#setGeometry}.
* @return {module:ol/geom/Geometry|undefined} The default geometry for the feature.
* @api
* @observable
*/
getGeometry() {
return (
/** @type {module:ol/geom/Geometry|undefined} */ (this.get(this.geometryName_))
);
}
return clone;
};
/**
* Get the feature's default geometry. A feature may have any number of named
* geometries. The "default" geometry (the one that is rendered by default) is
* set when calling {@link module:ol/Feature~Feature#setGeometry}.
* @return {module:ol/geom/Geometry|undefined} The default geometry for the feature.
* @api
* @observable
*/
Feature.prototype.getGeometry = function() {
return (
/** @type {module:ol/geom/Geometry|undefined} */ (this.get(this.geometryName_))
);
};
/**
* Get the feature identifier. This is a stable identifier for the feature and
* is either set when reading data from a remote source or set explicitly by
* calling {@link module:ol/Feature~Feature#setId}.
* @return {number|string|undefined} Id.
* @api
*/
Feature.prototype.getId = function() {
return this.id_;
};
/**
* Get the name of the feature's default geometry. By default, the default
* geometry is named `geometry`.
* @return {string} Get the property name associated with the default geometry
* for this feature.
* @api
*/
Feature.prototype.getGeometryName = function() {
return this.geometryName_;
};
/**
* Get the feature's style. Will return what was provided to the
* {@link module:ol/Feature~Feature#setStyle} method.
* @return {module:ol/style/Style|Array.<module:ol/style/Style>|module:ol/style/Style~StyleFunction} The feature style.
* @api
*/
Feature.prototype.getStyle = function() {
return this.style_;
};
/**
* Get the feature's style function.
* @return {module:ol/style/Style~StyleFunction|undefined} Return a function
* representing the current style of this feature.
* @api
*/
Feature.prototype.getStyleFunction = function() {
return this.styleFunction_;
};
/**
* @private
*/
Feature.prototype.handleGeometryChange_ = function() {
this.changed();
};
/**
* @private
*/
Feature.prototype.handleGeometryChanged_ = function() {
if (this.geometryChangeKey_) {
unlistenByKey(this.geometryChangeKey_);
this.geometryChangeKey_ = null;
/**
* Get the feature identifier. This is a stable identifier for the feature and
* is either set when reading data from a remote source or set explicitly by
* calling {@link module:ol/Feature~Feature#setId}.
* @return {number|string|undefined} Id.
* @api
*/
getId() {
return this.id_;
}
const geometry = this.getGeometry();
if (geometry) {
this.geometryChangeKey_ = listen(geometry,
EventType.CHANGE, this.handleGeometryChange_, this);
/**
* Get the name of the feature's default geometry. By default, the default
* geometry is named `geometry`.
* @return {string} Get the property name associated with the default geometry
* for this feature.
* @api
*/
getGeometryName() {
return this.geometryName_;
}
this.changed();
};
/**
* Get the feature's style. Will return what was provided to the
* {@link module:ol/Feature~Feature#setStyle} method.
* @return {module:ol/style/Style|Array<module:ol/style/Style>|module:ol/style/Style~StyleFunction} The feature style.
* @api
*/
getStyle() {
return this.style_;
}
/**
* Set the default geometry for the feature. This will update the property
* with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.
* @param {module:ol/geom/Geometry|undefined} geometry The new geometry.
* @api
* @observable
*/
Feature.prototype.setGeometry = function(geometry) {
this.set(this.geometryName_, geometry);
};
/**
* Get the feature's style function.
* @return {module:ol/style/Style~StyleFunction|undefined} Return a function
* representing the current style of this feature.
* @api
*/
getStyleFunction() {
return this.styleFunction_;
}
/**
* @private
*/
handleGeometryChange_() {
this.changed();
}
/**
* Set the style for the feature. This can be a single style object, an array
* of styles, or a function that takes a resolution and returns an array of
* styles. If it is `null` the feature has no style (a `null` style).
* @param {module:ol/style/Style|Array.<module:ol/style/Style>|module:ol/style/Style~StyleFunction} style Style for this feature.
* @api
* @fires module:ol/events/Event~Event#event:change
*/
Feature.prototype.setStyle = function(style) {
this.style_ = style;
this.styleFunction_ = !style ? undefined : createStyleFunction(style);
this.changed();
};
/**
* @private
*/
handleGeometryChanged_() {
if (this.geometryChangeKey_) {
unlistenByKey(this.geometryChangeKey_);
this.geometryChangeKey_ = null;
}
const geometry = this.getGeometry();
if (geometry) {
this.geometryChangeKey_ = listen(geometry,
EventType.CHANGE, this.handleGeometryChange_, this);
}
this.changed();
}
/**
* Set the default geometry for the feature. This will update the property
* with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.
* @param {module:ol/geom/Geometry|undefined} geometry The new geometry.
* @api
* @observable
*/
setGeometry(geometry) {
this.set(this.geometryName_, geometry);
}
/**
* Set the feature id. The feature id is considered stable and may be used when
* requesting features or comparing identifiers returned from a remote source.
* The feature id can be used with the
* {@link module:ol/source/Vector~VectorSource#getFeatureById} method.
* @param {number|string|undefined} id The feature id.
* @api
* @fires module:ol/events/Event~Event#event:change
*/
Feature.prototype.setId = function(id) {
this.id_ = id;
this.changed();
};
/**
* Set the style for the feature. This can be a single style object, an array
* of styles, or a function that takes a resolution and returns an array of
* styles. If it is `null` the feature has no style (a `null` style).
* @param {module:ol/style/Style|Array<module:ol/style/Style>|module:ol/style/Style~StyleFunction} style Style for this feature.
* @api
* @fires module:ol/events/Event~Event#event:change
*/
setStyle(style) {
this.style_ = style;
this.styleFunction_ = !style ? undefined : createStyleFunction(style);
this.changed();
}
/**
* Set the feature id. The feature id is considered stable and may be used when
* requesting features or comparing identifiers returned from a remote source.
* The feature id can be used with the
* {@link module:ol/source/Vector~VectorSource#getFeatureById} method.
* @param {number|string|undefined} id The feature id.
* @api
* @fires module:ol/events/Event~Event#event:change
*/
setId(id) {
this.id_ = id;
this.changed();
}
/**
* Set the property name to be used when getting the feature's default geometry.
* When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with
* this name will be returned.
* @param {string} name The property name of the default geometry.
* @api
*/
Feature.prototype.setGeometryName = function(name) {
unlisten(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
this.geometryName_ = name;
listen(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
this.handleGeometryChanged_();
};
/**
* Set the property name to be used when getting the feature's default geometry.
* When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with
* this name will be returned.
* @param {string} name The property name of the default geometry.
* @api
*/
setGeometryName(name) {
unlisten(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
this.geometryName_ = name;
listen(
this, getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, this);
this.handleGeometryChanged_();
}
}
/**
* Convert the provided object into a feature style function. Functions passed
* through unchanged. Arrays of module:ol/style/Style or single style objects wrapped
* in a new feature style function.
* @param {module:ol/style/Style~StyleFunction|!Array.<module:ol/style/Style>|!module:ol/style/Style} obj
* @param {module:ol/style/Style~StyleFunction|!Array<module:ol/style/Style>|!module:ol/style/Style} obj
* A feature style function, a single style, or an array of styles.
* @return {module:ol/style/Style~StyleFunction} A style function.
*/
@@ -295,7 +282,7 @@ export function createStyleFunction(obj) {
return obj;
} else {
/**
* @type {Array.<module:ol/style/Style>}
* @type {Array<module:ol/style/Style>}
*/
let styles;
if (Array.isArray(obj)) {

View File

@@ -1,7 +1,6 @@
/**
* @module ol/Geolocation
*/
import {inherits} from './index.js';
import GeolocationProperty from './GeolocationProperty.js';
import BaseObject, {getChangeEventType} from './Object.js';
import {listen} from './events.js';
@@ -16,8 +15,8 @@ import {get as getProjection, getTransformFromProjections, identityTransform} fr
* @typedef {Object} Options
* @property {boolean} [tracking=false] Start Tracking right after
* instantiation.
* @property {GeolocationPositionOptions} [trackingOptions] Tracking options.
* See {@link http://www.w3.org/TR/geolocation-API/#position_options_interface}.
* @property {PositionOptions} [trackingOptions] Tracking options.
* See http://www.w3.org/TR/geolocation-API/#position_options_interface.
* @property {module:ol/proj~ProjectionLike} [projection] The projection the position
* is reported in.
*/
@@ -44,307 +43,293 @@ import {get as getProjection, getTransformFromProjections, identityTransform} fr
* });
*
* @fires error
* @constructor
* @extends {module:ol/Object}
* @param {module:ol/Geolocation~Options=} opt_options Options.
* @api
*/
const Geolocation = function(opt_options) {
BaseObject.call(this);
const options = opt_options || {};
class Geolocation extends BaseObject {
/**
* The unprojected (EPSG:4326) device position.
* @private
* @type {module:ol/coordinate~Coordinate}
* @param {module:ol/Geolocation~Options=} opt_options Options.
*/
this.position_ = null;
constructor(opt_options) {
/**
* @private
* @type {module:ol/proj~TransformFunction}
*/
this.transform_ = identityTransform;
super();
/**
* @private
* @type {number|undefined}
*/
this.watchId_ = undefined;
const options = opt_options || {};
listen(
this, getChangeEventType(GeolocationProperty.PROJECTION),
this.handleProjectionChanged_, this);
listen(
this, getChangeEventType(GeolocationProperty.TRACKING),
this.handleTrackingChanged_, this);
/**
* The unprojected (EPSG:4326) device position.
* @private
* @type {module:ol/coordinate~Coordinate}
*/
this.position_ = null;
/**
* @private
* @type {module:ol/proj~TransformFunction}
*/
this.transform_ = identityTransform;
/**
* @private
* @type {number|undefined}
*/
this.watchId_ = undefined;
listen(
this, getChangeEventType(GeolocationProperty.PROJECTION),
this.handleProjectionChanged_, this);
listen(
this, getChangeEventType(GeolocationProperty.TRACKING),
this.handleTrackingChanged_, this);
if (options.projection !== undefined) {
this.setProjection(options.projection);
}
if (options.trackingOptions !== undefined) {
this.setTrackingOptions(options.trackingOptions);
}
this.setTracking(options.tracking !== undefined ? options.tracking : false);
if (options.projection !== undefined) {
this.setProjection(options.projection);
}
if (options.trackingOptions !== undefined) {
this.setTrackingOptions(options.trackingOptions);
}
this.setTracking(options.tracking !== undefined ? options.tracking : false);
/**
* @inheritDoc
*/
disposeInternal() {
this.setTracking(false);
super.disposeInternal();
}
};
inherits(Geolocation, BaseObject);
/**
* @inheritDoc
*/
Geolocation.prototype.disposeInternal = function() {
this.setTracking(false);
BaseObject.prototype.disposeInternal.call(this);
};
/**
* @private
*/
Geolocation.prototype.handleProjectionChanged_ = function() {
const projection = this.getProjection();
if (projection) {
this.transform_ = getTransformFromProjections(
getProjection('EPSG:4326'), projection);
if (this.position_) {
this.set(GeolocationProperty.POSITION, this.transform_(this.position_));
/**
* @private
*/
handleProjectionChanged_() {
const projection = this.getProjection();
if (projection) {
this.transform_ = getTransformFromProjections(
getProjection('EPSG:4326'), projection);
if (this.position_) {
this.set(GeolocationProperty.POSITION, this.transform_(this.position_));
}
}
}
};
/**
* @private
*/
Geolocation.prototype.handleTrackingChanged_ = function() {
if (GEOLOCATION) {
const tracking = this.getTracking();
if (tracking && this.watchId_ === undefined) {
this.watchId_ = navigator.geolocation.watchPosition(
this.positionChange_.bind(this),
this.positionError_.bind(this),
this.getTrackingOptions());
} else if (!tracking && this.watchId_ !== undefined) {
navigator.geolocation.clearWatch(this.watchId_);
this.watchId_ = undefined;
/**
* @private
*/
handleTrackingChanged_() {
if (GEOLOCATION) {
const tracking = this.getTracking();
if (tracking && this.watchId_ === undefined) {
this.watchId_ = navigator.geolocation.watchPosition(
this.positionChange_.bind(this),
this.positionError_.bind(this),
this.getTrackingOptions());
} else if (!tracking && this.watchId_ !== undefined) {
navigator.geolocation.clearWatch(this.watchId_);
this.watchId_ = undefined;
}
}
}
};
/**
* @private
* @param {GeolocationPosition} position position event.
*/
Geolocation.prototype.positionChange_ = function(position) {
const coords = position.coords;
this.set(GeolocationProperty.ACCURACY, coords.accuracy);
this.set(GeolocationProperty.ALTITUDE,
coords.altitude === null ? undefined : coords.altitude);
this.set(GeolocationProperty.ALTITUDE_ACCURACY,
coords.altitudeAccuracy === null ?
undefined : coords.altitudeAccuracy);
this.set(GeolocationProperty.HEADING, coords.heading === null ?
undefined : toRadians(coords.heading));
if (!this.position_) {
this.position_ = [coords.longitude, coords.latitude];
} else {
this.position_[0] = coords.longitude;
this.position_[1] = coords.latitude;
/**
* @private
* @param {Position} position position event.
*/
positionChange_(position) {
const coords = position.coords;
this.set(GeolocationProperty.ACCURACY, coords.accuracy);
this.set(GeolocationProperty.ALTITUDE,
coords.altitude === null ? undefined : coords.altitude);
this.set(GeolocationProperty.ALTITUDE_ACCURACY,
coords.altitudeAccuracy === null ?
undefined : coords.altitudeAccuracy);
this.set(GeolocationProperty.HEADING, coords.heading === null ?
undefined : toRadians(coords.heading));
if (!this.position_) {
this.position_ = [coords.longitude, coords.latitude];
} else {
this.position_[0] = coords.longitude;
this.position_[1] = coords.latitude;
}
const projectedPosition = this.transform_(this.position_);
this.set(GeolocationProperty.POSITION, projectedPosition);
this.set(GeolocationProperty.SPEED,
coords.speed === null ? undefined : coords.speed);
const geometry = circularPolygon(this.position_, coords.accuracy);
geometry.applyTransform(this.transform_);
this.set(GeolocationProperty.ACCURACY_GEOMETRY, geometry);
this.changed();
}
const projectedPosition = this.transform_(this.position_);
this.set(GeolocationProperty.POSITION, projectedPosition);
this.set(GeolocationProperty.SPEED,
coords.speed === null ? undefined : coords.speed);
const geometry = circularPolygon(this.position_, coords.accuracy);
geometry.applyTransform(this.transform_);
this.set(GeolocationProperty.ACCURACY_GEOMETRY, geometry);
this.changed();
};
/**
* Triggered when the Geolocation returns an error.
* @event error
* @api
*/
/**
* Triggered when the Geolocation returns an error.
* @event error
* @api
*/
/**
* @private
* @param {GeolocationPositionError} error error object.
*/
Geolocation.prototype.positionError_ = function(error) {
error.type = EventType.ERROR;
this.setTracking(false);
this.dispatchEvent(/** @type {{type: string, target: undefined}} */ (error));
};
/**
* @private
* @param {PositionError} error error object.
*/
positionError_(error) {
error.type = EventType.ERROR;
this.setTracking(false);
this.dispatchEvent(/** @type {{type: string, target: undefined}} */ (error));
}
/**
* Get the accuracy of the position in meters.
* @return {number|undefined} The accuracy of the position measurement in
* meters.
* @observable
* @api
*/
getAccuracy() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ACCURACY));
}
/**
* Get a geometry of the position accuracy.
* @return {?module:ol/geom/Polygon} A geometry of the position accuracy.
* @observable
* @api
*/
getAccuracyGeometry() {
return (
/** @type {?module:ol/geom/Polygon} */ (this.get(GeolocationProperty.ACCURACY_GEOMETRY) || null)
);
}
/**
* Get the altitude associated with the position.
* @return {number|undefined} The altitude of the position in meters above mean
* sea level.
* @observable
* @api
*/
getAltitude() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ALTITUDE));
}
/**
* Get the altitude accuracy of the position.
* @return {number|undefined} The accuracy of the altitude measurement in
* meters.
* @observable
* @api
*/
getAltitudeAccuracy() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ALTITUDE_ACCURACY));
}
/**
* Get the heading as radians clockwise from North.
* Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`
* is set to `true` in the tracking options.
* @return {number|undefined} The heading of the device in radians from north.
* @observable
* @api
*/
getHeading() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.HEADING));
}
/**
* Get the position of the device.
* @return {module:ol/coordinate~Coordinate|undefined} The current position of the device reported
* in the current projection.
* @observable
* @api
*/
getPosition() {
return (
/** @type {module:ol/coordinate~Coordinate|undefined} */ (this.get(GeolocationProperty.POSITION))
);
}
/**
* Get the projection associated with the position.
* @return {module:ol/proj/Projection|undefined} The projection the position is
* reported in.
* @observable
* @api
*/
getProjection() {
return (
/** @type {module:ol/proj/Projection|undefined} */ (this.get(GeolocationProperty.PROJECTION))
);
}
/**
* Get the speed in meters per second.
* @return {number|undefined} The instantaneous speed of the device in meters
* per second.
* @observable
* @api
*/
getSpeed() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.SPEED));
}
/**
* Determine if the device location is being tracked.
* @return {boolean} The device location is being tracked.
* @observable
* @api
*/
getTracking() {
return /** @type {boolean} */ (this.get(GeolocationProperty.TRACKING));
}
/**
* Get the tracking options.
* See http://www.w3.org/TR/geolocation-API/#position-options.
* @return {PositionOptions|undefined} PositionOptions as defined by
* the [HTML5 Geolocation spec
* ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
* @observable
* @api
*/
getTrackingOptions() {
return /** @type {PositionOptions|undefined} */ (this.get(GeolocationProperty.TRACKING_OPTIONS));
}
/**
* Set the projection to use for transforming the coordinates.
* @param {module:ol/proj~ProjectionLike} projection The projection the position is
* reported in.
* @observable
* @api
*/
setProjection(projection) {
this.set(GeolocationProperty.PROJECTION, getProjection(projection));
}
/**
* Enable or disable tracking.
* @param {boolean} tracking Enable tracking.
* @observable
* @api
*/
setTracking(tracking) {
this.set(GeolocationProperty.TRACKING, tracking);
}
/**
* Set the tracking options.
* See http://www.w3.org/TR/geolocation-API/#position-options.
* @param {PositionOptions} options PositionOptions as defined by the
* [HTML5 Geolocation spec
* ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
* @observable
* @api
*/
setTrackingOptions(options) {
this.set(GeolocationProperty.TRACKING_OPTIONS, options);
}
}
/**
* Get the accuracy of the position in meters.
* @return {number|undefined} The accuracy of the position measurement in
* meters.
* @observable
* @api
*/
Geolocation.prototype.getAccuracy = function() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ACCURACY));
};
/**
* Get a geometry of the position accuracy.
* @return {?module:ol/geom/Polygon} A geometry of the position accuracy.
* @observable
* @api
*/
Geolocation.prototype.getAccuracyGeometry = function() {
return (
/** @type {?module:ol/geom/Polygon} */ (this.get(GeolocationProperty.ACCURACY_GEOMETRY) || null)
);
};
/**
* Get the altitude associated with the position.
* @return {number|undefined} The altitude of the position in meters above mean
* sea level.
* @observable
* @api
*/
Geolocation.prototype.getAltitude = function() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ALTITUDE));
};
/**
* Get the altitude accuracy of the position.
* @return {number|undefined} The accuracy of the altitude measurement in
* meters.
* @observable
* @api
*/
Geolocation.prototype.getAltitudeAccuracy = function() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.ALTITUDE_ACCURACY));
};
/**
* Get the heading as radians clockwise from North.
* Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`
* is set to `true` in the tracking options.
* @return {number|undefined} The heading of the device in radians from north.
* @observable
* @api
*/
Geolocation.prototype.getHeading = function() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.HEADING));
};
/**
* Get the position of the device.
* @return {module:ol/coordinate~Coordinate|undefined} The current position of the device reported
* in the current projection.
* @observable
* @api
*/
Geolocation.prototype.getPosition = function() {
return (
/** @type {module:ol/coordinate~Coordinate|undefined} */ (this.get(GeolocationProperty.POSITION))
);
};
/**
* Get the projection associated with the position.
* @return {module:ol/proj/Projection|undefined} The projection the position is
* reported in.
* @observable
* @api
*/
Geolocation.prototype.getProjection = function() {
return (
/** @type {module:ol/proj/Projection|undefined} */ (this.get(GeolocationProperty.PROJECTION))
);
};
/**
* Get the speed in meters per second.
* @return {number|undefined} The instantaneous speed of the device in meters
* per second.
* @observable
* @api
*/
Geolocation.prototype.getSpeed = function() {
return /** @type {number|undefined} */ (this.get(GeolocationProperty.SPEED));
};
/**
* Determine if the device location is being tracked.
* @return {boolean} The device location is being tracked.
* @observable
* @api
*/
Geolocation.prototype.getTracking = function() {
return /** @type {boolean} */ (this.get(GeolocationProperty.TRACKING));
};
/**
* Get the tracking options.
* @see http://www.w3.org/TR/geolocation-API/#position-options
* @return {GeolocationPositionOptions|undefined} PositionOptions as defined by
* the [HTML5 Geolocation spec
* ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
* @observable
* @api
*/
Geolocation.prototype.getTrackingOptions = function() {
return /** @type {GeolocationPositionOptions|undefined} */ (this.get(GeolocationProperty.TRACKING_OPTIONS));
};
/**
* Set the projection to use for transforming the coordinates.
* @param {module:ol/proj~ProjectionLike} projection The projection the position is
* reported in.
* @observable
* @api
*/
Geolocation.prototype.setProjection = function(projection) {
this.set(GeolocationProperty.PROJECTION, getProjection(projection));
};
/**
* Enable or disable tracking.
* @param {boolean} tracking Enable tracking.
* @observable
* @api
*/
Geolocation.prototype.setTracking = function(tracking) {
this.set(GeolocationProperty.TRACKING, tracking);
};
/**
* Set the tracking options.
* @see http://www.w3.org/TR/geolocation-API/#position-options
* @param {GeolocationPositionOptions} options PositionOptions as defined by the
* [HTML5 Geolocation spec
* ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
* @observable
* @api
*/
Geolocation.prototype.setTrackingOptions = function(options) {
this.set(GeolocationProperty.TRACKING_OPTIONS, options);
};
export default Geolocation;

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,6 @@
/**
* @module ol/Image
*/
import {inherits} from './index.js';
import ImageBase from './ImageBase.js';
import ImageState from './ImageState.js';
import {listenOnce, unlistenByKey} from './events.js';
@@ -28,132 +27,126 @@ import {getHeight} from './extent.js';
*/
/**
* @constructor
* @extends {module:ol/ImageBase}
* @param {module:ol/extent~Extent} extent Extent.
* @param {number|undefined} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {string} src Image source URI.
* @param {?string} crossOrigin Cross origin.
* @param {module:ol/Image~LoadFunction} imageLoadFunction Image load function.
*/
const ImageWrapper = function(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {
ImageBase.call(this, extent, resolution, pixelRatio, ImageState.IDLE);
class ImageWrapper extends ImageBase {
/**
* @private
* @type {string}
* @param {module:ol/extent~Extent} extent Extent.
* @param {number|undefined} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {string} src Image source URI.
* @param {?string} crossOrigin Cross origin.
* @param {module:ol/Image~LoadFunction} imageLoadFunction Image load function.
*/
this.src_ = src;
constructor(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {
super(extent, resolution, pixelRatio, ImageState.IDLE);
/**
* @private
* @type {string}
*/
this.src_ = src;
/**
* @private
* @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}
*/
this.image_ = new Image();
if (crossOrigin !== null) {
this.image_.crossOrigin = crossOrigin;
}
/**
* @private
* @type {Array<module:ol/events~EventsKey>}
*/
this.imageListenerKeys_ = null;
/**
* @protected
* @type {module:ol/ImageState}
*/
this.state = ImageState.IDLE;
/**
* @private
* @type {module:ol/Image~LoadFunction}
*/
this.imageLoadFunction_ = imageLoadFunction;
/**
* @private
* @type {HTMLCanvasElement|Image|HTMLVideoElement}
*/
this.image_ = new Image();
if (crossOrigin !== null) {
this.image_.crossOrigin = crossOrigin;
}
/**
* @private
* @type {Array.<module:ol/events~EventsKey>}
* @inheritDoc
* @api
*/
this.imageListenerKeys_ = null;
/**
* @protected
* @type {module:ol/ImageState}
*/
this.state = ImageState.IDLE;
/**
* @private
* @type {module:ol/Image~LoadFunction}
*/
this.imageLoadFunction_ = imageLoadFunction;
};
inherits(ImageWrapper, ImageBase);
/**
* @inheritDoc
* @api
*/
ImageWrapper.prototype.getImage = function() {
return this.image_;
};
/**
* Tracks loading or read errors.
*
* @private
*/
ImageWrapper.prototype.handleImageError_ = function() {
this.state = ImageState.ERROR;
this.unlistenImage_();
this.changed();
};
/**
* Tracks successful image load.
*
* @private
*/
ImageWrapper.prototype.handleImageLoad_ = function() {
if (this.resolution === undefined) {
this.resolution = getHeight(this.extent) / this.image_.height;
getImage() {
return this.image_;
}
this.state = ImageState.LOADED;
this.unlistenImage_();
this.changed();
};
/**
* Load the image or retry if loading previously failed.
* Loading is taken care of by the tile queue, and calling this method is
* only needed for preloading or for reloading in case of an error.
* @override
* @api
*/
ImageWrapper.prototype.load = function() {
if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {
this.state = ImageState.LOADING;
/**
* Tracks loading or read errors.
*
* @private
*/
handleImageError_() {
this.state = ImageState.ERROR;
this.unlistenImage_();
this.changed();
this.imageListenerKeys_ = [
listenOnce(this.image_, EventType.ERROR,
this.handleImageError_, this),
listenOnce(this.image_, EventType.LOAD,
this.handleImageLoad_, this)
];
this.imageLoadFunction_(this, this.src_);
}
};
/**
* Tracks successful image load.
*
* @private
*/
handleImageLoad_() {
if (this.resolution === undefined) {
this.resolution = getHeight(this.extent) / this.image_.height;
}
this.state = ImageState.LOADED;
this.unlistenImage_();
this.changed();
}
/**
* @param {HTMLCanvasElement|Image|HTMLVideoElement} image Image.
*/
ImageWrapper.prototype.setImage = function(image) {
this.image_ = image;
};
/**
* Load the image or retry if loading previously failed.
* Loading is taken care of by the tile queue, and calling this method is
* only needed for preloading or for reloading in case of an error.
* @override
* @api
*/
load() {
if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {
this.state = ImageState.LOADING;
this.changed();
this.imageListenerKeys_ = [
listenOnce(this.image_, EventType.ERROR,
this.handleImageError_, this),
listenOnce(this.image_, EventType.LOAD,
this.handleImageLoad_, this)
];
this.imageLoadFunction_(this, this.src_);
}
}
/**
* @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.
*/
setImage(image) {
this.image_ = image;
}
/**
* Discards event handlers which listen for load completion or errors.
*
* @private
*/
unlistenImage_() {
this.imageListenerKeys_.forEach(unlistenByKey);
this.imageListenerKeys_ = null;
}
}
/**
* Discards event handlers which listen for load completion or errors.
*
* @private
*/
ImageWrapper.prototype.unlistenImage_ = function() {
this.imageListenerKeys_.forEach(unlistenByKey);
this.imageListenerKeys_ = null;
};
export default ImageWrapper;

View File

@@ -1,103 +1,97 @@
/**
* @module ol/ImageBase
*/
import {inherits} from './index.js';
import EventTarget from './events/EventTarget.js';
import EventTarget from './events/Target.js';
import EventType from './events/EventType.js';
/**
* @constructor
* @abstract
* @extends {module:ol/events/EventTarget}
* @param {module:ol/extent~Extent} extent Extent.
* @param {number|undefined} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {module:ol/ImageState} state State.
*/
const ImageBase = function(extent, resolution, pixelRatio, state) {
class ImageBase extends EventTarget {
EventTarget.call(this);
/**
* @param {module:ol/extent~Extent} extent Extent.
* @param {number|undefined} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {module:ol/ImageState} state State.
*/
constructor(extent, resolution, pixelRatio, state) {
super();
/**
* @protected
* @type {module:ol/extent~Extent}
*/
this.extent = extent;
/**
* @private
* @type {number}
*/
this.pixelRatio_ = pixelRatio;
/**
* @protected
* @type {number|undefined}
*/
this.resolution = resolution;
/**
* @protected
* @type {module:ol/ImageState}
*/
this.state = state;
}
/**
* @protected
* @type {module:ol/extent~Extent}
*/
this.extent = extent;
changed() {
this.dispatchEvent(EventType.CHANGE);
}
/**
* @private
* @type {number}
* @return {module:ol/extent~Extent} Extent.
*/
this.pixelRatio_ = pixelRatio;
getExtent() {
return this.extent;
}
/**
* @protected
* @type {number|undefined}
* @abstract
* @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
*/
this.resolution = resolution;
getImage() {}
/**
* @protected
* @type {module:ol/ImageState}
* @return {number} PixelRatio.
*/
this.state = state;
getPixelRatio() {
return this.pixelRatio_;
}
};
/**
* @return {number} Resolution.
*/
getResolution() {
return /** @type {number} */ (this.resolution);
}
inherits(ImageBase, EventTarget);
/**
* @return {module:ol/ImageState} State.
*/
getState() {
return this.state;
}
/**
* Load not yet loaded URI.
* @abstract
*/
load() {}
}
/**
* @protected
*/
ImageBase.prototype.changed = function() {
this.dispatchEvent(EventType.CHANGE);
};
/**
* @return {module:ol/extent~Extent} Extent.
*/
ImageBase.prototype.getExtent = function() {
return this.extent;
};
/**
* @abstract
* @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
*/
ImageBase.prototype.getImage = function() {};
/**
* @return {number} PixelRatio.
*/
ImageBase.prototype.getPixelRatio = function() {
return this.pixelRatio_;
};
/**
* @return {number} Resolution.
*/
ImageBase.prototype.getResolution = function() {
return /** @type {number} */ (this.resolution);
};
/**
* @return {module:ol/ImageState} State.
*/
ImageBase.prototype.getState = function() {
return this.state;
};
/**
* Load not yet loaded URI.
* @abstract
*/
ImageBase.prototype.load = function() {};
export default ImageBase;

View File

@@ -1,7 +1,6 @@
/**
* @module ol/ImageCanvas
*/
import {inherits} from './index.js';
import ImageBase from './ImageBase.js';
import ImageState from './ImageState.js';
@@ -16,87 +15,84 @@ import ImageState from './ImageState.js';
*/
/**
* @constructor
* @extends {module:ol/ImageBase}
* @param {module:ol/extent~Extent} extent Extent.
* @param {number} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {HTMLCanvasElement} canvas Canvas.
* @param {module:ol/ImageCanvas~Loader=} opt_loader Optional loader function to
* support asynchronous canvas drawing.
*/
const ImageCanvas = function(extent, resolution, pixelRatio, canvas, opt_loader) {
class ImageCanvas extends ImageBase {
/**
* Optional canvas loader function.
* @type {?module:ol/ImageCanvas~Loader}
* @private
* @param {module:ol/extent~Extent} extent Extent.
* @param {number} resolution Resolution.
* @param {number} pixelRatio Pixel ratio.
* @param {HTMLCanvasElement} canvas Canvas.
* @param {module:ol/ImageCanvas~Loader=} opt_loader Optional loader function to
* support asynchronous canvas drawing.
*/
this.loader_ = opt_loader !== undefined ? opt_loader : null;
constructor(extent, resolution, pixelRatio, canvas, opt_loader) {
const state = opt_loader !== undefined ? ImageState.IDLE : ImageState.LOADED;
const state = opt_loader !== undefined ? ImageState.IDLE : ImageState.LOADED;
ImageBase.call(this, extent, resolution, pixelRatio, state);
super(extent, resolution, pixelRatio, state);
/**
* @private
* @type {HTMLCanvasElement}
*/
this.canvas_ = canvas;
/**
* Optional canvas loader function.
* @type {?module:ol/ImageCanvas~Loader}
* @private
*/
this.loader_ = opt_loader !== undefined ? opt_loader : null;
/**
* @private
* @type {Error}
*/
this.error_ = null;
/**
* @private
* @type {HTMLCanvasElement}
*/
this.canvas_ = canvas;
};
/**
* @private
* @type {Error}
*/
this.error_ = null;
inherits(ImageCanvas, ImageBase);
/**
* Get any error associated with asynchronous rendering.
* @return {Error} Any error that occurred during rendering.
*/
ImageCanvas.prototype.getError = function() {
return this.error_;
};
/**
* Handle async drawing complete.
* @param {Error} err Any error during drawing.
* @private
*/
ImageCanvas.prototype.handleLoad_ = function(err) {
if (err) {
this.error_ = err;
this.state = ImageState.ERROR;
} else {
this.state = ImageState.LOADED;
}
this.changed();
};
/**
* Get any error associated with asynchronous rendering.
* @return {Error} Any error that occurred during rendering.
*/
getError() {
return this.error_;
}
/**
* @inheritDoc
*/
ImageCanvas.prototype.load = function() {
if (this.state == ImageState.IDLE) {
this.state = ImageState.LOADING;
/**
* Handle async drawing complete.
* @param {Error} err Any error during drawing.
* @private
*/
handleLoad_(err) {
if (err) {
this.error_ = err;
this.state = ImageState.ERROR;
} else {
this.state = ImageState.LOADED;
}
this.changed();
this.loader_(this.handleLoad_.bind(this));
}
};
/**
* @inheritDoc
*/
load() {
if (this.state == ImageState.IDLE) {
this.state = ImageState.LOADING;
this.changed();
this.loader_(this.handleLoad_.bind(this));
}
}
/**
* @return {HTMLCanvasElement} Canvas element.
*/
getImage() {
return this.canvas_;
}
}
/**
* @return {HTMLCanvasElement} Canvas element.
*/
ImageCanvas.prototype.getImage = function() {
return this.canvas_;
};
export default ImageCanvas;

View File

@@ -1,7 +1,6 @@
/**
* @module ol/ImageTile
*/
import {inherits} from './index.js';
import Tile from './Tile.js';
import TileState from './TileState.js';
import {createCanvasContext2D} from './dom.js';
@@ -14,159 +13,151 @@ import EventType from './events/EventType.js';
* @api
*/
/**
* @constructor
* @extends {module:ol/Tile}
* @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.
* @param {module:ol/TileState} state State.
* @param {string} src Image source URI.
* @param {?string} crossOrigin Cross origin.
* @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.
* @param {module:ol/Tile~Options=} opt_options Tile options.
*/
const ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {
Tile.call(this, tileCoord, state, opt_options);
class ImageTile extends Tile {
/**
* @private
* @type {?string}
* @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.
* @param {module:ol/TileState} state State.
* @param {string} src Image source URI.
* @param {?string} crossOrigin Cross origin.
* @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.
* @param {module:ol/Tile~Options=} opt_options Tile options.
*/
this.crossOrigin_ = crossOrigin;
constructor(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {
super(tileCoord, state, opt_options);
/**
* @private
* @type {?string}
*/
this.crossOrigin_ = crossOrigin;
/**
* Image URI
*
* @private
* @type {string}
*/
this.src_ = src;
/**
* @private
* @type {HTMLImageElement|HTMLCanvasElement}
*/
this.image_ = new Image();
if (crossOrigin !== null) {
this.image_.crossOrigin = crossOrigin;
}
/**
* @private
* @type {Array<module:ol/events~EventsKey>}
*/
this.imageListenerKeys_ = null;
/**
* @private
* @type {module:ol/Tile~LoadFunction}
*/
this.tileLoadFunction_ = tileLoadFunction;
}
/**
* Image URI
* @inheritDoc
*/
disposeInternal() {
if (this.state == TileState.LOADING) {
this.unlistenImage_();
this.image_ = getBlankImage();
}
if (this.interimTile) {
this.interimTile.dispose();
}
this.state = TileState.ABORT;
this.changed();
super.disposeInternal();
}
/**
* Get the HTML image element for this tile (may be a Canvas, Image, or Video).
* @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
* @api
*/
getImage() {
return this.image_;
}
/**
* @inheritDoc
*/
getKey() {
return this.src_;
}
/**
* Tracks loading or read errors.
*
* @private
* @type {string}
*/
this.src_ = src;
/**
* @private
* @type {Image|HTMLCanvasElement}
*/
this.image_ = new Image();
if (crossOrigin !== null) {
this.image_.crossOrigin = crossOrigin;
}
/**
* @private
* @type {Array.<module:ol/events~EventsKey>}
*/
this.imageListenerKeys_ = null;
/**
* @private
* @type {module:ol/Tile~LoadFunction}
*/
this.tileLoadFunction_ = tileLoadFunction;
};
inherits(ImageTile, Tile);
/**
* @inheritDoc
*/
ImageTile.prototype.disposeInternal = function() {
if (this.state == TileState.LOADING) {
handleImageError_() {
this.state = TileState.ERROR;
this.unlistenImage_();
this.image_ = getBlankImage();
this.changed();
}
if (this.interimTile) {
this.interimTile.dispose();
/**
* Tracks successful image load.
*
* @private
*/
handleImageLoad_() {
if (this.image_.naturalWidth && this.image_.naturalHeight) {
this.state = TileState.LOADED;
} else {
this.state = TileState.EMPTY;
}
this.unlistenImage_();
this.changed();
}
this.state = TileState.ABORT;
this.changed();
Tile.prototype.disposeInternal.call(this);
};
/**
* Get the HTML image element for this tile (may be a Canvas, Image, or Video).
* @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
* @api
*/
ImageTile.prototype.getImage = function() {
return this.image_;
};
/**
* @inheritDoc
*/
ImageTile.prototype.getKey = function() {
return this.src_;
};
/**
* Tracks loading or read errors.
*
* @private
*/
ImageTile.prototype.handleImageError_ = function() {
this.state = TileState.ERROR;
this.unlistenImage_();
this.image_ = getBlankImage();
this.changed();
};
/**
* Tracks successful image load.
*
* @private
*/
ImageTile.prototype.handleImageLoad_ = function() {
if (this.image_.naturalWidth && this.image_.naturalHeight) {
this.state = TileState.LOADED;
} else {
this.state = TileState.EMPTY;
}
this.unlistenImage_();
this.changed();
};
/**
* @inheritDoc
* @api
*/
ImageTile.prototype.load = function() {
if (this.state == TileState.ERROR) {
this.state = TileState.IDLE;
this.image_ = new Image();
if (this.crossOrigin_ !== null) {
this.image_.crossOrigin = this.crossOrigin_;
/**
* @inheritDoc
* @api
*/
load() {
if (this.state == TileState.ERROR) {
this.state = TileState.IDLE;
this.image_ = new Image();
if (this.crossOrigin_ !== null) {
this.image_.crossOrigin = this.crossOrigin_;
}
}
if (this.state == TileState.IDLE) {
this.state = TileState.LOADING;
this.changed();
this.imageListenerKeys_ = [
listenOnce(this.image_, EventType.ERROR,
this.handleImageError_, this),
listenOnce(this.image_, EventType.LOAD,
this.handleImageLoad_, this)
];
this.tileLoadFunction_(this, this.src_);
}
}
if (this.state == TileState.IDLE) {
this.state = TileState.LOADING;
this.changed();
this.imageListenerKeys_ = [
listenOnce(this.image_, EventType.ERROR,
this.handleImageError_, this),
listenOnce(this.image_, EventType.LOAD,
this.handleImageLoad_, this)
];
this.tileLoadFunction_(this, this.src_);
/**
* Discards event handlers which listen for load completion or errors.
*
* @private
*/
unlistenImage_() {
this.imageListenerKeys_.forEach(unlistenByKey);
this.imageListenerKeys_ = null;
}
};
/**
* Discards event handlers which listen for load completion or errors.
*
* @private
*/
ImageTile.prototype.unlistenImage_ = function() {
this.imageListenerKeys_.forEach(unlistenByKey);
this.imageListenerKeys_ = null;
};
}
/**

View File

@@ -6,124 +6,123 @@
* @classdesc
* Implementation of inertial deceleration for map movement.
*
* @constructor
* @param {number} decay Rate of decay (must be negative).
* @param {number} minVelocity Minimum velocity (pixels/millisecond).
* @param {number} delay Delay to consider to calculate the kinetic
* initial values (milliseconds).
* @struct
* @api
*/
const Kinetic = function(decay, minVelocity, delay) {
class Kinetic {
/**
* @private
* @type {number}
* @param {number} decay Rate of decay (must be negative).
* @param {number} minVelocity Minimum velocity (pixels/millisecond).
* @param {number} delay Delay to consider to calculate the kinetic
* initial values (milliseconds).
*/
this.decay_ = decay;
constructor(decay, minVelocity, delay) {
/**
* @private
* @type {number}
*/
this.minVelocity_ = minVelocity;
/**
* @private
* @type {number}
*/
this.decay_ = decay;
/**
* @private
* @type {number}
*/
this.delay_ = delay;
/**
* @private
* @type {number}
*/
this.minVelocity_ = minVelocity;
/**
* @private
* @type {Array.<number>}
*/
this.points_ = [];
/**
* @private
* @type {number}
*/
this.delay_ = delay;
/**
* @private
* @type {number}
*/
this.angle_ = 0;
/**
* @private
* @type {Array<number>}
*/
this.points_ = [];
/**
* @private
* @type {number}
*/
this.initialVelocity_ = 0;
};
/**
* @private
* @type {number}
*/
this.angle_ = 0;
/**
* FIXME empty description for jsdoc
*/
Kinetic.prototype.begin = function() {
this.points_.length = 0;
this.angle_ = 0;
this.initialVelocity_ = 0;
};
/**
* @param {number} x X.
* @param {number} y Y.
*/
Kinetic.prototype.update = function(x, y) {
this.points_.push(x, y, Date.now());
};
/**
* @return {boolean} Whether we should do kinetic animation.
*/
Kinetic.prototype.end = function() {
if (this.points_.length < 6) {
// at least 2 points are required (i.e. there must be at least 6 elements
// in the array)
return false;
}
const delay = Date.now() - this.delay_;
const lastIndex = this.points_.length - 3;
if (this.points_[lastIndex + 2] < delay) {
// the last tracked point is too old, which means that the user stopped
// panning before releasing the map
return false;
/**
* @private
* @type {number}
*/
this.initialVelocity_ = 0;
}
// get the first point which still falls into the delay time
let firstIndex = lastIndex - 3;
while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {
firstIndex -= 3;
/**
* FIXME empty description for jsdoc
*/
begin() {
this.points_.length = 0;
this.angle_ = 0;
this.initialVelocity_ = 0;
}
const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
// we don't want a duration of 0 (divide by zero)
// we also make sure the user panned for a duration of at least one frame
// (1/60s) to compute sane displacement values
if (duration < 1000 / 60) {
return false;
/**
* @param {number} x X.
* @param {number} y Y.
*/
update(x, y) {
this.points_.push(x, y, Date.now());
}
const dx = this.points_[lastIndex] - this.points_[firstIndex];
const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
this.angle_ = Math.atan2(dy, dx);
this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
return this.initialVelocity_ > this.minVelocity_;
};
/**
* @return {boolean} Whether we should do kinetic animation.
*/
end() {
if (this.points_.length < 6) {
// at least 2 points are required (i.e. there must be at least 6 elements
// in the array)
return false;
}
const delay = Date.now() - this.delay_;
const lastIndex = this.points_.length - 3;
if (this.points_[lastIndex + 2] < delay) {
// the last tracked point is too old, which means that the user stopped
// panning before releasing the map
return false;
}
// get the first point which still falls into the delay time
let firstIndex = lastIndex - 3;
while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {
firstIndex -= 3;
}
/**
* @return {number} Total distance travelled (pixels).
*/
Kinetic.prototype.getDistance = function() {
return (this.minVelocity_ - this.initialVelocity_) / this.decay_;
};
const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
// we don't want a duration of 0 (divide by zero)
// we also make sure the user panned for a duration of at least one frame
// (1/60s) to compute sane displacement values
if (duration < 1000 / 60) {
return false;
}
const dx = this.points_[lastIndex] - this.points_[firstIndex];
const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
this.angle_ = Math.atan2(dy, dx);
this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
return this.initialVelocity_ > this.minVelocity_;
}
/**
* @return {number} Total distance travelled (pixels).
*/
getDistance() {
return (this.minVelocity_ - this.initialVelocity_) / this.decay_;
}
/**
* @return {number} Angle of the kinetic panning animation (radians).
*/
getAngle() {
return this.angle_;
}
}
/**
* @return {number} Angle of the kinetic panning animation (radians).
*/
Kinetic.prototype.getAngle = function() {
return this.angle_;
};
export default Kinetic;

View File

@@ -1,7 +1,6 @@
/**
* @module ol/Map
*/
import {inherits} from './index.js';
import PluggableMap from './PluggableMap.js';
import {defaults as defaultControls} from './control/util.js';
import {defaults as defaultInteractions} from './interaction.js';
@@ -57,38 +56,40 @@ import CanvasVectorTileLayerRenderer from './renderer/canvas/VectorTileLayer.js'
* options or added with `addLayer` can be groups, which can contain further
* groups, and so on.
*
* @constructor
* @extends {module:ol/PluggableMap}
* @param {module:ol/PluggableMap~MapOptions} options Map options.
* @fires module:ol/MapBrowserEvent~MapBrowserEvent
* @fires module:ol/MapEvent~MapEvent
* @fires module:ol/render/Event~RenderEvent#postcompose
* @fires module:ol/render/Event~RenderEvent#precompose
* @api
*/
const Map = function(options) {
options = assign({}, options);
if (!options.controls) {
options.controls = defaultControls();
}
if (!options.interactions) {
options.interactions = defaultInteractions();
class Map extends PluggableMap {
/**
* @param {module:ol/PluggableMap~MapOptions} options Map options.
*/
constructor(options) {
options = assign({}, options);
if (!options.controls) {
options.controls = defaultControls();
}
if (!options.interactions) {
options.interactions = defaultInteractions();
}
super(options);
}
PluggableMap.call(this, options);
};
createRenderer() {
const renderer = new CanvasMapRenderer(this);
renderer.registerLayerRenderers([
CanvasImageLayerRenderer,
CanvasTileLayerRenderer,
CanvasVectorLayerRenderer,
CanvasVectorTileLayerRenderer
]);
return renderer;
}
}
inherits(Map, PluggableMap);
Map.prototype.createRenderer = function() {
const renderer = new CanvasMapRenderer(this);
renderer.registerLayerRenderers([
CanvasImageLayerRenderer,
CanvasTileLayerRenderer,
CanvasVectorLayerRenderer,
CanvasVectorTileLayerRenderer
]);
return renderer;
};
export default Map;

View File

@@ -1,82 +1,81 @@
/**
* @module ol/MapBrowserEvent
*/
import {inherits} from './index.js';
import MapEvent from './MapEvent.js';
/**
* @classdesc
* Events emitted as map browser events are instances of this type.
* See {@link module:ol/Map~Map} for which events trigger a map browser event.
*
* @constructor
* @extends {module:ol/MapEvent}
* @param {string} type Event type.
* @param {module:ol/PluggableMap} map Map.
* @param {Event} browserEvent Browser event.
* @param {boolean=} opt_dragging Is the map currently being dragged?
* @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.
* See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.
*/
const MapBrowserEvent = function(type, map, browserEvent, opt_dragging, opt_frameState) {
MapEvent.call(this, type, map, opt_frameState);
class MapBrowserEvent extends MapEvent {
/**
* The original browser event.
* @const
* @type {Event}
* @api
* @param {string} type Event type.
* @param {module:ol/PluggableMap} map Map.
* @param {Event} browserEvent Browser event.
* @param {boolean=} opt_dragging Is the map currently being dragged?
* @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.
*/
this.originalEvent = browserEvent;
constructor(type, map, browserEvent, opt_dragging, opt_frameState) {
super(type, map, opt_frameState);
/**
* The original browser event.
* @const
* @type {Event}
* @api
*/
this.originalEvent = browserEvent;
/**
* The map pixel relative to the viewport corresponding to the original browser event.
* @type {module:ol/pixel~Pixel}
* @api
*/
this.pixel = map.getEventPixel(browserEvent);
/**
* The coordinate in view projection corresponding to the original browser event.
* @type {module:ol/coordinate~Coordinate}
* @api
*/
this.coordinate = map.getCoordinateFromPixel(this.pixel);
/**
* Indicates if the map is currently being dragged. Only set for
* `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
*
* @type {boolean}
* @api
*/
this.dragging = opt_dragging !== undefined ? opt_dragging : false;
}
/**
* The map pixel relative to the viewport corresponding to the original browser event.
* @type {module:ol~Pixel}
* Prevents the default browser action.
* See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.
* @override
* @api
*/
this.pixel = map.getEventPixel(browserEvent);
preventDefault() {
super.preventDefault();
this.originalEvent.preventDefault();
}
/**
* The coordinate in view projection corresponding to the original browser event.
* @type {module:ol/coordinate~Coordinate}
* Prevents further propagation of the current event.
* See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.
* @override
* @api
*/
this.coordinate = map.getCoordinateFromPixel(this.pixel);
/**
* Indicates if the map is currently being dragged. Only set for
* `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
*
* @type {boolean}
* @api
*/
this.dragging = opt_dragging !== undefined ? opt_dragging : false;
};
inherits(MapBrowserEvent, MapEvent);
stopPropagation() {
super.stopPropagation();
this.originalEvent.stopPropagation();
}
}
/**
* Prevents the default browser action.
* @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault
* @override
* @api
*/
MapBrowserEvent.prototype.preventDefault = function() {
MapEvent.prototype.preventDefault.call(this);
this.originalEvent.preventDefault();
};
/**
* Prevents further propagation of the current event.
* @see https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation
* @override
* @api
*/
MapBrowserEvent.prototype.stopPropagation = function() {
MapEvent.prototype.stopPropagation.call(this);
this.originalEvent.stopPropagation();
};
export default MapBrowserEvent;

View File

@@ -1,335 +1,325 @@
/**
* @module ol/MapBrowserEventHandler
*/
import {inherits} from './index.js';
import {DEVICE_PIXEL_RATIO} from './has.js';
import MapBrowserEventType from './MapBrowserEventType.js';
import MapBrowserPointerEvent from './MapBrowserPointerEvent.js';
import {listen, unlistenByKey} from './events.js';
import EventTarget from './events/EventTarget.js';
import EventTarget from './events/Target.js';
import PointerEventType from './pointer/EventType.js';
import PointerEventHandler from './pointer/PointerEventHandler.js';
/**
* @param {module:ol/PluggableMap} map The map with the viewport to
* listen to events on.
* @param {number=} moveTolerance The minimal distance the pointer must travel
* to trigger a move.
* @constructor
* @extends {module:ol/events/EventTarget}
*/
const MapBrowserEventHandler = function(map, moveTolerance) {
EventTarget.call(this);
class MapBrowserEventHandler extends EventTarget {
/**
* This is the element that we will listen to the real events on.
* @type {module:ol/PluggableMap}
* @private
* @param {module:ol/PluggableMap} map The map with the viewport to listen to events on.
* @param {number=} moveTolerance The minimal distance the pointer must travel to trigger a move.
*/
this.map_ = map;
constructor(map, moveTolerance) {
/**
* @type {number}
* @private
*/
this.clickTimeoutId_ = 0;
super();
/**
* @type {boolean}
* @private
*/
this.dragging_ = false;
/**
* This is the element that we will listen to the real events on.
* @type {module:ol/PluggableMap}
* @private
*/
this.map_ = map;
/**
* @type {!Array.<module:ol/events~EventsKey>}
* @private
*/
this.dragListenerKeys_ = [];
/**
* @type {number}
* @private
*/
this.moveTolerance_ = moveTolerance ?
moveTolerance * DEVICE_PIXEL_RATIO : DEVICE_PIXEL_RATIO;
/**
* The most recent "down" type event (or null if none have occurred).
* Set on pointerdown.
* @type {module:ol/pointer/PointerEvent}
* @private
*/
this.down_ = null;
const element = this.map_.getViewport();
/**
* @type {number}
* @private
*/
this.activePointers_ = 0;
/**
* @type {!Object.<number, boolean>}
* @private
*/
this.trackedTouches_ = {};
/**
* Event handler which generates pointer events for
* the viewport element.
*
* @type {module:ol/pointer/PointerEventHandler}
* @private
*/
this.pointerEventHandler_ = new PointerEventHandler(element);
/**
* Event handler which generates pointer events for
* the document (used when dragging).
*
* @type {module:ol/pointer/PointerEventHandler}
* @private
*/
this.documentPointerEventHandler_ = null;
/**
* @type {?module:ol/events~EventsKey}
* @private
*/
this.pointerdownListenerKey_ = listen(this.pointerEventHandler_,
PointerEventType.POINTERDOWN,
this.handlePointerDown_, this);
/**
* @type {?module:ol/events~EventsKey}
* @private
*/
this.relayedListenerKey_ = listen(this.pointerEventHandler_,
PointerEventType.POINTERMOVE,
this.relayEvent_, this);
};
inherits(MapBrowserEventHandler, EventTarget);
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.emulateClick_ = function(pointerEvent) {
let newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.CLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
if (this.clickTimeoutId_ !== 0) {
// double-click
clearTimeout(this.clickTimeoutId_);
/**
* @type {number}
* @private
*/
this.clickTimeoutId_ = 0;
newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);
/**
* @type {boolean}
* @private
*/
this.dragging_ = false;
/**
* @type {!Array<module:ol/events~EventsKey>}
* @private
*/
this.dragListenerKeys_ = [];
/**
* @type {number}
* @private
*/
this.moveTolerance_ = moveTolerance ?
moveTolerance * DEVICE_PIXEL_RATIO : DEVICE_PIXEL_RATIO;
/**
* The most recent "down" type event (or null if none have occurred).
* Set on pointerdown.
* @type {module:ol/pointer/PointerEvent}
* @private
*/
this.down_ = null;
const element = this.map_.getViewport();
/**
* @type {number}
* @private
*/
this.activePointers_ = 0;
/**
* @type {!Object<number, boolean>}
* @private
*/
this.trackedTouches_ = {};
/**
* Event handler which generates pointer events for
* the viewport element.
*
* @type {module:ol/pointer/PointerEventHandler}
* @private
*/
this.pointerEventHandler_ = new PointerEventHandler(element);
/**
* Event handler which generates pointer events for
* the document (used when dragging).
*
* @type {module:ol/pointer/PointerEventHandler}
* @private
*/
this.documentPointerEventHandler_ = null;
/**
* @type {?module:ol/events~EventsKey}
* @private
*/
this.pointerdownListenerKey_ = listen(this.pointerEventHandler_,
PointerEventType.POINTERDOWN,
this.handlePointerDown_, this);
/**
* @type {?module:ol/events~EventsKey}
* @private
*/
this.relayedListenerKey_ = listen(this.pointerEventHandler_,
PointerEventType.POINTERMOVE,
this.relayEvent_, this);
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
emulateClick_(pointerEvent) {
let newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.CLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
} else {
// click
this.clickTimeoutId_ = setTimeout(function() {
if (this.clickTimeoutId_ !== 0) {
// double-click
clearTimeout(this.clickTimeoutId_);
this.clickTimeoutId_ = 0;
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);
newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
}.bind(this), 250);
}
};
/**
* Keeps track on how many pointers are currently active.
*
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.updateActivePointers_ = function(pointerEvent) {
const event = pointerEvent;
if (event.type == MapBrowserEventType.POINTERUP ||
event.type == MapBrowserEventType.POINTERCANCEL) {
delete this.trackedTouches_[event.pointerId];
} else if (event.type == MapBrowserEventType.POINTERDOWN) {
this.trackedTouches_[event.pointerId] = true;
}
this.activePointers_ = Object.keys(this.trackedTouches_).length;
};
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {
this.updateActivePointers_(pointerEvent);
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERUP, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
// We emulate click events on left mouse button click, touch contact, and pen
// contact. isMouseActionButton returns true in these cases (evt.button is set
// to 0).
// See http://www.w3.org/TR/pointerevents/#button-states
// We only fire click, singleclick, and doubleclick if nobody has called
// event.stopPropagation() or event.preventDefault().
if (!newEvent.propagationStopped && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
this.emulateClick_(this.down_);
} else {
// click
this.clickTimeoutId_ = setTimeout(function() {
this.clickTimeoutId_ = 0;
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
}.bind(this), 250);
}
}
if (this.activePointers_ === 0) {
/**
* Keeps track on how many pointers are currently active.
*
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
updateActivePointers_(pointerEvent) {
const event = pointerEvent;
if (event.type == MapBrowserEventType.POINTERUP ||
event.type == MapBrowserEventType.POINTERCANCEL) {
delete this.trackedTouches_[event.pointerId];
} else if (event.type == MapBrowserEventType.POINTERDOWN) {
this.trackedTouches_[event.pointerId] = true;
}
this.activePointers_ = Object.keys(this.trackedTouches_).length;
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
handlePointerUp_(pointerEvent) {
this.updateActivePointers_(pointerEvent);
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERUP, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
// We emulate click events on left mouse button click, touch contact, and pen
// contact. isMouseActionButton returns true in these cases (evt.button is set
// to 0).
// See http://www.w3.org/TR/pointerevents/#button-states
// We only fire click, singleclick, and doubleclick if nobody has called
// event.stopPropagation() or event.preventDefault().
if (!newEvent.propagationStopped && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
this.emulateClick_(this.down_);
}
if (this.activePointers_ === 0) {
this.dragListenerKeys_.forEach(unlistenByKey);
this.dragListenerKeys_.length = 0;
this.dragging_ = false;
this.down_ = null;
this.documentPointerEventHandler_.dispose();
this.documentPointerEventHandler_ = null;
}
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @return {boolean} If the left mouse button was pressed.
* @private
*/
isMouseActionButton_(pointerEvent) {
return pointerEvent.button === 0;
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
handlePointerDown_(pointerEvent) {
this.updateActivePointers_(pointerEvent);
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
this.down_ = pointerEvent;
if (this.dragListenerKeys_.length === 0) {
/* Set up a pointer event handler on the `document`,
* which is required when the pointer is moved outside
* the viewport when dragging.
*/
this.documentPointerEventHandler_ =
new PointerEventHandler(document);
this.dragListenerKeys_.push(
listen(this.documentPointerEventHandler_,
MapBrowserEventType.POINTERMOVE,
this.handlePointerMove_, this),
listen(this.documentPointerEventHandler_,
MapBrowserEventType.POINTERUP,
this.handlePointerUp_, this),
/* Note that the listener for `pointercancel is set up on
* `pointerEventHandler_` and not `documentPointerEventHandler_` like
* the `pointerup` and `pointermove` listeners.
*
* The reason for this is the following: `TouchSource.vacuumTouches_()`
* issues `pointercancel` events, when there was no `touchend` for a
* `touchstart`. Now, let's say a first `touchstart` is registered on
* `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.
* But `documentPointerEventHandler_` doesn't know about the first
* `touchstart`. If there is no `touchend` for the `touchstart`, we can
* only receive a `touchcancel` from `pointerEventHandler_`, because it is
* only registered there.
*/
listen(this.pointerEventHandler_,
MapBrowserEventType.POINTERCANCEL,
this.handlePointerUp_, this)
);
}
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
handlePointerMove_(pointerEvent) {
// Between pointerdown and pointerup, pointermove events are triggered.
// To avoid a 'false' touchmove event to be dispatched, we test if the pointer
// moved a significant distance.
if (this.isMoving_(pointerEvent)) {
this.dragging_ = true;
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent,
this.dragging_);
this.dispatchEvent(newEvent);
}
// Some native android browser triggers mousemove events during small period
// of time. See: https://code.google.com/p/android/issues/detail?id=5491 or
// https://code.google.com/p/android/issues/detail?id=19827
// ex: Galaxy Tab P3110 + Android 4.1.1
pointerEvent.preventDefault();
}
/**
* Wrap and relay a pointer event. Note that this requires that the type
* string for the MapBrowserPointerEvent matches the PointerEvent type.
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
relayEvent_(pointerEvent) {
const dragging = !!(this.down_ && this.isMoving_(pointerEvent));
this.dispatchEvent(new MapBrowserPointerEvent(
pointerEvent.type, this.map_, pointerEvent, dragging));
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @return {boolean} Is moving.
* @private
*/
isMoving_(pointerEvent) {
return this.dragging_ ||
Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ ||
Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;
}
/**
* @inheritDoc
*/
disposeInternal() {
if (this.relayedListenerKey_) {
unlistenByKey(this.relayedListenerKey_);
this.relayedListenerKey_ = null;
}
if (this.pointerdownListenerKey_) {
unlistenByKey(this.pointerdownListenerKey_);
this.pointerdownListenerKey_ = null;
}
this.dragListenerKeys_.forEach(unlistenByKey);
this.dragListenerKeys_.length = 0;
this.dragging_ = false;
this.down_ = null;
this.documentPointerEventHandler_.dispose();
this.documentPointerEventHandler_ = null;
if (this.documentPointerEventHandler_) {
this.documentPointerEventHandler_.dispose();
this.documentPointerEventHandler_ = null;
}
if (this.pointerEventHandler_) {
this.pointerEventHandler_.dispose();
this.pointerEventHandler_ = null;
}
super.disposeInternal();
}
};
}
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @return {boolean} If the left mouse button was pressed.
* @private
*/
MapBrowserEventHandler.prototype.isMouseActionButton_ = function(pointerEvent) {
return pointerEvent.button === 0;
};
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.handlePointerDown_ = function(pointerEvent) {
this.updateActivePointers_(pointerEvent);
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
this.down_ = pointerEvent;
if (this.dragListenerKeys_.length === 0) {
/* Set up a pointer event handler on the `document`,
* which is required when the pointer is moved outside
* the viewport when dragging.
*/
this.documentPointerEventHandler_ =
new PointerEventHandler(document);
this.dragListenerKeys_.push(
listen(this.documentPointerEventHandler_,
MapBrowserEventType.POINTERMOVE,
this.handlePointerMove_, this),
listen(this.documentPointerEventHandler_,
MapBrowserEventType.POINTERUP,
this.handlePointerUp_, this),
/* Note that the listener for `pointercancel is set up on
* `pointerEventHandler_` and not `documentPointerEventHandler_` like
* the `pointerup` and `pointermove` listeners.
*
* The reason for this is the following: `TouchSource.vacuumTouches_()`
* issues `pointercancel` events, when there was no `touchend` for a
* `touchstart`. Now, let's say a first `touchstart` is registered on
* `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.
* But `documentPointerEventHandler_` doesn't know about the first
* `touchstart`. If there is no `touchend` for the `touchstart`, we can
* only receive a `touchcancel` from `pointerEventHandler_`, because it is
* only registered there.
*/
listen(this.pointerEventHandler_,
MapBrowserEventType.POINTERCANCEL,
this.handlePointerUp_, this)
);
}
};
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.handlePointerMove_ = function(pointerEvent) {
// Between pointerdown and pointerup, pointermove events are triggered.
// To avoid a 'false' touchmove event to be dispatched, we test if the pointer
// moved a significant distance.
if (this.isMoving_(pointerEvent)) {
this.dragging_ = true;
const newEvent = new MapBrowserPointerEvent(
MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent,
this.dragging_);
this.dispatchEvent(newEvent);
}
// Some native android browser triggers mousemove events during small period
// of time. See: https://code.google.com/p/android/issues/detail?id=5491 or
// https://code.google.com/p/android/issues/detail?id=19827
// ex: Galaxy Tab P3110 + Android 4.1.1
pointerEvent.preventDefault();
};
/**
* Wrap and relay a pointer event. Note that this requires that the type
* string for the MapBrowserPointerEvent matches the PointerEvent type.
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @private
*/
MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
const dragging = !!(this.down_ && this.isMoving_(pointerEvent));
this.dispatchEvent(new MapBrowserPointerEvent(
pointerEvent.type, this.map_, pointerEvent, dragging));
};
/**
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @return {boolean} Is moving.
* @private
*/
MapBrowserEventHandler.prototype.isMoving_ = function(pointerEvent) {
return Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ ||
Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;
};
/**
* @inheritDoc
*/
MapBrowserEventHandler.prototype.disposeInternal = function() {
if (this.relayedListenerKey_) {
unlistenByKey(this.relayedListenerKey_);
this.relayedListenerKey_ = null;
}
if (this.pointerdownListenerKey_) {
unlistenByKey(this.pointerdownListenerKey_);
this.pointerdownListenerKey_ = null;
}
this.dragListenerKeys_.forEach(unlistenByKey);
this.dragListenerKeys_.length = 0;
if (this.documentPointerEventHandler_) {
this.documentPointerEventHandler_.dispose();
this.documentPointerEventHandler_ = null;
}
if (this.pointerEventHandler_) {
this.pointerEventHandler_.dispose();
this.pointerEventHandler_ = null;
}
EventTarget.prototype.disposeInternal.call(this);
};
export default MapBrowserEventHandler;

View File

@@ -1,32 +1,29 @@
/**
* @module ol/MapBrowserPointerEvent
*/
import {inherits} from './index.js';
import MapBrowserEvent from './MapBrowserEvent.js';
/**
* @constructor
* @extends {module:ol/MapBrowserEvent}
* @param {string} type Event type.
* @param {module:ol/PluggableMap} map Map.
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer
* event.
* @param {boolean=} opt_dragging Is the map currently being dragged?
* @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.
*/
const MapBrowserPointerEvent = function(type, map, pointerEvent, opt_dragging,
opt_frameState) {
MapBrowserEvent.call(this, type, map, pointerEvent.originalEvent, opt_dragging,
opt_frameState);
class MapBrowserPointerEvent extends MapBrowserEvent {
/**
* @const
* @type {module:ol/pointer/PointerEvent}
* @param {string} type Event type.
* @param {module:ol/PluggableMap} map Map.
* @param {module:ol/pointer/PointerEvent} pointerEvent Pointer event.
* @param {boolean=} opt_dragging Is the map currently being dragged?
* @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.
*/
this.pointerEvent = pointerEvent;
constructor(type, map, pointerEvent, opt_dragging, opt_frameState) {
};
super(type, map, pointerEvent.originalEvent, opt_dragging, opt_frameState);
/**
* @const
* @type {module:ol/pointer/PointerEvent}
*/
this.pointerEvent = pointerEvent;
}
}
inherits(MapBrowserPointerEvent, MapBrowserEvent);
export default MapBrowserPointerEvent;

Some files were not shown because too many files have changed in this diff Show More