Compare commits

..

482 Commits

Author SHA1 Message Date
ahocevar
59c3eedbab Updates for v5.0.2 2018-07-05 00:04:32 +02:00
Andreas Hocevar
49050063d5 Merge pull request #8343 from tschaub/starter-project
Starter projects
2018-07-04 23:53:48 +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
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
ahocevar
527331a797 Make docs work when published 2018-05-13 11:15:31 -05:00
ahocevar
8657e31b00 Fix a few doc comment typos 2018-05-13 10:26:29 -05:00
ahocevar
52465df88a Also add object properties and non-object typedefs 2018-05-13 10:26:29 -05:00
ahocevar
6cd6e3cc83 Normalize module paths to ignore ~/. differences 2018-05-13 10:26:29 -05:00
ahocevar
554968f8f2 Inline constructor options 2018-05-13 10:26:29 -05:00
ahocevar
cc8cffd324 Faster processing by omitting src/index.js 2018-05-13 10:26:29 -05:00
Tim Schaub
97f19cbffc Merge pull request #8187 from tschaub/hide-attribution
Hide attribution control if there are no attributions
2018-05-12 06:52:05 -07:00
Tim Schaub
0e727ae890 Hide attribution control if there are no attributions 2018-05-12 07:39:29 -06:00
Tim Schaub
06eddf4795 Merge pull request #8186 from tschaub/example-updates
Updates to get the examples building
2018-05-12 06:26:22 -07:00
Tim Schaub
1991150079 Updates to get the examples building 2018-05-11 14:02:55 -06:00
Andreas Hocevar
519e41db52 Merge pull request #8180 from ahocevar/new-jsdoc
Fix some JSDoc issues
2018-05-11 20:07:49 +02:00
ahocevar
e810387956 Fix some JSDoc issues
Also makes a few minor changes to the template, so it can be used until
we have a new doc generation process. JSDoc output is written to
build/apidoc.
2018-05-10 17:14:17 +02:00
Frédéric Junod
3890ece2b8 Merge pull request #8179 from openlayers/greenkeeper/google-closure-compiler-20180506.0.0
Update google-closure-compiler to the latest version 🚀
2018-05-10 07:32:18 +02:00
Frédéric Junod
c10e58b44e Merge pull request #8175 from fredj/happy_compiler
More typing fixes
2018-05-10 06:37:30 +02:00
greenkeeper[bot]
1c0df7b51f chore(package): update google-closure-compiler to version 20180506.0.0 2018-05-10 02:50:15 +00:00
Andreas Hocevar
25202cae79 Merge pull request #8177 from gberaudo/remove_closure_related_documentation
Remove documentation related to the closure compiler
2018-05-09 22:58:36 +02:00
Guillaume Beraudo
8e6b3bba99 Remove documentation related to the closure compiler
In OpenLayers 5, the following features are not supported anymore:
- Google Closure Compiler builds;
- custom builds.

