From e85ca98179bdbaffc0d0d8c474ce297e9dfdfc4b Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 18 Jul 2012 02:26:41 +0200 Subject: [PATCH] Refactor build system and layout --- .gitignore | 2 + Makefile | 49 +++++++++++++++++++++--- ol-skeleton-debug.json | 36 +++++++++++++++++ ol-skeleton-dom.json | 38 ++++++++++++++++++ ol-skeleton-webgl.json | 38 ++++++++++++++++++ ol-skeleton.json | 36 +++++++++++++++++ ol.json | 36 +++++++++++++++++ skeleton.html | 19 +-------- skeleton.js | 20 ++++++++++ src/{all.js => ol/ol.js} | 16 ++++++++ src/ol/tilegrid/openstreetmap.js | 28 ++++++++++++++ src/ol/{ => tilegrid}/tilegrid.js | 25 +----------- src/ol/{ => tilegrid}/tilegrid_test.js | 0 src/ol/tilelayer.js | 10 ----- src/ol/tilelayer/openstreetmap.js | 15 ++++++++ src/ol/tilestore/openstreetmap.js | 48 +++++++++++++++++++++++ src/ol/{ => tilestore}/tilestore.js | 39 ------------------- src/ol/{ => tilestore}/tilestore_test.js | 8 ++-- src/ol/webgl/tilelayerrenderer.js | 3 +- 19 files changed, 365 insertions(+), 101 deletions(-) create mode 100644 ol-skeleton-debug.json create mode 100644 ol-skeleton-dom.json create mode 100644 ol-skeleton-webgl.json create mode 100644 ol-skeleton.json create mode 100644 ol.json create mode 100644 skeleton.js rename src/{all.js => ol/ol.js} (51%) create mode 100644 src/ol/tilegrid/openstreetmap.js rename src/ol/{ => tilegrid}/tilegrid.js (90%) rename src/ol/{ => tilegrid}/tilegrid_test.js (100%) create mode 100644 src/ol/tilelayer/openstreetmap.js create mode 100644 src/ol/tilestore/openstreetmap.js rename src/ol/{ => tilestore}/tilestore.js (63%) rename src/ol/{ => tilestore}/tilestore_test.js (90%) diff --git a/.gitignore b/.gitignore index 33895d5e43..0eb23476a1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,7 @@ /examples/example-list.xml /bin/plovr*.jar /jsdoc/ +/ol.js +/ol-skeleton*.js /plovr*.jar /webgl-debug.js diff --git a/Makefile b/Makefile index 11ced70b6c..a8e0e715d6 100644 --- a/Makefile +++ b/Makefile @@ -53,19 +53,58 @@ space := $(empty) $(empty) all: build webgl-debug.js .PHONY: build -build: $(PLOVR_JAR) - java -jar $(PLOVR_JAR) build main.json >api.js +build: ol.js ol-skeleton.js ol-skeleton-debug.js ol-skeleton-dom.js ol-skeleton-webgl.js + +.PHONY: ol.js +ol.js: $(PLOVR_JAR) + java -jar $(PLOVR_JAR) build $(basename $@).json >$@ + @echo $@ "uncompressed:" $(shell wc -c <$@) bytes + @echo $@ " compressed:" $(shell gzip -9 -c <$@ | wc -c) bytes + +.PHONY: ol-skeleton.js +ol-skeleton.js: $(PLOVR_JAR) + java -jar $(PLOVR_JAR) build $(basename $@).json >$@ + @echo $@ "uncompressed:" $(shell wc -c <$@) bytes + @echo $@ " compressed:" $(shell gzip -9 -c <$@ | wc -c) bytes + +.PHONY: ol-skeleton-debug.js +ol-skeleton-debug.js: $(PLOVR_JAR) + java -jar $(PLOVR_JAR) build $(basename $@).json >$@ + @echo $@ "uncompressed:" $(shell wc -c <$@) bytes + @echo $@ " compressed:" $(shell gzip -9 -c <$@ | wc -c) bytes + +.PHONY: ol-skeleton-dom.js +ol-skeleton-dom.js: $(PLOVR_JAR) + java -jar $(PLOVR_JAR) build $(basename $@).json >$@ + @echo $@ "uncompressed:" $(shell wc -c <$@) bytes + @echo $@ " compressed:" $(shell gzip -9 -c <$@ | wc -c) bytes + +.PHONY: ol-skeleton-webgl.js +ol-skeleton-webgl.js: $(PLOVR_JAR) + java -jar $(PLOVR_JAR) build $(basename $@).json >$@ + @echo $@ "uncompressed:" $(shell wc -c <$@) bytes + @echo $@ " compressed:" $(shell gzip -9 -c <$@ | wc -c) bytes .PHONY: serve serve: $(PLOVR_JAR) - java -jar $(PLOVR_JAR) serve main.json + java -jar $(PLOVR_JAR) serve *.json .PHONY: lint -lint: $(CLOSURE_LINTER) - gjslint --strict --limited_doc_files=$(subst $(space),$(comma),$(shell find externs -name \*.js)) $(filter-out $(GSLINT_EXCLUDES),$(shell find externs src -name \*.js)) +lint: + gjslint --strict --limited_doc_files=$(subst $(space),$(comma),$(shell find externs -name \*.js)) $(filter-out $(GSLINT_EXCLUDES),$(shell find externs src -name \*.js)) skeleton.js webgl-debug.js: curl https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/debug/webgl-debug.js > $@ $(PLOVR_JAR): curl http://plovr.googlecode.com/files/$(PLOVR_JAR) > $@ + +clean: + rm -f ol-skeleton.js + rm -f ol-skeleton-debug.js + rm -f ol-skeleton-dom.js + rm -f ol-skeleton-webgl.js + +reallyclean: clean + rm -f $(PLOVR_JAR) + rm -f webgl-debug.js diff --git a/ol-skeleton-debug.json b/ol-skeleton-debug.json new file mode 100644 index 0000000000..ff325182cd --- /dev/null +++ b/ol-skeleton-debug.json @@ -0,0 +1,36 @@ +{ + "id": "ol-skeleton-debug", + + "inputs": "skeleton.js", + + "paths": [ + "src" + ], + + "define": { + "goog.dom.ASSUME_STANDARDS_MODE": true, + "goog.DEBUG": true + }, + + "externs": [ + "externs/webgl-debug.js" + ], + + "mode": "ADVANCED", + "level": "VERBOSE", + + "checks": { + "accessControls": "ERROR", + "visibility": "ERROR", + "checkTypes": "ERROR", + "checkRegExp": "ERROR", + "checkVars": "ERROR", + "deprecated": "ERROR", + "fileoverviewTags": "ERROR", + "invalidCasts": "ERROR", + "missingProperties": "ERROR", + "nonStandardJsDocs": "ERROR", + "undefinedVars": "ERROR" + } + +} diff --git a/ol-skeleton-dom.json b/ol-skeleton-dom.json new file mode 100644 index 0000000000..7921d2a654 --- /dev/null +++ b/ol-skeleton-dom.json @@ -0,0 +1,38 @@ +{ + "id": "ol-skeleton-dom", + + "inputs": "skeleton.js", + + "paths": [ + "src" + ], + + "define": { + "goog.dom.ASSUME_STANDARDS_MODE": true, + "ol.ENABLE_DOM": true, + "ol.ENABLE_WEBGL": false, + "goog.DEBUG": false + }, + + "externs": [ + "externs/webgl-debug.js" + ], + + "mode": "ADVANCED", + "level": "VERBOSE", + + "checks": { + "accessControls": "ERROR", + "visibility": "ERROR", + "checkTypes": "ERROR", + "checkRegExp": "ERROR", + "checkVars": "ERROR", + "deprecated": "ERROR", + "fileoverviewTags": "ERROR", + "invalidCasts": "ERROR", + "missingProperties": "ERROR", + "nonStandardJsDocs": "ERROR", + "undefinedVars": "ERROR" + } + +} diff --git a/ol-skeleton-webgl.json b/ol-skeleton-webgl.json new file mode 100644 index 0000000000..99a4e3461f --- /dev/null +++ b/ol-skeleton-webgl.json @@ -0,0 +1,38 @@ +{ + "id": "ol-skeleton-webgl", + + "inputs": "skeleton.js", + + "paths": [ + "src" + ], + + "define": { + "goog.dom.ASSUME_STANDARDS_MODE": true, + "ol.ENABLE_DOM": false, + "ol.ENABLE_WEBGL": true, + "goog.DEBUG": false + }, + + "externs": [ + "externs/webgl-debug.js" + ], + + "mode": "ADVANCED", + "level": "VERBOSE", + + "checks": { + "accessControls": "ERROR", + "visibility": "ERROR", + "checkTypes": "ERROR", + "checkRegExp": "ERROR", + "checkVars": "ERROR", + "deprecated": "ERROR", + "fileoverviewTags": "ERROR", + "invalidCasts": "ERROR", + "missingProperties": "ERROR", + "nonStandardJsDocs": "ERROR", + "undefinedVars": "ERROR" + } + +} diff --git a/ol-skeleton.json b/ol-skeleton.json new file mode 100644 index 0000000000..77e8edfd4c --- /dev/null +++ b/ol-skeleton.json @@ -0,0 +1,36 @@ +{ + "id": "ol-skeleton", + + "inputs": "skeleton.js", + + "paths": [ + "src" + ], + + "define": { + "goog.dom.ASSUME_STANDARDS_MODE": true, + "goog.DEBUG": false + }, + + "externs": [ + "externs/webgl-debug.js" + ], + + "mode": "ADVANCED", + "level": "VERBOSE", + + "checks": { + "accessControls": "ERROR", + "visibility": "ERROR", + "checkTypes": "ERROR", + "checkRegExp": "ERROR", + "checkVars": "ERROR", + "deprecated": "ERROR", + "fileoverviewTags": "ERROR", + "invalidCasts": "ERROR", + "missingProperties": "ERROR", + "nonStandardJsDocs": "ERROR", + "undefinedVars": "ERROR" + } + +} diff --git a/ol.json b/ol.json new file mode 100644 index 0000000000..08db84ebc6 --- /dev/null +++ b/ol.json @@ -0,0 +1,36 @@ +{ + "id": "ol", + + "inputs": "src/ol/ol.js", + + "paths": [ + "src" + ], + + "define": { + "goog.dom.ASSUME_STANDARDS_MODE": true, + "goog.DEBUG": false + }, + + "externs": [ + "externs/webgl-debug.js" + ], + + "mode": "ADVANCED", + "level": "VERBOSE", + + "checks": { + "accessControls": "ERROR", + "visibility": "ERROR", + "checkTypes": "ERROR", + "checkRegExp": "ERROR", + "checkVars": "ERROR", + "deprecated": "ERROR", + "fileoverviewTags": "ERROR", + "invalidCasts": "ERROR", + "missingProperties": "ERROR", + "nonStandardJsDocs": "ERROR", + "undefinedVars": "ERROR" + } + +} diff --git a/skeleton.html b/skeleton.html index 00b534e28a..eecfdc6f80 100644 --- a/skeleton.html +++ b/skeleton.html @@ -12,23 +12,6 @@
- - + diff --git a/skeleton.js b/skeleton.js new file mode 100644 index 0000000000..569fe260a5 --- /dev/null +++ b/skeleton.js @@ -0,0 +1,20 @@ +goog.require('goog.math.Coordinate'); +goog.require('goog.object'); +goog.require('ol.createMap'); +goog.require('ol.tilelayer.createOpenStreetMap'); + + +var target = /** @type {!HTMLDivElement} */ document.getElementById('map'); +var map = ol.createMap(target); + +var layer = ol.tilelayer.createOpenStreetMap({ + 'opacity': 0.5 +}); +map.getLayers().push(layer); + +var resolutions = layer.getStore().getResolutions(); +map.setCenter(new goog.math.Coordinate(0, 0)); +map.setResolution(resolutions[0]); + +goog.exportSymbol('layer', layer); +goog.exportSymbol('map', map); diff --git a/src/all.js b/src/ol/ol.js similarity index 51% rename from src/all.js rename to src/ol/ol.js index 04218cf2fa..debf9c1d63 100644 --- a/src/all.js +++ b/src/ol/ol.js @@ -1,12 +1,17 @@ goog.provide('ol'); goog.require('ol.Array'); +goog.require('ol.ArrayEvent'); +goog.require('ol.ArrayEventType'); goog.require('ol.Extent'); goog.require('ol.Layer'); +goog.require('ol.LayerProperty'); goog.require('ol.LayerRenderer'); goog.require('ol.Map'); +goog.require('ol.MapProperty'); goog.require('ol.Object'); goog.require('ol.Projection'); +goog.require('ol.Rectangle'); goog.require('ol.Store'); goog.require('ol.Tile'); goog.require('ol.TileBounds'); @@ -19,6 +24,17 @@ goog.require('ol.TileUrlFunctionType'); goog.require('ol.TransformFunction'); goog.require('ol.createMap'); goog.require('ol.dom'); +goog.require('ol.dom.LayerRenderer'); goog.require('ol.dom.Map'); +goog.require('ol.dom.TileLayerRenderer'); +goog.require('ol.tilegrid.createOpenStreetMap'); +goog.require('ol.tilelayer.createOpenStreetMap'); +goog.require('ol.tilestore.createOpenStreetMap'); goog.require('ol.webgl'); +goog.require('ol.webgl.LayerRenderer'); goog.require('ol.webgl.Map'); +goog.require('ol.webgl.TileLayerRenderer'); +goog.require('ol.webgl.WebGLContextEventType'); +goog.require('ol.webgl.map.shader'); +goog.require('ol.webgl.shader.Fragment'); +goog.require('ol.webgl.shader.Vertex'); diff --git a/src/ol/tilegrid/openstreetmap.js b/src/ol/tilegrid/openstreetmap.js new file mode 100644 index 0000000000..7e8955c0d6 --- /dev/null +++ b/src/ol/tilegrid/openstreetmap.js @@ -0,0 +1,28 @@ +goog.provide('ol.tilegrid.createOpenStreetMap'); + +goog.require('goog.math.Coordinate'); +goog.require('goog.math.Size'); +goog.require('ol.Projection'); +goog.require('ol.TileGrid'); + + +/** + * @param {number} maxZoom Maximum zoom. + * @return {ol.TileGrid} Tile grid. + */ +ol.tilegrid.createOpenStreetMap = function(maxZoom) { + + var resolutions = new Array(maxZoom + 1); + var z; + for (z = 0; z <= maxZoom; ++z) { + resolutions[z] = ol.Projection.EPSG_3857_HALF_SIZE / (128 << z); + } + + var extent = ol.Projection.EPSG_3857_EXTENT; + var origin = new goog.math.Coordinate( + -ol.Projection.EPSG_3857_HALF_SIZE, ol.Projection.EPSG_3857_HALF_SIZE); + var tileSize = new goog.math.Size(256, 256); + + return new ol.TileGrid(resolutions, extent, origin, tileSize); + +}; diff --git a/src/ol/tilegrid.js b/src/ol/tilegrid/tilegrid.js similarity index 90% rename from src/ol/tilegrid.js rename to src/ol/tilegrid/tilegrid.js index a0b7b88987..3e5f3ca51a 100644 --- a/src/ol/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -1,11 +1,10 @@ goog.provide('ol.TileGrid'); -goog.provide('ol.TileGrid.createOpenStreetMap'); goog.require('goog.array'); goog.require('goog.asserts'); +goog.require('goog.math.Coordinate'); goog.require('goog.math.Size'); goog.require('ol.Extent'); -goog.require('ol.Projection'); goog.require('ol.TileBounds'); goog.require('ol.TileCoord'); @@ -72,28 +71,6 @@ ol.TileGrid = function(resolutions, extent, origin, opt_tileSize) { }; -/** - * @param {number} maxZoom Maximum zoom. - * @return {ol.TileGrid} Tile grid. - */ -ol.TileGrid.createOpenStreetMap = function(maxZoom) { - - var resolutions = new Array(maxZoom + 1); - var z; - for (z = 0; z <= maxZoom; ++z) { - resolutions[z] = ol.Projection.EPSG_3857_HALF_SIZE / (128 << z); - } - - var extent = ol.Projection.EPSG_3857_EXTENT; - var origin = new goog.math.Coordinate( - -ol.Projection.EPSG_3857_HALF_SIZE, ol.Projection.EPSG_3857_HALF_SIZE); - var tileSize = new goog.math.Size(256, 256); - - return new ol.TileGrid(resolutions, extent, origin, tileSize); - -}; - - /** * @param {ol.TileCoord} tileCoord Tile coordinate. * @param {function(number, ol.TileBounds): boolean} callback Callback. diff --git a/src/ol/tilegrid_test.js b/src/ol/tilegrid/tilegrid_test.js similarity index 100% rename from src/ol/tilegrid_test.js rename to src/ol/tilegrid/tilegrid_test.js diff --git a/src/ol/tilelayer.js b/src/ol/tilelayer.js index 0552711a5d..c23741155f 100644 --- a/src/ol/tilelayer.js +++ b/src/ol/tilelayer.js @@ -24,13 +24,3 @@ goog.inherits(ol.TileLayer, ol.Layer); ol.TileLayer.prototype.getStore = function() { return /** @type {ol.TileStore} */ goog.base(this, 'getStore'); }; - - -/** - * @param {Object.=} opt_values Values. - * @return {ol.Layer} Layer. - */ -ol.TileLayer.createOpenStreetMap = function(opt_values) { - var store = ol.TileStore.createOpenStreetMap(); - return new ol.TileLayer(store, opt_values); -}; diff --git a/src/ol/tilelayer/openstreetmap.js b/src/ol/tilelayer/openstreetmap.js new file mode 100644 index 0000000000..65c6923b77 --- /dev/null +++ b/src/ol/tilelayer/openstreetmap.js @@ -0,0 +1,15 @@ +goog.provide('ol.tilelayer.createOpenStreetMap'); + +goog.require('ol.Layer'); +goog.require('ol.TileLayer'); +goog.require('ol.tilestore.createOpenStreetMap'); + + +/** + * @param {Object.=} opt_values Values. + * @return {ol.Layer} Layer. + */ +ol.tilelayer.createOpenStreetMap = function(opt_values) { + var store = ol.tilestore.createOpenStreetMap(); + return new ol.TileLayer(store, opt_values); +}; diff --git a/src/ol/tilestore/openstreetmap.js b/src/ol/tilestore/openstreetmap.js new file mode 100644 index 0000000000..fe725bfe1a --- /dev/null +++ b/src/ol/tilestore/openstreetmap.js @@ -0,0 +1,48 @@ +goog.provide('ol.tilestore.createOpenStreetMap'); + +goog.require('goog.math'); +goog.require('ol.Projection'); +goog.require('ol.TileCoord'); +goog.require('ol.TileGrid'); +goog.require('ol.TileStore'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.tilegrid.createOpenStreetMap'); + + +/** + * @return {ol.TileStore} Tile store. + */ +ol.tilestore.createOpenStreetMap = function() { + + var projection = ol.Projection.createFromCode('EPSG:3857'); + var tileGrid = ol.tilegrid.createOpenStreetMap(18); + var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( + function(tileCoord) { + var n = 1 << tileCoord.z; + var y = -tileCoord.y - 1; + if (y < 0 || n <= y) { + return null; + } else { + var x = goog.math.modulo(tileCoord.x, n); + return new ol.TileCoord(tileCoord.z, x, y); + } + }, + ol.TileUrlFunction.createFromTemplates([ + 'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png', + 'http://b.tile.openstreetmap.org/{z}/{x}/{y}.png', + 'http://c.tile.openstreetmap.org/{z}/{x}/{y}.png' + ])); + var extent = projection.getExtent(); + var attribution = + '© ' + + 'OpenStreetMap ' + + 'contributors, ' + + 'CC BY-SA'; + var crossOrigin = ''; + + return new ol.TileStore( + projection, tileGrid, tileUrlFunction, extent, attribution, crossOrigin); + +}; + + diff --git a/src/ol/tilestore.js b/src/ol/tilestore/tilestore.js similarity index 63% rename from src/ol/tilestore.js rename to src/ol/tilestore/tilestore.js index ff710cc3a3..0be1f12b76 100644 --- a/src/ol/tilestore.js +++ b/src/ol/tilestore/tilestore.js @@ -1,7 +1,5 @@ goog.provide('ol.TileStore'); -goog.provide('ol.TileStore.createOpenStreetMap'); -goog.require('goog.math'); goog.require('ol.Store'); goog.require('ol.Tile'); goog.require('ol.TileCoord'); @@ -55,43 +53,6 @@ ol.TileStore = function(projection, tileGrid, tileUrlFunction, opt_extent, goog.inherits(ol.TileStore, ol.Store); -/** - * @return {ol.TileStore} Tile store. - */ -ol.TileStore.createOpenStreetMap = function() { - - var projection = ol.Projection.createFromCode('EPSG:3857'); - var tileGrid = ol.TileGrid.createOpenStreetMap(18); - var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( - function(tileCoord) { - var n = 1 << tileCoord.z; - var y = -tileCoord.y - 1; - if (y < 0 || n <= y) { - return null; - } else { - var x = goog.math.modulo(tileCoord.x, n); - return new ol.TileCoord(tileCoord.z, x, y); - } - }, - ol.TileUrlFunction.createFromTemplates([ - 'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png', - 'http://b.tile.openstreetmap.org/{z}/{x}/{y}.png', - 'http://c.tile.openstreetmap.org/{z}/{x}/{y}.png' - ])); - var extent = projection.getExtent(); - var attribution = - '© ' + - 'OpenStreetMap ' + - 'contributors, ' + - 'CC BY-SA'; - var crossOrigin = ''; - - return new ol.TileStore( - projection, tileGrid, tileUrlFunction, extent, attribution, crossOrigin); - -}; - - /** * @inheritDoc */ diff --git a/src/ol/tilestore_test.js b/src/ol/tilestore/tilestore_test.js similarity index 90% rename from src/ol/tilestore_test.js rename to src/ol/tilestore/tilestore_test.js index 3e7f2b9a1e..4125f45696 100644 --- a/src/ol/tilestore_test.js +++ b/src/ol/tilestore/tilestore_test.js @@ -1,6 +1,6 @@ goog.require('goog.testing.jsunit'); goog.require('ol.TileCoord'); -goog.require('ol.TileStore.createOpenStreetMap'); +goog.require('ol.tilestore.createOpenStreetMap'); function getTileCoordPart(tileUrl) { @@ -10,7 +10,7 @@ function getTileCoordPart(tileUrl) { function testOpenStreetMap() { - var tileStore = ol.TileStore.createOpenStreetMap(8); + var tileStore = ol.tilestore.createOpenStreetMap(8); var tileGrid = tileStore.getTileGrid(); var coordinate = @@ -43,7 +43,7 @@ function testOpenStreetMap() { function testOpenStreetMapWrapX() { - var tileStore = ol.TileStore.createOpenStreetMap(8); + var tileStore = ol.tilestore.createOpenStreetMap(8); tileUrl = tileStore.getTileCoordUrl(new ol.TileCoord(6, -31, -23)); assertEquals('6/33/22', getTileCoordPart(tileUrl)); @@ -59,7 +59,7 @@ function testOpenStreetMapWrapX() { function testOpenStreetMapCropY() { - var tileStore = ol.TileStore.createOpenStreetMap(8); + var tileStore = ol.tilestore.createOpenStreetMap(8); tileUrl = tileStore.getTileCoordUrl(new ol.TileCoord(6, 33, -87)); assertUndefined(tileUrl); diff --git a/src/ol/webgl/tilelayerrenderer.js b/src/ol/webgl/tilelayerrenderer.js index c9778e6368..2d2b030789 100644 --- a/src/ol/webgl/tilelayerrenderer.js +++ b/src/ol/webgl/tilelayerrenderer.js @@ -1,7 +1,8 @@ // FIXME animated shaders! check in redraw goog.provide('ol.webgl.TileLayerRenderer'); -goog.provide('ol.webgl.tilelayerrenderer.shader'); +goog.provide('ol.webgl.tilelayerrenderer.shader.Fragment'); +goog.provide('ol.webgl.tilelayerrenderer.shader.Vertex'); goog.require('goog.asserts'); goog.require('goog.events.EventType');