Compare commits

..

554 Commits

Author SHA1 Message Date
Éric Lemoine
c6083f0592 Merge pull request #2277 from probins/pm
Document that panning triggers pointermove on touch
2014-06-30 21:17:33 +02:00
Peter Robins
b4596732e1 Document that panning triggers pointermove on touch 2014-06-30 12:29:36 -04:00
Éric Lemoine
64fcb1a0f5 Merge pull request #2264 from elemoine/object
ol.ObjectAccessor#transform shouldn't dispatch an event to the target object
2014-06-30 12:17:33 +02:00
Tim Schaub
9e7c516d08 Merge pull request #2275 from tschaub/relative
Allow build task to be run from anywhere and provide option for resolving relative paths.
2014-06-29 15:16:47 -04:00
Tim Schaub
a8a035468b Allow cwd to be configured for build
By default, all paths in the build config (e.g. externs) are assumed to be relative to the ol3 repo root.  To make it so relative paths are resolved from a different directory, use the cwd option.

In addition, this change makes it so the `build.js` task can be run from another directory.
2014-06-29 15:02:47 -04:00
Tim Schaub
fb7d39005e Unused var 2014-06-29 12:55:30 -04:00
Tim Schaub
ce209220ae Merge pull request #2268 from tschaub/classdesc
Treat classdesc as description.
2014-06-29 08:58:22 -04:00
Éric Lemoine
ade0cd8aaf Merge pull request #2265 from elemoine/setproperties
Change setValues to setProperties
2014-06-29 11:56:17 +02:00
Tim Schaub
93ece7021c Merge pull request #2266 from tschaub/extra-require
Extra goog.require calls.
2014-06-28 10:47:35 -04:00
Tim Schaub
2f5a92c2c9 Treat classdesc as description 2014-06-28 10:46:36 -04:00
Marc Jansen
8f81f2e453 Merge pull request #2267 from probins/sig
Docs: fix missing space on type signature
2014-06-28 14:54:59 +02:00
Peter Robins
68885cbb96 Docs: fix missing space on type signature 2014-06-28 08:29:41 -04:00
Tim Schaub
2ec63b6c58 Unnecessary ol.Tile requires 2014-06-27 19:57:54 -04:00
Tim Schaub
997517110c Unnecessary ol.Image require 2014-06-27 19:51:38 -04:00
Tim Schaub
19cf117a08 Merge pull request #2172 from gingerik/restore-wkt-parser
Back from the ashes!  The WKT format lives!
2014-06-27 17:52:22 -04:00
Erik Timmers
1e61485e11 Extend WKT parser from ol.format.TextFeature 2014-06-27 23:35:36 +02:00
Erik Timmers
61378098e6 Restore the WKT parser, example & tests 2014-06-27 23:35:35 +02:00
Éric Lemoine
eafc2ac371 Change setValues to setProperties 2014-06-27 17:26:51 +02:00
Tim Schaub
fa5f99c716 Merge pull request #2261 from tschaub/view
Rename View2D to View.
2014-06-27 10:38:27 -04:00
Tim Schaub
e802902f9b Rename ol.extent.getForView2DAndSize to ol.extent.getForViewAndSize 2014-06-27 09:59:39 -04:00
Tim Schaub
9565e17ee0 Rename ol.View2DProperty to ol.ViewProperty 2014-06-27 09:59:39 -04:00
Tim Schaub
878dcd1d28 Rename olx.View2DOptions to olx.ViewOptions 2014-06-27 09:59:39 -04:00
Tim Schaub
47d37fabea Rename ol.View2D to ol.View 2014-06-27 09:59:39 -04:00
Tim Schaub
b9f444a008 Rename olx.View2DState to olx.ViewState and use viewState property 2014-06-27 09:58:25 -04:00
Tim Schaub
2e88f911dd Rename view.getView2DState() to view.getState() 2014-06-27 09:52:19 -04:00
Tim Schaub
b88d2aebc9 Remove view.getView2D() method 2014-06-27 09:52:19 -04:00
Tim Schaub
956e1bf8b4 Remove ol.View base class 2014-06-27 09:52:19 -04:00
Tim Schaub
3c1cb55079 Remove IView and IView2D 2014-06-27 09:52:19 -04:00
Tim Schaub
c74f945817 Remove IView3D 2014-06-27 09:52:19 -04:00
Andreas Hocevar
efc3e3244a Merge pull request #2254 from elemoine/replaygroup
Use replay groups for feature overlays
2014-06-27 12:59:06 +02:00
Andreas Hocevar
cf13cb5e32 Fix remaining API doc issues with squared tolerance vs. tolerance 2014-06-27 12:20:16 +02:00
Andreas Hocevar
80fa0be42f Use setStyle in the constructor 2014-06-27 12:14:22 +02:00
Andreas Hocevar
f67767aaf0 Add ol.renderer.vector.getSquaredTolerance and ol.SIMPLIFY_TOLERANCE 2014-06-27 12:10:46 +02:00
Andreas Hocevar
2171c92b5c Add new tests for FeatureOverlay
In the process of creating these tests, a bug with setting this._style
was also fixed.
2014-06-27 11:46:47 +02:00
Éric Lemoine
be69f5bdac Merge pull request #2244 from elemoine/kmlwrite
KML write support
2014-06-27 11:23:16 +02:00
Éric Lemoine
1ec25f3992 Remove the unused ol.format.KML.DOCUMENT_SEQUENCE_ 2014-06-27 10:59:31 +02:00
Éric Lemoine
ccd01fb874 Add ol.format.XSD.writeBooleanTextNode 2014-06-27 10:56:04 +02:00
Bart van den Eijnden
2517c712db Merge pull request #2263 from bartvde/transformflatgeom-test
Add some test coverage for ol.geom.transformSimpleGeometry2D
2014-06-27 10:36:49 +02:00
Éric Lemoine
b67e71828d Add a test for ol.Object 2014-06-27 10:17:13 +02:00
Éric Lemoine
5ebb9686ce ol.Object doc improvement 2014-06-27 10:16:53 +02:00
Éric Lemoine
9179c914b8 Notify ol.Object source when transform is called 2014-06-27 10:16:27 +02:00
Bart van den Eijnden
e3cbece91b Add some test coverage for ol.geom.transformSimpleGeometry2D 2014-06-27 10:07:47 +02:00
Frédéric Junod
c4cf76f983 Merge pull request #2260 from fredj/vectorsource-same-id
Remove uniqueness constraint check
2014-06-27 10:07:44 +02:00
Frederic Junod
a172eda242 Remove uniqueness constraint check 2014-06-26 17:55:38 +02:00
Frédéric Junod
d1737228e9 Merge pull request #2256 from fredj/easing.jsdoc
Add the jsdoc ol.easing namespace
2014-06-26 16:39:22 +02:00
Peter Robins
85c1427111 Add ol.easing to api docs 2014-06-26 16:14:59 +02:00
Andreas Hocevar
1551e6e7ff Improved forEatchFeatureAtPixel docs 2014-06-26 15:17:29 +02:00
Éric Lemoine
177188d732 Add ol.format.KML.SCHEMA_LOCATION_ 2014-06-26 15:13:04 +02:00
Paul Spencer
33948a7244 Merge pull request #2247 from pagameba/source-state
Use string values for ol.source.State enum
2014-06-26 08:27:06 -04:00
Paul Spencer
bf9dbd614a Use string values for ol.source.State enum
Many user-facing enums are string values and we document use of the string values rather than more confusing enum reference or the numeric values.
2014-06-26 08:15:03 -04:00
Éric Lemoine
b25e577865 Do not "export" ol.render.Event#replayGroup 2014-06-26 14:11:43 +02:00
Éric Lemoine
6cf4c95762 Flush the vector context after replaying the batch 2014-06-26 14:06:56 +02:00
Andreas Hocevar
d2e4603171 Merge pull request #2252 from probins/patch-1
Fix broken links in api docs landing page
2014-06-26 13:24:20 +02:00
Andreas Hocevar
ba2d49d715 Finish the replay group after dispatching the compose event 2014-06-26 13:16:34 +02:00
Peter Robins
54d249e921 Fix broken links in api docs landing page 2014-06-26 12:16:18 +01:00
Éric Lemoine
0762b8c023 Defer selection/deselection 2014-06-26 10:39:58 +02:00
oterral
02b8ef1bb6 Fix nodes order in Placemark and IconStyle 2014-06-26 09:24:08 +02:00
oterral
5d8d936216 Use ol.xml.setAttributeNS for xmlns attributes 2014-06-26 09:07:22 +02:00
Éric Lemoine
bcdce20ee3 Clone skippedFeatureUids_ 2014-06-25 18:32:08 +02:00
Éric Lemoine
18d117dff6 Hit detection for features drawn at pre/postcompose 2014-06-25 18:32:02 +02:00
Tim Schaub
b977d85229 Merge pull request #2246 from tschaub/kind
Add symbol kind to info.
2014-06-25 11:52:28 -04:00
Tim Schaub
d5de99bcf7 Add symbol kind to info 2014-06-25 11:11:22 -04:00
Tim Schaub
dc6fd76e25 Merge pull request #2245 from sweco-sebhar/patch-1
Make `ol.Observable#getRevision` exportable.
2014-06-25 10:53:18 -04:00
Björn Harrtell
8fab2f7d25 Add getRevision to api
The revision can be useful for instance to check if a feature has been modified so I'd like to see it in api.
2014-06-25 16:19:42 +02:00
Éric Lemoine
384f2a0ecf Create valid KML documents
Thanks @bartvde.
2014-06-25 15:58:56 +02:00
Éric Lemoine
05970c9831 Minor change to the example externs file 2014-06-25 15:58:56 +02:00
Éric Lemoine
fba89275d8 Use exampleNS.strToBase64 in kml example 2014-06-25 15:58:56 +02:00
Éric Lemoine
7fb3e5842d Add an exampleNS.strToBase64 function
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
2014-06-25 15:58:56 +02:00
Éric Lemoine
78ac2c8a76 Add export button to kml example 2014-06-25 12:25:43 +02:00
Éric Lemoine
a4e95eb513 Add write support to KML format 2014-06-25 12:17:32 +02:00
Éric Lemoine
8dc9618adb Add ol.style.Icon#getImageSize 2014-06-25 12:16:22 +02:00
Éric Lemoine
bd3da0eed9 Merge pull request #2242 from elemoine/feature-clone
Add ol.Feature#clone
2014-06-25 09:43:41 +02:00
Andreas Hocevar
4679a7d4fb Merge pull request #2138 from probins/mapoptions
Document map options more thoroughly
2014-06-25 09:35:56 +02:00
Éric Lemoine
ec6a0548d1 Add ol.Feature#clone 2014-06-25 09:31:15 +02:00
Éric Lemoine
34d389e2f8 Merge pull request #2218 from oterral/exports
Add exports
2014-06-25 09:30:37 +02:00
oterral
0fefd680d4 Make ol.tilegrid.TileGrid#getResolutions method exportable 2014-06-25 08:31:45 +02:00
oterral
67bd397c37 Make ol.format.KML#readName method exportable 2014-06-25 08:31:45 +02:00
Frédéric Junod
b8dca03365 Merge pull request #2241 from fredj/misc
Cleanup vector-labels example
2014-06-24 23:11:10 +02:00
Frederic Junod
a6d059649f Cleanup vector-labels example 2014-06-24 16:45:58 +02:00
Frédéric Junod
3f5e42258a Merge pull request #2239 from probins/patch-1
Correct minor typo in ol.dom.Input docs
2014-06-24 13:27:29 +02:00
Frédéric Junod
1c751b9e9f Merge pull request #2238 from fredj/circle-hit-detection
Circle hit detection
2014-06-24 13:27:02 +02:00
Peter Robins
928b05e857 Correct minor typo in ol.dom.Input docs 2014-06-24 12:04:42 +01:00
Frederic Junod
2c6b22f55c Use the right coordinates when drawing circles 2014-06-24 12:25:21 +02:00
Andreas Hocevar
85ddd2446e Add endGeometry after hit detection stroke and fill 2014-06-24 12:23:47 +02:00
Paul Spencer
e5b9098965 Merge pull request #2207 from probins/projdocs
Improve docs for projection/transform functions
2014-06-23 07:48:46 -04:00
Peter Robins
ff3e66d550 Improve docs for projection/transform functions 2014-06-23 06:16:35 -04:00
Éric Lemoine
d7a046a0dc Merge pull request #2200 from probins/examplereadme
Add examples/readme
2014-06-22 19:08:16 +02:00
Peter Robins
8dcbded96a Add examples/readme 2014-06-22 11:57:03 -04:00
Marc Jansen
f2389a9a7d Merge pull request #2231 from probins/patch-1
Correct minor typo in ol.extent.buffer docs
2014-06-21 18:32:34 +02:00
Peter Robins
dbe3729857 Correct minor typo in ol.extent.buffer docs 2014-06-21 14:01:08 +01:00
Éric Lemoine
b6be48564c Merge pull request #2230 from probins/condition
Update docs for events.condition options
2014-06-20 20:33:19 +02:00
Peter Robins
68fcba6e35 Update docs for events.condition options 2014-06-20 14:15:52 -04:00
Peter Robins
68ec57b004 Document map options more thoroughly 2014-06-20 08:27:20 -04:00
Frédéric Junod
71da6603cb Merge pull request #2171 from fredj/hidpi-text-stroke
Don't scale the text stroke width by pixel ratio
2014-06-19 19:20:32 +02:00
Éric Lemoine
5df4b5030a Merge pull request #1941 from elemoine/stable
Mark ol.Map and ol.Collection as stable
2014-06-19 15:53:23 +02:00
Frédéric Junod
19467fae8e Merge pull request #2223 from fredj/igc-example-input
Fix invalid input tag in igc example
2014-06-19 14:33:15 +02:00
Frederic Junod
6194eeda8e Fix invalid input tag in igc example 2014-06-19 11:37:47 +02:00
Éric Lemoine
b40a6997d9 Add stable tags to ol.Map 2014-06-19 10:37:11 +02:00
Éric Lemoine
601f0d8fd2 Add stable tags to ol.Collection 2014-06-19 10:35:04 +02:00
Éric Lemoine
5e9121cd8b Merge pull request #2217 from elemoine/overlay-offset
Add an offset property to ol.Overlay
2014-06-19 10:20:38 +02:00
Frédéric Junod
a4df24abb5 Merge pull request #2219 from fredj/rbush-update
Allow the value to be changed while iterating over the rtree
2014-06-19 10:10:53 +02:00
Éric Lemoine
af78adb417 Make ol.Overlay always call setPositioning 2014-06-19 10:09:57 +02:00
Éric Lemoine
0a0d12ec8a Make ol.Overlay always call setOffset 2014-06-19 10:09:37 +02:00
Éric Lemoine
dced47157e Better docs for ol.Overlay#positioning 2014-06-19 09:57:58 +02:00
Frédéric Junod
32f58b4b4e Merge pull request #2220 from fredj/synthetic-points-popup
Remove the unused popup from the synthetic-points example
2014-06-19 09:55:43 +02:00
Éric Lemoine
dc6867ea2f Merge pull request #2216 from elemoine/pixelratio
Add tilePixelRatio option to ol.source.WMTS
2014-06-19 09:51:41 +02:00
Éric Lemoine
fd151e1386 Add docs for tilePixelRatio 2014-06-19 09:50:53 +02:00
Frederic Junod
8d12c76c1d Remove the unused popup from the synthetic-points example 2014-06-19 09:43:37 +02:00
Frederic Junod
7408100c27 Allow the value to be changed while iterating over the rtree 2014-06-19 09:24:48 +02:00
Éric Lemoine
a9a1a42b8b Merge pull request #2214 from probins/patch-2
Stop exporting getTransformFromProjections and transformWithProjections
2014-06-18 22:52:28 +02:00
Éric Lemoine
d1d8d5f96c Add an offset property to ol.Overlay
Replaces "offsetX" and "offsetY" by an ol.Object "offset" property.
2014-06-18 22:11:07 +02:00
Frédéric Junod
cc51060170 Merge pull request #2215 from fredj/json-type
Correct code type in tasks/readme
2014-06-18 13:52:34 +02:00
Frederic Junod
f09c00462c Correct code type in tasks/readme 2014-06-18 13:42:32 +02:00
Éric Lemoine
16c9d9bf09 Use tilePixelOption in wmts-hidpi example 2014-06-18 13:34:57 +02:00
Andreas Hocevar
4e52224c12 Add example 2014-06-18 13:34:57 +02:00
Éric Lemoine
e161f0eaba Add tilePixelRatio option to ol.source.WMTS 2014-06-18 13:34:57 +02:00
Éric Lemoine
947eb2e949 Add tilePixelRatio option to ol.source.TileImage 2014-06-18 13:34:57 +02:00
Éric Lemoine
4bcadc5b8d Add tilePixelRatio option to ol.source.Tile 2014-06-18 13:27:22 +02:00
Frédéric Junod
92b62ba3ab Merge pull request #2213 from probins/patch-1
Correct minor typo in tasks/readme
2014-06-18 11:23:30 +02:00
Éric Lemoine
0cc0239c16 Merge pull request #2212 from elemoine/drawinteraction
Add "None" to draw-features example's select
2014-06-18 10:00:52 +02:00
Peter Robins
0a2b3b0bca Stop exporting getTransformFromProjections and transformWithProjections 2014-06-18 08:19:56 +01:00
Peter Robins
986778cf0c Correct minor typo in tasks/readme 2014-06-18 08:10:26 +01:00
Éric Lemoine
a7b4a08e07 Add "None" to draw-features example's select
This allows to deactivate drawing entirely in the example.
2014-06-18 08:26:45 +02:00
Frédéric Junod
758f326215 Merge pull request #2101 from fredj/polyline-factor
Make the scale factor of ol.format.Polyline configurable
2014-06-17 17:41:03 +02:00
Frederic Junod
a283977cb9 Make the scale factor of ol.format.Polyline configurable
And export the class
2014-06-17 16:58:40 +02:00
Bart van den Eijnden
0245cb1d56 Merge pull request #2210 from bartvde/wfs-example-fix
Get rid of unused info div in vector-wfs example
2014-06-17 11:14:36 +02:00
Bart van den Eijnden
6fa0aa252c Get rid of unused info div in vector-wfs example 2014-06-17 11:05:19 +02:00
Frédéric Junod
7d9e13f30f Merge pull request #2209 from fredj/modify-rbush
Use getInExtent instead of forEachInExtent
2014-06-17 09:28:11 +02:00
Frederic Junod
9b2a874282 Use getInExtent instead of forEachInExtent 2014-06-17 08:58:04 +02:00
Frederic Junod
52b1ba30fa Don't scale the text stroke width by pixel ratio 2014-06-16 15:34:54 +02:00
Andreas Hocevar
3fdd0e4bf7 Merge pull request #2202 from probins/tvformat
Add missing format option to TileVector docs
2014-06-16 11:03:43 +02:00
Andreas Hocevar
eb8c2ab339 Merge pull request #2203 from probins/classdesc
Add classdesc to remaining vector classes
2014-06-16 11:02:23 +02:00
Andreas Hocevar
0d59deb6ba Merge pull request #2206 from probins/nostatic
Remove static button in docs sidebar if none
2014-06-16 10:55:01 +02:00
Peter Robins
e4b5b3039a Remove static button in docs sidebar if none 2014-06-15 14:00:02 -04:00
Peter Robins
8a4307cff2 Add classdesc to remaining vector classes 2014-06-15 08:55:09 -04:00
Peter Robins
4a52333d9f Add missing format option to TileVector docs 2014-06-15 08:22:24 -04:00
Éric Lemoine
4f23ef66d0 Make ol.FeatureOverlay use replay group 2014-06-14 14:22:10 +02:00
Éric Lemoine
49a1215f75 Pass a replay group to ol.render.Event 2014-06-14 14:21:34 +02:00
Andreas Hocevar
4925ac9339 Merge pull request #2199 from probins/abstract
Add standard docs text to abstract base classes
2014-06-14 14:17:46 +02:00
Peter Robins
75be215497 Add standard docs text to abstract base classes 2014-06-14 07:20:33 -04:00
Tim Schaub
f1fe1a5ade Merge pull request #2197 from tschaub/deps
Update closure-util.
2014-06-13 23:51:58 -07:00
Tim Schaub
94f0513aa1 Update closure-util
The closure-util package works on Node 0.8, 0.10, and 0.11 (as of this writing), but it requires an updated version of npm to install on Node 0.8.  For the build to pass on Travis, we update npm before installing other dependencies.  For others who are installing the openlayers package, nothing special is required for Node 0.10 and above.  For users on Node 0.8, the openlayers package will only install with an updated version of npm.  This can be installed with npm itself.

    npm install -g npm # only needed on Node 0.8
2014-06-13 10:48:10 -07:00
Éric Lemoine
39a02f0d5a Merge pull request #2174 from elemoine/generate-info
Change sourceDir to src/ in generate-info.js
2014-06-12 15:48:09 +02:00
Andreas Hocevar
66d72519c3 Merge pull request #2191 from ahocevar/tile-function-annotation
Mark abstract method as function for JSDoc to pick it up
2014-06-12 15:03:52 +02:00
Andreas Hocevar
4eab46e41b Mark abstract method as function for JSDoc to pick it up
This leaves aside the question whether getImage needs to be
defined as abstract method in a base class that does not know
about images, but at least it makes the documentation appear
correctly in ol.tile.Image.
2014-06-12 14:43:49 +02:00
Frédéric Junod
44e829a17d Merge pull request #2188 from fredj/easing
Remove ol.easing.elastic and ol.easing.bounce
2014-06-12 13:43:05 +02:00
Frederic Junod
04cb3c4299 Remove ol.easing.elastic and ol.easing.bounce
And move the code to the animation example
2014-06-12 12:42:03 +02:00
Frédéric Junod
cd71b14775 Merge pull request #2173 from probins/sidebar
Remove olx and interfaces from docs sidebar
2014-06-12 11:02:29 +02:00
Frédéric Junod
a25067eccc Merge pull request #2157 from probins/loadstrat
Add docs link to loadingstrategy
2014-06-12 10:58:41 +02:00
Éric Lemoine
a2a06c745a Merge pull request #2185 from elemoine/imagevector
ol.source.ImageVector doesn't skip features
2014-06-11 17:42:49 +02:00
Frédéric Junod
54d5b25d77 Merge pull request #2186 from fredj/rbush-tests
Add more tests for ol.structs.RBush#forEach
2014-06-11 16:42:09 +02:00
Éric Lemoine
7a1e605f14 Skipped features support to ol.source.ImageVector 2014-06-11 16:26:21 +02:00
Frederic Junod
e9e62bcf98 Better ol.structs.RBush#forEach documentation 2014-06-11 13:45:18 +02:00
Frederic Junod
23383c9979 Add more tests for ol.structs.RBush#forEach 2014-06-11 13:45:18 +02:00
Andreas Hocevar
b411ccaa5b Merge pull request #2187 from ahocevar/fix-jsdoc
Manually add jsdoc dependencies
2014-06-11 13:04:21 +02:00
Andreas Hocevar
28d4e5a6c9 Manually add jsdoc dependencies
Looks like there is a version mismatch with the taffydb and
underscore dependencies of jsdoc, so we add them here manually.
2014-06-11 12:06:02 +02:00
Andreas Hocevar
90974a0721 Merge pull request #2184 from ahocevar/google-no-kinetic
Restore synchronized map panning in google-map example
2014-06-11 00:37:12 +02:00
Andreas Hocevar
c8c0f087f0 Restore synchronized map panning in google-map example 2014-06-10 16:11:40 +02:00
Éric Lemoine
f0dbcfd541 Merge pull request #2114 from tsauerwein/draw-and-modify
Add example combining draw and modify interaction
2014-06-10 10:00:27 +02:00
Antoine Abt
5926611cd1 Merge pull request #2168 from tonio/keyboard_controls
Restore control’s keyboard navigation
2014-06-10 08:45:19 +02:00
Andreas Hocevar
f27c91e27f Merge pull request #2130 from adube/fix-example-gmaps-zooms
Fix GoogleMaps example view max zoom levels
2014-06-09 22:22:34 +02:00
Paul Spencer
50b63b4a30 Merge pull request #2179 from pagameba/remove-getsimplifiedgeometry
Remove getSimplifiedGeometry from ol.geom.Circle
2014-06-09 16:10:02 -04:00
Paul Spencer
c1ddc92cc8 Fix typo in comment 2014-06-09 15:17:14 -04:00
Paul Spencer
7d8dbbc7cc Remove getSimplifiedGeometry from ol.geom.Circle
The `getSimplifiedGeometry` method is unnecessary as
`ol.geom.SimpleGeometry`'s default implementation is to do the
same thing (return `this`).
2014-06-09 14:37:39 -04:00
Tim Schaub
2a42e7736a Merge pull request #2178 from probins/classdesc
Use @classdesc notation.
2014-06-09 11:18:14 -06:00
Peter Robins
41d9f0360a Add @classdesc to classes 2014-06-09 12:10:19 -04:00
Éric Lemoine
be62e75714 Change sourceDir to src/ in generate-info.js
This is to accomodate the case where other directories than "ol" include "api" annotations. For example, the Swisstopo geoadmin folks extend OpenLayers 3 in an ol3 fork, and they have their own "ga" namespace/directory under "src". See https://github.com/geoadmin/ol3/tree/master/src.
2014-06-09 10:20:50 +02:00
Peter Robins
e08a98b624 Add classdesc to gjslint custom tags 2014-06-08 04:43:09 -04:00
Peter Robins
72dd59f554 Remove olx and interfaces from docs sidebar 2014-06-07 09:46:05 -04:00
Tim Schaub
ee38f8fc2f Merge pull request #2033 from htulipe/map-renderer-type
Expose map renderer type in the API.
2014-06-06 14:13:50 -06:00
tsauerwein
d0e818e8ce Add condition to draw interaction 2014-06-06 15:54:38 +02:00
tsauerwein
0a939c6554 Export condition singleClick and mouseOnly 2014-06-06 15:17:06 +02:00
tsauerwein
88197360c1 Add example combining draw and modify interaction 2014-06-06 15:17:06 +02:00
Peter Robins
acd03b0a46 Change @class docs tag to @classdesc 2014-06-06 05:28:24 -04:00
Frédéric Junod
70e3cb3598 Merge pull request #2170 from fredj/collection-item
Rename ol.Collection#getAt to ol.Collection#item
2014-06-06 10:13:46 +02:00
Frederic Junod
4525276c6e Rename ol.Collection#getAt to ol.Collection#item
TouchList, DOMStringList, DOMTokenList, NodeList all have an
`item(index)` function to retrieve an item from a list.
We should do the same.
2014-06-06 09:49:12 +02:00
Antoine Abt
09719bdc70 Fixes button handlers event type 2014-06-06 09:32:39 +02:00
Éric Lemoine
ba060ccc50 Merge pull request #2113 from GeoDienstenCentrum/improve-a11y-example
Enhance and improve the accessibility example
2014-06-05 14:27:14 +02:00
Éric Lemoine
afecbb7ea0 Merge pull request #2164 from oterral/sprite
Allow the use of sprite image in KML
2014-06-05 14:23:56 +02:00
oterral
b4851e7927 Add ol.format.KML test for complex IconStyle 2014-06-05 08:40:08 +02:00
oterral
2961970f59 Add ol.style.Icon tests for getAnchor and getOrigin 2014-06-05 08:40:00 +02:00
Antoine Abt
75cd5572aa Restore control’s keyboard navigation 2014-06-04 16:55:02 +02:00
Bart van den Eijnden
5645eab850 Merge pull request #2165 from bartvde/ie-xml-write
Make sure WFS format writing works correctly in IE9+ (r=@tschaub)
2014-06-04 15:03:56 +02:00
Bart van den Eijnden
87ea5fabdd Make sure WFS format writing works correctly in IE9+ 2014-06-04 12:29:24 +02:00
oterral
0b17d9aeb5 Add parsing of gx:x, gx:y, gx:w and gx:h tags in KML format 2014-06-04 11:15:13 +02:00
oterral
71951b8bbd Add offset and offsetOrigin in ol.style.Icon 2014-06-04 11:15:13 +02:00
Tim Schaub
38d8799a01 Merge pull request #2161 from tschaub/exports
Map event and vector source exports.
2014-06-03 16:29:18 -06:00
Tim Schaub
a9fc53e8da Make frameState property of ol.MapEvent exportable 2014-06-03 12:45:45 -06:00
Tim Schaub
0f04236fc4 Make map property of ol.MapEvent exportable 2014-06-03 12:45:03 -06:00
Tim Schaub
559feba1ed Add interface for map events so properties can be disambiguated 2014-06-03 12:43:45 -06:00
Tim Schaub
13d964488f Make getFeatureById method exportable 2014-06-03 11:42:47 -06:00
mprins
a6d26c53e1 Enhance and improve the accessibility example.
Changes to improve the accessibility example:

 - remove the `accesskey` attributes. Use of the `accesskey` is generally not recommended as it tends to cause conflicts with AT software and user settings.
 - Change the scripted "Go to map" accesskey to a regular skiplink.
 - Use script to inject the buttons below the map, if the map were to fail for lack of javascript support the buttons should not be there either. These should be buttons (and not hyperlinks) because they provide an action not a navigation.
 - Update the docs.
 - Add an empty `alt` attribute to the logo since it is strictly decorative (this should probably be done sitewide - which IMO is out of scope for this PR)