The Google Closure Compiler is only kept for internal type checking.
2018-05-09 21:55:37 +02:00
Frederic Junod
14deb417a9 Use MSPointerEvent event type in ol/pointer/MsSource 2018-05-09 16:39:59 +02:00
Frederic Junod
d987d99c93 Don't allow null usedTiles to be passed to expireCache 2018-05-09 16:39:59 +02:00
Frederic Junod
0d99fc1f98 Set format parameter to rbush function
To remove the following closure compiler warning:
```
Function module$node_modules$rbush$index.default: called with 1 argument(s). Function requires at least 2 argument(s) and at most 2.
```
2018-05-09 16:39:59 +02:00
Frederic Junod
cdb3e1c529 Fix HTML Canvas typing issues 2018-05-09 16:39:59 +02:00
Frédéric Junod
db54301514 Merge pull request #8174 from fredj/image_options_typo
Fix typo in ol/style/Image~Options typedef
2018-05-09 15:28:02 +02:00
Frédéric Junod
1e0086460b Merge pull request #8172 from fredj/ignore_this
Ignore 'this' type in function typedef
2018-05-09 15:15:28 +02:00
Frédéric Junod
fcd6366b28 Merge pull request #8173 from fredj/xml_typecheck
Fix typing in ol/xml module
2018-05-09 15:12:08 +02:00
Frederic Junod
273be272b7 Fix typo in ol/style/Image~Options typedef 2018-05-09 15:11:21 +02:00
Frederic Junod
9c13e041e3 Add missing typecast in ol/xml 2018-05-09 14:48:17 +02:00
Frederic Junod
05b11759b7 Handle undefined 'this' in ol/xml 2018-05-09 14:48:05 +02:00
Frederic Junod
de5ac6b7c6 Fix typing in ol/xml module 2018-05-09 14:28:14 +02:00
Frederic Junod
854c95f37a Ignore 'this' type in function typedef 2018-05-09 13:49:59 +02:00
Frédéric Junod
628a49f478 Merge pull request #8169 from fredj/short_module_path
Shorter module paths for default exports
2018-05-09 13:31:19 +02:00
Frédéric Junod
c1f503b243 Merge pull request #8171 from fredj/rm_extra_override
Remove wrong override tags
2018-05-09 13:22:30 +02:00
Andreas Hocevar
26dad40e51 Merge pull request #8170 from ahocevar/basic-apidoc
Basic apidocs
2018-05-09 12:58:08 +02:00
Frederic Junod
5b4063fa17 Remove wrong override tags 2018-05-09 12:38:21 +02:00
ahocevar
636369181b Bring back basic api documentation 2018-05-09 12:01:16 +02:00
ahocevar
701aaedf4d Fix module name 2018-05-09 12:00:43 +02:00
Frederic Junod
af1f6836af Shorter module paths for default exports 2018-05-09 11:24:43 +02:00
Tim Schaub
bae2ac4f0f Merge pull request #8167 from tschaub/goodbye-oli
Remove externs/oli.js
2018-05-08 12:37:26 -07:00
Tim Schaub
167bc1ec78 Remove externs/oli.js 2018-05-08 08:38:34 -06:00
Tim Schaub
750ba4bca4 Merge pull request #8166 from tschaub/types
Updated type annotations
2018-05-08 05:45:09 -07:00
Tim Schaub
5707cdf3b6 Type annotation corrections 2018-05-07 22:16:08 -06:00
Tim Schaub
5a9fad218b Remove *.jsdoc files 2018-05-07 21:53:20 -06:00
Tim Schaub
5b65336328 Remove remaining ol.foo notation from the source 2018-05-07 21:21:50 -06:00
Tim Schaub
34c1a6b9ba Replace type annotations 2018-05-07 21:21:39 -06:00
Tim Schaub
e38680d846 Merge pull request #8165 from tschaub/update-linter-config
Update linter config
2018-05-07 14:52:21 -07:00
Tim Schaub
8e7c88d9a5 Updated type annotations 2018-05-07 15:50:56 -06:00
Tim Schaub
cfe88663aa Update type annotations in examples 2018-05-07 15:41:33 -06:00
Andreas Hocevar
3023c8343f Merge pull request #8163 from ahocevar/fix-type-syntax
Fix type syntax
2018-05-07 23:40:24 +02:00
Tim Schaub
ae55814875 Use module paths in example docs 2018-05-07 15:33:14 -06:00
Tim Schaub
8bebb561b1 Update linter config 2018-05-07 13:57:00 -06:00
ahocevar
c32ee68637 Fix type syntax 2018-05-07 14:29:10 +02:00
Andreas Hocevar
c47560b72a Merge pull request #8161 from ahocevar/textbackground-replay
Fix skipping of texts with background
2018-05-07 09:22:18 +02:00
Frédéric Junod
d0ff29fca3 Merge pull request #8156 from mainakae/master
fix assert 36 on error documentation #8147
2018-05-07 08:33:39 +02:00
ahocevar
16cad06e57 Fix skipping of texts with background 2018-05-06 16:05:46 +02:00
Pedro González
24b03b37b0 fix assert 36 on error documentation #8147
see [this issue](https://github.com/openlayers/openlayers/issues/8147)
2018-05-03 09:40:49 +02:00
Tim Schaub
2d413bb36d Merge pull request #8146 from openlayers/greenkeeper/coveralls-3.0.1
Update coveralls to the latest version 🚀
2018-05-01 19:34:11 -06:00
Tim Schaub
5fba511d03 Merge pull request #8145 from openlayers/greenkeeper/fs-extra-6.0.0
Update fs-extra to the latest version 🚀
2018-05-01 19:33:29 -06:00
greenkeeper[bot]
4adab723eb chore(package): update coveralls to version 3.0.1 2018-05-01 21:58:29 +00:00
greenkeeper[bot]
fa909e6543 chore(package): update fs-extra to version 6.0.0 2018-05-01 14:23:13 +00:00
Frédéric Junod
6d09ab122a Merge pull request #8143 from openlayers/misc
Shorter module paths for default exports
2018-04-30 13:56:55 +02:00
Frederic Junod
8684d4f7c6 Shorter module paths for default exports 2018-04-30 13:15:50 +02:00
Frederic Junod
7ed10b9579 Add missing lineDashOffset to ol/style/RegularShape~RenderOptions typedef 2018-04-30 13:15:50 +02:00
Andreas Hocevar
70c11a35a7 Merge pull request #8140 from openlayers/greenkeeper/sinon-5.0.1
Update sinon to the latest version 🚀
2018-04-30 13:00:55 +02:00
greenkeeper[bot]
640ced5f02 chore(package): update sinon to version 5.0.1 2018-04-30 09:40:58 +00:00
Tim Schaub
2894251eed Merge pull request #8137 from tschaub/not-this
Avoid `this` at top level of modules
2018-04-30 03:00:54 -06:00
Tim Schaub
e0650ab2b4 Merge pull request #8138 from tschaub/update-tasks
Update tasks to use native async/await
2018-04-30 02:55:35 -06:00
Tim Schaub
744a01489b Merge pull request #8139 from tschaub/declare-module
Add @module annotation for ol/control/util
2018-04-30 02:54:50 -06:00
Tim Schaub
2fe1cb6ced Add @module annotation for ol/control/util 2018-04-28 15:45:01 -06:00
Tim Schaub
1f67fd9bd4 Update tasks to use native async/await 2018-04-28 15:06:59 -06:00
Tim Schaub
6edc94bcc9 This is undefined in module context 2018-04-28 13:15:08 -06:00
Tim Schaub
c57b285c7a Merge pull request #8135 from tschaub/uncircular
Break the circular dependency: overview map, map, controls, overview map
2018-04-28 07:14:53 -06:00
Frédéric Junod
382c241b10 Merge pull request #8132 from fredj/types
Add minZoom to the createResolutionConstraint function return type
2018-04-28 09:00:50 +02:00
Tim Schaub
669672dce8 Break the circular dependency: overview map, map, controls, overview map 2018-04-27 21:49:28 -06:00
Frederic Junod
c4dba00c54 Add minZoom to the createResolutionConstraint function return type 2018-04-27 16:21:59 +02:00
Andreas Hocevar
8b0a87e9d4 Merge pull request #8129 from ahocevar/type-fixes
Fix some types
2018-04-27 11:19:44 +02:00
Andreas Hocevar
e86055337e Merge pull request #8131 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.5.1
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-27 10:54:51 +02:00
greenkeeper[bot]
1fb320ca46 chore(package): update babel-plugin-jsdoc-closure to version 1.5.1 2018-04-27 08:46:06 +00:00
Andreas Hocevar
98efd25063 Merge pull request #8130 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.5.0
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-27 10:40:13 +02:00
greenkeeper[bot]
4d00401f11 chore(package): update babel-plugin-jsdoc-closure to version 1.5.0 2018-04-27 08:32:56 +00:00
ahocevar
6c218a903e Fix a typedef 2018-04-27 10:10:49 +02:00
ahocevar
9bfdf818e4 Rename Style~Function path type to Style~StyleFunction 2018-04-27 09:30:51 +02:00
ahocevar
3a365fab56 Fix some module links 2018-04-27 09:30:51 +02:00
ahocevar
59d904e509 Fix some types 2018-04-27 09:30:51 +02:00
Frédéric Junod
ce84c3bf57 Merge pull request #8127 from fredj/cleanup
Move RasterOperationType into ol/source/Raster
2018-04-27 08:26:39 +02:00
Frédéric Junod
da72a7cebc Merge pull request #8123 from fredj/jsdoc_module
More Jsdoc module fixes
2018-04-27 08:21:08 +02:00
Andreas Hocevar
ad45f7294c Merge pull request #8128 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.4.2
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-27 00:13:59 +02:00
greenkeeper[bot]
6687f4ca85 chore(package): update babel-plugin-jsdoc-closure to version 1.4.2 2018-04-26 22:02:05 +00:00
Frederic Junod
f8435b0c0f Move RasterOperationType into ol/source/Raster
This enum is only used in ol/source/Raster
2018-04-26 15:46:50 +02:00
Frederic Junod
61067e6c2c Module type for ol.Feature and short notation for ol/render/Feature 2018-04-26 15:38:51 +02:00
Frederic Junod
11d9f6de83 Module type for ol.renderer.* 2018-04-26 15:35:48 +02:00
Frederic Junod
d8e0212833 Module type for ol.source.* 2018-04-26 15:18:44 +02:00
Frederic Junod
76769f9901 Module type for ol.struct.* 2018-04-26 15:16:21 +02:00
Frederic Junod
b4588f7d47 Module type for ol.source.UrlTile 2018-04-26 15:12:52 +02:00
Andreas Hocevar
f284b95cb8 Merge pull request #8125 from ahocevar/default-export-path
Shorter module paths for default exports
2018-04-26 14:23:02 +02:00
ahocevar
440d1ad3e1 Shorter module paths for default exports 2018-04-25 17:25:39 +02:00
Andreas Hocevar
6cb115d6a4 Merge pull request #8124 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.4.1
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-25 17:21:55 +02:00
greenkeeper[bot]
271bda57ce chore(package): update babel-plugin-jsdoc-closure to version 1.4.1 2018-04-25 15:13:22 +00:00
Frédéric Junod
3803f268c2 Merge pull request #8122 from fredj/cluster_format_opt
Remove unused 'format' options from Cluster source constructor
2018-04-25 10:29:02 +02:00
Frédéric Junod
d187954133 Merge pull request #8121 from fredj/jsdoc_module
More Jsdoc module fixes
2018-04-25 09:14:09 +02:00
Frederic Junod
3ca4b0e8bd Remove unused 'format' options from Cluster source constructor 2018-04-25 08:27:35 +02:00
Frederic Junod
4856c53881 Module type for ol.format.filter.* 2018-04-25 08:21:11 +02:00
Frederic Junod
17674194d4 Module type for ol.format.OWS 2018-04-25 08:21:11 +02:00
Frederic Junod
4dc1f719c0 Module type for ol.format.GML2 2018-04-25 08:21:11 +02:00
Frederic Junod
2c98e35d1a Module type for ol.TileLoadFunctionType 2018-04-25 08:21:11 +02:00
Frederic Junod
e4778b17ce Module type for ol.VectorTile 2018-04-25 08:21:11 +02:00
Tim Schaub
3003a757c1 Merge pull request #8117 from tschaub/re-export-style
Re-export style constructors from ol/style
2018-04-24 10:16:29 -06:00
Tim Schaub
cda0fe6e41 Re-export style constructors from ol/style 2018-04-24 09:37:27 -06:00
Tim Schaub
e28305186c Export shared icon image class from IconImageCache module 2018-04-24 09:37:19 -06:00
Tim Schaub
6631b58e6b Merge pull request #8115 from tschaub/re-export-layer
Re-export layer constructors from ol/layer
2018-04-24 09:28:00 -06:00
Tim Schaub
910004b940 Re-export layer constructors from ol/layer 2018-04-24 09:06:30 -06:00
Tim Schaub
640f9a96c6 Merge pull request #8114 from tschaub/re-export-interaction
Re-export interaction constructors from ol/interaction
2018-04-24 08:52:56 -06:00
Tim Schaub
0cb1c18778 Re-export interaction constructors from ol/interaction 2018-04-24 08:40:15 -06:00
Tim Schaub
059e1b914e Merge pull request #8116 from tschaub/re-export-source
Re-export source constructors from ol/source
2018-04-24 01:52:54 -06:00
Tim Schaub
11907ad7e4 Merge pull request #8113 from tschaub/re-export-geom
Re-export geometry constructors from ol/geom
2018-04-24 01:50:16 -06:00
Tim Schaub
c9850e6059 Merge pull request #8112 from tschaub/re-export-formats
Re-export format constructors from ol/format
2018-04-24 01:49:30 -06:00
Tim Schaub
d1d8978a77 Merge pull request #8111 from tschaub/re-export
Re-export control constructors
2018-04-24 01:48:49 -06:00
Tim Schaub
75e6f73485 Merge pull request #8118 from tschaub/cloak-list
Use list for cloak entries
2018-04-24 01:47:59 -06:00
Tim Schaub
1551bfffe0 Use list for cloak entries 2018-04-23 20:51:01 -06:00
Tim Schaub
a5d3e91f7d Re-export source constructors from ol/source 2018-04-23 17:34:10 -06:00
Tim Schaub
f713d27c44 Re-export format constructors from ol/format 2018-04-23 15:32:24 -06:00
Tim Schaub
497cb1dc44 Re-export controls from ol/controls 2018-04-23 15:31:44 -06:00
Tim Schaub
487ace2362 Re-export geometry constructors from ol/geom 2018-04-23 14:30:20 -06:00
Andreas Hocevar
9bdece3573 Merge pull request #8102 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.4.0
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-23 22:02:36 +02:00
greenkeeper[bot]
d440d23bf1 chore(package): update babel-plugin-jsdoc-closure to version 1.4.0 2018-04-23 21:51:45 +02:00
Tim Schaub
b4badd0c53 Move ScaleLineUnits to ScaleLine control module 2018-04-23 11:38:13 -06:00
Tim Schaub
311ab0eae1 Merge pull request #8109 from tschaub/mouse-position
Make any falsey undefinedHTML retain the mouse position
2018-04-23 11:37:57 -06:00
Andreas Hocevar
2b79f12b34 Merge pull request #8103 from ahocevar/jsdoc-module-fixes
Fix some jsdoc path types
2018-04-23 18:13:07 +02:00
Tim Schaub
fba2d100e9 Any falsey undefinedHTML retains the mouse position 2018-04-23 09:57:10 -06:00
Andreas Hocevar
c724584d07 Merge pull request #7784 from pedros007/mouseout-mouseposition
Adds option to retain MousePosition when pointer leaves viewport
2018-04-23 10:44:59 +02:00
ahocevar
d6409f55cf Update API docs for modified behavior. 2018-04-23 08:49:38 +02:00
Pete Schmitt
2719baa0f6 Replace new clearOnMouseOut option with undefinedHTML=undefined
API break: set `undefinedHTML` to special value `undefined` to retain
the most recent MousePosition value.
2018-04-23 08:47:24 +02:00
Pete Schmitt
2e3e7d282a Adds option to retain MousePosition when pointer leaves viewport 2018-04-23 08:47:15 +02:00
ahocevar
d7f3e633b7 Fix code snippet JavaScript 2018-04-23 08:33:50 +02:00
ahocevar
c23a5086ae Fix enum types 2018-04-21 10:48:38 +02:00
ahocevar
417dd85f83 Fix some jsdoc path types 2018-04-21 10:17:53 +02:00
Frédéric Junod
33ca22a4dc Merge pull request #8101 from fredj/jsdoc_module
More Jsdoc module fixes
2018-04-21 09:05:11 +02:00
Andreas Hocevar
23b54e6a9f Merge pull request #7908 from hyperknot/scaleline-fix
ScaleLine fix for non-degree based units
2018-04-20 15:40:56 +02:00
Frederic Junod
b37a1f7d85 Module type for ol.RenderOrderFunction 2018-04-20 15:15:21 +02:00
Frederic Junod
48910e01ed Module type for ol.render.ReplayGroup 2018-04-20 15:12:20 +02:00
Frederic Junod
7f7c4df786 Module type for ol.render.canvas.TextReplay 2018-04-20 15:09:30 +02:00
Frederic Junod
446fb1939e Module type for ol.render.canvas.Instruction 2018-04-20 15:07:50 +02:00
Frederic Junod
97d2266389 Module type for ol.reproj.Triangulation 2018-04-20 15:05:57 +02:00
Frederic Junod
d0fbbe7d23 Module type for ol.render.canvas.Replay 2018-04-20 15:03:44 +02:00
Frederic Junod
3e2c211ccf Module type for ol.render.canvas.ReplayGroup 2018-04-20 15:01:57 +02:00
Frederic Junod
5d22d711f8 Module type for ol.render.ReplayType 2018-04-20 14:58:49 +02:00
Frederic Junod
7701c5fd3a Module type for ol.render.Feature 2018-04-20 14:53:56 +02:00
Frederic Junod
3c0c4cd155 Module type for ol.render.VectorContext 2018-04-20 14:41:11 +02:00
Frederic Junod
05f92c0333 Module type for ol.source.Tile 2018-04-20 14:37:46 +02:00
Frederic Junod
327bda680d Module type for ol.source.Tile.Event 2018-04-20 14:35:17 +02:00
Frederic Junod
ae5e24a6c3 Module type for ol.render.Event 2018-04-20 14:32:23 +02:00
Frederic Junod
3629cef3a5 Module type for ol.render.EventType 2018-04-20 14:31:00 +02:00
Frederic Junod
d1a6249cf0 Module type for ol.Collection 2018-04-20 12:02:15 +02:00
Frederic Junod
0071acd688 Module type for ol.AttributionLike 2018-04-20 12:00:18 +02:00
Frédéric Junod
4d4a469904 Merge pull request #8099 from openlayers/jsdoc_module
More Jsdoc module fixes
2018-04-20 11:26:30 +02:00
Tim Schaub
3705757cd4 Merge pull request #8098 from tschaub/goodbye-olx
Remove externs/olx.js and src/ol/typedefs.js
2018-04-20 02:38:46 -06:00
Frederic Junod
b2d9f94cb2 Module type for ol.pointer.MouseSource 2018-04-20 08:53:01 +02:00
Frederic Junod
2f45d51f9b Module type for ol.pointer.EventSource 2018-04-20 08:50:39 +02:00
Frederic Junod
a84863528c Module type for ol.pointer.PointerEvent 2018-04-20 08:47:27 +02:00
Frederic Junod
a43b90056b Module type for ol.pointer.PointerEventHandler 2018-04-20 08:44:01 +02:00
Frederic Junod
15f57538e7 Module type for ol.StyleFunction 2018-04-20 08:39:45 +02:00
Andreas Hocevar
ed95200aa9 Merge pull request #8096 from ahocevar/rotation-default
Fix rotation default
2018-04-20 07:07:09 +02:00
Tim Schaub
7c35139e90 Remove ol/typedefs.js 2018-04-19 18:22:04 -06:00
Tim Schaub
99efb052f2 Remove temporary externs/xol.js 2018-04-19 18:17:39 -06:00
Tim Schaub
d93a76dcb9 Remove olx.js and code that uses it 2018-04-19 18:13:55 -06:00
Tim Schaub
20bbd71702 Correct type for Translate interaction options 2018-04-19 18:13:20 -06:00
Tim Schaub
6b1a2e884d Correct types for style options 2018-04-19 18:13:15 -06:00
Tim Schaub
b9145a91e8 Correct type for FrameState 2018-04-19 18:11:22 -06:00
Tim Schaub
c75b87a2a0 Correct type for WMTS source options 2018-04-19 18:11:22 -06:00
Tim Schaub
81693cefbf Correct type for Icon options 2018-04-19 18:11:12 -06:00
Tim Schaub
5f8a5b3502 Add typedef for TileArcGISRest source options
This was removed in 8b23a44f8f (inadvertently I think).
2018-04-19 17:58:39 -06:00
Tim Schaub
a09f7fb3bb Clean lint from jsdoc config 2018-04-19 17:32:54 -06:00
ahocevar
3d50c0ec68 Fix rotation default 2018-04-20 01:17:02 +02:00
Tim Schaub
d17f0d98a0 Merge pull request #8081 from pfirpfel/move-olx.render-to-ol/render
Move olx.render.* and related typedefs to ol/render/*
2018-04-19 14:41:50 -06:00
Andreas Hocevar
34400394f9 Merge pull request #8095 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.3.4
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-19 22:09:30 +02:00
greenkeeper[bot]
db1da0db8e chore(package): update babel-plugin-jsdoc-closure to version 1.3.4 2018-04-19 20:02:29 +00:00
Andreas Hocevar
b65961b791 Merge pull request #8094 from openlayers/greenkeeper/babel-plugin-jsdoc-closure-1.3.3
Update babel-plugin-jsdoc-closure to the latest version 🚀
2018-04-19 21:36:19 +02:00
greenkeeper[bot]
f98fcd15be chore(package): update babel-plugin-jsdoc-closure to version 1.3.3 2018-04-19 19:12:11 +00:00
Frederic Junod
975d3f31d6 Fix FillState typedef definition 2018-04-19 17:41:08 +02:00
Tim Schaub
1c792f2d9b Type is {string} instead of string{} 2018-04-19 17:41:08 +02:00
Michael Kuenzli
3b983564b3 Move ol.DeclutterGroup to ol/render/canvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
b740630e89 Move ol.CanvasTextState to ol/render/canvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
6096f84be2 Move ol.CanvasStrokeState to ol/render/canvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
113785f048 Move ol.CanvasFillStrokeState to ol/render/canvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
223ef34898 Move ol.CanvasFunctionType to ol/source/ImageCanvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
4f74bcaa31 Move ol.CanvasFillState to ol/render/canvas 2018-04-19 17:41:08 +02:00
Michael Kuenzli
5e810ccc6a Move olx.render.State to ol/render 2018-04-19 17:41:00 +02:00
Frédéric Junod
82c55d3892 Merge pull request #8087 from pfirpfel/move-misc-typedefs
Move various typedefs out of typdefs.js
2018-04-19 16:56:49 +02:00
Michael Kuenzli
2b41a3930b Move ol.Attribution to ol/source/Source 2018-04-19 16:49:13 +02:00
Michael Kuenzli
71bb2ce019 Move ol.AttributionLike to ol/source/Source 2018-04-19 16:49:13 +02:00
Michael Kuenzli
833a4591df Move ol.RasterOperation to ol/source/Raster 2018-04-19 16:49:13 +02:00
Michael Kuenzli
addcdf745f Move ol.WFSTransactionResponse to ol/format/WFS 2018-04-19 16:48:29 +02:00
Michael Kuenzli
d4a6169052 Move ol.WFSFeatureCollectionMetadata to ol/format/WFS 2018-04-19 16:48:29 +02:00
Michael Kuenzli
76572b6ccf Move ol.RegularShapeRenderOptions to ol/style/RegularShape 2018-04-19 16:48:29 +02:00
Frédéric Junod
873c627cda Merge pull request #8052 from fredj/jsdoc_module
More Jsdoc module fixes
2018-04-19 16:22:52 +02:00
Frederic Junod
48bda774c7 Rename VectorTileSource to VectorTile 2018-04-19 16:02:16 +02:00
Frederic Junod
8074848636 Module type for ol.Size 2018-04-19 15:43:37 +02:00
Frederic Junod
32713ff824 Module type for ol.Extent 2018-04-19 15:41:27 +02:00
Frederic Junod
f0da3c7ef0 Module type for ol.format.GMLBase 2018-04-19 15:40:09 +02:00
Frederic Junod
44b19cb2e3 Module type for ol.format.TokenType 2018-04-19 15:40:09 +02:00
Frederic Junod
3ce588b491 Module type for ol.format.Feature 2018-04-19 15:40:07 +02:00
Frederic Junod
60e319f8e1 Remove extra properties in ol/source/WMTS options 2018-04-19 15:39:26 +02:00
Frederic Junod
7aa5e5d80e Fix wrong tilegrid type for ol/source/XYZ options 2018-04-19 15:39:26 +02:00
Frederic Junod
79bdec2b75 Module type for ol.tilegrid.WMTS 2018-04-19 15:39:26 +02:00
Frederic Junod
7ccb66e80d Module type for ol.tilegrid.TileGrid 2018-04-19 15:39:26 +02:00
Frederic Junod
2df4d5f877 Module type for ol.TileState 2018-04-19 15:39:26 +02:00
Frederic Junod
4114f4faaa Module type for ol.TileCoord 2018-04-19 15:39:26 +02:00
Frederic Junod
e77986c86c Module type for ol.source.Image 2018-04-19 15:39:26 +02:00
Frederic Junod
6f3957786a Module type for ol.source.Source 2018-04-19 15:39:26 +02:00
Frederic Junod
3dbabb734b Module type for ol.source.Vector 2018-04-19 15:39:26 +02:00
Frederic Junod
e283193ff4 Module type for ol.source.State 2018-04-19 15:39:25 +02:00
Frederic Junod
6ce42464b3 Module type for ol.source.VectorTile 2018-04-19 15:39:25 +02:00
Frederic Junod
911d0f12e3 Module type for ol.source.XYZ 2018-04-19 15:39:25 +02:00
Frederic Junod
bf40002af0 Module type for ol.source.TileImage 2018-04-19 15:39:25 +02:00
Frédéric Junod
c63c7b211d Merge pull request #8048 from fredj/shaders_comments
Remove all comments from shaders
2018-04-19 15:21:51 +02:00
Frédéric Junod
fe016738bc Merge pull request #8093 from openlayers/greenkeeper/serve-6.5.5
chore(package): update serve to version 6.5.5
2018-04-19 12:37:39 +02:00
Frédéric Junod
c47150a32d Merge pull request #8090 from openlayers/greenkeeper/url-polyfill-1.0.13
chore(package): update url-polyfill to version 1.0.13
2018-04-19 12:15:43 +02:00
greenkeeper[bot]
2cfae91b71 chore(package): update serve to version 6.5.5 2018-04-19 12:13:18 +02:00
Frédéric Junod
7652cc89ec Merge pull request #8091 from openlayers/greenkeeper/karma-firefox-launcher-1.1.0
chore(package): update karma-firefox-launcher to version 1.1.0
2018-04-19 12:09:28 +02:00
greenkeeper[bot]
0b7d185875 chore(package): update karma-firefox-launcher to version 1.1.0 2018-04-19 12:02:09 +02:00
greenkeeper[bot]
8ce621fc1c chore(package): update url-polyfill to version 1.0.13 2018-04-19 11:58:06 +02:00
Frédéric Junod
13e472527d Merge pull request #8089 from fredj/f_7167
Allow unprefixed WMTS tileMatrix identifiers
2018-04-19 11:56:24 +02:00
Frederic Junod
6006a9d9b5 Allow unprefixed WMTS tileMatrix identifiers
`ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet` fails when tileMatrix identifiers
are not prefixed by their tileMatrixSet identifier.

Original code by @filipheymans
2018-04-19 11:48:42 +02:00
Frederic Junod
4b76ad60d2 Remove unused variable 2018-04-19 10:53:10 +02:00
Frédéric Junod
fdc030e0b3 Merge pull request #8088 from camptocamp/fix_typo_in_TextPlacement
Correct type for TextPlacement (jsdoc)
2018-04-19 10:46:26 +02:00
Benjamin Gerber
84b6e6c7ad Correct type for TextPlacement (jsdoc) 2018-04-19 10:09:21 +02:00
Tim Schaub
7714eb06ad Merge pull request #8085 from openlayers/greenkeeper/mocha-5.1.1
Update mocha to the latest version 🚀
2018-04-18 20:40:29 -06:00
greenkeeper[bot]
d781218483 chore(package): update mocha to version 5.1.1 2018-04-19 02:28:15 +00:00
Tim Schaub
ee9078c401 Merge pull request #8083 from pfirpfel/move-structs-typedefs-to-ol/structs
Move structs typedefs to ol/structs/*
2018-04-18 16:27:12 -06:00
Tim Schaub
4083e22948 Merge pull request #8077 from icholy/master
Add hasFeature method to ol.source.Vector
2018-04-18 16:26:38 -06:00
Tim Schaub
9380cbd316 Merge pull request #8080 from iagafonov/master
#8079 Mark functions setRotateWithView and setSnapToPixel of ol/style/Image with @api
2018-04-18 16:24:20 -06:00
Tim Schaub
44fb48d63f Type is * instead of value_ 2018-04-18 16:19:06 -06:00
Andreas Hocevar
de02268362 Merge pull request #8084 from pfirpfel/move-reproj-typedefs-to-ol/reproj
Move ol.Reproj* typedefs to ol/reproj
2018-04-18 17:37:27 +02:00
Michael Kuenzli
4a70ae2fc0 Move ol.ReprojTriangle to ol/reproj/Triangulation 2018-04-18 16:39:26 +02:00
Michael Kuenzli
edce9e9435 Move ol.ReprojTileFunctionType to ol/reproj/Tile 2018-04-18 16:35:30 +02:00
Michael Kuenzli
724be40854 Move ol.ReprojImageFunctionType to ol/reproj/Image 2018-04-18 16:32:59 +02:00
Michael Kuenzli
b76492c3b8 Move ol.LRUCacheEntry to ol/structs/LRUCache 2018-04-18 16:14:03 +02:00
Michael Kuenzli
11da20e744 Move ol.LinkedListItem to ol/structs/LinkedList 2018-04-18 16:09:17 +02:00
Frédéric Junod
9aa3cd612f Merge pull request #8082 from pfirpfel/remove-unused-typedefs
Remove unused typedefs
2018-04-18 15:52:31 +02:00
Michael Kuenzli
8433e2e07d Remove unused typedefs 2018-04-18 15:18:57 +02:00
Иван Агафонов
84a49ec943 Mark functions setRotateWithView and setSnapToPixel of ol/style/Image with @api 2018-04-18 14:52:49 +03:00
Andreas Hocevar
004f91a020 Merge pull request #8076 from pfirpfel/move-olx.style-to-ol/style
Move olx.style.* and ol.Style* to ol/style/*
2018-04-18 09:04:44 +02:00
Andreas Hocevar
b9afb8d146 Merge branch 'master' into move-olx.style-to-ol/style 2018-04-18 08:57:49 +02:00
Andreas Hocevar
000d3d33a0 Merge pull request #8075 from pfirpfel/move-olx.tilegrid-to-ol/tilegrid
Move olx.tilegrid.* to ol/tilegrid/*
2018-04-18 08:51:35 +02:00
Ilia Choly
b8d3bb5766 Add hasFeature method to ol.source.Vector 2018-04-17 14:22:30 -04:00
Michael Kuenzli
310b9256eb Move olx.tilegrid.XYZOptions to ol/tilegrid 2018-04-17 17:28:32 +02:00
Michael Kuenzli
c06bea9a4e Move ol.StyleImageOptions from typedefs.js to ol/style/Image 2018-04-17 17:22:04 +02:00
Michael Kuenzli
e388527200 Move ol.StyleRenderFunction from typedefs.js to ol/style/Style 2018-04-17 17:22:04 +02:00
Michael Kuenzli
4f183f33f1 Move ol.StyleGeometryFunction from typedefs.js to ol/style/Style 2018-04-17 17:22:04 +02:00
Michael Kuenzli
663d2bb1bb Move olx.style.StyleOptions to ol/style/Style 2018-04-17 17:22:04 +02:00
Michael Kuenzli
1e17ddb8d6 Move olx.style.TextOptions to ol/style/Text 2018-04-17 17:21:56 +02:00
Michael Kuenzli
2d620e5537 Move olx.style.RegularShapeOptions to ol/style/RegularShape 2018-04-17 16:40:02 +02:00
Michael Kuenzli
73fcdf5392 Move olx.style.IconOptions to ol/style/Icon 2018-04-17 16:32:36 +02:00
Michael Kuenzli
de90b91401 Move olx.style.CircleOptions to ol/style/Circle 2018-04-17 16:06:55 +02:00
Michael Kuenzli
2178393e18 Move olx.tilegrid.WMTSOptions to ol/tilegrid/WMTS 2018-04-17 15:14:44 +02:00
Michael Kuenzli
ff488c8214 Move olx.tilegrid.TileGridOptions to ol/tilegrid/TileGrid 2018-04-17 15:09:47 +02:00
Tim Schaub
bd66034d7d Merge pull request #8073 from tschaub/downgrade-sinon
Remove dependency on deprecated sinon@5
2018-04-16 06:14:46 -06:00
Tim Schaub
b1c741ca4a Merge pull request #7994 from tschaub/one-default-renderer
Explicit renderer dependencies
2018-04-16 06:14:05 -06:00
Tim Schaub
c7a10fc7b6 Add upgrade notes about the removal of the renderer option 2018-04-15 07:46:17 -06:00
Tim Schaub
c5f81d8bbe Register layer renderers with the map renderer 2018-04-14 10:31:10 -06:00
Tim Schaub
91f2101cab Remove check for map renderer type 2018-04-14 10:01:07 -06:00
Tim Schaub
52774c6d43 Remove dependency on deprecated sinon@5 2018-04-14 09:39:48 -06:00
Tim Schaub
be35f82ae5 Explicit map renderer construction 2018-04-14 09:38:40 -06:00
Tim Schaub
2a9fde86b1 This makes ol/Map use the Canvas map renderer.
To use the experimental WebGL renderer, use ol/WebGLMap instead.
2018-04-14 09:32:54 -06:00
Frédéric Junod
c882c22e2f Merge pull request #7863 from fredj/rm_forEachFeature
Add note about null geom in VectorSource.forEachFeature
2018-04-13 14:16:23 +02:00
Frédéric Junod
a71652ef8e Merge pull request #8071 from openlayers/greenkeeper/mocha-5.1.0
Update mocha to the latest version 🚀
2018-04-13 13:23:36 +02:00
Frederic Junod
25af37bbd3 Add note about null geom in VectorSource.forEachFeature 2018-04-13 13:21:49 +02:00
greenkeeper[bot]
5827305e92 chore(package): update mocha to version 5.1.0 2018-04-13 02:32:21 +00:00
Zsolt Ero
50a929d562 us missing 2018-04-10 21:09:43 +02:00
Zsolt Ero
5bde9fa278 added non-degree tests for all units 2018-04-10 21:06:36 +02:00
Zsolt Ero
ab946c2ed2 non-degree test added 2018-04-10 20:54:45 +02:00
Zsolt Ero
cedf01f647 imperial unit test 2018-04-10 20:45:09 +02:00
Zsolt Ero
b55f323afe scaleLine fix update to master 2018-04-10 19:37:05 +02:00
Tim Schaub
568b3d3559 Merge pull request #8060 from openlayers/greenkeeper/google-closure-compiler-20180402.0.0
Update google-closure-compiler to the latest version 🚀
2018-04-08 07:44:03 -06:00
greenkeeper[bot]
9a91854366 chore(package): update google-closure-compiler to version 20180402.0.0 2018-04-05 19:01:55 +00:00
Frédéric Junod
248c54c5e0 Merge pull request #8055 from fredj/opt_property
Mark optional property with square brackets
2018-04-05 08:27:56 +02:00
Andreas Hocevar
5f49275d9e Merge pull request #8054 from lilliputten/win-build
Generate correct includes list for `build-index` script on windows hosts.
2018-04-04 20:22:37 +02:00
Frederic Junod
070f08e778 Mark optional property with square brackets 2018-04-04 17:06:21 +02:00
lilliputten
fa92a69ff3 Linter warnings fixed. 2018-04-04 17:47:56 +03:00
lilliputten
0deecda4f5 Simplified changes. 2018-04-04 17:41:21 +03:00
lilliputten
55bcd28729 Generate correct includes list on windows hosts. 2018-04-04 17:23:08 +03:00
Frédéric Junod
842cdcfcf7 Merge pull request #8053 from fredj/misc
Don't import from 'functions' multiple times
2018-04-04 15:35:34 +02:00
Frederic Junod
22ace7228f Don't import from 'functions' multiple times 2018-04-04 13:51:47 +02:00
Frédéric Junod
89b901eb84 Merge pull request #8041 from fgravin/remove-olx-typedefs-ol/source
Remove olx typedefs ol/source
2018-04-04 11:43:09 +02:00
Florent gravin
1a6c62a48a Replace dispatchChangeEvent by changed in ol/source 2018-04-04 10:52:50 +02:00
Florent gravin
c579fc985a Remove =undefined for default values in ol/source 2018-04-04 10:52:50 +02:00
Florent gravin
0f1cef96fb Replace ol.ProjectionLike by module:ol/proj~ProjectionLike in ol/source 2018-04-04 10:52:50 +02:00
Florent gravin
a85faeef0f Remove olx.source.ZoomifyOptions 2018-04-04 10:52:50 +02:00
Florent gravin
8b23a44f8f Remove useless olx.source.TileArcGISRestOptions 2018-04-04 10:52:50 +02:00
Florent gravin
a38ca0f248 Remove useless olx.source.MapQuestOptions 2018-04-04 10:52:50 +02:00
Florent gravin
4b0f376f60 Remove olx.source.XYZOptions 2018-04-04 10:52:50 +02:00
Florent gravin
5de33d066b Remove olx.source.WMTSOptions 2018-04-04 10:52:50 +02:00
Florent gravin
798119c9c8 Remove olx.source.VectorOptions 2018-04-04 10:52:50 +02:00
Florent gravin
910373eaa2 Remove ol.SourceUrlTileOptions 2018-04-04 10:52:50 +02:00
Florent gravin
f7b2433583 Remove olx.source.TilewmsOptions 2018-04-04 10:52:50 +02:00
Florent gravin
1bf17fecea Remove olx.source.TileUTFGridOptions 2018-04-04 10:52:50 +02:00
Florent gravin
1d99524ed1 Remove olx.source.TileJSONOptions 2018-04-04 10:52:50 +02:00
Florent gravin
9a4aed3d7c Remove olx.source.VectorTileOptions 2018-04-04 10:52:50 +02:00
Florent gravin
15fba2cbaf Remove olx.source.TileImageOptions 2018-04-04 10:52:50 +02:00
Florent gravin
3ec2cb1e6a Remove olx.source.TileDebugOptions 2018-04-04 10:52:50 +02:00
Florent gravin
aa138feb94 Remove ol.SourceTileOptions 2018-04-04 10:52:50 +02:00
Florent gravin
f9452fb76b Remove olx.source.StamenOptions 2018-04-04 10:52:50 +02:00
Florent gravin
e3889b6d11 Remove olx.source.RasterOptions 2018-04-04 10:52:50 +02:00
Florent gravin
4e32fd8975 Move olx.source.OSMOptions to ol/source/OSMOptions 2018-04-04 10:52:50 +02:00
Florent gravin
125a54ff1e Move olx.source.ImageWMSOptions to ol/source/ImageWMSOptions 2018-04-04 10:52:50 +02:00
Florent gravin
c6acbb54fd Move olx.source.ImageStaticOptions to ol/source/ImageStaticOptions 2018-04-04 10:52:50 +02:00
Florent gravin
db600287f8 Move olx.source.ImageMapGuideOptions to ol/source/ImageMapGuideOptions 2018-04-04 10:52:50 +02:00
Florent gravin
3d90a4587c Move olx.source.ImageCanvasOptions to ol/source/ImageCanvasOptions 2018-04-04 10:52:50 +02:00
Florent gravin
749f96d967 Move olx.source.ClusterOptions to ol/source/ClusterOptions 2018-04-04 10:48:38 +02:00
Florent gravin
27f86babec Move olx.source.CartoDBOptions to ol/source/CartoDBOptions 2018-04-04 10:48:38 +02:00
Florent gravin
af4296d2bc Move olx.source.BingMapsOptions to ol/source/BingMapsOptions 2018-04-04 10:48:38 +02:00
Frederic Junod
2effa1182e Remove all comments from shaders 2018-04-03 09:54:55 +02:00
Frédéric Junod
bc54693382 Merge pull request #8026 from nyurik/patch-2
[doc] dispatchChangeEvent -> changed
2018-04-03 08:53:09 +02:00
Yuri Astrakhan
1b73bca281 link to observable-changed 2018-04-02 22:50:26 +03:00
Yuri Astrakhan
f6e2db76f4 [doc] dispatchChangeEvent -> changed 2018-04-02 22:45:59 +03:00
Marc Jansen
722ce67ebe Merge pull request #8003 from marcjansen/chaikin
Add an example showing Chaikins smoothing algorithm
2018-03-29 17:51:30 +02:00
Frédéric Junod
8208177bdc Merge pull request #8044 from fredj/misc
Rename constructor options typedef to 'Options'
2018-03-29 17:14:55 +02:00
Frederic Junod
4e0d195236 Remove unused minResolution and maxResolution 2018-03-29 16:32:21 +02:00
Frederic Junod
60ca330dce Rename constructor options typedef to 'Options' 2018-03-29 15:50:32 +02:00
Marc Jansen
1f0e9abfdd Simplify example 2018-03-29 08:35:09 +02:00
Marc Jansen
d42de41af3 Add an example showing Chaikins smoothing algorithm 2018-03-29 08:35:09 +02: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
553 changed files with 8116 additions and 15042 deletions

View File

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

View File

@@ -1,3 +1,4 @@
examples/Jugl.js examples/Jugl.js
examples/resources/ examples/resources/
build/package/**/*webgl* build/package/**/*webgl*
config/jsdoc/api/template/static/scripts/

2
.gitignore vendored
View File

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

View File

@@ -19,8 +19,6 @@ Use one of the following methods to use OpenLayers in your project:
* 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) * 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)
* For use with Closure Library (rare), install the [`openlayers` package](https://npmjs.com/package/openlayers) and read the [tutorial](http://openlayers.org/en/latest/doc/tutorials/closure.html).
## Supported Browsers ## Supported Browsers
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`. 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`.

View File

@@ -1,6 +1,55 @@
## Upgrade notes ## Upgrade notes
### Next release ### 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
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 #### Removal of ol.FeatureStyleFunction
@@ -110,14 +159,37 @@ var poly = circularPolygon(center, radius);
#### Removal of optional this arguments. #### 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 * Collection#forEach
* geom/LineString#forEachSegment * geom/LineString#forEachSegment
* Observable#on, #once, #un * Observable#on, #once, #un
* Map#forEachLayerAtPixel
* source/TileUTFGrid#forDataAtCoordinateAndResolution * source/TileUTFGrid#forDataAtCoordinateAndResolution
* source/Vector#forEachFeature, #forEachFeatureInExtent, #forEachFeatureIntersectingExtent * 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 ### v4.6.0
#### Renamed `exceedLength` option of `ol.style.Text` to `overflow` #### 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.1 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))

View File

@@ -10,15 +10,13 @@
"includePattern": ".+\\.js(doc)?$", "includePattern": ".+\\.js(doc)?$",
"excludePattern": "(^|\\/|\\\\)_", "excludePattern": "(^|\\/|\\\\)_",
"include": [ "include": [
"src", "src/ol"
"externs/oli.js",
"externs/olx.js"
] ]
}, },
"plugins": [ "plugins": [
"plugins/markdown", "plugins/markdown",
"config/jsdoc/api/plugins/inheritdoc", "config/jsdoc/api/plugins/normalize-exports",
"config/jsdoc/api/plugins/typedefs", "config/jsdoc/api/plugins/inline-options",
"config/jsdoc/api/plugins/events", "config/jsdoc/api/plugins/events",
"config/jsdoc/api/plugins/observable", "config/jsdoc/api/plugins/observable",
"config/jsdoc/api/plugins/api" "config/jsdoc/api/plugins/api"

View File

@@ -1,43 +1,43 @@
<table><tr> <table><tr>
<th width="33.3%">Map</th><th width="33.3%">View</th><th width="33.3%">Layers</th> <th width="33.3%">Map</th><th width="33.3%">View</th><th width="33.3%">Layers</th>
</tr><tr> </tr><tr>
<td><p>A [map](ol.Map.html) is made of [layers](ol.layer.html), a [view](ol.View.html) to visualize them, [interactions](ol.interaction.html) to modify map content and [controls](ol.control.html) with UI components.</p> <td><p>A [map](module-ol_Map-Map.html) is made of [layers](module-ol_layer_Base-BaseLayer.html), a [view](module-ol_View-View.html) to visualize them, [interactions](module-ol_interaction_Interaction-Interaction.html) to modify map content and [controls](module-ol_control_Control-Control.html) with UI components.</p>
[Overview](ol.Map.html)<br> [Overview](module-ol_Map-Map.html)<br>
[Creation](ol.Map.html#Map)<br> [Creation](module-ol_Map-Map.html#Map)<br>
[Events](ol.MapBrowserEvent.html)</td> [Events](module-ol_MapBrowserEvent-MapBrowserEvent.html)</td>
<td><p>The view manages the visual parameters of the map view, like resolution or rotation.</p> <td><p>The view manages the visual parameters of the map view, like resolution or rotation.</p>
[ol.View](ol.View.html) with center, projection, resolution and rotation</td> [View](module-ol_View-View.html) with center, projection, resolution and rotation</td>
<td><p>Layers are lightweight containers that get their data from [sources](ol.source.html).</p> <td><p>Layers are lightweight containers that get their data from [sources](module-ol_source_Source-Source.html).</p>
[ol.layer.Tile](ol.layer.Tile.html)<br> [layer/Tile](module-ol_layer_Tile-TileLayer.html)<br>
[ol.layer.Image](ol.layer.Image.html)<br> [layer/Image](module-ol_layer_Image-ImageLayer.html)<br>
[ol.layer.Vector](ol.layer.Vector.html)<br> [layer/Vector](module-ol_layer_Vector-VectorLayer.html)<br>
[ol.layer.VectorTile](ol.layer.VectorTile.html)</td> [layer/VectorTile](module-ol_layer_VectorTile-VectorTileLayer.html)</td>
</tr><tr> </tr><tr>
<th>Controls</th><th>Interactions</th><th>Sources and formats</th> <th>Controls</th><th>Interactions</th><th>Sources and formats</th>
</tr><tr> </tr><tr>
<td>[Map default controls](ol.control.html#.defaults)<br> <td>[Map default controls](module-ol_control_util.html#.defaults)<br>
[All controls](ol.control.html) [All controls](module-ol_control_Control-Control.html)
</td> </td>
<td> <td>
[Map default interactions](ol.interaction.html#.defaults)<br> [Map default interactions](module-ol_interaction.html#~defaults)<br>
Interactions for [vector features](ol.Feature.html) Interactions for [vector features](module-ol_Feature-Feature.html)
<ul><li>[ol.interaction.Select](ol.interaction.Select.html)</li> <ul><li>[interaction/Select](module-ol_interaction_Select-Select.html)</li>
<li>[ol.interaction.Draw](ol.interaction.Draw.html)</li> <li>[interaction/Draw](module-ol_interaction_Draw-Draw.html)</li>
<li>[ol.interaction.Modify](ol.interaction.Modify.html)</li></ul> <li>[interaction/Modify](module-ol_interaction_Modify-Modify.html)</li></ul>
[All interactions](ol.interaction.html)</td> [All interactions](module-ol_interaction_Interaction-Interaction.html)</td>
<td>[Tile sources](ol.source.Tile.html) for [ol.layer.Tile](ol.layer.Tile.html) <td>[Tile sources](module-ol_source_Tile-TileSource.html) for [layer/Tile](module-ol_layer_Tile-TileLayer.html)
<br>[Image sources](ol.source.Image.html) for [ol.layer.Image](ol.layer.Image.html) <br>[Image sources](module-ol_source_Image-ImageSource.html) for [layer/Image](module-ol_layer_Image-ImageLayer.html)
<br>[Vector sources](ol.source.Vector.html) for [ol.layer.Vector](ol.layer.Vector.html) <br>[Vector sources](module-ol_source_Vector-VectorSource.html) for [layer/Vector](module-ol_layer_Vector-VectorLayer.html)
<br>[Vector tile sources](ol.source.VectorTile.html) for [ol.layer.VectorTile](ol.layer.VectorTile.html) <br>[Vector tile sources](module-ol_source_VectorTile-VectorTile.html) for [layer/VectorTile](module-ol_layer_VectorTile-VectorTileLayer.html)
<br>[Formats](ol.format.Feature.html) for reading/writing vector data <br>[Formats](module-ol_format_Feature-FeatureFormat.html) for reading/writing vector data
<br>[ol.format.WMSCapabilities](ol.format.WMSCapabilities.html)</td></tr> <br>[format/WMSCapabilities](module-ol_format_WMSCapabilities-WMSCapabilities.html)</td></tr>
<tr><th>Projections</th><th>Observable objects</th><th>Other components</th></tr> <tr><th>Projections</th><th>Observable objects</th><th>Other components</th></tr>
<tr><td><p>All coordinates and extents need to be provided in view projection (default: EPSG:3857). To transform, use [ol.proj.transform()](ol.proj.html#.transform) and [ol.proj.transformExtent()](ol.proj.html#.transformExtent).</p> <tr><td><p>All coordinates and extents need to be provided in view projection (default: EPSG:3857). To transform, use [proj.transform()](module-ol_proj.html#.transform) and [proj.transformExtent()](module-ol_proj.html#.transformExtent).</p>
[ol.proj](ol.proj.html)</td> [ol/proj](module-ol_proj.html)</td>
<td><p>Changes to all [ol.Objects](ol.Object.html) can be observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.Object.Event](ol.Object.Event.html) with information on the changed property and old value.</p> <td><p>Changes to all [ol/Object](module-ol_Object-BaseObject.html)s can be observed by calling the [object.on('propertychange')](module-ol_Object-BaseObject.html#on) method. Listeners receive an [ol/Object~ObjectEvent](module-ol_Object-ObjectEvent.html) with information on the changed property and old value.</p>
<td> <td>
[ol.Geolocation](ol.Geolocation.html)<br> [ol/Geolocation](module-ol_Geolocation.html)<br>
[ol.Overlay](ol.Overlay.html)<br></td> [ol/Overlay](module-ol_Overlay-Overlay.html)<br></td>
</tr></table> </tr></table>
&nbsp; &nbsp;
@@ -52,11 +52,4 @@ The OpenLayers API consists of
Within a major release series, the API will not be changed. Any changes to the API will be accompanied by a new major release. Within a major release series, the API will not be changed. Any changes to the API will be accompanied by a new major release.
*Note*: The API change policy does not cover CSS class names that are used to style the *Note*: The API change policy does not cover CSS class names that are used to style the OpenLayers UI. It also does not cover any typedefs and enums.
OpenLayers UI.
*Note for Closure Compiler users compiling their application code together with OpenLayers*:
The names of types other than those in the list above (e.g. `ol.Coordinate`) are subject to change. It
is therefore recommended to either use the resolved type as listed in the API docs (e.g.
`Array.<number>` instead of `ol.Coordinate`), or pay attention to the upgrade notes, which will list
the changes for those types.

View File

@@ -1,5 +1,6 @@
/** /**
* Define an @api tag * Define an @api tag
* @param {Object} dictionary The tag dictionary.
*/ */
exports.defineTags = function(dictionary) { exports.defineTags = function(dictionary) {
dictionary.defineTag('api', { dictionary.defineTag('api', {
@@ -8,32 +9,32 @@ exports.defineTags = function(dictionary) {
canHaveName: false, canHaveName: false,
onTagged: function(doclet, tag) { onTagged: function(doclet, tag) {
includeTypes(doclet); includeTypes(doclet);
doclet.stability = "stable"; doclet.stability = 'stable';
} }
}); });
}; };
/* /*
* Based on @api annotations, and assuming that items with no @api annotation * Based on @api annotations, and assuming that items with no @api annotation
* should not be documented, this plugin removes undocumented symbols * should not be documented, this plugin removes undocumented symbols
* from the documentation. * from the documentation.
*/ */
var api = []; const api = [];
var classes = {}; const classes = {};
var types = {}; const types = {};
const modules = {};
function hasApiMembers(doclet) { function hasApiMembers(doclet) {
return doclet.longname.split('#')[0] == this.longname; return doclet.longname.split('#')[0] == this.longname;
} }
function includeAugments(doclet) { function includeAugments(doclet) {
var augments = doclet.augments; const augments = doclet.augments;
if (augments) { if (augments) {
var cls; let cls;
for (var i = augments.length - 1; i >= 0; --i) { for (let i = augments.length - 1; i >= 0; --i) {
cls = classes[augments[i]]; cls = classes[augments[i]];
if (cls) { if (cls) {
includeAugments(cls); includeAugments(cls);
@@ -57,36 +58,34 @@ function includeAugments(doclet) {
} }
}); });
} }
if (cls.longname.indexOf('oli.') !== 0) {
cls._hideConstructor = true; cls._hideConstructor = true;
delete cls.undocumented; delete cls.undocumented;
} }
} }
} }
}
} }
function extractTypes(item) { function extractTypes(item) {
item.type.names.forEach(function(type) { item.type.names.forEach(function(type) {
var match = type.match(/^(.*<)?([^>]*)>?$/); const match = type.match(/^(.*<)?([^>]*)>?$/);
if (match) { if (match) {
modules[match[2]] = true;
types[match[2]] = true; types[match[2]] = true;
} }
}); });
} }
function includeTypes(doclet) { function includeTypes(doclet) {
if (doclet.params && doclet.kind != 'class') { if (doclet.params) {
doclet.params.forEach(extractTypes); doclet.params.forEach(extractTypes);
} }
if (doclet.returns) { if (doclet.returns) {
doclet.returns.forEach(extractTypes); doclet.returns.forEach(extractTypes);
} }
if (doclet.isEnum) { if (doclet.properties) {
types[doclet.meta.code.name] = true; doclet.properties.forEach(extractTypes);
} }
if (doclet.type && doclet.meta.code.type == 'MemberExpression') { if (doclet.type && doclet.meta.code.type == 'MemberExpression') {
// types in olx.js
extractTypes(doclet); extractTypes(doclet);
} }
} }
@@ -94,13 +93,9 @@ function includeTypes(doclet) {
exports.handlers = { exports.handlers = {
newDoclet: function(e) { newDoclet: function(e) {
var doclet = e.doclet; const doclet = e.doclet;
// Keep track of api items - needed in parseComplete to determine classes
// with api members.
if (doclet.meta.filename == 'olx.js' && doclet.kind == 'typedef') {
doclet.undocumented = false;
}
if (doclet.stability) { if (doclet.stability) {
modules[doclet.longname.split('~').shift()] = true;
api.push(doclet); api.push(doclet);
} }
// Mark explicity defined namespaces - needed in parseComplete to keep // Mark explicity defined namespaces - needed in parseComplete to keep
@@ -109,14 +104,15 @@ exports.handlers = {
doclet.namespace_ = true; doclet.namespace_ = true;
} }
if (doclet.kind == 'class') { if (doclet.kind == 'class') {
modules[doclet.longname.split('~').shift()] = true;
classes[doclet.longname] = doclet; classes[doclet.longname] = doclet;
} }
}, },
parseComplete: function(e) { parseComplete: function(e) {
var doclets = e.doclets; const doclets = e.doclets;
for (var i = doclets.length - 1; i >= 0; --i) { for (let i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i]; const doclet = doclets[i];
if (doclet.stability || doclet.namespace_) { if (doclet.stability || doclet.namespace_) {
if (doclet.kind == 'class') { if (doclet.kind == 'class') {
includeAugments(doclet); includeAugments(doclet);
@@ -134,6 +130,13 @@ exports.handlers = {
// Always document namespaces and items with stability annotation // Always document namespaces and items with stability annotation
continue; continue;
} }
if (doclet.kind == 'module' && doclet.longname in modules) {
// Document all modules that are referenced by the API
continue;
}
if (doclet.isEnum || doclet.kind == 'typedef') {
continue;
}
if (doclet.kind == 'class' && api.some(hasApiMembers, doclet)) { if (doclet.kind == 'class' && api.some(hasApiMembers, doclet)) {
// Mark undocumented classes with documented members as unexported. // Mark undocumented classes with documented members as unexported.
// This is used in ../template/tmpl/container.tmpl to hide the // This is used in ../template/tmpl/container.tmpl to hide the

View File

@@ -1,11 +1,11 @@
var events = {}; const events = {};
var classes = {}; const classes = {};
exports.handlers = { exports.handlers = {
newDoclet: function(e) { newDoclet: function(e) {
var doclet = e.doclet; const doclet = e.doclet;
var cls; let cls;
if (doclet.kind == 'event') { if (doclet.kind == 'event') {
cls = doclet.longname.split('#')[0]; cls = doclet.longname.split('#')[0];
if (!(cls in events)) { if (!(cls in events)) {
@@ -18,8 +18,8 @@ exports.handlers = {
}, },
parseComplete: function(e) { parseComplete: function(e) {
var doclets = e.doclets; const doclets = e.doclets;
var doclet, i, ii, j, jj, event, fires; let doclet, i, ii, j, jj, event, fires;
for (i = 0, ii = doclets.length - 1; i < ii; ++i) { for (i = 0, ii = doclets.length - 1; i < ii; ++i) {
doclet = doclets[i]; doclet = doclets[i];
if (doclet.fires) { if (doclet.fires) {

View File

@@ -1,109 +0,0 @@
/*
* This is a hack to prevent inheritDoc tags from entirely removing
* documentation of the method that inherits the documentation.
*
* TODO: Remove this hack when https://github.com/jsdoc3/jsdoc/issues/53
* is addressed.
*/
exports.defineTags = function(dictionary) {
dictionary.defineTag('inheritDoc', {
mustHaveValue: false,
canHaveType: false,
canHaveName: false,
onTagged: function(doclet, tag) {
doclet.inheritdoc = true;
}
});
};
var lookup = {};
var incompleteByClass = {};
var keepKeys = ['comment', 'meta', 'name', 'memberof', 'longname', 'augment',
'stability'];
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
var incompletes;
if (!(doclet.longname in lookup)) {
lookup[doclet.longname] = [];
}
lookup[doclet.longname].push(doclet);
if (doclet.inheritdoc) {
if (!(doclet.memberof in incompleteByClass)) {
incompleteByClass[doclet.memberof] = [];
}
incompletes = incompleteByClass[doclet.memberof];
if (incompletes.indexOf(doclet.name) == -1) {
incompletes.push(doclet.name);
}
}
},
parseComplete: function(e) {
var ancestors, candidate, candidates, doclet, i, j, k, l, key;
var incompleteDoclet, stability, incomplete, incompletes;
var doclets = e.doclets;
for (i = doclets.length - 1; i >= 0; --i) {
doclet = doclets[i];
if (doclet.augments) {
ancestors = [].concat(doclet.augments);
}
incompletes = incompleteByClass[doclet.longname];
if (ancestors && incompletes) {
// collect ancestors from the whole hierarchy
for (j = 0; j < ancestors.length; ++j) {
candidates = lookup[ancestors[j]];
if (candidates) {
for (k = candidates.length - 1; k >= 0; --k) {
candidate = candidates[k];
if (candidate.augments) {
ancestors = ancestors.concat(candidate.augments);
}
}
}
}
// walk through all inheritDoc members
for (j = incompletes.length - 1; j >= 0; --j) {
incomplete = incompletes[j];
candidates = lookup[doclet.longname + '#' + incomplete];
if (candidates) {
// get the incomplete doclet that needs to be augmented
for (k = candidates.length - 1; k >= 0; --k) {
incompleteDoclet = candidates[k];
if (incompleteDoclet.inheritdoc) {
break;
}
}
}
// find the documented ancestor
for (k = ancestors.length - 1; k >= 0; --k) {
candidates = lookup[ancestors[k] + '#' + incomplete];
if (candidates) {
for (l = candidates.length - 1; l >= 0; --l) {
candidate = candidates[l];
if (candidate && !candidate.inheritdoc) {
stability = candidate.stability || incompleteDoclet.stability;
if (stability) {
incompleteDoclet.stability = stability;
for (key in candidate) {
if (candidate.hasOwnProperty(key) &&
keepKeys.indexOf(key) == -1) {
incompleteDoclet[key] = candidate[key];
}
}
}
}
}
}
}
}
}
}
}
};

View File

@@ -0,0 +1,49 @@
/**
* @filedesc
* Inlines option params from typedefs
*/
const properties = {};
exports.handlers = {
/**
* Collects all typedefs, keyed by longname
* @param {Object} e Event object.
*/
newDoclet: function(e) {
if (e.doclet.kind == 'typedef' && e.doclet.properties) {
properties[e.doclet.longname] = e.doclet.properties;
}
},
/**
* Adds `options.*` params for options that match the longname of one of the
* collected typedefs.
* @param {Object} e Event object.
*/
parseComplete: function(e) {
const doclets = e.doclets;
for (let i = 0, ii = doclets.length; i < ii; ++i) {
const doclet = doclets[i];
if (doclet.params) {
const params = doclet.params;
for (let j = 0, jj = params.length; j < jj; ++j) {
const param = params[j];
if (param.type && param.type.names) {
const type = param.type.names[0];
if (type in properties) {
param.type.names[0] = type;
params.push.apply(params, properties[type].map(p => {
const property = Object.assign({}, p);
property.name = `${param.name}.${property.name}`;
return property;
}));
}
}
}
}
}
}
};

View File

@@ -0,0 +1,106 @@
/**
* @filedesc
* Expands module path type to point to default export when no name is given
*/
const fs = require('fs');
const path = require('path');
let moduleRoot;
function addDefaultExportPath(obj) {
if (!Array.isArray(obj)) {
obj = obj.names;
}
obj.forEach((name, index) => {
const matches = name.match(/module\:([^>|),\.<]|)+/g);
if (matches) {
matches.forEach(module => {
if (!/[~\.]/.test(module)) {
const checkFile = path.resolve(moduleRoot, module.replace(/^module\:/, ''));
const file = fs.readFileSync(require.resolve(checkFile), 'utf-8');
const lines = file.split('\n');
let hasDefaultExport = false;
for (let i = 0, ii = lines.length; i < ii; ++i) {
hasDefaultExport = hasDefaultExport || /^export default [^\{]/.test(lines[i]);
const match = lines[i].match(/^export default ([A-Za-z_$][A-Za-z0-9_$]+);$/);
if (match) {
// Use variable name if default export is assigned to a variable.
obj[index] = name = name.replace(module, `${module}~${match[1]}`);
return;
}
}
if (hasDefaultExport) {
// Duplicate last part if default export is not assigned to a variable.
obj[index] = name = name.replace(module, `${module}~${module.split('/').pop()}`);
}
}
});
}
});
}
function replaceLinks(comment) {
const matches = comment.match(/\{@link [^\} #]+}/g);
if (matches) {
const modules = matches.map(m => {
const mm = m.match(/(module:[^\}]+)}$/);
if (mm) {
return mm[1];
}
}).filter(m => !!m);
const newModules = modules.concat();
addDefaultExportPath(newModules);
modules.forEach((module, i) => {
comment = comment.replace(module, newModules[i]);
});
}
return comment;
}
exports.handlers = {
/**
* Adds default export to module path types without name
* @param {Object} e Event object.
*/
newDoclet: function(e) {
const doclet = e.doclet;
if (doclet.kind == 'module') {
const levelsUp = doclet.longname.replace(/^module\:/, '').split('/');
if (doclet.meta.filename != 'index.js') {
levelsUp.pop();
}
const pathArgs = [doclet.meta.path].concat(levelsUp.map(() => '../'));
moduleRoot = path.resolve.apply(null, pathArgs);
} else {
if (doclet.description) {
doclet.description = replaceLinks(doclet.description);
}
if (doclet.classdesc) {
doclet.classdesc = replaceLinks(doclet.classdesc);
}
const module = doclet.longname.split('#').shift();
if (module.indexOf('module:') == 0 && module.indexOf('.') !== -1) {
doclet.longname = doclet.longname.replace(module, module.replace('.', '~'));
}
if (doclet.augments) {
addDefaultExportPath(doclet.augments);
}
if (doclet.params) {
doclet.params.forEach(p => addDefaultExportPath(p.type));
}
if (doclet.returns) {
doclet.returns.forEach(r => addDefaultExportPath(r.type));
}
if (doclet.properties) {
doclet.properties.forEach(p => addDefaultExportPath(p.type));
}
if (doclet.type) {
addDefaultExportPath(doclet.type);
}
}
}
};

View File

@@ -1,25 +1,25 @@
var classes = {}; const classes = {};
var observables = {}; const observables = {};
exports.handlers = { exports.handlers = {
newDoclet: function(e) { newDoclet: function(e) {
var doclet = e.doclet; const doclet = e.doclet;
if (doclet.kind == 'class') { if (doclet.kind == 'class') {
classes[doclet.longname] = doclet; classes[doclet.longname] = doclet;
} }
}, },
parseComplete: function(e) { parseComplete: function(e) {
var doclets = e.doclets; const doclets = e.doclets;
var cls, doclet, event, i, ii, observable; let cls, doclet, event, i, ii, observable;
for (i = 0, ii = doclets.length - 1; i < ii; ++i) { for (i = 0, ii = doclets.length - 1; i < ii; ++i) {
doclet = doclets[i]; doclet = doclets[i];
cls = classes[doclet.longname.split('#')[0]]; cls = classes[doclet.longname.split('#')[0]];
if (typeof doclet.observable == 'string' && cls) { if (typeof doclet.observable == 'string' && cls) {
var name = doclet.name.replace(/^[sg]et/, ''); let name = doclet.name.replace(/^[sg]et/, '');
name = name.substr(0, 1).toLowerCase() + name.substr(1); name = name.substr(0, 1).toLowerCase() + name.substr(1);
var key = doclet.longname.split('#')[0] + '#' + name; const key = doclet.longname.split('#')[0] + '#' + name;
doclet.observable = key; doclet.observable = key;
if (!observables[key]) { if (!observables[key]) {
observables[key] = {}; observables[key] = {};
@@ -47,7 +47,7 @@ exports.handlers = {
if (!cls.fires) { if (!cls.fires) {
cls.fires = []; cls.fires = [];
} }
event = 'ol.Object.Event#event:change:' + name; event = 'module:ol/Object~ObjectEvent#event:change:' + name;
if (cls.fires.indexOf(event) == -1) { if (cls.fires.indexOf(event) == -1) {
cls.fires.push(event); cls.fires.push(event);
} }

View File

@@ -1,49 +1,27 @@
/* /*
* Converts olx.js @type annotations into properties of the previous @typedef.
* Changes @enum annotations into @typedef. * Changes @enum annotations into @typedef.
*/ */
var lastOlxTypedef = null;
var olxTypes = {};
// names of the olx typenames
var olxTypeNames = [];
// types that are undefined or typedefs containing undefined // types that are undefined or typedefs containing undefined
var undefinedLikes = null; let undefinedLikes = null;
function addSubparams(params) {
for (var j = 0, jj = params.length; j < jj; ++j) {
var param = params[j];
var types = param.type.names;
for (var k = 0, kk = types.length; k < kk; ++k) {
var name = types[k];
if (name in olxTypes) {
param.subparams = olxTypes[name];
// TODO addSubparams(param.subparams);
// TODO Do we need to support multiple object literal types per
// param?
break;
}
}
}
}
/** /**
* Changes the description of the param, if it is found to be a required * Changes the description of the param if it is required.
* option of an olxTypeName. * @param {Object} doclet The doclet.
* @returns {Object} The modified doclet.
*/ */
function markRequiredIfNeeded(doclet){ function markRequiredIfNeeded(doclet) {
var memberof = doclet.memberof; const memberof = doclet.memberof;
// only check doclets that belong to an olxTypeName if (!memberof) {
if (!memberof || olxTypeNames.indexOf(memberof) == -1) {
return doclet; return doclet;
} }
var types = doclet.type.names; const types = doclet.type.names;
var isRequiredParam = true; let isRequiredParam = true;
// iterate over all types that are like-undefined (see above for explanation) // iterate over all types that are like-undefined (see above for explanation)
for (var idx = undefinedLikes.length - 1; idx >= 0; idx--) { for (let idx = undefinedLikes.length - 1; idx >= 0; idx--) {
var undefinedLike = undefinedLikes[idx]; const undefinedLike = undefinedLikes[idx];
// … if the current types contains a type that is undefined-like, // … if the current types contains a type that is undefined-like,
// it is not required. // it is not required.
if (types.indexOf(undefinedLike) != -1) { if (types.indexOf(undefinedLike) != -1) {
@@ -52,9 +30,9 @@ function markRequiredIfNeeded(doclet){
} }
if (isRequiredParam) { if (isRequiredParam) {
var reqSnippet = '<span class="required-option">Required.</span></p>'; const reqSnippet = '<span class="required-option">Required.</span></p>';
var endsWithP = /<\/p>$/i; const endsWithP = /<\/p>$/i;
var description = doclet.description; let description = doclet.description;
if (description && endsWithP.test(description)) { if (description && endsWithP.test(description)) {
description = description.replace(endsWithP, ' ' + reqSnippet); description = description.replace(endsWithP, ' ' + reqSnippet);
} else if (doclet.description === undefined) { } else if (doclet.description === undefined) {
@@ -69,13 +47,14 @@ function markRequiredIfNeeded(doclet){
* Iterates over all doclets and finds the names of types that contain * Iterates over all doclets and finds the names of types that contain
* undefined. Stores the names in the global variable undefinedLikes, so * undefined. Stores the names in the global variable undefinedLikes, so
* that e.g. markRequiredIfNeeded can use these. * that e.g. markRequiredIfNeeded can use these.
* @param {Array} doclets The doclets.
*/ */
function findTypesLikeUndefined(doclets) { function findTypesLikeUndefined(doclets) {
undefinedLikes = ['undefined']; // include type 'undefined' explicitly undefinedLikes = ['undefined']; // include type 'undefined' explicitly
for (var i = doclets.length - 1; i >= 0; --i) { for (let i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i]; const doclet = doclets[i];
if(doclet.kind === 'typedef') { if (doclet.kind === 'typedef') {
var types = doclet.type.names; const types = doclet.type.names;
if (types.indexOf('undefined') !== -1) { if (types.indexOf('undefined') !== -1) {
// the typedef contains 'undefined', so it self is undefinedLike. // the typedef contains 'undefined', so it self is undefinedLike.
undefinedLikes.push(doclet.longname); undefinedLikes.push(doclet.longname);
@@ -87,20 +66,8 @@ function findTypesLikeUndefined(doclets) {
exports.handlers = { exports.handlers = {
newDoclet: function(e) { newDoclet: function(e) {
var doclet = e.doclet; const doclet = e.doclet;
if (doclet.meta.filename == 'olx.js') { if (doclet.isEnum) {
if (doclet.kind == 'typedef') {
lastOlxTypedef = doclet;
olxTypeNames.push(doclet.longname);
olxTypes[doclet.longname] = [];
doclet.properties = [];
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
lastOlxTypedef.properties.push(doclet);
olxTypes[lastOlxTypedef.longname].push(doclet);
} else {
lastOlxTypedef = null;
}
} else if (doclet.isEnum) {
// We never export enums, so we document them like typedefs // We never export enums, so we document them like typedefs
doclet.kind = 'typedef'; doclet.kind = 'typedef';
delete doclet.isEnum; delete doclet.isEnum;
@@ -108,15 +75,10 @@ exports.handlers = {
}, },
parseComplete: function(e) { parseComplete: function(e) {
var doclets = e.doclets; const doclets = e.doclets;
findTypesLikeUndefined(doclets); findTypesLikeUndefined(doclets);
for (var i = doclets.length - 1; i >= 0; --i) { for (let i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i]; markRequiredIfNeeded(doclets[i]);
var params = doclet.params;
if (params) {
addSubparams(params);
}
markRequiredIfNeeded(doclet);
} }
} }

View File

@@ -47,21 +47,6 @@ ol.MapBrowserEventType = {
``` ```
Note the value of the `@event` annotation. The text before the hash refers to the event class that the event belongs to, and the text after the hash is the type of the event. Note the value of the `@event` annotation. The text before the hash refers to the event class that the event belongs to, and the text after the hash is the type of the event.
To export event properties, they need to be defined in `externs/oli.js` (also see `readme.md` in `externs/`) and marked with an @api annotation:
```js
/** @interface */
oli.MapBrowserEvent;
/**
* @type {ol.Coordinate}
* @api
*/
oli.MapBrowserEvent.prototype.coordinate;
// ...
};
```
To document which events are fired by a class or method, the `@fires` annotation is used: To document which events are fired by a class or method, the `@fires` annotation is used:
```js ```js
/** /**

View File

@@ -1,26 +1,38 @@
/*global env: true */ /*global env: true */
var template = require('jsdoc/lib/jsdoc/template'),
fs = require('jsdoc/lib/jsdoc/fs'), const hasOwnProp = Object.prototype.hasOwnProperty;
path = require('jsdoc/lib/jsdoc/path'),
taffy = require('taffydb').taffy, // Work around an issue with hasOwnProperty in JSDoc's templateHelper.js.
handle = require('jsdoc/lib/jsdoc/util/error').handle, //TODO Fix in JSDoc.
helper = require('jsdoc/lib/jsdoc/util/templateHelper'), Object.prototype.hasOwnProperty = function(property) {
_ = require('underscore'), return property in this;
htmlsafe = helper.htmlsafe, };
linkto = helper.linkto,
resolveAuthorLinks = helper.resolveAuthorLinks, const template = require('jsdoc/lib/jsdoc/template');
scopeToPunc = helper.scopeToPunc, const fs = require('jsdoc/lib/jsdoc/fs');
hasOwnProp = Object.prototype.hasOwnProperty, const path = require('jsdoc/lib/jsdoc/path');
data, const taffy = require('taffydb').taffy;
view, const handle = require('jsdoc/lib/jsdoc/util/error').handle;
outdir = env.opts.destination; const helper = require('jsdoc/lib/jsdoc/util/templateHelper');
const _ = require('underscore');
const htmlsafe = helper.htmlsafe;
const linkto = helper.linkto;
const resolveAuthorLinks = helper.resolveAuthorLinks;
const outdir = env.opts.destination;
// Work around an issue with hasOwnProperty in JSDoc's templateHelper.js.
//TODO Fix in JSDoc.
Object.prototype.hasOwnProperty = hasOwnProp;
let view;
let data;
function find(spec) { function find(spec) {
return helper.find(data, spec); return helper.find(data, spec);
} }
function tutoriallink(tutorial) { function tutoriallink(tutorial) {
return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' }); return helper.toTutorial(tutorial, null, {tag: 'em', classname: 'disabled', prefix: 'Tutorial: '});
} }
function getAncestorLinks(doclet) { function getAncestorLinks(doclet) {
@@ -28,25 +40,26 @@ function getAncestorLinks(doclet) {
} }
function hashToLink(doclet, hash) { function hashToLink(doclet, hash) {
if ( !/^(#.+)/.test(hash) ) { return hash; } if (!/^(#.+)/.test(hash)) {
return hash;
}
var url = helper.createLink(doclet); let url = helper.createLink(doclet);
url = url.replace(/(#.+|$)/, hash); url = url.replace(/(#.+|$)/, hash);
return '<a href="' + url + '">' + hash + '</a>'; return '<a href="' + url + '">' + hash + '</a>';
} }
function needsSignature(doclet) { function needsSignature(doclet) {
var needsSig = false; let needsSig = false;
// function and class definitions always get a signature // function and class definitions always get a signature
if (doclet.kind === 'function' || doclet.kind === 'class') { if (doclet.kind === 'function' || doclet.kind === 'class') {
needsSig = true; needsSig = true;
} } else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
// typedefs that contain functions get a signature, too
else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
doclet.type.names.length) { doclet.type.names.length) {
for (var i = 0, l = doclet.type.names.length; i < l; i++) { // typedefs that contain functions get a signature, too
for (let i = 0, l = doclet.type.names.length; i < l; i++) {
if (doclet.type.names[i].toLowerCase() === 'function') { if (doclet.type.names[i].toLowerCase() === 'function') {
needsSig = true; needsSig = true;
break; break;
@@ -58,30 +71,30 @@ function needsSignature(doclet) {
} }
function addSignatureParams(f) { function addSignatureParams(f) {
var params = helper.getSignatureParams(f, 'optional'); const params = helper.getSignatureParams(f, 'optional');
f.signature = (f.signature || '') + '('+params.join(', ')+')'; f.signature = (f.signature || '') + '(' + params.join(', ') + ')';
} }
function addSignatureReturns(f) { function addSignatureReturns(f) {
var returnTypes = helper.getSignatureReturns(f); const returnTypes = helper.getSignatureReturns(f);
f.signature = '<span class="signature">'+(f.signature || '') + '</span>'; f.signature = '<span class="signature">' + (f.signature || '') + '</span>';
if (returnTypes.length) { if (returnTypes.length) {
f.signature += '<span class="glyphicon glyphicon-circle-arrow-right"></span><span class="type-signature returnType">'+(returnTypes.length ? '{'+returnTypes.join('|')+'}' : '')+'</span>'; f.signature += '<span class="glyphicon glyphicon-circle-arrow-right"></span><span class="type-signature returnType">' + (returnTypes.length ? '{' + returnTypes.join('|') + '}' : '') + '</span>';
} }
} }
function addSignatureTypes(f) { function addSignatureTypes(f) {
var types = helper.getSignatureTypes(f); const types = helper.getSignatureTypes(f);
f.signature = (f.signature || '') + '<span class="type-signature">'+(types.length? ' :'+types.join('|') : '')+' </span>'; f.signature = (f.signature || '') + '<span class="type-signature">' + (types.length ? ' :' + types.join('|') : '') + ' </span>';
} }
function shortenPaths(files, commonPrefix) { function shortenPaths(files, commonPrefix) {
// always use forward slashes // always use forward slashes
var regexp = new RegExp('\\\\', 'g'); const regexp = new RegExp('\\\\', 'g');
Object.keys(files).forEach(function(file) { Object.keys(files).forEach(function(file) {
files[file].shortened = files[file].resolved.replace(commonPrefix, '') files[file].shortened = files[file].resolved.replace(commonPrefix, '')
@@ -100,7 +113,7 @@ function getPathFromDoclet(doclet) {
return; return;
} }
var filepath = doclet.meta.path && doclet.meta.path !== 'null' ? const filepath = doclet.meta.path && doclet.meta.path !== 'null' ?
doclet.meta.path + '/' + doclet.meta.filename.split(/[\/\\]/).pop() : doclet.meta.path + '/' + doclet.meta.filename.split(/[\/\\]/).pop() :
doclet.meta.filename; doclet.meta.filename;
@@ -110,15 +123,15 @@ function getPathFromDoclet(doclet) {
function generate(title, docs, filename, resolveLinks) { function generate(title, docs, filename, resolveLinks) {
resolveLinks = resolveLinks === false ? false : true; resolveLinks = resolveLinks === false ? false : true;
var docData = { const docData = {
filename: filename, filename: filename,
title: title, title: title,
docs: docs, docs: docs,
packageInfo: ( find({kind: 'package'}) || [] ) [0] packageInfo: (find({kind: 'package'}) || []) [0]
}; };
var outpath = path.join(outdir, filename), const outpath = path.join(outdir, filename);
html = view.render('container.tmpl', docData); let html = view.render('container.tmpl', docData);
if (resolveLinks) { if (resolveLinks) {
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a> html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
@@ -129,18 +142,17 @@ function generate(title, docs, filename, resolveLinks) {
function generateSourceFiles(sourceFiles) { function generateSourceFiles(sourceFiles) {
Object.keys(sourceFiles).forEach(function(file) { Object.keys(sourceFiles).forEach(function(file) {
var source; let source;
// links are keyed to the shortened path in each doclet's `meta.filename` property // links are keyed to the shortened path in each doclet's `meta.filename` property
var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened); const sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened);
helper.registerLink(sourceFiles[file].shortened, sourceOutfile); helper.registerLink(sourceFiles[file].shortened, sourceOutfile);
try { try {
source = { source = {
kind: 'source', kind: 'source',
code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, 'utf8') ) code: helper.htmlsafe(fs.readFileSync(sourceFiles[file].resolved, 'utf8'))
}; };
} } catch (e) {
catch(e) {
handle(e); handle(e);
} }
@@ -161,14 +173,14 @@ function generateSourceFiles(sourceFiles) {
* @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) { function attachModuleSymbols(doclets, modules) {
var symbols = {}; const symbols = {};
// build a lookup table // build a lookup table
doclets.forEach(function(symbol) { doclets.forEach(function(symbol) {
symbols[symbol.longname] = symbol; symbols[symbol.longname] = symbol;
}); });
return modules.map(function(module) { modules.forEach(function(module) {
if (symbols[module.longname]) { if (symbols[module.longname]) {
module.module = symbols[module.longname]; module.module = symbols[module.longname];
module.module.name = module.module.name.replace('module:', 'require("') + '")'; module.module.name = module.module.name.replace('module:', 'require("') + '")';
@@ -179,33 +191,35 @@ function attachModuleSymbols(doclets, modules) {
/** /**
* Create the navigation sidebar. * Create the navigation sidebar.
* @param {object} members The members that will be used to create the sidebar. * @param {object} members The members that will be used to create the sidebar.
* @param {array<object>} members.classes * @param {Array<Object>} members.classes Classes.
* @param {array<object>} members.externals * @param {Array<Object>} members.externals Externals.
* @param {array<object>} members.globals * @param {Array<Object>} members.globals Globals.
* @param {array<object>} members.mixins * @param {Array<Object>} members.mixins Mixins.
* @param {array<object>} members.modules * @param {Array<Object>} members.modules Modules.
* @param {array<object>} members.namespaces * @param {Array<Object>} members.namespaces Namespaces.
* @param {array<object>} members.tutorials * @param {Array<Object>} members.tutorials Tutorials.
* @param {array<object>} members.events * @param {Array<Object>} members.events Events.
* @return {string} The HTML for the navigation sidebar. * @return {string} The HTML for the navigation sidebar.
*/ */
function buildNav(members) { function buildNav(members) {
var nav = []; const nav = [];
// merge namespaces and classes, then sort // merge namespaces and classes, then sort
var merged = members.namespaces.concat(members.classes); const merged = members.modules.concat(members.classes);
merged.sort(function (a, b) { merged.sort(function(a, b) {
if (a.longname > b.longname) if (a.longname > b.longname) {
return 1; return 1;
if (a.longname < b.longname) }
if (a.longname < b.longname) {
return -1; return -1;
}
return 0; return 0;
}); });
_.each(merged, function (v) { _.each(merged, function(v) {
// exclude 'olx' and interfaces from sidebar // exclude interfaces from sidebar
if (v.longname.indexOf('olx') !== 0 && v.interface !== true) { if (v.interface !== true) {
if (v.kind == 'namespace') { if (v.kind == 'module') {
nav.push({ nav.push({
type: 'namespace', type: 'module',
longname: v.longname, longname: v.longname,
name: v.name, name: v.name,
members: find({ members: find({
@@ -257,25 +271,25 @@ function buildNav(members) {
/** /**
@param {TAFFY} taffyData See <http://taffydb.com/>. * @param {Object} taffyData See <http://taffydb.com/>.
@param {object} opts * @param {Object} opts Options.
@param {Tutorial} tutorials * @param {Object} tutorials Tutorials.
*/ */
exports.publish = function(taffyData, opts, tutorials) { exports.publish = function(taffyData, opts, tutorials) {
data = taffyData; data = taffyData;
var conf = env.conf.templates || {}; const conf = env.conf.templates || {};
conf['default'] = conf['default'] || {}; conf['default'] = conf['default'] || {};
var templatePath = opts.template; const templatePath = opts.template;
view = new template.Template(templatePath + '/tmpl'); view = new template.Template(templatePath + '/tmpl');
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
// doesn't try to hand them out later // doesn't try to hand them out later
var indexUrl = helper.getUniqueFilename('index'); const indexUrl = helper.getUniqueFilename('index');
// don't call registerLink() on this one! 'index' is also a valid longname // don't call registerLink() on this one! 'index' is also a valid longname
var globalUrl = helper.getUniqueFilename('global'); const globalUrl = helper.getUniqueFilename('global');
helper.registerLink('global', globalUrl); helper.registerLink('global', globalUrl);
// set up templating // set up templating
@@ -288,14 +302,14 @@ exports.publish = function(taffyData, opts, tutorials) {
data.sort('longname, version, since'); data.sort('longname, version, since');
helper.addEventListeners(data); helper.addEventListeners(data);
var sourceFiles = {}; let sourceFiles = {};
var sourceFilePaths = []; const sourceFilePaths = [];
data().each(function(doclet) { data().each(function(doclet) {
doclet.attribs = ''; doclet.attribs = '';
if (doclet.examples) { if (doclet.examples) {
doclet.examples = doclet.examples.map(function(example) { doclet.examples = doclet.examples.map(function(example) {
var caption, code; let caption, code;
if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) { if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
caption = RegExp.$1; caption = RegExp.$1;
@@ -315,8 +329,8 @@ exports.publish = function(taffyData, opts, tutorials) {
} }
// build a list of source files // build a list of source files
var sourcePath; let sourcePath;
var resolvedSourcePath; let resolvedSourcePath;
if (doclet.meta) { if (doclet.meta) {
sourcePath = getPathFromDoclet(doclet); sourcePath = getPathFromDoclet(doclet);
resolvedSourcePath = resolveSourcePath(sourcePath); resolvedSourcePath = resolveSourcePath(sourcePath);
@@ -331,31 +345,31 @@ exports.publish = function(taffyData, opts, tutorials) {
fs.mkPath(outdir); fs.mkPath(outdir);
// copy the template's static files to outdir // copy the template's static files to outdir
var fromDir = path.join(templatePath, 'static'); const fromDir = path.join(templatePath, 'static');
var staticFiles = fs.ls(fromDir, 3); const staticFiles = fs.ls(fromDir, 3);
staticFiles.forEach(function(fileName) { staticFiles.forEach(function(fileName) {
var toDir = fs.toDir( fileName.replace(fromDir, outdir) ); const toDir = fs.toDir(fileName.replace(fromDir, outdir));
fs.mkPath(toDir); fs.mkPath(toDir);
fs.copyFileSync(fileName, toDir); fs.copyFileSync(fileName, toDir);
}); });
// copy user-specified static files to outdir // copy user-specified static files to outdir
var staticFilePaths; let staticFilePaths;
var staticFileFilter; let staticFileFilter;
var staticFileScanner; let staticFileScanner;
if (conf['default'].staticFiles) { if (conf['default'].staticFiles) {
staticFilePaths = conf['default'].staticFiles.paths || []; staticFilePaths = conf['default'].staticFiles.paths || [];
staticFileFilter = new (require('jsdoc/lib/jsdoc/src/filter')).Filter(conf['default'].staticFiles); staticFileFilter = new (require('jsdoc/lib/jsdoc/src/filter')).Filter(conf['default'].staticFiles);
staticFileScanner = new (require('jsdoc/lib/jsdoc/src/scanner')).Scanner(); staticFileScanner = new (require('jsdoc/lib/jsdoc/src/scanner')).Scanner();
staticFilePaths.forEach(function(filePath) { staticFilePaths.forEach(function(filePath) {
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter); const extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
extraStaticFiles.forEach(function(fileName) { extraStaticFiles.forEach(function(fileName) {
var sourcePath = fs.statSync(filePath).isDirectory() ? filePath : const sourcePath = fs.statSync(filePath).isDirectory() ? filePath :
path.dirname(filePath); path.dirname(filePath);
var toDir = fs.toDir( fileName.replace(sourcePath, outdir) ); const toDir = fs.toDir(fileName.replace(sourcePath, outdir));
fs.mkPath(toDir); fs.mkPath(toDir);
fs.copyFileSync(fileName, toDir); fs.copyFileSync(fileName, toDir);
}); });
@@ -363,14 +377,14 @@ exports.publish = function(taffyData, opts, tutorials) {
} }
if (sourceFilePaths.length) { if (sourceFilePaths.length) {
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) ); sourceFiles = shortenPaths(sourceFiles, path.commonPrefix(sourceFilePaths));
} }
data().each(function(doclet) { data().each(function(doclet) {
var url = helper.createLink(doclet); const url = helper.createLink(doclet);
helper.registerLink(doclet.longname, url); helper.registerLink(doclet.longname, url);
// replace the filename with a shortened version of the full path // replace the filename with a shortened version of the full path
var docletPath; let docletPath;
if (doclet.meta) { if (doclet.meta) {
docletPath = getPathFromDoclet(doclet); docletPath = getPathFromDoclet(doclet);
docletPath = sourceFiles[docletPath].shortened; docletPath = sourceFiles[docletPath].shortened;
@@ -381,16 +395,15 @@ exports.publish = function(taffyData, opts, tutorials) {
}); });
data().each(function(doclet) { data().each(function(doclet) {
var url = helper.longnameToUrl[doclet.longname]; const url = helper.longnameToUrl[doclet.longname];
if (url.indexOf('#') > -1) { if (url.indexOf('#') > -1) {
doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop(); doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop();
} } else {
else {
doclet.id = doclet.name; doclet.id = doclet.name;
} }
if ( needsSignature(doclet) ) { if (needsSignature(doclet)) {
addSignatureParams(doclet); addSignatureParams(doclet);
addSignatureReturns(doclet); addSignatureReturns(doclet);
} }
@@ -410,7 +423,7 @@ exports.publish = function(taffyData, opts, tutorials) {
} }
}); });
var members = helper.getMembers(data); const members = helper.getMembers(data);
members.tutorials = tutorials.children; members.tutorials = tutorials.children;
// add template helpers // add template helpers
@@ -423,8 +436,8 @@ exports.publish = function(taffyData, opts, tutorials) {
// once for all // once for all
view.nav = buildNav(members); view.nav = buildNav(members);
attachModuleSymbols( find({ kind: ['class', 'function'], longname: {left: 'module:'} }), attachModuleSymbols(find({kind: ['class', 'function'], longname: {left: 'module:'}}),
members.modules ); members.modules);
// only output pretty-printed source files if requested; do this before generating any other // only output pretty-printed source files if requested; do this before generating any other
// pages, so the other pages can link to the source files // pages, so the other pages can link to the source files
@@ -432,45 +445,47 @@ exports.publish = function(taffyData, opts, tutorials) {
generateSourceFiles(sourceFiles); generateSourceFiles(sourceFiles);
} }
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); } if (members.globals.length) {
generate('Global', [{kind: 'globalobj'}], globalUrl);
}
// index page displays information from package.json and lists files // index page displays information from package.json and lists files
var files = find({kind: 'file'}); const files = find({kind: 'file'});
generate('Index', generate('Index',
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}].concat(files), [{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}].concat(files),
indexUrl); indexUrl);
// set up the lists that we'll use to generate pages // set up the lists that we'll use to generate pages
var classes = taffy(members.classes); const classes = taffy(members.classes);
var modules = taffy(members.modules); const modules = taffy(members.modules);
var namespaces = taffy(members.namespaces); const namespaces = taffy(members.namespaces);
var mixins = taffy(members.mixins); const mixins = taffy(members.mixins);
var externals = taffy(members.externals); const externals = taffy(members.externals);
for (var longname in helper.longnameToUrl) { for (const longname in helper.longnameToUrl) {
if ( hasOwnProp.call(helper.longnameToUrl, longname) ) { if (hasOwnProp.call(helper.longnameToUrl, longname)) {
var myClasses = helper.find(classes, {longname: longname}); const myClasses = helper.find(classes, {longname: longname});
if (myClasses.length) { if (myClasses.length) {
generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]); generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
} }
var myModules = helper.find(modules, {longname: longname}); const myModules = helper.find(modules, {longname: longname});
if (myModules.length) { if (myModules.length) {
generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]); generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]);
} }
var myNamespaces = helper.find(namespaces, {longname: longname}); const myNamespaces = helper.find(namespaces, {longname: longname});
if (myNamespaces.length) { if (myNamespaces.length) {
generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]); generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
} }
var myMixins = helper.find(mixins, {longname: longname}); const myMixins = helper.find(mixins, {longname: longname});
if (myMixins.length) { if (myMixins.length) {
generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]); generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
} }
var myExternals = helper.find(externals, {longname: longname}); const myExternals = helper.find(externals, {longname: longname});
if (myExternals.length) { if (myExternals.length) {
generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]); generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]);
} }
@@ -479,19 +494,18 @@ exports.publish = function(taffyData, opts, tutorials) {
// TODO: move the tutorial functions to templateHelper.js // TODO: move the tutorial functions to templateHelper.js
function generateTutorial(title, tutorial, filename) { function generateTutorial(title, tutorial, filename) {
var tutorialData = { const tutorialData = {
title: title, title: title,
header: tutorial.title, header: tutorial.title,
content: tutorial.parse(), content: tutorial.parse(),
children: tutorial.children children: tutorial.children
}; };
var tutorialPath = path.join(outdir, filename), let html = view.render('tutorial.tmpl', tutorialData);
html = view.render('tutorial.tmpl', tutorialData);
// yes, you can use {@link} in tutorials too! // yes, you can use {@link} in tutorials too!
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a> html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
const tutorialPath = path.join(outdir, filename);
fs.writeFileSync(tutorialPath, html, 'utf8'); fs.writeFileSync(tutorialPath, html, 'utf8');
} }

View File

@@ -85,7 +85,7 @@ $(function () {
var srcLinks = $('div.tag-source'); var srcLinks = $('div.tag-source');
srcLinks.each(function(i, el) { srcLinks.each(function(i, el) {
var textParts = el.innerHTML.trim().split(', '); var textParts = el.innerHTML.trim().split(', ');
var link = 'https://github.com/openlayers/openlayers/blob/v' + currentVersion + '/' + var link = 'https://github.com/openlayers/openlayers/blob/v' + currentVersion + '/src/ol/' +
textParts[0]; textParts[0];
el.innerHTML = '<a href="' + link + '">' + textParts[0] + '</a>, ' + el.innerHTML = '<a href="' + link + '">' + textParts[0] + '</a>, ' +
'<a href="' + link + textParts[1].replace('line ', '#L') + '">' + '<a href="' + link + textParts[1].replace('line ', '#L') + '">' +

View File

@@ -20,12 +20,10 @@
<br> <br>
<?js if (doc.stability || doc.kind == 'namespace') { <?js if (doc.stability || doc.kind == 'namespace') {
var ancestors = doc.ancestors.map(a => a.replace(/>\./g, '>').replace(/\.</g, '<')).join('/'); var ancestors = doc.ancestors.map(a => a.replace(/>\./g, '>').replace(/\.</g, '<')).join('/');
var name = doc.name.toLowerCase();
var parts = []; var parts = [];
if (ancestors) { if (ancestors) {
parts.push(ancestors); parts.push(ancestors.split('~').shift());
} }
parts.push(name);
var importPath = parts.join('/'); var importPath = parts.join('/');
?> ?>
<pre class="prettyprint source"><code>import <?js= doc.name ?> from '<?js= importPath ?>';</code></pre> <pre class="prettyprint source"><code>import <?js= doc.name ?> from '<?js= importPath ?>';</code></pre>

View File

@@ -11,7 +11,7 @@ var self = this;
?> ?>
<li class="item" data-name="<?js= item.longname ?>"> <li class="item" data-name="<?js= item.longname ?>">
<span class="title"> <span class="title">
<?js= self.linkto(item.longname, item.longname) ?> <?js= self.linkto(item.longname, item.longname.replace('module:', '')) ?>
<?js if (item.type === 'namespace' && <?js if (item.type === 'namespace' &&
(item.members.length + item.typedefs.length + item.methods.length + (item.members.length + item.typedefs.length + item.methods.length +
item.events.length > 0)) { ?> item.events.length > 0)) { ?>

View File

@@ -8,7 +8,7 @@
<th>Name</th> <th>Name</th>
<th>Type</th> <th>Type</th>
<th>Settable</th> <th>Settable</th>
<th><a href="ol.Object.Event.html">ol.Object.Event</a> type</th> <th><a href="module-ol_Object-ObjectEvent.html">ol/Object~ObjectEvent</a> type</th>
<th class="last">Description</th> <th class="last">Description</th>
</tr> </tr>
</thead> </thead>

View File

@@ -6,7 +6,7 @@
*/ */
var DEFAULT_VALUE = /default\s+is\s+`?(true|false)`?/i; const DEFAULT_VALUE = /default\s+is\s+`?(true|false)`?/i;
/** /**
@@ -19,9 +19,9 @@ exports.defineTags = function(dictionary) {
canHaveType: true, canHaveType: true,
mustHaveValue: true, mustHaveValue: true,
onTagged: function(doclet, tag) { onTagged: function(doclet, tag) {
var types = tag.value.type.names; const types = tag.value.type.names;
if (types.length === 1 && types[0] === 'boolean') { if (types.length === 1 && types[0] === 'boolean') {
var match = tag.value.description.match(DEFAULT_VALUE); const match = tag.value.description.match(DEFAULT_VALUE);
if (match) { if (match) {
doclet.define = { doclet.define = {
default: match[1] === 'true' default: match[1] === 'true'

View File

@@ -22,8 +22,7 @@ exports.publish = function(data, opts) {
return types; return types;
} }
// get all doclets with the "api" property or define (excluding events) or // get all doclets with the "api" property or define (excluding events)
// with olx namespace
const classes = {}; const classes = {};
const docs = data( const docs = data(
[ [
@@ -61,24 +60,7 @@ exports.publish = function(data, opts) {
return include; return include;
}).forEach(function(doc) { }).forEach(function(doc) {
const isExterns = (/[\\\/]externs$/).test(doc.meta.path); const isExterns = (/[\\\/]externs$/).test(doc.meta.path);
if (isExterns && doc.longname.indexOf('olx.') === 0) { if (doc.define) {
if (doc.kind == 'typedef') {
typedefs.push({
name: doc.longname,
types: ['{}']
});
} else {
const typedef = typedefs[typedefs.length - 1];
if (!typedef) {
throw new Error(`Expected to see a typedef before ${doc.longname} at ${doc.meta.filename}:${doc.meta.lineno}`);
}
const type = typedef.types[0];
typedef.types[0] = type
.replace(/\}$/, ', ' + doc.longname.split('#')[1] +
': (' + getTypes(doc.type.names).join('|') + ')}')
.replace('{, ', '{');
}
} else if (doc.define) {
defines.push({ defines.push({
name: doc.longname, name: doc.longname,
description: doc.description, description: doc.description,

View File

@@ -4,7 +4,7 @@
*/ */
exports.defineTags = function(dictionary) { exports.defineTags = function(dictionary) {
var classTag = dictionary.lookUp('class'); const classTag = dictionary.lookUp('class');
dictionary.defineTag('interface', { dictionary.defineTag('interface', {
mustHaveValue: false, mustHaveValue: false,
onTagged: function(doclet, tag) { onTagged: function(doclet, tag) {

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: 'src/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

@@ -1,251 +0,0 @@
.ol-box {
box-sizing: border-box;
border-radius: 2px;
border: 2px solid blue;
}
.ol-mouse-position {
top: 8px;
right: 8px;
position: absolute;
}
.ol-scale-line {
background: rgba(0,60,136,0.3);
border-radius: 4px;
bottom: 8px;
left: 8px;
padding: 2px;
position: absolute;
}
.ol-scale-line-inner {
border: 1px solid #eee;
border-top: none;
color: #eee;
font-size: 10px;
text-align: center;
margin: 1px;
will-change: contents, width;
}
.ol-overlay-container {
will-change: left,right,top,bottom;
}
.ol-unsupported {
display: none;
}
.ol-viewport, .ol-unselectable {
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.ol-selectable {
-webkit-touch-callout: default;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.ol-grabbing {
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
.ol-grab {
cursor: move;
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.ol-control {
position: absolute;
background-color: rgba(255,255,255,0.4);
border-radius: 4px;
padding: 2px;
}
.ol-control:hover {
background-color: rgba(255,255,255,0.6);
}
.ol-zoom {
top: .5em;
left: .5em;
}
.ol-rotate {
top: .5em;
right: .5em;
transition: opacity .25s linear, visibility 0s linear;
}
.ol-rotate.ol-hidden {
opacity: 0;
visibility: hidden;
transition: opacity .25s linear, visibility 0s linear .25s;
}
.ol-zoom-extent {
top: 4.643em;
left: .5em;
}
.ol-full-screen {
right: .5em;
top: .5em;
}
@media print {
.ol-control {
display: none;
}
}
.ol-control button {
display: block;
margin: 1px;
padding: 0;
color: white;
font-size: 1.14em;
font-weight: bold;
text-decoration: none;
text-align: center;
height: 1.375em;
width: 1.375em;
line-height: .4em;
background-color: rgba(0,60,136,0.5);
border: none;
border-radius: 2px;
}
.ol-control button::-moz-focus-inner {
border: none;
padding: 0;
}
.ol-zoom-extent button {
line-height: 1.4em;
}
.ol-compass {
display: block;
font-weight: normal;
font-size: 1.2em;
will-change: transform;
}
.ol-touch .ol-control button {
font-size: 1.5em;
}
.ol-touch .ol-zoom-extent {
top: 5.5em;
}
.ol-control button:hover,
.ol-control button:focus {
text-decoration: none;
background-color: rgba(0,60,136,0.7);
}
.ol-zoom .ol-zoom-in {
border-radius: 2px 2px 0 0;
}
.ol-zoom .ol-zoom-out {
border-radius: 0 0 2px 2px;
}
.ol-attribution {
text-align: right;
bottom: .5em;
right: .5em;
max-width: calc(100% - 1.3em);
}
.ol-attribution ul {
margin: 0;
padding: 0 .5em;
font-size: .7rem;
line-height: 1.375em;
color: #000;
text-shadow: 0 0 2px #fff;
}
.ol-attribution li {
display: inline;
list-style: none;
line-height: inherit;
}
.ol-attribution li:not(:last-child):after {
content: " ";
}
.ol-attribution img {
max-height: 2em;
max-width: inherit;
vertical-align: middle;
}
.ol-attribution ul, .ol-attribution button {
display: inline-block;
}
.ol-attribution.ol-collapsed ul {
display: none;
}
.ol-attribution:not(.ol-collapsed) {
background: rgba(255,255,255,0.8);
}
.ol-attribution.ol-uncollapsible {
bottom: 0;
right: 0;
border-radius: 4px 0 0;
height: 1.1em;
line-height: 1em;
}
.ol-attribution.ol-uncollapsible img {
margin-top: -.2em;
max-height: 1.6em;
}
.ol-attribution.ol-uncollapsible button {
display: none;
}
.ol-zoomslider {
top: 4.5em;
left: .5em;
height: 200px;
}
.ol-zoomslider button {
position: relative;
height: 10px;
}
.ol-touch .ol-zoomslider {
top: 5.5em;
}
.ol-overviewmap {
left: 0.5em;
bottom: 0.5em;
}
.ol-overviewmap.ol-uncollapsible {
bottom: 0;
left: 0;
border-radius: 0 4px 0 0;
}
.ol-overviewmap .ol-overviewmap-map,
.ol-overviewmap button {
display: inline-block;
}
.ol-overviewmap .ol-overviewmap-map {
border: 1px solid #7b98bc;
height: 150px;
margin: 2px;
width: 150px;
}
.ol-overviewmap:not(.ol-collapsed) button{
bottom: 1px;
left: 2px;
position: absolute;
}
.ol-overviewmap.ol-collapsed .ol-overviewmap-map,
.ol-overviewmap.ol-uncollapsible button {
display: none;
}
.ol-overviewmap:not(.ol-collapsed) {
background: rgba(255,255,255,0.8);
}
.ol-overviewmap-box {
border: 2px dotted rgba(0,60,136,0.7);
}
.ol-overviewmap .ol-overviewmap-box:hover {
cursor: move;
}

View File

@@ -139,7 +139,7 @@ Invalid geometry layout. Must be `XY`, `XYZ`, `XYM` or `XYZM`.
### 36 ### 36
Unknown SRS type. Expected `"name"` or `"EPSG"`. Unknown SRS type. Expected `"name"`.
### 37 ### 37

View File

@@ -21,9 +21,6 @@ Table of contents:
* [Why aren't there any features in my source?](#why-aren-t-there-any-features-in-my-source-) * [Why aren't there any features in my source?](#why-aren-t-there-any-features-in-my-source-)
* [How do I force a re-render of the map?](#how-do-i-force-a-re-render-of-the-map-) * [How do I force a re-render of the map?](#how-do-i-force-a-re-render-of-the-map-)
* [Why are my features not found?](#why-are-my-features-not-found-) * [Why are my features not found?](#why-are-my-features-not-found-)
* [How do I create a custom build of OpenLayers?](#how-do-i-create-a-custom-build-of-openlayers-)
* [Do I need to write my own code using Closure library?](#do-i-need-to-write-my-own-code-using-closure-library-)
* [Do I need to compress my code with Closure compiler?](#do-i-need-to-compress-my-code-with-closure-compiler-)
## What projection is OpenLayers using? ## What projection is OpenLayers using?
@@ -335,37 +332,3 @@ var vectorLayer = new ol.layer.Vector({
``` ```
The recommended value is the size of the largest symbol, line width or label. The recommended value is the size of the largest symbol, line width or label.
## How do I create a custom build of OpenLayers?
Please refer to the [official create custom builds tutorial](tutorials/custom-builds.html)
which explains how to create a custom build of OpenLayers with just those parts
included that you want.
## Do I need to write my own code using Closure library?
OpenLayers is built on top of the [Google Closure JavaScript
library](https://developers.google.com/closure/library/), but this
does not mean that you must use that library in your application code.
OpenLayers should play well with all sorts of JavaScript libraries out there,
and you are in no way forced to use a specific one. Choose one that looks
right for you.
## Do I need to compress my code with Closure compiler?
No, you don't need to do compress your code with the [Google Closure
compiler](https://developers.google.com/closure/compiler/).
It may be a good choice though, because when your application code and the
OpenLayers source code is compiled together using closure compiler, the
resulting build will most probably be the smallest in terms of byte-size. For
more details refer to the
[compile application and OpenLayers together tutorial](tutorials/closure.html).
If you don't want to use the closure compiler, or you can't, you are not at all
forced to use it.

View File

@@ -5,6 +5,11 @@ layout: doc.hbs
# Quick Start # 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 ## 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: 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> <!doctype html>
<html lang="en"> <html lang="en">
<head> <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> <style>
.map { .map {
height: 400px; height: 400px;
width: 100%; width: 100%;
} }
</style> </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> <title>OpenLayers example</title>
</head> </head>
<body> <body>
@@ -55,7 +60,7 @@ To include a map a web page you will need 3 things:
### Include OpenLayers ### Include OpenLayers
```xml ```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. 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.

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 `ìndex.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

@@ -1,305 +0,0 @@
---
title: Compiling Application with Closure Compiler
layout: doc.hbs
---
# Compiling Application with Closure Compiler
**Note**: When building an application with dependencies that are available as [npm](https://npmjs.com/) packages, it will probably be easier to use the [ol](https://npmjs.com/package/ol) package and follow the instructions there.
The OpenLayers code uses the Closure Library, and it is compiled with the
Closure Compiler. Using OpenLayers in an application does not require using
Closure. But using Closure in an OpenLayers application is possible. And this
is what this tutorial is about.
When you want to include OpenLayers as separate script without bundling with your application, follow the [Creating custom builds](./custom-builds.html) tutorial instead.
This tutorial will teach you how to set up an OpenLayers application based on
the [`closure-util`](https://github.com/openlayers/closure-util) node package,
which provides utilities for working with Closure. Using `closure-util` is one
way to use Closure in a web application, but there are others. This tutorial
just covers the "`closure-util`" way.
The `closure-util` documentation is available on the [`closure-util` readme
page](https://github.com/openlayers/closure-util/blob/master/readme.md). You
don't need to read the `closure-util` documentation to follow this tutorial,
but it's available in `closure-util`'s [readme
file](https://github.com/openlayers/closure-util/blob/master/readme.md) if you
need it.
Also, the sample application built in this tutorial is
[available](https://github.com/openlayers/openlayers-closure-application) on
GitHub.
## Advantages of using Closure
This tutorial will show you how to use the Closure Compiler to compile an
application and OpenLayers together. Compiling the application code together
with the OpenLayers code has a number of advantages.
First of all, it allows you to only "pay" for the OpenLayers code your
application uses, as the compiler will exclude the OpenLayers code that the
application doesn't use. And there is no need to write and maintain a list of
"exports", which is necessary when creating custom builds of OpenLayers.
Also, compiling the application and OpenLayers together allows using
OpenLayers functions and objects that are not part of the official OpenLayers
3 API. Using non-API functions and objects may be risky, but it is mitigated by
the fact that the compiler will complain if you use functions or objects
that are not in OpenLayers anymore.
## Setting up the Application
First, create a directory for the application. We will name that directory
`openlayers-closure-application` in this tutorial.
$ mkdir openlayers-closure-application
Now change to that directory:
$ cd openlayers-closure-application
Our application will be a `node` application, and the `openlayers` and
`closure-util` node packages will be downloaded from the node package registry
using the `npm` command line tool.
So we're going to create a `package.json` file for the application, which every
node application includes. This file basically includes metadata for the
application.
Create the application's `package.json` file:
$ npm init
You can pretty much use the default answers to the questions `npm init` asks
you.
Now install OpenLayers using:
$ npm install openlayers --save
The `--save` flag persists the `openlayers` dependency in the application's
`package.json` file. You can edit `package.json` to verify that the dependency
was added.
`closure-util` is a dependency of the `openlayers` package, so it should have
been installed with `openlayers`. Use the following to verify that
`closure-util` is installed:
$ ./node_modules/openlayers/node_modules/.bin/closure-util
command argument is required
Usage: node closure-util <command> [options]
command
update-compiler Update the Compiler
update-library Update the Library
update Update both the Library and the Compiler
build Build with Closure Compiler
serve Start the development server
Options:
-l LEVEL, --loglevel LEVEL Log level [info]
## Create an OpenLayers map
You're now going to create a JavaScript file that creates an OpenLayers map.
This is the file that we will define the application's entry point.
First of all create an `src` directory at the root of the application:
$ mkdir src
Now add a file `main.js` to `src`, with the following content:
```js
goog.provide('app');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
/**
* @type {ol.PluggableMap}
*/
app.map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: [0, 0],
zoom: 4
})
});
```
`goog.provide('app')` creates the namespace `app` for the application. The
`goog.require` statements that follow define the OpenLayers constructors and
namespaces that the application uses. The rest of the code just creates the
OpenLayers map as you would do in any OpenLayers application.
## Compiling the Application
We're now going to compile the application and OpenLayers together, using the
Closure Compiler and `closure-util`. For this we need to create a JSON config
file, that we will then pass as an input file to the `closure-util` command.
The minimum config file looks like this:
```json
{
"lib": [
"node_modules/openlayers/src/**/*.js",
"node_modules/openlayers/build/ol.ext/**/*.js",
"src/**/*.js"
],
"compile": {
"closure_entry_point": "app",
"externs": [
"node_modules/openlayers/externs/bingmaps.js",
"node_modules/openlayers/externs/cartodb.js",
"node_modules/openlayers/externs/closure-compiler.js",
"node_modules/openlayers/externs/esrijson.js",
"node_modules/openlayers/externs/geojson.js",
"node_modules/openlayers/externs/proj4js.js",
"node_modules/openlayers/externs/tilejson.js",
"node_modules/openlayers/externs/topojson.js"
],
"define": [
"ol.ENABLE_WEBGL=false"
],
"js": [
"node_modules/openlayers/src/ol/typedefs.js",
"node_modules/openlayers/externs/olx.js",
"node_modules/openlayers/externs/oli.js"
],
"extra_annotation_name": [
"api", "observable"
],
"rewrite_polyfills": "false",
"compilation_level": "ADVANCED",
"warning_level": "VERBOSE",
"output_wrapper": "(function(){%output%})();",
"use_types_for_optimization": true
}
}
```
Create a `config.json` file with the above content at the root of the
application directory.
We can now use `closure-util` to compile the code:
$ ./node_modules/openlayers/node_modules/.bin/closure-util build config.json app.js
The resulting `app.js` file, which you can view in your editor if you're
curious, includes a minified version of the application code (`main.js`), and
the OpenLayers code that the application code uses.
Here is a version of `config.json` with more compilation checks enabled:
```json
{
"lib": [
"node_modules/openlayers/src/**/*.js",
"node_modules/openlayers/build/ol.ext/**/*.js",
"src/**/*.js"
],
"compile": {
"closure_entry_point": "app",
"externs": [
"node_modules/openlayers/externs/bingmaps.js",
"node_modules/openlayers/externs/cartodb.js",
"node_modules/openlayers/externs/closure-compiler.js",
"node_modules/openlayers/externs/esrijson.js",
"node_modules/openlayers/externs/geojson.js",
"node_modules/openlayers/externs/proj4js.js",
"node_modules/openlayers/externs/tilejson.js",
"node_modules/openlayers/externs/topojson.js"
],
"define": [
"ol.ENABLE_WEBGL=false"
],
"js": [
"node_modules/openlayers/src/ol/typedefs.js",
"node_modules/openlayers/externs/olx.js",
"node_modules/openlayers/externs/oli.js"
],
"jscomp_error": [
"*"
],
"jscomp_off": [
"unknownDefines",
"lintChecks",
"analyzerChecks"
],
"extra_annotation_name": [
"api", "observable"
],
"compilation_level": "ADVANCED",
"warning_level": "VERBOSE",
"output_wrapper": "(function(){%output%})();",
"use_types_for_optimization": true
}
}
```
## Create an HTML file for the Application
You can now go ahead and create a simple HTML for the application. Create
a `index.html` file with the following content at the root the application
directory:
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="node_modules/openlayers/css/ol.css" type="text/css">
<title>Simple example</title>
<style>
#map {
width: 600px;
height: 400px;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="app.js" type="text/javascript"></script>
</body>
</html>
```
Note that the page includes a `script` tag referencing the `app.js` file,
which is the file resulting from the compilation.
You are done!
## Run Application in Debug Mode
As a bonus, we're going to show how to use `closure-util` to run the
application in "debug" mode, where the original application and OpenLayers
scripts are loaded one by one in the page.
Start the `closure-util` development server:
$ ./node_modules/openlayers/node_modules/.bin/closure-util serve config.json
Now change the `script` tag to the following in the `index.html` file:
```html
<script src="@?main=src/main.js" type="text/javascript"></script>
```
Reload the page in your browser and you should see that scripts are now loaded
individually, making debugging much easier.

View File

@@ -6,48 +6,58 @@ layout: doc.hbs
# Basic Concepts # Basic Concepts
## Map ## 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 (`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()`.
```xml ```xml
<div id="map" style="width: 100%, height: 400px"></div> <div id="map" style="width: 100%, height: 400px"></div>
<script> <script>
var map = new ol.Map({target: 'map'}); import Map from 'ol/Map';
var map = new Map({target: 'map'});
</script> </script>
``` ```
## View ## 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. `Map` is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of a `View` instance.
```js ```js
map.setView(new ol.View({ import View from 'ol/View';
map.setView(new View({
center: [0, 0], center: [0, 0],
zoom: 2 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. 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 ## 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 `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 ```js
var osmSource = new ol.source.OSM(); import OSM from 'ol/source/OSM';
var osmSource = OSM();
``` ```
## Layer ## 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`. A layer is a visual representation of data from a `source`. OpenLayers has four basic types of layers: `layer/Tile`, `layer/Image`, `layer/Vector` and `layer/VectorTile`.
`ol.layer.Tile` is for layer sources that provide pre-rendered, tiled images in grids that are organized by zoom levels for specific resolutions. `layer/Tile` is for layer sources that provide pre-rendered, tiled images in grids that are organized by zoom levels for specific resolutions.
`ol.layer.Image` is for server rendered images that are available for arbitrary extents and resolutions. `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. `layer/Vector` is for vector data that is rendered client-side.
`layer/VectorTile` is for tiled vector data that is rendered client-side.
```js ```js
var osmLayer = new ol.layer.Tile({source: osmSource}); import TileLayer from 'ol/layer/Tile';
var osmLayer = new TileLayer({source: osmSource});
map.addLayer(osmLayer); map.addLayer(osmLayer);
``` ```
@@ -59,11 +69,16 @@ The above snippets can be conflated to a self contained map configuration with v
```xml ```xml
<div id="map" style="width: 100%, height: 400px"></div> <div id="map" style="width: 100%, height: 400px"></div>
<script> <script>
new ol.Map({ import Map from 'ol/Map';
import View from 'ol/View';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/source/Tile';
new Map({
layers: [ layers: [
new ol.layer.Tile({source: new ol.source.OSM()}) new TileLayer({source: new ol.source.OSM()})
], ],
view: new ol.View({ view: new View({
center: [0, 0], center: [0, 0],
zoom: 2 zoom: 2
}), }),

View File

@@ -1,237 +0,0 @@
---
title: Custom builds
layout: doc.hbs
---
# Creating custom builds
OpenLayers is a big library providing a lot of functionality. So it is unlikely that an application will need and use all the functionality OpenLayers provides. This is why creating application-specific OpenLayers builds, with just the functionality your application needs, is often a good idea.
An alternative to creating custom builds is to compile your application code together with OpenLayers. See the [Compiling Application with Closure Compiler](closure.html) tutorial for more information.
This particular tutorial explains how to create custom builds of OpenLayers.
## Requirements
OpenLayers's build tools use Node and Java, so you need to have Node and Java installed on your machine. You can run `node --version` and `java -version` to test that Node and Java are installed, respectively. See [developing guide](https://github.com/openlayers/openlayers/blob/master/DEVELOPING.md) for minimum version numbers required.
## Download OpenLayers
Obviously, creating a custom build requires the OpenLayers source and specific build scripts.
To get the OpenLayers source and the build scripts you can clone the openlayers [repository](https://github.com/openlayers/openlayers), or you can download one of the release archives. You can also download the `openlayers` Node package from the Node package registry, using NPM (the Node Package Manager). This is the method we are going to use in this tutorial.
Create a directory:
$ mkdir openlayers
Download the OpenLayers distribution using NPM:
$ npm install openlayers
This will download the latest stable version of OpenLayers, and install it under `node_modules`. You can list the content of `node_modules` to verify that it effectively contains a directory named "openlayers".
The Node packages onto which the `openlayers` package depends are installed under `node_modules/openlayers/node_modules`. That directory should, for example, include `closure-util`, which is the utility library OpenLayers uses for Closure.
You should now have everything you need to create custom builds of OpenLayers!
## Create a build configuration file
Creating a custom build requires writing a build configuration file. The format of build configuration files is JSON. Here is a simple example of a build configuration file:
```json
{
"exports": [
"ol.Map",
"ol.View",
"ol.control.defaults",
"ol.layer.Tile",
"ol.source.OSM"
],
"compile": {
"externs": [
"externs/bingmaps.js",
"externs/cartodb.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/geojson.js",
"externs/oli.js",
"externs/olx.js",
"externs/proj4js.js",
"externs/tilejson.js",
"externs/topojson.js"
],
"extra_annotation_name": [
"api", "observable"
],
"compilation_level": "ADVANCED",
"manage_closure_dependencies": true,
"rewrite_polyfills": false
}
}
```
Create a file named `ol-custom.json` with that content, and save it under the `node_modules/openlayers/build` directory. (You can save it to any location really.)
The most relevant part of this configuration object is the `"exports"` array. This array declares the functions/constructors you use in your JavaScript code. For example, the above configuration file is what you'd use for the following JavaScript code:
```js
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
controls: ol.control.defaults({
attributionOptions: {
collapsible: false
}
}),
view: new ol.View({
center: [0, 0],
zoom: 4
})
});
```
Note that this JavaScript code corresponds to OpenLayers's [`simple`](https://openlayers.org/en/master/examples/simple.html) example.
You are now ready to create your first OpenLayers build. Use the following command to create the build:
$ cd node_modules/openlayers
$ node tasks/build.js build/ol-custom.json build/ol-custom.js
The build command may take some time, but it should end with an output in the console such as the following:
info ol Parsing dependencies
info ol Compiling 364 sources
The build command should have created an `ol-custom.js` file in the `node_modules/openlayers/build` directory. You can verify that the file was created. You can even open it in your editor if you're curious.
As a test, you can use the following HTML file to verify that your custom build works as expected:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>OpenLayers example</title>
<link rel="stylesheet" href="node_modules/openlayers/css/ol.css" />
<style>
#map {
width: 600px;
height: 400px;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="node_modules/openlayers/build/ol-custom.js"></script>
<script>
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: 4
})
});
</script>
</body>
</html>
```
## More on the config file
### `define`'s
Closure allows you to define constants that can be set at compile time. The OpenLayers code defines several such values.
Setting some of these to `false` means that the portions of the code relating to this setting become "dead", i.e. are never executed. As Closure Compiler's `ADVANCED` mode removes dead code, this makes the size of the advanced compiled file smaller.
You might have noticed that the build file you've just created is considerably smaller than the full build, but it can be reduced further. This is because both renderers and other optional code are included by default. We only need one renderer, and we do not use the optional code, so can exclude what we don't use by setting properties with `define`s. So add a define section to the config above:
```
"define": [
"ol.ENABLE_WEBGL=false",
"ol.ENABLE_PROJ4JS=false",
"ol.ENABLE_RASTER_REPROJECTION=false"
],
```
and re-run the build script. The build size should now be smaller.
### Externs
The Closure documentation explains that "externs" are for external names used in the code being compiled. The compiler includes externs for built-ins such as `document`. The `externs` directory of the OpenLayers code includes files for all those used in some part of the library. For example, if you use Bing Maps, you should include the Bing externs file in the `externs` section of the config file.
`oli.js` and `olx.js` are externs files for the OpenLayers API. For example `olx.js` includes extern definitions for OpenLayers's constructor options. `closure-compiler.js` fixes any issues that may arise with a specific compiler version. You should always use these three files as externs when creating custom builds.
### Other compiler options
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` and `rewrite_polyfills` should always be used.
You can specify any of the other compiler options here as needed, such as the renaming reports, output manifest, or source maps. There is a full list of available options in [closure-util](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt).
Note that `build.js` currently requires you to enter an output file and will write the output from the compiler to it; it does not use the `js_output_file` compiler option. If you specify this in the config file, there will be no compiler output, so `build.js`'s output file will be empty.
## A more complicated example
Now let's try a more complicated example: [`heatmaps-earthquakes`](https://openlayers.org/en/master/examples/heatmap-earthquakes.html). The build configuration file looks like this:
```json
{
"exports": [
"ol.layer.Heatmap",
"ol.source.Vector",
"ol.format.KML",
"ol.layer.Heatmap#getSource",
"ol.source.Vector#on",
"ol.source.Vector.Event#feature",
"ol.Feature#get",
"ol.Feature#set",
"ol.layer.Tile",
"ol.source.Stamen",
"ol.Map",
"ol.View",
"ol.layer.Heatmap#setRadius",
"ol.layer.Heatmap#setBlur"
],
"compile": {
"externs": [
"externs/bingmaps.js",
"externs/cartodb.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/geojson.js",
"externs/olx.js",
"externs/oli.js",
"externs/proj4js.js",
"externs/tilejson.js",
"externs/topojson.js"
],
"define": [
"ol.ENABLE_WEBGL=false",
"ol.ENABLE_PROJ4JS=false",
"ol.ENABLE_RASTER_REPROJECTION=false"
],
"compilation_level": "ADVANCED",
"manage_closure_dependencies": true,
"rewrite_polyfills": false
}
}
```
The exports are given here in the order in which they occur in the `heatmaps-earthquakes` example's JavaScript code. In this example we not only use the `ol.` functions and constructors, but also `prototype` methods where the `ol` namespace is not directly used. In the code, we have for example `vector.getSource().on()`. This means we are using the `getSource` method of `layer.Heatmap` and the `on` method of `source.KML`, so this is what has to be exported. Similarly, `event.feature.get()` means we are using the `feature` property of `source.Vector.Event` and the `get` method of `Feature`. If any of these names are left out, the compile will complete successfully, but the missing names will be obfuscated and you will get a 'property undefined' error when you try and run the script.
## Maintaining the code
If you installed OpenLayers from the Node package, you can use `npm` to upgrade to the latest version. If you cloned the Github repo, simply pulling in the latest code may not be enough, as some of the packages used, for example, the compiler, may need upgrading too. Do this by using `npm install` rather than `npm update`.
## Conclusion
This tutorial should have given you the information you need to create custom builds, i.e. builds tailored to your application. See the [tasks readme](https://github.com/openlayers/openlayers/tree/master/tasks/readme.md) for more information on the build scripts and the properties you can use in the build configuration file.

View File

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

View File

@@ -1,42 +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.
## Google Closure
OpenLayers was written in a way so it can be compiled with [__Closure Compiler__](https://developers.google.com/closure/compiler/). Its 'advanced' compilation mode offers a level of compression that exceeds anything else available.
## 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. The view in any Proj4js supported coordinate reference system is possible and previously incompatible layers can now be combined and overlaid.
# Usage # Usage
The API usage is very simple. Just specify proper projection (using [EPSG](https://epsg.io) code) on `ol.View`: The API usage is very simple. Just specify proper projection (e.g. using [EPSG](https://epsg.io) code) on `ol/View`:
``` javascript ```js
var map = new ol.Map({ import {Map, View} from `ol`;
import TileLayer from `ol/layer/Tile`;
import TileWMS from `ol/source/TileWMS`;
var map = new Map({
target: 'map', target: 'map',
view: new ol.View({ view: new View({
projection: 'EPSG:3857', //HERE IS THE VIEW PROJECTION projection: 'EPSG:3857', //HERE IS THE VIEW PROJECTION
center: [0, 0], center: [0, 0],
zoom: 2 zoom: 2
}), }),
layers: [ layers: [
new ol.layer.Tile({ new TileLayer({
source: new ol.source.TileWMS({ source: new TileWMS({
projection: 'EPSG:4326', //HERE IS THE DATA SOURCE PROJECTION projection: 'EPSG:4326', //HERE IS THE DATA SOURCE PROJECTION
url: 'http://demo.boundlessgeo.com/geoserver/wms', url: 'http://demo.boundlessgeo.com/geoserver/wms',
params: { 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 ### Examples
- [Raster reprojection demo](https://openlayers.org/en/master/examples/reprojection.html) - [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) - [Image reprojection](https://openlayers.org/en/master/examples/reprojection-image.html)
### Custom projection ### 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): Following example shows definition of a [British National Grid](https://epsg.io/27700):
``` html ```js
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js"></script> 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 ' + proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
'+x_0=400000 +y_0=-100000 +ellps=airy ' + '+x_0=400000 +y_0=-100000 +ellps=airy ' +
'+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' + '+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
'+units=m +no_defs'); '+units=m +no_defs');
var proj27700 = ol.proj.get('EPSG:27700'); register(proj4);
var proj27700 = getProjection('EPSG:27700');
proj27700.setExtent([0, 0, 700000, 1300000]); proj27700.setExtent([0, 0, 700000, 1300000]);
``` ```
### Change of the view projection ### 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 ``` javascript
map.setView(new ol.View({ map.setView(new View({
projection: 'EPSG:27700', projection: 'EPSG:27700',
center: [400000, 650000], center: [400000, 650000],
zoom: 4 zoom: 4
@@ -69,16 +76,16 @@ map.setView(new ol.View({
## TileGrid and Extents ## TileGrid and Extents
When reprojection is needed, new tiles (in the target projection) are under the hood created from the original source tiles. 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. 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. 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). In certain cases, this can be used to optimize performance (by tweaking tile sizes) or visual quality (by specifying resolutions).
# How it works # 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): 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" /> <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 # 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 ### Triangulation precision threshold
The default [triangulation error threshold](#dynamic-triangulation) in pixels is given by `ERROR_THRESHOLD` (0.5 pixel). 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. 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 ### Resolution calculation
When determining source tiles to load, the ideal source resolution needs to be calculated. 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. 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). Therefore, the resolution mapping is calculated separately for each reprojected tile (in the middle of the tile extent).

View File

@@ -1,9 +1,7 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Image as ImageLayer} from '../src/ol/layer.js';
import ImageLayer from '../src/ol/layer/Image.js'; import {OSM, ImageArcGISRest} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import ImageArcGISRest from '../src/ol/source/ImageArcGISRest.js';
const url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' + const url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' +
'Specialty/ESRI_StateCityHighway_USA/MapServer'; 'Specialty/ESRI_StateCityHighway_USA/MapServer';

View File

@@ -6,7 +6,7 @@ docs: >
This example shows how to use an ArcGIS REST MapService as tiles. This example shows how to use an ArcGIS REST MapService as tiles.
This source type supports Map and Image Services. For cached ArcGIS This source type supports Map and Image Services. For cached ArcGIS
services, better performance is available by using services, better performance is available by using
<code>ol.source.XYZ</code> instead. <code>ol/source/XYZ</code> instead.
tags: arcgis, tile, tilelayer" tags: arcgis, tile, tilelayer"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,8 +1,7 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import {OSM, TileArcGISRest} from '../src/ol/source.js';
import TileArcGISRest from '../src/ol/source/TileArcGISRest.js';
const url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' + const url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' +
'Specialty/ESRI_StateCityHighway_USA/MapServer'; 'Specialty/ESRI_StateCityHighway_USA/MapServer';

View File

@@ -1,7 +1,6 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, Attribution} from '../src/ol/control.js';
import Attribution from '../src/ol/control/Attribution.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';

View File

@@ -3,10 +3,11 @@ layout: example.html
title: Bing Maps title: Bing Maps
shortdesc: Example of a Bing Maps layer. shortdesc: Example of a Bing Maps layer.
docs: > docs: >
<p>When the Bing Maps tile service doesn't have tiles for a given resolution and region it returns "placeholder" tiles indicating that. Zoom the map beyond level 19 to see the "placeholder" tiles. If you want OpenLayers to display stretched tiles in place of "placeholder" tiles beyond zoom level 19 then set <code>maxZoom</code> to <code>19</code> in the options passed to <code>ol.source.BingMaps</code>.</p> <p>When the Bing Maps tile service doesn't have tiles for a given resolution and region it returns "placeholder" tiles indicating that. Zoom the map beyond level 19 to see the "placeholder" tiles. If you want OpenLayers to display stretched tiles in place of "placeholder" tiles beyond zoom level 19 then set <code>maxZoom</code> to <code>19</code> in the options passed to <code>ol/source/BingMaps</code>.</p>
tags: "bing, bing-maps" tags: "bing, bing-maps"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>
<select id="layer-select"> <select id="layer-select">

View File

@@ -4,10 +4,7 @@ import View from '../src/ol/View.js';
import Point from '../src/ol/geom/Point.js'; import Point from '../src/ol/geom/Point.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import VectorLayer from '../src/ol/layer/Vector.js';
import VectorSource from '../src/ol/source/Vector.js'; import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
// Create separate layers for red, green an blue circles. // Create separate layers for red, green an blue circles.
@@ -96,7 +93,7 @@ const affectBlue = document.getElementById('affect-blue');
* This method sets the globalCompositeOperation to the value of the select * This method sets the globalCompositeOperation to the value of the select
* field and it is bound to the precompose event of the layers. * field and it is bound to the precompose event of the layers.
* *
* @param {ol.render.Event} evt The render event. * @param {module:ol/render/Event~RenderEvent} evt The render event.
*/ */
const setBlendModeFromSelect = function(evt) { const setBlendModeFromSelect = function(evt) {
evt.context.globalCompositeOperation = select.value; evt.context.globalCompositeOperation = select.value;
@@ -107,7 +104,7 @@ const setBlendModeFromSelect = function(evt) {
* This method resets the globalCompositeOperation to the default value of * This method resets the globalCompositeOperation to the default value of
* 'source-over' and it is bound to the postcompose event of the layers. * 'source-over' and it is bound to the postcompose event of the layers.
* *
* @param {ol.render.Event} evt The render event. * @param {module:ol/render/Event~RenderEvent} evt The render event.
*/ */
const resetBlendModeFromSelect = function(evt) { const resetBlendModeFromSelect = function(evt) {
evt.context.globalCompositeOperation = 'source-over'; evt.context.globalCompositeOperation = 'source-over';
@@ -117,7 +114,7 @@ const resetBlendModeFromSelect = function(evt) {
/** /**
* Bind the pre- and postcompose handlers to the passed layer. * Bind the pre- and postcompose handlers to the passed layer.
* *
* @param {ol.layer.Vector} layer The layer to bind the handlers to. * @param {module:ol/layer/Vector} layer The layer to bind the handlers to.
*/ */
const bindLayerListeners = function(layer) { const bindLayerListeners = function(layer) {
layer.on('precompose', setBlendModeFromSelect); layer.on('precompose', setBlendModeFromSelect);
@@ -128,7 +125,7 @@ const bindLayerListeners = function(layer) {
/** /**
* Unind the pre- and postcompose handlers to the passed layers. * Unind the pre- and postcompose handlers to the passed layers.
* *
* @param {ol.layer.Vector} layer The layer to unbind the handlers from. * @param {module:ol/layer/Vector} layer The layer to unbind the handlers from.
*/ */
const unbindLayerListeners = function(layer) { const unbindLayerListeners = function(layer) {
layer.un('precompose', setBlendModeFromSelect); layer.un('precompose', setBlendModeFromSelect);

View File

@@ -4,7 +4,7 @@ title: Box Selection
shortdesc: Using a DragBox interaction to select features. shortdesc: Using a DragBox interaction to select features.
docs: > docs: >
<p>This example shows how to use a <code>DragBox</code> interaction to select features. Selected features are added <p>This example shows how to use a <code>DragBox</code> interaction to select features. Selected features are added
to the feature overlay of a select interaction (<code>ol.interaction.Select</code>) for highlighting.</p> to the feature overlay of a select interaction (<code>ol/interaction/Select</code>) for highlighting.</p>
<p>Use <code>Ctrl+Drag</code> (<code>Command+Drag</code> on Mac) to draw boxes.</p> <p>Use <code>Ctrl+Drag</code> (<code>Command+Drag</code> on Mac) to draw boxes.</p>
tags: "DragBox, feature, selection, box" tags: "DragBox, feature, selection, box"
--- ---

View File

@@ -2,12 +2,9 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {platformModifierKeyOnly} from '../src/ol/events/condition.js'; import {platformModifierKeyOnly} from '../src/ol/events/condition.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import DragBox from '../src/ol/interaction/DragBox.js'; import {DragBox, Select} from '../src/ol/interaction.js';
import Select from '../src/ol/interaction/Select.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const vectorSource = new VectorSource({ const vectorSource = new VectorSource({

View File

@@ -3,10 +3,11 @@ layout: example.html
title: Styling feature with CanvasGradient or CanvasPattern title: Styling feature with CanvasGradient or CanvasPattern
shortdesc: Example showing the countries vector layer styled with patterns and gradients. shortdesc: Example showing the countries vector layer styled with patterns and gradients.
docs: > 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 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 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). 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" tags: "canvas, gradient, pattern, style"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,14 +1,11 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {getWidth} from '../src/ol/extent.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import {DEVICE_PIXEL_RATIO} from '../src/ol/has.js'; import {DEVICE_PIXEL_RATIO} from '../src/ol/has.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import VectorLayer from '../src/ol/layer/Vector.js';
import {fromLonLat} from '../src/ol/proj.js'; import {fromLonLat} from '../src/ol/proj.js';
import VectorSource from '../src/ol/source/Vector.js'; import VectorSource from '../src/ol/source/Vector.js';
import Fill from '../src/ol/style/Fill.js'; import {Fill, Stroke, Style} from '../src/ol/style.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const canvas = document.createElement('canvas'); const canvas = document.createElement('canvas');
const context = canvas.getContext('2d'); const context = canvas.getContext('2d');
@@ -18,14 +15,8 @@ const context = canvas.getContext('2d');
const pixelRatio = DEVICE_PIXEL_RATIO; const pixelRatio = DEVICE_PIXEL_RATIO;
// Generate a rainbow gradient // Generate a rainbow gradient
function gradient(feature, resolution) { const gradient = (function() {
const extent = feature.getGeometry().getExtent(); const grad = context.createLinearGradient(0, 0, 512 * pixelRatio, 0);
// 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);
grad.addColorStop(0, 'red'); grad.addColorStop(0, 'red');
grad.addColorStop(1 / 6, 'orange'); grad.addColorStop(1 / 6, 'orange');
grad.addColorStop(2 / 6, 'yellow'); grad.addColorStop(2 / 6, 'yellow');
@@ -34,24 +25,24 @@ function gradient(feature, resolution) {
grad.addColorStop(5 / 6, 'blue'); grad.addColorStop(5 / 6, 'blue');
grad.addColorStop(1, 'purple'); grad.addColorStop(1, 'purple');
return grad; return grad;
} })();
// Generate a canvasPattern with two circles on white background // Generate a canvasPattern with two circles on white background
const pattern = (function() { const pattern = (function() {
canvas.width = 11 * pixelRatio; canvas.width = 8 * pixelRatio;
canvas.height = 11 * pixelRatio; canvas.height = 8 * pixelRatio;
// white background // white background
context.fillStyle = 'white'; context.fillStyle = 'white';
context.fillRect(0, 0, canvas.width, canvas.height); context.fillRect(0, 0, canvas.width, canvas.height);
// outer circle // outer circle
context.fillStyle = 'rgba(102, 0, 102, 0.5)'; context.fillStyle = 'rgba(102, 0, 102, 0.5)';
context.beginPath(); 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(); context.fill();
// inner circle // inner circle
context.fillStyle = 'rgb(55, 0, 170)'; context.fillStyle = 'rgb(55, 0, 170)';
context.beginPath(); 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(); context.fill();
return context.createPattern(canvas, 'repeat'); return context.createPattern(canvas, 'repeat');
}()); }());
@@ -71,12 +62,11 @@ const style = new Style({
* which either contains the aboove gradient or pattern. * which either contains the aboove gradient or pattern.
* *
* @param {module:ol/Feature~Feature} feature The feature to style. * @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.
* @return {ol.style.Style} The style to use for the feature.
*/ */
const getStackedStyle = function(feature, resolution) { const getStackedStyle = function(feature) {
const id = feature.getId(); const id = feature.getId();
fill.setColor(id > 'J' ? gradient(feature, resolution) : pattern); fill.setColor(id > 'J' ? gradient : pattern);
return style; return style;
}; };
@@ -96,7 +86,7 @@ const map = new Map({
], ],
target: 'map', target: 'map',
view: new View({ view: new View({
center: fromLonLat([7, 52]), center: fromLonLat([16, 48]),
zoom: 3 zoom: 3
}) })
}); });

View File

@@ -3,8 +3,7 @@ import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import {fromLonLat} from '../src/ol/proj.js'; import {fromLonLat} from '../src/ol/proj.js';
import OSM from '../src/ol/source/OSM.js'; import {OSM, TileDebug} from '../src/ol/source.js';
import TileDebug from '../src/ol/source/TileDebug.js';
const osmSource = new OSM(); const osmSource = new OSM();

View File

@@ -1,8 +1,7 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import CartoDB from '../src/ol/source/CartoDB.js'; import {CartoDB, OSM} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
const mapConfig = { const mapConfig = {
'layers': [{ 'layers': [{

View File

@@ -2,14 +2,9 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const source = new VectorSource({ const source = new VectorSource({
url: 'data/geojson/switzerland.geojson', url: 'data/geojson/switzerland.geojson',
@@ -92,6 +87,6 @@ const centerlausanne = document.getElementById('centerlausanne');
centerlausanne.addEventListener('click', function() { centerlausanne.addEventListener('click', function() {
const feature = source.getFeatures()[1]; const feature = source.getFeatures()[1];
const point = /** @type {module:ol/geom/Point~Point} */ (feature.getGeometry()); const point = /** @type {module:ol/geom/Point~Point} */ (feature.getGeometry());
const size = /** @type {ol.Size} */ (map.getSize()); const size = /** @type {module:ol/size~Size} */ (map.getSize());
view.centerOn(point.getCoordinates(), size, [570, 500]); view.centerOn(point.getCoordinates(), size, [570, 500]);
}, false); }, false);

20
examples/chaikin.html Normal file
View File

@@ -0,0 +1,20 @@
---
layout: example.html
title: Smoothing lines using Chaikins algorithm
shortdesc: This uses Chaikins algorithm to smooth drawn lines.
docs: >
This example uses the npm package [`chaikin-smooth`](https://www.npmjs.com/package/chaikin-smooth) which
implements [Chaikins algorithm](http://graphics.cs.ucdavis.edu/education/CAGDNotes/Chaikins-Algorithm/Chaikins-Algorithm.html)
to smooth drawn lines.
Start by drawing on the map. Once you finish a drawing, the feature's geometry will be smoothed
as configured via the form elements.
tags: "smooth, smoothing, chaikin"
---
<div id="map" class="map"></div>
<form class="form-inline">
<label for="shall-smoothen">Smooth drawn geometry?</label>
<input id="shall-smoothen" type="checkbox" checked><br>
<label for="iterations">Number of smoothings</label>
<input style="width: 250px;" type="range" id="iterations" min="2" max="10" step="1" value="5">
</form>

54
examples/chaikin.js Normal file
View File

@@ -0,0 +1,54 @@
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import Draw from '../src/ol/interaction/Draw.js';
import smooth from 'chaikin-smooth';
function makeSmooth(path, numIterations) {
numIterations = Math.min(Math.max(numIterations, 1), 10);
while (numIterations > 0) {
path = smooth(path);
numIterations--;
}
return path;
}
const vectorSource = new VectorSource({});
const map = new Map({
layers: [
new TileLayer({
source: new OSM(),
opacity: 0.5
}),
new VectorLayer({
source: vectorSource
})
],
target: 'map',
view: new View({
center: [1078373.5950, 6871994.5910],
zoom: 5
})
});
const shallSmoothen = document.getElementById('shall-smoothen');
const numIterations = document.getElementById('iterations');
const draw = new Draw({
source: vectorSource,
type: 'LineString'
});
map.addInteraction(draw);
draw.on('drawend', function(event) {
if (!shallSmoothen.checked) {
return;
}
const feat = event.feature;
const geometry = feat.getGeometry();
const coords = geometry.getCoordinates();
const smoothened = makeSmooth(coords, parseInt(numIterations.value, 10) || 5);
geometry.setCoordinates(smoothened);
});

View File

@@ -1,7 +1,7 @@
--- ---
layout: example.html layout: example.html
title: Clustered Features title: Clustered Features
shortdesc: Example of using ol.source.Cluster. shortdesc: Example of using ol/source/Cluster.
docs: > docs: >
This example shows how to do clustering on point features. This example shows how to do clustering on point features.
tags: "cluster, vector" tags: "cluster, vector"

View File

@@ -2,16 +2,9 @@ import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Point from '../src/ol/geom/Point.js'; import Point from '../src/ol/geom/Point.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {Cluster, OSM, Vector as VectorSource} from '../src/ol/source.js';
import Cluster from '../src/ol/source/Cluster.js'; import {Circle as CircleStyle, Fill, Stroke, Style, Text} from '../src/ol/style.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
import Text from '../src/ol/style/Text.js';
const distance = document.getElementById('distance'); const distance = document.getElementById('distance');

View File

@@ -1,9 +1,7 @@
// NOCOMPILE
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import ImageLayer from '../src/ol/layer/Image.js'; import ImageLayer from '../src/ol/layer/Image.js';
import RasterSource from '../src/ol/source/Raster.js'; import {Raster as RasterSource, Stamen} from '../src/ol/source.js';
import Stamen from '../src/ol/source/Stamen.js';
/** /**

View File

@@ -1,8 +1,7 @@
import {inherits} from '../src/ol/index.js'; import {inherits} from '../src/ol/index.js';
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, Control} from '../src/ol/control.js';
import Control from '../src/ol/control/Control.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';

View File

@@ -3,8 +3,8 @@ layout: example.html
title: Custom Interactions title: Custom Interactions
shortdesc: Example of a custom interaction. shortdesc: Example of a custom interaction.
docs: > docs: >
This example demonstrates creating a custom interaction by subclassing `ol.interaction.Pointer`. This example demonstrates creating a custom interaction by subclassing `ol/interaction/Pointer`.
Note that the built in interaction `ol.interaction.Translate` might be a better option for moving features. Note that the built in interaction `ol/interaction/Translate` might be a better option for moving features.
tags: "drag, feature, vector, editing, custom, interaction" tags: "drag, feature, vector, editing, custom, interaction"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -2,19 +2,11 @@ import {inherits} from '../src/ol/index.js';
import Feature from '../src/ol/Feature.js'; import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import LineString from '../src/ol/geom/LineString.js'; import {LineString, Point, Polygon} from '../src/ol/geom.js';
import Point from '../src/ol/geom/Point.js'; import {defaults as defaultInteractions, Pointer as PointerInteraction} from '../src/ol/interaction.js';
import Polygon from '../src/ol/geom/Polygon.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js'; import {TileJSON, Vector as VectorSource} from '../src/ol/source.js';
import PointerInteraction from '../src/ol/interaction/Pointer.js'; import {Fill, Icon, Stroke, Style} from '../src/ol/style.js';
import TileLayer from '../src/ol/layer/Tile.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import TileJSON from '../src/ol/source/TileJSON.js';
import VectorSource from '../src/ol/source/Vector.js';
import Fill from '../src/ol/style/Fill.js';
import Icon from '../src/ol/style/Icon.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
/** /**
@@ -25,7 +17,7 @@ const app = {};
/** /**
* @constructor * @constructor
* @extends {ol.interaction.Pointer} * @extends {module:ol/interaction/Pointer}
*/ */
app.Drag = function() { app.Drag = function() {
@@ -37,7 +29,7 @@ app.Drag = function() {
}); });
/** /**
* @type {ol.Pixel} * @type {module:ol~Pixel}
* @private * @private
*/ */
this.coordinate_ = null; this.coordinate_ = null;
@@ -157,7 +149,7 @@ const map = new Map({
features: [pointFeature, lineFeature, polygonFeature] features: [pointFeature, lineFeature, polygonFeature]
}), }),
style: new Style({ style: new Style({
image: new Icon(/** @type {olx.style.IconOptions} */ ({ image: new Icon(/** @type {module:ol/style/Icon~Options} */ ({
anchor: [0.5, 46], anchor: [0.5, 46],
anchorXUnits: 'fraction', anchorXUnits: 'fraction',
anchorYUnits: 'pixels', anchorYUnits: 'pixels',

13
examples/d3.js vendored
View File

@@ -1,12 +1,9 @@
// NOCOMPILE
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {getWidth, getCenter} from '../src/ol/extent.js'; import {getWidth, getCenter} from '../src/ol/extent.js';
import ImageLayer from '../src/ol/layer/Image.js'; import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';
import TileLayer from '../src/ol/layer/Tile.js';
import {fromLonLat, toLonLat} from '../src/ol/proj.js'; import {fromLonLat, toLonLat} from '../src/ol/proj.js';
import ImageCanvasSource from '../src/ol/source/ImageCanvas.js'; import {ImageCanvas as ImageCanvasSource, Stamen} from '../src/ol/source.js';
import Stamen from '../src/ol/source/Stamen.js';
const map = new Map({ const map = new Map({
@@ -26,17 +23,17 @@ const map = new Map({
/** /**
* Load the topojson data and create an ol.layer.Image for that data. * Load the topojson data and create an ol/layer/Image for that data.
*/ */
d3.json('data/topojson/us.json', function(error, us) { d3.json('data/topojson/us.json', function(error, us) {
const features = topojson.feature(us, us.objects.counties); const features = topojson.feature(us, us.objects.counties);
/** /**
* This function uses d3 to render the topojson features to a canvas. * This function uses d3 to render the topojson features to a canvas.
* @param {ol.Extent} extent Extent. * @param {module:ol/extent~Extent} extent Extent.
* @param {number} resolution Resolution. * @param {number} resolution Resolution.
* @param {number} pixelRatio Pixel ratio. * @param {number} pixelRatio Pixel ratio.
* @param {ol.Size} size Size. * @param {module:ol/size~Size} size Size.
* @param {module:ol/proj/Projection~Projection} projection Projection. * @param {module:ol/proj/Projection~Projection} projection Projection.
* @return {HTMLCanvasElement} A canvas element. * @return {HTMLCanvasElement} A canvas element.
*/ */

View File

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

View File

@@ -3,10 +3,11 @@ layout: example.html
title: Drag-and-Drop Image Vector title: Drag-and-Drop Image Vector
shortdesc: Example of using the drag-and-drop interaction with image vector rendering. shortdesc: Example of using the drag-and-drop interaction with image vector rendering.
docs: > docs: >
Example of using the drag-and-drop interaction with an `ol.layer.Vector` with `renderMode: 'image'``. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client. Example of using the drag-and-drop interaction with an `ol/layer/Vector` with `renderMode: 'image'``. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.
tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image" tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div id="info">&nbsp;</div> <div id="info">&nbsp;</div>

View File

@@ -1,20 +1,10 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import GPX from '../src/ol/format/GPX.js'; import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import {defaults as defaultInteractions, DragAndDrop} from '../src/ol/interaction.js';
import IGC from '../src/ol/format/IGC.js'; import {Vector as VectorLayer, Tile as TileLayer} from '../src/ol/layer.js';
import KML from '../src/ol/format/KML.js'; import {BingMaps, Vector as VectorSource} from '../src/ol/source.js';
import TopoJSON from '../src/ol/format/TopoJSON.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js';
import DragAndDrop from '../src/ol/interaction/DragAndDrop.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import TileLayer from '../src/ol/layer/Tile.js';
import BingMaps from '../src/ol/source/BingMaps.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const defaultStyle = { const defaultStyle = {

View File

@@ -6,7 +6,8 @@ docs: >
Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857. Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.
tags: "drag-and-drop, gpx, geojson, igc, kml, topojson" tags: "drag-and-drop, gpx, geojson, igc, kml, topojson"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div id="info">&nbsp;</div> <div id="info">&nbsp;</div>

View File

@@ -1,20 +1,10 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import GPX from '../src/ol/format/GPX.js'; import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import {defaults as defaultInteractions, DragAndDrop} from '../src/ol/interaction.js';
import IGC from '../src/ol/format/IGC.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import KML from '../src/ol/format/KML.js'; import {BingMaps, Vector as VectorSource} from '../src/ol/source.js';
import TopoJSON from '../src/ol/format/TopoJSON.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js';
import DragAndDrop from '../src/ol/interaction/DragAndDrop.js';
import TileLayer from '../src/ol/layer/Tile.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import BingMaps from '../src/ol/source/BingMaps.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const defaultStyle = { const defaultStyle = {

View File

@@ -1,7 +1,6 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js'; import {defaults as defaultInteractions, DragRotateAndZoom} from '../src/ol/interaction.js';
import DragRotateAndZoom from '../src/ol/interaction/DragRotateAndZoom.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';

View File

@@ -1,9 +1,9 @@
--- ---
layout: example.html layout: example.html
title: Draw and Modify Features title: Draw and Modify Features
shortdesc: Example of using the ol.interaction.Draw interaction together with the ol.interaction.Modify interaction. shortdesc: Example of using the ol/interaction/Draw interaction together with the ol/interaction/Modify interaction.
docs: > docs: >
Example of using the ol.interaction.Draw interaction together with the ol.interaction.Modify interaction. Example of using the ol/interaction/Draw interaction together with the ol/interaction/Modify interaction.
tags: "draw, edit, modify, vector, featureoverlay" tags: "draw, edit, modify, vector, featureoverlay"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,16 +1,9 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Draw from '../src/ol/interaction/Draw.js'; import {Draw, Modify, Snap} from '../src/ol/interaction.js';
import Modify from '../src/ol/interaction/Modify.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import Snap from '../src/ol/interaction/Snap.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const raster = new TileLayer({ const raster = new TileLayer({
source: new OSM() source: new OSM()

View File

@@ -1,7 +1,7 @@
--- ---
layout: example.html layout: example.html
title: Draw Features title: Draw Features
shortdesc: Example of using the ol.interaction.Draw interaction. shortdesc: Example of using the ol/interaction/Draw interaction.
docs: > docs: >
Example of using the Draw interaction. Select a geometry type from the Example of using the Draw interaction. Select a geometry type from the
dropdown above to start drawing. To finish drawing, click the last dropdown above to start drawing. To finish drawing, click the last

View File

@@ -1,10 +1,8 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Draw from '../src/ol/interaction/Draw.js'; import Draw from '../src/ol/interaction/Draw.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const raster = new TileLayer({ const raster = new TileLayer({
source: new OSM() source: new OSM()

View File

@@ -1,13 +1,13 @@
--- ---
layout: example.html layout: example.html
title: Freehand Drawing title: Freehand Drawing
shortdesc: Example using the ol.interaction.Draw interaction in freehand mode. shortdesc: Example using the ol/interaction/Draw interaction in freehand mode.
docs: > docs: >
This example demonstrates the `ol.interaction.Draw` in freehand mode. During This example demonstrates the `ol/interaction/Draw` in freehand mode. During
freehand drawing, points are added while dragging. Set `freehand: true` to freehand drawing, points are added while dragging. Set `freehand: true` to
enable freehand mode. Note that freehand mode can be conditionally enabled enable freehand mode. Note that freehand mode can be conditionally enabled
by using the `freehandCondition` option. For example to toggle freehand mode by using the `freehandCondition` option. For example to toggle freehand mode
with the `Shift` key, use `freehandCondition: ol.events.condition.shiftKeyOnly`. with the `Shift` key, use `freehandCondition: shiftKeyOnly`.
tags: "draw, edit, freehand, vector" tags: "draw, edit, freehand, vector"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,10 +1,8 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Draw from '../src/ol/interaction/Draw.js'; import Draw from '../src/ol/interaction/Draw.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const raster = new TileLayer({ const raster = new TileLayer({
source: new OSM() source: new OSM()

View File

@@ -1,10 +1,10 @@
--- ---
layout: example.html layout: example.html
title: Draw Shapes title: Draw Shapes
shortdesc: Using the ol.interaction.Draw to create regular shapes shortdesc: Using the ol/interaction/Draw to create regular shapes
docs: > docs: >
This demonstrates the use of the `geometryFunction` option for the This demonstrates the use of the `geometryFunction` option for the
`ol.interaction.Draw`. Select a shape type from the dropdown above to start `ol/interaction/Draw`. Select a shape type from the dropdown above to start
drawing. To activate freehand drawing, hold the `Shift` key. Square drawing is drawing. To activate freehand drawing, hold the `Shift` key. Square drawing is
achieved by using `type: 'Circle'` type with a `geometryFunction` that creates achieved by using `type: 'Circle'` type with a `geometryFunction` that creates
a 4-sided regular polygon instead of a circle. Box drawing uses `type: 'Circle'` a 4-sided regular polygon instead of a circle. Box drawing uses `type: 'Circle'`

View File

@@ -2,10 +2,8 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Polygon from '../src/ol/geom/Polygon.js'; import Polygon from '../src/ol/geom/Polygon.js';
import Draw, {createRegularPolygon, createBox} from '../src/ol/interaction/Draw.js'; import Draw, {createRegularPolygon, createBox} from '../src/ol/interaction/Draw.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const raster = new TileLayer({ const raster = new TileLayer({
source: new OSM() source: new OSM()

View File

@@ -1,13 +1,9 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import MultiPoint from '../src/ol/geom/MultiPoint.js'; import {MultiPoint, Point} from '../src/ol/geom.js';
import Point from '../src/ol/geom/Point.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';
import CircleStyle from '../src/ol/style/Circle.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const map = new Map({ const map = new Map({

View File

@@ -6,7 +6,7 @@ docs: >
<p>This example parses a KML file and renders the features as clusters on a vector layer. The styling in this example is quite involved. Single earthquake locations <p>This example parses a KML file and renders the features as clusters on a vector layer. The styling in this example is quite involved. Single earthquake locations
(rendered as stars) have a size relative to their magnitude. Clusters have an opacity relative to the number of features in the cluster, and a size that represents (rendered as stars) have a size relative to their magnitude. Clusters have an opacity relative to the number of features in the cluster, and a size that represents
the extent of the features that make up the cluster. When clicking or hovering on a cluster, the individual features that make up the cluster will be shown.</p> the extent of the features that make up the cluster. When clicking or hovering on a cluster, the individual features that make up the cluster will be shown.</p>
<p>To achieve this, we make heavy use of style functions and <code>ol.style.Style#geometry</code>.</p> <p>To achieve this, we make heavy use of style functions.</p>
tags: "KML, vector, style, geometry, cluster" tags: "KML, vector, style, geometry, cluster"
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -2,19 +2,10 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {createEmpty, getWidth, getHeight, extend} from '../src/ol/extent.js'; import {createEmpty, getWidth, getHeight, extend} from '../src/ol/extent.js';
import KML from '../src/ol/format/KML.js'; import KML from '../src/ol/format/KML.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js'; import {defaults as defaultInteractions, Select} from '../src/ol/interaction.js';
import Select from '../src/ol/interaction/Select.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Cluster, Stamen, Vector as VectorSource} from '../src/ol/source.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {Circle as CircleStyle, Fill, RegularShape, Stroke, Style, Text} from '../src/ol/style.js';
import Cluster from '../src/ol/source/Cluster.js';
import Stamen from '../src/ol/source/Stamen.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import RegularShape from '../src/ol/style/RegularShape.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
import Text from '../src/ol/style/Text.js';
const earthquakeFill = new Fill({ const earthquakeFill = new Fill({

View File

@@ -1,7 +1,7 @@
--- ---
layout: example.html layout: example.html
title: Earthquakes with custom symbols title: Earthquakes with custom symbols
shortdesc: Demonstrates the use of `ol.render.toCanvas` to create custom icon symbols. shortdesc: Demonstrates the use of `toCanvas` to create custom icon symbols.
docs: > docs: >
This example parses a KML file and renders the features as a vector layer. The layer is given a <code>style</code> that renders earthquake locations with a custom lightning symbol and a size relative to their magnitude. This example parses a KML file and renders the features as a vector layer. The layer is given a <code>style</code> that renders earthquake locations with a custom lightning symbol and a size relative to their magnitude.
tags: "KML, vector, style, canvas, symbol" tags: "KML, vector, style, canvas, symbol"

View File

@@ -2,15 +2,11 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import KML from '../src/ol/format/KML.js'; import KML from '../src/ol/format/KML.js';
import Polygon from '../src/ol/geom/Polygon.js'; import Polygon from '../src/ol/geom/Polygon.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import {toContext} from '../src/ol/render.js'; import {toContext} from '../src/ol/render.js';
import Stamen from '../src/ol/source/Stamen.js'; import Stamen from '../src/ol/source/Stamen.js';
import VectorSource from '../src/ol/source/Vector.js'; import VectorSource from '../src/ol/source/Vector.js';
import Fill from '../src/ol/style/Fill.js'; import {Fill, Icon, Stroke, Style} from '../src/ol/style.js';
import Icon from '../src/ol/style/Icon.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const symbol = [[0, 0], [4, 2], [6, 0], [10, 5], [6, 3], [4, 5], [0, 0]]; const symbol = [[0, 0], [4, 2], [6, 0], [10, 5], [6, 3], [4, 5], [0, 0]];

View File

@@ -1,7 +1,6 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, ScaleLine} from '../src/ol/control.js';
import ScaleLine from '../src/ol/control/ScaleLine.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import TileWMS from '../src/ol/source/TileWMS.js'; import TileWMS from '../src/ol/source/TileWMS.js';

View File

@@ -1,13 +1,9 @@
// NOCOMPILE
// this example uses FileSaver.js for which we don't have an externs file.
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const map = new Map({ const map = new Map({
layers: [ layers: [

View File

@@ -1,13 +1,10 @@
// NOCOMPILE
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import WKT from '../src/ol/format/WKT.js'; import WKT from '../src/ol/format/WKT.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import {unByKey} from '../src/ol/Observable.js'; import {unByKey} from '../src/ol/Observable.js';
import OSM from '../src/ol/source/OSM.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import VectorSource from '../src/ol/source/Vector.js';
const raster = new TileLayer({ const raster = new TileLayer({
source: new OSM() source: new OSM()
@@ -66,7 +63,7 @@ exportButton.addEventListener('click', function() {
const dim = dims[format]; const dim = dims[format];
const width = Math.round(dim[0] * resolution / 25.4); const width = Math.round(dim[0] * resolution / 25.4);
const height = Math.round(dim[1] * resolution / 25.4); const height = Math.round(dim[1] * resolution / 25.4);
const size = /** @type {ol.Size} */ (map.getSize()); const size = /** @type {module:ol/size~Size} */ (map.getSize());
const extent = map.getView().calculateExtent(size); const extent = map.getView().calculateExtent(size);
const source = raster.getSource(); const source = raster.getSource();

View File

@@ -3,10 +3,8 @@ import View from '../src/ol/View.js';
import {platformModifierKeyOnly} from '../src/ol/events/condition.js'; import {platformModifierKeyOnly} from '../src/ol/events/condition.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import ExtentInteraction from '../src/ol/interaction/Extent.js'; import ExtentInteraction from '../src/ol/interaction/Extent.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js';
import VectorSource from '../src/ol/source/Vector.js';
const vectorSource = new VectorSource({ const vectorSource = new VectorSource({
url: 'data/geojson/countries.geojson', url: 'data/geojson/countries.geojson',
@@ -36,12 +34,12 @@ map.addInteraction(extent);
extent.setActive(false); extent.setActive(false);
//Enable interaction by holding shift //Enable interaction by holding shift
this.addEventListener('keydown', function(event) { window.addEventListener('keydown', function(event) {
if (event.keyCode == 16) { if (event.keyCode == 16) {
extent.setActive(true); extent.setActive(true);
} }
}); });
this.addEventListener('keyup', function(event) { window.addEventListener('keyup', function(event) {
if (event.keyCode == 16) { if (event.keyCode == 16) {
extent.setActive(false); extent.setActive(false);
} }

View File

@@ -5,14 +5,10 @@ import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import {easeOut} from '../src/ol/easing.js'; import {easeOut} from '../src/ol/easing.js';
import Point from '../src/ol/geom/Point.js'; import Point from '../src/ol/geom/Point.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import {fromLonLat} from '../src/ol/proj.js'; import {fromLonLat} from '../src/ol/proj.js';
import OSM from '../src/ol/source/OSM.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import VectorSource from '../src/ol/source/Vector.js'; import {Circle as CircleStyle, Stroke, Style} from '../src/ol/style.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const map = new Map({ const map = new Map({

View File

@@ -8,7 +8,8 @@ docs: >
is being used. is being used.
tags: "animation, feature, postcompose, polyline" tags: "animation, feature, postcompose, polyline"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>
<label for="speed"> <label for="speed">

View File

@@ -3,15 +3,10 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import Polyline from '../src/ol/format/Polyline.js'; import Polyline from '../src/ol/format/Polyline.js';
import Point from '../src/ol/geom/Point.js'; import Point from '../src/ol/geom/Point.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import BingMaps from '../src/ol/source/BingMaps.js'; import BingMaps from '../src/ol/source/BingMaps.js';
import VectorSource from '../src/ol/source/Vector.js'; import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js'; import {Circle as CircleStyle, Fill, Icon, Stroke, Style} from '../src/ol/style.js';
import Fill from '../src/ol/style/Fill.js';
import Icon from '../src/ol/style/Icon.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
// This long string is placed here due to jsFiddle limitations. // This long string is placed here due to jsFiddle limitations.
// It is usually loaded with AJAX. // It is usually loaded with AJAX.

View File

@@ -1,14 +1,11 @@
// NOCOMPILE
import Feature from '../src/ol/Feature.js'; import Feature from '../src/ol/Feature.js';
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import LineString from '../src/ol/geom/LineString.js'; import LineString from '../src/ol/geom/LineString.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js';
import Stamen from '../src/ol/source/Stamen.js'; import Stamen from '../src/ol/source/Stamen.js';
import VectorSource from '../src/ol/source/Vector.js'; import VectorSource from '../src/ol/source/Vector.js';
import Stroke from '../src/ol/style/Stroke.js'; import {Stroke, Style} from '../src/ol/style.js';
import Style from '../src/ol/style/Style.js';
const map = new Map({ const map = new Map({
layers: [ layers: [

View File

@@ -7,6 +7,7 @@ docs: >
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p> <p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
tags: "full-screen, drag, rotate, zoom, bing, bing-maps" tags: "full-screen, drag, rotate, zoom, bing, bing-maps"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,9 +1,7 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, FullScreen} from '../src/ol/control.js';
import FullScreen from '../src/ol/control/FullScreen.js'; import {defaults as defaultInteractions, DragRotateAndZoom} from '../src/ol/interaction.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js';
import DragRotateAndZoom from '../src/ol/interaction/DragRotateAndZoom.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import BingMaps from '../src/ol/source/BingMaps.js'; import BingMaps from '../src/ol/source/BingMaps.js';

View File

@@ -1,7 +1,6 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, FullScreen} from '../src/ol/control.js';
import FullScreen from '../src/ol/control/FullScreen.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';

View File

@@ -7,6 +7,7 @@ docs: >
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p> <p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
tags: "full-screen, bing, bing-maps" tags: "full-screen, bing, bing-maps"
cloak: cloak:
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5
value: Your Bing Maps Key from http://www.bingmapsportal.com/ here
--- ---
<div id="map" class="map"></div> <div id="map" class="map"></div>

View File

@@ -1,7 +1,6 @@
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls, FullScreen} from '../src/ol/control.js';
import FullScreen from '../src/ol/control/FullScreen.js';
import TileLayer from '../src/ol/layer/Tile.js'; import TileLayer from '../src/ol/layer/Tile.js';
import BingMaps from '../src/ol/source/BingMaps.js'; import BingMaps from '../src/ol/source/BingMaps.js';

View File

@@ -1,11 +1,9 @@
// NOCOMPILE
import Map from '../src/ol/Map.js'; import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import OSM from '../src/ol/source/OSM.js'; import OSM from '../src/ol/source/OSM.js';
import VectorTileSource from '../src/ol/source/VectorTile.js'; import VectorTileSource from '../src/ol/source/VectorTile.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, VectorTile as VectorTileLayer} from '../src/ol/layer.js';
import VectorTileLayer from '../src/ol/layer/VectorTile.js';
import Projection from '../src/ol/proj/Projection.js'; import Projection from '../src/ol/proj/Projection.js';

View File

@@ -4,14 +4,9 @@ import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import GeoJSON from '../src/ol/format/GeoJSON.js'; import GeoJSON from '../src/ol/format/GeoJSON.js';
import Circle from '../src/ol/geom/Circle.js'; import Circle from '../src/ol/geom/Circle.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const image = new CircleStyle({ const image = new CircleStyle({

View File

@@ -42,8 +42,7 @@ map.addOverlay(marker);
// LineString to store the different geolocation positions. This LineString // LineString to store the different geolocation positions. This LineString
// is time aware. // is time aware.
// The Z dimension is actually used to store the rotation (heading). // The Z dimension is actually used to store the rotation (heading).
const positions = new LineString([], const positions = new LineString([], /** @type {module:ol/geom/GeometryLayout} */ ('XYZM'));
/** @type {module:ol/geom/GeometryLayout~GeometryLayout} */ ('XYZM'));
// Geolocation Control // Geolocation Control
const geolocation = new Geolocation({ const geolocation = new Geolocation({

View File

@@ -4,14 +4,9 @@ import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js'; import View from '../src/ol/View.js';
import {defaults as defaultControls} from '../src/ol/control.js'; import {defaults as defaultControls} from '../src/ol/control.js';
import Point from '../src/ol/geom/Point.js'; import Point from '../src/ol/geom/Point.js';
import TileLayer from '../src/ol/layer/Tile.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import VectorLayer from '../src/ol/layer/Vector.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js';
import OSM from '../src/ol/source/OSM.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js';
import VectorSource from '../src/ol/source/Vector.js';
import CircleStyle from '../src/ol/style/Circle.js';
import Fill from '../src/ol/style/Fill.js';
import Stroke from '../src/ol/style/Stroke.js';
import Style from '../src/ol/style/Style.js';
const view = new View({ const view = new View({
center: [0, 0], center: [0, 0],

View File

@@ -6,7 +6,7 @@ shortdesc: >
request request
docs: > docs: >
Demonstrates the use of the `layers` option in the Demonstrates the use of the `layers` option in the
`ol.format.WMSGetFeatureInfo` format object, which allows features returned `ol/format/WMSGetFeatureInfo` format object, which allows features returned
by a single WMS GetFeatureInfo request that asks for more than one layer by a single WMS GetFeatureInfo request that asks for more than one layer
to be read by layer name. to be read by layer name.
--- ---

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