Refactor build system
This rather large commit refactors the build system to solve a number of problems: - Object literal types are now declared in just one place - There are no more circular dependencies - There is no need for concealed subclasses in build-standalone mode When building in standalone mode, you need to include the source in build/src/external. This declares object literal types as externs so that their properties are not renamed. When building with the application, you need to include the source in build/src/internal. This declares object literal types as typedefs so that their properties can be renamed and removed. Note also that ol.MapOptions has been merged into ol.Map, with some renaming.
This commit is contained in:
37
Makefile
37
Makefile
@@ -3,6 +3,7 @@ PHANTOMJS = phantomjs
|
|||||||
PLOVR_JAR = bin/plovr-b254c26318c5.jar
|
PLOVR_JAR = bin/plovr-b254c26318c5.jar
|
||||||
SPEC = $(shell find test/spec -name \*.js)
|
SPEC = $(shell find test/spec -name \*.js)
|
||||||
SRC = $(shell find exports externs src/ol -name \*.js)
|
SRC = $(shell find exports externs src/ol -name \*.js)
|
||||||
|
INTERNAL_SRC = build/src/internal/src/requireall.js build/src/internal/src/types.js
|
||||||
EXAMPLES = $(shell find examples -maxdepth 1 -name \*.html)
|
EXAMPLES = $(shell find examples -maxdepth 1 -name \*.html)
|
||||||
comma := ,
|
comma := ,
|
||||||
empty :=
|
empty :=
|
||||||
@@ -20,7 +21,7 @@ build: build/ol.css build/ol.js
|
|||||||
build/ol.css: build/ol.js
|
build/ol.css: build/ol.js
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
build/ol.js: $(PLOVR_JAR) $(SRC) base.json build/ol.json build/src/externs.js build/src/literals.js
|
build/ol.js: $(PLOVR_JAR) $(SRC) base.json build/ol.json build/src/external/externs/types.js
|
||||||
java -jar $(PLOVR_JAR) build build/ol.json >$@
|
java -jar $(PLOVR_JAR) build build/ol.json >$@
|
||||||
@echo $@ "uncompressed:" $$(wc -c <$@) bytes
|
@echo $@ "uncompressed:" $$(wc -c <$@) bytes
|
||||||
@echo $@ " compressed:" $$(gzip -9 -c <$@ | wc -c) bytes
|
@echo $@ " compressed:" $$(gzip -9 -c <$@ | wc -c) bytes
|
||||||
@@ -28,25 +29,26 @@ build/ol.js: $(PLOVR_JAR) $(SRC) base.json build/ol.json build/src/externs.js bu
|
|||||||
.PHONY: build-all
|
.PHONY: build-all
|
||||||
build-all: build/ol-all.js
|
build-all: build/ol-all.js
|
||||||
|
|
||||||
build/ol-all.js: $(PLOVR_JAR) $(SRC) base.json build/ol-all.json build/require-all.js build/src/externs.js build/src/literals.js
|
build/ol-all.js: $(PLOVR_JAR) $(SRC) $(INTERNAL_SRC) base.json build/ol-all.json
|
||||||
java -jar $(PLOVR_JAR) build build/ol-all.json >$@ || ( rm -f $@ ; false )
|
java -jar $(PLOVR_JAR) build build/ol-all.json >$@ || ( rm -f $@ ; false )
|
||||||
|
|
||||||
build/require-all.js: $(SRC)
|
build/src/external/externs/types.js: bin/generate-src src/ol/literals.txt
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
bin/generate-src --externs src/ol/literals.txt >$@
|
||||||
|
|
||||||
|
build/src/internal/src/requireall.js: $(SRC)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
( echo "goog.require('goog.dom');" ; find src/ol -name \*.js | xargs grep -rh ^goog.provide | sort | uniq | sed -e 's/provide/require/g' ) >$@
|
( echo "goog.require('goog.dom');" ; find src/ol -name \*.js | xargs grep -rh ^goog.provide | sort | uniq | sed -e 's/provide/require/g' ) >$@
|
||||||
|
|
||||||
build/src/externs.js: bin/generate-externs src/ol/literals.txt
|
build/src/internal/src/types.js: bin/generate-src src/ol/literals.txt
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
bin/generate-externs --externs src/ol/literals.txt >$@
|
bin/generate-src --typedef src/ol/literals.txt >$@
|
||||||
|
|
||||||
build/src/literals.js: bin/generate-externs src/ol/literals.txt
|
|
||||||
mkdir -p $(dir $@)
|
|
||||||
bin/generate-externs --typedef src/ol/literals.txt >$@
|
|
||||||
|
|
||||||
.PHONY: examples
|
.PHONY: examples
|
||||||
examples: $(subst .html,.json,$(EXAMPLES))
|
examples: $(subst .html,.json,$(EXAMPLES))
|
||||||
|
|
||||||
examples/%.json: base.json
|
examples/%.json: Makefile base.json
|
||||||
@echo "{\"id\": \"$(basename $(notdir $@))\", \"inherits\": \"../base.json\", \"inputs\": \"$(subst .json,.js,$@)\"}" > $@
|
echo "{\"id\": \"$(basename $(notdir $@))\", \"inherits\": \"../base.json\", \"inputs\": [\"$(subst .json,.js,$@)\", \"build/src/internal/src/types.js\"]}" > $@
|
||||||
|
|
||||||
examples/%.combined.js: $(PLOVR_JAR) base.json examples/%.js
|
examples/%.combined.js: $(PLOVR_JAR) base.json examples/%.js
|
||||||
java -jar $(PLOVR_JAR) build $(subst .combined.js,.json,$@) >$@
|
java -jar $(PLOVR_JAR) build $(subst .combined.js,.json,$@) >$@
|
||||||
@@ -54,18 +56,18 @@ examples/%.combined.js: $(PLOVR_JAR) base.json examples/%.js
|
|||||||
@echo $@ " compressed:" $$(gzip -9 -c <$@ | wc -c) bytes
|
@echo $@ " compressed:" $$(gzip -9 -c <$@ | wc -c) bytes
|
||||||
|
|
||||||
.PHONY: serve
|
.PHONY: serve
|
||||||
serve: $(PLOVR_JAR) build/require-all.js examples
|
serve: $(PLOVR_JAR) $(INTERNAL_SRC) examples
|
||||||
java -jar $(PLOVR_JAR) serve build/*.json examples/*.json
|
java -jar $(PLOVR_JAR) serve build/*.json examples/*.json
|
||||||
|
|
||||||
.PHONY: serve-precommit
|
.PHONY: serve-precommit
|
||||||
serve-precommit: $(PLOVR_JAR)
|
serve-precommit: $(PLOVR_JAR) $(INTERNAL_SRC)
|
||||||
java -jar $(PLOVR_JAR) serve build/ol.json
|
java -jar $(PLOVR_JAR) serve build/ol.json
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint: build/lint-src-timestamp build/lint-spec-timestamp
|
lint: build/lint-src-timestamp build/lint-spec-timestamp
|
||||||
|
|
||||||
build/lint-src-timestamp: $(SRC)
|
build/lint-src-timestamp: $(SRC) $(INTERNAL_SRC)
|
||||||
gjslint --strict --limited_doc_files=$(subst $(space),$(comma),$(shell find externs -name \*.js)) $(SRC) $(filter-out $(shell find examples -name \*.combined.js),$(shell find examples -name \*.js)) && touch $@
|
gjslint --strict --limited_doc_files=$(subst $(space),$(comma),$(shell find externs -name \*.js)) $(SRC) $(INTERNAL_SRC) $(filter-out $(shell find examples -name \*.combined.js),$(shell find examples -name \*.js)) && touch $@
|
||||||
|
|
||||||
build/lint-spec-timestamp: $(SPEC)
|
build/lint-spec-timestamp: $(SPEC)
|
||||||
gjslint $(SPEC) && touch $@
|
gjslint $(SPEC) && touch $@
|
||||||
@@ -86,7 +88,7 @@ doc:
|
|||||||
$(JSDOC) -t doc/template -r src -d build/gh-pages/$(shell git rev-parse --abbrev-ref HEAD)/apidoc
|
$(JSDOC) -t doc/template -r src -d build/gh-pages/$(shell git rev-parse --abbrev-ref HEAD)/apidoc
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test: $(INTERNAL_SRC)
|
||||||
$(PHANTOMJS) test/phantom-jasmine/run_jasmine_test.coffee test/ol.html
|
$(PHANTOMJS) test/phantom-jasmine/run_jasmine_test.coffee test/ol.html
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@@ -95,8 +97,7 @@ clean:
|
|||||||
rm -f build/ol.css
|
rm -f build/ol.css
|
||||||
rm -f build/ol.js
|
rm -f build/ol.js
|
||||||
rm -f build/ol-all.js
|
rm -f build/ol-all.js
|
||||||
rm -f build/require-all.js
|
rm -rf build/src
|
||||||
rm -f build/src/*
|
|
||||||
rm -f examples/*.json
|
rm -f examples/*.json
|
||||||
rm -f examples/*.combined.js
|
rm -f examples/*.combined.js
|
||||||
rm -rf build/apidoc
|
rm -rf build/apidoc
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
"mode": "ADVANCED",
|
"mode": "ADVANCED",
|
||||||
|
|
||||||
"paths": [
|
"paths": [
|
||||||
"build/src",
|
"build/src/internal/src",
|
||||||
"src"
|
"src"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import fileinput
|
import fileinput
|
||||||
|
from operator import attrgetter
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@@ -29,7 +30,7 @@ class Type(object):
|
|||||||
return ''.join(lines)
|
return ''.join(lines)
|
||||||
|
|
||||||
def provide(self):
|
def provide(self):
|
||||||
return 'goog.provide(\'%s\');\n' % (self.name,)
|
return 'goog.provide(\'%sType\');\n' % (self.name,)
|
||||||
|
|
||||||
def typedef(self):
|
def typedef(self):
|
||||||
lines = []
|
lines = []
|
||||||
@@ -61,12 +62,7 @@ def main(argv):
|
|||||||
continue
|
continue
|
||||||
m = re.match('@externtype\s*(?P<name>\S+)\Z', line)
|
m = re.match('@externtype\s*(?P<name>\S+)\Z', line)
|
||||||
if m:
|
if m:
|
||||||
name = m.group('name')
|
type = Type(m.group('name'))
|
||||||
if options.externs:
|
|
||||||
name = re.sub('\Aol\.', 'olx.', name + 'Extern')
|
|
||||||
if options.typedef:
|
|
||||||
name = name + 'Literal'
|
|
||||||
type = Type(name)
|
|
||||||
types.append(type)
|
types.append(type)
|
||||||
continue
|
continue
|
||||||
m = re.match('(?P<key>\S+):\s+(?P<value>\S+)', line)
|
m = re.match('(?P<key>\S+):\s+(?P<value>\S+)', line)
|
||||||
@@ -74,6 +70,7 @@ def main(argv):
|
|||||||
type.members[m.group('key')] = m.group('value')
|
type.members[m.group('key')] = m.group('value')
|
||||||
continue
|
continue
|
||||||
raise RuntimeError(line)
|
raise RuntimeError(line)
|
||||||
|
types = sorted(types, key=attrgetter('name'))
|
||||||
|
|
||||||
if options.externs:
|
if options.externs:
|
||||||
sys.stdout.write('/**\n')
|
sys.stdout.write('/**\n')
|
||||||
@@ -91,7 +88,8 @@ def main(argv):
|
|||||||
sys.stdout.write(type.extern())
|
sys.stdout.write(type.extern())
|
||||||
|
|
||||||
if options.typedef:
|
if options.typedef:
|
||||||
sys.stdout.write(''.join(type.provide() for type in types))
|
for type in types:
|
||||||
|
sys.stdout.write(type.provide())
|
||||||
for type in types:
|
for type in types:
|
||||||
sys.stdout.write('\n\n')
|
sys.stdout.write('\n\n')
|
||||||
sys.stdout.write(type.typedef())
|
sys.stdout.write(type.typedef())
|
||||||
@@ -5,7 +5,8 @@
|
|||||||
"inherits": "../base.json",
|
"inherits": "../base.json",
|
||||||
|
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"build/require-all.js"
|
"build/src/internal/src/requireall.js",
|
||||||
|
"build/src/internal/src/types.js"
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"css-output-file": "build/ol.css",
|
"css-output-file": "build/ol.css",
|
||||||
|
|
||||||
"externs": [
|
"externs": [
|
||||||
"build/src/externs.js",
|
"build/src/external/externs/types.js",
|
||||||
"externs/bingmaps.js",
|
"externs/bingmaps.js",
|
||||||
"externs/proj4js.js",
|
"externs/proj4js.js",
|
||||||
"externs/tilejson.js"
|
"externs/tilejson.js"
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
"inherits": "../base.json",
|
"inherits": "../base.json",
|
||||||
|
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"src/ol/mapoptions.js",
|
|
||||||
"exports/ol/collection.js",
|
"exports/ol/collection.js",
|
||||||
"exports/ol/coordinate.js",
|
"exports/ol/coordinate.js",
|
||||||
"exports/ol/extent.js",
|
"exports/ol/extent.js",
|
||||||
@@ -36,6 +35,10 @@
|
|||||||
"exports/ol/source/stamen.js"
|
"exports/ol/source/stamen.js"
|
||||||
],
|
],
|
||||||
|
|
||||||
"output-wrapper": "(function(){%output%})();"
|
"output-wrapper": "(function(){%output%})();",
|
||||||
|
|
||||||
|
"paths": [
|
||||||
|
"src"
|
||||||
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ goog.require('ol.Collection');
|
|||||||
goog.require('ol.Coordinate');
|
goog.require('ol.Coordinate');
|
||||||
goog.require('ol.CoordinateFormat');
|
goog.require('ol.CoordinateFormat');
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.MapOptions'); // FIXME this should not be required
|
|
||||||
goog.require('ol.overlay.Overlay');
|
goog.require('ol.overlay.Overlay');
|
||||||
goog.require('ol.source.MapQuestOpenAerial');
|
goog.require('ol.source.MapQuestOpenAerial');
|
||||||
|
|
||||||
|
|||||||
@@ -1,41 +1,3 @@
|
|||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
|
|
||||||
|
goog.exportSymbol('ol.Map', ol.Map);
|
||||||
|
|
||||||
/**
|
|
||||||
* @constructor
|
|
||||||
* @extends {ol.Map}
|
|
||||||
* @param {Element} container Container.
|
|
||||||
* @param {olx.MapOptionsExtern} mapOptionsExtern Map options literal.
|
|
||||||
*/
|
|
||||||
ol.MapExport = function(container, mapOptionsExtern) {
|
|
||||||
|
|
||||||
goog.base(this, container, {
|
|
||||||
center: mapOptionsExtern.center,
|
|
||||||
controls: mapOptionsExtern.controls,
|
|
||||||
doubleClickZoom: mapOptionsExtern.doubleClickZoom,
|
|
||||||
dragPan: mapOptionsExtern.dragPan,
|
|
||||||
interactions: mapOptionsExtern.interactions,
|
|
||||||
keyboard: mapOptionsExtern.keyboard,
|
|
||||||
keyboardPanOffset: mapOptionsExtern.keyboardPanOffset,
|
|
||||||
layers: mapOptionsExtern.layers,
|
|
||||||
maxResolution: mapOptionsExtern.maxResolution,
|
|
||||||
mouseWheelZoom: mapOptionsExtern.mouseWheelZoom,
|
|
||||||
mouseWheelZoomDelta: mapOptionsExtern.mouseWheelZoomDelta,
|
|
||||||
projection: mapOptionsExtern.projection,
|
|
||||||
renderer: mapOptionsExtern.renderer,
|
|
||||||
renderers: mapOptionsExtern.renderers,
|
|
||||||
resolution: mapOptionsExtern.resolution,
|
|
||||||
resolutions: mapOptionsExtern.resolutions,
|
|
||||||
rotate: mapOptionsExtern.rotate,
|
|
||||||
shiftDragZoom: mapOptionsExtern.shiftDragZoom,
|
|
||||||
userProjection: mapOptionsExtern.userProjection,
|
|
||||||
zoom: mapOptionsExtern.zoom,
|
|
||||||
zoomDelta: mapOptionsExtern.zoomDelta,
|
|
||||||
zoomFactor: mapOptionsExtern.zoomFactor
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
goog.inherits(ol.MapExport, ol.Map);
|
|
||||||
|
|
||||||
goog.exportSymbol('ol.Map', ol.MapExport);
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ goog.require('goog.object');
|
|||||||
goog.require('goog.style');
|
goog.require('goog.style');
|
||||||
goog.require('ol.Collection');
|
goog.require('ol.Collection');
|
||||||
goog.require('ol.CoverageArea');
|
goog.require('ol.CoverageArea');
|
||||||
goog.require('ol.MapProperty');
|
|
||||||
goog.require('ol.TileCoverageArea');
|
goog.require('ol.TileCoverageArea');
|
||||||
goog.require('ol.control.Control');
|
goog.require('ol.control.Control');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ goog.provide('ol.control.Control');
|
|||||||
goog.provide('ol.control.ControlOptions');
|
goog.provide('ol.control.ControlOptions');
|
||||||
|
|
||||||
goog.require('goog.Disposable');
|
goog.require('goog.Disposable');
|
||||||
goog.require('ol.Map');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ goog.provide('ol.control.MousePositionOptions');
|
|||||||
goog.require('goog.events');
|
goog.require('goog.events');
|
||||||
goog.require('goog.events.EventType');
|
goog.require('goog.events.EventType');
|
||||||
goog.require('goog.style');
|
goog.require('goog.style');
|
||||||
goog.require('ol.MapProperty');
|
|
||||||
goog.require('ol.Object');
|
goog.require('ol.Object');
|
||||||
goog.require('ol.Pixel');
|
goog.require('ol.Pixel');
|
||||||
goog.require('ol.Projection');
|
goog.require('ol.Projection');
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
@externtype ol.MapOptions
|
@externtype olx.MapOptions
|
||||||
center: ol.Coordinate|undefined
|
center: ol.Coordinate|undefined
|
||||||
controls: ol.Collection|undefined
|
controls: ol.Collection|undefined
|
||||||
doubleClickZoom: boolean|undefined
|
doubleClickZoom: boolean|undefined
|
||||||
|
|||||||
298
src/ol/map.js
298
src/ol/map.js
@@ -5,6 +5,7 @@
|
|||||||
goog.provide('ol.Map');
|
goog.provide('ol.Map');
|
||||||
goog.provide('ol.MapEventType');
|
goog.provide('ol.MapEventType');
|
||||||
goog.provide('ol.MapProperty');
|
goog.provide('ol.MapProperty');
|
||||||
|
goog.provide('ol.RendererHint');
|
||||||
|
|
||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
goog.require('goog.debug.Logger');
|
goog.require('goog.debug.Logger');
|
||||||
@@ -34,10 +35,56 @@ goog.require('ol.MapBrowserEvent');
|
|||||||
goog.require('ol.Object');
|
goog.require('ol.Object');
|
||||||
goog.require('ol.Pixel');
|
goog.require('ol.Pixel');
|
||||||
goog.require('ol.Projection');
|
goog.require('ol.Projection');
|
||||||
|
goog.require('ol.ResolutionConstraint');
|
||||||
|
goog.require('ol.RotationConstraint');
|
||||||
goog.require('ol.Size');
|
goog.require('ol.Size');
|
||||||
goog.require('ol.TransformFunction');
|
goog.require('ol.TransformFunction');
|
||||||
|
goog.require('ol.control.Attribution');
|
||||||
|
goog.require('ol.control.Zoom');
|
||||||
|
goog.require('ol.interaction.AltDragRotate');
|
||||||
|
goog.require('ol.interaction.DblClickZoom');
|
||||||
|
goog.require('ol.interaction.DragPan');
|
||||||
goog.require('ol.interaction.Interaction');
|
goog.require('ol.interaction.Interaction');
|
||||||
|
goog.require('ol.interaction.KeyboardPan');
|
||||||
|
goog.require('ol.interaction.KeyboardZoom');
|
||||||
|
goog.require('ol.interaction.MouseWheelZoom');
|
||||||
|
goog.require('ol.interaction.ShiftDragZoom');
|
||||||
goog.require('ol.renderer.Layer');
|
goog.require('ol.renderer.Layer');
|
||||||
|
goog.require('ol.renderer.Map');
|
||||||
|
goog.require('ol.renderer.dom');
|
||||||
|
goog.require('ol.renderer.dom.Map');
|
||||||
|
goog.require('ol.renderer.webgl');
|
||||||
|
goog.require('ol.renderer.webgl.Map');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @define {boolean} Whether to enable DOM.
|
||||||
|
*/
|
||||||
|
ol.ENABLE_DOM = true;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @define {boolean} Whether to enable WebGL.
|
||||||
|
*/
|
||||||
|
ol.ENABLE_WEBGL = true;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
ol.RendererHint = {
|
||||||
|
DOM: 'dom',
|
||||||
|
WEBGL: 'webgl'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<ol.RendererHint>}
|
||||||
|
*/
|
||||||
|
ol.DEFAULT_RENDERER_HINTS = [
|
||||||
|
ol.RendererHint.WEBGL,
|
||||||
|
ol.RendererHint.DOM
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,6 +95,16 @@ ol.MapEventType = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {{controls: ol.Collection,
|
||||||
|
* constraints: ol.Constraints,
|
||||||
|
* rendererConstructor:
|
||||||
|
* function(new: ol.renderer.Map, Element, ol.Map),
|
||||||
|
* values: Object.<string, *>}}
|
||||||
|
*/
|
||||||
|
ol.MapOptionsInternal;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
@@ -70,9 +127,9 @@ ol.MapProperty = {
|
|||||||
* @extends {ol.Object}
|
* @extends {ol.Object}
|
||||||
* @implements {goog.fx.anim.Animated}
|
* @implements {goog.fx.anim.Animated}
|
||||||
* @param {Element} container Container.
|
* @param {Element} container Container.
|
||||||
* @param {ol.MapOptionsLiteral} mapOptionsLiteral Map options literal.
|
* @param {olx.MapOptions} mapOptions Map options.
|
||||||
*/
|
*/
|
||||||
ol.Map = function(container, mapOptionsLiteral) {
|
ol.Map = function(container, mapOptions) {
|
||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
|
|
||||||
@@ -84,7 +141,7 @@ ol.Map = function(container, mapOptionsLiteral) {
|
|||||||
this.logger = goog.debug.Logger.getLogger('ol.map.' + goog.getUid(this));
|
this.logger = goog.debug.Logger.getLogger('ol.map.' + goog.getUid(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapOptions = ol.MapOptions.create(mapOptionsLiteral);
|
var mapOptionsInternal = ol.Map.createOptionsInternal(mapOptions);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.TransformFunction}
|
* @type {ol.TransformFunction}
|
||||||
@@ -132,7 +189,7 @@ ol.Map = function(container, mapOptionsLiteral) {
|
|||||||
* @private
|
* @private
|
||||||
* @type {ol.Constraints}
|
* @type {ol.Constraints}
|
||||||
*/
|
*/
|
||||||
this.constraints_ = mapOptions.constraints;
|
this.constraints_ = mapOptionsInternal.constraints;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -184,7 +241,7 @@ ol.Map = function(container, mapOptionsLiteral) {
|
|||||||
* @type {ol.Collection}
|
* @type {ol.Collection}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.controls_ = mapOptions.controls;
|
this.controls_ = mapOptionsInternal.controls;
|
||||||
|
|
||||||
goog.events.listen(this.controls_, ol.CollectionEventType.ADD,
|
goog.events.listen(this.controls_, ol.CollectionEventType.ADD,
|
||||||
this.handleControlsAdd_, false, this);
|
this.handleControlsAdd_, false, this);
|
||||||
@@ -195,7 +252,8 @@ ol.Map = function(container, mapOptionsLiteral) {
|
|||||||
* @type {ol.renderer.Map}
|
* @type {ol.renderer.Map}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.renderer_ = new mapOptions.rendererConstructor(this.viewport_, this);
|
this.renderer_ =
|
||||||
|
new mapOptionsInternal.rendererConstructor(this.viewport_, this);
|
||||||
this.registerDisposable(this.renderer_);
|
this.registerDisposable(this.renderer_);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -214,7 +272,7 @@ ol.Map = function(container, mapOptionsLiteral) {
|
|||||||
this, ol.Object.getChangedEventType(ol.MapProperty.USER_PROJECTION),
|
this, ol.Object.getChangedEventType(ol.MapProperty.USER_PROJECTION),
|
||||||
this.handleUserProjectionChanged, false, this);
|
this.handleUserProjectionChanged, false, this);
|
||||||
|
|
||||||
this.setValues(mapOptions.values);
|
this.setValues(mapOptionsInternal.values);
|
||||||
|
|
||||||
this.handleBrowserWindowResize();
|
this.handleBrowserWindowResize();
|
||||||
|
|
||||||
@@ -903,3 +961,229 @@ ol.Map.prototype.zoomToResolution = function(resolution, opt_anchor) {
|
|||||||
resolution = this.constraints_.resolution(resolution, 0);
|
resolution = this.constraints_.resolution(resolution, 0);
|
||||||
this.zoom_(resolution, opt_anchor);
|
this.zoom_(resolution, opt_anchor);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {olx.MapOptions} mapOptions Map options.
|
||||||
|
* @return {ol.MapOptionsInternal} Map options.
|
||||||
|
*/
|
||||||
|
ol.Map.createOptionsInternal = function(mapOptions) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Object.<string, *>}
|
||||||
|
*/
|
||||||
|
var values = {};
|
||||||
|
|
||||||
|
if (goog.isDef(mapOptions.center)) {
|
||||||
|
values[ol.MapProperty.CENTER] = mapOptions.center;
|
||||||
|
}
|
||||||
|
|
||||||
|
values[ol.MapProperty.INTERACTIONS] =
|
||||||
|
goog.isDef(mapOptions.interactions) ?
|
||||||
|
mapOptions.interactions :
|
||||||
|
ol.Map.createInteractions_(mapOptions);
|
||||||
|
|
||||||
|
values[ol.MapProperty.LAYERS] = goog.isDef(mapOptions.layers) ?
|
||||||
|
mapOptions.layers : new ol.Collection();
|
||||||
|
|
||||||
|
values[ol.MapProperty.PROJECTION] = ol.Map.createProjection_(
|
||||||
|
mapOptions.projection, 'EPSG:3857');
|
||||||
|
|
||||||
|
if (goog.isDef(mapOptions.resolution)) {
|
||||||
|
values[ol.MapProperty.RESOLUTION] = mapOptions.resolution;
|
||||||
|
} else if (goog.isDef(mapOptions.zoom)) {
|
||||||
|
values[ol.MapProperty.RESOLUTION] =
|
||||||
|
ol.Projection.EPSG_3857_HALF_SIZE / (128 << mapOptions.zoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
values[ol.MapProperty.USER_PROJECTION] = ol.Map.createProjection_(
|
||||||
|
mapOptions.userProjection, 'EPSG:4326');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {function(new: ol.renderer.Map, Element, ol.Map)}
|
||||||
|
*/
|
||||||
|
var rendererConstructor = ol.renderer.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<ol.RendererHint>}
|
||||||
|
*/
|
||||||
|
var rendererHints;
|
||||||
|
if (goog.isDef(mapOptions.renderers)) {
|
||||||
|
rendererHints = mapOptions.renderers;
|
||||||
|
} else if (goog.isDef(mapOptions.renderer)) {
|
||||||
|
rendererHints = [mapOptions.renderer];
|
||||||
|
} else {
|
||||||
|
rendererHints = ol.DEFAULT_RENDERER_HINTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
var i, rendererHint;
|
||||||
|
for (i = 0; i < rendererHints.length; ++i) {
|
||||||
|
rendererHint = rendererHints[i];
|
||||||
|
if (rendererHint == ol.RendererHint.DOM) {
|
||||||
|
if (ol.ENABLE_DOM && ol.renderer.dom.isSupported()) {
|
||||||
|
rendererConstructor = ol.renderer.dom.Map;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (rendererHint == ol.RendererHint.WEBGL) {
|
||||||
|
if (ol.ENABLE_WEBGL && ol.renderer.webgl.isSupported()) {
|
||||||
|
rendererConstructor = ol.renderer.webgl.Map;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {ol.Constraints}
|
||||||
|
*/
|
||||||
|
var constraints = ol.Map.createConstraints_(mapOptions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {ol.Collection}
|
||||||
|
*/
|
||||||
|
var controls;
|
||||||
|
if (goog.isDef(mapOptions.controls)) {
|
||||||
|
controls = mapOptions.controls;
|
||||||
|
} else {
|
||||||
|
controls = ol.Map.createControls_(mapOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
constraints: constraints,
|
||||||
|
controls: controls,
|
||||||
|
rendererConstructor: rendererConstructor,
|
||||||
|
values: values
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {olx.MapOptions} mapOptions Map options.
|
||||||
|
* @return {ol.Constraints} Map constraints.
|
||||||
|
*/
|
||||||
|
ol.Map.createConstraints_ = function(mapOptions) {
|
||||||
|
var resolutionConstraint;
|
||||||
|
if (goog.isDef(mapOptions.resolutions)) {
|
||||||
|
resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(
|
||||||
|
mapOptions.resolutions);
|
||||||
|
} else {
|
||||||
|
var maxResolution, numZoomLevels, zoomFactor;
|
||||||
|
if (goog.isDef(mapOptions.maxResolution) &&
|
||||||
|
goog.isDef(mapOptions.numZoomLevels) &&
|
||||||
|
goog.isDef(mapOptions.zoomFactor)) {
|
||||||
|
maxResolution = mapOptions.maxResolution;
|
||||||
|
numZoomLevels = mapOptions.numZoomLevels;
|
||||||
|
zoomFactor = mapOptions.zoomFactor;
|
||||||
|
} else {
|
||||||
|
maxResolution = ol.Projection.EPSG_3857_HALF_SIZE / 128;
|
||||||
|
// number of steps we want between two data resolutions
|
||||||
|
var numSteps = 4;
|
||||||
|
numZoomLevels = 29 * numSteps;
|
||||||
|
zoomFactor = Math.exp(Math.log(2) / numSteps);
|
||||||
|
}
|
||||||
|
resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(
|
||||||
|
zoomFactor, maxResolution, numZoomLevels - 1);
|
||||||
|
}
|
||||||
|
// FIXME rotation constraint is not configurable at the moment
|
||||||
|
var rotationConstraint = ol.RotationConstraint.none;
|
||||||
|
return new ol.Constraints(resolutionConstraint, rotationConstraint);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {olx.MapOptions} mapOptions Map options.
|
||||||
|
* @return {ol.Collection} Controls.
|
||||||
|
*/
|
||||||
|
ol.Map.createControls_ = function(mapOptions) {
|
||||||
|
|
||||||
|
var controls = new ol.Collection();
|
||||||
|
|
||||||
|
controls.push(new ol.control.Attribution({}));
|
||||||
|
|
||||||
|
var zoomDelta = goog.isDef(mapOptions.zoomDelta) ?
|
||||||
|
mapOptions.zoomDelta : 4;
|
||||||
|
controls.push(new ol.control.Zoom({
|
||||||
|
delta: zoomDelta
|
||||||
|
}));
|
||||||
|
|
||||||
|
return controls;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {olx.MapOptions} mapOptions Map options.
|
||||||
|
* @return {ol.Collection} Interactions.
|
||||||
|
*/
|
||||||
|
ol.Map.createInteractions_ = function(mapOptions) {
|
||||||
|
|
||||||
|
var interactions = new ol.Collection();
|
||||||
|
|
||||||
|
var rotate = goog.isDef(mapOptions.rotate) ?
|
||||||
|
mapOptions.rotate : true;
|
||||||
|
if (rotate) {
|
||||||
|
interactions.push(new ol.interaction.AltDragRotate());
|
||||||
|
}
|
||||||
|
|
||||||
|
var doubleClickZoom = goog.isDef(mapOptions.doubleClickZoom) ?
|
||||||
|
mapOptions.doubleClickZoom : true;
|
||||||
|
if (doubleClickZoom) {
|
||||||
|
var zoomDelta = goog.isDef(mapOptions.zoomDelta) ?
|
||||||
|
mapOptions.zoomDelta : 4;
|
||||||
|
interactions.push(new ol.interaction.DblClickZoom(zoomDelta));
|
||||||
|
}
|
||||||
|
|
||||||
|
var dragPan = goog.isDef(mapOptions.dragPan) ?
|
||||||
|
mapOptions.dragPan : true;
|
||||||
|
if (dragPan) {
|
||||||
|
interactions.push(new ol.interaction.DragPan());
|
||||||
|
}
|
||||||
|
|
||||||
|
var keyboard = goog.isDef(mapOptions.keyboard) ?
|
||||||
|
mapOptions.keyboard : true;
|
||||||
|
var keyboardPanOffset = goog.isDef(mapOptions.keyboardPanOffset) ?
|
||||||
|
mapOptions.keyboardPanOffset : 80;
|
||||||
|
if (keyboard) {
|
||||||
|
interactions.push(new ol.interaction.KeyboardPan(keyboardPanOffset));
|
||||||
|
interactions.push(new ol.interaction.KeyboardZoom());
|
||||||
|
}
|
||||||
|
|
||||||
|
var mouseWheelZoom = goog.isDef(mapOptions.mouseWheelZoom) ?
|
||||||
|
mapOptions.mouseWheelZoom : true;
|
||||||
|
if (mouseWheelZoom) {
|
||||||
|
var mouseWheelZoomDelta =
|
||||||
|
goog.isDef(mapOptions.mouseWheelZoomDelta) ?
|
||||||
|
mapOptions.mouseWheelZoomDelta : 1;
|
||||||
|
interactions.push(new ol.interaction.MouseWheelZoom(mouseWheelZoomDelta));
|
||||||
|
}
|
||||||
|
|
||||||
|
var shiftDragZoom = goog.isDef(mapOptions.shiftDragZoom) ?
|
||||||
|
mapOptions.shiftDragZoom : true;
|
||||||
|
if (shiftDragZoom) {
|
||||||
|
interactions.push(new ol.interaction.ShiftDragZoom());
|
||||||
|
}
|
||||||
|
|
||||||
|
return interactions;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {ol.Projection|string|undefined} projection Projection.
|
||||||
|
* @param {string} defaultCode Default code.
|
||||||
|
* @return {ol.Projection} Projection.
|
||||||
|
*/
|
||||||
|
ol.Map.createProjection_ = function(projection, defaultCode) {
|
||||||
|
if (!goog.isDefAndNotNull(projection)) {
|
||||||
|
return ol.Projection.getFromCode(defaultCode);
|
||||||
|
} else if (goog.isString(projection)) {
|
||||||
|
return ol.Projection.getFromCode(projection);
|
||||||
|
} else {
|
||||||
|
goog.asserts.assert(projection instanceof ol.Projection);
|
||||||
|
return projection;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,293 +0,0 @@
|
|||||||
// FIXME rotation constraint is not configurable at the moment
|
|
||||||
// FIXME MapOptions should create a Zoom control
|
|
||||||
|
|
||||||
goog.provide('ol.MapOptions');
|
|
||||||
goog.provide('ol.MapOptionsType');
|
|
||||||
goog.provide('ol.RendererHint');
|
|
||||||
|
|
||||||
goog.require('ol.Collection');
|
|
||||||
goog.require('ol.Constraints');
|
|
||||||
goog.require('ol.MapOptionsLiteral');
|
|
||||||
goog.require('ol.Projection');
|
|
||||||
goog.require('ol.ResolutionConstraint');
|
|
||||||
goog.require('ol.RotationConstraint');
|
|
||||||
goog.require('ol.control.Attribution');
|
|
||||||
goog.require('ol.control.Zoom');
|
|
||||||
goog.require('ol.interaction.AltDragRotate');
|
|
||||||
goog.require('ol.interaction.DblClickZoom');
|
|
||||||
goog.require('ol.interaction.DragPan');
|
|
||||||
goog.require('ol.interaction.KeyboardPan');
|
|
||||||
goog.require('ol.interaction.KeyboardZoom');
|
|
||||||
goog.require('ol.interaction.MouseWheelZoom');
|
|
||||||
goog.require('ol.interaction.ShiftDragZoom');
|
|
||||||
goog.require('ol.renderer.Map');
|
|
||||||
goog.require('ol.renderer.dom');
|
|
||||||
goog.require('ol.renderer.dom.Map');
|
|
||||||
goog.require('ol.renderer.webgl');
|
|
||||||
goog.require('ol.renderer.webgl.Map');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {boolean} Whether to enable DOM.
|
|
||||||
*/
|
|
||||||
ol.ENABLE_DOM = true;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {boolean} Whether to enable WebGL.
|
|
||||||
*/
|
|
||||||
ol.ENABLE_WEBGL = true;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
ol.RendererHint = {
|
|
||||||
DOM: 'dom',
|
|
||||||
WEBGL: 'webgl'
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {Array.<ol.RendererHint>}
|
|
||||||
*/
|
|
||||||
ol.DEFAULT_RENDERER_HINTS = [
|
|
||||||
ol.RendererHint.WEBGL,
|
|
||||||
ol.RendererHint.DOM
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {{controls: ol.Collection,
|
|
||||||
* constraints: ol.Constraints,
|
|
||||||
* rendererConstructor:
|
|
||||||
* function(new: ol.renderer.Map, Element, ol.Map),
|
|
||||||
* values: Object.<string, *>}}
|
|
||||||
*/
|
|
||||||
ol.MapOptionsType;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {ol.MapOptionsLiteral} mapOptionsLiteral Map options.
|
|
||||||
* @return {ol.MapOptionsType} Map options.
|
|
||||||
*/
|
|
||||||
ol.MapOptions.create = function(mapOptionsLiteral) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {Object.<string, *>}
|
|
||||||
*/
|
|
||||||
var values = {};
|
|
||||||
|
|
||||||
if (goog.isDef(mapOptionsLiteral.center)) {
|
|
||||||
values[ol.MapProperty.CENTER] = mapOptionsLiteral.center;
|
|
||||||
}
|
|
||||||
|
|
||||||
values[ol.MapProperty.INTERACTIONS] =
|
|
||||||
goog.isDef(mapOptionsLiteral.interactions) ?
|
|
||||||
mapOptionsLiteral.interactions :
|
|
||||||
ol.MapOptions.createInteractions_(mapOptionsLiteral);
|
|
||||||
|
|
||||||
values[ol.MapProperty.LAYERS] = goog.isDef(mapOptionsLiteral.layers) ?
|
|
||||||
mapOptionsLiteral.layers : new ol.Collection();
|
|
||||||
|
|
||||||
values[ol.MapProperty.PROJECTION] = ol.MapOptions.createProjection_(
|
|
||||||
mapOptionsLiteral.projection, 'EPSG:3857');
|
|
||||||
|
|
||||||
if (goog.isDef(mapOptionsLiteral.resolution)) {
|
|
||||||
values[ol.MapProperty.RESOLUTION] = mapOptionsLiteral.resolution;
|
|
||||||
} else if (goog.isDef(mapOptionsLiteral.zoom)) {
|
|
||||||
values[ol.MapProperty.RESOLUTION] =
|
|
||||||
ol.Projection.EPSG_3857_HALF_SIZE / (128 << mapOptionsLiteral.zoom);
|
|
||||||
}
|
|
||||||
|
|
||||||
values[ol.MapProperty.USER_PROJECTION] = ol.MapOptions.createProjection_(
|
|
||||||
mapOptionsLiteral.userProjection, 'EPSG:4326');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {function(new: ol.renderer.Map, Element, ol.Map)}
|
|
||||||
*/
|
|
||||||
var rendererConstructor = ol.renderer.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {Array.<ol.RendererHint>}
|
|
||||||
*/
|
|
||||||
var rendererHints;
|
|
||||||
if (goog.isDef(mapOptionsLiteral.renderers)) {
|
|
||||||
rendererHints = mapOptionsLiteral.renderers;
|
|
||||||
} else if (goog.isDef(mapOptionsLiteral.renderer)) {
|
|
||||||
rendererHints = [mapOptionsLiteral.renderer];
|
|
||||||
} else {
|
|
||||||
rendererHints = ol.DEFAULT_RENDERER_HINTS;
|
|
||||||
}
|
|
||||||
|
|
||||||
var i, rendererHint;
|
|
||||||
for (i = 0; i < rendererHints.length; ++i) {
|
|
||||||
rendererHint = rendererHints[i];
|
|
||||||
if (rendererHint == ol.RendererHint.DOM) {
|
|
||||||
if (ol.ENABLE_DOM && ol.renderer.dom.isSupported()) {
|
|
||||||
rendererConstructor = ol.renderer.dom.Map;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (rendererHint == ol.RendererHint.WEBGL) {
|
|
||||||
if (ol.ENABLE_WEBGL && ol.renderer.webgl.isSupported()) {
|
|
||||||
rendererConstructor = ol.renderer.webgl.Map;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {ol.Constraints}
|
|
||||||
*/
|
|
||||||
var constraints = ol.MapOptions.createConstraints_(mapOptionsLiteral);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {ol.Collection}
|
|
||||||
*/
|
|
||||||
var controls;
|
|
||||||
if (goog.isDef(mapOptionsLiteral.controls)) {
|
|
||||||
controls = mapOptionsLiteral.controls;
|
|
||||||
} else {
|
|
||||||
controls = ol.MapOptions.createControls_(mapOptionsLiteral);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
constraints: constraints,
|
|
||||||
controls: controls,
|
|
||||||
rendererConstructor: rendererConstructor,
|
|
||||||
values: values
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {ol.MapOptionsLiteral} mapOptionsLiteral Map options literal.
|
|
||||||
* @return {ol.Constraints} Map constraints.
|
|
||||||
*/
|
|
||||||
ol.MapOptions.createConstraints_ = function(mapOptionsLiteral) {
|
|
||||||
var resolutionConstraint;
|
|
||||||
if (goog.isDef(mapOptionsLiteral.resolutions)) {
|
|
||||||
resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(
|
|
||||||
mapOptionsLiteral.resolutions);
|
|
||||||
} else {
|
|
||||||
var maxResolution, numZoomLevels, zoomFactor;
|
|
||||||
if (goog.isDef(mapOptionsLiteral.maxResolution) &&
|
|
||||||
goog.isDef(mapOptionsLiteral.numZoomLevels) &&
|
|
||||||
goog.isDef(mapOptionsLiteral.zoomFactor)) {
|
|
||||||
maxResolution = mapOptionsLiteral.maxResolution;
|
|
||||||
numZoomLevels = mapOptionsLiteral.numZoomLevels;
|
|
||||||
zoomFactor = mapOptionsLiteral.zoomFactor;
|
|
||||||
} else {
|
|
||||||
maxResolution = ol.Projection.EPSG_3857_HALF_SIZE / 128;
|
|
||||||
// number of steps we want between two data resolutions
|
|
||||||
var numSteps = 4;
|
|
||||||
numZoomLevels = 29 * numSteps;
|
|
||||||
zoomFactor = Math.exp(Math.log(2) / numSteps);
|
|
||||||
}
|
|
||||||
resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(
|
|
||||||
zoomFactor, maxResolution, numZoomLevels - 1);
|
|
||||||
}
|
|
||||||
// FIXME rotation constraint is not configurable at the moment
|
|
||||||
var rotationConstraint = ol.RotationConstraint.none;
|
|
||||||
return new ol.Constraints(resolutionConstraint, rotationConstraint);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {ol.MapOptionsLiteral} mapOptionsLiteral Map options literal.
|
|
||||||
* @return {ol.Collection} Controls.
|
|
||||||
*/
|
|
||||||
ol.MapOptions.createControls_ = function(mapOptionsLiteral) {
|
|
||||||
|
|
||||||
var controls = new ol.Collection();
|
|
||||||
|
|
||||||
controls.push(new ol.control.Attribution({}));
|
|
||||||
|
|
||||||
var zoomDelta = goog.isDef(mapOptionsLiteral.zoomDelta) ?
|
|
||||||
mapOptionsLiteral.zoomDelta : 4;
|
|
||||||
controls.push(new ol.control.Zoom({
|
|
||||||
delta: zoomDelta
|
|
||||||
}));
|
|
||||||
|
|
||||||
return controls;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {ol.MapOptionsLiteral} mapOptionsLiteral Map options literal.
|
|
||||||
* @return {ol.Collection} Interactions.
|
|
||||||
*/
|
|
||||||
ol.MapOptions.createInteractions_ = function(mapOptionsLiteral) {
|
|
||||||
|
|
||||||
var interactions = new ol.Collection();
|
|
||||||
|
|
||||||
var rotate = goog.isDef(mapOptionsLiteral.rotate) ?
|
|
||||||
mapOptionsLiteral.rotate : true;
|
|
||||||
if (rotate) {
|
|
||||||
interactions.push(new ol.interaction.AltDragRotate());
|
|
||||||
}
|
|
||||||
|
|
||||||
var doubleClickZoom = goog.isDef(mapOptionsLiteral.doubleClickZoom) ?
|
|
||||||
mapOptionsLiteral.doubleClickZoom : true;
|
|
||||||
if (doubleClickZoom) {
|
|
||||||
var zoomDelta = goog.isDef(mapOptionsLiteral.zoomDelta) ?
|
|
||||||
mapOptionsLiteral.zoomDelta : 4;
|
|
||||||
interactions.push(new ol.interaction.DblClickZoom(zoomDelta));
|
|
||||||
}
|
|
||||||
|
|
||||||
var dragPan = goog.isDef(mapOptionsLiteral.dragPan) ?
|
|
||||||
mapOptionsLiteral.dragPan : true;
|
|
||||||
if (dragPan) {
|
|
||||||
interactions.push(new ol.interaction.DragPan());
|
|
||||||
}
|
|
||||||
|
|
||||||
var keyboard = goog.isDef(mapOptionsLiteral.keyboard) ?
|
|
||||||
mapOptionsLiteral.keyboard : true;
|
|
||||||
var keyboardPanOffset = goog.isDef(mapOptionsLiteral.keyboardPanOffset) ?
|
|
||||||
mapOptionsLiteral.keyboardPanOffset : 80;
|
|
||||||
if (keyboard) {
|
|
||||||
interactions.push(new ol.interaction.KeyboardPan(keyboardPanOffset));
|
|
||||||
interactions.push(new ol.interaction.KeyboardZoom());
|
|
||||||
}
|
|
||||||
|
|
||||||
var mouseWheelZoom = goog.isDef(mapOptionsLiteral.mouseWheelZoom) ?
|
|
||||||
mapOptionsLiteral.mouseWheelZoom : true;
|
|
||||||
if (mouseWheelZoom) {
|
|
||||||
var mouseWheelZoomDelta =
|
|
||||||
goog.isDef(mapOptionsLiteral.mouseWheelZoomDelta) ?
|
|
||||||
mapOptionsLiteral.mouseWheelZoomDelta : 1;
|
|
||||||
interactions.push(new ol.interaction.MouseWheelZoom(mouseWheelZoomDelta));
|
|
||||||
}
|
|
||||||
|
|
||||||
var shiftDragZoom = goog.isDef(mapOptionsLiteral.shiftDragZoom) ?
|
|
||||||
mapOptionsLiteral.shiftDragZoom : true;
|
|
||||||
if (shiftDragZoom) {
|
|
||||||
interactions.push(new ol.interaction.ShiftDragZoom());
|
|
||||||
}
|
|
||||||
|
|
||||||
return interactions;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {ol.Projection|string|undefined} projection Projection.
|
|
||||||
* @param {string} defaultCode Default code.
|
|
||||||
* @return {ol.Projection} Projection.
|
|
||||||
*/
|
|
||||||
ol.MapOptions.createProjection_ = function(projection, defaultCode) {
|
|
||||||
if (!goog.isDefAndNotNull(projection)) {
|
|
||||||
return ol.Projection.getFromCode(defaultCode);
|
|
||||||
} else if (goog.isString(projection)) {
|
|
||||||
return ol.Projection.getFromCode(projection);
|
|
||||||
} else {
|
|
||||||
goog.asserts.assert(projection instanceof ol.Projection);
|
|
||||||
return projection;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -4,8 +4,6 @@ goog.provide('ol.overlay.OverlayPositioning');
|
|||||||
|
|
||||||
goog.require('goog.events');
|
goog.require('goog.events');
|
||||||
goog.require('goog.style');
|
goog.require('goog.style');
|
||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.MapProperty');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ goog.require('goog.events.Event');
|
|||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
goog.require('goog.style');
|
goog.require('goog.style');
|
||||||
goog.require('ol.Coordinate');
|
goog.require('ol.Coordinate');
|
||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.layer.TileLayer');
|
goog.require('ol.layer.TileLayer');
|
||||||
goog.require('ol.renderer.Map');
|
goog.require('ol.renderer.Map');
|
||||||
goog.require('ol.renderer.dom.TileLayer');
|
goog.require('ol.renderer.dom.TileLayer');
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ goog.require('goog.events');
|
|||||||
goog.require('goog.fx.anim');
|
goog.require('goog.fx.anim');
|
||||||
goog.require('goog.fx.anim.Animated');
|
goog.require('goog.fx.anim.Animated');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('goog.vec.Mat4');
|
||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.MapProperty');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ goog.require('goog.events.EventType');
|
|||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
goog.require('goog.style');
|
goog.require('goog.style');
|
||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.layer.TileLayer');
|
goog.require('ol.layer.TileLayer');
|
||||||
goog.require('ol.renderer.webgl.FragmentShader');
|
goog.require('ol.renderer.webgl.FragmentShader');
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ goog.require('goog.vec.Mat4');
|
|||||||
goog.require('goog.vec.Vec4');
|
goog.require('goog.vec.Vec4');
|
||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.Coordinate');
|
goog.require('ol.Coordinate');
|
||||||
goog.require('ol.MapEventType');
|
|
||||||
goog.require('ol.Size');
|
goog.require('ol.Size');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.layer.TileLayer');
|
goog.require('ol.layer.TileLayer');
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
<script type="text/javascript" src="spec/ol/object.test.js"></script>
|
<script type="text/javascript" src="spec/ol/object.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/tilecoord.test.js"></script>
|
<script type="text/javascript" src="spec/ol/tilecoord.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/tilegrid.test.js"></script>
|
<script type="text/javascript" src="spec/ol/tilegrid.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/mapoptions.test.js"></script>
|
<script type="text/javascript" src="spec/ol/map.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/projection.test.js"></script>
|
<script type="text/javascript" src="spec/ol/projection.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/rectangle.test.js"></script>
|
<script type="text/javascript" src="spec/ol/rectangle.test.js"></script>
|
||||||
<script type="text/javascript" src="spec/ol/tilerange.test.js"></script>
|
<script type="text/javascript" src="spec/ol/tilerange.test.js"></script>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
goog.require('ol.MapOptions');
|
goog.require('ol.Map');
|
||||||
|
|
||||||
describe('ol.MapOptions', function() {
|
describe('ol.Map', function() {
|
||||||
|
|
||||||
describe('create constraints', function() {
|
describe('create constraints', function() {
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ describe('ol.MapOptions', function() {
|
|||||||
describe('with no options', function() {
|
describe('with no options', function() {
|
||||||
it('gives a correct resolution constraint function', function() {
|
it('gives a correct resolution constraint function', function() {
|
||||||
var options = {};
|
var options = {};
|
||||||
var fn = ol.MapOptions.createConstraints_(options).resolution;
|
var fn = ol.Map.createConstraints_(options).resolution;
|
||||||
expect(fn(156543.03392804097, 0))
|
expect(fn(156543.03392804097, 0))
|
||||||
.toRoughlyEqual(156543.03392804097, 1e-9);
|
.toRoughlyEqual(156543.03392804097, 1e-9);
|
||||||
expect(fn(78271.51696402048, 0))
|
expect(fn(78271.51696402048, 0))
|
||||||
@@ -25,7 +25,7 @@ describe('ol.MapOptions', function() {
|
|||||||
numZoomLevels: 4,
|
numZoomLevels: 4,
|
||||||
zoomFactor: 3
|
zoomFactor: 3
|
||||||
};
|
};
|
||||||
var fn = ol.MapOptions.createConstraints_(options).resolution;
|
var fn = ol.Map.createConstraints_(options).resolution;
|
||||||
expect(fn(82, 0)).toEqual(81);
|
expect(fn(82, 0)).toEqual(81);
|
||||||
expect(fn(81, 0)).toEqual(81);
|
expect(fn(81, 0)).toEqual(81);
|
||||||
expect(fn(27, 0)).toEqual(27);
|
expect(fn(27, 0)).toEqual(27);
|
||||||
@@ -40,7 +40,7 @@ describe('ol.MapOptions', function() {
|
|||||||
var options = {
|
var options = {
|
||||||
resolutions: [97, 76, 65, 54, 0.45]
|
resolutions: [97, 76, 65, 54, 0.45]
|
||||||
};
|
};
|
||||||
var fn = ol.MapOptions.createConstraints_(options).resolution;
|
var fn = ol.Map.createConstraints_(options).resolution;
|
||||||
expect(fn(97, 0), 97);
|
expect(fn(97, 0), 97);
|
||||||
expect(fn(76, 0), 76);
|
expect(fn(76, 0), 76);
|
||||||
expect(fn(65, 0), 65);
|
expect(fn(65, 0), 65);
|
||||||
@@ -75,7 +75,7 @@ describe('ol.MapOptions', function() {
|
|||||||
|
|
||||||
describe('default mouseWheelZoomDelta', function() {
|
describe('default mouseWheelZoomDelta', function() {
|
||||||
it('create mousewheel interaction with default delta', function() {
|
it('create mousewheel interaction with default delta', function() {
|
||||||
var interactions = ol.MapOptions.createInteractions_(options);
|
var interactions = ol.Map.createInteractions_(options);
|
||||||
expect(interactions.getLength()).toEqual(1);
|
expect(interactions.getLength()).toEqual(1);
|
||||||
expect(interactions.getAt(0)).toBeA(ol.interaction.MouseWheelZoom);
|
expect(interactions.getAt(0)).toBeA(ol.interaction.MouseWheelZoom);
|
||||||
expect(interactions.getAt(0).delta_).toEqual(1);
|
expect(interactions.getAt(0).delta_).toEqual(1);
|
||||||
@@ -85,7 +85,7 @@ describe('ol.MapOptions', function() {
|
|||||||
describe('set mouseWheelZoomDelta', function() {
|
describe('set mouseWheelZoomDelta', function() {
|
||||||
it('create mousewheel interaction with set delta', function() {
|
it('create mousewheel interaction with set delta', function() {
|
||||||
options.mouseWheelZoomDelta = 7;
|
options.mouseWheelZoomDelta = 7;
|
||||||
var interactions = ol.MapOptions.createInteractions_(options);
|
var interactions = ol.Map.createInteractions_(options);
|
||||||
expect(interactions.getLength()).toEqual(1);
|
expect(interactions.getLength()).toEqual(1);
|
||||||
expect(interactions.getAt(0)).toBeA(ol.interaction.MouseWheelZoom);
|
expect(interactions.getAt(0)).toBeA(ol.interaction.MouseWheelZoom);
|
||||||
expect(interactions.getAt(0).delta_).toEqual(7);
|
expect(interactions.getAt(0).delta_).toEqual(7);
|
||||||
@@ -101,7 +101,7 @@ describe('ol.MapOptions', function() {
|
|||||||
|
|
||||||
describe('default zoomDelta', function() {
|
describe('default zoomDelta', function() {
|
||||||
it('create double click interaction with default delta', function() {
|
it('create double click interaction with default delta', function() {
|
||||||
var interactions = ol.MapOptions.createInteractions_(options);
|
var interactions = ol.Map.createInteractions_(options);
|
||||||
expect(interactions.getLength()).toEqual(1);
|
expect(interactions.getLength()).toEqual(1);
|
||||||
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
|
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
|
||||||
expect(interactions.getAt(0).delta_).toEqual(4);
|
expect(interactions.getAt(0).delta_).toEqual(4);
|
||||||
@@ -111,7 +111,7 @@ describe('ol.MapOptions', function() {
|
|||||||
describe('set mouseWheelZoomDelta', function() {
|
describe('set mouseWheelZoomDelta', function() {
|
||||||
it('create double click interaction with set delta', function() {
|
it('create double click interaction with set delta', function() {
|
||||||
options.zoomDelta = 7;
|
options.zoomDelta = 7;
|
||||||
var interactions = ol.MapOptions.createInteractions_(options);
|
var interactions = ol.Map.createInteractions_(options);
|
||||||
expect(interactions.getLength()).toEqual(1);
|
expect(interactions.getLength()).toEqual(1);
|
||||||
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
|
expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom);
|
||||||
expect(interactions.getAt(0).delta_).toEqual(7);
|
expect(interactions.getAt(0).delta_).toEqual(7);
|
||||||
Reference in New Issue
Block a user