2014-06-03 09:28:43 +02:00
Peter Robins
474fc8f4a6 Add docs link to loadingstrategy 2014-06-02 09:58:04 -04:00
Éric Lemoine
73bfd326d0 Merge pull request #2156 from elemoine/featureoverlaytests
Add ol.FeatureOverlay tests
2014-06-02 14:16:47 +02:00
Éric Lemoine
0b4f463697 Merge pull request #2121 from oterral/utils_func_cache
Add getters and setters for TileUrlFunction and TileLoadFunction properties
2014-06-02 14:09:24 +02:00
Éric Lemoine
89a03bfb09 Merge pull request #2155 from probins/rendersync
Document Map.render() and Map.renderSync()
2014-06-02 14:08:44 +02:00
Éric Lemoine
85835a977b Add ol.FeatureOverlay tests 2014-06-02 14:05:06 +02:00
Peter Robins
17b4cea96d Document Map.render() and Map.renderSync() 2014-06-02 06:21:54 -04:00
Frédéric Junod
e5a522f484 Merge pull request #2133 from fredj/ol.ObjectEvent.key
Export ol.ObjectEvent#key property
2014-06-02 11:27:25 +02:00
oterral
f3be970f17 Add getTileLoadFunction and setTileLoadFunction in ol.source.TileImage 2014-06-02 11:23:53 +02:00
oterral
c4f7ebb571 Add getTileUrlFunction in ol.source.TileImage 2014-06-02 11:13:03 +02:00
Éric Lemoine
c4c05bd205 Merge pull request #2112 from elemoine/iconload
Icon image loading related exports
2014-06-02 08:25:45 +02:00
Éric Lemoine
dc3876e643 Merge pull request #2150 from probins/patch-1
Update year in LICENSE
2014-06-02 07:58:24 +02:00
Éric Lemoine
4981cde729 Add "img" option to ol.style.Icon 2014-06-02 07:56:34 +02:00
Peter Robins
0865f73448 Update year in LICENSE 2014-05-31 11:35:37 +01:00
Tim Schaub
3573697410 Merge pull request #2140 from probins/patch-3
Apidoc readme: clarify exportable methods.
2014-05-30 15:18:22 -06:00
Peter Robins
470ef992b7 Apidoc readme: clarify exportable methods 2014-05-30 12:13:19 -04:00
Tim Schaub
1013f8d2ba Merge pull request #2142 from tschaub/res-for-extent
Export method to get resolution for extent and size.
2014-05-29 15:18:23 -06:00
Tim Schaub
cda62c8a31 Merge pull request #2141 from probins/patch-5
Clarify compiler exports in tasks readme.
2014-05-29 13:00:18 -06:00
Tim Schaub
08ae509a7f Export method to get resolution for extent and size
While this is straightforward to calculate, this method adds convenience.
2014-05-29 11:21:31 -06:00
Peter Robins
c1037ad3ee Clarify compiler exports in tasks readme 2014-05-29 14:43:30 +01:00
Tim Schaub
ba004e9f10 Merge pull request #2139 from probins/patch-2
Improvements to externs readme.
2014-05-29 07:13:21 -06:00
Peter Robins
8dc3b95194 Improvements to externs readme 2014-05-29 11:21:42 +01:00
Bart van den Eijnden
b6e0195c9b Merge pull request #2137 from probins/patch-1
Clarify that ol.Coordinate is for xy coordinates
2014-05-28 20:04:44 +02:00
Peter Robins
2683f08bd2 Clarify that ol.Coordinate is for xy coordinates
Docs only; no logic change
2014-05-28 17:40:23 +01:00
Frédéric Junod
3bf1b36a72 Merge pull request #2119 from fredj/apidoc
Mark ol.format.GPX#readProjection as a function
2014-05-28 18:22:42 +02:00
Bart van den Eijnden
dd960b05c6 Merge pull request #2135 from bartvde/gml-write-export
Export ol.format.GML#writeFeatures
2014-05-28 18:16:53 +02:00
Bart van den Eijnden
409ef2d19a Export ol.format.GML#writeFeatures 2014-05-28 16:28:06 +02:00
Frédéric Junod
1d2543ba6f Merge pull request #2134 from fredj/jsdoc-extent
Add the jsdoc ol.extent namespace
2014-05-28 10:20:47 +02:00
Frederic Junod
c4d7fd8137 Add the jsdoc ol.extent namespace 2014-05-28 09:47:49 +02:00
Frederic Junod
b3de1b927a Export ol.ObjectEvent#key property 2014-05-28 09:18:59 +02:00
Hadrien Tulipe
0bae61ffe3 Rename Map.DEFAULT_RENDER_HINTS to Map.DEFAULT_RENDERER_TYPES 2014-05-27 22:47:02 +02:00
Hadrien Tulipe
7aab28afcc Provide ol.RendererType structure through ol.renderer.Map
It was previously in ol.Map, but it could not be provided because
of circular dependencies.
2014-05-27 22:47:02 +02:00
Hadrien Tulipe
2e587c1be8 Rename ol.RendererHint to ol.RendererType 2014-05-27 22:47:02 +02:00
Hadrien Tulipe
1d6f9ca80b Expose the map renderer type to the public API
In the case  where the map decides itself which renderer to use. It can
be convenient for the developer to have knowledge of the choice made.
2014-05-27 22:47:02 +02:00
Alexandre Dubé
2e067c67e5 Fix GoogleMaps example view max zoom levels 2014-05-27 14:44:15 -04:00
Éric Lemoine
d9c5e0c1ba Merge pull request #2127 from elemoine/2126
Fix bug in ol.FeatureOverlay
2014-05-27 16:51:58 +02:00
Éric Lemoine
afce8e8f5f Fix bug in ol.FeatureOverlay
This fixes a major regression introduced by db5b443 (#2028), where the FeatureOverlay won't draw features that do not have an image style.
2014-05-27 16:22:37 +02:00
Andreas Hocevar
cc1b7cac48 Merge pull request #2125 from ahocevar/loadingstrategy-docs
Make loading strategies appear in the docs
2014-05-27 15:59:10 +02:00
Bart van den Eijnden
0989f75e34 Merge pull request #2124 from bartvde/gmlwfs
readFeatures on ol.format.WFS is not exported (r=@fredj)
2014-05-27 15:42:31 +02:00
Frédéric Junod
fb955ace0c Merge pull request #2123 from fredj/export-osmxml
Export ol.format.OSMXML#readFeatures and ol.format.OSMXML#readProjection
2014-05-27 15:40:35 +02:00
Andreas Hocevar
45805f7158 Make loading strategies appear in the docs 2014-05-27 15:38:31 +02:00
Bart van den Eijnden
86b9a8869b Exports for ol.format.GML and ol.format.WFS 2014-05-27 15:30:46 +02:00
Frederic Junod
8db43a969b Fix formating issue in doc 2014-05-27 15:05:34 +02:00
Frederic Junod
2bd1234359 Export ol.format.OSMXML#readProjection 2014-05-27 14:31:27 +02:00
Frederic Junod
4c9463cdcc Export ol.format.OSMXML#readFeatures 2014-05-27 14:31:27 +02:00
Éric Lemoine
ac934c4564 Merge pull request #2028 from oterral/immediate_icon
Load the icon when needed in feature overlay
2014-05-27 14:09:52 +02:00
Bart van den Eijnden
27712a902d Merge pull request #2120 from bartvde/workshop
Move workshop reference to doc index
2014-05-27 13:53:49 +02:00
Bart van den Eijnden
bf8e949955 Move workshop reference to doc index 2014-05-27 09:17:52 +02:00
oterral
db5b443bbd Load the icon when needed in ol.FeatureOverlay 2014-05-27 09:17:38 +02:00
Frederic Junod
47f99f64ef Mark ol.format.GPX#readProjection as a function 2014-05-27 08:30:48 +02:00
Andreas Hocevar
7732a10bbf Merge pull request #2116 from ahocevar/no-imagestyle
Do not make ol.style.Image exportable
2014-05-27 08:02:51 +02:00
Tim Schaub
d41e2dff14 Merge pull request #2115 from tschaub/duplicate-id
Give features unique identifiers.
2014-05-26 16:15:15 -06:00
Andreas Hocevar
605b8278ea Do not make ol.style.Image exportable
Application developers should use its subclasses.
2014-05-26 19:26:58 +02:00
Tim Schaub
9323bbdcd0 Give Somaliland and Northern Cyprus unique ids 2014-05-26 10:31:27 -06:00
Frédéric Junod
c273c1d51c Merge pull request #2019 from fredj/device-orientation-example
Add an extent constraint to the device-orientation example
2014-05-26 13:54:56 +02:00
Frederic Junod
c15987a14d Add constrainCenter documentation 2014-05-26 13:44:01 +02:00
Frederic Junod
ff1a9d420d Add an extent constraint to the device-orientation example 2014-05-26 13:37:33 +02:00
Frederic Junod
824302349d Export ol.View2D.prototype.constrainCenter function 2014-05-26 13:37:33 +02:00
Éric Lemoine
b14e0d0330 Merge pull request #2111 from probins/patch-1
Tasks readme: update url for new compiler FAQ
2014-05-25 19:36:18 +02:00
Peter Robins
a0cfdb1990 Tasks readme: update url for new compiler FAQ
As changed on closure-util https://github.com/openlayers/closure-util/pull/17 - just realised this link is here too.
2014-05-25 17:39:23 +01:00
Éric Lemoine
8cd5f6d642 Merge pull request #2109 from elemoine/visibleandinrange
Hit detection respects min and maxResolution
2014-05-25 14:43:44 +02:00
Éric Lemoine
fd8a46dcae Hit detection respects min and maxResolution 2014-05-25 14:35:07 +02:00
Tim Schaub
df5b41862b Merge pull request #2110 from probins/patch-1
Apidoc readme: minor change.
2014-05-24 09:50:49 -06:00
Peter Robins
2aa97957cc Apidoc readme: minor change
so comments rendered correctly
2014-05-24 12:40:45 +01:00
Tim Schaub
92d8dd918b Merge pull request #2087 from tschaub/id-index
Add method for retrieving features by id.
2014-05-23 17:05:11 -06:00
Tim Schaub
a2b81d6bd0 Disallow adding the same feature twice 2014-05-23 16:52:11 -06:00
Tim Schaub
652f11cefa Provide a method for retrieving features by id 2014-05-23 16:35:07 -06:00
Tim Schaub
34cabd1579 Dispatch change on feature id change 2014-05-23 16:35:06 -06:00
Tim Schaub
305e9b0df1 Merge pull request #2107 from tschaub/null-or-undef
Account for null or undefined geometry.
2014-05-23 16:30:33 -06:00
Tim Schaub
2898151206 Merge pull request #2108 from tschaub/simple
Remove simple build profile.
2014-05-23 12:26:11 -06:00
Tim Schaub
25aefbeff5 Remove simple build profile
This was inadvertently added in d163f60e34 (see #2075).  Thanks @probins for the heads up.
2014-05-23 10:20:24 -06:00
Tim Schaub
097909516a Account for null or undefined geometry
The change in #2098 made it so a feature's geometry could be undefined.  This is consistent with the return type for the getGeometry method.  Where calling code needs to ensure that it has a geometry instance, it can use instanceof, goog.isDefAndNotNull(), or test for a truthy value.
2014-05-23 10:00:15 -06:00
Andreas Hocevar
0e7f86ea17 Merge pull request #2072 from ahocevar/no-oli-docs
Do not include oli.* symbols in the API documentation
2014-05-23 10:52:49 +02:00
Andreas Hocevar
f903849882 Remove all docstrings from oli.js
Instead, make sure that the properties are documented in the
implementing class.
2014-05-22 18:00:10 +02:00
Andreas Hocevar
547334e211 Move oli.* stability notes to the corresponding ol.* symbol 2014-05-22 16:01:35 +02:00
Andreas Hocevar
2caa1139a1 Move object literals defined in ol3 to a separate section 2014-05-22 15:51:41 +02:00
Andreas Hocevar
08cdeaacb4 Clean up api.js 2014-05-22 15:51:21 +02:00
Andreas Hocevar
eb6a938062 Do not document object literals as interfaces
Instead, object literals with properties that should not be
renamed can go in externs/olx.js.
2014-05-22 15:48:47 +02:00
Andreas Hocevar
e050c905e2 Do not include oli.* symbols in the inheritance chain 2014-05-22 15:48:46 +02:00
Tim Schaub
81523091f0 Merge pull request #2099 from tschaub/update-deps
Update dependencies.
2014-05-21 15:04:39 -06:00
Tim Schaub
be03ec5aa1 Update dependencies
* closure-util@0.12.0 - force inclusion of deps.js files when compiling
 * jshint@2.5.1 - various enhancements and fixes (https://github.com/jshint/jshint/compare/2.4.4...2.5.1)
 * walk@2.3.3 - directory exclusion fix
2014-05-21 12:08:46 -06:00
Bart van den Eijnden
db35a85710 Merge pull request #2090 from bartvde/wfs-update
Create valid XML in ol.format.WFS and ability to specify srsName (r=@ahocevar)
2014-05-21 19:04:05 +02:00
Bart van den Eijnden
28d122e21e Write out valid WFS Transaction XML and ability to specify srsName 2014-05-21 17:58:53 +02:00
Tim Schaub
98193c0336 Merge pull request #2098 from tschaub/empty-feature
Do not set geometry by default.
2014-05-21 09:52:09 -06:00
Frédéric Junod
9e7bfda9f7 Merge pull request #2096 from fredj/unused-require
Remove unused goog.require
2014-05-21 17:36:29 +02:00
Tim Schaub
9341e98374 Merge pull request #2093 from bjornharrtell/fix_opt_dest2
Assign to provided array instead of pushing when getting a linestring midpoint.
2014-05-21 09:28:06 -06:00
Bart van den Eijnden
a36bffae49 Merge pull request #2097 from bartvde/geojson-geometryname
Ability to specify geometryName on ol.format.GeoJSON (r=@tschaub)
2014-05-21 17:26:02 +02:00
Tim Schaub
a4d31147bc Do not set geometry by default
A feature can have a geometry whose value is an ol.geom.Geometry instance or null.  A feature can also have no geometry property.  By default, a feature has no geometry property.  To set a geometry, one can be passed to the constructor (including null) or passed to setGeometry().
2014-05-21 09:16:54 -06:00
Bart van den Eijnden
8eef633abc Ability to specify geometryName on ol.format.GeoJSON 2014-05-21 16:44:18 +02:00
Frederic Junod
2f918ea2a4 Remove unused goog.require 2014-05-21 16:06:32 +02:00
Andreas Hocevar
dca88668ab Merge pull request #2095 from ahocevar/test-geometry-name
Test that a custom geometry works
2014-05-21 15:08:47 +02:00
Andreas Hocevar
e530758b36 Test that a custom geometry works 2014-05-21 15:08:11 +02:00
Andreas Hocevar
cabd436b4c Merge pull request #2082 from ahocevar/custom-exports-target
Allow to specify an objectToExportTo for goog.exportSymbol
2014-05-21 13:51:52 +02:00
Tim Schaub
c820a7a1f8 Additional doc for the namespace option
People should be discouraged from exporting to single letter namespaces to avoid collissions with the symbols generated by the compiler.
2014-05-21 13:22:40 +02:00
Tim Schaub
250f6901d3 Pass around single config object 2014-05-21 13:22:32 +02:00
Björn Harrtell
ce40a142fa opt_dest should be assigned to not pushed 2014-05-21 12:02:26 +02:00
Frédéric Junod
32b17642c1 Merge pull request #2092 from fredj/unused-require
Remove unused goog.require
2014-05-21 11:36:16 +02:00
Frederic Junod
b2ab73e78b Remove unused goog.require 2014-05-21 09:46:49 +02:00
Frédéric Junod
c4e729a2bd Merge pull request #2086 from fredj/apidoc
Document ol.coordinate functions
2014-05-21 09:04:45 +02:00
Andreas Hocevar
3447f93bfe Document the new namespace option 2014-05-20 21:56:32 +02:00
Andreas Hocevar
cd4092f3e0 Allow to specify an objectToExportTo for goog.exportSymbol
This allows users to build ol3 without anything exposed in the
global namespace. This can e.g. be useful for creating an ol3
AMD module, by simply using a build configuration with
"define('ol',function(){var o={};%output%return o.ol;});" as
"output_wrapper".
2014-05-20 21:49:26 +02:00
Frederic Junod
8239a5c92a Document ol.coordinate functions 2014-05-20 14:15:28 +02:00
Frederic Junod
ae7291d9f1 Add the jsdoc ol.coordinate namespace 2014-05-20 13:58:17 +02:00
Éric Lemoine
832371b2aa Merge pull request #2083 from elemoine/missinganotation
Add missing @param annotation
2014-05-19 16:28:32 +02:00
Éric Lemoine
9b7735bf92 Add missing @param annotation 2014-05-19 15:43:38 +02:00
Tim Schaub
e17c8c79f9 Merge pull request #2079 from tschaub/view-options
Support zoom and resolution constrained views.
2014-05-16 11:26:09 -06:00
Tim Schaub
3793f33acf Handle minZoom in getZoom and setZoom 2014-05-16 04:56:42 -06:00
Andreas Hocevar
6185005c3f Merge pull request #2077 from ahocevar/event-stability
Document event stability even when there is no description
2014-05-16 10:03:30 +02:00
Tim Schaub
815f5b38c8 Accept resolution or zoom related options for constrained views
Any of minResolution, maxResolution, minZoom, or maxZoom can be used to constrain the view resolutions.  Resolution options are given precedence over zoom options.
2014-05-15 17:31:55 -06:00
Andreas Hocevar
aaf21198d3 Document event stability even when there is no description 2014-05-15 23:02:01 +02:00
Andreas Hocevar
c70497856c Merge pull request #2075 from ahocevar/api-docs-improved
More API doc improvements
2014-05-15 22:35:53 +02:00
Andreas Hocevar
687abda9fb Need to be more specific about the coordinate format now. 2014-05-15 20:56:09 +02:00
Andreas Hocevar
b348a4f8f9 Add some margin between the 'static' tag and the name 2014-05-15 20:29:46 +02:00
Andreas Hocevar
d163f60e34 Make sure that opt_layout is listed as optional 2014-05-15 20:29:16 +02:00
Andreas Hocevar
b2805c58de Better document which events are fired
The map does not fire ol.render.Event#render. Change events are
now only listed for classes that fire them, and a description
about when they are fired is added.
2014-05-15 20:28:09 +02:00
Andreas Hocevar
a75d944311 Allow custom events and do not collect events from methods 2014-05-15 20:25:26 +02:00
Andreas Hocevar
0d10314d4f Make sure that ol.source.wms.ServerType is documented 2014-05-15 17:06:19 +02:00
Andreas Hocevar
97bae045db Fix documentation typos 2014-05-15 17:05:40 +02:00
Andreas Hocevar
754ef24b0c List default controls and interactions 2014-05-15 17:04:58 +02:00
Andreas Hocevar
b2554cab41 Mark optional and repeatable arguments 2014-05-15 16:58:13 +02:00
Andreas Hocevar
fc88db53f6 Make types look the same everywhere 2014-05-15 16:57:47 +02:00
Andreas Hocevar
720052de12 New landing page 2014-05-15 16:54:33 +02:00
Bart van den Eijnden
3384ba07e3 Merge pull request #2074 from bartvde/touch
Restore map interaction on touch devices
2014-05-15 15:58:38 +02:00
Bart van den Eijnden
83ce0b2c7f Restore map interaction on touch devices 2014-05-15 15:29:41 +02:00
Frédéric Junod
92a7f9112c Merge pull request #2073 from fredj/named-colors
Change ol.ENABLE_NAMED_COLORS to be false by default
2014-05-15 11:02:34 +02:00
Frederic Junod
b42f4e1b0c Change ol.ENABLE_NAMED_COLORS to be false by default 2014-05-15 08:59:47 +02:00
Frederic Junod
84390da2e4 Rename ol.color.ENABLE_NAMED_COLORS in tests 2014-05-15 08:59:02 +02:00
Tim Schaub
9874f502ab Merge pull request #2071 from tschaub/doc
Minor doc content and style updates.
2014-05-14 18:28:54 -06:00
Tim Schaub
049531831c Move stability and inherited indicators after names 2014-05-14 16:27:30 -06:00
Tim Schaub
8fbf67b7e6 Remove space between ol. and Name 2014-05-14 16:26:44 -06:00
Tim Schaub
3a0efe83c5 Update map example 2014-05-14 15:11:12 -06:00
Tim Schaub
f559963126 Merge pull request #2063 from tschaub/moveend
Fire moveend only once after view settles.
2014-05-14 14:58:06 -06:00
Andreas Hocevar
81a85fe0e2 Merge pull request #2061 from eshon/master
Some suggested color changes to apidoc template items
2014-05-14 22:45:21 +02:00
Eva Shon
b8cef60036 Update main.less 2014-05-14 16:43:26 -04:00
Eva Shon
55b273686a Update main.less 2014-05-14 16:41:57 -04:00
Tim Schaub
df05e9da11 Fire moveend only once after view settles 2014-05-14 14:23:31 -06:00
Tim Schaub
2d34d04113 Merge pull request #2070 from tschaub/concatenate
Support for debug builds (concatenation only).
2014-05-14 13:48:44 -06:00
Andreas Hocevar
3a8aaea6c7 Merge pull request #2068 from ahocevar/apidoc-imprved
Only document arguments of exported constructors
2014-05-14 21:08:17 +02:00
Tim Schaub
c3184f2cce Support for debug builds (concatenation only)
Whitespace builds are still painful to debug.  Skipping the compiler altogether and simply concatenating sources is a better option for development and debugging.  By ommitting the `compile` option in a build config, the output is "uncompiled" - a straight concatenation of all sources in dependency order.
2014-05-14 10:39:51 -06:00
Andreas Hocevar
a613e01677 Only document arguments of exported constructors 2014-05-14 09:06:26 +02:00
Tim Schaub
ab9d42f2cd Merge pull request #2067 from tschaub/touches
Do less work while processing touch events.
2014-05-14 01:05:22 -06:00
Tim Schaub
9f047b791c Merge pull request #2066 from tschaub/phantom
Remove PhantomJS as a global dependency.
2014-05-14 00:52:26 -06:00
Bart van den Eijnden
28f21e44c1 Merge pull request #2059 from bartvde/draw-geometryname
Add geometryName option to ol.interaction.Draw (r=@elemoine)
2014-05-14 08:51:59 +02:00
Bart van den Eijnden
945f5008f5 Ability to specify geometryName on ol.interaction.Draw 2014-05-14 08:35:27 +02:00
Tim Schaub
4c8ba1bac6 Remove PhantomJS as a global dependency 2014-05-14 00:03:58 -06:00
Tim Schaub
abf35898ca Merge pull request #2064 from tschaub/restore-timer
Restore setTimeout after it is mocked.
2014-05-13 23:18:44 -06:00
Tim Schaub
b860ec7a06 Do less work while processing touch events 2014-05-13 23:06:27 -06:00
Tim Schaub
7709d26955 Restore setTimeout after it is mocked 2014-05-13 22:44:36 -06:00
Tim Schaub
3db28c2af6 Merge pull request #2065 from tschaub/global-leak
Properly reset the click count in ol.pointer.TouchSource.
2014-05-13 22:38:30 -06:00
Tim Schaub
57a6fbf416 Call resetClickCountHandler_ with proper this argument 2014-05-13 17:41:58 -06:00
Eva Shon
b4d316f224 some suggested color changes to template items 2014-05-13 13:25:07 -04:00
Bart van den Eijnden
86013c3a78 Merge pull request #2058 from bartvde/wfs-transaction-srs
no way to set srsName on WFS transactions (r=@ahocevar)
2014-05-13 13:20:30 +02:00
Bart van den Eijnden
0a3031a165 Ability to specify gmlOptions (e.g. srsName) in WFS transactions 2014-05-13 13:10:18 +02:00
Bart van den Eijnden
6ab92086d2 Merge pull request #2057 from bartvde/addfeatures
Export readFeatures on FormatVectorSource
2014-05-12 12:55:21 +02:00
Bart van den Eijnden
4780d17059 Export readFeatures on FormatVectorSource 2014-05-12 10:37:41 +02:00
Éric Lemoine
e97639590b Merge pull request #2055 from elemoine/icon-hidpi
Fix icon rendering on hidpi devices
2014-05-10 09:18:05 +02:00
Andreas Hocevar
efdf05f0d1 Merge pull request #2051 from ahocevar/fix-returns
Apidoc: first word of '@return' not displayed
2014-05-09 10:43:28 -05:00
Andreas Hocevar
90ffde52f2 Make sure that links are clickable
Because we set a padding of 50px on anchorable elements to make
sure they are not obscured by the header, we need to raise the
z-index of links so they are not obscured by these paddings.
2014-05-09 10:03:17 -05:00
Andreas Hocevar
f95e23deeb Do not hide the first word of returns 2014-05-09 10:02:13 -05:00
Éric Lemoine
6758e0905b Fix icon rendering on hidpi devices 2014-05-09 08:44:23 +02:00
Frédéric Junod
164922bd5f Merge pull request #2052 from fredj/apidoc
apidoc: display the event name in lower case
2014-05-09 07:38:20 +02:00
Frederic Junod
1b6a317bf9 Lower case the event name 2014-05-08 17:12:29 +02:00
Frédéric Junod
4e6e835c0e Merge pull request #2050 from fredj/has_webgl
Export ol.BrowserFeature.HAS_WEBGL
2014-05-08 09:53:13 +02:00
Frederic Junod
e1436b25e0 Export ol.BrowserFeature.HAS_WEBGL 2014-05-08 08:57:29 +02:00
Éric Lemoine
a189c4a68a Merge pull request #2047 from elemoine/snaptopixel
Set snapToPixel to true by default
2014-05-07 23:02:09 +02:00
Andreas Hocevar
354a93b2f7 Merge pull request #2049 from ahocevar/anchor-line-numbers
Fix anchor offsets for line numbers
2014-05-07 15:05:22 -05:00
Andreas Hocevar
564d3cda12 Fix anchor offsets for line numbers 2014-05-07 15:01:48 -05:00
Éric Lemoine
c0c6f286e0 Merge pull request #2048 from elemoine/duplicate
Remove duplicate record field "duration" in olx.js
2014-05-07 20:09:35 +02:00
Éric Lemoine
2b8f2517bd Remove duplicate record field "duration" in olx.js 2014-05-07 18:30:46 +02:00
Éric Lemoine
8610a91ea9 Set snapToPixel to false in dynamic-data example 2014-05-07 18:01:24 +02:00
Andreas Hocevar
be73885e37 Merge pull request #2043 from ahocevar/nicer-api-docs
Nicer API docs
2014-05-07 09:20:22 -05:00
Andreas Hocevar
0d4c7dc1fc Better match the ol3 color theme 2014-05-07 08:40:02 -05:00
Éric Lemoine
511e3f7810 Avoid defining default values at multiple locations 2014-05-07 09:58:56 +02:00
Éric Lemoine
6cd403945a Set snapToPixel defaut value to true 2014-05-07 09:58:56 +02:00
Andreas Hocevar
c57e9dc047 Better readable color for type links 2014-05-06 14:12:38 -05:00
Andreas Hocevar
e2c9dd279d Switch to the Jaguar theme
In addition to a nicer layout, this adds a searchable sidebar
and a source code viewer.
2014-05-06 12:46:59 -05:00
Andreas Hocevar
e6dbb61d68 Document raw geometry types 2014-05-06 12:45:53 -05:00
Andreas Hocevar
3f2f7e3603 Fix indentation 2014-05-06 12:45:53 -05:00
Andreas Hocevar
436bbdecd0 Document ol.Pixel 2014-05-06 12:45:53 -05:00
Éric Lemoine
596e06ed4e Merge pull request #2042 from elemoine/circle
Use correct circle canvas size
2014-05-06 18:37:31 +02:00
Andreas Hocevar
959e14c31a Handle observables and fires augments in plugins
This makes it easier to switch themes.
2014-05-06 10:14:28 -05:00
Éric Lemoine
18d292edd7 Make check-example.js display console logs from page 2014-05-06 16:38:55 +02:00
Éric Lemoine
c974612cc5 Use actual circle canvas size 2014-05-06 16:38:07 +02:00
Antoine Abt
a51e834fef Merge pull request #2027 from tonio/rotate
Add a rotate control
2014-05-06 15:36:01 +02:00
Andreas Hocevar
c2a9e95a37 Make sure anchors are not obscured by the header 2014-05-05 12:40:48 -05:00
Tim Schaub
454fc873f6 Merge pull request #2039 from tschaub/defines
Add info on defines to general build metadata.
2014-05-05 09:07:12 -07:00
Andreas Hocevar
5f54b45fa2 Add readme note about observable properties 2014-05-05 09:52:32 -05:00
Tim Schaub
d069f955f8 Document boolean defines as positive assertions 2014-05-05 07:41:53 -07:00
Tim Schaub
070f81aa7d Add description to symbols and defines 2014-05-05 07:41:53 -07:00
Tim Schaub
f9157a6123 Rename generate-symbols.js to generate-info.js
This task generates build related metadata for the library based on doc annotations.  Since it is about more than writing out exportable symbols, it makes sense to have a more general name.
2014-05-05 07:41:47 -07:00
Andreas Hocevar
61b732b8f7 Make sure that parent classes are not marked undocumented 2014-05-05 09:40:28 -05:00
Andreas Hocevar
b1126c9373 Inline events and also list method events with the class 2014-05-05 09:35:33 -05:00
Tim Schaub
48828a238a Generate metadata for boolean defines in addition to exportable symbols 2014-05-05 07:14:23 -07:00
Éric Lemoine
28e94b33ac Merge pull request #2040 from elemoine/iconsprite
Ability to use sprites as Icon src
2014-05-05 11:41:50 +02:00
Éric Lemoine
a7aab4eb47 Make Immediate API use ol.style.Image "origin" 2014-05-05 09:56:12 +02:00
Éric Lemoine
562d74dbed Make Replay API use ol.style.Image "origin" 2014-05-05 09:55:58 +02:00
Éric Lemoine
a62fd53d36 Add "origin" option to ol.style.Image 2014-05-05 09:30:35 +02:00
Andreas Hocevar
52444b1366 Inherit events 2014-05-04 18:29:18 -05:00
Andreas Hocevar
b444714c55 No longer need to remove dead links
There should be no dead links any more, now that we include
doclets for the whole inheritance chain of a class.
2014-05-04 18:28:19 -05:00
Andreas Hocevar
ea5df18c72 Remove unused require 2014-05-04 14:51:06 -05:00
Andreas Hocevar
8ee9f7cb6a Simplify the way we annotate observable properties
We no longer add observable annotations to the constructor.
Instead, we just mark getters (and for read/write properties
also setters) with an observable annotation.
2014-05-03 16:04:25 -04:00
Andreas Hocevar
0f072c0ec1 List subclasses for each class
With this change, we no longer need to link to implementations
or subclasses manually.
2014-05-03 15:32:39 -04:00
Andreas Hocevar
db5b2e284a Do not remove classes that other classes inherit from 2014-05-03 12:41:52 +02:00
Andreas Hocevar
6cea9a9d9a Avoid dead links
Because we remove doclets that are not part of the API, there
are cases where linkto will create a link to an undocumented
doclet. We now replace such links with the longname of the
doclet.
2014-05-03 12:41:52 +02:00
Tim Schaub
29d71b34b2 Merge pull request #2036 from tschaub/transform
More convenient geometry transforms.
2014-05-02 13:52:47 -06:00
Tim Schaub
0b8f1e8944 Mark applyTransform as part of the API for all geometries 2014-05-02 13:24:04 -06:00
Tim Schaub
1ba084ceab Merge pull request #2035 from tschaub/imprecision
Reducing expectations about spherical interpolation precision.
2014-05-02 12:10:40 -06:00
Tim Schaub
e448f100fd Add a transform method to geometries
This accepts CRS identifiers for source and destination, transforms the geometry in place, and returns a reference to the geometry.
2014-05-02 11:47:59 -06:00
Tim Schaub
1110da37e1 Move ol.Sphere#circle to ol.geom.Polygon.circular
Previously, ol.geom.Polygon was a transitive dependency of ol.proj (since ol.proj requires ol.sphere.NORMAL, and all spheres were capable of generating circular polygons).  Instead, ol.proj should be lower-level.  Since it deals only with coordinate arrays, it shouldn't depend on all of the geometry code.

By adding a static `circular` function to `ol.geom.Polygon`, the dependency tree makes more sense.  If you want to create a polygon that approximates a circle on a sphere, you require `ol.geom.Polygon` and `ol.Sphere` (or one of the constants).

This makes room for geometries to have a `transform` method that takes projection-like arguments (meaning that `ol.geom.Geometry` will require `ol.proj`).
2014-05-02 11:25:44 -06:00
Tim Schaub
f66ad1253f Reducing expectations about spherical interpolation precision
This avoids test failures in Chrome 34 (see also #1748 and https://code.google.com/p/v8/issues/detail?id=3006).
2014-05-02 10:23:03 -06:00
Tim Schaub
015aab8af3 Rename ol.extent.transform to ol.extent.applyTransform
This gives more consistency with ol.proj.applyTransform, allowing us to add a more convenient ol.extent.transform method that takes projection-like arguments.
2014-05-02 10:13:28 -06:00
Tim Schaub
a4f1efbddb Add tests for geometry applyTransform method 2014-05-02 09:58:23 -06:00
Tim Schaub
4f9968d106 Rename transform to applyTransform for geometries 2014-05-02 09:27:53 -06:00
Antoine Abt
603be52b1a Remove useless test in default controls 2014-05-02 14:12:31 +02:00
Antoine Abt
0bec5b5590 Add base control class, to simplify stylesheet 2014-05-02 14:12:31 +02:00
Antoine Abt
04fd0ecf53 Add rotate control to defaults. 2014-05-02 14:12:31 +02:00
Antoine Abt
229ae5e883 Add rotate control
- displayed when rotation ≠ 0
 - reset rotation on click
2014-05-02 14:12:31 +02:00
Andreas Hocevar
5a13488b11 Stop adding ObjectEvent links manually
Now that the links are removed from event annotations, we no
longer need to do this, because inheritance works.
2014-05-02 12:06:48 +02:00
Andreas Hocevar
b7f6e2d9b9 Fix quotes 2014-05-02 12:06:48 +02:00
Andreas Hocevar
d6722ddc6f Mark undocumented doclets as undocumented
To give other plugins access to doclets that are not part of
the API, we have to mark them undocumented instead of removing
them. They will be removed by JSDoc before publishing anyway.
2014-05-02 12:06:48 +02:00
Andreas Hocevar
7b4c240a5a Merge pull request #2004 from ahocevar/bind-webgl
Bind input example is broken since default renderer has changed
2014-05-02 11:08:32 +02:00
Frédéric Junod
0cd33ebfe9 Merge pull request #1926 from fredj/cache-anchor
Compute anchor value only once
2014-05-01 23:23:18 +02:00
Andreas Hocevar
8e387f385a Add missing namespace annotation 2014-05-01 22:17:57 +02:00
Andreas Hocevar
e7e1ef7534 Show inherited observable properties 2014-05-01 22:17:57 +02:00
Andreas Hocevar
25dd0127e9 Recursively document subparams and span table columns 2014-05-01 22:17:57 +02:00
Andreas Hocevar
7271b50d5a Simplify fires annotations 2014-05-01 22:17:56 +02:00
Andreas Hocevar
f22aac1e22 Only use the inheritdoc plugin once 2014-05-01 22:17:56 +02:00
Frédéric Junod
2e9cad730d Merge pull request #2032 from fredj/require
Remove unneeded goog.require
2014-05-01 17:10:30 +02:00
Frederic Junod
c0d8fe4126 Remove unneeded goog.require 2014-05-01 13:41:16 +02:00
Tim Schaub
0c8f29c432 Merge pull request #2031 from tschaub/dependencies
Move modules used in post-install task to dependencies.
2014-04-30 18:07:49 -06:00
Tim Schaub
f8e6fac90e Modules used in postinstall are dependencies
Since async and htmlparser2 are used by the postinstall task, they need to be listed as dependencies.  These will get installed when ol3 is a dependency of another project.
2014-04-30 17:54:39 -06:00
Tim Schaub
0d8c11394d Merge pull request #2030 from tschaub/defines
Move defines to ol namespace.
2014-04-30 17:13:10 -06:00
Tim Schaub
24498fa9d0 Defines in a namespace that can be required
For consistency, all defines are in the ol namespace.  If they are to be moved to another namespace, they need to be requireable.
2014-04-30 09:14:10 -06:00
Tim Schaub
e4e3b2229a Defines in ol namespace defined in ol.js 2014-04-30 08:54:30 -06:00
Tim Schaub
cec41c4b0a Add missing requires
Without explicit requires, it is possible that a build would exclude ol.js.
2014-04-30 08:37:52 -06:00
Tim Schaub
3f0da11008 Move ol defines from browserfeature.js to ol.js 2014-04-30 08:24:00 -06:00
Tim Schaub
12d4cb5752 Merge pull request #1979 from tschaub/custom-build
Annotation for exportable methods.  Node based tasks for generating exports and a custom build.

Fixes #613.
2014-04-29 13:01:52 -06:00
Tim Schaub
193d5c9ac1 Rename EXTERNAL_SRC to EXPORTS
The build/exports.js file passes gjslint and jshint, so the separate linting task is not needed.
2014-04-29 09:57:25 -06:00
Tim Schaub
a083c6149a No more generated internal source
With this change, the only two remaining generated scripts are build/exports.js and build/test/requireall.js.  Both are only required by Plovr.  With the Node based build task, a temporary exports.js file is created.  The Node based server can be used to run the tests without build/test/requireall.js.
2014-04-29 09:57:25 -06:00
Tim Schaub
9b4f61be3e No need for requireall.js when including exports.js 2014-04-29 09:57:25 -06:00
Tim Schaub
d552dfd96d Making ol.proj.Projection subclasses exportable
Because ol.proj.EPSG4326 et al. extend ol.proj.Projection which has exportable methods, these constructors need to be exportable as well (e.g. so ol.proj.EPSG4326.prototype is defined in exports.js when calling goog.exportProperty on getCode etc.).  If we really don't want these to be exportable, they should be removed or made private (and named like ol.proj.EPSG4326_) for internal use only.
2014-04-29 09:57:25 -06:00
Tim Schaub
ec6aa21912 Include goog.require calls in exports file 2014-04-29 09:57:25 -06:00
Tim Schaub
d087fdbefd Add list of provides to symbol metadata 2014-04-29 09:57:25 -06:00
Tim Schaub
fd170eb295 Accept a path for exports file 2014-04-29 09:57:19 -06:00
Tim Schaub
3dd5fb88e5 Allow configuration of JVM arguments in build 2014-04-29 09:53:07 -06:00
Andreas Hocevar
fbdbbfb7a7 Get rid of stability annotations and document stability with api
This change adds a stability value to the api annotation, with
'experimental' as default value.

enum, typedef and event annotations are never exportable, but
api annotations are needed there to make them appear in the
docs.

Nested typedefs are no longer inlined recursively, because the
resulting tables get too wide with the current template.
2014-04-29 09:53:07 -06:00
Andreas Hocevar
29b643c7b0 Inline object literals from olx.js 2014-04-29 09:53:07 -06:00
Andreas Hocevar
cdd1922350 Document purpose and use of oli.js and olx.js 2014-04-29 09:53:06 -06:00
Andreas Hocevar
c17ac0cae3 Greatly simplify and document the usage of JSDoc
This commit simplifies the exports.js plugin so it only relies
on the stability notes to generate the documentation, which
completely decouples it from the exportable API.

As a rule of thumb, whenever something has an 'api' annotation,
it should also have a 'stability' annotation. A more verbose
documentation of ol3 specific annotation usage is available in
the new 'apidoc/readme.md' file.

This commit also modifies all source files to implement these
usage suggestions.
2014-04-29 09:53:06 -06:00
Andreas Hocevar
aaf6101d0f Include symbols from oli.js using interface and implements tags
Instead of regex parsing, we define tags for interface and
implements.
2014-04-29 09:53:06 -06:00
Andreas Hocevar
b758d92790 Use symbols.json for determining the API
Also to get rid of regular expression parsing, instead of
collecting exports for observables from the source files, we use
the 'observable' annotations.
2014-04-29 09:53:06 -06:00
Tim Schaub
758eed357e Accept a src config, add docs 2014-04-29 09:53:06 -06:00
Tim Schaub
a28db38eef Parse options and add docs 2014-04-29 09:53:06 -06:00
Tim Schaub
b6277e0a01 Build task for driving the compiler 2014-04-29 09:53:06 -06:00
Tim Schaub
88e41f25ea Generate symbols before exports 2014-04-29 09:53:06 -06:00
Tim Schaub
fe5d8712f2 Unused script 2014-04-29 09:53:06 -06:00
Tim Schaub
7c68107b17 Call generate-symbols.js from build.py 2014-04-29 09:53:06 -06:00
Tim Schaub
88d67b7370 Regenerate symbols if parents have changed
The generate-symbols.js task runs JSDoc on source files.  Because this takes a long time (13s) to run on the whole library, the resulting symbols file includes additional metadata to make it possible to do incremental symbol generation on subsequent runs.  The 'path' and 'extends' metadata for a symbol are used to determine what needs to be regenerated.
2014-04-29 09:53:06 -06:00
Tim Schaub
1273c26f7a Use new generate-exports.js task 2014-04-29 09:53:05 -06:00
Tim Schaub
c692204ffd Task for generating a limited set of exports 2014-04-29 09:53:05 -06:00
Tim Schaub
d3e477a8df Allow main method to be called from elsewhere 2014-04-29 09:53:05 -06:00
Tim Schaub
e53fde402b Write out sorted symbols, excluding inherited ones on private classes
There are cases where a private class may inherit an exportable member (e.g. ol.DebugTile_#getTileCoord comes from ol.Tile#getTileCoord).  We want to avoid making these exportable.
2014-04-29 09:53:05 -06:00
Tim Schaub
11b49d6305 Removing old *.exports for completeness 2014-04-29 09:53:05 -06:00
Tim Schaub
fb497f5288 Annotations for exports 2014-04-29 09:53:05 -06:00
Tim Schaub
457cfe851a Add a task to generate metadata on exported symbols
This runs JSDoc with the "symbols" config, providing a list of source files that have been changed since the previous run.  The output is used to generate a symbols.json metadata file containing all exportable symbols info.  A separate task will be run to generate the exports.js file.  These same metadata files will be used by a build tool.
2014-04-29 09:53:05 -06:00
Tim Schaub
9800b38250 Adding a JSDoc configuration for generating metadata on exported symbols
This generates info for all symbols annotated with "@todo api" (when Plovr is replaced, this will become "@api").  Generated metadata is written to stdout.  A separate process will handle the output.
2014-04-29 09:53:05 -06:00
Tom Payne
debbd83d8b Merge pull request #2024 from twpayne/igc-invalid
Fix IGC handling of invalid IGC files
2014-04-29 15:31:12 +02:00
Tom Payne
b64c63ea24 Don't return a feature if there are no coordinates 2014-04-29 15:05:30 +02:00
Frédéric Junod
3742b3c816 Merge pull request #1992 from fredj/select-layer-option
Remove layer option from ol.interaction.Select
2014-04-29 09:56:56 +02:00
Frederic Junod
3c308af91f Merge layerFilter option into layers 2014-04-29 08:58:55 +02:00
Frederic Junod
2c7282d4e9 Remove layer option from ol.interaction.Select
Fixes #1991
2014-04-29 08:56:29 +02:00
Bart van den Eijnden
09621af085 Merge pull request #2020 from bartvde/wfsbbox
Add fifth value for BBOX to be conforming to the WFS 1.1 spec (r=@tschaub)
2014-04-28 18:00:39 +02:00
Bart van den Eijnden
b91d8871df Add fifth value for BBOX to be conforming to the WFS 1.1 spec 2014-04-28 17:57:30 +02:00
Frédéric Junod
1f3f1e1cc7 Merge pull request #2018 from fredj/featureoverlay-cleanup
Miscellaneous ol.FeatureOverlay cleanup
2014-04-28 15:24:35 +02:00
Frederic Junod
b41ee35422 Use features.forEach instead of for loop 2014-04-28 13:54:26 +02:00
Frederic Junod
90c0944617 Fix coding style 2014-04-28 13:51:42 +02:00
Frederic Junod
a5620fa46a Remove unneeded function binding 2014-04-28 13:50:54 +02:00
Frederic Junod
475be37ef4 Remove unused local variable 2014-04-28 13:49:14 +02:00
Bart van den Eijnden
77dfc29b5c Merge pull request #2013 from bartvde/wfsdata
parsing issues with ol.format.WFS (=r@fredj)
2014-04-28 09:38:54 +02:00
Frédéric Junod
d7296602fc Merge pull request #2017 from fredj/feature-setgeom-change
Dispatch a change event when the geometry is set
2014-04-28 08:57:32 +02:00
Bart van den Eijnden
2a45d3b41b Merge pull request #2014 from bartvde/getkeys
export getKeys on ol.Object (r=@elemoine,@fredj)
2014-04-28 08:08:35 +02:00
Frédéric Junod
35715da4e6 Merge pull request #2010 from fredj/goog.array.contains
Use goog.array.contains instead of goog.array.indexOf
2014-04-28 07:40:56 +02:00
Frederic Junod
68773941d3 Use goog.array.contains instead of goog.array.indexOf 2014-04-26 08:31:40 +02:00
Frederic Junod
74d83f29d2 Dispatch a change event when the geometry is set
Fixes #2016
2014-04-26 08:09:28 +02:00
Bart van den Eijnden
9c6987aa78 Export ol.Object's getKeys function 2014-04-25 15:02:58 +02:00
Bart van den Eijnden
635dd5f380 Make sure we can parse WFS 1.1 responses from MapServer 2014-04-25 11:29:27 +02:00
Éric Lemoine
928e3244cf Merge pull request #2012 from elemoine/skipfeature
Remove skippeFeatures collection
2014-04-25 09:01:02 +02:00
Bart van den Eijnden
0e6b72f94d Merge pull request #1986 from bartvde/wfs-example
ol.format.WFS has no readProjection method (r=@elemoine)
2014-04-24 21:16:53 +02:00
Éric Lemoine
f9c0f12f23 Remove skippeFeatures collection 2014-04-24 20:58:50 +02:00
Bart van den Eijnden
962ddff1c2 Implement readProjection on ol.format.WFS and add WFS JSONP example 2014-04-24 20:58:32 +02:00
Frédéric Junod
cd878e0ef8 Merge pull request #2009 from fredj/zoom-no-name
Remove name attributes from the zoom buttons
2014-04-24 15:10:03 +02:00
Frederic Junod
d00e515412 Remove name attributes from the zoom buttons 2014-04-24 14:45:14 +02:00
Frédéric Junod
a46f8647f9 Merge pull request #1998 from adube/fix-zoomcontrol
Fix zoomcontrol, set type button in button, not span
2014-04-24 14:35:53 +02:00
Andreas Hocevar
32dda342aa Only show controls for WebGL settings when WebGL is used 2014-04-22 16:29:53 +02:00
Frédéric Junod
16d7999deb Merge pull request #2007 from fredj/tilejson-jsonp
Use goog.net.Jsonp instead of goog.net.jsloader
2014-04-22 15:25:29 +02:00
Frederic Junod
1d688ad29d Use goog.net.Jsonp instead of goog.net.jsloader 2014-04-22 14:44:55 +02:00
Frédéric Junod
3ffed43834 Merge pull request #1995 from fredj/cleanup
Use ol.extent.getWidth and ol.extent.getHeight
2014-04-18 16:20:56 +02:00
Éric Lemoine
05217496f7 Merge pull request #1990 from elemoine/select-bug
Rework handling of skipped features in replay
2014-04-18 15:51:36 +02:00
Alexandre Dubé
f0d159d6ef Fix zoomcontrol, set type button in button, not span 2014-04-18 09:45:09 -04:00
Éric Lemoine
fa1d79016d Merge pull request #1994 from oterral/add_export
Add getSource function in ol.source.ImageVector
2014-04-18 13:37:00 +02:00
Éric Lemoine
8c1c775f85 Merge pull request #1997 from elemoine/skipped-features-performance
Make handling of skipped features faster
2014-04-18 13:17:05 +02:00
Éric Lemoine
4e965123c8 Make handling of skipped features faster 2014-04-18 10:52:20 +02:00
Frédéric Junod
551dd94494 Merge pull request #1996 from probins/measure
Measure example: correct source link
2014-04-17 21:00:52 +02:00
Peter Robins
53d3c695f4 Measure example: correct source link 2014-04-17 14:32:01 -04:00
Frederic Junod
663e7af0d2 Use ol.extent.getWidth and ol.extent.getHeight 2014-04-17 15:54:13 +02:00
oterral
a277cbf548 Add getSource getter in ol.source.ImageVector 2014-04-17 15:21:11 +02:00
Éric Lemoine
f59b3e968b Rework handling of skipped features in replay 2014-04-16 19:12:31 +02:00
Frédéric Junod
cb1edd262d Merge pull request #1985 from fredj/named-color
Handle ol.color.ENABLE_NAMED_COLORS = false
2014-04-16 16:28:26 +02:00
Frédéric Junod
b5873ff866 Merge pull request #1984 from fredj/export-circle
Export ol.Sphere.WGS84.circle function
2014-04-16 07:20:13 +02:00
Frederic Junod
251996f789 Use ol.color.ENABLE_NAMED_COLORS in tests 2014-04-15 17:22:58 +02:00
Frederic Junod
1da879ef06 Don't use a named color for defaultFillStyle
Named color support is optional (see ol.color.ENABLE_NAMED_COLORS)
2014-04-15 16:58:06 +02:00
Frederic Junod
4d548d99a7 Add Tissot indicatrix example 2014-04-15 14:35:27 +02:00
Frederic Junod
38f8774cc4 Export ol.Sphere#circle function 2014-04-15 14:35:20 +02:00
Éric Lemoine
2a0026bed3 Merge pull request #1970 from elemoine/geturls
Add getUrl methods to TileWMS and ImageWMS
2014-04-14 20:47:35 +02:00
Frédéric Junod
ce2b52d4fc Merge pull request #1983 from fredj/osgeo-url
Allow '{-y}' placeholder
2014-04-14 15:23:05 +02:00
Frederic Junod
9b5512c065 Allow '{-y}' placeholder 2014-04-14 14:27:18 +02:00
Frédéric Junod
738fe65268 Merge pull request #1982 from fredj/dnd-event
Add file propery to ol.interaction.DragAndDropEvent
2014-04-14 13:50:03 +02:00
Frederic Junod
ef27f14376 Remove undefined type from opt_target and opt_file 2014-04-14 12:01:48 +02:00
Frederic Junod
756f407ef4 Add file propery to ol.interaction.DragAndDropEvent 2014-04-14 10:47:57 +02:00
Andreas Hocevar
60ab837025 Merge pull request #1950 from jachym/measure_example
Adding simple measure example
2014-04-11 10:06:21 +02:00
Éric Lemoine
5755ea3be2 Merge pull request #1977 from elemoine/comment
Add an olx.js related comment to build.py
2014-04-10 20:18:44 +02:00
Éric Lemoine
df3319328d Add a comment to build.py 2014-04-10 17:58:35 +02:00
Andreas Hocevar
6826829786 Merge pull request #1971 from ahocevar/externs-instead-of-typedefs
"Cannot read property 'AttributionOptions' of undefined" error
2014-04-10 16:54:50 +02:00
Tim Schaub
12840aa49f Merge pull request #1976 from tschaub/pointerup-return
Required return from event handler.
2014-04-10 06:52:13 -06:00
Antoine Abt
050f0cede6 Merge pull request #1974 from tonio/selectfeature
Automatically skip features on select’s collection changes
2014-04-10 14:41:52 +02:00
Andreas Hocevar
b80c6d5c61 Replace typedefs with externs
Since the compiler leaves externs untouched and learns the used
properties from object literals, this replaces the otherwise
required typedefs just fine.
2014-04-10 14:40:51 +02:00
Tim Schaub
e72b383976 Required return from event handler 2014-04-10 06:32:27 -06:00
Antoine Abt
5147a0b060 Automatically skipFeatures on select’s collection changes 2014-04-10 14:24:39 +02:00
Frédéric Junod
c2bd829a5f Merge pull request #1975 from fredj/rotation-anchor
Rotate around arbitrary coordinate
2014-04-10 14:22:08 +02:00
Frédéric Junod
3946b92595 Merge pull request #1942 from elemoine/export-tileimage
Export ol.source.TileImage
2014-04-10 14:16:13 +02:00
Éric Lemoine
f9388749d4 undefined may be passed to ol.animation.rotate 2014-04-10 14:05:18 +02:00
Éric Lemoine
42adc23e86 Use ol.View2D#rotate in Interaction 2014-04-10 14:05:18 +02:00
Éric Lemoine
59c3857afd Add rotateAroundRome to animation example 2014-04-10 14:05:18 +02:00
Éric Lemoine
3c86dba3a8 ol.animate.rotate takes an optional anchor 2014-04-10 14:05:17 +02:00
Éric Lemoine
00917b7262 Export ol.View2D#rotate 2014-04-10 14:05:17 +02:00
Éric Lemoine
7e604d6ed3 Merge pull request #1972 from elemoine/modifyinteraction
Fix bug at modify interaction construction time
2014-04-10 13:55:48 +02:00
Éric Lemoine
e03054f17f Add ol.View2D#rotate 2014-04-10 12:40:47 +02:00
Éric Lemoine
00bc424098 Add ol.coordinate.sub 2014-04-10 12:40:47 +02:00
Frederic Junod
5248bb7a4b Export ol.source.TileImage 2014-04-10 12:27:53 +02:00
Éric Lemoine
baca25ed95 Fix bug at modify interaction construction time
This fixes a bug that occurs when the modify interaction is configured with a non-empty collection of features.
2014-04-10 11:00:00 +02:00
Éric Lemoine
ee1b4e08a1 Add ol.source.ImageWMS#getUrl 2014-04-10 09:16:24 +02:00
Éric Lemoine
e4c2cf0b63 Add ol.source.TileWMS#getUrls 2014-04-10 09:16:24 +02:00
Frédéric Junod
21d9aa2115 Merge pull request #1967 from fredj/tileUrlFunction-this
Don't use 'this' keyword in tileUrlFunction
2014-04-09 10:21:06 +02:00
Frederic Junod
6b1a4dc88b Use WMTS server from services.arcgisonline.com 2014-04-09 09:22:20 +02:00
Frederic Junod
bbb3527ac7 Don't use 'this' keyword in tileUrlFunction
See a31ad69ec4
Fixes #1965
2014-04-09 09:00:25 +02:00
Tim Schaub
98ec656981 Merge pull request #1954 from tschaub/olx
Use externs/olx.js instead of objectliterals.jsdoc.
2014-04-08 20:36:38 -06:00
Tim Schaub
3c92b693c5 Adding comment about using externs/olx.js as a source file
The externs/olx.js script includes @typedef annotations for objects that are used in the library.  When compiling the examples together with the library, we need these @typedef annotations.  In this same case, we don't need the object property names to be treated as externs (they can be safely renamed).
2014-04-08 20:11:49 -06:00
Andreas Hocevar
04a33220a8 Parse olx.js and convert types into typedef properties 2014-04-08 11:41:24 -06:00
Tim Schaub
9e33672503 Unused externs and typedef generating code 2014-04-08 11:41:24 -06:00
Tim Schaub
acb0fd8f06 Use externs/olx.js instead of objectliterals.jsdoc
The single externs/olx.js file describes all of the "options" objects we accept in our constructors.  The @typedef annotations are used by the compiler for type checking.  The @type annotations include documentation for individual options and serve as externs when compiling a profile of the library.  When compiling an application together with the library, the externs/olx.js file is included as one of the sources to provide the @typedef's without generating externs.

If we want to maintain multiple src/*.externs.js files instead of one large externs/olx.js file, we can.  But while we are still using Plovr, it makes for easier build configurations to have one file.

This removes the build tasks that generated the build/src/external/src/externs/types.js and build/src/internal/src/types.js files as those are both replaced by the single externs/olx.js file.
2014-04-08 11:41:24 -06:00
Frédéric Junod
03cc1c5a01 Merge pull request #1966 from fredj/coding-style
Fix coding style
2014-04-08 19:37:41 +02:00
Paul Spencer
b4031efc71 Merge pull request #1964 from pagameba/node-jsdoc
Upgrade to jsdoc 3.3.
2014-04-08 13:31:58 -04:00
Paul Spencer
6d3bbe61ce Upgrade to jsdoc 3.3. 2014-04-08 07:39:57 -04:00
Frederic Junod
17ed43d230 Fix coding style
Use `goog.isDef(x) ? x : {}` instead of `x || {}`
2014-04-08 11:40:04 +02:00
Frédéric Junod
aa6c188da6 Merge pull request #1962 from fredj/1961
Define ol.pointer.PointerEvent.createMouseEvent before using it
2014-04-07 18:18:21 +02:00
Frederic Junod
ffb61b49d0 Define ol.pointer.PointerEvent.createMouseEvent before using it
Fixes #1961
2014-04-07 17:48:14 +02:00
Éric Lemoine
4561e0b901 Merge pull request #1960 from elemoine/stopevent
Implement shouldStopEvent in DragBox interaction
2014-04-07 17:23:46 +02:00
Éric Lemoine
ce0b1d2a47 Use goog.functions.identity where it makes sense 2014-04-07 16:59:04 +02:00
Éric Lemoine
eac9b71b95 Set shouldStopEvent to identity in DragBox
This fixes a bug where the map is panned when boxes are drawn.
2014-04-07 16:57:02 +02:00
Frédéric Junod
de60b15e36 Merge pull request #1958 from fredj/renderer-order
Change renderer order in getRendererFromQueryString
2014-04-07 15:21:58 +02:00
Frederic Junod
1da40b6d02 Change renderer order in getRendererFromQueryString
To order should be the same as ol.DEFAULT_RENDERER_HINTS.
See #887
2014-04-07 14:56:56 +02:00
Jachym Cepicky
280e3e4ebf Adding simple measure example 2014-04-04 16:13:20 +02:00
Frederic Junod
fa640cf094 Compute anchor value only once 2014-03-31 10:20:52 +02:00
537 changed files with 19308 additions and 7663 deletions

View File

@@ -1,11 +1,6 @@
before_install:
- "sudo pip install -r requirements.txt"
- "git clone --depth=50 https://github.com/jsdoc3/jsdoc build/jsdoc"
- "cd build/jsdoc"
- "git fetch origin refs/tags/v3.2.2:refs/tags/v3.2.2"
- "git checkout tags/v3.2.2"
- "cd ../.."
- "npm install"
- "npm install -g npm && npm install"
before_script:
- "./build.py plovr"
@@ -13,4 +8,4 @@ before_script:
- "rm src/ol/renderer/webgl/*shader.js"
- "sleep 3"
script: "./build.py JSDOC=build/jsdoc/jsdoc integration-test"
script: "./build.py integration-test"

View File

@@ -1,4 +1,4 @@
Copyright 2005-2013 OpenLayers Contributors. All rights reserved. See
Copyright 2005-2014 OpenLayers Contributors. All rights reserved. See
AUTHORS.md for full list.
Redistribution and use in source and binary forms, with or without modification,

View File

@@ -13,16 +13,20 @@
"src/googx/dom/fullscreen.js"
],
"include": [
"src"
"src",
"externs/oli.js",
"externs/olx.js"
]
},
"plugins": [
"plugins/markdown",
"node_modules/jsdoc/plugins/markdown",
"apidoc/plugins/inheritdoc",
"apidoc/plugins/exports",
"apidoc/plugins/interface",
"apidoc/plugins/typedefs",
"apidoc/plugins/todo",
"apidoc/plugins/events",
"apidoc/plugins/observable",
"apidoc/plugins/stability"
"apidoc/plugins/api"
],
"markdown": {
"parser": "gfm"
@@ -31,11 +35,12 @@
"levels": ["deprecated","experimental","unstable","stable","frozen","locked"]
},
"templates": {
"cleverLinks": false,
"monospaceLinks": false,
"cleverLinks": true,
"monospaceLinks": true,
"default": {
"outputSourceFiles": true
}
},
"applicationName": "OpenLayers 3"
},
"jsVersion": 180
}

View File

@@ -1,20 +1,41 @@
Finding your way around
-----------------------
See the class list to the right and especially take a look at {@link ol.Map} and {@link ol.layer.Layer} because those are the central objects.
In general every use of OpenLayers starts by initializing a map, then adding the required layers. Controls and interactions can be added to change the behavior of the map.
Projections
-----------
A {@link ol.proj.Projection} defines which point on earth is represented by a pair of coordinates.
Coordinates within OpenLayers can be used in various projections where some common projections are always supported,
others can be used via [Proj4js](http://trac.osgeo.org/proj4js/).
Maps and Layers
---------------
A map in OpenLayers is essentially a staple of layers that is viewed from the top. Layers are responsible for retrieving data and displaying it.
Contributing
------------
See [CONTRIBUTING.md](https://github.com/openlayers/ol3/blob/master/CONTRIBUTING.md) for instructions
on building and testing OpenLayers. The file does also describe how to commit your changes to OpenLayers.
<table><tr>
<th width="33.3%">Map</th><th width="33.3%">View</th><th width="33.3%">Layers</th>
</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>
[Overview](ol.Map.html)<br>
[Creation](ol.Map.html#Map)<br>
[Events](ol.MapBrowserEvent.html)</td>
<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>
<td><p>Layers are lightweight containers that get their data from [sources](ol.source.html).</p>
[ol.layer.Tile](ol.layer.Tile.html)<br>
[ol.layer.Image](ol.layer.Image.html)<br>
[ol.layer.Vector](ol.layer.Vector.html)</td>
</tr><tr>
<th>Controls</th><th>Interactions</th><th>Sources and formats</th>
</tr><tr>
<td>[Map default controls](ol.control.html#defaults)<br>
[All controls](ol.control.html)
</td>
<td>
[Map default interactions](ol.interaction.html#defaults)<br>
Interactions for [vector features](ol.Feature.html)
<ul><li>[ol.interaction.Select](ol.interaction.Select.html)</li>
<li>[ol.interaction.Draw](ol.interaction.Draw.html)</li>
<li>[ol.interaction.Modify](ol.interaction.Modify.html)</li></ul>
[All interactions](ol.interaction.html)</td>
<td>[Tile sources](ol.source.Tile.html) for [ol.layer.Tile](ol.layer.Tile.html)
<br>[Image sources](ol.source.Image.html) for [ol.layer.Image](ol.layer.Image.html)
<br>[Vector sources](ol.source.Vector.html) for [ol.layer.Vector](ol.layer.Vector.html)
<br>[Formats](ol.format.Feature.html) for reading/writing vector data
<br>[ol.format.WMSCapabilities](ol.format.WMSCapabilities.html)</td></tr>
<tr><th>Projections</th><th>2-way bindings</th><th>Other components</th></tr>
<tr><td><p>All coordinates and extents need to be provided in view projection (default: [EPSG:3857](ol.proj.EPSG3857.html)). To transform, use [ol.proj.transform()](ol.proj.html#transform) and [ol.extent.applyTransform()](ol.extent.html#applyTransform).</p>
[ol.proj](ol.proj.html)</td>
<td><p>[Objects](ol.Object.html) can be kept in sync using the [bindTo()](ol.Object.html#bindTo) method.</p>
<p>A [DOM Input](ol.dom.Input.html) class is available to bind Object properties to HTML Input elements.</p></td>
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
[ol.Geolocation](ol.Geolocation.html)<br>
[ol.Overlay](ol.Overlay.html)<br>
[ol.FeatureOverlay](ol.FeatureOverlay.html)<br></td>
</tr></table>

131
apidoc/plugins/api.js Normal file
View File

@@ -0,0 +1,131 @@
/**
* Define an @api tag
*/
var conf = env.conf.stability;
var defaultLevels = ["deprecated","experimental","unstable","stable","frozen","locked"];
var levels = conf.levels || defaultLevels;
var util = require('util');
exports.defineTags = function(dictionary) {
dictionary.defineTag('api', {
mustHaveValue: false,
canHaveType: false,
canHaveName: false,
onTagged: function(doclet, tag) {
var level = tag.text || "experimental";
if (levels.indexOf(level) >= 0) {
doclet.stability = level;
} else {
var errorText = util.format('Invalid stability level (%s) in %s line %s', tag.text, doclet.meta.filename, doclet.meta.lineno);
require('jsdoc/util/error').handle( new Error(errorText) );
}
}
});
};
/*
* Based on @stability annotations, and assuming that items with no @stability
* annotation should not be documented, this plugin removes undocumented symbols
* from the documentation.
*/
function hasApiMembers(doclet) {
return doclet.longname.split('#')[0] == this.longname;
}
function includeAugments(doclet) {
var augments = doclet.augments;
if (augments) {
var cls;
for (var i = augments.length - 1; i >= 0; --i) {
cls = classes[augments[i]];
if (cls) {
includeAugments(cls);
if (cls.fires) {
if (!doclet.fires) {
doclet.fires = [];
}
cls.fires.forEach(function(f) {
if (doclet.fires.indexOf(f) == -1) {
doclet.fires.push(f);
}
});
}
if (cls.observables) {
if (!doclet.observables) {
doclet.observables = [];
}
cls.observables.forEach(function(f) {
if (doclet.observables.indexOf(f) == -1) {
doclet.observables.push(f);
}
});
}
if (cls.longname.indexOf('oli.') !== 0) {
cls._hideConstructor = true;
delete cls.undocumented;
}
}
}
}
}
var api = [];
var augments = {};
var classes = {};
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
// Keep track of api items - needed in parseComplete to determine classes
// with api members.
if (doclet.stability) {
api.push(doclet);
}
// Mark explicity defined namespaces - needed in parseComplete to keep
// namespaces that we need as containers for api items.
if (/.*\.jsdoc$/.test(doclet.meta.filename) && doclet.kind == 'namespace') {
doclet.namespace_ = true;
}
if (doclet.kind == 'class') {
classes[doclet.longname] = doclet;
}
},
parseComplete: function(e) {
var doclets = e.doclets;
for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i];
if (doclet.stability || doclet.namespace_) {
if (doclet.kind == 'class') {
includeAugments(doclet);
}
if (doclet.fires) {
doclet.fires.sort(function(a, b) {
return a.split(/#?event:/)[1] < b.split(/#?event:/)[1] ? -1 : 1;
});
}
if (doclet.observables) {
doclet.observables.sort(function(a, b) {
return a.name < b.name ? -1 : 1;
});
}
// Always document namespaces and items with stability annotation
continue;
}
if (doclet.kind == 'class' && api.some(hasApiMembers, doclet)) {
// Mark undocumented classes with documented members as unexported.
// This is used in ../template/tmpl/container.tmpl to hide the
// constructor from the docs.
doclet._hideConstructor = true;
includeAugments(doclet);
} else if (!doclet._hideConstructor) {
// Remove all other undocumented symbols
doclet.undocumented = true;
}
}
}
};

43
apidoc/plugins/events.js Normal file
View File

@@ -0,0 +1,43 @@
var events = {};
var classes = {};
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
var cls;
if (doclet.kind == 'event') {
cls = doclet.longname.split('#')[0];
if (!(cls in events)) {
events[cls] = [];
}
events[cls].push(doclet.longname);
} else if (doclet.kind == 'class') {
classes[doclet.longname] = doclet;
}
},
parseComplete: function(e) {
var doclets = e.doclets;
var eventClass, doclet, i, ii, j, jj, event, fires;
for (i = 0, ii = doclets.length - 1; i < ii; ++i) {
doclet = doclets[i];
if (doclet.fires) {
if (doclet.kind == 'class') {
fires = [];
for (j = 0, jj = doclet.fires.length; j < jj; ++j) {
event = doclet.fires[j].replace('event:', '');
if (events[event]) {
fires.push.apply(fires, events[event]);
} else {
fires.push(doclet.fires[j]);
}
}
doclet.fires = fires;
}
}
}
}
};

View File

@@ -1,118 +0,0 @@
/*
* This plugin parses externs/oli.js as well as goog.exportSymbol and
* goog.exportProperty calls to build a list of API symbols and properties.
* Unexported modules linked from @param or @fires will be marked unexported,
* and the documentation will not contain the constructor. Everything else is
* marked undocumented, which will remove it from the docs.
*/
var api = [];
var unexported = [];
function collectExports(source) {
var i, ii, symbol, property;
var syms = source.match(/goog\.exportSymbol\([^\)]*\)/g);
if (syms) {
i = 0; ii = syms.length;
for (; i < ii; ++i) {
symbol = syms[i].match(/'([^']*)'/)[1];
api.push(symbol);
}
}
var props = source.match(/goog\.exportProperty\([^\)]*\)/g);
if (props) {
i = 0; ii = props.length;
for (; i < ii; ++i) {
property = props[i].match(/[^,]*,[^,]*,\r?\n? *([^\)]*)\)/)[1]
.replace('.prototype.', '#');
api.push(property);
}
}
}
function collectOliExports(source) {
var oli = source.match(/[^\{]oli\.([^;^ ]*);? ?/g);
if (oli) {
i = 0; ii = oli.length;
for (; i < ii; ++i) {
property = 'ol.' + oli[i].match(/oli.([^;]*)/)[1]
.replace('.prototype.', '#');
unexported.push(property);
}
}
}
var encoding = env.conf.encoding || 'utf8';
var fs = require('jsdoc/fs');
collectExports(fs.readFileSync('build/src/external/src/exports.js', encoding));
collectOliExports(fs.readFileSync('externs/oli.js', encoding));
exports.handlers = {
beforeParse: function(e) {
if (/\.js$/.test(e.filename)) {
collectExports(e.source);
}
},
newDoclet: function(e) {
var i, ii, j, jj;
if (e.doclet.meta.filename == "objectliterals.jsdoc" && e.doclet.properties) {
for (i = 0, ii = e.doclet.properties.length; i < ii; ++i) {
if (e.doclet.properties[i].type && e.doclet.properties[i].type.names) {
for (j = 0, jj = e.doclet.properties[i].type.names.length; j < jj; ++j) {
if (e.doclet.properties[i].type.names[j].indexOf('ol') == 0) {
if (api.indexOf(e.doclet.properties[i].type.names[j]) === -1) {
api.push(e.doclet.properties[i].type.names[j]);
}
}
}
}
}
}
if (api.indexOf(e.doclet.longname) > -1) {
var names, name;
var params = e.doclet.params;
if (params) {
for (i = 0, ii = params.length; i < ii; ++i) {
names = params[i].type.names;
if (names) {
for (j = 0, jj=names.length; j < jj; ++j) {
name = names[j];
if (unexported.indexOf(name) === -1) {
unexported.push(name);
}
}
}
}
}
var links = e.doclet.comment.match(/\{@link ([^\}]*)\}/g);
if (links) {
for (i=0, ii=links.length; i < ii; ++i) {
var link = links[i].match(/\{@link (.*)\}/)[1];
if (unexported.indexOf(link) === -1) {
unexported.push(link);
}
}
}
}
},
parseComplete: function(e) {
for (var j = e.doclets.length - 1; j >= 0; --j) {
var doclet = e.doclets[j];
if (doclet.kind == 'namespace' || doclet.kind == 'event' || doclet.fires) {
continue;
}
var fqn = doclet.longname;
if (fqn) {
doclet.unexported = (api.indexOf(fqn) === -1 && unexported.indexOf(fqn) !== -1);
if (api.indexOf(fqn) === -1 && unexported.indexOf(fqn) === -1) {
e.doclets.splice(j, 1);
}
}
}
}
};

View File

@@ -5,11 +5,104 @@
* TODO: Remove this hack when https://github.com/jsdoc3/jsdoc/issues/53
* is addressed.
*/
exports.nodeVisitor = {
visitNode: function(node, e, parser, currentSourceName) {
if (/@(inheritDoc)(\n|\r)/.test(e.comment)) {
e.preventDefault = true;
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,26 @@
var util = require('util');
exports.defineTags = function(dictionary) {
var classTag = dictionary.lookUp('class');
dictionary.defineTag('interface', {
mustHaveValue: false,
onTagged: function(doclet, tag) {
classTag.onTagged.apply(this, arguments);
doclet.interface = true;
}
});
var augmentsTag = dictionary.lookUp('augments');
dictionary.defineTag('implements', {
mustHaveValue: true,
onTagged: function(doclet, tag) {
tag.value = tag.value.match(/^\{?([^\}]*)\}?$/)[1];
augmentsTag.onTagged.apply(this, arguments);
if (!doclet.implements) {
doclet.implements = [];
}
doclet.implements.push(tag.value);
}
});
};

View File

@@ -1,32 +1,66 @@
var util = require('util');
var classes = {};
var observables = {};
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
if (doclet.kind == 'class') {
classes[doclet.longname] = doclet;
}
},
parseComplete: function(e) {
var doclets = e.doclets;
var cls, doclet, event, i, ii, observable;
for (i = 0, ii = doclets.length - 1; i < ii; ++i) {
doclet = doclets[i];
cls = classes[doclet.longname.split('#')[0]];
if (typeof doclet.observable == 'string' && cls) {
var name = doclet.name.replace(/^[sg]et/, '');
name = name.substr(0, 1).toLowerCase() + name.substr(1);
var key = doclet.longname.split('#')[0] + '#' + name;
doclet.observable = key;
if (!observables[key]) {
observables[key] = {};
}
observable = observables[key];
observable.name = name;
observable.readonly = typeof observable.readonly == 'boolean' ?
observable.readonly : true;
if (doclet.name.indexOf('get') === 0) {
observable.type = doclet.returns[0].type;
observable.description = doclet.returns[0].description;
} else if (doclet.name.indexOf('set') === 0) {
observable.readonly = false;
}
if (!cls.observables) {
cls.observables = [];
}
observable = observables[doclet.observable];
if (cls.observables.indexOf(observable) == -1) {
cls.observables.push(observable);
}
if (!cls.fires) {
cls.fires = [];
}
var event = 'ol.ObjectEvent#event:change:' + name.toLowerCase();
if (cls.fires.indexOf(event) == -1) {
cls.fires.push(event);
}
}
}
}
};
exports.defineTags = function(dictionary) {
dictionary.defineTag('observable', {
mustHaveValue: true,
canHaveType: true,
canHaveName: true,
mustNotHaveValue: true,
canHaveType: false,
canHaveName: false,
onTagged: function(doclet, tag) {
if (!doclet.observables) {
doclet.observables = [];
}
var description = tag.value.description;
var readonly = description.split(' ').shift() === 'readonly';
if (readonly) {
description = description.split(' ').slice(1).join(' ');
}
doclet.observables.push({
name: tag.value.name,
type: {
names: tag.value.type.names
},
description: description,
readonly: readonly
});
if (!doclet.fires) {
doclet.fires = [];
}
if (doclet.fires.indexOf('{@link ol.ObjectEvent} ol.event:ObjectEvent') === -1) {
doclet.fires.push('{@link ol.ObjectEvent} ol.event:ObjectEvent');
}
doclet.observable = '';
}
});
};

View File

@@ -1,20 +0,0 @@
var conf = env.conf.stability;
var defaultLevels = ["deprecated","experimental","unstable","stable","frozen","locked"];
var levels = conf.levels || defaultLevels;
var util = require('util');
exports.defineTags = function(dictionary) {
dictionary.defineTag('stability', {
mustHaveValue: true,
canHaveType: false,
canHaveName: true,
onTagged: function(doclet, tag) {
var level = tag.text;
if (levels.indexOf(level) >=0) {
doclet.stability = level;
} else {
var errorText = util.format('Invalid stability level (%s) in %s line %s', tag.text, doclet.meta.filename, doclet.meta.lineno);
require('jsdoc/util/error').handle( new Error(errorText) );
}
}
})
};

View File

@@ -6,28 +6,10 @@ exports.defineTags = function(dictionary) {
canHaveName: true,
onTagged: function(doclet, tag) {
var parts = tag.text.split(' ');
if (parts[0] === 'stability') {
doclet.stability = parts.slice(1).join(' ');
if (parts[0] === 'api') {
doclet.stability = parts.slice(1).join(' ') || 'experimental';
} else if (parts[0] === 'observable') {
if (!doclet.observables) {
doclet.observables = [];
}
var readonly = parts.length > 3 && parts[3] === 'readonly';
var description = (readonly ? parts.slice(4) : parts.slice(3)).join(' ');
doclet.observables.push({
name: parts[1],
type: {
names: tag.value.type.names
},
description: description,
readonly: readonly
});
if (!doclet.fires) {
doclet.fires = [];
}
if (doclet.fires.indexOf('{@link ol.ObjectEvent} ol.event:ObjectEvent') === -1) {
doclet.fires.push('{@link ol.ObjectEvent} ol.event:ObjectEvent');
}
doclet.observable = '';
}
}
});

View File

@@ -0,0 +1,59 @@
/*
* Converts olx.js @type annotations into properties of the previous @typedef.
* Changes @enum annotations into @typedef.
*/
var lastOlxTypedef = null;
var olxTypes = {};
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;
}
}
}
}
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
if (doclet.meta.filename == 'olx.js') {
if (doclet.kind == 'typedef') {
lastOlxTypedef = doclet;
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
doclet.kind = 'typedef';
delete doclet.isEnum;
}
},
parseComplete: function(e) {
var doclets = e.doclets;
for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i];
var params = doclet.params;
if (params) {
addSubparams(params);
}
}
}
};

78
apidoc/readme.md Normal file
View File

@@ -0,0 +1,78 @@
# API Documentation
This directory contains configuration (`conf.json`), static content (`index.md`), template (`template/`) and plugins (`plugins/`) for the [JSDoc3](http://usejsdoc.org/) API generator.
## Documenting the source code
JSDoc annotations are used for metadata used by the compiler, for defining the user facing API, and for user documentation.
In the simplest case, a JSDoc block can look like this:
```js
/**
* Add the given control to the map.
* @param {ol.control.Control} control Control.
* @todo api
*/
ol.Map.prototype.addControl = function(control) {
// ...
};
```
The first line is text for the user documentation. This can be long, and it can
contain Markdown.
The second line tells the Closure compiler the type of the argument.
The third line (`@todo api`) marks the method as part of the api and thus exportable. The stability can be added as value, e.g. `@todo api stable`. Once the documentation story is fully settled, we will remove the `todo ` and just write `@api` or `@api stable`. Without such an api annotation, the method will not be documented in the generated API documentation. Symbols without an api annotation will also not be exportable (unless they are explicitly exported with a `goog.exportProperty` call).
### Events
Events are documented using `@fires` and `@event` annotations:
```js
/**
* Constants for event names.
* @enum {string}
*/
ol.MapBrowserEvent.EventType = {
/**
* A true single click with no dragging and no double click. Note that this
* event is delayed by 250 ms to ensure that it is not a double click.
* @event ol.MapBrowserEvent#singleclick
* @todo api
*/
SINGLECLICK: 'singleclick',
// ...
};
```
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}
* @todo api
*/
oli.MapBrowserEvent.prototype.coordinate;
// ...
};
```
To document which events are fired by a class or method, the `@fires` annotation is used:
```js
/**
* @fires ol.MapBrowserEvent
* @fires ol.MapEvent
* @fires ol.render.Event
* ...
*/
ol.Map = function(options) {
// ...
};
```
### Observable Properties
Observable properties are documented using the `@observable` annotation. This annotation is added to the getter of an observable property. If an observable property is also settable, the setter is annotated with `@observable` as well.

View File

@@ -1 +1,3 @@
This template is based on the [Jaguar](https://github.com/davidshimjs/jaguarjs/tree/master/docs/templates/jaguar) template. [JaguarJS](https://github.com/davidshimjs/jaguarjs) is licensed under the [LGPL license](https://github.com/davidshimjs/jaguarjs/tree/master/LICENSE).
The default template for JSDoc 3 uses: [the Taffy Database library](http://taffydb.com/) and the [Underscore Template library](http://documentcloud.github.com/underscore/#template).

View File

@@ -0,0 +1,9 @@
@navWidth: 250px;
@colorSubtitle: rgb(119, 156, 52);
@colorRed: rgb(238, 125, 125);
@colorLink: #2a6496;
@colorBgNavi: #2a2a2a;
.font-description () {
font-family: "freight-text-pro",Georgia,Cambria,"Times New Roman",Times,serif
}

View File

@@ -0,0 +1,10 @@
@import "common.less";
footer {
margin: 15px 0;
padding-top: 15px;
border-top: 1px solid #e1e1e1;
.font-description();
font-size: 0.8em;
color: gray;
}

View File

@@ -0,0 +1,22 @@
@import "common.less";
// normalize
html, body {
font: 1em "jaf-bernino-sans","Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;
background-color: #fff;
}
ul, ol {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
#wrap {
position: relative;
}
@import "navigation.less";
@import "main.less";
@import "footer.less";

View File

@@ -0,0 +1,288 @@
@import "common.less";
.main {
padding: 20px 20px;
margin-left: @navWidth;
.page-title {
display: none;
}
h1 {
font-weight: bold;
font-size: 1.6em;
margin: 0;
}
h2 {
font-weight: bold;
font-size: 1.5em;
margin: 0;
}
h3 {
font-weight: bold;
font-size: 12px;
margin: 5px 0;
}
h4 {
font-weight: bold;
font-size: 1em;
}
h5 {
font-weight: bold;
font-size: 12px;
}
dd {
font-size: 12px;
}
h4.name {
span.type-signature {
display: inline-block;
border-radius: 3px;
background-color: gray;
color: #fff;
font-size: 0.7em;
padding: 2px 4px;
}
span.type {
margin-left: 5px;
}
span.glyphicon {
display: inline-block;
vertical-align: middle;
color: #e1e1e1;
margin-left: 7px;
}
span.returnType {
margin-left: 3px;
background-color: transparent!important;
color: gray!important;
}
}
span.static {
display: inline-block;
border-radius: 3px;
background-color: @colorSubtitle!important;
color: #fff;
font-size: 0.7em;
padding: 2px 4px;
margin-right: 8px;
}
span.number {
background-color: #ccc!important;
color: #2fa2b1!important;
}
span.string {
background-color: #ccc!important;
color: #2fa2b1!important;
}
span.object {
background-color: #ccc!important;
color: #2fa2b1!important;
}
span.array {
background-color: #ccc!important;
color: #2fa2b1!important;
}
span.boolean {
background-color: #ccc!important;
color: #2fa2b1!important;
}
.subsection-title {
font-size: 14px;
margin-top: 30px;
color: @colorSubtitle;
}
.description {
margin-top: 10px;
// .font-description();
font-size: 13px;
p {
font-size: 13px;
}
}
.tag-source {
font-size: 12px;
}
dt.tag-source {
margin-top: 5px;
}
dt.tag-todo {
font-size: 10px;
display: inline-block;
background-color: @colorLink;
color: #fff;
padding: 2px 4px;
border-radius: 5px;
}
.type-signature {
font-size: 12px;
}
.tag-deprecated {
display: inline-block;
font-size: 10px;
}
.important {
background-color: @colorRed;
color: #fff;
padding: 2px 4px;
border-radius: 5px;
}
.nameContainer {
position: relative;
margin-top: 20px;
padding-top: 5px;
border-top: 1px solid #e1e1e1;
.inherited {
display: inline-block;
border-radius: 3px;
background-color: #888!important;
font-size: 0.7em;
padding: 2px 4px;
margin-right: 5px;
a {
color: #fff;
}
}
.tag-source {
position: absolute;
top: 17px;
right: 0;
font-size: 10px;
a {
color: gray;
}
}
&.inherited {
color: gray;
}
h4 {
margin-right: 150px;
line-height: 1.3;
.signature {
font-size: 13px;
font-weight: normal;
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
}
}
}
pre {
font-size: 11px;
}
table {
width: 100%;
margin-bottom: 15px;
th {
padding: 3px 3px;
}
td {
vertical-align: top;
padding: 5px 3px;
}
.name {
width: 110px;
}
.type {
width: 60px;
color: #aaa;
font-size: 11px;
}
.attributes {
width: 80px;
color: #aaa;
font-size: 11px;
}
.description {
font-size: 12px;
p {
margin: 0;
}
}
.optional {
float: left;
border-radius: 3px;
background-color: #ddd!important;
font-size: 0.7em;
padding: 2px 4px;
margin-right: 5px;
color: gray;
}
}
.readme {
p {
margin-top: 15px;
line-height: 1.2;
font-size: 0.85em;
}
h1 {
font-size: 1.7em;
}
h2 {
margin-top: 30px;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #e1e1e1;
}
li {
font-size: 0.9em;
margin-bottom: 10px;
}
}
article {
ol, ul {
margin-left: 25px;
}
ol > li {
list-style-type: decimal;
margin-bottom: 5px;
}
ul > li {
margin-bottom: 5px;
list-style-type: disc;
}
}
}

View File

@@ -0,0 +1,103 @@
@import "common.less";
::-webkit-scrollbar {
width: 8px;
background-color: transparent;
}
::-webkit-scrollbar-thumb {
background-color: gray;
border-radius: 4px;
}
.navigation {
position: fixed;
float: left;
width: @navWidth;
height: 100%;
background-color: @colorBgNavi;
.applicationName {
margin: 0;
margin-top: 15px;
padding: 10px 15px;
font: bold 1.25em Helvetica;
color: #fff;
a {
color: #fff;
}
}
.search {
padding: 10px 15px;
input {
background-color: #333;
color: #fff;
border-color: #555;
}
}
.list {
padding: 10px 15px 0 15px;
position: relative;
overflow: auto;
width: 100%;
}
li.item {
margin-bottom: 8px;
padding-bottom: 8px;
border-bottom: 1px solid #333;
a {
color: #bbb;
&:hover {
color: #fff;
}
}
.title {
cursor: pointer;
position: relative;
a {
color: #e1e1e1;
&:hover {
color: #fff;
}
}
display: block;
font-size: 0.8em;
.static {
display: block;
border-radius: 3px;
background-color: @colorSubtitle;
color: #000;
font-size: 0.7em;
padding: 2px 4px;
float: right;
}
}
.subtitle {
margin-top: 10px;
font: bold 0.65em Helvetica;
color: @colorSubtitle;
display: block;
}
ul {
& > li {
font-size: 0.7em;
padding-left: 8px;
margin-top: 2px;
}
}
.itemMembers {
display: none;
}
}
}

View File

@@ -1,16 +1,20 @@
/*global env: true */
var template = require('jsdoc/template'),
fs = require('fs'),
path = require('path'),
fs = require('jsdoc/fs'),
path = require('jsdoc/path'),
taffy = require('taffydb').taffy,
handle = require('jsdoc/util/error').handle,
helper = require('jsdoc/util/templateHelper'),
_ = require('underscore'),
htmlsafe = helper.htmlsafe,
linkto = helper.linkto,
resolveAuthorLinks = helper.resolveAuthorLinks,
scopeToPunc = helper.scopeToPunc,
hasOwnProp = Object.prototype.hasOwnProperty,
data,
view,
outdir = env.opts.destination;
function find(spec) {
return helper.find(data, spec);
}
@@ -23,10 +27,6 @@ function getAncestorLinks(doclet) {
return helper.getAncestorLinks(data, doclet);
}
var linkto = helper.linkto;
var htmlsafe = helper.htmlsafe;
function hashToLink(doclet, hash) {
if ( !/^(#.+)/.test(hash) ) { return hash; }
@@ -36,6 +36,27 @@ function hashToLink(doclet, hash) {
return '<a href="' + url + '">' + hash + '</a>';
}
function needsSignature(doclet) {
var needsSig = false;
// function and class definitions always get a signature
if (doclet.kind === 'function' || doclet.kind === 'class') {
needsSig = true;
}
// typedefs that contain functions get a signature, too
else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
doclet.type.names.length) {
for (var i = 0, l = doclet.type.names.length; i < l; i++) {
if (doclet.type.names[i].toLowerCase() === 'function') {
needsSig = true;
break;
}
}
}
return needsSig;
}
function addSignatureParams(f) {
var params = helper.getSignatureParams(f, 'optional');
@@ -45,23 +66,60 @@ function addSignatureParams(f) {
function addSignatureReturns(f) {
var returnTypes = helper.getSignatureReturns(f);
f.signature = '<span class="signature">'+(f.signature || '') + '</span>' + '<span class="type-signature">'+(returnTypes.length? ' &rarr; {'+returnTypes.join('|')+'}' : '')+'</span>';
f.signature = '<span class="signature">'+(f.signature || '') + '</span>';
if (returnTypes.length) {
f.signature += '<span class="glyphicon glyphicon-circle-arrow-right"></span><span class="type-signature returnType">'+(returnTypes.length ? '{'+returnTypes.join('|')+'}' : '')+'</span>';
}
}
function addSignatureTypes(f) {
var 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 addAttribs(f) {
var attribs = helper.getAttribs(f);
f.attribs = '<span class="type-signature">'+htmlsafe(attribs.length? '<'+attribs.join(', ')+'> ' : '')+'</span>';
if (attribs.length) {
f.attribs = '<span class="type-signature ' + (attribs[0] === 'static' ? 'static' : '') + '">' + htmlsafe(attribs.length ? attribs.join(',') : '') + ' </span>';
}
}
function shortenPaths(files, commonPrefix) {
// always use forward slashes
var regexp = new RegExp('\\\\', 'g');
Object.keys(files).forEach(function(file) {
files[file].shortened = files[file].resolved.replace(commonPrefix, '')
.replace(regexp, '/');
});
return files;
}
function resolveSourcePath(filepath) {
return path.resolve(process.cwd(), filepath);
}
function getPathFromDoclet(doclet) {
if (!doclet.meta) {
return;
}
var filepath = doclet.meta.path && doclet.meta.path !== 'null' ?
doclet.meta.path + '/' + doclet.meta.filename.split(/[\/\\]/).pop() :
doclet.meta.filename;
return filepath;
}
function generate(title, docs, filename) {
function generate(title, docs, filename, resolveLinks) {
resolveLinks = resolveLinks === false ? false : true;
var docData = {
filename: filename,
title: title,
docs: docs
};
@@ -69,11 +127,62 @@ function generate(title, docs, filename) {
var outpath = path.join(outdir, filename),
html = view.render('container.tmpl', docData);
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
if (resolveLinks) {
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
}
fs.writeFileSync(outpath, html, 'utf8');
}
function generateSourceFiles(sourceFiles) {
Object.keys(sourceFiles).forEach(function(file) {
var source;
// links are keyed to the shortened path in each doclet's `meta.filename` property
var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened);
helper.registerLink(sourceFiles[file].shortened, sourceOutfile);
try {
source = {
kind: 'source',
code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, 'utf8') )
};
}
catch(e) {
handle(e);
}
generate('Source: ' + sourceFiles[file].shortened, [source], sourceOutfile,
false);
});
}
/**
* Look for classes or functions with the same name as modules (which indicates that the module
* exports only that class or function), then attach the classes or functions to the `module`
* property of the appropriate module doclets. The name of each class or function is also updated
* for display purposes. This function mutates the original arrays.
*
* @private
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
* check.
* @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
*/
function attachModuleSymbols(doclets, modules) {
var symbols = {};
// build a lookup table
doclets.forEach(function(symbol) {
symbols[symbol.longname] = symbol;
});
return modules.map(function(module) {
if (symbols[module.longname]) {
module.module = symbols[module.longname];
module.module.name = module.module.name.replace('module:', 'require("') + '")';
}
});
}
/**
* Create the navigation sidebar.
* @param {object} members The members that will be used to create the sidebar.
@@ -84,118 +193,69 @@ function generate(title, docs, filename) {
* @param {array<object>} members.modules
* @param {array<object>} members.namespaces
* @param {array<object>} members.tutorials
* @param {array<object>} members.events
* @return {string} The HTML for the navigation sidebar.
*/
function buildNav(members) {
var nav = '<h2><a href="index.html">Index</a></h2>',
seen = {};
/**
* Sorts elements by their qualified names (property longname).
* See https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort
* @param {object} a
* @param {object} b
* @return {number}
*/
function byLongName(a, b){
if(a.longname===b.longname){
return 0;
} else if(a.longname < b.longname){
return -1;
} else {
return 1;
}
}
var nav = [];
if (members.modules.length) {
nav += '<h3>Modules</h3><ul>';
members.modules.sort(byLongName).forEach(function(m) {
if ( !hasOwnProp.call(seen, m.longname) ) {
nav += '<li>'+linkto(m.longname, m.longname)+'</li>';
}
seen[m.longname] = true;
if (members.namespaces.length) {
_.each(members.namespaces, function (v) {
// exclude 'olx' from sidebar
if (v.longname.indexOf('olx') !== 0) {
nav.push({
type: 'namespace',
longname: v.longname,
name: v.name,
members: find({
kind: 'member',
memberof: v.longname
}),
methods: find({
kind: 'function',
memberof: v.longname
}),
typedefs: find({
kind: 'typedef',
memberof: v.longname
}),
events: find({
kind: 'event',
memberof: v.longname
})
});
}
});
nav += '</ul>';
}
if (members.externals.length) {
nav += '<h3>Externals</h3><ul>';
members.externals.sort(byLongName).forEach(function(e) {
if ( !hasOwnProp.call(seen, e.longname) ) {
nav += '<li>'+linkto( e.longname, e.name.replace(/(^"|"$)/g, '') )+'</li>';
}
seen[e.longname] = true;
});
nav += '</ul>';
}
if (members.classes.length) {
var moduleClasses = 0;
members.classes.sort(byLongName).forEach(function(c) {
var moduleSameName = find({kind: 'module', longname: c.longname});
if (moduleSameName.length) {
c.name = c.name.replace('module:', 'require("')+'")';
moduleClasses++;
moduleSameName[0].module = c;
}
if (moduleClasses !== -1 && moduleClasses < members.classes.length) {
nav += '<h3>Classes</h3><ul>';
moduleClasses = -1;
}
if ( !hasOwnProp.call(seen, c.longname) ) {
nav += '<li>'+linkto(c.longname, c.longname)+'</li>';
}
seen[c.longname] = true;
_.each(members.classes, function (v) {
// ignore interfaces
if (v.interface !== true) {
nav.push({
type: 'class',
longname: v.longname,
name: v.name,
members: find({
kind: 'member',
memberof: v.longname
}),
methods: find({
kind: 'function',
memberof: v.longname
}),
typedefs: find({
kind: 'typedef',
memberof: v.longname
}),
fires: v.fires,
events: find({
kind: 'event',
memberof: v.longname
})
});
}
});
nav += '</ul>';
}
if (members.namespaces.length) {
nav += '<h3>Namespaces</h3><ul>';
members.namespaces.sort(byLongName).forEach(function(n) {
if ( !hasOwnProp.call(seen, n.longname) ) {
nav += '<li>'+linkto(n.longname, n.longname)+'</li>';
}
seen[n.longname] = true;
});
nav += '</ul>';
}
if (members.mixins.length) {
nav += '<h3>Mixins</h3><ul>';
members.mixins.sort(byLongName).forEach(function(m) {
if ( !hasOwnProp.call(seen, m.longname) ) {
nav += '<li>'+linkto(m.longname, m.longname)+'</li>';
}
seen[m.longname] = true;
});
nav += '</ul>';
}
if (members.tutorials.length) {
nav += '<h3>Tutorials</h3><ul>';
members.tutorials.sort(byLongName).forEach(function(t) {
nav += '<li>'+tutoriallink(t.name)+'</li>';
});
nav += '</ul>';
}
if (members.globals.length) {
nav += '<h3>Global</h3><ul>';
members.globals.sort(byLongName).forEach(function(g) {
if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) {
nav += '<li>'+linkto(g.longname, g.longname)+'</li>';
}
seen[g.longname] = true;
});
nav += '</ul>';
}
return nav;
@@ -210,9 +270,20 @@ function buildNav(members) {
exports.publish = function(taffyData, opts, tutorials) {
data = taffyData;
var conf = env.conf.templates || {};
conf['default'] = conf['default'] || {};
var templatePath = opts.template;
view = new template.Template(templatePath + '/tmpl');
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
// doesn't try to hand them out later
var indexUrl = helper.getUniqueFilename('index');
// don't call registerLink() on this one! 'index' is also a valid longname
var globalUrl = helper.getUniqueFilename('global');
helper.registerLink('global', globalUrl);
// set up templating
view.layout = 'layout.tmpl';
@@ -221,7 +292,10 @@ exports.publish = function(taffyData, opts, tutorials) {
data = helper.prune(data);
data.sort('longname, version, since');
helper.addEventListeners(data);
var sourceFiles = {};
var sourceFilePaths = [];
data().each(function(doclet) {
doclet.attribs = '';
@@ -245,6 +319,19 @@ exports.publish = function(taffyData, opts, tutorials) {
doclet.see[i] = hashToLink(doclet, seeItem);
});
}
// build a list of source files
var sourcePath;
var resolvedSourcePath;
if (doclet.meta) {
sourcePath = getPathFromDoclet(doclet);
resolvedSourcePath = resolveSourcePath(sourcePath);
sourceFiles[sourcePath] = {
resolved: resolvedSourcePath,
shortened: null
};
sourceFilePaths.push(resolvedSourcePath);
}
});
// update outdir if necessary, then create outdir
@@ -254,19 +341,54 @@ exports.publish = function(taffyData, opts, tutorials) {
}
fs.mkPath(outdir);
// copy static files to outdir
var fromDir = path.join(templatePath, 'static'),
staticFiles = fs.ls(fromDir, 3);
// copy the template's static files to outdir
var fromDir = path.join(templatePath, 'static');
var staticFiles = fs.ls(fromDir, 3);
staticFiles.forEach(function(fileName) {
var toDir = fs.toDir( fileName.replace(fromDir, outdir) );
fs.mkPath(toDir);
fs.copyFileSync(fileName, toDir);
});
// copy user-specified static files to outdir
var staticFilePaths;
var staticFileFilter;
var staticFileScanner;
if (conf['default'].staticFiles) {
staticFilePaths = conf['default'].staticFiles.paths || [];
staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf['default'].staticFiles);
staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();
staticFilePaths.forEach(function(filePath) {
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
extraStaticFiles.forEach(function(fileName) {
var sourcePath = fs.statSync(filePath).isDirectory() ? filePath :
path.dirname(filePath);
var toDir = fs.toDir( fileName.replace(sourcePath, outdir) );
fs.mkPath(toDir);
fs.copyFileSync(fileName, toDir);
});
});
}
if (sourceFilePaths.length) {
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );
}
data().each(function(doclet) {
var url = helper.createLink(doclet);
helper.registerLink(doclet.longname, url);
// replace the filename with a shortened version of the full path
var docletPath;
if (doclet.meta) {
docletPath = getPathFromDoclet(doclet);
docletPath = sourceFiles[docletPath].shortened;
if (docletPath) {
doclet.meta.filename = docletPath;
}
}
});
data().each(function(doclet) {
@@ -279,7 +401,7 @@ exports.publish = function(taffyData, opts, tutorials) {
doclet.id = doclet.name;
}
if (doclet.kind === 'function' || doclet.kind === 'class') {
if ( needsSignature(doclet) ) {
addSignatureParams(doclet);
addSignatureReturns(doclet);
addAttribs(doclet);
@@ -290,8 +412,6 @@ exports.publish = function(taffyData, opts, tutorials) {
data().each(function(doclet) {
doclet.ancestors = getAncestorLinks(doclet);
doclet.signature = '';
if (doclet.kind === 'member') {
addSignatureTypes(doclet);
addAttribs(doclet);
@@ -310,59 +430,70 @@ exports.publish = function(taffyData, opts, tutorials) {
// add template helpers
view.find = find;
view.linkto = linkto;
view.resolveAuthorLinks = resolveAuthorLinks;
view.tutoriallink = tutoriallink;
view.htmlsafe = htmlsafe;
view.members = members; //@davidshimjs: To make navigation for customizing
// once for all
view.nav = buildNav(members);
attachModuleSymbols( find({ kind: ['class', 'function'], longname: {left: 'module:'} }),
members.modules );
for (var longname in helper.longnameToUrl) {
if ( hasOwnProp.call(helper.longnameToUrl, longname) ) {
// reuse 'members', which speeds things up a bit
var classes = taffy(members.classes);
classes = helper.find(classes, {longname: longname});
if (classes.length) {
generate('Class: ' + classes[0].longname, classes, helper.longnameToUrl[longname]);
}
var modules = taffy(members.modules);
modules = helper.find(modules, {longname: longname});
if (modules.length) {
generate('Module: ' + modules[0].longname, modules, helper.longnameToUrl[longname]);
}
var namespaces = taffy(members.namespaces);
namespaces = helper.find(namespaces, {longname: longname});
if (namespaces.length) {
generate('Namespace: ' + namespaces[0].longname, namespaces, helper.longnameToUrl[longname]);
}
var mixins = taffy(members.mixins);
mixins = helper.find(mixins, {longname: longname});
if (mixins.length) {
generate('Mixin: ' + mixins[0].longname, mixins, helper.longnameToUrl[longname]);
}
var externals = taffy(members.externals);
externals = helper.find(externals, {longname: longname});
if (externals.length) {
generate('External: ' + externals[0].longname, externals, helper.longnameToUrl[longname]);
}
}
// 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
if (conf['default'].outputSourceFiles) {
generateSourceFiles(sourceFiles);
}
if (members.globals.length) { generate('Global', members.globals, 'global.html'); }
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); }
// index page displays information from package.json and lists files
var files = find({kind: 'file'}),
packages = find({kind: 'package'});
generate('Index',
packages.concat(
packages.concat(
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
).concat(files),
'index.html');
).concat(files),
indexUrl);
// set up the lists that we'll use to generate pages
var classes = taffy(members.classes);
var modules = taffy(members.modules);
var namespaces = taffy(members.namespaces);
var mixins = taffy(members.mixins);
var externals = taffy(members.externals);
for (var longname in helper.longnameToUrl) {
if ( hasOwnProp.call(helper.longnameToUrl, longname) ) {
var myClasses = helper.find(classes, {longname: longname});
if (myClasses.length) {
generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
}
var myModules = helper.find(modules, {longname: longname});
if (myModules.length) {
generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]);
}
var myNamespaces = helper.find(namespaces, {longname: longname});
if (myNamespaces.length) {
generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
}
var myMixins = helper.find(mixins, {longname: longname});
if (myMixins.length) {
generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
}
var myExternals = helper.find(externals, {longname: longname});
if (myExternals.length) {
generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]);
}
}
}
// TODO: move the tutorial functions to templateHelper.js
function generateTutorial(title, tutorial, filename) {
var tutorialData = {

View File

@@ -0,0 +1,229 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="652" />
<glyph unicode="&#x2001;" horiz-adv-x="1304" />
<glyph unicode="&#x2002;" horiz-adv-x="652" />
<glyph unicode="&#x2003;" horiz-adv-x="1304" />
<glyph unicode="&#x2004;" horiz-adv-x="434" />
<glyph unicode="&#x2005;" horiz-adv-x="326" />
<glyph unicode="&#x2006;" horiz-adv-x="217" />
<glyph unicode="&#x2007;" horiz-adv-x="217" />
<glyph unicode="&#x2008;" horiz-adv-x="163" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="326" />
<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
<glyph unicode="&#xe028;" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
<glyph unicode="&#xe041;" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
<glyph unicode="&#xe042;" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v70h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" />
<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h600v200h-600v-200z" />
<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141z" />
<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM363 700h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26 q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-105 0 -172 -56t-67 -183zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
<glyph unicode="&#xe087;" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200 v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" />
<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64 q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM99 500v250v5q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351z M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37 t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 212l100 213h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM999 201v600h200v-600h-200z" />
<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
<glyph unicode="&#xe130;" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503l89 -100v-294l-340 -130 q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 500h300l-2 -194l402 294l-402 298v-197h-298v-201z" />
<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l400 -294v194h302v201h-300v197z" />
<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -34 5.5 -93t7.5 -87q0 -9 17 -44t16 -60q12 0 23 -5.5 t23 -15t20 -13.5q20 -10 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55.5t-20 -57.5q12 -21 22.5 -34.5t28 -27t36.5 -17.5q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q101 -2 221 111q31 30 47 48t34 49t21 62q-14 9 -37.5 9.5t-35.5 7.5q-14 7 -49 15t-52 19 q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q8 16 22 22q6 -1 26 -1.5t33.5 -4.5t19.5 -13q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5 t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23 q-19 -3 -37 0q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -46 0t-45 -3q-20 -6 -51.5 -25.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79zM518 915q3 12 16 30.5t16 25.5q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -18 8 -42.5t16.5 -44 t9.5 -23.5q-6 1 -39 5t-53.5 10t-36.5 16z" />
<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5q-37 0 -62.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
<glyph unicode="&#xe143;" d="M79 784q0 131 99 229.5t230 98.5q144 0 242 -129q103 129 245 129q130 0 227 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100l-84.5 84.5t-68 74t-60 78t-33.5 70.5t-15 78z M250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-106 48.5q-73 0 -131 -83l-118 -171l-114 174q-51 80 -124 80q-59 0 -108.5 -49.5t-49.5 -118.5z" />
<glyph unicode="&#xe144;" d="M57 353q0 -94 66 -160l141 -141q66 -66 159 -66q95 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141l19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5v-307l64 -14 q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5 t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10 t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221z" />
<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
<glyph unicode="&#xe162;" d="M216 519q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40z" />
<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 401h700v699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l248 -237v700h-699zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359z" />
<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118q17 17 20 41.5 t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300 h200l-300 -300z" />
<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,17 @@
(function() {
var counter = 0;
var numbered;
var source = document.getElementsByClassName('prettyprint source');
if (source && source[0]) {
source = source[0].getElementsByTagName('code')[0];
numbered = source.innerHTML.split('\n');
numbered = numbered.map(function(item) {
counter++;
return '<span id="line' + counter + '"></span>' + item;
});
source.innerHTML = numbered.join('\n');
}
})();

View File

@@ -0,0 +1,55 @@
$(function () {
// Search Items
$('#search').on('keyup', function (e) {
var value = $(this).val();
var $el = $('.navigation');
if (value) {
var regexp = new RegExp(value, 'i');
$el.find('li, .itemMembers').hide();
$el.find('li').each(function (i, v) {
var $item = $(v);
if ($item.data('name') && regexp.test($item.data('name'))) {
$item.show();
$item.closest('.itemMembers').show();
$item.closest('.item').show();
}
});
} else {
$el.find('.item, .itemMembers').show();
}
$el.find('.list').scrollTop(0);
});
// Toggle when click an item element
$('.navigation').on('click', '.title', function (e) {
$(this).parent().find('.itemMembers').toggle();
});
// Show an item related a current documentation automatically
var filename = $('.page-title').data('filename').replace(/\.[a-z]+$/, '');
var $currentItem = $('.navigation .item[data-name*="' + filename + '"]:eq(0)');
if ($currentItem.length) {
$currentItem
.remove()
.prependTo('.navigation .list')
.show()
.find('.itemMembers')
.show();
}
// Auto resizing on navigation
var _onResize = function () {
var height = $(window).height();
var $el = $('.navigation');
$el.height(height).find('.list').height(height - 133);
};
$(window).on('resize', _onResize);
_onResize();
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,371 @@
@import url(http://fonts.googleapis.com/css?family=Quattrocento+Sans:400,400italic,700);
.navbar-inverse .navbar-inner {
background: #1F6B75;
height: 50px;
}
.navbar-inverse .brand {
color: white;
font-size: 20px;
}
.navbar-inverse .container {
padding: 5px 0 5px 0;
}
body {
padding-top: 50px;
}
.nameContainer .name, .prettyprint.source .pln {
padding-top: 50px;
margin-top: -50px;
}
a {
position: relative;
z-index: 1;
}
.navigation li {
color: #888;
}
html,
body {
font-family: "Quattrocento Sans", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
font-size: 1.0em;
background-color: #fff;
}
ul,
ol {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
#wrap {
position: relative;
}
::-webkit-scrollbar {
width: 8px;
background-color: transparent;
}
::-webkit-scrollbar-thumb {
background-color: gray;
border-radius: 4px;
}
.navigation {
position: fixed;
float: left;
width: 250px;
height: 100%;
background-color: #2a2a2a;
}
.navigation .applicationName {
margin: 0;
margin-top: 15px;
padding: 10px 15px;
font: bold 1.25em Helvetica;
color: #fff;
}
.navigation .applicationName a {
color: #fff;
}
.navigation .search {
padding: 10px 15px;
}
.navigation .search input {
background-color: #333;
color: #fff;
border-color: #555;
}
.navigation .list {
padding: 10px 15px 0 15px;
position: relative;
overflow: auto;
width: 100%;
}
.navigation li.item {
margin-bottom: 8px;
padding-bottom: 8px;
border-bottom: 1px solid #333;
}
.navigation li.item a {
color: #bbb;
}
.navigation li.item a:hover {
color: #fff;
}
.navigation li.item .title {
cursor: pointer;
position: relative;
display: block;
font-size: 0.85em;
}
.navigation li.item .title a {
color: #e1e1e1;
}
.navigation li.item .title a:hover {
color: #fff;
}
.navigation li.item .title .static {
display: block;
border-radius: 3px;
background-color: #1F6B75;
color: #FFF;
font-size: 0.7em;
padding: 2px 4px;
float: right;
}
.navigation li.item .subtitle {
margin-top: 10px;
font: bold 0.7em Helvetica;
color: #1F6B75;
display: block;
}
.navigation li.item ul > li {
font-size: 0.75em;
padding-left: 8px;
margin-top: 2px;
}
.navigation li.item .itemMembers {
display: none;
}
.main {
padding: 20px 20px;
margin-left: 250px;
}
.main .page-title {
display: none;
}
.main h1 {
font-weight: bold;
font-size: 1.6em;
margin: 0;
}
.main h2 {
font-weight: bold;
font-size: 1.5em;
margin: 0;
}
.main h3 {
font-weight: bold;
font-size: 13px;
margin: 5px 0;
}
.main h4 {
font-weight: bold;
font-size: 1em;
}
.main h5 {
font-weight: bold;
font-size: 13px;
}
.main dd, .main .props {
font-size: 13px;
}
.main h4.name span.type {
margin-left: 10px;
}
.main h4.name span.glyphicon {
display: inline-block;
vertical-align: middle;
color: #c1c1c1;
margin-left: 7px;
}
.main h4.name span.returnType, .main h4.name span.type {
margin-left: 3px;
background-color: transparent!important;
color: gray!important;
}
.main span.static, .main span.stability {
display: inline-block;
border-radius: 3px;
background-color: #1F6B75 !important;
color: #fff;
vertical-align: top;
font-size: 0.8em;
padding: 2px 4px;
}
span.type-signature.static {
margin-right: 3px;
}
.main .subsection-title {
font-size: 15px;
margin-top: 30px;
color: #1F6B75;
}
.main .description {
margin-top: 10px;
font-size: 14px;
}
.main .description p {
font-size: 14px;
}
.main .tag-source {
font-size: 13px;
}
.main dt.tag-source {
margin-top: 5px;
}
.main dt.tag-todo {
font-size: 11px;
display: inline-block;
background-color: #2a6496;
color: #fff;
padding: 2px 4px;
border-radius: 5px;
}
.main .type-signature {
font-size: 13px;
}
.main .tag-deprecated {
display: inline-block;
font-size: 11px;
}
.main .important {
background-color: #ee7d7d;
color: #fff;
padding: 2px 4px;
border-radius: 5px;
}
.main .nameContainer {
position: relative;
margin-top: 20px;
padding-top: 5px;
border-top: 1px solid #e1e1e1;
}
.main .nameContainer .inherited {
display: inline-block;
border-radius: 3px;
background-color: #888!important;
vertical-align: top;
font-size: 0.8em;
padding: 2px 4px;
margin-right: 5px;
}
.main .nameContainer .inherited a {
color: #fff;
}
.main .nameContainer .tag-source {
position: absolute;
top: 17px;
right: 0;
font-size: 11px;
}
.main .nameContainer .tag-source a {
color: gray;
}
.main .nameContainer.inherited {
color: gray;
}
.main .nameContainer h4 {
margin-right: 150px;
line-height: 1.3;
}
.main .nameContainer h4 .signature {
font-size: 14px;
font-weight: normal;
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
.main pre {
font-size: 12px;
}
.main table {
width: 100%;
margin-bottom: 15px;
}
.main table th {
padding: 3px 3px;
}
.main table td {
vertical-align: top;
padding: 5px 3px;
}
.main table .name {
width: 110px;
}
.main table .type {
width: 60px;
color: #aaa;
font-size: 12px;
}
.main table .attributes {
width: 80px;
color: #aaa;
font-size: 12px;
}
.main table .description {
font-size: 13px;
}
.main table .description p {
margin: 0;
}
.main table .optional, .main table .repeatable {
float: left;
border-radius: 3px;
background-color: #ddd!important;
font-size: 0.7em;
padding: 2px 4px;
margin-right: 5px;
color: gray;
}
.main .readme p {
margin-top: 15px;
line-height: 1.2;
font-size: 0.9em;
}
.main .readme h1 {
font-size: 1.7em;
}
.main .readme h2 {
margin-top: 30px;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #e1e1e1;
}
.main .readme li {
font-size: 0.95em;
margin-bottom: 10px;
}
.main article ol,
.main article ul {
margin-left: 25px;
}
.main article ol > li {
list-style-type: decimal;
margin-bottom: 5px;
}
.main article ul > li {
margin-bottom: 5px;
list-style-type: disc;
}
footer {
margin: 15px 0;
padding-top: 15px;
border-top: 1px solid #e1e1e1;
font-family: "freight-text-pro", Georgia, Cambria, "Times New Roman", Times, serif;
font-size: 0.8em;
color: gray;
}
.main span.stability.deprecated {
background-color: #b94a48 !important;
color: #f2dede;
}
.main span.stability.experimental {
background-color: #F2CC79 !important;
color: #800F07;
}
.main span.stability.unstable {
background-color: #3a87ad !important;
color: #d9edf7;
}
.main span.stability.locked {
background-color: #468847 !important;
color: #dff0d8;
}
.main .readme table p {
margin-top: 0;
}
.main .readme table p, .main .readme table td {
font-size: 14px;
}
.main .readme table ul li {
margin-bottom: 0;
}

View File

@@ -1,285 +0,0 @@
html
{
overflow: auto;
background-color: #fff;
}
body
{
font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif;
line-height: 130%;
color: #000;
background-color: #fff;
}
a {
color: #444;
}
a:visited {
color: #444;
}
a:active {
color: #444;
}
header
{
display: block;
padding: 6px 4px;
}
.class-description {
font-style: italic;
font-family: Palatino, 'Palatino Linotype', serif;
font-size: 130%;
line-height: 140%;
margin-bottom: 1em;
margin-top: 1em;
}
#main {
float: left;
width: 100%;
}
section
{
display: block;
background-color: #fff;
padding: 12px 24px;
border-bottom: 1px solid #ccc;
margin-right: 240px;
}
.variation {
display: none;
}
.optional:after {
content: "opt";
font-size: 60%;
color: #aaa;
font-style: italic;
font-weight: lighter;
}
nav
{
display: block;
float: left;
margin-left: -230px;
margin-top: 28px;
width: 220px;
border-left: 1px solid #ccc;
padding-left: 9px;
}
nav ul {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
font-size: 100%;
line-height: 17px;
padding:0;
margin:0;
list-style-type:none;
}
nav h2 a, nav h2 a:visited {
color: #A35A00;
text-decoration: none;
}
nav h3 {
margin-top: 12px;
}
nav li {
margin-top: 6px;
}
nav a {
color: #5C5954;
}
nav a:visited {
color: #5C5954;
}
nav a:active {
color: #5C5954;
}
footer {
display: block;
padding: 6px;
margin-top: 12px;
font-style: italic;
font-size: 90%;
}
h1
{
font-size: 200%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 6px 0 9px 0;
}
h2
{
font-size: 170%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
}
h3
{
font-size: 150%;
font-weight: bold;
letter-spacing: -0.01em;
margin-top: 16px;
margin: 6px 0 3px 0;
}
h4
{
font-size: 130%;
font-weight: bold;
letter-spacing: -0.01em;
margin-top: 16px;
margin: 18px 0 3px 0;
color: #A35A00;
}
h5, .container-overview .subsection-title
{
font-size: 120%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 8px 0 3px -16px;
}
h6
{
font-size: 100%;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
font-style: italic;
}
.protected {
display: none;
}
dt.tag-source, dd.tag-source {
display: none;
}
.ancestors { color: #999; }
.ancestors a
{
color: #999 !important;
text-decoration: none;
}
.important
{
font-weight: bold;
color: #950B02;
}
.yes-def {
text-indent: -1000px;
}
.type-signature {
color: #aaa;
}
.name, .signature {
font-family: Consolas, "Lucida Console", Monaco, monospace;
}
.details { margin-top: 14px; }
.details dt { width:110px; float:left; border-left: 2px solid #DDD; padding-left: 10px; padding-top: 6px; }
.details dd { margin-left: 50px; }
.details ul { margin: 0; }
.details ul { list-style-type: none; }
.details li { margin-left: 30px; padding-top: 6px; }
.description {
margin-bottom: 1em;
margin-left: 0px;
margin-top: 1em;
}
.code-caption
{
font-style: italic;
font-family: Palatino, 'Palatino Linotype', serif;
font-size: 107%;
margin: 0;
}
.prettyprint
{
border: 1px solid #ddd;
width: 80%;
}
.prettyprint code
{
font-family: Consolas, 'Lucida Console', Monaco, monospace;
font-size: 100%;
line-height: 18px;
display: block;
padding: 4px 12px;
margin: 0;
background-color: #fff;
color: #000;
border-left: 3px #ddd solid;
}
.params, .props
{
border-spacing: 0;
border: 0;
border-collapse: collapse;
}
.params .name, .props .name, .name code {
color: #A35A00;
font-family: Consolas, 'Lucida Console', Monaco, monospace;
font-size: 100%;
}
.params td, .params th, .props td, .props th
{
border: 1px solid #ddd;
margin: 0px;
text-align: left;
vertical-align: top;
padding: 4px 6px;
display: table-cell;
}
.params thead tr, .props thead tr
{
background-color: #ddd;
font-weight: bold;
}
.params .params thead tr, .props .props thead tr
{
background-color: #fff;
font-weight: bold;
}
.params th, .props th { border-right: 1px solid #aaa; }
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
.disabled {
color: #454545;
}

View File

@@ -1,39 +0,0 @@
a:visited {
color: #08c;
}
.stability {
padding: 8px 35px 8px 14px;
margin-bottom: 20px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
color: #333;
background-color: #fcfcfc;
border: 1px solid #ccc;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.stability-deprecated {
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7;
}
.stability-experimental {
color: #c09853;
background-color: #fcf8e3;
border-color: #fbeed5;
}
.stability-unstable {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
}
.stability-stable, .stability-locked {
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6;
}

View File

@@ -5,15 +5,15 @@
<?js if (doc.kind === 'mainpage' || (doc.kind === 'package')) { ?>
<?js= self.partial('mainpage.tmpl', doc) ?>
<?js } else if (doc.kind === 'source') { ?>
<?js= self.partial('source.tmpl', doc) ?>
<?js } else { ?>
<section>
<header>
<h2><?js if (doc.ancestors && doc.ancestors.length) { ?>
<span class="ancestors"><?js= doc.ancestors.join('') ?></span>
<?js } ?>
<?js= doc.longname ?>
<span class="ancestors"><?js= doc.ancestors.join('') ?></span><?js } ?><?js= doc.name ?>
<?js if (doc.variation) { ?>
<sup class="variation"><?js= doc.variation ?></sup>
<?js } ?></h2>
@@ -27,7 +27,8 @@
<?js if (doc.kind === 'module' && doc.module) { ?>
<?js= self.partial('method.tmpl', doc.module) ?>
<?js } ?>
<?js if (!doc.unexported && doc.kind === 'class') { ?>
<?js if (doc.kind === 'class') { ?>
<?js= self.partial('method.tmpl', doc) ?>
<?js } else { ?>
<?js if (doc.description) { ?>
@@ -43,6 +44,20 @@
<?js } ?>
</div>
<?js if (doc.kind == 'class') {
var subclasses = self.find(function() {
return this.augments && this.augments.indexOf(doc.longname) > -1;
})
if (subclasses.length) {
?>
<h3 class="subsection-title">Subclasses</h3>
<ul><?js subclasses.forEach(function(s) { ?>
<li><?js= self.linkto(s.longname, s.longname) ?>
<?js= (s.interface ? '(Interface)' : '') ?>
</li>
<?js }); ?></ul>
<?js } } ?>
<?js if (doc.augments && doc.augments.length) { ?>
<h3 class="subsection-title">Extends</h3>
@@ -74,7 +89,7 @@
<h3 class="subsection-title">Classes</h3>
<dl><?js classes.forEach(function(c) { ?>
<dt><?js= self.linkto(c.longname, c.longname) ?></dt>
<dt><?js= self.linkto(c.longname, c.name) ?></dt>
<dd><?js if (c.summary) { ?><?js= c.summary ?><?js } ?></dd>
<?js }); ?></dl>
<?js } ?>
@@ -86,34 +101,21 @@
<h3 class="subsection-title">Namespaces</h3>
<dl><?js namespaces.forEach(function(n) { ?>
<dt><a href="namespaces.html#<?js= n.longname ?>"><?js= self.linkto(n.longname, n.longname) ?></a></dt>
<dt><a href="namespaces.html#<?js= n.longname ?>"><?js= self.linkto(n.longname, n.name) ?></a></dt>
<dd><?js if (n.summary) { ?><?js= n.summary ?><?js } ?></dd>
<?js }); ?></dl>
<?js } ?>
<?js
var observables = doc.observables;
if (observables && observables.length && observables.forEach) {
if (doc.observables && doc.observables.length) {
?>
<h3 class="subsection-title">Observable Properties</h3>
<dl><?js= self.partial('observables.tmpl', observables) ?></dl>
<dl><?js= self.partial('observables.tmpl', doc.observables) ?></dl>
<?js } ?>
<?js
var events = doc.events;
if (events && events.length && events.forEach) {
?>
<h3 class="subsection-title">Events</h3>
<?js if (observables && observables.length) { ?>
<p>These events are available in addition to the <b>Observable Properties</b> events listed above.</p>
<?js } ?>
<dl><?js= self.partial('events.tmpl', events) ?></dl>
<?js } ?>
<?js
var members = self.find({kind: 'member', memberof: title === 'Globals'? {isUndefined: true} : doc.longname});
var members = self.find({kind: 'member', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
if (members && members.length && members.forEach) {
?>
<h3 class="subsection-title">Members</h3>
@@ -124,7 +126,7 @@
<?js } ?>
<?js
var methods = self.find({kind: 'function', memberof: title === 'Globals'? {isUndefined: true} : doc.longname});
var methods = self.find({kind: 'function', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
if (methods && methods.length && methods.forEach) {
?>
<h3 class="subsection-title">Methods</h3>
@@ -135,18 +137,27 @@
<?js } ?>
<?js
var typedefs = self.find({kind: 'typedef', memberof: doc.longname});
var typedefs = self.find({kind: 'typedef', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
if (typedefs && typedefs.length && typedefs.forEach) {
?>
<h3 class="subsection-title">TypeDefs</h3>
<h3 class="subsection-title">Type Definitions</h3>
<dl><?js typedefs.forEach(function(e) { ?>
<?js= self.partial('members.tmpl', e) ?>
<?js }); ?></dl>
<dl><?js typedefs.forEach(function(e) {
if (e.signature) {
?>
<?js= self.partial('method.tmpl', e) ?>
<?js
}
else {
?>
<?js= self.partial('members.tmpl', e) ?>
<?js
}
}); ?></dl>
<?js } ?>
<?js
var events = self.find({kind: 'event', memberof: doc.longname});
var events = self.find({kind: 'event', memberof: title === 'Global' ? {isUndefined: true} : doc.longname});
if (events && events.length && events.forEach) {
?>
<h3 class="subsection-title">Events</h3>

View File

@@ -14,58 +14,46 @@ var self = this;
<?js } ?>
<?js if (data.version) {?>
<dt class="tag-version">Version:</dt>
<dd class="tag-version"><ul class="dummy"><li><?js= version ?></li></ul></dd>
<?js } ?>
<?js if (data.since) {?>
<dt class="tag-since">Since:</dt>
<dd class="tag-since"><ul class="dummy"><li><?js= since ?></dd>
<?js } ?>
<?js if (data.version) {?>
<dt class="tag-version">Version:</dt>
<dd class="tag-version"><ul class="dummy"><li><?js= version ?></li></ul></dd>
<?js } ?>
<?js if (data.since) {?>
<dt class="tag-since">Since:</dt>
<dd class="tag-since"><ul class="dummy"><li><?js= since ?></dd>
<?js } ?>
<?js if (data.inherited && data.inherits) { ?>
<dt class="inherited-from">Inherited From:</dt>
<dd class="inherited-from"><ul class="dummy"><li>
<?js= this.linkto(data.inherits, this.htmlsafe(data.inherits)) ?>
</li></dd>
<?js } ?>
<?js if (data.deprecated) { ?>
<dt class="important tag-deprecated">Deprecated:</dt><?js
<?js if (data.deprecated) { ?>
<dt class="important tag-deprecated">Deprecated</dt><?js
if (data.deprecated === true) { ?><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd><?js }
else { ?><dd><ul class="dummy"><li><?js= data.deprecated ?></li><ul></dd><?js }
?>
<?js } ?>
<?js if (data.author && author.length) {?>
<dt class="tag-author">Author:</dt>
<dd class="tag-author">
<?js if (data.author && author.length) {?>
<dt class="tag-author">Author:</dt>
<dd class="tag-author">
<ul><?js author.forEach(function(a) { ?>
<li><?js= a ?></li>
<li><?js= self.resolveAuthorLinks(a) ?></li>
<?js }); ?></ul>
</dd>
<?js } ?>
<?js if (data.copyright) {?>
<dt class="tag-copyright">Copyright:</dt>
<dd class="tag-copyright"><ul class="dummy"><li><?js= copyright ?></li></ul></dd>
<?js } ?>
<?js if (data.license) {?>
<dt class="tag-license">License:</dt>
<dd class="tag-license"><ul class="dummy"><li><?js= license ?></li></ul></dd>
<?js } ?>
<?js if (data.defaultvalue) {?>
<dt class="tag-default">Default Value:</dt>
<dd class="tag-default"><ul class="dummy"><li><?js= data.defaultvalue ?></li></ul></dd>
<?js } ?>
<?js if (data.meta) {?>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li><?js= meta.filename ?>, line <?js= meta.lineno ?></li></ul></dd>
<?js } ?>
</dd>
<?js } ?>
<?js if (data.copyright) {?>
<dt class="tag-copyright">Copyright:</dt>
<dd class="tag-copyright"><ul class="dummy"><li><?js= copyright ?></li></ul></dd>
<?js } ?>
<?js if (data.license) {?>
<dt class="tag-license">License:</dt>
<dd class="tag-license"><ul class="dummy"><li><?js= license ?></li></ul></dd>
<?js } ?>
<?js if (data.defaultvalue) {?>
<dt class="tag-default">Default Value:</dt>
<dd class="tag-default"><ul class="dummy"><li><?js= data.defaultvalue ?></li></ul></dd>
<?js } ?>
<?js if (data.tutorials && tutorials.length) {?>
<dt class="tag-tutorial">Tutorials:</dt>
@@ -75,22 +63,22 @@ var self = this;
<?js }); ?></ul>
</dd>
<?js } ?>
<?js if (data.see && see.length) {?>
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<?js if (data.see && see.length) {?>
<dt class="tag-see">See:</dt>
<dd class="tag-see">
<ul><?js see.forEach(function(s) { ?>
<li><?js= self.linkto(s) ?></li>
<?js }); ?></ul>
</dd>
<?js } ?>
<?js if (data.todo && todo.length) {?>
<dt class="tag-todo">To Do:</dt>
<dd class="tag-todo">
</dd>
<?js } ?>
<?js if (data.todo && todo.length) {?>
<dt class="tag-todo">TODO</dt>
<dd class="tag-todo">
<ul><?js todo.forEach(function(t) { ?>
<li><?js= t ?></li>
<?js }); ?></ul>
</dd>
<?js } ?>
</dd>
<?js } ?>
</dl>

View File

@@ -1,2 +1,2 @@
<?js var data = obj; ?>
<pre><code><?js= data ?></code></pre>
<pre class="prettyprint"><code><?js= data ?></code></pre>

View File

@@ -5,7 +5,12 @@
?>
<p class="code-caption"><?js= example.caption ?></p>
<?js } ?>
<?js if (example.code.toString().indexOf('<pre>') === -1) { ?>
<pre class="prettyprint"><code><?js= example.code ?></code></pre>
<?js } else { ?>
<?js= example.code.replace(/<pre>/g, '<pre class="prettyprint">') ?>
<?js } ?>
<?js
});
?>

View File

@@ -1,19 +1,30 @@
<?js
var data = obj;
if (data.description) {
var data = obj;
?>
<div class="param-desc">
<?js= description ?>
</div>
<?js } ?>
<?js if (data.type && data.type.names) {?>
<?js if (data.description && data.type && data.type.names) { ?>
<dl>
<dt>
Type
</dt>
<dd>
<?js= this.partial('type.tmpl', data.type.names) ?>
</dd>
<dt>
<div class="param-desc">
<?js= data.description ?>
</div>
</dt>
<dt>
<dl>
<dt>
Type
</dt>
<dd>
<?js= this.partial('type.tmpl', data.type.names) ?>
</dd>
</dl>
</dt>
</dl>
<?js } ?>
<?js } else { ?>
<div class="param-desc">
<?js if (data.description) { ?>
<?js= data.description ?>
<?js } else if (data.type && data.type.names) { ?>
<?js= this.partial('type.tmpl', data.type.names) ?>
<?js } ?>
</div>
<?js } ?>

View File

@@ -1,4 +0,0 @@
<?js var data = obj; ?>
<li>
<?js= data ?>
</li>

View File

@@ -3,44 +3,40 @@
<head>
<meta charset="utf-8">
<title>OpenLayers 3 API Documentation - <?js= title ?></title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<script src="scripts/jquery.min.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-jsdoc.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<link type="text/css" rel="stylesheet" href="styles/ol.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/bootstrap.min.css">
<link type="text/css" rel="stylesheet" href="styles/jaguar.css">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="/"><img src="../resources/logo.png"> OpenLayers 3</a>
<a class="brand" href="index.html">API Documentation</a>
</div>
</div>
</div>
<div id="main">
<?js= content ?>
<div id="wrap" class="clearfix">
<?js= this.partial('navigation.tmpl', this) ?>
<div class="main">
<h1 class="page-title" data-filename="<?js= filename ?>"><?js= title ?></h1>
<?js= content ?>
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc <?js= env.version.number ?></a> on <?js= (new Date()) ?>
</footer>
</div>
</div>
<nav>
<?js= this.nav ?>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3</a>
</footer>
<script> prettyPrint(); </script>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
<script src="scripts/main.js"></script>
</body>
</html>
</html>

View File

@@ -9,6 +9,6 @@ var self = this;
<?js if (data.readme) { ?>
<section>
<article><?js= data.readme ?></article>
<article class="readme"><?js= data.readme ?></article>
</section>
<?js } ?>
<?js } ?>

View File

@@ -1,14 +1,26 @@
<?js var data = obj; ?>
<dt class="<?js= data.access ?>">
<h4 class="name" id="<?js= id ?>"><?js= data.attribs + name + data.signature ?></h4>
<?js= this.partial('stability.tmpl', data) ?>
<?js
var data = obj;
var self = this;
var typeSignature = '';
if (data.type && data.type.names) {
data.type.names.forEach(function (name) {
typeSignature += '<span class="type-signature type ' + name.toLowerCase() + '">{' + self.linkto(name, self.htmlsafe(name)) + '}</span> ';
});
}
?>
<dt>
<div class="nameContainer">
<h4 class="name" id="<?js= id ?>">
<?js= data.attribs + (data.scope === 'static' ? longname : name) + typeSignature ?>
<?js= this.partial('stability.tmpl', data) ?>
</h4>
</div>
<?js if (data.summary) { ?>
<p class="summary"><?js= summary ?></p>
<?js } ?>
</dt>
<dd class="<?js= data.access ?>">
<dd>
<?js if (data.description) { ?>
<div class="description">
<?js= data.description ?>

View File

@@ -3,10 +3,22 @@ var data = obj;
var self = this;
?>
<dt>
<h4 class="name" id="<?js= id ?>"><?js= data.attribs + (kind == 'class'? 'new ':'') + name + data.signature ?></h4>
<?js= this.partial('stability.tmpl', data) ?>
<div class="nameContainer<?js if (data.inherited) { ?> inherited<?js } ?>">
<?js if (data.stability || kind !== 'class') { ?>
<h4 class="name" id="<?js= id ?>">
<?js= data.attribs + (kind === 'class' ? 'new ' : '') + (data.scope === 'static' ? longname : name) + (kind !== 'event' ? data.signature : '') ?>
<?js if (data.inherited || data.inherits) { ?>
<span class="inherited"><?js= this.linkto(data.inherits, 'inherited') ?></span>
<?js } ?>
<?js= this.partial('stability.tmpl', data) ?>
</h4>
<?js if (data.meta) {?>
<div class="tag-source">
<?js= self.linkto(meta.filename) ?>, <?js= self.linkto(meta.filename, 'line ' + meta.lineno, null, 'line' + meta.lineno) ?>
</div>
<?js } ?>
<?js } ?>
</div>
<?js if (data.summary) { ?>
<p class="summary"><?js= summary ?></p>
<?js } ?>
@@ -33,17 +45,55 @@ var self = this;
<ul><li><?js= this.linkto(data['this'], data['this']) ?></li></ul>
<?js } ?>
<?js if (data.stability || kind !== 'class') { ?>
<?js if (data.params && params.length) { ?>
<h5>Parameters:</h5>
<?js= this.partial('params.tmpl', params) ?>
<?js } ?>
<?js } ?>
<?js= this.partial('details.tmpl', data) ?>
<?js if (data.fires && fires.length) { ?>
<h5>Fires:</h5>
<ul><?js fires.forEach(function(f) { ?>
<?js= self.partial('fires.tmpl', self.linkto(f) ) ?>
<ul><?js fires.forEach(function(f) {
var parts = f.split(/#?event:/);
var type = parts.pop();
var eventClassName = parts[0];
parts = type.split(' ');
type = parts.shift();
var description = parts.length ? parts.join(' ') : '';
var eventDoclet = self.find({longname: f})[0];
if (eventDoclet && !description && eventDoclet.description) {
description = eventDoclet.description.replace(/<[^>]*>/g, '');
}
?>
<li>
<code><?js= self.linkto(f, type) ?></code>
<?js if (eventClassName) {
var eventClass = self.find({longname: eventClassName})[0];
if (eventClass) { ?>
(<?js= self.linkto(eventClass.longname) ?>)
<?js } ?>
<?js } ?>
<?js= self.partial('stability.tmpl', eventDoclet || (data.stability ? data : {stability: 'experimental'})) ?>
<?js if (description) { ?> -
<?js= description ?>
<?js } ?>
</li>
<?js }); ?></ul>
<?js } ?>
<?js if (data.listens && listens.length) { ?>
<h5>Listens to Events:</h5>
<ul><?js listens.forEach(function(f) { ?>
<li><?js= self.linkto(f) ?></li>
<?js }); ?></ul>
<?js } ?>
<?js if (data.listeners && listeners.length) { ?>
<h5>Listeners of This Event:</h5>
<ul><?js listeners.forEach(function(f) { ?>
<li><?js= self.linkto(f) ?></li>
<?js }); ?></ul>
<?js } ?>
@@ -60,16 +110,9 @@ var self = this;
} } ?>
<?js if (data.returns && returns.length) { ?>
<h5>Returns:</h5>
<?js if (returns.length > 1) { ?><ul><?js
returns.forEach(function(r) { ?>
<li><?js= self.partial('returns.tmpl', r) ?></li>
<?js });
?></ul><?js } else {
returns.forEach(function(r) { ?>
<?js= self.partial('returns.tmpl', r) ?>
<?js });
} } ?>
<?js if (returns.length > 1) { ?><h5>Returns:</h5><?js } ?>
<?js= self.partial('returns.tmpl', data.returns) ?>
<?js } ?>
<?js if (data.examples && examples.length) { ?>
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>

View File

@@ -0,0 +1,96 @@
<?js
var self = this;
?>
<div class="navigation">
<div class="search">
<input id="search" type="text" class="form-control input-sm" placeholder="Search Documentation">
</div>
<ul class="list">
<?js
this.nav.forEach(function (item) {
?>
<li class="item" data-name="<?js= item.longname ?>">
<span class="title">
<?js= self.linkto(item.longname, item.longname) ?>
<?js if (item.type === 'namespace' &&
(item.members.length + item.typedefs.length + item.methods.length +
item.events.length > 0)) { ?>
<span class="static">static</span>
<?js } ?>
</span>
<ul class="members itemMembers">
<?js
if (item.members.length) {
?>
<span class="subtitle">Members</span>
<?js
item.members.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>"><?js= self.linkto(v.longname, v.name) ?></li>
<?js
});
}
?>
</ul>
<ul class="typedefs itemMembers">
<?js
if (item.typedefs.length) {
?>
<span class="subtitle">Typedefs</span>
<?js
item.typedefs.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>"><?js= self.linkto(v.longname, v.name) ?></li>
<?js
});
}
?>
</ul>
<ul class="methods itemMembers">
<?js
if (item.methods.length) {
?>
<span class="subtitle">Methods</span>
<?js
item.methods.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>"><?js= self.linkto(v.longname, v.name) ?></li>
<?js
});
}
?>
</ul>
<ul class="fires itemMembers">
<?js
if (item.fires && item.fires.length) {
?>
<span class="subtitle">Fires</span>
<?js
item.fires.forEach(function (v) {
v = self.find({longname: v})[0] || {longname: v, name: v.split(/#?event:/)[1]};
?>
<li data-name="<?js= v.longname ?>"><?js= self.linkto(v.longname, v.name) ?></li>
<?js
});
}
?>
</ul>
<ul class="events itemMembers">
<?js
if (item.events.length) {
?>
<span class="subtitle">Events</span>
<?js
item.events.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>"><?js= self.linkto(v.longname, v.name) ?></li>
<?js
});
}
?>
</ul>
</li>
<?js }); ?>
</ul>
</div>

View File

@@ -21,8 +21,16 @@
params.hasDefault = false;
params.hasName = false;
var colspan = 2;
params.forEach(function(param) {
if (!param) { return; }
if (param.type && param.type.names && param.type.names.indexOf('undefined') !== -1) {
param.optional = true;
}
if (param.name.indexOf('var_') == 0) {
params.hasAttributes = true;
param.variable = true;
}
if (param.optional || param.nullable) {
params.hasAttributes = true;
@@ -33,6 +41,7 @@
}
if (typeof param.defaultvalue !== 'undefined') {
++colspan;
params.hasDefault = true;
}
});
@@ -47,10 +56,6 @@
<th>Type</th>
<?js if (params.hasAttributes) {?>
<th>Argument</th>
<?js } ?>
<?js if (params.hasDefault) {?>
<th>Default</th>
<?js } ?>
@@ -71,24 +76,13 @@
<td class="name"><code><?js= param.name.replace(/^opt_/, "") ?></code></td>
<?js } ?>
<?js if (!param.subparams) {?>
<td class="type">
<?js if (param.type && param.type.names) {?>
<?js= self.partial('type.tmpl', param.type.names) ?>
<?js } ?>
</td>
<?js if (params.hasAttributes) {?>
<td class="attributes">
<?js if (param.optional) { ?>
&lt;optional><br>
<?js } ?>
<?js if (param.nullable) { ?>
&lt;nullable><br>
<?js } ?>
</td>
<?js } ?>
<?js if (params.hasDefault) {?>
<td class="default">
<?js if (typeof param.defaultvalue !== 'undefined') { ?>
@@ -96,9 +90,22 @@
<?js } ?>
</td>
<?js } ?>
<?js } ?>
<td class="description last"><?js= param.description ?><?js if (param.subparams) { ?>
<h6>Properties</h6>
<td<?js= (param.subparams ? ' colspan=' + colspan : ' ') ?> class="description last">
<?js if (params.hasAttributes) {?>
<?js if (param.optional) { ?>
<span class="optional">optional</span>
<?js } ?>
<?js if (param.nullable) { ?>
<span class="nullable">nullable</span>
<?js } ?>
<?js if (param.variable) { ?>
<span class="repeatable">repeatable</span>
<?js } ?>
<?js } ?>
<?js= param.description ?><?js if (param.subparams) { ?>
<?js= self.partial('params.tmpl', param.subparams) ?>
<?js } ?></td>
</tr>

View File

@@ -5,7 +5,7 @@
var parentProp = null;
props.forEach(function(prop, i) {
if (!prop) { return; }
if ( parentProp && prop.name.indexOf(parentProp.name + '.') === 0 ) {
if ( parentProp && prop.name && prop.name.indexOf(parentProp.name + '.') === 0 ) {
prop.name = prop.name.substr(parentProp.name.length+1);
parentProp.subprops = parentProp.subprops || [];
parentProp.subprops.push(prop);

View File

@@ -1,19 +1,72 @@
<?js
var data = obj;
if (data.description) {
?>
<div class="param-desc">
<?js= description ?>
</div>
<?js } ?>
var returns = obj;
var parentReturn = null;
<?js if (data.type && data.type.names) {?>
<dl>
<dt>
Type
</dt>
<dd>
<?js= this.partial('type.tmpl', data.type.names) ?>
</dd>
</dl>
returns.forEach(function (ret, i) {
if (ret && (ret.description || ret.name)) {
ret.description = ret.description.toString().replace(/<\/?p>/g, '');
var isNamed = ret.name ? true : false;
var name = ret.name || ret.description;
var startSpacePos = name.indexOf(" ");
if (parentReturn !== null && name.indexOf(parentReturn.name + '.') === 0) {
ret.name = isNamed ? name.substr(parentReturn.name.length + 1) : name.substr(parentReturn.name.length + 1, startSpacePos - (parentReturn.name.length + 1));
parentReturn.subReturns = parentReturn.subReturns || [];
parentReturn.subReturns.push(ret);
returns[i] = null;
} else {
if (!isNamed) {
ret.name = ret.description.substr(0, startSpacePos !== -1 ? startSpacePos : ret.description.length);
}
parentReturn = ret;
}
}
});
?>
<?js
if (returns.length > 1) {
?>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<?js
var self = this;
returns.forEach(function(ret) {
if (!ret) {
return false;
}
?>
<tr>
<td class="name"><code><?js= ret.name ?></code></td>
<td class="type">
<?js
if (ret.type && ret.type.names) {
ret.type.names.forEach(function(name, i) { ?>
<?js= self.linkto(name, self.htmlsafe(name)) ?>
<?js if (i < ret.type.names.length-1) { ?> | <?js } ?>
<?js });
}
?>
</td>
<td class="description last"><?js= ret.description ?><?js if (ret.subReturns) { ?>
<?js= self.partial('returns.tmpl', ret.subReturns) ?>
<?js } ?></td>
</tr>
<?js }); ?>
</tbody>
</table>
<?js } else if (returns[0].description) { ?>
<h5>Returns:</h5>
<?js= returns[0].description ?>
<br />
<?js } ?>

View File

@@ -2,8 +2,6 @@
var data = obj;
var self = this;
if (data.stability) { ?>
<div class="stability stability-<?js= stability ?>">Stability: <?js= data.stability ?></div>
<?js } else { ?>
<div class="stability">Stability: not documented</div>
if (data.stability != 'stable') { ?>
<span class="stability <?js= data.stability ?>"><?js= data.stability ?></span>
<?js } ?>

View File

@@ -28,3 +28,6 @@ page.open(examplePath, function(s) {
}
phantom.exit(exitCode);
});
page.onConsoleMessage = function(msg) {
console.log('console:', msg);
};

View File

@@ -1,219 +0,0 @@
#!/usr/bin/env python
from operator import attrgetter
from optparse import OptionParser
import re
import sys
def simplerepr(obj):
keys = sorted(key for key in obj.__dict__.keys() if not key.startswith('_'))
attrs = ''.join(' %s=%r' % (key, obj.__dict__[key]) for key in keys)
return '<%s%s>' % (obj.__class__.__name__, attrs)
class Exportable(object):
def __init__(self, name):
self.name = name
__repr__ = simplerepr
def export(self):
return ''
def extern(self):
return ''
def typedef(self):
return ''
class ObjectLiteral(Exportable):
def __init__(self, name, objects):
Exportable.__init__(self, name)
self.prop_types = {}
self.objects = objects
__repr__ = simplerepr
def extern(self):
lines = []
lines.append('\n\n\n')
lines.append('/**\n')
lines.append(' * @interface\n')
lines.append(' */\n')
lines.append('%s = function() {};\n' % (self.extern_name(),))
for prop in sorted(self.prop_types.keys()):
lines.append('\n\n')
lines.append('/**\n')
prop_types = self.prop_types[prop].split('|')
for i, t in enumerate(prop_types):
if t in self.objects and isinstance(self.objects[t], ObjectLiteral):
prop_types[i] = self.objects[t].extern_name()
prop_types = '|'.join(prop_types)
lines.append(' * @type {%s}\n' % (prop_types,))
lines.append(' */\n')
lines.append('%s.prototype.%s;\n' % (self.extern_name(), prop))
return ''.join(lines)
def extern_name(self):
return re.sub(r'(olx\.\S+)', r'\1Extern', self.name)
def extern_namespace(self):
return '.'.join(self.extern_name().split('.')[:-1]) or None
def provide(self):
return 'goog.provide(\'%s\');\n' % (self.name,)
def typedef(self):
lines = []
lines.append('\n\n')
lines.append('/**\n')
for i, prop in enumerate(sorted(self.prop_types.keys())):
prefix = ' * @typedef {{' if i == 0 else ' * '
suffix = '}}' if i == len(self.prop_types) - 1 else ','
type = self.prop_types[prop]
if '|' in type:
type = '(%s)' % (type,)
lines.append('%s%s: %s%s\n' % (prefix, prop, type, suffix))
lines.append(' */\n')
lines.append('%s;\n' % (self.name,))
return ''.join(lines)
class Symbol(Exportable):
def __init__(self, name, export_symbol):
Exportable.__init__(self, name)
self.export_symbol = export_symbol
self.props = set()
__repr__ = simplerepr
def export(self):
lines = []
if self.export_symbol:
lines.append('\n\ngoog.exportSymbol(\n \'%s\',\n %s);\n' % (self.name, self.name))
lines.extend('goog.exportProperty(\n %s,\n \'%s\',\n %s.%s);\n' % (self.name, prop, self.name, prop) for prop in sorted(self.props))
return ''.join(lines)
def main(argv):
option_parser = OptionParser()
option_parser.add_option('--exports', action='store_true')
option_parser.add_option('--externs', action='store_true')
option_parser.add_option('--typedef', action='store_true')
options, args = option_parser.parse_args(argv[1:])
objects = {}
requires = set()
for arg in args:
in_comment = False
object_literal = None
for line in open(arg, 'rU'):
line = line.strip()
if not line:
continue
if line == '/**':
assert not in_comment
in_comment = True
continue
if line == '*/':
assert in_comment
in_comment = False
object_literal = None
continue
if in_comment:
if not line.startswith('*'):
raise RuntimeError(line) # malformed comment
m = re.match(r'\*\s*@typedef\s*\{Object\}\s*(?P<name>\S+)', line)
if m:
assert object_literal is None
name = m.group('name')
if name in objects:
raise RuntimeError(line) # Name already defined
object_literal = ObjectLiteral(name, objects)
objects[name] = object_literal
continue
m = re.match(r'\*\s*@property\s*{(?P<type>.*?)}\s*(?P<prop>\S+)', line)
if m:
assert object_literal is not None
prop = m.group('prop')
if prop in object_literal.prop_types:
raise RuntimeError(line) # Duplicate property
type = m.group('type')
object_literal.prop_types[prop] = type
continue
continue
m = re.match(r'@exportProperty\s+(?P<prop>\S+)\Z', line)
if m:
components = m.group('prop').split('.')
if components[-2] == 'prototype':
requires.add('.'.join(components[:-2]))
else:
requires.add('.'.join(components[:-1]))
name = '.'.join(components[:-1])
prop = components[-1]
if name in objects:
symbol = objects[name]
else:
symbol = Symbol(name, False)
objects[name] = symbol
symbol.props.add(prop)
continue
m = re.match(r'@exportSymbol\s+(?P<name>\S+)\Z', line)
if m:
name = m.group('name')
if name in objects:
raise RuntimeError(line) # Name already defined
symbol = Symbol(name, True)
objects[name] = symbol
components = m.group('name').split('.')
if re.match(r'[A-Z]', components[-1]):
requires.add(name)
else:
requires.add('.'.join(components[:-1]))
continue
raise RuntimeError(line)
objects = sorted(objects.values(), key=attrgetter('name'))
if options.exports:
if requires:
for require in sorted(requires):
sys.stdout.write('goog.require(\'%s\');\n' % (require,))
for obj in objects:
sys.stdout.write(obj.export())
if options.externs:
object_literals = [obj for obj in objects if isinstance(obj, ObjectLiteral)]
sys.stdout.write('/**\n')
sys.stdout.write(' * @externs\n')
sys.stdout.write(' */\n')
namespaces = sorted(set(filter(None, (object_literal.extern_namespace() for object_literal in object_literals))))
for namespace in namespaces:
sys.stdout.write('\n\n')
sys.stdout.write('/**\n')
sys.stdout.write(' * @type {Object}\n')
sys.stdout.write(' */\n')
if '.' in namespace:
sys.stdout.write('%s = {};\n' % (namespace,))
else:
sys.stdout.write('var %s;\n' % (namespace,))
for object_literal in object_literals:
sys.stdout.write(object_literal.typedef())
sys.stdout.write(object_literal.extern())
if options.typedef:
object_literals = [obj for obj in objects if isinstance(obj, ObjectLiteral)]
for object_literal in object_literals:
sys.stdout.write(object_literal.provide())
for object_literal in object_literals:
sys.stdout.write(object_literal.typedef())
if __name__ == '__main__':
sys.exit(main(sys.argv))

140
build.py
View File

@@ -20,10 +20,10 @@ if sys.platform == 'win32':
'GJSLINT': 'gjslint.exe',
'JAVA': 'java.exe',
'JAR': 'jar.exe',
'JSDOC': 'jsdoc.cmd',
'JSDOC': './node_modules/.bin/jsdoc',
'JSHINT': './node_modules/.bin/jshint',
'PYTHON': 'python.exe',
'PHANTOMJS': 'phantomjs.cmd'
'PHANTOMJS': './node_modules/.bin/phantomjs'
}
sys_dir = os.environ.get('SYSTEMDRIVE')
@@ -75,9 +75,9 @@ else:
variables.JSHINT = './node_modules/.bin/jshint'
variables.JAVA = 'java'
variables.JAR = 'jar'
variables.JSDOC = 'jsdoc'
variables.JSDOC = './node_modules/.bin/jsdoc'
variables.PYTHON = 'python'
variables.PHANTOMJS = 'phantomjs'
variables.PHANTOMJS = './node_modules/.bin/phantomjs'
variables.BRANCH = output(
'%(GIT)s', 'rev-parse', '--abbrev-ref', 'HEAD').strip()
@@ -86,13 +86,7 @@ EXECUTABLES = [variables.GIT, variables.GJSLINT, variables.JAVA, variables.JAR,
variables.JSDOC, variables.JSHINT, variables.PYTHON,
variables.PHANTOMJS]
EXPORTS = [path
for path in ifind('src')
if path.endswith('.exports')]
EXTERNAL_SRC = [
'build/src/external/externs/types.js',
'build/src/external/src/exports.js']
EXPORTS = 'build/exports.js'
EXAMPLES = [path
for path in ifind('examples')
@@ -115,10 +109,6 @@ EXAMPLES_JSON = ['build/' + example.replace('.html', '.json')
EXAMPLES_COMBINED = ['build/' + example.replace('.html', '.combined.js')
for example in EXAMPLES]
INTERNAL_SRC = [
'build/src/internal/src/requireall.js',
'build/src/internal/src/types.js']
GLSL_SRC = [path
for path in ifind('src')
if path.endswith('.glsl')]
@@ -186,15 +176,15 @@ def build_ol_css(t):
t.touch()
@target('build/ol.js', PLOVR_JAR, SRC, EXTERNAL_SRC, SHADER_SRC,
LIBTESS_JS_SRC, 'buildcfg/base.json', 'buildcfg/ol.json')
@target('build/ol.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC, LIBTESS_JS_SRC,
'buildcfg/base.json', 'buildcfg/ol.json')
def build_ol_js(t):
t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar',
PLOVR_JAR, 'build', 'buildcfg/ol.json')
report_sizes(t)
@target('build/ol-simple.js', PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC,
@target('build/ol-simple.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC,
LIBTESS_JS_SRC, 'buildcfg/base.json', 'buildcfg/ol.json',
'buildcfg/ol-simple.json')
def build_ol_simple_js(t):
@@ -203,8 +193,8 @@ def build_ol_simple_js(t):
report_sizes(t)
@target('build/ol-whitespace.js', PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC,
LIBTESS_JS_SRC, 'buildcfg/base.json', 'buildcfg/ol.json',
@target('build/ol-whitespace.js', PLOVR_JAR, SRC, EXPORTS,
SHADER_SRC, LIBTESS_JS_SRC, 'buildcfg/base.json', 'buildcfg/ol.json',
'buildcfg/ol-whitespace.json')
def build_ol_whitespace_js(t):
t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar',
@@ -215,26 +205,16 @@ def build_ol_whitespace_js(t):
virtual('build-all', 'build/ol-all.js')
@target('build/ol-all.js', PLOVR_JAR, SRC, EXTERNAL_SRC, INTERNAL_SRC,
SHADER_SRC, LIBTESS_JS_SRC, 'buildcfg/base.json',
'buildcfg/ol-all.json')
@target('build/ol-all.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC, LIBTESS_JS_SRC,
'buildcfg/base.json', 'buildcfg/ol-all.json')
def build_ol_all_js(t):
t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar',
PLOVR_JAR, 'build', 'buildcfg/ol-all.json')
@target('build/src/external/externs/types.js', 'bin/generate-exports.py',
'src/objectliterals.jsdoc')
def build_src_external_externs_types_js(t):
t.output('%(PYTHON)s', 'bin/generate-exports.py',
'--externs', 'src/objectliterals.jsdoc')
@target('build/src/external/src/exports.js', 'bin/generate-exports.py',
'src/objectliterals.jsdoc', EXPORTS)
def build_src_external_src_exports_js(t):
t.output('%(PYTHON)s', 'bin/generate-exports.py',
'--exports', 'src/objectliterals.jsdoc', EXPORTS)
@target(EXPORTS, SRC)
def build_exports_js(t):
t.run('node', 'tasks/generate-exports.js', EXPORTS)
for glsl_src in GLSL_SRC:
@@ -249,36 +229,19 @@ for glsl_src in GLSL_SRC:
shader_src_helper(glsl_src)
def _build_require_list(dependencies, output_file_name):
@target('build/test/requireall.js', SPEC)
def build_test_requireall_js(t):
requires = set()
for dependency in dependencies:
for dependency in t.dependencies:
for line in open(dependency, 'rU'):
match = re.match(r'goog\.provide\(\'(.*)\'\);', line)
if match:
requires.add(match.group(1))
with open(output_file_name, 'wb') as f:
with open(t.name, 'wb') as f:
for require in sorted(requires):
f.write('goog.require(\'%s\');\n' % (require,))
@target('build/src/internal/src/requireall.js', SRC, SHADER_SRC,
LIBTESS_JS_SRC)
def build_src_internal_src_requireall_js(t):
_build_require_list(t.dependencies, t.name)
@target('build/test/requireall.js', SPEC)
def build_test_requireall_js(t):
_build_require_list(t.dependencies, t.name)
@target('build/src/internal/src/types.js', 'bin/generate-exports.py',
'src/objectliterals.jsdoc')
def build_src_internal_types_js(t):
t.output('%(PYTHON)s', 'bin/generate-exports.py',
'--typedef', 'src/objectliterals.jsdoc')
virtual('build-examples', 'examples', 'build/examples/all.combined.js',
EXAMPLES_COMBINED)
@@ -297,7 +260,7 @@ def examples_examples_list_js(t):
@target('build/examples/all.combined.js', 'build/examples/all.js', PLOVR_JAR,
SRC, INTERNAL_SRC, SHADER_SRC, LIBTESS_JS_SRC,
SRC, SHADER_SRC, LIBTESS_JS_SRC,
'buildcfg/base.json', 'build/examples/all.json')
def build_examples_all_combined_js(t):
t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar',
@@ -313,12 +276,16 @@ def build_examples_all_js(t):
@rule(r'\Abuild/examples/(?P<id>.*).json\Z')
def examples_star_json(name, match):
def action(t):
# It would make more sense to use olx.js as an input file here. We use
# it as an externs file instead to prevent "Cannot read property '*' of
# undefined" error when running examples in "raw" or "whitespace" mode.
# Note that we use the proper way in buildcfg/examples-all.json, which
# is only used to check the examples code using the compiler.
content = json.dumps({
'id': match.group('id'),
'inherits': '../../buildcfg/base.json',
'inputs': [
'../examples/%(id)s.js' % match.groupdict(),
'../build/src/internal/src/types.js',
'../examples/%(id)s.js' % match.groupdict()
],
'externs': [
'//jquery-1.7.js',
@@ -328,6 +295,7 @@ def examples_star_json(name, match):
'../externs/example.js',
'../externs/geojson.js',
'../externs/oli.js',
'../externs/olx.js',
'../externs/proj4js.js',
'../externs/tilejson.js',
'../externs/topojson.js',
@@ -347,7 +315,7 @@ def examples_star_combined_js(name, match):
PLOVR_JAR, 'build', 'build/examples/%(id)s.json' %
match.groupdict())
report_sizes(t)
dependencies = [PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC, LIBTESS_JS_SRC,
dependencies = [PLOVR_JAR, SRC, SHADER_SRC, LIBTESS_JS_SRC,
'buildcfg/base.json',
'examples/%(id)s.js' % match.groupdict(),
'build/examples/%(id)s.json' % match.groupdict()]
@@ -360,42 +328,21 @@ def serve(t):
'buildcfg/ol-all.json', EXAMPLES_JSON, 'buildcfg/test.json')
@target('serve-integration-test', PLOVR_JAR, INTERNAL_SRC)
@target('serve-integration-test', PLOVR_JAR)
def serve_precommit(t):
t.run('%(JAVA)s', '-jar', PLOVR_JAR, 'serve',
'buildcfg/ol-all.json', 'buildcfg/test.json')
virtual('lint', 'build/lint-timestamp', 'build/lint-generated-timestamp',
'build/lint-libtess.js-timestamp', 'build/check-requires-timestamp',
'build/check-whitespace-timestamp')
virtual('lint', 'build/lint-timestamp', 'build/lint-libtess.js-timestamp',
'build/check-requires-timestamp', 'build/check-whitespace-timestamp')
@target('build/lint-timestamp', SRC, EXAMPLES_SRC, SPEC, precious=True)
@target('build/lint-timestamp', SRC, EXPORTS, EXAMPLES_SRC, SPEC, precious=True)
def build_lint_src_timestamp(t):
t.run('%(GJSLINT)s',
'--jslint_error=all',
'--custom_jsdoc_tags=event,fires,todo,function',
'--strict',
t.newer(t.dependencies))
t.touch()
@target('build/lint-generated-timestamp', INTERNAL_SRC, EXTERNAL_SRC,
precious=True)
def build_lint_generated_timestamp(t):
limited_doc_files = [
path
for path in ifind('externs', 'build/src/external/externs')
if path.endswith('.js')]
t.run('%(GJSLINT)s',
'--jslint_error=all',
# ignore error for max line length (for these auto-generated sources)
'--disable=110',
'--custom_jsdoc_tags=todo',
# for a complete list of error codes to allow, see
# http://closure-linter.googlecode.com/svn/trunk/closure_linter/errors.py
'--limited_doc_files=%s' % (','.join(limited_doc_files),),
'--custom_jsdoc_tags=event,fires,todo,function,classdesc',
'--strict',
t.newer(t.dependencies))
t.touch()
@@ -413,8 +360,8 @@ def build_lint_libtess_js_timestamp(t):
virtual('jshint', 'build/jshint-timestamp')
@target('build/jshint-timestamp', SRC, EXAMPLES_SRC, SPEC, precious=True)
@target('build/jshint-timestamp', SRC, EXPORTS, EXAMPLES_SRC, SPEC,
precious=True)
def build_jshint_timestamp(t):
t.run(variables.JSHINT, '--verbose', t.newer(t.dependencies))
t.touch()
@@ -443,8 +390,8 @@ def _strip_comments(lines):
yield lineno, line
@target('build/check-requires-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC,
EXAMPLES_SRC, SHADER_SRC, LIBTESS_JS_SRC, SPEC)
@target('build/check-requires-timestamp', SRC, EXAMPLES_SRC,
SHADER_SRC, LIBTESS_JS_SRC, SPEC)
def build_check_requires_timestamp(t):
from zipfile import ZipFile
unused_count = 0
@@ -463,8 +410,6 @@ def build_check_requires_timestamp(t):
if m:
all_provides.add(m.group(1))
for filename in sorted(t.dependencies):
if filename == 'build/src/internal/src/requireall.js':
continue
require_linenos = {}
uses = set()
lines = open(filename, 'rU').readlines()
@@ -544,8 +489,6 @@ def build_check_requires_timestamp(t):
for key, child in root.children.iteritems()]
missing_count = 0
for filename in sorted(t.dependencies):
if filename in INTERNAL_SRC or filename in EXTERNAL_SRC:
continue
provides = set()
requires = set()
uses = set()
@@ -588,9 +531,8 @@ def build_check_requires_timestamp(t):
t.touch()
@target('build/check-whitespace-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC,
EXAMPLES_SRC, SPEC, EXPORTS, JSDOC_SRC, LIBTESS_JS_SRC,
precious=True)
@target('build/check-whitespace-timestamp', SRC, EXPORTS, EXAMPLES_SRC,
SPEC, JSDOC_SRC, LIBTESS_JS_SRC, precious=True)
def build_check_whitespace_timestamp(t):
CR_RE = re.compile(r'\r')
LEADING_WHITESPACE_RE = re.compile(r'\s+')
@@ -637,7 +579,7 @@ virtual('apidoc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables))
@target('build/jsdoc-%(BRANCH)s-timestamp' % vars(variables), 'host-resources',
'build/src/external/src/exports.js', SRC, SHADER_SRC,
EXPORTS, SRC, SHADER_SRC,
ifind('apidoc/template'))
def jsdoc_BRANCH_timestamp(t):
t.run('%(JSDOC)s', 'apidoc/index.md', '-c', 'apidoc/conf.json',
@@ -750,7 +692,7 @@ def proj4js_zip(t):
t.info('downloaded %r', t.name)
virtual('test-deps', INTERNAL_SRC, PROJ4JS, 'build/test/requireall.js')
virtual('test-deps', PROJ4JS, 'build/test/requireall.js')
@target('test', 'test-deps', phony=True)

View File

@@ -51,6 +51,7 @@
"../externs/closure-compiler.js",
"../externs/geojson.js",
"../externs/oli.js",
"../externs/olx.js",
"../externs/proj4js.js",
"../externs/tilejson.js",
"../externs/topojson.js",
@@ -67,7 +68,6 @@
],
"paths": [
"../build/src/internal/src",
"../src"
],

View File

@@ -16,6 +16,6 @@
"inherits": "base.json",
"inputs": [
"../build/examples/all.js",
"../build/src/internal/src/types.js"
"../externs/olx.js"
]
}

View File

@@ -0,0 +1,16 @@
{
"opts": {
"recurse": true,
"template": "buildcfg/jsdoc/info"
},
"tags": {
"allowUnknownTags": true
},
"source": {
"includePattern": "\\.js$"
},
"plugins": [
"buildcfg/jsdoc/info/define-plugin",
"buildcfg/jsdoc/info/todo-plugin"
]
}

View File

@@ -0,0 +1,35 @@
/**
* @fileoverview This plugin extracts info from boolean defines. This only
* handles boolean defines with the default value in the description. Default
* is assumed to be provided with something like "default is `true`" (case
* insensitive, with or without ticks).
*/
var DEFAULT_VALUE = /default\s+is\s+`?(true|false)`?/i;
/**
* Hook to define new tags.
* @param {Object} dictionary The tag dictionary.
*/
exports.defineTags = function(dictionary) {
dictionary.defineTag('define', {
canHaveType: true,
mustHaveValue: true,
onTagged: function(doclet, tag) {
var types = tag.value.type.names;
if (types.length === 1 && types[0] === 'boolean') {
var match = tag.value.description.match(DEFAULT_VALUE);
if (match) {
doclet.define = {
default: match[1] === 'true'
};
doclet.description = tag.value.description;
}
}
}
});
};

View File

@@ -0,0 +1,60 @@
/**
* @fileoverview Generates JSON output based on exportable symbols (those with
* an api tag) and boolean defines (with a define tag and a default value).
*/
var assert = require('assert');
var fs = require('fs');
var path = require('path');
/**
* Publish hook for the JSDoc template. Writes to JSON stdout.
* @param {function} data The root of the Taffy DB containing doclet records.
* @param {Object} opts Options.
*/
exports.publish = function(data, opts) {
var cwd = process.cwd();
// get all doclets with the "api" property or define (excluding enums,
// typedefs and events)
var docs = data(
[{define: {isObject: true}}, {api: {isString: true}}],
{isEnum: {'!is': true}},
{kind: {'!is': 'typedef'}},
{kind: {'!is': 'event'}}).get();
// get symbols data, filter out those that are members of private classes
var symbols = [];
var defines = [];
docs.filter(function(doc) {
var include = true;
var constructor = doc.memberof;
if (constructor && constructor.substr(-1) === '_') {
assert.strictEqual(doc.inherited, true,
'Unexpected export on private class: ' + doc.longname);
include = false;
}
return include;
}).forEach(function(doc) {
if (doc.define) {
defines.push({
name: doc.longname,
description: doc.description,
path: path.join(doc.meta.path, doc.meta.filename),
default: doc.define.default
});
} else {
symbols.push({
name: doc.longname,
kind: doc.kind,
description: doc.classdesc || doc.description,
extends: doc.augments,
path: path.join(doc.meta.path, doc.meta.filename)
});
}
});
process.stdout.write(
JSON.stringify({symbols: symbols, defines: defines}, null, 2));
};

View File

@@ -0,0 +1,26 @@
/**
* @fileoverview This plugin should go away when we get rid of Plovr and can
* use Closure Compiler's extra_annotation_name option. Until then, we hijack
* the todo tag to add doclet properties for other tags we eventually want to
* support. For example, the "todo api" tag can eventually be replaced with
* the "api" tag.
*/
/**
* Our hook to define new tags.
* @param {Object} dictionary The tag dictionary.
*/
exports.defineTags = function(dictionary) {
dictionary.defineTag('todo', {
mustHaveValue: true,
onTagged: function(doclet, tag) {
var parts = tag.text.split(' ');
if (parts[0] === 'api') {
doclet.api = parts.slice(1).join(' ').trim();
}
}
});
};

View File

@@ -3,11 +3,11 @@
"id": "ol-all",
"externs": [
"../build/src/external/externs/types.js",
"../externs/bingmaps.js",
"../externs/closure-compiler.js",
"../externs/geojson.js",
"../externs/oli.js",
"../externs/olx.js",
"../externs/proj4js.js",
"../externs/tilejson.js",
"../externs/topojson.js",
@@ -17,8 +17,7 @@
"inherits": "base.json",
"inputs": [
"../build/src/internal/src/requireall.js",
"../build/src/external/src/exports.js"
"../build/exports.js"
]
}

View File

@@ -13,11 +13,11 @@
"id": "ol-simple",
"externs": [
"../build/src/external/externs/types.js",
"../externs/bingmaps.js",
"../externs/closure-compiler.js",
"../externs/geojson.js",
"../externs/oli.js",
"../externs/olx.js",
"../externs/proj4js.js",
"../externs/tilejson.js",
"../externs/topojson.js",
@@ -27,8 +27,7 @@
"inherits": "ol.json",
"inputs": [
"../build/src/internal/src/requireall.js",
"../build/src/external/src/exports.js"
"../build/exports.js"
],
"mode": "SIMPLE",

View File

@@ -18,6 +18,7 @@
"../externs/closure-compiler.js",
"../externs/geojson.js",
"../externs/oli.js",
"../externs/olx.js",
"../externs/proj4js.js",
"../externs/tilejson.js",
"../externs/topojson.js",
@@ -27,7 +28,7 @@
"inherits": "ol.json",
"inputs": [
"../build/src/internal/src/requireall.js"
"../build/exports.js"
],
"mode": "WHITESPACE",

View File

@@ -13,11 +13,11 @@
"css-output-file": "../build/ol.css",
"externs": [
"../build/src/external/externs/types.js",
"../externs/bingmaps.js",
"../externs/closure-compiler.js",
"../externs/geojson.js",
"../externs/oli.js",
"../externs/olx.js",
"../externs/proj4js.js",
"../externs/tilejson.js",
"../externs/topojson.js",
@@ -27,7 +27,7 @@
"inherits": "base.json",
"inputs": [
"../build/src/external/src/exports.js"
"../build/exports.js"
],
"output-wrapper": "// OpenLayers 3. see http://ol3js.org/\n(function(){%output%})();",

View File

@@ -86,24 +86,25 @@
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.ol-zoom,
.ol-zoom-extent,
.ol-full-screen {
.ol-control {
position: absolute;
background-color: #eee;
background-color: rgba(255,255,255,0.4);
border-radius: 4px;
padding: 2px;
}
.ol-zoom:hover,
.ol-zoom-extent:hover,
.ol-full-screen:hover {
.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;
}
.ol-zoom-extent {
top: 4.643em;
left: .5em;
@@ -113,16 +114,12 @@
top: .5em;
}
@media print {
.ol-zoom,
.ol-zoom-extent,
.ol-full-screen {
.ol-control {
display: none;
}
}
.ol-zoom button,
.ol-zoom-extent button,
.ol-full-screen button {
.ol-control button {
display: block;
margin: 1px;
padding: 0;
@@ -137,30 +134,29 @@
background-color: #7b98bc;
background-color: rgba(0,60,136,0.5);
border: none;
border-radius: 2px;
}
.ol-zoom button::-moz-focus-inner,
.ol-zoom-extent button::-moz-focus-inner,
.ol-full-screen button::-moz-focus-inner {
.ol-control button::-moz-focus-inner {
border: none;
padding: 0;
}
.ol-zoom-extent button {
line-height: 1.4em;
}
.ol-touch .ol-zoom button,
.ol-touch .ol-full-screen button,
.ol-touch .ol-zoom-extent button {
.ol-compass {
display: block;
font-family: Arial;
font-weight: normal;
font-size: 1.2em;
}
.ol-touch .ol-control button {
font-size: 1.5em;
}
.ol-touch .ol-zoom-extent {
top: 5.5em;
}
.ol-zoom button:hover,
.ol-zoom button:focus,
.ol-zoom-extent button:hover,
.ol-zoom-extent button:focus,
.ol-full-screen button:hover,
.ol-full-screen button:focus {
.ol-control button:hover,
.ol-control button:focus {
text-decoration: none;
background-color: #4c6079;
background-color: rgba(0,60,136,0.7);
@@ -168,10 +164,10 @@
.ol-zoom-extent button:after {
content: "E";
}
.ol-zoom-in {
.ol-zoom .ol-zoom-in {
border-radius: 2px 2px 0 0;
}
.ol-zoom-out {
.ol-zoom .ol-zoom-out {
border-radius: 0 0 2px 2px;
}
button.ol-full-screen-false:after {
@@ -228,6 +224,8 @@ button.ol-full-screen-true:after {
.ol-zoom .ol-has-tooltip:focus [role=tooltip] {
top: 1.1em;
}
.ol-rotate .ol-has-tooltip:hover [role=tooltip],
.ol-rotate .ol-has-tooltip:focus [role=tooltip],
.ol-full-screen .ol-has-tooltip:hover [role=tooltip],
.ol-full-screen .ol-has-tooltip:focus [role=tooltip] {
right: 2.2em;
@@ -239,13 +237,11 @@ button.ol-full-screen-true:after {
position: absolute;
top: 4.5em;
left: .5em;
background: #eee;
background: rgba(255, 255, 255, 0.4);
border-radius: 4px;
outline: none;
overflow: hidden;
width: 1.5675em;
height: 200px;
padding: 3px;
@@ -260,7 +256,6 @@ button.ol-full-screen-true:after {
outline: none;
overflow: hidden;
cursor: pointer;
font-size: 1.14em;
height: 1em;
width: 1.375em;
@@ -275,11 +270,9 @@ button.ol-full-screen-true:after {
width: 1.8em;
}
.ol-zoom-extent button,
.ol-control button,
.ol-attribution,
.ol-full-screen button,
.ol-scale-line-inner,
.ol-zoom button,
.ol-has-tooltip [role=tooltip] {
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
}

View File

@@ -9,4 +9,6 @@ If you're eager to get your first OpenLayers 3 map on a page, dive into the [qui
For a more in-depth overview of OpenLayers 3 core concepts, check out the [tutorials](tutorials/).
Make sure to also check out the [OpenLayers 3 workshop](../../../ol3-workshop/).
Find additional reference material in the [API docs](../apidoc).

View File

@@ -5,10 +5,6 @@ layout: doc.hbs
# Quick Start
## Workshop
Make sure to also check out the [OpenLayers 3 workshop](http://ol3js.org/ol3-workshop/).
## 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:
@@ -38,7 +34,7 @@ Below you'll find a complete working example. Create a new file, copy in the co
source: new ol.source.MapQuest({layer: 'sat'})
})
],
view: new ol.View2D({
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
@@ -92,7 +88,7 @@ The map in the application is contained in a [`<div>` HTML element](http://en.wi
source: new ol.source.MapQuest({layer: 'sat'})
})
],
view: new ol.View2D({
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
@@ -125,10 +121,10 @@ The `layers: [ ... ]` array is used to define the list of layers available in th
Layers in OpenLayers 3 are defined with a type (Image, Tile or Vector) which contains a source. The source is the protocol used to get the map tiles. You can consult the list of [available layer sources here](/en/{{ latest }}/apidoc/ol.source.html)
The next part of the `Map` object is the `View`. The view allow to specify the center, resolution, and rotation of the map. Right now, only `View2D` is supported, but other views should be available at some point. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out.
The next part of the `Map` object is the `View`. The view allow to specify the center, resolution, and rotation of the map. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out.
```js
view: new ol.View2D({
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})

View File

@@ -16,16 +16,16 @@ The core component of OpenLayers 3 is the map (`ol.Map`). It is rendered to a `t
```
## 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 - typically an `ol.View2D` for 2D maps. The reason for this abstraction is the idea of instantly switching e.g. between a 2D and a tilted 3D view, without the need to maintain two copies of the `layers`.
`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.
```js
map.setView(new ol.View2D({
map.setView(new ol.View({
center: [0, 0],
zoom: 2
}));
```
An `ol.View2D` 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.
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.
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.
@@ -63,7 +63,7 @@ The above snippets can be conflated to a self contained map configuration with v
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
}),

View File

@@ -10,8 +10,21 @@
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Accessibility example</title>
<style>
a.accesskey {
color: #FFFFFF;
a.skiplink {
position: absolute;
clip: rect(1px, 1px, 1px, 1px);
padding: 0;
border: 0;
height: 1px;
width: 1px;
overflow: hidden;
}
a.skiplink:focus {
clip: auto;
height: auto;
width: auto;
background-color: #fff;
padding: 0.3em;
}
</style>
</head>
@@ -20,7 +33,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
<a class="brand" href="./"><img src="../resources/logo.png" alt=""> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -29,10 +42,8 @@
<div class="row-fluid">
<div class="span12">
<a class="accesskey" onclick="document.getElementById('map').focus(); return false;" accesskey="1" href="">Go to map</a>
<a class="skiplink" href="#map">Go to map</a>
<div id="map" class="map" tabindex="0"></div>
<a class="zoom" accesskey="i" href="javascript: void map.getView().setZoom(map.getView().getZoom() + 1);">Zoom in</a>
<a class="zoom" accesskey="o" href="javascript: void map.getView().setZoom(map.getView().getZoom() - 1);">Zoom out</a>
</div>
</div>
@@ -42,9 +53,9 @@
<h4 id="title">Accessibility example</h4>
<p id="shortdesc">Example of an accessible map.</p>
<div id="docs">
<p>This page's <code>map</code> element has its <code>tabindex</code> attribute set to <code>"0"</code>. That makes is focusable. To focus the map element you can either navigate to it using the "tab" key, or use the <a href="http://en.wikipedia.org/wiki/Access_key">Access Key</a> "1" (alt+1 or ctrl+alt+1) which provides a direct access. When the <code>map</code> element is focused the + and - keys can be used to zoom in and out, and the arrow keys can be used to pan.</p>
<p>When clicked the "Zoom in" and "Zoom out" links below the map zoom the map in and out, respectively. You can navigate to the links using the "tab" key, and press the "enter" key to trigger the zooming action. The Access Keys "i" and "o" can also be used, as a direct access to the actions of "Zoom in" and "Zoom out" links.</p>
<p>See the source of the page to see how this done.</p>
<p>This page's <code>map</code> element has its <code>tabindex</code> attribute set to <code>"0"</code>, that makes it focusable. To focus the map element you can either navigate to it using the "tab" key or use the skip link. When the <code>map</code> element is focused the + and - keys can be used to zoom in and out and the arrow keys can be used to pan.</p>
<p>When clicked the "Zoom in" and "Zoom out" buttons below the map zoom the map in and out, respectively. You can navigate to the buttons using the "tab" key, and press the "enter" key to trigger the zooming action.</p>
<p>See the <a href="accessible.js" target="_blank">accessible.js source</a> to see how this is done.</p>
</div>
<div id="tags">accessibility, tabindex</div>
</div>

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
@@ -12,8 +12,15 @@ var map = new ol.Map({
],
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
jQuery('#map').after('<button type="button" ' +
'onclick="map.getView().setZoom(map.getView().getZoom() - 1);">' +
'Zoom out</button>');
jQuery('#map').after('<button type="button" ' +
'onclick="map.getView().setZoom(map.getView().getZoom() + 1);">' +
'Zoom in</button>');

View File

@@ -32,6 +32,7 @@
<div class="span12">
<button id="rotate-left"><i class="icon-arrow-left"></i></button>
<button id="rotate-right"><i class="icon-arrow-right"></i></button>
<button id="rotate-around-rome">Rotate around Rome</button>
<button id="pan-to-london">Pan to London</button>
<button id="elastic-to-moscow">Elastic to Moscow</button>
<button id="bounce-to-istanbul">Bounce to Istanbul</button>

View File

@@ -1,12 +1,38 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.animation');
goog.require('ol.easing');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
// from https://github.com/DmitryBaranovskiy/raphael
function bounce(t) {
var s = 7.5625, p = 2.75, l;
if (t < (1 / p)) {
l = s * t * t;
} else {
if (t < (2 / p)) {
t -= (1.5 / p);
l = s * t * t + 0.75;
} else {
if (t < (2.5 / p)) {
t -= (2.25 / p);
l = s * t * t + 0.9375;
} else {
t -= (2.625 / p);
l = s * t * t + 0.984375;
}
}
}
return l;
}
// from https://github.com/DmitryBaranovskiy/raphael
function elastic(t) {
return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1;
}
var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857');
var moscow = ol.proj.transform([37.6178, 55.7517], 'EPSG:4326', 'EPSG:3857');
var istanbul = ol.proj.transform([28.9744, 41.0128], 'EPSG:4326', 'EPSG:3857');
@@ -14,7 +40,7 @@ var rome = ol.proj.transform([12.5, 41.9], 'EPSG:4326', 'EPSG:3857');
var bern = ol.proj.transform([7.4458, 46.95], 'EPSG:4326', 'EPSG:3857');
var madrid = ol.proj.transform([-3.683333, 40.4], 'EPSG:4326', 'EPSG:3857');
var view = new ol.View2D({
var view = new ol.View({
// the view's initial state
center: istanbul,
zoom: 6
@@ -49,6 +75,17 @@ rotateRight.addEventListener('click', function() {
map.beforeRender(rotateRight);
}, false);
var rotateAroundRome = document.getElementById('rotate-around-rome');
rotateAroundRome.addEventListener('click', function() {
var currentRotation = view.getRotation();
var rotateAroundRome = ol.animation.rotate({
anchor: rome,
duration: 1000,
rotation: currentRotation
});
map.beforeRender(rotateAroundRome);
view.rotate(currentRotation + (Math.PI / 2), rome);
}, false);
var panToLondon = document.getElementById('pan-to-london');
panToLondon.addEventListener('click', function() {
@@ -64,7 +101,7 @@ var elasticToMoscow = document.getElementById('elastic-to-moscow');
elasticToMoscow.addEventListener('click', function() {
var pan = ol.animation.pan({
duration: 2000,
easing: ol.easing.elastic,
easing: elastic,
source: /** @type {ol.Coordinate} */ (view.getCenter())
});
map.beforeRender(pan);
@@ -75,7 +112,7 @@ var bounceToIstanbul = document.getElementById('bounce-to-istanbul');
bounceToIstanbul.addEventListener('click', function() {
var pan = ol.animation.pan({
duration: 2000,
easing: ol.easing.bounce,
easing: bounce,
source: /** @type {ol.Coordinate} */ (view.getCenter())
});
map.beforeRender(pan);

View File

@@ -35,6 +35,7 @@
<p id="shortdesc">Demonstrates two-way binding of HTML input elements to OpenLayers objects.</p>
<div id="docs">
<p>See the <a href="bind-input.js" target="_blank">bind-input.js source</a> to see how this is done.</p>
<p id="has-webgl" style="display: none">With the <a href="?renderer=webgl">WebGL renderer</a>, <strong>hue</strong>, <strong>saturation</strong>, <strong>contrast</strong> and <strong>brightness</strong> can also be controlled.</p>
<div id="no-webgl" class="alert alert-warning" style="display: none">
<h4>Warning!</h4>
A browser that supports <a href="http://get.webgl.org/">WebGL</a> is required to change the
@@ -53,14 +54,16 @@
</label>
<label>opacity</label>
<input id="opacity" type="range" min="0" max="1" step="0.01"/>
</fieldset>
<fieldset id="webgl" style="display: none">
<label>hue</label>
<input id="hue" class="webgl" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<input id="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input id="saturation" class="webgl" type="range" min="0" max="5" step="0.01"/>
<input id="saturation" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input id="contrast" class="webgl" type="range" min="0" max="2" step="0.01"/>
<input id="contrast" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input id="brightness" class="webgl" type="range" min="-1" max="1" step="0.01"/>
<input id="brightness" type="range" min="-1" max="1" step="0.01"/>
</fieldset>
</form>
</div>

View File

@@ -1,28 +1,26 @@
goog.require('ol.BrowserFeature');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.dom.Input');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
if (!ol.BrowserFeature.HAS_WEBGL) {
var inputs = document.getElementsByClassName('webgl');
for (var i = 0, len = inputs.length; i < len; i++) {
inputs[i].disabled = true;
}
var info = document.getElementById('no-webgl');
/**
* display warning message
*/
info.style.display = '';
function checkWebGL(evt) {
document.getElementById('no-webgl').style.display =
ol.BrowserFeature.HAS_WEBGL ? 'none' : '';
document.getElementById('has-webgl').style.display =
ol.BrowserFeature.HAS_WEBGL && !evt.glContext ? '' : 'none';
document.getElementById('webgl').style.display =
evt.glContext ? '' : 'none';
}
var layer = new ol.layer.Tile({
source: new ol.source.OSM()
});
layer.once('precompose', checkWebGL);
var view = new ol.View2D({
var view = new ol.View({
center: [0, 0],
zoom: 2
});

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.BingMaps');
@@ -27,7 +27,7 @@ var map = new ol.Map({
layers: layers,
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [-6655.5402445057125, 6709968.258934638],
zoom: 13
})

View File

@@ -1,6 +1,6 @@
goog.require('ol.BrowserFeature');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
@@ -29,7 +29,7 @@ if (!ol.BrowserFeature.HAS_WEBGL) {
layers: [layer],
renderer: 'webgl',
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
@@ -23,7 +23,7 @@ var map = new ol.Map({
],
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: ol.proj.transform(
[-0.1275, 51.507222], 'EPSG:4326', 'EPSG:3857'),
zoom: 10

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.geom.Point');
goog.require('ol.geom.SimpleGeometry');
goog.require('ol.layer.Tile');
@@ -38,7 +38,7 @@ var vectorLayer = new ol.layer.Vector({
source: source,
style: style
});
var view = new ol.View2D({
var view = new ol.View({
center: [0, 0],
zoom: 1
});

View File

@@ -1,6 +1,6 @@
goog.require('ol');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.control');
goog.require('ol.control.Control');
goog.require('ol.layer.Tile');
@@ -37,7 +37,7 @@ app.RotateNorthControl = function(opt_options) {
var handleRotateNorth = function(e) {
// prevent #rotate-north anchor from getting appended to the url
e.preventDefault();
this_.getMap().getView().getView2D().setRotation(0);
this_.getMap().getView().setRotation(0);
};
anchor.addEventListener('click', handleRotateNorth, false);
@@ -72,7 +72,7 @@ var map = new ol.Map({
],
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2,
rotation: 1

4
examples/d3.js vendored
View File

@@ -2,7 +2,7 @@
// this example uses d3 for which we don't have an externs file.
goog.require('ol');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.extent');
goog.require('ol.layer.Image');
goog.require('ol.layer.Tile');
@@ -20,7 +20,7 @@ var map = new ol.Map({
})
],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: ol.proj.transform([-97, 38], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})

View File

@@ -38,7 +38,7 @@
{"type":"Feature","id":"COL","properties":{"name":"Colombia"},"geometry":{"type":"Polygon","coordinates":[[[-75.373223,-0.152032],[-75.801466,0.084801],[-76.292314,0.416047],[-76.57638,0.256936],[-77.424984,0.395687],[-77.668613,0.825893],[-77.855061,0.809925],[-78.855259,1.380924],[-78.990935,1.69137],[-78.617831,1.766404],[-78.662118,2.267355],[-78.42761,2.629556],[-77.931543,2.696606],[-77.510431,3.325017],[-77.12769,3.849636],[-77.496272,4.087606],[-77.307601,4.667984],[-77.533221,5.582812],[-77.318815,5.845354],[-77.476661,6.691116],[-77.881571,7.223771],[-77.753414,7.70984],[-77.431108,7.638061],[-77.242566,7.935278],[-77.474723,8.524286],[-77.353361,8.670505],[-76.836674,8.638749],[-76.086384,9.336821],[-75.6746,9.443248],[-75.664704,9.774003],[-75.480426,10.61899],[-74.906895,11.083045],[-74.276753,11.102036],[-74.197223,11.310473],[-73.414764,11.227015],[-72.627835,11.731972],[-72.238195,11.95555],[-71.75409,12.437303],[-71.399822,12.376041],[-71.137461,12.112982],[-71.331584,11.776284],[-71.973922,11.608672],[-72.227575,11.108702],[-72.614658,10.821975],[-72.905286,10.450344],[-73.027604,9.73677],[-73.304952,9.152],[-72.78873,9.085027],[-72.660495,8.625288],[-72.439862,8.405275],[-72.360901,8.002638],[-72.479679,7.632506],[-72.444487,7.423785],[-72.198352,7.340431],[-71.960176,6.991615],[-70.674234,7.087785],[-70.093313,6.960376],[-69.38948,6.099861],[-68.985319,6.206805],[-68.265052,6.153268],[-67.695087,6.267318],[-67.34144,6.095468],[-67.521532,5.55687],[-67.744697,5.221129],[-67.823012,4.503937],[-67.621836,3.839482],[-67.337564,3.542342],[-67.303173,3.318454],[-67.809938,2.820655],[-67.447092,2.600281],[-67.181294,2.250638],[-66.876326,1.253361],[-67.065048,1.130112],[-67.259998,1.719999],[-67.53781,2.037163],[-67.868565,1.692455],[-69.816973,1.714805],[-69.804597,1.089081],[-69.218638,0.985677],[-69.252434,0.602651],[-69.452396,0.706159],[-70.015566,0.541414],[-70.020656,-0.185156],[-69.577065,-0.549992],[-69.420486,-1.122619],[-69.444102,-1.556287],[-69.893635,-4.298187],[-70.394044,-3.766591],[-70.692682,-3.742872],[-70.047709,-2.725156],[-70.813476,-2.256865],[-71.413646,-2.342802],[-71.774761,-2.16979],[-72.325787,-2.434218],[-73.070392,-2.308954],[-73.659504,-1.260491],[-74.122395,-1.002833],[-74.441601,-0.53082],[-75.106625,-0.057205],[-75.373223,-0.152032]]]}},
{"type":"Feature","id":"CRI","properties":{"name":"Costa Rica"},"geometry":{"type":"Polygon","coordinates":[[[-82.965783,8.225028],[-83.508437,8.446927],[-83.711474,8.656836],[-83.596313,8.830443],[-83.632642,9.051386],[-83.909886,9.290803],[-84.303402,9.487354],[-84.647644,9.615537],[-84.713351,9.908052],[-84.97566,10.086723],[-84.911375,9.795992],[-85.110923,9.55704],[-85.339488,9.834542],[-85.660787,9.933347],[-85.797445,10.134886],[-85.791709,10.439337],[-85.659314,10.754331],[-85.941725,10.895278],[-85.71254,11.088445],[-85.561852,11.217119],[-84.903003,10.952303],[-84.673069,11.082657],[-84.355931,10.999226],[-84.190179,10.79345],[-83.895054,10.726839],[-83.655612,10.938764],[-83.40232,10.395438],[-83.015677,9.992982],[-82.546196,9.566135],[-82.932891,9.476812],[-82.927155,9.07433],[-82.719183,8.925709],[-82.868657,8.807266],[-82.829771,8.626295],[-82.913176,8.423517],[-82.965783,8.225028]]]}},
{"type":"Feature","id":"CUB","properties":{"name":"Cuba"},"geometry":{"type":"Polygon","coordinates":[[[-82.268151,23.188611],[-81.404457,23.117271],[-80.618769,23.10598],[-79.679524,22.765303],[-79.281486,22.399202],[-78.347434,22.512166],[-77.993296,22.277194],[-77.146422,21.657851],[-76.523825,21.20682],[-76.19462,21.220565],[-75.598222,21.016624],[-75.67106,20.735091],[-74.933896,20.693905],[-74.178025,20.284628],[-74.296648,20.050379],[-74.961595,19.923435],[-75.63468,19.873774],[-76.323656,19.952891],[-77.755481,19.855481],[-77.085108,20.413354],[-77.492655,20.673105],[-78.137292,20.739949],[-78.482827,21.028613],[-78.719867,21.598114],[-79.285,21.559175],[-80.217475,21.827324],[-80.517535,22.037079],[-81.820943,22.192057],[-82.169992,22.387109],[-81.795002,22.636965],[-82.775898,22.68815],[-83.494459,22.168518],[-83.9088,22.154565],[-84.052151,21.910575],[-84.54703,21.801228],[-84.974911,21.896028],[-84.447062,22.20495],[-84.230357,22.565755],[-83.77824,22.788118],[-83.267548,22.983042],[-82.510436,23.078747],[-82.268151,23.188611]]]}},
{"type":"Feature","id":"-99","properties":{"name":"Northern Cyprus"},"geometry":{"type":"Polygon","coordinates":[[[32.73178,35.140026],[32.802474,35.145504],[32.946961,35.386703],[33.667227,35.373216],[34.576474,35.671596],[33.900804,35.245756],[33.973617,35.058506],[33.86644,35.093595],[33.675392,35.017863],[33.525685,35.038688],[33.475817,35.000345],[33.455922,35.101424],[33.383833,35.162712],[33.190977,35.173125],[32.919572,35.087833],[32.73178,35.140026]]]}},
{"type":"Feature","id":"TRNC","properties":{"name":"Northern Cyprus"},"geometry":{"type":"Polygon","coordinates":[[[32.73178,35.140026],[32.802474,35.145504],[32.946961,35.386703],[33.667227,35.373216],[34.576474,35.671596],[33.900804,35.245756],[33.973617,35.058506],[33.86644,35.093595],[33.675392,35.017863],[33.525685,35.038688],[33.475817,35.000345],[33.455922,35.101424],[33.383833,35.162712],[33.190977,35.173125],[32.919572,35.087833],[32.73178,35.140026]]]}},
{"type":"Feature","id":"CYP","properties":{"name":"Cyprus"},"geometry":{"type":"Polygon","coordinates":[[[33.973617,35.058506],[34.004881,34.978098],[32.979827,34.571869],[32.490296,34.701655],[32.256667,35.103232],[32.73178,35.140026],[32.919572,35.087833],[33.190977,35.173125],[33.383833,35.162712],[33.455922,35.101424],[33.475817,35.000345],[33.525685,35.038688],[33.675392,35.017863],[33.86644,35.093595],[33.973617,35.058506]]]}},
{"type":"Feature","id":"CZE","properties":{"name":"Czech Republic"},"geometry":{"type":"Polygon","coordinates":[[[16.960288,48.596982],[16.499283,48.785808],[16.029647,48.733899],[15.253416,49.039074],[14.901447,48.964402],[14.338898,48.555305],[13.595946,48.877172],[13.031329,49.307068],[12.521024,49.547415],[12.415191,49.969121],[12.240111,50.266338],[12.966837,50.484076],[13.338132,50.733234],[14.056228,50.926918],[14.307013,51.117268],[14.570718,51.002339],[15.016996,51.106674],[15.490972,50.78473],[16.238627,50.697733],[16.176253,50.422607],[16.719476,50.215747],[16.868769,50.473974],[17.554567,50.362146],[17.649445,50.049038],[18.392914,49.988629],[18.853144,49.49623],[18.554971,49.495015],[18.399994,49.315001],[18.170498,49.271515],[18.104973,49.043983],[17.913512,48.996493],[17.886485,48.903475],[17.545007,48.800019],[17.101985,48.816969],[16.960288,48.596982]]]}},
{"type":"Feature","id":"DEU","properties":{"name":"Germany"},"geometry":{"type":"Polygon","coordinates":[[[9.921906,54.983104],[9.93958,54.596642],[10.950112,54.363607],[10.939467,54.008693],[11.956252,54.196486],[12.51844,54.470371],[13.647467,54.075511],[14.119686,53.757029],[14.353315,53.248171],[14.074521,52.981263],[14.4376,52.62485],[14.685026,52.089947],[14.607098,51.745188],[15.016996,51.106674],[14.570718,51.002339],[14.307013,51.117268],[14.056228,50.926918],[13.338132,50.733234],[12.966837,50.484076],[12.240111,50.266338],[12.415191,49.969121],[12.521024,49.547415],[13.031329,49.307068],[13.595946,48.877172],[13.243357,48.416115],[12.884103,48.289146],[13.025851,47.637584],[12.932627,47.467646],[12.62076,47.672388],[12.141357,47.703083],[11.426414,47.523766],[10.544504,47.566399],[10.402084,47.302488],[9.896068,47.580197],[9.594226,47.525058],[8.522612,47.830828],[8.317301,47.61358],[7.466759,47.620582],[7.593676,48.333019],[8.099279,49.017784],[6.65823,49.201958],[6.18632,49.463803],[6.242751,49.902226],[6.043073,50.128052],[6.156658,50.803721],[5.988658,51.851616],[6.589397,51.852029],[6.84287,52.22844],[7.092053,53.144043],[6.90514,53.482162],[7.100425,53.693932],[7.936239,53.748296],[8.121706,53.527792],[8.800734,54.020786],[8.572118,54.395646],[8.526229,54.962744],[9.282049,54.830865],[9.921906,54.983104]]]}},
@@ -145,7 +145,7 @@
{"type":"Feature","id":"SLB","properties":{"name":"Solomon Islands"},"geometry":{"type":"MultiPolygon","coordinates":[[[[162.119025,-10.482719],[162.398646,-10.826367],[161.700032,-10.820011],[161.319797,-10.204751],[161.917383,-10.446701],[162.119025,-10.482719]]],[[[160.852229,-9.872937],[160.462588,-9.89521],[159.849447,-9.794027],[159.640003,-9.63998],[159.702945,-9.24295],[160.362956,-9.400304],[160.688518,-9.610162],[160.852229,-9.872937]]],[[[161.679982,-9.599982],[161.529397,-9.784312],[160.788253,-8.917543],[160.579997,-8.320009],[160.920028,-8.320009],[161.280006,-9.120011],[161.679982,-9.599982]]],[[[159.875027,-8.33732],[159.917402,-8.53829],[159.133677,-8.114181],[158.586114,-7.754824],[158.21115,-7.421872],[158.359978,-7.320018],[158.820001,-7.560003],[159.640003,-8.020027],[159.875027,-8.33732]]],[[[157.538426,-7.34782],[157.33942,-7.404767],[156.90203,-7.176874],[156.491358,-6.765943],[156.542828,-6.599338],[157.14,-7.021638],[157.538426,-7.34782]]]]}},
{"type":"Feature","id":"SLE","properties":{"name":"Sierra Leone"},"geometry":{"type":"Polygon","coordinates":[[[-11.438779,6.785917],[-11.708195,6.860098],[-12.428099,7.262942],[-12.949049,7.798646],[-13.124025,8.163946],[-13.24655,8.903049],[-12.711958,9.342712],[-12.596719,9.620188],[-12.425929,9.835834],[-12.150338,9.858572],[-11.917277,10.046984],[-11.117481,10.045873],[-10.839152,9.688246],[-10.622395,9.26791],[-10.65477,8.977178],[-10.494315,8.715541],[-10.505477,8.348896],[-10.230094,8.406206],[-10.695595,7.939464],[-11.146704,7.396706],[-11.199802,7.105846],[-11.438779,6.785917]]]}},
{"type":"Feature","id":"SLV","properties":{"name":"El Salvador"},"geometry":{"type":"Polygon","coordinates":[[[-87.793111,13.38448],[-87.904112,13.149017],[-88.483302,13.163951],[-88.843228,13.259734],[-89.256743,13.458533],[-89.812394,13.520622],[-90.095555,13.735338],[-90.064678,13.88197],[-89.721934,14.134228],[-89.534219,14.244816],[-89.587343,14.362586],[-89.353326,14.424133],[-89.058512,14.340029],[-88.843073,14.140507],[-88.541231,13.980155],[-88.503998,13.845486],[-88.065343,13.964626],[-87.859515,13.893312],[-87.723503,13.78505],[-87.793111,13.38448]]]}},
{"type":"Feature","id":"-99","properties":{"name":"Somaliland"},"geometry":{"type":"Polygon","coordinates":[[[48.93813,9.451749],[48.486736,8.837626],[47.78942,8.003],[46.948328,7.996877],[43.67875,9.18358],[43.296975,9.540477],[42.92812,10.02194],[42.55876,10.57258],[42.776852,10.926879],[43.145305,11.46204],[43.47066,11.27771],[43.666668,10.864169],[44.117804,10.445538],[44.614259,10.442205],[45.556941,10.698029],[46.645401,10.816549],[47.525658,11.127228],[48.021596,11.193064],[48.378784,11.375482],[48.948206,11.410622],[48.942005,11.394266],[48.938491,10.982327],[48.938233,9.9735],[48.93813,9.451749]]]}},
{"type":"Feature","id":"SOL","properties":{"name":"Somaliland"},"geometry":{"type":"Polygon","coordinates":[[[48.93813,9.451749],[48.486736,8.837626],[47.78942,8.003],[46.948328,7.996877],[43.67875,9.18358],[43.296975,9.540477],[42.92812,10.02194],[42.55876,10.57258],[42.776852,10.926879],[43.145305,11.46204],[43.47066,11.27771],[43.666668,10.864169],[44.117804,10.445538],[44.614259,10.442205],[45.556941,10.698029],[46.645401,10.816549],[47.525658,11.127228],[48.021596,11.193064],[48.378784,11.375482],[48.948206,11.410622],[48.942005,11.394266],[48.938491,10.982327],[48.938233,9.9735],[48.93813,9.451749]]]}},
{"type":"Feature","id":"SOM","properties":{"name":"Somalia"},"geometry":{"type":"Polygon","coordinates":[[[49.72862,11.5789],[50.25878,11.67957],[50.73202,12.0219],[51.1112,12.02464],[51.13387,11.74815],[51.04153,11.16651],[51.04531,10.6409],[50.83418,10.27972],[50.55239,9.19874],[50.07092,8.08173],[49.4527,6.80466],[48.59455,5.33911],[47.74079,4.2194],[46.56476,2.85529],[45.56399,2.04576],[44.06815,1.05283],[43.13597,0.2922],[42.04157,-0.91916],[41.81095,-1.44647],[41.58513,-1.68325],[40.993,-0.85829],[40.98105,2.78452],[41.855083,3.918912],[42.12861,4.23413],[42.76967,4.25259],[43.66087,4.95755],[44.9636,5.00162],[47.78942,8.003],[48.486736,8.837626],[48.93813,9.451749],[48.938233,9.9735],[48.938491,10.982327],[48.942005,11.394266],[48.948205,11.410617],[49.26776,11.43033],[49.72862,11.5789]]]}},
{"type":"Feature","id":"SRB","properties":{"name":"Republic of Serbia"},"geometry":{"type":"Polygon","coordinates":[[[20.874313,45.416375],[21.483526,45.18117],[21.562023,44.768947],[22.145088,44.478422],[22.459022,44.702517],[22.705726,44.578003],[22.474008,44.409228],[22.65715,44.234923],[22.410446,44.008063],[22.500157,43.642814],[22.986019,43.211161],[22.604801,42.898519],[22.436595,42.580321],[22.545012,42.461362],[22.380526,42.32026],[21.91708,42.30364],[21.576636,42.245224],[21.54332,42.32025],[21.66292,42.43922],[21.77505,42.6827],[21.63302,42.67717],[21.43866,42.86255],[21.27421,42.90959],[21.143395,43.068685],[20.95651,43.13094],[20.81448,43.27205],[20.63508,43.21671],[20.49679,42.88469],[20.25758,42.81275],[20.3398,42.89852],[19.95857,43.10604],[19.63,43.21378],[19.48389,43.35229],[19.21852,43.52384],[19.454,43.5681],[19.59976,44.03847],[19.11761,44.42307],[19.36803,44.863],[19.00548,44.86023],[19.390476,45.236516],[19.072769,45.521511],[18.82982,45.90888],[19.596045,46.17173],[20.220192,46.127469],[20.762175,45.734573],[20.874313,45.416375]]]}},
{"type":"Feature","id":"SUR","properties":{"name":"Suriname"},"geometry":{"type":"Polygon","coordinates":[[[-57.147436,5.97315],[-55.949318,5.772878],[-55.84178,5.953125],[-55.03325,6.025291],[-53.958045,5.756548],[-54.478633,4.896756],[-54.399542,4.212611],[-54.006931,3.620038],[-54.181726,3.18978],[-54.269705,2.732392],[-54.524754,2.311849],[-55.097587,2.523748],[-55.569755,2.421506],[-55.973322,2.510364],[-56.073342,2.220795],[-55.9056,2.021996],[-55.995698,1.817667],[-56.539386,1.899523],[-57.150098,2.768927],[-57.281433,3.333492],[-57.601569,3.334655],[-58.044694,4.060864],[-57.86021,4.576801],[-57.914289,4.812626],[-57.307246,5.073567],[-57.147436,5.97315]]]}},

File diff suppressed because one or more lines are too long

View File

@@ -1,12 +1,16 @@
goog.require('ol.DeviceOrientation');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.dom.Input');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
var view = new ol.View2D({
var projection = ol.proj.get('EPSG:3857');
var view = new ol.View({
center: [0, 0],
projection: projection,
extent: projection.getExtent(),
zoom: 2
});
var map = new ol.Map({
@@ -41,5 +45,5 @@ deviceOrientation.on(['change:beta', 'change:gamma'], function(event) {
center[0] -= resolution * gamma * 25;
center[1] += resolution * beta * 25;
view.setCenter(center);
view.setCenter(view.constrainCenter(center));
});

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.format.GPX');
goog.require('ol.format.GeoJSON');
goog.require('ol.format.IGC');
@@ -106,7 +106,7 @@ var map = new ol.Map({
],
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})
@@ -123,8 +123,9 @@ dragAndDropInteraction.on('addfeatures', function(event) {
style: styleFunction
})
}));
var view2D = map.getView().getView2D();
view2D.fitExtent(vectorSource.getExtent(), map.getSize());
var view = map.getView();
view.fitExtent(
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
});
var displayFeatureInfo = function(pixel) {

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.format.GPX');
goog.require('ol.format.GeoJSON');
goog.require('ol.format.IGC');
@@ -104,7 +104,7 @@ var map = new ol.Map({
})
],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})
@@ -119,8 +119,9 @@ dragAndDropInteraction.on('addfeatures', function(event) {
source: vectorSource,
style: styleFunction
}));
var view2D = map.getView().getView2D();
view2D.fitExtent(vectorSource.getExtent(), map.getSize());
var view = map.getView();
view.fitExtent(
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
});
var displayFeatureInfo = function(pixel) {

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.interaction');
goog.require('ol.interaction.DragRotateAndZoom');
goog.require('ol.layer.Tile');
@@ -17,7 +17,7 @@ var map = new ol.Map({
],
renderer: exampleNS.getRendererFromQueryString(),
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})

View File

@@ -0,0 +1,61 @@
<!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="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Draw and modify features example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Draw and modify features example</h4>
<p id="shortdesc">Example of using the ol.interaction.Draw interaction together with
the ol.interaction.Modify interaction.</p>
<form class="form-inline">
<label>Geometry type &nbsp;</label>
<select id="type">
<option value="Point">Point</option>
<option value="LineString">LineString</option>
<option value="Polygon">Polygon</option>
</select>
</form>
<div id="docs">
<p>See the <a href="draw-and-modify-features.js" target="_blank">draw-and-modify-features.js source</a> to see how this is done.</p>
</div>
<div id="tags">draw, edit, modify, vector, featureoverlay</div>
</div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
<script src="loader.js?id=draw-and-modify-features" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,84 @@
goog.require('ol.FeatureOverlay');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.events.condition');
goog.require('ol.interaction');
goog.require('ol.interaction.Draw');
goog.require('ol.interaction.Modify');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
goog.require('ol.style.Circle');
goog.require('ol.style.Fill');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var raster = new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
});
var map = new ol.Map({
layers: [raster],
target: 'map',
view: new ol.View({
center: [-11000000, 4600000],
zoom: 4
})
});
// The features are not added to a regular vector layer/source,
// but to a feature overlay which holds a collection of features.
// This collection is passed to the modify and also the draw
// interaction, so that both can add or modify features.
var featureOverlay = new ol.FeatureOverlay({
style: new ol.style.Style({
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 0.2)'
}),
stroke: new ol.style.Stroke({
color: '#ffcc33',
width: 2
}),
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({
color: '#ffcc33'
})
})
})
});
featureOverlay.setMap(map);
var modify = new ol.interaction.Modify({
features: featureOverlay.getFeatures(),
// the SHIFT key must be pressed to delete vertices, so
// that new vertices can be drawn at the same position
// of existing vertices
deleteCondition: function(event) {
return ol.events.condition.shiftKeyOnly(event) &&
ol.events.condition.singleClick(event);
}
});
map.addInteraction(modify);
var draw; // global so we can remove it later
function addInteraction() {
draw = new ol.interaction.Draw({
features: featureOverlay.getFeatures(),
type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)
});
map.addInteraction(draw);
}
var typeSelect = document.getElementById('type');
/**
* Let user change the geometry type.
* @param {Event} e Change event.
*/
typeSelect.onchange = function(e) {
map.removeInteraction(draw);
addInteraction();
};
addInteraction();

View File

@@ -36,6 +36,7 @@
<form class="form-inline">
<label>Geometry type &nbsp;</label>
<select id="type">
<option value="None">None</option>
<option value="Point">Point</option>
<option value="LineString">LineString</option>
<option value="Polygon">Polygon</option>

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.interaction');
goog.require('ol.interaction.Draw');
goog.require('ol.layer.Tile');
@@ -39,7 +39,7 @@ var vector = new ol.layer.Vector({
var map = new ol.Map({
layers: [raster, vector],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [-11000000, 4600000],
zoom: 4
})
@@ -49,11 +49,14 @@ var typeSelect = document.getElementById('type');
var draw; // global so we can remove it later
function addInteraction() {
draw = new ol.interaction.Draw({
source: source,
type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)
});
map.addInteraction(draw);
var value = typeSelect.value;
if (value !== 'None') {
draw = new ol.interaction.Draw({
source: source,
type: /** @type {ol.geom.GeometryType} */ (value)
});
map.addInteraction(draw);
}
}

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.geom.MultiPoint');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
@@ -15,7 +15,7 @@ var map = new ol.Map({
})
],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})
@@ -23,6 +23,7 @@ var map = new ol.Map({
var imageStyle = new ol.style.Circle({
radius: 5,
snapToPixel: false,
fill: new ol.style.Fill({color: 'yellow'}),
stroke: new ol.style.Stroke({color: 'red', width: 1})
});

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.control');
goog.require('ol.control.ScaleLine');
goog.require('ol.layer.Tile');
@@ -27,7 +27,7 @@ var map = new ol.Map({
]),
layers: layers,
target: 'map',
view: new ol.View2D({
view: new ol.View({
projection: 'EPSG:4326',
center: [0, 0],
zoom: 2

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
@@ -11,7 +11,7 @@ var map = new ol.Map({
})
],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})

View File

@@ -1,6 +1,6 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.geom.LineString');
goog.require('ol.layer.Vector');
goog.require('ol.source.Vector');
@@ -26,7 +26,7 @@ var layer = new ol.layer.Vector({
var map = new ol.Map({
layers: [layer],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 1
})

View File

@@ -1,5 +1,5 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.control');
goog.require('ol.control.FullScreen');
goog.require('ol.interaction');
@@ -25,7 +25,7 @@ var map = new ol.Map({
],
// Use the canvas renderer because it's currently the fastest
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [-33519607, 5616436],
rotation: -Math.PI / 8,
zoom: 8

View File

@@ -21,6 +21,9 @@
.map:full-screen {
height: 100%;
}
.ol-rotate {
top: 3em;
}
</style>
<title>Full screen control example</title>
</head>

View File

@@ -1,12 +1,12 @@
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.control');
goog.require('ol.control.FullScreen');
goog.require('ol.layer.Tile');
goog.require('ol.source.BingMaps');
var view = new ol.View2D({
var view = new ol.View({
center: [-9101767, 2822912],
zoom: 14
});

View File

@@ -1,6 +1,6 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.geom.Circle');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
@@ -188,7 +188,7 @@ var map = new ol.Map({
vectorLayer
],
target: 'map',
view: new ol.View2D({
view: new ol.View({
center: [0, 0],
zoom: 2
})

View File

@@ -1,14 +1,14 @@
goog.require('ol.Geolocation');
goog.require('ol.Map');
goog.require('ol.Overlay');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.geom.LineString');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
// creating the view
var view = new ol.View2D({
var view = new ol.View({
center: ol.proj.transform([5.8713, 45.6452], 'EPSG:4326', 'EPSG:3857'),
zoom: 19
});
@@ -36,7 +36,8 @@ map.addOverlay(marker);
// LineString to store the different geolocation positions. This LineString
// is time aware.
// The Z dimension is actually used to store the rotation (heading).
var positions = new ol.geom.LineString([], 'XYZM');
var positions = new ol.geom.LineString([],
/** @type {ol.geom.GeometryLayout} */ ('XYZM'));
// Geolocation Control
var geolocation = new ol.Geolocation(/** @type {olx.GeolocationOptions} */ ({
@@ -133,7 +134,7 @@ map.beforeRender(function(map, frameState) {
previousM = m;
// interpolate position along positions LineString
var c = positions.getCoordinateAtM(m, true);
var view = frameState.view2DState;
var view = frameState.viewState;
if (c) {
view.center = getCenterWithHeading(c, -c[2], view.resolution);
view.rotation = -c[2];

View File

@@ -2,14 +2,14 @@ goog.require('ol.Feature');
goog.require('ol.FeatureOverlay');
goog.require('ol.Geolocation');
goog.require('ol.Map');
goog.require('ol.View2D');
goog.require('ol.View');
goog.require('ol.dom.Input');
goog.require('ol.geom.Point');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
var view = new ol.View2D({
var view = new ol.View({
center: [0, 0],
zoom: 2
});

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