Files
openlayers/nicer-api-docs/build/ol-whitespace.js
2014-05-06 13:02:46 -05:00

37894 lines
1.8 MiB

var CLOSURE_NO_DEPS = true;
var COMPILED = false;
var goog = goog || {};
goog.global = this;
goog.global.CLOSURE_DEFINES;
goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {
var parts = name.split(".");
var cur = opt_objectToExportTo || goog.global;
if(!(parts[0] in cur) && cur.execScript) {
cur.execScript("var " + parts[0])
}
for(var part;parts.length && (part = parts.shift());) {
if(!parts.length && opt_object !== undefined) {
cur[part] = opt_object
}else {
if(cur[part]) {
cur = cur[part]
}else {
cur = cur[part] = {}
}
}
}
};
goog.define = function(name, defaultValue) {
var value = defaultValue;
if(!COMPILED) {
if(goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, name)) {
value = goog.global.CLOSURE_DEFINES[name]
}
}
goog.exportPath_(name, value)
};
goog.DEBUG = true;
goog.define("goog.LOCALE", "en");
goog.define("goog.TRUSTED_SITE", true);
goog.provide = function(name) {
if(!COMPILED) {
if(goog.isProvided_(name)) {
throw Error('Namespace "' + name + '" already declared.');
}
delete goog.implicitNamespaces_[name];
var namespace = name;
while(namespace = namespace.substring(0, namespace.lastIndexOf("."))) {
if(goog.getObjectByName(namespace)) {
break
}
goog.implicitNamespaces_[namespace] = true
}
}
goog.exportPath_(name)
};
goog.setTestOnly = function(opt_message) {
if(COMPILED && !goog.DEBUG) {
opt_message = opt_message || "";
throw Error("Importing test-only code into non-debug environment" + opt_message ? ": " + opt_message : ".");
}
};
if(!COMPILED) {
goog.isProvided_ = function(name) {
return!goog.implicitNamespaces_[name] && !!goog.getObjectByName(name)
};
goog.implicitNamespaces_ = {}
}
goog.getObjectByName = function(name, opt_obj) {
var parts = name.split(".");
var cur = opt_obj || goog.global;
for(var part;part = parts.shift();) {
if(goog.isDefAndNotNull(cur[part])) {
cur = cur[part]
}else {
return null
}
}
return cur
};
goog.globalize = function(obj, opt_global) {
var global = opt_global || goog.global;
for(var x in obj) {
global[x] = obj[x]
}
};
goog.addDependency = function(relPath, provides, requires) {
if(goog.DEPENDENCIES_ENABLED) {
var provide, require;
var path = relPath.replace(/\\/g, "/");
var deps = goog.dependencies_;
for(var i = 0;provide = provides[i];i++) {
deps.nameToPath[provide] = path;
if(!(path in deps.pathToNames)) {
deps.pathToNames[path] = {}
}
deps.pathToNames[path][provide] = true
}
for(var j = 0;require = requires[j];j++) {
if(!(path in deps.requires)) {
deps.requires[path] = {}
}
deps.requires[path][require] = true
}
}
};
goog.define("goog.ENABLE_DEBUG_LOADER", true);
goog.require = function(name) {
if(!COMPILED) {
if(goog.isProvided_(name)) {
return
}
if(goog.ENABLE_DEBUG_LOADER) {
var path = goog.getPathFromDeps_(name);
if(path) {
goog.included_[path] = true;
goog.writeScripts_();
return
}
}
var errorMessage = "goog.require could not find: " + name;
if(goog.global.console) {
goog.global.console["error"](errorMessage)
}
throw Error(errorMessage);
}
};
goog.basePath = "";
goog.global.CLOSURE_BASE_PATH;
goog.global.CLOSURE_NO_DEPS;
goog.global.CLOSURE_IMPORT_SCRIPT;
goog.nullFunction = function() {
};
goog.identityFunction = function(opt_returnValue, var_args) {
return opt_returnValue
};
goog.abstractMethod = function() {
throw Error("unimplemented abstract method");
};
goog.addSingletonGetter = function(ctor) {
ctor.getInstance = function() {
if(ctor.instance_) {
return ctor.instance_
}
if(goog.DEBUG) {
goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor
}
return ctor.instance_ = new ctor
}
};
goog.instantiatedSingletons_ = [];
goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
if(goog.DEPENDENCIES_ENABLED) {
goog.included_ = {};
goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}};
goog.inHtmlDocument_ = function() {
var doc = goog.global.document;
return typeof doc != "undefined" && "write" in doc
};
goog.findBasePath_ = function() {
if(goog.global.CLOSURE_BASE_PATH) {
goog.basePath = goog.global.CLOSURE_BASE_PATH;
return
}else {
if(!goog.inHtmlDocument_()) {
return
}
}
var doc = goog.global.document;
var scripts = doc.getElementsByTagName("script");
for(var i = scripts.length - 1;i >= 0;--i) {
var src = scripts[i].src;
var qmark = src.lastIndexOf("?");
var l = qmark == -1 ? src.length : qmark;
if(src.substr(l - 7, 7) == "base.js") {
goog.basePath = src.substr(0, l - 7);
return
}
}
};
goog.importScript_ = function(src) {
var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
if(!goog.dependencies_.written[src] && importScript(src)) {
goog.dependencies_.written[src] = true
}
};
goog.writeScriptTag_ = function(src) {
if(goog.inHtmlDocument_()) {
var doc = goog.global.document;
if(doc.readyState == "complete") {
var isDeps = /\bdeps.js$/.test(src);
if(isDeps) {
return false
}else {
throw Error('Cannot write "' + src + '" after document load');
}
}
doc.write('\x3cscript type\x3d"text/javascript" src\x3d"' + src + '"\x3e\x3c/' + "script\x3e");
return true
}else {
return false
}
};
goog.writeScripts_ = function() {
var scripts = [];
var seenScript = {};
var deps = goog.dependencies_;
function visitNode(path) {
if(path in deps.written) {
return
}
if(path in deps.visited) {
if(!(path in seenScript)) {
seenScript[path] = true;
scripts.push(path)
}
return
}
deps.visited[path] = true;
if(path in deps.requires) {
for(var requireName in deps.requires[path]) {
if(!goog.isProvided_(requireName)) {
if(requireName in deps.nameToPath) {
visitNode(deps.nameToPath[requireName])
}else {
throw Error("Undefined nameToPath for " + requireName);
}
}
}
}
if(!(path in seenScript)) {
seenScript[path] = true;
scripts.push(path)
}
}
for(var path in goog.included_) {
if(!deps.written[path]) {
visitNode(path)
}
}
for(var i = 0;i < scripts.length;i++) {
if(scripts[i]) {
goog.importScript_(goog.basePath + scripts[i])
}else {
throw Error("Undefined script input");
}
}
};
goog.getPathFromDeps_ = function(rule) {
if(rule in goog.dependencies_.nameToPath) {
return goog.dependencies_.nameToPath[rule]
}else {
return null
}
};
goog.findBasePath_();
if(!goog.global.CLOSURE_NO_DEPS) {
goog.importScript_(goog.basePath + "deps.js")
}
}
goog.typeOf = function(value) {
var s = typeof value;
if(s == "object") {
if(value) {
if(value instanceof Array) {
return"array"
}else {
if(value instanceof Object) {
return s
}
}
var className = Object.prototype.toString.call((value));
if(className == "[object Window]") {
return"object"
}
if(className == "[object Array]" || typeof value.length == "number" && typeof value.splice != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("splice")) {
return"array"
}
if(className == "[object Function]" || typeof value.call != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("call")) {
return"function"
}
}else {
return"null"
}
}else {
if(s == "function" && typeof value.call == "undefined") {
return"object"
}
}
return s
};
goog.isDef = function(val) {
return val !== undefined
};
goog.isNull = function(val) {
return val === null
};
goog.isDefAndNotNull = function(val) {
return val != null
};
goog.isArray = function(val) {
return goog.typeOf(val) == "array"
};
goog.isArrayLike = function(val) {
var type = goog.typeOf(val);
return type == "array" || type == "object" && typeof val.length == "number"
};
goog.isDateLike = function(val) {
return goog.isObject(val) && typeof val.getFullYear == "function"
};
goog.isString = function(val) {
return typeof val == "string"
};
goog.isBoolean = function(val) {
return typeof val == "boolean"
};
goog.isNumber = function(val) {
return typeof val == "number"
};
goog.isFunction = function(val) {
return goog.typeOf(val) == "function"
};
goog.isObject = function(val) {
var type = typeof val;
return type == "object" && val != null || type == "function"
};
goog.getUid = function(obj) {
return obj[goog.UID_PROPERTY_] || (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_)
};
goog.removeUid = function(obj) {
if("removeAttribute" in obj) {
obj.removeAttribute(goog.UID_PROPERTY_)
}
try {
delete obj[goog.UID_PROPERTY_]
}catch(ex) {
}
};
goog.UID_PROPERTY_ = "closure_uid_" + (Math.random() * 1E9 >>> 0);
goog.uidCounter_ = 0;
goog.getHashCode = goog.getUid;
goog.removeHashCode = goog.removeUid;
goog.cloneObject = function(obj) {
var type = goog.typeOf(obj);
if(type == "object" || type == "array") {
if(obj.clone) {
return obj.clone()
}
var clone = type == "array" ? [] : {};
for(var key in obj) {
clone[key] = goog.cloneObject(obj[key])
}
return clone
}
return obj
};
goog.bindNative_ = function(fn, selfObj, var_args) {
return(fn.call.apply(fn.bind, arguments))
};
goog.bindJs_ = function(fn, selfObj, var_args) {
if(!fn) {
throw new Error;
}
if(arguments.length > 2) {
var boundArgs = Array.prototype.slice.call(arguments, 2);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
Array.prototype.unshift.apply(newArgs, boundArgs);
return fn.apply(selfObj, newArgs)
}
}else {
return function() {
return fn.apply(selfObj, arguments)
}
}
};
goog.bind = function(fn, selfObj, var_args) {
if(Function.prototype.bind && Function.prototype.bind.toString().indexOf("native code") != -1) {
goog.bind = goog.bindNative_
}else {
goog.bind = goog.bindJs_
}
return goog.bind.apply(null, arguments)
};
goog.partial = function(fn, var_args) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
newArgs.unshift.apply(newArgs, args);
return fn.apply(this, newArgs)
}
};
goog.mixin = function(target, source) {
for(var x in source) {
target[x] = source[x]
}
};
goog.now = goog.TRUSTED_SITE && Date.now || function() {
return+new Date
};
goog.globalEval = function(script) {
if(goog.global.execScript) {
goog.global.execScript(script, "JavaScript")
}else {
if(goog.global.eval) {
if(goog.evalWorksForGlobals_ == null) {
goog.global.eval("var _et_ \x3d 1;");
if(typeof goog.global["_et_"] != "undefined") {
delete goog.global["_et_"];
goog.evalWorksForGlobals_ = true
}else {
goog.evalWorksForGlobals_ = false
}
}
if(goog.evalWorksForGlobals_) {
goog.global.eval(script)
}else {
var doc = goog.global.document;
var scriptElt = doc.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.defer = false;
scriptElt.appendChild(doc.createTextNode(script));
doc.body.appendChild(scriptElt);
doc.body.removeChild(scriptElt)
}
}else {
throw Error("goog.globalEval not available");
}
}
};
goog.evalWorksForGlobals_ = null;
goog.cssNameMapping_;
goog.cssNameMappingStyle_;
goog.getCssName = function(className, opt_modifier) {
var getMapping = function(cssName) {
return goog.cssNameMapping_[cssName] || cssName
};
var renameByParts = function(cssName) {
var parts = cssName.split("-");
var mapped = [];
for(var i = 0;i < parts.length;i++) {
mapped.push(getMapping(parts[i]))
}
return mapped.join("-")
};
var rename;
if(goog.cssNameMapping_) {
rename = goog.cssNameMappingStyle_ == "BY_WHOLE" ? getMapping : renameByParts
}else {
rename = function(a) {
return a
}
}
if(opt_modifier) {
return className + "-" + rename(opt_modifier)
}else {
return rename(className)
}
};
goog.setCssNameMapping = function(mapping, opt_style) {
goog.cssNameMapping_ = mapping;
goog.cssNameMappingStyle_ = opt_style
};
goog.global.CLOSURE_CSS_NAME_MAPPING;
if(!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING) {
goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING
}
goog.getMsg = function(str, opt_values) {
var values = opt_values || {};
for(var key in values) {
var value = ("" + values[key]).replace(/\$/g, "$$$$");
str = str.replace(new RegExp("\\{\\$" + key + "\\}", "gi"), value)
}
return str
};
goog.getMsgWithFallback = function(a, b) {
return a
};
goog.exportSymbol = function(publicPath, object, opt_objectToExportTo) {
goog.exportPath_(publicPath, object, opt_objectToExportTo)
};
goog.exportProperty = function(object, publicName, symbol) {
object[publicName] = symbol
};
goog.inherits = function(childCtor, parentCtor) {
function tempCtor() {
}
tempCtor.prototype = parentCtor.prototype;
childCtor.superClass_ = parentCtor.prototype;
childCtor.prototype = new tempCtor;
childCtor.prototype.constructor = childCtor
};
goog.base = function(me, opt_methodName, var_args) {
var caller = arguments.callee.caller;
if(goog.DEBUG) {
if(!caller) {
throw Error("arguments.caller not defined. goog.base() expects not " + "to be running in strict mode. See " + "http://www.ecma-international.org/ecma-262/5.1/#sec-C");
}
}
if(caller.superClass_) {
return caller.superClass_.constructor.apply(me, Array.prototype.slice.call(arguments, 1))
}
var args = Array.prototype.slice.call(arguments, 2);
var foundCaller = false;
for(var ctor = me.constructor;ctor;ctor = ctor.superClass_ && ctor.superClass_.constructor) {
if(ctor.prototype[opt_methodName] === caller) {
foundCaller = true
}else {
if(foundCaller) {
return ctor.prototype[opt_methodName].apply(me, args)
}
}
}
if(me[opt_methodName] === caller) {
return me.constructor.prototype[opt_methodName].apply(me, args)
}else {
throw Error("goog.base called from a method of one name " + "to a method of a different name");
}
};
goog.scope = function(fn) {
fn.call(goog.global)
};
goog.addDependency("../build/exports.js", [], ["ol", "ol.Attribution", "ol.BrowserFeature", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.DeviceOrientation", "ol.DeviceOrientationProperty", "ol.DragBoxEvent", "ol.DrawEvent", "ol.Extent", "ol.Feature", "ol.FeatureOverlay", "ol.Geolocation", "ol.GeolocationProperty", "ol.ImageTile", "ol.Kinetic", "ol.Map", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler",
"ol.MapBrowserPointerEvent", "ol.MapProperty", "ol.Object", "ol.ObjectEvent", "ol.ObjectEventType", "ol.Observable", "ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty", "ol.Sphere", "ol.Tile", "ol.TileCoord", "ol.TileState", "ol.View2D", "ol.View2DProperty", "ol.animation", "ol.color", "ol.control", "ol.control.Attribution", "ol.control.Control", "ol.control.FullScreen", "ol.control.Logo", "ol.control.MousePosition", "ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits",
"ol.control.Zoom", "ol.control.ZoomSlider", "ol.control.ZoomToExtent", "ol.coordinate", "ol.dom.Input", "ol.dom.InputProperty", "ol.easing", "ol.events.ConditionType", "ol.events.condition", "ol.extent", "ol.extent.Relationship", "ol.feature", "ol.format.GPX", "ol.format.GPX.V1_1", "ol.format.GeoJSON", "ol.format.IGC", "ol.format.IGCZ", "ol.format.KML", "ol.format.OSMXML", "ol.format.TopoJSON", "ol.format.WFS", "ol.format.WMSCapabilities", "ol.geom.Circle", "ol.geom.Geometry", "ol.geom.GeometryCollection",
"ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.geom.SimpleGeometry", "ol.interaction", "ol.interaction.DoubleClickZoom", "ol.interaction.DragAndDrop", "ol.interaction.DragAndDropEvent", "ol.interaction.DragBox", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragRotateAndZoom", "ol.interaction.DragZoom", "ol.interaction.Draw", "ol.interaction.KeyboardPan",
"ol.interaction.KeyboardZoom", "ol.interaction.Modify", "ol.interaction.MouseWheelZoom", "ol.interaction.PinchRotate", "ol.interaction.PinchZoom", "ol.interaction.Select", "ol.layer.Base", "ol.layer.Group", "ol.layer.Heatmap", "ol.layer.Image", "ol.layer.Layer", "ol.layer.LayerProperty", "ol.layer.LayerState", "ol.layer.Tile", "ol.layer.Vector", "ol.loadingstrategy", "ol.proj", "ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781", "ol.proj.EPSG3857", "ol.proj.EPSG4326", "ol.proj.METERS_PER_UNIT",
"ol.proj.Projection", "ol.proj.ProjectionLike", "ol.proj.Units", "ol.proj.common", "ol.render.canvas.Immediate", "ol.source.BingMaps", "ol.source.GPX", "ol.source.GeoJSON", "ol.source.IGC", "ol.source.ImageCanvas", "ol.source.ImageStatic", "ol.source.ImageVector", "ol.source.ImageWMS", "ol.source.KML", "ol.source.MapGuide", "ol.source.MapQuest", "ol.source.OSM", "ol.source.OSMXML", "ol.source.ServerVector", "ol.source.Source", "ol.source.Stamen", "ol.source.State", "ol.source.StaticVector", "ol.source.Tile",
"ol.source.TileDebug", "ol.source.TileImage", "ol.source.TileJSON", "ol.source.TileOptions", "ol.source.TileVector", "ol.source.TileWMS", "ol.source.TopoJSON", "ol.source.Vector", "ol.source.VectorEvent", "ol.source.VectorEventType", "ol.source.WMTS", "ol.source.WMTSRequestEncoding", "ol.source.XYZ", "ol.source.Zoomify", "ol.sphere.WGS84", "ol.style.Circle", "ol.style.Fill", "ol.style.Icon", "ol.style.IconAnchorOrigin", "ol.style.IconAnchorUnits", "ol.style.IconImageCache", "ol.style.Image", "ol.style.ImageState",
"ol.style.Stroke", "ol.style.Style", "ol.style.Text", "ol.tilegrid.TileGrid", "ol.tilegrid.WMTS", "ol.tilegrid.XYZ", "ol.tilegrid.Zoomify", "ol.tilejson", "ol.webgl.Context"]);
goog.addDependency("../src/googx/dom/fullscreen.js", ["googx.dom.fullscreen", "googx.dom.fullscreen.EventType"], ["goog.dom", "goog.userAgent"]);
goog.addDependency("../src/libtess.js/dict/Dict.js", ["libtess.Dict"], ["libtess", "libtess.DictNode"]);
goog.addDependency("../src/libtess.js/dict/DictNode.js", ["libtess.DictNode"], ["libtess"]);
goog.addDependency("../src/libtess.js/geom.js", ["libtess.geom"], ["libtess"]);
goog.addDependency("../src/libtess.js/libtess.js", ["libtess"], []);
goog.addDependency("../src/libtess.js/libtess/CachedVertex.js", ["libtess.CachedVertex"], ["libtess"]);
goog.addDependency("../src/libtess.js/libtess/GluTesselator.js", ["libtess.GluTesselator"], ["libtess", "libtess.CachedVertex", "libtess.GluMesh", "libtess.mesh", "libtess.normal", "libtess.render", "libtess.sweep", "libtess.tessmono"]);
goog.addDependency("../src/libtess.js/mesh.js", ["libtess.mesh"], ["libtess", "libtess.GluFace", "libtess.GluHalfEdge", "libtess.GluVertex"]);
goog.addDependency("../src/libtess.js/mesh/GluFace.js", ["libtess.GluFace"], ["libtess"]);
goog.addDependency("../src/libtess.js/mesh/GluHalfEdge.js", ["libtess.GluHalfEdge"], ["libtess"]);
goog.addDependency("../src/libtess.js/mesh/GluMesh.js", ["libtess.GluMesh"], ["libtess", "libtess.GluFace", "libtess.GluHalfEdge", "libtess.GluVertex"]);
goog.addDependency("../src/libtess.js/mesh/GluVertex.js", ["libtess.GluVertex"], ["libtess"]);
goog.addDependency("../src/libtess.js/normal.js", ["libtess.normal"], ["libtess"]);
goog.addDependency("../src/libtess.js/priorityq/PQHandleElem.js", ["libtess.PQHandleElem"], ["libtess"]);
goog.addDependency("../src/libtess.js/priorityq/PQNode.js", ["libtess.PQNode"], ["libtess"]);
goog.addDependency("../src/libtess.js/priorityq/PriorityQ.js", ["libtess.PriorityQ"], ["libtess", "libtess.PriorityQHeap"]);
goog.addDependency("../src/libtess.js/priorityq/PriorityQHeap.js", ["libtess.PriorityQHeap"], ["libtess", "libtess.PQHandleElem", "libtess.PQNode"]);
goog.addDependency("../src/libtess.js/render.js", ["libtess.render"], ["libtess", "libtess.FaceCount"]);
goog.addDependency("../src/libtess.js/render/FaceCount.js", ["libtess.FaceCount"], ["libtess"]);
goog.addDependency("../src/libtess.js/sweep.js", ["libtess.sweep"], ["libtess", "libtess.ActiveRegion", "libtess.Dict", "libtess.GluVertex", "libtess.PriorityQ", "libtess.geom", "libtess.mesh"]);
goog.addDependency("../src/libtess.js/sweep/ActiveRegion.js", ["libtess.ActiveRegion"], ["libtess.DictNode"]);
goog.addDependency("../src/libtess.js/tessmono.js", ["libtess.tessmono"], ["libtess", "libtess.geom", "libtess.mesh"]);
goog.addDependency("../src/ol/animation.js", ["ol.animation"], ["ol.PreRenderFunction", "ol.ViewHint", "ol.coordinate", "ol.easing"]);
goog.addDependency("../src/ol/array.js", ["ol.array"], ["goog.array", "goog.asserts"]);
goog.addDependency("../src/ol/attribution.js", ["ol.Attribution"], ["ol.TileRange"]);
goog.addDependency("../src/ol/binary.js", ["ol.binary.Buffer", "ol.binary.IReader"], ["goog.asserts", "goog.userAgent", "ol.BrowserFeature"]);
goog.addDependency("../src/ol/browserfeature.js", ["ol.BrowserFeature"], ["goog.dom", "goog.dom.TagName", "ol", "ol.dom", "ol.webgl"]);
goog.addDependency("../src/ol/canvasfunction.js", ["ol.CanvasFunctionType"], []);
goog.addDependency("../src/ol/centerconstraint.js", ["ol.CenterConstraint", "ol.CenterConstraintType"], ["goog.math"]);
goog.addDependency("../src/ol/collection.js", ["ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType"], ["goog.array", "goog.events.Event", "ol.Object"]);
goog.addDependency("../src/ol/color/color.js", ["ol.color"], ["goog.array", "goog.asserts", "goog.color", "goog.color.names", "goog.math", "goog.vec.Mat4", "ol"]);
goog.addDependency("../src/ol/color/colormatrix.js", ["ol.color.Matrix"], ["goog.vec.Mat4"]);
goog.addDependency("../src/ol/constraints.js", ["ol.Constraints"], ["ol.CenterConstraintType", "ol.ResolutionConstraintType", "ol.RotationConstraintType"]);
goog.addDependency("../src/ol/control/attributioncontrol.js", ["ol.control.Attribution"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.Attribution", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/control/control.js", ["ol.control.Control"], ["goog.array", "goog.dom", "goog.events", "ol.MapEventType", "ol.Object"]);
goog.addDependency("../src/ol/control/controldefaults.js", ["ol.control"], ["ol.Collection", "ol.control.Attribution", "ol.control.Logo", "ol.control.Zoom"]);
goog.addDependency("../src/ol/control/fullscreencontrol.js", ["ol.control.FullScreen"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.events", "goog.events.EventType", "googx.dom.fullscreen", "googx.dom.fullscreen.EventType", "ol.control.Control", "ol.css", "ol.pointer.PointerEventHandler"]);
goog.addDependency("../src/ol/control/logocontrol.js", ["ol.control.Logo"], ["goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/control/mousepositioncontrol.js", ["ol.control.MousePosition"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "ol.CoordinateFormatType", "ol.Object", "ol.Pixel", "ol.TransformFunction", "ol.control.Control", "ol.proj", "ol.proj.Projection"]);
goog.addDependency("../src/ol/control/scalelinecontrol.js", ["ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.math", "goog.style", "ol.Object", "ol.TransformFunction", "ol.control.Control", "ol.css", "ol.proj", "ol.proj.Units", "ol.sphere.NORMAL"]);
goog.addDependency("../src/ol/control/zoomcontrol.js", ["ol.control.Zoom"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.View2D", "ol.animation", "ol.control.Control", "ol.css", "ol.easing", "ol.pointer.PointerEventHandler"]);
goog.addDependency("../src/ol/control/zoomslidercontrol.js", ["ol.control.ZoomSlider"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math", "goog.math.Rect", "goog.style", "ol", "ol.animation", "ol.control.Control", "ol.css", "ol.easing"]);
goog.addDependency("../src/ol/control/zoomtoextentcontrol.js", ["ol.control.ZoomToExtent"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.control.Control", "ol.css", "ol.pointer.PointerEventHandler"]);
goog.addDependency("../src/ol/coordinate.js", ["ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.coordinate"], ["goog.math"]);
goog.addDependency("../src/ol/css.js", ["ol.css"], []);
goog.addDependency("../src/ol/deviceorientation.js", ["ol.DeviceOrientation", "ol.DeviceOrientationProperty"], ["goog.events", "goog.math", "ol.BrowserFeature", "ol.Object"]);
goog.addDependency("../src/ol/dom/dom.js", ["ol.dom", "ol.dom.BrowserFeature"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.style", "goog.userAgent", "goog.vec.Mat4", "ol"]);
goog.addDependency("../src/ol/dom/input.js", ["ol.dom.Input", "ol.dom.InputProperty"], ["goog.asserts", "goog.events", "goog.events.EventType", "ol.Object"]);
goog.addDependency("../src/ol/easing.js", ["ol.easing"], ["goog.fx.easing"]);
goog.addDependency("../src/ol/ellipsoid/bessel1841ellipsoid.js", ["ol.ellipsoid.BESSEL1841"], ["ol.Ellipsoid"]);
goog.addDependency("../src/ol/ellipsoid/ellipsoid.js", ["ol.Ellipsoid"], ["goog.math", "ol.Coordinate"]);
goog.addDependency("../src/ol/ellipsoid/wgs84ellipsoid.js", ["ol.ellipsoid.WGS84"], ["ol.Ellipsoid"]);
goog.addDependency("../src/ol/events/condition.js", ["ol.events.ConditionType", "ol.events.condition"], ["goog.asserts", "goog.dom.TagName", "goog.functions", "ol.MapBrowserEvent.EventType", "ol.MapBrowserPointerEvent"]);
goog.addDependency("../src/ol/extent.js", ["ol.Extent", "ol.extent", "ol.extent.Relationship"], ["goog.asserts", "goog.vec.Mat4", "ol.Coordinate", "ol.Size", "ol.TransformFunction"]);
goog.addDependency("../src/ol/feature.js", ["ol.Feature", "ol.feature"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.functions", "ol.Object", "ol.geom.Geometry", "ol.geom.GeometryType", "ol.style.Circle", "ol.style.Fill", "ol.style.Stroke", "ol.style.Style"]);
goog.addDependency("../src/ol/featureoverlay.js", ["ol.FeatureOverlay"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.Collection", "ol.CollectionEventType", "ol.Feature", "ol.feature", "ol.render.EventType"]);
goog.addDependency("../src/ol/format/binaryfeatureformat.js", ["ol.format.BinaryFeature"], ["goog.asserts", "ol.BrowserFeature", "ol.binary.Buffer", "ol.format.Feature", "ol.format.FormatType", "ol.proj"]);
goog.addDependency("../src/ol/format/featureformat.js", ["ol.format.Feature"], ["goog.functions"]);
goog.addDependency("../src/ol/format/format.js", ["ol.format.FormatType"], []);
goog.addDependency("../src/ol/format/geojsonformat.js", ["ol.format.GeoJSON"], ["goog.array", "goog.asserts", "goog.object", "ol.Feature", "ol.format.JSONFeature", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj"]);
goog.addDependency("../src/ol/format/gmlformat.js", ["ol.format.GML"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.object", "goog.string", "ol.Feature", "ol.array", "ol.extent", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.Geometry", "ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.xml"]);
goog.addDependency("../src/ol/format/gpxformat.js", ["ol.format.GPX", "ol.format.GPX.V1_1"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.object", "ol.Feature", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.Point", "ol.proj", "ol.xml"]);
goog.addDependency("../src/ol/format/igcformat.js", ["ol.format.IGC", "ol.format.IGCZ"], ["goog.asserts", "goog.string", "goog.string.newlines", "ol.Feature", "ol.format.TextFeature", "ol.geom.LineString", "ol.proj"]);
goog.addDependency("../src/ol/format/jsonfeatureformat.js", ["ol.format.JSONFeature"], ["goog.asserts", "goog.json", "ol.BrowserFeature", "ol.format.Feature", "ol.format.FormatType"]);
goog.addDependency("../src/ol/format/kmlformat.js", ["ol.format.KML"], ["goog.Uri", "goog.array", "goog.asserts", "goog.dom.NodeType", "goog.math", "goog.object", "goog.string", "ol.Feature", "ol.array", "ol.feature", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.style.Fill", "ol.style.Icon", "ol.style.IconAnchorOrigin",
"ol.style.IconAnchorUnits", "ol.style.Image", "ol.style.Stroke", "ol.style.Style", "ol.xml"]);
goog.addDependency("../src/ol/format/osmxmlformat.js", ["ol.format.OSMXML"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.object", "ol.Feature", "ol.format.XMLFeature", "ol.geom.LineString", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.xml"]);
goog.addDependency("../src/ol/format/owsformat.js", ["ol.format.OWS"], ["goog.asserts", "goog.dom.NodeType", "goog.object", "ol.format.XLink", "ol.format.XML", "ol.format.XSD", "ol.xml"]);
goog.addDependency("../src/ol/format/polylineformat.js", ["ol.format.Polyline"], ["goog.asserts", "ol.Feature", "ol.format.TextFeature", "ol.geom.LineString", "ol.geom.flat.inflate", "ol.proj"]);
goog.addDependency("../src/ol/format/textfeatureformat.js", ["ol.format.TextFeature"], ["goog.asserts", "ol.format.Feature", "ol.format.FormatType"]);
goog.addDependency("../src/ol/format/topojsonformat.js", ["ol.format.TopoJSON"], ["goog.array", "goog.asserts", "goog.object", "ol.Feature", "ol.format.JSONFeature", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj"]);
goog.addDependency("../src/ol/format/wfsformat.js", ["ol.format.WFS"], ["goog.asserts", "goog.dom.NodeType", "goog.object", "ol.format.GML", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.Geometry", "ol.proj", "ol.xml"]);
goog.addDependency("../src/ol/format/wmscapabilitiesformat.js", ["ol.format.WMSCapabilities"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.object", "goog.string", "ol.format.XLink", "ol.format.XML", "ol.format.XSD", "ol.xml"]);
goog.addDependency("../src/ol/format/xlinkformat.js", ["ol.format.XLink"], []);
goog.addDependency("../src/ol/format/xmlfeatureformat.js", ["ol.format.XMLFeature"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "ol.format.Feature", "ol.format.FormatType", "ol.xml"]);
goog.addDependency("../src/ol/format/xmlformat.js", ["ol.format.XML"], ["goog.asserts", "ol.xml"]);
goog.addDependency("../src/ol/format/xsdformat.js", ["ol.format.XSD"], ["goog.asserts", "goog.string", "ol.xml"]);
goog.addDependency("../src/ol/framestate.js", ["ol.PostRenderFunction", "ol.PreRenderFunction"], []);
goog.addDependency("../src/ol/geolocation.js", ["ol.Geolocation", "ol.GeolocationProperty"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.math", "ol.BrowserFeature", "ol.Coordinate", "ol.Object", "ol.geom.Geometry", "ol.proj", "ol.sphere.WGS84"]);
goog.addDependency("../src/ol/geom/circle.js", ["ol.geom.Circle"], ["goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat.deflate"]);
goog.addDependency("../src/ol/geom/flat/areaflatgeom.js", ["ol.geom.flat.area"], []);
goog.addDependency("../src/ol/geom/flat/centerflatgeom.js", ["ol.geom.flat.center"], ["ol.extent"]);
goog.addDependency("../src/ol/geom/flat/closestflatgeom.js", ["ol.geom.flat.closest"], ["goog.asserts", "goog.math", "ol.math"]);
goog.addDependency("../src/ol/geom/flat/containsflatgeom.js", ["ol.geom.flat.contains"], ["goog.asserts"]);
goog.addDependency("../src/ol/geom/flat/deflateflatgeom.js", ["ol.geom.flat.deflate"], ["goog.asserts"]);
goog.addDependency("../src/ol/geom/flat/flipflatgeom.js", ["ol.geom.flat.flip"], ["goog.asserts"]);
goog.addDependency("../src/ol/geom/flat/inflateflatgeom.js", ["ol.geom.flat.inflate"], []);
goog.addDependency("../src/ol/geom/flat/interiorpointflatgeom.js", ["ol.geom.flat.interiorpoint"], ["goog.asserts", "ol.geom.flat.contains"]);
goog.addDependency("../src/ol/geom/flat/interpolateflatgeom.js", ["ol.geom.flat.interpolate"], ["goog.array", "goog.asserts", "goog.math"]);
goog.addDependency("../src/ol/geom/flat/lengthflatgeom.js", ["ol.geom.flat.length"], []);
goog.addDependency("../src/ol/geom/flat/orientflatgeom.js", ["ol.geom.flat.orient"], ["ol.geom.flat.reverse"]);
goog.addDependency("../src/ol/geom/flat/reverseflatgeom.js", ["ol.geom.flat.reverse"], []);
goog.addDependency("../src/ol/geom/flat/simplifyflatgeom.js", ["ol.geom.flat.simplify"], ["ol.math"]);
goog.addDependency("../src/ol/geom/flat/transformflatgeom.js", ["ol.geom.flat.transform"], ["goog.vec.Mat4"]);
goog.addDependency("../src/ol/geom/geometry.js", ["ol.geom.Geometry", "ol.geom.GeometryType"], ["goog.asserts", "goog.functions", "ol.Observable"]);
goog.addDependency("../src/ol/geom/geometrycollection.js", ["ol.geom.GeometryCollection"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.extent", "ol.geom.Geometry", "ol.geom.GeometryType"]);
goog.addDependency("../src/ol/geom/linearring.js", ["ol.geom.LinearRing"], ["ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat.area", "ol.geom.flat.closest", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.geom.flat.simplify"]);
goog.addDependency("../src/ol/geom/linestring.js", ["ol.geom.LineString"], ["goog.array", "goog.asserts", "ol.array", "ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat.closest", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.geom.flat.interpolate", "ol.geom.flat.length", "ol.geom.flat.simplify"]);
goog.addDependency("../src/ol/geom/multilinestring.js", ["ol.geom.MultiLineString"], ["goog.array", "goog.asserts", "ol.array", "ol.extent", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.SimpleGeometry", "ol.geom.flat.closest", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.geom.flat.interpolate", "ol.geom.flat.simplify"]);
goog.addDependency("../src/ol/geom/multipoint.js", ["ol.geom.MultiPoint"], ["goog.array", "goog.asserts", "ol.array", "ol.extent", "ol.geom.GeometryType", "ol.geom.Point", "ol.geom.SimpleGeometry", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.math"]);
goog.addDependency("../src/ol/geom/multipolygon.js", ["ol.geom.MultiPolygon"], ["goog.array", "goog.asserts", "ol.array", "ol.extent", "ol.geom.GeometryType", "ol.geom.MultiPoint", "ol.geom.Polygon", "ol.geom.SimpleGeometry", "ol.geom.flat.area", "ol.geom.flat.center", "ol.geom.flat.closest", "ol.geom.flat.contains", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.geom.flat.interiorpoint", "ol.geom.flat.orient", "ol.geom.flat.simplify"]);
goog.addDependency("../src/ol/geom/point.js", ["ol.geom.Point"], ["goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat.deflate", "ol.math"]);
goog.addDependency("../src/ol/geom/polygon.js", ["ol.geom.Polygon"], ["goog.array", "goog.asserts", "ol.array", "ol.extent", "ol.geom.GeometryType", "ol.geom.LinearRing", "ol.geom.Point", "ol.geom.SimpleGeometry", "ol.geom.flat.area", "ol.geom.flat.closest", "ol.geom.flat.contains", "ol.geom.flat.deflate", "ol.geom.flat.inflate", "ol.geom.flat.interiorpoint", "ol.geom.flat.orient", "ol.geom.flat.simplify"]);
goog.addDependency("../src/ol/geom/simplegeometry.js", ["ol.geom.SimpleGeometry"], ["goog.asserts", "goog.functions", "goog.object", "ol.extent", "ol.geom.Geometry", "ol.geom.flat.transform"]);
goog.addDependency("../src/ol/image.js", ["ol.Image"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.ImageBase", "ol.ImageState"]);
goog.addDependency("../src/ol/imagebase.js", ["ol.ImageBase", "ol.ImageState"], ["goog.events.EventTarget", "goog.events.EventType", "ol.Attribution", "ol.Extent"]);
goog.addDependency("../src/ol/imagecanvas.js", ["ol.ImageCanvas"], ["ol.ImageBase", "ol.ImageState"]);
goog.addDependency("../src/ol/imagetile.js", ["ol.ImageTile"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.Tile", "ol.TileCoord", "ol.TileLoadFunctionType", "ol.TileState"]);
goog.addDependency("../src/ol/imageurlfunction.js", ["ol.ImageUrlFunction", "ol.ImageUrlFunctionType"], ["ol.Size"]);
goog.addDependency("../src/ol/interaction/doubleclickzoominteraction.js", ["ol.interaction.DoubleClickZoom"], ["goog.asserts", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/draganddropinteraction.js", ["ol.interaction.DragAndDrop", "ol.interaction.DragAndDropEvent"], ["goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.FileDropHandler", "goog.events.FileDropHandler.EventType", "goog.fs.FileReader", "goog.functions", "ol.interaction.Interaction", "ol.proj"]);
goog.addDependency("../src/ol/interaction/dragboxinteraction.js", ["ol.DragBoxEvent", "ol.interaction.DragBox"], ["goog.asserts", "goog.events.Event", "goog.functions", "ol", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Pointer", "ol.render.Box"]);
goog.addDependency("../src/ol/interaction/dragpaninteraction.js", ["ol.interaction.DragPan"], ["goog.asserts", "ol.Kinetic", "ol.Pixel", "ol.PreRenderFunction", "ol.View2D", "ol.ViewHint", "ol.coordinate", "ol.events.condition", "ol.interaction.Pointer"]);
goog.addDependency("../src/ol/interaction/dragrotateandzoominteraction.js", ["ol.interaction.DragRotateAndZoom"], ["goog.asserts", "goog.functions", "goog.math.Vec2", "ol", "ol.ViewHint", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction", "ol.interaction.Pointer"]);
goog.addDependency("../src/ol/interaction/dragrotateinteraction.js", ["ol.interaction.DragRotate"], ["goog.asserts", "ol", "ol.ViewHint", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction", "ol.interaction.Pointer"]);
goog.addDependency("../src/ol/interaction/dragzoominteraction.js", ["ol.interaction.DragZoom"], ["goog.asserts", "ol", "ol.events.condition", "ol.extent", "ol.interaction.DragBox", "ol.interaction.Interaction", "ol.style.Stroke", "ol.style.Style"]);
goog.addDependency("../src/ol/interaction/drawinteraction.js", ["ol.DrawEvent", "ol.interaction.Draw"], ["goog.asserts", "goog.events.Event", "ol.Collection", "ol.Coordinate", "ol.Feature", "ol.FeatureOverlay", "ol.Map", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.feature", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.interaction.Pointer", "ol.source.Vector"]);
goog.addDependency("../src/ol/interaction/interaction.js", ["ol.interaction.Interaction"], ["goog.asserts", "ol.MapBrowserEvent", "ol.Observable", "ol.View2D", "ol.animation", "ol.easing"]);
goog.addDependency("../src/ol/interaction/interactiondefaults.js", ["ol.interaction"], ["ol.Collection", "ol.Kinetic", "ol.interaction.DoubleClickZoom", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragZoom", "ol.interaction.KeyboardPan", "ol.interaction.KeyboardZoom", "ol.interaction.MouseWheelZoom", "ol.interaction.PinchRotate", "ol.interaction.PinchZoom"]);
goog.addDependency("../src/ol/interaction/keyboardpaninteraction.js", ["ol.interaction.KeyboardPan"], ["goog.asserts", "goog.events.KeyCodes", "goog.events.KeyHandler.EventType", "goog.functions", "ol", "ol.View2D", "ol.coordinate", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/keyboardzoominteraction.js", ["ol.interaction.KeyboardZoom"], ["goog.asserts", "goog.events.KeyHandler.EventType", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/modifyinteraction.js", ["ol.interaction.Modify"], ["goog.array", "goog.asserts", "goog.events", "goog.functions", "ol.Collection", "ol.CollectionEventType", "ol.Feature", "ol.FeatureOverlay", "ol.MapBrowserEvent.EventType", "ol.ViewHint", "ol.coordinate", "ol.events.condition", "ol.extent", "ol.feature", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon",
"ol.interaction.Pointer", "ol.structs.RBush"]);
goog.addDependency("../src/ol/interaction/mousewheelzoominteraction.js", ["ol.interaction.MouseWheelZoom"], ["goog.asserts", "goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler.EventType", "goog.math", "ol", "ol.Coordinate", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/pinchrotateinteraction.js", ["ol.interaction.PinchRotate"], ["goog.asserts", "goog.style", "ol", "ol.Coordinate", "ol.ViewHint", "ol.interaction.Interaction", "ol.interaction.Pointer"]);
goog.addDependency("../src/ol/interaction/pinchzoominteraction.js", ["ol.interaction.PinchZoom"], ["goog.asserts", "goog.style", "ol.Coordinate", "ol.ViewHint", "ol.interaction.Interaction", "ol.interaction.Pointer"]);
goog.addDependency("../src/ol/interaction/pointerinteraction.js", ["ol.interaction.Pointer"], ["goog.asserts", "goog.functions", "goog.object", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserPointerEvent", "ol.Pixel", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/selectinteraction.js", ["ol.interaction.Select"], ["goog.array", "goog.asserts", "goog.events", "goog.functions", "ol.CollectionEventType", "ol.Feature", "ol.FeatureOverlay", "ol.events.condition", "ol.feature", "ol.geom.GeometryType", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/iview.js", ["ol.IView"], ["ol.IView2D", "ol.IView3D"]);
goog.addDependency("../src/ol/iview2d.js", ["ol.IView2D"], ["ol.Coordinate"]);
goog.addDependency("../src/ol/iview3d.js", ["ol.IView3D"], []);
goog.addDependency("../src/ol/kinetic.js", ["ol.Kinetic"], ["ol.Coordinate", "ol.PreRenderFunction", "ol.animation"]);
goog.addDependency("../src/ol/layer/heatmaplayer.js", ["ol.layer.Heatmap"], ["goog.asserts", "goog.events", "goog.math", "ol.Object", "ol.dom", "ol.layer.Vector", "ol.render.EventType", "ol.style.Icon", "ol.style.Style"]);
goog.addDependency("../src/ol/layer/imagelayer.js", ["ol.layer.Image"], ["ol.layer.Layer"]);
goog.addDependency("../src/ol/layer/layer.js", ["ol.layer.Layer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.layer.Base", "ol.source.Source"]);
goog.addDependency("../src/ol/layer/layerbase.js", ["ol.layer.Base", "ol.layer.LayerProperty", "ol.layer.LayerState"], ["goog.events", "goog.math", "goog.object", "ol.Object", "ol.source.State"]);
goog.addDependency("../src/ol/layer/layergroup.js", ["ol.layer.Group"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.math", "goog.object", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Object", "ol.ObjectEventType", "ol.layer.Base", "ol.source.State"]);
goog.addDependency("../src/ol/layer/tilelayer.js", ["ol.layer.Tile"], ["ol.layer.Layer"]);
goog.addDependency("../src/ol/layer/vectorlayer.js", ["ol.layer.Vector"], ["goog.array", "goog.object", "ol.feature", "ol.layer.Layer"]);
goog.addDependency("../src/ol/loadingstrategy.js", ["ol.loadingstrategy"], ["ol.TileCoord"]);
goog.addDependency("../src/ol/map.js", ["ol.Map", "ol.MapProperty"], ["goog.Uri.QueryData", "goog.array", "goog.asserts", "goog.async.AnimationDelay", "goog.async.nextTick", "goog.debug.Console", "goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.BrowserEvent", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType", "goog.log", "goog.log.Level",
"goog.object", "goog.style", "goog.vec.Mat4", "ol.BrowserFeature", "ol.Collection", "ol.CollectionEventType", "ol.IView", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapEvent", "ol.MapEventType", "ol.Object", "ol.ObjectEvent", "ol.ObjectEventType", "ol.Pixel", "ol.PostRenderFunction", "ol.PreRenderFunction", "ol.Size", "ol.Tile", "ol.TileQueue", "ol.View", "ol.View2D", "ol.ViewHint", "ol.control", "ol.extent", "ol.interaction", "ol.layer.Base", "ol.layer.Group",
"ol.proj", "ol.proj.common", "ol.renderer.Map", "ol.renderer.canvas.Map", "ol.renderer.dom.Map", "ol.renderer.webgl.Map", "ol.structs.PriorityQueue", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/mapbrowserevent.js", ["ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapBrowserPointerEvent"], ["goog.array", "goog.asserts", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.object", "ol", "ol.Coordinate", "ol.MapEvent", "ol.Pixel", "ol.pointer.PointerEvent", "ol.pointer.PointerEventHandler"]);
goog.addDependency("../src/ol/mapevent.js", ["ol.MapEvent", "ol.MapEventType"], ["goog.events.Event"]);
goog.addDependency("../src/ol/math.js", ["ol.math"], ["goog.asserts"]);
goog.addDependency("../src/ol/object.js", ["ol.Object", "ol.ObjectEvent", "ol.ObjectEventType"], ["goog.array", "goog.events", "goog.events.Event", "goog.functions", "goog.object", "ol.Observable"]);
goog.addDependency("../src/ol/observable.js", ["ol.Observable"], ["goog.events", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("../src/ol/ol.js", ["ol"], ["goog.userAgent"]);
goog.addDependency("../src/ol/overlay.js", ["ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.style", "ol.Coordinate", "ol.Map", "ol.MapEventType", "ol.Object"]);
goog.addDependency("../src/ol/pixel.js", ["ol.Pixel"], []);
goog.addDependency("../src/ol/pointer/eventsource.js", ["ol.pointer.EventSource"], ["goog.events.BrowserEvent", "goog.object"]);
goog.addDependency("../src/ol/pointer/mousesource.js", ["ol.pointer.MouseSource"], ["goog.object", "ol.pointer.EventSource"]);
goog.addDependency("../src/ol/pointer/mssource.js", ["ol.pointer.MsSource"], ["goog.object", "ol.pointer.EventSource"]);
goog.addDependency("../src/ol/pointer/nativesource.js", ["ol.pointer.NativeSource"], ["goog.object", "ol.pointer.EventSource"]);
goog.addDependency("../src/ol/pointer/pointerevent.js", ["ol.pointer.PointerEvent"], ["goog.events", "goog.events.Event", "goog.object"]);
goog.addDependency("../src/ol/pointer/pointereventhandler.js", ["ol.pointer.PointerEventHandler"], ["goog.array", "goog.events", "goog.events.BrowserEvent", "goog.events.Event", "goog.events.EventTarget", "ol.BrowserFeature", "ol.pointer.MouseSource", "ol.pointer.MsSource", "ol.pointer.NativeSource", "ol.pointer.PointerEvent", "ol.pointer.TouchSource"]);
goog.addDependency("../src/ol/pointer/touchsource.js", ["ol.pointer.TouchSource"], ["goog.array", "goog.object", "ol.pointer.EventSource", "ol.pointer.MouseSource"]);
goog.addDependency("../src/ol/proj/chprojection.js", ["ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781"], ["goog.asserts", "goog.math", "ol.ellipsoid.BESSEL1841", "ol.proj", "ol.proj.EPSG4326", "ol.proj.Projection", "ol.proj.Units"]);
goog.addDependency("../src/ol/proj/common.js", ["ol.proj.common"], ["ol.proj", "ol.proj.EPSG3857", "ol.proj.EPSG4326"]);
goog.addDependency("../src/ol/proj/epsg3857projection.js", ["ol.proj.EPSG3857"], ["goog.array", "goog.asserts", "ol.math", "ol.proj", "ol.proj.Projection", "ol.proj.Units"]);
goog.addDependency("../src/ol/proj/epsg4326projection.js", ["ol.proj.EPSG4326"], ["ol.proj", "ol.proj.Projection", "ol.proj.Units"]);
goog.addDependency("../src/ol/proj/proj.js", ["ol.proj", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.ProjectionLike", "ol.proj.Units"], ["goog.array", "goog.asserts", "goog.object", "ol", "ol.Extent", "ol.TransformFunction", "ol.sphere.NORMAL"]);
goog.addDependency("../src/ol/render/box.js", ["ol.render.Box"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.events", "ol.geom.Polygon", "ol.render.EventType"]);
goog.addDependency("../src/ol/render/canvas/canvas.js", ["ol.render.canvas"], []);
goog.addDependency("../src/ol/render/canvas/canvasimmediate.js", ["ol.render.canvas.Immediate"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "ol.BrowserFeature", "ol.color", "ol.extent", "ol.geom.flat.transform", "ol.render.IVectorContext", "ol.render.canvas", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/render/canvas/canvasreplay.js", ["ol.render.canvas.Replay", "ol.render.canvas.ReplayGroup"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "ol.BrowserFeature", "ol.array", "ol.color", "ol.dom", "ol.extent", "ol.extent.Relationship", "ol.geom.flat.simplify", "ol.geom.flat.transform", "ol.render.IReplayGroup", "ol.render.IVectorContext", "ol.render.canvas", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/render/ireplay.js", ["ol.render.IReplayGroup"], ["goog.functions", "ol.render.IVectorContext"]);
goog.addDependency("../src/ol/render/ivectorcontext.js", ["ol.render.IVectorContext"], []);
goog.addDependency("../src/ol/render/renderevent.js", ["ol.render.Event", "ol.render.EventType"], ["goog.events.Event", "ol.render.IVectorContext"]);
goog.addDependency("../src/ol/render/vector.js", ["ol.renderer.vector"], ["goog.asserts", "ol.geom.Circle", "ol.geom.GeometryCollection", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.render.IReplayGroup", "ol.style.ImageState", "ol.style.Style"]);
goog.addDependency("../src/ol/render/webgl/webglimmediate.js", ["ol.render.webgl.Immediate"], []);
goog.addDependency("../src/ol/renderer/canvas/canvasimagelayerrenderer.js", ["ol.renderer.canvas.ImageLayer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.Map", "ol.renderer.canvas.Layer", "ol.source.Image", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/canvas/canvaslayerrenderer.js", ["ol.renderer.canvas.Layer"], ["goog.array", "goog.vec.Mat4", "ol.dom", "ol.layer.Layer", "ol.render.Event", "ol.render.EventType", "ol.render.canvas.Immediate", "ol.renderer.Layer", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/canvas/canvasmaprenderer.js", ["ol.renderer.canvas.Map"], ["goog.asserts", "goog.dom", "goog.style", "goog.vec.Mat4", "ol", "ol.css", "ol.dom", "ol.layer.Image", "ol.layer.Tile", "ol.layer.Vector", "ol.render.Event", "ol.render.EventType", "ol.render.canvas.Immediate", "ol.renderer.Map", "ol.renderer.canvas.ImageLayer", "ol.renderer.canvas.Layer", "ol.renderer.canvas.TileLayer", "ol.renderer.canvas.VectorLayer", "ol.source.State", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/canvas/canvastilelayerrenderer.js", ["ol.renderer.canvas.TileLayer"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "ol.Size", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.dom", "ol.extent", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.canvas.Layer", "ol.source.Tile", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/canvas/canvasvectorlayerrenderer.js", ["ol.renderer.canvas.VectorLayer"], ["goog.array", "goog.asserts", "goog.events", "ol.ViewHint", "ol.dom", "ol.extent", "ol.feature", "ol.layer.Vector", "ol.render.EventType", "ol.render.canvas.ReplayGroup", "ol.renderer.canvas.Layer", "ol.renderer.vector", "ol.source.Vector"]);
goog.addDependency("../src/ol/renderer/dom/domimagelayerrenderer.js", ["ol.renderer.dom.ImageLayer"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.dom", "ol.layer.Image", "ol.renderer.dom.Layer", "ol.source.Image", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/dom/domlayerrenderer.js", ["ol.renderer.dom.Layer"], ["goog.dom", "ol.layer.Layer", "ol.renderer.Layer"]);
goog.addDependency("../src/ol/renderer/dom/dommaprenderer.js", ["ol.renderer.dom.Map"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.functions", "goog.style", "ol", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.dom.ImageLayer", "ol.renderer.dom.Layer", "ol.renderer.dom.TileLayer", "ol.source.State"]);
goog.addDependency("../src/ol/renderer/dom/domtilelayerrenderer.js", ["ol.renderer.dom.TileLayer"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "goog.vec.Mat4", "ol", "ol.Coordinate", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.ViewHint", "ol.dom", "ol.dom.BrowserFeature", "ol.extent", "ol.layer.Tile", "ol.renderer.dom.Layer", "ol.source.Tile", "ol.tilegrid.TileGrid", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/layerrenderer.js", ["ol.renderer.Layer"], ["goog.Disposable", "ol.Image", "ol.ImageState", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.layer.Layer", "ol.layer.LayerState", "ol.source.Source", "ol.source.State", "ol.source.Tile"]);
goog.addDependency("../src/ol/renderer/maprenderer.js", ["ol.renderer.Map"], ["goog.Disposable", "goog.asserts", "goog.dispose", "goog.object", "goog.vec.Mat4", "ol.layer.Layer", "ol.renderer.Layer", "ol.style.IconImageCache", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/webgl/webglimagelayerrenderer.js", ["ol.renderer.webgl.ImageLayer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "goog.webgl", "ol.Coordinate", "ol.Extent", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.webgl.Layer", "ol.source.Image"]);
goog.addDependency("../src/ol/renderer/webgl/webgllayerrenderer.js", ["ol.renderer.webgl.Layer"], ["goog.vec.Mat4", "goog.webgl", "ol.color.Matrix", "ol.layer.Layer", "ol.render.Event", "ol.render.EventType", "ol.render.webgl.Immediate", "ol.renderer.Layer", "ol.renderer.webgl.map.shader.Color", "ol.renderer.webgl.map.shader.Default", "ol.structs.Buffer"]);
goog.addDependency("../src/ol/renderer/webgl/webglmapcolorshader.js", ["ol.renderer.webgl.map.shader.Color"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglmapdefaultshader.js", ["ol.renderer.webgl.map.shader.Default"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglmaprenderer.js", ["ol.renderer.webgl.Map"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.Event", "goog.log", "goog.log.Logger", "goog.object", "goog.style", "goog.webgl", "ol", "ol.Tile", "ol.css", "ol.dom", "ol.layer.Image", "ol.layer.Tile", "ol.render.Event", "ol.render.EventType", "ol.render.webgl.Immediate", "ol.renderer.Map", "ol.renderer.webgl.ImageLayer", "ol.renderer.webgl.Layer", "ol.renderer.webgl.TileLayer",
"ol.source.State", "ol.structs.LRUCache", "ol.structs.PriorityQueue", "ol.webgl", "ol.webgl.Context", "ol.webgl.WebGLContextEventType"]);
goog.addDependency("../src/ol/renderer/webgl/webgltilelayerrenderer.js", ["ol.renderer.webgl.TileLayer"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "goog.vec.Vec4", "goog.webgl", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.extent", "ol.layer.Tile", "ol.math", "ol.renderer.webgl.Layer", "ol.renderer.webgl.tilelayer.shader", "ol.source.Tile", "ol.structs.Buffer"]);
goog.addDependency("../src/ol/renderer/webgl/webgltilelayershader.js", ["ol.renderer.webgl.tilelayer.shader"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/resolutionconstraint.js", ["ol.ResolutionConstraint", "ol.ResolutionConstraintType"], ["goog.math", "ol.array"]);
goog.addDependency("../src/ol/rotationconstraint.js", ["ol.RotationConstraint", "ol.RotationConstraintType"], ["goog.math"]);
goog.addDependency("../src/ol/size.js", ["ol.Size", "ol.size"], []);
goog.addDependency("../src/ol/source/bingmapssource.js", ["ol.source.BingMaps"], ["goog.Uri", "goog.array", "goog.asserts", "goog.net.Jsonp", "ol", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.State", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/source/debugtilesource.js", ["ol.source.TileDebug"], ["ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileState", "ol.dom", "ol.source.Tile", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/formatvectorsource.js", ["ol.source.FormatVector"], ["goog.asserts", "goog.dispose", "goog.events", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIo.ResponseType", "goog.userAgent", "ol.BrowserFeature", "ol.format.FormatType", "ol.proj", "ol.source.State", "ol.source.Vector", "ol.xml"]);
goog.addDependency("../src/ol/source/geojsonsource.js", ["ol.source.GeoJSON"], ["ol.format.GeoJSON", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/gpxsource.js", ["ol.source.GPX"], ["ol.format.GPX", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/igcsource.js", ["ol.source.IGC"], ["ol.format.IGC", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/imagecanvassource.js", ["ol.source.ImageCanvas"], ["ol.CanvasFunctionType", "ol.ImageCanvas", "ol.extent", "ol.source.Image"]);
goog.addDependency("../src/ol/source/imagesource.js", ["ol.source.Image"], ["goog.array", "goog.asserts", "ol.Attribution", "ol.Extent", "ol.Image", "ol.array", "ol.source.Source"]);
goog.addDependency("../src/ol/source/imagestaticsource.js", ["ol.source.ImageStatic"], ["ol.Image", "ol.extent", "ol.proj", "ol.source.Image"]);
goog.addDependency("../src/ol/source/imagevectorsource.js", ["ol.source.ImageVector"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.dom", "ol.extent", "ol.feature", "ol.render.canvas.ReplayGroup", "ol.renderer.vector", "ol.source.ImageCanvas", "ol.source.Vector", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/source/imagewmssource.js", ["ol.source.ImageWMS"], ["goog.asserts", "goog.object", "goog.string", "goog.uri.utils", "ol", "ol.Image", "ol.extent", "ol.proj", "ol.source.Image", "ol.source.wms", "ol.source.wms.ServerType"]);
goog.addDependency("../src/ol/source/kmlsource.js", ["ol.source.KML"], ["ol.format.KML", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/mapguidesource.js", ["ol.source.MapGuide"], ["goog.object", "goog.uri.utils", "ol.Image", "ol.ImageUrlFunction", "ol.extent", "ol.source.Image"]);
goog.addDependency("../src/ol/source/mapquestsource.js", ["ol.source.MapQuest"], ["goog.asserts", "ol", "ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/osmsource.js", ["ol.source.OSM"], ["ol", "ol.Attribution", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/osmxmlsource.js", ["ol.source.OSMXML"], ["ol.format.OSMXML", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/servervectorsource.js", ["ol.source.ServerVector"], ["ol.extent", "ol.loadingstrategy", "ol.source.FormatVector", "ol.structs.RBush"]);
goog.addDependency("../src/ol/source/source.js", ["ol.source.Source", "ol.source.State"], ["goog.events.EventType", "ol.Attribution", "ol.Extent", "ol.Observable", "ol.proj"]);
goog.addDependency("../src/ol/source/stamensource.js", ["ol.source.Stamen"], ["goog.asserts", "ol", "ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/staticvectorsource.js", ["ol.source.StaticVector"], ["ol.source.FormatVector", "ol.source.State"]);
goog.addDependency("../src/ol/source/tileimagesource.js", ["ol.source.TileImage"], ["goog.asserts", "ol.ImageTile", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileLoadFunctionType", "ol.TileState", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.source.Tile"]);
goog.addDependency("../src/ol/source/tilejsonsource.js", ["ol.source.TileJSON", "ol.tilejson"], ["goog.asserts", "goog.net.Jsonp", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.State", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/source/tilesource.js", ["ol.source.Tile", "ol.source.TileOptions"], ["goog.functions", "ol.Attribution", "ol.Extent", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.source.Source", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/tilevectorsource.js", ["ol.source.TileVector"], ["goog.array", "goog.object", "ol.TileCoord", "ol.TileUrlFunction", "ol.source.FormatVector", "ol.source.State", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/tilewmssource.js", ["ol.source.TileWMS"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "goog.string", "goog.uri.utils", "ol", "ol.TileCoord", "ol.TileUrlFunction", "ol.extent", "ol.source.TileImage", "ol.source.wms", "ol.source.wms.ServerType"]);
goog.addDependency("../src/ol/source/topojsonsource.js", ["ol.source.TopoJSON"], ["ol.format.TopoJSON", "ol.source.StaticVector"]);
goog.addDependency("../src/ol/source/vectorsource.js", ["ol.source.Vector", "ol.source.VectorEvent", "ol.source.VectorEventType"], ["goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.object", "ol.ObjectEventType", "ol.proj", "ol.source.Source", "ol.structs.RBush"]);
goog.addDependency("../src/ol/source/wmssource.js", ["ol.source.wms", "ol.source.wms.ServerType"], []);
goog.addDependency("../src/ol/source/wmtssource.js", ["ol.source.WMTS", "ol.source.WMTSRequestEncoding"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "goog.uri.utils", "ol.TileCoord", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.extent", "ol.proj", "ol.source.TileImage", "ol.tilegrid.WMTS"]);
goog.addDependency("../src/ol/source/xyzsource.js", ["ol.source.XYZ"], ["ol.Attribution", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/source/zoomifysource.js", ["ol.source.Zoomify"], ["goog.array", "goog.asserts", "ol", "ol.ImageTile", "ol.TileCoord", "ol.TileState", "ol.TileUrlFunction", "ol.dom", "ol.proj", "ol.source.TileImage", "ol.tilegrid.Zoomify"]);
goog.addDependency("../src/ol/sphere/normal.js", ["ol.sphere.NORMAL"], ["ol.Sphere"]);
goog.addDependency("../src/ol/sphere/sphere.js", ["ol.Sphere"], ["goog.array", "goog.math", "ol.geom.Polygon"]);
goog.addDependency("../src/ol/sphere/wgs84sphere.js", ["ol.sphere.WGS84"], ["ol.Sphere"]);
goog.addDependency("../src/ol/structs/buffer.js", ["ol.structs.Buffer"], ["goog.array", "goog.asserts", "goog.webgl", "ol", "ol.structs.IntegerSet"]);
goog.addDependency("../src/ol/structs/integerset.js", ["ol.structs.IntegerSet"], ["goog.asserts"]);
goog.addDependency("../src/ol/structs/lrucache.js", ["ol.structs.LRUCache"], ["goog.asserts", "goog.object"]);
goog.addDependency("../src/ol/structs/priorityqueue.js", ["ol.structs.PriorityQueue"], ["goog.asserts", "goog.object"]);
goog.addDependency("../src/ol/structs/rbush.js", ["ol.structs.RBush"], ["goog.array", "goog.asserts", "goog.object", "ol.extent"]);
goog.addDependency("../src/ol/style/circlestyle.js", ["ol.style.Circle"], ["goog.dom", "goog.dom.TagName", "ol.color", "ol.render.canvas", "ol.style.Fill", "ol.style.Image", "ol.style.ImageState", "ol.style.Stroke"]);
goog.addDependency("../src/ol/style/fillstyle.js", ["ol.style.Fill"], ["ol.color"]);
goog.addDependency("../src/ol/style/iconstyle.js", ["ol.style.Icon", "ol.style.IconAnchorOrigin", "ol.style.IconAnchorUnits", "ol.style.IconImageCache"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "ol.dom", "ol.style.Image", "ol.style.ImageState"]);
goog.addDependency("../src/ol/style/imagestyle.js", ["ol.style.Image", "ol.style.ImageState"], ["goog.array"]);
goog.addDependency("../src/ol/style/strokestyle.js", ["ol.style.Stroke"], ["ol.color"]);
goog.addDependency("../src/ol/style/style.js", ["ol.style.Style"], ["ol.style.Fill", "ol.style.Image"]);
goog.addDependency("../src/ol/style/textstyle.js", ["ol.style.Text"], []);
goog.addDependency("../src/ol/tile.js", ["ol.Tile", "ol.TileState"], ["goog.events", "goog.events.EventTarget", "goog.events.EventType", "ol.TileCoord"]);
goog.addDependency("../src/ol/tilecache.js", ["ol.TileCache"], ["goog.asserts", "ol", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.structs.LRUCache"]);
goog.addDependency("../src/ol/tilecoord.js", ["ol.TileCoord"], ["goog.array", "goog.asserts"]);
goog.addDependency("../src/ol/tilegrid/tilegrid.js", ["ol.tilegrid.TileGrid"], ["goog.array", "goog.asserts", "ol", "ol.Coordinate", "ol.TileCoord", "ol.TileRange", "ol.array", "ol.extent", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.Units"]);
goog.addDependency("../src/ol/tilegrid/wmtstilegrid.js", ["ol.tilegrid.WMTS"], ["goog.array", "goog.asserts", "ol.proj", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/tilegrid/xyztilegrid.js", ["ol.tilegrid.XYZ"], ["goog.math", "ol", "ol.TileCoord", "ol.TileRange", "ol.proj", "ol.proj.EPSG3857", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/tilegrid/zoomifytilegrid.js", ["ol.tilegrid.Zoomify"], ["goog.math", "ol.TileCoord", "ol.proj", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/tileloadfunction.js", ["ol.TileLoadFunctionType"], []);
goog.addDependency("../src/ol/tilequeue.js", ["ol.TilePriorityFunction", "ol.TileQueue"], ["goog.events", "goog.events.EventType", "ol.Coordinate", "ol.Tile", "ol.structs.PriorityQueue"]);
goog.addDependency("../src/ol/tilerange.js", ["ol.TileRange"], ["goog.asserts", "ol.Size", "ol.TileCoord"]);
goog.addDependency("../src/ol/tileurlfunction.js", ["ol.TileUrlFunction", "ol.TileUrlFunctionType"], ["goog.array", "goog.math", "ol.TileCoord"]);
goog.addDependency("../src/ol/transformfunction.js", ["ol.TransformFunction"], []);
goog.addDependency("../src/ol/vec/mat4.js", ["ol.vec.Mat4"], ["goog.vec.Mat4"]);
goog.addDependency("../src/ol/view.js", ["ol.View", "ol.ViewHint"], ["goog.array", "goog.asserts", "ol.IView", "ol.Object"]);
goog.addDependency("../src/ol/view2d.js", ["ol.View2D", "ol.View2DProperty"], ["goog.asserts", "ol", "ol.CenterConstraint", "ol.Constraints", "ol.IView2D", "ol.IView3D", "ol.ResolutionConstraint", "ol.RotationConstraint", "ol.RotationConstraintType", "ol.Size", "ol.View", "ol.coordinate", "ol.extent", "ol.proj", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.Units"]);
goog.addDependency("../src/ol/webgl/context.js", ["ol.webgl.Context"], ["goog.asserts", "goog.events", "goog.log", "goog.object", "ol.structs.Buffer", "ol.structs.IntegerSet", "ol.webgl.WebGLContextEventType"]);
goog.addDependency("../src/ol/webgl/shader.js", ["ol.webgl.shader"], ["goog.functions", "goog.webgl", "ol.webgl"]);
goog.addDependency("../src/ol/webgl/webgl.js", ["ol.webgl", "ol.webgl.WebGLContextEventType"], []);
goog.addDependency("../src/ol/xml.js", ["ol.xml"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.dom.xml", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/a11y/aria/announcer.js", ["goog.a11y.aria.Announcer"], ["goog.Disposable", "goog.a11y.aria", "goog.a11y.aria.LivePriority", "goog.a11y.aria.State", "goog.dom", "goog.object"]);
goog.addDependency("/closure/goog/a11y/aria/aria.js", ["goog.a11y.aria"], ["goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.a11y.aria.datatables", "goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/a11y/aria/attributes.js", ["goog.a11y.aria.AutoCompleteValues", "goog.a11y.aria.CheckedValues", "goog.a11y.aria.DropEffectValues", "goog.a11y.aria.ExpandedValues", "goog.a11y.aria.GrabbedValues", "goog.a11y.aria.InvalidValues", "goog.a11y.aria.LivePriority", "goog.a11y.aria.OrientationValues", "goog.a11y.aria.PressedValues", "goog.a11y.aria.RelevantValues", "goog.a11y.aria.SelectedValues", "goog.a11y.aria.SortValues", "goog.a11y.aria.State"], []);
goog.addDependency("/closure/goog/a11y/aria/datatables.js", ["goog.a11y.aria.datatables"], ["goog.a11y.aria.State", "goog.object"]);
goog.addDependency("/closure/goog/a11y/aria/roles.js", ["goog.a11y.aria.Role"], []);
goog.addDependency("/closure/goog/array/array.js", ["goog.array", "goog.array.ArrayLike"], ["goog.asserts"]);
goog.addDependency("/closure/goog/asserts/asserts.js", ["goog.asserts", "goog.asserts.AssertionError"], ["goog.debug.Error", "goog.string"]);
goog.addDependency("/closure/goog/async/animationdelay.js", ["goog.async.AnimationDelay"], ["goog.Disposable", "goog.events", "goog.functions"]);
goog.addDependency("/closure/goog/async/conditionaldelay.js", ["goog.async.ConditionalDelay"], ["goog.Disposable", "goog.async.Delay"]);
goog.addDependency("/closure/goog/async/delay.js", ["goog.Delay", "goog.async.Delay"], ["goog.Disposable", "goog.Timer"]);
goog.addDependency("/closure/goog/async/nexttick.js", ["goog.async.nextTick"], ["goog.debug.entryPointRegistry", "goog.functions"]);
goog.addDependency("/closure/goog/async/throttle.js", ["goog.Throttle", "goog.async.Throttle"], ["goog.Disposable", "goog.Timer"]);
goog.addDependency("/closure/goog/base.js", [], []);
goog.addDependency("/closure/goog/bootstrap/nodejs.js", [], []);
goog.addDependency("/closure/goog/bootstrap/webworkers.js", [], []);
goog.addDependency("/closure/goog/color/alpha.js", ["goog.color.alpha"], ["goog.color"]);
goog.addDependency("/closure/goog/color/color.js", ["goog.color"], ["goog.color.names", "goog.math"]);
goog.addDependency("/closure/goog/color/names.js", ["goog.color.names"], []);
goog.addDependency("/closure/goog/crypt/aes.js", ["goog.crypt.Aes"], ["goog.asserts", "goog.crypt.BlockCipher"]);
goog.addDependency("/closure/goog/crypt/arc4.js", ["goog.crypt.Arc4"], ["goog.asserts"]);
goog.addDependency("/closure/goog/crypt/base64.js", ["goog.crypt.base64"], ["goog.crypt", "goog.userAgent"]);
goog.addDependency("/closure/goog/crypt/basen.js", ["goog.crypt.baseN"], []);
goog.addDependency("/closure/goog/crypt/blobhasher.js", ["goog.crypt.BlobHasher", "goog.crypt.BlobHasher.EventType"], ["goog.asserts", "goog.crypt", "goog.crypt.Hash", "goog.events.EventTarget", "goog.fs", "goog.log"]);
goog.addDependency("/closure/goog/crypt/blockcipher.js", ["goog.crypt.BlockCipher"], []);
goog.addDependency("/closure/goog/crypt/cbc.js", ["goog.crypt.Cbc"], ["goog.array", "goog.crypt"]);
goog.addDependency("/closure/goog/crypt/cbc_test.js", ["goog.crypt.CbcTest"], ["goog.crypt", "goog.crypt.Aes", "goog.crypt.Cbc", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/crypt/crypt.js", ["goog.crypt"], ["goog.array"]);
goog.addDependency("/closure/goog/crypt/hash.js", ["goog.crypt.Hash"], []);
goog.addDependency("/closure/goog/crypt/hash32.js", ["goog.crypt.hash32"], ["goog.crypt"]);
goog.addDependency("/closure/goog/crypt/hashtester.js", ["goog.crypt.hashTester"], ["goog.array", "goog.crypt", "goog.testing.PerformanceTable", "goog.testing.PseudoRandom", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/crypt/hmac.js", ["goog.crypt.Hmac"], ["goog.asserts", "goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/md5.js", ["goog.crypt.Md5"], ["goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/pbkdf2.js", ["goog.crypt.pbkdf2"], ["goog.asserts", "goog.crypt", "goog.crypt.Hmac", "goog.crypt.Sha1"]);
goog.addDependency("/closure/goog/crypt/sha1.js", ["goog.crypt.Sha1"], ["goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/sha2.js", ["goog.crypt.Sha2"], ["goog.array", "goog.asserts", "goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/sha224.js", ["goog.crypt.Sha224"], ["goog.crypt.Sha2"]);
goog.addDependency("/closure/goog/crypt/sha256.js", ["goog.crypt.Sha256"], ["goog.crypt.Sha2"]);
goog.addDependency("/closure/goog/cssom/cssom.js", ["goog.cssom", "goog.cssom.CssRuleType"], ["goog.array", "goog.dom"]);
goog.addDependency("/closure/goog/cssom/iframe/style.js", ["goog.cssom.iframe.style"], ["goog.cssom", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/datasource/datamanager.js", ["goog.ds.DataManager"], ["goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.Expr", "goog.string", "goog.structs", "goog.structs.Map"]);
goog.addDependency("/closure/goog/datasource/datasource.js", ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.DataNodeList", "goog.ds.EmptyNodeList", "goog.ds.LoadState", "goog.ds.SortedNodeList", "goog.ds.Util", "goog.ds.logger"], ["goog.array", "goog.log"]);
goog.addDependency("/closure/goog/datasource/expr.js", ["goog.ds.Expr"], ["goog.ds.BasicNodeList", "goog.ds.EmptyNodeList", "goog.string"]);
goog.addDependency("/closure/goog/datasource/fastdatanode.js", ["goog.ds.AbstractFastDataNode", "goog.ds.FastDataNode", "goog.ds.FastListNode", "goog.ds.PrimitiveFastDataNode"], ["goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.string"]);
goog.addDependency("/closure/goog/datasource/jsdatasource.js", ["goog.ds.JsDataSource", "goog.ds.JsPropertyDataSource"], ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.ds.LoadState"]);
goog.addDependency("/closure/goog/datasource/jsondatasource.js", ["goog.ds.JsonDataSource"], ["goog.Uri", "goog.dom", "goog.ds.DataManager", "goog.ds.JsDataSource", "goog.ds.LoadState", "goog.ds.logger"]);
goog.addDependency("/closure/goog/datasource/jsxmlhttpdatasource.js", ["goog.ds.JsXmlHttpDataSource"], ["goog.Uri", "goog.ds.DataManager", "goog.ds.FastDataNode", "goog.ds.LoadState", "goog.ds.logger", "goog.events", "goog.log", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/datasource/xmldatasource.js", ["goog.ds.XmlDataSource", "goog.ds.XmlHttpDataSource"], ["goog.Uri", "goog.dom.NodeType", "goog.dom.xml", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.LoadState", "goog.ds.logger", "goog.net.XhrIo", "goog.string"]);
goog.addDependency("/closure/goog/date/date.js", ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval", "goog.date.month", "goog.date.weekDay"], ["goog.asserts", "goog.date.DateLike", "goog.i18n.DateTimeSymbols", "goog.string"]);
goog.addDependency("/closure/goog/date/datelike.js", ["goog.date.DateLike"], []);
goog.addDependency("/closure/goog/date/daterange.js", ["goog.date.DateRange", "goog.date.DateRange.Iterator", "goog.date.DateRange.StandardDateRangeKeys"], ["goog.date.Date", "goog.date.Interval", "goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/date/relative.js", ["goog.date.relative"], ["goog.i18n.DateTimeFormat"]);
goog.addDependency("/closure/goog/date/utcdatetime.js", ["goog.date.UtcDateTime"], ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval"]);
goog.addDependency("/closure/goog/db/cursor.js", ["goog.db.Cursor"], ["goog.async.Deferred", "goog.db.Error", "goog.debug", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/db/db.js", ["goog.db"], ["goog.async.Deferred", "goog.db.Error", "goog.db.IndexedDb", "goog.db.Transaction"]);
goog.addDependency("/closure/goog/db/error.js", ["goog.db.Error", "goog.db.Error.ErrorCode", "goog.db.Error.ErrorName", "goog.db.Error.VersionChangeBlockedError"], ["goog.debug.Error"]);
goog.addDependency("/closure/goog/db/index.js", ["goog.db.Index"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.debug"]);
goog.addDependency("/closure/goog/db/indexeddb.js", ["goog.db.IndexedDb"], ["goog.async.Deferred", "goog.db.Error", "goog.db.Error.VersionChangeBlockedError", "goog.db.ObjectStore", "goog.db.Transaction", "goog.db.Transaction.TransactionMode", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/db/keyrange.js", ["goog.db.KeyRange"], []);
goog.addDependency("/closure/goog/db/objectstore.js", ["goog.db.ObjectStore"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.db.Index", "goog.debug", "goog.events"]);
goog.addDependency("/closure/goog/db/transaction.js", ["goog.db.Transaction", "goog.db.Transaction.TransactionMode"], ["goog.async.Deferred", "goog.db.Error", "goog.db.ObjectStore", "goog.events.EventHandler", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/debug/console.js", ["goog.debug.Console"], ["goog.debug.LogManager", "goog.debug.Logger.Level", "goog.debug.TextFormatter"]);
goog.addDependency("/closure/goog/debug/debug.js", ["goog.debug"], ["goog.array", "goog.string", "goog.structs.Set", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/debugwindow.js", ["goog.debug.DebugWindow"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.debug.Logger", "goog.structs.CircularBuffer", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/devcss/devcss.js", ["goog.debug.DevCss", "goog.debug.DevCss.UserAgent"], ["goog.cssom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/devcss/devcssrunner.js", ["goog.debug.devCssRunner"], ["goog.debug.DevCss"]);
goog.addDependency("/closure/goog/debug/divconsole.js", ["goog.debug.DivConsole"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.style"]);
goog.addDependency("/closure/goog/debug/entrypointregistry.js", ["goog.debug.EntryPointMonitor", "goog.debug.entryPointRegistry"], ["goog.asserts"]);
goog.addDependency("/closure/goog/debug/error.js", ["goog.debug.Error"], []);
goog.addDependency("/closure/goog/debug/errorhandler.js", ["goog.debug.ErrorHandler", "goog.debug.ErrorHandler.ProtectedFunctionError"], ["goog.asserts", "goog.debug", "goog.debug.EntryPointMonitor", "goog.debug.Trace"]);
goog.addDependency("/closure/goog/debug/errorhandlerweakdep.js", ["goog.debug.errorHandlerWeakDep"], []);
goog.addDependency("/closure/goog/debug/errorreporter.js", ["goog.debug.ErrorReporter", "goog.debug.ErrorReporter.ExceptionEvent"], ["goog.asserts", "goog.debug", "goog.debug.ErrorHandler", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log", "goog.net.XhrIo", "goog.object", "goog.string", "goog.uri.utils", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/fancywindow.js", ["goog.debug.FancyWindow"], ["goog.debug.DebugWindow", "goog.debug.LogManager", "goog.debug.Logger", "goog.dom.DomHelper", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/formatter.js", ["goog.debug.Formatter", "goog.debug.HtmlFormatter", "goog.debug.TextFormatter"], ["goog.debug.RelativeTimeProvider", "goog.string"]);
goog.addDependency("/closure/goog/debug/fpsdisplay.js", ["goog.debug.FpsDisplay"], ["goog.asserts", "goog.async.AnimationDelay", "goog.ui.Component"]);
goog.addDependency("/closure/goog/debug/gcdiagnostics.js", ["goog.debug.GcDiagnostics"], ["goog.debug.Trace", "goog.log", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/logbuffer.js", ["goog.debug.LogBuffer"], ["goog.asserts", "goog.debug.LogRecord"]);
goog.addDependency("/closure/goog/debug/logger.js", ["goog.debug.LogManager", "goog.debug.Logger", "goog.debug.Logger.Level"], ["goog.array", "goog.asserts", "goog.debug", "goog.debug.LogBuffer", "goog.debug.LogRecord"]);
goog.addDependency("/closure/goog/debug/logrecord.js", ["goog.debug.LogRecord"], []);
goog.addDependency("/closure/goog/debug/logrecordserializer.js", ["goog.debug.logRecordSerializer"], ["goog.debug.LogRecord", "goog.debug.Logger.Level", "goog.json", "goog.object"]);
goog.addDependency("/closure/goog/debug/reflect.js", ["goog.debug.reflect"], []);
goog.addDependency("/closure/goog/debug/relativetimeprovider.js", ["goog.debug.RelativeTimeProvider"], []);
goog.addDependency("/closure/goog/debug/tracer.js", ["goog.debug.Trace"], ["goog.array", "goog.iter", "goog.log", "goog.structs.Map", "goog.structs.SimplePool"]);
goog.addDependency("/closure/goog/demos/autocompleteremotedata.js", [], []);
goog.addDependency("/closure/goog/demos/autocompleterichremotedata.js", [], []);
goog.addDependency("/closure/goog/demos/editor/equationeditor.js", ["goog.demos.editor.EquationEditor"], ["goog.ui.equation.EquationEditorDialog"]);
goog.addDependency("/closure/goog/demos/editor/helloworld.js", ["goog.demos.editor.HelloWorld"], ["goog.dom", "goog.dom.TagName", "goog.editor.Plugin"]);
goog.addDependency("/closure/goog/demos/editor/helloworlddialog.js", ["goog.demos.editor.HelloWorldDialog", "goog.demos.editor.HelloWorldDialog.OkEvent"], ["goog.dom.TagName", "goog.events.Event", "goog.string", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/demos/editor/helloworlddialogplugin.js", ["goog.demos.editor.HelloWorldDialogPlugin", "goog.demos.editor.HelloWorldDialogPlugin.Command"], ["goog.demos.editor.HelloWorldDialog", "goog.dom.TagName", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.functions", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/demos/graphics/tigerdata.js", [], []);
goog.addDependency("/closure/goog/demos/samplecomponent.js", ["goog.demos.SampleComponent"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.Component"]);
goog.addDependency("/closure/goog/demos/tree/testdata.js", [], []);
goog.addDependency("/closure/goog/demos/xpc/xpcdemo.js", [], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.net.xpc.CfgFields", "goog.net.xpc.CrossPageChannel"]);
goog.addDependency("/closure/goog/disposable/disposable.js", ["goog.Disposable", "goog.dispose"], ["goog.disposable.IDisposable"]);
goog.addDependency("/closure/goog/disposable/idisposable.js", ["goog.disposable.IDisposable"], []);
goog.addDependency("/closure/goog/dom/a11y.js", ["goog.dom.a11y", "goog.dom.a11y.Announcer", "goog.dom.a11y.LivePriority", "goog.dom.a11y.Role", "goog.dom.a11y.State"], ["goog.a11y.aria", "goog.a11y.aria.Announcer", "goog.a11y.aria.LivePriority", "goog.a11y.aria.Role", "goog.a11y.aria.State"]);
goog.addDependency("/closure/goog/dom/abstractmultirange.js", ["goog.dom.AbstractMultiRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange"]);
goog.addDependency("/closure/goog/dom/abstractrange.js", ["goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType"], ["goog.dom", "goog.dom.NodeType", "goog.dom.SavedCaretRange", "goog.dom.TagIterator", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/annotate.js", ["goog.dom.annotate"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserfeature.js", ["goog.dom.BrowserFeature"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/abstractrange.js", ["goog.dom.browserrange.AbstractRange"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.iter", "goog.math.Coordinate", "goog.string", "goog.string.StringBuffer", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/browserrange.js", ["goog.dom.browserrange", "goog.dom.browserrange.Error"], ["goog.dom", "goog.dom.NodeType", "goog.dom.browserrange.GeckoRange", "goog.dom.browserrange.IeRange", "goog.dom.browserrange.OperaRange", "goog.dom.browserrange.W3cRange", "goog.dom.browserrange.WebKitRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/geckorange.js", ["goog.dom.browserrange.GeckoRange"], ["goog.dom.browserrange.W3cRange"]);
goog.addDependency("/closure/goog/dom/browserrange/ierange.js", ["goog.dom.browserrange.IeRange"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.browserrange.AbstractRange", "goog.log", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserrange/operarange.js", ["goog.dom.browserrange.OperaRange"], ["goog.dom.browserrange.W3cRange"]);
goog.addDependency("/closure/goog/dom/browserrange/w3crange.js", ["goog.dom.browserrange.W3cRange"], ["goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.browserrange.AbstractRange", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserrange/webkitrange.js", ["goog.dom.browserrange.WebKitRange"], ["goog.dom.RangeEndpoint", "goog.dom.browserrange.W3cRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor.js", ["goog.dom.BufferedViewportSizeMonitor"], ["goog.asserts", "goog.async.Delay", "goog.events", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor_test.js", ["goog.dom.BufferedViewportSizeMonitorTest"], ["goog.dom.BufferedViewportSizeMonitor", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.EventType", "goog.math.Size", "goog.testing.MockClock", "goog.testing.events", "goog.testing.events.Event", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/classes.js", ["goog.dom.classes"], ["goog.array"]);
goog.addDependency("/closure/goog/dom/classes_test.js", ["goog.dom.classes_test"], ["goog.dom", "goog.dom.classes", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/classlist.js", ["goog.dom.classlist"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/dom/classlist_test.js", ["goog.dom.classlist_test"], ["goog.dom", "goog.dom.classlist", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/controlrange.js", ["goog.dom.ControlRange", "goog.dom.ControlRangeIterator"], ["goog.array", "goog.dom", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagWalkType", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/dataset.js", ["goog.dom.dataset"], ["goog.string"]);
goog.addDependency("/closure/goog/dom/dom.js", ["goog.dom", "goog.dom.Appendable", "goog.dom.DomHelper", "goog.dom.NodeType"], ["goog.array", "goog.dom.BrowserFeature", "goog.dom.TagName", "goog.dom.classes", "goog.math.Coordinate", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/dom_test.js", ["goog.dom.dom_test"], ["goog.dom", "goog.dom.BrowserFeature", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.object", "goog.string.Unicode", "goog.testing.asserts", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/dom/fontsizemonitor.js", ["goog.dom.FontSizeMonitor", "goog.dom.FontSizeMonitor.EventType"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/forms.js", ["goog.dom.forms"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/dom/fullscreen.js", ["goog.dom.fullscreen", "goog.dom.fullscreen.EventType"], ["goog.dom", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/dom/iframe.js", ["goog.dom.iframe"], ["goog.dom", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/iter.js", ["goog.dom.iter.AncestorIterator", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator"], ["goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/multirange.js", ["goog.dom.MultiRange", "goog.dom.MultiRangeIterator"], ["goog.array", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.log"]);
goog.addDependency("/closure/goog/dom/nodeiterator.js", ["goog.dom.NodeIterator"], ["goog.dom.TagIterator"]);
goog.addDependency("/closure/goog/dom/nodeoffset.js", ["goog.dom.NodeOffset"], ["goog.Disposable", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/dom/pattern/abstractpattern.js", ["goog.dom.pattern.AbstractPattern"], ["goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/allchildren.js", ["goog.dom.pattern.AllChildren"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/callback/callback.js", ["goog.dom.pattern.callback"], ["goog.dom", "goog.dom.TagWalkType", "goog.iter"]);
goog.addDependency("/closure/goog/dom/pattern/callback/counter.js", ["goog.dom.pattern.callback.Counter"], []);
goog.addDependency("/closure/goog/dom/pattern/callback/test.js", ["goog.dom.pattern.callback.Test"], ["goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/pattern/childmatches.js", ["goog.dom.pattern.ChildMatches"], ["goog.dom.pattern.AllChildren", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/endtag.js", ["goog.dom.pattern.EndTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/fulltag.js", ["goog.dom.pattern.FullTag"], ["goog.dom.pattern.MatchType", "goog.dom.pattern.StartTag", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/matcher.js", ["goog.dom.pattern.Matcher"], ["goog.dom.TagIterator", "goog.dom.pattern.MatchType", "goog.iter"]);
goog.addDependency("/closure/goog/dom/pattern/nodetype.js", ["goog.dom.pattern.NodeType"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/pattern.js", ["goog.dom.pattern", "goog.dom.pattern.MatchType"], []);
goog.addDependency("/closure/goog/dom/pattern/repeat.js", ["goog.dom.pattern.Repeat"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/sequence.js", ["goog.dom.pattern.Sequence"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/starttag.js", ["goog.dom.pattern.StartTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/tag.js", ["goog.dom.pattern.Tag"], ["goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType", "goog.object"]);
goog.addDependency("/closure/goog/dom/pattern/text.js", ["goog.dom.pattern.Text"], ["goog.dom.NodeType", "goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/range.js", ["goog.dom.Range"], ["goog.dom", "goog.dom.AbstractRange", "goog.dom.ControlRange", "goog.dom.MultiRange", "goog.dom.NodeType", "goog.dom.TextRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/rangeendpoint.js", ["goog.dom.RangeEndpoint"], []);
goog.addDependency("/closure/goog/dom/savedcaretrange.js", ["goog.dom.SavedCaretRange"], ["goog.array", "goog.dom", "goog.dom.SavedRange", "goog.dom.TagName", "goog.string"]);
goog.addDependency("/closure/goog/dom/savedrange.js", ["goog.dom.SavedRange"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/dom/selection.js", ["goog.dom.selection"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/tagiterator.js", ["goog.dom.TagIterator", "goog.dom.TagWalkType"], ["goog.dom.NodeType", "goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/tagname.js", ["goog.dom.TagName"], []);
goog.addDependency("/closure/goog/dom/textrange.js", ["goog.dom.TextRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.dom.browserrange", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/textrangeiterator.js", ["goog.dom.TextRangeIterator"], ["goog.array", "goog.dom.NodeType", "goog.dom.RangeIterator", "goog.dom.TagName", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/vendor.js", ["goog.dom.vendor"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/dom/viewportsizemonitor.js", ["goog.dom.ViewportSizeMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Size"]);
goog.addDependency("/closure/goog/dom/xml.js", ["goog.dom.xml"], ["goog.dom", "goog.dom.NodeType"]);
goog.addDependency("/closure/goog/editor/browserfeature.js", ["goog.editor.BrowserFeature"], ["goog.editor.defines", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/editor/clicktoeditwrapper.js", ["goog.editor.ClickToEditWrapper"], ["goog.Disposable", "goog.asserts", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.range", "goog.events.BrowserEvent.MouseButton", "goog.events.EventHandler", "goog.events.EventType", "goog.log"]);
goog.addDependency("/closure/goog/editor/command.js", ["goog.editor.Command"], []);
goog.addDependency("/closure/goog/editor/contenteditablefield.js", ["goog.editor.ContentEditableField"], ["goog.asserts", "goog.editor.Field", "goog.log"]);
goog.addDependency("/closure/goog/editor/defines.js", ["goog.editor.defines"], []);
goog.addDependency("/closure/goog/editor/field.js", ["goog.editor.Field", "goog.editor.Field.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.array", "goog.asserts", "goog.async.Delay", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.editor.range", "goog.events", "goog.events.EventHandler",
"goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.functions", "goog.log", "goog.string", "goog.string.Unicode", "goog.style", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/editor/field_test.js", ["goog.editor.field_test"], ["goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.events.BrowserEvent", "goog.events.KeyCodes", "goog.functions", "goog.testing.LooseMock", "goog.testing.MockClock", "goog.testing.dom", "goog.testing.events", "goog.testing.events.Event", "goog.testing.recordFunction", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/focus.js", ["goog.editor.focus"], ["goog.dom.selection"]);
goog.addDependency("/closure/goog/editor/icontent.js", ["goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo"], ["goog.editor.BrowserFeature", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/link.js", ["goog.editor.Link"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.node", "goog.editor.range", "goog.string", "goog.string.Unicode", "goog.uri.utils", "goog.uri.utils.ComponentIndex"]);
goog.addDependency("/closure/goog/editor/node.js", ["goog.editor.node"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator", "goog.iter", "goog.object", "goog.string", "goog.string.Unicode", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugin.js", ["goog.editor.Plugin"], ["goog.editor.Command", "goog.events.EventTarget", "goog.functions", "goog.log", "goog.object", "goog.reflect"]);
goog.addDependency("/closure/goog/editor/plugins/abstractbubbleplugin.js", ["goog.editor.plugins.AbstractBubblePlugin"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.style", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.actionEventWrapper", "goog.functions", "goog.string.Unicode", "goog.ui.Component.EventType", "goog.ui.editor.Bubble", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/abstractdialogplugin.js", ["goog.editor.plugins.AbstractDialogPlugin", "goog.editor.plugins.AbstractDialogPlugin.EventType"], ["goog.dom", "goog.dom.Range", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.ui.editor.AbstractDialog.EventType"]);
goog.addDependency("/closure/goog/editor/plugins/abstracttabhandler.js", ["goog.editor.plugins.AbstractTabHandler"], ["goog.editor.Plugin", "goog.events.KeyCodes"]);
goog.addDependency("/closure/goog/editor/plugins/basictextformatter.js", ["goog.editor.plugins.BasicTextFormatter", "goog.editor.plugins.BasicTextFormatter.COMMAND"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.editor.style", "goog.iter", "goog.iter.StopIteration", "goog.log", "goog.object", "goog.string", "goog.string.Unicode",
"goog.style", "goog.ui.editor.messages", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/blockquote.js", ["goog.editor.plugins.Blockquote"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions", "goog.log"]);
goog.addDependency("/closure/goog/editor/plugins/emoticons.js", ["goog.editor.plugins.Emoticons"], ["goog.dom.TagName", "goog.editor.Plugin", "goog.editor.range", "goog.functions", "goog.ui.emoji.Emoji", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/enterhandler.js", ["goog.editor.plugins.EnterHandler"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.Blockquote", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.functions", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/equationeditorbubble.js", ["goog.editor.plugins.equation.EquationBubble"], ["goog.dom", "goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractBubblePlugin", "goog.string.Unicode", "goog.ui.editor.Bubble", "goog.ui.equation.ImageRenderer"]);
goog.addDependency("/closure/goog/editor/plugins/equationeditorplugin.js", ["goog.editor.plugins.EquationEditorPlugin"], ["goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.events", "goog.events.EventType", "goog.functions", "goog.log", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorDialog", "goog.ui.equation.ImageRenderer", "goog.ui.equation.PaletteManager"]);
goog.addDependency("/closure/goog/editor/plugins/firststrong.js", ["goog.editor.plugins.FirstStrong"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.i18n.bidi", "goog.i18n.uChar", "goog.iter", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/headerformatter.js", ["goog.editor.plugins.HeaderFormatter"], ["goog.editor.Command", "goog.editor.Plugin", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/linkbubble.js", ["goog.editor.plugins.LinkBubble", "goog.editor.plugins.LinkBubble.Action"], ["goog.array", "goog.dom", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.plugins.AbstractBubblePlugin", "goog.editor.range", "goog.string", "goog.style", "goog.ui.editor.messages", "goog.uri.utils", "goog.window"]);
goog.addDependency("/closure/goog/editor/plugins/linkdialogplugin.js", ["goog.editor.plugins.LinkDialogPlugin"], ["goog.array", "goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.events.EventHandler", "goog.functions", "goog.ui.editor.AbstractDialog.EventType", "goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent", "goog.uri.utils"]);
goog.addDependency("/closure/goog/editor/plugins/linkshortcutplugin.js", ["goog.editor.plugins.LinkShortcutPlugin"], ["goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.string"]);
goog.addDependency("/closure/goog/editor/plugins/listtabhandler.js", ["goog.editor.plugins.ListTabHandler"], ["goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractTabHandler"]);
goog.addDependency("/closure/goog/editor/plugins/loremipsum.js", ["goog.editor.plugins.LoremIpsum"], ["goog.asserts", "goog.dom", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions"]);
goog.addDependency("/closure/goog/editor/plugins/removeformatting.js", ["goog.editor.plugins.RemoveFormatting"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/spacestabhandler.js", ["goog.editor.plugins.SpacesTabHandler"], ["goog.dom", "goog.dom.TagName", "goog.editor.plugins.AbstractTabHandler", "goog.editor.range"]);
goog.addDependency("/closure/goog/editor/plugins/tableeditor.js", ["goog.editor.plugins.TableEditor"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.Table", "goog.editor.node", "goog.editor.range", "goog.object"]);
goog.addDependency("/closure/goog/editor/plugins/tagonenterhandler.js", ["goog.editor.plugins.TagOnEnterHandler"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Command", "goog.editor.node", "goog.editor.plugins.EnterHandler", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/undoredo.js", ["goog.editor.plugins.UndoRedo"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoState", "goog.events", "goog.events.EventHandler", "goog.log"]);
goog.addDependency("/closure/goog/editor/plugins/undoredomanager.js", ["goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoManager.EventType"], ["goog.editor.plugins.UndoRedoState", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/editor/plugins/undoredostate.js", ["goog.editor.plugins.UndoRedoState"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/editor/range.js", ["goog.editor.range", "goog.editor.range.Point"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.RangeEndpoint", "goog.dom.SavedCaretRange", "goog.editor.node", "goog.editor.style", "goog.iter", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/seamlessfield.js", ["goog.editor.SeamlessField"], ["goog.cssom.iframe.style", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.events", "goog.events.EventType", "goog.log", "goog.style"]);
goog.addDependency("/closure/goog/editor/seamlessfield_test.js", ["goog.editor.seamlessfield_test"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.SeamlessField", "goog.events", "goog.functions", "goog.style", "goog.testing.MockClock", "goog.testing.MockRange", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/editor/style.js", ["goog.editor.style"], ["goog.dom", "goog.dom.NodeType", "goog.editor.BrowserFeature", "goog.events.EventType", "goog.object", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/table.js", ["goog.editor.Table", "goog.editor.TableCell", "goog.editor.TableRow"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.log", "goog.string.Unicode", "goog.style"]);
goog.addDependency("/closure/goog/events/actioneventwrapper.js", ["goog.events.actionEventWrapper"], ["goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.EventWrapper", "goog.events.KeyCodes"]);
goog.addDependency("/closure/goog/events/actionhandler.js", ["goog.events.ActionEvent", "goog.events.ActionHandler", "goog.events.ActionHandler.EventType", "goog.events.BeforeActionEvent"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/browserevent.js", ["goog.events.BrowserEvent", "goog.events.BrowserEvent.MouseButton"], ["goog.events.BrowserFeature", "goog.events.Event", "goog.events.EventType", "goog.reflect", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/browserfeature.js", ["goog.events.BrowserFeature"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/event.js", ["goog.events.Event", "goog.events.EventLike"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/events/eventhandler.js", ["goog.events.EventHandler"], ["goog.Disposable", "goog.events", "goog.object"]);
goog.addDependency("/closure/goog/events/events.js", ["goog.events", "goog.events.Key", "goog.events.ListenableType"], ["goog.array", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.Listenable", "goog.events.Listener", "goog.object"]);
goog.addDependency("/closure/goog/events/eventtarget.js", ["goog.events.EventTarget"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.Listenable", "goog.events.ListenerMap", "goog.object"]);
goog.addDependency("/closure/goog/events/eventtargettester.js", ["goog.events.eventTargetTester", "goog.events.eventTargetTester.KeyType", "goog.events.eventTargetTester.UnlistenReturnType"], ["goog.array", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.testing.asserts", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/events/eventtype.js", ["goog.events.EventType"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/eventwrapper.js", ["goog.events.EventWrapper"], []);
goog.addDependency("/closure/goog/events/filedrophandler.js", ["goog.events.FileDropHandler", "goog.events.FileDropHandler.EventType"], ["goog.array", "goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log"]);
goog.addDependency("/closure/goog/events/focushandler.js", ["goog.events.FocusHandler", "goog.events.FocusHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/imehandler.js", ["goog.events.ImeHandler", "goog.events.ImeHandler.Event", "goog.events.ImeHandler.EventType"], ["goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/inputhandler.js", ["goog.events.InputHandler", "goog.events.InputHandler.EventType"], ["goog.Timer", "goog.dom", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/keycodes.js", ["goog.events.KeyCodes"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/keyhandler.js", ["goog.events.KeyEvent", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/keynames.js", ["goog.events.KeyNames"], []);
goog.addDependency("/closure/goog/events/listenable.js", ["goog.events.Listenable", "goog.events.ListenableKey"], []);
goog.addDependency("/closure/goog/events/listener.js", ["goog.events.Listener"], ["goog.events.ListenableKey"]);
goog.addDependency("/closure/goog/events/listenermap.js", ["goog.events.ListenerMap"], ["goog.array", "goog.events.Listener", "goog.object"]);
goog.addDependency("/closure/goog/events/listenermap_test.js", ["goog.events.ListenerMapTest"], ["goog.dispose", "goog.events.EventTarget", "goog.events.ListenerMap", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/events/mousewheelhandler.js", ["goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType"], ["goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.math", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/onlinehandler.js", ["goog.events.OnlineHandler", "goog.events.OnlineHandler.EventType"], ["goog.Timer", "goog.events.BrowserFeature", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.NetworkStatusMonitor", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/pastehandler.js", ["goog.events.PasteHandler", "goog.events.PasteHandler.EventType", "goog.events.PasteHandler.State"], ["goog.Timer", "goog.async.ConditionalDelay", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.log", "goog.userAgent"]);
goog.addDependency("/closure/goog/format/emailaddress.js", ["goog.format.EmailAddress"], ["goog.string"]);
goog.addDependency("/closure/goog/format/format.js", ["goog.format"], ["goog.i18n.GraphemeBreak", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/format/htmlprettyprinter.js", ["goog.format.HtmlPrettyPrinter", "goog.format.HtmlPrettyPrinter.Buffer"], ["goog.object", "goog.string.StringBuffer"]);
goog.addDependency("/closure/goog/format/jsonprettyprinter.js", ["goog.format.JsonPrettyPrinter", "goog.format.JsonPrettyPrinter.HtmlDelimiters", "goog.format.JsonPrettyPrinter.TextDelimiters"], ["goog.json", "goog.json.Serializer", "goog.string", "goog.string.StringBuffer", "goog.string.format"]);
goog.addDependency("/closure/goog/fs/entry.js", ["goog.fs.DirectoryEntry", "goog.fs.DirectoryEntry.Behavior", "goog.fs.Entry", "goog.fs.FileEntry"], []);
goog.addDependency("/closure/goog/fs/entryimpl.js", ["goog.fs.DirectoryEntryImpl", "goog.fs.EntryImpl", "goog.fs.FileEntryImpl"], ["goog.array", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.fs.FileWriter", "goog.functions", "goog.string"]);
goog.addDependency("/closure/goog/fs/error.js", ["goog.fs.Error", "goog.fs.Error.ErrorCode"], ["goog.debug.Error", "goog.string"]);
goog.addDependency("/closure/goog/fs/filereader.js", ["goog.fs.FileReader", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState"], ["goog.async.Deferred", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/fs/filesaver.js", ["goog.fs.FileSaver", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ProgressEvent", "goog.fs.FileSaver.ReadyState"], ["goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/fs/filesystem.js", ["goog.fs.FileSystem"], []);
goog.addDependency("/closure/goog/fs/filesystemimpl.js", ["goog.fs.FileSystemImpl"], ["goog.fs.DirectoryEntryImpl", "goog.fs.FileSystem"]);
goog.addDependency("/closure/goog/fs/filewriter.js", ["goog.fs.FileWriter"], ["goog.fs.Error", "goog.fs.FileSaver"]);
goog.addDependency("/closure/goog/fs/fs.js", ["goog.fs"], ["goog.array", "goog.async.Deferred", "goog.fs.Error", "goog.fs.FileReader", "goog.fs.FileSystemImpl", "goog.userAgent"]);
goog.addDependency("/closure/goog/fs/progressevent.js", ["goog.fs.ProgressEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/functions/functions.js", ["goog.functions"], []);
goog.addDependency("/closure/goog/fx/abstractdragdrop.js", ["goog.fx.AbstractDragDrop", "goog.fx.AbstractDragDrop.EventType", "goog.fx.DragDropEvent", "goog.fx.DragDropItem"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/anim/anim.js", ["goog.fx.anim", "goog.fx.anim.Animated"], ["goog.async.AnimationDelay", "goog.async.Delay", "goog.object"]);
goog.addDependency("/closure/goog/fx/animation.js", ["goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent"], ["goog.array", "goog.events.Event", "goog.fx.Transition", "goog.fx.Transition.EventType", "goog.fx.TransitionBase.State", "goog.fx.anim", "goog.fx.anim.Animated"]);
goog.addDependency("/closure/goog/fx/animationqueue.js", ["goog.fx.AnimationParallelQueue", "goog.fx.AnimationQueue", "goog.fx.AnimationSerialQueue"], ["goog.array", "goog.asserts", "goog.events.EventHandler", "goog.fx.Transition.EventType", "goog.fx.TransitionBase", "goog.fx.TransitionBase.State"]);
goog.addDependency("/closure/goog/fx/css3/fx.js", ["goog.fx.css3"], ["goog.fx.css3.Transition"]);
goog.addDependency("/closure/goog/fx/css3/transition.js", ["goog.fx.css3.Transition"], ["goog.Timer", "goog.fx.TransitionBase", "goog.style", "goog.style.transition"]);
goog.addDependency("/closure/goog/fx/cssspriteanimation.js", ["goog.fx.CssSpriteAnimation"], ["goog.fx.Animation"]);
goog.addDependency("/closure/goog/fx/dom.js", ["goog.fx.dom", "goog.fx.dom.BgColorTransform", "goog.fx.dom.ColorTransform", "goog.fx.dom.Fade", "goog.fx.dom.FadeIn", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOut", "goog.fx.dom.FadeOutAndHide", "goog.fx.dom.PredefinedEffect", "goog.fx.dom.Resize", "goog.fx.dom.ResizeHeight", "goog.fx.dom.ResizeWidth", "goog.fx.dom.Scroll", "goog.fx.dom.Slide", "goog.fx.dom.SlideFrom", "goog.fx.dom.Swipe"], ["goog.color", "goog.events", "goog.fx.Animation", "goog.fx.Transition.EventType",
"goog.style", "goog.style.bidi"]);
goog.addDependency("/closure/goog/fx/dragdrop.js", ["goog.fx.DragDrop"], ["goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]);
goog.addDependency("/closure/goog/fx/dragdropgroup.js", ["goog.fx.DragDropGroup"], ["goog.dom", "goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]);
goog.addDependency("/closure/goog/fx/dragger.js", ["goog.fx.DragEvent", "goog.fx.Dragger", "goog.fx.Dragger.EventType"], ["goog.dom", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.math.Rect", "goog.style", "goog.style.bidi", "goog.userAgent"]);
goog.addDependency("/closure/goog/fx/draglistgroup.js", ["goog.fx.DragListDirection", "goog.fx.DragListGroup", "goog.fx.DragListGroup.EventType", "goog.fx.DragListGroupEvent"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/dragscrollsupport.js", ["goog.fx.DragScrollSupport"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/easing.js", ["goog.fx.easing"], []);
goog.addDependency("/closure/goog/fx/fx.js", ["goog.fx"], ["goog.asserts", "goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent", "goog.fx.Transition.EventType", "goog.fx.easing"]);
goog.addDependency("/closure/goog/fx/transition.js", ["goog.fx.Transition", "goog.fx.Transition.EventType"], []);
goog.addDependency("/closure/goog/fx/transitionbase.js", ["goog.fx.TransitionBase", "goog.fx.TransitionBase.State"], ["goog.events.EventTarget", "goog.fx.Transition", "goog.fx.Transition.EventType"]);
goog.addDependency("/closure/goog/gears/basestore.js", ["goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/gears/database.js", ["goog.gears.Database", "goog.gears.Database.EventType", "goog.gears.Database.TransactionEvent"], ["goog.array", "goog.debug", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.json", "goog.log"]);
goog.addDependency("/closure/goog/gears/gears.js", ["goog.gears"], ["goog.string"]);
goog.addDependency("/closure/goog/gears/httprequest.js", ["goog.gears.HttpRequest"], ["goog.Timer", "goog.gears", "goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttp"]);
goog.addDependency("/closure/goog/gears/loggerclient.js", ["goog.gears.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/gears/loggerserver.js", ["goog.gears.LoggerServer"], ["goog.Disposable", "goog.gears.Worker.EventType", "goog.log", "goog.log.Level"]);
goog.addDependency("/closure/goog/gears/logstore.js", ["goog.gears.LogStore", "goog.gears.LogStore.Query"], ["goog.async.Delay", "goog.debug.LogManager", "goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType", "goog.json", "goog.log", "goog.log.Level", "goog.log.LogRecord"]);
goog.addDependency("/closure/goog/gears/managedresourcestore.js", ["goog.gears.ManagedResourceStore", "goog.gears.ManagedResourceStore.EventType", "goog.gears.ManagedResourceStore.UpdateStatus", "goog.gears.ManagedResourceStoreEvent"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log", "goog.string"]);
goog.addDependency("/closure/goog/gears/multipartformdata.js", ["goog.gears.MultipartFormData"], ["goog.asserts", "goog.gears", "goog.string"]);
goog.addDependency("/closure/goog/gears/statustype.js", ["goog.gears.StatusType"], []);
goog.addDependency("/closure/goog/gears/urlcapture.js", ["goog.gears.UrlCapture", "goog.gears.UrlCapture.Event", "goog.gears.UrlCapture.EventType"], ["goog.Uri", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log"]);
goog.addDependency("/closure/goog/gears/worker.js", ["goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent"], ["goog.events.Event", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/gears/workerchannel.js", ["goog.gears.WorkerChannel"], ["goog.Disposable", "goog.debug", "goog.events", "goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent", "goog.json", "goog.log", "goog.messaging.AbstractChannel"]);
goog.addDependency("/closure/goog/gears/workerpool.js", ["goog.gears.WorkerPool", "goog.gears.WorkerPool.Event", "goog.gears.WorkerPool.EventType"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.gears.Worker"]);
goog.addDependency("/closure/goog/graphics/abstractgraphics.js", ["goog.graphics.AbstractGraphics"], ["goog.dom", "goog.graphics.Path", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/graphics/affinetransform.js", ["goog.graphics.AffineTransform"], ["goog.math"]);
goog.addDependency("/closure/goog/graphics/canvaselement.js", ["goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.Path", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement",
"goog.math", "goog.string"]);
goog.addDependency("/closure/goog/graphics/canvasgraphics.js", ["goog.graphics.CanvasGraphics"], ["goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement", "goog.graphics.SolidFill", "goog.math.Size", "goog.style"]);
goog.addDependency("/closure/goog/graphics/element.js", ["goog.graphics.Element"], ["goog.events", "goog.events.EventTarget", "goog.events.Listenable", "goog.graphics.AffineTransform", "goog.math"]);
goog.addDependency("/closure/goog/graphics/ellipseelement.js", ["goog.graphics.EllipseElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/coordinates.js", ["goog.graphics.ext.coordinates"], ["goog.string"]);
goog.addDependency("/closure/goog/graphics/ext/element.js", ["goog.graphics.ext.Element"], ["goog.events", "goog.events.EventTarget", "goog.functions", "goog.graphics", "goog.graphics.ext.coordinates"]);
goog.addDependency("/closure/goog/graphics/ext/ellipse.js", ["goog.graphics.ext.Ellipse"], ["goog.graphics.ext.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/ext.js", ["goog.graphics.ext"], ["goog.graphics.ext.Ellipse", "goog.graphics.ext.Graphics", "goog.graphics.ext.Group", "goog.graphics.ext.Image", "goog.graphics.ext.Rectangle", "goog.graphics.ext.Shape", "goog.graphics.ext.coordinates"]);
goog.addDependency("/closure/goog/graphics/ext/graphics.js", ["goog.graphics.ext.Graphics"], ["goog.events.EventType", "goog.graphics.ext.Group"]);
goog.addDependency("/closure/goog/graphics/ext/group.js", ["goog.graphics.ext.Group"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/ext/image.js", ["goog.graphics.ext.Image"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/ext/path.js", ["goog.graphics.ext.Path"], ["goog.graphics.AffineTransform", "goog.graphics.Path", "goog.math", "goog.math.Rect"]);
goog.addDependency("/closure/goog/graphics/ext/rectangle.js", ["goog.graphics.ext.Rectangle"], ["goog.graphics.ext.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/shape.js", ["goog.graphics.ext.Shape"], ["goog.graphics.ext.Path", "goog.graphics.ext.StrokeAndFillElement", "goog.math.Rect"]);
goog.addDependency("/closure/goog/graphics/ext/strokeandfillelement.js", ["goog.graphics.ext.StrokeAndFillElement"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/fill.js", ["goog.graphics.Fill"], []);
goog.addDependency("/closure/goog/graphics/font.js", ["goog.graphics.Font"], []);
goog.addDependency("/closure/goog/graphics/graphics.js", ["goog.graphics"], ["goog.graphics.CanvasGraphics", "goog.graphics.SvgGraphics", "goog.graphics.VmlGraphics", "goog.userAgent"]);
goog.addDependency("/closure/goog/graphics/groupelement.js", ["goog.graphics.GroupElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/imageelement.js", ["goog.graphics.ImageElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/lineargradient.js", ["goog.graphics.LinearGradient"], ["goog.asserts", "goog.graphics.Fill"]);
goog.addDependency("/closure/goog/graphics/path.js", ["goog.graphics.Path", "goog.graphics.Path.Segment"], ["goog.array", "goog.math"]);
goog.addDependency("/closure/goog/graphics/pathelement.js", ["goog.graphics.PathElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/paths.js", ["goog.graphics.paths"], ["goog.graphics.Path", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/graphics/rectelement.js", ["goog.graphics.RectElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/solidfill.js", ["goog.graphics.SolidFill"], ["goog.graphics.Fill"]);
goog.addDependency("/closure/goog/graphics/stroke.js", ["goog.graphics.Stroke"], []);
goog.addDependency("/closure/goog/graphics/strokeandfillelement.js", ["goog.graphics.StrokeAndFillElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/svgelement.js", ["goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]);
goog.addDependency("/closure/goog/graphics/svggraphics.js", ["goog.graphics.SvgGraphics"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement",
"goog.math", "goog.math.Size", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/graphics/textelement.js", ["goog.graphics.TextElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/vmlelement.js", ["goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]);
goog.addDependency("/closure/goog/graphics/vmlgraphics.js", ["goog.graphics.VmlGraphics"], ["goog.array", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement", "goog.math", "goog.math.Size",
"goog.string", "goog.style"]);
goog.addDependency("/closure/goog/history/event.js", ["goog.history.Event"], ["goog.events.Event", "goog.history.EventType"]);
goog.addDependency("/closure/goog/history/eventtype.js", ["goog.history.EventType"], []);
goog.addDependency("/closure/goog/history/history.js", ["goog.History", "goog.History.Event", "goog.History.EventType"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType", "goog.memoize", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/history/history_test.js", ["goog.HistoryTest"], ["goog.History", "goog.testing.jsunit", "goog.userAgent"]);
goog.addDependency("/closure/goog/history/html5history.js", ["goog.history.Html5History", "goog.history.Html5History.TokenTransformer"], ["goog.asserts", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType"]);
goog.addDependency("/closure/goog/i18n/bidi.js", ["goog.i18n.bidi"], []);
goog.addDependency("/closure/goog/i18n/bidiformatter.js", ["goog.i18n.BidiFormatter"], ["goog.i18n.bidi", "goog.string"]);
goog.addDependency("/closure/goog/i18n/charlistdecompressor.js", ["goog.i18n.CharListDecompressor"], ["goog.array", "goog.i18n.uChar"]);
goog.addDependency("/closure/goog/i18n/charpickerdata.js", ["goog.i18n.CharPickerData"], []);
goog.addDependency("/closure/goog/i18n/collation.js", ["goog.i18n.collation"], []);
goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols.js", ["goog.i18n.CompactNumberFormatSymbols", "goog.i18n.CompactNumberFormatSymbols_af", "goog.i18n.CompactNumberFormatSymbols_af_ZA", "goog.i18n.CompactNumberFormatSymbols_am", "goog.i18n.CompactNumberFormatSymbols_am_ET", "goog.i18n.CompactNumberFormatSymbols_ar", "goog.i18n.CompactNumberFormatSymbols_ar_001", "goog.i18n.CompactNumberFormatSymbols_ar_EG", "goog.i18n.CompactNumberFormatSymbols_bg", "goog.i18n.CompactNumberFormatSymbols_bg_BG",
"goog.i18n.CompactNumberFormatSymbols_bn", "goog.i18n.CompactNumberFormatSymbols_bn_BD", "goog.i18n.CompactNumberFormatSymbols_br", "goog.i18n.CompactNumberFormatSymbols_br_FR", "goog.i18n.CompactNumberFormatSymbols_ca", "goog.i18n.CompactNumberFormatSymbols_ca_AD", "goog.i18n.CompactNumberFormatSymbols_ca_ES", "goog.i18n.CompactNumberFormatSymbols_chr", "goog.i18n.CompactNumberFormatSymbols_chr_US", "goog.i18n.CompactNumberFormatSymbols_cs", "goog.i18n.CompactNumberFormatSymbols_cs_CZ", "goog.i18n.CompactNumberFormatSymbols_cy",
"goog.i18n.CompactNumberFormatSymbols_cy_GB", "goog.i18n.CompactNumberFormatSymbols_da", "goog.i18n.CompactNumberFormatSymbols_da_DK", "goog.i18n.CompactNumberFormatSymbols_de", "goog.i18n.CompactNumberFormatSymbols_de_AT", "goog.i18n.CompactNumberFormatSymbols_de_BE", "goog.i18n.CompactNumberFormatSymbols_de_CH", "goog.i18n.CompactNumberFormatSymbols_de_DE", "goog.i18n.CompactNumberFormatSymbols_de_LU", "goog.i18n.CompactNumberFormatSymbols_el", "goog.i18n.CompactNumberFormatSymbols_el_GR", "goog.i18n.CompactNumberFormatSymbols_en",
"goog.i18n.CompactNumberFormatSymbols_en_AS", "goog.i18n.CompactNumberFormatSymbols_en_AU", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt_US", "goog.i18n.CompactNumberFormatSymbols_en_FM", "goog.i18n.CompactNumberFormatSymbols_en_GB", "goog.i18n.CompactNumberFormatSymbols_en_GU", "goog.i18n.CompactNumberFormatSymbols_en_IE", "goog.i18n.CompactNumberFormatSymbols_en_IN", "goog.i18n.CompactNumberFormatSymbols_en_MH", "goog.i18n.CompactNumberFormatSymbols_en_MP", "goog.i18n.CompactNumberFormatSymbols_en_PR",
"goog.i18n.CompactNumberFormatSymbols_en_PW", "goog.i18n.CompactNumberFormatSymbols_en_SG", "goog.i18n.CompactNumberFormatSymbols_en_TC", "goog.i18n.CompactNumberFormatSymbols_en_UM", "goog.i18n.CompactNumberFormatSymbols_en_US", "goog.i18n.CompactNumberFormatSymbols_en_VG", "goog.i18n.CompactNumberFormatSymbols_en_VI", "goog.i18n.CompactNumberFormatSymbols_en_ZA", "goog.i18n.CompactNumberFormatSymbols_es", "goog.i18n.CompactNumberFormatSymbols_es_419", "goog.i18n.CompactNumberFormatSymbols_es_EA",
"goog.i18n.CompactNumberFormatSymbols_es_ES", "goog.i18n.CompactNumberFormatSymbols_es_IC", "goog.i18n.CompactNumberFormatSymbols_et", "goog.i18n.CompactNumberFormatSymbols_et_EE", "goog.i18n.CompactNumberFormatSymbols_eu", "goog.i18n.CompactNumberFormatSymbols_eu_ES", "goog.i18n.CompactNumberFormatSymbols_fa", "goog.i18n.CompactNumberFormatSymbols_fa_IR", "goog.i18n.CompactNumberFormatSymbols_fi", "goog.i18n.CompactNumberFormatSymbols_fi_FI", "goog.i18n.CompactNumberFormatSymbols_fil", "goog.i18n.CompactNumberFormatSymbols_fil_PH",
"goog.i18n.CompactNumberFormatSymbols_fr", "goog.i18n.CompactNumberFormatSymbols_fr_BL", "goog.i18n.CompactNumberFormatSymbols_fr_CA", "goog.i18n.CompactNumberFormatSymbols_fr_FR", "goog.i18n.CompactNumberFormatSymbols_fr_GF", "goog.i18n.CompactNumberFormatSymbols_fr_GP", "goog.i18n.CompactNumberFormatSymbols_fr_MC", "goog.i18n.CompactNumberFormatSymbols_fr_MF", "goog.i18n.CompactNumberFormatSymbols_fr_MQ", "goog.i18n.CompactNumberFormatSymbols_fr_RE", "goog.i18n.CompactNumberFormatSymbols_fr_YT",
"goog.i18n.CompactNumberFormatSymbols_gl", "goog.i18n.CompactNumberFormatSymbols_gl_ES", "goog.i18n.CompactNumberFormatSymbols_gsw", "goog.i18n.CompactNumberFormatSymbols_gsw_CH", "goog.i18n.CompactNumberFormatSymbols_gu", "goog.i18n.CompactNumberFormatSymbols_gu_IN", "goog.i18n.CompactNumberFormatSymbols_haw", "goog.i18n.CompactNumberFormatSymbols_haw_US", "goog.i18n.CompactNumberFormatSymbols_he", "goog.i18n.CompactNumberFormatSymbols_he_IL", "goog.i18n.CompactNumberFormatSymbols_hi", "goog.i18n.CompactNumberFormatSymbols_hi_IN",
"goog.i18n.CompactNumberFormatSymbols_hr", "goog.i18n.CompactNumberFormatSymbols_hr_HR", "goog.i18n.CompactNumberFormatSymbols_hu", "goog.i18n.CompactNumberFormatSymbols_hu_HU", "goog.i18n.CompactNumberFormatSymbols_id", "goog.i18n.CompactNumberFormatSymbols_id_ID", "goog.i18n.CompactNumberFormatSymbols_in", "goog.i18n.CompactNumberFormatSymbols_is", "goog.i18n.CompactNumberFormatSymbols_is_IS", "goog.i18n.CompactNumberFormatSymbols_it", "goog.i18n.CompactNumberFormatSymbols_it_IT", "goog.i18n.CompactNumberFormatSymbols_it_SM",
"goog.i18n.CompactNumberFormatSymbols_iw", "goog.i18n.CompactNumberFormatSymbols_ja", "goog.i18n.CompactNumberFormatSymbols_ja_JP", "goog.i18n.CompactNumberFormatSymbols_kn", "goog.i18n.CompactNumberFormatSymbols_kn_IN", "goog.i18n.CompactNumberFormatSymbols_ko", "goog.i18n.CompactNumberFormatSymbols_ko_KR", "goog.i18n.CompactNumberFormatSymbols_ln", "goog.i18n.CompactNumberFormatSymbols_ln_CD", "goog.i18n.CompactNumberFormatSymbols_lt", "goog.i18n.CompactNumberFormatSymbols_lt_LT", "goog.i18n.CompactNumberFormatSymbols_lv",
"goog.i18n.CompactNumberFormatSymbols_lv_LV", "goog.i18n.CompactNumberFormatSymbols_ml", "goog.i18n.CompactNumberFormatSymbols_ml_IN", "goog.i18n.CompactNumberFormatSymbols_mr", "goog.i18n.CompactNumberFormatSymbols_mr_IN", "goog.i18n.CompactNumberFormatSymbols_ms", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_MY", "goog.i18n.CompactNumberFormatSymbols_mt", "goog.i18n.CompactNumberFormatSymbols_mt_MT", "goog.i18n.CompactNumberFormatSymbols_nb", "goog.i18n.CompactNumberFormatSymbols_nb_NO", "goog.i18n.CompactNumberFormatSymbols_nl",
"goog.i18n.CompactNumberFormatSymbols_nl_NL", "goog.i18n.CompactNumberFormatSymbols_no", "goog.i18n.CompactNumberFormatSymbols_or", "goog.i18n.CompactNumberFormatSymbols_or_IN", "goog.i18n.CompactNumberFormatSymbols_pl", "goog.i18n.CompactNumberFormatSymbols_pl_PL", "goog.i18n.CompactNumberFormatSymbols_pt", "goog.i18n.CompactNumberFormatSymbols_pt_BR", "goog.i18n.CompactNumberFormatSymbols_pt_PT", "goog.i18n.CompactNumberFormatSymbols_ro", "goog.i18n.CompactNumberFormatSymbols_ro_RO", "goog.i18n.CompactNumberFormatSymbols_ru",
"goog.i18n.CompactNumberFormatSymbols_ru_RU", "goog.i18n.CompactNumberFormatSymbols_sk", "goog.i18n.CompactNumberFormatSymbols_sk_SK", "goog.i18n.CompactNumberFormatSymbols_sl", "goog.i18n.CompactNumberFormatSymbols_sl_SI", "goog.i18n.CompactNumberFormatSymbols_sq", "goog.i18n.CompactNumberFormatSymbols_sq_AL", "goog.i18n.CompactNumberFormatSymbols_sr", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.CompactNumberFormatSymbols_sv", "goog.i18n.CompactNumberFormatSymbols_sv_SE", "goog.i18n.CompactNumberFormatSymbols_sw",
"goog.i18n.CompactNumberFormatSymbols_sw_TZ", "goog.i18n.CompactNumberFormatSymbols_ta", "goog.i18n.CompactNumberFormatSymbols_ta_IN", "goog.i18n.CompactNumberFormatSymbols_te", "goog.i18n.CompactNumberFormatSymbols_te_IN", "goog.i18n.CompactNumberFormatSymbols_th", "goog.i18n.CompactNumberFormatSymbols_th_TH", "goog.i18n.CompactNumberFormatSymbols_tl", "goog.i18n.CompactNumberFormatSymbols_tr", "goog.i18n.CompactNumberFormatSymbols_tr_TR", "goog.i18n.CompactNumberFormatSymbols_uk", "goog.i18n.CompactNumberFormatSymbols_uk_UA",
"goog.i18n.CompactNumberFormatSymbols_ur", "goog.i18n.CompactNumberFormatSymbols_ur_PK", "goog.i18n.CompactNumberFormatSymbols_vi", "goog.i18n.CompactNumberFormatSymbols_vi_VN", "goog.i18n.CompactNumberFormatSymbols_zh", "goog.i18n.CompactNumberFormatSymbols_zh_CN", "goog.i18n.CompactNumberFormatSymbols_zh_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_CN", "goog.i18n.CompactNumberFormatSymbols_zh_TW", "goog.i18n.CompactNumberFormatSymbols_zu", "goog.i18n.CompactNumberFormatSymbols_zu_ZA"], []);
goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols_ext.js", ["goog.i18n.CompactNumberFormatSymbolsExt", "goog.i18n.CompactNumberFormatSymbols_aa", "goog.i18n.CompactNumberFormatSymbols_aa_DJ", "goog.i18n.CompactNumberFormatSymbols_aa_ER", "goog.i18n.CompactNumberFormatSymbols_aa_ET", "goog.i18n.CompactNumberFormatSymbols_af_NA", "goog.i18n.CompactNumberFormatSymbols_agq", "goog.i18n.CompactNumberFormatSymbols_agq_CM", "goog.i18n.CompactNumberFormatSymbols_ak", "goog.i18n.CompactNumberFormatSymbols_ak_GH",
"goog.i18n.CompactNumberFormatSymbols_ar_AE", "goog.i18n.CompactNumberFormatSymbols_ar_BH", "goog.i18n.CompactNumberFormatSymbols_ar_DJ", "goog.i18n.CompactNumberFormatSymbols_ar_DZ", "goog.i18n.CompactNumberFormatSymbols_ar_EH", "goog.i18n.CompactNumberFormatSymbols_ar_ER", "goog.i18n.CompactNumberFormatSymbols_ar_IL", "goog.i18n.CompactNumberFormatSymbols_ar_IQ", "goog.i18n.CompactNumberFormatSymbols_ar_JO", "goog.i18n.CompactNumberFormatSymbols_ar_KM", "goog.i18n.CompactNumberFormatSymbols_ar_KW",
"goog.i18n.CompactNumberFormatSymbols_ar_LB", "goog.i18n.CompactNumberFormatSymbols_ar_LY", "goog.i18n.CompactNumberFormatSymbols_ar_MA", "goog.i18n.CompactNumberFormatSymbols_ar_MR", "goog.i18n.CompactNumberFormatSymbols_ar_OM", "goog.i18n.CompactNumberFormatSymbols_ar_PS", "goog.i18n.CompactNumberFormatSymbols_ar_QA", "goog.i18n.CompactNumberFormatSymbols_ar_SA", "goog.i18n.CompactNumberFormatSymbols_ar_SD", "goog.i18n.CompactNumberFormatSymbols_ar_SO", "goog.i18n.CompactNumberFormatSymbols_ar_SY",
"goog.i18n.CompactNumberFormatSymbols_ar_TD", "goog.i18n.CompactNumberFormatSymbols_ar_TN", "goog.i18n.CompactNumberFormatSymbols_ar_YE", "goog.i18n.CompactNumberFormatSymbols_as", "goog.i18n.CompactNumberFormatSymbols_as_IN", "goog.i18n.CompactNumberFormatSymbols_asa", "goog.i18n.CompactNumberFormatSymbols_asa_TZ", "goog.i18n.CompactNumberFormatSymbols_ast", "goog.i18n.CompactNumberFormatSymbols_ast_ES", "goog.i18n.CompactNumberFormatSymbols_az", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl_AZ",
"goog.i18n.CompactNumberFormatSymbols_az_Latn", "goog.i18n.CompactNumberFormatSymbols_az_Latn_AZ", "goog.i18n.CompactNumberFormatSymbols_bas", "goog.i18n.CompactNumberFormatSymbols_bas_CM", "goog.i18n.CompactNumberFormatSymbols_be", "goog.i18n.CompactNumberFormatSymbols_be_BY", "goog.i18n.CompactNumberFormatSymbols_bem", "goog.i18n.CompactNumberFormatSymbols_bem_ZM", "goog.i18n.CompactNumberFormatSymbols_bez", "goog.i18n.CompactNumberFormatSymbols_bez_TZ", "goog.i18n.CompactNumberFormatSymbols_bm",
"goog.i18n.CompactNumberFormatSymbols_bm_ML", "goog.i18n.CompactNumberFormatSymbols_bn_IN", "goog.i18n.CompactNumberFormatSymbols_bo", "goog.i18n.CompactNumberFormatSymbols_bo_CN", "goog.i18n.CompactNumberFormatSymbols_bo_IN", "goog.i18n.CompactNumberFormatSymbols_brx", "goog.i18n.CompactNumberFormatSymbols_brx_IN", "goog.i18n.CompactNumberFormatSymbols_bs", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_bs_Latn",
"goog.i18n.CompactNumberFormatSymbols_bs_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_byn", "goog.i18n.CompactNumberFormatSymbols_byn_ER", "goog.i18n.CompactNumberFormatSymbols_cgg", "goog.i18n.CompactNumberFormatSymbols_cgg_UG", "goog.i18n.CompactNumberFormatSymbols_ckb", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IR", "goog.i18n.CompactNumberFormatSymbols_ckb_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_IR",
"goog.i18n.CompactNumberFormatSymbols_ckb_Latn", "goog.i18n.CompactNumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.CompactNumberFormatSymbols_dav", "goog.i18n.CompactNumberFormatSymbols_dav_KE", "goog.i18n.CompactNumberFormatSymbols_de_LI", "goog.i18n.CompactNumberFormatSymbols_dje", "goog.i18n.CompactNumberFormatSymbols_dje_NE", "goog.i18n.CompactNumberFormatSymbols_dua", "goog.i18n.CompactNumberFormatSymbols_dua_CM", "goog.i18n.CompactNumberFormatSymbols_dyo", "goog.i18n.CompactNumberFormatSymbols_dyo_SN",
"goog.i18n.CompactNumberFormatSymbols_dz", "goog.i18n.CompactNumberFormatSymbols_dz_BT", "goog.i18n.CompactNumberFormatSymbols_ebu", "goog.i18n.CompactNumberFormatSymbols_ebu_KE", "goog.i18n.CompactNumberFormatSymbols_ee", "goog.i18n.CompactNumberFormatSymbols_ee_GH", "goog.i18n.CompactNumberFormatSymbols_ee_TG", "goog.i18n.CompactNumberFormatSymbols_el_CY", "goog.i18n.CompactNumberFormatSymbols_en_150", "goog.i18n.CompactNumberFormatSymbols_en_AG", "goog.i18n.CompactNumberFormatSymbols_en_BB", "goog.i18n.CompactNumberFormatSymbols_en_BE",
"goog.i18n.CompactNumberFormatSymbols_en_BM", "goog.i18n.CompactNumberFormatSymbols_en_BS", "goog.i18n.CompactNumberFormatSymbols_en_BW", "goog.i18n.CompactNumberFormatSymbols_en_BZ", "goog.i18n.CompactNumberFormatSymbols_en_CA", "goog.i18n.CompactNumberFormatSymbols_en_CM", "goog.i18n.CompactNumberFormatSymbols_en_DM", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt", "goog.i18n.CompactNumberFormatSymbols_en_FJ", "goog.i18n.CompactNumberFormatSymbols_en_GD", "goog.i18n.CompactNumberFormatSymbols_en_GG",
"goog.i18n.CompactNumberFormatSymbols_en_GH", "goog.i18n.CompactNumberFormatSymbols_en_GI", "goog.i18n.CompactNumberFormatSymbols_en_GM", "goog.i18n.CompactNumberFormatSymbols_en_GY", "goog.i18n.CompactNumberFormatSymbols_en_HK", "goog.i18n.CompactNumberFormatSymbols_en_IM", "goog.i18n.CompactNumberFormatSymbols_en_JE", "goog.i18n.CompactNumberFormatSymbols_en_JM", "goog.i18n.CompactNumberFormatSymbols_en_KE", "goog.i18n.CompactNumberFormatSymbols_en_KI", "goog.i18n.CompactNumberFormatSymbols_en_KN",
"goog.i18n.CompactNumberFormatSymbols_en_KY", "goog.i18n.CompactNumberFormatSymbols_en_LC", "goog.i18n.CompactNumberFormatSymbols_en_LR", "goog.i18n.CompactNumberFormatSymbols_en_LS", "goog.i18n.CompactNumberFormatSymbols_en_MG", "goog.i18n.CompactNumberFormatSymbols_en_MT", "goog.i18n.CompactNumberFormatSymbols_en_MU", "goog.i18n.CompactNumberFormatSymbols_en_MW", "goog.i18n.CompactNumberFormatSymbols_en_NA", "goog.i18n.CompactNumberFormatSymbols_en_NG", "goog.i18n.CompactNumberFormatSymbols_en_NZ",
"goog.i18n.CompactNumberFormatSymbols_en_PG", "goog.i18n.CompactNumberFormatSymbols_en_PH", "goog.i18n.CompactNumberFormatSymbols_en_PK", "goog.i18n.CompactNumberFormatSymbols_en_SB", "goog.i18n.CompactNumberFormatSymbols_en_SC", "goog.i18n.CompactNumberFormatSymbols_en_SL", "goog.i18n.CompactNumberFormatSymbols_en_SS", "goog.i18n.CompactNumberFormatSymbols_en_SZ", "goog.i18n.CompactNumberFormatSymbols_en_TO", "goog.i18n.CompactNumberFormatSymbols_en_TT", "goog.i18n.CompactNumberFormatSymbols_en_TZ",
"goog.i18n.CompactNumberFormatSymbols_en_UG", "goog.i18n.CompactNumberFormatSymbols_en_VC", "goog.i18n.CompactNumberFormatSymbols_en_VU", "goog.i18n.CompactNumberFormatSymbols_en_WS", "goog.i18n.CompactNumberFormatSymbols_en_ZM", "goog.i18n.CompactNumberFormatSymbols_en_ZW", "goog.i18n.CompactNumberFormatSymbols_eo", "goog.i18n.CompactNumberFormatSymbols_es_AR", "goog.i18n.CompactNumberFormatSymbols_es_BO", "goog.i18n.CompactNumberFormatSymbols_es_CL", "goog.i18n.CompactNumberFormatSymbols_es_CO",
"goog.i18n.CompactNumberFormatSymbols_es_CR", "goog.i18n.CompactNumberFormatSymbols_es_CU", "goog.i18n.CompactNumberFormatSymbols_es_DO", "goog.i18n.CompactNumberFormatSymbols_es_EC", "goog.i18n.CompactNumberFormatSymbols_es_GQ", "goog.i18n.CompactNumberFormatSymbols_es_GT", "goog.i18n.CompactNumberFormatSymbols_es_HN", "goog.i18n.CompactNumberFormatSymbols_es_MX", "goog.i18n.CompactNumberFormatSymbols_es_NI", "goog.i18n.CompactNumberFormatSymbols_es_PA", "goog.i18n.CompactNumberFormatSymbols_es_PE",
"goog.i18n.CompactNumberFormatSymbols_es_PH", "goog.i18n.CompactNumberFormatSymbols_es_PR", "goog.i18n.CompactNumberFormatSymbols_es_PY", "goog.i18n.CompactNumberFormatSymbols_es_SV", "goog.i18n.CompactNumberFormatSymbols_es_US", "goog.i18n.CompactNumberFormatSymbols_es_UY", "goog.i18n.CompactNumberFormatSymbols_es_VE", "goog.i18n.CompactNumberFormatSymbols_ewo", "goog.i18n.CompactNumberFormatSymbols_ewo_CM", "goog.i18n.CompactNumberFormatSymbols_fa_AF", "goog.i18n.CompactNumberFormatSymbols_ff",
"goog.i18n.CompactNumberFormatSymbols_ff_SN", "goog.i18n.CompactNumberFormatSymbols_fo", "goog.i18n.CompactNumberFormatSymbols_fo_FO", "goog.i18n.CompactNumberFormatSymbols_fr_BE", "goog.i18n.CompactNumberFormatSymbols_fr_BF", "goog.i18n.CompactNumberFormatSymbols_fr_BI", "goog.i18n.CompactNumberFormatSymbols_fr_BJ", "goog.i18n.CompactNumberFormatSymbols_fr_CD", "goog.i18n.CompactNumberFormatSymbols_fr_CF", "goog.i18n.CompactNumberFormatSymbols_fr_CG", "goog.i18n.CompactNumberFormatSymbols_fr_CH",
"goog.i18n.CompactNumberFormatSymbols_fr_CI", "goog.i18n.CompactNumberFormatSymbols_fr_CM", "goog.i18n.CompactNumberFormatSymbols_fr_DJ", "goog.i18n.CompactNumberFormatSymbols_fr_DZ", "goog.i18n.CompactNumberFormatSymbols_fr_GA", "goog.i18n.CompactNumberFormatSymbols_fr_GN", "goog.i18n.CompactNumberFormatSymbols_fr_GQ", "goog.i18n.CompactNumberFormatSymbols_fr_HT", "goog.i18n.CompactNumberFormatSymbols_fr_KM", "goog.i18n.CompactNumberFormatSymbols_fr_LU", "goog.i18n.CompactNumberFormatSymbols_fr_MA",
"goog.i18n.CompactNumberFormatSymbols_fr_MG", "goog.i18n.CompactNumberFormatSymbols_fr_ML", "goog.i18n.CompactNumberFormatSymbols_fr_MR", "goog.i18n.CompactNumberFormatSymbols_fr_MU", "goog.i18n.CompactNumberFormatSymbols_fr_NC", "goog.i18n.CompactNumberFormatSymbols_fr_NE", "goog.i18n.CompactNumberFormatSymbols_fr_PF", "goog.i18n.CompactNumberFormatSymbols_fr_RW", "goog.i18n.CompactNumberFormatSymbols_fr_SC", "goog.i18n.CompactNumberFormatSymbols_fr_SN", "goog.i18n.CompactNumberFormatSymbols_fr_SY",
"goog.i18n.CompactNumberFormatSymbols_fr_TD", "goog.i18n.CompactNumberFormatSymbols_fr_TG", "goog.i18n.CompactNumberFormatSymbols_fr_TN", "goog.i18n.CompactNumberFormatSymbols_fr_VU", "goog.i18n.CompactNumberFormatSymbols_fur", "goog.i18n.CompactNumberFormatSymbols_fur_IT", "goog.i18n.CompactNumberFormatSymbols_ga", "goog.i18n.CompactNumberFormatSymbols_ga_IE", "goog.i18n.CompactNumberFormatSymbols_gd", "goog.i18n.CompactNumberFormatSymbols_gd_GB", "goog.i18n.CompactNumberFormatSymbols_guz", "goog.i18n.CompactNumberFormatSymbols_guz_KE",
"goog.i18n.CompactNumberFormatSymbols_gv", "goog.i18n.CompactNumberFormatSymbols_gv_GB", "goog.i18n.CompactNumberFormatSymbols_ha", "goog.i18n.CompactNumberFormatSymbols_ha_Latn", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_GH", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NE", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NG", "goog.i18n.CompactNumberFormatSymbols_hr_BA", "goog.i18n.CompactNumberFormatSymbols_hy", "goog.i18n.CompactNumberFormatSymbols_hy_AM", "goog.i18n.CompactNumberFormatSymbols_ia",
"goog.i18n.CompactNumberFormatSymbols_ia_FR", "goog.i18n.CompactNumberFormatSymbols_ig", "goog.i18n.CompactNumberFormatSymbols_ig_NG", "goog.i18n.CompactNumberFormatSymbols_ii", "goog.i18n.CompactNumberFormatSymbols_ii_CN", "goog.i18n.CompactNumberFormatSymbols_it_CH", "goog.i18n.CompactNumberFormatSymbols_jgo", "goog.i18n.CompactNumberFormatSymbols_jgo_CM", "goog.i18n.CompactNumberFormatSymbols_jmc", "goog.i18n.CompactNumberFormatSymbols_jmc_TZ", "goog.i18n.CompactNumberFormatSymbols_ka", "goog.i18n.CompactNumberFormatSymbols_ka_GE",
"goog.i18n.CompactNumberFormatSymbols_kab", "goog.i18n.CompactNumberFormatSymbols_kab_DZ", "goog.i18n.CompactNumberFormatSymbols_kam", "goog.i18n.CompactNumberFormatSymbols_kam_KE", "goog.i18n.CompactNumberFormatSymbols_kde", "goog.i18n.CompactNumberFormatSymbols_kde_TZ", "goog.i18n.CompactNumberFormatSymbols_kea", "goog.i18n.CompactNumberFormatSymbols_kea_CV", "goog.i18n.CompactNumberFormatSymbols_khq", "goog.i18n.CompactNumberFormatSymbols_khq_ML", "goog.i18n.CompactNumberFormatSymbols_ki", "goog.i18n.CompactNumberFormatSymbols_ki_KE",
"goog.i18n.CompactNumberFormatSymbols_kk", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.CompactNumberFormatSymbols_kkj", "goog.i18n.CompactNumberFormatSymbols_kkj_CM", "goog.i18n.CompactNumberFormatSymbols_kl", "goog.i18n.CompactNumberFormatSymbols_kl_GL", "goog.i18n.CompactNumberFormatSymbols_kln", "goog.i18n.CompactNumberFormatSymbols_kln_KE", "goog.i18n.CompactNumberFormatSymbols_km", "goog.i18n.CompactNumberFormatSymbols_km_KH",
"goog.i18n.CompactNumberFormatSymbols_ko_KP", "goog.i18n.CompactNumberFormatSymbols_kok", "goog.i18n.CompactNumberFormatSymbols_kok_IN", "goog.i18n.CompactNumberFormatSymbols_ks", "goog.i18n.CompactNumberFormatSymbols_ks_Arab", "goog.i18n.CompactNumberFormatSymbols_ks_Arab_IN", "goog.i18n.CompactNumberFormatSymbols_ksb", "goog.i18n.CompactNumberFormatSymbols_ksb_TZ", "goog.i18n.CompactNumberFormatSymbols_ksf", "goog.i18n.CompactNumberFormatSymbols_ksf_CM", "goog.i18n.CompactNumberFormatSymbols_ksh",
"goog.i18n.CompactNumberFormatSymbols_ksh_DE", "goog.i18n.CompactNumberFormatSymbols_kw", "goog.i18n.CompactNumberFormatSymbols_kw_GB", "goog.i18n.CompactNumberFormatSymbols_ky", "goog.i18n.CompactNumberFormatSymbols_ky_KG", "goog.i18n.CompactNumberFormatSymbols_lag", "goog.i18n.CompactNumberFormatSymbols_lag_TZ", "goog.i18n.CompactNumberFormatSymbols_lg", "goog.i18n.CompactNumberFormatSymbols_lg_UG", "goog.i18n.CompactNumberFormatSymbols_ln_AO", "goog.i18n.CompactNumberFormatSymbols_ln_CF", "goog.i18n.CompactNumberFormatSymbols_ln_CG",
"goog.i18n.CompactNumberFormatSymbols_lo", "goog.i18n.CompactNumberFormatSymbols_lo_LA", "goog.i18n.CompactNumberFormatSymbols_lu", "goog.i18n.CompactNumberFormatSymbols_lu_CD", "goog.i18n.CompactNumberFormatSymbols_luo", "goog.i18n.CompactNumberFormatSymbols_luo_KE", "goog.i18n.CompactNumberFormatSymbols_luy", "goog.i18n.CompactNumberFormatSymbols_luy_KE", "goog.i18n.CompactNumberFormatSymbols_mas", "goog.i18n.CompactNumberFormatSymbols_mas_KE", "goog.i18n.CompactNumberFormatSymbols_mas_TZ", "goog.i18n.CompactNumberFormatSymbols_mer",
"goog.i18n.CompactNumberFormatSymbols_mer_KE", "goog.i18n.CompactNumberFormatSymbols_mfe", "goog.i18n.CompactNumberFormatSymbols_mfe_MU", "goog.i18n.CompactNumberFormatSymbols_mg", "goog.i18n.CompactNumberFormatSymbols_mg_MG", "goog.i18n.CompactNumberFormatSymbols_mgh", "goog.i18n.CompactNumberFormatSymbols_mgh_MZ", "goog.i18n.CompactNumberFormatSymbols_mgo", "goog.i18n.CompactNumberFormatSymbols_mgo_CM", "goog.i18n.CompactNumberFormatSymbols_mk", "goog.i18n.CompactNumberFormatSymbols_mk_MK", "goog.i18n.CompactNumberFormatSymbols_mn",
"goog.i18n.CompactNumberFormatSymbols_mn_Cyrl", "goog.i18n.CompactNumberFormatSymbols_mn_Cyrl_MN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_BN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_SG", "goog.i18n.CompactNumberFormatSymbols_mua", "goog.i18n.CompactNumberFormatSymbols_mua_CM", "goog.i18n.CompactNumberFormatSymbols_my", "goog.i18n.CompactNumberFormatSymbols_my_MM", "goog.i18n.CompactNumberFormatSymbols_naq", "goog.i18n.CompactNumberFormatSymbols_naq_NA",
"goog.i18n.CompactNumberFormatSymbols_nd", "goog.i18n.CompactNumberFormatSymbols_nd_ZW", "goog.i18n.CompactNumberFormatSymbols_ne", "goog.i18n.CompactNumberFormatSymbols_ne_IN", "goog.i18n.CompactNumberFormatSymbols_ne_NP", "goog.i18n.CompactNumberFormatSymbols_nl_AW", "goog.i18n.CompactNumberFormatSymbols_nl_BE", "goog.i18n.CompactNumberFormatSymbols_nl_CW", "goog.i18n.CompactNumberFormatSymbols_nl_SR", "goog.i18n.CompactNumberFormatSymbols_nl_SX", "goog.i18n.CompactNumberFormatSymbols_nmg", "goog.i18n.CompactNumberFormatSymbols_nmg_CM",
"goog.i18n.CompactNumberFormatSymbols_nn", "goog.i18n.CompactNumberFormatSymbols_nn_NO", "goog.i18n.CompactNumberFormatSymbols_nnh", "goog.i18n.CompactNumberFormatSymbols_nnh_CM", "goog.i18n.CompactNumberFormatSymbols_nr", "goog.i18n.CompactNumberFormatSymbols_nr_ZA", "goog.i18n.CompactNumberFormatSymbols_nso", "goog.i18n.CompactNumberFormatSymbols_nso_ZA", "goog.i18n.CompactNumberFormatSymbols_nus", "goog.i18n.CompactNumberFormatSymbols_nus_SD", "goog.i18n.CompactNumberFormatSymbols_nyn", "goog.i18n.CompactNumberFormatSymbols_nyn_UG",
"goog.i18n.CompactNumberFormatSymbols_om", "goog.i18n.CompactNumberFormatSymbols_om_ET", "goog.i18n.CompactNumberFormatSymbols_om_KE", "goog.i18n.CompactNumberFormatSymbols_os", "goog.i18n.CompactNumberFormatSymbols_os_GE", "goog.i18n.CompactNumberFormatSymbols_os_RU", "goog.i18n.CompactNumberFormatSymbols_pa", "goog.i18n.CompactNumberFormatSymbols_pa_Arab", "goog.i18n.CompactNumberFormatSymbols_pa_Arab_PK", "goog.i18n.CompactNumberFormatSymbols_pa_Guru", "goog.i18n.CompactNumberFormatSymbols_pa_Guru_IN",
"goog.i18n.CompactNumberFormatSymbols_ps", "goog.i18n.CompactNumberFormatSymbols_ps_AF", "goog.i18n.CompactNumberFormatSymbols_pt_AO", "goog.i18n.CompactNumberFormatSymbols_pt_CV", "goog.i18n.CompactNumberFormatSymbols_pt_GW", "goog.i18n.CompactNumberFormatSymbols_pt_MO", "goog.i18n.CompactNumberFormatSymbols_pt_MZ", "goog.i18n.CompactNumberFormatSymbols_pt_ST", "goog.i18n.CompactNumberFormatSymbols_pt_TL", "goog.i18n.CompactNumberFormatSymbols_rm", "goog.i18n.CompactNumberFormatSymbols_rm_CH", "goog.i18n.CompactNumberFormatSymbols_rn",
"goog.i18n.CompactNumberFormatSymbols_rn_BI", "goog.i18n.CompactNumberFormatSymbols_ro_MD", "goog.i18n.CompactNumberFormatSymbols_rof", "goog.i18n.CompactNumberFormatSymbols_rof_TZ", "goog.i18n.CompactNumberFormatSymbols_ru_BY", "goog.i18n.CompactNumberFormatSymbols_ru_KG", "goog.i18n.CompactNumberFormatSymbols_ru_KZ", "goog.i18n.CompactNumberFormatSymbols_ru_MD", "goog.i18n.CompactNumberFormatSymbols_ru_UA", "goog.i18n.CompactNumberFormatSymbols_rw", "goog.i18n.CompactNumberFormatSymbols_rw_RW",
"goog.i18n.CompactNumberFormatSymbols_rwk", "goog.i18n.CompactNumberFormatSymbols_rwk_TZ", "goog.i18n.CompactNumberFormatSymbols_sah", "goog.i18n.CompactNumberFormatSymbols_sah_RU", "goog.i18n.CompactNumberFormatSymbols_saq", "goog.i18n.CompactNumberFormatSymbols_saq_KE", "goog.i18n.CompactNumberFormatSymbols_sbp", "goog.i18n.CompactNumberFormatSymbols_sbp_TZ", "goog.i18n.CompactNumberFormatSymbols_se", "goog.i18n.CompactNumberFormatSymbols_se_FI", "goog.i18n.CompactNumberFormatSymbols_se_NO", "goog.i18n.CompactNumberFormatSymbols_seh",
"goog.i18n.CompactNumberFormatSymbols_seh_MZ", "goog.i18n.CompactNumberFormatSymbols_ses", "goog.i18n.CompactNumberFormatSymbols_ses_ML", "goog.i18n.CompactNumberFormatSymbols_sg", "goog.i18n.CompactNumberFormatSymbols_sg_CF", "goog.i18n.CompactNumberFormatSymbols_shi", "goog.i18n.CompactNumberFormatSymbols_shi_Latn", "goog.i18n.CompactNumberFormatSymbols_shi_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng_MA", "goog.i18n.CompactNumberFormatSymbols_si",
"goog.i18n.CompactNumberFormatSymbols_si_LK", "goog.i18n.CompactNumberFormatSymbols_sn", "goog.i18n.CompactNumberFormatSymbols_sn_ZW", "goog.i18n.CompactNumberFormatSymbols_so", "goog.i18n.CompactNumberFormatSymbols_so_DJ", "goog.i18n.CompactNumberFormatSymbols_so_ET", "goog.i18n.CompactNumberFormatSymbols_so_KE", "goog.i18n.CompactNumberFormatSymbols_so_SO", "goog.i18n.CompactNumberFormatSymbols_sq_MK", "goog.i18n.CompactNumberFormatSymbols_sq_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl",
"goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Latn", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_RS", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_XK", "goog.i18n.CompactNumberFormatSymbols_ss", "goog.i18n.CompactNumberFormatSymbols_ss_SZ", "goog.i18n.CompactNumberFormatSymbols_ss_ZA",
"goog.i18n.CompactNumberFormatSymbols_ssy", "goog.i18n.CompactNumberFormatSymbols_ssy_ER", "goog.i18n.CompactNumberFormatSymbols_st", "goog.i18n.CompactNumberFormatSymbols_st_LS", "goog.i18n.CompactNumberFormatSymbols_st_ZA", "goog.i18n.CompactNumberFormatSymbols_sv_AX", "goog.i18n.CompactNumberFormatSymbols_sv_FI", "goog.i18n.CompactNumberFormatSymbols_sw_KE", "goog.i18n.CompactNumberFormatSymbols_sw_UG", "goog.i18n.CompactNumberFormatSymbols_swc", "goog.i18n.CompactNumberFormatSymbols_swc_CD",
"goog.i18n.CompactNumberFormatSymbols_ta_LK", "goog.i18n.CompactNumberFormatSymbols_ta_MY", "goog.i18n.CompactNumberFormatSymbols_ta_SG", "goog.i18n.CompactNumberFormatSymbols_teo", "goog.i18n.CompactNumberFormatSymbols_teo_KE", "goog.i18n.CompactNumberFormatSymbols_teo_UG", "goog.i18n.CompactNumberFormatSymbols_tg", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.CompactNumberFormatSymbols_ti", "goog.i18n.CompactNumberFormatSymbols_ti_ER",
"goog.i18n.CompactNumberFormatSymbols_ti_ET", "goog.i18n.CompactNumberFormatSymbols_tig", "goog.i18n.CompactNumberFormatSymbols_tig_ER", "goog.i18n.CompactNumberFormatSymbols_tn", "goog.i18n.CompactNumberFormatSymbols_tn_BW", "goog.i18n.CompactNumberFormatSymbols_tn_ZA", "goog.i18n.CompactNumberFormatSymbols_to", "goog.i18n.CompactNumberFormatSymbols_to_TO", "goog.i18n.CompactNumberFormatSymbols_tr_CY", "goog.i18n.CompactNumberFormatSymbols_ts", "goog.i18n.CompactNumberFormatSymbols_ts_ZA", "goog.i18n.CompactNumberFormatSymbols_twq",
"goog.i18n.CompactNumberFormatSymbols_twq_NE", "goog.i18n.CompactNumberFormatSymbols_tzm", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_ur_IN", "goog.i18n.CompactNumberFormatSymbols_uz", "goog.i18n.CompactNumberFormatSymbols_uz_Arab", "goog.i18n.CompactNumberFormatSymbols_uz_Arab_AF", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.CompactNumberFormatSymbols_uz_Latn",
"goog.i18n.CompactNumberFormatSymbols_uz_Latn_UZ", "goog.i18n.CompactNumberFormatSymbols_vai", "goog.i18n.CompactNumberFormatSymbols_vai_Latn", "goog.i18n.CompactNumberFormatSymbols_vai_Latn_LR", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii_LR", "goog.i18n.CompactNumberFormatSymbols_ve", "goog.i18n.CompactNumberFormatSymbols_ve_ZA", "goog.i18n.CompactNumberFormatSymbols_vo", "goog.i18n.CompactNumberFormatSymbols_vun", "goog.i18n.CompactNumberFormatSymbols_vun_TZ",
"goog.i18n.CompactNumberFormatSymbols_wae", "goog.i18n.CompactNumberFormatSymbols_wae_CH", "goog.i18n.CompactNumberFormatSymbols_wal", "goog.i18n.CompactNumberFormatSymbols_wal_ET", "goog.i18n.CompactNumberFormatSymbols_xh", "goog.i18n.CompactNumberFormatSymbols_xh_ZA", "goog.i18n.CompactNumberFormatSymbols_xog", "goog.i18n.CompactNumberFormatSymbols_xog_UG", "goog.i18n.CompactNumberFormatSymbols_yav", "goog.i18n.CompactNumberFormatSymbols_yav_CM", "goog.i18n.CompactNumberFormatSymbols_yo", "goog.i18n.CompactNumberFormatSymbols_yo_NG",
"goog.i18n.CompactNumberFormatSymbols_zh_Hans", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_SG", "goog.i18n.CompactNumberFormatSymbols_zh_Hant", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_TW"], []);
goog.addDependency("/closure/goog/i18n/currency.js", ["goog.i18n.currency", "goog.i18n.currency.CurrencyInfo", "goog.i18n.currency.CurrencyInfoTier2"], []);
goog.addDependency("/closure/goog/i18n/currencycodemap.js", ["goog.i18n.currencyCodeMap", "goog.i18n.currencyCodeMapTier2"], []);
goog.addDependency("/closure/goog/i18n/datetimeformat.js", ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeFormat.Format"], ["goog.asserts", "goog.i18n.DateTimeSymbols", "goog.i18n.TimeZone", "goog.string"]);
goog.addDependency("/closure/goog/i18n/datetimeparse.js", ["goog.i18n.DateTimeParse"], ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols"]);
goog.addDependency("/closure/goog/i18n/datetimepatterns.js", ["goog.i18n.DateTimePatterns", "goog.i18n.DateTimePatterns_af", "goog.i18n.DateTimePatterns_am", "goog.i18n.DateTimePatterns_ar", "goog.i18n.DateTimePatterns_bg", "goog.i18n.DateTimePatterns_bn", "goog.i18n.DateTimePatterns_br", "goog.i18n.DateTimePatterns_ca", "goog.i18n.DateTimePatterns_chr", "goog.i18n.DateTimePatterns_cs", "goog.i18n.DateTimePatterns_cy", "goog.i18n.DateTimePatterns_da", "goog.i18n.DateTimePatterns_de", "goog.i18n.DateTimePatterns_de_AT",
"goog.i18n.DateTimePatterns_de_CH", "goog.i18n.DateTimePatterns_el", "goog.i18n.DateTimePatterns_en", "goog.i18n.DateTimePatterns_en_AU", "goog.i18n.DateTimePatterns_en_GB", "goog.i18n.DateTimePatterns_en_IE", "goog.i18n.DateTimePatterns_en_IN", "goog.i18n.DateTimePatterns_en_SG", "goog.i18n.DateTimePatterns_en_US", "goog.i18n.DateTimePatterns_en_ZA", "goog.i18n.DateTimePatterns_es", "goog.i18n.DateTimePatterns_es_419", "goog.i18n.DateTimePatterns_es_ES", "goog.i18n.DateTimePatterns_et", "goog.i18n.DateTimePatterns_eu",
"goog.i18n.DateTimePatterns_fa", "goog.i18n.DateTimePatterns_fi", "goog.i18n.DateTimePatterns_fil", "goog.i18n.DateTimePatterns_fr", "goog.i18n.DateTimePatterns_fr_CA", "goog.i18n.DateTimePatterns_gl", "goog.i18n.DateTimePatterns_gsw", "goog.i18n.DateTimePatterns_gu", "goog.i18n.DateTimePatterns_haw", "goog.i18n.DateTimePatterns_he", "goog.i18n.DateTimePatterns_hi", "goog.i18n.DateTimePatterns_hr", "goog.i18n.DateTimePatterns_hu", "goog.i18n.DateTimePatterns_id", "goog.i18n.DateTimePatterns_in",
"goog.i18n.DateTimePatterns_is", "goog.i18n.DateTimePatterns_it", "goog.i18n.DateTimePatterns_iw", "goog.i18n.DateTimePatterns_ja", "goog.i18n.DateTimePatterns_kn", "goog.i18n.DateTimePatterns_ko", "goog.i18n.DateTimePatterns_ln", "goog.i18n.DateTimePatterns_lt", "goog.i18n.DateTimePatterns_lv", "goog.i18n.DateTimePatterns_ml", "goog.i18n.DateTimePatterns_mo", "goog.i18n.DateTimePatterns_mr", "goog.i18n.DateTimePatterns_ms", "goog.i18n.DateTimePatterns_mt", "goog.i18n.DateTimePatterns_nb", "goog.i18n.DateTimePatterns_nl",
"goog.i18n.DateTimePatterns_no", "goog.i18n.DateTimePatterns_or", "goog.i18n.DateTimePatterns_pl", "goog.i18n.DateTimePatterns_pt", "goog.i18n.DateTimePatterns_pt_BR", "goog.i18n.DateTimePatterns_pt_PT", "goog.i18n.DateTimePatterns_ro", "goog.i18n.DateTimePatterns_ru", "goog.i18n.DateTimePatterns_sk", "goog.i18n.DateTimePatterns_sl", "goog.i18n.DateTimePatterns_sq", "goog.i18n.DateTimePatterns_sr", "goog.i18n.DateTimePatterns_sv", "goog.i18n.DateTimePatterns_sw", "goog.i18n.DateTimePatterns_ta",
"goog.i18n.DateTimePatterns_te", "goog.i18n.DateTimePatterns_th", "goog.i18n.DateTimePatterns_tl", "goog.i18n.DateTimePatterns_tr", "goog.i18n.DateTimePatterns_uk", "goog.i18n.DateTimePatterns_ur", "goog.i18n.DateTimePatterns_vi", "goog.i18n.DateTimePatterns_zh", "goog.i18n.DateTimePatterns_zh_CN", "goog.i18n.DateTimePatterns_zh_HK", "goog.i18n.DateTimePatterns_zh_TW", "goog.i18n.DateTimePatterns_zu"], []);
goog.addDependency("/closure/goog/i18n/datetimepatternsext.js", ["goog.i18n.DateTimePatternsExt", "goog.i18n.DateTimePatterns_af_NA", "goog.i18n.DateTimePatterns_af_ZA", "goog.i18n.DateTimePatterns_agq", "goog.i18n.DateTimePatterns_agq_CM", "goog.i18n.DateTimePatterns_ak", "goog.i18n.DateTimePatterns_ak_GH", "goog.i18n.DateTimePatterns_am_ET", "goog.i18n.DateTimePatterns_ar_001", "goog.i18n.DateTimePatterns_ar_AE", "goog.i18n.DateTimePatterns_ar_BH", "goog.i18n.DateTimePatterns_ar_DJ", "goog.i18n.DateTimePatterns_ar_DZ",
"goog.i18n.DateTimePatterns_ar_EG", "goog.i18n.DateTimePatterns_ar_EH", "goog.i18n.DateTimePatterns_ar_ER", "goog.i18n.DateTimePatterns_ar_IL", "goog.i18n.DateTimePatterns_ar_IQ", "goog.i18n.DateTimePatterns_ar_JO", "goog.i18n.DateTimePatterns_ar_KM", "goog.i18n.DateTimePatterns_ar_KW", "goog.i18n.DateTimePatterns_ar_LB", "goog.i18n.DateTimePatterns_ar_LY", "goog.i18n.DateTimePatterns_ar_MA", "goog.i18n.DateTimePatterns_ar_MR", "goog.i18n.DateTimePatterns_ar_OM", "goog.i18n.DateTimePatterns_ar_PS",
"goog.i18n.DateTimePatterns_ar_QA", "goog.i18n.DateTimePatterns_ar_SA", "goog.i18n.DateTimePatterns_ar_SD", "goog.i18n.DateTimePatterns_ar_SO", "goog.i18n.DateTimePatterns_ar_SY", "goog.i18n.DateTimePatterns_ar_TD", "goog.i18n.DateTimePatterns_ar_TN", "goog.i18n.DateTimePatterns_ar_YE", "goog.i18n.DateTimePatterns_as", "goog.i18n.DateTimePatterns_as_IN", "goog.i18n.DateTimePatterns_asa", "goog.i18n.DateTimePatterns_asa_TZ", "goog.i18n.DateTimePatterns_az", "goog.i18n.DateTimePatterns_az_Cyrl", "goog.i18n.DateTimePatterns_az_Cyrl_AZ",
"goog.i18n.DateTimePatterns_az_Latn", "goog.i18n.DateTimePatterns_az_Latn_AZ", "goog.i18n.DateTimePatterns_bas", "goog.i18n.DateTimePatterns_bas_CM", "goog.i18n.DateTimePatterns_be", "goog.i18n.DateTimePatterns_be_BY", "goog.i18n.DateTimePatterns_bem", "goog.i18n.DateTimePatterns_bem_ZM", "goog.i18n.DateTimePatterns_bez", "goog.i18n.DateTimePatterns_bez_TZ", "goog.i18n.DateTimePatterns_bg_BG", "goog.i18n.DateTimePatterns_bm", "goog.i18n.DateTimePatterns_bm_ML", "goog.i18n.DateTimePatterns_bn_BD",
"goog.i18n.DateTimePatterns_bn_IN", "goog.i18n.DateTimePatterns_bo", "goog.i18n.DateTimePatterns_bo_CN", "goog.i18n.DateTimePatterns_bo_IN", "goog.i18n.DateTimePatterns_br_FR", "goog.i18n.DateTimePatterns_brx", "goog.i18n.DateTimePatterns_brx_IN", "goog.i18n.DateTimePatterns_bs", "goog.i18n.DateTimePatterns_bs_Cyrl", "goog.i18n.DateTimePatterns_bs_Cyrl_BA", "goog.i18n.DateTimePatterns_bs_Latn", "goog.i18n.DateTimePatterns_bs_Latn_BA", "goog.i18n.DateTimePatterns_ca_AD", "goog.i18n.DateTimePatterns_ca_ES",
"goog.i18n.DateTimePatterns_cgg", "goog.i18n.DateTimePatterns_cgg_UG", "goog.i18n.DateTimePatterns_chr_US", "goog.i18n.DateTimePatterns_cs_CZ", "goog.i18n.DateTimePatterns_cy_GB", "goog.i18n.DateTimePatterns_da_DK", "goog.i18n.DateTimePatterns_dav", "goog.i18n.DateTimePatterns_dav_KE", "goog.i18n.DateTimePatterns_de_BE", "goog.i18n.DateTimePatterns_de_DE", "goog.i18n.DateTimePatterns_de_LI", "goog.i18n.DateTimePatterns_de_LU", "goog.i18n.DateTimePatterns_dje", "goog.i18n.DateTimePatterns_dje_NE",
"goog.i18n.DateTimePatterns_dua", "goog.i18n.DateTimePatterns_dua_CM", "goog.i18n.DateTimePatterns_dyo", "goog.i18n.DateTimePatterns_dyo_SN", "goog.i18n.DateTimePatterns_dz", "goog.i18n.DateTimePatterns_dz_BT", "goog.i18n.DateTimePatterns_ebu", "goog.i18n.DateTimePatterns_ebu_KE", "goog.i18n.DateTimePatterns_ee", "goog.i18n.DateTimePatterns_ee_GH", "goog.i18n.DateTimePatterns_ee_TG", "goog.i18n.DateTimePatterns_el_CY", "goog.i18n.DateTimePatterns_el_GR", "goog.i18n.DateTimePatterns_en_150", "goog.i18n.DateTimePatterns_en_AG",
"goog.i18n.DateTimePatterns_en_AS", "goog.i18n.DateTimePatterns_en_BB", "goog.i18n.DateTimePatterns_en_BE", "goog.i18n.DateTimePatterns_en_BM", "goog.i18n.DateTimePatterns_en_BS", "goog.i18n.DateTimePatterns_en_BW", "goog.i18n.DateTimePatterns_en_BZ", "goog.i18n.DateTimePatterns_en_CA", "goog.i18n.DateTimePatterns_en_CM", "goog.i18n.DateTimePatterns_en_DM", "goog.i18n.DateTimePatterns_en_FJ", "goog.i18n.DateTimePatterns_en_FM", "goog.i18n.DateTimePatterns_en_GD", "goog.i18n.DateTimePatterns_en_GG",
"goog.i18n.DateTimePatterns_en_GH", "goog.i18n.DateTimePatterns_en_GI", "goog.i18n.DateTimePatterns_en_GM", "goog.i18n.DateTimePatterns_en_GU", "goog.i18n.DateTimePatterns_en_GY", "goog.i18n.DateTimePatterns_en_HK", "goog.i18n.DateTimePatterns_en_IM", "goog.i18n.DateTimePatterns_en_JE", "goog.i18n.DateTimePatterns_en_JM", "goog.i18n.DateTimePatterns_en_KE", "goog.i18n.DateTimePatterns_en_KI", "goog.i18n.DateTimePatterns_en_KN", "goog.i18n.DateTimePatterns_en_KY", "goog.i18n.DateTimePatterns_en_LC",
"goog.i18n.DateTimePatterns_en_LR", "goog.i18n.DateTimePatterns_en_LS", "goog.i18n.DateTimePatterns_en_MG", "goog.i18n.DateTimePatterns_en_MH", "goog.i18n.DateTimePatterns_en_MP", "goog.i18n.DateTimePatterns_en_MT", "goog.i18n.DateTimePatterns_en_MU", "goog.i18n.DateTimePatterns_en_MW", "goog.i18n.DateTimePatterns_en_NA", "goog.i18n.DateTimePatterns_en_NG", "goog.i18n.DateTimePatterns_en_NZ", "goog.i18n.DateTimePatterns_en_PG", "goog.i18n.DateTimePatterns_en_PH", "goog.i18n.DateTimePatterns_en_PK",
"goog.i18n.DateTimePatterns_en_PR", "goog.i18n.DateTimePatterns_en_PW", "goog.i18n.DateTimePatterns_en_SB", "goog.i18n.DateTimePatterns_en_SC", "goog.i18n.DateTimePatterns_en_SL", "goog.i18n.DateTimePatterns_en_SS", "goog.i18n.DateTimePatterns_en_SZ", "goog.i18n.DateTimePatterns_en_TC", "goog.i18n.DateTimePatterns_en_TO", "goog.i18n.DateTimePatterns_en_TT", "goog.i18n.DateTimePatterns_en_TZ", "goog.i18n.DateTimePatterns_en_UG", "goog.i18n.DateTimePatterns_en_UM", "goog.i18n.DateTimePatterns_en_US_POSIX",
"goog.i18n.DateTimePatterns_en_VC", "goog.i18n.DateTimePatterns_en_VG", "goog.i18n.DateTimePatterns_en_VI", "goog.i18n.DateTimePatterns_en_VU", "goog.i18n.DateTimePatterns_en_WS", "goog.i18n.DateTimePatterns_en_ZM", "goog.i18n.DateTimePatterns_en_ZW", "goog.i18n.DateTimePatterns_eo", "goog.i18n.DateTimePatterns_es_AR", "goog.i18n.DateTimePatterns_es_BO", "goog.i18n.DateTimePatterns_es_CL", "goog.i18n.DateTimePatterns_es_CO", "goog.i18n.DateTimePatterns_es_CR", "goog.i18n.DateTimePatterns_es_CU",
"goog.i18n.DateTimePatterns_es_DO", "goog.i18n.DateTimePatterns_es_EA", "goog.i18n.DateTimePatterns_es_EC", "goog.i18n.DateTimePatterns_es_GQ", "goog.i18n.DateTimePatterns_es_GT", "goog.i18n.DateTimePatterns_es_HN", "goog.i18n.DateTimePatterns_es_IC", "goog.i18n.DateTimePatterns_es_MX", "goog.i18n.DateTimePatterns_es_NI", "goog.i18n.DateTimePatterns_es_PA", "goog.i18n.DateTimePatterns_es_PE", "goog.i18n.DateTimePatterns_es_PH", "goog.i18n.DateTimePatterns_es_PR", "goog.i18n.DateTimePatterns_es_PY",
"goog.i18n.DateTimePatterns_es_SV", "goog.i18n.DateTimePatterns_es_US", "goog.i18n.DateTimePatterns_es_UY", "goog.i18n.DateTimePatterns_es_VE", "goog.i18n.DateTimePatterns_et_EE", "goog.i18n.DateTimePatterns_eu_ES", "goog.i18n.DateTimePatterns_ewo", "goog.i18n.DateTimePatterns_ewo_CM", "goog.i18n.DateTimePatterns_fa_AF", "goog.i18n.DateTimePatterns_fa_IR", "goog.i18n.DateTimePatterns_ff", "goog.i18n.DateTimePatterns_ff_SN", "goog.i18n.DateTimePatterns_fi_FI", "goog.i18n.DateTimePatterns_fil_PH",
"goog.i18n.DateTimePatterns_fo", "goog.i18n.DateTimePatterns_fo_FO", "goog.i18n.DateTimePatterns_fr_BE", "goog.i18n.DateTimePatterns_fr_BF", "goog.i18n.DateTimePatterns_fr_BI", "goog.i18n.DateTimePatterns_fr_BJ", "goog.i18n.DateTimePatterns_fr_BL", "goog.i18n.DateTimePatterns_fr_CD", "goog.i18n.DateTimePatterns_fr_CF", "goog.i18n.DateTimePatterns_fr_CG", "goog.i18n.DateTimePatterns_fr_CH", "goog.i18n.DateTimePatterns_fr_CI", "goog.i18n.DateTimePatterns_fr_CM", "goog.i18n.DateTimePatterns_fr_DJ",
"goog.i18n.DateTimePatterns_fr_DZ", "goog.i18n.DateTimePatterns_fr_FR", "goog.i18n.DateTimePatterns_fr_GA", "goog.i18n.DateTimePatterns_fr_GF", "goog.i18n.DateTimePatterns_fr_GN", "goog.i18n.DateTimePatterns_fr_GP", "goog.i18n.DateTimePatterns_fr_GQ", "goog.i18n.DateTimePatterns_fr_HT", "goog.i18n.DateTimePatterns_fr_KM", "goog.i18n.DateTimePatterns_fr_LU", "goog.i18n.DateTimePatterns_fr_MA", "goog.i18n.DateTimePatterns_fr_MC", "goog.i18n.DateTimePatterns_fr_MF", "goog.i18n.DateTimePatterns_fr_MG",
"goog.i18n.DateTimePatterns_fr_ML", "goog.i18n.DateTimePatterns_fr_MQ", "goog.i18n.DateTimePatterns_fr_MR", "goog.i18n.DateTimePatterns_fr_MU", "goog.i18n.DateTimePatterns_fr_NC", "goog.i18n.DateTimePatterns_fr_NE", "goog.i18n.DateTimePatterns_fr_PF", "goog.i18n.DateTimePatterns_fr_RE", "goog.i18n.DateTimePatterns_fr_RW", "goog.i18n.DateTimePatterns_fr_SC", "goog.i18n.DateTimePatterns_fr_SN", "goog.i18n.DateTimePatterns_fr_SY", "goog.i18n.DateTimePatterns_fr_TD", "goog.i18n.DateTimePatterns_fr_TG",
"goog.i18n.DateTimePatterns_fr_TN", "goog.i18n.DateTimePatterns_fr_VU", "goog.i18n.DateTimePatterns_fr_YT", "goog.i18n.DateTimePatterns_ga", "goog.i18n.DateTimePatterns_ga_IE", "goog.i18n.DateTimePatterns_gl_ES", "goog.i18n.DateTimePatterns_gsw_CH", "goog.i18n.DateTimePatterns_gu_IN", "goog.i18n.DateTimePatterns_guz", "goog.i18n.DateTimePatterns_guz_KE", "goog.i18n.DateTimePatterns_gv", "goog.i18n.DateTimePatterns_gv_GB", "goog.i18n.DateTimePatterns_ha", "goog.i18n.DateTimePatterns_ha_Latn", "goog.i18n.DateTimePatterns_ha_Latn_GH",
"goog.i18n.DateTimePatterns_ha_Latn_NE", "goog.i18n.DateTimePatterns_ha_Latn_NG", "goog.i18n.DateTimePatterns_haw_US", "goog.i18n.DateTimePatterns_he_IL", "goog.i18n.DateTimePatterns_hi_IN", "goog.i18n.DateTimePatterns_hr_BA", "goog.i18n.DateTimePatterns_hr_HR", "goog.i18n.DateTimePatterns_hu_HU", "goog.i18n.DateTimePatterns_hy", "goog.i18n.DateTimePatterns_hy_AM", "goog.i18n.DateTimePatterns_id_ID", "goog.i18n.DateTimePatterns_ig", "goog.i18n.DateTimePatterns_ig_NG", "goog.i18n.DateTimePatterns_ii",
"goog.i18n.DateTimePatterns_ii_CN", "goog.i18n.DateTimePatterns_is_IS", "goog.i18n.DateTimePatterns_it_CH", "goog.i18n.DateTimePatterns_it_IT", "goog.i18n.DateTimePatterns_it_SM", "goog.i18n.DateTimePatterns_ja_JP", "goog.i18n.DateTimePatterns_jgo", "goog.i18n.DateTimePatterns_jgo_CM", "goog.i18n.DateTimePatterns_jmc", "goog.i18n.DateTimePatterns_jmc_TZ", "goog.i18n.DateTimePatterns_ka", "goog.i18n.DateTimePatterns_ka_GE", "goog.i18n.DateTimePatterns_kab", "goog.i18n.DateTimePatterns_kab_DZ", "goog.i18n.DateTimePatterns_kam",
"goog.i18n.DateTimePatterns_kam_KE", "goog.i18n.DateTimePatterns_kde", "goog.i18n.DateTimePatterns_kde_TZ", "goog.i18n.DateTimePatterns_kea", "goog.i18n.DateTimePatterns_kea_CV", "goog.i18n.DateTimePatterns_khq", "goog.i18n.DateTimePatterns_khq_ML", "goog.i18n.DateTimePatterns_ki", "goog.i18n.DateTimePatterns_ki_KE", "goog.i18n.DateTimePatterns_kk", "goog.i18n.DateTimePatterns_kk_Cyrl", "goog.i18n.DateTimePatterns_kk_Cyrl_KZ", "goog.i18n.DateTimePatterns_kl", "goog.i18n.DateTimePatterns_kl_GL", "goog.i18n.DateTimePatterns_kln",
"goog.i18n.DateTimePatterns_kln_KE", "goog.i18n.DateTimePatterns_km", "goog.i18n.DateTimePatterns_km_KH", "goog.i18n.DateTimePatterns_kn_IN", "goog.i18n.DateTimePatterns_ko_KP", "goog.i18n.DateTimePatterns_ko_KR", "goog.i18n.DateTimePatterns_kok", "goog.i18n.DateTimePatterns_kok_IN", "goog.i18n.DateTimePatterns_ks", "goog.i18n.DateTimePatterns_ks_Arab", "goog.i18n.DateTimePatterns_ks_Arab_IN", "goog.i18n.DateTimePatterns_ksb", "goog.i18n.DateTimePatterns_ksb_TZ", "goog.i18n.DateTimePatterns_ksf",
"goog.i18n.DateTimePatterns_ksf_CM", "goog.i18n.DateTimePatterns_kw", "goog.i18n.DateTimePatterns_kw_GB", "goog.i18n.DateTimePatterns_lag", "goog.i18n.DateTimePatterns_lag_TZ", "goog.i18n.DateTimePatterns_lg", "goog.i18n.DateTimePatterns_lg_UG", "goog.i18n.DateTimePatterns_ln_AO", "goog.i18n.DateTimePatterns_ln_CD", "goog.i18n.DateTimePatterns_ln_CF", "goog.i18n.DateTimePatterns_ln_CG", "goog.i18n.DateTimePatterns_lo", "goog.i18n.DateTimePatterns_lo_LA", "goog.i18n.DateTimePatterns_lt_LT", "goog.i18n.DateTimePatterns_lu",
"goog.i18n.DateTimePatterns_lu_CD", "goog.i18n.DateTimePatterns_luo", "goog.i18n.DateTimePatterns_luo_KE", "goog.i18n.DateTimePatterns_luy", "goog.i18n.DateTimePatterns_luy_KE", "goog.i18n.DateTimePatterns_lv_LV", "goog.i18n.DateTimePatterns_mas", "goog.i18n.DateTimePatterns_mas_KE", "goog.i18n.DateTimePatterns_mas_TZ", "goog.i18n.DateTimePatterns_mer", "goog.i18n.DateTimePatterns_mer_KE", "goog.i18n.DateTimePatterns_mfe", "goog.i18n.DateTimePatterns_mfe_MU", "goog.i18n.DateTimePatterns_mg", "goog.i18n.DateTimePatterns_mg_MG",
"goog.i18n.DateTimePatterns_mgh", "goog.i18n.DateTimePatterns_mgh_MZ", "goog.i18n.DateTimePatterns_mgo", "goog.i18n.DateTimePatterns_mgo_CM", "goog.i18n.DateTimePatterns_mk", "goog.i18n.DateTimePatterns_mk_MK", "goog.i18n.DateTimePatterns_ml_IN", "goog.i18n.DateTimePatterns_mn", "goog.i18n.DateTimePatterns_mn_Cyrl", "goog.i18n.DateTimePatterns_mn_Cyrl_MN", "goog.i18n.DateTimePatterns_mr_IN", "goog.i18n.DateTimePatterns_ms_Latn", "goog.i18n.DateTimePatterns_ms_Latn_BN", "goog.i18n.DateTimePatterns_ms_Latn_MY",
"goog.i18n.DateTimePatterns_ms_Latn_SG", "goog.i18n.DateTimePatterns_mt_MT", "goog.i18n.DateTimePatterns_mua", "goog.i18n.DateTimePatterns_mua_CM", "goog.i18n.DateTimePatterns_my", "goog.i18n.DateTimePatterns_my_MM", "goog.i18n.DateTimePatterns_naq", "goog.i18n.DateTimePatterns_naq_NA", "goog.i18n.DateTimePatterns_nb_NO", "goog.i18n.DateTimePatterns_nd", "goog.i18n.DateTimePatterns_nd_ZW", "goog.i18n.DateTimePatterns_ne", "goog.i18n.DateTimePatterns_ne_IN", "goog.i18n.DateTimePatterns_ne_NP", "goog.i18n.DateTimePatterns_nl_AW",
"goog.i18n.DateTimePatterns_nl_BE", "goog.i18n.DateTimePatterns_nl_CW", "goog.i18n.DateTimePatterns_nl_NL", "goog.i18n.DateTimePatterns_nl_SR", "goog.i18n.DateTimePatterns_nl_SX", "goog.i18n.DateTimePatterns_nmg", "goog.i18n.DateTimePatterns_nmg_CM", "goog.i18n.DateTimePatterns_nn", "goog.i18n.DateTimePatterns_nn_NO", "goog.i18n.DateTimePatterns_nus", "goog.i18n.DateTimePatterns_nus_SD", "goog.i18n.DateTimePatterns_nyn", "goog.i18n.DateTimePatterns_nyn_UG", "goog.i18n.DateTimePatterns_om", "goog.i18n.DateTimePatterns_om_ET",
"goog.i18n.DateTimePatterns_om_KE", "goog.i18n.DateTimePatterns_or_IN", "goog.i18n.DateTimePatterns_pa", "goog.i18n.DateTimePatterns_pa_Arab", "goog.i18n.DateTimePatterns_pa_Arab_PK", "goog.i18n.DateTimePatterns_pa_Guru", "goog.i18n.DateTimePatterns_pa_Guru_IN", "goog.i18n.DateTimePatterns_pl_PL", "goog.i18n.DateTimePatterns_ps", "goog.i18n.DateTimePatterns_ps_AF", "goog.i18n.DateTimePatterns_pt_AO", "goog.i18n.DateTimePatterns_pt_CV", "goog.i18n.DateTimePatterns_pt_GW", "goog.i18n.DateTimePatterns_pt_MO",
"goog.i18n.DateTimePatterns_pt_MZ", "goog.i18n.DateTimePatterns_pt_ST", "goog.i18n.DateTimePatterns_pt_TL", "goog.i18n.DateTimePatterns_rm", "goog.i18n.DateTimePatterns_rm_CH", "goog.i18n.DateTimePatterns_rn", "goog.i18n.DateTimePatterns_rn_BI", "goog.i18n.DateTimePatterns_ro_MD", "goog.i18n.DateTimePatterns_ro_RO", "goog.i18n.DateTimePatterns_rof", "goog.i18n.DateTimePatterns_rof_TZ", "goog.i18n.DateTimePatterns_ru_BY", "goog.i18n.DateTimePatterns_ru_KG", "goog.i18n.DateTimePatterns_ru_KZ", "goog.i18n.DateTimePatterns_ru_MD",
"goog.i18n.DateTimePatterns_ru_RU", "goog.i18n.DateTimePatterns_ru_UA", "goog.i18n.DateTimePatterns_rw", "goog.i18n.DateTimePatterns_rw_RW", "goog.i18n.DateTimePatterns_rwk", "goog.i18n.DateTimePatterns_rwk_TZ", "goog.i18n.DateTimePatterns_saq", "goog.i18n.DateTimePatterns_saq_KE", "goog.i18n.DateTimePatterns_sbp", "goog.i18n.DateTimePatterns_sbp_TZ", "goog.i18n.DateTimePatterns_seh", "goog.i18n.DateTimePatterns_seh_MZ", "goog.i18n.DateTimePatterns_ses", "goog.i18n.DateTimePatterns_ses_ML", "goog.i18n.DateTimePatterns_sg",
"goog.i18n.DateTimePatterns_sg_CF", "goog.i18n.DateTimePatterns_shi", "goog.i18n.DateTimePatterns_shi_Latn", "goog.i18n.DateTimePatterns_shi_Latn_MA", "goog.i18n.DateTimePatterns_shi_Tfng", "goog.i18n.DateTimePatterns_shi_Tfng_MA", "goog.i18n.DateTimePatterns_si", "goog.i18n.DateTimePatterns_si_LK", "goog.i18n.DateTimePatterns_sk_SK", "goog.i18n.DateTimePatterns_sl_SI", "goog.i18n.DateTimePatterns_sn", "goog.i18n.DateTimePatterns_sn_ZW", "goog.i18n.DateTimePatterns_so", "goog.i18n.DateTimePatterns_so_DJ",
"goog.i18n.DateTimePatterns_so_ET", "goog.i18n.DateTimePatterns_so_KE", "goog.i18n.DateTimePatterns_so_SO", "goog.i18n.DateTimePatterns_sq_AL", "goog.i18n.DateTimePatterns_sq_MK", "goog.i18n.DateTimePatterns_sr_Cyrl", "goog.i18n.DateTimePatterns_sr_Cyrl_BA", "goog.i18n.DateTimePatterns_sr_Cyrl_ME", "goog.i18n.DateTimePatterns_sr_Cyrl_RS", "goog.i18n.DateTimePatterns_sr_Latn", "goog.i18n.DateTimePatterns_sr_Latn_BA", "goog.i18n.DateTimePatterns_sr_Latn_ME", "goog.i18n.DateTimePatterns_sr_Latn_RS",
"goog.i18n.DateTimePatterns_sv_AX", "goog.i18n.DateTimePatterns_sv_FI", "goog.i18n.DateTimePatterns_sv_SE", "goog.i18n.DateTimePatterns_sw_KE", "goog.i18n.DateTimePatterns_sw_TZ", "goog.i18n.DateTimePatterns_sw_UG", "goog.i18n.DateTimePatterns_swc", "goog.i18n.DateTimePatterns_swc_CD", "goog.i18n.DateTimePatterns_ta_IN", "goog.i18n.DateTimePatterns_ta_LK", "goog.i18n.DateTimePatterns_ta_MY", "goog.i18n.DateTimePatterns_ta_SG", "goog.i18n.DateTimePatterns_te_IN", "goog.i18n.DateTimePatterns_teo",
"goog.i18n.DateTimePatterns_teo_KE", "goog.i18n.DateTimePatterns_teo_UG", "goog.i18n.DateTimePatterns_th_TH", "goog.i18n.DateTimePatterns_ti", "goog.i18n.DateTimePatterns_ti_ER", "goog.i18n.DateTimePatterns_ti_ET", "goog.i18n.DateTimePatterns_to", "goog.i18n.DateTimePatterns_to_TO", "goog.i18n.DateTimePatterns_tr_CY", "goog.i18n.DateTimePatterns_tr_TR", "goog.i18n.DateTimePatterns_twq", "goog.i18n.DateTimePatterns_twq_NE", "goog.i18n.DateTimePatterns_tzm", "goog.i18n.DateTimePatterns_tzm_Latn", "goog.i18n.DateTimePatterns_tzm_Latn_MA",
"goog.i18n.DateTimePatterns_uk_UA", "goog.i18n.DateTimePatterns_ur_IN", "goog.i18n.DateTimePatterns_ur_PK", "goog.i18n.DateTimePatterns_uz", "goog.i18n.DateTimePatterns_uz_Arab", "goog.i18n.DateTimePatterns_uz_Arab_AF", "goog.i18n.DateTimePatterns_uz_Cyrl", "goog.i18n.DateTimePatterns_uz_Cyrl_UZ", "goog.i18n.DateTimePatterns_uz_Latn", "goog.i18n.DateTimePatterns_uz_Latn_UZ", "goog.i18n.DateTimePatterns_vai", "goog.i18n.DateTimePatterns_vai_Latn", "goog.i18n.DateTimePatterns_vai_Latn_LR", "goog.i18n.DateTimePatterns_vai_Vaii",
"goog.i18n.DateTimePatterns_vai_Vaii_LR", "goog.i18n.DateTimePatterns_vi_VN", "goog.i18n.DateTimePatterns_vun", "goog.i18n.DateTimePatterns_vun_TZ", "goog.i18n.DateTimePatterns_xog", "goog.i18n.DateTimePatterns_xog_UG", "goog.i18n.DateTimePatterns_yav", "goog.i18n.DateTimePatterns_yav_CM", "goog.i18n.DateTimePatterns_yo", "goog.i18n.DateTimePatterns_yo_NG", "goog.i18n.DateTimePatterns_zh_Hans", "goog.i18n.DateTimePatterns_zh_Hans_CN", "goog.i18n.DateTimePatterns_zh_Hans_HK", "goog.i18n.DateTimePatterns_zh_Hans_MO",
"goog.i18n.DateTimePatterns_zh_Hans_SG", "goog.i18n.DateTimePatterns_zh_Hant", "goog.i18n.DateTimePatterns_zh_Hant_HK", "goog.i18n.DateTimePatterns_zh_Hant_MO", "goog.i18n.DateTimePatterns_zh_Hant_TW", "goog.i18n.DateTimePatterns_zu_ZA"], ["goog.i18n.DateTimePatterns"]);
goog.addDependency("/closure/goog/i18n/datetimesymbols.js", ["goog.i18n.DateTimeSymbols", "goog.i18n.DateTimeSymbols_af", "goog.i18n.DateTimeSymbols_am", "goog.i18n.DateTimeSymbols_ar", "goog.i18n.DateTimeSymbols_bg", "goog.i18n.DateTimeSymbols_bn", "goog.i18n.DateTimeSymbols_br", "goog.i18n.DateTimeSymbols_ca", "goog.i18n.DateTimeSymbols_chr", "goog.i18n.DateTimeSymbols_cs", "goog.i18n.DateTimeSymbols_cy", "goog.i18n.DateTimeSymbols_da", "goog.i18n.DateTimeSymbols_de", "goog.i18n.DateTimeSymbols_de_AT",
"goog.i18n.DateTimeSymbols_de_CH", "goog.i18n.DateTimeSymbols_el", "goog.i18n.DateTimeSymbols_en", "goog.i18n.DateTimeSymbols_en_AU", "goog.i18n.DateTimeSymbols_en_GB", "goog.i18n.DateTimeSymbols_en_IE", "goog.i18n.DateTimeSymbols_en_IN", "goog.i18n.DateTimeSymbols_en_ISO", "goog.i18n.DateTimeSymbols_en_SG", "goog.i18n.DateTimeSymbols_en_US", "goog.i18n.DateTimeSymbols_en_ZA", "goog.i18n.DateTimeSymbols_es", "goog.i18n.DateTimeSymbols_es_419", "goog.i18n.DateTimeSymbols_es_ES", "goog.i18n.DateTimeSymbols_et",
"goog.i18n.DateTimeSymbols_eu", "goog.i18n.DateTimeSymbols_fa", "goog.i18n.DateTimeSymbols_fi", "goog.i18n.DateTimeSymbols_fil", "goog.i18n.DateTimeSymbols_fr", "goog.i18n.DateTimeSymbols_fr_CA", "goog.i18n.DateTimeSymbols_gl", "goog.i18n.DateTimeSymbols_gsw", "goog.i18n.DateTimeSymbols_gu", "goog.i18n.DateTimeSymbols_haw", "goog.i18n.DateTimeSymbols_he", "goog.i18n.DateTimeSymbols_hi", "goog.i18n.DateTimeSymbols_hr", "goog.i18n.DateTimeSymbols_hu", "goog.i18n.DateTimeSymbols_id", "goog.i18n.DateTimeSymbols_in",
"goog.i18n.DateTimeSymbols_is", "goog.i18n.DateTimeSymbols_it", "goog.i18n.DateTimeSymbols_iw", "goog.i18n.DateTimeSymbols_ja", "goog.i18n.DateTimeSymbols_kn", "goog.i18n.DateTimeSymbols_ko", "goog.i18n.DateTimeSymbols_ln", "goog.i18n.DateTimeSymbols_lt", "goog.i18n.DateTimeSymbols_lv", "goog.i18n.DateTimeSymbols_ml", "goog.i18n.DateTimeSymbols_mr", "goog.i18n.DateTimeSymbols_ms", "goog.i18n.DateTimeSymbols_mt", "goog.i18n.DateTimeSymbols_nb", "goog.i18n.DateTimeSymbols_nl", "goog.i18n.DateTimeSymbols_no",
"goog.i18n.DateTimeSymbols_or", "goog.i18n.DateTimeSymbols_pl", "goog.i18n.DateTimeSymbols_pt", "goog.i18n.DateTimeSymbols_pt_BR", "goog.i18n.DateTimeSymbols_pt_PT", "goog.i18n.DateTimeSymbols_ro", "goog.i18n.DateTimeSymbols_ru", "goog.i18n.DateTimeSymbols_sk", "goog.i18n.DateTimeSymbols_sl", "goog.i18n.DateTimeSymbols_sq", "goog.i18n.DateTimeSymbols_sr", "goog.i18n.DateTimeSymbols_sv", "goog.i18n.DateTimeSymbols_sw", "goog.i18n.DateTimeSymbols_ta", "goog.i18n.DateTimeSymbols_te", "goog.i18n.DateTimeSymbols_th",
"goog.i18n.DateTimeSymbols_tl", "goog.i18n.DateTimeSymbols_tr", "goog.i18n.DateTimeSymbols_uk", "goog.i18n.DateTimeSymbols_ur", "goog.i18n.DateTimeSymbols_vi", "goog.i18n.DateTimeSymbols_zh", "goog.i18n.DateTimeSymbols_zh_CN", "goog.i18n.DateTimeSymbols_zh_HK", "goog.i18n.DateTimeSymbols_zh_TW", "goog.i18n.DateTimeSymbols_zu"], []);
goog.addDependency("/closure/goog/i18n/datetimesymbolsext.js", ["goog.i18n.DateTimeSymbolsExt", "goog.i18n.DateTimeSymbols_aa", "goog.i18n.DateTimeSymbols_aa_DJ", "goog.i18n.DateTimeSymbols_aa_ER", "goog.i18n.DateTimeSymbols_aa_ET", "goog.i18n.DateTimeSymbols_af_NA", "goog.i18n.DateTimeSymbols_af_ZA", "goog.i18n.DateTimeSymbols_agq", "goog.i18n.DateTimeSymbols_agq_CM", "goog.i18n.DateTimeSymbols_ak", "goog.i18n.DateTimeSymbols_ak_GH", "goog.i18n.DateTimeSymbols_am_ET", "goog.i18n.DateTimeSymbols_ar_001",
"goog.i18n.DateTimeSymbols_ar_AE", "goog.i18n.DateTimeSymbols_ar_BH", "goog.i18n.DateTimeSymbols_ar_DJ", "goog.i18n.DateTimeSymbols_ar_DZ", "goog.i18n.DateTimeSymbols_ar_EG", "goog.i18n.DateTimeSymbols_ar_EH", "goog.i18n.DateTimeSymbols_ar_ER", "goog.i18n.DateTimeSymbols_ar_IL", "goog.i18n.DateTimeSymbols_ar_IQ", "goog.i18n.DateTimeSymbols_ar_JO", "goog.i18n.DateTimeSymbols_ar_KM", "goog.i18n.DateTimeSymbols_ar_KW", "goog.i18n.DateTimeSymbols_ar_LB", "goog.i18n.DateTimeSymbols_ar_LY", "goog.i18n.DateTimeSymbols_ar_MA",
"goog.i18n.DateTimeSymbols_ar_MR", "goog.i18n.DateTimeSymbols_ar_OM", "goog.i18n.DateTimeSymbols_ar_PS", "goog.i18n.DateTimeSymbols_ar_QA", "goog.i18n.DateTimeSymbols_ar_SA", "goog.i18n.DateTimeSymbols_ar_SD", "goog.i18n.DateTimeSymbols_ar_SO", "goog.i18n.DateTimeSymbols_ar_SY", "goog.i18n.DateTimeSymbols_ar_TD", "goog.i18n.DateTimeSymbols_ar_TN", "goog.i18n.DateTimeSymbols_ar_YE", "goog.i18n.DateTimeSymbols_as", "goog.i18n.DateTimeSymbols_as_IN", "goog.i18n.DateTimeSymbols_asa", "goog.i18n.DateTimeSymbols_asa_TZ",
"goog.i18n.DateTimeSymbols_ast", "goog.i18n.DateTimeSymbols_ast_ES", "goog.i18n.DateTimeSymbols_az", "goog.i18n.DateTimeSymbols_az_Cyrl", "goog.i18n.DateTimeSymbols_az_Cyrl_AZ", "goog.i18n.DateTimeSymbols_az_Latn", "goog.i18n.DateTimeSymbols_az_Latn_AZ", "goog.i18n.DateTimeSymbols_bas", "goog.i18n.DateTimeSymbols_bas_CM", "goog.i18n.DateTimeSymbols_be", "goog.i18n.DateTimeSymbols_be_BY", "goog.i18n.DateTimeSymbols_bem", "goog.i18n.DateTimeSymbols_bem_ZM", "goog.i18n.DateTimeSymbols_bez", "goog.i18n.DateTimeSymbols_bez_TZ",
"goog.i18n.DateTimeSymbols_bg_BG", "goog.i18n.DateTimeSymbols_bm", "goog.i18n.DateTimeSymbols_bm_ML", "goog.i18n.DateTimeSymbols_bn_BD", "goog.i18n.DateTimeSymbols_bn_IN", "goog.i18n.DateTimeSymbols_bo", "goog.i18n.DateTimeSymbols_bo_CN", "goog.i18n.DateTimeSymbols_bo_IN", "goog.i18n.DateTimeSymbols_br_FR", "goog.i18n.DateTimeSymbols_brx", "goog.i18n.DateTimeSymbols_brx_IN", "goog.i18n.DateTimeSymbols_bs", "goog.i18n.DateTimeSymbols_bs_Cyrl", "goog.i18n.DateTimeSymbols_bs_Cyrl_BA", "goog.i18n.DateTimeSymbols_bs_Latn",
"goog.i18n.DateTimeSymbols_bs_Latn_BA", "goog.i18n.DateTimeSymbols_byn", "goog.i18n.DateTimeSymbols_byn_ER", "goog.i18n.DateTimeSymbols_ca_AD", "goog.i18n.DateTimeSymbols_ca_ES", "goog.i18n.DateTimeSymbols_cgg", "goog.i18n.DateTimeSymbols_cgg_UG", "goog.i18n.DateTimeSymbols_chr_US", "goog.i18n.DateTimeSymbols_ckb", "goog.i18n.DateTimeSymbols_ckb_Arab", "goog.i18n.DateTimeSymbols_ckb_Arab_IQ", "goog.i18n.DateTimeSymbols_ckb_Arab_IR", "goog.i18n.DateTimeSymbols_ckb_IQ", "goog.i18n.DateTimeSymbols_ckb_IR",
"goog.i18n.DateTimeSymbols_ckb_Latn", "goog.i18n.DateTimeSymbols_ckb_Latn_IQ", "goog.i18n.DateTimeSymbols_cs_CZ", "goog.i18n.DateTimeSymbols_cy_GB", "goog.i18n.DateTimeSymbols_da_DK", "goog.i18n.DateTimeSymbols_dav", "goog.i18n.DateTimeSymbols_dav_KE", "goog.i18n.DateTimeSymbols_de_BE", "goog.i18n.DateTimeSymbols_de_DE", "goog.i18n.DateTimeSymbols_de_LI", "goog.i18n.DateTimeSymbols_de_LU", "goog.i18n.DateTimeSymbols_dje", "goog.i18n.DateTimeSymbols_dje_NE", "goog.i18n.DateTimeSymbols_dua", "goog.i18n.DateTimeSymbols_dua_CM",
"goog.i18n.DateTimeSymbols_dyo", "goog.i18n.DateTimeSymbols_dyo_SN", "goog.i18n.DateTimeSymbols_dz", "goog.i18n.DateTimeSymbols_dz_BT", "goog.i18n.DateTimeSymbols_ebu", "goog.i18n.DateTimeSymbols_ebu_KE", "goog.i18n.DateTimeSymbols_ee", "goog.i18n.DateTimeSymbols_ee_GH", "goog.i18n.DateTimeSymbols_ee_TG", "goog.i18n.DateTimeSymbols_el_CY", "goog.i18n.DateTimeSymbols_el_GR", "goog.i18n.DateTimeSymbols_en_150", "goog.i18n.DateTimeSymbols_en_AG", "goog.i18n.DateTimeSymbols_en_AS", "goog.i18n.DateTimeSymbols_en_BB",
"goog.i18n.DateTimeSymbols_en_BE", "goog.i18n.DateTimeSymbols_en_BM", "goog.i18n.DateTimeSymbols_en_BS", "goog.i18n.DateTimeSymbols_en_BW", "goog.i18n.DateTimeSymbols_en_BZ", "goog.i18n.DateTimeSymbols_en_CA", "goog.i18n.DateTimeSymbols_en_CM", "goog.i18n.DateTimeSymbols_en_DM", "goog.i18n.DateTimeSymbols_en_Dsrt", "goog.i18n.DateTimeSymbols_en_Dsrt_US", "goog.i18n.DateTimeSymbols_en_FJ", "goog.i18n.DateTimeSymbols_en_FM", "goog.i18n.DateTimeSymbols_en_GD", "goog.i18n.DateTimeSymbols_en_GG", "goog.i18n.DateTimeSymbols_en_GH",
"goog.i18n.DateTimeSymbols_en_GI", "goog.i18n.DateTimeSymbols_en_GM", "goog.i18n.DateTimeSymbols_en_GU", "goog.i18n.DateTimeSymbols_en_GY", "goog.i18n.DateTimeSymbols_en_HK", "goog.i18n.DateTimeSymbols_en_IM", "goog.i18n.DateTimeSymbols_en_JE", "goog.i18n.DateTimeSymbols_en_JM", "goog.i18n.DateTimeSymbols_en_KE", "goog.i18n.DateTimeSymbols_en_KI", "goog.i18n.DateTimeSymbols_en_KN", "goog.i18n.DateTimeSymbols_en_KY", "goog.i18n.DateTimeSymbols_en_LC", "goog.i18n.DateTimeSymbols_en_LR", "goog.i18n.DateTimeSymbols_en_LS",
"goog.i18n.DateTimeSymbols_en_MG", "goog.i18n.DateTimeSymbols_en_MH", "goog.i18n.DateTimeSymbols_en_MP", "goog.i18n.DateTimeSymbols_en_MT", "goog.i18n.DateTimeSymbols_en_MU", "goog.i18n.DateTimeSymbols_en_MW", "goog.i18n.DateTimeSymbols_en_NA", "goog.i18n.DateTimeSymbols_en_NG", "goog.i18n.DateTimeSymbols_en_NZ", "goog.i18n.DateTimeSymbols_en_PG", "goog.i18n.DateTimeSymbols_en_PH", "goog.i18n.DateTimeSymbols_en_PK", "goog.i18n.DateTimeSymbols_en_PR", "goog.i18n.DateTimeSymbols_en_PW", "goog.i18n.DateTimeSymbols_en_SB",
"goog.i18n.DateTimeSymbols_en_SC", "goog.i18n.DateTimeSymbols_en_SL", "goog.i18n.DateTimeSymbols_en_SS", "goog.i18n.DateTimeSymbols_en_SZ", "goog.i18n.DateTimeSymbols_en_TC", "goog.i18n.DateTimeSymbols_en_TO", "goog.i18n.DateTimeSymbols_en_TT", "goog.i18n.DateTimeSymbols_en_TZ", "goog.i18n.DateTimeSymbols_en_UG", "goog.i18n.DateTimeSymbols_en_UM", "goog.i18n.DateTimeSymbols_en_VC", "goog.i18n.DateTimeSymbols_en_VG", "goog.i18n.DateTimeSymbols_en_VI", "goog.i18n.DateTimeSymbols_en_VU", "goog.i18n.DateTimeSymbols_en_WS",
"goog.i18n.DateTimeSymbols_en_ZM", "goog.i18n.DateTimeSymbols_en_ZW", "goog.i18n.DateTimeSymbols_eo", "goog.i18n.DateTimeSymbols_es_AR", "goog.i18n.DateTimeSymbols_es_BO", "goog.i18n.DateTimeSymbols_es_CL", "goog.i18n.DateTimeSymbols_es_CO", "goog.i18n.DateTimeSymbols_es_CR", "goog.i18n.DateTimeSymbols_es_CU", "goog.i18n.DateTimeSymbols_es_DO", "goog.i18n.DateTimeSymbols_es_EA", "goog.i18n.DateTimeSymbols_es_EC", "goog.i18n.DateTimeSymbols_es_GQ", "goog.i18n.DateTimeSymbols_es_GT", "goog.i18n.DateTimeSymbols_es_HN",
"goog.i18n.DateTimeSymbols_es_IC", "goog.i18n.DateTimeSymbols_es_MX", "goog.i18n.DateTimeSymbols_es_NI", "goog.i18n.DateTimeSymbols_es_PA", "goog.i18n.DateTimeSymbols_es_PE", "goog.i18n.DateTimeSymbols_es_PH", "goog.i18n.DateTimeSymbols_es_PR", "goog.i18n.DateTimeSymbols_es_PY", "goog.i18n.DateTimeSymbols_es_SV", "goog.i18n.DateTimeSymbols_es_US", "goog.i18n.DateTimeSymbols_es_UY", "goog.i18n.DateTimeSymbols_es_VE", "goog.i18n.DateTimeSymbols_et_EE", "goog.i18n.DateTimeSymbols_eu_ES", "goog.i18n.DateTimeSymbols_ewo",
"goog.i18n.DateTimeSymbols_ewo_CM", "goog.i18n.DateTimeSymbols_fa_AF", "goog.i18n.DateTimeSymbols_fa_IR", "goog.i18n.DateTimeSymbols_ff", "goog.i18n.DateTimeSymbols_ff_SN", "goog.i18n.DateTimeSymbols_fi_FI", "goog.i18n.DateTimeSymbols_fil_PH", "goog.i18n.DateTimeSymbols_fo", "goog.i18n.DateTimeSymbols_fo_FO", "goog.i18n.DateTimeSymbols_fr_BE", "goog.i18n.DateTimeSymbols_fr_BF", "goog.i18n.DateTimeSymbols_fr_BI", "goog.i18n.DateTimeSymbols_fr_BJ", "goog.i18n.DateTimeSymbols_fr_BL", "goog.i18n.DateTimeSymbols_fr_CD",
"goog.i18n.DateTimeSymbols_fr_CF", "goog.i18n.DateTimeSymbols_fr_CG", "goog.i18n.DateTimeSymbols_fr_CH", "goog.i18n.DateTimeSymbols_fr_CI", "goog.i18n.DateTimeSymbols_fr_CM", "goog.i18n.DateTimeSymbols_fr_DJ", "goog.i18n.DateTimeSymbols_fr_DZ", "goog.i18n.DateTimeSymbols_fr_FR", "goog.i18n.DateTimeSymbols_fr_GA", "goog.i18n.DateTimeSymbols_fr_GF", "goog.i18n.DateTimeSymbols_fr_GN", "goog.i18n.DateTimeSymbols_fr_GP", "goog.i18n.DateTimeSymbols_fr_GQ", "goog.i18n.DateTimeSymbols_fr_HT", "goog.i18n.DateTimeSymbols_fr_KM",
"goog.i18n.DateTimeSymbols_fr_LU", "goog.i18n.DateTimeSymbols_fr_MA", "goog.i18n.DateTimeSymbols_fr_MC", "goog.i18n.DateTimeSymbols_fr_MF", "goog.i18n.DateTimeSymbols_fr_MG", "goog.i18n.DateTimeSymbols_fr_ML", "goog.i18n.DateTimeSymbols_fr_MQ", "goog.i18n.DateTimeSymbols_fr_MR", "goog.i18n.DateTimeSymbols_fr_MU", "goog.i18n.DateTimeSymbols_fr_NC", "goog.i18n.DateTimeSymbols_fr_NE", "goog.i18n.DateTimeSymbols_fr_PF", "goog.i18n.DateTimeSymbols_fr_RE", "goog.i18n.DateTimeSymbols_fr_RW", "goog.i18n.DateTimeSymbols_fr_SC",
"goog.i18n.DateTimeSymbols_fr_SN", "goog.i18n.DateTimeSymbols_fr_SY", "goog.i18n.DateTimeSymbols_fr_TD", "goog.i18n.DateTimeSymbols_fr_TG", "goog.i18n.DateTimeSymbols_fr_TN", "goog.i18n.DateTimeSymbols_fr_VU", "goog.i18n.DateTimeSymbols_fr_YT", "goog.i18n.DateTimeSymbols_fur", "goog.i18n.DateTimeSymbols_fur_IT", "goog.i18n.DateTimeSymbols_ga", "goog.i18n.DateTimeSymbols_ga_IE", "goog.i18n.DateTimeSymbols_gd", "goog.i18n.DateTimeSymbols_gd_GB", "goog.i18n.DateTimeSymbols_gl_ES", "goog.i18n.DateTimeSymbols_gsw_CH",
"goog.i18n.DateTimeSymbols_gu_IN", "goog.i18n.DateTimeSymbols_guz", "goog.i18n.DateTimeSymbols_guz_KE", "goog.i18n.DateTimeSymbols_gv", "goog.i18n.DateTimeSymbols_gv_GB", "goog.i18n.DateTimeSymbols_ha", "goog.i18n.DateTimeSymbols_ha_Latn", "goog.i18n.DateTimeSymbols_ha_Latn_GH", "goog.i18n.DateTimeSymbols_ha_Latn_NE", "goog.i18n.DateTimeSymbols_ha_Latn_NG", "goog.i18n.DateTimeSymbols_haw_US", "goog.i18n.DateTimeSymbols_he_IL", "goog.i18n.DateTimeSymbols_hi_IN", "goog.i18n.DateTimeSymbols_hr_BA",
"goog.i18n.DateTimeSymbols_hr_HR", "goog.i18n.DateTimeSymbols_hu_HU", "goog.i18n.DateTimeSymbols_hy", "goog.i18n.DateTimeSymbols_hy_AM", "goog.i18n.DateTimeSymbols_ia", "goog.i18n.DateTimeSymbols_ia_FR", "goog.i18n.DateTimeSymbols_id_ID", "goog.i18n.DateTimeSymbols_ig", "goog.i18n.DateTimeSymbols_ig_NG", "goog.i18n.DateTimeSymbols_ii", "goog.i18n.DateTimeSymbols_ii_CN", "goog.i18n.DateTimeSymbols_is_IS", "goog.i18n.DateTimeSymbols_it_CH", "goog.i18n.DateTimeSymbols_it_IT", "goog.i18n.DateTimeSymbols_it_SM",
"goog.i18n.DateTimeSymbols_ja_JP", "goog.i18n.DateTimeSymbols_jgo", "goog.i18n.DateTimeSymbols_jgo_CM", "goog.i18n.DateTimeSymbols_jmc", "goog.i18n.DateTimeSymbols_jmc_TZ", "goog.i18n.DateTimeSymbols_ka", "goog.i18n.DateTimeSymbols_ka_GE", "goog.i18n.DateTimeSymbols_kab", "goog.i18n.DateTimeSymbols_kab_DZ", "goog.i18n.DateTimeSymbols_kam", "goog.i18n.DateTimeSymbols_kam_KE", "goog.i18n.DateTimeSymbols_kde", "goog.i18n.DateTimeSymbols_kde_TZ", "goog.i18n.DateTimeSymbols_kea", "goog.i18n.DateTimeSymbols_kea_CV",
"goog.i18n.DateTimeSymbols_khq", "goog.i18n.DateTimeSymbols_khq_ML", "goog.i18n.DateTimeSymbols_ki", "goog.i18n.DateTimeSymbols_ki_KE", "goog.i18n.DateTimeSymbols_kk", "goog.i18n.DateTimeSymbols_kk_Cyrl", "goog.i18n.DateTimeSymbols_kk_Cyrl_KZ", "goog.i18n.DateTimeSymbols_kkj", "goog.i18n.DateTimeSymbols_kkj_CM", "goog.i18n.DateTimeSymbols_kl", "goog.i18n.DateTimeSymbols_kl_GL", "goog.i18n.DateTimeSymbols_kln", "goog.i18n.DateTimeSymbols_kln_KE", "goog.i18n.DateTimeSymbols_km", "goog.i18n.DateTimeSymbols_km_KH",
"goog.i18n.DateTimeSymbols_kn_IN", "goog.i18n.DateTimeSymbols_ko_KP", "goog.i18n.DateTimeSymbols_ko_KR", "goog.i18n.DateTimeSymbols_kok", "goog.i18n.DateTimeSymbols_kok_IN", "goog.i18n.DateTimeSymbols_ks", "goog.i18n.DateTimeSymbols_ks_Arab", "goog.i18n.DateTimeSymbols_ks_Arab_IN", "goog.i18n.DateTimeSymbols_ksb", "goog.i18n.DateTimeSymbols_ksb_TZ", "goog.i18n.DateTimeSymbols_ksf", "goog.i18n.DateTimeSymbols_ksf_CM", "goog.i18n.DateTimeSymbols_ksh", "goog.i18n.DateTimeSymbols_ksh_DE", "goog.i18n.DateTimeSymbols_kw",
"goog.i18n.DateTimeSymbols_kw_GB", "goog.i18n.DateTimeSymbols_ky", "goog.i18n.DateTimeSymbols_ky_KG", "goog.i18n.DateTimeSymbols_lag", "goog.i18n.DateTimeSymbols_lag_TZ", "goog.i18n.DateTimeSymbols_lg", "goog.i18n.DateTimeSymbols_lg_UG", "goog.i18n.DateTimeSymbols_ln_AO", "goog.i18n.DateTimeSymbols_ln_CD", "goog.i18n.DateTimeSymbols_ln_CF", "goog.i18n.DateTimeSymbols_ln_CG", "goog.i18n.DateTimeSymbols_lo", "goog.i18n.DateTimeSymbols_lo_LA", "goog.i18n.DateTimeSymbols_lt_LT", "goog.i18n.DateTimeSymbols_lu",
"goog.i18n.DateTimeSymbols_lu_CD", "goog.i18n.DateTimeSymbols_luo", "goog.i18n.DateTimeSymbols_luo_KE", "goog.i18n.DateTimeSymbols_luy", "goog.i18n.DateTimeSymbols_luy_KE", "goog.i18n.DateTimeSymbols_lv_LV", "goog.i18n.DateTimeSymbols_mas", "goog.i18n.DateTimeSymbols_mas_KE", "goog.i18n.DateTimeSymbols_mas_TZ", "goog.i18n.DateTimeSymbols_mer", "goog.i18n.DateTimeSymbols_mer_KE", "goog.i18n.DateTimeSymbols_mfe", "goog.i18n.DateTimeSymbols_mfe_MU", "goog.i18n.DateTimeSymbols_mg", "goog.i18n.DateTimeSymbols_mg_MG",
"goog.i18n.DateTimeSymbols_mgh", "goog.i18n.DateTimeSymbols_mgh_MZ", "goog.i18n.DateTimeSymbols_mgo", "goog.i18n.DateTimeSymbols_mgo_CM", "goog.i18n.DateTimeSymbols_mk", "goog.i18n.DateTimeSymbols_mk_MK", "goog.i18n.DateTimeSymbols_ml_IN", "goog.i18n.DateTimeSymbols_mn", "goog.i18n.DateTimeSymbols_mn_Cyrl", "goog.i18n.DateTimeSymbols_mn_Cyrl_MN", "goog.i18n.DateTimeSymbols_mr_IN", "goog.i18n.DateTimeSymbols_ms_Latn", "goog.i18n.DateTimeSymbols_ms_Latn_BN", "goog.i18n.DateTimeSymbols_ms_Latn_MY",
"goog.i18n.DateTimeSymbols_ms_Latn_SG", "goog.i18n.DateTimeSymbols_mt_MT", "goog.i18n.DateTimeSymbols_mua", "goog.i18n.DateTimeSymbols_mua_CM", "goog.i18n.DateTimeSymbols_my", "goog.i18n.DateTimeSymbols_my_MM", "goog.i18n.DateTimeSymbols_naq", "goog.i18n.DateTimeSymbols_naq_NA", "goog.i18n.DateTimeSymbols_nb_NO", "goog.i18n.DateTimeSymbols_nd", "goog.i18n.DateTimeSymbols_nd_ZW", "goog.i18n.DateTimeSymbols_ne", "goog.i18n.DateTimeSymbols_ne_IN", "goog.i18n.DateTimeSymbols_ne_NP", "goog.i18n.DateTimeSymbols_nl_AW",
"goog.i18n.DateTimeSymbols_nl_BE", "goog.i18n.DateTimeSymbols_nl_CW", "goog.i18n.DateTimeSymbols_nl_NL", "goog.i18n.DateTimeSymbols_nl_SR", "goog.i18n.DateTimeSymbols_nl_SX", "goog.i18n.DateTimeSymbols_nmg", "goog.i18n.DateTimeSymbols_nmg_CM", "goog.i18n.DateTimeSymbols_nn", "goog.i18n.DateTimeSymbols_nn_NO", "goog.i18n.DateTimeSymbols_nnh", "goog.i18n.DateTimeSymbols_nnh_CM", "goog.i18n.DateTimeSymbols_nr", "goog.i18n.DateTimeSymbols_nr_ZA", "goog.i18n.DateTimeSymbols_nso", "goog.i18n.DateTimeSymbols_nso_ZA",
"goog.i18n.DateTimeSymbols_nus", "goog.i18n.DateTimeSymbols_nus_SD", "goog.i18n.DateTimeSymbols_nyn", "goog.i18n.DateTimeSymbols_nyn_UG", "goog.i18n.DateTimeSymbols_om", "goog.i18n.DateTimeSymbols_om_ET", "goog.i18n.DateTimeSymbols_om_KE", "goog.i18n.DateTimeSymbols_or_IN", "goog.i18n.DateTimeSymbols_os", "goog.i18n.DateTimeSymbols_os_GE", "goog.i18n.DateTimeSymbols_os_RU", "goog.i18n.DateTimeSymbols_pa", "goog.i18n.DateTimeSymbols_pa_Arab", "goog.i18n.DateTimeSymbols_pa_Arab_PK", "goog.i18n.DateTimeSymbols_pa_Guru",
"goog.i18n.DateTimeSymbols_pa_Guru_IN", "goog.i18n.DateTimeSymbols_pl_PL", "goog.i18n.DateTimeSymbols_ps", "goog.i18n.DateTimeSymbols_ps_AF", "goog.i18n.DateTimeSymbols_pt_AO", "goog.i18n.DateTimeSymbols_pt_CV", "goog.i18n.DateTimeSymbols_pt_GW", "goog.i18n.DateTimeSymbols_pt_MO", "goog.i18n.DateTimeSymbols_pt_MZ", "goog.i18n.DateTimeSymbols_pt_ST", "goog.i18n.DateTimeSymbols_pt_TL", "goog.i18n.DateTimeSymbols_rm", "goog.i18n.DateTimeSymbols_rm_CH", "goog.i18n.DateTimeSymbols_rn", "goog.i18n.DateTimeSymbols_rn_BI",
"goog.i18n.DateTimeSymbols_ro_MD", "goog.i18n.DateTimeSymbols_ro_RO", "goog.i18n.DateTimeSymbols_rof", "goog.i18n.DateTimeSymbols_rof_TZ", "goog.i18n.DateTimeSymbols_ru_BY", "goog.i18n.DateTimeSymbols_ru_KG", "goog.i18n.DateTimeSymbols_ru_KZ", "goog.i18n.DateTimeSymbols_ru_MD", "goog.i18n.DateTimeSymbols_ru_RU", "goog.i18n.DateTimeSymbols_ru_UA", "goog.i18n.DateTimeSymbols_rw", "goog.i18n.DateTimeSymbols_rw_RW", "goog.i18n.DateTimeSymbols_rwk", "goog.i18n.DateTimeSymbols_rwk_TZ", "goog.i18n.DateTimeSymbols_sah",
"goog.i18n.DateTimeSymbols_sah_RU", "goog.i18n.DateTimeSymbols_saq", "goog.i18n.DateTimeSymbols_saq_KE", "goog.i18n.DateTimeSymbols_sbp", "goog.i18n.DateTimeSymbols_sbp_TZ", "goog.i18n.DateTimeSymbols_se", "goog.i18n.DateTimeSymbols_se_FI", "goog.i18n.DateTimeSymbols_se_NO", "goog.i18n.DateTimeSymbols_seh", "goog.i18n.DateTimeSymbols_seh_MZ", "goog.i18n.DateTimeSymbols_ses", "goog.i18n.DateTimeSymbols_ses_ML", "goog.i18n.DateTimeSymbols_sg", "goog.i18n.DateTimeSymbols_sg_CF", "goog.i18n.DateTimeSymbols_shi",
"goog.i18n.DateTimeSymbols_shi_Latn", "goog.i18n.DateTimeSymbols_shi_Latn_MA", "goog.i18n.DateTimeSymbols_shi_Tfng", "goog.i18n.DateTimeSymbols_shi_Tfng_MA", "goog.i18n.DateTimeSymbols_si", "goog.i18n.DateTimeSymbols_si_LK", "goog.i18n.DateTimeSymbols_sk_SK", "goog.i18n.DateTimeSymbols_sl_SI", "goog.i18n.DateTimeSymbols_sn", "goog.i18n.DateTimeSymbols_sn_ZW", "goog.i18n.DateTimeSymbols_so", "goog.i18n.DateTimeSymbols_so_DJ", "goog.i18n.DateTimeSymbols_so_ET", "goog.i18n.DateTimeSymbols_so_KE", "goog.i18n.DateTimeSymbols_so_SO",
"goog.i18n.DateTimeSymbols_sq_AL", "goog.i18n.DateTimeSymbols_sq_MK", "goog.i18n.DateTimeSymbols_sq_XK", "goog.i18n.DateTimeSymbols_sr_Cyrl", "goog.i18n.DateTimeSymbols_sr_Cyrl_BA", "goog.i18n.DateTimeSymbols_sr_Cyrl_ME", "goog.i18n.DateTimeSymbols_sr_Cyrl_RS", "goog.i18n.DateTimeSymbols_sr_Cyrl_XK", "goog.i18n.DateTimeSymbols_sr_Latn", "goog.i18n.DateTimeSymbols_sr_Latn_BA", "goog.i18n.DateTimeSymbols_sr_Latn_ME", "goog.i18n.DateTimeSymbols_sr_Latn_RS", "goog.i18n.DateTimeSymbols_sr_Latn_XK", "goog.i18n.DateTimeSymbols_ss",
"goog.i18n.DateTimeSymbols_ss_SZ", "goog.i18n.DateTimeSymbols_ss_ZA", "goog.i18n.DateTimeSymbols_ssy", "goog.i18n.DateTimeSymbols_ssy_ER", "goog.i18n.DateTimeSymbols_st", "goog.i18n.DateTimeSymbols_st_LS", "goog.i18n.DateTimeSymbols_st_ZA", "goog.i18n.DateTimeSymbols_sv_AX", "goog.i18n.DateTimeSymbols_sv_FI", "goog.i18n.DateTimeSymbols_sv_SE", "goog.i18n.DateTimeSymbols_sw_KE", "goog.i18n.DateTimeSymbols_sw_TZ", "goog.i18n.DateTimeSymbols_sw_UG", "goog.i18n.DateTimeSymbols_swc", "goog.i18n.DateTimeSymbols_swc_CD",
"goog.i18n.DateTimeSymbols_ta_IN", "goog.i18n.DateTimeSymbols_ta_LK", "goog.i18n.DateTimeSymbols_ta_MY", "goog.i18n.DateTimeSymbols_ta_SG", "goog.i18n.DateTimeSymbols_te_IN", "goog.i18n.DateTimeSymbols_teo", "goog.i18n.DateTimeSymbols_teo_KE", "goog.i18n.DateTimeSymbols_teo_UG", "goog.i18n.DateTimeSymbols_tg", "goog.i18n.DateTimeSymbols_tg_Cyrl", "goog.i18n.DateTimeSymbols_tg_Cyrl_TJ", "goog.i18n.DateTimeSymbols_th_TH", "goog.i18n.DateTimeSymbols_ti", "goog.i18n.DateTimeSymbols_ti_ER", "goog.i18n.DateTimeSymbols_ti_ET",
"goog.i18n.DateTimeSymbols_tig", "goog.i18n.DateTimeSymbols_tig_ER", "goog.i18n.DateTimeSymbols_tn", "goog.i18n.DateTimeSymbols_tn_BW", "goog.i18n.DateTimeSymbols_tn_ZA", "goog.i18n.DateTimeSymbols_to", "goog.i18n.DateTimeSymbols_to_TO", "goog.i18n.DateTimeSymbols_tr_CY", "goog.i18n.DateTimeSymbols_tr_TR", "goog.i18n.DateTimeSymbols_ts", "goog.i18n.DateTimeSymbols_ts_ZA", "goog.i18n.DateTimeSymbols_twq", "goog.i18n.DateTimeSymbols_twq_NE", "goog.i18n.DateTimeSymbols_tzm", "goog.i18n.DateTimeSymbols_tzm_Latn",
"goog.i18n.DateTimeSymbols_tzm_Latn_MA", "goog.i18n.DateTimeSymbols_uk_UA", "goog.i18n.DateTimeSymbols_ur_IN", "goog.i18n.DateTimeSymbols_ur_PK", "goog.i18n.DateTimeSymbols_uz", "goog.i18n.DateTimeSymbols_uz_Arab", "goog.i18n.DateTimeSymbols_uz_Arab_AF", "goog.i18n.DateTimeSymbols_uz_Cyrl", "goog.i18n.DateTimeSymbols_uz_Cyrl_UZ", "goog.i18n.DateTimeSymbols_uz_Latn", "goog.i18n.DateTimeSymbols_uz_Latn_UZ", "goog.i18n.DateTimeSymbols_vai", "goog.i18n.DateTimeSymbols_vai_Latn", "goog.i18n.DateTimeSymbols_vai_Latn_LR",
"goog.i18n.DateTimeSymbols_vai_Vaii", "goog.i18n.DateTimeSymbols_vai_Vaii_LR", "goog.i18n.DateTimeSymbols_ve", "goog.i18n.DateTimeSymbols_ve_ZA", "goog.i18n.DateTimeSymbols_vi_VN", "goog.i18n.DateTimeSymbols_vo", "goog.i18n.DateTimeSymbols_vun", "goog.i18n.DateTimeSymbols_vun_TZ", "goog.i18n.DateTimeSymbols_wae", "goog.i18n.DateTimeSymbols_wae_CH", "goog.i18n.DateTimeSymbols_wal", "goog.i18n.DateTimeSymbols_wal_ET", "goog.i18n.DateTimeSymbols_xh", "goog.i18n.DateTimeSymbols_xh_ZA", "goog.i18n.DateTimeSymbols_xog",
"goog.i18n.DateTimeSymbols_xog_UG", "goog.i18n.DateTimeSymbols_yav", "goog.i18n.DateTimeSymbols_yav_CM", "goog.i18n.DateTimeSymbols_yo", "goog.i18n.DateTimeSymbols_yo_NG", "goog.i18n.DateTimeSymbols_zh_Hans", "goog.i18n.DateTimeSymbols_zh_Hans_CN", "goog.i18n.DateTimeSymbols_zh_Hans_HK", "goog.i18n.DateTimeSymbols_zh_Hans_MO", "goog.i18n.DateTimeSymbols_zh_Hans_SG", "goog.i18n.DateTimeSymbols_zh_Hant", "goog.i18n.DateTimeSymbols_zh_Hant_HK", "goog.i18n.DateTimeSymbols_zh_Hant_MO", "goog.i18n.DateTimeSymbols_zh_Hant_TW",
"goog.i18n.DateTimeSymbols_zu_ZA"], ["goog.i18n.DateTimeSymbols"]);
goog.addDependency("/closure/goog/i18n/graphemebreak.js", ["goog.i18n.GraphemeBreak"], ["goog.structs.InversionMap"]);
goog.addDependency("/closure/goog/i18n/messageformat.js", ["goog.i18n.MessageFormat"], ["goog.asserts", "goog.i18n.NumberFormat", "goog.i18n.ordinalRules", "goog.i18n.pluralRules"]);
goog.addDependency("/closure/goog/i18n/mime.js", ["goog.i18n.mime", "goog.i18n.mime.encode"], ["goog.array"]);
goog.addDependency("/closure/goog/i18n/numberformat.js", ["goog.i18n.NumberFormat", "goog.i18n.NumberFormat.CurrencyStyle", "goog.i18n.NumberFormat.Format"], ["goog.asserts", "goog.i18n.CompactNumberFormatSymbols", "goog.i18n.NumberFormatSymbols", "goog.i18n.currency", "goog.math"]);
goog.addDependency("/closure/goog/i18n/numberformatsymbols.js", ["goog.i18n.NumberFormatSymbols", "goog.i18n.NumberFormatSymbols_af", "goog.i18n.NumberFormatSymbols_af_ZA", "goog.i18n.NumberFormatSymbols_am", "goog.i18n.NumberFormatSymbols_am_ET", "goog.i18n.NumberFormatSymbols_ar", "goog.i18n.NumberFormatSymbols_ar_001", "goog.i18n.NumberFormatSymbols_ar_EG", "goog.i18n.NumberFormatSymbols_bg", "goog.i18n.NumberFormatSymbols_bg_BG", "goog.i18n.NumberFormatSymbols_bn", "goog.i18n.NumberFormatSymbols_bn_BD",
"goog.i18n.NumberFormatSymbols_br", "goog.i18n.NumberFormatSymbols_br_FR", "goog.i18n.NumberFormatSymbols_ca", "goog.i18n.NumberFormatSymbols_ca_AD", "goog.i18n.NumberFormatSymbols_ca_ES", "goog.i18n.NumberFormatSymbols_chr", "goog.i18n.NumberFormatSymbols_chr_US", "goog.i18n.NumberFormatSymbols_cs", "goog.i18n.NumberFormatSymbols_cs_CZ", "goog.i18n.NumberFormatSymbols_cy", "goog.i18n.NumberFormatSymbols_cy_GB", "goog.i18n.NumberFormatSymbols_da", "goog.i18n.NumberFormatSymbols_da_DK", "goog.i18n.NumberFormatSymbols_de",
"goog.i18n.NumberFormatSymbols_de_AT", "goog.i18n.NumberFormatSymbols_de_BE", "goog.i18n.NumberFormatSymbols_de_CH", "goog.i18n.NumberFormatSymbols_de_DE", "goog.i18n.NumberFormatSymbols_de_LU", "goog.i18n.NumberFormatSymbols_el", "goog.i18n.NumberFormatSymbols_el_GR", "goog.i18n.NumberFormatSymbols_en", "goog.i18n.NumberFormatSymbols_en_AS", "goog.i18n.NumberFormatSymbols_en_AU", "goog.i18n.NumberFormatSymbols_en_Dsrt_US", "goog.i18n.NumberFormatSymbols_en_FM", "goog.i18n.NumberFormatSymbols_en_GB",
"goog.i18n.NumberFormatSymbols_en_GU", "goog.i18n.NumberFormatSymbols_en_IE", "goog.i18n.NumberFormatSymbols_en_IN", "goog.i18n.NumberFormatSymbols_en_MH", "goog.i18n.NumberFormatSymbols_en_MP", "goog.i18n.NumberFormatSymbols_en_PR", "goog.i18n.NumberFormatSymbols_en_PW", "goog.i18n.NumberFormatSymbols_en_SG", "goog.i18n.NumberFormatSymbols_en_TC", "goog.i18n.NumberFormatSymbols_en_UM", "goog.i18n.NumberFormatSymbols_en_US", "goog.i18n.NumberFormatSymbols_en_VG", "goog.i18n.NumberFormatSymbols_en_VI",
"goog.i18n.NumberFormatSymbols_en_ZA", "goog.i18n.NumberFormatSymbols_es", "goog.i18n.NumberFormatSymbols_es_419", "goog.i18n.NumberFormatSymbols_es_EA", "goog.i18n.NumberFormatSymbols_es_ES", "goog.i18n.NumberFormatSymbols_es_IC", "goog.i18n.NumberFormatSymbols_et", "goog.i18n.NumberFormatSymbols_et_EE", "goog.i18n.NumberFormatSymbols_eu", "goog.i18n.NumberFormatSymbols_eu_ES", "goog.i18n.NumberFormatSymbols_fa", "goog.i18n.NumberFormatSymbols_fa_IR", "goog.i18n.NumberFormatSymbols_fi", "goog.i18n.NumberFormatSymbols_fi_FI",
"goog.i18n.NumberFormatSymbols_fil", "goog.i18n.NumberFormatSymbols_fil_PH", "goog.i18n.NumberFormatSymbols_fr", "goog.i18n.NumberFormatSymbols_fr_BL", "goog.i18n.NumberFormatSymbols_fr_CA", "goog.i18n.NumberFormatSymbols_fr_FR", "goog.i18n.NumberFormatSymbols_fr_GF", "goog.i18n.NumberFormatSymbols_fr_GP", "goog.i18n.NumberFormatSymbols_fr_MC", "goog.i18n.NumberFormatSymbols_fr_MF", "goog.i18n.NumberFormatSymbols_fr_MQ", "goog.i18n.NumberFormatSymbols_fr_RE", "goog.i18n.NumberFormatSymbols_fr_YT",
"goog.i18n.NumberFormatSymbols_gl", "goog.i18n.NumberFormatSymbols_gl_ES", "goog.i18n.NumberFormatSymbols_gsw", "goog.i18n.NumberFormatSymbols_gsw_CH", "goog.i18n.NumberFormatSymbols_gu", "goog.i18n.NumberFormatSymbols_gu_IN", "goog.i18n.NumberFormatSymbols_haw", "goog.i18n.NumberFormatSymbols_haw_US", "goog.i18n.NumberFormatSymbols_he", "goog.i18n.NumberFormatSymbols_he_IL", "goog.i18n.NumberFormatSymbols_hi", "goog.i18n.NumberFormatSymbols_hi_IN", "goog.i18n.NumberFormatSymbols_hr", "goog.i18n.NumberFormatSymbols_hr_HR",
"goog.i18n.NumberFormatSymbols_hu", "goog.i18n.NumberFormatSymbols_hu_HU", "goog.i18n.NumberFormatSymbols_id", "goog.i18n.NumberFormatSymbols_id_ID", "goog.i18n.NumberFormatSymbols_in", "goog.i18n.NumberFormatSymbols_is", "goog.i18n.NumberFormatSymbols_is_IS", "goog.i18n.NumberFormatSymbols_it", "goog.i18n.NumberFormatSymbols_it_IT", "goog.i18n.NumberFormatSymbols_it_SM", "goog.i18n.NumberFormatSymbols_iw", "goog.i18n.NumberFormatSymbols_ja", "goog.i18n.NumberFormatSymbols_ja_JP", "goog.i18n.NumberFormatSymbols_kn",
"goog.i18n.NumberFormatSymbols_kn_IN", "goog.i18n.NumberFormatSymbols_ko", "goog.i18n.NumberFormatSymbols_ko_KR", "goog.i18n.NumberFormatSymbols_ln", "goog.i18n.NumberFormatSymbols_ln_CD", "goog.i18n.NumberFormatSymbols_lt", "goog.i18n.NumberFormatSymbols_lt_LT", "goog.i18n.NumberFormatSymbols_lv", "goog.i18n.NumberFormatSymbols_lv_LV", "goog.i18n.NumberFormatSymbols_ml", "goog.i18n.NumberFormatSymbols_ml_IN", "goog.i18n.NumberFormatSymbols_mr", "goog.i18n.NumberFormatSymbols_mr_IN", "goog.i18n.NumberFormatSymbols_ms",
"goog.i18n.NumberFormatSymbols_ms_Latn_MY", "goog.i18n.NumberFormatSymbols_mt", "goog.i18n.NumberFormatSymbols_mt_MT", "goog.i18n.NumberFormatSymbols_nb", "goog.i18n.NumberFormatSymbols_nb_NO", "goog.i18n.NumberFormatSymbols_nl", "goog.i18n.NumberFormatSymbols_nl_NL", "goog.i18n.NumberFormatSymbols_no", "goog.i18n.NumberFormatSymbols_or", "goog.i18n.NumberFormatSymbols_or_IN", "goog.i18n.NumberFormatSymbols_pl", "goog.i18n.NumberFormatSymbols_pl_PL", "goog.i18n.NumberFormatSymbols_pt", "goog.i18n.NumberFormatSymbols_pt_BR",
"goog.i18n.NumberFormatSymbols_pt_PT", "goog.i18n.NumberFormatSymbols_ro", "goog.i18n.NumberFormatSymbols_ro_RO", "goog.i18n.NumberFormatSymbols_ru", "goog.i18n.NumberFormatSymbols_ru_RU", "goog.i18n.NumberFormatSymbols_sk", "goog.i18n.NumberFormatSymbols_sk_SK", "goog.i18n.NumberFormatSymbols_sl", "goog.i18n.NumberFormatSymbols_sl_SI", "goog.i18n.NumberFormatSymbols_sq", "goog.i18n.NumberFormatSymbols_sq_AL", "goog.i18n.NumberFormatSymbols_sr", "goog.i18n.NumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.NumberFormatSymbols_sv",
"goog.i18n.NumberFormatSymbols_sv_SE", "goog.i18n.NumberFormatSymbols_sw", "goog.i18n.NumberFormatSymbols_sw_TZ", "goog.i18n.NumberFormatSymbols_ta", "goog.i18n.NumberFormatSymbols_ta_IN", "goog.i18n.NumberFormatSymbols_te", "goog.i18n.NumberFormatSymbols_te_IN", "goog.i18n.NumberFormatSymbols_th", "goog.i18n.NumberFormatSymbols_th_TH", "goog.i18n.NumberFormatSymbols_tl", "goog.i18n.NumberFormatSymbols_tr", "goog.i18n.NumberFormatSymbols_tr_TR", "goog.i18n.NumberFormatSymbols_uk", "goog.i18n.NumberFormatSymbols_uk_UA",
"goog.i18n.NumberFormatSymbols_ur", "goog.i18n.NumberFormatSymbols_ur_PK", "goog.i18n.NumberFormatSymbols_vi", "goog.i18n.NumberFormatSymbols_vi_VN", "goog.i18n.NumberFormatSymbols_zh", "goog.i18n.NumberFormatSymbols_zh_CN", "goog.i18n.NumberFormatSymbols_zh_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_CN", "goog.i18n.NumberFormatSymbols_zh_TW", "goog.i18n.NumberFormatSymbols_zu", "goog.i18n.NumberFormatSymbols_zu_ZA"], []);
goog.addDependency("/closure/goog/i18n/numberformatsymbolsext.js", ["goog.i18n.NumberFormatSymbolsExt", "goog.i18n.NumberFormatSymbols_aa", "goog.i18n.NumberFormatSymbols_aa_DJ", "goog.i18n.NumberFormatSymbols_aa_ER", "goog.i18n.NumberFormatSymbols_aa_ET", "goog.i18n.NumberFormatSymbols_af_NA", "goog.i18n.NumberFormatSymbols_agq", "goog.i18n.NumberFormatSymbols_agq_CM", "goog.i18n.NumberFormatSymbols_ak", "goog.i18n.NumberFormatSymbols_ak_GH", "goog.i18n.NumberFormatSymbols_ar_AE", "goog.i18n.NumberFormatSymbols_ar_BH",
"goog.i18n.NumberFormatSymbols_ar_DJ", "goog.i18n.NumberFormatSymbols_ar_DZ", "goog.i18n.NumberFormatSymbols_ar_EH", "goog.i18n.NumberFormatSymbols_ar_ER", "goog.i18n.NumberFormatSymbols_ar_IL", "goog.i18n.NumberFormatSymbols_ar_IQ", "goog.i18n.NumberFormatSymbols_ar_JO", "goog.i18n.NumberFormatSymbols_ar_KM", "goog.i18n.NumberFormatSymbols_ar_KW", "goog.i18n.NumberFormatSymbols_ar_LB", "goog.i18n.NumberFormatSymbols_ar_LY", "goog.i18n.NumberFormatSymbols_ar_MA", "goog.i18n.NumberFormatSymbols_ar_MR",
"goog.i18n.NumberFormatSymbols_ar_OM", "goog.i18n.NumberFormatSymbols_ar_PS", "goog.i18n.NumberFormatSymbols_ar_QA", "goog.i18n.NumberFormatSymbols_ar_SA", "goog.i18n.NumberFormatSymbols_ar_SD", "goog.i18n.NumberFormatSymbols_ar_SO", "goog.i18n.NumberFormatSymbols_ar_SY", "goog.i18n.NumberFormatSymbols_ar_TD", "goog.i18n.NumberFormatSymbols_ar_TN", "goog.i18n.NumberFormatSymbols_ar_YE", "goog.i18n.NumberFormatSymbols_as", "goog.i18n.NumberFormatSymbols_as_IN", "goog.i18n.NumberFormatSymbols_asa",
"goog.i18n.NumberFormatSymbols_asa_TZ", "goog.i18n.NumberFormatSymbols_ast", "goog.i18n.NumberFormatSymbols_ast_ES", "goog.i18n.NumberFormatSymbols_az", "goog.i18n.NumberFormatSymbols_az_Cyrl", "goog.i18n.NumberFormatSymbols_az_Cyrl_AZ", "goog.i18n.NumberFormatSymbols_az_Latn", "goog.i18n.NumberFormatSymbols_az_Latn_AZ", "goog.i18n.NumberFormatSymbols_bas", "goog.i18n.NumberFormatSymbols_bas_CM", "goog.i18n.NumberFormatSymbols_be", "goog.i18n.NumberFormatSymbols_be_BY", "goog.i18n.NumberFormatSymbols_bem",
"goog.i18n.NumberFormatSymbols_bem_ZM", "goog.i18n.NumberFormatSymbols_bez", "goog.i18n.NumberFormatSymbols_bez_TZ", "goog.i18n.NumberFormatSymbols_bm", "goog.i18n.NumberFormatSymbols_bm_ML", "goog.i18n.NumberFormatSymbols_bn_IN", "goog.i18n.NumberFormatSymbols_bo", "goog.i18n.NumberFormatSymbols_bo_CN", "goog.i18n.NumberFormatSymbols_bo_IN", "goog.i18n.NumberFormatSymbols_brx", "goog.i18n.NumberFormatSymbols_brx_IN", "goog.i18n.NumberFormatSymbols_bs", "goog.i18n.NumberFormatSymbols_bs_Cyrl", "goog.i18n.NumberFormatSymbols_bs_Cyrl_BA",
"goog.i18n.NumberFormatSymbols_bs_Latn", "goog.i18n.NumberFormatSymbols_bs_Latn_BA", "goog.i18n.NumberFormatSymbols_byn", "goog.i18n.NumberFormatSymbols_byn_ER", "goog.i18n.NumberFormatSymbols_cgg", "goog.i18n.NumberFormatSymbols_cgg_UG", "goog.i18n.NumberFormatSymbols_ckb", "goog.i18n.NumberFormatSymbols_ckb_Arab", "goog.i18n.NumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.NumberFormatSymbols_ckb_Arab_IR", "goog.i18n.NumberFormatSymbols_ckb_IQ", "goog.i18n.NumberFormatSymbols_ckb_IR", "goog.i18n.NumberFormatSymbols_ckb_Latn",
"goog.i18n.NumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.NumberFormatSymbols_dav", "goog.i18n.NumberFormatSymbols_dav_KE", "goog.i18n.NumberFormatSymbols_de_LI", "goog.i18n.NumberFormatSymbols_dje", "goog.i18n.NumberFormatSymbols_dje_NE", "goog.i18n.NumberFormatSymbols_dua", "goog.i18n.NumberFormatSymbols_dua_CM", "goog.i18n.NumberFormatSymbols_dyo", "goog.i18n.NumberFormatSymbols_dyo_SN", "goog.i18n.NumberFormatSymbols_dz", "goog.i18n.NumberFormatSymbols_dz_BT", "goog.i18n.NumberFormatSymbols_ebu",
"goog.i18n.NumberFormatSymbols_ebu_KE", "goog.i18n.NumberFormatSymbols_ee", "goog.i18n.NumberFormatSymbols_ee_GH", "goog.i18n.NumberFormatSymbols_ee_TG", "goog.i18n.NumberFormatSymbols_el_CY", "goog.i18n.NumberFormatSymbols_en_150", "goog.i18n.NumberFormatSymbols_en_AG", "goog.i18n.NumberFormatSymbols_en_BB", "goog.i18n.NumberFormatSymbols_en_BE", "goog.i18n.NumberFormatSymbols_en_BM", "goog.i18n.NumberFormatSymbols_en_BS", "goog.i18n.NumberFormatSymbols_en_BW", "goog.i18n.NumberFormatSymbols_en_BZ",
"goog.i18n.NumberFormatSymbols_en_CA", "goog.i18n.NumberFormatSymbols_en_CM", "goog.i18n.NumberFormatSymbols_en_DM", "goog.i18n.NumberFormatSymbols_en_Dsrt", "goog.i18n.NumberFormatSymbols_en_FJ", "goog.i18n.NumberFormatSymbols_en_GD", "goog.i18n.NumberFormatSymbols_en_GG", "goog.i18n.NumberFormatSymbols_en_GH", "goog.i18n.NumberFormatSymbols_en_GI", "goog.i18n.NumberFormatSymbols_en_GM", "goog.i18n.NumberFormatSymbols_en_GY", "goog.i18n.NumberFormatSymbols_en_HK", "goog.i18n.NumberFormatSymbols_en_IM",
"goog.i18n.NumberFormatSymbols_en_JE", "goog.i18n.NumberFormatSymbols_en_JM", "goog.i18n.NumberFormatSymbols_en_KE", "goog.i18n.NumberFormatSymbols_en_KI", "goog.i18n.NumberFormatSymbols_en_KN", "goog.i18n.NumberFormatSymbols_en_KY", "goog.i18n.NumberFormatSymbols_en_LC", "goog.i18n.NumberFormatSymbols_en_LR", "goog.i18n.NumberFormatSymbols_en_LS", "goog.i18n.NumberFormatSymbols_en_MG", "goog.i18n.NumberFormatSymbols_en_MT", "goog.i18n.NumberFormatSymbols_en_MU", "goog.i18n.NumberFormatSymbols_en_MW",
"goog.i18n.NumberFormatSymbols_en_NA", "goog.i18n.NumberFormatSymbols_en_NG", "goog.i18n.NumberFormatSymbols_en_NZ", "goog.i18n.NumberFormatSymbols_en_PG", "goog.i18n.NumberFormatSymbols_en_PH", "goog.i18n.NumberFormatSymbols_en_PK", "goog.i18n.NumberFormatSymbols_en_SB", "goog.i18n.NumberFormatSymbols_en_SC", "goog.i18n.NumberFormatSymbols_en_SL", "goog.i18n.NumberFormatSymbols_en_SS", "goog.i18n.NumberFormatSymbols_en_SZ", "goog.i18n.NumberFormatSymbols_en_TO", "goog.i18n.NumberFormatSymbols_en_TT",
"goog.i18n.NumberFormatSymbols_en_TZ", "goog.i18n.NumberFormatSymbols_en_UG", "goog.i18n.NumberFormatSymbols_en_VC", "goog.i18n.NumberFormatSymbols_en_VU", "goog.i18n.NumberFormatSymbols_en_WS", "goog.i18n.NumberFormatSymbols_en_ZM", "goog.i18n.NumberFormatSymbols_en_ZW", "goog.i18n.NumberFormatSymbols_eo", "goog.i18n.NumberFormatSymbols_es_AR", "goog.i18n.NumberFormatSymbols_es_BO", "goog.i18n.NumberFormatSymbols_es_CL", "goog.i18n.NumberFormatSymbols_es_CO", "goog.i18n.NumberFormatSymbols_es_CR",
"goog.i18n.NumberFormatSymbols_es_CU", "goog.i18n.NumberFormatSymbols_es_DO", "goog.i18n.NumberFormatSymbols_es_EC", "goog.i18n.NumberFormatSymbols_es_GQ", "goog.i18n.NumberFormatSymbols_es_GT", "goog.i18n.NumberFormatSymbols_es_HN", "goog.i18n.NumberFormatSymbols_es_MX", "goog.i18n.NumberFormatSymbols_es_NI", "goog.i18n.NumberFormatSymbols_es_PA", "goog.i18n.NumberFormatSymbols_es_PE", "goog.i18n.NumberFormatSymbols_es_PH", "goog.i18n.NumberFormatSymbols_es_PR", "goog.i18n.NumberFormatSymbols_es_PY",
"goog.i18n.NumberFormatSymbols_es_SV", "goog.i18n.NumberFormatSymbols_es_US", "goog.i18n.NumberFormatSymbols_es_UY", "goog.i18n.NumberFormatSymbols_es_VE", "goog.i18n.NumberFormatSymbols_ewo", "goog.i18n.NumberFormatSymbols_ewo_CM", "goog.i18n.NumberFormatSymbols_fa_AF", "goog.i18n.NumberFormatSymbols_ff", "goog.i18n.NumberFormatSymbols_ff_SN", "goog.i18n.NumberFormatSymbols_fo", "goog.i18n.NumberFormatSymbols_fo_FO", "goog.i18n.NumberFormatSymbols_fr_BE", "goog.i18n.NumberFormatSymbols_fr_BF", "goog.i18n.NumberFormatSymbols_fr_BI",
"goog.i18n.NumberFormatSymbols_fr_BJ", "goog.i18n.NumberFormatSymbols_fr_CD", "goog.i18n.NumberFormatSymbols_fr_CF", "goog.i18n.NumberFormatSymbols_fr_CG", "goog.i18n.NumberFormatSymbols_fr_CH", "goog.i18n.NumberFormatSymbols_fr_CI", "goog.i18n.NumberFormatSymbols_fr_CM", "goog.i18n.NumberFormatSymbols_fr_DJ", "goog.i18n.NumberFormatSymbols_fr_DZ", "goog.i18n.NumberFormatSymbols_fr_GA", "goog.i18n.NumberFormatSymbols_fr_GN", "goog.i18n.NumberFormatSymbols_fr_GQ", "goog.i18n.NumberFormatSymbols_fr_HT",
"goog.i18n.NumberFormatSymbols_fr_KM", "goog.i18n.NumberFormatSymbols_fr_LU", "goog.i18n.NumberFormatSymbols_fr_MA", "goog.i18n.NumberFormatSymbols_fr_MG", "goog.i18n.NumberFormatSymbols_fr_ML", "goog.i18n.NumberFormatSymbols_fr_MR", "goog.i18n.NumberFormatSymbols_fr_MU", "goog.i18n.NumberFormatSymbols_fr_NC", "goog.i18n.NumberFormatSymbols_fr_NE", "goog.i18n.NumberFormatSymbols_fr_PF", "goog.i18n.NumberFormatSymbols_fr_RW", "goog.i18n.NumberFormatSymbols_fr_SC", "goog.i18n.NumberFormatSymbols_fr_SN",
"goog.i18n.NumberFormatSymbols_fr_SY", "goog.i18n.NumberFormatSymbols_fr_TD", "goog.i18n.NumberFormatSymbols_fr_TG", "goog.i18n.NumberFormatSymbols_fr_TN", "goog.i18n.NumberFormatSymbols_fr_VU", "goog.i18n.NumberFormatSymbols_fur", "goog.i18n.NumberFormatSymbols_fur_IT", "goog.i18n.NumberFormatSymbols_ga", "goog.i18n.NumberFormatSymbols_ga_IE", "goog.i18n.NumberFormatSymbols_gd", "goog.i18n.NumberFormatSymbols_gd_GB", "goog.i18n.NumberFormatSymbols_guz", "goog.i18n.NumberFormatSymbols_guz_KE", "goog.i18n.NumberFormatSymbols_gv",
"goog.i18n.NumberFormatSymbols_gv_GB", "goog.i18n.NumberFormatSymbols_ha", "goog.i18n.NumberFormatSymbols_ha_Latn", "goog.i18n.NumberFormatSymbols_ha_Latn_GH", "goog.i18n.NumberFormatSymbols_ha_Latn_NE", "goog.i18n.NumberFormatSymbols_ha_Latn_NG", "goog.i18n.NumberFormatSymbols_hr_BA", "goog.i18n.NumberFormatSymbols_hy", "goog.i18n.NumberFormatSymbols_hy_AM", "goog.i18n.NumberFormatSymbols_ia", "goog.i18n.NumberFormatSymbols_ia_FR", "goog.i18n.NumberFormatSymbols_ig", "goog.i18n.NumberFormatSymbols_ig_NG",
"goog.i18n.NumberFormatSymbols_ii", "goog.i18n.NumberFormatSymbols_ii_CN", "goog.i18n.NumberFormatSymbols_it_CH", "goog.i18n.NumberFormatSymbols_jgo", "goog.i18n.NumberFormatSymbols_jgo_CM", "goog.i18n.NumberFormatSymbols_jmc", "goog.i18n.NumberFormatSymbols_jmc_TZ", "goog.i18n.NumberFormatSymbols_ka", "goog.i18n.NumberFormatSymbols_ka_GE", "goog.i18n.NumberFormatSymbols_kab", "goog.i18n.NumberFormatSymbols_kab_DZ", "goog.i18n.NumberFormatSymbols_kam", "goog.i18n.NumberFormatSymbols_kam_KE", "goog.i18n.NumberFormatSymbols_kde",
"goog.i18n.NumberFormatSymbols_kde_TZ", "goog.i18n.NumberFormatSymbols_kea", "goog.i18n.NumberFormatSymbols_kea_CV", "goog.i18n.NumberFormatSymbols_khq", "goog.i18n.NumberFormatSymbols_khq_ML", "goog.i18n.NumberFormatSymbols_ki", "goog.i18n.NumberFormatSymbols_ki_KE", "goog.i18n.NumberFormatSymbols_kk", "goog.i18n.NumberFormatSymbols_kk_Cyrl", "goog.i18n.NumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.NumberFormatSymbols_kkj", "goog.i18n.NumberFormatSymbols_kkj_CM", "goog.i18n.NumberFormatSymbols_kl",
"goog.i18n.NumberFormatSymbols_kl_GL", "goog.i18n.NumberFormatSymbols_kln", "goog.i18n.NumberFormatSymbols_kln_KE", "goog.i18n.NumberFormatSymbols_km", "goog.i18n.NumberFormatSymbols_km_KH", "goog.i18n.NumberFormatSymbols_ko_KP", "goog.i18n.NumberFormatSymbols_kok", "goog.i18n.NumberFormatSymbols_kok_IN", "goog.i18n.NumberFormatSymbols_ks", "goog.i18n.NumberFormatSymbols_ks_Arab", "goog.i18n.NumberFormatSymbols_ks_Arab_IN", "goog.i18n.NumberFormatSymbols_ksb", "goog.i18n.NumberFormatSymbols_ksb_TZ",
"goog.i18n.NumberFormatSymbols_ksf", "goog.i18n.NumberFormatSymbols_ksf_CM", "goog.i18n.NumberFormatSymbols_ksh", "goog.i18n.NumberFormatSymbols_ksh_DE", "goog.i18n.NumberFormatSymbols_kw", "goog.i18n.NumberFormatSymbols_kw_GB", "goog.i18n.NumberFormatSymbols_ky", "goog.i18n.NumberFormatSymbols_ky_KG", "goog.i18n.NumberFormatSymbols_lag", "goog.i18n.NumberFormatSymbols_lag_TZ", "goog.i18n.NumberFormatSymbols_lg", "goog.i18n.NumberFormatSymbols_lg_UG", "goog.i18n.NumberFormatSymbols_ln_AO", "goog.i18n.NumberFormatSymbols_ln_CF",
"goog.i18n.NumberFormatSymbols_ln_CG", "goog.i18n.NumberFormatSymbols_lo", "goog.i18n.NumberFormatSymbols_lo_LA", "goog.i18n.NumberFormatSymbols_lu", "goog.i18n.NumberFormatSymbols_lu_CD", "goog.i18n.NumberFormatSymbols_luo", "goog.i18n.NumberFormatSymbols_luo_KE", "goog.i18n.NumberFormatSymbols_luy", "goog.i18n.NumberFormatSymbols_luy_KE", "goog.i18n.NumberFormatSymbols_mas", "goog.i18n.NumberFormatSymbols_mas_KE", "goog.i18n.NumberFormatSymbols_mas_TZ", "goog.i18n.NumberFormatSymbols_mer", "goog.i18n.NumberFormatSymbols_mer_KE",
"goog.i18n.NumberFormatSymbols_mfe", "goog.i18n.NumberFormatSymbols_mfe_MU", "goog.i18n.NumberFormatSymbols_mg", "goog.i18n.NumberFormatSymbols_mg_MG", "goog.i18n.NumberFormatSymbols_mgh", "goog.i18n.NumberFormatSymbols_mgh_MZ", "goog.i18n.NumberFormatSymbols_mgo", "goog.i18n.NumberFormatSymbols_mgo_CM", "goog.i18n.NumberFormatSymbols_mk", "goog.i18n.NumberFormatSymbols_mk_MK", "goog.i18n.NumberFormatSymbols_mn", "goog.i18n.NumberFormatSymbols_mn_Cyrl", "goog.i18n.NumberFormatSymbols_mn_Cyrl_MN",
"goog.i18n.NumberFormatSymbols_ms_Latn", "goog.i18n.NumberFormatSymbols_ms_Latn_BN", "goog.i18n.NumberFormatSymbols_ms_Latn_SG", "goog.i18n.NumberFormatSymbols_mua", "goog.i18n.NumberFormatSymbols_mua_CM", "goog.i18n.NumberFormatSymbols_my", "goog.i18n.NumberFormatSymbols_my_MM", "goog.i18n.NumberFormatSymbols_naq", "goog.i18n.NumberFormatSymbols_naq_NA", "goog.i18n.NumberFormatSymbols_nd", "goog.i18n.NumberFormatSymbols_nd_ZW", "goog.i18n.NumberFormatSymbols_ne", "goog.i18n.NumberFormatSymbols_ne_IN",
"goog.i18n.NumberFormatSymbols_ne_NP", "goog.i18n.NumberFormatSymbols_nl_AW", "goog.i18n.NumberFormatSymbols_nl_BE", "goog.i18n.NumberFormatSymbols_nl_CW", "goog.i18n.NumberFormatSymbols_nl_SR", "goog.i18n.NumberFormatSymbols_nl_SX", "goog.i18n.NumberFormatSymbols_nmg", "goog.i18n.NumberFormatSymbols_nmg_CM", "goog.i18n.NumberFormatSymbols_nn", "goog.i18n.NumberFormatSymbols_nn_NO", "goog.i18n.NumberFormatSymbols_nnh", "goog.i18n.NumberFormatSymbols_nnh_CM", "goog.i18n.NumberFormatSymbols_nr", "goog.i18n.NumberFormatSymbols_nr_ZA",
"goog.i18n.NumberFormatSymbols_nso", "goog.i18n.NumberFormatSymbols_nso_ZA", "goog.i18n.NumberFormatSymbols_nus", "goog.i18n.NumberFormatSymbols_nus_SD", "goog.i18n.NumberFormatSymbols_nyn", "goog.i18n.NumberFormatSymbols_nyn_UG", "goog.i18n.NumberFormatSymbols_om", "goog.i18n.NumberFormatSymbols_om_ET", "goog.i18n.NumberFormatSymbols_om_KE", "goog.i18n.NumberFormatSymbols_os", "goog.i18n.NumberFormatSymbols_os_GE", "goog.i18n.NumberFormatSymbols_os_RU", "goog.i18n.NumberFormatSymbols_pa", "goog.i18n.NumberFormatSymbols_pa_Arab",
"goog.i18n.NumberFormatSymbols_pa_Arab_PK", "goog.i18n.NumberFormatSymbols_pa_Guru", "goog.i18n.NumberFormatSymbols_pa_Guru_IN", "goog.i18n.NumberFormatSymbols_ps", "goog.i18n.NumberFormatSymbols_ps_AF", "goog.i18n.NumberFormatSymbols_pt_AO", "goog.i18n.NumberFormatSymbols_pt_CV", "goog.i18n.NumberFormatSymbols_pt_GW", "goog.i18n.NumberFormatSymbols_pt_MO", "goog.i18n.NumberFormatSymbols_pt_MZ", "goog.i18n.NumberFormatSymbols_pt_ST", "goog.i18n.NumberFormatSymbols_pt_TL", "goog.i18n.NumberFormatSymbols_rm",
"goog.i18n.NumberFormatSymbols_rm_CH", "goog.i18n.NumberFormatSymbols_rn", "goog.i18n.NumberFormatSymbols_rn_BI", "goog.i18n.NumberFormatSymbols_ro_MD", "goog.i18n.NumberFormatSymbols_rof", "goog.i18n.NumberFormatSymbols_rof_TZ", "goog.i18n.NumberFormatSymbols_ru_BY", "goog.i18n.NumberFormatSymbols_ru_KG", "goog.i18n.NumberFormatSymbols_ru_KZ", "goog.i18n.NumberFormatSymbols_ru_MD", "goog.i18n.NumberFormatSymbols_ru_UA", "goog.i18n.NumberFormatSymbols_rw", "goog.i18n.NumberFormatSymbols_rw_RW", "goog.i18n.NumberFormatSymbols_rwk",
"goog.i18n.NumberFormatSymbols_rwk_TZ", "goog.i18n.NumberFormatSymbols_sah", "goog.i18n.NumberFormatSymbols_sah_RU", "goog.i18n.NumberFormatSymbols_saq", "goog.i18n.NumberFormatSymbols_saq_KE", "goog.i18n.NumberFormatSymbols_sbp", "goog.i18n.NumberFormatSymbols_sbp_TZ", "goog.i18n.NumberFormatSymbols_se", "goog.i18n.NumberFormatSymbols_se_FI", "goog.i18n.NumberFormatSymbols_se_NO", "goog.i18n.NumberFormatSymbols_seh", "goog.i18n.NumberFormatSymbols_seh_MZ", "goog.i18n.NumberFormatSymbols_ses", "goog.i18n.NumberFormatSymbols_ses_ML",
"goog.i18n.NumberFormatSymbols_sg", "goog.i18n.NumberFormatSymbols_sg_CF", "goog.i18n.NumberFormatSymbols_shi", "goog.i18n.NumberFormatSymbols_shi_Latn", "goog.i18n.NumberFormatSymbols_shi_Latn_MA", "goog.i18n.NumberFormatSymbols_shi_Tfng", "goog.i18n.NumberFormatSymbols_shi_Tfng_MA", "goog.i18n.NumberFormatSymbols_si", "goog.i18n.NumberFormatSymbols_si_LK", "goog.i18n.NumberFormatSymbols_sn", "goog.i18n.NumberFormatSymbols_sn_ZW", "goog.i18n.NumberFormatSymbols_so", "goog.i18n.NumberFormatSymbols_so_DJ",
"goog.i18n.NumberFormatSymbols_so_ET", "goog.i18n.NumberFormatSymbols_so_KE", "goog.i18n.NumberFormatSymbols_so_SO", "goog.i18n.NumberFormatSymbols_sq_MK", "goog.i18n.NumberFormatSymbols_sq_XK", "goog.i18n.NumberFormatSymbols_sr_Cyrl", "goog.i18n.NumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.NumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.NumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.NumberFormatSymbols_sr_Latn", "goog.i18n.NumberFormatSymbols_sr_Latn_BA", "goog.i18n.NumberFormatSymbols_sr_Latn_ME", "goog.i18n.NumberFormatSymbols_sr_Latn_RS",
"goog.i18n.NumberFormatSymbols_sr_Latn_XK", "goog.i18n.NumberFormatSymbols_ss", "goog.i18n.NumberFormatSymbols_ss_SZ", "goog.i18n.NumberFormatSymbols_ss_ZA", "goog.i18n.NumberFormatSymbols_ssy", "goog.i18n.NumberFormatSymbols_ssy_ER", "goog.i18n.NumberFormatSymbols_st", "goog.i18n.NumberFormatSymbols_st_LS", "goog.i18n.NumberFormatSymbols_st_ZA", "goog.i18n.NumberFormatSymbols_sv_AX", "goog.i18n.NumberFormatSymbols_sv_FI", "goog.i18n.NumberFormatSymbols_sw_KE", "goog.i18n.NumberFormatSymbols_sw_UG",
"goog.i18n.NumberFormatSymbols_swc", "goog.i18n.NumberFormatSymbols_swc_CD", "goog.i18n.NumberFormatSymbols_ta_LK", "goog.i18n.NumberFormatSymbols_ta_MY", "goog.i18n.NumberFormatSymbols_ta_SG", "goog.i18n.NumberFormatSymbols_teo", "goog.i18n.NumberFormatSymbols_teo_KE", "goog.i18n.NumberFormatSymbols_teo_UG", "goog.i18n.NumberFormatSymbols_tg", "goog.i18n.NumberFormatSymbols_tg_Cyrl", "goog.i18n.NumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.NumberFormatSymbols_ti", "goog.i18n.NumberFormatSymbols_ti_ER",
"goog.i18n.NumberFormatSymbols_ti_ET", "goog.i18n.NumberFormatSymbols_tig", "goog.i18n.NumberFormatSymbols_tig_ER", "goog.i18n.NumberFormatSymbols_tn", "goog.i18n.NumberFormatSymbols_tn_BW", "goog.i18n.NumberFormatSymbols_tn_ZA", "goog.i18n.NumberFormatSymbols_to", "goog.i18n.NumberFormatSymbols_to_TO", "goog.i18n.NumberFormatSymbols_tr_CY", "goog.i18n.NumberFormatSymbols_ts", "goog.i18n.NumberFormatSymbols_ts_ZA", "goog.i18n.NumberFormatSymbols_twq", "goog.i18n.NumberFormatSymbols_twq_NE", "goog.i18n.NumberFormatSymbols_tzm",
"goog.i18n.NumberFormatSymbols_tzm_Latn", "goog.i18n.NumberFormatSymbols_tzm_Latn_MA", "goog.i18n.NumberFormatSymbols_ur_IN", "goog.i18n.NumberFormatSymbols_uz", "goog.i18n.NumberFormatSymbols_uz_Arab", "goog.i18n.NumberFormatSymbols_uz_Arab_AF", "goog.i18n.NumberFormatSymbols_uz_Cyrl", "goog.i18n.NumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.NumberFormatSymbols_uz_Latn", "goog.i18n.NumberFormatSymbols_uz_Latn_UZ", "goog.i18n.NumberFormatSymbols_vai", "goog.i18n.NumberFormatSymbols_vai_Latn", "goog.i18n.NumberFormatSymbols_vai_Latn_LR",
"goog.i18n.NumberFormatSymbols_vai_Vaii", "goog.i18n.NumberFormatSymbols_vai_Vaii_LR", "goog.i18n.NumberFormatSymbols_ve", "goog.i18n.NumberFormatSymbols_ve_ZA", "goog.i18n.NumberFormatSymbols_vo", "goog.i18n.NumberFormatSymbols_vun", "goog.i18n.NumberFormatSymbols_vun_TZ", "goog.i18n.NumberFormatSymbols_wae", "goog.i18n.NumberFormatSymbols_wae_CH", "goog.i18n.NumberFormatSymbols_wal", "goog.i18n.NumberFormatSymbols_wal_ET", "goog.i18n.NumberFormatSymbols_xh", "goog.i18n.NumberFormatSymbols_xh_ZA",
"goog.i18n.NumberFormatSymbols_xog", "goog.i18n.NumberFormatSymbols_xog_UG", "goog.i18n.NumberFormatSymbols_yav", "goog.i18n.NumberFormatSymbols_yav_CM", "goog.i18n.NumberFormatSymbols_yo", "goog.i18n.NumberFormatSymbols_yo_NG", "goog.i18n.NumberFormatSymbols_zh_Hans", "goog.i18n.NumberFormatSymbols_zh_Hans_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_MO", "goog.i18n.NumberFormatSymbols_zh_Hans_SG", "goog.i18n.NumberFormatSymbols_zh_Hant", "goog.i18n.NumberFormatSymbols_zh_Hant_HK", "goog.i18n.NumberFormatSymbols_zh_Hant_MO",
"goog.i18n.NumberFormatSymbols_zh_Hant_TW"], ["goog.i18n.NumberFormatSymbols"]);
goog.addDependency("/closure/goog/i18n/ordinalrules.js", ["goog.i18n.ordinalRules"], []);
goog.addDependency("/closure/goog/i18n/pluralrules.js", ["goog.i18n.pluralRules"], []);
goog.addDependency("/closure/goog/i18n/timezone.js", ["goog.i18n.TimeZone"], ["goog.array", "goog.date.DateLike", "goog.string"]);
goog.addDependency("/closure/goog/i18n/uchar.js", ["goog.i18n.uChar"], []);
goog.addDependency("/closure/goog/i18n/uchar/localnamefetcher.js", ["goog.i18n.uChar.LocalNameFetcher"], ["goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log"]);
goog.addDependency("/closure/goog/i18n/uchar/namefetcher.js", ["goog.i18n.uChar.NameFetcher"], []);
goog.addDependency("/closure/goog/i18n/uchar/remotenamefetcher.js", ["goog.i18n.uChar.RemoteNameFetcher"], ["goog.Disposable", "goog.Uri", "goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log", "goog.net.XhrIo", "goog.structs.Map"]);
goog.addDependency("/closure/goog/iter/iter.js", ["goog.iter", "goog.iter.Iterator", "goog.iter.StopIteration"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/json/evaljsonprocessor.js", ["goog.json.EvalJsonProcessor"], ["goog.json", "goog.json.Processor", "goog.json.Serializer"]);
goog.addDependency("/closure/goog/json/json.js", ["goog.json", "goog.json.Serializer"], []);
goog.addDependency("/closure/goog/json/nativejsonprocessor.js", ["goog.json.NativeJsonProcessor"], ["goog.asserts", "goog.json", "goog.json.Processor"]);
goog.addDependency("/closure/goog/json/processor.js", ["goog.json.Processor"], ["goog.string.Parser", "goog.string.Stringifier"]);
goog.addDependency("/closure/goog/labs/classdef/classdef.js", ["goog.labs.classdef"], []);
goog.addDependency("/closure/goog/labs/events/touch.js", ["goog.labs.events.touch", "goog.labs.events.touch.TouchData"], ["goog.array", "goog.asserts", "goog.events.EventType", "goog.string"]);
goog.addDependency("/closure/goog/labs/events/touch_test.js", ["goog.labs.events.touchTest"], ["goog.labs.events.touch", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/format/csv.js", ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.labs.format.csv.Token"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.object", "goog.string", "goog.string.newlines"]);
goog.addDependency("/closure/goog/labs/format/csv_test.js", ["goog.labs.format.csvTest"], ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.object", "goog.testing.asserts", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/mock/mock.js", ["goog.labs.mock"], ["goog.array", "goog.debug", "goog.debug.Error", "goog.functions", "goog.json"]);
goog.addDependency("/closure/goog/labs/net/image.js", ["goog.labs.net.image"], ["goog.events.EventHandler", "goog.events.EventType", "goog.net.EventType", "goog.result.SimpleResult", "goog.userAgent"]);
goog.addDependency("/closure/goog/labs/net/image_test.js", ["goog.labs.net.imageTest"], ["goog.events", "goog.labs.net.image", "goog.result", "goog.result.Result", "goog.string", "goog.testing.AsyncTestCase", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/net/webchannel.js", ["goog.net.WebChannel"], ["goog.events", "goog.events.Event"]);
goog.addDependency("/closure/goog/labs/net/webchannel/basetestchannel.js", ["goog.labs.net.webChannel.BaseTestChannel"], ["goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork"]);
goog.addDependency("/closure/goog/labs/net/webchannel/channel.js", ["goog.labs.net.webChannel.Channel"], []);
goog.addDependency("/closure/goog/labs/net/webchannel/requeststats.js", ["goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Event", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.ServerReachabilityEvent", "goog.labs.net.webChannel.requestStats.Stat", "goog.labs.net.webChannel.requestStats.StatEvent", "goog.labs.net.webChannel.requestStats.TimingEvent"], ["goog.events.Event", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase.js", ["goog.labs.net.webChannel.WebChannelBase"], ["goog.Uri", "goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.json", "goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.BaseTestChannel", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.log",
"goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase_test.js", ["goog.labs.net.webChannel.webChannelBaseTest"], ["goog.Timer", "goog.array", "goog.dom", "goog.functions", "goog.json", "goog.labs.net.webChannel.WebChannelBase", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork", "goog.structs.Map", "goog.testing.MockClock", "goog.testing.PropertyReplacer",
"goog.testing.asserts", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbasetransport.js", ["goog.labs.net.webChannel.WebChannelBaseTransport"], ["goog.asserts", "goog.events.EventTarget", "goog.labs.net.webChannel.WebChannelBase", "goog.log", "goog.net.WebChannel", "goog.net.WebChannelTransport", "goog.string.path"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchanneldebug.js", ["goog.labs.net.webChannel.WebChannelDebug"], ["goog.json", "goog.log"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelrequest.js", ["goog.labs.net.webChannel.WebChannelRequest"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/labs/net/webchanneltransport.js", ["goog.net.WebChannelTransport"], []);
goog.addDependency("/closure/goog/labs/net/webchanneltransportfactory.js", ["goog.net.createWebChannelTransport"], ["goog.functions", "goog.labs.net.webChannel.WebChannelBaseTransport"]);
goog.addDependency("/closure/goog/labs/net/xhr.js", ["goog.labs.net.xhr", "goog.labs.net.xhr.Error", "goog.labs.net.xhr.HttpError", "goog.labs.net.xhr.TimeoutError"], ["goog.debug.Error", "goog.json", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.result", "goog.result.SimpleResult", "goog.string", "goog.uri.utils"]);
goog.addDependency("/closure/goog/labs/object/object.js", ["goog.labs.object"], []);
goog.addDependency("/closure/goog/labs/observe/notice.js", ["goog.labs.observe.Notice"], []);
goog.addDependency("/closure/goog/labs/observe/observable.js", ["goog.labs.observe.Observable"], ["goog.disposable.IDisposable"]);
goog.addDependency("/closure/goog/labs/observe/observableset.js", ["goog.labs.observe.ObservableSet"], ["goog.array", "goog.labs.observe.Observer"]);
goog.addDependency("/closure/goog/labs/observe/observationset.js", ["goog.labs.observe.ObservationSet"], ["goog.array", "goog.labs.observe.Observer"]);
goog.addDependency("/closure/goog/labs/observe/observer.js", ["goog.labs.observe.Observer"], []);
goog.addDependency("/closure/goog/labs/observe/simpleobservable.js", ["goog.labs.observe.SimpleObservable"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.labs.observe.Notice", "goog.labs.observe.Observable", "goog.labs.observe.Observer", "goog.object"]);
goog.addDependency("/closure/goog/labs/structs/map.js", ["goog.labs.structs.Map"], ["goog.array", "goog.asserts", "goog.labs.object", "goog.object"]);
goog.addDependency("/closure/goog/labs/structs/map_perf.js", ["goog.labs.structs.mapPerf"], ["goog.dom", "goog.labs.structs.Map", "goog.structs.Map", "goog.testing.PerformanceTable", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/structs/multimap.js", ["goog.labs.structs.Multimap"], ["goog.array", "goog.labs.object", "goog.labs.structs.Map"]);
goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor.js", ["goog.labs.style.PixelDensityMonitor", "goog.labs.style.PixelDensityMonitor.Density", "goog.labs.style.PixelDensityMonitor.EventType"], ["goog.events", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor_test.js", ["goog.labs.style.PixelDensityMonitorTest"], ["goog.array", "goog.dom.DomHelper", "goog.events", "goog.labs.style.PixelDensityMonitor", "goog.testing.MockControl", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/testing/assertthat.js", ["goog.labs.testing.MatcherError", "goog.labs.testing.assertThat"], ["goog.asserts", "goog.debug.Error", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/decoratormatcher.js", ["goog.labs.testing.AnythingMatcher"], ["goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/dictionarymatcher.js", ["goog.labs.testing.HasEntriesMatcher", "goog.labs.testing.HasEntryMatcher", "goog.labs.testing.HasKeyMatcher", "goog.labs.testing.HasValueMatcher"], ["goog.array", "goog.asserts", "goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/testing/logicmatcher.js", ["goog.labs.testing.AllOfMatcher", "goog.labs.testing.AnyOfMatcher", "goog.labs.testing.IsNotMatcher"], ["goog.array", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/matcher.js", ["goog.labs.testing.Matcher"], []);
goog.addDependency("/closure/goog/labs/testing/numbermatcher.js", ["goog.labs.testing.CloseToMatcher", "goog.labs.testing.EqualToMatcher", "goog.labs.testing.GreaterThanEqualToMatcher", "goog.labs.testing.GreaterThanMatcher", "goog.labs.testing.LessThanEqualToMatcher", "goog.labs.testing.LessThanMatcher"], ["goog.asserts", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/objectmatcher.js", ["goog.labs.testing.HasPropertyMatcher", "goog.labs.testing.InstanceOfMatcher", "goog.labs.testing.IsNullMatcher", "goog.labs.testing.IsNullOrUndefinedMatcher", "goog.labs.testing.IsUndefinedMatcher", "goog.labs.testing.ObjectEqualsMatcher"], ["goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/testing/stringmatcher.js", ["goog.labs.testing.ContainsStringMatcher", "goog.labs.testing.EndsWithMatcher", "goog.labs.testing.EqualToIgnoringCaseMatcher", "goog.labs.testing.EqualToIgnoringWhitespaceMatcher", "goog.labs.testing.EqualsMatcher", "goog.labs.testing.RegexMatcher", "goog.labs.testing.StartsWithMatcher", "goog.labs.testing.StringContainsInOrderMatcher"], ["goog.asserts", "goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/browser.js", ["goog.labs.userAgent.browser"], ["goog.asserts", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/browser_test.js", ["goog.labs.userAgent.browserTest"], ["goog.labs.userAgent.browser", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/device.js", ["goog.labs.userAgent.device"], ["goog.labs.userAgent.util"]);
goog.addDependency("/closure/goog/labs/useragent/device_test.js", ["goog.labs.userAgent.deviceTest"], ["goog.labs.userAgent.device", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/engine.js", ["goog.labs.userAgent.engine"], ["goog.array", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/engine_test.js", ["goog.labs.userAgent.engineTest"], ["goog.labs.userAgent.engine", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/platform.js", ["goog.labs.userAgent.platform"], ["goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/platform_test.js", ["goog.labs.userAgent.platformTest"], ["goog.labs.userAgent.platform", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/test_agents.js", ["goog.labs.userAgent.testAgents"], []);
goog.addDependency("/closure/goog/labs/useragent/util.js", ["goog.labs.userAgent.util"], ["goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/util_test.js", ["goog.labs.userAgent.utilTest"], ["goog.labs.userAgent.testAgents", "goog.labs.userAgent.util", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/locale/countries.js", ["goog.locale.countries"], []);
goog.addDependency("/closure/goog/locale/defaultlocalenameconstants.js", ["goog.locale.defaultLocaleNameConstants"], []);
goog.addDependency("/closure/goog/locale/genericfontnames.js", ["goog.locale.genericFontNames"], []);
goog.addDependency("/closure/goog/locale/genericfontnamesdata.js", ["goog.locale.genericFontNamesData"], []);
goog.addDependency("/closure/goog/locale/locale.js", ["goog.locale"], ["goog.locale.nativeNameConstants"]);
goog.addDependency("/closure/goog/locale/nativenameconstants.js", ["goog.locale.nativeNameConstants"], []);
goog.addDependency("/closure/goog/locale/scriptToLanguages.js", ["goog.locale.scriptToLanguages"], ["goog.locale"]);
goog.addDependency("/closure/goog/locale/timezonedetection.js", ["goog.locale.timeZoneDetection"], ["goog.locale", "goog.locale.TimeZoneFingerprint"]);
goog.addDependency("/closure/goog/locale/timezonefingerprint.js", ["goog.locale.TimeZoneFingerprint"], []);
goog.addDependency("/closure/goog/locale/timezonelist.js", ["goog.locale.TimeZoneList"], ["goog.locale"]);
goog.addDependency("/closure/goog/log/log.js", ["goog.log", "goog.log.Level", "goog.log.LogRecord", "goog.log.Logger"], ["goog.debug", "goog.debug.LogRecord", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/log/log_test.js", ["goog.logTest"], ["goog.debug.LogManager", "goog.log", "goog.log.Level", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/math/bezier.js", ["goog.math.Bezier"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/box.js", ["goog.math.Box"], ["goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/coordinate.js", ["goog.math.Coordinate"], ["goog.math"]);
goog.addDependency("/closure/goog/math/coordinate3.js", ["goog.math.Coordinate3"], []);
goog.addDependency("/closure/goog/math/exponentialbackoff.js", ["goog.math.ExponentialBackoff"], ["goog.asserts"]);
goog.addDependency("/closure/goog/math/integer.js", ["goog.math.Integer"], []);
goog.addDependency("/closure/goog/math/interpolator/interpolator1.js", ["goog.math.interpolator.Interpolator1"], []);
goog.addDependency("/closure/goog/math/interpolator/linear1.js", ["goog.math.interpolator.Linear1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1"]);
goog.addDependency("/closure/goog/math/interpolator/pchip1.js", ["goog.math.interpolator.Pchip1"], ["goog.math", "goog.math.interpolator.Spline1"]);
goog.addDependency("/closure/goog/math/interpolator/spline1.js", ["goog.math.interpolator.Spline1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1", "goog.math.tdma"]);
goog.addDependency("/closure/goog/math/line.js", ["goog.math.Line"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/long.js", ["goog.math.Long"], []);
goog.addDependency("/closure/goog/math/math.js", ["goog.math"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/math/matrix.js", ["goog.math.Matrix"], ["goog.array", "goog.math", "goog.math.Size", "goog.string"]);
goog.addDependency("/closure/goog/math/range.js", ["goog.math.Range"], []);
goog.addDependency("/closure/goog/math/rangeset.js", ["goog.math.RangeSet"], ["goog.array", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.math.Range"]);
goog.addDependency("/closure/goog/math/rect.js", ["goog.math.Rect"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size"]);
goog.addDependency("/closure/goog/math/size.js", ["goog.math.Size"], []);
goog.addDependency("/closure/goog/math/tdma.js", ["goog.math.tdma"], []);
goog.addDependency("/closure/goog/math/vec2.js", ["goog.math.Vec2"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/vec3.js", ["goog.math.Vec3"], ["goog.math", "goog.math.Coordinate3"]);
goog.addDependency("/closure/goog/memoize/memoize.js", ["goog.memoize"], []);
goog.addDependency("/closure/goog/messaging/abstractchannel.js", ["goog.messaging.AbstractChannel"], ["goog.Disposable", "goog.debug", "goog.json", "goog.log", "goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/bufferedchannel.js", ["goog.messaging.BufferedChannel"], ["goog.Timer", "goog.Uri", "goog.debug.Error", "goog.events", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel"]);
goog.addDependency("/closure/goog/messaging/deferredchannel.js", ["goog.messaging.DeferredChannel"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/loggerclient.js", ["goog.messaging.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.LogManager", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/messaging/loggerserver.js", ["goog.messaging.LoggerServer"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/messaging/messagechannel.js", ["goog.messaging.MessageChannel"], []);
goog.addDependency("/closure/goog/messaging/messaging.js", ["goog.messaging"], ["goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/multichannel.js", ["goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"], ["goog.Disposable", "goog.events.EventHandler", "goog.log", "goog.messaging.MessageChannel", "goog.object"]);
goog.addDependency("/closure/goog/messaging/portcaller.js", ["goog.messaging.PortCaller"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.DeferredChannel", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]);
goog.addDependency("/closure/goog/messaging/portchannel.js", ["goog.messaging.PortChannel"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.debug", "goog.dom", "goog.dom.DomHelper", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.messaging.AbstractChannel", "goog.messaging.DeferredChannel", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/messaging/portnetwork.js", ["goog.messaging.PortNetwork"], []);
goog.addDependency("/closure/goog/messaging/portoperator.js", ["goog.messaging.PortOperator"], ["goog.Disposable", "goog.asserts", "goog.log", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]);
goog.addDependency("/closure/goog/messaging/respondingchannel.js", ["goog.messaging.RespondingChannel"], ["goog.Disposable", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portchannel_worker.js", ["goog.messaging.testdata.portchannel_worker"], ["goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker1.js", ["goog.messaging.testdata.portnetwork_worker1"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker2.js", ["goog.messaging.testdata.portnetwork_worker2"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/module/abstractmoduleloader.js", ["goog.module.AbstractModuleLoader"], []);
goog.addDependency("/closure/goog/module/basemodule.js", ["goog.module.BaseModule"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/module/loader.js", ["goog.module.Loader"], ["goog.Timer", "goog.array", "goog.dom", "goog.object"]);
goog.addDependency("/closure/goog/module/module.js", ["goog.module"], ["goog.array", "goog.module.Loader"]);
goog.addDependency("/closure/goog/module/moduleinfo.js", ["goog.module.ModuleInfo"], ["goog.Disposable", "goog.functions", "goog.module.BaseModule", "goog.module.ModuleLoadCallback"]);
goog.addDependency("/closure/goog/module/moduleloadcallback.js", ["goog.module.ModuleLoadCallback"], ["goog.debug.entryPointRegistry", "goog.debug.errorHandlerWeakDep"]);
goog.addDependency("/closure/goog/module/moduleloader.js", ["goog.module.ModuleLoader"], ["goog.Timer", "goog.array", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.module.AbstractModuleLoader", "goog.net.BulkLoader", "goog.net.EventType", "goog.net.jsloader", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/module/moduleloader_test.js", ["goog.module.ModuleLoaderTest"], ["goog.array", "goog.dom", "goog.functions", "goog.module.ModuleLoader", "goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.object", "goog.testing.AsyncTestCase", "goog.testing.PropertyReplacer", "goog.testing.events.EventObserver", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/module/modulemanager.js", ["goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.module.ModuleManager.FailureType"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.debug.Trace", "goog.dispose", "goog.log", "goog.module.ModuleInfo", "goog.module.ModuleLoadCallback", "goog.object"]);
goog.addDependency("/closure/goog/module/testdata/modA_1.js", ["goog.module.testdata.modA_1"], []);
goog.addDependency("/closure/goog/module/testdata/modA_2.js", ["goog.module.testdata.modA_2"], ["goog.module.ModuleManager"]);
goog.addDependency("/closure/goog/module/testdata/modB_1.js", ["goog.module.testdata.modB_1"], ["goog.module.ModuleManager"]);
goog.addDependency("/closure/goog/net/browserchannel.js", ["goog.net.BrowserChannel", "goog.net.BrowserChannel.Error", "goog.net.BrowserChannel.Event", "goog.net.BrowserChannel.Handler", "goog.net.BrowserChannel.LogSaver", "goog.net.BrowserChannel.QueuedMap", "goog.net.BrowserChannel.ServerReachability", "goog.net.BrowserChannel.ServerReachabilityEvent", "goog.net.BrowserChannel.Stat", "goog.net.BrowserChannel.StatEvent", "goog.net.BrowserChannel.State", "goog.net.BrowserChannel.TimingEvent"], ["goog.Uri",
"goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.events.Event", "goog.events.EventTarget", "goog.json", "goog.json.EvalJsonProcessor", "goog.log", "goog.net.BrowserTestChannel", "goog.net.ChannelDebug", "goog.net.ChannelRequest", "goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/net/browsertestchannel.js", ["goog.net.BrowserTestChannel"], ["goog.json.EvalJsonProcessor", "goog.net.ChannelRequest", "goog.net.ChannelRequest.Error", "goog.net.tmpnetwork", "goog.string.Parser", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/bulkloader.js", ["goog.net.BulkLoader"], ["goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.net.BulkLoaderHelper", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/net/bulkloaderhelper.js", ["goog.net.BulkLoaderHelper"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/net/channeldebug.js", ["goog.net.ChannelDebug"], ["goog.json", "goog.log"]);
goog.addDependency("/closure/goog/net/channelrequest.js", ["goog.net.ChannelRequest", "goog.net.ChannelRequest.Error"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/cookies.js", ["goog.net.Cookies", "goog.net.cookies"], []);
goog.addDependency("/closure/goog/net/crossdomainrpc.js", ["goog.net.CrossDomainRpc"], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.EventType", "goog.net.HttpStatus", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/errorcode.js", ["goog.net.ErrorCode"], []);
goog.addDependency("/closure/goog/net/eventtype.js", ["goog.net.EventType"], []);
goog.addDependency("/closure/goog/net/filedownloader.js", ["goog.net.FileDownloader", "goog.net.FileDownloader.Error"], ["goog.Disposable", "goog.asserts", "goog.async.Deferred", "goog.crypt.hash32", "goog.debug.Error", "goog.events", "goog.events.EventHandler", "goog.fs", "goog.fs.DirectoryEntry", "goog.fs.Error", "goog.fs.FileSaver", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.object"]);
goog.addDependency("/closure/goog/net/httpstatus.js", ["goog.net.HttpStatus"], []);
goog.addDependency("/closure/goog/net/iframeio.js", ["goog.net.IframeIo", "goog.net.IframeIo.IncrementalDataEvent"], ["goog.Timer", "goog.Uri", "goog.debug", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.reflect", "goog.string", "goog.structs", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/iframeloadmonitor.js", ["goog.net.IframeLoadMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/imageloader.js", ["goog.net.ImageLoader"], ["goog.array", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.EventType", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/ipaddress.js", ["goog.net.IpAddress", "goog.net.Ipv4Address", "goog.net.Ipv6Address"], ["goog.array", "goog.math.Integer", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/net/jsloader.js", ["goog.net.jsloader", "goog.net.jsloader.Error", "goog.net.jsloader.ErrorCode", "goog.net.jsloader.Options"], ["goog.array", "goog.async.Deferred", "goog.debug.Error", "goog.dom", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/net/jsonp.js", ["goog.net.Jsonp"], ["goog.Uri", "goog.net.jsloader"]);
goog.addDependency("/closure/goog/net/mockiframeio.js", ["goog.net.MockIFrameIo"], ["goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.IframeIo"]);
goog.addDependency("/closure/goog/net/multiiframeloadmonitor.js", ["goog.net.MultiIframeLoadMonitor"], ["goog.events", "goog.net.IframeLoadMonitor"]);
goog.addDependency("/closure/goog/net/networkstatusmonitor.js", ["goog.net.NetworkStatusMonitor"], ["goog.events.Listenable"]);
goog.addDependency("/closure/goog/net/networktester.js", ["goog.net.NetworkTester"], ["goog.Timer", "goog.Uri", "goog.log"]);
goog.addDependency("/closure/goog/net/testdata/jsloader_test1.js", ["goog.net.testdata.jsloader_test1"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test2.js", ["goog.net.testdata.jsloader_test2"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test3.js", ["goog.net.testdata.jsloader_test3"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test4.js", ["goog.net.testdata.jsloader_test4"], []);
goog.addDependency("/closure/goog/net/tmpnetwork.js", ["goog.net.tmpnetwork"], ["goog.Uri", "goog.net.ChannelDebug"]);
goog.addDependency("/closure/goog/net/websocket.js", ["goog.net.WebSocket", "goog.net.WebSocket.ErrorEvent", "goog.net.WebSocket.EventType", "goog.net.WebSocket.MessageEvent"], ["goog.Timer", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log"]);
goog.addDependency("/closure/goog/net/wrapperxmlhttpfactory.js", ["goog.net.WrapperXmlHttpFactory"], ["goog.net.XmlHttpFactory"]);
goog.addDependency("/closure/goog/net/xhrio.js", ["goog.net.XhrIo", "goog.net.XhrIo.ResponseType"], ["goog.Timer", "goog.array", "goog.debug.entryPointRegistry", "goog.events.EventTarget", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.object", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xhriopool.js", ["goog.net.XhrIoPool"], ["goog.net.XhrIo", "goog.structs", "goog.structs.PriorityPool"]);
goog.addDependency("/closure/goog/net/xhrmanager.js", ["goog.net.XhrManager", "goog.net.XhrManager.Event", "goog.net.XhrManager.Request"], ["goog.Disposable", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.structs", "goog.structs.Map"]);
goog.addDependency("/closure/goog/net/xmlhttp.js", ["goog.net.DefaultXmlHttpFactory", "goog.net.XmlHttp", "goog.net.XmlHttp.OptionType", "goog.net.XmlHttp.ReadyState"], ["goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttpFactory"]);
goog.addDependency("/closure/goog/net/xmlhttpfactory.js", ["goog.net.XmlHttpFactory"], []);
goog.addDependency("/closure/goog/net/xpc/crosspagechannel.js", ["goog.net.xpc.CrossPageChannel"], ["goog.Disposable", "goog.Uri", "goog.async.Deferred", "goog.async.Delay", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.json", "goog.messaging.AbstractChannel", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.FrameElementMethodTransport", "goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframeRelayTransport", "goog.net.xpc.NativeMessagingTransport", "goog.net.xpc.NixTransport",
"goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/crosspagechannelrole.js", ["goog.net.xpc.CrossPageChannelRole"], []);
goog.addDependency("/closure/goog/net/xpc/frameelementmethodtransport.js", ["goog.net.xpc.FrameElementMethodTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]);
goog.addDependency("/closure/goog/net/xpc/iframepollingtransport.js", ["goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframePollingTransport.Receiver", "goog.net.xpc.IframePollingTransport.Sender"], ["goog.array", "goog.dom", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/iframerelaytransport.js", ["goog.net.xpc.IframeRelayTransport"], ["goog.dom", "goog.events", "goog.net.xpc", "goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/nativemessagingtransport.js", ["goog.net.xpc.NativeMessagingTransport"], ["goog.Timer", "goog.asserts", "goog.async.Deferred", "goog.events", "goog.events.EventHandler", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]);
goog.addDependency("/closure/goog/net/xpc/nixtransport.js", ["goog.net.xpc.NixTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.reflect"]);
goog.addDependency("/closure/goog/net/xpc/relay.js", ["goog.net.xpc.relay"], []);
goog.addDependency("/closure/goog/net/xpc/transport.js", ["goog.net.xpc.Transport"], ["goog.Disposable", "goog.dom", "goog.net.xpc"]);
goog.addDependency("/closure/goog/net/xpc/xpc.js", ["goog.net.xpc", "goog.net.xpc.CfgFields", "goog.net.xpc.ChannelStates", "goog.net.xpc.TransportNames", "goog.net.xpc.TransportTypes", "goog.net.xpc.UriCfgFields"], ["goog.log"]);
goog.addDependency("/closure/goog/object/object.js", ["goog.object"], []);
goog.addDependency("/closure/goog/positioning/absoluteposition.js", ["goog.positioning.AbsolutePosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/positioning/abstractposition.js", ["goog.positioning.AbstractPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning.Corner"]);
goog.addDependency("/closure/goog/positioning/anchoredposition.js", ["goog.positioning.AnchoredPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/positioning/anchoredviewportposition.js", ["goog.positioning.AnchoredViewportPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"]);
goog.addDependency("/closure/goog/positioning/clientposition.js", ["goog.positioning.ClientPosition"], ["goog.asserts", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition", "goog.style"]);
goog.addDependency("/closure/goog/positioning/clientposition_test.js", ["goog.positioning.clientPositionTest"], ["goog.dom", "goog.positioning.ClientPosition", "goog.style", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/positioning/menuanchoredposition.js", ["goog.positioning.MenuAnchoredPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.Overflow"]);
goog.addDependency("/closure/goog/positioning/positioning.js", ["goog.positioning", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.style.bidi"]);
goog.addDependency("/closure/goog/positioning/positioning_test.js", ["goog.positioningTest"], ["goog.dom", "goog.dom.DomHelper", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/positioning/viewportclientposition.js", ["goog.positioning.ViewportClientPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.ClientPosition"]);
goog.addDependency("/closure/goog/positioning/viewportposition.js", ["goog.positioning.ViewportPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/proto/proto.js", ["goog.proto"], ["goog.proto.Serializer"]);
goog.addDependency("/closure/goog/proto/serializer.js", ["goog.proto.Serializer"], ["goog.json.Serializer", "goog.string"]);
goog.addDependency("/closure/goog/proto2/descriptor.js", ["goog.proto2.Descriptor", "goog.proto2.Metadata"], ["goog.array", "goog.object", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/fielddescriptor.js", ["goog.proto2.FieldDescriptor"], ["goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/lazydeserializer.js", ["goog.proto2.LazyDeserializer"], ["goog.proto2.Message", "goog.proto2.Serializer", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/message.js", ["goog.proto2.Message"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/objectserializer.js", ["goog.proto2.ObjectSerializer"], ["goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/package_test.pb.js", ["someprotopackage.TestPackageTypes"], ["goog.proto2.Message", "proto2.TestAllTypes"]);
goog.addDependency("/closure/goog/proto2/pbliteserializer.js", ["goog.proto2.PbLiteSerializer"], ["goog.proto2.LazyDeserializer", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/serializer.js", ["goog.proto2.Serializer"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Message", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/test.pb.js", ["proto2.TestAllTypes", "proto2.TestAllTypes.NestedEnum", "proto2.TestAllTypes.NestedMessage", "proto2.TestAllTypes.OptionalGroup", "proto2.TestAllTypes.RepeatedGroup"], ["goog.proto2.Message"]);
goog.addDependency("/closure/goog/proto2/textformatserializer.js", ["goog.proto2.TextFormatSerializer", "goog.proto2.TextFormatSerializer.Parser"], ["goog.array", "goog.asserts", "goog.json", "goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/textformatserializer_test.js", ["goog.proto2.TextFormatSerializerTest"], ["goog.proto2.TextFormatSerializer", "goog.testing.jsunit", "proto2.TestAllTypes"]);
goog.addDependency("/closure/goog/proto2/util.js", ["goog.proto2.Util"], ["goog.asserts"]);
goog.addDependency("/closure/goog/pubsub/pubsub.js", ["goog.pubsub.PubSub"], ["goog.Disposable", "goog.array"]);
goog.addDependency("/closure/goog/reflect/reflect.js", ["goog.reflect"], []);
goog.addDependency("/closure/goog/result/deferredadaptor.js", ["goog.result.DeferredAdaptor"], ["goog.async.Deferred", "goog.result", "goog.result.Result"]);
goog.addDependency("/closure/goog/result/dependentresult.js", ["goog.result.DependentResult"], ["goog.result.Result"]);
goog.addDependency("/closure/goog/result/result_interface.js", ["goog.result.Result"], []);
goog.addDependency("/closure/goog/result/resultutil.js", ["goog.result"], ["goog.array", "goog.result.DependentResult", "goog.result.Result", "goog.result.SimpleResult"]);
goog.addDependency("/closure/goog/result/simpleresult.js", ["goog.result.SimpleResult", "goog.result.SimpleResult.StateError"], ["goog.debug.Error", "goog.result.Result"]);
goog.addDependency("/closure/goog/soy/data.js", ["goog.soy.data", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"], []);
goog.addDependency("/closure/goog/soy/renderer.js", ["goog.soy.InjectedDataSupplier", "goog.soy.Renderer"], ["goog.asserts", "goog.dom", "goog.soy", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"]);
goog.addDependency("/closure/goog/soy/soy.js", ["goog.soy"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.soy.data", "goog.string"]);
goog.addDependency("/closure/goog/soy/soy_test.js", ["goog.soy.testHelper"], ["goog.dom", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.userAgent", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/spell/spellcheck.js", ["goog.spell.SpellCheck", "goog.spell.SpellCheck.WordChangedEvent"], ["goog.Timer", "goog.events.EventTarget", "goog.structs.Set"]);
goog.addDependency("/closure/goog/stats/basicstat.js", ["goog.stats.BasicStat"], ["goog.array", "goog.iter", "goog.log", "goog.object", "goog.string.format", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/storage/collectablestorage.js", ["goog.storage.CollectableStorage"], ["goog.array", "goog.asserts", "goog.iter", "goog.storage.ErrorCode", "goog.storage.ExpiringStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/encryptedstorage.js", ["goog.storage.EncryptedStorage"], ["goog.crypt", "goog.crypt.Arc4", "goog.crypt.Sha1", "goog.crypt.base64", "goog.json", "goog.json.Serializer", "goog.storage.CollectableStorage", "goog.storage.ErrorCode", "goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/errorcode.js", ["goog.storage.ErrorCode"], []);
goog.addDependency("/closure/goog/storage/expiringstorage.js", ["goog.storage.ExpiringStorage"], ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/errorcode.js", ["goog.storage.mechanism.ErrorCode"], []);
goog.addDependency("/closure/goog/storage/mechanism/errorhandlingmechanism.js", ["goog.storage.mechanism.ErrorHandlingMechanism"], ["goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/html5localstorage.js", ["goog.storage.mechanism.HTML5LocalStorage"], ["goog.storage.mechanism.HTML5WebStorage"]);
goog.addDependency("/closure/goog/storage/mechanism/html5sessionstorage.js", ["goog.storage.mechanism.HTML5SessionStorage"], ["goog.storage.mechanism.HTML5WebStorage"]);
goog.addDependency("/closure/goog/storage/mechanism/html5webstorage.js", ["goog.storage.mechanism.HTML5WebStorage"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/ieuserdata.js", ["goog.storage.mechanism.IEUserData"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism", "goog.structs.Map", "goog.userAgent"]);
goog.addDependency("/closure/goog/storage/mechanism/iterablemechanism.js", ["goog.storage.mechanism.IterableMechanism"], ["goog.array", "goog.asserts", "goog.iter", "goog.iter.Iterator", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/iterablemechanismtester.js", ["goog.storage.mechanism.iterableMechanismTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanism.js", ["goog.storage.mechanism.Mechanism"], []);
goog.addDependency("/closure/goog/storage/mechanism/mechanismfactory.js", ["goog.storage.mechanism.mechanismfactory"], ["goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.HTML5SessionStorage", "goog.storage.mechanism.IEUserData", "goog.storage.mechanism.IterableMechanism", "goog.storage.mechanism.PrefixedMechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismseparationtester.js", ["goog.storage.mechanism.mechanismSeparationTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismsharingtester.js", ["goog.storage.mechanism.mechanismSharingTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismtester.js", ["goog.storage.mechanism.mechanismTester"], ["goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.Mechanism", "goog.testing.asserts", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/storage/mechanism/prefixedmechanism.js", ["goog.storage.mechanism.PrefixedMechanism"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/richstorage.js", ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper"], ["goog.storage.ErrorCode", "goog.storage.Storage", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/storage.js", ["goog.storage.Storage"], ["goog.json", "goog.json.Serializer", "goog.storage.ErrorCode"]);
goog.addDependency("/closure/goog/storage/storage_test.js", ["goog.storage.storage_test"], ["goog.storage.Storage", "goog.structs.Map", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/string/linkify.js", ["goog.string.linkify"], ["goog.string"]);
goog.addDependency("/closure/goog/string/newlines.js", ["goog.string.newlines", "goog.string.newlines.Line"], ["goog.array"]);
goog.addDependency("/closure/goog/string/newlines_test.js", ["goog.string.newlinesTest"], ["goog.string.newlines", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/string/parser.js", ["goog.string.Parser"], []);
goog.addDependency("/closure/goog/string/path.js", ["goog.string.path"], ["goog.array", "goog.string"]);
goog.addDependency("/closure/goog/string/string.js", ["goog.string", "goog.string.Unicode"], []);
goog.addDependency("/closure/goog/string/string_test.js", ["goog.stringTest"], ["goog.functions", "goog.object", "goog.string", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/string/stringbuffer.js", ["goog.string.StringBuffer"], []);
goog.addDependency("/closure/goog/string/stringformat.js", ["goog.string.format"], ["goog.string"]);
goog.addDependency("/closure/goog/string/stringifier.js", ["goog.string.Stringifier"], []);
goog.addDependency("/closure/goog/structs/avltree.js", ["goog.structs.AvlTree", "goog.structs.AvlTree.Node"], ["goog.structs.Collection"]);
goog.addDependency("/closure/goog/structs/circularbuffer.js", ["goog.structs.CircularBuffer"], []);
goog.addDependency("/closure/goog/structs/collection.js", ["goog.structs.Collection"], []);
goog.addDependency("/closure/goog/structs/heap.js", ["goog.structs.Heap"], ["goog.array", "goog.object", "goog.structs.Node"]);
goog.addDependency("/closure/goog/structs/inversionmap.js", ["goog.structs.InversionMap"], ["goog.array"]);
goog.addDependency("/closure/goog/structs/linkedmap.js", ["goog.structs.LinkedMap"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/structs/map.js", ["goog.structs.Map"], ["goog.iter.Iterator", "goog.iter.StopIteration", "goog.object"]);
goog.addDependency("/closure/goog/structs/node.js", ["goog.structs.Node"], []);
goog.addDependency("/closure/goog/structs/pool.js", ["goog.structs.Pool"], ["goog.Disposable", "goog.structs.Queue", "goog.structs.Set"]);
goog.addDependency("/closure/goog/structs/prioritypool.js", ["goog.structs.PriorityPool"], ["goog.structs.Pool", "goog.structs.PriorityQueue"]);
goog.addDependency("/closure/goog/structs/priorityqueue.js", ["goog.structs.PriorityQueue"], ["goog.structs.Heap"]);
goog.addDependency("/closure/goog/structs/quadtree.js", ["goog.structs.QuadTree", "goog.structs.QuadTree.Node", "goog.structs.QuadTree.Point"], ["goog.math.Coordinate"]);
goog.addDependency("/closure/goog/structs/queue.js", ["goog.structs.Queue"], ["goog.array"]);
goog.addDependency("/closure/goog/structs/set.js", ["goog.structs.Set"], ["goog.structs", "goog.structs.Collection", "goog.structs.Map"]);
goog.addDependency("/closure/goog/structs/simplepool.js", ["goog.structs.SimplePool"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/structs/stringset.js", ["goog.structs.StringSet"], ["goog.asserts", "goog.iter"]);
goog.addDependency("/closure/goog/structs/structs.js", ["goog.structs"], ["goog.array", "goog.object"]);
goog.addDependency("/closure/goog/structs/treenode.js", ["goog.structs.TreeNode"], ["goog.array", "goog.asserts", "goog.structs.Node"]);
goog.addDependency("/closure/goog/structs/trie.js", ["goog.structs.Trie"], ["goog.object", "goog.structs"]);
goog.addDependency("/closure/goog/style/bidi.js", ["goog.style.bidi"], ["goog.dom", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/style/cursor.js", ["goog.style.cursor"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/style/style.js", ["goog.style"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.vendor", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/style/style_test.js", ["goog.style_test"], ["goog.array", "goog.color", "goog.dom", "goog.events.BrowserEvent", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.PropertyReplacer", "goog.testing.asserts", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/style/stylescrollbartester.js", ["goog.styleScrollbarTester"], ["goog.dom", "goog.style", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/style/transition.js", ["goog.style.transition", "goog.style.transition.Css3Property"], ["goog.array", "goog.asserts", "goog.dom.vendor", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/asserts.js", ["goog.testing.JsUnitException", "goog.testing.asserts"], ["goog.testing.stacktrace"]);
goog.addDependency("/closure/goog/testing/async/mockcontrol.js", ["goog.testing.async.MockControl"], ["goog.asserts", "goog.async.Deferred", "goog.debug", "goog.testing.asserts", "goog.testing.mockmatchers.IgnoreArgument"]);
goog.addDependency("/closure/goog/testing/asynctestcase.js", ["goog.testing.AsyncTestCase", "goog.testing.AsyncTestCase.ControlBreakingException"], ["goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/benchmark.js", ["goog.testing.benchmark"], ["goog.dom", "goog.dom.TagName", "goog.testing.PerformanceTable", "goog.testing.PerformanceTimer", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/continuationtestcase.js", ["goog.testing.ContinuationTestCase", "goog.testing.ContinuationTestCase.Step", "goog.testing.ContinuationTestCase.Test"], ["goog.array", "goog.events.EventHandler", "goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/deferredtestcase.js", ["goog.testing.DeferredTestCase"], ["goog.async.Deferred", "goog.testing.AsyncTestCase", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/dom.js", ["goog.testing.dom"], ["goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.object", "goog.string", "goog.style", "goog.testing.asserts", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/editor/dom.js", ["goog.testing.editor.dom"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagWalkType", "goog.iter", "goog.string", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/editor/fieldmock.js", ["goog.testing.editor.FieldMock"], ["goog.dom", "goog.dom.Range", "goog.editor.Field", "goog.testing.LooseMock", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/editor/testhelper.js", ["goog.testing.editor.TestHelper"], ["goog.Disposable", "goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.node", "goog.editor.plugins.AbstractBubblePlugin", "goog.testing.dom"]);
goog.addDependency("/closure/goog/testing/events/eventobserver.js", ["goog.testing.events.EventObserver"], ["goog.array"]);
goog.addDependency("/closure/goog/testing/events/events.js", ["goog.testing.events", "goog.testing.events.Event"], ["goog.Disposable", "goog.asserts", "goog.dom.NodeType", "goog.events", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.object", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/events/matchers.js", ["goog.testing.events.EventMatcher"], ["goog.events.Event", "goog.testing.mockmatchers.ArgumentMatcher"]);
goog.addDependency("/closure/goog/testing/events/onlinehandler.js", ["goog.testing.events.OnlineHandler"], ["goog.events.EventTarget", "goog.net.NetworkStatusMonitor"]);
goog.addDependency("/closure/goog/testing/expectedfailures.js", ["goog.testing.ExpectedFailures"], ["goog.debug.DivConsole", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.log", "goog.style", "goog.testing.JsUnitException", "goog.testing.TestCase", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/fs/blob.js", ["goog.testing.fs.Blob"], ["goog.crypt.base64"]);
goog.addDependency("/closure/goog/testing/fs/entry.js", ["goog.testing.fs.DirectoryEntry", "goog.testing.fs.Entry", "goog.testing.fs.FileEntry"], ["goog.Timer", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.DirectoryEntryImpl", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.functions", "goog.object", "goog.string", "goog.testing.fs.File", "goog.testing.fs.FileWriter"]);
goog.addDependency("/closure/goog/testing/fs/file.js", ["goog.testing.fs.File"], ["goog.testing.fs.Blob"]);
goog.addDependency("/closure/goog/testing/fs/filereader.js", ["goog.testing.fs.FileReader"], ["goog.Timer", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/testing/fs/filesystem.js", ["goog.testing.fs.FileSystem"], ["goog.fs.FileSystem", "goog.testing.fs.DirectoryEntry"]);
goog.addDependency("/closure/goog/testing/fs/filewriter.js", ["goog.testing.fs.FileWriter"], ["goog.Timer", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ReadyState", "goog.string", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/testing/fs/fs.js", ["goog.testing.fs"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.fs", "goog.testing.fs.Blob", "goog.testing.fs.FileSystem"]);
goog.addDependency("/closure/goog/testing/fs/progressevent.js", ["goog.testing.fs.ProgressEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/testing/functionmock.js", ["goog.testing", "goog.testing.FunctionMock", "goog.testing.GlobalFunctionMock", "goog.testing.MethodMock"], ["goog.object", "goog.testing.LooseMock", "goog.testing.Mock", "goog.testing.MockInterface", "goog.testing.PropertyReplacer", "goog.testing.StrictMock"]);
goog.addDependency("/closure/goog/testing/graphics.js", ["goog.testing.graphics"], ["goog.graphics.Path.Segment", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/i18n/asserts.js", ["goog.testing.i18n.asserts"], ["goog.testing.jsunit"]);
goog.addDependency("/closure/goog/testing/i18n/asserts_test.js", ["goog.testing.i18n.assertsTest"], ["goog.testing.i18n.asserts", "goog.testing.ExpectedFailures"]);
goog.addDependency("/closure/goog/testing/jsunit.js", ["goog.testing.jsunit"], ["goog.testing.TestCase", "goog.testing.TestRunner"]);
goog.addDependency("/closure/goog/testing/loosemock.js", ["goog.testing.LooseExpectationCollection", "goog.testing.LooseMock"], ["goog.array", "goog.structs.Map", "goog.testing.Mock"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessagechannel.js", ["goog.testing.messaging.MockMessageChannel"], ["goog.messaging.AbstractChannel", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessageevent.js", ["goog.testing.messaging.MockMessageEvent"], ["goog.events.BrowserEvent", "goog.events.EventType", "goog.testing.events"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessageport.js", ["goog.testing.messaging.MockMessagePort"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/testing/messaging/mockportnetwork.js", ["goog.testing.messaging.MockPortNetwork"], ["goog.messaging.PortNetwork", "goog.testing.messaging.MockMessageChannel"]);
goog.addDependency("/closure/goog/testing/mock.js", ["goog.testing.Mock", "goog.testing.MockExpectation"], ["goog.array", "goog.object", "goog.testing.JsUnitException", "goog.testing.MockInterface", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/mockclassfactory.js", ["goog.testing.MockClassFactory", "goog.testing.MockClassRecord"], ["goog.array", "goog.object", "goog.testing.LooseMock", "goog.testing.StrictMock", "goog.testing.TestCase", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/mockclock.js", ["goog.testing.MockClock"], ["goog.Disposable", "goog.testing.PropertyReplacer", "goog.testing.events", "goog.testing.events.Event"]);
goog.addDependency("/closure/goog/testing/mockcontrol.js", ["goog.testing.MockControl"], ["goog.array", "goog.testing", "goog.testing.LooseMock", "goog.testing.MockInterface", "goog.testing.StrictMock"]);
goog.addDependency("/closure/goog/testing/mockinterface.js", ["goog.testing.MockInterface"], []);
goog.addDependency("/closure/goog/testing/mockmatchers.js", ["goog.testing.mockmatchers", "goog.testing.mockmatchers.ArgumentMatcher", "goog.testing.mockmatchers.IgnoreArgument", "goog.testing.mockmatchers.InstanceOf", "goog.testing.mockmatchers.ObjectEquals", "goog.testing.mockmatchers.RegexpMatch", "goog.testing.mockmatchers.SaveArgument", "goog.testing.mockmatchers.TypeOf"], ["goog.array", "goog.dom", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/mockrandom.js", ["goog.testing.MockRandom"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/testing/mockrange.js", ["goog.testing.MockRange"], ["goog.dom.AbstractRange", "goog.testing.LooseMock"]);
goog.addDependency("/closure/goog/testing/mockstorage.js", ["goog.testing.MockStorage"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/mockuseragent.js", ["goog.testing.MockUserAgent"], ["goog.Disposable", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/multitestrunner.js", ["goog.testing.MultiTestRunner", "goog.testing.MultiTestRunner.TestFrame"], ["goog.Timer", "goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventHandler", "goog.functions", "goog.string", "goog.ui.Component", "goog.ui.ServerChart", "goog.ui.TableSorter"]);
goog.addDependency("/closure/goog/testing/net/xhrio.js", ["goog.testing.net.XhrIo"], ["goog.array", "goog.dom.xml", "goog.events", "goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XhrIo", "goog.net.XmlHttp", "goog.object", "goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/net/xhriopool.js", ["goog.testing.net.XhrIoPool"], ["goog.net.XhrIoPool", "goog.testing.net.XhrIo"]);
goog.addDependency("/closure/goog/testing/objectpropertystring.js", ["goog.testing.ObjectPropertyString"], []);
goog.addDependency("/closure/goog/testing/performancetable.js", ["goog.testing.PerformanceTable"], ["goog.dom", "goog.testing.PerformanceTimer"]);
goog.addDependency("/closure/goog/testing/performancetimer.js", ["goog.testing.PerformanceTimer", "goog.testing.PerformanceTimer.Task"], ["goog.array", "goog.async.Deferred", "goog.math"]);
goog.addDependency("/closure/goog/testing/propertyreplacer.js", ["goog.testing.PropertyReplacer"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/testing/proto2/proto2.js", ["goog.testing.proto2"], ["goog.proto2.Message", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/pseudorandom.js", ["goog.testing.PseudoRandom"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/testing/recordfunction.js", ["goog.testing.FunctionCall", "goog.testing.recordConstructor", "goog.testing.recordFunction"], []);
goog.addDependency("/closure/goog/testing/shardingtestcase.js", ["goog.testing.ShardingTestCase"], ["goog.asserts", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/singleton.js", ["goog.testing.singleton"], []);
goog.addDependency("/closure/goog/testing/stacktrace.js", ["goog.testing.stacktrace", "goog.testing.stacktrace.Frame"], []);
goog.addDependency("/closure/goog/testing/storage/fakemechanism.js", ["goog.testing.storage.FakeMechanism"], ["goog.storage.mechanism.IterableMechanism", "goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/strictmock.js", ["goog.testing.StrictMock"], ["goog.array", "goog.testing.Mock"]);
goog.addDependency("/closure/goog/testing/style/layoutasserts.js", ["goog.testing.style.layoutasserts"], ["goog.style", "goog.testing.asserts", "goog.testing.style"]);
goog.addDependency("/closure/goog/testing/style/style.js", ["goog.testing.style"], ["goog.dom", "goog.math.Rect", "goog.style"]);
goog.addDependency("/closure/goog/testing/testcase.js", ["goog.testing.TestCase", "goog.testing.TestCase.Error", "goog.testing.TestCase.Order", "goog.testing.TestCase.Result", "goog.testing.TestCase.Test"], ["goog.object", "goog.testing.asserts", "goog.testing.stacktrace"]);
goog.addDependency("/closure/goog/testing/testqueue.js", ["goog.testing.TestQueue"], []);
goog.addDependency("/closure/goog/testing/testrunner.js", ["goog.testing.TestRunner"], ["goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/ui/rendererasserts.js", ["goog.testing.ui.rendererasserts"], ["goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/ui/rendererharness.js", ["goog.testing.ui.RendererHarness"], ["goog.Disposable", "goog.dom.NodeType", "goog.testing.asserts", "goog.testing.dom"]);
goog.addDependency("/closure/goog/testing/ui/style.js", ["goog.testing.ui.style"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/timer/timer.js", ["goog.Timer"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/tweak/entries.js", ["goog.tweak.BaseEntry", "goog.tweak.BasePrimitiveSetting", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.StringSetting"], ["goog.array", "goog.asserts", "goog.log", "goog.object"]);
goog.addDependency("/closure/goog/tweak/registry.js", ["goog.tweak.Registry"], ["goog.asserts", "goog.log", "goog.object", "goog.string", "goog.tweak.BaseEntry", "goog.uri.utils"]);
goog.addDependency("/closure/goog/tweak/testhelpers.js", ["goog.tweak.testhelpers"], ["goog.tweak", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]);
goog.addDependency("/closure/goog/tweak/tweak.js", ["goog.tweak", "goog.tweak.ConfigParams"], ["goog.asserts", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]);
goog.addDependency("/closure/goog/tweak/tweakui.js", ["goog.tweak.EntriesPanel", "goog.tweak.TweakUi"], ["goog.array", "goog.asserts", "goog.dom.DomHelper", "goog.object", "goog.style", "goog.tweak", "goog.ui.Zippy", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/abstractspellchecker.js", ["goog.ui.AbstractSpellChecker", "goog.ui.AbstractSpellChecker.AsyncResult"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.dom.selection", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.math.Coordinate", "goog.spell.SpellCheck", "goog.structs.Set", "goog.style", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.PopupMenu"]);
goog.addDependency("/closure/goog/ui/ac/ac.js", ["goog.ui.ac"], ["goog.ui.ac.ArrayMatcher", "goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.Renderer"]);
goog.addDependency("/closure/goog/ui/ac/arraymatcher.js", ["goog.ui.ac.ArrayMatcher"], ["goog.string"]);
goog.addDependency("/closure/goog/ui/ac/autocomplete.js", ["goog.ui.ac.AutoComplete", "goog.ui.ac.AutoComplete.EventType"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventTarget", "goog.object"]);
goog.addDependency("/closure/goog/ui/ac/inputhandler.js", ["goog.ui.ac.InputHandler"], ["goog.Disposable", "goog.Timer", "goog.a11y.aria", "goog.dom", "goog.dom.selection", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/ui/ac/remote.js", ["goog.ui.ac.Remote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.RemoteArrayMatcher", "goog.ui.ac.Renderer"]);
goog.addDependency("/closure/goog/ui/ac/remotearraymatcher.js", ["goog.ui.ac.RemoteArrayMatcher"], ["goog.Disposable", "goog.Uri", "goog.events", "goog.json", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/ui/ac/renderer.js", ["goog.ui.ac.Renderer", "goog.ui.ac.Renderer.CustomRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOutAndHide", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.string", "goog.style", "goog.ui.IdGenerator",
"goog.ui.ac.AutoComplete"]);
goog.addDependency("/closure/goog/ui/ac/renderoptions.js", ["goog.ui.ac.RenderOptions"], []);
goog.addDependency("/closure/goog/ui/ac/richinputhandler.js", ["goog.ui.ac.RichInputHandler"], ["goog.ui.ac.InputHandler"]);
goog.addDependency("/closure/goog/ui/ac/richremote.js", ["goog.ui.ac.RichRemote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.Remote", "goog.ui.ac.Renderer", "goog.ui.ac.RichInputHandler", "goog.ui.ac.RichRemoteArrayMatcher"]);
goog.addDependency("/closure/goog/ui/ac/richremotearraymatcher.js", ["goog.ui.ac.RichRemoteArrayMatcher"], ["goog.json", "goog.ui.ac.RemoteArrayMatcher"]);
goog.addDependency("/closure/goog/ui/activitymonitor.js", ["goog.ui.ActivityMonitor"], ["goog.array", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/ui/advancedtooltip.js", ["goog.ui.AdvancedTooltip"], ["goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style", "goog.ui.Tooltip", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/animatedzippy.js", ["goog.ui.AnimatedZippy"], ["goog.dom", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.ui.Zippy", "goog.ui.ZippyEvent"]);
goog.addDependency("/closure/goog/ui/attachablemenu.js", ["goog.ui.AttachableMenu"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.ItemEvent", "goog.ui.MenuBase", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/bidiinput.js", ["goog.ui.BidiInput"], ["goog.dom", "goog.events", "goog.events.InputHandler", "goog.i18n.bidi", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/bubble.js", ["goog.ui.Bubble"], ["goog.Timer", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.positioning", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.style", "goog.ui.Component", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/button.js", ["goog.ui.Button", "goog.ui.Button.Side"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.ButtonRenderer", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.Control", "goog.ui.NativeButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/buttonrenderer.js", ["goog.ui.ButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/buttonside.js", ["goog.ui.ButtonSide"], []);
goog.addDependency("/closure/goog/ui/charcounter.js", ["goog.ui.CharCounter", "goog.ui.CharCounter.Display"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.InputHandler"]);
goog.addDependency("/closure/goog/ui/charpicker.js", ["goog.ui.CharPicker"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.i18n.CharListDecompressor", "goog.i18n.uChar", "goog.structs.Set", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.ContainerScroller", "goog.ui.FlatButtonRenderer",
"goog.ui.HoverCard", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.Tooltip"]);
goog.addDependency("/closure/goog/ui/checkbox.js", ["goog.ui.Checkbox", "goog.ui.Checkbox.State"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.events.EventType", "goog.events.KeyCodes", "goog.ui.CheckboxRenderer", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Control", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/checkboxmenuitem.js", ["goog.ui.CheckBoxMenuItem"], ["goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/checkboxrenderer.js", ["goog.ui.CheckboxRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.object", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/colorbutton.js", ["goog.ui.ColorButton"], ["goog.ui.Button", "goog.ui.ColorButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/colorbuttonrenderer.js", ["goog.ui.ColorButtonRenderer"], ["goog.dom.classes", "goog.functions", "goog.ui.ColorMenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/colormenubutton.js", ["goog.ui.ColorMenuButton"], ["goog.array", "goog.object", "goog.ui.ColorMenuButtonRenderer", "goog.ui.ColorPalette", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/colormenubuttonrenderer.js", ["goog.ui.ColorMenuButtonRenderer"], ["goog.color", "goog.dom.classes", "goog.ui.MenuButtonRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/colorpalette.js", ["goog.ui.ColorPalette"], ["goog.array", "goog.color", "goog.style", "goog.ui.Palette", "goog.ui.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/colorpicker.js", ["goog.ui.ColorPicker", "goog.ui.ColorPicker.EventType"], ["goog.ui.ColorPalette", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/colorsplitbehavior.js", ["goog.ui.ColorSplitBehavior"], ["goog.ui.ColorMenuButton", "goog.ui.SplitBehavior"]);
goog.addDependency("/closure/goog/ui/combobox.js", ["goog.ui.ComboBox", "goog.ui.ComboBoxItem"], ["goog.Timer", "goog.dom", "goog.dom.classlist", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.log", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.ItemEvent", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.registry",
"goog.userAgent"]);
goog.addDependency("/closure/goog/ui/component.js", ["goog.ui.Component", "goog.ui.Component.Error", "goog.ui.Component.EventType", "goog.ui.Component.State"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.events.EventHandler", "goog.events.EventTarget", "goog.object", "goog.style", "goog.ui.IdGenerator"]);
goog.addDependency("/closure/goog/ui/container.js", ["goog.ui.Container", "goog.ui.Container.EventType", "goog.ui.Container.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.object", "goog.style", "goog.ui.Component", "goog.ui.ContainerRenderer", "goog.ui.Control"]);
goog.addDependency("/closure/goog/ui/containerrenderer.js", ["goog.ui.ContainerRenderer"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.style", "goog.ui.registry", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/containerscroller.js", ["goog.ui.ContainerScroller"], ["goog.Disposable", "goog.Timer", "goog.events.EventHandler", "goog.style", "goog.ui.Component", "goog.ui.Container"]);
goog.addDependency("/closure/goog/ui/control.js", ["goog.ui.Control"], ["goog.array", "goog.dom", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.ui.Component", "goog.ui.ControlContent", "goog.ui.ControlRenderer", "goog.ui.decorate", "goog.ui.registry", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/controlcontent.js", ["goog.ui.ControlContent"], []);
goog.addDependency("/closure/goog/ui/controlrenderer.js", ["goog.ui.ControlRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.object", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/cookieeditor.js", ["goog.ui.CookieEditor"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events.EventType", "goog.net.cookies", "goog.string", "goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/css3buttonrenderer.js", ["goog.ui.Css3ButtonRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.Component", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/css3menubuttonrenderer.js", ["goog.ui.Css3MenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/cssnames.js", ["goog.ui.INLINE_BLOCK_CLASSNAME"], []);
goog.addDependency("/closure/goog/ui/custombutton.js", ["goog.ui.CustomButton"], ["goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/custombuttonrenderer.js", ["goog.ui.CustomButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME"]);
goog.addDependency("/closure/goog/ui/customcolorpalette.js", ["goog.ui.CustomColorPalette"], ["goog.color", "goog.dom", "goog.dom.classes", "goog.ui.ColorPalette", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/datepicker.js", ["goog.ui.DatePicker", "goog.ui.DatePicker.Events", "goog.ui.DatePickerEvent"], ["goog.a11y.aria", "goog.asserts", "goog.date", "goog.date.Date", "goog.date.Interval", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.DefaultDatePickerRenderer", "goog.ui.IdGenerator"]);
goog.addDependency("/closure/goog/ui/datepickerrenderer.js", ["goog.ui.DatePickerRenderer"], []);
goog.addDependency("/closure/goog/ui/decorate.js", ["goog.ui.decorate"], ["goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/defaultdatepickerrenderer.js", ["goog.ui.DefaultDatePickerRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.DatePickerRenderer"]);
goog.addDependency("/closure/goog/ui/dialog.js", ["goog.ui.Dialog", "goog.ui.Dialog.ButtonSet", "goog.ui.Dialog.ButtonSet.DefaultButtons", "goog.ui.Dialog.DefaultButtonCaptions", "goog.ui.Dialog.DefaultButtonKeys", "goog.ui.Dialog.Event", "goog.ui.Dialog.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes",
"goog.fx.Dragger", "goog.math.Rect", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.ModalPopup", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/dimensionpicker.js", ["goog.ui.DimensionPicker"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.DimensionPickerRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/dimensionpickerrenderer.js", ["goog.ui.DimensionPickerRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.dom", "goog.dom.TagName", "goog.i18n.bidi", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/dragdropdetector.js", ["goog.ui.DragDropDetector", "goog.ui.DragDropDetector.EventType", "goog.ui.DragDropDetector.ImageDropEvent", "goog.ui.DragDropDetector.LinkDropEvent"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/drilldownrow.js", ["goog.ui.DrilldownRow"], ["goog.dom", "goog.dom.classes", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/editor/abstractdialog.js", ["goog.ui.editor.AbstractDialog", "goog.ui.editor.AbstractDialog.Builder", "goog.ui.editor.AbstractDialog.EventType"], ["goog.dom", "goog.dom.classes", "goog.events.EventTarget", "goog.string", "goog.ui.Dialog"]);
goog.addDependency("/closure/goog/ui/editor/bubble.js", ["goog.ui.editor.Bubble"], ["goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.dom.classes", "goog.editor.style", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log", "goog.math.Box", "goog.object", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/editor/defaulttoolbar.js", ["goog.ui.editor.ButtonDescriptor", "goog.ui.editor.DefaultToolbar"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.editor.Command", "goog.style", "goog.ui.editor.ToolbarFactory", "goog.ui.editor.messages", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/editor/equationeditordialog.js", ["goog.ui.editor.EquationEditorDialog"], ["goog.editor.Command", "goog.ui.Dialog", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorOkEvent", "goog.ui.equation.TexEditor"]);
goog.addDependency("/closure/goog/ui/editor/equationeditorokevent.js", ["goog.ui.editor.EquationEditorOkEvent"], ["goog.events.Event", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/ui/editor/linkdialog.js", ["goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.BeforeTestLinkEvent", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent"], ["goog.dom", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Link", "goog.editor.focus", "goog.editor.node", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.string", "goog.style", "goog.ui.Button", "goog.ui.Component",
"goog.ui.LinkButtonRenderer", "goog.ui.editor.AbstractDialog", "goog.ui.editor.TabPane", "goog.ui.editor.messages", "goog.userAgent", "goog.window"]);
goog.addDependency("/closure/goog/ui/editor/messages.js", ["goog.ui.editor.messages"], []);
goog.addDependency("/closure/goog/ui/editor/tabpane.js", ["goog.ui.editor.TabPane"], ["goog.dom.TagName", "goog.dom.classes", "goog.events.EventHandler", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.Tab", "goog.ui.TabBar"]);
goog.addDependency("/closure/goog/ui/editor/toolbarcontroller.js", ["goog.ui.editor.ToolbarController"], ["goog.editor.Field", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/editor/toolbarfactory.js", ["goog.ui.editor.ToolbarFactory"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.string", "goog.string.Unicode", "goog.style", "goog.ui.Component", "goog.ui.Container", "goog.ui.Option", "goog.ui.Toolbar", "goog.ui.ToolbarButton", "goog.ui.ToolbarColorMenuButton", "goog.ui.ToolbarMenuButton", "goog.ui.ToolbarRenderer", "goog.ui.ToolbarSelect", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/emoji/emoji.js", ["goog.ui.emoji.Emoji"], []);
goog.addDependency("/closure/goog/ui/emoji/emojipalette.js", ["goog.ui.emoji.EmojiPalette"], ["goog.events.EventType", "goog.net.ImageLoader", "goog.ui.Palette", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/emojipaletterenderer.js", ["goog.ui.emoji.EmojiPaletteRenderer"], ["goog.a11y.aria", "goog.dom.NodeType", "goog.dom.classes", "goog.style", "goog.ui.PaletteRenderer", "goog.ui.emoji.Emoji"]);
goog.addDependency("/closure/goog/ui/emoji/emojipicker.js", ["goog.ui.emoji.EmojiPicker"], ["goog.log", "goog.style", "goog.ui.Component", "goog.ui.TabPane", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPalette", "goog.ui.emoji.EmojiPaletteRenderer", "goog.ui.emoji.ProgressiveEmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/popupemojipicker.js", ["goog.ui.emoji.PopupEmojiPicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.Component", "goog.ui.Popup", "goog.ui.emoji.EmojiPicker"]);
goog.addDependency("/closure/goog/ui/emoji/progressiveemojipaletterenderer.js", ["goog.ui.emoji.ProgressiveEmojiPaletteRenderer"], ["goog.style", "goog.ui.emoji.EmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/spriteinfo.js", ["goog.ui.emoji.SpriteInfo"], []);
goog.addDependency("/closure/goog/ui/equation/arrowpalette.js", ["goog.ui.equation.ArrowPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/changeevent.js", ["goog.ui.equation.ChangeEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/ui/equation/comparisonpalette.js", ["goog.ui.equation.ComparisonPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/editorpane.js", ["goog.ui.equation.EditorPane"], ["goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/equation/equationeditor.js", ["goog.ui.equation.EquationEditor"], ["goog.events", "goog.ui.Component", "goog.ui.TabBar", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]);
goog.addDependency("/closure/goog/ui/equation/equationeditordialog.js", ["goog.ui.equation.EquationEditorDialog"], ["goog.dom", "goog.dom.classes", "goog.ui.Dialog", "goog.ui.equation.EquationEditor", "goog.ui.equation.PaletteManager", "goog.ui.equation.TexEditor"]);
goog.addDependency("/closure/goog/ui/equation/greekpalette.js", ["goog.ui.equation.GreekPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/imagerenderer.js", ["goog.ui.equation.ImageRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.uri.utils"]);
goog.addDependency("/closure/goog/ui/equation/mathpalette.js", ["goog.ui.equation.MathPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/menupalette.js", ["goog.ui.equation.MenuPalette", "goog.ui.equation.MenuPaletteRenderer"], ["goog.math.Size", "goog.ui.PaletteRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/equation/palette.js", ["goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent", "goog.ui.equation.PaletteRenderer"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.ui.Palette", "goog.ui.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/equation/palettemanager.js", ["goog.ui.equation.PaletteManager"], ["goog.Timer", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.equation.ArrowPalette", "goog.ui.equation.ComparisonPalette", "goog.ui.equation.GreekPalette", "goog.ui.equation.MathPalette", "goog.ui.equation.MenuPalette", "goog.ui.equation.Palette", "goog.ui.equation.SymbolPalette"]);
goog.addDependency("/closure/goog/ui/equation/symbolpalette.js", ["goog.ui.equation.SymbolPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/texeditor.js", ["goog.ui.equation.TexEditor"], ["goog.ui.Component", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]);
goog.addDependency("/closure/goog/ui/equation/texpane.js", ["goog.ui.equation.TexPane"], ["goog.Timer", "goog.dom", "goog.dom.TagName", "goog.dom.selection", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.ui.equation.ChangeEvent", "goog.ui.equation.EditorPane", "goog.ui.equation.ImageRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent"]);
goog.addDependency("/closure/goog/ui/filteredmenu.js", ["goog.ui.FilteredMenu"], ["goog.dom", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FilterObservingMenuItem", "goog.ui.Menu", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/filterobservingmenuitem.js", ["goog.ui.FilterObservingMenuItem"], ["goog.ui.FilterObservingMenuItemRenderer", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/filterobservingmenuitemrenderer.js", ["goog.ui.FilterObservingMenuItemRenderer"], ["goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/flatbuttonrenderer.js", ["goog.ui.FlatButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/flatmenubuttonrenderer.js", ["goog.ui.FlatMenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FlatButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/formpost.js", ["goog.ui.FormPost"], ["goog.array", "goog.dom.TagName", "goog.string", "goog.string.StringBuffer", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/gauge.js", ["goog.ui.Gauge", "goog.ui.GaugeColoredRange"], ["goog.a11y.aria", "goog.asserts", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.graphics", "goog.graphics.Font", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.math", "goog.ui.Component", "goog.ui.GaugeTheme"]);
goog.addDependency("/closure/goog/ui/gaugetheme.js", ["goog.ui.GaugeTheme"], ["goog.graphics.LinearGradient", "goog.graphics.SolidFill", "goog.graphics.Stroke"]);
goog.addDependency("/closure/goog/ui/hovercard.js", ["goog.ui.HoverCard", "goog.ui.HoverCard.EventType", "goog.ui.HoverCard.TriggerEvent"], ["goog.array", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.ui.AdvancedTooltip", "goog.ui.PopupBase", "goog.ui.Tooltip"]);
goog.addDependency("/closure/goog/ui/hsvapalette.js", ["goog.ui.HsvaPalette"], ["goog.array", "goog.color.alpha", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.HsvPalette"]);
goog.addDependency("/closure/goog/ui/hsvpalette.js", ["goog.ui.HsvPalette"], ["goog.color", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/idgenerator.js", ["goog.ui.IdGenerator"], []);
goog.addDependency("/closure/goog/ui/idletimer.js", ["goog.ui.IdleTimer"], ["goog.Timer", "goog.events", "goog.events.EventTarget", "goog.structs.Set", "goog.ui.ActivityMonitor"]);
goog.addDependency("/closure/goog/ui/iframemask.js", ["goog.ui.IframeMask"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.dom.iframe", "goog.events.EventHandler", "goog.style"]);
goog.addDependency("/closure/goog/ui/imagelessbuttonrenderer.js", ["goog.ui.ImagelessButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/imagelessmenubuttonrenderer.js", ["goog.ui.ImagelessMenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/inputdatepicker.js", ["goog.ui.InputDatePicker"], ["goog.date.DateTime", "goog.dom", "goog.string", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.PopupBase", "goog.ui.PopupDatePicker"]);
goog.addDependency("/closure/goog/ui/itemevent.js", ["goog.ui.ItemEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/ui/keyboardshortcuthandler.js", ["goog.ui.KeyboardShortcutEvent", "goog.ui.KeyboardShortcutHandler", "goog.ui.KeyboardShortcutHandler.EventType"], ["goog.Timer", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyNames", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/labelinput.js", ["goog.ui.LabelInput"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classlist", "goog.events.EventHandler", "goog.events.EventType", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/linkbuttonrenderer.js", ["goog.ui.LinkButtonRenderer"], ["goog.ui.Button", "goog.ui.FlatButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/media/flashobject.js", ["goog.ui.media.FlashObject", "goog.ui.media.FlashObject.ScriptAccessLevel", "goog.ui.media.FlashObject.Wmodes"], ["goog.asserts", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.log", "goog.object", "goog.string", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.userAgent", "goog.userAgent.flash"]);
goog.addDependency("/closure/goog/ui/media/flickr.js", ["goog.ui.media.FlickrSet", "goog.ui.media.FlickrSetModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/googlevideo.js", ["goog.ui.media.GoogleVideo", "goog.ui.media.GoogleVideoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/media.js", ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"], ["goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/media/mediamodel.js", ["goog.ui.media.MediaModel", "goog.ui.media.MediaModel.Category", "goog.ui.media.MediaModel.Credit", "goog.ui.media.MediaModel.Credit.Role", "goog.ui.media.MediaModel.Credit.Scheme", "goog.ui.media.MediaModel.Medium", "goog.ui.media.MediaModel.MimeType", "goog.ui.media.MediaModel.Player", "goog.ui.media.MediaModel.SubTitle", "goog.ui.media.MediaModel.Thumbnail"], ["goog.array"]);
goog.addDependency("/closure/goog/ui/media/mp3.js", ["goog.ui.media.Mp3"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/photo.js", ["goog.ui.media.Photo"], ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/picasa.js", ["goog.ui.media.PicasaAlbum", "goog.ui.media.PicasaAlbumModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/vimeo.js", ["goog.ui.media.Vimeo", "goog.ui.media.VimeoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/youtube.js", ["goog.ui.media.Youtube", "goog.ui.media.YoutubeModel"], ["goog.string", "goog.ui.Component", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/menu.js", ["goog.ui.Menu", "goog.ui.Menu.EventType"], ["goog.math.Coordinate", "goog.string", "goog.style", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.MenuHeader", "goog.ui.MenuItem", "goog.ui.MenuRenderer", "goog.ui.MenuSeparator"]);
goog.addDependency("/closure/goog/ui/menubar.js", ["goog.ui.menuBar"], ["goog.ui.Container", "goog.ui.MenuBarRenderer"]);
goog.addDependency("/closure/goog/ui/menubardecorator.js", ["goog.ui.menuBarDecorator"], ["goog.ui.MenuBarRenderer", "goog.ui.menuBar", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menubarrenderer.js", ["goog.ui.MenuBarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer"]);
goog.addDependency("/closure/goog/ui/menubase.js", ["goog.ui.MenuBase"], ["goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyHandler", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/menubutton.js", ["goog.ui.MenuButton"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.math.Box", "goog.math.Rect", "goog.positioning", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.Overflow", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButtonRenderer", "goog.ui.registry",
"goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/ui/menubuttonrenderer.js", ["goog.ui.MenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/menuheader.js", ["goog.ui.MenuHeader"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.MenuHeaderRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuheaderrenderer.js", ["goog.ui.MenuHeaderRenderer"], ["goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/menuitem.js", ["goog.ui.MenuItem"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.math.Coordinate", "goog.string", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuItemRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuitemrenderer.js", ["goog.ui.MenuItemRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.dom.classes", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/menurenderer.js", ["goog.ui.MenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.ui.ContainerRenderer", "goog.ui.Separator"]);
goog.addDependency("/closure/goog/ui/menuseparator.js", ["goog.ui.MenuSeparator"], ["goog.ui.MenuSeparatorRenderer", "goog.ui.Separator", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuseparatorrenderer.js", ["goog.ui.MenuSeparatorRenderer"], ["goog.dom", "goog.dom.classes", "goog.ui.ControlContent", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/mockactivitymonitor.js", ["goog.ui.MockActivityMonitor"], ["goog.events.EventType", "goog.ui.ActivityMonitor"]);
goog.addDependency("/closure/goog/ui/mockactivitymonitor_test.js", ["goog.ui.MockActivityMonitorTest"], ["goog.events", "goog.functions", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.ui.ActivityMonitor", "goog.ui.MockActivityMonitor"]);
goog.addDependency("/closure/goog/ui/modalpopup.js", ["goog.ui.ModalPopup"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.dom.iframe", "goog.events", "goog.events.EventType", "goog.events.FocusHandler", "goog.fx.Transition", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/nativebuttonrenderer.js", ["goog.ui.NativeButtonRenderer"], ["goog.dom.classes", "goog.events.EventType", "goog.ui.ButtonRenderer", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/offlineinstalldialog.js", ["goog.ui.OfflineInstallDialog", "goog.ui.OfflineInstallDialog.ButtonKeyType", "goog.ui.OfflineInstallDialog.EnableScreen", "goog.ui.OfflineInstallDialog.InstallScreen", "goog.ui.OfflineInstallDialog.InstallingGearsScreen", "goog.ui.OfflineInstallDialog.ScreenType", "goog.ui.OfflineInstallDialog.UpgradeScreen", "goog.ui.OfflineInstallDialogScreen"], ["goog.Disposable", "goog.dom.classes", "goog.gears", "goog.string", "goog.string.StringBuffer",
"goog.ui.Dialog", "goog.window"]);
goog.addDependency("/closure/goog/ui/offlinestatuscard.js", ["goog.ui.OfflineStatusCard", "goog.ui.OfflineStatusCard.EventType"], ["goog.dom", "goog.events.EventType", "goog.gears.StatusType", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.ui.ProgressBar"]);
goog.addDependency("/closure/goog/ui/offlinestatuscomponent.js", ["goog.ui.OfflineStatusComponent", "goog.ui.OfflineStatusComponent.StatusClassNames"], ["goog.dom.classes", "goog.events.EventType", "goog.gears.StatusType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.ui.Component", "goog.ui.OfflineStatusCard", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/option.js", ["goog.ui.Option"], ["goog.ui.Component", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/palette.js", ["goog.ui.Palette"], ["goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.PaletteRenderer", "goog.ui.SelectionModel"]);
goog.addDependency("/closure/goog/ui/paletterenderer.js", ["goog.ui.PaletteRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/plaintextspellchecker.js", ["goog.ui.PlainTextSpellChecker"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.spell.SpellCheck", "goog.style", "goog.ui.AbstractSpellChecker", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/popup.js", ["goog.ui.Popup", "goog.ui.Popup.AbsolutePosition", "goog.ui.Popup.AnchoredPosition", "goog.ui.Popup.AnchoredViewPortPosition", "goog.ui.Popup.ClientPosition", "goog.ui.Popup.Corner", "goog.ui.Popup.Overflow", "goog.ui.Popup.ViewPortClientPosition", "goog.ui.Popup.ViewPortPosition"], ["goog.math.Box", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.AnchoredViewportPosition", "goog.positioning.ClientPosition",
"goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.ViewportClientPosition", "goog.positioning.ViewportPosition", "goog.style", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/popupbase.js", ["goog.ui.PopupBase", "goog.ui.PopupBase.EventType", "goog.ui.PopupBase.Type"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.fx.Transition", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/popupcolorpicker.js", ["goog.ui.PopupColorPicker"], ["goog.dom.classes", "goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.ColorPicker", "goog.ui.Component", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/popupdatepicker.js", ["goog.ui.PopupDatePicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.Popup", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/popupmenu.js", ["goog.ui.PopupMenu"], ["goog.events.EventType", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.ViewportClientPosition", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.Component.EventType", "goog.ui.Menu", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/progressbar.js", ["goog.ui.ProgressBar", "goog.ui.ProgressBar.Orientation"], ["goog.a11y.aria", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.ui.Component", "goog.ui.RangeModel", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/prompt.js", ["goog.ui.Prompt"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventType", "goog.functions", "goog.ui.Component", "goog.ui.Dialog", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/rangemodel.js", ["goog.ui.RangeModel"], ["goog.events.EventTarget", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/ratings.js", ["goog.ui.Ratings", "goog.ui.Ratings.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/registry.js", ["goog.ui.registry"], ["goog.dom.classes"]);
goog.addDependency("/closure/goog/ui/richtextspellchecker.js", ["goog.ui.RichTextSpellChecker"], ["goog.Timer", "goog.dom", "goog.dom.NodeType", "goog.events", "goog.events.EventType", "goog.spell.SpellCheck", "goog.string.StringBuffer", "goog.ui.AbstractSpellChecker"]);
goog.addDependency("/closure/goog/ui/roundedpanel.js", ["goog.ui.BaseRoundedPanel", "goog.ui.CssRoundedPanel", "goog.ui.GraphicsRoundedPanel", "goog.ui.RoundedPanel", "goog.ui.RoundedPanel.Corner"], ["goog.dom", "goog.dom.classes", "goog.graphics", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.math", "goog.math.Coordinate", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/roundedtabrenderer.js", ["goog.ui.RoundedTabRenderer"], ["goog.dom", "goog.ui.Tab", "goog.ui.TabBar", "goog.ui.TabRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/scrollfloater.js", ["goog.ui.ScrollFloater", "goog.ui.ScrollFloater.EventType"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/select.js", ["goog.ui.Select"], ["goog.a11y.aria.Role", "goog.events.EventType", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.SelectionModel", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/selectionmenubutton.js", ["goog.ui.SelectionMenuButton", "goog.ui.SelectionMenuButton.SelectionState"], ["goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/selectionmodel.js", ["goog.ui.SelectionModel"], ["goog.array", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/ui/separator.js", ["goog.ui.Separator"], ["goog.a11y.aria", "goog.asserts", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuSeparatorRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/serverchart.js", ["goog.ui.ServerChart", "goog.ui.ServerChart.AxisDisplayType", "goog.ui.ServerChart.ChartType", "goog.ui.ServerChart.EncodingType", "goog.ui.ServerChart.Event", "goog.ui.ServerChart.LegendPosition", "goog.ui.ServerChart.MaximumValue", "goog.ui.ServerChart.MultiAxisAlignment", "goog.ui.ServerChart.MultiAxisType", "goog.ui.ServerChart.UriParam", "goog.ui.ServerChart.UriTooLongEvent"], ["goog.Uri", "goog.array", "goog.asserts", "goog.events.Event",
"goog.string", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/slider.js", ["goog.ui.Slider", "goog.ui.Slider.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]);
goog.addDependency("/closure/goog/ui/sliderbase.js", ["goog.ui.SliderBase", "goog.ui.SliderBase.AnimationFactory", "goog.ui.SliderBase.Orientation"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.events.MouseWheelHandler", "goog.fx.AnimationParallelQueue", "goog.fx.Dragger", "goog.fx.Transition", "goog.fx.dom.ResizeHeight",
"goog.fx.dom.ResizeWidth", "goog.fx.dom.Slide", "goog.math", "goog.math.Coordinate", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.ui.RangeModel"]);
goog.addDependency("/closure/goog/ui/splitbehavior.js", ["goog.ui.SplitBehavior", "goog.ui.SplitBehavior.DefaultHandlers"], ["goog.Disposable", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.EventHandler", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.decorate", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/splitpane.js", ["goog.ui.SplitPane", "goog.ui.SplitPane.Orientation"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.fx.Dragger", "goog.math.Rect", "goog.math.Size", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/style/app/buttonrenderer.js", ["goog.ui.style.app.ButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/style/app/menubuttonrenderer.js", ["goog.ui.style.app.MenuButtonRenderer"], ["goog.a11y.aria.Role", "goog.array", "goog.dom", "goog.style", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.ui.style.app.ButtonRenderer"]);
goog.addDependency("/closure/goog/ui/style/app/primaryactionbuttonrenderer.js", ["goog.ui.style.app.PrimaryActionButtonRenderer"], ["goog.ui.Button", "goog.ui.registry", "goog.ui.style.app.ButtonRenderer"]);
goog.addDependency("/closure/goog/ui/submenu.js", ["goog.ui.SubMenu"], ["goog.Timer", "goog.dom", "goog.dom.classes", "goog.events.KeyCodes", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.SubMenuRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/submenurenderer.js", ["goog.ui.SubMenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.style", "goog.ui.Menu", "goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/tab.js", ["goog.ui.Tab"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.TabRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tabbar.js", ["goog.ui.TabBar", "goog.ui.TabBar.Location"], ["goog.ui.Component.EventType", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.Tab", "goog.ui.TabBarRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tabbarrenderer.js", ["goog.ui.TabBarRenderer"], ["goog.a11y.aria.Role", "goog.object", "goog.ui.ContainerRenderer"]);
goog.addDependency("/closure/goog/ui/tablesorter.js", ["goog.ui.TableSorter", "goog.ui.TableSorter.EventType"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.events.EventType", "goog.functions", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/tabpane.js", ["goog.ui.TabPane", "goog.ui.TabPane.Events", "goog.ui.TabPane.TabLocation", "goog.ui.TabPane.TabPage", "goog.ui.TabPaneEvent"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]);
goog.addDependency("/closure/goog/ui/tabrenderer.js", ["goog.ui.TabRenderer"], ["goog.a11y.aria.Role", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/textarea.js", ["goog.ui.Textarea", "goog.ui.Textarea.EventType"], ["goog.dom", "goog.events.EventType", "goog.style", "goog.ui.Control", "goog.ui.TextareaRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/textarearenderer.js", ["goog.ui.TextareaRenderer"], ["goog.dom.TagName", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/togglebutton.js", ["goog.ui.ToggleButton"], ["goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbar.js", ["goog.ui.Toolbar"], ["goog.ui.Container", "goog.ui.ToolbarRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarbutton.js", ["goog.ui.ToolbarButton"], ["goog.ui.Button", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarbuttonrenderer.js", ["goog.ui.ToolbarButtonRenderer"], ["goog.ui.CustomButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarcolormenubutton.js", ["goog.ui.ToolbarColorMenuButton"], ["goog.ui.ColorMenuButton", "goog.ui.ToolbarColorMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarcolormenubuttonrenderer.js", ["goog.ui.ToolbarColorMenuButtonRenderer"], ["goog.dom.classes", "goog.ui.ColorMenuButtonRenderer", "goog.ui.MenuButtonRenderer", "goog.ui.ToolbarMenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarmenubutton.js", ["goog.ui.ToolbarMenuButton"], ["goog.ui.MenuButton", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarmenubuttonrenderer.js", ["goog.ui.ToolbarMenuButtonRenderer"], ["goog.ui.MenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarrenderer.js", ["goog.ui.ToolbarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer", "goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarselect.js", ["goog.ui.ToolbarSelect"], ["goog.ui.Select", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarseparator.js", ["goog.ui.ToolbarSeparator"], ["goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarseparatorrenderer.js", ["goog.ui.ToolbarSeparatorRenderer"], ["goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuSeparatorRenderer"]);
goog.addDependency("/closure/goog/ui/toolbartogglebutton.js", ["goog.ui.ToolbarToggleButton"], ["goog.ui.ToggleButton", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tooltip.js", ["goog.ui.Tooltip", "goog.ui.Tooltip.CursorTooltipPosition", "goog.ui.Tooltip.ElementTooltipPosition", "goog.ui.Tooltip.State"], ["goog.Timer", "goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.positioning.ViewportPosition", "goog.structs.Set",
"goog.style", "goog.ui.Popup", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/tree/basenode.js", ["goog.ui.tree.BaseNode", "goog.ui.tree.BaseNode.EventType"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.events.KeyCodes", "goog.string", "goog.string.StringBuffer", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/tree/treecontrol.js", ["goog.ui.tree.TreeControl"], ["goog.a11y.aria", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.events.FocusHandler", "goog.events.KeyHandler", "goog.log", "goog.ui.tree.BaseNode", "goog.ui.tree.TreeNode", "goog.ui.tree.TypeAhead", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/tree/treenode.js", ["goog.ui.tree.TreeNode"], ["goog.ui.tree.BaseNode"]);
goog.addDependency("/closure/goog/ui/tree/typeahead.js", ["goog.ui.tree.TypeAhead", "goog.ui.tree.TypeAhead.Offset"], ["goog.array", "goog.events.KeyCodes", "goog.string", "goog.structs.Trie"]);
goog.addDependency("/closure/goog/ui/tristatemenuitem.js", ["goog.ui.TriStateMenuItem", "goog.ui.TriStateMenuItem.State"], ["goog.dom.classes", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.TriStateMenuItemRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tristatemenuitemrenderer.js", ["goog.ui.TriStateMenuItemRenderer"], ["goog.dom.classes", "goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/twothumbslider.js", ["goog.ui.TwoThumbSlider"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]);
goog.addDependency("/closure/goog/ui/zippy.js", ["goog.ui.Zippy", "goog.ui.Zippy.Events", "goog.ui.ZippyEvent"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]);
goog.addDependency("/closure/goog/uri/uri.js", ["goog.Uri", "goog.Uri.QueryData"], ["goog.array", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.StandardQueryParam"]);
goog.addDependency("/closure/goog/uri/uri_test.js", ["goog.UriTest"], ["goog.Uri", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/uri/utils.js", ["goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.QueryArray", "goog.uri.utils.QueryValue", "goog.uri.utils.StandardQueryParam"], ["goog.asserts", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/adobereader.js", ["goog.userAgent.adobeReader"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/flash.js", ["goog.userAgent.flash"], ["goog.string"]);
goog.addDependency("/closure/goog/useragent/iphoto.js", ["goog.userAgent.iphoto"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/jscript.js", ["goog.userAgent.jscript"], ["goog.string"]);
goog.addDependency("/closure/goog/useragent/picasa.js", ["goog.userAgent.picasa"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/platform.js", ["goog.userAgent.platform"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/product.js", ["goog.userAgent.product"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/product_isversion.js", ["goog.userAgent.product.isVersion"], ["goog.userAgent.product"]);
goog.addDependency("/closure/goog/useragent/useragent.js", ["goog.userAgent"], ["goog.string"]);
goog.addDependency("/closure/goog/vec/float32array.js", ["goog.vec.Float32Array"], []);
goog.addDependency("/closure/goog/vec/float64array.js", ["goog.vec.Float64Array"], []);
goog.addDependency("/closure/goog/vec/mat3.js", ["goog.vec.Mat3"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat3d.js", ["goog.vec.mat3d", "goog.vec.mat3d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat3f.js", ["goog.vec.mat3f", "goog.vec.mat3f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat4.js", ["goog.vec.Mat4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/mat4d.js", ["goog.vec.mat4d", "goog.vec.mat4d.Type"], ["goog.vec", "goog.vec.vec3d", "goog.vec.vec4d"]);
goog.addDependency("/closure/goog/vec/mat4f.js", ["goog.vec.mat4f", "goog.vec.mat4f.Type"], ["goog.vec", "goog.vec.vec3f", "goog.vec.vec4f"]);
goog.addDependency("/closure/goog/vec/matrix3.js", ["goog.vec.Matrix3"], []);
goog.addDependency("/closure/goog/vec/matrix4.js", ["goog.vec.Matrix4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/quaternion.js", ["goog.vec.Quaternion"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/ray.js", ["goog.vec.Ray"], ["goog.vec.Vec3"]);
goog.addDependency("/closure/goog/vec/vec.js", ["goog.vec", "goog.vec.AnyType", "goog.vec.ArrayType", "goog.vec.Float32", "goog.vec.Float64", "goog.vec.Number"], ["goog.vec.Float32Array", "goog.vec.Float64Array"]);
goog.addDependency("/closure/goog/vec/vec2.js", ["goog.vec.Vec2"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec2d.js", ["goog.vec.vec2d", "goog.vec.vec2d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec2f.js", ["goog.vec.vec2f", "goog.vec.vec2f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3.js", ["goog.vec.Vec3"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3d.js", ["goog.vec.vec3d", "goog.vec.vec3d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3f.js", ["goog.vec.vec3f", "goog.vec.vec3f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4.js", ["goog.vec.Vec4"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4d.js", ["goog.vec.vec4d", "goog.vec.vec4d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4f.js", ["goog.vec.vec4f", "goog.vec.vec4f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/webgl/webgl.js", ["goog.webgl"], []);
goog.addDependency("/closure/goog/window/window.js", ["goog.window"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/soy/soyutils.js", [], []);
goog.addDependency("/soy/soyutils_usegoog.js", ["soy", "soy.StringBuilder", "soy.esc", "soydata", "soydata.SanitizedHtml", "soydata.SanitizedHtmlAttribute", "soydata.SanitizedJs", "soydata.SanitizedJsStrChars", "soydata.SanitizedUri", "soydata.VERY_UNSAFE"], ["goog.asserts", "goog.dom.DomHelper", "goog.format", "goog.i18n.BidiFormatter", "goog.i18n.bidi", "goog.soy", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.string.StringBuffer"]);
goog.addDependency("/third_party/closure/goog/base.js", [], []);
goog.addDependency("/third_party/closure/goog/caja/string/html/htmlparser.js", ["goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlParser.Entities", "goog.string.html.HtmlSaxHandler"], []);
goog.addDependency("/third_party/closure/goog/caja/string/html/htmlsanitizer.js", ["goog.string.html.HtmlSanitizer", "goog.string.html.HtmlSanitizer.AttributeType", "goog.string.html.HtmlSanitizer.Attributes", "goog.string.html.htmlSanitize"], ["goog.string.StringBuffer", "goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlSaxHandler"]);
goog.addDependency("/third_party/closure/goog/dojo/dom/query.js", ["goog.dom.query"], ["goog.array", "goog.dom", "goog.functions", "goog.string", "goog.userAgent"]);
goog.addDependency("/third_party/closure/goog/dojo/dom/query_test.js", [], []);
goog.addDependency("/third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js", ["goog.crypt.JpegEncoder"], ["goog.crypt.base64"]);
goog.addDependency("/third_party/closure/goog/loremipsum/text/loremipsum.js", ["goog.text.LoremIpsum"], ["goog.array", "goog.math", "goog.string", "goog.structs.Map", "goog.structs.Set"]);
goog.addDependency("/third_party/closure/goog/mochikit/async/deferred.js", ["goog.async.Deferred", "goog.async.Deferred.AlreadyCalledError", "goog.async.Deferred.CanceledError"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.functions"]);
goog.addDependency("/third_party/closure/goog/mochikit/async/deferredlist.js", ["goog.async.DeferredList"], ["goog.async.Deferred"]);
goog.addDependency("/third_party/closure/goog/osapi/osapi.js", ["goog.osapi"], []);
goog.provide("goog.string");
goog.provide("goog.string.Unicode");
goog.string.Unicode = {NBSP:"\u00a0"};
goog.string.startsWith = function(str, prefix) {
return str.lastIndexOf(prefix, 0) == 0
};
goog.string.endsWith = function(str, suffix) {
var l = str.length - suffix.length;
return l >= 0 && str.indexOf(suffix, l) == l
};
goog.string.caseInsensitiveStartsWith = function(str, prefix) {
return goog.string.caseInsensitiveCompare(prefix, str.substr(0, prefix.length)) == 0
};
goog.string.caseInsensitiveEndsWith = function(str, suffix) {
return goog.string.caseInsensitiveCompare(suffix, str.substr(str.length - suffix.length, suffix.length)) == 0
};
goog.string.caseInsensitiveEquals = function(str1, str2) {
return str1.toLowerCase() == str2.toLowerCase()
};
goog.string.subs = function(str, var_args) {
var splitParts = str.split("%s");
var returnString = "";
var subsArguments = Array.prototype.slice.call(arguments, 1);
while(subsArguments.length && splitParts.length > 1) {
returnString += splitParts.shift() + subsArguments.shift()
}
return returnString + splitParts.join("%s")
};
goog.string.collapseWhitespace = function(str) {
return str.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "")
};
goog.string.isEmpty = function(str) {
return/^[\s\xa0]*$/.test(str)
};
goog.string.isEmptySafe = function(str) {
return goog.string.isEmpty(goog.string.makeSafe(str))
};
goog.string.isBreakingWhitespace = function(str) {
return!/[^\t\n\r ]/.test(str)
};
goog.string.isAlpha = function(str) {
return!/[^a-zA-Z]/.test(str)
};
goog.string.isNumeric = function(str) {
return!/[^0-9]/.test(str)
};
goog.string.isAlphaNumeric = function(str) {
return!/[^a-zA-Z0-9]/.test(str)
};
goog.string.isSpace = function(ch) {
return ch == " "
};
goog.string.isUnicodeChar = function(ch) {
return ch.length == 1 && ch >= " " && ch <= "~" || ch >= "\u0080" && ch <= "\ufffd"
};
goog.string.stripNewlines = function(str) {
return str.replace(/(\r\n|\r|\n)+/g, " ")
};
goog.string.canonicalizeNewlines = function(str) {
return str.replace(/(\r\n|\r|\n)/g, "\n")
};
goog.string.normalizeWhitespace = function(str) {
return str.replace(/\xa0|\s/g, " ")
};
goog.string.normalizeSpaces = function(str) {
return str.replace(/\xa0|[ \t]+/g, " ")
};
goog.string.collapseBreakingSpaces = function(str) {
return str.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "")
};
goog.string.trim = function(str) {
return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
};
goog.string.trimLeft = function(str) {
return str.replace(/^[\s\xa0]+/, "")
};
goog.string.trimRight = function(str) {
return str.replace(/[\s\xa0]+$/, "")
};
goog.string.caseInsensitiveCompare = function(str1, str2) {
var test1 = String(str1).toLowerCase();
var test2 = String(str2).toLowerCase();
if(test1 < test2) {
return-1
}else {
if(test1 == test2) {
return 0
}else {
return 1
}
}
};
goog.string.numerateCompareRegExp_ = /(\.\d+)|(\d+)|(\D+)/g;
goog.string.numerateCompare = function(str1, str2) {
if(str1 == str2) {
return 0
}
if(!str1) {
return-1
}
if(!str2) {
return 1
}
var tokens1 = str1.toLowerCase().match(goog.string.numerateCompareRegExp_);
var tokens2 = str2.toLowerCase().match(goog.string.numerateCompareRegExp_);
var count = Math.min(tokens1.length, tokens2.length);
for(var i = 0;i < count;i++) {
var a = tokens1[i];
var b = tokens2[i];
if(a != b) {
var num1 = parseInt(a, 10);
if(!isNaN(num1)) {
var num2 = parseInt(b, 10);
if(!isNaN(num2) && num1 - num2) {
return num1 - num2
}
}
return a < b ? -1 : 1
}
}
if(tokens1.length != tokens2.length) {
return tokens1.length - tokens2.length
}
return str1 < str2 ? -1 : 1
};
goog.string.urlEncode = function(str) {
return encodeURIComponent(String(str))
};
goog.string.urlDecode = function(str) {
return decodeURIComponent(str.replace(/\+/g, " "))
};
goog.string.newLineToBr = function(str, opt_xml) {
return str.replace(/(\r\n|\r|\n)/g, opt_xml ? "\x3cbr /\x3e" : "\x3cbr\x3e")
};
goog.string.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) {
if(opt_isLikelyToContainHtmlChars) {
return str.replace(goog.string.amperRe_, "\x26amp;").replace(goog.string.ltRe_, "\x26lt;").replace(goog.string.gtRe_, "\x26gt;").replace(goog.string.quotRe_, "\x26quot;")
}else {
if(!goog.string.allRe_.test(str)) {
return str
}
if(str.indexOf("\x26") != -1) {
str = str.replace(goog.string.amperRe_, "\x26amp;")
}
if(str.indexOf("\x3c") != -1) {
str = str.replace(goog.string.ltRe_, "\x26lt;")
}
if(str.indexOf("\x3e") != -1) {
str = str.replace(goog.string.gtRe_, "\x26gt;")
}
if(str.indexOf('"') != -1) {
str = str.replace(goog.string.quotRe_, "\x26quot;")
}
return str
}
};
goog.string.amperRe_ = /&/g;
goog.string.ltRe_ = /</g;
goog.string.gtRe_ = />/g;
goog.string.quotRe_ = /\"/g;
goog.string.allRe_ = /[&<>\"]/;
goog.string.unescapeEntities = function(str) {
if(goog.string.contains(str, "\x26")) {
if("document" in goog.global) {
return goog.string.unescapeEntitiesUsingDom_(str)
}else {
return goog.string.unescapePureXmlEntities_(str)
}
}
return str
};
goog.string.unescapeEntitiesUsingDom_ = function(str) {
var seen = {"\x26amp;":"\x26", "\x26lt;":"\x3c", "\x26gt;":"\x3e", "\x26quot;":'"'};
var div = document.createElement("div");
return str.replace(goog.string.HTML_ENTITY_PATTERN_, function(s, entity) {
var value = seen[s];
if(value) {
return value
}
if(entity.charAt(0) == "#") {
var n = Number("0" + entity.substr(1));
if(!isNaN(n)) {
value = String.fromCharCode(n)
}
}
if(!value) {
div.innerHTML = s + " ";
value = div.firstChild.nodeValue.slice(0, -1)
}
return seen[s] = value
})
};
goog.string.unescapePureXmlEntities_ = function(str) {
return str.replace(/&([^;]+);/g, function(s, entity) {
switch(entity) {
case "amp":
return"\x26";
case "lt":
return"\x3c";
case "gt":
return"\x3e";
case "quot":
return'"';
default:
if(entity.charAt(0) == "#") {
var n = Number("0" + entity.substr(1));
if(!isNaN(n)) {
return String.fromCharCode(n)
}
}
return s
}
})
};
goog.string.HTML_ENTITY_PATTERN_ = /&([^;\s<&]+);?/g;
goog.string.whitespaceEscape = function(str, opt_xml) {
return goog.string.newLineToBr(str.replace(/ /g, " \x26#160;"), opt_xml)
};
goog.string.stripQuotes = function(str, quoteChars) {
var length = quoteChars.length;
for(var i = 0;i < length;i++) {
var quoteChar = length == 1 ? quoteChars : quoteChars.charAt(i);
if(str.charAt(0) == quoteChar && str.charAt(str.length - 1) == quoteChar) {
return str.substring(1, str.length - 1)
}
}
return str
};
goog.string.truncate = function(str, chars, opt_protectEscapedCharacters) {
if(opt_protectEscapedCharacters) {
str = goog.string.unescapeEntities(str)
}
if(str.length > chars) {
str = str.substring(0, chars - 3) + "..."
}
if(opt_protectEscapedCharacters) {
str = goog.string.htmlEscape(str)
}
return str
};
goog.string.truncateMiddle = function(str, chars, opt_protectEscapedCharacters, opt_trailingChars) {
if(opt_protectEscapedCharacters) {
str = goog.string.unescapeEntities(str)
}
if(opt_trailingChars && str.length > chars) {
if(opt_trailingChars > chars) {
opt_trailingChars = chars
}
var endPoint = str.length - opt_trailingChars;
var startPoint = chars - opt_trailingChars;
str = str.substring(0, startPoint) + "..." + str.substring(endPoint)
}else {
if(str.length > chars) {
var half = Math.floor(chars / 2);
var endPos = str.length - half;
half += chars % 2;
str = str.substring(0, half) + "..." + str.substring(endPos)
}
}
if(opt_protectEscapedCharacters) {
str = goog.string.htmlEscape(str)
}
return str
};
goog.string.specialEscapeChars_ = {"\x00":"\\0", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\"};
goog.string.jsEscapeCache_ = {"'":"\\'"};
goog.string.quote = function(s) {
s = String(s);
if(s.quote) {
return s.quote()
}else {
var sb = ['"'];
for(var i = 0;i < s.length;i++) {
var ch = s.charAt(i);
var cc = ch.charCodeAt(0);
sb[i + 1] = goog.string.specialEscapeChars_[ch] || (cc > 31 && cc < 127 ? ch : goog.string.escapeChar(ch))
}
sb.push('"');
return sb.join("")
}
};
goog.string.escapeString = function(str) {
var sb = [];
for(var i = 0;i < str.length;i++) {
sb[i] = goog.string.escapeChar(str.charAt(i))
}
return sb.join("")
};
goog.string.escapeChar = function(c) {
if(c in goog.string.jsEscapeCache_) {
return goog.string.jsEscapeCache_[c]
}
if(c in goog.string.specialEscapeChars_) {
return goog.string.jsEscapeCache_[c] = goog.string.specialEscapeChars_[c]
}
var rv = c;
var cc = c.charCodeAt(0);
if(cc > 31 && cc < 127) {
rv = c
}else {
if(cc < 256) {
rv = "\\x";
if(cc < 16 || cc > 256) {
rv += "0"
}
}else {
rv = "\\u";
if(cc < 4096) {
rv += "0"
}
}
rv += cc.toString(16).toUpperCase()
}
return goog.string.jsEscapeCache_[c] = rv
};
goog.string.toMap = function(s) {
var rv = {};
for(var i = 0;i < s.length;i++) {
rv[s.charAt(i)] = true
}
return rv
};
goog.string.contains = function(s, ss) {
return s.indexOf(ss) != -1
};
goog.string.countOf = function(s, ss) {
return s && ss ? s.split(ss).length - 1 : 0
};
goog.string.removeAt = function(s, index, stringLength) {
var resultStr = s;
if(index >= 0 && index < s.length && stringLength > 0) {
resultStr = s.substr(0, index) + s.substr(index + stringLength, s.length - index - stringLength)
}
return resultStr
};
goog.string.remove = function(s, ss) {
var re = new RegExp(goog.string.regExpEscape(ss), "");
return s.replace(re, "")
};
goog.string.removeAll = function(s, ss) {
var re = new RegExp(goog.string.regExpEscape(ss), "g");
return s.replace(re, "")
};
goog.string.regExpEscape = function(s) {
return String(s).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
};
goog.string.repeat = function(string, length) {
return(new Array(length + 1)).join(string)
};
goog.string.padNumber = function(num, length, opt_precision) {
var s = goog.isDef(opt_precision) ? num.toFixed(opt_precision) : String(num);
var index = s.indexOf(".");
if(index == -1) {
index = s.length
}
return goog.string.repeat("0", Math.max(0, length - index)) + s
};
goog.string.makeSafe = function(obj) {
return obj == null ? "" : String(obj)
};
goog.string.buildString = function(var_args) {
return Array.prototype.join.call(arguments, "")
};
goog.string.getRandomString = function() {
var x = 2147483648;
return Math.floor(Math.random() * x).toString(36) + Math.abs(Math.floor(Math.random() * x) ^ goog.now()).toString(36)
};
goog.string.compareVersions = function(version1, version2) {
var order = 0;
var v1Subs = goog.string.trim(String(version1)).split(".");
var v2Subs = goog.string.trim(String(version2)).split(".");
var subCount = Math.max(v1Subs.length, v2Subs.length);
for(var subIdx = 0;order == 0 && subIdx < subCount;subIdx++) {
var v1Sub = v1Subs[subIdx] || "";
var v2Sub = v2Subs[subIdx] || "";
var v1CompParser = new RegExp("(\\d*)(\\D*)", "g");
var v2CompParser = new RegExp("(\\d*)(\\D*)", "g");
do {
var v1Comp = v1CompParser.exec(v1Sub) || ["", "", ""];
var v2Comp = v2CompParser.exec(v2Sub) || ["", "", ""];
if(v1Comp[0].length == 0 && v2Comp[0].length == 0) {
break
}
var v1CompNum = v1Comp[1].length == 0 ? 0 : parseInt(v1Comp[1], 10);
var v2CompNum = v2Comp[1].length == 0 ? 0 : parseInt(v2Comp[1], 10);
order = goog.string.compareElements_(v1CompNum, v2CompNum) || goog.string.compareElements_(v1Comp[2].length == 0, v2Comp[2].length == 0) || goog.string.compareElements_(v1Comp[2], v2Comp[2])
}while(order == 0)
}
return order
};
goog.string.compareElements_ = function(left, right) {
if(left < right) {
return-1
}else {
if(left > right) {
return 1
}
}
return 0
};
goog.string.HASHCODE_MAX_ = 4294967296;
goog.string.hashCode = function(str) {
var result = 0;
for(var i = 0;i < str.length;++i) {
result = 31 * result + str.charCodeAt(i);
result %= goog.string.HASHCODE_MAX_
}
return result
};
goog.string.uniqueStringCounter_ = Math.random() * 2147483648 | 0;
goog.string.createUniqueString = function() {
return"goog_" + goog.string.uniqueStringCounter_++
};
goog.string.toNumber = function(str) {
var num = Number(str);
if(num == 0 && goog.string.isEmpty(str)) {
return NaN
}
return num
};
goog.string.isLowerCamelCase = function(str) {
return/^[a-z]+([A-Z][a-z]*)*$/.test(str)
};
goog.string.isUpperCamelCase = function(str) {
return/^([A-Z][a-z]*)+$/.test(str)
};
goog.string.toCamelCase = function(str) {
return String(str).replace(/\-([a-z])/g, function(all, match) {
return match.toUpperCase()
})
};
goog.string.toSelectorCase = function(str) {
return String(str).replace(/([A-Z])/g, "-$1").toLowerCase()
};
goog.string.toTitleCase = function(str, opt_delimiters) {
var delimiters = goog.isString(opt_delimiters) ? goog.string.regExpEscape(opt_delimiters) : "\\s";
delimiters = delimiters ? "|[" + delimiters + "]+" : "";
var regexp = new RegExp("(^" + delimiters + ")([a-z])", "g");
return str.replace(regexp, function(all, p1, p2) {
return p1 + p2.toUpperCase()
})
};
goog.string.parseInt = function(value) {
if(isFinite(value)) {
value = String(value)
}
if(goog.isString(value)) {
return/^\s*-?0x/i.test(value) ? parseInt(value, 16) : parseInt(value, 10)
}
return NaN
};
goog.string.splitLimit = function(str, separator, limit) {
var parts = str.split(separator);
var returnVal = [];
while(limit > 0 && parts.length) {
returnVal.push(parts.shift());
limit--
}
if(parts.length) {
returnVal.push(parts.join(separator))
}
return returnVal
};
goog.provide("goog.userAgent");
goog.require("goog.string");
goog.define("goog.userAgent.ASSUME_IE", false);
goog.define("goog.userAgent.ASSUME_GECKO", false);
goog.define("goog.userAgent.ASSUME_WEBKIT", false);
goog.define("goog.userAgent.ASSUME_MOBILE_WEBKIT", false);
goog.define("goog.userAgent.ASSUME_OPERA", false);
goog.define("goog.userAgent.ASSUME_ANY_VERSION", false);
goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
goog.userAgent.getUserAgentString = function() {
return goog.global["navigator"] ? goog.global["navigator"].userAgent : null
};
goog.userAgent.getNavigator = function() {
return goog.global["navigator"]
};
goog.userAgent.init_ = function() {
goog.userAgent.detectedOpera_ = false;
goog.userAgent.detectedIe_ = false;
goog.userAgent.detectedWebkit_ = false;
goog.userAgent.detectedMobile_ = false;
goog.userAgent.detectedGecko_ = false;
var ua;
if(!goog.userAgent.BROWSER_KNOWN_ && (ua = goog.userAgent.getUserAgentString())) {
var navigator = goog.userAgent.getNavigator();
goog.userAgent.detectedOpera_ = goog.string.startsWith(ua, "Opera");
goog.userAgent.detectedIe_ = !goog.userAgent.detectedOpera_ && (goog.string.contains(ua, "MSIE") || goog.string.contains(ua, "Trident"));
goog.userAgent.detectedWebkit_ = !goog.userAgent.detectedOpera_ && goog.string.contains(ua, "WebKit");
goog.userAgent.detectedMobile_ = goog.userAgent.detectedWebkit_ && goog.string.contains(ua, "Mobile");
goog.userAgent.detectedGecko_ = !goog.userAgent.detectedOpera_ && !goog.userAgent.detectedWebkit_ && !goog.userAgent.detectedIe_ && navigator.product == "Gecko"
}
};
if(!goog.userAgent.BROWSER_KNOWN_) {
goog.userAgent.init_()
}
goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.userAgent.detectedOpera_;
goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.userAgent.detectedIe_;
goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.userAgent.detectedGecko_;
goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.userAgent.detectedWebkit_;
goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.detectedMobile_;
goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
goog.userAgent.determinePlatform_ = function() {
var navigator = goog.userAgent.getNavigator();
return navigator && navigator.platform || ""
};
goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
goog.define("goog.userAgent.ASSUME_MAC", false);
goog.define("goog.userAgent.ASSUME_WINDOWS", false);
goog.define("goog.userAgent.ASSUME_LINUX", false);
goog.define("goog.userAgent.ASSUME_X11", false);
goog.define("goog.userAgent.ASSUME_ANDROID", false);
goog.define("goog.userAgent.ASSUME_IPHONE", false);
goog.define("goog.userAgent.ASSUME_IPAD", false);
goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD;
goog.userAgent.initPlatform_ = function() {
goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM, "Mac");
goog.userAgent.detectedWindows_ = goog.string.contains(goog.userAgent.PLATFORM, "Win");
goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM, "Linux");
goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() && goog.string.contains(goog.userAgent.getNavigator()["appVersion"] || "", "X11");
var ua = goog.userAgent.getUserAgentString();
goog.userAgent.detectedAndroid_ = !!ua && goog.string.contains(ua, "Android");
goog.userAgent.detectedIPhone_ = !!ua && goog.string.contains(ua, "iPhone");
goog.userAgent.detectedIPad_ = !!ua && goog.string.contains(ua, "iPad")
};
if(!goog.userAgent.PLATFORM_KNOWN_) {
goog.userAgent.initPlatform_()
}
goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_;
goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_;
goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_;
goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_;
goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.userAgent.detectedAndroid_;
goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.userAgent.detectedIPhone_;
goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.userAgent.detectedIPad_;
goog.userAgent.determineVersion_ = function() {
var version = "", re;
if(goog.userAgent.OPERA && goog.global["opera"]) {
var operaVersion = goog.global["opera"].version;
version = typeof operaVersion == "function" ? operaVersion() : operaVersion
}else {
if(goog.userAgent.GECKO) {
re = /rv\:([^\);]+)(\)|;)/
}else {
if(goog.userAgent.IE) {
re = /\b(?:MSIE|rv)\s+([^\);]+)(\)|;)/
}else {
if(goog.userAgent.WEBKIT) {
re = /WebKit\/(\S+)/
}
}
}
if(re) {
var arr = re.exec(goog.userAgent.getUserAgentString());
version = arr ? arr[1] : ""
}
}
if(goog.userAgent.IE) {
var docMode = goog.userAgent.getDocumentMode_();
if(docMode > parseFloat(version)) {
return String(docMode)
}
}
return version
};
goog.userAgent.getDocumentMode_ = function() {
var doc = goog.global["document"];
return doc ? doc["documentMode"] : undefined
};
goog.userAgent.VERSION = goog.userAgent.determineVersion_();
goog.userAgent.compare = function(v1, v2) {
return goog.string.compareVersions(v1, v2)
};
goog.userAgent.isVersionOrHigherCache_ = {};
goog.userAgent.isVersionOrHigher = function(version) {
return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[version] || (goog.userAgent.isVersionOrHigherCache_[version] = goog.string.compareVersions(goog.userAgent.VERSION, version) >= 0)
};
goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
goog.userAgent.isDocumentModeOrHigher = function(documentMode) {
return goog.userAgent.IE && goog.userAgent.DOCUMENT_MODE >= documentMode
};
goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
goog.userAgent.DOCUMENT_MODE = function() {
var doc = goog.global["document"];
if(!doc || !goog.userAgent.IE) {
return undefined
}
var mode = goog.userAgent.getDocumentMode_();
return mode || (doc["compatMode"] == "CSS1Compat" ? parseInt(goog.userAgent.VERSION, 10) : 5)
}();
goog.require("goog.userAgent");
goog.provide("ol");
ol.ASSUME_TOUCH = false;
ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG;
ol.DEFAULT_MAX_ZOOM = 42;
ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048;
ol.DEFAULT_TILE_SIZE = 256;
ol.DEFAULT_WMS_VERSION = "1.3.0";
ol.DRAGROTATEANDZOOM_ANIMATION_DURATION = 400;
ol.DRAGROTATE_ANIMATION_DURATION = 250;
ol.DRAGZOOM_ANIMATION_DURATION = 200;
ol.DRAG_BOX_HYSTERESIS_PIXELS = 8;
ol.ENABLE_CANVAS = true;
ol.ENABLE_DOM = true;
ol.ENABLE_IMAGE = true;
ol.ENABLE_NAMED_COLORS = true;
ol.ENABLE_PROJ4JS = true;
ol.ENABLE_TILE = true;
ol.ENABLE_VECTOR = true;
ol.ENABLE_WEBGL = true;
ol.LEGACY_IE_SUPPORT = false;
ol.IS_HTTPS = goog.global.location.protocol === "https:";
ol.IS_LEGACY_IE = goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9.0") && goog.userAgent.VERSION !== "";
ol.KEYBOARD_PAN_DURATION = 100;
ol.MOUSEWHEELZOOM_MAXDELTA = 1;
ol.MOUSEWHEELZOOM_TIMEOUT_DURATION = 80;
ol.ROTATE_ANIMATION_DURATION = 250;
ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024;
ol.ZOOMSLIDER_ANIMATION_DURATION = 200;
ol.inherits = goog.inherits;
goog.provide("goog.debug.Error");
goog.debug.Error = function(opt_msg) {
if(Error.captureStackTrace) {
Error.captureStackTrace(this, goog.debug.Error)
}else {
this.stack = (new Error).stack || ""
}
if(opt_msg) {
this.message = String(opt_msg)
}
};
goog.inherits(goog.debug.Error, Error);
goog.debug.Error.prototype.name = "CustomError";
goog.provide("goog.asserts");
goog.provide("goog.asserts.AssertionError");
goog.require("goog.debug.Error");
goog.require("goog.string");
goog.define("goog.asserts.ENABLE_ASSERTS", goog.DEBUG);
goog.asserts.AssertionError = function(messagePattern, messageArgs) {
messageArgs.unshift(messagePattern);
goog.debug.Error.call(this, goog.string.subs.apply(null, messageArgs));
messageArgs.shift();
this.messagePattern = messagePattern
};
goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
goog.asserts.AssertionError.prototype.name = "AssertionError";
goog.asserts.doAssertFailure_ = function(defaultMessage, defaultArgs, givenMessage, givenArgs) {
var message = "Assertion failed";
if(givenMessage) {
message += ": " + givenMessage;
var args = givenArgs
}else {
if(defaultMessage) {
message += ": " + defaultMessage;
args = defaultArgs
}
}
throw new goog.asserts.AssertionError("" + message, args || []);
};
goog.asserts.assert = function(condition, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !condition) {
goog.asserts.doAssertFailure_("", null, opt_message, Array.prototype.slice.call(arguments, 2))
}
return condition
};
goog.asserts.fail = function(opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS) {
throw new goog.asserts.AssertionError("Failure" + (opt_message ? ": " + opt_message : ""), Array.prototype.slice.call(arguments, 1));
}
};
goog.asserts.assertNumber = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isNumber(value)) {
goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertString = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isString(value)) {
goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertFunction = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isFunction(value)) {
goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertObject = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isObject(value)) {
goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertArray = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isArray(value)) {
goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertBoolean = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(value)) {
goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertInstanceof = function(value, type, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !(value instanceof type)) {
goog.asserts.doAssertFailure_("instanceof check failed.", null, opt_message, Array.prototype.slice.call(arguments, 3))
}
return value
};
goog.asserts.assertObjectPrototypeIsIntact = function() {
for(var key in Object.prototype) {
goog.asserts.fail(key + " should not be enumerable in Object.prototype.")
}
};
goog.provide("ol.Size");
goog.provide("ol.size");
ol.Size;
ol.size.equals = function(a, b) {
return a[0] == b[0] && a[1] == b[1]
};
goog.provide("goog.array");
goog.provide("goog.array.ArrayLike");
goog.require("goog.asserts");
goog.define("goog.NATIVE_ARRAY_PROTOTYPES", goog.TRUSTED_SITE);
goog.array.ArrayLike;
goog.array.peek = function(array) {
return array[array.length - 1]
};
goog.array.ARRAY_PROTOTYPE_ = Array.prototype;
goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.indexOf ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr, obj, opt_fromIndex)
} : function(arr, obj, opt_fromIndex) {
var fromIndex = opt_fromIndex == null ? 0 : opt_fromIndex < 0 ? Math.max(0, arr.length + opt_fromIndex) : opt_fromIndex;
if(goog.isString(arr)) {
if(!goog.isString(obj) || obj.length != 1) {
return-1
}
return arr.indexOf(obj, fromIndex)
}
for(var i = fromIndex;i < arr.length;i++) {
if(i in arr && arr[i] === obj) {
return i
}
}
return-1
};
goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(arr.length != null);
var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex;
return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr, obj, fromIndex)
} : function(arr, obj, opt_fromIndex) {
var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex;
if(fromIndex < 0) {
fromIndex = Math.max(0, arr.length + fromIndex)
}
if(goog.isString(arr)) {
if(!goog.isString(obj) || obj.length != 1) {
return-1
}
return arr.lastIndexOf(obj, fromIndex)
}
for(var i = fromIndex;i >= 0;i--) {
if(i in arr && arr[i] === obj) {
return i
}
}
return-1
};
goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.forEach ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
goog.array.ARRAY_PROTOTYPE_.forEach.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
f.call(opt_obj, arr2[i], i, arr)
}
}
};
goog.array.forEachRight = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = l - 1;i >= 0;--i) {
if(i in arr2) {
f.call(opt_obj, arr2[i], i, arr)
}
}
};
goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.filter ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.filter.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var res = [];
var resLength = 0;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
var val = arr2[i];
if(f.call(opt_obj, val, i, arr)) {
res[resLength++] = val
}
}
}
return res
};
goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.map ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.map.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var res = new Array(l);
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
res[i] = f.call(opt_obj, arr2[i], i, arr)
}
}
return res
};
goog.array.reduce = function(arr, f, val, opt_obj) {
if(arr.reduce) {
if(opt_obj) {
return arr.reduce(goog.bind(f, opt_obj), val)
}else {
return arr.reduce(f, val)
}
}
var rval = val;
goog.array.forEach(arr, function(val, index) {
rval = f.call(opt_obj, rval, val, index, arr)
});
return rval
};
goog.array.reduceRight = function(arr, f, val, opt_obj) {
if(arr.reduceRight) {
if(opt_obj) {
return arr.reduceRight(goog.bind(f, opt_obj), val)
}else {
return arr.reduceRight(f, val)
}
}
var rval = val;
goog.array.forEachRight(arr, function(val, index) {
rval = f.call(opt_obj, rval, val, index, arr)
});
return rval
};
goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.some ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.some.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return true
}
}
return false
};
goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.every ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.every.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && !f.call(opt_obj, arr2[i], i, arr)) {
return false
}
}
return true
};
goog.array.count = function(arr, f, opt_obj) {
var count = 0;
goog.array.forEach(arr, function(element, index, arr) {
if(f.call(opt_obj, element, index, arr)) {
++count
}
}, opt_obj);
return count
};
goog.array.find = function(arr, f, opt_obj) {
var i = goog.array.findIndex(arr, f, opt_obj);
return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]
};
goog.array.findIndex = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return i
}
}
return-1
};
goog.array.findRight = function(arr, f, opt_obj) {
var i = goog.array.findIndexRight(arr, f, opt_obj);
return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]
};
goog.array.findIndexRight = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = l - 1;i >= 0;i--) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return i
}
}
return-1
};
goog.array.contains = function(arr, obj) {
return goog.array.indexOf(arr, obj) >= 0
};
goog.array.isEmpty = function(arr) {
return arr.length == 0
};
goog.array.clear = function(arr) {
if(!goog.isArray(arr)) {
for(var i = arr.length - 1;i >= 0;i--) {
delete arr[i]
}
}
arr.length = 0
};
goog.array.insert = function(arr, obj) {
if(!goog.array.contains(arr, obj)) {
arr.push(obj)
}
};
goog.array.insertAt = function(arr, obj, opt_i) {
goog.array.splice(arr, opt_i, 0, obj)
};
goog.array.insertArrayAt = function(arr, elementsToAdd, opt_i) {
goog.partial(goog.array.splice, arr, opt_i, 0).apply(null, elementsToAdd)
};
goog.array.insertBefore = function(arr, obj, opt_obj2) {
var i;
if(arguments.length == 2 || (i = goog.array.indexOf(arr, opt_obj2)) < 0) {
arr.push(obj)
}else {
goog.array.insertAt(arr, obj, i)
}
};
goog.array.remove = function(arr, obj) {
var i = goog.array.indexOf(arr, obj);
var rv;
if(rv = i >= 0) {
goog.array.removeAt(arr, i)
}
return rv
};
goog.array.removeAt = function(arr, i) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.splice.call(arr, i, 1).length == 1
};
goog.array.removeIf = function(arr, f, opt_obj) {
var i = goog.array.findIndex(arr, f, opt_obj);
if(i >= 0) {
goog.array.removeAt(arr, i);
return true
}
return false
};
goog.array.concat = function(var_args) {
return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments)
};
goog.array.toArray = function(object) {
var length = object.length;
if(length > 0) {
var rv = new Array(length);
for(var i = 0;i < length;i++) {
rv[i] = object[i]
}
return rv
}
return[]
};
goog.array.clone = goog.array.toArray;
goog.array.extend = function(arr1, var_args) {
for(var i = 1;i < arguments.length;i++) {
var arr2 = arguments[i];
var isArrayLike;
if(goog.isArray(arr2) || (isArrayLike = goog.isArrayLike(arr2)) && Object.prototype.hasOwnProperty.call(arr2, "callee")) {
arr1.push.apply(arr1, arr2)
}else {
if(isArrayLike) {
var len1 = arr1.length;
var len2 = arr2.length;
for(var j = 0;j < len2;j++) {
arr1[len1 + j] = arr2[j]
}
}else {
arr1.push(arr2)
}
}
}
};
goog.array.splice = function(arr, index, howMany, var_args) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.splice.apply(arr, goog.array.slice(arguments, 1))
};
goog.array.slice = function(arr, start, opt_end) {
goog.asserts.assert(arr.length != null);
if(arguments.length <= 2) {
return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start)
}else {
return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start, opt_end)
}
};
goog.array.removeDuplicates = function(arr, opt_rv) {
var returnArray = opt_rv || arr;
var seen = {}, cursorInsert = 0, cursorRead = 0;
while(cursorRead < arr.length) {
var current = arr[cursorRead++];
var key = goog.isObject(current) ? "o" + goog.getUid(current) : (typeof current).charAt(0) + current;
if(!Object.prototype.hasOwnProperty.call(seen, key)) {
seen[key] = true;
returnArray[cursorInsert++] = current
}
}
returnArray.length = cursorInsert
};
goog.array.binarySearch = function(arr, target, opt_compareFn) {
return goog.array.binarySearch_(arr, opt_compareFn || goog.array.defaultCompare, false, target)
};
goog.array.binarySelect = function(arr, evaluator, opt_obj) {
return goog.array.binarySearch_(arr, evaluator, true, undefined, opt_obj)
};
goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target, opt_selfObj) {
var left = 0;
var right = arr.length;
var found;
while(left < right) {
var middle = left + right >> 1;
var compareResult;
if(isEvaluator) {
compareResult = compareFn.call(opt_selfObj, arr[middle], middle, arr)
}else {
compareResult = compareFn(opt_target, arr[middle])
}
if(compareResult > 0) {
left = middle + 1
}else {
right = middle;
found = !compareResult
}
}
return found ? left : ~left
};
goog.array.sort = function(arr, opt_compareFn) {
goog.asserts.assert(arr.length != null);
goog.array.ARRAY_PROTOTYPE_.sort.call(arr, opt_compareFn || goog.array.defaultCompare)
};
goog.array.stableSort = function(arr, opt_compareFn) {
for(var i = 0;i < arr.length;i++) {
arr[i] = {index:i, value:arr[i]}
}
var valueCompareFn = opt_compareFn || goog.array.defaultCompare;
function stableCompareFn(obj1, obj2) {
return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index
}
goog.array.sort(arr, stableCompareFn);
for(var i = 0;i < arr.length;i++) {
arr[i] = arr[i].value
}
};
goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) {
var compare = opt_compareFn || goog.array.defaultCompare;
goog.array.sort(arr, function(a, b) {
return compare(a[key], b[key])
})
};
goog.array.isSorted = function(arr, opt_compareFn, opt_strict) {
var compare = opt_compareFn || goog.array.defaultCompare;
for(var i = 1;i < arr.length;i++) {
var compareResult = compare(arr[i - 1], arr[i]);
if(compareResult > 0 || compareResult == 0 && opt_strict) {
return false
}
}
return true
};
goog.array.equals = function(arr1, arr2, opt_equalsFn) {
if(!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || arr1.length != arr2.length) {
return false
}
var l = arr1.length;
var equalsFn = opt_equalsFn || goog.array.defaultCompareEquality;
for(var i = 0;i < l;i++) {
if(!equalsFn(arr1[i], arr2[i])) {
return false
}
}
return true
};
goog.array.compare = function(arr1, arr2, opt_equalsFn) {
return goog.array.equals(arr1, arr2, opt_equalsFn)
};
goog.array.compare3 = function(arr1, arr2, opt_compareFn) {
var compare = opt_compareFn || goog.array.defaultCompare;
var l = Math.min(arr1.length, arr2.length);
for(var i = 0;i < l;i++) {
var result = compare(arr1[i], arr2[i]);
if(result != 0) {
return result
}
}
return goog.array.defaultCompare(arr1.length, arr2.length)
};
goog.array.defaultCompare = function(a, b) {
return a > b ? 1 : a < b ? -1 : 0
};
goog.array.defaultCompareEquality = function(a, b) {
return a === b
};
goog.array.binaryInsert = function(array, value, opt_compareFn) {
var index = goog.array.binarySearch(array, value, opt_compareFn);
if(index < 0) {
goog.array.insertAt(array, value, -(index + 1));
return true
}
return false
};
goog.array.binaryRemove = function(array, value, opt_compareFn) {
var index = goog.array.binarySearch(array, value, opt_compareFn);
return index >= 0 ? goog.array.removeAt(array, index) : false
};
goog.array.bucket = function(array, sorter, opt_obj) {
var buckets = {};
for(var i = 0;i < array.length;i++) {
var value = array[i];
var key = sorter.call(opt_obj, value, i, array);
if(goog.isDef(key)) {
var bucket = buckets[key] || (buckets[key] = []);
bucket.push(value)
}
}
return buckets
};
goog.array.toObject = function(arr, keyFunc, opt_obj) {
var ret = {};
goog.array.forEach(arr, function(element, index) {
ret[keyFunc.call(opt_obj, element, index, arr)] = element
});
return ret
};
goog.array.range = function(startOrEnd, opt_end, opt_step) {
var array = [];
var start = 0;
var end = startOrEnd;
var step = opt_step || 1;
if(opt_end !== undefined) {
start = startOrEnd;
end = opt_end
}
if(step * (end - start) < 0) {
return[]
}
if(step > 0) {
for(var i = start;i < end;i += step) {
array.push(i)
}
}else {
for(var i = start;i > end;i += step) {
array.push(i)
}
}
return array
};
goog.array.repeat = function(value, n) {
var array = [];
for(var i = 0;i < n;i++) {
array[i] = value
}
return array
};
goog.array.flatten = function(var_args) {
var result = [];
for(var i = 0;i < arguments.length;i++) {
var element = arguments[i];
if(goog.isArray(element)) {
result.push.apply(result, goog.array.flatten.apply(null, element))
}else {
result.push(element)
}
}
return result
};
goog.array.rotate = function(array, n) {
goog.asserts.assert(array.length != null);
if(array.length) {
n %= array.length;
if(n > 0) {
goog.array.ARRAY_PROTOTYPE_.unshift.apply(array, array.splice(-n, n))
}else {
if(n < 0) {
goog.array.ARRAY_PROTOTYPE_.push.apply(array, array.splice(0, -n))
}
}
}
return array
};
goog.array.moveItem = function(arr, fromIndex, toIndex) {
goog.asserts.assert(fromIndex >= 0 && fromIndex < arr.length);
goog.asserts.assert(toIndex >= 0 && toIndex < arr.length);
var removedItems = goog.array.ARRAY_PROTOTYPE_.splice.call(arr, fromIndex, 1);
goog.array.ARRAY_PROTOTYPE_.splice.call(arr, toIndex, 0, removedItems[0])
};
goog.array.zip = function(var_args) {
if(!arguments.length) {
return[]
}
var result = [];
for(var i = 0;true;i++) {
var value = [];
for(var j = 0;j < arguments.length;j++) {
var arr = arguments[j];
if(i >= arr.length) {
return result
}
value.push(arr[i])
}
result.push(value)
}
};
goog.array.shuffle = function(arr, opt_randFn) {
var randFn = opt_randFn || Math.random;
for(var i = arr.length - 1;i > 0;i--) {
var j = Math.floor(randFn() * (i + 1));
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp
}
};
goog.provide("ol.TileCoord");
goog.require("goog.array");
goog.require("goog.asserts");
ol.QuadKeyCharCode = {ZERO:"0".charCodeAt(0), ONE:"1".charCodeAt(0), TWO:"2".charCodeAt(0), THREE:"3".charCodeAt(0)};
ol.TileCoord = function(z, x, y) {
this.z = z;
this.x = x;
this.y = y
};
ol.TileCoord.createFromQuadKey = function(quadKey) {
var z = quadKey.length, x = 0, y = 0;
var mask = 1 << z - 1;
var i;
for(i = 0;i < z;++i) {
switch(quadKey.charCodeAt(i)) {
case ol.QuadKeyCharCode.ONE:
x += mask;
break;
case ol.QuadKeyCharCode.TWO:
y += mask;
break;
case ol.QuadKeyCharCode.THREE:
x += mask;
y += mask;
break
}
mask >>= 1
}
return new ol.TileCoord(z, x, y)
};
ol.TileCoord.createFromString = function(str) {
var v = str.split("/");
v = goog.array.map(v, function(e, i, a) {
return parseInt(e, 10)
});
return new ol.TileCoord(v[0], v[1], v[2])
};
ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) {
if(goog.isDef(tileCoord)) {
tileCoord.z = z;
tileCoord.x = x;
tileCoord.y = y;
return tileCoord
}else {
return new ol.TileCoord(z, x, y)
}
};
ol.TileCoord.getKeyZXY = function(z, x, y) {
return z + "/" + x + "/" + y
};
ol.TileCoord.prototype.getZXY = function(opt_result) {
if(goog.isDef(opt_result)) {
goog.asserts.assert(opt_result.length == 3);
opt_result[0] = this.z;
opt_result[1] = this.x;
opt_result[2] = this.y;
return opt_result
}else {
return[this.z, this.x, this.y]
}
};
ol.TileCoord.prototype.hash = function() {
return(this.x << this.z) + this.y
};
ol.TileCoord.prototype.quadKey = function() {
var digits = new Array(this.z);
var mask = 1 << this.z - 1;
var i, charCode;
for(i = 0;i < this.z;++i) {
charCode = ol.QuadKeyCharCode.ZERO;
if(this.x & mask) {
charCode += 1
}
if(this.y & mask) {
charCode += 2
}
digits[i] = String.fromCharCode(charCode);
mask >>= 1
}
return digits.join("")
};
ol.TileCoord.prototype.toString = function() {
return ol.TileCoord.getKeyZXY(this.z, this.x, this.y)
};
goog.provide("ol.TileRange");
goog.require("goog.asserts");
goog.require("ol.Size");
goog.require("ol.TileCoord");
ol.TileRange = function(minX, maxX, minY, maxY) {
this.minX = minX;
this.maxX = maxX;
this.minY = minY;
this.maxY = maxY
};
ol.TileRange.boundingTileRange = function(var_args) {
var tileCoord0 = (arguments[0]);
var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, tileCoord0.y, tileCoord0.y);
var i, ii, tileCoord;
for(i = 1, ii = arguments.length;i < ii;++i) {
tileCoord = (arguments[i]);
goog.asserts.assert(tileCoord.z == tileCoord0.z);
tileRange.minX = Math.min(tileRange.minX, tileCoord.x);
tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x);
tileRange.minY = Math.min(tileRange.minY, tileCoord.y);
tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y)
}
return tileRange
};
ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) {
if(goog.isDef(tileRange)) {
tileRange.minX = minX;
tileRange.maxX = maxX;
tileRange.minY = minY;
tileRange.maxY = maxY;
return tileRange
}else {
return new ol.TileRange(minX, maxX, minY, maxY)
}
};
ol.TileRange.prototype.contains = function(tileCoord) {
return this.minX <= tileCoord.x && tileCoord.x <= this.maxX && this.minY <= tileCoord.y && tileCoord.y <= this.maxY
};
ol.TileRange.prototype.containsTileRange = function(tileRange) {
return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX && this.minY <= tileRange.minY && tileRange.maxY <= this.maxY
};
ol.TileRange.prototype.equals = function(tileRange) {
return this.minX == tileRange.minX && this.minY == tileRange.minY && this.maxX == tileRange.maxX && this.maxY == tileRange.maxY
};
ol.TileRange.prototype.extend = function(tileRange) {
if(tileRange.minX < this.minX) {
this.minX = tileRange.minX
}
if(tileRange.maxX > this.maxX) {
this.maxX = tileRange.maxX
}
if(tileRange.minY < this.minY) {
this.minY = tileRange.minY
}
if(tileRange.maxY > this.maxY) {
this.maxY = tileRange.maxY
}
};
ol.TileRange.prototype.getHeight = function() {
return this.maxY - this.minY + 1
};
ol.TileRange.prototype.getSize = function() {
return[this.getWidth(), this.getHeight()]
};
ol.TileRange.prototype.getWidth = function() {
return this.maxX - this.minX + 1
};
ol.TileRange.prototype.intersects = function(tileRange) {
return this.minX <= tileRange.maxX && this.maxX >= tileRange.minX && this.minY <= tileRange.maxY && this.maxY >= tileRange.minY
};
goog.provide("ol.Attribution");
goog.require("ol.TileRange");
ol.Attribution = function(options) {
this.html_ = options.html;
this.tileRanges_ = goog.isDef(options.tileRanges) ? options.tileRanges : null
};
ol.Attribution.prototype.getHTML = function() {
return this.html_
};
ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges) {
if(goog.isNull(this.tileRanges_)) {
return true
}
var i, ii, tileRange, z;
for(z in tileRanges) {
if(!(z in this.tileRanges_)) {
continue
}
tileRange = tileRanges[z];
for(i = 0, ii = this.tileRanges_[z].length;i < ii;++i) {
if(this.tileRanges_[z][i].intersects(tileRange)) {
return true
}
}
}
return false
};
goog.provide("goog.dom.BrowserFeature");
goog.require("goog.userAgent");
goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.1"), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT,
INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};
goog.provide("goog.dom.TagName");
goog.dom.TagName = {A:"A", ABBR:"ABBR", ACRONYM:"ACRONYM", ADDRESS:"ADDRESS", APPLET:"APPLET", AREA:"AREA", ARTICLE:"ARTICLE", ASIDE:"ASIDE", AUDIO:"AUDIO", B:"B", BASE:"BASE", BASEFONT:"BASEFONT", BDI:"BDI", BDO:"BDO", BIG:"BIG", BLOCKQUOTE:"BLOCKQUOTE", BODY:"BODY", BR:"BR", BUTTON:"BUTTON", CANVAS:"CANVAS", CAPTION:"CAPTION", CENTER:"CENTER", CITE:"CITE", CODE:"CODE", COL:"COL", COLGROUP:"COLGROUP", COMMAND:"COMMAND", DATA:"DATA", DATALIST:"DATALIST", DD:"DD", DEL:"DEL", DETAILS:"DETAILS", DFN:"DFN",
DIALOG:"DIALOG", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", EMBED:"EMBED", FIELDSET:"FIELDSET", FIGCAPTION:"FIGCAPTION", FIGURE:"FIGURE", FONT:"FONT", FOOTER:"FOOTER", FORM:"FORM", FRAME:"FRAME", FRAMESET:"FRAMESET", H1:"H1", H2:"H2", H3:"H3", H4:"H4", H5:"H5", H6:"H6", HEAD:"HEAD", HEADER:"HEADER", HGROUP:"HGROUP", HR:"HR", HTML:"HTML", I:"I", IFRAME:"IFRAME", IMG:"IMG", INPUT:"INPUT", INS:"INS", ISINDEX:"ISINDEX", KBD:"KBD", KEYGEN:"KEYGEN", LABEL:"LABEL", LEGEND:"LEGEND", LI:"LI", LINK:"LINK",
MAP:"MAP", MARK:"MARK", MATH:"MATH", MENU:"MENU", META:"META", METER:"METER", NAV:"NAV", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", OUTPUT:"OUTPUT", P:"P", PARAM:"PARAM", PRE:"PRE", PROGRESS:"PROGRESS", Q:"Q", RP:"RP", RT:"RT", RUBY:"RUBY", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SECTION:"SECTION", SELECT:"SELECT", SMALL:"SMALL", SOURCE:"SOURCE", SPAN:"SPAN", STRIKE:"STRIKE", STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUMMARY:"SUMMARY",
SUP:"SUP", SVG:"SVG", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TIME:"TIME", TITLE:"TITLE", TR:"TR", TRACK:"TRACK", TT:"TT", U:"U", UL:"UL", VAR:"VAR", VIDEO:"VIDEO", WBR:"WBR"};
goog.provide("goog.dom.classes");
goog.require("goog.array");
goog.dom.classes.set = function(element, className) {
element.className = className
};
goog.dom.classes.get = function(element) {
var className = element.className;
return goog.isString(className) && className.match(/\S+/g) || []
};
goog.dom.classes.add = function(element, var_args) {
var classes = goog.dom.classes.get(element);
var args = goog.array.slice(arguments, 1);
var expectedCount = classes.length + args.length;
goog.dom.classes.add_(classes, args);
goog.dom.classes.set(element, classes.join(" "));
return classes.length == expectedCount
};
goog.dom.classes.remove = function(element, var_args) {
var classes = goog.dom.classes.get(element);
var args = goog.array.slice(arguments, 1);
var newClasses = goog.dom.classes.getDifference_(classes, args);
goog.dom.classes.set(element, newClasses.join(" "));
return newClasses.length == classes.length - args.length
};
goog.dom.classes.add_ = function(classes, args) {
for(var i = 0;i < args.length;i++) {
if(!goog.array.contains(classes, args[i])) {
classes.push(args[i])
}
}
};
goog.dom.classes.getDifference_ = function(arr1, arr2) {
return goog.array.filter(arr1, function(item) {
return!goog.array.contains(arr2, item)
})
};
goog.dom.classes.swap = function(element, fromClass, toClass) {
var classes = goog.dom.classes.get(element);
var removed = false;
for(var i = 0;i < classes.length;i++) {
if(classes[i] == fromClass) {
goog.array.splice(classes, i--, 1);
removed = true
}
}
if(removed) {
classes.push(toClass);
goog.dom.classes.set(element, classes.join(" "))
}
return removed
};
goog.dom.classes.addRemove = function(element, classesToRemove, classesToAdd) {
var classes = goog.dom.classes.get(element);
if(goog.isString(classesToRemove)) {
goog.array.remove(classes, classesToRemove)
}else {
if(goog.isArray(classesToRemove)) {
classes = goog.dom.classes.getDifference_(classes, classesToRemove)
}
}
if(goog.isString(classesToAdd) && !goog.array.contains(classes, classesToAdd)) {
classes.push(classesToAdd)
}else {
if(goog.isArray(classesToAdd)) {
goog.dom.classes.add_(classes, classesToAdd)
}
}
goog.dom.classes.set(element, classes.join(" "))
};
goog.dom.classes.has = function(element, className) {
return goog.array.contains(goog.dom.classes.get(element), className)
};
goog.dom.classes.enable = function(element, className, enabled) {
if(enabled) {
goog.dom.classes.add(element, className)
}else {
goog.dom.classes.remove(element, className)
}
};
goog.dom.classes.toggle = function(element, className) {
var add = !goog.dom.classes.has(element, className);
goog.dom.classes.enable(element, className, add);
return add
};
goog.provide("goog.math");
goog.require("goog.array");
goog.require("goog.asserts");
goog.math.randomInt = function(a) {
return Math.floor(Math.random() * a)
};
goog.math.uniformRandom = function(a, b) {
return a + Math.random() * (b - a)
};
goog.math.clamp = function(value, min, max) {
return Math.min(Math.max(value, min), max)
};
goog.math.modulo = function(a, b) {
var r = a % b;
return r * b < 0 ? r + b : r
};
goog.math.lerp = function(a, b, x) {
return a + x * (b - a)
};
goog.math.nearlyEquals = function(a, b, opt_tolerance) {
return Math.abs(a - b) <= (opt_tolerance || 1E-6)
};
goog.math.standardAngle = function(angle) {
return goog.math.modulo(angle, 360)
};
goog.math.toRadians = function(angleDegrees) {
return angleDegrees * Math.PI / 180
};
goog.math.toDegrees = function(angleRadians) {
return angleRadians * 180 / Math.PI
};
goog.math.angleDx = function(degrees, radius) {
return radius * Math.cos(goog.math.toRadians(degrees))
};
goog.math.angleDy = function(degrees, radius) {
return radius * Math.sin(goog.math.toRadians(degrees))
};
goog.math.angle = function(x1, y1, x2, y2) {
return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(y2 - y1, x2 - x1)))
};
goog.math.angleDifference = function(startAngle, endAngle) {
var d = goog.math.standardAngle(endAngle) - goog.math.standardAngle(startAngle);
if(d > 180) {
d = d - 360
}else {
if(d <= -180) {
d = 360 + d
}
}
return d
};
goog.math.sign = function(x) {
return x == 0 ? 0 : x < 0 ? -1 : 1
};
goog.math.longestCommonSubsequence = function(array1, array2, opt_compareFn, opt_collectorFn) {
var compare = opt_compareFn || function(a, b) {
return a == b
};
var collect = opt_collectorFn || function(i1, i2) {
return array1[i1]
};
var length1 = array1.length;
var length2 = array2.length;
var arr = [];
for(var i = 0;i < length1 + 1;i++) {
arr[i] = [];
arr[i][0] = 0
}
for(var j = 0;j < length2 + 1;j++) {
arr[0][j] = 0
}
for(i = 1;i <= length1;i++) {
for(j = 1;j <= length2;j++) {
if(compare(array1[i - 1], array2[j - 1])) {
arr[i][j] = arr[i - 1][j - 1] + 1
}else {
arr[i][j] = Math.max(arr[i - 1][j], arr[i][j - 1])
}
}
}
var result = [];
var i = length1, j = length2;
while(i > 0 && j > 0) {
if(compare(array1[i - 1], array2[j - 1])) {
result.unshift(collect(i - 1, j - 1));
i--;
j--
}else {
if(arr[i - 1][j] > arr[i][j - 1]) {
i--
}else {
j--
}
}
}
return result
};
goog.math.sum = function(var_args) {
return(goog.array.reduce(arguments, function(sum, value) {
return sum + value
}, 0))
};
goog.math.average = function(var_args) {
return goog.math.sum.apply(null, arguments) / arguments.length
};
goog.math.standardDeviation = function(var_args) {
var sampleSize = arguments.length;
if(sampleSize < 2) {
return 0
}
var mean = goog.math.average.apply(null, arguments);
var variance = goog.math.sum.apply(null, goog.array.map(arguments, function(val) {
return Math.pow(val - mean, 2)
})) / (sampleSize - 1);
return Math.sqrt(variance)
};
goog.math.isInt = function(num) {
return isFinite(num) && num % 1 == 0
};
goog.math.isFiniteNumber = function(num) {
return isFinite(num) && !isNaN(num)
};
goog.math.safeFloor = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0);
return Math.floor(num + (opt_epsilon || 2E-15))
};
goog.math.safeCeil = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0);
return Math.ceil(num - (opt_epsilon || 2E-15))
};
goog.provide("goog.math.Coordinate");
goog.require("goog.math");
goog.math.Coordinate = function(opt_x, opt_y) {
this.x = goog.isDef(opt_x) ? opt_x : 0;
this.y = goog.isDef(opt_y) ? opt_y : 0
};
goog.math.Coordinate.prototype.clone = function() {
return new goog.math.Coordinate(this.x, this.y)
};
if(goog.DEBUG) {
goog.math.Coordinate.prototype.toString = function() {
return"(" + this.x + ", " + this.y + ")"
}
}
goog.math.Coordinate.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.x == b.x && a.y == b.y
};
goog.math.Coordinate.distance = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy)
};
goog.math.Coordinate.magnitude = function(a) {
return Math.sqrt(a.x * a.x + a.y * a.y)
};
goog.math.Coordinate.azimuth = function(a) {
return goog.math.angle(0, 0, a.x, a.y)
};
goog.math.Coordinate.squaredDistance = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return dx * dx + dy * dy
};
goog.math.Coordinate.difference = function(a, b) {
return new goog.math.Coordinate(a.x - b.x, a.y - b.y)
};
goog.math.Coordinate.sum = function(a, b) {
return new goog.math.Coordinate(a.x + b.x, a.y + b.y)
};
goog.math.Coordinate.prototype.ceil = function() {
this.x = Math.ceil(this.x);
this.y = Math.ceil(this.y);
return this
};
goog.math.Coordinate.prototype.floor = function() {
this.x = Math.floor(this.x);
this.y = Math.floor(this.y);
return this
};
goog.math.Coordinate.prototype.round = function() {
this.x = Math.round(this.x);
this.y = Math.round(this.y);
return this
};
goog.math.Coordinate.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.x += tx.x;
this.y += tx.y
}else {
this.x += tx;
if(goog.isNumber(opt_ty)) {
this.y += opt_ty
}
}
return this
};
goog.math.Coordinate.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.x *= sx;
this.y *= sy;
return this
};
goog.provide("goog.math.Size");
goog.math.Size = function(width, height) {
this.width = width;
this.height = height
};
goog.math.Size.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.width == b.width && a.height == b.height
};
goog.math.Size.prototype.clone = function() {
return new goog.math.Size(this.width, this.height)
};
if(goog.DEBUG) {
goog.math.Size.prototype.toString = function() {
return"(" + this.width + " x " + this.height + ")"
}
}
goog.math.Size.prototype.getLongest = function() {
return Math.max(this.width, this.height)
};
goog.math.Size.prototype.getShortest = function() {
return Math.min(this.width, this.height)
};
goog.math.Size.prototype.area = function() {
return this.width * this.height
};
goog.math.Size.prototype.perimeter = function() {
return(this.width + this.height) * 2
};
goog.math.Size.prototype.aspectRatio = function() {
return this.width / this.height
};
goog.math.Size.prototype.isEmpty = function() {
return!this.area()
};
goog.math.Size.prototype.ceil = function() {
this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this
};
goog.math.Size.prototype.fitsInside = function(target) {
return this.width <= target.width && this.height <= target.height
};
goog.math.Size.prototype.floor = function() {
this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this
};
goog.math.Size.prototype.round = function() {
this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this
};
goog.math.Size.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.width *= sx;
this.height *= sy;
return this
};
goog.math.Size.prototype.scaleToFit = function(target) {
var s = this.aspectRatio() > target.aspectRatio() ? target.width / this.width : target.height / this.height;
return this.scale(s)
};
goog.provide("goog.object");
goog.object.forEach = function(obj, f, opt_obj) {
for(var key in obj) {
f.call(opt_obj, obj[key], key, obj)
}
};
goog.object.filter = function(obj, f, opt_obj) {
var res = {};
for(var key in obj) {
if(f.call(opt_obj, obj[key], key, obj)) {
res[key] = obj[key]
}
}
return res
};
goog.object.map = function(obj, f, opt_obj) {
var res = {};
for(var key in obj) {
res[key] = f.call(opt_obj, obj[key], key, obj)
}
return res
};
goog.object.some = function(obj, f, opt_obj) {
for(var key in obj) {
if(f.call(opt_obj, obj[key], key, obj)) {
return true
}
}
return false
};
goog.object.every = function(obj, f, opt_obj) {
for(var key in obj) {
if(!f.call(opt_obj, obj[key], key, obj)) {
return false
}
}
return true
};
goog.object.getCount = function(obj) {
var rv = 0;
for(var key in obj) {
rv++
}
return rv
};
goog.object.getAnyKey = function(obj) {
for(var key in obj) {
return key
}
};
goog.object.getAnyValue = function(obj) {
for(var key in obj) {
return obj[key]
}
};
goog.object.contains = function(obj, val) {
return goog.object.containsValue(obj, val)
};
goog.object.getValues = function(obj) {
var res = [];
var i = 0;
for(var key in obj) {
res[i++] = obj[key]
}
return res
};
goog.object.getKeys = function(obj) {
var res = [];
var i = 0;
for(var key in obj) {
res[i++] = key
}
return res
};
goog.object.getValueByKeys = function(obj, var_args) {
var isArrayLike = goog.isArrayLike(var_args);
var keys = isArrayLike ? var_args : arguments;
for(var i = isArrayLike ? 0 : 1;i < keys.length;i++) {
obj = obj[keys[i]];
if(!goog.isDef(obj)) {
break
}
}
return obj
};
goog.object.containsKey = function(obj, key) {
return key in obj
};
goog.object.containsValue = function(obj, val) {
for(var key in obj) {
if(obj[key] == val) {
return true
}
}
return false
};
goog.object.findKey = function(obj, f, opt_this) {
for(var key in obj) {
if(f.call(opt_this, obj[key], key, obj)) {
return key
}
}
return undefined
};
goog.object.findValue = function(obj, f, opt_this) {
var key = goog.object.findKey(obj, f, opt_this);
return key && obj[key]
};
goog.object.isEmpty = function(obj) {
for(var key in obj) {
return false
}
return true
};
goog.object.clear = function(obj) {
for(var i in obj) {
delete obj[i]
}
};
goog.object.remove = function(obj, key) {
var rv;
if(rv = key in obj) {
delete obj[key]
}
return rv
};
goog.object.add = function(obj, key, val) {
if(key in obj) {
throw Error('The object already contains the key "' + key + '"');
}
goog.object.set(obj, key, val)
};
goog.object.get = function(obj, key, opt_val) {
if(key in obj) {
return obj[key]
}
return opt_val
};
goog.object.set = function(obj, key, value) {
obj[key] = value
};
goog.object.setIfUndefined = function(obj, key, value) {
return key in obj ? obj[key] : obj[key] = value
};
goog.object.clone = function(obj) {
var res = {};
for(var key in obj) {
res[key] = obj[key]
}
return res
};
goog.object.unsafeClone = function(obj) {
var type = goog.typeOf(obj);
if(type == "object" || type == "array") {
if(obj.clone) {
return obj.clone()
}
var clone = type == "array" ? [] : {};
for(var key in obj) {
clone[key] = goog.object.unsafeClone(obj[key])
}
return clone
}
return obj
};
goog.object.transpose = function(obj) {
var transposed = {};
for(var key in obj) {
transposed[obj[key]] = key
}
return transposed
};
goog.object.PROTOTYPE_FIELDS_ = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"];
goog.object.extend = function(target, var_args) {
var key, source;
for(var i = 1;i < arguments.length;i++) {
source = arguments[i];
for(key in source) {
target[key] = source[key]
}
for(var j = 0;j < goog.object.PROTOTYPE_FIELDS_.length;j++) {
key = goog.object.PROTOTYPE_FIELDS_[j];
if(Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
}
};
goog.object.create = function(var_args) {
var argLength = arguments.length;
if(argLength == 1 && goog.isArray(arguments[0])) {
return goog.object.create.apply(null, arguments[0])
}
if(argLength % 2) {
throw Error("Uneven number of arguments");
}
var rv = {};
for(var i = 0;i < argLength;i += 2) {
rv[arguments[i]] = arguments[i + 1]
}
return rv
};
goog.object.createSet = function(var_args) {
var argLength = arguments.length;
if(argLength == 1 && goog.isArray(arguments[0])) {
return goog.object.createSet.apply(null, arguments[0])
}
var rv = {};
for(var i = 0;i < argLength;i++) {
rv[arguments[i]] = true
}
return rv
};
goog.object.createImmutableView = function(obj) {
var result = obj;
if(Object.isFrozen && !Object.isFrozen(obj)) {
result = Object.create(obj);
Object.freeze(result)
}
return result
};
goog.object.isImmutableView = function(obj) {
return!!Object.isFrozen && Object.isFrozen(obj)
};
goog.provide("goog.dom");
goog.provide("goog.dom.Appendable");
goog.provide("goog.dom.DomHelper");
goog.provide("goog.dom.NodeType");
goog.require("goog.array");
goog.require("goog.dom.BrowserFeature");
goog.require("goog.dom.TagName");
goog.require("goog.dom.classes");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Size");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.define("goog.dom.ASSUME_QUIRKS_MODE", false);
goog.define("goog.dom.ASSUME_STANDARDS_MODE", false);
goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE;
goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12};
goog.dom.getDomHelper = function(opt_element) {
return opt_element ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper)
};
goog.dom.defaultDomHelper_;
goog.dom.getDocument = function() {
return document
};
goog.dom.getElement = function(element) {
return goog.isString(element) ? document.getElementById(element) : element
};
goog.dom.$ = goog.dom.getElement;
goog.dom.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) {
return goog.dom.getElementsByTagNameAndClass_(document, opt_tag, opt_class, opt_el)
};
goog.dom.getElementsByClass = function(className, opt_el) {
var parent = opt_el || document;
if(goog.dom.canUseQuerySelector_(parent)) {
return parent.querySelectorAll("." + className)
}else {
if(parent.getElementsByClassName) {
return parent.getElementsByClassName(className)
}
}
return goog.dom.getElementsByTagNameAndClass_(document, "*", className, opt_el)
};
goog.dom.getElementByClass = function(className, opt_el) {
var parent = opt_el || document;
var retVal = null;
if(goog.dom.canUseQuerySelector_(parent)) {
retVal = parent.querySelector("." + className)
}else {
retVal = goog.dom.getElementsByClass(className, opt_el)[0]
}
return retVal || null
};
goog.dom.canUseQuerySelector_ = function(parent) {
return!!(parent.querySelectorAll && parent.querySelector)
};
goog.dom.getElementsByTagNameAndClass_ = function(doc, opt_tag, opt_class, opt_el) {
var parent = opt_el || doc;
var tagName = opt_tag && opt_tag != "*" ? opt_tag.toUpperCase() : "";
if(goog.dom.canUseQuerySelector_(parent) && (tagName || opt_class)) {
var query = tagName + (opt_class ? "." + opt_class : "");
return parent.querySelectorAll(query)
}
if(opt_class && parent.getElementsByClassName) {
var els = parent.getElementsByClassName(opt_class);
if(tagName) {
var arrayLike = {};
var len = 0;
for(var i = 0, el;el = els[i];i++) {
if(tagName == el.nodeName) {
arrayLike[len++] = el
}
}
arrayLike.length = len;
return arrayLike
}else {
return els
}
}
var els = parent.getElementsByTagName(tagName || "*");
if(opt_class) {
var arrayLike = {};
var len = 0;
for(var i = 0, el;el = els[i];i++) {
var className = el.className;
if(typeof className.split == "function" && goog.array.contains(className.split(/\s+/), opt_class)) {
arrayLike[len++] = el
}
}
arrayLike.length = len;
return arrayLike
}else {
return els
}
};
goog.dom.$$ = goog.dom.getElementsByTagNameAndClass;
goog.dom.setProperties = function(element, properties) {
goog.object.forEach(properties, function(val, key) {
if(key == "style") {
element.style.cssText = val
}else {
if(key == "class") {
element.className = val
}else {
if(key == "for") {
element.htmlFor = val
}else {
if(key in goog.dom.DIRECT_ATTRIBUTE_MAP_) {
element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val)
}else {
if(goog.string.startsWith(key, "aria-") || goog.string.startsWith(key, "data-")) {
element.setAttribute(key, val)
}else {
element[key] = val
}
}
}
}
}
})
};
goog.dom.DIRECT_ATTRIBUTE_MAP_ = {"cellpadding":"cellPadding", "cellspacing":"cellSpacing", "colspan":"colSpan", "frameborder":"frameBorder", "height":"height", "maxlength":"maxLength", "role":"role", "rowspan":"rowSpan", "type":"type", "usemap":"useMap", "valign":"vAlign", "width":"width"};
goog.dom.getViewportSize = function(opt_window) {
return goog.dom.getViewportSize_(opt_window || window)
};
goog.dom.getViewportSize_ = function(win) {
var doc = win.document;
var el = goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body;
return new goog.math.Size(el.clientWidth, el.clientHeight)
};
goog.dom.getDocumentHeight = function() {
return goog.dom.getDocumentHeight_(window)
};
goog.dom.getDocumentHeight_ = function(win) {
var doc = win.document;
var height = 0;
if(doc) {
var vh = goog.dom.getViewportSize_(win).height;
var body = doc.body;
var docEl = doc.documentElement;
if(goog.dom.isCss1CompatMode_(doc) && docEl.scrollHeight) {
height = docEl.scrollHeight != vh ? docEl.scrollHeight : docEl.offsetHeight
}else {
var sh = docEl.scrollHeight;
var oh = docEl.offsetHeight;
if(docEl.clientHeight != oh) {
sh = body.scrollHeight;
oh = body.offsetHeight
}
if(sh > vh) {
height = sh > oh ? sh : oh
}else {
height = sh < oh ? sh : oh
}
}
}
return height
};
goog.dom.getPageScroll = function(opt_window) {
var win = opt_window || goog.global || window;
return goog.dom.getDomHelper(win.document).getDocumentScroll()
};
goog.dom.getDocumentScroll = function() {
return goog.dom.getDocumentScroll_(document)
};
goog.dom.getDocumentScroll_ = function(doc) {
var el = goog.dom.getDocumentScrollElement_(doc);
var win = goog.dom.getWindow_(doc);
if(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("10") && win.pageYOffset != el.scrollTop) {
return new goog.math.Coordinate(el.scrollLeft, el.scrollTop)
}
return new goog.math.Coordinate(win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop)
};
goog.dom.getDocumentScrollElement = function() {
return goog.dom.getDocumentScrollElement_(document)
};
goog.dom.getDocumentScrollElement_ = function(doc) {
return!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body
};
goog.dom.getWindow = function(opt_doc) {
return opt_doc ? goog.dom.getWindow_(opt_doc) : window
};
goog.dom.getWindow_ = function(doc) {
return doc.parentWindow || doc.defaultView
};
goog.dom.createDom = function(tagName, opt_attributes, var_args) {
return goog.dom.createDom_(document, arguments)
};
goog.dom.createDom_ = function(doc, args) {
var tagName = args[0];
var attributes = args[1];
if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && attributes && (attributes.name || attributes.type)) {
var tagNameArr = ["\x3c", tagName];
if(attributes.name) {
tagNameArr.push(' name\x3d"', goog.string.htmlEscape(attributes.name), '"')
}
if(attributes.type) {
tagNameArr.push(' type\x3d"', goog.string.htmlEscape(attributes.type), '"');
var clone = {};
goog.object.extend(clone, attributes);
delete clone["type"];
attributes = clone
}
tagNameArr.push("\x3e");
tagName = tagNameArr.join("")
}
var element = doc.createElement(tagName);
if(attributes) {
if(goog.isString(attributes)) {
element.className = attributes
}else {
if(goog.isArray(attributes)) {
goog.dom.classes.add.apply(null, [element].concat(attributes))
}else {
goog.dom.setProperties(element, attributes)
}
}
}
if(args.length > 2) {
goog.dom.append_(doc, element, args, 2)
}
return element
};
goog.dom.append_ = function(doc, parent, args, startIndex) {
function childHandler(child) {
if(child) {
parent.appendChild(goog.isString(child) ? doc.createTextNode(child) : child)
}
}
for(var i = startIndex;i < args.length;i++) {
var arg = args[i];
if(goog.isArrayLike(arg) && !goog.dom.isNodeLike(arg)) {
goog.array.forEach(goog.dom.isNodeList(arg) ? goog.array.toArray(arg) : arg, childHandler)
}else {
childHandler(arg)
}
}
};
goog.dom.$dom = goog.dom.createDom;
goog.dom.createElement = function(name) {
return document.createElement(name)
};
goog.dom.createTextNode = function(content) {
return document.createTextNode(String(content))
};
goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) {
return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp)
};
goog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) {
var rowHtml = ["\x3ctr\x3e"];
for(var i = 0;i < columns;i++) {
rowHtml.push(fillWithNbsp ? "\x3ctd\x3e\x26nbsp;\x3c/td\x3e" : "\x3ctd\x3e\x3c/td\x3e")
}
rowHtml.push("\x3c/tr\x3e");
rowHtml = rowHtml.join("");
var totalHtml = ["\x3ctable\x3e"];
for(i = 0;i < rows;i++) {
totalHtml.push(rowHtml)
}
totalHtml.push("\x3c/table\x3e");
var elem = doc.createElement(goog.dom.TagName.DIV);
elem.innerHTML = totalHtml.join("");
return(elem.removeChild(elem.firstChild))
};
goog.dom.htmlToDocumentFragment = function(htmlString) {
return goog.dom.htmlToDocumentFragment_(document, htmlString)
};
goog.dom.htmlToDocumentFragment_ = function(doc, htmlString) {
var tempDiv = doc.createElement("div");
if(goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) {
tempDiv.innerHTML = "\x3cbr\x3e" + htmlString;
tempDiv.removeChild(tempDiv.firstChild)
}else {
tempDiv.innerHTML = htmlString
}
if(tempDiv.childNodes.length == 1) {
return(tempDiv.removeChild(tempDiv.firstChild))
}else {
var fragment = doc.createDocumentFragment();
while(tempDiv.firstChild) {
fragment.appendChild(tempDiv.firstChild)
}
return fragment
}
};
goog.dom.getCompatMode = function() {
return goog.dom.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
};
goog.dom.isCss1CompatMode = function() {
return goog.dom.isCss1CompatMode_(document)
};
goog.dom.isCss1CompatMode_ = function(doc) {
if(goog.dom.COMPAT_MODE_KNOWN_) {
return goog.dom.ASSUME_STANDARDS_MODE
}
return doc.compatMode == "CSS1Compat"
};
goog.dom.canHaveChildren = function(node) {
if(node.nodeType != goog.dom.NodeType.ELEMENT) {
return false
}
switch(node.tagName) {
case goog.dom.TagName.APPLET:
;
case goog.dom.TagName.AREA:
;
case goog.dom.TagName.BASE:
;
case goog.dom.TagName.BR:
;
case goog.dom.TagName.COL:
;
case goog.dom.TagName.COMMAND:
;
case goog.dom.TagName.EMBED:
;
case goog.dom.TagName.FRAME:
;
case goog.dom.TagName.HR:
;
case goog.dom.TagName.IMG:
;
case goog.dom.TagName.INPUT:
;
case goog.dom.TagName.IFRAME:
;
case goog.dom.TagName.ISINDEX:
;
case goog.dom.TagName.KEYGEN:
;
case goog.dom.TagName.LINK:
;
case goog.dom.TagName.NOFRAMES:
;
case goog.dom.TagName.NOSCRIPT:
;
case goog.dom.TagName.META:
;
case goog.dom.TagName.OBJECT:
;
case goog.dom.TagName.PARAM:
;
case goog.dom.TagName.SCRIPT:
;
case goog.dom.TagName.SOURCE:
;
case goog.dom.TagName.STYLE:
;
case goog.dom.TagName.TRACK:
;
case goog.dom.TagName.WBR:
return false
}
return true
};
goog.dom.appendChild = function(parent, child) {
parent.appendChild(child)
};
goog.dom.append = function(parent, var_args) {
goog.dom.append_(goog.dom.getOwnerDocument(parent), parent, arguments, 1)
};
goog.dom.removeChildren = function(node) {
var child;
while(child = node.firstChild) {
node.removeChild(child)
}
};
goog.dom.insertSiblingBefore = function(newNode, refNode) {
if(refNode.parentNode) {
refNode.parentNode.insertBefore(newNode, refNode)
}
};
goog.dom.insertSiblingAfter = function(newNode, refNode) {
if(refNode.parentNode) {
refNode.parentNode.insertBefore(newNode, refNode.nextSibling)
}
};
goog.dom.insertChildAt = function(parent, child, index) {
parent.insertBefore(child, parent.childNodes[index] || null)
};
goog.dom.removeNode = function(node) {
return node && node.parentNode ? node.parentNode.removeChild(node) : null
};
goog.dom.replaceNode = function(newNode, oldNode) {
var parent = oldNode.parentNode;
if(parent) {
parent.replaceChild(newNode, oldNode)
}
};
goog.dom.flattenElement = function(element) {
var child, parent = element.parentNode;
if(parent && parent.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) {
if(element.removeNode) {
return(element.removeNode(false))
}else {
while(child = element.firstChild) {
parent.insertBefore(child, element)
}
return(goog.dom.removeNode(element))
}
}
};
goog.dom.getChildren = function(element) {
if(goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && element.children != undefined) {
return element.children
}
return goog.array.filter(element.childNodes, function(node) {
return node.nodeType == goog.dom.NodeType.ELEMENT
})
};
goog.dom.getFirstElementChild = function(node) {
if(node.firstElementChild != undefined) {
return(node).firstElementChild
}
return goog.dom.getNextElementNode_(node.firstChild, true)
};
goog.dom.getLastElementChild = function(node) {
if(node.lastElementChild != undefined) {
return(node).lastElementChild
}
return goog.dom.getNextElementNode_(node.lastChild, false)
};
goog.dom.getNextElementSibling = function(node) {
if(node.nextElementSibling != undefined) {
return(node).nextElementSibling
}
return goog.dom.getNextElementNode_(node.nextSibling, true)
};
goog.dom.getPreviousElementSibling = function(node) {
if(node.previousElementSibling != undefined) {
return(node).previousElementSibling
}
return goog.dom.getNextElementNode_(node.previousSibling, false)
};
goog.dom.getNextElementNode_ = function(node, forward) {
while(node && node.nodeType != goog.dom.NodeType.ELEMENT) {
node = forward ? node.nextSibling : node.previousSibling
}
return(node)
};
goog.dom.getNextNode = function(node) {
if(!node) {
return null
}
if(node.firstChild) {
return node.firstChild
}
while(node && !node.nextSibling) {
node = node.parentNode
}
return node ? node.nextSibling : null
};
goog.dom.getPreviousNode = function(node) {
if(!node) {
return null
}
if(!node.previousSibling) {
return node.parentNode
}
node = node.previousSibling;
while(node && node.lastChild) {
node = node.lastChild
}
return node
};
goog.dom.isNodeLike = function(obj) {
return goog.isObject(obj) && obj.nodeType > 0
};
goog.dom.isElement = function(obj) {
return goog.isObject(obj) && obj.nodeType == goog.dom.NodeType.ELEMENT
};
goog.dom.isWindow = function(obj) {
return goog.isObject(obj) && obj["window"] == obj
};
goog.dom.getParentElement = function(element) {
if(goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY) {
var isIe9 = goog.userAgent.IE && goog.userAgent.isVersionOrHigher("9") && !goog.userAgent.isVersionOrHigher("10");
if(!(isIe9 && goog.global["SVGElement"] && element instanceof goog.global["SVGElement"])) {
return element.parentElement
}
}
var parent = element.parentNode;
return goog.dom.isElement(parent) ? (parent) : null
};
goog.dom.contains = function(parent, descendant) {
if(parent.contains && descendant.nodeType == goog.dom.NodeType.ELEMENT) {
return parent == descendant || parent.contains(descendant)
}
if(typeof parent.compareDocumentPosition != "undefined") {
return parent == descendant || Boolean(parent.compareDocumentPosition(descendant) & 16)
}
while(descendant && parent != descendant) {
descendant = descendant.parentNode
}
return descendant == parent
};
goog.dom.compareNodeOrder = function(node1, node2) {
if(node1 == node2) {
return 0
}
if(node1.compareDocumentPosition) {
return node1.compareDocumentPosition(node2) & 2 ? 1 : -1
}
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) {
if(node1.nodeType == goog.dom.NodeType.DOCUMENT) {
return-1
}
if(node2.nodeType == goog.dom.NodeType.DOCUMENT) {
return 1
}
}
if("sourceIndex" in node1 || node1.parentNode && "sourceIndex" in node1.parentNode) {
var isElement1 = node1.nodeType == goog.dom.NodeType.ELEMENT;
var isElement2 = node2.nodeType == goog.dom.NodeType.ELEMENT;
if(isElement1 && isElement2) {
return node1.sourceIndex - node2.sourceIndex
}else {
var parent1 = node1.parentNode;
var parent2 = node2.parentNode;
if(parent1 == parent2) {
return goog.dom.compareSiblingOrder_(node1, node2)
}
if(!isElement1 && goog.dom.contains(parent1, node2)) {
return-1 * goog.dom.compareParentsDescendantNodeIe_(node1, node2)
}
if(!isElement2 && goog.dom.contains(parent2, node1)) {
return goog.dom.compareParentsDescendantNodeIe_(node2, node1)
}
return(isElement1 ? node1.sourceIndex : parent1.sourceIndex) - (isElement2 ? node2.sourceIndex : parent2.sourceIndex)
}
}
var doc = goog.dom.getOwnerDocument(node1);
var range1, range2;
range1 = doc.createRange();
range1.selectNode(node1);
range1.collapse(true);
range2 = doc.createRange();
range2.selectNode(node2);
range2.collapse(true);
return range1.compareBoundaryPoints(goog.global["Range"].START_TO_END, range2)
};
goog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) {
var parent = textNode.parentNode;
if(parent == node) {
return-1
}
var sibling = node;
while(sibling.parentNode != parent) {
sibling = sibling.parentNode
}
return goog.dom.compareSiblingOrder_(sibling, textNode)
};
goog.dom.compareSiblingOrder_ = function(node1, node2) {
var s = node2;
while(s = s.previousSibling) {
if(s == node1) {
return-1
}
}
return 1
};
goog.dom.findCommonAncestor = function(var_args) {
var i, count = arguments.length;
if(!count) {
return null
}else {
if(count == 1) {
return arguments[0]
}
}
var paths = [];
var minLength = Infinity;
for(i = 0;i < count;i++) {
var ancestors = [];
var node = arguments[i];
while(node) {
ancestors.unshift(node);
node = node.parentNode
}
paths.push(ancestors);
minLength = Math.min(minLength, ancestors.length)
}
var output = null;
for(i = 0;i < minLength;i++) {
var first = paths[0][i];
for(var j = 1;j < count;j++) {
if(first != paths[j][i]) {
return output
}
}
output = first
}
return output
};
goog.dom.getOwnerDocument = function(node) {
return(node.nodeType == goog.dom.NodeType.DOCUMENT ? node : node.ownerDocument || node.document)
};
goog.dom.getFrameContentDocument = function(frame) {
var doc = frame.contentDocument || frame.contentWindow.document;
return doc
};
goog.dom.getFrameContentWindow = function(frame) {
return frame.contentWindow || goog.dom.getWindow_(goog.dom.getFrameContentDocument(frame))
};
goog.dom.setTextContent = function(element, text) {
if("textContent" in element) {
element.textContent = text
}else {
if(element.firstChild && element.firstChild.nodeType == goog.dom.NodeType.TEXT) {
while(element.lastChild != element.firstChild) {
element.removeChild(element.lastChild)
}
element.firstChild.data = text
}else {
goog.dom.removeChildren(element);
var doc = goog.dom.getOwnerDocument(element);
element.appendChild(doc.createTextNode(String(text)))
}
}
};
goog.dom.getOuterHtml = function(element) {
if("outerHTML" in element) {
return element.outerHTML
}else {
var doc = goog.dom.getOwnerDocument(element);
var div = doc.createElement("div");
div.appendChild(element.cloneNode(true));
return div.innerHTML
}
};
goog.dom.findNode = function(root, p) {
var rv = [];
var found = goog.dom.findNodes_(root, p, rv, true);
return found ? rv[0] : undefined
};
goog.dom.findNodes = function(root, p) {
var rv = [];
goog.dom.findNodes_(root, p, rv, false);
return rv
};
goog.dom.findNodes_ = function(root, p, rv, findOne) {
if(root != null) {
var child = root.firstChild;
while(child) {
if(p(child)) {
rv.push(child);
if(findOne) {
return true
}
}
if(goog.dom.findNodes_(child, p, rv, findOne)) {
return true
}
child = child.nextSibling
}
}
return false
};
goog.dom.TAGS_TO_IGNORE_ = {"SCRIPT":1, "STYLE":1, "HEAD":1, "IFRAME":1, "OBJECT":1};
goog.dom.PREDEFINED_TAG_VALUES_ = {"IMG":" ", "BR":"\n"};
goog.dom.isFocusableTabIndex = function(element) {
var attrNode = element.getAttributeNode("tabindex");
if(attrNode && attrNode.specified) {
var index = element.tabIndex;
return goog.isNumber(index) && index >= 0 && index < 32768
}
return false
};
goog.dom.setFocusableTabIndex = function(element, enable) {
if(enable) {
element.tabIndex = 0
}else {
element.tabIndex = -1;
element.removeAttribute("tabIndex")
}
};
goog.dom.getTextContent = function(node) {
var textContent;
if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && "innerText" in node) {
textContent = goog.string.canonicalizeNewlines(node.innerText)
}else {
var buf = [];
goog.dom.getTextContent_(node, buf, true);
textContent = buf.join("")
}
textContent = textContent.replace(/ \xAD /g, " ").replace(/\xAD/g, "");
textContent = textContent.replace(/\u200B/g, "");
if(!goog.dom.BrowserFeature.CAN_USE_INNER_TEXT) {
textContent = textContent.replace(/ +/g, " ")
}
if(textContent != " ") {
textContent = textContent.replace(/^\s*/, "")
}
return textContent
};
goog.dom.getRawTextContent = function(node) {
var buf = [];
goog.dom.getTextContent_(node, buf, false);
return buf.join("")
};
goog.dom.getTextContent_ = function(node, buf, normalizeWhitespace) {
if(node.nodeName in goog.dom.TAGS_TO_IGNORE_) {
}else {
if(node.nodeType == goog.dom.NodeType.TEXT) {
if(normalizeWhitespace) {
buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, ""))
}else {
buf.push(node.nodeValue)
}
}else {
if(node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName])
}else {
var child = node.firstChild;
while(child) {
goog.dom.getTextContent_(child, buf, normalizeWhitespace);
child = child.nextSibling
}
}
}
}
};
goog.dom.getNodeTextLength = function(node) {
return goog.dom.getTextContent(node).length
};
goog.dom.getNodeTextOffset = function(node, opt_offsetParent) {
var root = opt_offsetParent || goog.dom.getOwnerDocument(node).body;
var buf = [];
while(node && node != root) {
var cur = node;
while(cur = cur.previousSibling) {
buf.unshift(goog.dom.getTextContent(cur))
}
node = node.parentNode
}
return goog.string.trimLeft(buf.join("")).replace(/ +/g, " ").length
};
goog.dom.getNodeAtOffset = function(parent, offset, opt_result) {
var stack = [parent], pos = 0, cur = null;
while(stack.length > 0 && pos < offset) {
cur = stack.pop();
if(cur.nodeName in goog.dom.TAGS_TO_IGNORE_) {
}else {
if(cur.nodeType == goog.dom.NodeType.TEXT) {
var text = cur.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " ");
pos += text.length
}else {
if(cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
pos += goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length
}else {
for(var i = cur.childNodes.length - 1;i >= 0;i--) {
stack.push(cur.childNodes[i])
}
}
}
}
}
if(goog.isObject(opt_result)) {
opt_result.remainder = cur ? cur.nodeValue.length + offset - pos - 1 : 0;
opt_result.node = cur
}
return cur
};
goog.dom.isNodeList = function(val) {
if(val && typeof val.length == "number") {
if(goog.isObject(val)) {
return typeof val.item == "function" || typeof val.item == "string"
}else {
if(goog.isFunction(val)) {
return typeof val.item == "function"
}
}
}
return false
};
goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) {
if(!opt_tag && !opt_class) {
return null
}
var tagName = opt_tag ? opt_tag.toUpperCase() : null;
return(goog.dom.getAncestor(element, function(node) {
return(!tagName || node.nodeName == tagName) && (!opt_class || goog.dom.classes.has(node, opt_class))
}, true))
};
goog.dom.getAncestorByClass = function(element, className) {
return goog.dom.getAncestorByTagNameAndClass(element, null, className)
};
goog.dom.getAncestor = function(element, matcher, opt_includeNode, opt_maxSearchSteps) {
if(!opt_includeNode) {
element = element.parentNode
}
var ignoreSearchSteps = opt_maxSearchSteps == null;
var steps = 0;
while(element && (ignoreSearchSteps || steps <= opt_maxSearchSteps)) {
if(matcher(element)) {
return element
}
element = element.parentNode;
steps++
}
return null
};
goog.dom.getActiveElement = function(doc) {
try {
return doc && doc.activeElement
}catch(e) {
}
return null
};
goog.dom.DomHelper = function(opt_document) {
this.document_ = opt_document || goog.global.document || document
};
goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper;
goog.dom.DomHelper.prototype.setDocument = function(document) {
this.document_ = document
};
goog.dom.DomHelper.prototype.getDocument = function() {
return this.document_
};
goog.dom.DomHelper.prototype.getElement = function(element) {
if(goog.isString(element)) {
return this.document_.getElementById(element)
}else {
return element
}
};
goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement;
goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) {
return goog.dom.getElementsByTagNameAndClass_(this.document_, opt_tag, opt_class, opt_el)
};
goog.dom.DomHelper.prototype.getElementsByClass = function(className, opt_el) {
var doc = opt_el || this.document_;
return goog.dom.getElementsByClass(className, doc)
};
goog.dom.DomHelper.prototype.getElementByClass = function(className, opt_el) {
var doc = opt_el || this.document_;
return goog.dom.getElementByClass(className, doc)
};
goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;
goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties;
goog.dom.DomHelper.prototype.getViewportSize = function(opt_window) {
return goog.dom.getViewportSize(opt_window || this.getWindow())
};
goog.dom.DomHelper.prototype.getDocumentHeight = function() {
return goog.dom.getDocumentHeight_(this.getWindow())
};
goog.dom.Appendable;
goog.dom.DomHelper.prototype.createDom = function(tagName, opt_attributes, var_args) {
return goog.dom.createDom_(this.document_, arguments)
};
goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom;
goog.dom.DomHelper.prototype.createElement = function(name) {
return this.document_.createElement(name)
};
goog.dom.DomHelper.prototype.createTextNode = function(content) {
return this.document_.createTextNode(String(content))
};
goog.dom.DomHelper.prototype.createTable = function(rows, columns, opt_fillWithNbsp) {
return goog.dom.createTable_(this.document_, rows, columns, !!opt_fillWithNbsp)
};
goog.dom.DomHelper.prototype.htmlToDocumentFragment = function(htmlString) {
return goog.dom.htmlToDocumentFragment_(this.document_, htmlString)
};
goog.dom.DomHelper.prototype.getCompatMode = function() {
return this.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
};
goog.dom.DomHelper.prototype.isCss1CompatMode = function() {
return goog.dom.isCss1CompatMode_(this.document_)
};
goog.dom.DomHelper.prototype.getWindow = function() {
return goog.dom.getWindow_(this.document_)
};
goog.dom.DomHelper.prototype.getDocumentScrollElement = function() {
return goog.dom.getDocumentScrollElement_(this.document_)
};
goog.dom.DomHelper.prototype.getDocumentScroll = function() {
return goog.dom.getDocumentScroll_(this.document_)
};
goog.dom.DomHelper.prototype.getActiveElement = function(opt_doc) {
return goog.dom.getActiveElement(opt_doc || this.document_)
};
goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild;
goog.dom.DomHelper.prototype.append = goog.dom.append;
goog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren;
goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren;
goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore;
goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter;
goog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt;
goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode;
goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode;
goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement;
goog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren;
goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild;
goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild;
goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling;
goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling;
goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode;
goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode;
goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike;
goog.dom.DomHelper.prototype.isElement = goog.dom.isElement;
goog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow;
goog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement;
goog.dom.DomHelper.prototype.contains = goog.dom.contains;
goog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder;
goog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor;
goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument;
goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument;
goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow;
goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent;
goog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml;
goog.dom.DomHelper.prototype.findNode = goog.dom.findNode;
goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;
goog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex;
goog.dom.DomHelper.prototype.setFocusableTabIndex = goog.dom.setFocusableTabIndex;
goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent;
goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength;
goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset;
goog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset;
goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList;
goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass;
goog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass;
goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor;
goog.provide("goog.dom.vendor");
goog.require("goog.userAgent");
goog.dom.vendor.getVendorJsPrefix = function() {
if(goog.userAgent.WEBKIT) {
return"Webkit"
}else {
if(goog.userAgent.GECKO) {
return"Moz"
}else {
if(goog.userAgent.IE) {
return"ms"
}else {
if(goog.userAgent.OPERA) {
return"O"
}
}
}
}
return null
};
goog.dom.vendor.getVendorPrefix = function() {
if(goog.userAgent.WEBKIT) {
return"-webkit"
}else {
if(goog.userAgent.GECKO) {
return"-moz"
}else {
if(goog.userAgent.IE) {
return"-ms"
}else {
if(goog.userAgent.OPERA) {
return"-o"
}
}
}
}
return null
};
goog.provide("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.math.Box = function(top, right, bottom, left) {
this.top = top;
this.right = right;
this.bottom = bottom;
this.left = left
};
goog.math.Box.boundingBox = function(var_args) {
var box = new goog.math.Box(arguments[0].y, arguments[0].x, arguments[0].y, arguments[0].x);
for(var i = 1;i < arguments.length;i++) {
var coord = arguments[i];
box.top = Math.min(box.top, coord.y);
box.right = Math.max(box.right, coord.x);
box.bottom = Math.max(box.bottom, coord.y);
box.left = Math.min(box.left, coord.x)
}
return box
};
goog.math.Box.prototype.clone = function() {
return new goog.math.Box(this.top, this.right, this.bottom, this.left)
};
if(goog.DEBUG) {
goog.math.Box.prototype.toString = function() {
return"(" + this.top + "t, " + this.right + "r, " + this.bottom + "b, " + this.left + "l)"
}
}
goog.math.Box.prototype.contains = function(other) {
return goog.math.Box.contains(this, other)
};
goog.math.Box.prototype.expand = function(top, opt_right, opt_bottom, opt_left) {
if(goog.isObject(top)) {
this.top -= top.top;
this.right += top.right;
this.bottom += top.bottom;
this.left -= top.left
}else {
this.top -= top;
this.right += opt_right;
this.bottom += opt_bottom;
this.left -= opt_left
}
return this
};
goog.math.Box.prototype.expandToInclude = function(box) {
this.left = Math.min(this.left, box.left);
this.top = Math.min(this.top, box.top);
this.right = Math.max(this.right, box.right);
this.bottom = Math.max(this.bottom, box.bottom)
};
goog.math.Box.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.top == b.top && a.right == b.right && a.bottom == b.bottom && a.left == b.left
};
goog.math.Box.contains = function(box, other) {
if(!box || !other) {
return false
}
if(other instanceof goog.math.Box) {
return other.left >= box.left && other.right <= box.right && other.top >= box.top && other.bottom <= box.bottom
}
return other.x >= box.left && other.x <= box.right && other.y >= box.top && other.y <= box.bottom
};
goog.math.Box.relativePositionX = function(box, coord) {
if(coord.x < box.left) {
return coord.x - box.left
}else {
if(coord.x > box.right) {
return coord.x - box.right
}
}
return 0
};
goog.math.Box.relativePositionY = function(box, coord) {
if(coord.y < box.top) {
return coord.y - box.top
}else {
if(coord.y > box.bottom) {
return coord.y - box.bottom
}
}
return 0
};
goog.math.Box.distance = function(box, coord) {
var x = goog.math.Box.relativePositionX(box, coord);
var y = goog.math.Box.relativePositionY(box, coord);
return Math.sqrt(x * x + y * y)
};
goog.math.Box.intersects = function(a, b) {
return a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom
};
goog.math.Box.intersectsWithPadding = function(a, b, padding) {
return a.left <= b.right + padding && b.left <= a.right + padding && a.top <= b.bottom + padding && b.top <= a.bottom + padding
};
goog.math.Box.prototype.ceil = function() {
this.top = Math.ceil(this.top);
this.right = Math.ceil(this.right);
this.bottom = Math.ceil(this.bottom);
this.left = Math.ceil(this.left);
return this
};
goog.math.Box.prototype.floor = function() {
this.top = Math.floor(this.top);
this.right = Math.floor(this.right);
this.bottom = Math.floor(this.bottom);
this.left = Math.floor(this.left);
return this
};
goog.math.Box.prototype.round = function() {
this.top = Math.round(this.top);
this.right = Math.round(this.right);
this.bottom = Math.round(this.bottom);
this.left = Math.round(this.left);
return this
};
goog.math.Box.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.left += tx.x;
this.right += tx.x;
this.top += tx.y;
this.bottom += tx.y
}else {
this.left += tx;
this.right += tx;
if(goog.isNumber(opt_ty)) {
this.top += opt_ty;
this.bottom += opt_ty
}
}
return this
};
goog.math.Box.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.left *= sx;
this.right *= sx;
this.top *= sy;
this.bottom *= sy;
return this
};
goog.provide("goog.math.Rect");
goog.require("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Size");
goog.math.Rect = function(x, y, w, h) {
this.left = x;
this.top = y;
this.width = w;
this.height = h
};
goog.math.Rect.prototype.clone = function() {
return new goog.math.Rect(this.left, this.top, this.width, this.height)
};
goog.math.Rect.prototype.toBox = function() {
var right = this.left + this.width;
var bottom = this.top + this.height;
return new goog.math.Box(this.top, right, bottom, this.left)
};
goog.math.Rect.createFromBox = function(box) {
return new goog.math.Rect(box.left, box.top, box.right - box.left, box.bottom - box.top)
};
if(goog.DEBUG) {
goog.math.Rect.prototype.toString = function() {
return"(" + this.left + ", " + this.top + " - " + this.width + "w x " + this.height + "h)"
}
}
goog.math.Rect.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.left == b.left && a.width == b.width && a.top == b.top && a.height == b.height
};
goog.math.Rect.prototype.intersection = function(rect) {
var x0 = Math.max(this.left, rect.left);
var x1 = Math.min(this.left + this.width, rect.left + rect.width);
if(x0 <= x1) {
var y0 = Math.max(this.top, rect.top);
var y1 = Math.min(this.top + this.height, rect.top + rect.height);
if(y0 <= y1) {
this.left = x0;
this.top = y0;
this.width = x1 - x0;
this.height = y1 - y0;
return true
}
}
return false
};
goog.math.Rect.intersection = function(a, b) {
var x0 = Math.max(a.left, b.left);
var x1 = Math.min(a.left + a.width, b.left + b.width);
if(x0 <= x1) {
var y0 = Math.max(a.top, b.top);
var y1 = Math.min(a.top + a.height, b.top + b.height);
if(y0 <= y1) {
return new goog.math.Rect(x0, y0, x1 - x0, y1 - y0)
}
}
return null
};
goog.math.Rect.intersects = function(a, b) {
return a.left <= b.left + b.width && b.left <= a.left + a.width && a.top <= b.top + b.height && b.top <= a.top + a.height
};
goog.math.Rect.prototype.intersects = function(rect) {
return goog.math.Rect.intersects(this, rect)
};
goog.math.Rect.difference = function(a, b) {
var intersection = goog.math.Rect.intersection(a, b);
if(!intersection || !intersection.height || !intersection.width) {
return[a.clone()]
}
var result = [];
var top = a.top;
var height = a.height;
var ar = a.left + a.width;
var ab = a.top + a.height;
var br = b.left + b.width;
var bb = b.top + b.height;
if(b.top > a.top) {
result.push(new goog.math.Rect(a.left, a.top, a.width, b.top - a.top));
top = b.top;
height -= b.top - a.top
}
if(bb < ab) {
result.push(new goog.math.Rect(a.left, bb, a.width, ab - bb));
height = bb - top
}
if(b.left > a.left) {
result.push(new goog.math.Rect(a.left, top, b.left - a.left, height))
}
if(br < ar) {
result.push(new goog.math.Rect(br, top, ar - br, height))
}
return result
};
goog.math.Rect.prototype.difference = function(rect) {
return goog.math.Rect.difference(this, rect)
};
goog.math.Rect.prototype.boundingRect = function(rect) {
var right = Math.max(this.left + this.width, rect.left + rect.width);
var bottom = Math.max(this.top + this.height, rect.top + rect.height);
this.left = Math.min(this.left, rect.left);
this.top = Math.min(this.top, rect.top);
this.width = right - this.left;
this.height = bottom - this.top
};
goog.math.Rect.boundingRect = function(a, b) {
if(!a || !b) {
return null
}
var clone = a.clone();
clone.boundingRect(b);
return clone
};
goog.math.Rect.prototype.contains = function(another) {
if(another instanceof goog.math.Rect) {
return this.left <= another.left && this.left + this.width >= another.left + another.width && this.top <= another.top && this.top + this.height >= another.top + another.height
}else {
return another.x >= this.left && another.x <= this.left + this.width && another.y >= this.top && another.y <= this.top + this.height
}
};
goog.math.Rect.prototype.squaredDistance = function(point) {
var dx = point.x < this.left ? this.left - point.x : Math.max(point.x - (this.left + this.width), 0);
var dy = point.y < this.top ? this.top - point.y : Math.max(point.y - (this.top + this.height), 0);
return dx * dx + dy * dy
};
goog.math.Rect.prototype.distance = function(point) {
return Math.sqrt(this.squaredDistance(point))
};
goog.math.Rect.prototype.getSize = function() {
return new goog.math.Size(this.width, this.height)
};
goog.math.Rect.prototype.getTopLeft = function() {
return new goog.math.Coordinate(this.left, this.top)
};
goog.math.Rect.prototype.getCenter = function() {
return new goog.math.Coordinate(this.left + this.width / 2, this.top + this.height / 2)
};
goog.math.Rect.prototype.getBottomRight = function() {
return new goog.math.Coordinate(this.left + this.width, this.top + this.height)
};
goog.math.Rect.prototype.ceil = function() {
this.left = Math.ceil(this.left);
this.top = Math.ceil(this.top);
this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this
};
goog.math.Rect.prototype.floor = function() {
this.left = Math.floor(this.left);
this.top = Math.floor(this.top);
this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this
};
goog.math.Rect.prototype.round = function() {
this.left = Math.round(this.left);
this.top = Math.round(this.top);
this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this
};
goog.math.Rect.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.left += tx.x;
this.top += tx.y
}else {
this.left += tx;
if(goog.isNumber(opt_ty)) {
this.top += opt_ty
}
}
return this
};
goog.math.Rect.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.left *= sx;
this.width *= sx;
this.top *= sy;
this.height *= sy;
return this
};
goog.provide("goog.style");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.NodeType");
goog.require("goog.dom.vendor");
goog.require("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Rect");
goog.require("goog.math.Size");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.define("goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS", false);
goog.style.setStyle = function(element, style, opt_value) {
if(goog.isString(style)) {
goog.style.setStyle_(element, opt_value, style)
}else {
goog.object.forEach(style, goog.partial(goog.style.setStyle_, element))
}
};
goog.style.setStyle_ = function(element, value, style) {
var propertyName = goog.style.getVendorJsStyleName_(element, style);
if(propertyName) {
element.style[propertyName] = value
}
};
goog.style.getVendorJsStyleName_ = function(element, style) {
var camelStyle = goog.string.toCamelCase(style);
if(element.style[camelStyle] === undefined) {
var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style);
if(element.style[prefixedStyle] !== undefined) {
return prefixedStyle
}
}
return camelStyle
};
goog.style.getVendorStyleName_ = function(element, style) {
var camelStyle = goog.string.toCamelCase(style);
if(element.style[camelStyle] === undefined) {
var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style);
if(element.style[prefixedStyle] !== undefined) {
return goog.dom.vendor.getVendorPrefix() + "-" + style
}
}
return style
};
goog.style.getStyle = function(element, property) {
var styleValue = element.style[goog.string.toCamelCase(property)];
if(typeof styleValue !== "undefined") {
return styleValue
}
return element.style[goog.style.getVendorJsStyleName_(element, property)] || ""
};
goog.style.getComputedStyle = function(element, property) {
var doc = goog.dom.getOwnerDocument(element);
if(doc.defaultView && doc.defaultView.getComputedStyle) {
var styles = doc.defaultView.getComputedStyle(element, null);
if(styles) {
return styles[property] || styles.getPropertyValue(property) || ""
}
}
return""
};
goog.style.getCascadedStyle = function(element, style) {
return element.currentStyle ? element.currentStyle[style] : null
};
goog.style.getStyle_ = function(element, style) {
return goog.style.getComputedStyle(element, style) || goog.style.getCascadedStyle(element, style) || element.style && element.style[style]
};
goog.style.getComputedPosition = function(element) {
return goog.style.getStyle_(element, "position")
};
goog.style.getBackgroundColor = function(element) {
return goog.style.getStyle_(element, "backgroundColor")
};
goog.style.getComputedOverflowX = function(element) {
return goog.style.getStyle_(element, "overflowX")
};
goog.style.getComputedOverflowY = function(element) {
return goog.style.getStyle_(element, "overflowY")
};
goog.style.getComputedZIndex = function(element) {
return goog.style.getStyle_(element, "zIndex")
};
goog.style.getComputedTextAlign = function(element) {
return goog.style.getStyle_(element, "textAlign")
};
goog.style.getComputedCursor = function(element) {
return goog.style.getStyle_(element, "cursor")
};
goog.style.setPosition = function(el, arg1, opt_arg2) {
var x, y;
var buggyGeckoSubPixelPos = goog.userAgent.GECKO && (goog.userAgent.MAC || goog.userAgent.X11) && goog.userAgent.isVersionOrHigher("1.9");
if(arg1 instanceof goog.math.Coordinate) {
x = arg1.x;
y = arg1.y
}else {
x = arg1;
y = opt_arg2
}
el.style.left = goog.style.getPixelStyleValue_((x), buggyGeckoSubPixelPos);
el.style.top = goog.style.getPixelStyleValue_((y), buggyGeckoSubPixelPos)
};
goog.style.getPosition = function(element) {
return new goog.math.Coordinate(element.offsetLeft, element.offsetTop)
};
goog.style.getClientViewportElement = function(opt_node) {
var doc;
if(opt_node) {
doc = goog.dom.getOwnerDocument(opt_node)
}else {
doc = goog.dom.getDocument()
}
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9) && !goog.dom.getDomHelper(doc).isCss1CompatMode()) {
return doc.body
}
return doc.documentElement
};
goog.style.getViewportPageOffset = function(doc) {
var body = doc.body;
var documentElement = doc.documentElement;
var scrollLeft = body.scrollLeft || documentElement.scrollLeft;
var scrollTop = body.scrollTop || documentElement.scrollTop;
return new goog.math.Coordinate(scrollLeft, scrollTop)
};
goog.style.getBoundingClientRect_ = function(el) {
var rect;
try {
rect = el.getBoundingClientRect()
}catch(e) {
return{"left":0, "top":0, "right":0, "bottom":0}
}
if(goog.userAgent.IE) {
var doc = el.ownerDocument;
rect.left -= doc.documentElement.clientLeft + doc.body.clientLeft;
rect.top -= doc.documentElement.clientTop + doc.body.clientTop
}
return(rect)
};
goog.style.getOffsetParent = function(element) {
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(8)) {
return element.offsetParent
}
var doc = goog.dom.getOwnerDocument(element);
var positionStyle = goog.style.getStyle_(element, "position");
var skipStatic = positionStyle == "fixed" || positionStyle == "absolute";
for(var parent = element.parentNode;parent && parent != doc;parent = parent.parentNode) {
positionStyle = goog.style.getStyle_((parent), "position");
skipStatic = skipStatic && positionStyle == "static" && parent != doc.documentElement && parent != doc.body;
if(!skipStatic && (parent.scrollWidth > parent.clientWidth || parent.scrollHeight > parent.clientHeight || positionStyle == "fixed" || positionStyle == "absolute" || positionStyle == "relative")) {
return(parent)
}
}
return null
};
goog.style.getVisibleRectForElement = function(element) {
var visibleRect = new goog.math.Box(0, Infinity, Infinity, 0);
var dom = goog.dom.getDomHelper(element);
var body = dom.getDocument().body;
var documentElement = dom.getDocument().documentElement;
var scrollEl = dom.getDocumentScrollElement();
for(var el = element;el = goog.style.getOffsetParent(el);) {
if((!goog.userAgent.IE || el.clientWidth != 0) && (!goog.userAgent.WEBKIT || el.clientHeight != 0 || el != body) && el != body && el != documentElement && goog.style.getStyle_(el, "overflow") != "visible") {
var pos = goog.style.getPageOffset(el);
var client = goog.style.getClientLeftTop(el);
pos.x += client.x;
pos.y += client.y;
visibleRect.top = Math.max(visibleRect.top, pos.y);
visibleRect.right = Math.min(visibleRect.right, pos.x + el.clientWidth);
visibleRect.bottom = Math.min(visibleRect.bottom, pos.y + el.clientHeight);
visibleRect.left = Math.max(visibleRect.left, pos.x)
}
}
var scrollX = scrollEl.scrollLeft, scrollY = scrollEl.scrollTop;
visibleRect.left = Math.max(visibleRect.left, scrollX);
visibleRect.top = Math.max(visibleRect.top, scrollY);
var winSize = dom.getViewportSize();
visibleRect.right = Math.min(visibleRect.right, scrollX + winSize.width);
visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + winSize.height);
return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null
};
goog.style.getContainerOffsetToScrollInto = function(element, container, opt_center) {
var elementPos = goog.style.getPageOffset(element);
var containerPos = goog.style.getPageOffset(container);
var containerBorder = goog.style.getBorderBox(container);
var relX = elementPos.x - containerPos.x - containerBorder.left;
var relY = elementPos.y - containerPos.y - containerBorder.top;
var spaceX = container.clientWidth - element.offsetWidth;
var spaceY = container.clientHeight - element.offsetHeight;
var scrollLeft = container.scrollLeft;
var scrollTop = container.scrollTop;
if(opt_center) {
scrollLeft += relX - spaceX / 2;
scrollTop += relY - spaceY / 2
}else {
scrollLeft += Math.min(relX, Math.max(relX - spaceX, 0));
scrollTop += Math.min(relY, Math.max(relY - spaceY, 0))
}
return new goog.math.Coordinate(scrollLeft, scrollTop)
};
goog.style.scrollIntoContainerView = function(element, container, opt_center) {
var offset = goog.style.getContainerOffsetToScrollInto(element, container, opt_center);
container.scrollLeft = offset.x;
container.scrollTop = offset.y
};
goog.style.getClientLeftTop = function(el) {
if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("1.9")) {
var left = parseFloat(goog.style.getComputedStyle(el, "borderLeftWidth"));
if(goog.style.isRightToLeft(el)) {
var scrollbarWidth = el.offsetWidth - el.clientWidth - left - parseFloat(goog.style.getComputedStyle(el, "borderRightWidth"));
left += scrollbarWidth
}
return new goog.math.Coordinate(left, parseFloat(goog.style.getComputedStyle(el, "borderTopWidth")))
}
return new goog.math.Coordinate(el.clientLeft, el.clientTop)
};
goog.style.getPageOffset = function(el) {
var box, doc = goog.dom.getOwnerDocument(el);
var positionStyle = goog.style.getStyle_(el, "position");
goog.asserts.assertObject(el, "Parameter is required");
var BUGGY_GECKO_BOX_OBJECT = !goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS && goog.userAgent.GECKO && doc.getBoxObjectFor && !el.getBoundingClientRect && positionStyle == "absolute" && (box = doc.getBoxObjectFor(el)) && (box.screenX < 0 || box.screenY < 0);
var pos = new goog.math.Coordinate(0, 0);
var viewportElement = goog.style.getClientViewportElement(doc);
if(el == viewportElement) {
return pos
}
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) {
box = goog.style.getBoundingClientRect_(el);
var scrollCoord = goog.dom.getDomHelper(doc).getDocumentScroll();
pos.x = box.left + scrollCoord.x;
pos.y = box.top + scrollCoord.y
}else {
if(doc.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT) {
box = doc.getBoxObjectFor(el);
var vpBox = doc.getBoxObjectFor(viewportElement);
pos.x = box.screenX - vpBox.screenX;
pos.y = box.screenY - vpBox.screenY
}else {
var parent = el;
do {
pos.x += parent.offsetLeft;
pos.y += parent.offsetTop;
if(parent != el) {
pos.x += parent.clientLeft || 0;
pos.y += parent.clientTop || 0
}
if(goog.userAgent.WEBKIT && goog.style.getComputedPosition(parent) == "fixed") {
pos.x += doc.body.scrollLeft;
pos.y += doc.body.scrollTop;
break
}
parent = parent.offsetParent
}while(parent && parent != el);
if(goog.userAgent.OPERA || goog.userAgent.WEBKIT && positionStyle == "absolute") {
pos.y -= doc.body.offsetTop
}
for(parent = el;(parent = goog.style.getOffsetParent(parent)) && parent != doc.body && parent != viewportElement;) {
pos.x -= parent.scrollLeft;
if(!goog.userAgent.OPERA || parent.tagName != "TR") {
pos.y -= parent.scrollTop
}
}
}
}
return pos
};
goog.style.getPageOffsetLeft = function(el) {
return goog.style.getPageOffset(el).x
};
goog.style.getPageOffsetTop = function(el) {
return goog.style.getPageOffset(el).y
};
goog.style.getFramedPageOffset = function(el, relativeWin) {
var position = new goog.math.Coordinate(0, 0);
var currentWin = goog.dom.getWindow(goog.dom.getOwnerDocument(el));
var currentEl = el;
do {
var offset = currentWin == relativeWin ? goog.style.getPageOffset(currentEl) : goog.style.getClientPositionForElement_(goog.asserts.assert(currentEl));
position.x += offset.x;
position.y += offset.y
}while(currentWin && currentWin != relativeWin && (currentEl = currentWin.frameElement) && (currentWin = currentWin.parent));
return position
};
goog.style.translateRectForAnotherFrame = function(rect, origBase, newBase) {
if(origBase.getDocument() != newBase.getDocument()) {
var body = origBase.getDocument().body;
var pos = goog.style.getFramedPageOffset(body, newBase.getWindow());
pos = goog.math.Coordinate.difference(pos, goog.style.getPageOffset(body));
if(goog.userAgent.IE && !origBase.isCss1CompatMode()) {
pos = goog.math.Coordinate.difference(pos, origBase.getDocumentScroll())
}
rect.left += pos.x;
rect.top += pos.y
}
};
goog.style.getRelativePosition = function(a, b) {
var ap = goog.style.getClientPosition(a);
var bp = goog.style.getClientPosition(b);
return new goog.math.Coordinate(ap.x - bp.x, ap.y - bp.y)
};
goog.style.getClientPositionForElement_ = function(el) {
var pos;
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) {
var box = goog.style.getBoundingClientRect_(el);
pos = new goog.math.Coordinate(box.left, box.top)
}else {
var scrollCoord = goog.dom.getDomHelper(el).getDocumentScroll();
var pageCoord = goog.style.getPageOffset(el);
pos = new goog.math.Coordinate(pageCoord.x - scrollCoord.x, pageCoord.y - scrollCoord.y)
}
if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher(12)) {
return goog.math.Coordinate.sum(pos, goog.style.getCssTranslation(el))
}else {
return pos
}
};
goog.style.getClientPosition = function(el) {
goog.asserts.assert(el);
if(el.nodeType == goog.dom.NodeType.ELEMENT) {
return goog.style.getClientPositionForElement_((el))
}else {
var isAbstractedEvent = goog.isFunction(el.getBrowserEvent);
var targetEvent = el;
if(el.targetTouches) {
targetEvent = el.targetTouches[0]
}else {
if(isAbstractedEvent && el.getBrowserEvent().targetTouches) {
targetEvent = el.getBrowserEvent().targetTouches[0]
}
}
return new goog.math.Coordinate(targetEvent.clientX, targetEvent.clientY)
}
};
goog.style.setPageOffset = function(el, x, opt_y) {
var cur = goog.style.getPageOffset(el);
if(x instanceof goog.math.Coordinate) {
opt_y = x.y;
x = x.x
}
var dx = x - cur.x;
var dy = opt_y - cur.y;
goog.style.setPosition(el, el.offsetLeft + dx, el.offsetTop + dy)
};
goog.style.setSize = function(element, w, opt_h) {
var h;
if(w instanceof goog.math.Size) {
h = w.height;
w = w.width
}else {
if(opt_h == undefined) {
throw Error("missing height argument");
}
h = opt_h
}
goog.style.setWidth(element, (w));
goog.style.setHeight(element, (h))
};
goog.style.getPixelStyleValue_ = function(value, round) {
if(typeof value == "number") {
value = (round ? Math.round(value) : value) + "px"
}
return value
};
goog.style.setHeight = function(element, height) {
element.style.height = goog.style.getPixelStyleValue_(height, true)
};
goog.style.setWidth = function(element, width) {
element.style.width = goog.style.getPixelStyleValue_(width, true)
};
goog.style.getSize = function(element) {
return goog.style.evaluateWithTemporaryDisplay_(goog.style.getSizeWithDisplay_, (element))
};
goog.style.evaluateWithTemporaryDisplay_ = function(fn, element) {
if(goog.style.getStyle_(element, "display") != "none") {
return fn(element)
}
var style = element.style;
var originalDisplay = style.display;
var originalVisibility = style.visibility;
var originalPosition = style.position;
style.visibility = "hidden";
style.position = "absolute";
style.display = "inline";
var retVal = fn(element);
style.display = originalDisplay;
style.position = originalPosition;
style.visibility = originalVisibility;
return retVal
};
goog.style.getSizeWithDisplay_ = function(element) {
var offsetWidth = element.offsetWidth;
var offsetHeight = element.offsetHeight;
var webkitOffsetsZero = goog.userAgent.WEBKIT && !offsetWidth && !offsetHeight;
if((!goog.isDef(offsetWidth) || webkitOffsetsZero) && element.getBoundingClientRect) {
var clientRect = goog.style.getBoundingClientRect_(element);
return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top)
}
return new goog.math.Size(offsetWidth, offsetHeight)
};
goog.style.getTransformedSize = function(element) {
if(!element.getBoundingClientRect) {
return null
}
var clientRect = goog.style.evaluateWithTemporaryDisplay_(goog.style.getBoundingClientRect_, element);
return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top)
};
goog.style.getBounds = function(element) {
var o = goog.style.getPageOffset(element);
var s = goog.style.getSize(element);
return new goog.math.Rect(o.x, o.y, s.width, s.height)
};
goog.style.toCamelCase = function(selector) {
return goog.string.toCamelCase(String(selector))
};
goog.style.toSelectorCase = function(selector) {
return goog.string.toSelectorCase(selector)
};
goog.style.getOpacity = function(el) {
var style = el.style;
var result = "";
if("opacity" in style) {
result = style.opacity
}else {
if("MozOpacity" in style) {
result = style.MozOpacity
}else {
if("filter" in style) {
var match = style.filter.match(/alpha\(opacity=([\d.]+)\)/);
if(match) {
result = String(match[1] / 100)
}
}
}
}
return result == "" ? result : Number(result)
};
goog.style.setOpacity = function(el, alpha) {
var style = el.style;
if("opacity" in style) {
style.opacity = alpha
}else {
if("MozOpacity" in style) {
style.MozOpacity = alpha
}else {
if("filter" in style) {
if(alpha === "") {
style.filter = ""
}else {
style.filter = "alpha(opacity\x3d" + alpha * 100 + ")"
}
}
}
}
};
goog.style.setTransparentBackgroundImage = function(el, src) {
var style = el.style;
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + 'src\x3d"' + src + '", sizingMethod\x3d"crop")'
}else {
style.backgroundImage = "url(" + src + ")";
style.backgroundPosition = "top left";
style.backgroundRepeat = "no-repeat"
}
};
goog.style.clearTransparentBackgroundImage = function(el) {
var style = el.style;
if("filter" in style) {
style.filter = ""
}else {
style.backgroundImage = "none"
}
};
goog.style.showElement = function(el, display) {
goog.style.setElementShown(el, display)
};
goog.style.setElementShown = function(el, isShown) {
el.style.display = isShown ? "" : "none"
};
goog.style.isElementShown = function(el) {
return el.style.display != "none"
};
goog.style.installStyles = function(stylesString, opt_node) {
var dh = goog.dom.getDomHelper(opt_node);
var styleSheet = null;
if(goog.userAgent.IE) {
styleSheet = dh.getDocument().createStyleSheet();
goog.style.setStyles(styleSheet, stylesString)
}else {
var head = dh.getElementsByTagNameAndClass("head")[0];
if(!head) {
var body = dh.getElementsByTagNameAndClass("body")[0];
head = dh.createDom("head");
body.parentNode.insertBefore(head, body)
}
styleSheet = dh.createDom("style");
goog.style.setStyles(styleSheet, stylesString);
dh.appendChild(head, styleSheet)
}
return styleSheet
};
goog.style.uninstallStyles = function(styleSheet) {
var node = styleSheet.ownerNode || styleSheet.owningElement || (styleSheet);
goog.dom.removeNode(node)
};
goog.style.setStyles = function(element, stylesString) {
if(goog.userAgent.IE) {
element.cssText = stylesString
}else {
element.innerHTML = stylesString
}
};
goog.style.setPreWrap = function(el) {
var style = el.style;
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.whiteSpace = "pre";
style.wordWrap = "break-word"
}else {
if(goog.userAgent.GECKO) {
style.whiteSpace = "-moz-pre-wrap"
}else {
style.whiteSpace = "pre-wrap"
}
}
};
goog.style.setInlineBlock = function(el) {
var style = el.style;
style.position = "relative";
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.zoom = "1";
style.display = "inline"
}else {
if(goog.userAgent.GECKO) {
style.display = goog.userAgent.isVersionOrHigher("1.9a") ? "inline-block" : "-moz-inline-box"
}else {
style.display = "inline-block"
}
}
};
goog.style.isRightToLeft = function(el) {
return"rtl" == goog.style.getStyle_(el, "direction")
};
goog.style.unselectableStyle_ = goog.userAgent.GECKO ? "MozUserSelect" : goog.userAgent.WEBKIT ? "WebkitUserSelect" : null;
goog.style.isUnselectable = function(el) {
if(goog.style.unselectableStyle_) {
return el.style[goog.style.unselectableStyle_].toLowerCase() == "none"
}else {
if(goog.userAgent.IE || goog.userAgent.OPERA) {
return el.getAttribute("unselectable") == "on"
}
}
return false
};
goog.style.setUnselectable = function(el, unselectable, opt_noRecurse) {
var descendants = !opt_noRecurse ? el.getElementsByTagName("*") : null;
var name = goog.style.unselectableStyle_;
if(name) {
var value = unselectable ? "none" : "";
el.style[name] = value;
if(descendants) {
for(var i = 0, descendant;descendant = descendants[i];i++) {
descendant.style[name] = value
}
}
}else {
if(goog.userAgent.IE || goog.userAgent.OPERA) {
var value = unselectable ? "on" : "";
el.setAttribute("unselectable", value);
if(descendants) {
for(var i = 0, descendant;descendant = descendants[i];i++) {
descendant.setAttribute("unselectable", value)
}
}
}
}
};
goog.style.getBorderBoxSize = function(element) {
return new goog.math.Size(element.offsetWidth, element.offsetHeight)
};
goog.style.setBorderBoxSize = function(element, size) {
var doc = goog.dom.getOwnerDocument(element);
var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode();
if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) {
var style = element.style;
if(isCss1CompatMode) {
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
style.pixelWidth = size.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right;
style.pixelHeight = size.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom
}else {
style.pixelWidth = size.width;
style.pixelHeight = size.height
}
}else {
goog.style.setBoxSizingSize_(element, size, "border-box")
}
};
goog.style.getContentBoxSize = function(element) {
var doc = goog.dom.getOwnerDocument(element);
var ieCurrentStyle = goog.userAgent.IE && element.currentStyle;
if(ieCurrentStyle && goog.dom.getDomHelper(doc).isCss1CompatMode() && ieCurrentStyle.width != "auto" && ieCurrentStyle.height != "auto" && !ieCurrentStyle.boxSizing) {
var width = goog.style.getIePixelValue_(element, ieCurrentStyle.width, "width", "pixelWidth");
var height = goog.style.getIePixelValue_(element, ieCurrentStyle.height, "height", "pixelHeight");
return new goog.math.Size(width, height)
}else {
var borderBoxSize = goog.style.getBorderBoxSize(element);
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
return new goog.math.Size(borderBoxSize.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right, borderBoxSize.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom)
}
};
goog.style.setContentBoxSize = function(element, size) {
var doc = goog.dom.getOwnerDocument(element);
var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode();
if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) {
var style = element.style;
if(isCss1CompatMode) {
style.pixelWidth = size.width;
style.pixelHeight = size.height
}else {
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
style.pixelWidth = size.width + borderBox.left + paddingBox.left + paddingBox.right + borderBox.right;
style.pixelHeight = size.height + borderBox.top + paddingBox.top + paddingBox.bottom + borderBox.bottom
}
}else {
goog.style.setBoxSizingSize_(element, size, "content-box")
}
};
goog.style.setBoxSizingSize_ = function(element, size, boxSizing) {
var style = element.style;
if(goog.userAgent.GECKO) {
style.MozBoxSizing = boxSizing
}else {
if(goog.userAgent.WEBKIT) {
style.WebkitBoxSizing = boxSizing
}else {
style.boxSizing = boxSizing
}
}
style.width = Math.max(size.width, 0) + "px";
style.height = Math.max(size.height, 0) + "px"
};
goog.style.getIePixelValue_ = function(element, value, name, pixelName) {
if(/^\d+px?$/.test(value)) {
return parseInt(value, 10)
}else {
var oldStyleValue = element.style[name];
var oldRuntimeValue = element.runtimeStyle[name];
element.runtimeStyle[name] = element.currentStyle[name];
element.style[name] = value;
var pixelValue = element.style[pixelName];
element.style[name] = oldStyleValue;
element.runtimeStyle[name] = oldRuntimeValue;
return pixelValue
}
};
goog.style.getIePixelDistance_ = function(element, propName) {
var value = goog.style.getCascadedStyle(element, propName);
return value ? goog.style.getIePixelValue_(element, value, "left", "pixelLeft") : 0
};
goog.style.getBox_ = function(element, stylePrefix) {
if(goog.userAgent.IE) {
var left = goog.style.getIePixelDistance_(element, stylePrefix + "Left");
var right = goog.style.getIePixelDistance_(element, stylePrefix + "Right");
var top = goog.style.getIePixelDistance_(element, stylePrefix + "Top");
var bottom = goog.style.getIePixelDistance_(element, stylePrefix + "Bottom");
return new goog.math.Box(top, right, bottom, left)
}else {
var left = (goog.style.getComputedStyle(element, stylePrefix + "Left"));
var right = (goog.style.getComputedStyle(element, stylePrefix + "Right"));
var top = (goog.style.getComputedStyle(element, stylePrefix + "Top"));
var bottom = (goog.style.getComputedStyle(element, stylePrefix + "Bottom"));
return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left))
}
};
goog.style.getPaddingBox = function(element) {
return goog.style.getBox_(element, "padding")
};
goog.style.getMarginBox = function(element) {
return goog.style.getBox_(element, "margin")
};
goog.style.ieBorderWidthKeywords_ = {"thin":2, "medium":4, "thick":6};
goog.style.getIePixelBorder_ = function(element, prop) {
if(goog.style.getCascadedStyle(element, prop + "Style") == "none") {
return 0
}
var width = goog.style.getCascadedStyle(element, prop + "Width");
if(width in goog.style.ieBorderWidthKeywords_) {
return goog.style.ieBorderWidthKeywords_[width]
}
return goog.style.getIePixelValue_(element, width, "left", "pixelLeft")
};
goog.style.getBorderBox = function(element) {
if(goog.userAgent.IE) {
var left = goog.style.getIePixelBorder_(element, "borderLeft");
var right = goog.style.getIePixelBorder_(element, "borderRight");
var top = goog.style.getIePixelBorder_(element, "borderTop");
var bottom = goog.style.getIePixelBorder_(element, "borderBottom");
return new goog.math.Box(top, right, bottom, left)
}else {
var left = (goog.style.getComputedStyle(element, "borderLeftWidth"));
var right = (goog.style.getComputedStyle(element, "borderRightWidth"));
var top = (goog.style.getComputedStyle(element, "borderTopWidth"));
var bottom = (goog.style.getComputedStyle(element, "borderBottomWidth"));
return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left))
}
};
goog.style.getFontFamily = function(el) {
var doc = goog.dom.getOwnerDocument(el);
var font = "";
if(doc.body.createTextRange) {
var range = doc.body.createTextRange();
range.moveToElementText(el);
try {
font = range.queryCommandValue("FontName")
}catch(e) {
font = ""
}
}
if(!font) {
font = goog.style.getStyle_(el, "fontFamily")
}
var fontsArray = font.split(",");
if(fontsArray.length > 1) {
font = fontsArray[0]
}
return goog.string.stripQuotes(font, "\"'")
};
goog.style.lengthUnitRegex_ = /[^\d]+$/;
goog.style.getLengthUnits = function(value) {
var units = value.match(goog.style.lengthUnitRegex_);
return units && units[0] || null
};
goog.style.ABSOLUTE_CSS_LENGTH_UNITS_ = {"cm":1, "in":1, "mm":1, "pc":1, "pt":1};
goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_ = {"em":1, "ex":1};
goog.style.getFontSize = function(el) {
var fontSize = goog.style.getStyle_(el, "fontSize");
var sizeUnits = goog.style.getLengthUnits(fontSize);
if(fontSize && "px" == sizeUnits) {
return parseInt(fontSize, 10)
}
if(goog.userAgent.IE) {
if(sizeUnits in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_) {
return goog.style.getIePixelValue_(el, fontSize, "left", "pixelLeft")
}else {
if(el.parentNode && el.parentNode.nodeType == goog.dom.NodeType.ELEMENT && sizeUnits in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_) {
var parentElement = (el.parentNode);
var parentSize = goog.style.getStyle_(parentElement, "fontSize");
return goog.style.getIePixelValue_(parentElement, fontSize == parentSize ? "1em" : fontSize, "left", "pixelLeft")
}
}
}
var sizeElement = goog.dom.createDom("span", {"style":"visibility:hidden;position:absolute;" + "line-height:0;padding:0;margin:0;border:0;height:1em;"});
goog.dom.appendChild(el, sizeElement);
fontSize = sizeElement.offsetHeight;
goog.dom.removeNode(sizeElement);
return fontSize
};
goog.style.parseStyleAttribute = function(value) {
var result = {};
goog.array.forEach(value.split(/\s*;\s*/), function(pair) {
var keyValue = pair.split(/\s*:\s*/);
if(keyValue.length == 2) {
result[goog.string.toCamelCase(keyValue[0].toLowerCase())] = keyValue[1]
}
});
return result
};
goog.style.toStyleAttribute = function(obj) {
var buffer = [];
goog.object.forEach(obj, function(value, key) {
buffer.push(goog.string.toSelectorCase(key), ":", value, ";")
});
return buffer.join("")
};
goog.style.setFloat = function(el, value) {
el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] = value
};
goog.style.getFloat = function(el) {
return el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] || ""
};
goog.style.getScrollbarWidth = function(opt_className) {
var outerDiv = goog.dom.createElement("div");
if(opt_className) {
outerDiv.className = opt_className
}
outerDiv.style.cssText = "overflow:auto;" + "position:absolute;top:0;width:100px;height:100px";
var innerDiv = goog.dom.createElement("div");
goog.style.setSize(innerDiv, "200px", "200px");
outerDiv.appendChild(innerDiv);
goog.dom.appendChild(goog.dom.getDocument().body, outerDiv);
var width = outerDiv.offsetWidth - outerDiv.clientWidth;
goog.dom.removeNode(outerDiv);
return width
};
goog.style.MATRIX_TRANSLATION_REGEX_ = new RegExp("matrix\\([0-9\\.\\-]+, [0-9\\.\\-]+, " + "[0-9\\.\\-]+, [0-9\\.\\-]+, " + "([0-9\\.\\-]+)p?x?, ([0-9\\.\\-]+)p?x?\\)");
goog.style.getCssTranslation = function(element) {
var property;
if(goog.userAgent.IE) {
property = "-ms-transform"
}else {
if(goog.userAgent.WEBKIT) {
property = "-webkit-transform"
}else {
if(goog.userAgent.OPERA) {
property = "-o-transform"
}else {
if(goog.userAgent.GECKO) {
property = "-moz-transform"
}
}
}
}
var transform;
if(property) {
transform = goog.style.getStyle_(element, property)
}
if(!transform) {
transform = goog.style.getStyle_(element, "transform")
}
if(!transform) {
return new goog.math.Coordinate(0, 0)
}
var matches = transform.match(goog.style.MATRIX_TRANSLATION_REGEX_);
if(!matches) {
return new goog.math.Coordinate(0, 0)
}
return new goog.math.Coordinate(parseFloat(matches[1]), parseFloat(matches[2]))
};
goog.provide("goog.vec.Float32Array");
goog.vec.Float32Array = function(p0) {
this.length = (p0.length || p0);
for(var i = 0;i < this.length;i++) {
this[i] = p0[i] || 0
}
};
goog.vec.Float32Array.BYTES_PER_ELEMENT = 4;
goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT = 4;
goog.vec.Float32Array.prototype.set = function(values, opt_offset) {
opt_offset = opt_offset || 0;
for(var i = 0;i < values.length && opt_offset + i < this.length;i++) {
this[opt_offset + i] = values[i]
}
};
goog.vec.Float32Array.prototype.toString = Array.prototype.join;
if(typeof Float32Array == "undefined") {
goog.exportProperty(goog.vec.Float32Array, "BYTES_PER_ELEMENT", goog.vec.Float32Array.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float32Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float32Array.prototype, "set", goog.vec.Float32Array.prototype.set);
goog.exportProperty(goog.vec.Float32Array.prototype, "toString", goog.vec.Float32Array.prototype.toString);
goog.exportSymbol("Float32Array", goog.vec.Float32Array)
}
;goog.provide("goog.vec.Float64Array");
goog.vec.Float64Array = function(p0) {
this.length = (p0.length || p0);
for(var i = 0;i < this.length;i++) {
this[i] = p0[i] || 0
}
};
goog.vec.Float64Array.BYTES_PER_ELEMENT = 8;
goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT = 8;
goog.vec.Float64Array.prototype.set = function(values, opt_offset) {
opt_offset = opt_offset || 0;
for(var i = 0;i < values.length && opt_offset + i < this.length;i++) {
this[opt_offset + i] = values[i]
}
};
goog.vec.Float64Array.prototype.toString = Array.prototype.join;
if(typeof Float64Array == "undefined") {
try {
goog.exportProperty(goog.vec.Float64Array, "BYTES_PER_ELEMENT", goog.vec.Float64Array.BYTES_PER_ELEMENT)
}catch(float64ArrayError) {
}
goog.exportProperty(goog.vec.Float64Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float64Array.prototype, "set", goog.vec.Float64Array.prototype.set);
goog.exportProperty(goog.vec.Float64Array.prototype, "toString", goog.vec.Float64Array.prototype.toString);
goog.exportSymbol("Float64Array", goog.vec.Float64Array)
}
;goog.provide("goog.vec");
goog.provide("goog.vec.AnyType");
goog.provide("goog.vec.ArrayType");
goog.provide("goog.vec.Float32");
goog.provide("goog.vec.Float64");
goog.provide("goog.vec.Number");
goog.require("goog.vec.Float32Array");
goog.require("goog.vec.Float64Array");
goog.vec.Float32;
goog.vec.Float64;
goog.vec.Number;
goog.vec.AnyType;
goog.vec.ArrayType;
goog.vec.EPSILON = 1E-6;
goog.provide("goog.vec.Vec3");
goog.require("goog.vec");
goog.vec.Vec3.Float32;
goog.vec.Vec3.Float64;
goog.vec.Vec3.Number;
goog.vec.Vec3.AnyType;
goog.vec.Vec3.Type;
goog.vec.Vec3.Vec3Like;
goog.vec.Vec3.createFloat32 = function() {
return new Float32Array(3)
};
goog.vec.Vec3.createFloat64 = function() {
return new Float64Array(3)
};
goog.vec.Vec3.createNumber = function() {
var a = new Array(3);
goog.vec.Vec3.setFromValues(a, 0, 0, 0);
return a
};
goog.vec.Vec3.create = function() {
return new Float32Array(3)
};
goog.vec.Vec3.createFloat32FromArray = function(vec) {
var newVec = goog.vec.Vec3.createFloat32();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFloat32FromValues = function(v0, v1, v2) {
var a = goog.vec.Vec3.createFloat32();
goog.vec.Vec3.setFromValues(a, v0, v1, v2);
return a
};
goog.vec.Vec3.cloneFloat32 = goog.vec.Vec3.createFloat32FromArray;
goog.vec.Vec3.createFloat64FromArray = function(vec) {
var newVec = goog.vec.Vec3.createFloat64();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFloat64FromValues = function(v0, v1, v2) {
var vec = goog.vec.Vec3.createFloat64();
goog.vec.Vec3.setFromValues(vec, v0, v1, v2);
return vec
};
goog.vec.Vec3.cloneFloat64 = goog.vec.Vec3.createFloat64FromArray;
goog.vec.Vec3.createFromArray = function(vec) {
var newVec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFromValues = function(v0, v1, v2) {
var vec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromValues(vec, v0, v1, v2);
return vec
};
goog.vec.Vec3.clone = function(vec) {
var newVec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.setFromValues = function(vec, v0, v1, v2) {
vec[0] = v0;
vec[1] = v1;
vec[2] = v2;
return vec
};
goog.vec.Vec3.setFromArray = function(vec, values) {
vec[0] = values[0];
vec[1] = values[1];
vec[2] = values[2];
return vec
};
goog.vec.Vec3.add = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] + vec1[0];
resultVec[1] = vec0[1] + vec1[1];
resultVec[2] = vec0[2] + vec1[2];
return resultVec
};
goog.vec.Vec3.subtract = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] - vec1[0];
resultVec[1] = vec0[1] - vec1[1];
resultVec[2] = vec0[2] - vec1[2];
return resultVec
};
goog.vec.Vec3.negate = function(vec0, resultVec) {
resultVec[0] = -vec0[0];
resultVec[1] = -vec0[1];
resultVec[2] = -vec0[2];
return resultVec
};
goog.vec.Vec3.scale = function(vec0, scalar, resultVec) {
resultVec[0] = vec0[0] * scalar;
resultVec[1] = vec0[1] * scalar;
resultVec[2] = vec0[2] * scalar;
return resultVec
};
goog.vec.Vec3.magnitudeSquared = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2];
return x * x + y * y + z * z
};
goog.vec.Vec3.magnitude = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2];
return Math.sqrt(x * x + y * y + z * z)
};
goog.vec.Vec3.normalize = function(vec0, resultVec) {
var ilen = 1 / goog.vec.Vec3.magnitude(vec0);
resultVec[0] = vec0[0] * ilen;
resultVec[1] = vec0[1] * ilen;
resultVec[2] = vec0[2] * ilen;
return resultVec
};
goog.vec.Vec3.dot = function(v0, v1) {
return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2]
};
goog.vec.Vec3.cross = function(v0, v1, resultVec) {
var x0 = v0[0], y0 = v0[1], z0 = v0[2];
var x1 = v1[0], y1 = v1[1], z1 = v1[2];
resultVec[0] = y0 * z1 - z0 * y1;
resultVec[1] = z0 * x1 - x0 * z1;
resultVec[2] = x0 * y1 - y0 * x1;
return resultVec
};
goog.vec.Vec3.distanceSquared = function(vec0, vec1) {
var x = vec0[0] - vec1[0];
var y = vec0[1] - vec1[1];
var z = vec0[2] - vec1[2];
return x * x + y * y + z * z
};
goog.vec.Vec3.distance = function(vec0, vec1) {
return Math.sqrt(goog.vec.Vec3.distanceSquared(vec0, vec1))
};
goog.vec.Vec3.direction = function(vec0, vec1, resultVec) {
var x = vec1[0] - vec0[0];
var y = vec1[1] - vec0[1];
var z = vec1[2] - vec0[2];
var d = Math.sqrt(x * x + y * y + z * z);
if(d) {
d = 1 / d;
resultVec[0] = x * d;
resultVec[1] = y * d;
resultVec[2] = z * d
}else {
resultVec[0] = resultVec[1] = resultVec[2] = 0
}
return resultVec
};
goog.vec.Vec3.lerp = function(v0, v1, f, resultVec) {
var x = v0[0], y = v0[1], z = v0[2];
resultVec[0] = (v1[0] - x) * f + x;
resultVec[1] = (v1[1] - y) * f + y;
resultVec[2] = (v1[2] - z) * f + z;
return resultVec
};
goog.vec.Vec3.equals = function(v0, v1) {
return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2]
};
goog.provide("goog.vec.Vec4");
goog.require("goog.vec");
goog.vec.Vec4.Float32;
goog.vec.Vec4.Float64;
goog.vec.Vec4.Number;
goog.vec.Vec4.AnyType;
goog.vec.Vec4.Type;
goog.vec.Vec4.Vec4Like;
goog.vec.Vec4.createFloat32 = function() {
return new Float32Array(4)
};
goog.vec.Vec4.createFloat64 = function() {
return new Float64Array(4)
};
goog.vec.Vec4.createNumber = function() {
var v = new Array(4);
goog.vec.Vec4.setFromValues(v, 0, 0, 0, 0);
return v
};
goog.vec.Vec4.create = function() {
return new Float32Array(4)
};
goog.vec.Vec4.createFromArray = function(vec) {
var newVec = goog.vec.Vec4.create();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat32FromArray = function(vec) {
var newVec = goog.vec.Vec4.createFloat32();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat32FromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.createFloat32();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.cloneFloat32 = goog.vec.Vec4.createFloat32FromArray;
goog.vec.Vec4.createFloat64FromArray = function(vec) {
var newVec = goog.vec.Vec4.createFloat64();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat64FromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.createFloat64();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.cloneFloat64 = goog.vec.Vec4.createFloat64FromArray;
goog.vec.Vec4.createFromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.create();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.clone = goog.vec.Vec4.createFromArray;
goog.vec.Vec4.setFromValues = function(vec, v0, v1, v2, v3) {
vec[0] = v0;
vec[1] = v1;
vec[2] = v2;
vec[3] = v3;
return vec
};
goog.vec.Vec4.setFromArray = function(vec, values) {
vec[0] = values[0];
vec[1] = values[1];
vec[2] = values[2];
vec[3] = values[3];
return vec
};
goog.vec.Vec4.add = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] + vec1[0];
resultVec[1] = vec0[1] + vec1[1];
resultVec[2] = vec0[2] + vec1[2];
resultVec[3] = vec0[3] + vec1[3];
return resultVec
};
goog.vec.Vec4.subtract = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] - vec1[0];
resultVec[1] = vec0[1] - vec1[1];
resultVec[2] = vec0[2] - vec1[2];
resultVec[3] = vec0[3] - vec1[3];
return resultVec
};
goog.vec.Vec4.negate = function(vec0, resultVec) {
resultVec[0] = -vec0[0];
resultVec[1] = -vec0[1];
resultVec[2] = -vec0[2];
resultVec[3] = -vec0[3];
return resultVec
};
goog.vec.Vec4.scale = function(vec0, scalar, resultVec) {
resultVec[0] = vec0[0] * scalar;
resultVec[1] = vec0[1] * scalar;
resultVec[2] = vec0[2] * scalar;
resultVec[3] = vec0[3] * scalar;
return resultVec
};
goog.vec.Vec4.magnitudeSquared = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3];
return x * x + y * y + z * z + w * w
};
goog.vec.Vec4.magnitude = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3];
return Math.sqrt(x * x + y * y + z * z + w * w)
};
goog.vec.Vec4.normalize = function(vec0, resultVec) {
var ilen = 1 / goog.vec.Vec4.magnitude(vec0);
resultVec[0] = vec0[0] * ilen;
resultVec[1] = vec0[1] * ilen;
resultVec[2] = vec0[2] * ilen;
resultVec[3] = vec0[3] * ilen;
return resultVec
};
goog.vec.Vec4.dot = function(v0, v1) {
return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2] + v0[3] * v1[3]
};
goog.vec.Vec4.lerp = function(v0, v1, f, resultVec) {
var x = v0[0], y = v0[1], z = v0[2], w = v0[3];
resultVec[0] = (v1[0] - x) * f + x;
resultVec[1] = (v1[1] - y) * f + y;
resultVec[2] = (v1[2] - z) * f + z;
resultVec[3] = (v1[3] - w) * f + w;
return resultVec
};
goog.vec.Vec4.equals = function(v0, v1) {
return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2] && v0[3] == v1[3]
};
goog.provide("goog.vec.Mat4");
goog.require("goog.vec");
goog.require("goog.vec.Vec3");
goog.require("goog.vec.Vec4");
goog.vec.Mat4.Float32;
goog.vec.Mat4.Float64;
goog.vec.Mat4.Number;
goog.vec.Mat4.AnyType;
goog.vec.Mat4.Type;
goog.vec.Mat4.Mat4Like;
goog.vec.Mat4.createFloat32 = function() {
return new Float32Array(16)
};
goog.vec.Mat4.createFloat64 = function() {
return new Float64Array(16)
};
goog.vec.Mat4.createNumber = function() {
var a = new Array(16);
goog.vec.Mat4.setFromValues(a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return a
};
goog.vec.Mat4.create = function() {
return goog.vec.Mat4.createFloat32()
};
goog.vec.Mat4.createFloat32Identity = function() {
var mat = goog.vec.Mat4.createFloat32();
mat[0] = mat[5] = mat[10] = mat[15] = 1;
return mat
};
goog.vec.Mat4.createFloat64Identity = function() {
var mat = goog.vec.Mat4.createFloat64();
mat[0] = mat[5] = mat[10] = mat[15] = 1;
return mat
};
goog.vec.Mat4.createNumberIdentity = function() {
var a = new Array(16);
goog.vec.Mat4.setFromValues(a, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
return a
};
goog.vec.Mat4.createIdentity = function() {
return goog.vec.Mat4.createFloat32Identity()
};
goog.vec.Mat4.createFloat32FromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFloat32FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return newMatrix
};
goog.vec.Mat4.cloneFloat32 = goog.vec.Mat4.createFloat32FromArray;
goog.vec.Mat4.createFloat64FromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat64();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFloat64FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
var newMatrix = goog.vec.Mat4.createFloat64();
goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return newMatrix
};
goog.vec.Mat4.cloneFloat64 = goog.vec.Mat4.createFloat64FromArray;
goog.vec.Mat4.createFromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
return goog.vec.Mat4.createFloat32FromValues(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33)
};
goog.vec.Mat4.clone = goog.vec.Mat4.createFromArray;
goog.vec.Mat4.getElement = function(mat, row, column) {
return mat[row + column * 4]
};
goog.vec.Mat4.setElement = function(mat, row, column, value) {
mat[row + column * 4] = value;
return mat
};
goog.vec.Mat4.setFromValues = function(mat, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
mat[0] = v00;
mat[1] = v10;
mat[2] = v20;
mat[3] = v30;
mat[4] = v01;
mat[5] = v11;
mat[6] = v21;
mat[7] = v31;
mat[8] = v02;
mat[9] = v12;
mat[10] = v22;
mat[11] = v32;
mat[12] = v03;
mat[13] = v13;
mat[14] = v23;
mat[15] = v33;
return mat
};
goog.vec.Mat4.setFromArray = function(mat, values) {
mat[0] = values[0];
mat[1] = values[1];
mat[2] = values[2];
mat[3] = values[3];
mat[4] = values[4];
mat[5] = values[5];
mat[6] = values[6];
mat[7] = values[7];
mat[8] = values[8];
mat[9] = values[9];
mat[10] = values[10];
mat[11] = values[11];
mat[12] = values[12];
mat[13] = values[13];
mat[14] = values[14];
mat[15] = values[15];
return mat
};
goog.vec.Mat4.setFromRowMajorArray = function(mat, values) {
mat[0] = values[0];
mat[1] = values[4];
mat[2] = values[8];
mat[3] = values[12];
mat[4] = values[1];
mat[5] = values[5];
mat[6] = values[9];
mat[7] = values[13];
mat[8] = values[2];
mat[9] = values[6];
mat[10] = values[10];
mat[11] = values[14];
mat[12] = values[3];
mat[13] = values[7];
mat[14] = values[11];
mat[15] = values[15];
return mat
};
goog.vec.Mat4.setDiagonalValues = function(mat, v00, v11, v22, v33) {
mat[0] = v00;
mat[5] = v11;
mat[10] = v22;
mat[15] = v33;
return mat
};
goog.vec.Mat4.setDiagonal = function(mat, vec) {
mat[0] = vec[0];
mat[5] = vec[1];
mat[10] = vec[2];
mat[15] = vec[3];
return mat
};
goog.vec.Mat4.getDiagonal = function(mat, vec, opt_diagonal) {
if(!opt_diagonal) {
vec[0] = mat[0];
vec[1] = mat[5];
vec[2] = mat[10];
vec[3] = mat[15]
}else {
var offset = opt_diagonal > 0 ? 4 * opt_diagonal : -opt_diagonal;
for(var i = 0;i < 4 - Math.abs(opt_diagonal);i++) {
vec[i] = mat[offset + 5 * i]
}
}
return vec
};
goog.vec.Mat4.setColumnValues = function(mat, column, v0, v1, v2, v3) {
var i = column * 4;
mat[i] = v0;
mat[i + 1] = v1;
mat[i + 2] = v2;
mat[i + 3] = v3;
return mat
};
goog.vec.Mat4.setColumn = function(mat, column, vec) {
var i = column * 4;
mat[i] = vec[0];
mat[i + 1] = vec[1];
mat[i + 2] = vec[2];
mat[i + 3] = vec[3];
return mat
};
goog.vec.Mat4.getColumn = function(mat, column, vec) {
var i = column * 4;
vec[0] = mat[i];
vec[1] = mat[i + 1];
vec[2] = mat[i + 2];
vec[3] = mat[i + 3];
return vec
};
goog.vec.Mat4.setColumns = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.setColumn(mat, 0, vec0);
goog.vec.Mat4.setColumn(mat, 1, vec1);
goog.vec.Mat4.setColumn(mat, 2, vec2);
goog.vec.Mat4.setColumn(mat, 3, vec3);
return mat
};
goog.vec.Mat4.getColumns = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.getColumn(mat, 0, vec0);
goog.vec.Mat4.getColumn(mat, 1, vec1);
goog.vec.Mat4.getColumn(mat, 2, vec2);
goog.vec.Mat4.getColumn(mat, 3, vec3)
};
goog.vec.Mat4.setRowValues = function(mat, row, v0, v1, v2, v3) {
mat[row] = v0;
mat[row + 4] = v1;
mat[row + 8] = v2;
mat[row + 12] = v3;
return mat
};
goog.vec.Mat4.setRow = function(mat, row, vec) {
mat[row] = vec[0];
mat[row + 4] = vec[1];
mat[row + 8] = vec[2];
mat[row + 12] = vec[3];
return mat
};
goog.vec.Mat4.getRow = function(mat, row, vec) {
vec[0] = mat[row];
vec[1] = mat[row + 4];
vec[2] = mat[row + 8];
vec[3] = mat[row + 12];
return vec
};
goog.vec.Mat4.setRows = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.setRow(mat, 0, vec0);
goog.vec.Mat4.setRow(mat, 1, vec1);
goog.vec.Mat4.setRow(mat, 2, vec2);
goog.vec.Mat4.setRow(mat, 3, vec3);
return mat
};
goog.vec.Mat4.getRows = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.getRow(mat, 0, vec0);
goog.vec.Mat4.getRow(mat, 1, vec1);
goog.vec.Mat4.getRow(mat, 2, vec2);
goog.vec.Mat4.getRow(mat, 3, vec3)
};
goog.vec.Mat4.makeZero = function(mat) {
mat[0] = 0;
mat[1] = 0;
mat[2] = 0;
mat[3] = 0;
mat[4] = 0;
mat[5] = 0;
mat[6] = 0;
mat[7] = 0;
mat[8] = 0;
mat[9] = 0;
mat[10] = 0;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 0;
return mat
};
goog.vec.Mat4.makeIdentity = function(mat) {
mat[0] = 1;
mat[1] = 0;
mat[2] = 0;
mat[3] = 0;
mat[4] = 0;
mat[5] = 1;
mat[6] = 0;
mat[7] = 0;
mat[8] = 0;
mat[9] = 0;
mat[10] = 1;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 1;
return mat
};
goog.vec.Mat4.addMat = function(mat0, mat1, resultMat) {
resultMat[0] = mat0[0] + mat1[0];
resultMat[1] = mat0[1] + mat1[1];
resultMat[2] = mat0[2] + mat1[2];
resultMat[3] = mat0[3] + mat1[3];
resultMat[4] = mat0[4] + mat1[4];
resultMat[5] = mat0[5] + mat1[5];
resultMat[6] = mat0[6] + mat1[6];
resultMat[7] = mat0[7] + mat1[7];
resultMat[8] = mat0[8] + mat1[8];
resultMat[9] = mat0[9] + mat1[9];
resultMat[10] = mat0[10] + mat1[10];
resultMat[11] = mat0[11] + mat1[11];
resultMat[12] = mat0[12] + mat1[12];
resultMat[13] = mat0[13] + mat1[13];
resultMat[14] = mat0[14] + mat1[14];
resultMat[15] = mat0[15] + mat1[15];
return resultMat
};
goog.vec.Mat4.subMat = function(mat0, mat1, resultMat) {
resultMat[0] = mat0[0] - mat1[0];
resultMat[1] = mat0[1] - mat1[1];
resultMat[2] = mat0[2] - mat1[2];
resultMat[3] = mat0[3] - mat1[3];
resultMat[4] = mat0[4] - mat1[4];
resultMat[5] = mat0[5] - mat1[5];
resultMat[6] = mat0[6] - mat1[6];
resultMat[7] = mat0[7] - mat1[7];
resultMat[8] = mat0[8] - mat1[8];
resultMat[9] = mat0[9] - mat1[9];
resultMat[10] = mat0[10] - mat1[10];
resultMat[11] = mat0[11] - mat1[11];
resultMat[12] = mat0[12] - mat1[12];
resultMat[13] = mat0[13] - mat1[13];
resultMat[14] = mat0[14] - mat1[14];
resultMat[15] = mat0[15] - mat1[15];
return resultMat
};
goog.vec.Mat4.multScalar = function(mat, scalar, resultMat) {
resultMat[0] = mat[0] * scalar;
resultMat[1] = mat[1] * scalar;
resultMat[2] = mat[2] * scalar;
resultMat[3] = mat[3] * scalar;
resultMat[4] = mat[4] * scalar;
resultMat[5] = mat[5] * scalar;
resultMat[6] = mat[6] * scalar;
resultMat[7] = mat[7] * scalar;
resultMat[8] = mat[8] * scalar;
resultMat[9] = mat[9] * scalar;
resultMat[10] = mat[10] * scalar;
resultMat[11] = mat[11] * scalar;
resultMat[12] = mat[12] * scalar;
resultMat[13] = mat[13] * scalar;
resultMat[14] = mat[14] * scalar;
resultMat[15] = mat[15] * scalar;
return resultMat
};
goog.vec.Mat4.multMat = function(mat0, mat1, resultMat) {
var a00 = mat0[0], a10 = mat0[1], a20 = mat0[2], a30 = mat0[3];
var a01 = mat0[4], a11 = mat0[5], a21 = mat0[6], a31 = mat0[7];
var a02 = mat0[8], a12 = mat0[9], a22 = mat0[10], a32 = mat0[11];
var a03 = mat0[12], a13 = mat0[13], a23 = mat0[14], a33 = mat0[15];
var b00 = mat1[0], b10 = mat1[1], b20 = mat1[2], b30 = mat1[3];
var b01 = mat1[4], b11 = mat1[5], b21 = mat1[6], b31 = mat1[7];
var b02 = mat1[8], b12 = mat1[9], b22 = mat1[10], b32 = mat1[11];
var b03 = mat1[12], b13 = mat1[13], b23 = mat1[14], b33 = mat1[15];
resultMat[0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30;
resultMat[1] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30;
resultMat[2] = a20 * b00 + a21 * b10 + a22 * b20 + a23 * b30;
resultMat[3] = a30 * b00 + a31 * b10 + a32 * b20 + a33 * b30;
resultMat[4] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31;
resultMat[5] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31;
resultMat[6] = a20 * b01 + a21 * b11 + a22 * b21 + a23 * b31;
resultMat[7] = a30 * b01 + a31 * b11 + a32 * b21 + a33 * b31;
resultMat[8] = a00 * b02 + a01 * b12 + a02 * b22 + a03 * b32;
resultMat[9] = a10 * b02 + a11 * b12 + a12 * b22 + a13 * b32;
resultMat[10] = a20 * b02 + a21 * b12 + a22 * b22 + a23 * b32;
resultMat[11] = a30 * b02 + a31 * b12 + a32 * b22 + a33 * b32;
resultMat[12] = a00 * b03 + a01 * b13 + a02 * b23 + a03 * b33;
resultMat[13] = a10 * b03 + a11 * b13 + a12 * b23 + a13 * b33;
resultMat[14] = a20 * b03 + a21 * b13 + a22 * b23 + a23 * b33;
resultMat[15] = a30 * b03 + a31 * b13 + a32 * b23 + a33 * b33;
return resultMat
};
goog.vec.Mat4.transpose = function(mat, resultMat) {
if(resultMat == mat) {
var a10 = mat[1], a20 = mat[2], a30 = mat[3];
var a21 = mat[6], a31 = mat[7];
var a32 = mat[11];
resultMat[1] = mat[4];
resultMat[2] = mat[8];
resultMat[3] = mat[12];
resultMat[4] = a10;
resultMat[6] = mat[9];
resultMat[7] = mat[13];
resultMat[8] = a20;
resultMat[9] = a21;
resultMat[11] = mat[14];
resultMat[12] = a30;
resultMat[13] = a31;
resultMat[14] = a32
}else {
resultMat[0] = mat[0];
resultMat[1] = mat[4];
resultMat[2] = mat[8];
resultMat[3] = mat[12];
resultMat[4] = mat[1];
resultMat[5] = mat[5];
resultMat[6] = mat[9];
resultMat[7] = mat[13];
resultMat[8] = mat[2];
resultMat[9] = mat[6];
resultMat[10] = mat[10];
resultMat[11] = mat[14];
resultMat[12] = mat[3];
resultMat[13] = mat[7];
resultMat[14] = mat[11];
resultMat[15] = mat[15]
}
return resultMat
};
goog.vec.Mat4.determinant = function(mat) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var a0 = m00 * m11 - m10 * m01;
var a1 = m00 * m21 - m20 * m01;
var a2 = m00 * m31 - m30 * m01;
var a3 = m10 * m21 - m20 * m11;
var a4 = m10 * m31 - m30 * m11;
var a5 = m20 * m31 - m30 * m21;
var b0 = m02 * m13 - m12 * m03;
var b1 = m02 * m23 - m22 * m03;
var b2 = m02 * m33 - m32 * m03;
var b3 = m12 * m23 - m22 * m13;
var b4 = m12 * m33 - m32 * m13;
var b5 = m22 * m33 - m32 * m23;
return a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0
};
goog.vec.Mat4.invert = function(mat, resultMat) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var a0 = m00 * m11 - m10 * m01;
var a1 = m00 * m21 - m20 * m01;
var a2 = m00 * m31 - m30 * m01;
var a3 = m10 * m21 - m20 * m11;
var a4 = m10 * m31 - m30 * m11;
var a5 = m20 * m31 - m30 * m21;
var b0 = m02 * m13 - m12 * m03;
var b1 = m02 * m23 - m22 * m03;
var b2 = m02 * m33 - m32 * m03;
var b3 = m12 * m23 - m22 * m13;
var b4 = m12 * m33 - m32 * m13;
var b5 = m22 * m33 - m32 * m23;
var det = a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0;
if(det == 0) {
return false
}
var idet = 1 / det;
resultMat[0] = (m11 * b5 - m21 * b4 + m31 * b3) * idet;
resultMat[1] = (-m10 * b5 + m20 * b4 - m30 * b3) * idet;
resultMat[2] = (m13 * a5 - m23 * a4 + m33 * a3) * idet;
resultMat[3] = (-m12 * a5 + m22 * a4 - m32 * a3) * idet;
resultMat[4] = (-m01 * b5 + m21 * b2 - m31 * b1) * idet;
resultMat[5] = (m00 * b5 - m20 * b2 + m30 * b1) * idet;
resultMat[6] = (-m03 * a5 + m23 * a2 - m33 * a1) * idet;
resultMat[7] = (m02 * a5 - m22 * a2 + m32 * a1) * idet;
resultMat[8] = (m01 * b4 - m11 * b2 + m31 * b0) * idet;
resultMat[9] = (-m00 * b4 + m10 * b2 - m30 * b0) * idet;
resultMat[10] = (m03 * a4 - m13 * a2 + m33 * a0) * idet;
resultMat[11] = (-m02 * a4 + m12 * a2 - m32 * a0) * idet;
resultMat[12] = (-m01 * b3 + m11 * b1 - m21 * b0) * idet;
resultMat[13] = (m00 * b3 - m10 * b1 + m20 * b0) * idet;
resultMat[14] = (-m03 * a3 + m13 * a1 - m23 * a0) * idet;
resultMat[15] = (m02 * a3 - m12 * a1 + m22 * a0) * idet;
return true
};
goog.vec.Mat4.equals = function(mat0, mat1) {
return mat0.length == mat1.length && mat0[0] == mat1[0] && mat0[1] == mat1[1] && mat0[2] == mat1[2] && mat0[3] == mat1[3] && mat0[4] == mat1[4] && mat0[5] == mat1[5] && mat0[6] == mat1[6] && mat0[7] == mat1[7] && mat0[8] == mat1[8] && mat0[9] == mat1[9] && mat0[10] == mat1[10] && mat0[11] == mat1[11] && mat0[12] == mat1[12] && mat0[13] == mat1[13] && mat0[14] == mat1[14] && mat0[15] == mat1[15]
};
goog.vec.Mat4.multVec3 = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + mat[12];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + mat[13];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + mat[14];
return resultVec
};
goog.vec.Mat4.multVec3NoTranslate = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10];
return resultVec
};
goog.vec.Mat4.multVec3Projective = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
var invw = 1 / (x * mat[3] + y * mat[7] + z * mat[11] + mat[15]);
resultVec[0] = (x * mat[0] + y * mat[4] + z * mat[8] + mat[12]) * invw;
resultVec[1] = (x * mat[1] + y * mat[5] + z * mat[9] + mat[13]) * invw;
resultVec[2] = (x * mat[2] + y * mat[6] + z * mat[10] + mat[14]) * invw;
return resultVec
};
goog.vec.Mat4.multVec4 = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2], w = vec[3];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + w * mat[12];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + w * mat[13];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + w * mat[14];
resultVec[3] = x * mat[3] + y * mat[7] + z * mat[11] + w * mat[15];
return resultVec
};
goog.vec.Mat4.makeTranslate = function(mat, x, y, z) {
goog.vec.Mat4.makeIdentity(mat);
return goog.vec.Mat4.setColumnValues(mat, 3, x, y, z, 1)
};
goog.vec.Mat4.makeScale = function(mat, x, y, z) {
goog.vec.Mat4.makeIdentity(mat);
return goog.vec.Mat4.setDiagonalValues(mat, x, y, z, 1)
};
goog.vec.Mat4.makeRotate = function(mat, angle, ax, ay, az) {
var c = Math.cos(angle);
var d = 1 - c;
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, ax * ax * d + c, ax * ay * d + az * s, ax * az * d - ay * s, 0, ax * ay * d - az * s, ay * ay * d + c, ay * az * d + ax * s, 0, ax * az * d + ay * s, ay * az * d - ax * s, az * az * d + c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateX = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, 1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateY = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateZ = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeFrustum = function(mat, left, right, bottom, top, near, far) {
var x = 2 * near / (right - left);
var y = 2 * near / (top - bottom);
var a = (right + left) / (right - left);
var b = (top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
var d = -(2 * far * near) / (far - near);
return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, a, b, c, -1, 0, 0, d, 0)
};
goog.vec.Mat4.makePerspective = function(mat, fovy, aspect, near, far) {
var angle = fovy / 2;
var dz = far - near;
var sinAngle = Math.sin(angle);
if(dz == 0 || sinAngle == 0 || aspect == 0) {
return mat
}
var cot = Math.cos(angle) / sinAngle;
return goog.vec.Mat4.setFromValues(mat, cot / aspect, 0, 0, 0, 0, cot, 0, 0, 0, 0, -(far + near) / dz, -1, 0, 0, -(2 * near * far) / dz, 0)
};
goog.vec.Mat4.makeOrtho = function(mat, left, right, bottom, top, near, far) {
var x = 2 / (right - left);
var y = 2 / (top - bottom);
var z = -2 / (far - near);
var a = -(right + left) / (right - left);
var b = -(top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, a, b, c, 1)
};
goog.vec.Mat4.makeLookAt = function(mat, eyePt, centerPt, worldUpVec) {
var fwdVec = goog.vec.Mat4.tmpVec4_[0];
goog.vec.Vec3.subtract(centerPt, eyePt, fwdVec);
goog.vec.Vec3.normalize(fwdVec, fwdVec);
fwdVec[3] = 0;
var sideVec = goog.vec.Mat4.tmpVec4_[1];
goog.vec.Vec3.cross(fwdVec, worldUpVec, sideVec);
goog.vec.Vec3.normalize(sideVec, sideVec);
sideVec[3] = 0;
var upVec = goog.vec.Mat4.tmpVec4_[2];
goog.vec.Vec3.cross(sideVec, fwdVec, upVec);
goog.vec.Vec3.normalize(upVec, upVec);
upVec[3] = 0;
goog.vec.Vec3.negate(fwdVec, fwdVec);
goog.vec.Mat4.setRow(mat, 0, sideVec);
goog.vec.Mat4.setRow(mat, 1, upVec);
goog.vec.Mat4.setRow(mat, 2, fwdVec);
goog.vec.Mat4.setRowValues(mat, 3, 0, 0, 0, 1);
goog.vec.Mat4.translate(mat, -eyePt[0], -eyePt[1], -eyePt[2]);
return mat
};
goog.vec.Mat4.toLookAt = function(mat, eyePt, fwdVec, worldUpVec) {
var matInverse = goog.vec.Mat4.tmpMat4_[0];
if(!goog.vec.Mat4.invert(mat, matInverse)) {
return false
}
if(eyePt) {
eyePt[0] = matInverse[12];
eyePt[1] = matInverse[13];
eyePt[2] = matInverse[14]
}
if(fwdVec || worldUpVec) {
if(!fwdVec) {
fwdVec = goog.vec.Mat4.tmpVec3_[0]
}
fwdVec[0] = -mat[2];
fwdVec[1] = -mat[6];
fwdVec[2] = -mat[10];
goog.vec.Vec3.normalize(fwdVec, fwdVec)
}
if(worldUpVec) {
var side = goog.vec.Mat4.tmpVec3_[1];
side[0] = mat[0];
side[1] = mat[4];
side[2] = mat[8];
goog.vec.Vec3.cross(side, fwdVec, worldUpVec);
goog.vec.Vec3.normalize(worldUpVec, worldUpVec)
}
return true
};
goog.vec.Mat4.makeEulerZXZ = function(mat, theta1, theta2, theta3) {
var c1 = Math.cos(theta1);
var s1 = Math.sin(theta1);
var c2 = Math.cos(theta2);
var s2 = Math.sin(theta2);
var c3 = Math.cos(theta3);
var s3 = Math.sin(theta3);
mat[0] = c1 * c3 - c2 * s1 * s3;
mat[1] = c2 * c1 * s3 + c3 * s1;
mat[2] = s3 * s2;
mat[3] = 0;
mat[4] = -c1 * s3 - c3 * c2 * s1;
mat[5] = c1 * c2 * c3 - s1 * s3;
mat[6] = c3 * s2;
mat[7] = 0;
mat[8] = s2 * s1;
mat[9] = -c1 * s2;
mat[10] = c2;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 1;
return mat
};
goog.vec.Mat4.toEulerZXZ = function(mat, euler, opt_theta2IsNegative) {
var sinTheta2 = Math.sqrt(mat[2] * mat[2] + mat[6] * mat[6]);
var signTheta2 = opt_theta2IsNegative ? -1 : 1;
if(sinTheta2 > goog.vec.EPSILON) {
euler[2] = Math.atan2(mat[2] * signTheta2, mat[6] * signTheta2);
euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]);
euler[0] = Math.atan2(mat[8] * signTheta2, -mat[9] * signTheta2)
}else {
euler[0] = 0;
euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]);
euler[2] = Math.atan2(mat[1], mat[0])
}
euler[0] = (euler[0] + Math.PI * 2) % (Math.PI * 2);
euler[2] = (euler[2] + Math.PI * 2) % (Math.PI * 2);
euler[1] = (euler[1] * signTheta2 + Math.PI * 2) % (Math.PI * 2) * signTheta2;
return euler
};
goog.vec.Mat4.translate = function(mat, x, y, z) {
return goog.vec.Mat4.setColumnValues(mat, 3, mat[0] * x + mat[4] * y + mat[8] * z + mat[12], mat[1] * x + mat[5] * y + mat[9] * z + mat[13], mat[2] * x + mat[6] * y + mat[10] * z + mat[14], mat[3] * x + mat[7] * y + mat[11] * z + mat[15])
};
goog.vec.Mat4.scale = function(mat, x, y, z) {
return goog.vec.Mat4.setFromValues(mat, mat[0] * x, mat[1] * x, mat[2] * x, mat[3] * x, mat[4] * y, mat[5] * y, mat[6] * y, mat[7] * y, mat[8] * z, mat[9] * z, mat[10] * z, mat[11] * z, mat[12], mat[13], mat[14], mat[15])
};
goog.vec.Mat4.rotate = function(mat, angle, x, y, z) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var cosAngle = Math.cos(angle);
var sinAngle = Math.sin(angle);
var diffCosAngle = 1 - cosAngle;
var r00 = x * x * diffCosAngle + cosAngle;
var r10 = x * y * diffCosAngle + z * sinAngle;
var r20 = x * z * diffCosAngle - y * sinAngle;
var r01 = x * y * diffCosAngle - z * sinAngle;
var r11 = y * y * diffCosAngle + cosAngle;
var r21 = y * z * diffCosAngle + x * sinAngle;
var r02 = x * z * diffCosAngle + y * sinAngle;
var r12 = y * z * diffCosAngle - x * sinAngle;
var r22 = z * z * diffCosAngle + cosAngle;
return goog.vec.Mat4.setFromValues(mat, m00 * r00 + m01 * r10 + m02 * r20, m10 * r00 + m11 * r10 + m12 * r20, m20 * r00 + m21 * r10 + m22 * r20, m30 * r00 + m31 * r10 + m32 * r20, m00 * r01 + m01 * r11 + m02 * r21, m10 * r01 + m11 * r11 + m12 * r21, m20 * r01 + m21 * r11 + m22 * r21, m30 * r01 + m31 * r11 + m32 * r21, m00 * r02 + m01 * r12 + m02 * r22, m10 * r02 + m11 * r12 + m12 * r22, m20 * r02 + m21 * r12 + m22 * r22, m30 * r02 + m31 * r12 + m32 * r22, m03, m13, m23, m33)
};
goog.vec.Mat4.rotateX = function(mat, angle) {
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[4] = m01 * c + m02 * s;
mat[5] = m11 * c + m12 * s;
mat[6] = m21 * c + m22 * s;
mat[7] = m31 * c + m32 * s;
mat[8] = m01 * -s + m02 * c;
mat[9] = m11 * -s + m12 * c;
mat[10] = m21 * -s + m22 * c;
mat[11] = m31 * -s + m32 * c;
return mat
};
goog.vec.Mat4.rotateY = function(mat, angle) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[0] = m00 * c + m02 * -s;
mat[1] = m10 * c + m12 * -s;
mat[2] = m20 * c + m22 * -s;
mat[3] = m30 * c + m32 * -s;
mat[8] = m00 * s + m02 * c;
mat[9] = m10 * s + m12 * c;
mat[10] = m20 * s + m22 * c;
mat[11] = m30 * s + m32 * c;
return mat
};
goog.vec.Mat4.rotateZ = function(mat, angle) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[0] = m00 * c + m01 * s;
mat[1] = m10 * c + m11 * s;
mat[2] = m20 * c + m21 * s;
mat[3] = m30 * c + m31 * s;
mat[4] = m00 * -s + m01 * c;
mat[5] = m10 * -s + m11 * c;
mat[6] = m20 * -s + m21 * c;
mat[7] = m30 * -s + m31 * c;
return mat
};
goog.vec.Mat4.getTranslation = function(mat, translation) {
translation[0] = mat[12];
translation[1] = mat[13];
translation[2] = mat[14];
return translation
};
goog.vec.Mat4.tmpVec3_ = [goog.vec.Vec3.createFloat64(), goog.vec.Vec3.createFloat64()];
goog.vec.Mat4.tmpVec4_ = [goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64()];
goog.vec.Mat4.tmpMat4_ = [goog.vec.Mat4.createFloat64()];
goog.provide("ol.dom");
goog.provide("ol.dom.BrowserFeature");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.style");
goog.require("goog.userAgent");
goog.require("goog.vec.Mat4");
goog.require("ol");
ol.dom.createCanvasContext2D = function(opt_width, opt_height) {
var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS);
if(goog.isDef(opt_width)) {
canvas.width = opt_width
}
if(goog.isDef(opt_height)) {
canvas.height = opt_height
}
return canvas.getContext("2d")
};
ol.dom.BrowserFeature = {USE_MS_MATRIX_TRANSFORM:ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE, USE_MS_ALPHA_FILTER:ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE};
ol.dom.canUseCssTransform = function() {
var canUseCssTransform;
return function() {
if(!goog.isDef(canUseCssTransform)) {
goog.asserts.assert(!goog.isNull(document.body));
if(!goog.global.getComputedStyle) {
canUseCssTransform = false
}else {
var el = goog.dom.createElement(goog.dom.TagName.P), has2d, transforms = {"webkitTransform":"-webkit-transform", "OTransform":"-o-transform", "msTransform":"-ms-transform", "MozTransform":"-moz-transform", "transform":"transform"};
goog.dom.appendChild(document.body, el);
for(var t in transforms) {
if(t in el.style) {
el.style[t] = "translate(1px,1px)";
has2d = goog.global.getComputedStyle(el).getPropertyValue(transforms[t])
}
}
goog.dom.removeNode(el);
canUseCssTransform = has2d && has2d !== "none"
}
}
return canUseCssTransform
}
}();
ol.dom.canUseCssTransform3D = function() {
var canUseCssTransform3D;
return function() {
if(!goog.isDef(canUseCssTransform3D)) {
goog.asserts.assert(!goog.isNull(document.body));
if(!goog.global.getComputedStyle) {
canUseCssTransform3D = false
}else {
var el = goog.dom.createElement(goog.dom.TagName.P), has3d, transforms = {"webkitTransform":"-webkit-transform", "OTransform":"-o-transform", "msTransform":"-ms-transform", "MozTransform":"-moz-transform", "transform":"transform"};
goog.dom.appendChild(document.body, el);
for(var t in transforms) {
if(t in el.style) {
el.style[t] = "translate3d(1px,1px,1px)";
has3d = goog.global.getComputedStyle(el).getPropertyValue(transforms[t])
}
}
goog.dom.removeNode(el);
canUseCssTransform3D = has3d && has3d !== "none"
}
}
return canUseCssTransform3D
}
}();
ol.dom.setTransform = function(element, value) {
var style = element.style;
style.WebkitTransform = value;
style.MozTransform = value;
style.OTransform = value;
style.msTransform = value;
style.transform = value;
if(goog.userAgent.IE && !ol.IS_LEGACY_IE) {
element.style.transformOrigin = "0 0"
}
};
ol.dom.setOpacity = function(element, value) {
if(ol.dom.BrowserFeature.USE_MS_ALPHA_FILTER) {
var filter = element.currentStyle.filter;
var regex;
var alpha;
if(goog.userAgent.VERSION == "8.0") {
regex = /progid:DXImageTransform\.Microsoft\.Alpha\(.*?\)/i, alpha = "progid:DXImageTransform.Microsoft.Alpha(Opacity\x3d" + value * 100 + ")"
}else {
regex = /alpha\(.*?\)/i;
alpha = "alpha(opacity\x3d" + value * 100 + ")"
}
var newFilter = filter.replace(regex, alpha);
if(newFilter === filter) {
newFilter += " " + alpha
}
element.style.filter = newFilter;
if(element.currentStyle.zIndex === "auto") {
element.style.zIndex = 0
}
}else {
goog.style.setOpacity(element, value)
}
};
ol.dom.setIEMatrix_ = function(element, value) {
var filter = element.currentStyle.filter;
var newFilter = filter.replace(/progid:DXImageTransform.Microsoft.Matrix\(.*?\)/i, value);
if(newFilter === filter) {
newFilter = " " + value
}
element.style.filter = newFilter;
if(element.currentStyle.zIndex === "auto") {
element.style.zIndex = 0
}
};
ol.dom.transformElement2D = function(element, transform, opt_precision, opt_translationElement) {
var i;
if(ol.dom.canUseCssTransform3D()) {
var value3D;
if(goog.isDef(opt_precision)) {
var strings3D = new Array(16);
for(i = 0;i < 16;++i) {
strings3D[i] = transform[i].toFixed(opt_precision)
}
value3D = strings3D.join(",")
}else {
value3D = transform.join(",")
}
ol.dom.setTransform(element, "matrix3d(" + value3D + ")")
}else {
if(ol.dom.canUseCssTransform()) {
var transform2D = [goog.vec.Mat4.getElement(transform, 0, 0), goog.vec.Mat4.getElement(transform, 1, 0), goog.vec.Mat4.getElement(transform, 0, 1), goog.vec.Mat4.getElement(transform, 1, 1), goog.vec.Mat4.getElement(transform, 0, 3), goog.vec.Mat4.getElement(transform, 1, 3)];
var value2D;
if(goog.isDef(opt_precision)) {
var strings2D = new Array(6);
for(i = 0;i < 6;++i) {
strings2D[i] = transform2D[i].toFixed(opt_precision)
}
value2D = strings2D.join(",")
}else {
value2D = transform2D.join(",")
}
ol.dom.setTransform(element, "matrix(" + value2D + ")")
}else {
if(ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) {
var m11 = goog.vec.Mat4.getElement(transform, 0, 0), m12 = goog.vec.Mat4.getElement(transform, 0, 1), m21 = goog.vec.Mat4.getElement(transform, 1, 0), m22 = goog.vec.Mat4.getElement(transform, 1, 1), dx = goog.vec.Mat4.getElement(transform, 0, 3), dy = goog.vec.Mat4.getElement(transform, 1, 3);
var s = "progid:DXImageTransform.Microsoft.Matrix(";
s += 'sizingMethod\x3d"auto expand"';
s += ",M11\x3d" + m11.toFixed(opt_precision || 20);
s += ",M12\x3d" + m12.toFixed(opt_precision || 20);
s += ",M21\x3d" + m21.toFixed(opt_precision || 20);
s += ",M22\x3d" + m22.toFixed(opt_precision || 20);
s += ")";
ol.dom.setIEMatrix_(element, s);
dx /= m11;
dy /= m22;
opt_translationElement.style.left = Math.round(dx) + "px";
opt_translationElement.style.top = Math.round(dy) + "px"
}else {
element.style.left = Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + "px";
element.style.top = Math.round(goog.vec.Mat4.getElement(transform, 1, 3)) + "px"
}
}
}
};
goog.provide("ol.webgl");
goog.provide("ol.webgl.WebGLContextEventType");
ol.webgl.CONTEXT_IDS_ = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"];
ol.webgl.WebGLContextEventType = {LOST:"webglcontextlost", RESTORED:"webglcontextrestored"};
ol.webgl.getContext = function(canvas, opt_attributes) {
var context, i, ii = ol.webgl.CONTEXT_IDS_.length;
for(i = 0;i < ii;++i) {
try {
context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes);
if(!goog.isNull(context)) {
return(context)
}
}catch(e) {
}
}
return null
};
goog.provide("ol.BrowserFeature");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("ol");
goog.require("ol.dom");
goog.require("ol.webgl");
ol.BrowserFeature.DEVICE_PIXEL_RATIO = goog.global.devicePixelRatio || 1;
ol.BrowserFeature.HAS_ARRAY_BUFFER = "ArrayBuffer" in goog.global;
ol.BrowserFeature.HAS_CANVAS_LINE_DASH = false;
ol.BrowserFeature.HAS_CANVAS = ol.ENABLE_CANVAS && function() {
if(!("HTMLCanvasElement" in goog.global)) {
return false
}
try {
var context = ol.dom.createCanvasContext2D();
if(goog.isNull(context)) {
return false
}else {
if(goog.isDef(context.setLineDash)) {
ol.BrowserFeature.HAS_CANVAS_LINE_DASH = true
}
return true
}
}catch(e) {
return false
}
}();
ol.BrowserFeature.HAS_DEVICE_ORIENTATION = "DeviceOrientationEvent" in goog.global;
ol.BrowserFeature.HAS_DOM = ol.ENABLE_DOM;
ol.BrowserFeature.HAS_GEOLOCATION = "geolocation" in goog.global.navigator;
ol.BrowserFeature.HAS_JSON_PARSE = "JSON" in goog.global && "parse" in goog.global.JSON;
ol.BrowserFeature.HAS_TOUCH = ol.ASSUME_TOUCH || "ontouchstart" in goog.global;
ol.BrowserFeature.HAS_POINTER = "PointerEvent" in goog.global;
ol.BrowserFeature.HAS_MSPOINTER = !!goog.global.navigator.msPointerEnabled;
ol.BrowserFeature.HAS_WEBGL = ol.ENABLE_WEBGL && function() {
if(!("WebGLRenderingContext" in goog.global)) {
return false
}
try {
var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS));
return!goog.isNull(ol.webgl.getContext(canvas, {failIfMajorPerformanceCaveat:true}))
}catch(e) {
return false
}
}();
goog.provide("goog.disposable.IDisposable");
goog.disposable.IDisposable = function() {
};
goog.disposable.IDisposable.prototype.dispose;
goog.disposable.IDisposable.prototype.isDisposed;
goog.provide("goog.Disposable");
goog.provide("goog.dispose");
goog.require("goog.disposable.IDisposable");
goog.Disposable = function() {
if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {
if(goog.Disposable.INCLUDE_STACK_ON_CREATION) {
this.creationStack = (new Error).stack
}
goog.Disposable.instances_[goog.getUid(this)] = this
}
};
goog.Disposable.MonitoringMode = {OFF:0, PERMANENT:1, INTERACTIVE:2};
goog.define("goog.Disposable.MONITORING_MODE", 0);
goog.define("goog.Disposable.INCLUDE_STACK_ON_CREATION", true);
goog.Disposable.instances_ = {};
goog.Disposable.getUndisposedObjects = function() {
var ret = [];
for(var id in goog.Disposable.instances_) {
if(goog.Disposable.instances_.hasOwnProperty(id)) {
ret.push(goog.Disposable.instances_[Number(id)])
}
}
return ret
};
goog.Disposable.clearUndisposedObjects = function() {
goog.Disposable.instances_ = {}
};
goog.Disposable.prototype.disposed_ = false;
goog.Disposable.prototype.onDisposeCallbacks_;
goog.Disposable.prototype.creationStack;
goog.Disposable.prototype.isDisposed = function() {
return this.disposed_
};
goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed;
goog.Disposable.prototype.dispose = function() {
if(!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {
var uid = goog.getUid(this);
if(goog.Disposable.MONITORING_MODE == goog.Disposable.MonitoringMode.PERMANENT && !goog.Disposable.instances_.hasOwnProperty(uid)) {
throw Error(this + " did not call the goog.Disposable base " + "constructor or was disposed of after a clearUndisposedObjects " + "call");
}
delete goog.Disposable.instances_[uid]
}
}
};
goog.Disposable.prototype.registerDisposable = function(disposable) {
this.addOnDisposeCallback(goog.partial(goog.dispose, disposable))
};
goog.Disposable.prototype.addOnDisposeCallback = function(callback, opt_scope) {
if(!this.onDisposeCallbacks_) {
this.onDisposeCallbacks_ = []
}
this.onDisposeCallbacks_.push(goog.bind(callback, opt_scope))
};
goog.Disposable.prototype.disposeInternal = function() {
if(this.onDisposeCallbacks_) {
while(this.onDisposeCallbacks_.length) {
this.onDisposeCallbacks_.shift()()
}
}
};
goog.Disposable.isDisposed = function(obj) {
if(obj && typeof obj.isDisposed == "function") {
return obj.isDisposed()
}
return false
};
goog.dispose = function(obj) {
if(obj && typeof obj.dispose == "function") {
obj.dispose()
}
};
goog.disposeAll = function(var_args) {
for(var i = 0, len = arguments.length;i < len;++i) {
var disposable = arguments[i];
if(goog.isArrayLike(disposable)) {
goog.disposeAll.apply(null, disposable)
}else {
goog.dispose(disposable)
}
}
};
goog.provide("goog.events.Event");
goog.provide("goog.events.EventLike");
goog.require("goog.Disposable");
goog.events.EventLike;
goog.events.Event = function(type, opt_target) {
this.type = type;
this.target = opt_target;
this.currentTarget = this.target
};
goog.events.Event.prototype.disposeInternal = function() {
};
goog.events.Event.prototype.dispose = function() {
};
goog.events.Event.prototype.propagationStopped_ = false;
goog.events.Event.prototype.defaultPrevented = false;
goog.events.Event.prototype.returnValue_ = true;
goog.events.Event.prototype.stopPropagation = function() {
this.propagationStopped_ = true
};
goog.events.Event.prototype.preventDefault = function() {
this.defaultPrevented = true;
this.returnValue_ = false
};
goog.events.Event.stopPropagation = function(e) {
e.stopPropagation()
};
goog.events.Event.preventDefault = function(e) {
e.preventDefault()
};
goog.provide("goog.debug.EntryPointMonitor");
goog.provide("goog.debug.entryPointRegistry");
goog.require("goog.asserts");
goog.debug.EntryPointMonitor = function() {
};
goog.debug.EntryPointMonitor.prototype.wrap;
goog.debug.EntryPointMonitor.prototype.unwrap;
goog.debug.entryPointRegistry.refList_ = [];
goog.debug.entryPointRegistry.monitors_ = [];
goog.debug.entryPointRegistry.monitorsMayExist_ = false;
goog.debug.entryPointRegistry.register = function(callback) {
goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length] = callback;
if(goog.debug.entryPointRegistry.monitorsMayExist_) {
var monitors = goog.debug.entryPointRegistry.monitors_;
for(var i = 0;i < monitors.length;i++) {
callback(goog.bind(monitors[i].wrap, monitors[i]))
}
}
};
goog.debug.entryPointRegistry.monitorAll = function(monitor) {
goog.debug.entryPointRegistry.monitorsMayExist_ = true;
var transformer = goog.bind(monitor.wrap, monitor);
for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) {
goog.debug.entryPointRegistry.refList_[i](transformer)
}
goog.debug.entryPointRegistry.monitors_.push(monitor)
};
goog.debug.entryPointRegistry.unmonitorAllIfPossible = function(monitor) {
var monitors = goog.debug.entryPointRegistry.monitors_;
goog.asserts.assert(monitor == monitors[monitors.length - 1], "Only the most recent monitor can be unwrapped.");
var transformer = goog.bind(monitor.unwrap, monitor);
for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) {
goog.debug.entryPointRegistry.refList_[i](transformer)
}
monitors.length--
};
goog.provide("goog.events.BrowserFeature");
goog.require("goog.userAgent");
goog.events.BrowserFeature = {HAS_W3C_BUTTON:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), HAS_W3C_EVENT_SUPPORT:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), SET_KEY_CODE_TO_PREVENT_DEFAULT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), HAS_NAVIGATOR_ONLINE_PROPERTY:!goog.userAgent.WEBKIT || goog.userAgent.isVersionOrHigher("528"), HAS_HTML5_NETWORK_EVENT_SUPPORT:goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9b") || goog.userAgent.IE &&
goog.userAgent.isVersionOrHigher("8") || goog.userAgent.OPERA && goog.userAgent.isVersionOrHigher("9.5") || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("528"), HTML5_NETWORK_EVENTS_FIRE_ON_BODY:goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("8") || goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), TOUCH_ENABLED:"ontouchstart" in goog.global || !!(goog.global["document"] && document.documentElement && "ontouchstart" in document.documentElement) || !!(goog.global["navigator"] &&
goog.global["navigator"]["msMaxTouchPoints"])};
goog.provide("goog.events.EventType");
goog.require("goog.userAgent");
goog.events.EventType = {CLICK:"click", DBLCLICK:"dblclick", MOUSEDOWN:"mousedown", MOUSEUP:"mouseup", MOUSEOVER:"mouseover", MOUSEOUT:"mouseout", MOUSEMOVE:"mousemove", SELECTSTART:"selectstart", KEYPRESS:"keypress", KEYDOWN:"keydown", KEYUP:"keyup", BLUR:"blur", FOCUS:"focus", DEACTIVATE:"deactivate", FOCUSIN:goog.userAgent.IE ? "focusin" : "DOMFocusIn", FOCUSOUT:goog.userAgent.IE ? "focusout" : "DOMFocusOut", CHANGE:"change", SELECT:"select", SUBMIT:"submit", INPUT:"input", PROPERTYCHANGE:"propertychange",
DRAGSTART:"dragstart", DRAG:"drag", DRAGENTER:"dragenter", DRAGOVER:"dragover", DRAGLEAVE:"dragleave", DROP:"drop", DRAGEND:"dragend", TOUCHSTART:"touchstart", TOUCHMOVE:"touchmove", TOUCHEND:"touchend", TOUCHCANCEL:"touchcancel", BEFOREUNLOAD:"beforeunload", CONSOLEMESSAGE:"consolemessage", CONTEXTMENU:"contextmenu", DOMCONTENTLOADED:"DOMContentLoaded", ERROR:"error", HELP:"help", LOAD:"load", LOSECAPTURE:"losecapture", READYSTATECHANGE:"readystatechange", RESIZE:"resize", SCROLL:"scroll", UNLOAD:"unload",
HASHCHANGE:"hashchange", PAGEHIDE:"pagehide", PAGESHOW:"pageshow", POPSTATE:"popstate", COPY:"copy", PASTE:"paste", CUT:"cut", BEFORECOPY:"beforecopy", BEFORECUT:"beforecut", BEFOREPASTE:"beforepaste", ONLINE:"online", OFFLINE:"offline", MESSAGE:"message", CONNECT:"connect", TRANSITIONEND:goog.userAgent.WEBKIT ? "webkitTransitionEnd" : goog.userAgent.OPERA ? "oTransitionEnd" : "transitionend", MSGESTURECHANGE:"MSGestureChange", MSGESTUREEND:"MSGestureEnd", MSGESTUREHOLD:"MSGestureHold", MSGESTURESTART:"MSGestureStart",
MSGESTURETAP:"MSGestureTap", MSGOTPOINTERCAPTURE:"MSGotPointerCapture", MSINERTIASTART:"MSInertiaStart", MSLOSTPOINTERCAPTURE:"MSLostPointerCapture", MSPOINTERCANCEL:"MSPointerCancel", MSPOINTERDOWN:"MSPointerDown", MSPOINTERMOVE:"MSPointerMove", MSPOINTEROVER:"MSPointerOver", MSPOINTEROUT:"MSPointerOut", MSPOINTERUP:"MSPointerUp", TEXTINPUT:"textinput", COMPOSITIONSTART:"compositionstart", COMPOSITIONUPDATE:"compositionupdate", COMPOSITIONEND:"compositionend", EXIT:"exit", LOADABORT:"loadabort",
LOADCOMMIT:"loadcommit", LOADREDIRECT:"loadredirect", LOADSTART:"loadstart", LOADSTOP:"loadstop", RESPONSIVE:"responsive", SIZECHANGED:"sizechanged", UNRESPONSIVE:"unresponsive"};
goog.provide("goog.reflect");
goog.reflect.object = function(type, object) {
return object
};
goog.reflect.sinkValue = function(x) {
goog.reflect.sinkValue[" "](x);
return x
};
goog.reflect.sinkValue[" "] = goog.nullFunction;
goog.reflect.canAccessProperty = function(obj, prop) {
try {
goog.reflect.sinkValue(obj[prop]);
return true
}catch(e) {
}
return false
};
goog.provide("goog.events.BrowserEvent");
goog.provide("goog.events.BrowserEvent.MouseButton");
goog.require("goog.events.BrowserFeature");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.reflect");
goog.require("goog.userAgent");
goog.events.BrowserEvent = function(opt_e, opt_currentTarget) {
if(opt_e) {
this.init(opt_e, opt_currentTarget)
}
};
goog.inherits(goog.events.BrowserEvent, goog.events.Event);
goog.events.BrowserEvent.MouseButton = {LEFT:0, MIDDLE:1, RIGHT:2};
goog.events.BrowserEvent.IEButtonMap = [1, 4, 2];
goog.events.BrowserEvent.prototype.target = null;
goog.events.BrowserEvent.prototype.currentTarget;
goog.events.BrowserEvent.prototype.relatedTarget = null;
goog.events.BrowserEvent.prototype.offsetX = 0;
goog.events.BrowserEvent.prototype.offsetY = 0;
goog.events.BrowserEvent.prototype.clientX = 0;
goog.events.BrowserEvent.prototype.clientY = 0;
goog.events.BrowserEvent.prototype.screenX = 0;
goog.events.BrowserEvent.prototype.screenY = 0;
goog.events.BrowserEvent.prototype.button = 0;
goog.events.BrowserEvent.prototype.keyCode = 0;
goog.events.BrowserEvent.prototype.charCode = 0;
goog.events.BrowserEvent.prototype.ctrlKey = false;
goog.events.BrowserEvent.prototype.altKey = false;
goog.events.BrowserEvent.prototype.shiftKey = false;
goog.events.BrowserEvent.prototype.metaKey = false;
goog.events.BrowserEvent.prototype.state;
goog.events.BrowserEvent.prototype.platformModifierKey = false;
goog.events.BrowserEvent.prototype.event_ = null;
goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) {
var type = this.type = e.type;
goog.events.Event.call(this, type);
this.target = (e.target) || e.srcElement;
this.currentTarget = (opt_currentTarget);
var relatedTarget = (e.relatedTarget);
if(relatedTarget) {
if(goog.userAgent.GECKO) {
if(!goog.reflect.canAccessProperty(relatedTarget, "nodeName")) {
relatedTarget = null
}
}
}else {
if(type == goog.events.EventType.MOUSEOVER) {
relatedTarget = e.fromElement
}else {
if(type == goog.events.EventType.MOUSEOUT) {
relatedTarget = e.toElement
}
}
}
this.relatedTarget = relatedTarget;
this.offsetX = goog.userAgent.WEBKIT || e.offsetX !== undefined ? e.offsetX : e.layerX;
this.offsetY = goog.userAgent.WEBKIT || e.offsetY !== undefined ? e.offsetY : e.layerY;
this.clientX = e.clientX !== undefined ? e.clientX : e.pageX;
this.clientY = e.clientY !== undefined ? e.clientY : e.pageY;
this.screenX = e.screenX || 0;
this.screenY = e.screenY || 0;
this.button = e.button;
this.keyCode = e.keyCode || 0;
this.charCode = e.charCode || (type == "keypress" ? e.keyCode : 0);
this.ctrlKey = e.ctrlKey;
this.altKey = e.altKey;
this.shiftKey = e.shiftKey;
this.metaKey = e.metaKey;
this.platformModifierKey = goog.userAgent.MAC ? e.metaKey : e.ctrlKey;
this.state = e.state;
this.event_ = e;
if(e.defaultPrevented) {
this.preventDefault()
}
delete this.propagationStopped_
};
goog.events.BrowserEvent.prototype.isButton = function(button) {
if(!goog.events.BrowserFeature.HAS_W3C_BUTTON) {
if(this.type == "click") {
return button == goog.events.BrowserEvent.MouseButton.LEFT
}else {
return!!(this.event_.button & goog.events.BrowserEvent.IEButtonMap[button])
}
}else {
return this.event_.button == button
}
};
goog.events.BrowserEvent.prototype.isMouseActionButton = function() {
return this.isButton(goog.events.BrowserEvent.MouseButton.LEFT) && !(goog.userAgent.WEBKIT && goog.userAgent.MAC && this.ctrlKey)
};
goog.events.BrowserEvent.prototype.stopPropagation = function() {
goog.events.BrowserEvent.superClass_.stopPropagation.call(this);
if(this.event_.stopPropagation) {
this.event_.stopPropagation()
}else {
this.event_.cancelBubble = true
}
};
goog.events.BrowserEvent.prototype.preventDefault = function() {
goog.events.BrowserEvent.superClass_.preventDefault.call(this);
var be = this.event_;
if(!be.preventDefault) {
be.returnValue = false;
if(goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT) {
try {
var VK_F1 = 112;
var VK_F12 = 123;
if(be.ctrlKey || be.keyCode >= VK_F1 && be.keyCode <= VK_F12) {
be.keyCode = -1
}
}catch(ex) {
}
}
}else {
be.preventDefault()
}
};
goog.events.BrowserEvent.prototype.getBrowserEvent = function() {
return this.event_
};
goog.events.BrowserEvent.prototype.disposeInternal = function() {
};
goog.provide("goog.events.Listenable");
goog.provide("goog.events.ListenableKey");
goog.events.Listenable = function() {
};
goog.events.Listenable.IMPLEMENTED_BY_PROP = "closure_listenable_" + (Math.random() * 1E6 | 0);
goog.events.Listenable.addImplementation = function(cls) {
cls.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP] = true
};
goog.events.Listenable.isImplementedBy = function(obj) {
return!!(obj && obj[goog.events.Listenable.IMPLEMENTED_BY_PROP])
};
goog.events.Listenable.prototype.listen;
goog.events.Listenable.prototype.listenOnce;
goog.events.Listenable.prototype.unlisten;
goog.events.Listenable.prototype.unlistenByKey;
goog.events.Listenable.prototype.dispatchEvent;
goog.events.Listenable.prototype.removeAllListeners;
goog.events.Listenable.prototype.getParentEventTarget;
goog.events.Listenable.prototype.fireListeners;
goog.events.Listenable.prototype.getListeners;
goog.events.Listenable.prototype.getListener;
goog.events.Listenable.prototype.hasListener;
goog.events.ListenableKey = function() {
};
goog.events.ListenableKey.counter_ = 0;
goog.events.ListenableKey.reserveKey = function() {
return++goog.events.ListenableKey.counter_
};
goog.events.ListenableKey.prototype.src;
goog.events.ListenableKey.prototype.type;
goog.events.ListenableKey.prototype.listener;
goog.events.ListenableKey.prototype.capture;
goog.events.ListenableKey.prototype.handler;
goog.events.ListenableKey.prototype.key;
goog.provide("goog.events.Listener");
goog.require("goog.events.ListenableKey");
goog.events.Listener = function(listener, proxy, src, type, capture, opt_handler) {
if(goog.events.Listener.ENABLE_MONITORING) {
this.creationStack = (new Error).stack
}
this.listener = listener;
this.proxy = proxy;
this.src = src;
this.type = type;
this.capture = !!capture;
this.handler = opt_handler;
this.key = goog.events.ListenableKey.reserveKey();
this.callOnce = false;
this.removed = false
};
goog.define("goog.events.Listener.ENABLE_MONITORING", false);
goog.events.Listener.prototype.creationStack;
goog.events.Listener.prototype.markAsRemoved = function() {
this.removed = true;
this.listener = null;
this.proxy = null;
this.src = null;
this.handler = null
};
goog.provide("goog.events");
goog.provide("goog.events.Key");
goog.provide("goog.events.ListenableType");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug.entryPointRegistry");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.BrowserFeature");
goog.require("goog.events.Listenable");
goog.require("goog.events.Listener");
goog.require("goog.object");
goog.events.Key;
goog.events.ListenableType;
goog.events.listeners_ = {};
goog.events.listenerTree_ = {};
goog.events.sources_ = {};
goog.events.onString_ = "on";
goog.events.onStringMap_ = {};
goog.events.keySeparator_ = "_";
goog.events.listen = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.listen(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.listen((type), listener, opt_capt, opt_handler)
}else {
return goog.events.listen_((src), type, listener, false, opt_capt, opt_handler)
}
};
goog.events.listen_ = function(src, type, listener, callOnce, opt_capt, opt_handler) {
if(!type) {
throw Error("Invalid event type");
}
var capture = !!opt_capt;
var map = goog.events.listenerTree_;
if(!(type in map)) {
map[type] = {count_:0}
}
map = map[type];
if(!(capture in map)) {
map[capture] = {count_:0};
map.count_++
}
map = map[capture];
var srcUid = goog.getUid(src);
var listenerArray, listenerObj;
if(!map[srcUid]) {
listenerArray = map[srcUid] = [];
map.count_++
}else {
listenerArray = map[srcUid];
for(var i = 0;i < listenerArray.length;i++) {
listenerObj = listenerArray[i];
if(listenerObj.listener == listener && listenerObj.handler == opt_handler) {
if(listenerObj.removed) {
break
}
if(!callOnce) {
listenerArray[i].callOnce = false
}
return listenerArray[i]
}
}
}
var proxy = goog.events.getProxy();
listenerObj = new goog.events.Listener(listener, proxy, src, type, capture, opt_handler);
listenerObj.callOnce = callOnce;
proxy.src = src;
proxy.listener = listenerObj;
listenerArray.push(listenerObj);
if(!goog.events.sources_[srcUid]) {
goog.events.sources_[srcUid] = []
}
goog.events.sources_[srcUid].push(listenerObj);
if(src.addEventListener) {
src.addEventListener(type, proxy, capture)
}else {
src.attachEvent(goog.events.getOnString_(type), proxy)
}
var key = listenerObj.key;
goog.events.listeners_[key] = listenerObj;
return listenerObj
};
goog.events.getProxy = function() {
var proxyCallbackFunction = goog.events.handleBrowserEvent_;
var f = goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT ? function(eventObject) {
return proxyCallbackFunction.call(f.src, f.listener, eventObject)
} : function(eventObject) {
var v = proxyCallbackFunction.call(f.src, f.listener, eventObject);
if(!v) {
return v
}
};
return f
};
goog.events.listenOnce = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.listenOnce(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
var listenableKey;
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
listenableKey = src.listenOnce((type), listener, opt_capt, opt_handler)
}else {
listenableKey = goog.events.listen_((src), type, listener, true, opt_capt, opt_handler)
}
return listenableKey
};
goog.events.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.listen(src, listener, opt_capt, opt_handler)
};
goog.events.unlisten = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.unlisten(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.unlisten((type), listener, opt_capt, opt_handler)
}
var capture = !!opt_capt;
var listenerArray = goog.events.getListeners_(src, type, capture);
if(!listenerArray) {
return false
}
for(var i = 0;i < listenerArray.length;i++) {
if(listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) {
return goog.events.unlistenByKey(listenerArray[i])
}
}
return false
};
goog.events.unlistenByKey = function(key) {
if(goog.isNumber(key)) {
return false
}
var listener = (key);
if(!listener) {
return false
}
if(listener.removed) {
return false
}
var src = listener.src;
if(goog.events.Listenable.isImplementedBy(src)) {
return src.unlistenByKey(listener)
}
var type = listener.type;
var proxy = listener.proxy;
var capture = listener.capture;
if(src.removeEventListener) {
src.removeEventListener(type, proxy, capture)
}else {
if(src.detachEvent) {
src.detachEvent(goog.events.getOnString_(type), proxy)
}
}
var srcUid = goog.getUid(src);
if(goog.events.sources_[srcUid]) {
var sourcesArray = goog.events.sources_[srcUid];
goog.array.remove(sourcesArray, listener);
if(sourcesArray.length == 0) {
delete goog.events.sources_[srcUid]
}
}
listener.markAsRemoved();
var listenerArray = goog.events.listenerTree_[type][capture][srcUid];
if(listenerArray) {
goog.array.remove(listenerArray, listener);
if(listenerArray.length == 0) {
delete goog.events.listenerTree_[type][capture][srcUid];
goog.events.listenerTree_[type][capture].count_--
}
if(goog.events.listenerTree_[type][capture].count_ == 0) {
delete goog.events.listenerTree_[type][capture];
goog.events.listenerTree_[type].count_--
}
if(goog.events.listenerTree_[type].count_ == 0) {
delete goog.events.listenerTree_[type]
}
}
delete goog.events.listeners_[listener.key];
return true
};
goog.events.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.unlisten(src, listener, opt_capt, opt_handler)
};
goog.events.removeAll = function(opt_obj, opt_type) {
var count = 0;
var noObj = opt_obj == null;
var noType = opt_type == null;
if(!noObj) {
if(opt_obj && goog.events.Listenable.isImplementedBy(opt_obj)) {
return opt_obj.removeAllListeners(opt_type)
}
var srcUid = goog.getUid((opt_obj));
if(goog.events.sources_[srcUid]) {
var sourcesArray = goog.events.sources_[srcUid];
for(var i = sourcesArray.length - 1;i >= 0;i--) {
var listener = sourcesArray[i];
if(noType || opt_type == listener.type) {
goog.events.unlistenByKey(listener);
count++
}
}
}
}else {
goog.object.forEach(goog.events.listeners_, function(listener) {
goog.events.unlistenByKey(listener);
count++
})
}
return count
};
goog.events.removeAllNativeListeners = function() {
var count = 0;
goog.object.forEach(goog.events.listeners_, function(listener) {
goog.events.unlistenByKey(listener);
count++
});
return count
};
goog.events.getListeners = function(obj, type, capture) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.getListeners(type, capture)
}else {
return goog.events.getListeners_(obj, type, capture) || []
}
};
goog.events.getListeners_ = function(obj, type, capture) {
var map = goog.events.listenerTree_;
if(type in map) {
map = map[type];
if(capture in map) {
map = map[capture];
var objUid = goog.getUid(obj);
if(map[objUid]) {
return map[objUid]
}
}
}
return null
};
goog.events.getListener = function(src, type, listener, opt_capt, opt_handler) {
var capture = !!opt_capt;
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.getListener((type), listener, capture, opt_handler)
}
var listenerArray = goog.events.getListeners_(src, type, capture);
if(listenerArray) {
for(var i = 0;i < listenerArray.length;i++) {
if(!listenerArray[i].removed && listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) {
return listenerArray[i]
}
}
}
return null
};
goog.events.hasListener = function(obj, opt_type, opt_capture) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.hasListener(opt_type, opt_capture)
}
var objUid = goog.getUid(obj);
var listeners = goog.events.sources_[objUid];
if(listeners) {
var hasType = goog.isDef(opt_type);
var hasCapture = goog.isDef(opt_capture);
if(hasType && hasCapture) {
var map = goog.events.listenerTree_[opt_type];
return!!map && !!map[opt_capture] && objUid in map[opt_capture]
}else {
if(!(hasType || hasCapture)) {
return true
}else {
return goog.array.some(listeners, function(listener) {
return hasType && listener.type == opt_type || hasCapture && listener.capture == opt_capture
})
}
}
}
return false
};
goog.events.expose = function(e) {
var str = [];
for(var key in e) {
if(e[key] && e[key].id) {
str.push(key + " \x3d " + e[key] + " (" + e[key].id + ")")
}else {
str.push(key + " \x3d " + e[key])
}
}
return str.join("\n")
};
goog.events.getOnString_ = function(type) {
if(type in goog.events.onStringMap_) {
return goog.events.onStringMap_[type]
}
return goog.events.onStringMap_[type] = goog.events.onString_ + type
};
goog.events.fireListeners = function(obj, type, capture, eventObject) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.fireListeners(type, capture, eventObject)
}
var map = goog.events.listenerTree_;
if(type in map) {
map = map[type];
if(capture in map) {
return goog.events.fireListeners_(map[capture], obj, type, capture, eventObject)
}
}
return true
};
goog.events.fireListeners_ = function(map, obj, type, capture, eventObject) {
var retval = 1;
var objUid = goog.getUid(obj);
if(map[objUid]) {
var listenerArray = goog.array.clone(map[objUid]);
for(var i = 0;i < listenerArray.length;i++) {
var listener = listenerArray[i];
if(listener && !listener.removed) {
retval &= goog.events.fireListener(listener, eventObject) !== false
}
}
}
return Boolean(retval)
};
goog.events.fireListener = function(listener, eventObject) {
var listenerFn = listener.listener;
var listenerHandler = listener.handler || listener.src;
if(listener.callOnce) {
goog.events.unlistenByKey(listener)
}
return listenerFn.call(listenerHandler, eventObject)
};
goog.events.getTotalListenerCount = function() {
return goog.object.getCount(goog.events.listeners_)
};
goog.events.dispatchEvent = function(src, e) {
goog.asserts.assert(goog.events.Listenable.isImplementedBy(src), "Can not use goog.events.dispatchEvent with " + "non-goog.events.Listenable instance.");
return src.dispatchEvent(e)
};
goog.events.protectBrowserEventEntryPoint = function(errorHandler) {
goog.events.handleBrowserEvent_ = errorHandler.protectEntryPoint(goog.events.handleBrowserEvent_)
};
goog.events.handleBrowserEvent_ = function(listener, opt_evt) {
if(listener.removed) {
return true
}
var type = listener.type;
var map = goog.events.listenerTree_;
if(!(type in map)) {
return true
}
map = map[type];
var retval, targetsMap;
if(!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT) {
var ieEvent = opt_evt || (goog.getObjectByName("window.event"));
var hasCapture = true in map;
var hasBubble = false in map;
if(hasCapture) {
if(goog.events.isMarkedIeEvent_(ieEvent)) {
return true
}
goog.events.markIeEvent_(ieEvent)
}
var evt = new goog.events.BrowserEvent;
evt.init(ieEvent, this);
retval = true;
try {
if(hasCapture) {
var ancestors = [];
for(var parent = evt.currentTarget;parent;parent = parent.parentNode) {
ancestors.push(parent)
}
targetsMap = map[true];
for(var i = ancestors.length - 1;!evt.propagationStopped_ && i >= 0;i--) {
evt.currentTarget = ancestors[i];
retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, true, evt)
}
if(hasBubble) {
targetsMap = map[false];
for(var i = 0;!evt.propagationStopped_ && i < ancestors.length;i++) {
evt.currentTarget = ancestors[i];
retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, false, evt)
}
}
}else {
retval = goog.events.fireListener(listener, evt)
}
}finally {
if(ancestors) {
ancestors.length = 0
}
}
return retval
}
var be = new goog.events.BrowserEvent(opt_evt, (this));
retval = goog.events.fireListener(listener, be);
return retval
};
goog.events.markIeEvent_ = function(e) {
var useReturnValue = false;
if(e.keyCode == 0) {
try {
e.keyCode = -1;
return
}catch(ex) {
useReturnValue = true
}
}
if(useReturnValue || (e.returnValue) == undefined) {
e.returnValue = true
}
};
goog.events.isMarkedIeEvent_ = function(e) {
return e.keyCode < 0 || e.returnValue != undefined
};
goog.events.uniqueIdCounter_ = 0;
goog.events.getUniqueId = function(identifier) {
return identifier + "_" + goog.events.uniqueIdCounter_++
};
goog.events.LISTENER_WRAPPER_PROP_ = "__closure_events_fn_" + (Math.random() * 1E9 >>> 0);
goog.events.wrapListener_ = function(listener) {
goog.asserts.assert(listener, "Listener can not be null.");
if(goog.isFunction(listener)) {
return listener
}
goog.asserts.assert(listener.handleEvent, "An object listener must have handleEvent method.");
return listener[goog.events.LISTENER_WRAPPER_PROP_] || (listener[goog.events.LISTENER_WRAPPER_PROP_] = function(e) {
return listener.handleEvent(e)
})
};
goog.debug.entryPointRegistry.register(function(transformer) {
goog.events.handleBrowserEvent_ = transformer(goog.events.handleBrowserEvent_)
});
goog.provide("goog.functions");
goog.functions.constant = function(retValue) {
return function() {
return retValue
}
};
goog.functions.FALSE = goog.functions.constant(false);
goog.functions.TRUE = goog.functions.constant(true);
goog.functions.NULL = goog.functions.constant(null);
goog.functions.identity = function(opt_returnValue, var_args) {
return opt_returnValue
};
goog.functions.error = function(message) {
return function() {
throw Error(message);
}
};
goog.functions.fail = function(err) {
return function() {
throw err;
}
};
goog.functions.lock = function(f, opt_numArgs) {
opt_numArgs = opt_numArgs || 0;
return function() {
return f.apply(this, Array.prototype.slice.call(arguments, 0, opt_numArgs))
}
};
goog.functions.withReturnValue = function(f, retValue) {
return goog.functions.sequence(f, goog.functions.constant(retValue))
};
goog.functions.compose = function(fn, var_args) {
var functions = arguments;
var length = functions.length;
return function() {
var result;
if(length) {
result = functions[length - 1].apply(this, arguments)
}
for(var i = length - 2;i >= 0;i--) {
result = functions[i].call(this, result)
}
return result
}
};
goog.functions.sequence = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
var result;
for(var i = 0;i < length;i++) {
result = functions[i].apply(this, arguments)
}
return result
}
};
goog.functions.and = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
for(var i = 0;i < length;i++) {
if(!functions[i].apply(this, arguments)) {
return false
}
}
return true
}
};
goog.functions.or = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
for(var i = 0;i < length;i++) {
if(functions[i].apply(this, arguments)) {
return true
}
}
return false
}
};
goog.functions.not = function(f) {
return function() {
return!f.apply(this, arguments)
}
};
goog.functions.create = function(constructor, var_args) {
var temp = function() {
};
temp.prototype = constructor.prototype;
var obj = new temp;
constructor.apply(obj, Array.prototype.slice.call(arguments, 1));
return obj
};
goog.provide("goog.events.ListenerMap");
goog.require("goog.array");
goog.require("goog.events.Listener");
goog.require("goog.object");
goog.events.ListenerMap = function(src) {
this.src = src;
this.listeners = {};
this.typeCount_ = 0
};
goog.events.ListenerMap.prototype.getTypeCount = function() {
return this.typeCount_
};
goog.events.ListenerMap.prototype.getListenerCount = function() {
var count = 0;
for(var type in this.listeners) {
count += this.listeners[type].length
}
return count
};
goog.events.ListenerMap.prototype.add = function(type, listener, callOnce, opt_useCapture, opt_listenerScope) {
var listenerArray = this.listeners[type];
if(!listenerArray) {
listenerArray = this.listeners[type] = [];
this.typeCount_++
}
var listenerObj;
var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
if(index > -1) {
listenerObj = listenerArray[index];
if(!callOnce) {
listenerObj.callOnce = false
}
}else {
listenerObj = new goog.events.Listener(listener, null, this.src, type, !!opt_useCapture, opt_listenerScope);
listenerObj.callOnce = callOnce;
listenerArray.push(listenerObj)
}
return listenerObj
};
goog.events.ListenerMap.prototype.remove = function(type, listener, opt_useCapture, opt_listenerScope) {
if(!(type in this.listeners)) {
return false
}
var listenerArray = this.listeners[type];
var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
if(index > -1) {
var listenerObj = listenerArray[index];
listenerObj.markAsRemoved();
goog.array.removeAt(listenerArray, index);
if(listenerArray.length == 0) {
delete this.listeners[type];
this.typeCount_--
}
return true
}
return false
};
goog.events.ListenerMap.prototype.removeByKey = function(listener) {
var type = listener.type;
if(!(type in this.listeners)) {
return false
}
var removed = goog.array.remove(this.listeners[type], listener);
if(removed) {
listener.markAsRemoved();
if(this.listeners[type].length == 0) {
delete this.listeners[type];
this.typeCount_--
}
}
return removed
};
goog.events.ListenerMap.prototype.removeAll = function(opt_type) {
var count = 0;
for(var type in this.listeners) {
if(!opt_type || type == opt_type) {
var listenerArray = this.listeners[type];
for(var i = 0;i < listenerArray.length;i++) {
++count;
listenerArray[i].removed = true
}
delete this.listeners[type];
this.typeCount_--
}
}
return count
};
goog.events.ListenerMap.prototype.getListeners = function(type, capture) {
var listenerArray = this.listeners[type];
var rv = [];
if(listenerArray) {
for(var i = 0;i < listenerArray.length;++i) {
var listenerObj = listenerArray[i];
if(listenerObj.capture == capture) {
rv.push(listenerObj)
}
}
}
return rv
};
goog.events.ListenerMap.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
var listenerArray = this.listeners[type];
var i = -1;
if(listenerArray) {
i = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, capture, opt_listenerScope)
}
return i > -1 ? listenerArray[i] : null
};
goog.events.ListenerMap.prototype.hasListener = function(opt_type, opt_capture) {
var hasType = goog.isDef(opt_type);
var hasCapture = goog.isDef(opt_capture);
return goog.object.some(this.listeners, function(listenerArray, type) {
for(var i = 0;i < listenerArray.length;++i) {
if((!hasType || listenerArray[i].type == opt_type) && (!hasCapture || listenerArray[i].capture == opt_capture)) {
return true
}
}
return false
})
};
goog.events.ListenerMap.findListenerIndex_ = function(listenerArray, listener, opt_useCapture, opt_listenerScope) {
for(var i = 0;i < listenerArray.length;++i) {
var listenerObj = listenerArray[i];
if(!listenerObj.removed && listenerObj.listener == listener && listenerObj.capture == !!opt_useCapture && listenerObj.handler == opt_listenerScope) {
return i
}
}
return-1
};
goog.provide("goog.events.EventTarget");
goog.require("goog.Disposable");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.Listenable");
goog.require("goog.events.ListenerMap");
goog.require("goog.object");
goog.events.EventTarget = function() {
goog.Disposable.call(this);
this.eventTargetListeners_ = new goog.events.ListenerMap(this);
this.actualEventTarget_ = this
};
goog.inherits(goog.events.EventTarget, goog.Disposable);
goog.events.Listenable.addImplementation(goog.events.EventTarget);
goog.events.EventTarget.MAX_ANCESTORS_ = 1E3;
goog.events.EventTarget.prototype.parentEventTarget_ = null;
goog.events.EventTarget.prototype.getParentEventTarget = function() {
return this.parentEventTarget_
};
goog.events.EventTarget.prototype.setParentEventTarget = function(parent) {
this.parentEventTarget_ = parent
};
goog.events.EventTarget.prototype.addEventListener = function(type, handler, opt_capture, opt_handlerScope) {
goog.events.listen(this, type, handler, opt_capture, opt_handlerScope)
};
goog.events.EventTarget.prototype.removeEventListener = function(type, handler, opt_capture, opt_handlerScope) {
goog.events.unlisten(this, type, handler, opt_capture, opt_handlerScope)
};
goog.events.EventTarget.prototype.dispatchEvent = function(e) {
this.assertInitialized_();
var ancestorsTree, ancestor = this.getParentEventTarget();
if(ancestor) {
ancestorsTree = [];
var ancestorCount = 1;
for(;ancestor;ancestor = ancestor.getParentEventTarget()) {
ancestorsTree.push(ancestor);
goog.asserts.assert(++ancestorCount < goog.events.EventTarget.MAX_ANCESTORS_, "infinite loop")
}
}
return goog.events.EventTarget.dispatchEventInternal_(this.actualEventTarget_, e, ancestorsTree)
};
goog.events.EventTarget.prototype.disposeInternal = function() {
goog.events.EventTarget.superClass_.disposeInternal.call(this);
this.removeAllListeners();
this.parentEventTarget_ = null
};
goog.events.EventTarget.prototype.listen = function(type, listener, opt_useCapture, opt_listenerScope) {
this.assertInitialized_();
return this.eventTargetListeners_.add(type, listener, false, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.listenOnce = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.add(type, listener, true, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.unlisten = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.remove(type, listener, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.unlistenByKey = function(key) {
return this.eventTargetListeners_.removeByKey(key)
};
goog.events.EventTarget.prototype.removeAllListeners = function(opt_type) {
if(!this.eventTargetListeners_) {
return 0
}
return this.eventTargetListeners_.removeAll(opt_type)
};
goog.events.EventTarget.prototype.fireListeners = function(type, capture, eventObject) {
var listenerArray = this.eventTargetListeners_.listeners[type];
if(!listenerArray) {
return true
}
listenerArray = goog.array.clone(listenerArray);
var rv = true;
for(var i = 0;i < listenerArray.length;++i) {
var listener = listenerArray[i];
if(listener && !listener.removed && listener.capture == capture) {
var listenerFn = listener.listener;
var listenerHandler = listener.handler || listener.src;
if(listener.callOnce) {
this.unlistenByKey(listener)
}
rv = listenerFn.call(listenerHandler, eventObject) !== false && rv
}
}
return rv && eventObject.returnValue_ != false
};
goog.events.EventTarget.prototype.getListeners = function(type, capture) {
return this.eventTargetListeners_.getListeners(type, capture)
};
goog.events.EventTarget.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
return this.eventTargetListeners_.getListener(type, listener, capture, opt_listenerScope)
};
goog.events.EventTarget.prototype.hasListener = function(opt_type, opt_capture) {
return this.eventTargetListeners_.hasListener(opt_type, opt_capture)
};
goog.events.EventTarget.prototype.setTargetForTesting = function(target) {
this.actualEventTarget_ = target
};
goog.events.EventTarget.prototype.assertInitialized_ = function() {
goog.asserts.assert(this.eventTargetListeners_, "Event target is not initialized. Did you call the superclass " + "(goog.events.EventTarget) constructor?")
};
goog.events.EventTarget.dispatchEventInternal_ = function(target, e, opt_ancestorsTree) {
var type = e.type || (e);
if(goog.isString(e)) {
e = new goog.events.Event(e, target)
}else {
if(!(e instanceof goog.events.Event)) {
var oldEvent = e;
e = new goog.events.Event(type, target);
goog.object.extend(e, oldEvent)
}else {
e.target = e.target || target
}
}
var rv = true, currentTarget;
if(opt_ancestorsTree) {
for(var i = opt_ancestorsTree.length - 1;!e.propagationStopped_ && i >= 0;i--) {
currentTarget = e.currentTarget = opt_ancestorsTree[i];
rv = currentTarget.fireListeners(type, true, e) && rv
}
}
if(!e.propagationStopped_) {
currentTarget = e.currentTarget = target;
rv = currentTarget.fireListeners(type, true, e) && rv;
if(!e.propagationStopped_) {
rv = currentTarget.fireListeners(type, false, e) && rv
}
}
if(opt_ancestorsTree) {
for(i = 0;!e.propagationStopped_ && i < opt_ancestorsTree.length;i++) {
currentTarget = e.currentTarget = opt_ancestorsTree[i];
rv = currentTarget.fireListeners(type, false, e) && rv
}
}
return rv
};
goog.provide("ol.Observable");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
ol.Observable = function() {
goog.base(this);
this.revision_ = 0
};
goog.inherits(ol.Observable, goog.events.EventTarget);
ol.Observable.prototype.dispatchChangeEvent = function() {
++this.revision_;
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.Observable.prototype.getRevision = function() {
return this.revision_
};
ol.Observable.prototype.on = function(type, listener, opt_this) {
return goog.events.listen(this, type, listener, false, opt_this)
};
ol.Observable.prototype.once = function(type, listener, opt_this) {
return goog.events.listenOnce(this, type, listener, false, opt_this)
};
ol.Observable.prototype.un = function(type, listener, opt_this) {
goog.events.unlisten(this, type, listener, false, opt_this)
};
ol.Observable.prototype.unByKey = function(key) {
goog.events.unlistenByKey(key)
};
goog.provide("ol.Object");
goog.provide("ol.ObjectEvent");
goog.provide("ol.ObjectEventType");
goog.require("goog.array");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("ol.Observable");
ol.ObjectEventType = {BEFOREPROPERTYCHANGE:"beforepropertychange", PROPERTYCHANGE:"propertychange"};
ol.ObjectEvent = function(type, key) {
goog.base(this, type);
this.key = key
};
goog.inherits(ol.ObjectEvent, goog.events.Event);
ol.ObjectAccessor = function(target, key) {
this.target = target;
this.key = key;
this.from = goog.functions.identity;
this.to = goog.functions.identity
};
ol.ObjectAccessor.prototype.transform = function(from, to) {
this.from = from;
this.to = to;
this.target.notify(this.key)
};
ol.Object = function(opt_values) {
goog.base(this);
goog.getUid(this);
this.values_ = {};
this.accessors_ = {};
this.beforeChangeListeners_ = {};
this.listeners_ = {};
if(goog.isDef(opt_values)) {
this.setValues(opt_values)
}
};
goog.inherits(ol.Object, ol.Observable);
ol.Object.changeEventTypeCache_ = {};
ol.Object.getterNameCache_ = {};
ol.Object.setterNameCache_ = {};
ol.Object.capitalize = function(str) {
return str.substr(0, 1).toUpperCase() + str.substr(1)
};
ol.Object.getChangeEventType = function(key) {
return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ? ol.Object.changeEventTypeCache_[key] : ol.Object.changeEventTypeCache_[key] = "change:" + key.toLowerCase()
};
ol.Object.getGetterName = function(key) {
return ol.Object.getterNameCache_.hasOwnProperty(key) ? ol.Object.getterNameCache_[key] : ol.Object.getterNameCache_[key] = "get" + ol.Object.capitalize(key)
};
ol.Object.getSetterName = function(key) {
return ol.Object.setterNameCache_.hasOwnProperty(key) ? ol.Object.setterNameCache_[key] : ol.Object.setterNameCache_[key] = "set" + ol.Object.capitalize(key)
};
ol.Object.prototype.bindTo = function(key, target, opt_targetKey) {
var targetKey = opt_targetKey || key;
this.unbind(key);
var eventType = ol.Object.getChangeEventType(targetKey);
this.listeners_[key] = goog.events.listen(target, eventType, function() {
this.notifyInternal_(key)
}, undefined, this);
this.beforeChangeListeners_[key] = goog.events.listen(target, ol.ObjectEventType.BEFOREPROPERTYCHANGE, this.createBeforeChangeListener_(key, targetKey), undefined, this);
var accessor = new ol.ObjectAccessor(target, targetKey);
this.accessors_[key] = accessor;
this.notifyInternal_(key);
return accessor
};
ol.Object.prototype.createBeforeChangeListener_ = function(key, targetKey) {
return function(event) {
if(event.key === targetKey) {
this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key))
}
}
};
ol.Object.prototype.get = function(key) {
var value;
var accessors = this.accessors_;
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
var getterName = ol.Object.getGetterName(targetKey);
var getter = (goog.object.get(target, getterName));
if(goog.isDef(getter)) {
value = getter.call(target)
}else {
value = target.get(targetKey)
}
value = accessor.to(value)
}else {
if(this.values_.hasOwnProperty(key)) {
value = this.values_[key]
}
}
return value
};
ol.Object.prototype.getKeys = function() {
var accessors = this.accessors_;
var keysObject;
if(goog.object.isEmpty(this.values_)) {
if(goog.object.isEmpty(accessors)) {
return[]
}else {
keysObject = accessors
}
}else {
if(goog.object.isEmpty(accessors)) {
keysObject = this.values_
}else {
keysObject = {};
var key;
for(key in this.values_) {
keysObject[key] = true
}
for(key in accessors) {
keysObject[key] = true
}
}
}
return goog.object.getKeys(keysObject)
};
ol.Object.prototype.getProperties = function() {
var properties = {};
var key;
for(key in this.values_) {
properties[key] = this.values_[key]
}
for(key in this.accessors_) {
properties[key] = this.get(key)
}
return properties
};
ol.Object.prototype.notify = function(key) {
var accessors = this.accessors_;
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
target.notify(targetKey)
}else {
this.notifyInternal_(key)
}
};
ol.Object.prototype.notifyInternal_ = function(key) {
var eventType = ol.Object.getChangeEventType(key);
this.dispatchEvent(eventType);
this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.PROPERTYCHANGE, key))
};
ol.Object.prototype.set = function(key, value) {
this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key));
var accessors = this.accessors_;
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
value = accessor.from(value);
var setterName = ol.Object.getSetterName(targetKey);
var setter = (goog.object.get(target, setterName));
if(goog.isDef(setter)) {
setter.call(target, value)
}else {
target.set(targetKey, value)
}
}else {
this.values_[key] = value;
this.notifyInternal_(key)
}
};
ol.Object.prototype.setValues = function(values) {
var key;
for(key in values) {
this.set(key, values[key])
}
};
ol.Object.prototype.unbind = function(key) {
var listeners = this.listeners_;
var listener = listeners[key];
if(listener) {
delete listeners[key];
goog.events.unlistenByKey(listener);
var value = this.get(key);
delete this.accessors_[key];
this.values_[key] = value
}
var listenerKey = this.beforeChangeListeners_[key];
if(listenerKey) {
goog.events.unlistenByKey(listenerKey);
delete this.beforeChangeListeners_[key]
}
};
ol.Object.prototype.unbindAll = function() {
for(var key in this.listeners_) {
this.unbind(key)
}
};
goog.provide("ol.Collection");
goog.provide("ol.CollectionEvent");
goog.provide("ol.CollectionEventType");
goog.require("goog.array");
goog.require("goog.events.Event");
goog.require("ol.Object");
ol.CollectionEventType = {ADD:"add", REMOVE:"remove"};
ol.CollectionEvent = function(type, opt_element, opt_target) {
goog.base(this, type, opt_target);
this.element = opt_element
};
goog.inherits(ol.CollectionEvent, goog.events.Event);
ol.CollectionProperty = {LENGTH:"length"};
ol.Collection = function(opt_array) {
goog.base(this);
this.array_ = opt_array || [];
this.updateLength_()
};
goog.inherits(ol.Collection, ol.Object);
ol.Collection.prototype.clear = function() {
while(this.getLength() > 0) {
this.pop()
}
};
ol.Collection.prototype.extend = function(arr) {
var i, ii;
for(i = 0, ii = arr.length;i < ii;++i) {
this.push(arr[i])
}
return this
};
ol.Collection.prototype.forEach = function(f, opt_this) {
goog.array.forEach(this.array_, f, opt_this)
};
ol.Collection.prototype.getArray = function() {
return this.array_
};
ol.Collection.prototype.getAt = function(index) {
return this.array_[index]
};
ol.Collection.prototype.getLength = function() {
return(this.get(ol.CollectionProperty.LENGTH))
};
ol.Collection.prototype.insertAt = function(index, elem) {
goog.array.insertAt(this.array_, elem, index);
this.updateLength_();
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this))
};
ol.Collection.prototype.pop = function() {
return this.removeAt(this.getLength() - 1)
};
ol.Collection.prototype.push = function(elem) {
var n = this.array_.length;
this.insertAt(n, elem);
return n
};
ol.Collection.prototype.remove = function(elem) {
var arr = this.array_;
var i, ii;
for(i = 0, ii = arr.length;i < ii;++i) {
if(arr[i] === elem) {
return this.removeAt(i)
}
}
return undefined
};
ol.Collection.prototype.removeAt = function(index) {
var prev = this.array_[index];
goog.array.removeAt(this.array_, index);
this.updateLength_();
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this));
return prev
};
ol.Collection.prototype.setAt = function(index, elem) {
var n = this.getLength();
if(index < n) {
var prev = this.array_[index];
this.array_[index] = elem;
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this));
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this))
}else {
var j;
for(j = n;j < index;++j) {
this.insertAt(j, undefined)
}
this.insertAt(index, elem)
}
};
ol.Collection.prototype.updateLength_ = function() {
this.set(ol.CollectionProperty.LENGTH, this.array_.length)
};
goog.provide("ol.Coordinate");
goog.provide("ol.CoordinateArray");
goog.provide("ol.CoordinateFormatType");
goog.provide("ol.coordinate");
goog.require("goog.math");
ol.CoordinateFormatType;
ol.Coordinate;
ol.CoordinateArray;
ol.coordinate.add = function(coordinate, delta) {
coordinate[0] += delta[0];
coordinate[1] += delta[1];
return coordinate
};
ol.coordinate.closestOnSegment = function(coordinate, segment) {
var x0 = coordinate[0];
var y0 = coordinate[1];
var start = segment[0];
var end = segment[1];
var x1 = start[0];
var y1 = start[1];
var x2 = end[0];
var y2 = end[1];
var dx = x2 - x1;
var dy = y2 - y1;
var along = dx === 0 && dy === 0 ? 0 : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);
var x, y;
if(along <= 0) {
x = x1;
y = y1
}else {
if(along >= 1) {
x = x2;
y = y2
}else {
x = x1 + along * dx;
y = y1 + along * dy
}
}
return[x, y]
};
ol.coordinate.createStringXY = function(opt_fractionDigits) {
return function(coordinate) {
return ol.coordinate.toStringXY(coordinate, opt_fractionDigits)
}
};
ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres) {
var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180;
var x = Math.abs(Math.round(3600 * normalizedDegrees));
return Math.floor(x / 3600) + "\u00b0 " + Math.floor(x / 60 % 60) + "\u2032 " + Math.floor(x % 60) + "\u2033 " + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)
};
ol.coordinate.format = function(coordinate, template, opt_fractionDigits) {
if(goog.isDef(coordinate)) {
return template.replace("{x}", coordinate[0].toFixed(opt_fractionDigits)).replace("{y}", coordinate[1].toFixed(opt_fractionDigits))
}else {
return""
}
};
ol.coordinate.equals = function(coordinate1, coordinate2) {
var equals = true;
for(var i = coordinate1.length - 1;i >= 0;--i) {
if(coordinate1[i] != coordinate2[i]) {
equals = false;
break
}
}
return equals
};
ol.coordinate.rotate = function(coordinate, angle) {
var cosAngle = Math.cos(angle);
var sinAngle = Math.sin(angle);
var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
coordinate[0] = x;
coordinate[1] = y;
return coordinate
};
ol.coordinate.scale = function(coordinate, s) {
coordinate[0] *= s;
coordinate[1] *= s;
return coordinate
};
ol.coordinate.sub = function(coordinate, delta) {
coordinate[0] -= delta[0];
coordinate[1] -= delta[1];
return coordinate
};
ol.coordinate.squaredDistance = function(coord1, coord2) {
var dx = coord1[0] - coord2[0];
var dy = coord1[1] - coord2[1];
return dx * dx + dy * dy
};
ol.coordinate.squaredDistanceToSegment = function(coordinate, segment) {
return ol.coordinate.squaredDistance(coordinate, ol.coordinate.closestOnSegment(coordinate, segment))
};
ol.coordinate.toStringHDMS = function(coordinate) {
if(goog.isDef(coordinate)) {
return ol.coordinate.degreesToStringHDMS_(coordinate[1], "NS") + " " + ol.coordinate.degreesToStringHDMS_(coordinate[0], "EW")
}else {
return""
}
};
ol.coordinate.toStringXY = function(coordinate, opt_fractionDigits) {
return ol.coordinate.format(coordinate, "{x}, {y}", opt_fractionDigits)
};
ol.coordinate.fromProjectedArray = function(array, axis) {
var firstAxis = axis.charAt(0);
if(firstAxis === "n" || firstAxis === "s") {
return[array[1], array[0]]
}else {
return array
}
};
goog.provide("ol.DeviceOrientation");
goog.provide("ol.DeviceOrientationProperty");
goog.require("goog.events");
goog.require("goog.math");
goog.require("ol.BrowserFeature");
goog.require("ol.Object");
ol.DeviceOrientationProperty = {ALPHA:"alpha", BETA:"beta", GAMMA:"gamma", HEADING:"heading", TRACKING:"tracking"};
ol.DeviceOrientation = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.listenerKey_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING), this.handleTrackingChanged_, false, this);
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false)
};
goog.inherits(ol.DeviceOrientation, ol.Object);
ol.DeviceOrientation.prototype.disposeInternal = function() {
this.setTracking(false);
goog.base(this, "disposeInternal")
};
ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) {
var event = (browserEvent.getBrowserEvent());
if(goog.isDefAndNotNull(event.alpha)) {
var alpha = goog.math.toRadians(event.alpha);
this.set(ol.DeviceOrientationProperty.ALPHA, alpha);
if(goog.isBoolean(event.absolute) && event.absolute) {
this.set(ol.DeviceOrientationProperty.HEADING, alpha)
}else {
if(goog.isDefAndNotNull(event.webkitCompassHeading) && goog.isDefAndNotNull(event.webkitCompassAccuracy) && event.webkitCompassAccuracy != -1) {
var heading = goog.math.toRadians(event.webkitCompassHeading);
this.set(ol.DeviceOrientationProperty.HEADING, heading)
}
}
}
if(goog.isDefAndNotNull(event.beta)) {
this.set(ol.DeviceOrientationProperty.BETA, goog.math.toRadians(event.beta))
}
if(goog.isDefAndNotNull(event.gamma)) {
this.set(ol.DeviceOrientationProperty.GAMMA, goog.math.toRadians(event.gamma))
}
this.dispatchChangeEvent()
};
ol.DeviceOrientation.prototype.getAlpha = function() {
return(this.get(ol.DeviceOrientationProperty.ALPHA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getAlpha", ol.DeviceOrientation.prototype.getAlpha);
ol.DeviceOrientation.prototype.getBeta = function() {
return(this.get(ol.DeviceOrientationProperty.BETA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getBeta", ol.DeviceOrientation.prototype.getBeta);
ol.DeviceOrientation.prototype.getGamma = function() {
return(this.get(ol.DeviceOrientationProperty.GAMMA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getGamma", ol.DeviceOrientation.prototype.getGamma);
ol.DeviceOrientation.prototype.getHeading = function() {
return(this.get(ol.DeviceOrientationProperty.HEADING))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getHeading", ol.DeviceOrientation.prototype.getHeading);
ol.DeviceOrientation.prototype.getTracking = function() {
return(this.get(ol.DeviceOrientationProperty.TRACKING))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getTracking", ol.DeviceOrientation.prototype.getTracking);
ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() {
if(ol.BrowserFeature.HAS_DEVICE_ORIENTATION) {
var tracking = this.getTracking();
if(tracking && goog.isNull(this.listenerKey_)) {
this.listenerKey_ = goog.events.listen(goog.global, "deviceorientation", this.orientationChange_, false, this)
}else {
if(!tracking && !goog.isNull(this.listenerKey_)) {
goog.events.unlistenByKey(this.listenerKey_);
this.listenerKey_ = null
}
}
}
};
ol.DeviceOrientation.prototype.setTracking = function(tracking) {
this.set(ol.DeviceOrientationProperty.TRACKING, tracking)
};
goog.exportProperty(ol.DeviceOrientation.prototype, "setTracking", ol.DeviceOrientation.prototype.setTracking);
goog.provide("ol.MapEvent");
goog.provide("ol.MapEventType");
goog.require("goog.events.Event");
ol.MapEventType = {POSTRENDER:"postrender", MOVEEND:"moveend"};
ol.MapEvent = function(type, map, opt_frameState) {
goog.base(this, type);
this.map = map;
this.frameState = goog.isDef(opt_frameState) ? opt_frameState : null
};
goog.inherits(ol.MapEvent, goog.events.Event);
goog.provide("ol.Pixel");
ol.Pixel;
goog.provide("ol.pointer.PointerEvent");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.object");
ol.pointer.PointerEvent = function(type, browserEvent, opt_eventDict) {
goog.base(this, type);
this.browserEvent = browserEvent;
var eventDict = goog.isDef(opt_eventDict) ? opt_eventDict : {};
this.buttons = this.getButtons_(eventDict);
this.pressure = this.getPressure_(eventDict, this.buttons);
this.bubbles = goog.object.get(eventDict, "bubbles", false);
this.cancelable = goog.object.get(eventDict, "cancelable", false);
this.view = goog.object.get(eventDict, "view", null);
this.detail = goog.object.get(eventDict, "detail", null);
this.screenX = goog.object.get(eventDict, "screenX", 0);
this.screenY = goog.object.get(eventDict, "screenY", 0);
this.clientX = goog.object.get(eventDict, "clientX", 0);
this.clientY = goog.object.get(eventDict, "clientY", 0);
this.ctrlKey = goog.object.get(eventDict, "ctrlKey", false);
this.altKey = goog.object.get(eventDict, "altKey", false);
this.shiftKey = goog.object.get(eventDict, "shiftKey", false);
this.metaKey = goog.object.get(eventDict, "metaKey", false);
this.button = goog.object.get(eventDict, "button", 0);
this.relatedTarget = goog.object.get(eventDict, "relatedTarget", null);
this.pointerId = goog.object.get(eventDict, "pointerId", 0);
this.width = goog.object.get(eventDict, "width", 0);
this.height = goog.object.get(eventDict, "height", 0);
this.tiltX = goog.object.get(eventDict, "tiltX", 0);
this.tiltY = goog.object.get(eventDict, "tiltY", 0);
this.pointerType = goog.object.get(eventDict, "pointerType", "");
this.hwTimestamp = goog.object.get(eventDict, "hwTimestamp", 0);
this.isPrimary = goog.object.get(eventDict, "isPrimary", false);
if(browserEvent.preventDefault) {
this.preventDefault = function() {
browserEvent.preventDefault()
}
}
};
goog.inherits(ol.pointer.PointerEvent, goog.events.Event);
ol.pointer.PointerEvent.prototype.getButtons_ = function(eventDict) {
var buttons;
if(eventDict.buttons || ol.pointer.PointerEvent.HAS_BUTTONS) {
buttons = eventDict.buttons
}else {
switch(eventDict.which) {
case 1:
buttons = 1;
break;
case 2:
buttons = 4;
break;
case 3:
buttons = 2;
break;
default:
buttons = 0
}
}
return buttons
};
ol.pointer.PointerEvent.prototype.getPressure_ = function(eventDict, buttons) {
var pressure = 0;
if(eventDict.pressure) {
pressure = eventDict.pressure
}else {
pressure = buttons ? 0.5 : 0
}
return pressure
};
ol.pointer.PointerEvent.createMouseEvent = function(inType, inDict) {
return new MouseEvent(inType, inDict)
};
ol.pointer.PointerEvent.HAS_BUTTONS = false;
(function() {
try {
var ev = ol.pointer.PointerEvent.createMouseEvent("click", {buttons:1});
ol.pointer.PointerEvent.HAS_BUTTONS = ev.buttons === 1
}catch(e) {
}
})();
goog.provide("ol.pointer.EventSource");
goog.require("goog.events.BrowserEvent");
goog.require("goog.object");
ol.pointer.EventSource = function(dispatcher, mapping) {
this.dispatcher = dispatcher;
this.mapping_ = mapping
};
ol.pointer.EventSource.prototype.getEvents = function() {
return goog.object.getKeys(this.mapping_)
};
ol.pointer.EventSource.prototype.getMapping = function() {
return this.mapping_
};
ol.pointer.EventSource.prototype.getHandlerForEvent = function(eventType) {
return this.mapping_[eventType]
};
goog.provide("ol.pointer.MouseSource");
goog.require("goog.object");
goog.require("ol.pointer.EventSource");
ol.pointer.MouseSource = function(dispatcher) {
var mapping = {"mousedown":this.mousedown, "mousemove":this.mousemove, "mouseup":this.mouseup, "mouseover":this.mouseover, "mouseout":this.mouseout};
goog.base(this, dispatcher, mapping);
this.pointerMap = dispatcher.pointerMap;
this.lastTouches = []
};
goog.inherits(ol.pointer.MouseSource, ol.pointer.EventSource);
ol.pointer.MouseSource.POINTER_ID = 1;
ol.pointer.MouseSource.POINTER_TYPE = "mouse";
ol.pointer.MouseSource.DEDUP_DIST = 25;
ol.pointer.MouseSource.prototype.isEventSimulatedFromTouch_ = function(inEvent) {
var lts = this.lastTouches;
var x = inEvent.clientX, y = inEvent.clientY;
for(var i = 0, l = lts.length, t;i < l && (t = lts[i]);i++) {
var dx = Math.abs(x - t[0]), dy = Math.abs(y - t[1]);
if(dx <= ol.pointer.MouseSource.DEDUP_DIST && dy <= ol.pointer.MouseSource.DEDUP_DIST) {
return true
}
}
return false
};
ol.pointer.MouseSource.prepareEvent = function(inEvent, dispatcher) {
var e = dispatcher.cloneEvent(inEvent, inEvent.getBrowserEvent());
var pd = e.preventDefault;
e.preventDefault = function() {
inEvent.preventDefault();
pd()
};
e.pointerId = ol.pointer.MouseSource.POINTER_ID;
e.isPrimary = true;
e.pointerType = ol.pointer.MouseSource.POINTER_TYPE;
return e
};
ol.pointer.MouseSource.prototype.mousedown = function(inEvent) {
if(!this.isEventSimulatedFromTouch_(inEvent)) {
var p = goog.object.containsKey(this.pointerMap, ol.pointer.MouseSource.POINTER_ID.toString());
if(p) {
this.cancel(inEvent)
}
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
goog.object.set(this.pointerMap, ol.pointer.MouseSource.POINTER_ID.toString(), inEvent);
this.dispatcher.down(e, inEvent)
}
};
ol.pointer.MouseSource.prototype.mousemove = function(inEvent) {
if(!this.isEventSimulatedFromTouch_(inEvent)) {
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
this.dispatcher.move(e, inEvent)
}
};
ol.pointer.MouseSource.prototype.mouseup = function(inEvent) {
if(!this.isEventSimulatedFromTouch_(inEvent)) {
var p = goog.object.get(this.pointerMap, ol.pointer.MouseSource.POINTER_ID.toString());
if(p && p.button === inEvent.button) {
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
this.dispatcher.up(e, inEvent);
this.cleanupMouse()
}
}
};
ol.pointer.MouseSource.prototype.mouseover = function(inEvent) {
if(!this.isEventSimulatedFromTouch_(inEvent)) {
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
this.dispatcher.enterOver(e, inEvent)
}
};
ol.pointer.MouseSource.prototype.mouseout = function(inEvent) {
if(!this.isEventSimulatedFromTouch_(inEvent)) {
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
this.dispatcher.leaveOut(e, inEvent)
}
};
ol.pointer.MouseSource.prototype.cancel = function(inEvent) {
var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
this.dispatcher.cancel(e, inEvent);
this.cleanupMouse()
};
ol.pointer.MouseSource.prototype.cleanupMouse = function() {
goog.object.remove(this.pointerMap, ol.pointer.MouseSource.POINTER_ID.toString())
};
goog.provide("ol.pointer.MsSource");
goog.require("goog.object");
goog.require("ol.pointer.EventSource");
ol.pointer.MsSource = function(dispatcher) {
var mapping = {"MSPointerDown":this.msPointerDown, "MSPointerMove":this.msPointerMove, "MSPointerUp":this.msPointerUp, "MSPointerOut":this.msPointerOut, "MSPointerOver":this.msPointerOver, "MSPointerCancel":this.msPointerCancel, "MSGotPointerCapture":this.msGotPointerCapture, "MSLostPointerCapture":this.msLostPointerCapture};
goog.base(this, dispatcher, mapping);
this.pointerMap = dispatcher.pointerMap;
this.POINTER_TYPES = ["", "unavailable", "touch", "pen", "mouse"]
};
goog.inherits(ol.pointer.MsSource, ol.pointer.EventSource);
ol.pointer.MsSource.prototype.prepareEvent_ = function(inEvent) {
var e = inEvent;
if(goog.isNumber(inEvent.getBrowserEvent().pointerType)) {
e = this.dispatcher.cloneEvent(inEvent, inEvent.getBrowserEvent());
e.pointerType = this.POINTER_TYPES[inEvent.getBrowserEvent().pointerType]
}
return e
};
ol.pointer.MsSource.prototype.cleanup = function(pointerId) {
goog.object.remove(this.pointerMap, pointerId)
};
ol.pointer.MsSource.prototype.msPointerDown = function(inEvent) {
goog.object.set(this.pointerMap, inEvent.getBrowserEvent().pointerId, inEvent);
var e = this.prepareEvent_(inEvent);
this.dispatcher.down(e, inEvent)
};
ol.pointer.MsSource.prototype.msPointerMove = function(inEvent) {
var e = this.prepareEvent_(inEvent);
this.dispatcher.move(e, inEvent)
};
ol.pointer.MsSource.prototype.msPointerUp = function(inEvent) {
var e = this.prepareEvent_(inEvent);
this.dispatcher.up(e, inEvent);
this.cleanup(inEvent.getBrowserEvent().pointerId)
};
ol.pointer.MsSource.prototype.msPointerOut = function(inEvent) {
var e = this.prepareEvent_(inEvent);
this.dispatcher.leaveOut(e, inEvent)
};
ol.pointer.MsSource.prototype.msPointerOver = function(inEvent) {
var e = this.prepareEvent_(inEvent);
this.dispatcher.enterOver(e, inEvent)
};
ol.pointer.MsSource.prototype.msPointerCancel = function(inEvent) {
var e = this.prepareEvent_(inEvent);
this.dispatcher.cancel(e, inEvent);
this.cleanup(inEvent.getBrowserEvent().pointerId)
};
ol.pointer.MsSource.prototype.msLostPointerCapture = function(inEvent) {
var e = this.dispatcher.makeEvent("lostpointercapture", inEvent.getBrowserEvent(), inEvent);
this.dispatcher.dispatchEvent(e)
};
ol.pointer.MsSource.prototype.msGotPointerCapture = function(inEvent) {
var e = this.dispatcher.makeEvent("gotpointercapture", inEvent.getBrowserEvent(), inEvent);
this.dispatcher.dispatchEvent(e)
};
goog.provide("ol.pointer.NativeSource");
goog.require("goog.object");
goog.require("ol.pointer.EventSource");
ol.pointer.NativeSource = function(dispatcher) {
var mapping = {"pointerdown":this.pointerDown, "pointermove":this.pointerMove, "pointerup":this.pointerUp, "pointerout":this.pointerOut, "pointerover":this.pointerOver, "pointercancel":this.pointerCancel, "gotpointercapture":this.gotPointerCapture, "lostpointercapture":this.lostPointerCapture};
goog.base(this, dispatcher, mapping)
};
goog.inherits(ol.pointer.NativeSource, ol.pointer.EventSource);
ol.pointer.NativeSource.prototype.pointerDown = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.pointerMove = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.pointerUp = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.pointerOut = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.pointerOver = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.pointerCancel = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.lostPointerCapture = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
ol.pointer.NativeSource.prototype.gotPointerCapture = function(inEvent) {
this.dispatcher.fireNativeEvent(inEvent)
};
goog.provide("ol.pointer.TouchSource");
goog.require("goog.array");
goog.require("goog.object");
goog.require("ol.pointer.EventSource");
goog.require("ol.pointer.MouseSource");
ol.pointer.TouchSource = function(dispatcher, mouseSource) {
var mapping = {"touchstart":this.touchstart, "touchmove":this.touchmove, "touchend":this.touchend, "touchcancel":this.touchcancel};
goog.base(this, dispatcher, mapping);
this.pointerMap = dispatcher.pointerMap;
this.mouseSource = mouseSource;
this.firstTouchId_ = undefined;
this.clickCount_ = 0;
this.resetId_ = undefined
};
goog.inherits(ol.pointer.TouchSource, ol.pointer.EventSource);
ol.pointer.TouchSource.DEDUP_TIMEOUT = 2500;
ol.pointer.TouchSource.CLICK_COUNT_TIMEOUT = 200;
ol.pointer.TouchSource.POINTER_TYPE = "touch";
ol.pointer.TouchSource.prototype.isPrimaryTouch_ = function(inTouch) {
return this.firstTouchId_ === inTouch.identifier
};
ol.pointer.TouchSource.prototype.setPrimaryTouch_ = function(inTouch) {
var count = goog.object.getCount(this.pointerMap);
if(count === 0 || count === 1 && goog.object.containsKey(this.pointerMap, ol.pointer.MouseSource.POINTER_ID.toString())) {
this.firstTouchId_ = inTouch.identifier;
this.cancelResetClickCount_()
}
};
ol.pointer.TouchSource.prototype.removePrimaryPointer_ = function(inPointer) {
if(inPointer.isPrimary) {
this.firstTouchId_ = undefined;
this.resetClickCount_()
}
};
ol.pointer.TouchSource.prototype.resetClickCount_ = function() {
this.resetId_ = goog.global.setTimeout(this.resetClickCountHandler_, ol.pointer.TouchSource.CLICK_COUNT_TIMEOUT)
};
ol.pointer.TouchSource.prototype.resetClickCountHandler_ = function() {
this.clickCount_ = 0;
this.resetId_ = undefined
};
ol.pointer.TouchSource.prototype.cancelResetClickCount_ = function() {
if(goog.isDef(this.resetId_)) {
goog.global.clearTimeout(this.resetId_)
}
};
ol.pointer.TouchSource.prototype.touchToPointer_ = function(browserEvent, inTouch) {
var e = this.dispatcher.cloneEvent(browserEvent, inTouch);
e.pointerId = inTouch.identifier + 2;
e.bubbles = true;
e.cancelable = true;
e.detail = this.clickCount_;
e.button = 0;
e.buttons = 1;
e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;
e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;
e.pressure = inTouch.webkitForce || inTouch.force || 0.5;
e.isPrimary = this.isPrimaryTouch_(inTouch);
e.pointerType = ol.pointer.TouchSource.POINTER_TYPE;
e.clientX = inTouch.clientX;
e.clientY = inTouch.clientY;
e.screenX = inTouch.screenX;
e.screenY = inTouch.screenY;
return e
};
ol.pointer.TouchSource.prototype.processTouches_ = function(inEvent, inFunction) {
var tl = inEvent.getBrowserEvent().changedTouches;
var touchesCopy = goog.array.clone(tl);
var pointers = goog.array.map(touchesCopy, goog.partial(this.touchToPointer_, inEvent), this);
goog.array.forEach(pointers, function(p) {
p.preventDefault = function() {
inEvent.preventDefault()
}
}, this);
goog.array.forEach(pointers, goog.partial(inFunction, inEvent), this)
};
ol.pointer.TouchSource.prototype.findTouch_ = function(touchList, searchId) {
var l = touchList.length;
var touch;
for(var i = 0;i < l;i++) {
touch = touchList[i];
if(touch.identifier === searchId) {
return true
}
}
return false
};
ol.pointer.TouchSource.prototype.vacuumTouches_ = function(inEvent) {
var touchList = inEvent.getBrowserEvent().touches;
if(goog.object.getCount(this.pointerMap) >= touchList.length) {
var d = [];
goog.object.forEach(this.pointerMap, function(value, key) {
if(key != ol.pointer.MouseSource.POINTER_ID && !this.findTouch_(touchList, key - 2)) {
d.push(value.out)
}
}, this);
goog.array.forEach(d, goog.partial(this.cancelOut_, inEvent), this)
}
};
ol.pointer.TouchSource.prototype.touchstart = function(inEvent) {
this.vacuumTouches_(inEvent);
this.setPrimaryTouch_(inEvent.getBrowserEvent().changedTouches[0]);
this.dedupSynthMouse_(inEvent);
this.clickCount_++;
this.processTouches_(inEvent, this.overDown_)
};
ol.pointer.TouchSource.prototype.overDown_ = function(browserEvent, inPointer) {
goog.object.set(this.pointerMap, inPointer.pointerId, {target:inPointer.target, out:inPointer, outTarget:inPointer.target});
this.dispatcher.over(inPointer, browserEvent);
this.dispatcher.enter(inPointer, browserEvent);
this.dispatcher.down(inPointer, browserEvent)
};
ol.pointer.TouchSource.prototype.touchmove = function(inEvent) {
inEvent.preventDefault();
this.processTouches_(inEvent, this.moveOverOut_)
};
ol.pointer.TouchSource.prototype.moveOverOut_ = function(browserEvent, inPointer) {
var event = inPointer;
var pointer = goog.object.get(this.pointerMap, event.pointerId);
if(!pointer) {
return
}
var outEvent = pointer.out;
var outTarget = pointer.outTarget;
this.dispatcher.move(event, browserEvent);
if(outEvent && outTarget !== event.target) {
outEvent.relatedTarget = event.target;
event.relatedTarget = outTarget;
outEvent.target = outTarget;
if(event.target) {
this.dispatcher.leaveOut(outEvent, browserEvent);
this.dispatcher.enterOver(event, browserEvent)
}else {
event.target = outTarget;
event.relatedTarget = null;
this.cancelOut_(browserEvent, event)
}
}
pointer.out = event;
pointer.outTarget = event.target
};
ol.pointer.TouchSource.prototype.touchend = function(inEvent) {
this.dedupSynthMouse_(inEvent);
this.processTouches_(inEvent, this.upOut_)
};
ol.pointer.TouchSource.prototype.upOut_ = function(browserEvent, inPointer) {
this.dispatcher.up(inPointer, browserEvent);
this.dispatcher.out(inPointer, browserEvent);
this.dispatcher.leave(inPointer, browserEvent);
this.cleanUpPointer_(inPointer)
};
ol.pointer.TouchSource.prototype.touchcancel = function(inEvent) {
this.processTouches_(inEvent, this.cancelOut_)
};
ol.pointer.TouchSource.prototype.cancelOut_ = function(browserEvent, inPointer) {
this.dispatcher.cancel(inPointer, browserEvent);
this.dispatcher.out(inPointer, browserEvent);
this.dispatcher.leave(inPointer, browserEvent);
this.cleanUpPointer_(inPointer)
};
ol.pointer.TouchSource.prototype.cleanUpPointer_ = function(inPointer) {
goog.object.remove(this.pointerMap, inPointer.pointerId);
this.removePrimaryPointer_(inPointer)
};
ol.pointer.TouchSource.prototype.dedupSynthMouse_ = function(inEvent) {
var lts = this.mouseSource.lastTouches;
var t = inEvent.getBrowserEvent().changedTouches[0];
if(this.isPrimaryTouch_(t)) {
var lt = ([t.clientX, t.clientY]);
lts.push(lt);
goog.global.setTimeout(function() {
goog.array.remove(lts, lt)
}, ol.pointer.TouchSource.DEDUP_TIMEOUT)
}
};
goog.provide("ol.pointer.PointerEventHandler");
goog.require("goog.array");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.Event");
goog.require("goog.events.EventTarget");
goog.require("ol.BrowserFeature");
goog.require("ol.pointer.MouseSource");
goog.require("ol.pointer.MsSource");
goog.require("ol.pointer.NativeSource");
goog.require("ol.pointer.PointerEvent");
goog.require("ol.pointer.TouchSource");
ol.pointer.PointerEventHandler = function(element) {
goog.base(this);
this.element_ = element;
this.pointerMap = {};
this.eventMap_ = {};
this.eventSourceList_ = [];
this.registerSources()
};
goog.inherits(ol.pointer.PointerEventHandler, goog.events.EventTarget);
ol.pointer.PointerEventHandler.prototype.registerSources = function() {
if(ol.BrowserFeature.HAS_POINTER) {
this.registerSource("native", new ol.pointer.NativeSource(this))
}else {
if(ol.BrowserFeature.HAS_MSPOINTER) {
this.registerSource("ms", new ol.pointer.MsSource(this))
}else {
var mouseSource = new ol.pointer.MouseSource(this);
this.registerSource("mouse", mouseSource);
if(ol.BrowserFeature.HAS_TOUCH) {
this.registerSource("touch", new ol.pointer.TouchSource(this, mouseSource))
}
}
}
this.register_()
};
ol.pointer.PointerEventHandler.prototype.registerSource = function(name, source) {
var s = source;
var newEvents = s.getEvents();
if(newEvents) {
goog.array.forEach(newEvents, function(e) {
var handler = s.getHandlerForEvent(e);
if(handler) {
this.eventMap_[e] = goog.bind(handler, s)
}
}, this);
this.eventSourceList_.push(s)
}
};
ol.pointer.PointerEventHandler.prototype.register_ = function() {
var l = this.eventSourceList_.length;
var eventSource;
for(var i = 0;i < l;i++) {
eventSource = this.eventSourceList_[i];
this.addEvents_(eventSource.getEvents())
}
};
ol.pointer.PointerEventHandler.prototype.unregister_ = function() {
var l = this.eventSourceList_.length;
var eventSource;
for(var i = 0;i < l;i++) {
eventSource = this.eventSourceList_[i];
this.removeEvents_(eventSource.getEvents())
}
};
ol.pointer.PointerEventHandler.prototype.eventHandler_ = function(inEvent) {
var type = inEvent.type;
var handler = this.eventMap_[type];
if(handler) {
handler(inEvent)
}
};
ol.pointer.PointerEventHandler.prototype.addEvents_ = function(events) {
goog.array.forEach(events, function(eventName) {
goog.events.listen(this.element_, eventName, this.eventHandler_, false, this)
}, this)
};
ol.pointer.PointerEventHandler.prototype.removeEvents_ = function(events) {
goog.array.forEach(events, function(e) {
goog.events.unlisten(this.element_, e, this.eventHandler_, false, this)
}, this)
};
ol.pointer.PointerEventHandler.prototype.cloneEvent = function(browserEvent, inEvent) {
var eventCopy = {}, p;
for(var i = 0, ii = ol.pointer.CLONE_PROPS.length;i < ii;i++) {
p = ol.pointer.CLONE_PROPS[i][0];
eventCopy[p] = browserEvent[p] || inEvent[p] || ol.pointer.CLONE_PROPS[i][1]
}
return eventCopy
};
ol.pointer.PointerEventHandler.prototype.down = function(pointerEventData, browserEvent) {
this.fireEvent(ol.pointer.EventType.POINTERDOWN, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.move = function(pointerEventData, browserEvent) {
this.fireEvent(ol.pointer.EventType.POINTERMOVE, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.up = function(pointerEventData, browserEvent) {
this.fireEvent(ol.pointer.EventType.POINTERUP, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.enter = function(pointerEventData, browserEvent) {
pointerEventData.bubbles = false;
this.fireEvent(ol.pointer.EventType.POINTERENTER, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.leave = function(pointerEventData, browserEvent) {
pointerEventData.bubbles = false;
this.fireEvent(ol.pointer.EventType.POINTERLEAVE, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.over = function(pointerEventData, browserEvent) {
pointerEventData.bubbles = true;
this.fireEvent(ol.pointer.EventType.POINTEROVER, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.out = function(pointerEventData, browserEvent) {
pointerEventData.bubbles = true;
this.fireEvent(ol.pointer.EventType.POINTEROUT, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.cancel = function(pointerEventData, browserEvent) {
this.fireEvent(ol.pointer.EventType.POINTERCANCEL, pointerEventData, browserEvent)
};
ol.pointer.PointerEventHandler.prototype.leaveOut = function(pointerEventData, browserEvent) {
this.out(pointerEventData, browserEvent);
if(!this.contains_(pointerEventData.target, pointerEventData.relatedTarget)) {
this.leave(pointerEventData, browserEvent)
}
};
ol.pointer.PointerEventHandler.prototype.enterOver = function(pointerEventData, browserEvent) {
this.over(pointerEventData, browserEvent);
if(!this.contains_(pointerEventData.target, pointerEventData.relatedTarget)) {
this.enter(pointerEventData, browserEvent)
}
};
ol.pointer.PointerEventHandler.prototype.contains_ = function(container, contained) {
return container.contains(contained)
};
ol.pointer.PointerEventHandler.prototype.makeEvent = function(inType, pointerEventData, browserEvent) {
return new ol.pointer.PointerEvent(inType, browserEvent, pointerEventData)
};
ol.pointer.PointerEventHandler.prototype.fireEvent = function(inType, pointerEventData, browserEvent) {
var e = this.makeEvent(inType, pointerEventData, browserEvent);
this.dispatchEvent(e)
};
ol.pointer.PointerEventHandler.prototype.fireNativeEvent = function(nativeEvent) {
var e = this.makeEvent(nativeEvent.type, nativeEvent.getBrowserEvent(), nativeEvent);
this.dispatchEvent(e)
};
ol.pointer.PointerEventHandler.prototype.wrapMouseEvent = function(eventType, browserEvent) {
var pointerEvent = this.makeEvent(eventType, ol.pointer.MouseSource.prepareEvent(browserEvent, this), browserEvent);
return pointerEvent
};
ol.pointer.PointerEventHandler.prototype.disposeInternal = function() {
this.unregister_();
goog.base(this, "disposeInternal")
};
ol.pointer.EventType = {POINTERMOVE:"pointermove", POINTERDOWN:"pointerdown", POINTERUP:"pointerup", POINTEROVER:"pointerover", POINTEROUT:"pointerout", POINTERENTER:"pointerenter", POINTERLEAVE:"pointerleave", POINTERCANCEL:"pointercancel"};
ol.pointer.CLONE_PROPS = [["bubbles", false], ["cancelable", false], ["view", null], ["detail", null], ["screenX", 0], ["screenY", 0], ["clientX", 0], ["clientY", 0], ["ctrlKey", false], ["altKey", false], ["shiftKey", false], ["metaKey", false], ["button", 0], ["relatedTarget", null], ["buttons", 0], ["pointerId", 0], ["width", 0], ["height", 0], ["pressure", 0], ["tiltX", 0], ["tiltY", 0], ["pointerType", ""], ["hwTimestamp", 0], ["isPrimary", false], ["type", ""], ["target", null], ["currentTarget",
null], ["which", 0]];
goog.provide("ol.MapBrowserEvent");
goog.provide("ol.MapBrowserEvent.EventType");
goog.provide("ol.MapBrowserEventHandler");
goog.provide("ol.MapBrowserPointerEvent");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol");
goog.require("ol.Coordinate");
goog.require("ol.MapEvent");
goog.require("ol.Pixel");
goog.require("ol.pointer.PointerEvent");
goog.require("ol.pointer.PointerEventHandler");
ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) {
goog.base(this, type, map, opt_frameState);
this.browserEvent = browserEvent;
this.originalEvent = browserEvent.getBrowserEvent();
this.coordinate = map.getEventCoordinate(this.originalEvent);
this.pixel = map.getEventPixel(this.originalEvent)
};
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
ol.MapBrowserEvent.prototype.preventDefault = function() {
goog.base(this, "preventDefault");
this.browserEvent.preventDefault()
};
ol.MapBrowserEvent.prototype.stopPropagation = function() {
goog.base(this, "stopPropagation");
this.browserEvent.stopPropagation()
};
ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_frameState) {
goog.base(this, type, map, pointerEvent.browserEvent, opt_frameState);
this.pointerEvent = pointerEvent
};
goog.inherits(ol.MapBrowserPointerEvent, ol.MapBrowserEvent);
ol.MapBrowserEventHandler = function(map) {
goog.base(this);
this.map_ = map;
this.clickTimeoutId_ = 0;
this.dragged_ = false;
this.dragListenerKeys_ = null;
this.pointerdownListenerKey_ = null;
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
this.ieDblclickListenerKey_ = null
}
this.down_ = null;
var element = this.map_.getViewport();
this.activePointers_ = 0;
this.trackedTouches_ = {};
this.pointerEventHandler_ = new ol.pointer.PointerEventHandler(element);
this.documentPointerEventHandler_ = null;
this.pointerdownListenerKey_ = goog.events.listen(this.pointerEventHandler_, ol.pointer.EventType.POINTERDOWN, this.handlePointerDown_, false, this);
this.relayedListenerKey_ = goog.events.listen(this.pointerEventHandler_, ol.pointer.EventType.POINTERMOVE, this.relayEvent_, false, this);
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
this.ieDblclickListenerKey_ = goog.events.listen(element, goog.events.EventType.DBLCLICK, this.emulateClickLegacyIE_, false, this)
}
};
goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget);
ol.MapBrowserEventHandler.prototype.getDown = function() {
return this.down_
};
ol.MapBrowserEventHandler.prototype.emulateClickLegacyIE_ = function(browserEvent) {
var pointerEvent = this.pointerEventHandler_.wrapMouseEvent(ol.MapBrowserEvent.EventType.POINTERUP, browserEvent);
this.emulateClick_(pointerEvent)
};
ol.MapBrowserEventHandler.prototype.emulateClick_ = function(pointerEvent) {
var newEvent;
newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.CLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
if(this.clickTimeoutId_ !== 0) {
goog.global.clearTimeout(this.clickTimeoutId_);
this.clickTimeoutId_ = 0;
newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent)
}else {
this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() {
this.clickTimeoutId_ = 0;
var newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, pointerEvent);
this.dispatchEvent(newEvent)
}, this), 250)
}
};
ol.MapBrowserEventHandler.prototype.updateActivePointers_ = function(pointerEvent) {
var event = pointerEvent;
if(event.type == ol.MapBrowserEvent.EventType.POINTERUP || event.type == ol.MapBrowserEvent.EventType.POINTERCANCEL) {
delete this.trackedTouches_[event.pointerId]
}else {
if(event.type == ol.MapBrowserEvent.EventType.POINTERDOWN) {
this.trackedTouches_[event.pointerId] = true
}
}
this.activePointers_ = goog.object.getCount(this.trackedTouches_)
};
ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {
this.updateActivePointers_(pointerEvent);
var newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.POINTERUP, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
goog.asserts.assert(this.activePointers_ >= 0);
if(this.activePointers_ === 0) {
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null;
goog.dispose(this.documentPointerEventHandler_);
this.documentPointerEventHandler_ = null
}
if(!this.dragged_ && this.isMouseActionButton_(pointerEvent)) {
goog.asserts.assert(!goog.isNull(this.down_));
this.emulateClick_(this.down_)
}
};
ol.MapBrowserEventHandler.prototype.isMouseActionButton_ = function(pointerEvent) {
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
return pointerEvent.button == 1
}else {
return pointerEvent.button === 0
}
};
ol.MapBrowserEventHandler.prototype.handlePointerDown_ = function(pointerEvent) {
this.updateActivePointers_(pointerEvent);
var newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.POINTERDOWN, this.map_, pointerEvent);
this.dispatchEvent(newEvent);
this.down_ = pointerEvent;
this.dragged_ = false;
if(goog.isNull(this.dragListenerKeys_)) {
this.documentPointerEventHandler_ = new ol.pointer.PointerEventHandler(document);
this.dragListenerKeys_ = [goog.events.listen(this.documentPointerEventHandler_, ol.MapBrowserEvent.EventType.POINTERMOVE, this.handlePointerMove_, false, this), goog.events.listen(this.documentPointerEventHandler_, ol.MapBrowserEvent.EventType.POINTERUP, this.handlePointerUp_, false, this), goog.events.listen(this.pointerEventHandler_, ol.MapBrowserEvent.EventType.POINTERCANCEL, this.handlePointerUp_, false, this)]
}
pointerEvent.preventDefault()
};
ol.MapBrowserEventHandler.prototype.handlePointerMove_ = function(pointerEvent) {
if(pointerEvent.clientX != this.down_.clientX || pointerEvent.clientY != this.down_.clientY) {
this.dragged_ = true;
var newEvent = new ol.MapBrowserPointerEvent(ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent);
this.dispatchEvent(newEvent)
}
pointerEvent.preventDefault()
};
ol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
this.dispatchEvent(new ol.MapBrowserPointerEvent(pointerEvent.type, this.map_, pointerEvent))
};
ol.MapBrowserEventHandler.prototype.disposeInternal = function() {
if(!goog.isNull(this.relayedListenerKey_)) {
goog.events.unlistenByKey(this.relayedListenerKey_);
this.relayedListenerKey_ = null
}
if(!goog.isNull(this.pointerdownListenerKey_)) {
goog.events.unlistenByKey(this.pointerdownListenerKey_);
this.pointerdownListenerKey_ = null
}
if(!goog.isNull(this.dragListenerKeys_)) {
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null
}
if(!goog.isNull(this.documentPointerEventHandler_)) {
goog.dispose(this.documentPointerEventHandler_);
this.documentPointerEventHandler_ = null
}
if(!goog.isNull(this.pointerEventHandler_)) {
goog.dispose(this.pointerEventHandler_);
this.pointerEventHandler_ = null
}
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE && !goog.isNull(this.ieDblclickListenerKey_)) {
goog.events.unlistenByKey(this.ieDblclickListenerKey_);
this.ieDblclickListenerKey_ = null
}
goog.base(this, "disposeInternal")
};
ol.MapBrowserEvent.EventType = {SINGLECLICK:"singleclick", CLICK:goog.events.EventType.CLICK, DBLCLICK:goog.events.EventType.DBLCLICK, POINTERDRAG:"pointerdrag", POINTERMOVE:"pointermove", POINTERDOWN:"pointerdown", POINTERUP:"pointerup", POINTEROVER:"pointerover", POINTEROUT:"pointerout", POINTERENTER:"pointerenter", POINTERLEAVE:"pointerleave", POINTERCANCEL:"pointercancel"};
goog.provide("ol.events.ConditionType");
goog.provide("ol.events.condition");
goog.require("goog.asserts");
goog.require("goog.dom.TagName");
goog.require("goog.functions");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserPointerEvent");
ol.events.ConditionType;
ol.events.condition.altKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey
};
ol.events.condition.always = goog.functions.TRUE;
ol.events.condition.never = goog.functions.FALSE;
ol.events.condition.singleClick = function(mapBrowserEvent) {
return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK
};
ol.events.condition.noModifierKeys = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey
};
ol.events.condition.targetNotEditable = function(mapBrowserEvent) {
var target = mapBrowserEvent.browserEvent.target;
goog.asserts.assertInstanceof(target, Element);
var tagName = target.tagName;
return tagName !== goog.dom.TagName.INPUT && tagName !== goog.dom.TagName.SELECT && tagName !== goog.dom.TagName.TEXTAREA
};
ol.events.condition.mouseOnly = function(mapBrowserEvent) {
goog.asserts.assertInstanceof(mapBrowserEvent, ol.MapBrowserPointerEvent);
return mapBrowserEvent.pointerEvent.pointerId == 1
};
goog.provide("ol.CenterConstraint");
goog.provide("ol.CenterConstraintType");
goog.require("goog.math");
ol.CenterConstraintType;
ol.CenterConstraint.createExtent = function(extent) {
return function(center) {
if(goog.isDef(center)) {
return[goog.math.clamp(center[0], extent[0], extent[2]), goog.math.clamp(center[1], extent[1], extent[3])]
}else {
return undefined
}
}
};
ol.CenterConstraint.none = function(center) {
return center
};
goog.provide("ol.array");
goog.require("goog.array");
goog.require("goog.asserts");
ol.array.binaryFindNearest = function(arr, target) {
var index = goog.array.binarySearch(arr, target, function(a, b) {
return b - a
});
if(index >= 0) {
return index
}else {
if(index == -1) {
return 0
}else {
if(index == -arr.length - 1) {
return arr.length - 1
}else {
var left = -index - 2;
var right = -index - 1;
if(arr[left] - target < target - arr[right]) {
return left
}else {
return right
}
}
}
}
};
ol.array.safeExtend = function(array1, array2) {
var i, ii;
for(i = 0, ii = array2.length;i < ii;++i) {
array1.push(array2[i])
}
};
ol.array.linearFindNearest = function(arr, target, direction) {
var n = arr.length;
if(arr[0] <= target) {
return 0
}else {
if(target <= arr[n - 1]) {
return n - 1
}else {
var i;
if(direction > 0) {
for(i = 1;i < n;++i) {
if(arr[i] < target) {
return i - 1
}
}
}else {
if(direction < 0) {
for(i = 1;i < n;++i) {
if(arr[i] <= target) {
return i
}
}
}else {
for(i = 1;i < n;++i) {
if(arr[i] == target) {
return i
}else {
if(arr[i] < target) {
if(arr[i - 1] - target < target - arr[i]) {
return i - 1
}else {
return i
}
}
}
}
}
}
goog.asserts.fail();
return n - 1
}
}
};
ol.array.reverseSubArray = function(arr, begin, end) {
goog.asserts.assert(begin >= 0);
goog.asserts.assert(end < arr.length);
while(begin < end) {
var tmp = arr[begin];
arr[begin] = arr[end];
arr[end] = tmp;
++begin;
--end
}
};
goog.provide("ol.ResolutionConstraint");
goog.provide("ol.ResolutionConstraintType");
goog.require("goog.math");
goog.require("ol.array");
ol.ResolutionConstraintType;
ol.ResolutionConstraint.createSnapToResolutions = function(resolutions) {
return function(resolution, delta, direction) {
if(goog.isDef(resolution)) {
var z = ol.array.linearFindNearest(resolutions, resolution, direction);
z = goog.math.clamp(z + delta, 0, resolutions.length - 1);
return resolutions[z]
}else {
return undefined
}
}
};
ol.ResolutionConstraint.createSnapToPower = function(power, maxResolution, opt_maxLevel) {
return function(resolution, delta, direction) {
if(goog.isDef(resolution)) {
var offset;
if(direction > 0) {
offset = 0
}else {
if(direction < 0) {
offset = 1
}else {
offset = 0.5
}
}
var oldLevel = Math.floor(Math.log(maxResolution / resolution) / Math.log(power) + offset);
var newLevel = Math.max(oldLevel + delta, 0);
if(goog.isDef(opt_maxLevel)) {
newLevel = Math.min(newLevel, opt_maxLevel)
}
return maxResolution / Math.pow(power, newLevel)
}else {
return undefined
}
}
};
goog.provide("ol.RotationConstraint");
goog.provide("ol.RotationConstraintType");
goog.require("goog.math");
ol.RotationConstraintType;
ol.RotationConstraint.disable = function(rotation, delta) {
if(goog.isDef(rotation)) {
return 0
}else {
return undefined
}
};
ol.RotationConstraint.none = function(rotation, delta) {
if(goog.isDef(rotation)) {
return rotation + delta
}else {
return undefined
}
};
ol.RotationConstraint.createSnapToN = function(n) {
var theta = 2 * Math.PI / n;
return function(rotation, delta) {
if(goog.isDef(rotation)) {
rotation = Math.floor((rotation + delta) / theta + 0.5) * theta;
return rotation
}else {
return undefined
}
}
};
ol.RotationConstraint.createSnapToZero = function(opt_tolerance) {
var tolerance = opt_tolerance || goog.math.toRadians(5);
return function(rotation, delta) {
if(goog.isDef(rotation)) {
if(Math.abs(rotation + delta) <= tolerance) {
return 0
}else {
return rotation + delta
}
}else {
return undefined
}
}
};
goog.provide("ol.Constraints");
goog.require("ol.CenterConstraintType");
goog.require("ol.ResolutionConstraintType");
goog.require("ol.RotationConstraintType");
ol.Constraints = function(centerConstraint, resolutionConstraint, rotationConstraint) {
this.center = centerConstraint;
this.resolution = resolutionConstraint;
this.rotation = rotationConstraint
};
goog.provide("ol.IView2D");
goog.require("ol.Coordinate");
ol.IView2D = function() {
};
ol.IView2D.prototype.getCenter = function() {
};
ol.IView2D.prototype.getProjection = function() {
};
ol.IView2D.prototype.getResolution = function() {
};
ol.IView2D.prototype.getRotation = function() {
};
ol.IView2D.prototype.getView2DState = function() {
};
ol.IView2D.prototype.isDef = function() {
};
goog.provide("ol.IView3D");
ol.IView3D = function() {
};
ol.IView3D.prototype.isDef = function() {
};
goog.provide("ol.IView");
goog.require("ol.IView2D");
goog.require("ol.IView3D");
ol.IView = function() {
};
ol.IView.prototype.getView2D = function() {
};
ol.IView.prototype.getView3D = function() {
};
ol.IView.prototype.isDef = function() {
};
goog.provide("ol.View");
goog.provide("ol.ViewHint");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.IView");
goog.require("ol.Object");
ol.ViewHint = {ANIMATING:0, INTERACTING:1};
ol.View = function() {
goog.base(this);
this.hints_ = [0, 0]
};
goog.inherits(ol.View, ol.Object);
ol.View.prototype.getHints = function() {
return goog.array.clone(this.hints_)
};
ol.View.prototype.getView2D = function() {
goog.asserts.fail();
return null
};
ol.View.prototype.getView3D = function() {
goog.asserts.fail();
return null
};
ol.View.prototype.isDef = function() {
goog.asserts.fail();
return false
};
ol.View.prototype.setHint = function(hint, delta) {
goog.asserts.assert(0 <= hint && hint < this.hints_.length);
this.hints_[hint] += delta;
goog.asserts.assert(this.hints_[hint] >= 0);
return this.hints_[hint]
};
goog.provide("ol.TransformFunction");
ol.TransformFunction;
goog.provide("ol.Extent");
goog.provide("ol.extent");
goog.provide("ol.extent.Relationship");
goog.require("goog.asserts");
goog.require("goog.vec.Mat4");
goog.require("ol.Coordinate");
goog.require("ol.Size");
goog.require("ol.TransformFunction");
ol.Extent;
ol.extent.Relationship = {UNKNOWN:0, INTERSECTING:1, ABOVE:2, RIGHT:4, BELOW:8, LEFT:16};
ol.extent.boundingExtent = function(coordinates) {
var extent = ol.extent.createEmpty();
for(var i = 0, ii = coordinates.length;i < ii;++i) {
ol.extent.extendCoordinate(extent, coordinates[i])
}
return extent
};
ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) {
goog.asserts.assert(xs.length > 0);
goog.asserts.assert(ys.length > 0);
var minX = Math.min.apply(null, xs);
var minY = Math.min.apply(null, ys);
var maxX = Math.max.apply(null, xs);
var maxY = Math.max.apply(null, ys);
return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent)
};
ol.extent.buffer = function(extent, value, opt_extent) {
if(goog.isDef(opt_extent)) {
opt_extent[0] = extent[0] - value;
opt_extent[1] = extent[1] - value;
opt_extent[2] = extent[2] + value;
opt_extent[3] = extent[3] + value;
return opt_extent
}else {
return[extent[0] - value, extent[1] - value, extent[2] + value, extent[3] + value]
}
};
ol.extent.clone = function(extent, opt_extent) {
if(goog.isDef(opt_extent)) {
opt_extent[0] = extent[0];
opt_extent[1] = extent[1];
opt_extent[2] = extent[2];
opt_extent[3] = extent[3];
return opt_extent
}else {
return extent.slice()
}
};
ol.extent.closestSquaredDistanceXY = function(extent, x, y) {
var dx, dy;
if(x < extent[0]) {
dx = extent[0] - x
}else {
if(extent[2] < x) {
dx = x - extent[2]
}else {
dx = 0
}
}
if(y < extent[1]) {
dy = extent[1] - y
}else {
if(extent[3] < y) {
dy = y - extent[3]
}else {
dy = 0
}
}
return dx * dx + dy * dy
};
ol.extent.containsCoordinate = function(extent, coordinate) {
return extent[0] <= coordinate[0] && coordinate[0] <= extent[2] && extent[1] <= coordinate[1] && coordinate[1] <= extent[3]
};
ol.extent.containsExtent = function(extent1, extent2) {
return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] && extent1[1] <= extent2[1] && extent2[3] <= extent1[3]
};
ol.extent.coordinateRelationship = function(extent, coordinate) {
var minX = extent[0];
var minY = extent[1];
var maxX = extent[2];
var maxY = extent[3];
var x = coordinate[0];
var y = coordinate[1];
var relationship = ol.extent.Relationship.UNKNOWN;
if(x < minX) {
relationship = relationship | ol.extent.Relationship.LEFT
}else {
if(x > maxX) {
relationship = relationship | ol.extent.Relationship.RIGHT
}
}
if(y < minY) {
relationship = relationship | ol.extent.Relationship.BELOW
}else {
if(y > maxY) {
relationship = relationship | ol.extent.Relationship.ABOVE
}
}
if(relationship === ol.extent.Relationship.UNKNOWN) {
relationship = ol.extent.Relationship.INTERSECTING
}
return relationship
};
ol.extent.createEmpty = function() {
return[Infinity, Infinity, -Infinity, -Infinity]
};
ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) {
if(goog.isDef(opt_extent)) {
opt_extent[0] = minX;
opt_extent[1] = minY;
opt_extent[2] = maxX;
opt_extent[3] = maxY;
return opt_extent
}else {
return[minX, minY, maxX, maxY]
}
};
ol.extent.createOrUpdateEmpty = function(opt_extent) {
return ol.extent.createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent)
};
ol.extent.createOrUpdateFromCoordinate = function(coordinate, opt_extent) {
var x = coordinate[0];
var y = coordinate[1];
return ol.extent.createOrUpdate(x, y, x, y, opt_extent)
};
ol.extent.createOrUpdateFromCoordinates = function(coordinates, opt_extent) {
var extent = ol.extent.createOrUpdateEmpty(opt_extent);
return ol.extent.extendCoordinates(extent, coordinates)
};
ol.extent.createOrUpdateFromFlatCoordinates = function(flatCoordinates, offset, end, stride, opt_extent) {
var extent = ol.extent.createOrUpdateEmpty(opt_extent);
return ol.extent.extendFlatCoordinates(extent, flatCoordinates, offset, end, stride)
};
ol.extent.createOrUpdateFromRings = function(rings, opt_extent) {
var extent = ol.extent.createOrUpdateEmpty(opt_extent);
return ol.extent.extendRings(extent, rings)
};
ol.extent.empty = function(extent) {
extent[0] = extent[1] = Infinity;
extent[2] = extent[3] = -Infinity;
return extent
};
ol.extent.equals = function(extent1, extent2) {
return extent1[0] == extent2[0] && extent1[2] == extent2[2] && extent1[1] == extent2[1] && extent1[3] == extent2[3]
};
ol.extent.extend = function(extent1, extent2) {
if(extent2[0] < extent1[0]) {
extent1[0] = extent2[0]
}
if(extent2[2] > extent1[2]) {
extent1[2] = extent2[2]
}
if(extent2[1] < extent1[1]) {
extent1[1] = extent2[1]
}
if(extent2[3] > extent1[3]) {
extent1[3] = extent2[3]
}
return extent1
};
ol.extent.extendCoordinate = function(extent, coordinate) {
if(coordinate[0] < extent[0]) {
extent[0] = coordinate[0]
}
if(coordinate[0] > extent[2]) {
extent[2] = coordinate[0]
}
if(coordinate[1] < extent[1]) {
extent[1] = coordinate[1]
}
if(coordinate[1] > extent[3]) {
extent[3] = coordinate[1]
}
};
ol.extent.extendCoordinates = function(extent, coordinates) {
var i, ii;
for(i = 0, ii = coordinates.length;i < ii;++i) {
ol.extent.extendCoordinate(extent, coordinates[i])
}
return extent
};
ol.extent.extendFlatCoordinates = function(extent, flatCoordinates, offset, end, stride) {
for(;offset < end;offset += stride) {
ol.extent.extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1])
}
return extent
};
ol.extent.extendRings = function(extent, rings) {
var i, ii;
for(i = 0, ii = rings.length;i < ii;++i) {
ol.extent.extendCoordinates(extent, rings[i])
}
return extent
};
ol.extent.extendXY = function(extent, x, y) {
extent[0] = Math.min(extent[0], x);
extent[1] = Math.min(extent[1], y);
extent[2] = Math.max(extent[2], x);
extent[3] = Math.max(extent[3], y)
};
ol.extent.getArea = function(extent) {
return ol.extent.getWidth(extent) * ol.extent.getHeight(extent)
};
ol.extent.getBottomLeft = function(extent) {
return[extent[0], extent[1]]
};
ol.extent.getBottomRight = function(extent) {
return[extent[2], extent[1]]
};
ol.extent.getCenter = function(extent) {
return[(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]
};
ol.extent.getEnlargedArea = function(extent1, extent2) {
var minX = Math.min(extent1[0], extent2[0]);
var minY = Math.min(extent1[1], extent2[1]);
var maxX = Math.max(extent1[2], extent2[2]);
var maxY = Math.max(extent1[3], extent2[3]);
return(maxX - minX) * (maxY - minY)
};
ol.extent.getForView2DAndSize = function(center, resolution, rotation, size, opt_extent) {
var dx = resolution * size[0] / 2;
var dy = resolution * size[1] / 2;
var cosRotation = Math.cos(rotation);
var sinRotation = Math.sin(rotation);
var xs = [-dx, -dx, dx, dx];
var ys = [-dy, dy, -dy, dy];
var i, x, y;
for(i = 0;i < 4;++i) {
x = xs[i];
y = ys[i];
xs[i] = center[0] + x * cosRotation - y * sinRotation;
ys[i] = center[1] + x * sinRotation + y * cosRotation
}
return ol.extent.boundingExtentXYs_(xs, ys, opt_extent)
};
ol.extent.getHeight = function(extent) {
return extent[3] - extent[1]
};
ol.extent.getIntersectionArea = function(extent1, extent2) {
var minX = Math.max(extent1[0], extent2[0]);
var minY = Math.max(extent1[1], extent2[1]);
var maxX = Math.min(extent1[2], extent2[2]);
var maxY = Math.min(extent1[3], extent2[3]);
return Math.max(0, maxX - minX) * Math.max(0, maxY - minY)
};
ol.extent.getMargin = function(extent) {
return ol.extent.getWidth(extent) + ol.extent.getHeight(extent)
};
ol.extent.getSize = function(extent) {
return[extent[2] - extent[0], extent[3] - extent[1]]
};
ol.extent.getTopLeft = function(extent) {
return[extent[0], extent[3]]
};
ol.extent.getTopRight = function(extent) {
return[extent[2], extent[3]]
};
ol.extent.getWidth = function(extent) {
return extent[2] - extent[0]
};
ol.extent.intersects = function(extent1, extent2) {
return extent1[0] <= extent2[2] && extent1[2] >= extent2[0] && extent1[1] <= extent2[3] && extent1[3] >= extent2[1]
};
ol.extent.isEmpty = function(extent) {
return extent[2] < extent[0] || extent[3] < extent[1]
};
ol.extent.isInfinite = function(extent) {
return extent[0] == -Infinity || extent[1] == -Infinity || extent[2] == Infinity || extent[3] == Infinity
};
ol.extent.normalize = function(extent, coordinate) {
return[(coordinate[0] - extent[0]) / (extent[2] - extent[0]), (coordinate[1] - extent[1]) / (extent[3] - extent[1])]
};
ol.extent.returnOrUpdate = function(extent, opt_extent) {
if(goog.isDef(opt_extent)) {
opt_extent[0] = extent[0];
opt_extent[1] = extent[1];
opt_extent[2] = extent[2];
opt_extent[3] = extent[3];
return opt_extent
}else {
return extent
}
};
ol.extent.scaleFromCenter = function(extent, value) {
var deltaX = (extent[2] - extent[0]) / 2 * (value - 1);
var deltaY = (extent[3] - extent[1]) / 2 * (value - 1);
extent[0] -= deltaX;
extent[2] += deltaX;
extent[1] -= deltaY;
extent[3] += deltaY
};
ol.extent.segmentIntersects = function(extent, start, end) {
var intersects = false;
var startRel = ol.extent.coordinateRelationship(extent, start);
var endRel = ol.extent.coordinateRelationship(extent, end);
if(startRel === ol.extent.Relationship.INTERSECTING || endRel === ol.extent.Relationship.INTERSECTING) {
intersects = true
}else {
var minX = extent[0];
var minY = extent[1];
var maxX = extent[2];
var maxY = extent[3];
var startX = start[0];
var startY = start[1];
var endX = end[0];
var endY = end[1];
var slope = (endY - startY) / (endX - startX);
var x, y;
if(!!(endRel & ol.extent.Relationship.ABOVE) && !(startRel & ol.extent.Relationship.ABOVE)) {
x = endX - (endY - maxY) / slope;
intersects = x >= minX && x <= maxX
}else {
if(!!(endRel & ol.extent.Relationship.RIGHT) && !(startRel & ol.extent.Relationship.RIGHT)) {
y = endY - (endX - maxX) * slope;
intersects = y >= minY && y <= maxY
}else {
if(!!(endRel & ol.extent.Relationship.BELOW) && !(startRel & ol.extent.Relationship.BELOW)) {
x = endX - (endY - minY) / slope;
intersects = x >= minX && x <= maxX
}else {
if(!!(endRel & ol.extent.Relationship.LEFT) && !(startRel & ol.extent.Relationship.LEFT)) {
y = endY - (endX - minX) * slope;
intersects = y >= minY && y <= maxY
}
}
}
}
}
return intersects
};
ol.extent.touches = function(extent1, extent2) {
var intersects = ol.extent.intersects(extent1, extent2);
return intersects && (extent1[0] == extent2[2] || extent1[2] == extent2[0] || extent1[1] == extent2[3] || extent1[3] == extent2[1])
};
ol.extent.transform = function(extent, transformFn, opt_extent) {
var coordinates = [extent[0], extent[1], extent[0], extent[3], extent[2], extent[1], extent[2], extent[3]];
transformFn(coordinates, coordinates, 2);
var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];
var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];
return ol.extent.boundingExtentXYs_(xs, ys, opt_extent)
};
ol.extent.transform2D = function(extent, transform, opt_extent) {
var dest = goog.isDef(opt_extent) ? opt_extent : [];
var m00 = goog.vec.Mat4.getElement(transform, 0, 0);
var m10 = goog.vec.Mat4.getElement(transform, 1, 0);
var m01 = goog.vec.Mat4.getElement(transform, 0, 1);
var m11 = goog.vec.Mat4.getElement(transform, 1, 1);
var m03 = goog.vec.Mat4.getElement(transform, 0, 3);
var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
var xi = [0, 2, 0, 2];
var yi = [1, 1, 3, 3];
var xs = [];
var ys = [];
var i, x, y;
for(i = 0;i < 4;++i) {
x = extent[xi[i]];
y = extent[yi[i]];
xs[i] = m00 * x + m01 * y + m03;
ys[i] = m10 * x + m11 * y + m13
}
dest[0] = Math.min.apply(null, xs);
dest[1] = Math.min.apply(null, ys);
dest[2] = Math.max.apply(null, xs);
dest[3] = Math.max.apply(null, ys);
return dest
};
goog.provide("ol.geom.Geometry");
goog.provide("ol.geom.GeometryType");
goog.require("goog.asserts");
goog.require("goog.functions");
goog.require("ol.Observable");
ol.geom.GeometryType = {POINT:"Point", LINE_STRING:"LineString", LINEAR_RING:"LinearRing", POLYGON:"Polygon", MULTI_POINT:"MultiPoint", MULTI_LINE_STRING:"MultiLineString", MULTI_POLYGON:"MultiPolygon", GEOMETRY_COLLECTION:"GeometryCollection", CIRCLE:"Circle"};
ol.geom.GeometryLayout = {XY:"XY", XYZ:"XYZ", XYM:"XYM", XYZM:"XYZM"};
ol.geom.Geometry = function() {
goog.base(this);
this.extent = undefined;
this.extentRevision = -1;
this.simplifiedGeometryCache = {};
this.simplifiedGeometryMaxMinSquaredTolerance = 0;
this.simplifiedGeometryRevision = 0
};
goog.inherits(ol.geom.Geometry, ol.Observable);
ol.geom.Geometry.prototype.clone = goog.abstractMethod;
ol.geom.Geometry.prototype.closestPointXY = goog.abstractMethod;
ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) {
var closestPoint = goog.isDef(opt_closestPoint) ? opt_closestPoint : [NaN, NaN];
this.closestPointXY(point[0], point[1], closestPoint, Infinity);
return closestPoint
};
ol.geom.Geometry.prototype.containsCoordinate = function(coordinate) {
return this.containsXY(coordinate[0], coordinate[1])
};
ol.geom.Geometry.prototype.containsXY = goog.functions.FALSE;
ol.geom.Geometry.prototype.getExtent = goog.abstractMethod;
ol.geom.Geometry.prototype.getSimplifiedGeometry = goog.abstractMethod;
ol.geom.Geometry.prototype.getType = goog.abstractMethod;
ol.geom.Geometry.prototype.transform = goog.abstractMethod;
ol.geom.RawPoint;
ol.geom.RawLineString;
ol.geom.RawLinearRing;
ol.geom.RawPolygon;
ol.geom.RawMultiPoint;
ol.geom.RawMultiLineString;
ol.geom.RawMultiPolygon;
goog.provide("ol.geom.flat.transform");
goog.require("goog.vec.Mat4");
ol.geom.flat.transform.transform2D = function(flatCoordinates, stride, transform, opt_dest) {
var m00 = goog.vec.Mat4.getElement(transform, 0, 0);
var m10 = goog.vec.Mat4.getElement(transform, 1, 0);
var m01 = goog.vec.Mat4.getElement(transform, 0, 1);
var m11 = goog.vec.Mat4.getElement(transform, 1, 1);
var m03 = goog.vec.Mat4.getElement(transform, 0, 3);
var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
var dest = goog.isDef(opt_dest) ? opt_dest : [];
var i = 0;
var j, jj;
for(j = 0, jj = flatCoordinates.length;j < jj;j += stride) {
var x = flatCoordinates[j];
var y = flatCoordinates[j + 1];
dest[i++] = m00 * x + m01 * y + m03;
dest[i++] = m10 * x + m11 * y + m13
}
if(goog.isDef(opt_dest) && dest.length != i) {
dest.length = i
}
return dest
};
goog.provide("ol.geom.SimpleGeometry");
goog.require("goog.asserts");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("ol.extent");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.flat.transform");
ol.geom.SimpleGeometry = function() {
goog.base(this);
this.layout = ol.geom.GeometryLayout.XY;
this.stride = 2;
this.flatCoordinates = null
};
goog.inherits(ol.geom.SimpleGeometry, ol.geom.Geometry);
ol.geom.SimpleGeometry.getLayoutForStride_ = function(stride) {
if(stride == 2) {
return ol.geom.GeometryLayout.XY
}else {
if(stride == 3) {
return ol.geom.GeometryLayout.XYZ
}else {
if(stride == 4) {
return ol.geom.GeometryLayout.XYZM
}else {
throw new Error("unsupported stride: " + stride);
}
}
}
};
ol.geom.SimpleGeometry.getStrideForLayout_ = function(layout) {
if(layout == ol.geom.GeometryLayout.XY) {
return 2
}else {
if(layout == ol.geom.GeometryLayout.XYZ) {
return 3
}else {
if(layout == ol.geom.GeometryLayout.XYM) {
return 3
}else {
if(layout == ol.geom.GeometryLayout.XYZM) {
return 4
}else {
throw new Error("unsupported layout: " + layout);
}
}
}
}
};
ol.geom.SimpleGeometry.prototype.containsXY = goog.functions.FALSE;
ol.geom.SimpleGeometry.prototype.getExtent = function(opt_extent) {
if(this.extentRevision != this.getRevision()) {
this.extent = ol.extent.createOrUpdateFromFlatCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.extent);
this.extentRevision = this.getRevision()
}
goog.asserts.assert(goog.isDef(this.extent));
return ol.extent.returnOrUpdate(this.extent, opt_extent)
};
ol.geom.SimpleGeometry.prototype.getFirstCoordinate = function() {
return this.flatCoordinates.slice(0, this.stride)
};
ol.geom.SimpleGeometry.prototype.getFlatCoordinates = function() {
return this.flatCoordinates
};
ol.geom.SimpleGeometry.prototype.getLastCoordinate = function() {
return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride)
};
ol.geom.SimpleGeometry.prototype.getLayout = function() {
return this.layout
};
ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = function(squaredTolerance) {
if(this.simplifiedGeometryRevision != this.getRevision()) {
goog.object.clear(this.simplifiedGeometryCache);
this.simplifiedGeometryMaxMinSquaredTolerance = 0;
this.simplifiedGeometryRevision = this.getRevision()
}
if(squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance) {
return this
}
var key = squaredTolerance.toString();
if(this.simplifiedGeometryCache.hasOwnProperty(key)) {
return this.simplifiedGeometryCache[key]
}else {
var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance);
var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();
if(simplifiedFlatCoordinates.length < this.flatCoordinates.length) {
this.simplifiedGeometryCache[key] = simplifiedGeometry;
return simplifiedGeometry
}else {
this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
return this
}
}
};
ol.geom.SimpleGeometry.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
return this
};
ol.geom.SimpleGeometry.prototype.getStride = function() {
return this.stride
};
ol.geom.SimpleGeometry.prototype.setFlatCoordinatesInternal = function(layout, flatCoordinates) {
this.stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout);
this.layout = layout;
this.flatCoordinates = flatCoordinates
};
ol.geom.SimpleGeometry.prototype.setLayout = function(layout, coordinates, nesting) {
var stride;
if(goog.isDef(layout)) {
stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout)
}else {
var i;
for(i = 0;i < nesting;++i) {
if(coordinates.length === 0) {
this.layout = ol.geom.GeometryLayout.XY;
this.stride = 2;
return
}else {
coordinates = (coordinates[0])
}
}
stride = (coordinates).length;
layout = ol.geom.SimpleGeometry.getLayoutForStride_(stride)
}
this.layout = layout;
this.stride = stride
};
ol.geom.SimpleGeometry.prototype.transform = function(transformFn) {
if(!goog.isNull(this.flatCoordinates)) {
transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);
this.dispatchChangeEvent()
}
};
ol.geom.transformSimpleGeometry2D = function(simpleGeometry, transform, opt_dest) {
var flatCoordinates = simpleGeometry.getFlatCoordinates();
if(goog.isNull(flatCoordinates)) {
return null
}else {
var stride = simpleGeometry.getStride();
return ol.geom.flat.transform.transform2D(flatCoordinates, stride, transform, opt_dest)
}
};
goog.provide("ol.geom.flat.area");
ol.geom.flat.area.linearRing = function(flatCoordinates, offset, end, stride) {
var twiceArea = 0;
var x1 = flatCoordinates[end - stride];
var y1 = flatCoordinates[end - stride + 1];
for(;offset < end;offset += stride) {
var x2 = flatCoordinates[offset];
var y2 = flatCoordinates[offset + 1];
twiceArea += y1 * x2 - x1 * y2;
x1 = x2;
y1 = y2
}
return twiceArea / 2
};
ol.geom.flat.area.linearRings = function(flatCoordinates, offset, ends, stride) {
var area = 0;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
area += ol.geom.flat.area.linearRing(flatCoordinates, offset, end, stride);
offset = end
}
return area
};
ol.geom.flat.area.linearRingss = function(flatCoordinates, offset, endss, stride) {
var area = 0;
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
area += ol.geom.flat.area.linearRings(flatCoordinates, offset, ends, stride);
offset = ends[ends.length - 1]
}
return area
};
goog.provide("ol.math");
goog.require("goog.asserts");
ol.math.cosh = function(x) {
return(Math.exp(x) + Math.exp(-x)) / 2
};
ol.math.coth = function(x) {
var expMinusTwoX = Math.exp(-2 * x);
return(1 + expMinusTwoX) / (1 - expMinusTwoX)
};
ol.math.csch = function(x) {
return 2 / (Math.exp(x) - Math.exp(-x))
};
ol.math.roundUpToPowerOfTwo = function(x) {
goog.asserts.assert(0 < x);
return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2))
};
ol.math.sech = function(x) {
return 2 / (Math.exp(x) + Math.exp(-x))
};
ol.math.sinh = function(x) {
return(Math.exp(x) - Math.exp(-x)) / 2
};
ol.math.squaredSegmentDistance = function(x, y, x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
if(dx !== 0 || dy !== 0) {
var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
if(t > 1) {
x1 = x2;
y1 = y2
}else {
if(t > 0) {
x1 += dx * t;
y1 += dy * t
}
}
}
return ol.math.squaredDistance(x, y, x1, y1)
};
ol.math.squaredDistance = function(x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return dx * dx + dy * dy
};
ol.math.tanh = function(x) {
var expMinusTwoX = Math.exp(-2 * x);
return(1 - expMinusTwoX) / (1 + expMinusTwoX)
};
goog.provide("ol.geom.flat.closest");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("ol.math");
ol.geom.flat.closest.point = function(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {
var x1 = flatCoordinates[offset1];
var y1 = flatCoordinates[offset1 + 1];
var dx = flatCoordinates[offset2] - x1;
var dy = flatCoordinates[offset2 + 1] - y1;
var i, offset;
if(dx === 0 && dy === 0) {
offset = offset1
}else {
var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
if(t > 1) {
offset = offset2
}else {
if(t > 0) {
for(i = 0;i < stride;++i) {
closestPoint[i] = goog.math.lerp(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t)
}
closestPoint.length = stride;
return
}else {
offset = offset1
}
}
}
for(i = 0;i < stride;++i) {
closestPoint[i] = flatCoordinates[offset + i]
}
closestPoint.length = stride
};
ol.geom.flat.closest.getMaxSquaredDelta = function(flatCoordinates, offset, end, stride, maxSquaredDelta) {
var x1 = flatCoordinates[offset];
var y1 = flatCoordinates[offset + 1];
for(offset += stride;offset < end;offset += stride) {
var x2 = flatCoordinates[offset];
var y2 = flatCoordinates[offset + 1];
var squaredDelta = ol.math.squaredDistance(x1, y1, x2, y2);
if(squaredDelta > maxSquaredDelta) {
maxSquaredDelta = squaredDelta
}
x1 = x2;
y1 = y2
}
return maxSquaredDelta
};
ol.geom.flat.closest.getsMaxSquaredDelta = function(flatCoordinates, offset, ends, stride, maxSquaredDelta) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
maxSquaredDelta = ol.geom.flat.closest.getMaxSquaredDelta(flatCoordinates, offset, end, stride, maxSquaredDelta);
offset = end
}
return maxSquaredDelta
};
ol.geom.flat.closest.getssMaxSquaredDelta = function(flatCoordinates, offset, endss, stride, maxSquaredDelta) {
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
maxSquaredDelta = ol.geom.flat.closest.getsMaxSquaredDelta(flatCoordinates, offset, ends, stride, maxSquaredDelta);
offset = ends[ends.length - 1]
}
return maxSquaredDelta
};
ol.geom.flat.closest.getClosestPoint = function(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
if(offset == end) {
return minSquaredDistance
}
var i, squaredDistance;
if(maxDelta === 0) {
squaredDistance = ol.math.squaredDistance(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);
if(squaredDistance < minSquaredDistance) {
for(i = 0;i < stride;++i) {
closestPoint[i] = flatCoordinates[offset + i]
}
closestPoint.length = stride;
return squaredDistance
}else {
return minSquaredDistance
}
}
goog.asserts.assert(maxDelta > 0);
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN];
var index = offset + stride;
while(index < end) {
ol.geom.flat.closest.point(flatCoordinates, index - stride, index, stride, x, y, tmpPoint);
squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);
if(squaredDistance < minSquaredDistance) {
minSquaredDistance = squaredDistance;
for(i = 0;i < stride;++i) {
closestPoint[i] = tmpPoint[i]
}
closestPoint.length = stride;
index += stride
}else {
index += stride * Math.max((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) / maxDelta | 0, 1)
}
}
if(isRing) {
ol.geom.flat.closest.point(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);
squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);
if(squaredDistance < minSquaredDistance) {
minSquaredDistance = squaredDistance;
for(i = 0;i < stride;++i) {
closestPoint[i] = tmpPoint[i]
}
closestPoint.length = stride
}
}
return minSquaredDistance
};
ol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN];
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
minSquaredDistance = ol.geom.flat.closest.getClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
offset = end
}
return minSquaredDistance
};
ol.geom.flat.closest.getssClosestPoint = function(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN];
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
minSquaredDistance = ol.geom.flat.closest.getsClosestPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
offset = ends[ends.length - 1]
}
return minSquaredDistance
};
goog.provide("ol.geom.flat.deflate");
goog.require("goog.asserts");
ol.geom.flat.deflate.coordinate = function(flatCoordinates, offset, coordinate, stride) {
goog.asserts.assert(coordinate.length == stride);
var i, ii;
for(i = 0, ii = coordinate.length;i < ii;++i) {
flatCoordinates[offset++] = coordinate[i]
}
return offset
};
ol.geom.flat.deflate.coordinates = function(flatCoordinates, offset, coordinates, stride) {
var i, ii;
for(i = 0, ii = coordinates.length;i < ii;++i) {
var coordinate = coordinates[i];
goog.asserts.assert(coordinate.length == stride);
var j;
for(j = 0;j < stride;++j) {
flatCoordinates[offset++] = coordinate[j]
}
}
return offset
};
ol.geom.flat.deflate.coordinatess = function(flatCoordinates, offset, coordinatess, stride, opt_ends) {
var ends = goog.isDef(opt_ends) ? opt_ends : [];
var i = 0;
var j, jj;
for(j = 0, jj = coordinatess.length;j < jj;++j) {
var end = ol.geom.flat.deflate.coordinates(flatCoordinates, offset, coordinatess[j], stride);
ends[i++] = end;
offset = end
}
ends.length = i;
return ends
};
ol.geom.flat.deflate.coordinatesss = function(flatCoordinates, offset, coordinatesss, stride, opt_endss) {
var endss = goog.isDef(opt_endss) ? opt_endss : [];
var i = 0;
var j, jj;
for(j = 0, jj = coordinatesss.length;j < jj;++j) {
var ends = ol.geom.flat.deflate.coordinatess(flatCoordinates, offset, coordinatesss[j], stride, endss[i]);
endss[i++] = ends;
offset = ends[ends.length - 1]
}
endss.length = i;
return endss
};
goog.provide("ol.geom.flat.inflate");
ol.geom.flat.inflate.coordinates = function(flatCoordinates, offset, end, stride, opt_coordinates) {
var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : [];
var i = 0;
var j;
for(j = offset;j < end;j += stride) {
coordinates[i++] = flatCoordinates.slice(j, j + stride)
}
coordinates.length = i;
return coordinates
};
ol.geom.flat.inflate.coordinatess = function(flatCoordinates, offset, ends, stride, opt_coordinatess) {
var coordinatess = goog.isDef(opt_coordinatess) ? opt_coordinatess : [];
var i = 0;
var j, jj;
for(j = 0, jj = ends.length;j < jj;++j) {
var end = ends[j];
coordinatess[i++] = ol.geom.flat.inflate.coordinates(flatCoordinates, offset, end, stride, coordinatess[i]);
offset = end
}
coordinatess.length = i;
return coordinatess
};
ol.geom.flat.inflate.coordinatesss = function(flatCoordinates, offset, endss, stride, opt_coordinatesss) {
var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : [];
var i = 0;
var j, jj;
for(j = 0, jj = endss.length;j < jj;++j) {
var ends = endss[j];
coordinatesss[i++] = ol.geom.flat.inflate.coordinatess(flatCoordinates, offset, ends, stride, coordinatesss[i]);
offset = ends[ends.length - 1]
}
coordinatesss.length = i;
return coordinatesss
};
goog.provide("ol.geom.flat.simplify");
goog.require("ol.math");
ol.geom.flat.simplify.lineString = function(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {
var simplifiedFlatCoordinates = goog.isDef(opt_simplifiedFlatCoordinates) ? opt_simplifiedFlatCoordinates : [];
if(!highQuality) {
end = ol.geom.flat.simplify.radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);
flatCoordinates = simplifiedFlatCoordinates;
offset = 0;
stride = 2
}
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);
return simplifiedFlatCoordinates
};
ol.geom.flat.simplify.douglasPeucker = function(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
var n = (end - offset) / stride;
if(n < 3) {
for(;offset < end;offset += stride) {
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1]
}
return simplifiedOffset
}
var markers = new Array(n);
markers[0] = 1;
markers[n - 1] = 1;
var stack = [offset, end - stride];
var index = 0;
var i;
while(stack.length > 0) {
var last = stack.pop();
var first = stack.pop();
var maxSquaredDistance = 0;
var x1 = flatCoordinates[first];
var y1 = flatCoordinates[first + 1];
var x2 = flatCoordinates[last];
var y2 = flatCoordinates[last + 1];
for(i = first + stride;i < last;i += stride) {
var x = flatCoordinates[i];
var y = flatCoordinates[i + 1];
var squaredDistance = ol.math.squaredSegmentDistance(x, y, x1, y1, x2, y2);
if(squaredDistance > maxSquaredDistance) {
index = i;
maxSquaredDistance = squaredDistance
}
}
if(maxSquaredDistance > squaredTolerance) {
markers[(index - offset) / stride] = 1;
if(first + stride < index) {
stack.push(first, index)
}
if(index + stride < last) {
stack.push(index, last)
}
}
}
for(i = 0;i < n;++i) {
if(markers[i]) {
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride];
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride + 1]
}
}
return simplifiedOffset
};
ol.geom.flat.simplify.douglasPeuckers = function(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
simplifiedOffset = ol.geom.flat.simplify.douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset);
simplifiedEnds.push(simplifiedOffset);
offset = end
}
return simplifiedOffset
};
ol.geom.flat.simplify.douglasPeuckerss = function(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
var simplifiedEnds = [];
simplifiedOffset = ol.geom.flat.simplify.douglasPeuckers(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
simplifiedEndss.push(simplifiedEnds);
offset = ends[ends.length - 1]
}
return simplifiedOffset
};
ol.geom.flat.simplify.radialDistance = function(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
if(end <= offset + stride) {
for(;offset < end;offset += stride) {
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];
simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1]
}
return simplifiedOffset
}
var x1 = flatCoordinates[offset];
var y1 = flatCoordinates[offset + 1];
simplifiedFlatCoordinates[simplifiedOffset++] = x1;
simplifiedFlatCoordinates[simplifiedOffset++] = y1;
var x2 = x1;
var y2 = y1;
for(offset += stride;offset < end;offset += stride) {
x2 = flatCoordinates[offset];
y2 = flatCoordinates[offset + 1];
if(ol.math.squaredDistance(x1, y1, x2, y2) > squaredTolerance) {
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
x1 = x2;
y1 = y2
}
}
if(x2 != x1 || y2 != y1) {
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2
}
return simplifiedOffset
};
ol.geom.flat.simplify.snap = function(value, tolerance) {
return tolerance * Math.round(value / tolerance)
};
ol.geom.flat.simplify.quantize = function(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) {
if(offset == end) {
return simplifiedOffset
}
var x1 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
var y1 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
simplifiedFlatCoordinates[simplifiedOffset++] = x1;
simplifiedFlatCoordinates[simplifiedOffset++] = y1;
var x2, y2;
do {
x2 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
y2 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
if(offset == end) {
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
return simplifiedOffset
}
}while(x2 == x1 && y2 == y1);
while(offset < end) {
var x3, y3;
x3 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
y3 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
if(x3 == x2 && y3 == y2) {
continue
}
var dx1 = x2 - x1;
var dy1 = y2 - y1;
var dx2 = x3 - x1;
var dy2 = y3 - y1;
if(dx1 * dy2 == dy1 * dx2 && (dx1 < 0 && dx2 < dx1 || dx1 == dx2 || dx1 > 0 && dx2 > dx1) && (dy1 < 0 && dy2 < dy1 || dy1 == dy2 || dy1 > 0 && dy2 > dy1)) {
x2 = x3;
y2 = y3;
continue
}
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
x1 = x2;
y1 = y2;
x2 = x3;
y2 = y3
}
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
return simplifiedOffset
};
ol.geom.flat.simplify.quantizes = function(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
simplifiedOffset = ol.geom.flat.simplify.quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset);
simplifiedEnds.push(simplifiedOffset);
offset = end
}
return simplifiedOffset
};
ol.geom.flat.simplify.quantizess = function(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
var simplifiedEnds = [];
simplifiedOffset = ol.geom.flat.simplify.quantizes(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
simplifiedEndss.push(simplifiedEnds);
offset = ends[ends.length - 1]
}
return simplifiedOffset
};
goog.provide("ol.geom.LinearRing");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.area");
goog.require("ol.geom.flat.closest");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.geom.flat.simplify");
ol.geom.LinearRing = function(coordinates, opt_layout) {
goog.base(this);
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry);
ol.geom.LinearRing.prototype.clone = function() {
var linearRing = new ol.geom.LinearRing(null);
linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
return linearRing
};
ol.geom.LinearRing.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
if(this.maxDeltaRevision_ != this.getRevision()) {
this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
this.maxDeltaRevision_ = this.getRevision()
}
return ol.geom.flat.closest.getClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance)
};
ol.geom.LinearRing.prototype.getArea = function() {
return ol.geom.flat.area.linearRing(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
};
ol.geom.LinearRing.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
};
ol.geom.LinearRing.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);
var simplifiedLinearRing = new ol.geom.LinearRing(null);
simplifiedLinearRing.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);
return simplifiedLinearRing
};
ol.geom.LinearRing.prototype.getType = function() {
return ol.geom.GeometryType.LINEAR_RING
};
ol.geom.LinearRing.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null)
}else {
this.setLayout(opt_layout, coordinates, 1);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(this.flatCoordinates, 0, coordinates, this.stride);
this.dispatchChangeEvent()
}
};
ol.geom.LinearRing.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.dispatchChangeEvent()
};
goog.provide("ol.geom.Point");
goog.require("goog.asserts");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.deflate");
goog.require("ol.math");
ol.geom.Point = function(coordinates, opt_layout) {
goog.base(this);
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.Point, ol.geom.SimpleGeometry);
ol.geom.Point.prototype.clone = function() {
var point = new ol.geom.Point(null);
point.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
return point
};
ol.geom.Point.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
var flatCoordinates = this.flatCoordinates;
var squaredDistance = ol.math.squaredDistance(x, y, flatCoordinates[0], flatCoordinates[1]);
if(squaredDistance < minSquaredDistance) {
var stride = this.stride;
var i;
for(i = 0;i < stride;++i) {
closestPoint[i] = flatCoordinates[i]
}
closestPoint.length = stride;
return squaredDistance
}else {
return minSquaredDistance
}
};
ol.geom.Point.prototype.getCoordinates = function() {
return this.flatCoordinates.slice()
};
ol.geom.Point.prototype.getExtent = function(opt_extent) {
if(this.extentRevision != this.getRevision()) {
this.extent = ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates, this.extent);
this.extentRevision = this.getRevision()
}
goog.asserts.assert(goog.isDef(this.extent));
return ol.extent.returnOrUpdate(this.extent, opt_extent)
};
ol.geom.Point.prototype.getType = function() {
return ol.geom.GeometryType.POINT
};
ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null)
}else {
this.setLayout(opt_layout, coordinates, 0);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
this.flatCoordinates.length = ol.geom.flat.deflate.coordinate(this.flatCoordinates, 0, coordinates, this.stride);
this.dispatchChangeEvent()
}
};
ol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.dispatchChangeEvent()
};
goog.provide("ol.geom.flat.contains");
goog.require("goog.asserts");
ol.geom.flat.contains.linearRingContainsXY = function(flatCoordinates, offset, end, stride, x, y) {
var contains = false;
var x1 = flatCoordinates[end - stride];
var y1 = flatCoordinates[end - stride + 1];
for(;offset < end;offset += stride) {
var x2 = flatCoordinates[offset];
var y2 = flatCoordinates[offset + 1];
var intersect = y1 > y != y2 > y && x < (x2 - x1) * (y - y1) / (y2 - y1) + x1;
if(intersect) {
contains = !contains
}
x1 = x2;
y1 = y2
}
return contains
};
ol.geom.flat.contains.linearRingsContainsXY = function(flatCoordinates, offset, ends, stride, x, y) {
goog.asserts.assert(ends.length > 0);
if(ends.length === 0) {
return false
}
if(!ol.geom.flat.contains.linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {
return false
}
var i, ii;
for(i = 1, ii = ends.length;i < ii;++i) {
if(ol.geom.flat.contains.linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
return false
}
}
return true
};
ol.geom.flat.contains.linearRingssContainsXY = function(flatCoordinates, offset, endss, stride, x, y) {
goog.asserts.assert(endss.length > 0);
if(endss.length === 0) {
return false
}
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
if(ol.geom.flat.contains.linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
return true
}
offset = ends[ends.length - 1]
}
return false
};
goog.provide("ol.geom.flat.interiorpoint");
goog.require("goog.asserts");
goog.require("ol.geom.flat.contains");
ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) {
var i, ii, x, x1, x2, y1, y2;
var y = flatCenters[flatCentersOffset + 1];
var intersections = [];
var end = ends[0];
x1 = flatCoordinates[end - stride];
y1 = flatCoordinates[end - stride + 1];
for(i = offset;i < end;i += stride) {
x2 = flatCoordinates[i];
y2 = flatCoordinates[i + 1];
if(y <= y1 && y2 <= y || y1 <= y && y <= y2) {
x = (y - y1) / (y2 - y1) * (x2 - x1) + x1;
intersections.push(x)
}
x1 = x2;
y1 = y2
}
var pointX = NaN;
var maxSegmentLength = -Infinity;
intersections.sort();
x1 = intersections[0];
for(i = 1, ii = intersections.length;i < ii;++i) {
x2 = intersections[i];
var segmentLength = Math.abs(x2 - x1);
if(segmentLength > maxSegmentLength) {
x = (x1 + x2) / 2;
if(ol.geom.flat.contains.linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
pointX = x;
maxSegmentLength = segmentLength
}
}
x1 = x2
}
if(isNaN(pointX)) {
pointX = flatCenters[flatCentersOffset]
}
if(goog.isDef(opt_dest)) {
opt_dest.push(pointX, y);
return opt_dest
}else {
return[pointX, y]
}
};
ol.geom.flat.interiorpoint.linearRingss = function(flatCoordinates, offset, endss, stride, flatCenters) {
goog.asserts.assert(2 * endss.length == flatCenters.length);
var interiorPoints = [];
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
interiorPoints = ol.geom.flat.interiorpoint.linearRings(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints);
offset = ends[ends.length - 1]
}
return interiorPoints
};
goog.provide("ol.geom.flat.reverse");
ol.geom.flat.reverse.coordinates = function(flatCoordinates, offset, end, stride) {
while(offset < end - stride) {
var i;
for(i = 0;i < stride;++i) {
var tmp = flatCoordinates[offset + i];
flatCoordinates[offset + i] = flatCoordinates[end - stride + i];
flatCoordinates[end - stride + i] = tmp
}
offset += stride;
end -= stride
}
};
goog.provide("ol.geom.flat.orient");
goog.require("ol.geom.flat.reverse");
ol.geom.flat.orient.linearRingIsClockwise = function(flatCoordinates, offset, end, stride) {
var edge = 0;
var x1 = flatCoordinates[end - stride];
var y1 = flatCoordinates[end - stride + 1];
for(;offset < end;offset += stride) {
var x2 = flatCoordinates[offset];
var y2 = flatCoordinates[offset + 1];
edge += (x2 - x1) * (y2 + y1);
x1 = x2;
y1 = y2
}
return edge > 0
};
ol.geom.flat.orient.linearRingsAreOriented = function(flatCoordinates, offset, ends, stride) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates, offset, end, stride);
if(i === 0 ? !isClockwise : isClockwise) {
return false
}
offset = end
}
return true
};
ol.geom.flat.linearRingssAreOriented = function(flatCoordinates, offset, endss, stride) {
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
if(!ol.geom.flat.orient.linearRingsAreOriented(flatCoordinates, offset, endss[i], stride)) {
return false
}
}
return true
};
ol.geom.flat.orient.orientLinearRings = function(flatCoordinates, offset, ends, stride) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates, offset, end, stride);
var reverse = i === 0 ? !isClockwise : isClockwise;
if(reverse) {
ol.geom.flat.reverse.coordinates(flatCoordinates, offset, end, stride)
}
offset = end
}
return offset
};
ol.geom.flat.orient.orientLinearRingss = function(flatCoordinates, offset, endss, stride) {
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
offset = ol.geom.flat.orient.orientLinearRings(flatCoordinates, offset, endss[i], stride)
}
return offset
};
goog.provide("ol.geom.Polygon");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.Point");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.area");
goog.require("ol.geom.flat.closest");
goog.require("ol.geom.flat.contains");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.geom.flat.interiorpoint");
goog.require("ol.geom.flat.orient");
goog.require("ol.geom.flat.simplify");
ol.geom.Polygon = function(coordinates, opt_layout) {
goog.base(this);
this.ends_ = [];
this.flatInteriorPointRevision_ = -1;
this.flatInteriorPoint_ = null;
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.orientedRevision_ = -1;
this.orientedFlatCoordinates_ = null;
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry);
ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) {
goog.asserts.assert(linearRing.getLayout() == this.layout);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = linearRing.getFlatCoordinates().slice()
}else {
ol.array.safeExtend(this.flatCoordinates, linearRing.getFlatCoordinates())
}
this.ends_.push(this.flatCoordinates.length);
this.dispatchChangeEvent()
};
ol.geom.Polygon.prototype.clone = function() {
var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.ends_.slice());
return polygon
};
ol.geom.Polygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
if(this.maxDeltaRevision_ != this.getRevision()) {
this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0));
this.maxDeltaRevision_ = this.getRevision()
}
return ol.geom.flat.closest.getsClosestPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance)
};
ol.geom.Polygon.prototype.containsXY = function(x, y) {
return ol.geom.flat.contains.linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y)
};
ol.geom.Polygon.prototype.getArea = function() {
return ol.geom.flat.area.linearRings(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride)
};
ol.geom.Polygon.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinatess(this.flatCoordinates, 0, this.ends_, this.stride)
};
ol.geom.Polygon.prototype.getEnds = function() {
return this.ends_
};
ol.geom.Polygon.prototype.getFlatInteriorPoint = function() {
if(this.flatInteriorPointRevision_ != this.getRevision()) {
var flatCenter = ol.extent.getCenter(this.getExtent());
this.flatInteriorPoint_ = ol.geom.flat.interiorpoint.linearRings(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0);
this.flatInteriorPointRevision_ = this.getRevision()
}
return this.flatInteriorPoint_
};
ol.geom.Polygon.prototype.getInteriorPoint = function() {
return new ol.geom.Point(this.getFlatInteriorPoint())
};
ol.geom.Polygon.prototype.getLinearRing = function(index) {
goog.asserts.assert(0 <= index && index < this.ends_.length);
if(index < 0 || this.ends_.length <= index) {
return null
}
var linearRing = new ol.geom.LinearRing(null);
linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));
return linearRing
};
ol.geom.Polygon.prototype.getLinearRings = function() {
var layout = this.layout;
var flatCoordinates = this.flatCoordinates;
var ends = this.ends_;
var linearRings = [];
var offset = 0;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var linearRing = new ol.geom.LinearRing(null);
linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));
linearRings.push(linearRing);
offset = end
}
return linearRings
};
ol.geom.Polygon.prototype.getOrientedFlatCoordinates = function() {
if(this.orientedRevision_ != this.getRevision()) {
var flatCoordinates = this.flatCoordinates;
if(ol.geom.flat.orient.linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {
this.orientedFlatCoordinates_ = flatCoordinates
}else {
this.orientedFlatCoordinates_ = flatCoordinates.slice();
this.orientedFlatCoordinates_.length = ol.geom.flat.orient.orientLinearRings(this.orientedFlatCoordinates_, 0, this.ends_, this.stride)
}
this.orientedRevision_ = this.getRevision()
}
return this.orientedFlatCoordinates_
};
ol.geom.Polygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
var simplifiedEnds = [];
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizes(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds);
var simplifiedPolygon = new ol.geom.Polygon(null);
simplifiedPolygon.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);
return simplifiedPolygon
};
ol.geom.Polygon.prototype.getType = function() {
return ol.geom.GeometryType.POLYGON
};
ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_)
}else {
this.setLayout(opt_layout, coordinates, 2);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
var ends = ol.geom.flat.deflate.coordinatess(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
this.dispatchChangeEvent()
}
};
ol.geom.Polygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {
if(goog.isNull(flatCoordinates)) {
goog.asserts.assert(!goog.isNull(ends) && ends.length === 0)
}else {
if(ends.length === 0) {
goog.asserts.assert(flatCoordinates.length === 0)
}else {
goog.asserts.assert(flatCoordinates.length == ends[ends.length - 1])
}
}
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.ends_ = ends;
this.dispatchChangeEvent()
};
/*
Latitude/longitude spherical geodesy formulae taken from
http://www.movable-type.co.uk/scripts/latlong.html
Licenced under CC-BY-3.0.
*/
goog.provide("ol.Sphere");
goog.require("goog.array");
goog.require("goog.math");
goog.require("ol.geom.Polygon");
ol.Sphere = function(radius) {
this.radius = radius
};
ol.Sphere.prototype.circle = function(center, radius, opt_n) {
var n = goog.isDef(opt_n) ? opt_n : 32;
var flatCoordinates = [];
var i;
for(i = 0;i < n;++i) {
goog.array.extend(flatCoordinates, this.offset(center, radius, 2 * Math.PI * i / n))
}
flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
return polygon
};
ol.Sphere.prototype.cosineDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
return this.radius * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(deltaLon))
};
ol.Sphere.prototype.crossTrackDistance = function(c1, c2, c3) {
var d13 = this.cosineDistance(c1, c2);
var theta12 = goog.math.toRadians(this.initialBearing(c1, c2));
var theta13 = goog.math.toRadians(this.initialBearing(c1, c3));
return this.radius * Math.asin(Math.sin(d13 / this.radius) * Math.sin(theta13 - theta12))
};
ol.Sphere.prototype.equirectangularDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var x = deltaLon * Math.cos((lat1 + lat2) / 2);
var y = lat2 - lat1;
return this.radius * Math.sqrt(x * x + y * y)
};
ol.Sphere.prototype.finalBearing = function(c1, c2) {
return(this.initialBearing(c2, c1) + 180) % 360
};
ol.Sphere.prototype.haversineDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLatBy2 = (lat2 - lat1) / 2;
var deltaLonBy2 = goog.math.toRadians(c2[0] - c1[0]) / 2;
var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) + Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) * Math.cos(lat1) * Math.cos(lat2);
return 2 * this.radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
};
ol.Sphere.prototype.interpolate = function(c1, c2, fraction) {
var lat1 = goog.math.toRadians(c1[1]);
var lon1 = goog.math.toRadians(c1[0]);
var lat2 = goog.math.toRadians(c2[1]);
var lon2 = goog.math.toRadians(c2[0]);
var cosLat1 = Math.cos(lat1);
var sinLat1 = Math.sin(lat1);
var cosLat2 = Math.cos(lat2);
var sinLat2 = Math.sin(lat2);
var cosDeltaLon = Math.cos(lon2 - lon1);
var d = sinLat1 * sinLat2 + cosLat1 * cosLat2 * cosDeltaLon;
if(1 <= d) {
return c2.slice()
}
d = fraction * Math.acos(d);
var cosD = Math.cos(d);
var sinD = Math.sin(d);
var y = Math.sin(lon2 - lon1) * cosLat2;
var x = cosLat1 * sinLat2 - sinLat1 * cosLat2 * cosDeltaLon;
var theta = Math.atan2(y, x);
var lat = Math.asin(sinLat1 * cosD + cosLat1 * sinD * Math.cos(theta));
var lon = lon1 + Math.atan2(Math.sin(theta) * sinD * cosLat1, cosD - sinLat1 * Math.sin(lat));
return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)]
};
ol.Sphere.prototype.initialBearing = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var y = Math.sin(deltaLon) * Math.cos(lat2);
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);
return goog.math.toDegrees(Math.atan2(y, x))
};
ol.Sphere.prototype.maximumLatitude = function(bearing, latitude) {
return Math.cos(Math.abs(Math.sin(goog.math.toRadians(bearing)) * Math.cos(goog.math.toRadians(latitude))))
};
ol.Sphere.prototype.midpoint = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var lon1 = goog.math.toRadians(c1[0]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var Bx = Math.cos(lat2) * Math.cos(deltaLon);
var By = Math.cos(lat2) * Math.sin(deltaLon);
var cosLat1PlusBx = Math.cos(lat1) + Bx;
var lat = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt(cosLat1PlusBx * cosLat1PlusBx + By * By));
var lon = lon1 + Math.atan2(By, cosLat1PlusBx);
return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)]
};
ol.Sphere.prototype.offset = function(c1, distance, bearing) {
var lat1 = goog.math.toRadians(c1[1]);
var lon1 = goog.math.toRadians(c1[0]);
var dByR = distance / this.radius;
var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)]
};
goog.provide("ol.sphere.NORMAL");
goog.require("ol.Sphere");
ol.sphere.NORMAL = new ol.Sphere(6370997);
goog.provide("ol.proj");
goog.provide("ol.proj.METERS_PER_UNIT");
goog.provide("ol.proj.Projection");
goog.provide("ol.proj.ProjectionLike");
goog.provide("ol.proj.Units");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol");
goog.require("ol.Extent");
goog.require("ol.TransformFunction");
goog.require("ol.sphere.NORMAL");
ol.HAVE_PROJ4JS = ol.ENABLE_PROJ4JS && typeof Proj4js == "object";
ol.proj.ProjectionLike;
ol.proj.Units = {DEGREES:"degrees", FEET:"ft", METERS:"m", PIXELS:"pixels"};
ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] = 2 * Math.PI * ol.sphere.NORMAL.radius / 360;
ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048;
ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1;
ol.proj.Projection = function(options) {
this.code_ = options.code;
this.units_ = (options.units);
this.extent_ = goog.isDef(options.extent) ? options.extent : null;
this.axisOrientation_ = goog.isDef(options.axisOrientation) ? options.axisOrientation : "enu";
this.global_ = goog.isDef(options.global) ? options.global : false;
this.defaultTileGrid_ = null
};
ol.proj.Projection.prototype.getCode = function() {
return this.code_
};
ol.proj.Projection.prototype.getExtent = function() {
return this.extent_
};
ol.proj.Projection.prototype.getPointResolution = goog.abstractMethod;
ol.proj.Projection.prototype.getUnits = function() {
return this.units_
};
ol.proj.Projection.prototype.getMetersPerUnit = function() {
return ol.proj.METERS_PER_UNIT[this.units_]
};
ol.proj.Projection.prototype.getAxisOrientation = function() {
return this.axisOrientation_
};
ol.proj.Projection.prototype.isGlobal = function() {
return this.global_
};
ol.proj.Projection.prototype.getDefaultTileGrid = function() {
return this.defaultTileGrid_
};
ol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) {
this.defaultTileGrid_ = tileGrid
};
ol.Proj4jsProjection_ = function(proj4jsProj, options) {
var units = (proj4jsProj.units);
var config = ({units:units, axisOrientation:proj4jsProj.axis});
goog.object.extend(config, options);
goog.base(this, config);
this.proj4jsProj_ = proj4jsProj;
this.toEPSG4326_ = null
};
goog.inherits(ol.Proj4jsProjection_, ol.proj.Projection);
ol.Proj4jsProjection_.prototype.getMetersPerUnit = function() {
var metersPerUnit = this.proj4jsProj_.to_meter;
if(!goog.isDef(metersPerUnit)) {
metersPerUnit = ol.proj.METERS_PER_UNIT[this.units_]
}
return metersPerUnit
};
ol.Proj4jsProjection_.prototype.getPointResolution = function(resolution, point) {
if(this.getUnits() == ol.proj.Units.DEGREES) {
return resolution
}else {
if(goog.isNull(this.toEPSG4326_)) {
this.toEPSG4326_ = ol.proj.getTransformFromProjections(this, ol.proj.getProj4jsProjectionFromCode_({code:"EPSG:4326", extent:null}))
}
var vertices = [point[0] - resolution / 2, point[1], point[0] + resolution / 2, point[1], point[0], point[1] - resolution / 2, point[0], point[1] + resolution / 2];
vertices = this.toEPSG4326_(vertices, vertices, 2);
var width = ol.sphere.NORMAL.haversineDistance(vertices.slice(0, 2), vertices.slice(2, 4));
var height = ol.sphere.NORMAL.haversineDistance(vertices.slice(4, 6), vertices.slice(6, 8));
var pointResolution = (width + height) / 2;
if(this.getUnits() == ol.proj.Units.FEET) {
pointResolution /= 0.3048
}
return pointResolution
}
};
ol.Proj4jsProjection_.prototype.getProj4jsProj = function() {
return this.proj4jsProj_
};
ol.proj.proj4jsProjections_ = {};
ol.proj.projections_ = {};
ol.proj.transforms_ = {};
ol.proj.addEquivalentProjections = function(projections) {
ol.proj.addProjections(projections);
goog.array.forEach(projections, function(source) {
goog.array.forEach(projections, function(destination) {
if(source !== destination) {
ol.proj.addTransform(source, destination, ol.proj.cloneTransform)
}
})
})
};
ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTransform, inverseTransform) {
goog.array.forEach(projections1, function(projection1) {
goog.array.forEach(projections2, function(projection2) {
ol.proj.addTransform(projection1, projection2, forwardTransform);
ol.proj.addTransform(projection2, projection1, inverseTransform)
})
})
};
ol.proj.addProj4jsProjection_ = function(proj4jsProjection) {
var proj4jsProjections = ol.proj.proj4jsProjections_;
var code = proj4jsProjection.getCode();
goog.asserts.assert(!goog.object.containsKey(proj4jsProjections, code));
proj4jsProjections[code] = proj4jsProjection
};
ol.proj.addProjection = function(projection) {
var projections = ol.proj.projections_;
var code = projection.getCode();
projections[code] = projection;
ol.proj.addTransform(projection, projection, ol.proj.cloneTransform)
};
ol.proj.addProjections = function(projections) {
goog.array.forEach(projections, function(projection) {
ol.proj.addProjection(projection)
})
};
ol.proj.clearAllProjections = function() {
if(ol.ENABLE_PROJ4JS) {
ol.proj.proj4jsProjections_ = {}
}
ol.proj.projections_ = {};
ol.proj.transforms_ = {}
};
ol.proj.createProjection = function(projection, defaultCode) {
if(!goog.isDefAndNotNull(projection)) {
return ol.proj.get(defaultCode)
}else {
if(goog.isString(projection)) {
return ol.proj.get(projection)
}else {
goog.asserts.assertInstanceof(projection, ol.proj.Projection);
return projection
}
}
};
ol.proj.addTransform = function(source, destination, transformFn) {
var sourceCode = source.getCode();
var destinationCode = destination.getCode();
var transforms = ol.proj.transforms_;
if(!goog.object.containsKey(transforms, sourceCode)) {
transforms[sourceCode] = {}
}
transforms[sourceCode][destinationCode] = transformFn
};
ol.proj.removeTransform = function(source, destination) {
var sourceCode = source.getCode();
var destinationCode = destination.getCode();
var transforms = ol.proj.transforms_;
goog.asserts.assert(sourceCode in transforms);
goog.asserts.assert(destinationCode in transforms[sourceCode]);
var transform = transforms[sourceCode][destinationCode];
delete transforms[sourceCode][destinationCode];
var keys = goog.object.getKeys(transforms[sourceCode]);
if(keys.length === 0) {
delete transforms[sourceCode]
}
return transform
};
ol.proj.get = function(projectionLike) {
var projection;
if(projectionLike instanceof ol.proj.Projection) {
projection = projectionLike
}else {
if(goog.isString(projectionLike)) {
var code = projectionLike;
projection = ol.proj.projections_[code];
if(ol.HAVE_PROJ4JS && !goog.isDef(projection)) {
projection = ol.proj.getProj4jsProjectionFromCode_({code:code, extent:null})
}
if(!goog.isDef(projection)) {
goog.asserts.assert(goog.isDef(projection));
projection = null
}
}else {
projection = null
}
}
return projection
};
ol.proj.getProj4jsProjectionFromCode_ = function(options) {
var code = options.code;
var proj4jsProjections = ol.proj.proj4jsProjections_;
var proj4jsProjection = proj4jsProjections[code];
if(!goog.isDef(proj4jsProjection)) {
var proj4jsProj = new Proj4js.Proj(code);
var srsCode = proj4jsProj.srsCode;
proj4jsProjection = proj4jsProjections[srsCode];
if(!goog.isDef(proj4jsProjection)) {
var config = (goog.object.clone(options));
config.code = srsCode;
proj4jsProjection = new ol.Proj4jsProjection_(proj4jsProj, config);
proj4jsProjections[srsCode] = proj4jsProjection
}
proj4jsProjections[code] = proj4jsProjection
}
return proj4jsProjection
};
ol.proj.equivalent = function(projection1, projection2) {
if(projection1 === projection2) {
return true
}else {
if(projection1.getUnits() != projection2.getUnits()) {
return false
}else {
var transformFn = ol.proj.getTransformFromProjections(projection1, projection2);
return transformFn === ol.proj.cloneTransform
}
}
};
ol.proj.getTransform = function(source, destination) {
var sourceProjection = ol.proj.get(source);
var destinationProjection = ol.proj.get(destination);
return ol.proj.getTransformFromProjections(sourceProjection, destinationProjection)
};
ol.proj.getTransformFromProjections = function(sourceProjection, destinationProjection) {
var transforms = ol.proj.transforms_;
var sourceCode = sourceProjection.getCode();
var destinationCode = destinationProjection.getCode();
var transform;
if(goog.object.containsKey(transforms, sourceCode) && goog.object.containsKey(transforms[sourceCode], destinationCode)) {
transform = transforms[sourceCode][destinationCode]
}
if(ol.HAVE_PROJ4JS && !goog.isDef(transform)) {
var proj4jsSource;
if(sourceProjection instanceof ol.Proj4jsProjection_) {
proj4jsSource = sourceProjection
}else {
proj4jsSource = ol.proj.getProj4jsProjectionFromCode_({code:sourceCode, extent:null})
}
var sourceProj4jsProj = proj4jsSource.getProj4jsProj();
var proj4jsDestination;
if(destinationProjection instanceof ol.Proj4jsProjection_) {
proj4jsDestination = destinationProjection
}else {
proj4jsDestination = ol.proj.getProj4jsProjectionFromCode_({code:destinationCode, extent:null})
}
var destinationProj4jsProj = proj4jsDestination.getProj4jsProj();
transform = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
var proj4jsPoint;
for(var i = 0;i < length;i += dimension) {
proj4jsPoint = new Proj4js.Point(input[i], input[i + 1]);
proj4jsPoint = Proj4js.transform(sourceProj4jsProj, destinationProj4jsProj, proj4jsPoint);
output[i] = proj4jsPoint.x;
output[i + 1] = proj4jsPoint.y
}
return output
};
ol.proj.addTransform(sourceProjection, destinationProjection, transform)
}
if(!goog.isDef(transform)) {
goog.asserts.assert(goog.isDef(transform));
transform = ol.proj.identityTransform
}
return transform
};
ol.proj.identityTransform = function(input, opt_output, opt_dimension) {
if(goog.isDef(opt_output) && input !== opt_output) {
goog.asserts.fail("This should not be used internally.");
for(var i = 0, ii = input.length;i < ii;++i) {
opt_output[i] = input[i]
}
input = opt_output
}
return input
};
ol.proj.cloneTransform = function(input, opt_output, opt_dimension) {
var output;
if(goog.isDef(opt_output)) {
for(var i = 0, ii = input.length;i < ii;++i) {
opt_output[i] = input[i]
}
output = opt_output
}else {
output = input.slice()
}
return output
};
ol.proj.transform = function(point, source, destination) {
var transformFn = ol.proj.getTransform(source, destination);
return transformFn(point)
};
ol.proj.transformWithProjections = function(point, sourceProjection, destinationProjection) {
var transformFn = ol.proj.getTransformFromProjections(sourceProjection, destinationProjection);
return transformFn(point)
};
ol.proj.configureProj4jsProjection = function(options) {
goog.asserts.assert(!goog.object.containsKey(ol.proj.proj4jsProjections_, options.code));
return ol.proj.getProj4jsProjectionFromCode_(options)
};
goog.provide("ol.View2D");
goog.provide("ol.View2DProperty");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.CenterConstraint");
goog.require("ol.Constraints");
goog.require("ol.IView2D");
goog.require("ol.IView3D");
goog.require("ol.ResolutionConstraint");
goog.require("ol.RotationConstraint");
goog.require("ol.RotationConstraintType");
goog.require("ol.Size");
goog.require("ol.View");
goog.require("ol.coordinate");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.proj.METERS_PER_UNIT");
goog.require("ol.proj.Projection");
goog.require("ol.proj.Units");
ol.View2DProperty = {CENTER:"center", PROJECTION:"projection", RESOLUTION:"resolution", ROTATION:"rotation"};
ol.View2D = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
var values = {};
values[ol.View2DProperty.CENTER] = goog.isDef(options.center) ? options.center : null;
values[ol.View2DProperty.PROJECTION] = ol.proj.createProjection(options.projection, "EPSG:3857");
var resolutionConstraintInfo = ol.View2D.createResolutionConstraint_(options);
this.maxResolution_ = resolutionConstraintInfo.maxResolution;
this.minResolution_ = resolutionConstraintInfo.minResolution;
var centerConstraint = ol.View2D.createCenterConstraint_(options);
var resolutionConstraint = resolutionConstraintInfo.constraint;
var rotationConstraint = ol.View2D.createRotationConstraint_(options);
this.constraints_ = new ol.Constraints(centerConstraint, resolutionConstraint, rotationConstraint);
if(goog.isDef(options.resolution)) {
values[ol.View2DProperty.RESOLUTION] = options.resolution
}else {
if(goog.isDef(options.zoom)) {
values[ol.View2DProperty.RESOLUTION] = this.constrainResolution(this.maxResolution_, options.zoom)
}
}
values[ol.View2DProperty.ROTATION] = goog.isDef(options.rotation) ? options.rotation : 0;
this.setValues(values)
};
goog.inherits(ol.View2D, ol.View);
ol.View2D.prototype.calculateCenterRotate = function(rotation, anchor) {
var center;
var currentCenter = this.getCenter();
if(goog.isDef(currentCenter)) {
center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];
ol.coordinate.rotate(center, rotation - this.getRotation());
ol.coordinate.add(center, anchor)
}
return center
};
ol.View2D.prototype.calculateCenterZoom = function(resolution, anchor) {
var center;
var currentCenter = this.getCenter();
var currentResolution = this.getResolution();
if(goog.isDef(currentCenter) && goog.isDef(currentResolution)) {
var x = anchor[0] - resolution * (anchor[0] - currentCenter[0]) / currentResolution;
var y = anchor[1] - resolution * (anchor[1] - currentCenter[1]) / currentResolution;
center = [x, y]
}
return center
};
ol.View2D.prototype.constrainCenter = function(center) {
return this.constraints_.center(center)
};
ol.View2D.prototype.constrainResolution = function(resolution, opt_delta, opt_direction) {
var delta = opt_delta || 0;
var direction = opt_direction || 0;
return this.constraints_.resolution(resolution, delta, direction)
};
ol.View2D.prototype.constrainRotation = function(rotation, opt_delta) {
var delta = opt_delta || 0;
return this.constraints_.rotation(rotation, delta)
};
ol.View2D.prototype.getCenter = function() {
return(this.get(ol.View2DProperty.CENTER))
};
goog.exportProperty(ol.View2D.prototype, "getCenter", ol.View2D.prototype.getCenter);
ol.View2D.prototype.calculateExtent = function(size) {
goog.asserts.assert(this.isDef());
var center = this.getCenter();
var resolution = this.getResolution();
var minX = center[0] - resolution * size[0] / 2;
var maxX = center[0] + resolution * size[0] / 2;
var minY = center[1] - resolution * size[1] / 2;
var maxY = center[1] + resolution * size[1] / 2;
return[minX, minY, maxX, maxY]
};
ol.View2D.prototype.getProjection = function() {
return(this.get(ol.View2DProperty.PROJECTION))
};
goog.exportProperty(ol.View2D.prototype, "getProjection", ol.View2D.prototype.getProjection);
ol.View2D.prototype.getResolution = function() {
return(this.get(ol.View2DProperty.RESOLUTION))
};
goog.exportProperty(ol.View2D.prototype, "getResolution", ol.View2D.prototype.getResolution);
ol.View2D.prototype.getResolutionForExtent = function(extent, size) {
var xResolution = ol.extent.getWidth(extent) / size[0];
var yResolution = ol.extent.getHeight(extent) / size[1];
return Math.max(xResolution, yResolution)
};
ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) {
var power = opt_power || 2;
var maxResolution = this.maxResolution_;
var minResolution = this.minResolution_;
var max = Math.log(maxResolution / minResolution) / Math.log(power);
return function(value) {
var resolution = maxResolution / Math.pow(power, value * max);
goog.asserts.assert(resolution >= minResolution && resolution <= maxResolution);
return resolution
}
};
ol.View2D.prototype.getRotation = function() {
return(this.get(ol.View2DProperty.ROTATION))
};
goog.exportProperty(ol.View2D.prototype, "getRotation", ol.View2D.prototype.getRotation);
ol.View2D.prototype.getValueForResolutionFunction = function(opt_power) {
var power = opt_power || 2;
var maxResolution = this.maxResolution_;
var minResolution = this.minResolution_;
var max = Math.log(maxResolution / minResolution) / Math.log(power);
return function(resolution) {
var value = Math.log(maxResolution / resolution) / Math.log(power) / max;
goog.asserts.assert(value >= 0 && value <= 1);
return value
}
};
ol.View2D.prototype.getView2D = function() {
return this
};
ol.View2D.prototype.getView2DState = function() {
goog.asserts.assert(this.isDef());
var center = (this.getCenter());
var projection = this.getProjection();
var resolution = (this.getResolution());
var rotation = this.getRotation();
return({center:center.slice(), projection:goog.isDef(projection) ? projection : null, resolution:resolution, rotation:goog.isDef(rotation) ? rotation : 0})
};
ol.View2D.prototype.getView3D = function() {
};
ol.View2D.prototype.getZoom = function() {
var zoom;
var resolution = this.getResolution();
if(goog.isDef(resolution)) {
var res, z = 0;
do {
res = this.constrainResolution(this.maxResolution_, z);
if(res == resolution) {
zoom = z;
break
}
++z
}while(res > this.minResolution_)
}
return zoom
};
ol.View2D.prototype.fitExtent = function(extent, size) {
if(!ol.extent.isEmpty(extent)) {
this.setCenter(ol.extent.getCenter(extent));
var resolution = this.getResolutionForExtent(extent, size);
var constrainedResolution = this.constrainResolution(resolution, 0, 0);
if(constrainedResolution < resolution) {
constrainedResolution = this.constrainResolution(constrainedResolution, -1, 0)
}
this.setResolution(constrainedResolution)
}
};
ol.View2D.prototype.fitGeometry = function(geometry, size, opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var padding = goog.isDef(options.padding) ? options.padding : [0, 0, 0, 0];
var constrainResolution = goog.isDef(options.constrainResolution) ? options.constrainResolution : true;
var nearest = goog.isDef(options.nearest) ? options.nearest : false;
var minResolution = goog.isDef(options.minResolution) ? options.minResolution : 0;
var coords = geometry.getFlatCoordinates();
var rotation = this.getRotation();
goog.asserts.assert(goog.isDef(rotation));
var cosAngle = Math.cos(-rotation);
var sinAngle = Math.sin(-rotation);
var minRotX = +Infinity;
var minRotY = +Infinity;
var maxRotX = -Infinity;
var maxRotY = -Infinity;
var stride = geometry.getStride();
for(var i = 0, ii = coords.length;i < ii;i += stride) {
var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;
var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;
minRotX = Math.min(minRotX, rotX);
minRotY = Math.min(minRotY, rotY);
maxRotX = Math.max(maxRotX, rotX);
maxRotY = Math.max(maxRotY, rotY)
}
var resolution = this.getResolutionForExtent([minRotX, minRotY, maxRotX, maxRotY], [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);
resolution = isNaN(resolution) ? minResolution : Math.max(resolution, minResolution);
if(constrainResolution) {
var constrainedResolution = this.constrainResolution(resolution, 0, 0);
if(!nearest && constrainedResolution < resolution) {
constrainedResolution = this.constrainResolution(constrainedResolution, -1, 0)
}
resolution = constrainedResolution
}
this.setResolution(resolution);
sinAngle = -sinAngle;
var centerRotX = (minRotX + maxRotX) / 2;
var centerRotY = (minRotY + maxRotY) / 2;
centerRotX += (padding[1] - padding[3]) / 2 * resolution;
centerRotY += (padding[0] - padding[2]) / 2 * resolution;
var centerX = centerRotX * cosAngle - centerRotY * sinAngle;
var centerY = centerRotY * cosAngle + centerRotX * sinAngle;
this.setCenter([centerX, centerY])
};
ol.View2D.prototype.centerOn = function(coordinate, size, position) {
var rotation = this.getRotation();
var cosAngle = Math.cos(-rotation);
var sinAngle = Math.sin(-rotation);
var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
var resolution = this.getResolution();
rotX += (size[0] / 2 - position[0]) * resolution;
rotY += (position[1] - size[1] / 2) * resolution;
sinAngle = -sinAngle;
var centerX = rotX * cosAngle - rotY * sinAngle;
var centerY = rotY * cosAngle + rotX * sinAngle;
this.setCenter([centerX, centerY])
};
ol.View2D.prototype.isDef = function() {
return goog.isDefAndNotNull(this.getCenter()) && goog.isDef(this.getResolution())
};
ol.View2D.prototype.rotate = function(rotation, opt_anchor) {
if(goog.isDef(opt_anchor)) {
var center = this.calculateCenterRotate(rotation, opt_anchor);
this.setCenter(center)
}
this.setRotation(rotation)
};
ol.View2D.prototype.setCenter = function(center) {
this.set(ol.View2DProperty.CENTER, center)
};
goog.exportProperty(ol.View2D.prototype, "setCenter", ol.View2D.prototype.setCenter);
ol.View2D.prototype.setProjection = function(projection) {
this.set(ol.View2DProperty.PROJECTION, projection)
};
goog.exportProperty(ol.View2D.prototype, "setProjection", ol.View2D.prototype.setProjection);
ol.View2D.prototype.setResolution = function(resolution) {
this.set(ol.View2DProperty.RESOLUTION, resolution)
};
goog.exportProperty(ol.View2D.prototype, "setResolution", ol.View2D.prototype.setResolution);
ol.View2D.prototype.setRotation = function(rotation) {
this.set(ol.View2DProperty.ROTATION, rotation)
};
goog.exportProperty(ol.View2D.prototype, "setRotation", ol.View2D.prototype.setRotation);
ol.View2D.prototype.setZoom = function(zoom) {
var resolution = this.constrainResolution(this.maxResolution_, zoom, 0);
this.setResolution(resolution)
};
ol.View2D.createCenterConstraint_ = function(options) {
if(goog.isDef(options.extent)) {
return ol.CenterConstraint.createExtent(options.extent)
}else {
return ol.CenterConstraint.none
}
};
ol.View2D.createResolutionConstraint_ = function(options) {
var resolutionConstraint;
var maxResolution;
var minResolution;
if(goog.isDef(options.resolutions)) {
var resolutions = options.resolutions;
maxResolution = resolutions[0];
minResolution = resolutions[resolutions.length - 1];
resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(resolutions)
}else {
maxResolution = options.maxResolution;
if(!goog.isDef(maxResolution)) {
var projection = options.projection;
var projectionExtent = ol.proj.createProjection(projection, "EPSG:3857").getExtent();
var size = goog.isNull(projectionExtent) ? 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / ol.proj.METERS_PER_UNIT[projection.getUnits()] : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]);
maxResolution = size / ol.DEFAULT_TILE_SIZE
}
var maxZoom = options.maxZoom;
if(!goog.isDef(maxZoom)) {
maxZoom = 28
}
var zoomFactor = options.zoomFactor;
if(!goog.isDef(zoomFactor)) {
zoomFactor = 2
}
minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);
resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(zoomFactor, maxResolution, maxZoom)
}
return{constraint:resolutionConstraint, maxResolution:maxResolution, minResolution:minResolution}
};
ol.View2D.createRotationConstraint_ = function(options) {
var enableRotation = goog.isDef(options.enableRotation) ? options.enableRotation : true;
if(enableRotation) {
var constrainRotation = options.constrainRotation;
if(!goog.isDef(constrainRotation) || constrainRotation === true) {
return ol.RotationConstraint.createSnapToZero()
}else {
if(constrainRotation === false) {
return ol.RotationConstraint.none
}else {
if(goog.isNumber(constrainRotation)) {
return ol.RotationConstraint.createSnapToN(constrainRotation)
}else {
goog.asserts.fail();
return ol.RotationConstraint.none
}
}
}
}else {
return ol.RotationConstraint.disable
}
};
goog.provide("ol.PostRenderFunction");
goog.provide("ol.PreRenderFunction");
ol.PostRenderFunction;
ol.PreRenderFunction;
goog.provide("goog.fx.easing");
goog.fx.easing.easeIn = function(t) {
return t * t * t
};
goog.fx.easing.easeOut = function(t) {
return 1 - Math.pow(1 - t, 3)
};
goog.fx.easing.inAndOut = function(t) {
return 3 * t * t - 2 * t * t * t
};
goog.provide("ol.easing");
goog.require("goog.fx.easing");
ol.easing.bounce = function(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
};
ol.easing.easeIn = goog.fx.easing.easeIn;
ol.easing.easeOut = goog.fx.easing.easeOut;
ol.easing.elastic = function(t) {
return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * 2 * Math.PI / 0.3) + 1
};
ol.easing.inAndOut = goog.fx.easing.inAndOut;
ol.easing.linear = function(t) {
return t
};
ol.easing.upAndDown = function(t) {
if(t < 0.5) {
return ol.easing.inAndOut(2 * t)
}else {
return 1 - ol.easing.inAndOut(2 * (t - 0.5))
}
};
goog.provide("ol.animation");
goog.require("ol.PreRenderFunction");
goog.require("ol.ViewHint");
goog.require("ol.coordinate");
goog.require("ol.easing");
ol.animation.bounce = function(options) {
var resolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.upAndDown;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = easing((frameState.time - start) / duration);
var deltaResolution = resolution - frameState.view2DState.resolution;
frameState.animate = true;
frameState.view2DState.resolution += delta * deltaResolution;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.pan = function(options) {
var source = options.source;
var start = goog.isDef(options.start) ? options.start : goog.now();
var sourceX = source[0];
var sourceY = source[1];
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaX = sourceX - frameState.view2DState.center[0];
var deltaY = sourceY - frameState.view2DState.center[1];
frameState.animate = true;
frameState.view2DState.center[0] += delta * deltaX;
frameState.view2DState.center[1] += delta * deltaY;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.rotate = function(options) {
var sourceRotation = goog.isDef(options.rotation) ? options.rotation : 0;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
var anchor = goog.isDef(options.anchor) ? options.anchor : null;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaRotation = (sourceRotation - frameState.view2DState.rotation) * delta;
frameState.animate = true;
frameState.view2DState.rotation += deltaRotation;
if(!goog.isNull(anchor)) {
var center = frameState.view2DState.center;
ol.coordinate.sub(center, anchor);
ol.coordinate.rotate(center, deltaRotation);
ol.coordinate.add(center, anchor)
}
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.zoom = function(options) {
var sourceResolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaResolution = sourceResolution - frameState.view2DState.resolution;
frameState.animate = true;
frameState.view2DState.resolution += delta * deltaResolution;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
goog.provide("ol.interaction.Interaction");
goog.require("goog.asserts");
goog.require("ol.MapBrowserEvent");
goog.require("ol.Observable");
goog.require("ol.View2D");
goog.require("ol.animation");
goog.require("ol.easing");
ol.interaction.Interaction = function() {
goog.base(this);
this.map_ = null
};
goog.inherits(ol.interaction.Interaction, ol.Observable);
ol.interaction.Interaction.prototype.getMap = function() {
return this.map_
};
ol.interaction.Interaction.prototype.handleMapBrowserEvent = goog.abstractMethod;
ol.interaction.Interaction.prototype.setMap = function(map) {
this.map_ = map
};
ol.interaction.Interaction.pan = function(map, view, delta, opt_duration) {
goog.asserts.assertInstanceof(view, ol.View2D);
var currentCenter = view.getCenter();
if(goog.isDef(currentCenter)) {
if(goog.isDef(opt_duration) && opt_duration > 0) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.linear}))
}
var center = view.constrainCenter([currentCenter[0] + delta[0], currentCenter[1] + delta[1]]);
view.setCenter(center)
}
};
ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) {
goog.asserts.assertInstanceof(view, ol.View2D);
rotation = view.constrainRotation(rotation, 0);
ol.interaction.Interaction.rotateWithoutConstraints(map, view, rotation, opt_anchor, opt_duration)
};
ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) {
goog.asserts.assertInstanceof(view, ol.View2D);
if(goog.isDefAndNotNull(rotation)) {
var currentRotation = view.getRotation();
var currentCenter = view.getCenter();
if(goog.isDef(currentRotation) && goog.isDef(currentCenter) && goog.isDef(opt_duration) && opt_duration > 0) {
map.beforeRender(ol.animation.rotate({rotation:currentRotation, duration:opt_duration, easing:ol.easing.easeOut}));
if(goog.isDef(opt_anchor)) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut}))
}
}
goog.asserts.assertInstanceof(view, ol.View2D);
view.rotate(rotation, opt_anchor)
}
};
ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) {
goog.asserts.assertInstanceof(view, ol.View2D);
resolution = view.constrainResolution(resolution, 0, opt_direction);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration)
};
ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) {
goog.asserts.assertInstanceof(view, ol.View2D);
var currentResolution = view.getResolution();
var resolution = view.constrainResolution(currentResolution, delta, 0);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration)
};
ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) {
goog.asserts.assertInstanceof(view, ol.View2D);
if(goog.isDefAndNotNull(resolution)) {
var currentResolution = view.getResolution();
var currentCenter = view.getCenter();
if(goog.isDef(currentResolution) && goog.isDef(currentCenter) && goog.isDef(opt_duration) && opt_duration > 0) {
map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:opt_duration, easing:ol.easing.easeOut}));
if(goog.isDef(opt_anchor)) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut}))
}
}
goog.asserts.assertInstanceof(view, ol.View2D);
if(goog.isDefAndNotNull(opt_anchor)) {
var center = view.calculateCenterZoom(resolution, opt_anchor);
view.setCenter(center)
}
view.setResolution(resolution)
}
};
goog.provide("ol.interaction.Pointer");
goog.require("goog.asserts");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserPointerEvent");
goog.require("ol.Pixel");
goog.require("ol.interaction.Interaction");
ol.interaction.Pointer = function() {
goog.base(this);
this.handlingDownUpSequence = false;
this.trackedPointers_ = {};
this.targetPointers = []
};
goog.inherits(ol.interaction.Pointer, ol.interaction.Interaction);
ol.interaction.Pointer.centroid = function(pointerEvents) {
var length = pointerEvents.length;
var clientX = 0;
var clientY = 0;
for(var i = 0;i < length;i++) {
clientX += pointerEvents[i].clientX;
clientY += pointerEvents[i].clientY
}
return[clientX / length, clientY / length]
};
ol.interaction.Pointer.prototype.isPointerDraggingEvent_ = function(mapBrowserEvent) {
var type = mapBrowserEvent.type;
return type === ol.MapBrowserEvent.EventType.POINTERDOWN || type === ol.MapBrowserEvent.EventType.POINTERDRAG || type === ol.MapBrowserEvent.EventType.POINTERUP
};
ol.interaction.Pointer.prototype.updateTrackedPointers_ = function(mapBrowserEvent) {
if(this.isPointerDraggingEvent_(mapBrowserEvent)) {
var event = mapBrowserEvent.pointerEvent;
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
delete this.trackedPointers_[event.pointerId]
}else {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERDOWN) {
this.trackedPointers_[event.pointerId] = event
}else {
if(event.pointerId in this.trackedPointers_) {
this.trackedPointers_[event.pointerId] = event
}
}
}
this.targetPointers = goog.object.getValues(this.trackedPointers_)
}
};
ol.interaction.Pointer.prototype.handlePointerDrag = goog.nullFunction;
ol.interaction.Pointer.prototype.handlePointerUp = goog.functions.FALSE;
ol.interaction.Pointer.prototype.handlePointerDown = goog.functions.FALSE;
ol.interaction.Pointer.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {
return true
}
var stopEvent = false;
this.updateTrackedPointers_(mapBrowserEvent);
if(this.handlingDownUpSequence) {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERDRAG) {
this.handlePointerDrag(mapBrowserEvent)
}else {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
this.handlingDownUpSequence = this.handlePointerUp(mapBrowserEvent)
}
}
}
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERDOWN) {
var handled = this.handlePointerDown(mapBrowserEvent);
this.handlingDownUpSequence = handled;
stopEvent = this.shouldStopEvent(handled)
}
return!stopEvent
};
ol.interaction.Pointer.prototype.shouldStopEvent = goog.functions.FALSE;
goog.provide("ol.render.IVectorContext");
ol.render.IVectorContext = function() {
};
ol.render.IVectorContext.prototype.drawAsync = function(zIndex, callback) {
};
ol.render.IVectorContext.prototype.drawCircleGeometry = function(circleGeometry, data) {
};
ol.render.IVectorContext.prototype.drawFeature = function(feature, style) {
};
ol.render.IVectorContext.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) {
};
ol.render.IVectorContext.prototype.drawPointGeometry = function(pointGeometry, data) {
};
ol.render.IVectorContext.prototype.drawLineStringGeometry = function(lineStringGeometry, data) {
};
ol.render.IVectorContext.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) {
};
ol.render.IVectorContext.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) {
};
ol.render.IVectorContext.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) {
};
ol.render.IVectorContext.prototype.drawPolygonGeometry = function(polygonGeometry, data) {
};
ol.render.IVectorContext.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) {
};
ol.render.IVectorContext.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
};
ol.render.IVectorContext.prototype.setImageStyle = function(imageStyle) {
};
ol.render.IVectorContext.prototype.setTextStyle = function(textStyle) {
};
goog.provide("ol.render.Event");
goog.provide("ol.render.EventType");
goog.require("goog.events.Event");
goog.require("ol.render.IVectorContext");
ol.render.EventType = {POSTCOMPOSE:"postcompose", PRECOMPOSE:"precompose", RENDER:"render"};
ol.render.Event = function(type, opt_target, opt_vectorContext, opt_frameState, opt_context, opt_glContext) {
goog.base(this, type, opt_target);
this.vectorContext = opt_vectorContext;
this.frameState = opt_frameState;
this.context = opt_context;
this.glContext = opt_glContext
};
goog.inherits(ol.render.Event, goog.events.Event);
goog.provide("ol.render.Box");
goog.require("goog.Disposable");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("ol.geom.Polygon");
goog.require("ol.render.EventType");
ol.render.Box = function(style) {
this.map_ = null;
this.postComposeListenerKey_ = null;
this.startPixel_ = null;
this.endPixel_ = null;
this.geometry_ = null;
this.style_ = style
};
goog.inherits(ol.render.Box, goog.Disposable);
ol.render.Box.prototype.createGeometry_ = function() {
goog.asserts.assert(!goog.isNull(this.startPixel_));
goog.asserts.assert(!goog.isNull(this.endPixel_));
goog.asserts.assert(!goog.isNull(this.map_));
var startPixel = this.startPixel_;
var endPixel = this.endPixel_;
var pixels = [startPixel, [startPixel[0], endPixel[1]], endPixel, [endPixel[0], startPixel[1]]];
var coordinates = goog.array.map(pixels, this.map_.getCoordinateFromPixel, this.map_);
coordinates[4] = coordinates[0].slice();
return new ol.geom.Polygon([coordinates])
};
ol.render.Box.prototype.disposeInternal = function() {
this.setMap(null)
};
ol.render.Box.prototype.handleMapPostCompose_ = function(event) {
var geometry = this.geometry_;
goog.asserts.assert(!goog.isNull(geometry));
var style = this.style_;
goog.asserts.assert(!goog.isNull(style));
event.vectorContext.drawAsync(Infinity, function(render) {
render.setFillStrokeStyle(style.getFill(), style.getStroke());
render.setTextStyle(style.getText());
render.drawPolygonGeometry(geometry, null)
})
};
ol.render.Box.prototype.getGeometry = function() {
return this.geometry_
};
ol.render.Box.prototype.requestMapRenderFrame_ = function() {
if(!goog.isNull(this.map_) && !goog.isNull(this.startPixel_) && !goog.isNull(this.endPixel_)) {
this.map_.render()
}
};
ol.render.Box.prototype.setMap = function(map) {
if(!goog.isNull(this.postComposeListenerKey_)) {
goog.events.unlistenByKey(this.postComposeListenerKey_);
this.postComposeListenerKey_ = null;
this.map_.render();
this.map_ = null
}
this.map_ = map;
if(!goog.isNull(this.map_)) {
this.postComposeListenerKey_ = goog.events.listen(map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, this);
this.requestMapRenderFrame_()
}
};
ol.render.Box.prototype.setPixels = function(startPixel, endPixel) {
this.startPixel_ = startPixel;
this.endPixel_ = endPixel;
this.geometry_ = this.createGeometry_();
this.requestMapRenderFrame_()
};
goog.provide("ol.DragBoxEvent");
goog.provide("ol.interaction.DragBox");
goog.require("goog.asserts");
goog.require("goog.events.Event");
goog.require("goog.functions");
goog.require("ol");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.interaction.Pointer");
goog.require("ol.render.Box");
ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED = ol.DRAG_BOX_HYSTERESIS_PIXELS * ol.DRAG_BOX_HYSTERESIS_PIXELS;
ol.DragBoxEventType = {BOXSTART:"boxstart", BOXEND:"boxend"};
ol.DragBoxEvent = function(type, coordinate) {
goog.base(this, type);
this.coordinate = coordinate
};
goog.inherits(ol.DragBoxEvent, goog.events.Event);
ol.interaction.DragBox = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
var style = goog.isDef(options.style) ? options.style : null;
this.box_ = new ol.render.Box(style);
this.startPixel_ = null;
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.always
};
goog.inherits(ol.interaction.DragBox, ol.interaction.Pointer);
ol.interaction.DragBox.prototype.handlePointerDrag = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return
}
this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel)
};
ol.interaction.DragBox.prototype.getGeometry = function() {
return this.box_.getGeometry()
};
ol.interaction.DragBox.prototype.onBoxEnd = goog.nullFunction;
ol.interaction.DragBox.prototype.handlePointerUp = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return true
}
this.box_.setMap(null);
var deltaX = mapBrowserEvent.pixel[0] - this.startPixel_[0];
var deltaY = mapBrowserEvent.pixel[1] - this.startPixel_[1];
if(deltaX * deltaX + deltaY * deltaY >= ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED) {
this.onBoxEnd(mapBrowserEvent);
this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXEND, mapBrowserEvent.coordinate))
}
return false
};
ol.interaction.DragBox.prototype.handlePointerDown = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return false
}
var browserEvent = mapBrowserEvent.browserEvent;
if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) {
this.startPixel_ = mapBrowserEvent.pixel;
this.box_.setMap(mapBrowserEvent.map);
this.box_.setPixels(this.startPixel_, this.startPixel_);
this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate));
return true
}else {
return false
}
};
ol.interaction.DragBox.prototype.shouldStopEvent = goog.functions.identity;
goog.provide("goog.color.names");
goog.color.names = {"aliceblue":"#f0f8ff", "antiquewhite":"#faebd7", "aqua":"#00ffff", "aquamarine":"#7fffd4", "azure":"#f0ffff", "beige":"#f5f5dc", "bisque":"#ffe4c4", "black":"#000000", "blanchedalmond":"#ffebcd", "blue":"#0000ff", "blueviolet":"#8a2be2", "brown":"#a52a2a", "burlywood":"#deb887", "cadetblue":"#5f9ea0", "chartreuse":"#7fff00", "chocolate":"#d2691e", "coral":"#ff7f50", "cornflowerblue":"#6495ed", "cornsilk":"#fff8dc", "crimson":"#dc143c", "cyan":"#00ffff", "darkblue":"#00008b", "darkcyan":"#008b8b",
"darkgoldenrod":"#b8860b", "darkgray":"#a9a9a9", "darkgreen":"#006400", "darkgrey":"#a9a9a9", "darkkhaki":"#bdb76b", "darkmagenta":"#8b008b", "darkolivegreen":"#556b2f", "darkorange":"#ff8c00", "darkorchid":"#9932cc", "darkred":"#8b0000", "darksalmon":"#e9967a", "darkseagreen":"#8fbc8f", "darkslateblue":"#483d8b", "darkslategray":"#2f4f4f", "darkslategrey":"#2f4f4f", "darkturquoise":"#00ced1", "darkviolet":"#9400d3", "deeppink":"#ff1493", "deepskyblue":"#00bfff", "dimgray":"#696969", "dimgrey":"#696969",
"dodgerblue":"#1e90ff", "firebrick":"#b22222", "floralwhite":"#fffaf0", "forestgreen":"#228b22", "fuchsia":"#ff00ff", "gainsboro":"#dcdcdc", "ghostwhite":"#f8f8ff", "gold":"#ffd700", "goldenrod":"#daa520", "gray":"#808080", "green":"#008000", "greenyellow":"#adff2f", "grey":"#808080", "honeydew":"#f0fff0", "hotpink":"#ff69b4", "indianred":"#cd5c5c", "indigo":"#4b0082", "ivory":"#fffff0", "khaki":"#f0e68c", "lavender":"#e6e6fa", "lavenderblush":"#fff0f5", "lawngreen":"#7cfc00", "lemonchiffon":"#fffacd",
"lightblue":"#add8e6", "lightcoral":"#f08080", "lightcyan":"#e0ffff", "lightgoldenrodyellow":"#fafad2", "lightgray":"#d3d3d3", "lightgreen":"#90ee90", "lightgrey":"#d3d3d3", "lightpink":"#ffb6c1", "lightsalmon":"#ffa07a", "lightseagreen":"#20b2aa", "lightskyblue":"#87cefa", "lightslategray":"#778899", "lightslategrey":"#778899", "lightsteelblue":"#b0c4de", "lightyellow":"#ffffe0", "lime":"#00ff00", "limegreen":"#32cd32", "linen":"#faf0e6", "magenta":"#ff00ff", "maroon":"#800000", "mediumaquamarine":"#66cdaa",
"mediumblue":"#0000cd", "mediumorchid":"#ba55d3", "mediumpurple":"#9370db", "mediumseagreen":"#3cb371", "mediumslateblue":"#7b68ee", "mediumspringgreen":"#00fa9a", "mediumturquoise":"#48d1cc", "mediumvioletred":"#c71585", "midnightblue":"#191970", "mintcream":"#f5fffa", "mistyrose":"#ffe4e1", "moccasin":"#ffe4b5", "navajowhite":"#ffdead", "navy":"#000080", "oldlace":"#fdf5e6", "olive":"#808000", "olivedrab":"#6b8e23", "orange":"#ffa500", "orangered":"#ff4500", "orchid":"#da70d6", "palegoldenrod":"#eee8aa",
"palegreen":"#98fb98", "paleturquoise":"#afeeee", "palevioletred":"#db7093", "papayawhip":"#ffefd5", "peachpuff":"#ffdab9", "peru":"#cd853f", "pink":"#ffc0cb", "plum":"#dda0dd", "powderblue":"#b0e0e6", "purple":"#800080", "red":"#ff0000", "rosybrown":"#bc8f8f", "royalblue":"#4169e1", "saddlebrown":"#8b4513", "salmon":"#fa8072", "sandybrown":"#f4a460", "seagreen":"#2e8b57", "seashell":"#fff5ee", "sienna":"#a0522d", "silver":"#c0c0c0", "skyblue":"#87ceeb", "slateblue":"#6a5acd", "slategray":"#708090",
"slategrey":"#708090", "snow":"#fffafa", "springgreen":"#00ff7f", "steelblue":"#4682b4", "tan":"#d2b48c", "teal":"#008080", "thistle":"#d8bfd8", "tomato":"#ff6347", "turquoise":"#40e0d0", "violet":"#ee82ee", "wheat":"#f5deb3", "white":"#ffffff", "whitesmoke":"#f5f5f5", "yellow":"#ffff00", "yellowgreen":"#9acd32"};
goog.provide("goog.color");
goog.require("goog.color.names");
goog.require("goog.math");
goog.color.Rgb;
goog.color.Hsv;
goog.color.Hsl;
goog.color.parse = function(str) {
var result = {};
str = String(str);
var maybeHex = goog.color.prependHashIfNecessaryHelper(str);
if(goog.color.isValidHexColor_(maybeHex)) {
result.hex = goog.color.normalizeHex(maybeHex);
result.type = "hex";
return result
}else {
var rgb = goog.color.isValidRgbColor_(str);
if(rgb.length) {
result.hex = goog.color.rgbArrayToHex(rgb);
result.type = "rgb";
return result
}else {
if(goog.color.names) {
var hex = goog.color.names[str.toLowerCase()];
if(hex) {
result.hex = hex;
result.type = "named";
return result
}
}
}
}
throw Error(str + " is not a valid color string");
};
goog.color.isValidColor = function(str) {
var maybeHex = goog.color.prependHashIfNecessaryHelper(str);
return!!(goog.color.isValidHexColor_(maybeHex) || goog.color.isValidRgbColor_(str).length || goog.color.names && goog.color.names[str.toLowerCase()])
};
goog.color.parseRgb = function(str) {
var rgb = goog.color.isValidRgbColor_(str);
if(!rgb.length) {
throw Error(str + " is not a valid RGB color");
}
return rgb
};
goog.color.hexToRgbStyle = function(hexColor) {
return goog.color.rgbStyle_(goog.color.hexToRgb(hexColor))
};
goog.color.hexTripletRe_ = /#(.)(.)(.)/;
goog.color.normalizeHex = function(hexColor) {
if(!goog.color.isValidHexColor_(hexColor)) {
throw Error("'" + hexColor + "' is not a valid hex color");
}
if(hexColor.length == 4) {
hexColor = hexColor.replace(goog.color.hexTripletRe_, "#$1$1$2$2$3$3")
}
return hexColor.toLowerCase()
};
goog.color.hexToRgb = function(hexColor) {
hexColor = goog.color.normalizeHex(hexColor);
var r = parseInt(hexColor.substr(1, 2), 16);
var g = parseInt(hexColor.substr(3, 2), 16);
var b = parseInt(hexColor.substr(5, 2), 16);
return[r, g, b]
};
goog.color.rgbToHex = function(r, g, b) {
r = Number(r);
g = Number(g);
b = Number(b);
if(isNaN(r) || r < 0 || r > 255 || isNaN(g) || g < 0 || g > 255 || isNaN(b) || b < 0 || b > 255) {
throw Error('"(' + r + "," + g + "," + b + '") is not a valid RGB color');
}
var hexR = goog.color.prependZeroIfNecessaryHelper(r.toString(16));
var hexG = goog.color.prependZeroIfNecessaryHelper(g.toString(16));
var hexB = goog.color.prependZeroIfNecessaryHelper(b.toString(16));
return"#" + hexR + hexG + hexB
};
goog.color.rgbArrayToHex = function(rgb) {
return goog.color.rgbToHex(rgb[0], rgb[1], rgb[2])
};
goog.color.rgbToHsl = function(r, g, b) {
var normR = r / 255;
var normG = g / 255;
var normB = b / 255;
var max = Math.max(normR, normG, normB);
var min = Math.min(normR, normG, normB);
var h = 0;
var s = 0;
var l = 0.5 * (max + min);
if(max != min) {
if(max == normR) {
h = 60 * (normG - normB) / (max - min)
}else {
if(max == normG) {
h = 60 * (normB - normR) / (max - min) + 120
}else {
if(max == normB) {
h = 60 * (normR - normG) / (max - min) + 240
}
}
}
if(0 < l && l <= 0.5) {
s = (max - min) / (2 * l)
}else {
s = (max - min) / (2 - 2 * l)
}
}
return[Math.round(h + 360) % 360, s, l]
};
goog.color.rgbArrayToHsl = function(rgb) {
return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2])
};
goog.color.hueToRgb_ = function(v1, v2, vH) {
if(vH < 0) {
vH += 1
}else {
if(vH > 1) {
vH -= 1
}
}
if(6 * vH < 1) {
return v1 + (v2 - v1) * 6 * vH
}else {
if(2 * vH < 1) {
return v2
}else {
if(3 * vH < 2) {
return v1 + (v2 - v1) * (2 / 3 - vH) * 6
}
}
}
return v1
};
goog.color.hslToRgb = function(h, s, l) {
var r = 0;
var g = 0;
var b = 0;
var normH = h / 360;
if(s == 0) {
r = g = b = l * 255
}else {
var temp1 = 0;
var temp2 = 0;
if(l < 0.5) {
temp2 = l * (1 + s)
}else {
temp2 = l + s - s * l
}
temp1 = 2 * l - temp2;
r = 255 * goog.color.hueToRgb_(temp1, temp2, normH + 1 / 3);
g = 255 * goog.color.hueToRgb_(temp1, temp2, normH);
b = 255 * goog.color.hueToRgb_(temp1, temp2, normH - 1 / 3)
}
return[Math.round(r), Math.round(g), Math.round(b)]
};
goog.color.hslArrayToRgb = function(hsl) {
return goog.color.hslToRgb(hsl[0], hsl[1], hsl[2])
};
goog.color.validHexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i;
goog.color.isValidHexColor_ = function(str) {
return goog.color.validHexColorRe_.test(str)
};
goog.color.normalizedHexColorRe_ = /^#[0-9a-f]{6}$/;
goog.color.isNormalizedHexColor_ = function(str) {
return goog.color.normalizedHexColorRe_.test(str)
};
goog.color.rgbColorRe_ = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;
goog.color.isValidRgbColor_ = function(str) {
var regExpResultArray = str.match(goog.color.rgbColorRe_);
if(regExpResultArray) {
var r = Number(regExpResultArray[1]);
var g = Number(regExpResultArray[2]);
var b = Number(regExpResultArray[3]);
if(r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {
return[r, g, b]
}
}
return[]
};
goog.color.prependZeroIfNecessaryHelper = function(hex) {
return hex.length == 1 ? "0" + hex : hex
};
goog.color.prependHashIfNecessaryHelper = function(str) {
return str.charAt(0) == "#" ? str : "#" + str
};
goog.color.rgbStyle_ = function(rgb) {
return"rgb(" + rgb.join(",") + ")"
};
goog.color.hsvToRgb = function(h, s, brightness) {
var red = 0;
var green = 0;
var blue = 0;
if(s == 0) {
red = brightness;
green = brightness;
blue = brightness
}else {
var sextant = Math.floor(h / 60);
var remainder = h / 60 - sextant;
var val1 = brightness * (1 - s);
var val2 = brightness * (1 - s * remainder);
var val3 = brightness * (1 - s * (1 - remainder));
switch(sextant) {
case 1:
red = val2;
green = brightness;
blue = val1;
break;
case 2:
red = val1;
green = brightness;
blue = val3;
break;
case 3:
red = val1;
green = val2;
blue = brightness;
break;
case 4:
red = val3;
green = val1;
blue = brightness;
break;
case 5:
red = brightness;
green = val1;
blue = val2;
break;
case 6:
;
case 0:
red = brightness;
green = val3;
blue = val1;
break
}
}
return[Math.floor(red), Math.floor(green), Math.floor(blue)]
};
goog.color.rgbToHsv = function(red, green, blue) {
var max = Math.max(Math.max(red, green), blue);
var min = Math.min(Math.min(red, green), blue);
var hue;
var saturation;
var value = max;
if(min == max) {
hue = 0;
saturation = 0
}else {
var delta = max - min;
saturation = delta / max;
if(red == max) {
hue = (green - blue) / delta
}else {
if(green == max) {
hue = 2 + (blue - red) / delta
}else {
hue = 4 + (red - green) / delta
}
}
hue *= 60;
if(hue < 0) {
hue += 360
}
if(hue > 360) {
hue -= 360
}
}
return[hue, saturation, value]
};
goog.color.rgbArrayToHsv = function(rgb) {
return goog.color.rgbToHsv(rgb[0], rgb[1], rgb[2])
};
goog.color.hsvArrayToRgb = function(hsv) {
return goog.color.hsvToRgb(hsv[0], hsv[1], hsv[2])
};
goog.color.hexToHsl = function(hex) {
var rgb = goog.color.hexToRgb(hex);
return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2])
};
goog.color.hslToHex = function(h, s, l) {
return goog.color.rgbArrayToHex(goog.color.hslToRgb(h, s, l))
};
goog.color.hslArrayToHex = function(hsl) {
return goog.color.rgbArrayToHex(goog.color.hslToRgb(hsl[0], hsl[1], hsl[2]))
};
goog.color.hexToHsv = function(hex) {
return goog.color.rgbArrayToHsv(goog.color.hexToRgb(hex))
};
goog.color.hsvToHex = function(h, s, v) {
return goog.color.rgbArrayToHex(goog.color.hsvToRgb(h, s, v))
};
goog.color.hsvArrayToHex = function(hsv) {
return goog.color.hsvToHex(hsv[0], hsv[1], hsv[2])
};
goog.color.hslDistance = function(hsl1, hsl2) {
var sl1, sl2;
if(hsl1[2] <= 0.5) {
sl1 = hsl1[1] * hsl1[2]
}else {
sl1 = hsl1[1] * (1 - hsl1[2])
}
if(hsl2[2] <= 0.5) {
sl2 = hsl2[1] * hsl2[2]
}else {
sl2 = hsl2[1] * (1 - hsl2[2])
}
var h1 = hsl1[0] / 360;
var h2 = hsl2[0] / 360;
var dh = (h1 - h2) * 2 * Math.PI;
return(hsl1[2] - hsl2[2]) * (hsl1[2] - hsl2[2]) + sl1 * sl1 + sl2 * sl2 - 2 * sl1 * sl2 * Math.cos(dh)
};
goog.color.blend = function(rgb1, rgb2, factor) {
factor = goog.math.clamp(factor, 0, 1);
return[Math.round(factor * rgb1[0] + (1 - factor) * rgb2[0]), Math.round(factor * rgb1[1] + (1 - factor) * rgb2[1]), Math.round(factor * rgb1[2] + (1 - factor) * rgb2[2])]
};
goog.color.darken = function(rgb, factor) {
var black = [0, 0, 0];
return goog.color.blend(black, rgb, factor)
};
goog.color.lighten = function(rgb, factor) {
var white = [255, 255, 255];
return goog.color.blend(white, rgb, factor)
};
goog.color.highContrast = function(prime, suggestions) {
var suggestionsWithDiff = [];
for(var i = 0;i < suggestions.length;i++) {
suggestionsWithDiff.push({color:suggestions[i], diff:goog.color.yiqBrightnessDiff_(suggestions[i], prime) + goog.color.colorDiff_(suggestions[i], prime)})
}
suggestionsWithDiff.sort(function(a, b) {
return b.diff - a.diff
});
return suggestionsWithDiff[0].color
};
goog.color.yiqBrightness_ = function(rgb) {
return Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1E3)
};
goog.color.yiqBrightnessDiff_ = function(rgb1, rgb2) {
return Math.abs(goog.color.yiqBrightness_(rgb1) - goog.color.yiqBrightness_(rgb2))
};
goog.color.colorDiff_ = function(rgb1, rgb2) {
return Math.abs(rgb1[0] - rgb2[0]) + Math.abs(rgb1[1] - rgb2[1]) + Math.abs(rgb1[2] - rgb2[2])
};
goog.provide("ol.color");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.color");
goog.require("goog.color.names");
goog.require("goog.math");
goog.require("goog.vec.Mat4");
goog.require("ol");
ol.Color;
ol.color.hexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i;
ol.color.rgbColorRe_ = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;
ol.color.rgbaColorRe_ = /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;
ol.color.blend = function(dst, src, opt_color) {
var out = goog.isDef(opt_color) ? opt_color : [];
var dstA = dst[3];
var srcA = dst[3];
if(dstA == 1) {
out[0] = src[0] * srcA + dst[0] * (1 - srcA) + 0.5 | 0;
out[1] = src[1] * srcA + dst[1] * (1 - srcA) + 0.5 | 0;
out[2] = src[2] * srcA + dst[2] * (1 - srcA) + 0.5 | 0;
out[4] = 1
}else {
if(srcA === 0) {
out[0] = dst[0];
out[1] = dst[1];
out[2] = dst[2];
out[3] = dstA
}else {
var outA = srcA + dstA * (1 - srcA);
if(outA === 0) {
out[0] = 0;
out[1] = 0;
out[2] = 0;
out[3] = 0
}else {
out[0] = (src[0] * srcA + dst[0] * dstA * (1 - srcA)) / outA + 0.5 | 0;
out[1] = (src[1] * srcA + dst[1] * dstA * (1 - srcA)) / outA + 0.5 | 0;
out[2] = (src[2] * srcA + dst[2] * dstA * (1 - srcA)) / outA + 0.5 | 0;
out[3] = outA
}
}
}
goog.asserts.assert(ol.color.isValid(out));
return out
};
ol.color.asArray = function(color) {
if(goog.isArray(color)) {
return color
}else {
goog.asserts.assert(goog.isString(color));
return ol.color.fromString(color)
}
};
ol.color.asString = function(color) {
if(goog.isString(color)) {
return color
}else {
goog.asserts.assert(goog.isArray(color));
return ol.color.toString(color)
}
};
ol.color.equals = function(color1, color2) {
return color1 === color2 || color1[0] == color2[0] && color1[1] == color2[1] && color1[2] == color2[2] && color1[3] == color2[3]
};
ol.color.fromString = function() {
var MAX_CACHE_SIZE = 1024;
var cache = {};
var cacheSize = 0;
return function(s, opt_color) {
var color;
if(cache.hasOwnProperty(s)) {
color = cache[s]
}else {
if(cacheSize >= MAX_CACHE_SIZE) {
var i = 0;
var key;
for(key in cache) {
if((i++ & 3) === 0) {
delete cache[key];
--cacheSize
}
}
}
color = ol.color.fromStringInternal_(s);
cache[s] = color;
++cacheSize
}
return ol.color.returnOrUpdate(color, opt_color)
}
}();
ol.color.fromStringInternal_ = function(s) {
var isHex = false;
if(ol.ENABLE_NAMED_COLORS && goog.color.names.hasOwnProperty(s)) {
s = (goog.color.names[s]);
isHex = true
}
var r, g, b, a, color, match;
if(isHex || (match = ol.color.hexColorRe_.exec(s))) {
var n = s.length - 1;
goog.asserts.assert(n == 3 || n == 6);
var d = n == 3 ? 1 : 2;
r = parseInt(s.substr(1 + 0 * d, d), 16);
g = parseInt(s.substr(1 + 1 * d, d), 16);
b = parseInt(s.substr(1 + 2 * d, d), 16);
if(d == 1) {
r = (r << 4) + r;
g = (g << 4) + g;
b = (b << 4) + b
}
a = 1;
color = [r, g, b, a];
goog.asserts.assert(ol.color.isValid(color));
return color
}else {
if(match = ol.color.rgbaColorRe_.exec(s)) {
r = Number(match[1]);
g = Number(match[2]);
b = Number(match[3]);
a = Number(match[4]);
color = [r, g, b, a];
return ol.color.normalize(color, color)
}else {
if(match = ol.color.rgbColorRe_.exec(s)) {
r = Number(match[1]);
g = Number(match[2]);
b = Number(match[3]);
color = [r, g, b, 1];
return ol.color.normalize(color, color)
}else {
throw new Error(s + " is not a valid color");
}
}
}
};
ol.color.isValid = function(color) {
return 0 <= color[0] && color[0] < 256 && 0 <= color[1] && color[1] < 256 && 0 <= color[2] && color[2] < 256 && 0 <= color[3] && color[3] <= 1
};
ol.color.normalize = function(color, opt_color) {
var result = goog.isDef(opt_color) ? opt_color : [];
result[0] = goog.math.clamp(color[0] + 0.5 | 0, 0, 255);
result[1] = goog.math.clamp(color[1] + 0.5 | 0, 0, 255);
result[2] = goog.math.clamp(color[2] + 0.5 | 0, 0, 255);
result[3] = goog.math.clamp(color[3], 0, 1);
return result
};
ol.color.returnOrUpdate = function(color, opt_color) {
if(goog.isDef(opt_color)) {
opt_color[0] = color[0];
opt_color[1] = color[1];
opt_color[2] = color[2];
opt_color[3] = color[3];
return opt_color
}else {
return color
}
};
ol.color.toString = function(color) {
var r = color[0];
if(r != (r | 0)) {
r = r + 0.5 | 0
}
var g = color[1];
if(g != (g | 0)) {
g = g + 0.5 | 0
}
var b = color[2];
if(b != (b | 0)) {
b = b + 0.5 | 0
}
var a = color[3];
return"rgba(" + r + "," + g + "," + b + "," + a + ")"
};
ol.color.transform = function(color, transform, opt_color) {
var result = goog.isDef(opt_color) ? opt_color : [];
result = goog.vec.Mat4.multVec3(transform, color, result);
goog.asserts.assert(goog.isArray(result));
result[3] = color[3];
return ol.color.normalize(result, result)
};
ol.color.stringOrColorEquals = function(color1, color2) {
if(color1 === color2 || color1 == color2) {
return true
}
if(goog.isString(color1)) {
color1 = ol.color.fromString(color1)
}
if(goog.isString(color2)) {
color2 = ol.color.fromString(color2)
}
return ol.color.equals(color1, color2)
};
goog.provide("ol.render.canvas");
ol.render.canvas.FillState;
ol.render.canvas.StrokeState;
ol.render.canvas.TextState;
ol.render.canvas.defaultFont = "10px sans-serif";
ol.render.canvas.defaultFillStyle = [0, 0, 0, 1];
ol.render.canvas.defaultLineCap = "round";
ol.render.canvas.defaultLineDash = [];
ol.render.canvas.defaultLineJoin = "round";
ol.render.canvas.defaultMiterLimit = 10;
ol.render.canvas.defaultStrokeStyle = [0, 0, 0, 1];
ol.render.canvas.defaultTextAlign = "center";
ol.render.canvas.defaultTextBaseline = "middle";
ol.render.canvas.defaultLineWidth = 1;
goog.provide("ol.style.Fill");
goog.require("ol.color");
ol.style.Fill = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.color_ = goog.isDef(options.color) ? options.color : null
};
ol.style.Fill.prototype.getColor = function() {
return this.color_
};
goog.provide("ol.style.Image");
goog.provide("ol.style.ImageState");
goog.require("goog.array");
ol.style.ImageState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3};
ol.style.ImageOptions;
ol.style.Image = function(options) {
this.opacity_ = options.opacity;
this.rotateWithView_ = options.rotateWithView;
this.rotation_ = options.rotation;
this.scale_ = options.scale;
this.snapToPixel_ = options.snapToPixel
};
ol.style.Image.prototype.getOpacity = function() {
return this.opacity_
};
ol.style.Image.prototype.getRotateWithView = function() {
return this.rotateWithView_
};
ol.style.Image.prototype.getRotation = function() {
return this.rotation_
};
ol.style.Image.prototype.getScale = function() {
return this.scale_
};
ol.style.Image.prototype.getSnapToPixel = function() {
return this.snapToPixel_
};
ol.style.Image.prototype.getAnchor = goog.abstractMethod;
ol.style.Image.prototype.getImage = goog.abstractMethod;
ol.style.Image.prototype.getImageState = goog.abstractMethod;
ol.style.Image.prototype.getHitDetectionImage = goog.abstractMethod;
ol.style.Image.prototype.getSize = goog.abstractMethod;
ol.style.Image.prototype.listenImageChange = goog.abstractMethod;
ol.style.Image.prototype.load = goog.abstractMethod;
ol.style.Image.prototype.unlistenImageChange = goog.abstractMethod;
goog.provide("ol.style.Stroke");
goog.require("ol.color");
ol.style.Stroke = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.color_ = goog.isDef(options.color) ? options.color : null;
this.lineCap_ = options.lineCap;
this.lineDash_ = goog.isDef(options.lineDash) ? options.lineDash : null;
this.lineJoin_ = options.lineJoin;
this.miterLimit_ = options.miterLimit;
this.width_ = options.width
};
ol.style.Stroke.prototype.getColor = function() {
return this.color_
};
ol.style.Stroke.prototype.getLineCap = function() {
return this.lineCap_
};
ol.style.Stroke.prototype.getLineDash = function() {
return this.lineDash_
};
ol.style.Stroke.prototype.getLineJoin = function() {
return this.lineJoin_
};
ol.style.Stroke.prototype.getMiterLimit = function() {
return this.miterLimit_
};
ol.style.Stroke.prototype.getWidth = function() {
return this.width_
};
goog.provide("ol.style.Circle");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("ol.color");
goog.require("ol.render.canvas");
goog.require("ol.style.Fill");
goog.require("ol.style.Image");
goog.require("ol.style.ImageState");
goog.require("ol.style.Stroke");
ol.style.Circle = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
this.hitDetectionCanvas_ = null;
this.fill_ = goog.isDef(options.fill) ? options.fill : null;
this.radius_ = options.radius;
this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null;
var size = this.render_();
this.anchor_ = [size / 2, size / 2];
this.size_ = [size, size];
goog.base(this, {opacity:1, rotateWithView:false, rotation:0, scale:1, snapToPixel:undefined})
};
goog.inherits(ol.style.Circle, ol.style.Image);
ol.style.Circle.prototype.getAnchor = function() {
return this.anchor_
};
ol.style.Circle.prototype.getFill = function() {
return this.fill_
};
ol.style.Circle.prototype.getHitDetectionImage = function(pixelRatio) {
return this.hitDetectionCanvas_
};
ol.style.Circle.prototype.getImage = function(pixelRatio) {
return this.canvas_
};
ol.style.Circle.prototype.getImageState = function() {
return ol.style.ImageState.LOADED
};
ol.style.Circle.prototype.getRadius = function() {
return this.radius_
};
ol.style.Circle.prototype.getSize = function() {
return this.size_
};
ol.style.Circle.prototype.getStroke = function() {
return this.stroke_
};
ol.style.Circle.prototype.listenImageChange = goog.nullFunction;
ol.style.Circle.prototype.load = goog.nullFunction;
ol.style.Circle.prototype.unlistenImageChange = goog.nullFunction;
ol.style.Circle.prototype.render_ = function() {
var canvas = this.canvas_;
var strokeStyle, strokeWidth;
if(goog.isNull(this.stroke_)) {
strokeWidth = 0
}else {
strokeStyle = ol.color.asString(this.stroke_.getColor());
strokeWidth = this.stroke_.getWidth();
if(!goog.isDef(strokeWidth)) {
strokeWidth = ol.render.canvas.defaultLineWidth
}
}
var size = 2 * (this.radius_ + strokeWidth) + 1;
canvas.height = size;
canvas.width = size;
var context = (canvas.getContext("2d"));
context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true);
if(!goog.isNull(this.fill_)) {
context.fillStyle = ol.color.asString(this.fill_.getColor());
context.fill()
}
if(!goog.isNull(this.stroke_)) {
context.strokeStyle = strokeStyle;
context.lineWidth = strokeWidth;
context.stroke()
}
if(!goog.isNull(this.fill_)) {
this.hitDetectionCanvas_ = canvas
}else {
this.hitDetectionCanvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
canvas = this.hitDetectionCanvas_;
canvas.height = size;
canvas.width = size;
context = (canvas.getContext("2d"));
context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true);
context.fillStyle = ol.render.canvas.defaultFillStyle;
context.fill();
if(!goog.isNull(this.stroke_)) {
context.strokeStyle = strokeStyle;
context.lineWidth = strokeWidth;
context.stroke()
}
}
return size
};
goog.provide("ol.style.Style");
goog.require("ol.style.Fill");
goog.require("ol.style.Image");
ol.style.Style = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.fill_ = goog.isDef(options.fill) ? options.fill : null;
this.image_ = goog.isDef(options.image) ? options.image : null;
this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null;
this.text_ = goog.isDef(options.text) ? options.text : null;
this.zIndex_ = options.zIndex
};
ol.style.Style.prototype.getFill = function() {
return this.fill_
};
ol.style.Style.prototype.getImage = function() {
return this.image_
};
ol.style.Style.prototype.getStroke = function() {
return this.stroke_
};
ol.style.Style.prototype.getText = function() {
return this.text_
};
ol.style.Style.prototype.getZIndex = function() {
return this.zIndex_
};
goog.provide("ol.Feature");
goog.provide("ol.feature");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.functions");
goog.require("ol.Object");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.Circle");
goog.require("ol.style.Fill");
goog.require("ol.style.Stroke");
goog.require("ol.style.Style");
ol.Feature = function(opt_geometryOrValues) {
goog.base(this);
this.id_ = undefined;
this.geometryName_ = "geometry";
this.style_ = null;
this.styleFunction_ = undefined;
this.geometryChangeKey_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this);
if(goog.isDefAndNotNull(opt_geometryOrValues)) {
if(opt_geometryOrValues instanceof ol.geom.Geometry) {
var geometry = (opt_geometryOrValues);
this.setGeometry(geometry)
}else {
goog.asserts.assert(goog.isObject(opt_geometryOrValues));
var values = (opt_geometryOrValues);
this.setValues(values)
}
}else {
this.setGeometry(null)
}
};
goog.inherits(ol.Feature, ol.Object);
ol.Feature.prototype.getGeometry = function() {
return(this.get(this.geometryName_))
};
goog.exportProperty(ol.Feature.prototype, "getGeometry", ol.Feature.prototype.getGeometry);
ol.Feature.prototype.getId = function() {
return this.id_
};
ol.Feature.prototype.getGeometryName = function() {
return this.geometryName_
};
ol.Feature.prototype.getStyle = function() {
return this.style_
};
ol.Feature.prototype.getStyleFunction = function() {
return this.styleFunction_
};
ol.Feature.prototype.handleGeometryChange_ = function() {
this.dispatchChangeEvent()
};
ol.Feature.prototype.handleGeometryChanged_ = function() {
if(!goog.isNull(this.geometryChangeKey_)) {
goog.events.unlistenByKey(this.geometryChangeKey_);
this.geometryChangeKey_ = null
}
var geometry = this.getGeometry();
if(goog.isDefAndNotNull(geometry)) {
this.geometryChangeKey_ = goog.events.listen(geometry, goog.events.EventType.CHANGE, this.handleGeometryChange_, false, this);
this.dispatchChangeEvent()
}
};
ol.Feature.prototype.setGeometry = function(geometry) {
this.set(this.geometryName_, geometry)
};
goog.exportProperty(ol.Feature.prototype, "setGeometry", ol.Feature.prototype.setGeometry);
ol.Feature.prototype.setStyle = function(style) {
this.style_ = style;
this.styleFunction_ = ol.feature.createFeatureStyleFunction(style);
this.dispatchChangeEvent()
};
ol.Feature.prototype.setId = function(id) {
this.id_ = id
};
ol.Feature.prototype.setGeometryName = function(name) {
goog.events.unlisten(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this);
this.geometryName_ = name;
goog.events.listen(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this);
this.handleGeometryChanged_()
};
ol.feature.FeatureStyleFunction;
ol.feature.defaultFeatureStyleFunction = function(resolution) {
var fill = new ol.style.Fill({color:"rgba(255,255,255,0.4)"});
var stroke = new ol.style.Stroke({color:"#3399CC", width:1.25});
var styles = [new ol.style.Style({image:new ol.style.Circle({fill:fill, stroke:stroke, radius:5}), fill:fill, stroke:stroke})];
ol.feature.defaultFeatureStyleFunction = (function(resolution) {
return styles
});
return styles
};
ol.feature.StyleFunction;
ol.feature.defaultStyleFunction = function(feature, resolution) {
var featureStyleFunction = feature.getStyleFunction();
if(!goog.isDef(featureStyleFunction)) {
featureStyleFunction = ol.feature.defaultFeatureStyleFunction
}
return featureStyleFunction.call(feature, resolution)
};
ol.feature.createFeatureStyleFunction = function(obj) {
var styleFunction;
if(goog.isFunction(obj)) {
styleFunction = (obj)
}else {
var styles;
if(goog.isArray(obj)) {
styles = obj
}else {
goog.asserts.assertInstanceof(obj, ol.style.Style);
styles = [obj]
}
styleFunction = goog.functions.constant(styles)
}
return styleFunction
};
ol.feature.createStyleFunction = function(obj) {
var styleFunction;
if(goog.isFunction(obj)) {
styleFunction = (obj)
}else {
var styles;
if(goog.isArray(obj)) {
styles = obj
}else {
goog.asserts.assertInstanceof(obj, ol.style.Style);
styles = [obj]
}
styleFunction = goog.functions.constant(styles)
}
return styleFunction
};
ol.feature.createDefaultEditingStyles = function() {
var styles = {};
var white = [255, 255, 255, 1];
var blue = [0, 153, 255, 1];
var width = 3;
styles[ol.geom.GeometryType.POLYGON] = [new ol.style.Style({fill:new ol.style.Fill({color:[255, 255, 255, 0.5]})})];
styles[ol.geom.GeometryType.MULTI_POLYGON] = styles[ol.geom.GeometryType.POLYGON];
styles[ol.geom.GeometryType.LINE_STRING] = [new ol.style.Style({stroke:new ol.style.Stroke({color:white, width:width + 2})}), new ol.style.Style({stroke:new ol.style.Stroke({color:blue, width:width})})];
styles[ol.geom.GeometryType.MULTI_LINE_STRING] = styles[ol.geom.GeometryType.LINE_STRING];
styles[ol.geom.GeometryType.POINT] = [new ol.style.Style({image:new ol.style.Circle({radius:width * 2, fill:new ol.style.Fill({color:blue}), stroke:new ol.style.Stroke({color:white, width:width / 2})}), zIndex:Infinity})];
styles[ol.geom.GeometryType.MULTI_POINT] = styles[ol.geom.GeometryType.POINT];
styles[ol.geom.GeometryType.GEOMETRY_COLLECTION] = styles[ol.geom.GeometryType.POLYGON].concat(styles[ol.geom.GeometryType.POINT]);
return styles
};
goog.provide("ol.FeatureOverlay");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.Collection");
goog.require("ol.CollectionEventType");
goog.require("ol.Feature");
goog.require("ol.feature");
goog.require("ol.render.EventType");
ol.FeatureOverlay = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.features_ = null;
this.featuresListenerKeys_ = null;
this.featureChangeListenerKeys_ = null;
this.map_ = null;
this.postComposeListenerKey_ = null;
this.style_ = null;
this.styleFunction_ = goog.isDef(options.style) ? ol.feature.createStyleFunction(options.style) : undefined;
if(goog.isDef(options.features)) {
if(goog.isArray(options.features)) {
this.setFeatures(new ol.Collection(goog.array.clone(options.features)))
}else {
goog.asserts.assertInstanceof(options.features, ol.Collection);
this.setFeatures(options.features)
}
}else {
this.setFeatures(new ol.Collection)
}
if(goog.isDef(options.map)) {
this.setMap(options.map)
}
};
ol.FeatureOverlay.prototype.addFeature = function(feature) {
this.features_.push(feature)
};
ol.FeatureOverlay.prototype.getFeatures = function() {
return this.features_
};
ol.FeatureOverlay.prototype.handleFeatureChange_ = function() {
this.render_()
};
ol.FeatureOverlay.prototype.handleFeaturesAdd_ = function(collectionEvent) {
goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_));
var feature = (collectionEvent.element);
this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this);
this.render_()
};
ol.FeatureOverlay.prototype.handleFeaturesRemove_ = function(collectionEvent) {
goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_));
var feature = (collectionEvent.element);
var key = goog.getUid(feature).toString();
goog.events.unlistenByKey(this.featureChangeListenerKeys_[key]);
delete this.featureChangeListenerKeys_[key];
this.render_()
};
ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) {
if(goog.isNull(this.features_)) {
return
}
var styleFunction = this.styleFunction_;
if(!goog.isDef(styleFunction)) {
styleFunction = ol.feature.defaultStyleFunction
}
var resolution = event.frameState.view2DState.resolution;
var vectorContext = event.vectorContext;
var i, ii, styles;
this.features_.forEach(function(feature) {
styles = styleFunction(feature, resolution);
if(!goog.isDefAndNotNull(styles)) {
return
}
ii = styles.length;
for(i = 0;i < ii;++i) {
vectorContext.drawFeature(feature, styles[i])
}
})
};
ol.FeatureOverlay.prototype.removeFeature = function(feature) {
this.features_.remove(feature)
};
ol.FeatureOverlay.prototype.render_ = function() {
if(!goog.isNull(this.map_)) {
this.map_.render()
}
};
ol.FeatureOverlay.prototype.setFeatures = function(features) {
if(!goog.isNull(this.featuresListenerKeys_)) {
goog.array.forEach(this.featuresListenerKeys_, goog.events.unlistenByKey);
this.featuresListenerKeys_ = null
}
if(!goog.isNull(this.featureChangeListenerKeys_)) {
goog.array.forEach(goog.object.getValues(this.featureChangeListenerKeys_), goog.events.unlistenByKey);
this.featureChangeListenerKeys_ = null
}
this.features_ = features;
if(!goog.isNull(features)) {
this.featuresListenerKeys_ = [goog.events.listen(features, ol.CollectionEventType.ADD, this.handleFeaturesAdd_, false, this), goog.events.listen(features, ol.CollectionEventType.REMOVE, this.handleFeaturesRemove_, false, this)];
this.featureChangeListenerKeys_ = {};
features.forEach(function(feature) {
this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this)
}, this)
}
this.render_()
};
ol.FeatureOverlay.prototype.setMap = function(map) {
if(!goog.isNull(this.postComposeListenerKey_)) {
goog.events.unlistenByKey(this.postComposeListenerKey_);
this.postComposeListenerKey_ = null
}
this.render_();
this.map_ = map;
if(!goog.isNull(map)) {
this.postComposeListenerKey_ = goog.events.listen(map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, this);
map.render()
}
};
ol.FeatureOverlay.prototype.setStyle = function(style) {
this.style_ = style;
this.styleFunction_ = ol.feature.createStyleFunction(style);
this.render_()
};
ol.FeatureOverlay.prototype.getStyle = function() {
return this.style_
};
ol.FeatureOverlay.prototype.getStyleFunction = function() {
return this.styleFunction_
};
goog.provide("goog.structs");
goog.require("goog.array");
goog.require("goog.object");
goog.structs.getCount = function(col) {
if(typeof col.getCount == "function") {
return col.getCount()
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return col.length
}
return goog.object.getCount(col)
};
goog.structs.getValues = function(col) {
if(typeof col.getValues == "function") {
return col.getValues()
}
if(goog.isString(col)) {
return col.split("")
}
if(goog.isArrayLike(col)) {
var rv = [];
var l = col.length;
for(var i = 0;i < l;i++) {
rv.push(col[i])
}
return rv
}
return goog.object.getValues(col)
};
goog.structs.getKeys = function(col) {
if(typeof col.getKeys == "function") {
return col.getKeys()
}
if(typeof col.getValues == "function") {
return undefined
}
if(goog.isArrayLike(col) || goog.isString(col)) {
var rv = [];
var l = col.length;
for(var i = 0;i < l;i++) {
rv.push(i)
}
return rv
}
return goog.object.getKeys(col)
};
goog.structs.contains = function(col, val) {
if(typeof col.contains == "function") {
return col.contains(val)
}
if(typeof col.containsValue == "function") {
return col.containsValue(val)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.contains((col), val)
}
return goog.object.containsValue(col, val)
};
goog.structs.isEmpty = function(col) {
if(typeof col.isEmpty == "function") {
return col.isEmpty()
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.isEmpty((col))
}
return goog.object.isEmpty(col)
};
goog.structs.clear = function(col) {
if(typeof col.clear == "function") {
col.clear()
}else {
if(goog.isArrayLike(col)) {
goog.array.clear((col))
}else {
goog.object.clear(col)
}
}
};
goog.structs.forEach = function(col, f, opt_obj) {
if(typeof col.forEach == "function") {
col.forEach(f, opt_obj)
}else {
if(goog.isArrayLike(col) || goog.isString(col)) {
goog.array.forEach((col), f, opt_obj)
}else {
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
f.call(opt_obj, values[i], keys && keys[i], col)
}
}
}
};
goog.structs.filter = function(col, f, opt_obj) {
if(typeof col.filter == "function") {
return col.filter(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.filter((col), f, opt_obj)
}
var rv;
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
if(keys) {
rv = {};
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], keys[i], col)) {
rv[keys[i]] = values[i]
}
}
}else {
rv = [];
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], undefined, col)) {
rv.push(values[i])
}
}
}
return rv
};
goog.structs.map = function(col, f, opt_obj) {
if(typeof col.map == "function") {
return col.map(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.map((col), f, opt_obj)
}
var rv;
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
if(keys) {
rv = {};
for(var i = 0;i < l;i++) {
rv[keys[i]] = f.call(opt_obj, values[i], keys[i], col)
}
}else {
rv = [];
for(var i = 0;i < l;i++) {
rv[i] = f.call(opt_obj, values[i], undefined, col)
}
}
return rv
};
goog.structs.some = function(col, f, opt_obj) {
if(typeof col.some == "function") {
return col.some(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.some((col), f, opt_obj)
}
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], keys && keys[i], col)) {
return true
}
}
return false
};
goog.structs.every = function(col, f, opt_obj) {
if(typeof col.every == "function") {
return col.every(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.every((col), f, opt_obj)
}
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
if(!f.call(opt_obj, values[i], keys && keys[i], col)) {
return false
}
}
return true
};
goog.provide("goog.iter");
goog.provide("goog.iter.Iterator");
goog.provide("goog.iter.StopIteration");
goog.require("goog.array");
goog.require("goog.asserts");
goog.iter.Iterable;
if("StopIteration" in goog.global) {
goog.iter.StopIteration = goog.global["StopIteration"]
}else {
goog.iter.StopIteration = Error("StopIteration")
}
goog.iter.Iterator = function() {
};
goog.iter.Iterator.prototype.next = function() {
throw goog.iter.StopIteration;
};
goog.iter.Iterator.prototype.__iterator__ = function(opt_keys) {
return this
};
goog.iter.toIterator = function(iterable) {
if(iterable instanceof goog.iter.Iterator) {
return iterable
}
if(typeof iterable.__iterator__ == "function") {
return iterable.__iterator__(false)
}
if(goog.isArrayLike(iterable)) {
var i = 0;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
if(i >= iterable.length) {
throw goog.iter.StopIteration;
}
if(!(i in iterable)) {
i++;
continue
}
return iterable[i++]
}
};
return newIter
}
throw Error("Not implemented");
};
goog.iter.forEach = function(iterable, f, opt_obj) {
if(goog.isArrayLike(iterable)) {
try {
goog.array.forEach((iterable), f, opt_obj)
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
}else {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
f.call(opt_obj, iterable.next(), undefined, iterable)
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
}
};
goog.iter.filter = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
var val = iterator.next();
if(f.call(opt_obj, val, undefined, iterator)) {
return val
}
}
};
return newIter
};
goog.iter.range = function(startOrStop, opt_stop, opt_step) {
var start = 0;
var stop = startOrStop;
var step = opt_step || 1;
if(arguments.length > 1) {
start = startOrStop;
stop = opt_stop
}
if(step == 0) {
throw Error("Range step argument must not be zero");
}
var newIter = new goog.iter.Iterator;
newIter.next = function() {
if(step > 0 && start >= stop || step < 0 && start <= stop) {
throw goog.iter.StopIteration;
}
var rv = start;
start += step;
return rv
};
return newIter
};
goog.iter.join = function(iterable, deliminator) {
return goog.iter.toArray(iterable).join(deliminator)
};
goog.iter.map = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
var val = iterator.next();
return f.call(opt_obj, val, undefined, iterator)
}
};
return newIter
};
goog.iter.reduce = function(iterable, f, val, opt_obj) {
var rval = val;
goog.iter.forEach(iterable, function(val) {
rval = f.call(opt_obj, rval, val)
});
return rval
};
goog.iter.some = function(iterable, f, opt_obj) {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
if(f.call(opt_obj, iterable.next(), undefined, iterable)) {
return true
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
return false
};
goog.iter.every = function(iterable, f, opt_obj) {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
if(!f.call(opt_obj, iterable.next(), undefined, iterable)) {
return false
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
return true
};
goog.iter.chain = function(var_args) {
var args = arguments;
var length = args.length;
var i = 0;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
try {
if(i >= length) {
throw goog.iter.StopIteration;
}
var current = goog.iter.toIterator(args[i]);
return current.next()
}catch(ex) {
if(ex !== goog.iter.StopIteration || i >= length) {
throw ex;
}else {
i++;
return this.next()
}
}
};
return newIter
};
goog.iter.dropWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
var dropping = true;
newIter.next = function() {
while(true) {
var val = iterator.next();
if(dropping && f.call(opt_obj, val, undefined, iterator)) {
continue
}else {
dropping = false
}
return val
}
};
return newIter
};
goog.iter.takeWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
var taking = true;
newIter.next = function() {
while(true) {
if(taking) {
var val = iterator.next();
if(f.call(opt_obj, val, undefined, iterator)) {
return val
}else {
taking = false
}
}else {
throw goog.iter.StopIteration;
}
}
};
return newIter
};
goog.iter.toArray = function(iterable) {
if(goog.isArrayLike(iterable)) {
return goog.array.toArray((iterable))
}
iterable = goog.iter.toIterator(iterable);
var array = [];
goog.iter.forEach(iterable, function(val) {
array.push(val)
});
return array
};
goog.iter.equals = function(iterable1, iterable2) {
iterable1 = goog.iter.toIterator(iterable1);
iterable2 = goog.iter.toIterator(iterable2);
var b1, b2;
try {
while(true) {
b1 = b2 = false;
var val1 = iterable1.next();
b1 = true;
var val2 = iterable2.next();
b2 = true;
if(val1 != val2) {
return false
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}else {
if(b1 && !b2) {
return false
}
if(!b2) {
try {
val2 = iterable2.next();
return false
}catch(ex1) {
if(ex1 !== goog.iter.StopIteration) {
throw ex1;
}
return true
}
}
}
}
return false
};
goog.iter.nextOrValue = function(iterable, defaultValue) {
try {
return goog.iter.toIterator(iterable).next()
}catch(e) {
if(e != goog.iter.StopIteration) {
throw e;
}
return defaultValue
}
};
goog.iter.product = function(var_args) {
var someArrayEmpty = goog.array.some(arguments, function(arr) {
return!arr.length
});
if(someArrayEmpty || !arguments.length) {
return new goog.iter.Iterator
}
var iter = new goog.iter.Iterator;
var arrays = arguments;
var indicies = goog.array.repeat(0, arrays.length);
iter.next = function() {
if(indicies) {
var retVal = goog.array.map(indicies, function(valueIndex, arrayIndex) {
return arrays[arrayIndex][valueIndex]
});
for(var i = indicies.length - 1;i >= 0;i--) {
goog.asserts.assert(indicies);
if(indicies[i] < arrays[i].length - 1) {
indicies[i]++;
break
}
if(i == 0) {
indicies = null;
break
}
indicies[i] = 0
}
return retVal
}
throw goog.iter.StopIteration;
};
return iter
};
goog.iter.cycle = function(iterable) {
var baseIterator = goog.iter.toIterator(iterable);
var cache = [];
var cacheIndex = 0;
var iter = new goog.iter.Iterator;
var useCache = false;
iter.next = function() {
var returnElement = null;
if(!useCache) {
try {
returnElement = baseIterator.next();
cache.push(returnElement);
return returnElement
}catch(e) {
if(e != goog.iter.StopIteration || goog.array.isEmpty(cache)) {
throw e;
}
useCache = true
}
}
returnElement = cache[cacheIndex];
cacheIndex = (cacheIndex + 1) % cache.length;
return returnElement
};
return iter
};
goog.provide("goog.structs.Map");
goog.require("goog.iter.Iterator");
goog.require("goog.iter.StopIteration");
goog.require("goog.object");
goog.structs.Map = function(opt_map, var_args) {
this.map_ = {};
this.keys_ = [];
var argLength = arguments.length;
if(argLength > 1) {
if(argLength % 2) {
throw Error("Uneven number of arguments");
}
for(var i = 0;i < argLength;i += 2) {
this.set(arguments[i], arguments[i + 1])
}
}else {
if(opt_map) {
this.addAll((opt_map))
}
}
};
goog.structs.Map.prototype.count_ = 0;
goog.structs.Map.prototype.version_ = 0;
goog.structs.Map.prototype.getCount = function() {
return this.count_
};
goog.structs.Map.prototype.getValues = function() {
this.cleanupKeysArray_();
var rv = [];
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
rv.push(this.map_[key])
}
return rv
};
goog.structs.Map.prototype.getKeys = function() {
this.cleanupKeysArray_();
return(this.keys_.concat())
};
goog.structs.Map.prototype.containsKey = function(key) {
return goog.structs.Map.hasKey_(this.map_, key)
};
goog.structs.Map.prototype.containsValue = function(val) {
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
if(goog.structs.Map.hasKey_(this.map_, key) && this.map_[key] == val) {
return true
}
}
return false
};
goog.structs.Map.prototype.equals = function(otherMap, opt_equalityFn) {
if(this === otherMap) {
return true
}
if(this.count_ != otherMap.getCount()) {
return false
}
var equalityFn = opt_equalityFn || goog.structs.Map.defaultEquals;
this.cleanupKeysArray_();
for(var key, i = 0;key = this.keys_[i];i++) {
if(!equalityFn(this.get(key), otherMap.get(key))) {
return false
}
}
return true
};
goog.structs.Map.defaultEquals = function(a, b) {
return a === b
};
goog.structs.Map.prototype.isEmpty = function() {
return this.count_ == 0
};
goog.structs.Map.prototype.clear = function() {
this.map_ = {};
this.keys_.length = 0;
this.count_ = 0;
this.version_ = 0
};
goog.structs.Map.prototype.remove = function(key) {
if(goog.structs.Map.hasKey_(this.map_, key)) {
delete this.map_[key];
this.count_--;
this.version_++;
if(this.keys_.length > 2 * this.count_) {
this.cleanupKeysArray_()
}
return true
}
return false
};
goog.structs.Map.prototype.cleanupKeysArray_ = function() {
if(this.count_ != this.keys_.length) {
var srcIndex = 0;
var destIndex = 0;
while(srcIndex < this.keys_.length) {
var key = this.keys_[srcIndex];
if(goog.structs.Map.hasKey_(this.map_, key)) {
this.keys_[destIndex++] = key
}
srcIndex++
}
this.keys_.length = destIndex
}
if(this.count_ != this.keys_.length) {
var seen = {};
var srcIndex = 0;
var destIndex = 0;
while(srcIndex < this.keys_.length) {
var key = this.keys_[srcIndex];
if(!goog.structs.Map.hasKey_(seen, key)) {
this.keys_[destIndex++] = key;
seen[key] = 1
}
srcIndex++
}
this.keys_.length = destIndex
}
};
goog.structs.Map.prototype.get = function(key, opt_val) {
if(goog.structs.Map.hasKey_(this.map_, key)) {
return this.map_[key]
}
return opt_val
};
goog.structs.Map.prototype.set = function(key, value) {
if(!goog.structs.Map.hasKey_(this.map_, key)) {
this.count_++;
this.keys_.push(key);
this.version_++
}
this.map_[key] = value
};
goog.structs.Map.prototype.addAll = function(map) {
var keys, values;
if(map instanceof goog.structs.Map) {
keys = map.getKeys();
values = map.getValues()
}else {
keys = goog.object.getKeys(map);
values = goog.object.getValues(map)
}
for(var i = 0;i < keys.length;i++) {
this.set(keys[i], values[i])
}
};
goog.structs.Map.prototype.clone = function() {
return new goog.structs.Map(this)
};
goog.structs.Map.prototype.transpose = function() {
var transposed = new goog.structs.Map;
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
var value = this.map_[key];
transposed.set(value, key)
}
return transposed
};
goog.structs.Map.prototype.toObject = function() {
this.cleanupKeysArray_();
var obj = {};
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
obj[key] = this.map_[key]
}
return obj
};
goog.structs.Map.prototype.getKeyIterator = function() {
return this.__iterator__(true)
};
goog.structs.Map.prototype.getValueIterator = function() {
return this.__iterator__(false)
};
goog.structs.Map.prototype.__iterator__ = function(opt_keys) {
this.cleanupKeysArray_();
var i = 0;
var keys = this.keys_;
var map = this.map_;
var version = this.version_;
var selfObj = this;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
if(version != selfObj.version_) {
throw Error("The map has changed since the iterator was created");
}
if(i >= keys.length) {
throw goog.iter.StopIteration;
}
var key = keys[i++];
return opt_keys ? key : map[key]
}
};
return newIter
};
goog.structs.Map.hasKey_ = function(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key)
};
goog.provide("goog.uri.utils");
goog.provide("goog.uri.utils.ComponentIndex");
goog.provide("goog.uri.utils.QueryArray");
goog.provide("goog.uri.utils.QueryValue");
goog.provide("goog.uri.utils.StandardQueryParam");
goog.require("goog.asserts");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63};
goog.uri.utils.buildFromEncodedParts = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {
var out = "";
if(opt_scheme) {
out += opt_scheme + ":"
}
if(opt_domain) {
out += "//";
if(opt_userInfo) {
out += opt_userInfo + "@"
}
out += opt_domain;
if(opt_port) {
out += ":" + opt_port
}
}
if(opt_path) {
out += opt_path
}
if(opt_queryData) {
out += "?" + opt_queryData
}
if(opt_fragment) {
out += "#" + opt_fragment
}
return out
};
goog.uri.utils.splitRe_ = new RegExp("^" + "(?:" + "([^:/?#.]+)" + ":)?" + "(?://" + "(?:([^/?#]*)@)?" + "([^/#?]*?)" + "(?::([0-9]+))?" + "(?\x3d[/#?]|$)" + ")?" + "([^?#]+)?" + "(?:\\?([^#]*))?" + "(?:#(.*))?" + "$");
goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7};
goog.uri.utils.split = function(uri) {
goog.uri.utils.phishingProtection_();
return(uri.match(goog.uri.utils.splitRe_))
};
goog.uri.utils.needsPhishingProtection_ = goog.userAgent.WEBKIT;
goog.uri.utils.phishingProtection_ = function() {
if(goog.uri.utils.needsPhishingProtection_) {
goog.uri.utils.needsPhishingProtection_ = false;
var location = goog.global["location"];
if(location) {
var href = location["href"];
if(href) {
var domain = goog.uri.utils.getDomain(href);
if(domain && domain != location["hostname"]) {
goog.uri.utils.needsPhishingProtection_ = true;
throw Error();
}
}
}
}
};
goog.uri.utils.decodeIfPossible_ = function(uri) {
return uri && decodeURIComponent(uri)
};
goog.uri.utils.getComponentByIndex_ = function(componentIndex, uri) {
return goog.uri.utils.split(uri)[componentIndex] || null
};
goog.uri.utils.getScheme = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, uri)
};
goog.uri.utils.getEffectiveScheme = function(uri) {
var scheme = goog.uri.utils.getScheme(uri);
if(!scheme && self.location) {
var protocol = self.location.protocol;
scheme = protocol.substr(0, protocol.length - 1)
}
return scheme ? scheme.toLowerCase() : ""
};
goog.uri.utils.getUserInfoEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, uri)
};
goog.uri.utils.getUserInfo = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(uri))
};
goog.uri.utils.getDomainEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, uri)
};
goog.uri.utils.getDomain = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(uri))
};
goog.uri.utils.getPort = function(uri) {
return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, uri)) || null
};
goog.uri.utils.getPathEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, uri)
};
goog.uri.utils.getPath = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(uri))
};
goog.uri.utils.getQueryData = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, uri)
};
goog.uri.utils.getFragmentEncoded = function(uri) {
var hashIndex = uri.indexOf("#");
return hashIndex < 0 ? null : uri.substr(hashIndex + 1)
};
goog.uri.utils.setFragmentEncoded = function(uri, fragment) {
return goog.uri.utils.removeFragment(uri) + (fragment ? "#" + fragment : "")
};
goog.uri.utils.getFragment = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(uri))
};
goog.uri.utils.getHost = function(uri) {
var pieces = goog.uri.utils.split(uri);
return goog.uri.utils.buildFromEncodedParts(pieces[goog.uri.utils.ComponentIndex.SCHEME], pieces[goog.uri.utils.ComponentIndex.USER_INFO], pieces[goog.uri.utils.ComponentIndex.DOMAIN], pieces[goog.uri.utils.ComponentIndex.PORT])
};
goog.uri.utils.getPathAndAfter = function(uri) {
var pieces = goog.uri.utils.split(uri);
return goog.uri.utils.buildFromEncodedParts(null, null, null, null, pieces[goog.uri.utils.ComponentIndex.PATH], pieces[goog.uri.utils.ComponentIndex.QUERY_DATA], pieces[goog.uri.utils.ComponentIndex.FRAGMENT])
};
goog.uri.utils.removeFragment = function(uri) {
var hashIndex = uri.indexOf("#");
return hashIndex < 0 ? uri : uri.substr(0, hashIndex)
};
goog.uri.utils.haveSameDomain = function(uri1, uri2) {
var pieces1 = goog.uri.utils.split(uri1);
var pieces2 = goog.uri.utils.split(uri2);
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.SCHEME] == pieces2[goog.uri.utils.ComponentIndex.SCHEME] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]
};
goog.uri.utils.assertNoFragmentsOrQueries_ = function(uri) {
if(goog.DEBUG && (uri.indexOf("#") >= 0 || uri.indexOf("?") >= 0)) {
throw Error("goog.uri.utils: Fragment or query identifiers are not " + "supported: [" + uri + "]");
}
};
goog.uri.utils.QueryValue;
goog.uri.utils.QueryArray;
goog.uri.utils.appendQueryData_ = function(buffer) {
if(buffer[1]) {
var baseUri = (buffer[0]);
var hashIndex = baseUri.indexOf("#");
if(hashIndex >= 0) {
buffer.push(baseUri.substr(hashIndex));
buffer[0] = baseUri = baseUri.substr(0, hashIndex)
}
var questionIndex = baseUri.indexOf("?");
if(questionIndex < 0) {
buffer[1] = "?"
}else {
if(questionIndex == baseUri.length - 1) {
buffer[1] = undefined
}
}
}
return buffer.join("")
};
goog.uri.utils.appendKeyValuePairs_ = function(key, value, pairs) {
if(goog.isArray(value)) {
goog.asserts.assertArray(value);
for(var j = 0;j < value.length;j++) {
goog.uri.utils.appendKeyValuePairs_(key, String(value[j]), pairs)
}
}else {
if(value != null) {
pairs.push("\x26", key, value === "" ? "" : "\x3d", goog.string.urlEncode(value))
}
}
};
goog.uri.utils.buildQueryDataBuffer_ = function(buffer, keysAndValues, opt_startIndex) {
goog.asserts.assert(Math.max(keysAndValues.length - (opt_startIndex || 0), 0) % 2 == 0, "goog.uri.utils: Key/value lists must be even in length.");
for(var i = opt_startIndex || 0;i < keysAndValues.length;i += 2) {
goog.uri.utils.appendKeyValuePairs_(keysAndValues[i], keysAndValues[i + 1], buffer)
}
return buffer
};
goog.uri.utils.buildQueryData = function(keysAndValues, opt_startIndex) {
var buffer = goog.uri.utils.buildQueryDataBuffer_([], keysAndValues, opt_startIndex);
buffer[0] = "";
return buffer.join("")
};
goog.uri.utils.buildQueryDataBufferFromMap_ = function(buffer, map) {
for(var key in map) {
goog.uri.utils.appendKeyValuePairs_(key, map[key], buffer)
}
return buffer
};
goog.uri.utils.buildQueryDataFromMap = function(map) {
var buffer = goog.uri.utils.buildQueryDataBufferFromMap_([], map);
buffer[0] = "";
return buffer.join("")
};
goog.uri.utils.appendParams = function(uri, var_args) {
return goog.uri.utils.appendQueryData_(arguments.length == 2 ? goog.uri.utils.buildQueryDataBuffer_([uri], arguments[1], 0) : goog.uri.utils.buildQueryDataBuffer_([uri], arguments, 1))
};
goog.uri.utils.appendParamsFromMap = function(uri, map) {
return goog.uri.utils.appendQueryData_(goog.uri.utils.buildQueryDataBufferFromMap_([uri], map))
};
goog.uri.utils.appendParam = function(uri, key, opt_value) {
var paramArr = [uri, "\x26", key];
if(goog.isDefAndNotNull(opt_value)) {
paramArr.push("\x3d", goog.string.urlEncode(opt_value))
}
return goog.uri.utils.appendQueryData_(paramArr)
};
goog.uri.utils.findParam_ = function(uri, startIndex, keyEncoded, hashOrEndIndex) {
var index = startIndex;
var keyLength = keyEncoded.length;
while((index = uri.indexOf(keyEncoded, index)) >= 0 && index < hashOrEndIndex) {
var precedingChar = uri.charCodeAt(index - 1);
if(precedingChar == goog.uri.utils.CharCode_.AMPERSAND || precedingChar == goog.uri.utils.CharCode_.QUESTION) {
var followingChar = uri.charCodeAt(index + keyLength);
if(!followingChar || followingChar == goog.uri.utils.CharCode_.EQUAL || followingChar == goog.uri.utils.CharCode_.AMPERSAND || followingChar == goog.uri.utils.CharCode_.HASH) {
return index
}
}
index += keyLength + 1
}
return-1
};
goog.uri.utils.hashOrEndRe_ = /#|$/;
goog.uri.utils.hasParam = function(uri, keyEncoded) {
return goog.uri.utils.findParam_(uri, 0, keyEncoded, uri.search(goog.uri.utils.hashOrEndRe_)) >= 0
};
goog.uri.utils.getParamValue = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var foundIndex = goog.uri.utils.findParam_(uri, 0, keyEncoded, hashOrEndIndex);
if(foundIndex < 0) {
return null
}else {
var endPosition = uri.indexOf("\x26", foundIndex);
if(endPosition < 0 || endPosition > hashOrEndIndex) {
endPosition = hashOrEndIndex
}
foundIndex += keyEncoded.length + 1;
return goog.string.urlDecode(uri.substr(foundIndex, endPosition - foundIndex))
}
};
goog.uri.utils.getParamValues = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var position = 0;
var foundIndex;
var result = [];
while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) {
position = uri.indexOf("\x26", foundIndex);
if(position < 0 || position > hashOrEndIndex) {
position = hashOrEndIndex
}
foundIndex += keyEncoded.length + 1;
result.push(goog.string.urlDecode(uri.substr(foundIndex, position - foundIndex)))
}
return result
};
goog.uri.utils.trailingQueryPunctuationRe_ = /[?&]($|#)/;
goog.uri.utils.removeParam = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var position = 0;
var foundIndex;
var buffer = [];
while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) {
buffer.push(uri.substring(position, foundIndex));
position = Math.min(uri.indexOf("\x26", foundIndex) + 1 || hashOrEndIndex, hashOrEndIndex)
}
buffer.push(uri.substr(position));
return buffer.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_, "$1")
};
goog.uri.utils.setParam = function(uri, keyEncoded, value) {
return goog.uri.utils.appendParam(goog.uri.utils.removeParam(uri, keyEncoded), keyEncoded, value)
};
goog.uri.utils.appendPath = function(baseUri, path) {
goog.uri.utils.assertNoFragmentsOrQueries_(baseUri);
if(goog.string.endsWith(baseUri, "/")) {
baseUri = baseUri.substr(0, baseUri.length - 1)
}
if(goog.string.startsWith(path, "/")) {
path = path.substr(1)
}
return goog.string.buildString(baseUri, "/", path)
};
goog.uri.utils.StandardQueryParam = {RANDOM:"zx"};
goog.uri.utils.makeUnique = function(uri) {
return goog.uri.utils.setParam(uri, goog.uri.utils.StandardQueryParam.RANDOM, goog.string.getRandomString())
};
goog.provide("goog.Uri");
goog.provide("goog.Uri.QueryData");
goog.require("goog.array");
goog.require("goog.string");
goog.require("goog.structs");
goog.require("goog.structs.Map");
goog.require("goog.uri.utils");
goog.require("goog.uri.utils.ComponentIndex");
goog.require("goog.uri.utils.StandardQueryParam");
goog.Uri = function(opt_uri, opt_ignoreCase) {
var m;
if(opt_uri instanceof goog.Uri) {
this.ignoreCase_ = goog.isDef(opt_ignoreCase) ? opt_ignoreCase : opt_uri.getIgnoreCase();
this.setScheme(opt_uri.getScheme());
this.setUserInfo(opt_uri.getUserInfo());
this.setDomain(opt_uri.getDomain());
this.setPort(opt_uri.getPort());
this.setPath(opt_uri.getPath());
this.setQueryData(opt_uri.getQueryData().clone());
this.setFragment(opt_uri.getFragment())
}else {
if(opt_uri && (m = goog.uri.utils.split(String(opt_uri)))) {
this.ignoreCase_ = !!opt_ignoreCase;
this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || "", true);
this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || "", true);
this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || "", true);
this.setPort(m[goog.uri.utils.ComponentIndex.PORT]);
this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || "", true);
this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || "", true);
this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || "", true)
}else {
this.ignoreCase_ = !!opt_ignoreCase;
this.queryData_ = new goog.Uri.QueryData(null, null, this.ignoreCase_)
}
}
};
goog.Uri.preserveParameterTypesCompatibilityFlag = false;
goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM;
goog.Uri.prototype.scheme_ = "";
goog.Uri.prototype.userInfo_ = "";
goog.Uri.prototype.domain_ = "";
goog.Uri.prototype.port_ = null;
goog.Uri.prototype.path_ = "";
goog.Uri.prototype.queryData_;
goog.Uri.prototype.fragment_ = "";
goog.Uri.prototype.isReadOnly_ = false;
goog.Uri.prototype.ignoreCase_ = false;
goog.Uri.prototype.toString = function() {
var out = [];
var scheme = this.getScheme();
if(scheme) {
out.push(goog.Uri.encodeSpecialChars_(scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_), ":")
}
var domain = this.getDomain();
if(domain) {
out.push("//");
var userInfo = this.getUserInfo();
if(userInfo) {
out.push(goog.Uri.encodeSpecialChars_(userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_), "@")
}
out.push(goog.string.urlEncode(domain));
var port = this.getPort();
if(port != null) {
out.push(":", String(port))
}
}
var path = this.getPath();
if(path) {
if(this.hasDomain() && path.charAt(0) != "/") {
out.push("/")
}
out.push(goog.Uri.encodeSpecialChars_(path, path.charAt(0) == "/" ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_))
}
var query = this.getEncodedQuery();
if(query) {
out.push("?", query)
}
var fragment = this.getFragment();
if(fragment) {
out.push("#", goog.Uri.encodeSpecialChars_(fragment, goog.Uri.reDisallowedInFragment_))
}
return out.join("")
};
goog.Uri.prototype.resolve = function(relativeUri) {
var absoluteUri = this.clone();
var overridden = relativeUri.hasScheme();
if(overridden) {
absoluteUri.setScheme(relativeUri.getScheme())
}else {
overridden = relativeUri.hasUserInfo()
}
if(overridden) {
absoluteUri.setUserInfo(relativeUri.getUserInfo())
}else {
overridden = relativeUri.hasDomain()
}
if(overridden) {
absoluteUri.setDomain(relativeUri.getDomain())
}else {
overridden = relativeUri.hasPort()
}
var path = relativeUri.getPath();
if(overridden) {
absoluteUri.setPort(relativeUri.getPort())
}else {
overridden = relativeUri.hasPath();
if(overridden) {
if(path.charAt(0) != "/") {
if(this.hasDomain() && !this.hasPath()) {
path = "/" + path
}else {
var lastSlashIndex = absoluteUri.getPath().lastIndexOf("/");
if(lastSlashIndex != -1) {
path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path
}
}
}
path = goog.Uri.removeDotSegments(path)
}
}
if(overridden) {
absoluteUri.setPath(path)
}else {
overridden = relativeUri.hasQuery()
}
if(overridden) {
absoluteUri.setQueryData(relativeUri.getDecodedQuery())
}else {
overridden = relativeUri.hasFragment()
}
if(overridden) {
absoluteUri.setFragment(relativeUri.getFragment())
}
return absoluteUri
};
goog.Uri.prototype.clone = function() {
return new goog.Uri(this)
};
goog.Uri.prototype.getScheme = function() {
return this.scheme_
};
goog.Uri.prototype.setScheme = function(newScheme, opt_decode) {
this.enforceReadOnly();
this.scheme_ = opt_decode ? goog.Uri.decodeOrEmpty_(newScheme) : newScheme;
if(this.scheme_) {
this.scheme_ = this.scheme_.replace(/:$/, "")
}
return this
};
goog.Uri.prototype.hasScheme = function() {
return!!this.scheme_
};
goog.Uri.prototype.getUserInfo = function() {
return this.userInfo_
};
goog.Uri.prototype.setUserInfo = function(newUserInfo, opt_decode) {
this.enforceReadOnly();
this.userInfo_ = opt_decode ? goog.Uri.decodeOrEmpty_(newUserInfo) : newUserInfo;
return this
};
goog.Uri.prototype.hasUserInfo = function() {
return!!this.userInfo_
};
goog.Uri.prototype.getDomain = function() {
return this.domain_
};
goog.Uri.prototype.setDomain = function(newDomain, opt_decode) {
this.enforceReadOnly();
this.domain_ = opt_decode ? goog.Uri.decodeOrEmpty_(newDomain) : newDomain;
return this
};
goog.Uri.prototype.hasDomain = function() {
return!!this.domain_
};
goog.Uri.prototype.getPort = function() {
return this.port_
};
goog.Uri.prototype.setPort = function(newPort) {
this.enforceReadOnly();
if(newPort) {
newPort = Number(newPort);
if(isNaN(newPort) || newPort < 0) {
throw Error("Bad port number " + newPort);
}
this.port_ = newPort
}else {
this.port_ = null
}
return this
};
goog.Uri.prototype.hasPort = function() {
return this.port_ != null
};
goog.Uri.prototype.getPath = function() {
return this.path_
};
goog.Uri.prototype.setPath = function(newPath, opt_decode) {
this.enforceReadOnly();
this.path_ = opt_decode ? goog.Uri.decodeOrEmpty_(newPath) : newPath;
return this
};
goog.Uri.prototype.hasPath = function() {
return!!this.path_
};
goog.Uri.prototype.hasQuery = function() {
return this.queryData_.toString() !== ""
};
goog.Uri.prototype.setQueryData = function(queryData, opt_decode) {
this.enforceReadOnly();
if(queryData instanceof goog.Uri.QueryData) {
this.queryData_ = queryData;
this.queryData_.setIgnoreCase(this.ignoreCase_)
}else {
if(!opt_decode) {
queryData = goog.Uri.encodeSpecialChars_(queryData, goog.Uri.reDisallowedInQuery_)
}
this.queryData_ = new goog.Uri.QueryData(queryData, null, this.ignoreCase_)
}
return this
};
goog.Uri.prototype.setQuery = function(newQuery, opt_decode) {
return this.setQueryData(newQuery, opt_decode)
};
goog.Uri.prototype.getEncodedQuery = function() {
return this.queryData_.toString()
};
goog.Uri.prototype.getDecodedQuery = function() {
return this.queryData_.toDecodedString()
};
goog.Uri.prototype.getQueryData = function() {
return this.queryData_
};
goog.Uri.prototype.getQuery = function() {
return this.getEncodedQuery()
};
goog.Uri.prototype.setParameterValue = function(key, value) {
this.enforceReadOnly();
this.queryData_.set(key, value);
return this
};
goog.Uri.prototype.setParameterValues = function(key, values) {
this.enforceReadOnly();
if(!goog.isArray(values)) {
values = [String(values)]
}
this.queryData_.setValues(key, (values));
return this
};
goog.Uri.prototype.getParameterValues = function(name) {
return this.queryData_.getValues(name)
};
goog.Uri.prototype.getParameterValue = function(paramName) {
return(this.queryData_.get(paramName))
};
goog.Uri.prototype.getFragment = function() {
return this.fragment_
};
goog.Uri.prototype.setFragment = function(newFragment, opt_decode) {
this.enforceReadOnly();
this.fragment_ = opt_decode ? goog.Uri.decodeOrEmpty_(newFragment) : newFragment;
return this
};
goog.Uri.prototype.hasFragment = function() {
return!!this.fragment_
};
goog.Uri.prototype.hasSameDomainAs = function(uri2) {
return(!this.hasDomain() && !uri2.hasDomain() || this.getDomain() == uri2.getDomain()) && (!this.hasPort() && !uri2.hasPort() || this.getPort() == uri2.getPort())
};
goog.Uri.prototype.makeUnique = function() {
this.enforceReadOnly();
this.setParameterValue(goog.Uri.RANDOM_PARAM, goog.string.getRandomString());
return this
};
goog.Uri.prototype.removeParameter = function(key) {
this.enforceReadOnly();
this.queryData_.remove(key);
return this
};
goog.Uri.prototype.setReadOnly = function(isReadOnly) {
this.isReadOnly_ = isReadOnly;
return this
};
goog.Uri.prototype.isReadOnly = function() {
return this.isReadOnly_
};
goog.Uri.prototype.enforceReadOnly = function() {
if(this.isReadOnly_) {
throw Error("Tried to modify a read-only Uri");
}
};
goog.Uri.prototype.setIgnoreCase = function(ignoreCase) {
this.ignoreCase_ = ignoreCase;
if(this.queryData_) {
this.queryData_.setIgnoreCase(ignoreCase)
}
return this
};
goog.Uri.prototype.getIgnoreCase = function() {
return this.ignoreCase_
};
goog.Uri.parse = function(uri, opt_ignoreCase) {
return uri instanceof goog.Uri ? uri.clone() : new goog.Uri(uri, opt_ignoreCase)
};
goog.Uri.create = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_query, opt_fragment, opt_ignoreCase) {
var uri = new goog.Uri(null, opt_ignoreCase);
opt_scheme && uri.setScheme(opt_scheme);
opt_userInfo && uri.setUserInfo(opt_userInfo);
opt_domain && uri.setDomain(opt_domain);
opt_port && uri.setPort(opt_port);
opt_path && uri.setPath(opt_path);
opt_query && uri.setQueryData(opt_query);
opt_fragment && uri.setFragment(opt_fragment);
return uri
};
goog.Uri.resolve = function(base, rel) {
if(!(base instanceof goog.Uri)) {
base = goog.Uri.parse(base)
}
if(!(rel instanceof goog.Uri)) {
rel = goog.Uri.parse(rel)
}
return base.resolve(rel)
};
goog.Uri.removeDotSegments = function(path) {
if(path == ".." || path == ".") {
return""
}else {
if(!goog.string.contains(path, "./") && !goog.string.contains(path, "/.")) {
return path
}else {
var leadingSlash = goog.string.startsWith(path, "/");
var segments = path.split("/");
var out = [];
for(var pos = 0;pos < segments.length;) {
var segment = segments[pos++];
if(segment == ".") {
if(leadingSlash && pos == segments.length) {
out.push("")
}
}else {
if(segment == "..") {
if(out.length > 1 || out.length == 1 && out[0] != "") {
out.pop()
}
if(leadingSlash && pos == segments.length) {
out.push("")
}
}else {
out.push(segment);
leadingSlash = true
}
}
}
return out.join("/")
}
}
};
goog.Uri.decodeOrEmpty_ = function(val) {
return val ? decodeURIComponent(val) : ""
};
goog.Uri.encodeSpecialChars_ = function(unescapedPart, extra) {
if(goog.isString(unescapedPart)) {
return encodeURI(unescapedPart).replace(extra, goog.Uri.encodeChar_)
}
return null
};
goog.Uri.encodeChar_ = function(ch) {
var n = ch.charCodeAt(0);
return"%" + (n >> 4 & 15).toString(16) + (n & 15).toString(16)
};
goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\/\?@]/g;
goog.Uri.reDisallowedInRelativePath_ = /[\#\?:]/g;
goog.Uri.reDisallowedInAbsolutePath_ = /[\#\?]/g;
goog.Uri.reDisallowedInQuery_ = /[\#\?@]/g;
goog.Uri.reDisallowedInFragment_ = /#/g;
goog.Uri.haveSameDomain = function(uri1String, uri2String) {
var pieces1 = goog.uri.utils.split(uri1String);
var pieces2 = goog.uri.utils.split(uri2String);
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]
};
goog.Uri.QueryData = function(opt_query, opt_uri, opt_ignoreCase) {
this.encodedQuery_ = opt_query || null;
this.ignoreCase_ = !!opt_ignoreCase
};
goog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() {
if(!this.keyMap_) {
this.keyMap_ = new goog.structs.Map;
this.count_ = 0;
if(this.encodedQuery_) {
var pairs = this.encodedQuery_.split("\x26");
for(var i = 0;i < pairs.length;i++) {
var indexOfEquals = pairs[i].indexOf("\x3d");
var name = null;
var value = null;
if(indexOfEquals >= 0) {
name = pairs[i].substring(0, indexOfEquals);
value = pairs[i].substring(indexOfEquals + 1)
}else {
name = pairs[i]
}
name = goog.string.urlDecode(name);
name = this.getKeyName_(name);
this.add(name, value ? goog.string.urlDecode(value) : "")
}
}
}
};
goog.Uri.QueryData.createFromMap = function(map, opt_uri, opt_ignoreCase) {
var keys = goog.structs.getKeys(map);
if(typeof keys == "undefined") {
throw Error("Keys are undefined");
}
var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase);
var values = goog.structs.getValues(map);
for(var i = 0;i < keys.length;i++) {
var key = keys[i];
var value = values[i];
if(!goog.isArray(value)) {
queryData.add(key, value)
}else {
queryData.setValues(key, value)
}
}
return queryData
};
goog.Uri.QueryData.createFromKeysValues = function(keys, values, opt_uri, opt_ignoreCase) {
if(keys.length != values.length) {
throw Error("Mismatched lengths for keys/values");
}
var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase);
for(var i = 0;i < keys.length;i++) {
queryData.add(keys[i], values[i])
}
return queryData
};
goog.Uri.QueryData.prototype.keyMap_ = null;
goog.Uri.QueryData.prototype.count_ = null;
goog.Uri.QueryData.prototype.getCount = function() {
this.ensureKeyMapInitialized_();
return this.count_
};
goog.Uri.QueryData.prototype.add = function(key, value) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
key = this.getKeyName_(key);
var values = this.keyMap_.get(key);
if(!values) {
this.keyMap_.set(key, values = [])
}
values.push(value);
this.count_++;
return this
};
goog.Uri.QueryData.prototype.remove = function(key) {
this.ensureKeyMapInitialized_();
key = this.getKeyName_(key);
if(this.keyMap_.containsKey(key)) {
this.invalidateCache_();
this.count_ -= this.keyMap_.get(key).length;
return this.keyMap_.remove(key)
}
return false
};
goog.Uri.QueryData.prototype.clear = function() {
this.invalidateCache_();
this.keyMap_ = null;
this.count_ = 0
};
goog.Uri.QueryData.prototype.isEmpty = function() {
this.ensureKeyMapInitialized_();
return this.count_ == 0
};
goog.Uri.QueryData.prototype.containsKey = function(key) {
this.ensureKeyMapInitialized_();
key = this.getKeyName_(key);
return this.keyMap_.containsKey(key)
};
goog.Uri.QueryData.prototype.containsValue = function(value) {
var vals = this.getValues();
return goog.array.contains(vals, value)
};
goog.Uri.QueryData.prototype.getKeys = function() {
this.ensureKeyMapInitialized_();
var vals = (this.keyMap_.getValues());
var keys = this.keyMap_.getKeys();
var rv = [];
for(var i = 0;i < keys.length;i++) {
var val = vals[i];
for(var j = 0;j < val.length;j++) {
rv.push(keys[i])
}
}
return rv
};
goog.Uri.QueryData.prototype.getValues = function(opt_key) {
this.ensureKeyMapInitialized_();
var rv = [];
if(opt_key) {
if(this.containsKey(opt_key)) {
rv = goog.array.concat(rv, this.keyMap_.get(this.getKeyName_(opt_key)))
}
}else {
var values = (this.keyMap_.getValues());
for(var i = 0;i < values.length;i++) {
rv = goog.array.concat(rv, values[i])
}
}
return rv
};
goog.Uri.QueryData.prototype.set = function(key, value) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
key = this.getKeyName_(key);
if(this.containsKey(key)) {
this.count_ -= this.keyMap_.get(key).length
}
this.keyMap_.set(key, [value]);
this.count_++;
return this
};
goog.Uri.QueryData.prototype.get = function(key, opt_default) {
var values = key ? this.getValues(key) : [];
if(goog.Uri.preserveParameterTypesCompatibilityFlag) {
return values.length > 0 ? values[0] : opt_default
}else {
return values.length > 0 ? String(values[0]) : opt_default
}
};
goog.Uri.QueryData.prototype.setValues = function(key, values) {
this.remove(key);
if(values.length > 0) {
this.invalidateCache_();
this.keyMap_.set(this.getKeyName_(key), goog.array.clone(values));
this.count_ += values.length
}
};
goog.Uri.QueryData.prototype.toString = function() {
if(this.encodedQuery_) {
return this.encodedQuery_
}
if(!this.keyMap_) {
return""
}
var sb = [];
var keys = this.keyMap_.getKeys();
for(var i = 0;i < keys.length;i++) {
var key = keys[i];
var encodedKey = goog.string.urlEncode(key);
var val = this.getValues(key);
for(var j = 0;j < val.length;j++) {
var param = encodedKey;
if(val[j] !== "") {
param += "\x3d" + goog.string.urlEncode(val[j])
}
sb.push(param)
}
}
return this.encodedQuery_ = sb.join("\x26")
};
goog.Uri.QueryData.prototype.toDecodedString = function() {
return goog.Uri.decodeOrEmpty_(this.toString())
};
goog.Uri.QueryData.prototype.invalidateCache_ = function() {
this.encodedQuery_ = null
};
goog.Uri.QueryData.prototype.filterKeys = function(keys) {
this.ensureKeyMapInitialized_();
goog.structs.forEach(this.keyMap_, function(value, key, map) {
if(!goog.array.contains(keys, key)) {
this.remove(key)
}
}, this);
return this
};
goog.Uri.QueryData.prototype.clone = function() {
var rv = new goog.Uri.QueryData;
rv.encodedQuery_ = this.encodedQuery_;
if(this.keyMap_) {
rv.keyMap_ = this.keyMap_.clone();
rv.count_ = this.count_
}
return rv
};
goog.Uri.QueryData.prototype.getKeyName_ = function(arg) {
var keyName = String(arg);
if(this.ignoreCase_) {
keyName = keyName.toLowerCase()
}
return keyName
};
goog.Uri.QueryData.prototype.setIgnoreCase = function(ignoreCase) {
var resetKeys = ignoreCase && !this.ignoreCase_;
if(resetKeys) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
goog.structs.forEach(this.keyMap_, function(value, key) {
var lowerCase = key.toLowerCase();
if(key != lowerCase) {
this.remove(key);
this.setValues(lowerCase, value)
}
}, this)
}
this.ignoreCase_ = ignoreCase
};
goog.Uri.QueryData.prototype.extend = function(var_args) {
for(var i = 0;i < arguments.length;i++) {
var data = arguments[i];
goog.structs.forEach(data, function(value, key) {
this.add(key, value)
}, this)
}
};
goog.provide("goog.async.AnimationDelay");
goog.require("goog.Disposable");
goog.require("goog.events");
goog.require("goog.functions");
goog.async.AnimationDelay = function(listener, opt_window, opt_handler) {
goog.base(this);
this.listener_ = listener;
this.handler_ = opt_handler;
this.win_ = opt_window || window;
this.callback_ = goog.bind(this.doAction_, this)
};
goog.inherits(goog.async.AnimationDelay, goog.Disposable);
goog.async.AnimationDelay.prototype.id_ = null;
goog.async.AnimationDelay.prototype.usingListeners_ = false;
goog.async.AnimationDelay.TIMEOUT = 20;
goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_ = "MozBeforePaint";
goog.async.AnimationDelay.prototype.start = function() {
this.stop();
this.usingListeners_ = false;
var raf = this.getRaf_();
var cancelRaf = this.getCancelRaf_();
if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) {
this.id_ = goog.events.listen(this.win_, goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_, this.callback_);
this.win_.mozRequestAnimationFrame(null);
this.usingListeners_ = true
}else {
if(raf && cancelRaf) {
this.id_ = raf.call(this.win_, this.callback_)
}else {
this.id_ = this.win_.setTimeout(goog.functions.lock(this.callback_), goog.async.AnimationDelay.TIMEOUT)
}
}
};
goog.async.AnimationDelay.prototype.stop = function() {
if(this.isActive()) {
var raf = this.getRaf_();
var cancelRaf = this.getCancelRaf_();
if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) {
goog.events.unlistenByKey(this.id_)
}else {
if(raf && cancelRaf) {
cancelRaf.call(this.win_, (this.id_))
}else {
this.win_.clearTimeout((this.id_))
}
}
}
this.id_ = null
};
goog.async.AnimationDelay.prototype.fire = function() {
this.stop();
this.doAction_()
};
goog.async.AnimationDelay.prototype.fireIfActive = function() {
if(this.isActive()) {
this.fire()
}
};
goog.async.AnimationDelay.prototype.isActive = function() {
return this.id_ != null
};
goog.async.AnimationDelay.prototype.doAction_ = function() {
if(this.usingListeners_ && this.id_) {
goog.events.unlistenByKey(this.id_)
}
this.id_ = null;
this.listener_.call(this.handler_, goog.now())
};
goog.async.AnimationDelay.prototype.disposeInternal = function() {
this.stop();
goog.base(this, "disposeInternal")
};
goog.async.AnimationDelay.prototype.getRaf_ = function() {
var win = this.win_;
return win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || null
};
goog.async.AnimationDelay.prototype.getCancelRaf_ = function() {
var win = this.win_;
return win.cancelRequestAnimationFrame || win.webkitCancelRequestAnimationFrame || win.mozCancelRequestAnimationFrame || win.oCancelRequestAnimationFrame || win.msCancelRequestAnimationFrame || null
};
goog.provide("goog.async.nextTick");
goog.require("goog.debug.entryPointRegistry");
goog.require("goog.functions");
goog.async.nextTick = function(callback, opt_context) {
var cb = callback;
if(opt_context) {
cb = goog.bind(callback, opt_context)
}
cb = goog.async.nextTick.wrapCallback_(cb);
if(goog.isFunction(goog.global.setImmediate)) {
goog.global.setImmediate(cb);
return
}
if(!goog.async.nextTick.setImmediate_) {
goog.async.nextTick.setImmediate_ = goog.async.nextTick.getSetImmediateEmulator_()
}
goog.async.nextTick.setImmediate_(cb)
};
goog.async.nextTick.setImmediate_;
goog.async.nextTick.getSetImmediateEmulator_ = function() {
var Channel = goog.global["MessageChannel"];
if(typeof Channel === "undefined" && typeof window !== "undefined" && window.postMessage && window.addEventListener) {
Channel = function() {
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = "";
document.body.appendChild(iframe);
var win = iframe.contentWindow;
var doc = win.document;
doc.open();
doc.write("");
doc.close();
var message = "callImmediate" + Math.random();
var origin = win.location.protocol + "//" + win.location.host;
var onmessage = goog.bind(function(e) {
if(e.origin != origin && e.data != message) {
return
}
this["port1"].onmessage()
}, this);
win.addEventListener("message", onmessage, false);
this["port1"] = {};
this["port2"] = {postMessage:function() {
win.postMessage(message, origin)
}}
}
}
if(typeof Channel !== "undefined") {
var channel = new Channel;
var head = {};
var tail = head;
channel["port1"].onmessage = function() {
head = head.next;
var cb = head.cb;
head.cb = null;
cb()
};
return function(cb) {
tail.next = {cb:cb};
tail = tail.next;
channel["port2"].postMessage(0)
}
}
if(typeof document !== "undefined" && "onreadystatechange" in document.createElement("script")) {
return function(cb) {
var script = document.createElement("script");
script.onreadystatechange = function() {
script.onreadystatechange = null;
script.parentNode.removeChild(script);
script = null;
cb();
cb = null
};
document.documentElement.appendChild(script)
}
}
return function(cb) {
goog.global.setTimeout(cb, 0)
}
};
goog.async.nextTick.wrapCallback_ = goog.functions.identity;
goog.debug.entryPointRegistry.register(function(transformer) {
goog.async.nextTick.wrapCallback_ = transformer
});
goog.provide("goog.structs.Collection");
goog.structs.Collection = function() {
};
goog.structs.Collection.prototype.add;
goog.structs.Collection.prototype.remove;
goog.structs.Collection.prototype.contains;
goog.structs.Collection.prototype.getCount;
goog.provide("goog.structs.Set");
goog.require("goog.structs");
goog.require("goog.structs.Collection");
goog.require("goog.structs.Map");
goog.structs.Set = function(opt_values) {
this.map_ = new goog.structs.Map;
if(opt_values) {
this.addAll(opt_values)
}
};
goog.structs.Set.getKey_ = function(val) {
var type = typeof val;
if(type == "object" && val || type == "function") {
return"o" + goog.getUid((val))
}else {
return type.substr(0, 1) + val
}
};
goog.structs.Set.prototype.getCount = function() {
return this.map_.getCount()
};
goog.structs.Set.prototype.add = function(element) {
this.map_.set(goog.structs.Set.getKey_(element), element)
};
goog.structs.Set.prototype.addAll = function(col) {
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
this.add(values[i])
}
};
goog.structs.Set.prototype.removeAll = function(col) {
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
this.remove(values[i])
}
};
goog.structs.Set.prototype.remove = function(element) {
return this.map_.remove(goog.structs.Set.getKey_(element))
};
goog.structs.Set.prototype.clear = function() {
this.map_.clear()
};
goog.structs.Set.prototype.isEmpty = function() {
return this.map_.isEmpty()
};
goog.structs.Set.prototype.contains = function(element) {
return this.map_.containsKey(goog.structs.Set.getKey_(element))
};
goog.structs.Set.prototype.containsAll = function(col) {
return goog.structs.every(col, this.contains, this)
};
goog.structs.Set.prototype.intersection = function(col) {
var result = new goog.structs.Set;
var values = goog.structs.getValues(col);
for(var i = 0;i < values.length;i++) {
var value = values[i];
if(this.contains(value)) {
result.add(value)
}
}
return result
};
goog.structs.Set.prototype.difference = function(col) {
var result = this.clone();
result.removeAll(col);
return result
};
goog.structs.Set.prototype.getValues = function() {
return this.map_.getValues()
};
goog.structs.Set.prototype.clone = function() {
return new goog.structs.Set(this)
};
goog.structs.Set.prototype.equals = function(col) {
return this.getCount() == goog.structs.getCount(col) && this.isSubsetOf(col)
};
goog.structs.Set.prototype.isSubsetOf = function(col) {
var colCount = goog.structs.getCount(col);
if(this.getCount() > colCount) {
return false
}
if(!(col instanceof goog.structs.Set) && colCount > 5) {
col = new goog.structs.Set(col)
}
return goog.structs.every(this, function(value) {
return goog.structs.contains(col, value)
})
};
goog.structs.Set.prototype.__iterator__ = function(opt_keys) {
return this.map_.__iterator__(false)
};
goog.provide("goog.debug");
goog.require("goog.array");
goog.require("goog.string");
goog.require("goog.structs.Set");
goog.require("goog.userAgent");
goog.define("goog.debug.LOGGING_ENABLED", goog.DEBUG);
goog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {
var target = opt_target || goog.global;
var oldErrorHandler = target.onerror;
var retVal = !!opt_cancel;
if(goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher("535.3")) {
retVal = !retVal
}
target.onerror = function(message, url, line) {
if(oldErrorHandler) {
oldErrorHandler(message, url, line)
}
logFunc({message:message, fileName:url, line:line});
return retVal
}
};
goog.debug.expose = function(obj, opt_showFn) {
if(typeof obj == "undefined") {
return"undefined"
}
if(obj == null) {
return"NULL"
}
var str = [];
for(var x in obj) {
if(!opt_showFn && goog.isFunction(obj[x])) {
continue
}
var s = x + " \x3d ";
try {
s += obj[x]
}catch(e) {
s += "*** " + e + " ***"
}
str.push(s)
}
return str.join("\n")
};
goog.debug.deepExpose = function(obj, opt_showFn) {
var previous = new goog.structs.Set;
var str = [];
var helper = function(obj, space) {
var nestspace = space + " ";
var indentMultiline = function(str) {
return str.replace(/\n/g, "\n" + space)
};
try {
if(!goog.isDef(obj)) {
str.push("undefined")
}else {
if(goog.isNull(obj)) {
str.push("NULL")
}else {
if(goog.isString(obj)) {
str.push('"' + indentMultiline(obj) + '"')
}else {
if(goog.isFunction(obj)) {
str.push(indentMultiline(String(obj)))
}else {
if(goog.isObject(obj)) {
if(previous.contains(obj)) {
str.push("*** reference loop detected ***")
}else {
previous.add(obj);
str.push("{");
for(var x in obj) {
if(!opt_showFn && goog.isFunction(obj[x])) {
continue
}
str.push("\n");
str.push(nestspace);
str.push(x + " \x3d ");
helper(obj[x], nestspace)
}
str.push("\n" + space + "}")
}
}else {
str.push(obj)
}
}
}
}
}
}catch(e) {
str.push("*** " + e + " ***")
}
};
helper(obj, "");
return str.join("")
};
goog.debug.exposeArray = function(arr) {
var str = [];
for(var i = 0;i < arr.length;i++) {
if(goog.isArray(arr[i])) {
str.push(goog.debug.exposeArray(arr[i]))
}else {
str.push(arr[i])
}
}
return"[ " + str.join(", ") + " ]"
};
goog.debug.exposeException = function(err, opt_fn) {
try {
var e = goog.debug.normalizeErrorObject(err);
var error = "Message: " + goog.string.htmlEscape(e.message) + '\nUrl: \x3ca href\x3d"view-source:' + e.fileName + '" target\x3d"_new"\x3e' + e.fileName + "\x3c/a\x3e\nLine: " + e.lineNumber + "\n\nBrowser stack:\n" + goog.string.htmlEscape(e.stack + "-\x3e ") + "[end]\n\nJS stack traversal:\n" + goog.string.htmlEscape(goog.debug.getStacktrace(opt_fn) + "-\x3e ");
return error
}catch(e2) {
return"Exception trying to expose exception! You win, we lose. " + e2
}
};
goog.debug.normalizeErrorObject = function(err) {
var href = goog.getObjectByName("window.location.href");
if(goog.isString(err)) {
return{"message":err, "name":"Unknown error", "lineNumber":"Not available", "fileName":href, "stack":"Not available"}
}
var lineNumber, fileName;
var threwError = false;
try {
lineNumber = err.lineNumber || err.line || "Not available"
}catch(e) {
lineNumber = "Not available";
threwError = true
}
try {
fileName = err.fileName || err.filename || err.sourceURL || goog.global["$googDebugFname"] || href
}catch(e) {
fileName = "Not available";
threwError = true
}
if(threwError || !err.lineNumber || !err.fileName || !err.stack || !err.message || !err.name) {
return{"message":err.message || "Not available", "name":err.name || "UnknownError", "lineNumber":lineNumber, "fileName":fileName, "stack":err.stack || "Not available"}
}
return err
};
goog.debug.enhanceError = function(err, opt_message) {
var error = typeof err == "string" ? Error(err) : err;
if(!error.stack) {
error.stack = goog.debug.getStacktrace(arguments.callee.caller)
}
if(opt_message) {
var x = 0;
while(error["message" + x]) {
++x
}
error["message" + x] = String(opt_message)
}
return error
};
goog.debug.getStacktraceSimple = function(opt_depth) {
var sb = [];
var fn = arguments.callee.caller;
var depth = 0;
while(fn && (!opt_depth || depth < opt_depth)) {
sb.push(goog.debug.getFunctionName(fn));
sb.push("()\n");
try {
fn = fn.caller
}catch(e) {
sb.push("[exception trying to get caller]\n");
break
}
depth++;
if(depth >= goog.debug.MAX_STACK_DEPTH) {
sb.push("[...long stack...]");
break
}
}
if(opt_depth && depth >= opt_depth) {
sb.push("[...reached max depth limit...]")
}else {
sb.push("[end]")
}
return sb.join("")
};
goog.debug.MAX_STACK_DEPTH = 50;
goog.debug.getStacktrace = function(opt_fn) {
return goog.debug.getStacktraceHelper_(opt_fn || arguments.callee.caller, [])
};
goog.debug.getStacktraceHelper_ = function(fn, visited) {
var sb = [];
if(goog.array.contains(visited, fn)) {
sb.push("[...circular reference...]")
}else {
if(fn && visited.length < goog.debug.MAX_STACK_DEPTH) {
sb.push(goog.debug.getFunctionName(fn) + "(");
var args = fn.arguments;
for(var i = 0;i < args.length;i++) {
if(i > 0) {
sb.push(", ")
}
var argDesc;
var arg = args[i];
switch(typeof arg) {
case "object":
argDesc = arg ? "object" : "null";
break;
case "string":
argDesc = arg;
break;
case "number":
argDesc = String(arg);
break;
case "boolean":
argDesc = arg ? "true" : "false";
break;
case "function":
argDesc = goog.debug.getFunctionName(arg);
argDesc = argDesc ? argDesc : "[fn]";
break;
case "undefined":
;
default:
argDesc = typeof arg;
break
}
if(argDesc.length > 40) {
argDesc = argDesc.substr(0, 40) + "..."
}
sb.push(argDesc)
}
visited.push(fn);
sb.push(")\n");
try {
sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited))
}catch(e) {
sb.push("[exception trying to get caller]\n")
}
}else {
if(fn) {
sb.push("[...long stack...]")
}else {
sb.push("[end]")
}
}
}
return sb.join("")
};
goog.debug.setFunctionResolver = function(resolver) {
goog.debug.fnNameResolver_ = resolver
};
goog.debug.getFunctionName = function(fn) {
if(goog.debug.fnNameCache_[fn]) {
return goog.debug.fnNameCache_[fn]
}
if(goog.debug.fnNameResolver_) {
var name = goog.debug.fnNameResolver_(fn);
if(name) {
goog.debug.fnNameCache_[fn] = name;
return name
}
}
var functionSource = String(fn);
if(!goog.debug.fnNameCache_[functionSource]) {
var matches = /function ([^\(]+)/.exec(functionSource);
if(matches) {
var method = matches[1];
goog.debug.fnNameCache_[functionSource] = method
}else {
goog.debug.fnNameCache_[functionSource] = "[Anonymous]"
}
}
return goog.debug.fnNameCache_[functionSource]
};
goog.debug.makeWhitespaceVisible = function(string) {
return string.replace(/ /g, "[_]").replace(/\f/g, "[f]").replace(/\n/g, "[n]\n").replace(/\r/g, "[r]").replace(/\t/g, "[t]")
};
goog.debug.fnNameCache_ = {};
goog.debug.fnNameResolver_;
goog.provide("goog.debug.LogRecord");
goog.debug.LogRecord = function(level, msg, loggerName, opt_time, opt_sequenceNumber) {
this.reset(level, msg, loggerName, opt_time, opt_sequenceNumber)
};
goog.debug.LogRecord.prototype.time_;
goog.debug.LogRecord.prototype.level_;
goog.debug.LogRecord.prototype.msg_;
goog.debug.LogRecord.prototype.loggerName_;
goog.debug.LogRecord.prototype.sequenceNumber_ = 0;
goog.debug.LogRecord.prototype.exception_ = null;
goog.debug.LogRecord.prototype.exceptionText_ = null;
goog.define("goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS", true);
goog.debug.LogRecord.nextSequenceNumber_ = 0;
goog.debug.LogRecord.prototype.reset = function(level, msg, loggerName, opt_time, opt_sequenceNumber) {
if(goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS) {
this.sequenceNumber_ = typeof opt_sequenceNumber == "number" ? opt_sequenceNumber : goog.debug.LogRecord.nextSequenceNumber_++
}
this.time_ = opt_time || goog.now();
this.level_ = level;
this.msg_ = msg;
this.loggerName_ = loggerName;
delete this.exception_;
delete this.exceptionText_
};
goog.debug.LogRecord.prototype.getLoggerName = function() {
return this.loggerName_
};
goog.debug.LogRecord.prototype.getException = function() {
return this.exception_
};
goog.debug.LogRecord.prototype.setException = function(exception) {
this.exception_ = exception
};
goog.debug.LogRecord.prototype.getExceptionText = function() {
return this.exceptionText_
};
goog.debug.LogRecord.prototype.setExceptionText = function(text) {
this.exceptionText_ = text
};
goog.debug.LogRecord.prototype.setLoggerName = function(loggerName) {
this.loggerName_ = loggerName
};
goog.debug.LogRecord.prototype.getLevel = function() {
return this.level_
};
goog.debug.LogRecord.prototype.setLevel = function(level) {
this.level_ = level
};
goog.debug.LogRecord.prototype.getMessage = function() {
return this.msg_
};
goog.debug.LogRecord.prototype.setMessage = function(msg) {
this.msg_ = msg
};
goog.debug.LogRecord.prototype.getMillis = function() {
return this.time_
};
goog.debug.LogRecord.prototype.setMillis = function(time) {
this.time_ = time
};
goog.debug.LogRecord.prototype.getSequenceNumber = function() {
return this.sequenceNumber_
};
goog.provide("goog.debug.LogBuffer");
goog.require("goog.asserts");
goog.require("goog.debug.LogRecord");
goog.debug.LogBuffer = function() {
goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(), "Cannot use goog.debug.LogBuffer without defining " + "goog.debug.LogBuffer.CAPACITY.");
this.clear()
};
goog.debug.LogBuffer.getInstance = function() {
if(!goog.debug.LogBuffer.instance_) {
goog.debug.LogBuffer.instance_ = new goog.debug.LogBuffer
}
return goog.debug.LogBuffer.instance_
};
goog.define("goog.debug.LogBuffer.CAPACITY", 0);
goog.debug.LogBuffer.prototype.buffer_;
goog.debug.LogBuffer.prototype.curIndex_;
goog.debug.LogBuffer.prototype.isFull_;
goog.debug.LogBuffer.prototype.addRecord = function(level, msg, loggerName) {
var curIndex = (this.curIndex_ + 1) % goog.debug.LogBuffer.CAPACITY;
this.curIndex_ = curIndex;
if(this.isFull_) {
var ret = this.buffer_[curIndex];
ret.reset(level, msg, loggerName);
return ret
}
this.isFull_ = curIndex == goog.debug.LogBuffer.CAPACITY - 1;
return this.buffer_[curIndex] = new goog.debug.LogRecord(level, msg, loggerName)
};
goog.debug.LogBuffer.isBufferingEnabled = function() {
return goog.debug.LogBuffer.CAPACITY > 0
};
goog.debug.LogBuffer.prototype.clear = function() {
this.buffer_ = new Array(goog.debug.LogBuffer.CAPACITY);
this.curIndex_ = -1;
this.isFull_ = false
};
goog.debug.LogBuffer.prototype.forEachRecord = function(func) {
var buffer = this.buffer_;
if(!buffer[0]) {
return
}
var curIndex = this.curIndex_;
var i = this.isFull_ ? curIndex : -1;
do {
i = (i + 1) % goog.debug.LogBuffer.CAPACITY;
func((buffer[i]))
}while(i != curIndex)
};
goog.provide("goog.debug.LogManager");
goog.provide("goog.debug.Logger");
goog.provide("goog.debug.Logger.Level");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug");
goog.require("goog.debug.LogBuffer");
goog.require("goog.debug.LogRecord");
goog.debug.Logger = function(name) {
this.name_ = name
};
goog.debug.Logger.prototype.parent_ = null;
goog.debug.Logger.prototype.level_ = null;
goog.debug.Logger.prototype.children_ = null;
goog.debug.Logger.prototype.handlers_ = null;
goog.define("goog.debug.Logger.ENABLE_HIERARCHY", true);
if(!goog.debug.Logger.ENABLE_HIERARCHY) {
goog.debug.Logger.rootHandlers_ = [];
goog.debug.Logger.rootLevel_
}
goog.debug.Logger.Level = function(name, value) {
this.name = name;
this.value = value
};
goog.debug.Logger.Level.prototype.toString = function() {
return this.name
};
goog.debug.Logger.Level.OFF = new goog.debug.Logger.Level("OFF", Infinity);
goog.debug.Logger.Level.SHOUT = new goog.debug.Logger.Level("SHOUT", 1200);
goog.debug.Logger.Level.SEVERE = new goog.debug.Logger.Level("SEVERE", 1E3);
goog.debug.Logger.Level.WARNING = new goog.debug.Logger.Level("WARNING", 900);
goog.debug.Logger.Level.INFO = new goog.debug.Logger.Level("INFO", 800);
goog.debug.Logger.Level.CONFIG = new goog.debug.Logger.Level("CONFIG", 700);
goog.debug.Logger.Level.FINE = new goog.debug.Logger.Level("FINE", 500);
goog.debug.Logger.Level.FINER = new goog.debug.Logger.Level("FINER", 400);
goog.debug.Logger.Level.FINEST = new goog.debug.Logger.Level("FINEST", 300);
goog.debug.Logger.Level.ALL = new goog.debug.Logger.Level("ALL", 0);
goog.debug.Logger.Level.PREDEFINED_LEVELS = [goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.ALL];
goog.debug.Logger.Level.predefinedLevelsCache_ = null;
goog.debug.Logger.Level.createPredefinedLevelsCache_ = function() {
goog.debug.Logger.Level.predefinedLevelsCache_ = {};
for(var i = 0, level;level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];i++) {
goog.debug.Logger.Level.predefinedLevelsCache_[level.value] = level;
goog.debug.Logger.Level.predefinedLevelsCache_[level.name] = level
}
};
goog.debug.Logger.Level.getPredefinedLevel = function(name) {
if(!goog.debug.Logger.Level.predefinedLevelsCache_) {
goog.debug.Logger.Level.createPredefinedLevelsCache_()
}
return goog.debug.Logger.Level.predefinedLevelsCache_[name] || null
};
goog.debug.Logger.Level.getPredefinedLevelByValue = function(value) {
if(!goog.debug.Logger.Level.predefinedLevelsCache_) {
goog.debug.Logger.Level.createPredefinedLevelsCache_()
}
if(value in goog.debug.Logger.Level.predefinedLevelsCache_) {
return goog.debug.Logger.Level.predefinedLevelsCache_[value]
}
for(var i = 0;i < goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++i) {
var level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];
if(level.value <= value) {
return level
}
}
return null
};
goog.debug.Logger.getLogger = function(name) {
return goog.debug.LogManager.getLogger(name)
};
goog.debug.Logger.logToProfilers = function(msg) {
if(goog.global["console"]) {
if(goog.global["console"]["timeStamp"]) {
goog.global["console"]["timeStamp"](msg)
}else {
if(goog.global["console"]["markTimeline"]) {
goog.global["console"]["markTimeline"](msg)
}
}
}
if(goog.global["msWriteProfilerMark"]) {
goog.global["msWriteProfilerMark"](msg)
}
};
goog.debug.Logger.prototype.getName = function() {
return this.name_
};
goog.debug.Logger.prototype.addHandler = function(handler) {
if(goog.debug.LOGGING_ENABLED) {
if(goog.debug.Logger.ENABLE_HIERARCHY) {
if(!this.handlers_) {
this.handlers_ = []
}
this.handlers_.push(handler)
}else {
goog.asserts.assert(!this.name_, "Cannot call addHandler on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false.");
goog.debug.Logger.rootHandlers_.push(handler)
}
}
};
goog.debug.Logger.prototype.removeHandler = function(handler) {
if(goog.debug.LOGGING_ENABLED) {
var handlers = goog.debug.Logger.ENABLE_HIERARCHY ? this.handlers_ : goog.debug.Logger.rootHandlers_;
return!!handlers && goog.array.remove(handlers, handler)
}else {
return false
}
};
goog.debug.Logger.prototype.getParent = function() {
return this.parent_
};
goog.debug.Logger.prototype.getChildren = function() {
if(!this.children_) {
this.children_ = {}
}
return this.children_
};
goog.debug.Logger.prototype.setLevel = function(level) {
if(goog.debug.LOGGING_ENABLED) {
if(goog.debug.Logger.ENABLE_HIERARCHY) {
this.level_ = level
}else {
goog.asserts.assert(!this.name_, "Cannot call setLevel() on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false.");
goog.debug.Logger.rootLevel_ = level
}
}
};
goog.debug.Logger.prototype.getLevel = function() {
return goog.debug.LOGGING_ENABLED ? this.level_ : goog.debug.Logger.Level.OFF
};
goog.debug.Logger.prototype.getEffectiveLevel = function() {
if(!goog.debug.LOGGING_ENABLED) {
return goog.debug.Logger.Level.OFF
}
if(!goog.debug.Logger.ENABLE_HIERARCHY) {
return goog.debug.Logger.rootLevel_
}
if(this.level_) {
return this.level_
}
if(this.parent_) {
return this.parent_.getEffectiveLevel()
}
goog.asserts.fail("Root logger has no level set.");
return null
};
goog.debug.Logger.prototype.isLoggable = function(level) {
return goog.debug.LOGGING_ENABLED && level.value >= this.getEffectiveLevel().value
};
goog.debug.Logger.prototype.log = function(level, msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED && this.isLoggable(level)) {
this.doLogRecord_(this.getLogRecord(level, msg, opt_exception))
}
};
goog.debug.Logger.prototype.getLogRecord = function(level, msg, opt_exception) {
if(goog.debug.LogBuffer.isBufferingEnabled()) {
var logRecord = goog.debug.LogBuffer.getInstance().addRecord(level, msg, this.name_)
}else {
logRecord = new goog.debug.LogRecord(level, String(msg), this.name_)
}
if(opt_exception) {
logRecord.setException(opt_exception);
logRecord.setExceptionText(goog.debug.exposeException(opt_exception, arguments.callee.caller))
}
return logRecord
};
goog.debug.Logger.prototype.shout = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.SHOUT, msg, opt_exception)
}
};
goog.debug.Logger.prototype.severe = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.SEVERE, msg, opt_exception)
}
};
goog.debug.Logger.prototype.warning = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.WARNING, msg, opt_exception)
}
};
goog.debug.Logger.prototype.info = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.INFO, msg, opt_exception)
}
};
goog.debug.Logger.prototype.config = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.CONFIG, msg, opt_exception)
}
};
goog.debug.Logger.prototype.fine = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINE, msg, opt_exception)
}
};
goog.debug.Logger.prototype.finer = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINER, msg, opt_exception)
}
};
goog.debug.Logger.prototype.finest = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINEST, msg, opt_exception)
}
};
goog.debug.Logger.prototype.logRecord = function(logRecord) {
if(goog.debug.LOGGING_ENABLED && this.isLoggable(logRecord.getLevel())) {
this.doLogRecord_(logRecord)
}
};
goog.debug.Logger.prototype.doLogRecord_ = function(logRecord) {
goog.debug.Logger.logToProfilers("log:" + logRecord.getMessage());
if(goog.debug.Logger.ENABLE_HIERARCHY) {
var target = this;
while(target) {
target.callPublish_(logRecord);
target = target.getParent()
}
}else {
for(var i = 0, handler;handler = goog.debug.Logger.rootHandlers_[i++];) {
handler(logRecord)
}
}
};
goog.debug.Logger.prototype.callPublish_ = function(logRecord) {
if(this.handlers_) {
for(var i = 0, handler;handler = this.handlers_[i];i++) {
handler(logRecord)
}
}
};
goog.debug.Logger.prototype.setParent_ = function(parent) {
this.parent_ = parent
};
goog.debug.Logger.prototype.addChild_ = function(name, logger) {
this.getChildren()[name] = logger
};
goog.debug.LogManager = {};
goog.debug.LogManager.loggers_ = {};
goog.debug.LogManager.rootLogger_ = null;
goog.debug.LogManager.initialize = function() {
if(!goog.debug.LogManager.rootLogger_) {
goog.debug.LogManager.rootLogger_ = new goog.debug.Logger("");
goog.debug.LogManager.loggers_[""] = goog.debug.LogManager.rootLogger_;
goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG)
}
};
goog.debug.LogManager.getLoggers = function() {
return goog.debug.LogManager.loggers_
};
goog.debug.LogManager.getRoot = function() {
goog.debug.LogManager.initialize();
return(goog.debug.LogManager.rootLogger_)
};
goog.debug.LogManager.getLogger = function(name) {
goog.debug.LogManager.initialize();
var ret = goog.debug.LogManager.loggers_[name];
return ret || goog.debug.LogManager.createLogger_(name)
};
goog.debug.LogManager.createFunctionForCatchErrors = function(opt_logger) {
return function(info) {
var logger = opt_logger || goog.debug.LogManager.getRoot();
logger.severe("Error: " + info.message + " (" + info.fileName + " @ Line: " + info.line + ")")
}
};
goog.debug.LogManager.createLogger_ = function(name) {
var logger = new goog.debug.Logger(name);
if(goog.debug.Logger.ENABLE_HIERARCHY) {
var lastDotIndex = name.lastIndexOf(".");
var parentName = name.substr(0, lastDotIndex);
var leafName = name.substr(lastDotIndex + 1);
var parentLogger = goog.debug.LogManager.getLogger(parentName);
parentLogger.addChild_(leafName, logger);
logger.setParent_(parentLogger)
}
goog.debug.LogManager.loggers_[name] = logger;
return logger
};
goog.provide("goog.debug.RelativeTimeProvider");
goog.debug.RelativeTimeProvider = function() {
this.relativeTimeStart_ = goog.now()
};
goog.debug.RelativeTimeProvider.defaultInstance_ = new goog.debug.RelativeTimeProvider;
goog.debug.RelativeTimeProvider.prototype.set = function(timeStamp) {
this.relativeTimeStart_ = timeStamp
};
goog.debug.RelativeTimeProvider.prototype.reset = function() {
this.set(goog.now())
};
goog.debug.RelativeTimeProvider.prototype.get = function() {
return this.relativeTimeStart_
};
goog.debug.RelativeTimeProvider.getDefaultInstance = function() {
return goog.debug.RelativeTimeProvider.defaultInstance_
};
goog.provide("goog.debug.Formatter");
goog.provide("goog.debug.HtmlFormatter");
goog.provide("goog.debug.TextFormatter");
goog.require("goog.debug.RelativeTimeProvider");
goog.require("goog.string");
goog.debug.Formatter = function(opt_prefix) {
this.prefix_ = opt_prefix || "";
this.startTimeProvider_ = goog.debug.RelativeTimeProvider.getDefaultInstance()
};
goog.debug.Formatter.prototype.showAbsoluteTime = true;
goog.debug.Formatter.prototype.showRelativeTime = true;
goog.debug.Formatter.prototype.showLoggerName = true;
goog.debug.Formatter.prototype.showExceptionText = false;
goog.debug.Formatter.prototype.showSeverityLevel = false;
goog.debug.Formatter.prototype.formatRecord = goog.abstractMethod;
goog.debug.Formatter.prototype.setStartTimeProvider = function(provider) {
this.startTimeProvider_ = provider
};
goog.debug.Formatter.prototype.getStartTimeProvider = function() {
return this.startTimeProvider_
};
goog.debug.Formatter.prototype.resetRelativeTimeStart = function() {
this.startTimeProvider_.reset()
};
goog.debug.Formatter.getDateTimeStamp_ = function(logRecord) {
var time = new Date(logRecord.getMillis());
return goog.debug.Formatter.getTwoDigitString_(time.getFullYear() - 2E3) + goog.debug.Formatter.getTwoDigitString_(time.getMonth() + 1) + goog.debug.Formatter.getTwoDigitString_(time.getDate()) + " " + goog.debug.Formatter.getTwoDigitString_(time.getHours()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getMinutes()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getSeconds()) + "." + goog.debug.Formatter.getTwoDigitString_(Math.floor(time.getMilliseconds() / 10))
};
goog.debug.Formatter.getTwoDigitString_ = function(n) {
if(n < 10) {
return"0" + n
}
return String(n)
};
goog.debug.Formatter.getRelativeTime_ = function(logRecord, relativeTimeStart) {
var ms = logRecord.getMillis() - relativeTimeStart;
var sec = ms / 1E3;
var str = sec.toFixed(3);
var spacesToPrepend = 0;
if(sec < 1) {
spacesToPrepend = 2
}else {
while(sec < 100) {
spacesToPrepend++;
sec *= 10
}
}
while(spacesToPrepend-- > 0) {
str = " " + str
}
return str
};
goog.debug.HtmlFormatter = function(opt_prefix) {
goog.debug.Formatter.call(this, opt_prefix)
};
goog.inherits(goog.debug.HtmlFormatter, goog.debug.Formatter);
goog.debug.HtmlFormatter.prototype.showExceptionText = true;
goog.debug.HtmlFormatter.prototype.formatRecord = function(logRecord) {
var className;
switch(logRecord.getLevel().value) {
case goog.debug.Logger.Level.SHOUT.value:
className = "dbg-sh";
break;
case goog.debug.Logger.Level.SEVERE.value:
className = "dbg-sev";
break;
case goog.debug.Logger.Level.WARNING.value:
className = "dbg-w";
break;
case goog.debug.Logger.Level.INFO.value:
className = "dbg-i";
break;
case goog.debug.Logger.Level.FINE.value:
;
default:
className = "dbg-f";
break
}
var sb = [];
sb.push(this.prefix_, " ");
if(this.showAbsoluteTime) {
sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ")
}
if(this.showRelativeTime) {
sb.push("[", goog.string.whitespaceEscape(goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get())), "s] ")
}
if(this.showLoggerName) {
sb.push("[", goog.string.htmlEscape(logRecord.getLoggerName()), "] ")
}
if(this.showSeverityLevel) {
sb.push("[", goog.string.htmlEscape(logRecord.getLevel().name), "] ")
}
sb.push('\x3cspan class\x3d"', className, '"\x3e', goog.string.newLineToBr(goog.string.whitespaceEscape(goog.string.htmlEscape(logRecord.getMessage()))));
if(this.showExceptionText && logRecord.getException()) {
sb.push("\x3cbr\x3e", goog.string.newLineToBr(goog.string.whitespaceEscape(logRecord.getExceptionText() || "")))
}
sb.push("\x3c/span\x3e\x3cbr\x3e");
return sb.join("")
};
goog.debug.TextFormatter = function(opt_prefix) {
goog.debug.Formatter.call(this, opt_prefix)
};
goog.inherits(goog.debug.TextFormatter, goog.debug.Formatter);
goog.debug.TextFormatter.prototype.formatRecord = function(logRecord) {
var sb = [];
sb.push(this.prefix_, " ");
if(this.showAbsoluteTime) {
sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ")
}
if(this.showRelativeTime) {
sb.push("[", goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get()), "s] ")
}
if(this.showLoggerName) {
sb.push("[", logRecord.getLoggerName(), "] ")
}
if(this.showSeverityLevel) {
sb.push("[", logRecord.getLevel().name, "] ")
}
sb.push(logRecord.getMessage(), "\n");
if(this.showExceptionText && logRecord.getException()) {
sb.push(logRecord.getExceptionText(), "\n")
}
return sb.join("")
};
goog.provide("goog.debug.Console");
goog.require("goog.debug.LogManager");
goog.require("goog.debug.Logger.Level");
goog.require("goog.debug.TextFormatter");
goog.debug.Console = function() {
this.publishHandler_ = goog.bind(this.addLogRecord, this);
this.formatter_ = new goog.debug.TextFormatter;
this.formatter_.showAbsoluteTime = false;
this.formatter_.showExceptionText = false;
this.isCapturing_ = false;
this.logBuffer_ = "";
this.filteredLoggers_ = {}
};
goog.debug.Console.prototype.getFormatter = function() {
return this.formatter_
};
goog.debug.Console.prototype.setCapturing = function(capturing) {
if(capturing == this.isCapturing_) {
return
}
var rootLogger = goog.debug.LogManager.getRoot();
if(capturing) {
rootLogger.addHandler(this.publishHandler_)
}else {
rootLogger.removeHandler(this.publishHandler_);
this.logBuffer = ""
}
this.isCapturing_ = capturing
};
goog.debug.Console.prototype.addLogRecord = function(logRecord) {
if(this.filteredLoggers_[logRecord.getLoggerName()]) {
return
}
var record = this.formatter_.formatRecord(logRecord);
var console = goog.debug.Console.console_;
if(console) {
switch(logRecord.getLevel()) {
case goog.debug.Logger.Level.SHOUT:
goog.debug.Console.logToConsole_(console, "info", record);
break;
case goog.debug.Logger.Level.SEVERE:
goog.debug.Console.logToConsole_(console, "error", record);
break;
case goog.debug.Logger.Level.WARNING:
goog.debug.Console.logToConsole_(console, "warn", record);
break;
default:
goog.debug.Console.logToConsole_(console, "debug", record);
break
}
}else {
if(window.opera) {
window.opera["postError"](record)
}else {
this.logBuffer_ += record
}
}
};
goog.debug.Console.prototype.addFilter = function(loggerName) {
this.filteredLoggers_[loggerName] = true
};
goog.debug.Console.prototype.removeFilter = function(loggerName) {
delete this.filteredLoggers_[loggerName]
};
goog.debug.Console.instance = null;
goog.debug.Console.console_ = window.console;
goog.debug.Console.setConsole = function(console) {
goog.debug.Console.console_ = console
};
goog.debug.Console.autoInstall = function() {
if(!goog.debug.Console.instance) {
goog.debug.Console.instance = new goog.debug.Console
}
if(window.location.href.indexOf("Debug\x3dtrue") != -1) {
goog.debug.Console.instance.setCapturing(true)
}
};
goog.debug.Console.show = function() {
alert(goog.debug.Console.instance.logBuffer_)
};
goog.debug.Console.logToConsole_ = function(console, fnName, record) {
if(console[fnName]) {
console[fnName](record)
}else {
console.log(record)
}
};
goog.provide("goog.dom.ViewportSizeMonitor");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.math.Size");
goog.dom.ViewportSizeMonitor = function(opt_window) {
goog.events.EventTarget.call(this);
this.window_ = opt_window || window;
this.listenerKey_ = goog.events.listen(this.window_, goog.events.EventType.RESIZE, this.handleResize_, false, this);
this.size_ = goog.dom.getViewportSize(this.window_)
};
goog.inherits(goog.dom.ViewportSizeMonitor, goog.events.EventTarget);
goog.dom.ViewportSizeMonitor.getInstanceForWindow = function(opt_window) {
var currentWindow = opt_window || window;
var uid = goog.getUid(currentWindow);
return goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] = goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] || new goog.dom.ViewportSizeMonitor(currentWindow)
};
goog.dom.ViewportSizeMonitor.removeInstanceForWindow = function(opt_window) {
var uid = goog.getUid(opt_window || window);
goog.dispose(goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]);
delete goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]
};
goog.dom.ViewportSizeMonitor.windowInstanceMap_ = {};
goog.dom.ViewportSizeMonitor.prototype.listenerKey_ = null;
goog.dom.ViewportSizeMonitor.prototype.window_ = null;
goog.dom.ViewportSizeMonitor.prototype.size_ = null;
goog.dom.ViewportSizeMonitor.prototype.getSize = function() {
return this.size_ ? this.size_.clone() : null
};
goog.dom.ViewportSizeMonitor.prototype.disposeInternal = function() {
goog.dom.ViewportSizeMonitor.superClass_.disposeInternal.call(this);
if(this.listenerKey_) {
goog.events.unlistenByKey(this.listenerKey_);
this.listenerKey_ = null
}
this.window_ = null;
this.size_ = null
};
goog.dom.ViewportSizeMonitor.prototype.handleResize_ = function(event) {
var size = goog.dom.getViewportSize(this.window_);
if(!goog.math.Size.equals(size, this.size_)) {
this.size_ = size;
this.dispatchEvent(goog.events.EventType.RESIZE)
}
};
goog.provide("goog.events.KeyCodes");
goog.require("goog.userAgent");
goog.events.KeyCodes = {WIN_KEY_FF_LINUX:0, MAC_ENTER:3, BACKSPACE:8, TAB:9, NUM_CENTER:12, ENTER:13, SHIFT:16, CTRL:17, ALT:18, PAUSE:19, CAPS_LOCK:20, ESC:27, SPACE:32, PAGE_UP:33, PAGE_DOWN:34, END:35, HOME:36, LEFT:37, UP:38, RIGHT:39, DOWN:40, PRINT_SCREEN:44, INSERT:45, DELETE:46, ZERO:48, ONE:49, TWO:50, THREE:51, FOUR:52, FIVE:53, SIX:54, SEVEN:55, EIGHT:56, NINE:57, FF_SEMICOLON:59, FF_EQUALS:61, QUESTION_MARK:63, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77,
N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90, META:91, WIN_KEY_RIGHT:92, CONTEXT_MENU:93, NUM_ZERO:96, NUM_ONE:97, NUM_TWO:98, NUM_THREE:99, NUM_FOUR:100, NUM_FIVE:101, NUM_SIX:102, NUM_SEVEN:103, NUM_EIGHT:104, NUM_NINE:105, NUM_MULTIPLY:106, NUM_PLUS:107, NUM_MINUS:109, NUM_PERIOD:110, NUM_DIVISION:111, F1:112, F2:113, F3:114, F4:115, F5:116, F6:117, F7:118, F8:119, F9:120, F10:121, F11:122, F12:123, NUMLOCK:144, SCROLL_LOCK:145, FIRST_MEDIA_KEY:166, LAST_MEDIA_KEY:183,
SEMICOLON:186, DASH:189, EQUALS:187, COMMA:188, PERIOD:190, SLASH:191, APOSTROPHE:192, TILDE:192, SINGLE_QUOTE:222, OPEN_SQUARE_BRACKET:219, BACKSLASH:220, CLOSE_SQUARE_BRACKET:221, WIN_KEY:224, MAC_FF_META:224, WIN_IME:229, PHANTOM:255};
goog.events.KeyCodes.isTextModifyingKeyEvent = function(e) {
if(e.altKey && !e.ctrlKey || e.metaKey || e.keyCode >= goog.events.KeyCodes.F1 && e.keyCode <= goog.events.KeyCodes.F12) {
return false
}
switch(e.keyCode) {
case goog.events.KeyCodes.ALT:
;
case goog.events.KeyCodes.CAPS_LOCK:
;
case goog.events.KeyCodes.CONTEXT_MENU:
;
case goog.events.KeyCodes.CTRL:
;
case goog.events.KeyCodes.DOWN:
;
case goog.events.KeyCodes.END:
;
case goog.events.KeyCodes.ESC:
;
case goog.events.KeyCodes.HOME:
;
case goog.events.KeyCodes.INSERT:
;
case goog.events.KeyCodes.LEFT:
;
case goog.events.KeyCodes.MAC_FF_META:
;
case goog.events.KeyCodes.META:
;
case goog.events.KeyCodes.NUMLOCK:
;
case goog.events.KeyCodes.NUM_CENTER:
;
case goog.events.KeyCodes.PAGE_DOWN:
;
case goog.events.KeyCodes.PAGE_UP:
;
case goog.events.KeyCodes.PAUSE:
;
case goog.events.KeyCodes.PHANTOM:
;
case goog.events.KeyCodes.PRINT_SCREEN:
;
case goog.events.KeyCodes.RIGHT:
;
case goog.events.KeyCodes.SCROLL_LOCK:
;
case goog.events.KeyCodes.SHIFT:
;
case goog.events.KeyCodes.UP:
;
case goog.events.KeyCodes.WIN_KEY:
;
case goog.events.KeyCodes.WIN_KEY_RIGHT:
return false;
case goog.events.KeyCodes.WIN_KEY_FF_LINUX:
return!goog.userAgent.GECKO;
default:
return e.keyCode < goog.events.KeyCodes.FIRST_MEDIA_KEY || e.keyCode > goog.events.KeyCodes.LAST_MEDIA_KEY
}
};
goog.events.KeyCodes.firesKeyPressEvent = function(keyCode, opt_heldKeyCode, opt_shiftKey, opt_ctrlKey, opt_altKey) {
if(!goog.userAgent.IE && !(goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525"))) {
return true
}
if(goog.userAgent.MAC && opt_altKey) {
return goog.events.KeyCodes.isCharacterKey(keyCode)
}
if(opt_altKey && !opt_ctrlKey) {
return false
}
if(!opt_shiftKey && (opt_heldKeyCode == goog.events.KeyCodes.CTRL || opt_heldKeyCode == goog.events.KeyCodes.ALT || goog.userAgent.MAC && opt_heldKeyCode == goog.events.KeyCodes.META)) {
return false
}
if(goog.userAgent.WEBKIT && opt_ctrlKey && opt_shiftKey) {
switch(keyCode) {
case goog.events.KeyCodes.BACKSLASH:
;
case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:
;
case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:
;
case goog.events.KeyCodes.TILDE:
;
case goog.events.KeyCodes.SEMICOLON:
;
case goog.events.KeyCodes.DASH:
;
case goog.events.KeyCodes.EQUALS:
;
case goog.events.KeyCodes.COMMA:
;
case goog.events.KeyCodes.PERIOD:
;
case goog.events.KeyCodes.SLASH:
;
case goog.events.KeyCodes.APOSTROPHE:
;
case goog.events.KeyCodes.SINGLE_QUOTE:
return false
}
}
if(goog.userAgent.IE && opt_ctrlKey && opt_heldKeyCode == keyCode) {
return false
}
switch(keyCode) {
case goog.events.KeyCodes.ENTER:
return!(goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9));
case goog.events.KeyCodes.ESC:
return!goog.userAgent.WEBKIT
}
return goog.events.KeyCodes.isCharacterKey(keyCode)
};
goog.events.KeyCodes.isCharacterKey = function(keyCode) {
if(keyCode >= goog.events.KeyCodes.ZERO && keyCode <= goog.events.KeyCodes.NINE) {
return true
}
if(keyCode >= goog.events.KeyCodes.NUM_ZERO && keyCode <= goog.events.KeyCodes.NUM_MULTIPLY) {
return true
}
if(keyCode >= goog.events.KeyCodes.A && keyCode <= goog.events.KeyCodes.Z) {
return true
}
if(goog.userAgent.WEBKIT && keyCode == 0) {
return true
}
switch(keyCode) {
case goog.events.KeyCodes.SPACE:
;
case goog.events.KeyCodes.QUESTION_MARK:
;
case goog.events.KeyCodes.NUM_PLUS:
;
case goog.events.KeyCodes.NUM_MINUS:
;
case goog.events.KeyCodes.NUM_PERIOD:
;
case goog.events.KeyCodes.NUM_DIVISION:
;
case goog.events.KeyCodes.SEMICOLON:
;
case goog.events.KeyCodes.FF_SEMICOLON:
;
case goog.events.KeyCodes.DASH:
;
case goog.events.KeyCodes.EQUALS:
;
case goog.events.KeyCodes.FF_EQUALS:
;
case goog.events.KeyCodes.COMMA:
;
case goog.events.KeyCodes.PERIOD:
;
case goog.events.KeyCodes.SLASH:
;
case goog.events.KeyCodes.APOSTROPHE:
;
case goog.events.KeyCodes.SINGLE_QUOTE:
;
case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:
;
case goog.events.KeyCodes.BACKSLASH:
;
case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:
return true;
default:
return false
}
};
goog.events.KeyCodes.normalizeGeckoKeyCode = function(keyCode) {
switch(keyCode) {
case goog.events.KeyCodes.FF_EQUALS:
return goog.events.KeyCodes.EQUALS;
case goog.events.KeyCodes.FF_SEMICOLON:
return goog.events.KeyCodes.SEMICOLON;
case goog.events.KeyCodes.MAC_FF_META:
return goog.events.KeyCodes.META;
case goog.events.KeyCodes.WIN_KEY_FF_LINUX:
return goog.events.KeyCodes.WIN_KEY;
default:
return keyCode
}
};
goog.provide("goog.events.KeyEvent");
goog.provide("goog.events.KeyHandler");
goog.provide("goog.events.KeyHandler.EventType");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.events.KeyCodes");
goog.require("goog.userAgent");
goog.events.KeyHandler = function(opt_element, opt_capture) {
goog.events.EventTarget.call(this);
if(opt_element) {
this.attach(opt_element, opt_capture)
}
};
goog.inherits(goog.events.KeyHandler, goog.events.EventTarget);
goog.events.KeyHandler.prototype.element_ = null;
goog.events.KeyHandler.prototype.keyPressKey_ = null;
goog.events.KeyHandler.prototype.keyDownKey_ = null;
goog.events.KeyHandler.prototype.keyUpKey_ = null;
goog.events.KeyHandler.prototype.lastKey_ = -1;
goog.events.KeyHandler.prototype.keyCode_ = -1;
goog.events.KeyHandler.prototype.altKey_ = false;
goog.events.KeyHandler.EventType = {KEY:"key"};
goog.events.KeyHandler.safariKey_ = {3:goog.events.KeyCodes.ENTER, 12:goog.events.KeyCodes.NUMLOCK, 63232:goog.events.KeyCodes.UP, 63233:goog.events.KeyCodes.DOWN, 63234:goog.events.KeyCodes.LEFT, 63235:goog.events.KeyCodes.RIGHT, 63236:goog.events.KeyCodes.F1, 63237:goog.events.KeyCodes.F2, 63238:goog.events.KeyCodes.F3, 63239:goog.events.KeyCodes.F4, 63240:goog.events.KeyCodes.F5, 63241:goog.events.KeyCodes.F6, 63242:goog.events.KeyCodes.F7, 63243:goog.events.KeyCodes.F8, 63244:goog.events.KeyCodes.F9,
63245:goog.events.KeyCodes.F10, 63246:goog.events.KeyCodes.F11, 63247:goog.events.KeyCodes.F12, 63248:goog.events.KeyCodes.PRINT_SCREEN, 63272:goog.events.KeyCodes.DELETE, 63273:goog.events.KeyCodes.HOME, 63275:goog.events.KeyCodes.END, 63276:goog.events.KeyCodes.PAGE_UP, 63277:goog.events.KeyCodes.PAGE_DOWN, 63289:goog.events.KeyCodes.NUMLOCK, 63302:goog.events.KeyCodes.INSERT};
goog.events.KeyHandler.keyIdentifier_ = {"Up":goog.events.KeyCodes.UP, "Down":goog.events.KeyCodes.DOWN, "Left":goog.events.KeyCodes.LEFT, "Right":goog.events.KeyCodes.RIGHT, "Enter":goog.events.KeyCodes.ENTER, "F1":goog.events.KeyCodes.F1, "F2":goog.events.KeyCodes.F2, "F3":goog.events.KeyCodes.F3, "F4":goog.events.KeyCodes.F4, "F5":goog.events.KeyCodes.F5, "F6":goog.events.KeyCodes.F6, "F7":goog.events.KeyCodes.F7, "F8":goog.events.KeyCodes.F8, "F9":goog.events.KeyCodes.F9, "F10":goog.events.KeyCodes.F10,
"F11":goog.events.KeyCodes.F11, "F12":goog.events.KeyCodes.F12, "U+007F":goog.events.KeyCodes.DELETE, "Home":goog.events.KeyCodes.HOME, "End":goog.events.KeyCodes.END, "PageUp":goog.events.KeyCodes.PAGE_UP, "PageDown":goog.events.KeyCodes.PAGE_DOWN, "Insert":goog.events.KeyCodes.INSERT};
goog.events.KeyHandler.USES_KEYDOWN_ = goog.userAgent.IE || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525");
goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_ = goog.userAgent.MAC && goog.userAgent.GECKO;
goog.events.KeyHandler.prototype.handleKeyDown_ = function(e) {
if(goog.userAgent.WEBKIT) {
if(this.lastKey_ == goog.events.KeyCodes.CTRL && !e.ctrlKey || this.lastKey_ == goog.events.KeyCodes.ALT && !e.altKey || goog.userAgent.MAC && this.lastKey_ == goog.events.KeyCodes.META && !e.metaKey) {
this.lastKey_ = -1;
this.keyCode_ = -1
}
}
if(this.lastKey_ == -1) {
if(e.ctrlKey && e.keyCode != goog.events.KeyCodes.CTRL) {
this.lastKey_ = goog.events.KeyCodes.CTRL
}else {
if(e.altKey && e.keyCode != goog.events.KeyCodes.ALT) {
this.lastKey_ = goog.events.KeyCodes.ALT
}else {
if(e.metaKey && e.keyCode != goog.events.KeyCodes.META) {
this.lastKey_ = goog.events.KeyCodes.META
}
}
}
}
if(goog.events.KeyHandler.USES_KEYDOWN_ && !goog.events.KeyCodes.firesKeyPressEvent(e.keyCode, this.lastKey_, e.shiftKey, e.ctrlKey, e.altKey)) {
this.handleEvent(e)
}else {
this.keyCode_ = goog.userAgent.GECKO ? goog.events.KeyCodes.normalizeGeckoKeyCode(e.keyCode) : e.keyCode;
if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) {
this.altKey_ = e.altKey
}
}
};
goog.events.KeyHandler.prototype.resetState = function() {
this.lastKey_ = -1;
this.keyCode_ = -1
};
goog.events.KeyHandler.prototype.handleKeyup_ = function(e) {
this.resetState();
this.altKey_ = e.altKey
};
goog.events.KeyHandler.prototype.handleEvent = function(e) {
var be = e.getBrowserEvent();
var keyCode, charCode;
var altKey = be.altKey;
if(goog.userAgent.IE && e.type == goog.events.EventType.KEYPRESS) {
keyCode = this.keyCode_;
charCode = keyCode != goog.events.KeyCodes.ENTER && keyCode != goog.events.KeyCodes.ESC ? be.keyCode : 0
}else {
if(goog.userAgent.WEBKIT && e.type == goog.events.EventType.KEYPRESS) {
keyCode = this.keyCode_;
charCode = be.charCode >= 0 && be.charCode < 63232 && goog.events.KeyCodes.isCharacterKey(keyCode) ? be.charCode : 0
}else {
if(goog.userAgent.OPERA) {
keyCode = this.keyCode_;
charCode = goog.events.KeyCodes.isCharacterKey(keyCode) ? be.keyCode : 0
}else {
keyCode = be.keyCode || this.keyCode_;
charCode = be.charCode || 0;
if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) {
altKey = this.altKey_
}
if(goog.userAgent.MAC && charCode == goog.events.KeyCodes.QUESTION_MARK && keyCode == goog.events.KeyCodes.WIN_KEY) {
keyCode = goog.events.KeyCodes.SLASH
}
}
}
}
var key = keyCode;
var keyIdentifier = be.keyIdentifier;
if(keyCode) {
if(keyCode >= 63232 && keyCode in goog.events.KeyHandler.safariKey_) {
key = goog.events.KeyHandler.safariKey_[keyCode]
}else {
if(keyCode == 25 && e.shiftKey) {
key = 9
}
}
}else {
if(keyIdentifier && keyIdentifier in goog.events.KeyHandler.keyIdentifier_) {
key = goog.events.KeyHandler.keyIdentifier_[keyIdentifier]
}
}
var repeat = key == this.lastKey_;
this.lastKey_ = key;
var event = new goog.events.KeyEvent(key, charCode, repeat, be);
event.altKey = altKey;
this.dispatchEvent(event)
};
goog.events.KeyHandler.prototype.getElement = function() {
return this.element_
};
goog.events.KeyHandler.prototype.attach = function(element, opt_capture) {
if(this.keyUpKey_) {
this.detach()
}
this.element_ = element;
this.keyPressKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYPRESS, this, opt_capture);
this.keyDownKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYDOWN, this.handleKeyDown_, opt_capture, this);
this.keyUpKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYUP, this.handleKeyup_, opt_capture, this)
};
goog.events.KeyHandler.prototype.detach = function() {
if(this.keyPressKey_) {
goog.events.unlistenByKey(this.keyPressKey_);
goog.events.unlistenByKey(this.keyDownKey_);
goog.events.unlistenByKey(this.keyUpKey_);
this.keyPressKey_ = null;
this.keyDownKey_ = null;
this.keyUpKey_ = null
}
this.element_ = null;
this.lastKey_ = -1;
this.keyCode_ = -1
};
goog.events.KeyHandler.prototype.disposeInternal = function() {
goog.events.KeyHandler.superClass_.disposeInternal.call(this);
this.detach()
};
goog.events.KeyEvent = function(keyCode, charCode, repeat, browserEvent) {
goog.events.BrowserEvent.call(this, browserEvent);
this.type = goog.events.KeyHandler.EventType.KEY;
this.keyCode = keyCode;
this.charCode = charCode;
this.repeat = repeat
};
goog.inherits(goog.events.KeyEvent, goog.events.BrowserEvent);
goog.provide("goog.events.MouseWheelEvent");
goog.provide("goog.events.MouseWheelHandler");
goog.provide("goog.events.MouseWheelHandler.EventType");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.math");
goog.require("goog.style");
goog.require("goog.userAgent");
goog.events.MouseWheelHandler = function(element, opt_capture) {
goog.events.EventTarget.call(this);
this.element_ = element;
var rtlElement = goog.dom.isElement(this.element_) ? (this.element_) : this.element_ ? (this.element_).body : null;
this.isRtl_ = !!rtlElement && goog.style.isRightToLeft(rtlElement);
var type = goog.userAgent.GECKO ? "DOMMouseScroll" : "mousewheel";
this.listenKey_ = goog.events.listen(this.element_, type, this, opt_capture)
};
goog.inherits(goog.events.MouseWheelHandler, goog.events.EventTarget);
goog.events.MouseWheelHandler.EventType = {MOUSEWHEEL:"mousewheel"};
goog.events.MouseWheelHandler.prototype.maxDeltaX_;
goog.events.MouseWheelHandler.prototype.maxDeltaY_;
goog.events.MouseWheelHandler.prototype.setMaxDeltaX = function(maxDeltaX) {
this.maxDeltaX_ = maxDeltaX
};
goog.events.MouseWheelHandler.prototype.setMaxDeltaY = function(maxDeltaY) {
this.maxDeltaY_ = maxDeltaY
};
goog.events.MouseWheelHandler.prototype.handleEvent = function(e) {
var deltaX = 0;
var deltaY = 0;
var detail = 0;
var be = e.getBrowserEvent();
if(be.type == "mousewheel") {
var wheelDeltaScaleFactor = 1;
if(goog.userAgent.IE || goog.userAgent.WEBKIT && (goog.userAgent.WINDOWS || goog.userAgent.isVersionOrHigher("532.0"))) {
wheelDeltaScaleFactor = 40
}
detail = goog.events.MouseWheelHandler.smartScale_(-be.wheelDelta, wheelDeltaScaleFactor);
if(goog.isDef(be.wheelDeltaX)) {
deltaX = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaX, wheelDeltaScaleFactor);
deltaY = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaY, wheelDeltaScaleFactor)
}else {
deltaY = detail
}
}else {
detail = be.detail;
if(detail > 100) {
detail = 3
}else {
if(detail < -100) {
detail = -3
}
}
if(goog.isDef(be.axis) && be.axis === be.HORIZONTAL_AXIS) {
deltaX = detail
}else {
deltaY = detail
}
}
if(goog.isNumber(this.maxDeltaX_)) {
deltaX = goog.math.clamp(deltaX, -this.maxDeltaX_, this.maxDeltaX_)
}
if(goog.isNumber(this.maxDeltaY_)) {
deltaY = goog.math.clamp(deltaY, -this.maxDeltaY_, this.maxDeltaY_)
}
if(this.isRtl_) {
deltaX = -deltaX
}
var newEvent = new goog.events.MouseWheelEvent(detail, be, deltaX, deltaY);
this.dispatchEvent(newEvent)
};
goog.events.MouseWheelHandler.smartScale_ = function(mouseWheelDelta, scaleFactor) {
if(goog.userAgent.WEBKIT && (goog.userAgent.MAC || goog.userAgent.LINUX) && mouseWheelDelta % scaleFactor != 0) {
return mouseWheelDelta
}else {
return mouseWheelDelta / scaleFactor
}
};
goog.events.MouseWheelHandler.prototype.disposeInternal = function() {
goog.events.MouseWheelHandler.superClass_.disposeInternal.call(this);
goog.events.unlistenByKey(this.listenKey_);
this.listenKey_ = null
};
goog.events.MouseWheelEvent = function(detail, browserEvent, deltaX, deltaY) {
goog.events.BrowserEvent.call(this, browserEvent);
this.type = goog.events.MouseWheelHandler.EventType.MOUSEWHEEL;
this.detail = detail;
this.deltaX = deltaX;
this.deltaY = deltaY
};
goog.inherits(goog.events.MouseWheelEvent, goog.events.BrowserEvent);
goog.provide("goog.log");
goog.provide("goog.log.Level");
goog.provide("goog.log.LogRecord");
goog.provide("goog.log.Logger");
goog.require("goog.debug");
goog.require("goog.debug.LogRecord");
goog.require("goog.debug.Logger");
goog.define("goog.log.ENABLED", goog.debug.LOGGING_ENABLED);
goog.log.Logger = goog.debug.Logger;
goog.log.Level = goog.debug.Logger.Level;
goog.log.LogRecord = goog.debug.LogRecord;
goog.log.getLogger = function(name, opt_level) {
if(goog.log.ENABLED) {
var logger = goog.debug.Logger.getLogger(name);
if(opt_level && logger) {
logger.setLevel(opt_level)
}
return logger
}else {
return null
}
};
goog.log.addHandler = function(logger, handler) {
if(goog.log.ENABLED && logger) {
logger.addHandler(handler)
}
};
goog.log.removeHandler = function(logger, handler) {
if(goog.log.ENABLED && logger) {
return logger.removeHandler(handler)
}else {
return false
}
};
goog.log.log = function(logger, level, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.log(level, msg, opt_exception)
}
};
goog.log.error = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.severe(msg, opt_exception)
}
};
goog.log.warning = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.warning(msg, opt_exception)
}
};
goog.log.info = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.info(msg, opt_exception)
}
};
goog.log.fine = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.fine(msg, opt_exception)
}
};
goog.provide("ol.Tile");
goog.provide("ol.TileState");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("ol.TileCoord");
ol.TileState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3, EMPTY:4};
ol.Tile = function(tileCoord, state) {
goog.base(this);
this.tileCoord = tileCoord;
this.state = state
};
goog.inherits(ol.Tile, goog.events.EventTarget);
ol.Tile.prototype.dispatchChangeEvent = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.Tile.prototype.getImage = goog.abstractMethod;
ol.Tile.prototype.getKey = function() {
return goog.getUid(this).toString()
};
ol.Tile.prototype.getTileCoord = function() {
return this.tileCoord
};
ol.Tile.prototype.getState = function() {
return this.state
};
ol.Tile.prototype.load = goog.abstractMethod;
goog.provide("ol.structs.PriorityQueue");
goog.require("goog.asserts");
goog.require("goog.object");
ol.structs.PriorityQueue = function(priorityFunction, keyFunction) {
this.priorityFunction_ = priorityFunction;
this.keyFunction_ = keyFunction;
this.elements_ = [];
this.priorities_ = [];
this.queuedElements_ = {}
};
ol.structs.PriorityQueue.DROP = Infinity;
ol.structs.PriorityQueue.prototype.assertValid = function() {
var elements = this.elements_;
var priorities = this.priorities_;
var n = elements.length;
goog.asserts.assert(priorities.length == n);
var i, priority;
for(i = 0;i < (n >> 1) - 1;++i) {
priority = priorities[i];
goog.asserts.assert(priority <= priorities[this.getLeftChildIndex_(i)]);
goog.asserts.assert(priority <= priorities[this.getRightChildIndex_(i)])
}
};
ol.structs.PriorityQueue.prototype.clear = function() {
this.elements_.length = 0;
this.priorities_.length = 0;
goog.object.clear(this.queuedElements_)
};
ol.structs.PriorityQueue.prototype.dequeue = function() {
var elements = this.elements_;
goog.asserts.assert(elements.length > 0);
var priorities = this.priorities_;
var element = elements[0];
if(elements.length == 1) {
elements.length = 0;
priorities.length = 0
}else {
elements[0] = elements.pop();
priorities[0] = priorities.pop();
this.siftUp_(0)
}
var elementKey = this.keyFunction_(element);
goog.asserts.assert(elementKey in this.queuedElements_);
delete this.queuedElements_[elementKey];
return element
};
ol.structs.PriorityQueue.prototype.enqueue = function(element) {
goog.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_));
var priority = this.priorityFunction_(element);
if(priority != ol.structs.PriorityQueue.DROP) {
this.elements_.push(element);
this.priorities_.push(priority);
this.queuedElements_[this.keyFunction_(element)] = true;
this.siftDown_(0, this.elements_.length - 1)
}
};
ol.structs.PriorityQueue.prototype.getCount = function() {
return this.elements_.length
};
ol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) {
return index * 2 + 1
};
ol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) {
return index * 2 + 2
};
ol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) {
return index - 1 >> 1
};
ol.structs.PriorityQueue.prototype.heapify_ = function() {
var i;
for(i = (this.elements_.length >> 1) - 1;i >= 0;i--) {
this.siftUp_(i)
}
};
ol.structs.PriorityQueue.prototype.isEmpty = function() {
return this.elements_.length === 0
};
ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) {
return key in this.queuedElements_
};
ol.structs.PriorityQueue.prototype.isQueued = function(element) {
return this.isKeyQueued(this.keyFunction_(element))
};
ol.structs.PriorityQueue.prototype.siftUp_ = function(index) {
var elements = this.elements_;
var priorities = this.priorities_;
var count = elements.length;
var element = elements[index];
var priority = priorities[index];
var startIndex = index;
while(index < count >> 1) {
var lIndex = this.getLeftChildIndex_(index);
var rIndex = this.getRightChildIndex_(index);
var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex] ? rIndex : lIndex;
elements[index] = elements[smallerChildIndex];
priorities[index] = priorities[smallerChildIndex];
index = smallerChildIndex
}
elements[index] = element;
priorities[index] = priority;
this.siftDown_(startIndex, index)
};
ol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) {
var elements = this.elements_;
var priorities = this.priorities_;
var element = elements[index];
var priority = priorities[index];
while(index > startIndex) {
var parentIndex = this.getParentIndex_(index);
if(priorities[parentIndex] > priority) {
elements[index] = elements[parentIndex];
priorities[index] = priorities[parentIndex];
index = parentIndex
}else {
break
}
}
elements[index] = element;
priorities[index] = priority
};
ol.structs.PriorityQueue.prototype.reprioritize = function() {
var priorityFunction = this.priorityFunction_;
var elements = this.elements_;
var priorities = this.priorities_;
var index = 0;
var n = elements.length;
var element, i, priority;
for(i = 0;i < n;++i) {
element = elements[i];
priority = priorityFunction(element);
if(priority == ol.structs.PriorityQueue.DROP) {
delete this.queuedElements_[this.keyFunction_(element)]
}else {
priorities[index] = priority;
elements[index++] = element
}
}
elements.length = index;
priorities.length = index;
this.heapify_()
};
goog.provide("ol.TilePriorityFunction");
goog.provide("ol.TileQueue");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.Coordinate");
goog.require("ol.Tile");
goog.require("ol.structs.PriorityQueue");
ol.TilePriorityFunction;
ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) {
goog.base(this, function(element) {
return tilePriorityFunction.apply(null, element)
}, function(element) {
return(element[0]).getKey()
});
this.tileChangeCallback_ = tileChangeCallback;
this.tilesLoading_ = 0
};
goog.inherits(ol.TileQueue, ol.structs.PriorityQueue);
ol.TileQueue.prototype.getTilesLoading = function() {
return this.tilesLoading_
};
ol.TileQueue.prototype.handleTileChange = function() {
--this.tilesLoading_;
this.tileChangeCallback_()
};
ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) {
var newLoads = Math.min(maxTotalLoading - this.getTilesLoading(), maxNewLoads, this.getCount());
var i, tile;
for(i = 0;i < newLoads;++i) {
tile = (this.dequeue()[0]);
goog.events.listenOnce(tile, goog.events.EventType.CHANGE, this.handleTileChange, false, this);
tile.load()
}
this.tilesLoading_ += newLoads
};
goog.provide("ol.control.Control");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("ol.MapEventType");
goog.require("ol.Object");
ol.control.Control = function(options) {
goog.base(this);
this.element = goog.isDef(options.element) ? options.element : null;
this.target_ = goog.isDef(options.target) ? goog.dom.getElement(options.target) : null;
this.map_ = null;
this.listenerKeys = []
};
goog.inherits(ol.control.Control, ol.Object);
ol.control.Control.prototype.disposeInternal = function() {
goog.dom.removeNode(this.element);
goog.base(this, "disposeInternal")
};
ol.control.Control.prototype.getMap = function() {
return this.map_
};
ol.control.Control.prototype.handleMapPostrender = goog.nullFunction;
ol.control.Control.prototype.setMap = function(map) {
if(!goog.isNull(this.map_)) {
goog.dom.removeNode(this.element)
}
if(!goog.array.isEmpty(this.listenerKeys)) {
goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey);
this.listenerKeys.length = 0
}
this.map_ = map;
if(!goog.isNull(this.map_)) {
var target = !goog.isNull(this.target_) ? this.target_ : map.getOverlayContainerStopEvent();
goog.dom.appendChild(target, this.element);
if(this.handleMapPostrender !== goog.nullFunction) {
this.listenerKeys.push(goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this))
}
map.render()
}
};
goog.provide("ol.css");
ol.css.CLASS_UNSELECTABLE = "ol-unselectable";
ol.css.CLASS_UNSUPPORTED = "ol-unsupported";
goog.provide("ol.control.Attribution");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("ol.Attribution");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.Attribution = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL);
var className = goog.isDef(options.className) ? options.className : "ol-attribution";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_);
goog.base(this, {element:element, target:options.target});
this.renderedVisible_ = true;
this.attributionElements_ = {};
this.attributionElementRenderedVisible_ = {}
};
goog.inherits(ol.control.Attribution, ol.control.Control);
ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
var i, ii, j, jj, tileRanges, source, sourceAttribution, sourceAttributionKey, sourceAttributions, sourceKey;
var layerStatesArray = frameState.layerStatesArray;
var attributions = goog.object.clone(frameState.attributions);
var hiddenAttributions = {};
for(i = 0, ii = layerStatesArray.length;i < ii;i++) {
source = layerStatesArray[i].layer.getSource();
sourceKey = goog.getUid(source).toString();
sourceAttributions = source.getAttributions();
if(goog.isNull(sourceAttributions)) {
continue
}
for(j = 0, jj = sourceAttributions.length;j < jj;j++) {
sourceAttribution = sourceAttributions[j];
sourceAttributionKey = goog.getUid(sourceAttribution).toString();
if(sourceAttributionKey in attributions) {
continue
}
tileRanges = frameState.usedTiles[sourceKey];
if(goog.isDef(tileRanges) && sourceAttribution.intersectsAnyTileRange(tileRanges)) {
if(sourceAttributionKey in hiddenAttributions) {
delete hiddenAttributions[sourceAttributionKey]
}
attributions[sourceAttributionKey] = sourceAttribution
}else {
hiddenAttributions[sourceAttributionKey] = sourceAttribution
}
}
}
return[attributions, hiddenAttributions]
};
ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) {
this.updateElement_(mapEvent.frameState)
};
ol.control.Attribution.prototype.updateElement_ = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element, false);
this.renderedVisible_ = false
}
return
}
var attributions = this.getSourceAttributions(frameState);
var visibleAttributions = attributions[0];
var hiddenAttributions = attributions[1];
var attributionElement, attributionKey;
for(attributionKey in this.attributionElements_) {
if(attributionKey in visibleAttributions) {
if(!this.attributionElementRenderedVisible_[attributionKey]) {
goog.style.setElementShown(this.attributionElements_[attributionKey], true);
this.attributionElementRenderedVisible_[attributionKey] = true
}
delete visibleAttributions[attributionKey]
}else {
if(attributionKey in hiddenAttributions) {
if(this.attributionElementRenderedVisible_[attributionKey]) {
goog.style.setElementShown(this.attributionElements_[attributionKey], false);
delete this.attributionElementRenderedVisible_[attributionKey]
}
delete hiddenAttributions[attributionKey]
}else {
goog.dom.removeNode(this.attributionElements_[attributionKey]);
delete this.attributionElements_[attributionKey];
delete this.attributionElementRenderedVisible_[attributionKey]
}
}
}
for(attributionKey in visibleAttributions) {
attributionElement = goog.dom.createElement(goog.dom.TagName.LI);
attributionElement.innerHTML = visibleAttributions[attributionKey].getHTML();
goog.dom.appendChild(this.ulElement_, attributionElement);
this.attributionElements_[attributionKey] = attributionElement;
this.attributionElementRenderedVisible_[attributionKey] = true
}
for(attributionKey in hiddenAttributions) {
attributionElement = goog.dom.createElement(goog.dom.TagName.LI);
attributionElement.innerHTML = hiddenAttributions[attributionKey].getHTML();
goog.style.setElementShown(attributionElement, false);
goog.dom.appendChild(this.ulElement_, attributionElement);
this.attributionElements_[attributionKey] = attributionElement
}
var renderVisible = !goog.object.isEmpty(this.attributionElementRenderedVisible_);
if(this.renderedVisible_ != renderVisible) {
goog.style.setElementShown(this.element, renderVisible);
this.renderedVisible_ = renderVisible
}
};
goog.provide("ol.control.Logo");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.Logo = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL);
var className = goog.isDef(options.className) ? options.className : "ol-logo";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_);
goog.base(this, {element:element, target:options.target});
this.renderedVisible_ = true;
this.logoElements_ = {}
};
goog.inherits(ol.control.Logo, ol.control.Control);
ol.control.Logo.prototype.handleMapPostrender = function(mapEvent) {
this.updateElement_(mapEvent.frameState)
};
ol.control.Logo.prototype.updateElement_ = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element, false);
this.renderedVisible_ = false
}
return
}
var logo;
var logos = frameState.logos;
var logoElements = this.logoElements_;
for(logo in logoElements) {
if(!(logo in logos)) {
goog.dom.removeNode(logoElements[logo]);
delete logoElements[logo]
}
}
var image, logoElement, logoKey;
for(logoKey in logos) {
if(!(logoKey in logoElements)) {
image = new Image;
image.src = logoKey;
var logoValue = logos[logoKey];
var child;
if(logoValue === "") {
child = image
}else {
child = goog.dom.createDom(goog.dom.TagName.A, {"href":logoValue, "target":"_blank"});
child.appendChild(image)
}
logoElement = goog.dom.createDom(goog.dom.TagName.LI, undefined, child);
goog.dom.appendChild(this.ulElement_, logoElement);
logoElements[logoKey] = logoElement
}
}
var renderVisible = !goog.object.isEmpty(logos);
if(this.renderedVisible_ != renderVisible) {
goog.style.setElementShown(this.element, renderVisible);
this.renderedVisible_ = renderVisible
}
};
goog.provide("ol.control.Zoom");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.View2D");
goog.require("ol.animation");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.easing");
goog.require("ol.pointer.PointerEventHandler");
ol.control.Zoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : "ol-zoom";
var delta = goog.isDef(options.delta) ? options.delta : 1;
var zoomInLabel = goog.isDef(options.zoomInLabel) ? options.zoomInLabel : "+";
var zoomOutLabel = goog.isDef(options.zoomOutLabel) ? options.zoomOutLabel : "\u2212";
var zoomInTipLabel = goog.isDef(options.zoomInTipLabel) ? options.zoomInTipLabel : "Zoom in";
var zoomOutTipLabel = goog.isDef(options.zoomOutTipLabel) ? options.zoomOutTipLabel : "Zoom out";
var tTipZoomIn = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, zoomInTipLabel);
var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":className + "-in ol-has-tooltip", "type":"button"}, tTipZoomIn, zoomInLabel);
var inElementHandler = new ol.pointer.PointerEventHandler(inElement);
this.registerDisposable(inElementHandler);
goog.events.listen(inElementHandler, ol.pointer.EventType.POINTERUP, goog.partial(ol.control.Zoom.prototype.zoomByDelta_, delta), false, this);
goog.events.listen(inElement, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() {
this.blur()
}, false);
var tTipsZoomOut = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, zoomOutTipLabel);
var outElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":className + "-out ol-has-tooltip", "type":"button"}, tTipsZoomOut, zoomOutLabel);
var outElementHandler = new ol.pointer.PointerEventHandler(outElement);
this.registerDisposable(outElementHandler);
goog.events.listen(outElementHandler, ol.pointer.EventType.POINTERUP, goog.partial(ol.control.Zoom.prototype.zoomByDelta_, -delta), false, this);
goog.events.listen(outElement, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() {
this.blur()
}, false);
var cssClasses = className + " " + ol.css.CLASS_UNSELECTABLE;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, outElement);
goog.base(this, {element:element, target:options.target});
this.duration_ = goog.isDef(options.duration) ? options.duration : 250
};
goog.inherits(ol.control.Zoom, ol.control.Control);
ol.control.Zoom.prototype.zoomByDelta_ = function(delta, pointerEvent) {
pointerEvent.browserEvent.preventDefault();
var map = this.getMap();
var view = map.getView();
goog.asserts.assert(goog.isDef(view));
var view2D = view.getView2D();
goog.asserts.assertInstanceof(view2D, ol.View2D);
var currentResolution = view2D.getResolution();
if(goog.isDef(currentResolution)) {
if(this.duration_ > 0) {
map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:this.duration_, easing:ol.easing.easeOut}))
}
var newResolution = view2D.constrainResolution(currentResolution, delta);
view2D.setResolution(newResolution)
}
};
goog.provide("ol.control");
goog.require("ol.Collection");
goog.require("ol.control.Attribution");
goog.require("ol.control.Logo");
goog.require("ol.control.Zoom");
ol.control.defaults = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var controls = new ol.Collection;
var zoomControl = goog.isDef(options.zoom) ? options.zoom : true;
if(zoomControl) {
var zoomControlOptions = goog.isDef(options.zoomOptions) ? options.zoomOptions : undefined;
controls.push(new ol.control.Zoom(zoomControlOptions))
}
var attributionControl = goog.isDef(options.attribution) ? options.attribution : true;
if(attributionControl) {
var attributionControlOptions = goog.isDef(options.attributionOptions) ? options.attributionOptions : undefined;
controls.push(new ol.control.Attribution(attributionControlOptions))
}
var logoControl = goog.isDef(options.logo) ? options.logo : true;
if(logoControl) {
var logoControlOptions = goog.isDef(options.logoOptions) ? options.logoOptions : undefined;
controls.push(new ol.control.Logo(logoControlOptions))
}
return controls
};
goog.provide("ol.Kinetic");
goog.require("ol.Coordinate");
goog.require("ol.PreRenderFunction");
goog.require("ol.animation");
ol.Kinetic = function(decay, minVelocity, delay) {
this.decay_ = decay;
this.minVelocity_ = minVelocity;
this.delay_ = delay;
this.points_ = [];
this.angle_ = 0;
this.initialVelocity_ = 0
};
ol.Kinetic.prototype.begin = function() {
this.points_.length = 0;
this.angle_ = 0;
this.initialVelocity_ = 0
};
ol.Kinetic.prototype.update = function(x, y) {
this.points_.push(x, y, goog.now())
};
ol.Kinetic.prototype.end = function() {
var delay = goog.now() - this.delay_;
var lastIndex = this.points_.length - 3;
if(this.points_[lastIndex + 2] < delay) {
return false
}
var firstIndex = lastIndex - 3;
while(firstIndex >= 0 && this.points_[firstIndex + 2] > delay) {
firstIndex -= 3
}
if(firstIndex >= 0) {
var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
var dx = this.points_[lastIndex] - this.points_[firstIndex];
var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
this.angle_ = Math.atan2(dy, dx);
this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
return this.initialVelocity_ > this.minVelocity_
}
return false
};
ol.Kinetic.prototype.pan = function(source) {
var decay = this.decay_;
var initialVelocity = this.initialVelocity_;
var minVelocity = this.minVelocity_;
var duration = this.getDuration_();
var easingFunction = function(t) {
return initialVelocity * (Math.exp(decay * t * duration) - 1) / (minVelocity - initialVelocity)
};
return ol.animation.pan({source:source, duration:duration, easing:easingFunction})
};
ol.Kinetic.prototype.getDuration_ = function() {
return Math.log(this.minVelocity_ / this.initialVelocity_) / this.decay_
};
ol.Kinetic.prototype.getDistance = function() {
return(this.minVelocity_ - this.initialVelocity_) / this.decay_
};
ol.Kinetic.prototype.getAngle = function() {
return this.angle_
};
goog.provide("ol.interaction.DoubleClickZoom");
goog.require("goog.asserts");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.interaction.Interaction");
ol.interaction.DoubleClickZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
goog.base(this);
this.duration_ = goog.isDef(options.duration) ? options.duration : 250
};
goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
var browserEvent = mapBrowserEvent.browserEvent;
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) {
var map = mapBrowserEvent.map;
var anchor = mapBrowserEvent.coordinate;
var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
var view = map.getView().getView2D();
ol.interaction.Interaction.zoomByDelta(map, view, delta, anchor, this.duration_);
mapBrowserEvent.preventDefault();
stopEvent = true
}
return!stopEvent
};
goog.provide("ol.interaction.DragPan");
goog.require("goog.asserts");
goog.require("ol.Kinetic");
goog.require("ol.Pixel");
goog.require("ol.PreRenderFunction");
goog.require("ol.View2D");
goog.require("ol.ViewHint");
goog.require("ol.coordinate");
goog.require("ol.events.condition");
goog.require("ol.interaction.Pointer");
ol.interaction.DragPan = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.kinetic_ = options.kinetic;
this.kineticPreRenderFn_ = null;
this.lastCentroid = null;
this.condition_ = goog.isDef(opt_options.condition) ? opt_options.condition : ol.events.condition.noModifierKeys;
this.noKinetic_ = false
};
goog.inherits(ol.interaction.DragPan, ol.interaction.Pointer);
ol.interaction.DragPan.prototype.handlePointerDrag = function(mapBrowserEvent) {
goog.asserts.assert(this.targetPointers.length >= 1);
var centroid = ol.interaction.Pointer.centroid(this.targetPointers);
if(!goog.isNull(this.lastCentroid)) {
if(this.kinetic_) {
this.kinetic_.update(centroid[0], centroid[1])
}
var deltaX = this.lastCentroid[0] - centroid[0];
var deltaY = centroid[1] - this.lastCentroid[1];
var map = mapBrowserEvent.map;
var view2D = map.getView().getView2D();
goog.asserts.assertInstanceof(view2D, ol.View2D);
var view2DState = view2D.getView2DState();
var center = [deltaX, deltaY];
ol.coordinate.scale(center, view2DState.resolution);
ol.coordinate.rotate(center, view2DState.rotation);
ol.coordinate.add(center, view2DState.center);
center = view2D.constrainCenter(center);
map.render();
view2D.setCenter(center)
}
this.lastCentroid = centroid
};
ol.interaction.DragPan.prototype.handlePointerUp = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view2D = map.getView().getView2D();
goog.asserts.assertInstanceof(view2D, ol.View2D);
if(this.targetPointers.length === 0) {
if(!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {
var distance = this.kinetic_.getDistance();
var angle = this.kinetic_.getAngle();
var center = view2D.getCenter();
goog.asserts.assert(goog.isDef(center));
this.kineticPreRenderFn_ = this.kinetic_.pan(center);
map.beforeRender(this.kineticPreRenderFn_);
var centerpx = map.getPixelFromCoordinate(center);
var dest = map.getCoordinateFromPixel([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]);
dest = view2D.constrainCenter(dest);
view2D.setCenter(dest)
}
view2D.setHint(ol.ViewHint.INTERACTING, -1);
map.render();
return false
}else {
this.lastCentroid = null;
return true
}
};
ol.interaction.DragPan.prototype.handlePointerDown = function(mapBrowserEvent) {
if(this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
var view2D = map.getView().getView2D();
goog.asserts.assertInstanceof(view2D, ol.View2D);
this.lastCentroid = null;
if(!this.handlingDownUpSequence) {
view2D.setHint(ol.ViewHint.INTERACTING, 1)
}
map.render();
if(!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) {
view2D.setCenter(mapBrowserEvent.frameState.view2DState.center);
this.kineticPreRenderFn_ = null
}
if(this.kinetic_) {
this.kinetic_.begin()
}
this.noKinetic_ = this.targetPointers.length > 1;
return true
}else {
return false
}
};
goog.provide("ol.interaction.DragRotate");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.ViewHint");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Pointer");
ol.interaction.DragRotate = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.altShiftKeysOnly;
this.lastAngle_ = undefined
};
goog.inherits(ol.interaction.DragRotate, ol.interaction.Pointer);
ol.interaction.DragRotate.prototype.handlePointerDrag = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return
}
var map = mapBrowserEvent.map;
var size = map.getSize();
var offset = mapBrowserEvent.pixel;
var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);
if(goog.isDef(this.lastAngle_)) {
var delta = theta - this.lastAngle_;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.render();
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - delta)
}
this.lastAngle_ = theta
};
ol.interaction.DragRotate.prototype.handlePointerUp = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return true
}
var map = mapBrowserEvent.map;
var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1);
var view2D = view.getView2D();
var view2DState = view2D.getView2DState();
ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, undefined, ol.DRAGROTATE_ANIMATION_DURATION);
return false
};
ol.interaction.DragRotate.prototype.handlePointerDown = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return false
}
var browserEvent = mapBrowserEvent.browserEvent;
if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
map.getView().setHint(ol.ViewHint.INTERACTING, 1);
map.render();
this.lastAngle_ = undefined;
return true
}else {
return false
}
};
goog.provide("ol.interaction.DragZoom");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.events.condition");
goog.require("ol.extent");
goog.require("ol.interaction.DragBox");
goog.require("ol.interaction.Interaction");
goog.require("ol.style.Stroke");
goog.require("ol.style.Style");
ol.interaction.DragZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var condition = goog.isDef(options.condition) ? options.condition : ol.events.condition.shiftKeyOnly;
var style = goog.isDef(options.style) ? options.style : new ol.style.Style({stroke:new ol.style.Stroke({color:[0, 0, 255, 1]})});
goog.base(this, {condition:condition, style:style})
};
goog.inherits(ol.interaction.DragZoom, ol.interaction.DragBox);
ol.interaction.DragZoom.prototype.onBoxEnd = function() {
var map = this.getMap();
var view = map.getView().getView2D();
var extent = this.getGeometry().getExtent();
var center = ol.extent.getCenter(extent);
ol.interaction.Interaction.zoom(map, view, view.getResolutionForExtent(extent, map.getSize()), center, ol.DRAGZOOM_ANIMATION_DURATION)
};
goog.provide("ol.interaction.KeyboardPan");
goog.require("goog.asserts");
goog.require("goog.events.KeyCodes");
goog.require("goog.events.KeyHandler.EventType");
goog.require("goog.functions");
goog.require("ol");
goog.require("ol.View2D");
goog.require("ol.coordinate");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.interaction.Interaction");
ol.interaction.KeyboardPan = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : goog.functions.and(ol.events.condition.noModifierKeys, ol.events.condition.targetNotEditable);
this.pixelDelta_ = goog.isDef(options.pixelDelta) ? options.pixelDelta : 128
};
goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction);
ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) {
var keyEvent = (mapBrowserEvent.browserEvent);
var keyCode = keyEvent.keyCode;
if(this.condition_(mapBrowserEvent) && (keyCode == goog.events.KeyCodes.DOWN || keyCode == goog.events.KeyCodes.LEFT || keyCode == goog.events.KeyCodes.RIGHT || keyCode == goog.events.KeyCodes.UP)) {
var map = mapBrowserEvent.map;
var view = map.getView();
goog.asserts.assertInstanceof(view, ol.View2D);
var view2DState = view.getView2DState();
var mapUnitsDelta = view2DState.resolution * this.pixelDelta_;
var deltaX = 0, deltaY = 0;
if(keyCode == goog.events.KeyCodes.DOWN) {
deltaY = -mapUnitsDelta
}else {
if(keyCode == goog.events.KeyCodes.LEFT) {
deltaX = -mapUnitsDelta
}else {
if(keyCode == goog.events.KeyCodes.RIGHT) {
deltaX = mapUnitsDelta
}else {
deltaY = mapUnitsDelta
}
}
}
var delta = [deltaX, deltaY];
ol.coordinate.rotate(delta, view2DState.rotation);
ol.interaction.Interaction.pan(map, view, delta, ol.KEYBOARD_PAN_DURATION);
mapBrowserEvent.preventDefault();
stopEvent = true
}
}
return!stopEvent
};
goog.provide("ol.interaction.KeyboardZoom");
goog.require("goog.asserts");
goog.require("goog.events.KeyHandler.EventType");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.interaction.Interaction");
ol.interaction.KeyboardZoom = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.targetNotEditable;
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
this.duration_ = goog.isDef(options.duration) ? options.duration : 100
};
goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);
ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) {
var keyEvent = (mapBrowserEvent.browserEvent);
var charCode = keyEvent.charCode;
if(this.condition_(mapBrowserEvent) && (charCode == "+".charCodeAt(0) || charCode == "-".charCodeAt(0))) {
var map = mapBrowserEvent.map;
var delta = charCode == "+".charCodeAt(0) ? this.delta_ : -this.delta_;
map.render();
var view = map.getView().getView2D();
ol.interaction.Interaction.zoomByDelta(map, view, delta, undefined, this.duration_);
mapBrowserEvent.preventDefault();
stopEvent = true
}
}
return!stopEvent
};
goog.provide("ol.interaction.MouseWheelZoom");
goog.require("goog.asserts");
goog.require("goog.events.MouseWheelEvent");
goog.require("goog.events.MouseWheelHandler.EventType");
goog.require("goog.math");
goog.require("ol");
goog.require("ol.Coordinate");
goog.require("ol.interaction.Interaction");
ol.interaction.MouseWheelZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.delta_ = 0;
this.duration_ = goog.isDef(options.duration) ? options.duration : 250;
this.lastAnchor_ = null;
this.startTime_ = undefined;
this.timeoutId_ = undefined
};
goog.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction);
ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.MouseWheelHandler.EventType.MOUSEWHEEL) {
var map = mapBrowserEvent.map;
var mouseWheelEvent = mapBrowserEvent.browserEvent;
goog.asserts.assertInstanceof(mouseWheelEvent, goog.events.MouseWheelEvent);
this.lastAnchor_ = mapBrowserEvent.coordinate;
this.delta_ += mouseWheelEvent.deltaY;
if(!goog.isDef(this.startTime_)) {
this.startTime_ = goog.now()
}
var duration = ol.MOUSEWHEELZOOM_TIMEOUT_DURATION;
var timeLeft = Math.max(duration - (goog.now() - this.startTime_), 0);
goog.global.clearTimeout(this.timeoutId_);
this.timeoutId_ = goog.global.setTimeout(goog.bind(this.doZoom_, this, map), timeLeft);
mapBrowserEvent.preventDefault();
stopEvent = true
}
return!stopEvent
};
ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) {
var maxDelta = ol.MOUSEWHEELZOOM_MAXDELTA;
var delta = goog.math.clamp(this.delta_, -maxDelta, maxDelta);
var view = map.getView().getView2D();
map.render();
ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_, this.duration_);
this.delta_ = 0;
this.lastAnchor_ = null;
this.startTime_ = undefined;
this.timeoutId_ = undefined
};
goog.provide("ol.interaction.PinchRotate");
goog.require("goog.asserts");
goog.require("goog.style");
goog.require("ol");
goog.require("ol.Coordinate");
goog.require("ol.ViewHint");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Pointer");
ol.interaction.PinchRotate = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.anchor_ = null;
this.lastAngle_ = undefined;
this.rotating_ = false;
this.rotationDelta_ = 0;
this.threshold_ = goog.isDef(options.threshold) ? options.threshold : 0.3
};
goog.inherits(ol.interaction.PinchRotate, ol.interaction.Pointer);
ol.interaction.PinchRotate.prototype.handlePointerDrag = function(mapBrowserEvent) {
goog.asserts.assert(this.targetPointers.length >= 2);
var rotationDelta = 0;
var touch0 = this.targetPointers[0];
var touch1 = this.targetPointers[1];
var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);
if(goog.isDef(this.lastAngle_)) {
var delta = angle - this.lastAngle_;
this.rotationDelta_ += delta;
if(!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {
this.rotating_ = true
}
rotationDelta = delta
}
this.lastAngle_ = angle;
var map = mapBrowserEvent.map;
var viewportPosition = goog.style.getClientPosition(map.getViewport());
var centroid = ol.interaction.Pointer.centroid(this.targetPointers);
centroid[0] -= viewportPosition.x;
centroid[1] -= viewportPosition.y;
this.anchor_ = map.getCoordinateFromPixel(centroid);
if(this.rotating_) {
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.render();
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation + rotationDelta, this.anchor_)
}
};
ol.interaction.PinchRotate.prototype.handlePointerUp = function(mapBrowserEvent) {
if(this.targetPointers.length < 2) {
var map = mapBrowserEvent.map;
var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1);
if(this.rotating_) {
var view2D = view.getView2D();
var view2DState = view2D.getView2DState();
ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, this.anchor_, ol.ROTATE_ANIMATION_DURATION)
}
return false
}else {
return true
}
};
ol.interaction.PinchRotate.prototype.handlePointerDown = function(mapBrowserEvent) {
if(this.targetPointers.length >= 2) {
var map = mapBrowserEvent.map;
this.anchor_ = null;
this.lastAngle_ = undefined;
this.rotating_ = false;
this.rotationDelta_ = 0;
if(!this.handlingDownUpSequence) {
map.getView().setHint(ol.ViewHint.INTERACTING, 1)
}
map.render();
return true
}else {
return false
}
};
goog.provide("ol.interaction.PinchZoom");
goog.require("goog.asserts");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.ViewHint");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Pointer");
ol.interaction.PinchZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.anchor_ = null;
this.duration_ = goog.isDef(options.duration) ? options.duration : 400;
this.lastDistance_ = undefined;
this.lastScaleDelta_ = 1
};
goog.inherits(ol.interaction.PinchZoom, ol.interaction.Pointer);
ol.interaction.PinchZoom.prototype.handlePointerDrag = function(mapBrowserEvent) {
goog.asserts.assert(this.targetPointers.length >= 2);
var scaleDelta = 1;
var touch0 = this.targetPointers[0];
var touch1 = this.targetPointers[1];
var dx = touch0.clientX - touch1.clientX;
var dy = touch0.clientY - touch1.clientY;
var distance = Math.sqrt(dx * dx + dy * dy);
if(goog.isDef(this.lastDistance_)) {
scaleDelta = this.lastDistance_ / distance
}
this.lastDistance_ = distance;
if(scaleDelta != 1) {
this.lastScaleDelta_ = scaleDelta
}
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
var viewportPosition = goog.style.getClientPosition(map.getViewport());
var centroid = ol.interaction.Pointer.centroid(this.targetPointers);
centroid[0] -= viewportPosition.x;
centroid[1] -= viewportPosition.y;
this.anchor_ = map.getCoordinateFromPixel(centroid);
map.render();
ol.interaction.Interaction.zoomWithoutConstraints(map, view, view2DState.resolution * scaleDelta, this.anchor_)
};
ol.interaction.PinchZoom.prototype.handlePointerUp = function(mapBrowserEvent) {
if(this.targetPointers.length < 2) {
var map = mapBrowserEvent.map;
var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1);
var view2D = view.getView2D();
var view2DState = view2D.getView2DState();
var direction = this.lastScaleDelta_ - 1;
ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, this.anchor_, this.duration_, direction);
return false
}else {
return true
}
};
ol.interaction.PinchZoom.prototype.handlePointerDown = function(mapBrowserEvent) {
if(this.targetPointers.length >= 2) {
var map = mapBrowserEvent.map;
this.anchor_ = null;
this.lastDistance_ = undefined;
this.lastScaleDelta_ = 1;
if(!this.handlingDownUpSequence) {
map.getView().setHint(ol.ViewHint.INTERACTING, 1)
}
map.render();
return true
}else {
return false
}
};
goog.provide("ol.interaction");
goog.require("ol.Collection");
goog.require("ol.Kinetic");
goog.require("ol.interaction.DoubleClickZoom");
goog.require("ol.interaction.DragPan");
goog.require("ol.interaction.DragRotate");
goog.require("ol.interaction.DragZoom");
goog.require("ol.interaction.KeyboardPan");
goog.require("ol.interaction.KeyboardZoom");
goog.require("ol.interaction.MouseWheelZoom");
goog.require("ol.interaction.PinchRotate");
goog.require("ol.interaction.PinchZoom");
ol.interaction.defaults = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var interactions = new ol.Collection;
var kinetic = new ol.Kinetic(-0.005, 0.05, 100);
var altShiftDragRotate = goog.isDef(options.altShiftDragRotate) ? options.altShiftDragRotate : true;
if(altShiftDragRotate) {
interactions.push(new ol.interaction.DragRotate)
}
var doubleClickZoom = goog.isDef(options.doubleClickZoom) ? options.doubleClickZoom : true;
if(doubleClickZoom) {
interactions.push(new ol.interaction.DoubleClickZoom({delta:options.zoomDelta, duration:options.zoomDuration}))
}
var dragPan = goog.isDef(options.dragPan) ? options.dragPan : true;
if(dragPan) {
interactions.push(new ol.interaction.DragPan({kinetic:kinetic}))
}
var pinchRotate = goog.isDef(options.pinchRotate) ? options.pinchRotate : true;
if(pinchRotate) {
interactions.push(new ol.interaction.PinchRotate)
}
var pinchZoom = goog.isDef(options.pinchZoom) ? options.pinchZoom : true;
if(pinchZoom) {
interactions.push(new ol.interaction.PinchZoom({duration:options.zoomDuration}))
}
var keyboard = goog.isDef(options.keyboard) ? options.keyboard : true;
if(keyboard) {
interactions.push(new ol.interaction.KeyboardPan);
interactions.push(new ol.interaction.KeyboardZoom({delta:options.zoomDelta, duration:options.zoomDuration}))
}
var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ? options.mouseWheelZoom : true;
if(mouseWheelZoom) {
interactions.push(new ol.interaction.MouseWheelZoom({duration:options.zoomDuration}))
}
var shiftDragZoom = goog.isDef(options.shiftDragZoom) ? options.shiftDragZoom : true;
if(shiftDragZoom) {
interactions.push(new ol.interaction.DragZoom)
}
return interactions
};
goog.provide("ol.source.Source");
goog.provide("ol.source.State");
goog.require("goog.events.EventType");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Observable");
goog.require("ol.proj");
ol.source.State = {LOADING:0, READY:1, ERROR:2};
ol.source.SourceOptions;
ol.source.Source = function(options) {
goog.base(this);
this.projection_ = ol.proj.get(options.projection);
this.extent_ = goog.isDef(options.extent) ? options.extent : goog.isDef(options.projection) ? this.projection_.getExtent() : null;
this.attributions_ = goog.isDef(options.attributions) ? options.attributions : null;
this.logo_ = options.logo;
this.state_ = goog.isDef(options.state) ? (options.state) : ol.source.State.READY
};
goog.inherits(ol.source.Source, ol.Observable);
ol.source.Source.prototype.forEachFeatureAtPixel = goog.nullFunction;
ol.source.Source.prototype.getAttributions = function() {
return this.attributions_
};
ol.source.Source.prototype.getExtent = function() {
return this.extent_
};
ol.source.Source.prototype.getLogo = function() {
return this.logo_
};
ol.source.Source.prototype.getProjection = function() {
return this.projection_
};
ol.source.Source.prototype.getResolutions = goog.abstractMethod;
ol.source.Source.prototype.getState = function() {
return this.state_
};
ol.source.Source.prototype.setAttributions = function(attributions) {
this.attributions_ = attributions
};
ol.source.Source.prototype.setExtent = function(extent) {
this.extent_ = extent
};
ol.source.Source.prototype.setLogo = function(logo) {
this.logo_ = logo
};
ol.source.Source.prototype.setState = function(state) {
this.state_ = state;
this.dispatchChangeEvent()
};
ol.source.Source.prototype.setProjection = function(projection) {
this.projection_ = projection
};
goog.provide("ol.layer.Base");
goog.provide("ol.layer.LayerProperty");
goog.provide("ol.layer.LayerState");
goog.require("goog.events");
goog.require("goog.math");
goog.require("goog.object");
goog.require("ol.Object");
goog.require("ol.source.State");
ol.layer.LayerProperty = {BRIGHTNESS:"brightness", CONTRAST:"contrast", HUE:"hue", OPACITY:"opacity", SATURATION:"saturation", VISIBLE:"visible", MAX_RESOLUTION:"maxResolution", MIN_RESOLUTION:"minResolution"};
ol.layer.LayerState;
ol.layer.Base = function(options) {
goog.base(this);
var values = goog.object.clone(options);
values.brightness = goog.isDef(values.brightness) ? values.brightness : 0;
values.contrast = goog.isDef(values.contrast) ? values.contrast : 1;
values.hue = goog.isDef(values.hue) ? values.hue : 0;
values.opacity = goog.isDef(values.opacity) ? values.opacity : 1;
values.saturation = goog.isDef(values.saturation) ? values.saturation : 1;
values.visible = goog.isDef(values.visible) ? values.visible : true;
values.maxResolution = goog.isDef(values.maxResolution) ? values.maxResolution : Infinity;
values.minResolution = goog.isDef(values.minResolution) ? values.minResolution : 0;
this.setValues(values)
};
goog.inherits(ol.layer.Base, ol.Object);
ol.layer.Base.prototype.getBrightness = function() {
return(this.get(ol.layer.LayerProperty.BRIGHTNESS))
};
goog.exportProperty(ol.layer.Base.prototype, "getBrightness", ol.layer.Base.prototype.getBrightness);
ol.layer.Base.prototype.getContrast = function() {
return(this.get(ol.layer.LayerProperty.CONTRAST))
};
goog.exportProperty(ol.layer.Base.prototype, "getContrast", ol.layer.Base.prototype.getContrast);
ol.layer.Base.prototype.getHue = function() {
return(this.get(ol.layer.LayerProperty.HUE))
};
goog.exportProperty(ol.layer.Base.prototype, "getHue", ol.layer.Base.prototype.getHue);
ol.layer.Base.prototype.getLayerState = function() {
var brightness = this.getBrightness();
var contrast = this.getContrast();
var hue = this.getHue();
var opacity = this.getOpacity();
var saturation = this.getSaturation();
var sourceState = this.getSourceState();
var visible = this.getVisible();
var maxResolution = this.getMaxResolution();
var minResolution = this.getMinResolution();
return{layer:(this), brightness:goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0, contrast:goog.isDef(contrast) ? Math.max(contrast, 0) : 1, hue:goog.isDef(hue) ? hue : 0, opacity:goog.isDef(opacity) ? goog.math.clamp(opacity, 0, 1) : 1, saturation:goog.isDef(saturation) ? Math.max(saturation, 0) : 1, sourceState:sourceState, visible:goog.isDef(visible) ? !!visible : true, maxResolution:goog.isDef(maxResolution) ? maxResolution : Infinity, minResolution:goog.isDef(minResolution) ?
Math.max(minResolution, 0) : 0}
};
ol.layer.Base.prototype.getLayersArray = goog.abstractMethod;
ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod;
ol.layer.Base.prototype.getMaxResolution = function() {
return(this.get(ol.layer.LayerProperty.MAX_RESOLUTION))
};
goog.exportProperty(ol.layer.Base.prototype, "getMaxResolution", ol.layer.Base.prototype.getMaxResolution);
ol.layer.Base.prototype.getMinResolution = function() {
return(this.get(ol.layer.LayerProperty.MIN_RESOLUTION))
};
goog.exportProperty(ol.layer.Base.prototype, "getMinResolution", ol.layer.Base.prototype.getMinResolution);
ol.layer.Base.prototype.getOpacity = function() {
return(this.get(ol.layer.LayerProperty.OPACITY))
};
goog.exportProperty(ol.layer.Base.prototype, "getOpacity", ol.layer.Base.prototype.getOpacity);
ol.layer.Base.prototype.getSaturation = function() {
return(this.get(ol.layer.LayerProperty.SATURATION))
};
goog.exportProperty(ol.layer.Base.prototype, "getSaturation", ol.layer.Base.prototype.getSaturation);
ol.layer.Base.prototype.getSourceState = goog.abstractMethod;
ol.layer.Base.prototype.getVisible = function() {
return(this.get(ol.layer.LayerProperty.VISIBLE))
};
goog.exportProperty(ol.layer.Base.prototype, "getVisible", ol.layer.Base.prototype.getVisible);
ol.layer.Base.prototype.setBrightness = function(brightness) {
this.set(ol.layer.LayerProperty.BRIGHTNESS, brightness)
};
goog.exportProperty(ol.layer.Base.prototype, "setBrightness", ol.layer.Base.prototype.setBrightness);
ol.layer.Base.prototype.setContrast = function(contrast) {
this.set(ol.layer.LayerProperty.CONTRAST, contrast)
};
goog.exportProperty(ol.layer.Base.prototype, "setContrast", ol.layer.Base.prototype.setContrast);
ol.layer.Base.prototype.setHue = function(hue) {
this.set(ol.layer.LayerProperty.HUE, hue)
};
goog.exportProperty(ol.layer.Base.prototype, "setHue", ol.layer.Base.prototype.setHue);
ol.layer.Base.prototype.setMaxResolution = function(maxResolution) {
this.set(ol.layer.LayerProperty.MAX_RESOLUTION, maxResolution)
};
goog.exportProperty(ol.layer.Base.prototype, "setMaxResolution", ol.layer.Base.prototype.setMaxResolution);
ol.layer.Base.prototype.setMinResolution = function(minResolution) {
this.set(ol.layer.LayerProperty.MIN_RESOLUTION, minResolution)
};
goog.exportProperty(ol.layer.Base.prototype, "setMinResolution", ol.layer.Base.prototype.setMinResolution);
ol.layer.Base.prototype.setOpacity = function(opacity) {
this.set(ol.layer.LayerProperty.OPACITY, opacity)
};
goog.exportProperty(ol.layer.Base.prototype, "setOpacity", ol.layer.Base.prototype.setOpacity);
ol.layer.Base.prototype.setSaturation = function(saturation) {
this.set(ol.layer.LayerProperty.SATURATION, saturation)
};
goog.exportProperty(ol.layer.Base.prototype, "setSaturation", ol.layer.Base.prototype.setSaturation);
ol.layer.Base.prototype.setVisible = function(visible) {
this.set(ol.layer.LayerProperty.VISIBLE, visible)
};
goog.exportProperty(ol.layer.Base.prototype, "setVisible", ol.layer.Base.prototype.setVisible);
goog.provide("ol.layer.Group");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.math");
goog.require("goog.object");
goog.require("ol.Collection");
goog.require("ol.CollectionEvent");
goog.require("ol.CollectionEventType");
goog.require("ol.Object");
goog.require("ol.ObjectEventType");
goog.require("ol.layer.Base");
goog.require("ol.source.State");
ol.layer.GroupProperty = {LAYERS:"layers"};
ol.layer.Group = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var baseOptions = (goog.object.clone(options));
delete baseOptions.layers;
var layers = options.layers;
goog.base(this, baseOptions);
this.listenerKeys_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.GroupProperty.LAYERS), this.handleLayersChanged_, false, this);
if(goog.isDef(layers)) {
if(goog.isArray(layers)) {
layers = new ol.Collection(goog.array.clone(layers))
}else {
goog.asserts.assertInstanceof(layers, ol.Collection);
layers = layers
}
}else {
layers = new ol.Collection
}
this.setLayers(layers)
};
goog.inherits(ol.layer.Group, ol.layer.Base);
ol.layer.Group.prototype.handleLayerChange_ = function() {
if(this.getVisible()) {
this.dispatchChangeEvent()
}
};
ol.layer.Group.prototype.handleLayersChanged_ = function(event) {
if(!goog.isNull(this.listenerKeys_)) {
goog.array.forEach(goog.object.getValues(this.listenerKeys_), goog.events.unlistenByKey);
this.listenerKeys_ = null
}
var layers = this.getLayers();
if(goog.isDefAndNotNull(layers)) {
this.listenerKeys_ = {"add":goog.events.listen(layers, ol.CollectionEventType.ADD, this.handleLayersAdd_, false, this), "remove":goog.events.listen(layers, ol.CollectionEventType.REMOVE, this.handleLayersRemove_, false, this)};
var layersArray = layers.getArray();
var i, ii, layer;
for(i = 0, ii = layersArray.length;i < ii;i++) {
layer = layersArray[i];
this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], this.handleLayerChange_, false, this)
}
}
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) {
var layer = (collectionEvent.element);
this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], this.handleLayerChange_, false, this);
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) {
var layer = (collectionEvent.element);
var key = goog.getUid(layer).toString();
goog.events.unlistenByKey(this.listenerKeys_[key]);
delete this.listenerKeys_[key];
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.getLayers = function() {
return(this.get(ol.layer.GroupProperty.LAYERS))
};
goog.exportProperty(ol.layer.Group.prototype, "getLayers", ol.layer.Group.prototype.getLayers);
ol.layer.Group.prototype.setLayers = function(layers) {
this.set(ol.layer.GroupProperty.LAYERS, layers)
};
goog.exportProperty(ol.layer.Group.prototype, "setLayers", ol.layer.Group.prototype.setLayers);
ol.layer.Group.prototype.getLayersArray = function(opt_array) {
var array = goog.isDef(opt_array) ? opt_array : [];
this.getLayers().forEach(function(layer) {
layer.getLayersArray(array)
});
return array
};
ol.layer.Group.prototype.getLayerStatesArray = function(opt_states) {
var states = goog.isDef(opt_states) ? opt_states : [];
var pos = states.length;
this.getLayers().forEach(function(layer) {
layer.getLayerStatesArray(states)
});
var ownLayerState = this.getLayerState();
var i, ii, layerState;
for(i = pos, ii = states.length;i < ii;i++) {
layerState = states[i];
layerState.brightness = goog.math.clamp(layerState.brightness + ownLayerState.brightness, -1, 1);
layerState.contrast *= ownLayerState.contrast;
layerState.hue += ownLayerState.hue;
layerState.opacity *= ownLayerState.opacity;
layerState.saturation *= ownLayerState.saturation;
layerState.visible = layerState.visible && ownLayerState.visible;
layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution);
layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution)
}
return states
};
ol.layer.Group.prototype.getSourceState = function() {
return ol.source.State.READY
};
goog.provide("ol.proj.EPSG3857");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.math");
goog.require("ol.proj");
goog.require("ol.proj.Projection");
goog.require("ol.proj.Units");
ol.proj.EPSG3857 = function(code) {
goog.base(this, {code:code, units:ol.proj.Units.METERS, extent:ol.proj.EPSG3857.EXTENT, global:true})
};
goog.inherits(ol.proj.EPSG3857, ol.proj.Projection);
ol.proj.EPSG3857.RADIUS = 6378137;
ol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS;
ol.proj.EPSG3857.EXTENT = [-ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE];
ol.proj.EPSG3857.CODES = ["EPSG:3857", "EPSG:102100", "EPSG:102113", "EPSG:900913", "urn:ogc:def:crs:EPSG:6.18:3:3857", "http://www.opengis.net/gml/srs/epsg.xml#3857"];
ol.proj.EPSG3857.PROJECTIONS = goog.array.map(ol.proj.EPSG3857.CODES, function(code) {
return new ol.proj.EPSG3857(code)
});
ol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
for(var i = 0;i < length;i += dimension) {
output[i] = ol.proj.EPSG3857.RADIUS * Math.PI * input[i] / 180;
output[i + 1] = ol.proj.EPSG3857.RADIUS * Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360))
}
return output
};
ol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
for(var i = 0;i < length;i += dimension) {
output[i] = 180 * input[i] / (ol.proj.EPSG3857.RADIUS * Math.PI);
output[i + 1] = 360 * Math.atan(Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90
}
return output
};
ol.proj.EPSG3857.prototype.getPointResolution = function(resolution, point) {
return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS)
};
goog.provide("ol.proj.EPSG4326");
goog.require("ol.proj");
goog.require("ol.proj.Projection");
goog.require("ol.proj.Units");
ol.proj.EPSG4326 = function(code, opt_axisOrientation) {
goog.base(this, {code:code, units:ol.proj.Units.DEGREES, extent:ol.proj.EPSG4326.EXTENT, axisOrientation:opt_axisOrientation, global:true})
};
goog.inherits(ol.proj.EPSG4326, ol.proj.Projection);
ol.proj.EPSG4326.EXTENT = [-180, -90, 180, 90];
ol.proj.EPSG4326.PROJECTIONS = [new ol.proj.EPSG4326("CRS:84"), new ol.proj.EPSG4326("EPSG:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:1.3:CRS84"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:2:84"), new ol.proj.EPSG4326("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu"), new ol.proj.EPSG4326("urn:x-ogc:def:crs:EPSG:4326", "neu")];
ol.proj.EPSG4326.prototype.getPointResolution = function(resolution, point) {
return resolution
};
goog.provide("ol.proj.common");
goog.require("ol.proj");
goog.require("ol.proj.EPSG3857");
goog.require("ol.proj.EPSG4326");
ol.proj.common.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS);
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, ol.proj.EPSG3857.PROJECTIONS, ol.proj.EPSG3857.fromEPSG4326, ol.proj.EPSG3857.toEPSG4326)
};
goog.provide("ol.layer.Layer");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.layer.Base");
goog.require("ol.source.Source");
ol.layer.Layer = function(options) {
var baseOptions = goog.object.clone(options);
delete baseOptions.source;
goog.base(this, (baseOptions));
this.source_ = options.source;
goog.events.listen(this.source_, goog.events.EventType.CHANGE, this.handleSourceChange_, false, this)
};
goog.inherits(ol.layer.Layer, ol.layer.Base);
ol.layer.Layer.prototype.getLayersArray = function(opt_array) {
var array = goog.isDef(opt_array) ? opt_array : [];
array.push(this);
return array
};
ol.layer.Layer.prototype.getLayerStatesArray = function(opt_states) {
var states = goog.isDef(opt_states) ? opt_states : [];
states.push(this.getLayerState());
return states
};
ol.layer.Layer.prototype.getSource = function() {
return this.source_
};
ol.layer.Layer.prototype.getSourceState = function() {
return this.getSource().getState()
};
ol.layer.Layer.prototype.handleSourceChange_ = function() {
this.dispatchChangeEvent()
};
goog.provide("ol.ImageBase");
goog.provide("ol.ImageState");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("ol.Attribution");
goog.require("ol.Extent");
ol.ImageState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3};
ol.ImageBase = function(extent, resolution, pixelRatio, state, attributions) {
goog.base(this);
this.attributions_ = attributions;
this.extent_ = extent;
this.pixelRatio_ = pixelRatio;
this.resolution_ = resolution;
this.state = state
};
goog.inherits(ol.ImageBase, goog.events.EventTarget);
ol.ImageBase.prototype.dispatchChangeEvent = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.ImageBase.prototype.getAttributions = function() {
return this.attributions_
};
ol.ImageBase.prototype.getExtent = function() {
return this.extent_
};
ol.ImageBase.prototype.getImageElement = goog.abstractMethod;
ol.ImageBase.prototype.getPixelRatio = function() {
return this.pixelRatio_
};
ol.ImageBase.prototype.getResolution = function() {
return this.resolution_
};
ol.ImageBase.prototype.getState = function() {
return this.state
};
ol.ImageBase.prototype.load = goog.abstractMethod;
goog.provide("ol.Image");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.ImageBase");
goog.require("ol.ImageState");
ol.Image = function(extent, resolution, pixelRatio, attributions, src, crossOrigin) {
goog.base(this, extent, resolution, pixelRatio, ol.ImageState.IDLE, attributions);
this.src_ = src;
this.image_ = new Image;
if(!goog.isNull(crossOrigin)) {
this.image_.crossOrigin = crossOrigin
}
this.imageByContext_ = {};
this.imageListenerKeys_ = null;
this.state = ol.ImageState.IDLE
};
goog.inherits(ol.Image, ol.ImageBase);
ol.Image.prototype.getImageElement = function(opt_context) {
if(goog.isDef(opt_context)) {
var image;
var key = goog.getUid(opt_context);
if(key in this.imageByContext_) {
return this.imageByContext_[key]
}else {
if(goog.object.isEmpty(this.imageByContext_)) {
image = this.image_
}else {
image = (this.image_.cloneNode(false))
}
}
this.imageByContext_[key] = image;
return image
}else {
return this.image_
}
};
ol.Image.prototype.handleImageError_ = function() {
this.state = ol.ImageState.ERROR;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.Image.prototype.handleImageLoad_ = function() {
this.state = ol.ImageState.LOADED;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.Image.prototype.load = function() {
if(this.state == ol.ImageState.IDLE) {
this.state = ol.ImageState.LOADING;
goog.asserts.assert(goog.isNull(this.imageListenerKeys_));
this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)];
this.image_.src = this.src_
}
};
ol.Image.prototype.unlistenImage_ = function() {
goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));
goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey);
this.imageListenerKeys_ = null
};
goog.provide("ol.tilegrid.TileGrid");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.Coordinate");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.proj.METERS_PER_UNIT");
goog.require("ol.proj.Projection");
goog.require("ol.proj.Units");
ol.tilegrid.TileGrid = function(options) {
this.minZoom = goog.isDef(options.minZoom) ? options.minZoom : 0;
this.resolutions_ = options.resolutions;
goog.asserts.assert(goog.array.isSorted(this.resolutions_, function(a, b) {
return b - a
}, true));
this.maxZoom = this.resolutions_.length - 1;
this.origin_ = goog.isDef(options.origin) ? options.origin : null;
this.origins_ = null;
if(goog.isDef(options.origins)) {
this.origins_ = options.origins;
goog.asserts.assert(this.origins_.length == this.maxZoom + 1)
}
goog.asserts.assert(goog.isNull(this.origin_) && !goog.isNull(this.origins_) || !goog.isNull(this.origin_) && goog.isNull(this.origins_));
this.tileSizes_ = null;
if(goog.isDef(options.tileSizes)) {
this.tileSizes_ = options.tileSizes;
goog.asserts.assert(this.tileSizes_.length == this.maxZoom + 1)
}
this.tileSize_ = goog.isDef(options.tileSize) ? options.tileSize : goog.isNull(this.tileSizes_) ? ol.DEFAULT_TILE_SIZE : undefined;
goog.asserts.assert(!goog.isDef(this.tileSize_) && !goog.isNull(this.tileSizes_) || goog.isDef(this.tileSize_) && goog.isNull(this.tileSizes_))
};
ol.tilegrid.TileGrid.tmpTileCoord_ = new ol.TileCoord(0, 0, 0);
ol.tilegrid.TileGrid.prototype.createTileCoordTransform = goog.abstractMethod;
ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) {
var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
var z = tileCoord.z - 1;
while(z >= this.minZoom) {
if(callback.call(opt_this, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) {
return true
}
--z
}
return false
};
ol.tilegrid.TileGrid.prototype.getMaxZoom = function() {
return this.maxZoom
};
ol.tilegrid.TileGrid.prototype.getMinZoom = function() {
return this.minZoom
};
ol.tilegrid.TileGrid.prototype.getOrigin = function(z) {
if(!goog.isNull(this.origin_)) {
return this.origin_
}else {
goog.asserts.assert(!goog.isNull(this.origins_));
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.origins_[z]
}
};
ol.tilegrid.TileGrid.prototype.getResolution = function(z) {
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.resolutions_[z]
};
ol.tilegrid.TileGrid.prototype.getResolutions = function() {
return this.resolutions_
};
ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) {
if(tileCoord.z < this.maxZoom) {
var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord.z + 1, opt_tileRange)
}else {
return null
}
};
ol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_extent) {
var origin = this.getOrigin(z);
var resolution = this.getResolution(z);
var tileSize = this.getTileSize(z);
var minX = origin[0] + tileRange.minX * tileSize * resolution;
var maxX = origin[0] + (tileRange.maxX + 1) * tileSize * resolution;
var minY = origin[1] + tileRange.minY * tileSize * resolution;
var maxY = origin[1] + (tileRange.maxY + 1) * tileSize * resolution;
return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent)
};
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) {
var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;
this.getTileCoordForXYAndResolution_(extent[0], extent[1], resolution, false, tileCoord);
var minX = tileCoord.x;
var minY = tileCoord.y;
this.getTileCoordForXYAndResolution_(extent[2], extent[3], resolution, true, tileCoord);
return ol.TileRange.createOrUpdate(minX, tileCoord.x, minY, tileCoord.y, opt_tileRange)
};
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {
var resolution = this.getResolution(z);
return this.getTileRangeForExtentAndResolution(extent, resolution, opt_tileRange)
};
ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) {
var origin = this.getOrigin(tileCoord.z);
var resolution = this.getResolution(tileCoord.z);
var tileSize = this.getTileSize(tileCoord.z);
return[origin[0] + (tileCoord.x + 0.5) * tileSize * resolution, origin[1] + (tileCoord.y + 0.5) * tileSize * resolution]
};
ol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) {
var origin = this.getOrigin(tileCoord.z);
var resolution = this.getResolution(tileCoord.z);
var tileSize = this.getTileSize(tileCoord.z);
var minX = origin[0] + tileCoord.x * tileSize * resolution;
var minY = origin[1] + tileCoord.y * tileSize * resolution;
var maxX = minX + tileSize * resolution;
var maxY = minY + tileSize * resolution;
return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coordinate, resolution, opt_tileCoord) {
return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {
var z = this.getZForResolution(resolution);
var scale = resolution / this.getResolution(z);
var origin = this.getOrigin(z);
var tileSize = this.getTileSize(z);
var tileCoordX = scale * (x - origin[0]) / (resolution * tileSize);
var tileCoordY = scale * (y - origin[1]) / (resolution * tileSize);
if(reverseIntersectionPolicy) {
tileCoordX = Math.ceil(tileCoordX) - 1;
tileCoordY = Math.ceil(tileCoordY) - 1
}else {
tileCoordX = Math.floor(tileCoordX);
tileCoordY = Math.floor(tileCoordY)
}
return ol.TileCoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {
var resolution = this.getResolution(z);
return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) {
goog.asserts.assert(this.minZoom <= tileCoord.z && tileCoord.z <= this.maxZoom);
return this.resolutions_[tileCoord.z]
};
ol.tilegrid.TileGrid.prototype.getTileSize = function(z) {
if(goog.isDef(this.tileSize_)) {
return this.tileSize_
}else {
goog.asserts.assert(!goog.isNull(this.tileSizes_));
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.tileSizes_[z]
}
};
ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) {
return ol.array.linearFindNearest(this.resolutions_, resolution, 0)
};
ol.tilegrid.getForProjection = function(projection) {
var tileGrid = projection.getDefaultTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.createForProjection(projection);
projection.setDefaultTileGrid(tileGrid)
}
return tileGrid
};
ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize) {
var projectionExtent = projection.getExtent();
var size = goog.isNull(projectionExtent) ? 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / projection.getMetersPerUnit() : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]);
var maxZoom = goog.isDef(opt_maxZoom) ? opt_maxZoom : ol.DEFAULT_MAX_ZOOM;
var tileSize = goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE;
var resolutions = new Array(maxZoom + 1);
var maxResolution = size / tileSize;
for(var z = 0, zz = resolutions.length;z < zz;++z) {
resolutions[z] = maxResolution / Math.pow(2, z)
}
return new ol.tilegrid.TileGrid({origin:goog.isNull(projectionExtent) ? [0, 0] : ol.extent.getBottomLeft(projectionExtent), resolutions:resolutions, tileSize:tileSize})
};
goog.provide("ol.source.Tile");
goog.provide("ol.source.TileOptions");
goog.require("goog.functions");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.source.Source");
goog.require("ol.tilegrid.TileGrid");
ol.source.TileOptions;
ol.source.Tile = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection});
this.opaque_ = goog.isDef(options.opaque) ? options.opaque : false;
this.tileGrid = goog.isDef(options.tileGrid) ? options.tileGrid : null
};
goog.inherits(ol.source.Tile, ol.source.Source);
ol.source.Tile.prototype.canExpireCache = goog.functions.FALSE;
ol.source.Tile.prototype.expireCache = goog.abstractMethod;
ol.source.Tile.prototype.findLoadedTiles = function(loadedTilesByZ, getTileIfLoaded, z, tileRange) {
var fullyCovered = true;
var tile, tileCoordKey, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tileCoordKey = this.getKeyZXY(z, x, y);
if(loadedTilesByZ[z] && loadedTilesByZ[z][tileCoordKey]) {
continue
}
tile = getTileIfLoaded(z, x, y);
if(!goog.isNull(tile)) {
if(!loadedTilesByZ[z]) {
loadedTilesByZ[z] = {}
}
loadedTilesByZ[z][tileCoordKey] = tile
}else {
fullyCovered = false
}
}
}
return fullyCovered
};
ol.source.Tile.prototype.getGutter = function() {
return 0
};
ol.source.Tile.prototype.getKeyZXY = ol.TileCoord.getKeyZXY;
ol.source.Tile.prototype.getOpaque = function() {
return this.opaque_
};
ol.source.Tile.prototype.getResolutions = function() {
return this.tileGrid.getResolutions()
};
ol.source.Tile.prototype.getTile = goog.abstractMethod;
ol.source.Tile.prototype.getTileGrid = function() {
return this.tileGrid
};
ol.source.Tile.prototype.getTileGridForProjection = function(projection) {
if(goog.isNull(this.tileGrid)) {
return ol.tilegrid.getForProjection(projection)
}else {
return this.tileGrid
}
};
ol.source.Tile.prototype.getTilePixelSize = function(z, pixelRatio, projection) {
var tileGrid = this.getTileGridForProjection(projection);
return tileGrid.getTileSize(z)
};
ol.source.Tile.prototype.useTile = goog.nullFunction;
goog.provide("ol.renderer.Layer");
goog.require("goog.Disposable");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.Tile");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.layer.Layer");
goog.require("ol.layer.LayerState");
goog.require("ol.source.Source");
goog.require("ol.source.State");
goog.require("ol.source.Tile");
ol.renderer.Layer = function(mapRenderer, layer) {
goog.base(this);
this.mapRenderer_ = mapRenderer;
this.layer_ = layer
};
goog.inherits(ol.renderer.Layer, goog.Disposable);
ol.renderer.Layer.prototype.forEachFeatureAtPixel = goog.nullFunction;
ol.renderer.Layer.prototype.getLayer = function() {
return this.layer_
};
ol.renderer.Layer.prototype.getMap = function() {
return this.mapRenderer_.getMap()
};
ol.renderer.Layer.prototype.getMapRenderer = function() {
return this.mapRenderer_
};
ol.renderer.Layer.prototype.handleImageChange = function(event) {
var image = (event.target);
if(image.getState() === ol.ImageState.LOADED) {
this.renderIfReadyAndVisible()
}
};
ol.renderer.Layer.prototype.prepareFrame = goog.abstractMethod;
ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {
var layer = this.getLayer();
if(layer.getVisible() && layer.getSourceState() == ol.source.State.READY) {
this.getMap().render()
}
};
ol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) {
if(tileSource.canExpireCache()) {
frameState.postRenderFunctions.push(goog.partial(function(tileSource, map, frameState) {
var tileSourceKey = goog.getUid(tileSource).toString();
tileSource.expireCache(frameState.usedTiles[tileSourceKey])
}, tileSource))
}
};
ol.renderer.Layer.prototype.updateAttributions = function(attributionsSet, attributions) {
if(goog.isDefAndNotNull(attributions)) {
var attribution, i, ii;
for(i = 0, ii = attributions.length;i < ii;++i) {
attribution = attributions[i];
attributionsSet[goog.getUid(attribution).toString()] = attribution
}
}
};
ol.renderer.Layer.prototype.updateLogos = function(frameState, source) {
var logo = source.getLogo();
if(goog.isDef(logo)) {
frameState.logos[logo] = ""
}
};
ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, tileRange) {
var tileSourceKey = goog.getUid(tileSource).toString();
var zKey = z.toString();
if(tileSourceKey in usedTiles) {
if(zKey in usedTiles[tileSourceKey]) {
usedTiles[tileSourceKey][zKey].extend(tileRange)
}else {
usedTiles[tileSourceKey][zKey] = tileRange
}
}else {
usedTiles[tileSourceKey] = {};
usedTiles[tileSourceKey][zKey] = tileRange
}
};
ol.renderer.Layer.prototype.createGetTileIfLoadedFunction = function(isLoadedFunction, tileSource, pixelRatio, projection) {
return function(z, x, y) {
var tile = tileSource.getTile(z, x, y, pixelRatio, projection);
return isLoadedFunction(tile) ? tile : null
}
};
ol.renderer.Layer.prototype.snapCenterToPixel = function(center, resolution, size) {
return[resolution * (Math.round(center[0] / resolution) + size[0] % 2 / 2), resolution * (Math.round(center[1] / resolution) + size[1] % 2 / 2)]
};
ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, tileGrid, pixelRatio, projection, extent, currentZ, preload, opt_tileCallback, opt_this) {
var tileSourceKey = goog.getUid(tileSource).toString();
if(!(tileSourceKey in frameState.wantedTiles)) {
frameState.wantedTiles[tileSourceKey] = {}
}
var wantedTiles = frameState.wantedTiles[tileSourceKey];
var tileQueue = frameState.tileQueue;
var minZoom = tileGrid.getMinZoom();
var tile, tileRange, tileResolution, x, y, z;
if(!goog.isDef(preload)) {
preload = 0
}
for(z = currentZ;z >= minZoom;--z) {
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
tileResolution = tileGrid.getResolution(z);
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
if(currentZ - z <= preload) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
if(tile.getState() == ol.TileState.IDLE) {
wantedTiles[tile.tileCoord.toString()] = true;
if(!tileQueue.isKeyQueued(tile.getKey())) {
tileQueue.enqueue([tile, tileSourceKey, tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution])
}
}
if(goog.isDef(opt_tileCallback)) {
opt_tileCallback.call(opt_this, tile)
}
}else {
tileSource.useTile(z, x, y)
}
}
}
}
};
goog.provide("ol.style.Icon");
goog.provide("ol.style.IconAnchorOrigin");
goog.provide("ol.style.IconAnchorUnits");
goog.provide("ol.style.IconImageCache");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("ol.dom");
goog.require("ol.style.Image");
goog.require("ol.style.ImageState");
ol.style.IconAnchorOrigin = {BOTTOM_LEFT:"bottom-left", BOTTOM_RIGHT:"bottom-right", TOP_LEFT:"top-left", TOP_RIGHT:"top-right"};
ol.style.IconAnchorUnits = {FRACTION:"fraction", PIXELS:"pixels"};
ol.style.Icon = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.anchor_ = goog.isDef(options.anchor) ? options.anchor : [0.5, 0.5];
this.anchorOrigin_ = goog.isDef(options.anchorOrigin) ? options.anchorOrigin : ol.style.IconAnchorOrigin.TOP_LEFT;
this.anchorXUnits_ = goog.isDef(options.anchorXUnits) ? options.anchorXUnits : ol.style.IconAnchorUnits.FRACTION;
this.anchorYUnits_ = goog.isDef(options.anchorYUnits) ? options.anchorYUnits : ol.style.IconAnchorUnits.FRACTION;
var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.iconImage_ = ol.style.IconImage_.get(options.src, crossOrigin);
this.size_ = goog.isDef(options.size) ? options.size : null;
var opacity = goog.isDef(options.opacity) ? options.opacity : 1;
var rotateWithView = goog.isDef(options.rotateWithView) ? options.rotateWithView : false;
var rotation = goog.isDef(options.rotation) ? options.rotation : 0;
var scale = goog.isDef(options.scale) ? options.scale : 1;
goog.base(this, {opacity:opacity, rotation:rotation, scale:scale, snapToPixel:undefined, rotateWithView:rotateWithView})
};
goog.inherits(ol.style.Icon, ol.style.Image);
ol.style.Icon.prototype.getAnchor = function() {
var anchor = this.anchor_;
var size = this.getSize();
if(this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION || this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) {
if(goog.isNull(size)) {
return null
}
anchor = this.anchor_.slice();
if(this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION) {
anchor[0] *= size[0]
}
if(this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) {
anchor[1] *= size[1]
}
}
if(this.anchorOrigin_ != ol.style.IconAnchorOrigin.TOP_LEFT) {
if(goog.isNull(size)) {
return null
}
if(anchor === this.anchor_) {
anchor = this.anchor_.slice()
}
if(this.anchorOrigin_ == ol.style.IconAnchorOrigin.TOP_RIGHT || this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) {
anchor[0] = -anchor[0] + size[0]
}
if(this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_LEFT || this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) {
anchor[1] = -anchor[1] + size[1]
}
}
return anchor
};
ol.style.Icon.prototype.getImage = function(pixelRatio) {
return this.iconImage_.getImage(pixelRatio)
};
ol.style.Icon.prototype.getImageState = function() {
return this.iconImage_.getImageState()
};
ol.style.Icon.prototype.getHitDetectionImage = function(pixelRatio) {
return this.iconImage_.getHitDetectionImage(pixelRatio)
};
ol.style.Icon.prototype.getSrc = function() {
return this.iconImage_.getSrc()
};
ol.style.Icon.prototype.getSize = function() {
return goog.isNull(this.size_) ? this.iconImage_.getSize() : this.size_
};
ol.style.Icon.prototype.listenImageChange = function(listener, thisArg) {
return goog.events.listen(this.iconImage_, goog.events.EventType.CHANGE, listener, false, thisArg)
};
ol.style.Icon.prototype.load = function() {
this.iconImage_.load()
};
ol.style.Icon.prototype.unlistenImageChange = function(listener, thisArg) {
goog.events.unlisten(this.iconImage_, goog.events.EventType.CHANGE, listener, false, thisArg)
};
ol.style.IconImage_ = function(src, crossOrigin) {
goog.base(this);
this.hitDetectionImage_ = null;
this.image_ = new Image;
if(!goog.isNull(crossOrigin)) {
this.image_.crossOrigin = crossOrigin
}
this.imageListenerKeys_ = null;
this.imageState_ = ol.style.ImageState.IDLE;
this.size_ = null;
this.src_ = src;
this.tainting_ = false
};
goog.inherits(ol.style.IconImage_, goog.events.EventTarget);
ol.style.IconImage_.get = function(src, crossOrigin) {
var iconImageCache = ol.style.IconImageCache.getInstance();
var iconImage = iconImageCache.get(src, crossOrigin);
if(goog.isNull(iconImage)) {
iconImage = new ol.style.IconImage_(src, crossOrigin);
iconImageCache.set(src, crossOrigin, iconImage)
}
return iconImage
};
ol.style.IconImage_.prototype.determineTainting_ = function() {
var context = ol.dom.createCanvasContext2D(1, 1);
context.drawImage(this.image_, 0, 0);
try {
context.getImageData(0, 0, 1, 1)
}catch(e) {
this.tainting_ = true
}
};
ol.style.IconImage_.prototype.dispatchChangeEvent_ = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.style.IconImage_.prototype.handleImageError_ = function() {
this.imageState_ = ol.style.ImageState.ERROR;
this.unlistenImage_();
this.dispatchChangeEvent_()
};
ol.style.IconImage_.prototype.handleImageLoad_ = function() {
this.imageState_ = ol.style.ImageState.LOADED;
this.size_ = [this.image_.width, this.image_.height];
this.unlistenImage_();
this.determineTainting_();
this.dispatchChangeEvent_()
};
ol.style.IconImage_.prototype.getImage = function(pixelRatio) {
return this.image_
};
ol.style.IconImage_.prototype.getImageState = function() {
return this.imageState_
};
ol.style.IconImage_.prototype.getHitDetectionImage = function(pixelRatio) {
if(goog.isNull(this.hitDetectionImage_)) {
if(this.tainting_) {
var width = this.size_[0];
var height = this.size_[1];
var context = ol.dom.createCanvasContext2D(width, height);
context.fillRect(0, 0, width, height);
this.hitDetectionImage_ = context.canvas
}else {
this.hitDetectionImage_ = this.image_
}
}
return this.hitDetectionImage_
};
ol.style.IconImage_.prototype.getSize = function() {
return this.size_
};
ol.style.IconImage_.prototype.getSrc = function() {
return this.src_
};
ol.style.IconImage_.prototype.load = function() {
if(this.imageState_ == ol.style.ImageState.IDLE) {
goog.asserts.assert(goog.isDef(this.src_));
goog.asserts.assert(goog.isNull(this.imageListenerKeys_));
this.imageState_ = ol.style.ImageState.LOADING;
this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)];
try {
this.image_.src = this.src_
}catch(e) {
this.handleImageError_()
}
}
};
ol.style.IconImage_.prototype.unlistenImage_ = function() {
goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));
goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey);
this.imageListenerKeys_ = null
};
ol.style.IconImageCache = function() {
this.cache_ = {};
this.cacheSize_ = 0;
this.maxCacheSize_ = 32
};
goog.addSingletonGetter(ol.style.IconImageCache);
ol.style.IconImageCache.getKey = function(src, crossOrigin) {
goog.asserts.assert(goog.isDef(crossOrigin));
return crossOrigin + ":" + src
};
ol.style.IconImageCache.prototype.clear = function() {
this.cache_ = {};
this.cacheSize_ = 0
};
ol.style.IconImageCache.prototype.expire = function() {
if(this.cacheSize_ > this.maxCacheSize_) {
var i = 0;
var key, iconImage;
for(key in this.cache_) {
iconImage = this.cache_[key];
if((i++ & 3) === 0 && !goog.events.hasListener(iconImage)) {
delete this.cache_[key];
--this.cacheSize_
}
}
}
};
ol.style.IconImageCache.prototype.get = function(src, crossOrigin) {
var key = ol.style.IconImageCache.getKey(src, crossOrigin);
return key in this.cache_ ? this.cache_[key] : null
};
ol.style.IconImageCache.prototype.set = function(src, crossOrigin, iconImage) {
var key = ol.style.IconImageCache.getKey(src, crossOrigin);
this.cache_[key] = iconImage;
++this.cacheSize_
};
goog.provide("ol.vec.Mat4");
goog.require("goog.vec.Mat4");
ol.vec.Mat4.makeTransform2D = function(mat, translateX1, translateY1, scaleX, scaleY, rotation, translateX2, translateY2) {
goog.vec.Mat4.makeIdentity(mat);
if(translateX1 !== 0 || translateY1 !== 0) {
goog.vec.Mat4.translate(mat, translateX1, translateY1, 0)
}
if(scaleX != 1 || scaleY != 1) {
goog.vec.Mat4.scale(mat, scaleX, scaleY, 1)
}
if(rotation !== 0) {
goog.vec.Mat4.rotateZ(mat, rotation)
}
if(translateX2 !== 0 || translateY2 !== 0) {
goog.vec.Mat4.translate(mat, translateX2, translateY2, 0)
}
return mat
};
ol.vec.Mat4.equals2D = function(mat1, mat2) {
return goog.vec.Mat4.getElement(mat1, 0, 0) == goog.vec.Mat4.getElement(mat2, 0, 0) && goog.vec.Mat4.getElement(mat1, 1, 0) == goog.vec.Mat4.getElement(mat2, 1, 0) && goog.vec.Mat4.getElement(mat1, 0, 1) == goog.vec.Mat4.getElement(mat2, 0, 1) && goog.vec.Mat4.getElement(mat1, 1, 1) == goog.vec.Mat4.getElement(mat2, 1, 1) && goog.vec.Mat4.getElement(mat1, 0, 3) == goog.vec.Mat4.getElement(mat2, 0, 3) && goog.vec.Mat4.getElement(mat1, 1, 3) == goog.vec.Mat4.getElement(mat2, 1, 3)
};
ol.vec.Mat4.multVec2 = function(mat, vec, resultVec) {
var m00 = goog.vec.Mat4.getElement(mat, 0, 0);
var m10 = goog.vec.Mat4.getElement(mat, 1, 0);
var m01 = goog.vec.Mat4.getElement(mat, 0, 1);
var m11 = goog.vec.Mat4.getElement(mat, 1, 1);
var m03 = goog.vec.Mat4.getElement(mat, 0, 3);
var m13 = goog.vec.Mat4.getElement(mat, 1, 3);
var x = vec[0], y = vec[1];
resultVec[0] = m00 * x + m01 * y + m03;
resultVec[1] = m10 * x + m11 * y + m13;
return resultVec
};
goog.provide("ol.renderer.Map");
goog.require("goog.Disposable");
goog.require("goog.asserts");
goog.require("goog.dispose");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
goog.require("ol.style.IconImageCache");
goog.require("ol.vec.Mat4");
ol.renderer.Map = function(container, map) {
goog.base(this);
this.map_ = map;
this.layerRenderers_ = {}
};
goog.inherits(ol.renderer.Map, goog.Disposable);
ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
var view2DState = frameState.view2DState;
var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix;
goog.asserts.assert(!goog.isNull(coordinateToPixelMatrix));
ol.vec.Mat4.makeTransform2D(coordinateToPixelMatrix, frameState.size[0] / 2, frameState.size[1] / 2, 1 / view2DState.resolution, -1 / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]);
var inverted = goog.vec.Mat4.invert(coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix);
goog.asserts.assert(inverted)
};
ol.renderer.Map.prototype.createLayerRenderer = function(layer) {
return new ol.renderer.Layer(this, layer)
};
ol.renderer.Map.prototype.disposeInternal = function() {
goog.object.forEach(this.layerRenderers_, function(layerRenderer) {
goog.dispose(layerRenderer)
});
goog.base(this, "disposeInternal")
};
ol.renderer.Map.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg, layerFilter, thisArg2) {
var layerStates = this.map_.getLayerGroup().getLayerStatesArray();
var numLayers = layerStates.length;
var i;
for(i = numLayers - 1;i >= 0;--i) {
var layerState = layerStates[i];
var layer = layerState.layer;
if(layerState.visible && layerFilter.call(thisArg2, layer)) {
var layerRenderer = this.getLayerRenderer(layer);
var result = layerRenderer.forEachFeatureAtPixel(coordinate, frameState, callback, thisArg);
if(result) {
return result
}
}
}
return undefined
};
ol.renderer.Map.prototype.getLayerRenderer = function(layer) {
var layerKey = goog.getUid(layer).toString();
if(layerKey in this.layerRenderers_) {
return this.layerRenderers_[layerKey]
}else {
var layerRenderer = this.createLayerRenderer(layer);
this.layerRenderers_[layerKey] = layerRenderer;
return layerRenderer
}
};
ol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) {
goog.asserts.assert(layerKey in this.layerRenderers_);
return this.layerRenderers_[layerKey]
};
ol.renderer.Map.prototype.getLayerRenderers = function() {
return this.layerRenderers_
};
ol.renderer.Map.prototype.getMap = function() {
return this.map_
};
ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
goog.asserts.assert(layerKey in this.layerRenderers_);
var layerRenderer = this.layerRenderers_[layerKey];
delete this.layerRenderers_[layerKey];
return layerRenderer
};
ol.renderer.Map.prototype.renderFrame = goog.nullFunction;
ol.renderer.Map.prototype.removeUnusedLayerRenderers_ = function(map, frameState) {
var layerKey;
for(layerKey in this.layerRenderers_) {
if(goog.isNull(frameState) || !(layerKey in frameState.layerStates)) {
goog.dispose(this.removeLayerRendererByKey_(layerKey))
}
}
};
ol.renderer.Map.prototype.scheduleExpireIconCache = function(frameState) {
frameState.postRenderFunctions.push(function(map, frameState) {
ol.style.IconImageCache.getInstance().expire()
})
};
ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = function(frameState) {
var layerKey;
for(layerKey in this.layerRenderers_) {
if(!(layerKey in frameState.layerStates)) {
frameState.postRenderFunctions.push(goog.bind(this.removeUnusedLayerRenderers_, this));
return
}
}
};
goog.provide("ol.layer.Image");
goog.require("ol.layer.Layer");
ol.layer.Image = function(options) {
goog.base(this, options)
};
goog.inherits(ol.layer.Image, ol.layer.Layer);
goog.provide("ol.layer.Tile");
goog.require("ol.layer.Layer");
ol.layer.TileProperty = {PRELOAD:"preload", USE_INTERIM_TILES_ON_ERROR:"useInterimTilesOnError"};
ol.layer.Tile = function(options) {
goog.base(this, options)
};
goog.inherits(ol.layer.Tile, ol.layer.Layer);
ol.layer.Tile.prototype.getPreload = function() {
return(this.get(ol.layer.TileProperty.PRELOAD))
};
goog.exportProperty(ol.layer.Tile.prototype, "getPreload", ol.layer.Tile.prototype.getPreload);
ol.layer.Tile.prototype.setPreload = function(preload) {
this.set(ol.layer.TileProperty.PRELOAD, preload)
};
goog.exportProperty(ol.layer.Tile.prototype, "setPreload", ol.layer.Tile.prototype.setPreload);
ol.layer.Tile.prototype.getUseInterimTilesOnError = function() {
return(this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR))
};
goog.exportProperty(ol.layer.Tile.prototype, "getUseInterimTilesOnError", ol.layer.Tile.prototype.getUseInterimTilesOnError);
ol.layer.Tile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) {
this.set(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError)
};
goog.exportProperty(ol.layer.Tile.prototype, "setUseInterimTilesOnError", ol.layer.Tile.prototype.setUseInterimTilesOnError);
goog.provide("ol.layer.Vector");
goog.require("goog.array");
goog.require("goog.object");
goog.require("ol.feature");
goog.require("ol.layer.Layer");
ol.layer.VectorProperty = {RENDER_ORDER:"renderOrder"};
ol.layer.Vector = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : ({});
var baseOptions = goog.object.clone(options);
delete baseOptions.style;
goog.base(this, (baseOptions));
this.style_ = null;
this.styleFunction_ = undefined;
if(goog.isDef(options.style)) {
this.setStyle(options.style)
}
};
goog.inherits(ol.layer.Vector, ol.layer.Layer);
ol.layer.Vector.prototype.getRenderOrder = function() {
return(this.get(ol.layer.VectorProperty.RENDER_ORDER))
};
ol.layer.Vector.prototype.getStyle = function() {
return this.style_
};
ol.layer.Vector.prototype.getStyleFunction = function() {
return this.styleFunction_
};
ol.layer.Vector.prototype.setRenderOrder = function(renderOrder) {
this.set(ol.layer.VectorProperty.RENDER_ORDER, renderOrder)
};
ol.layer.Vector.prototype.setStyle = function(style) {
this.style_ = style;
this.styleFunction_ = ol.feature.createStyleFunction(style);
this.dispatchChangeEvent()
};
goog.provide("ol.render.canvas.Immediate");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.BrowserFeature");
goog.require("ol.color");
goog.require("ol.extent");
goog.require("ol.geom.flat.transform");
goog.require("ol.render.IVectorContext");
goog.require("ol.render.canvas");
goog.require("ol.vec.Mat4");
ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, viewRotation) {
this.callbacksByZIndex_ = {};
this.context_ = context;
this.pixelRatio_ = pixelRatio;
this.extent_ = extent;
this.transform_ = transform;
this.viewRotation_ = viewRotation;
this.contextFillState_ = null;
this.contextStrokeState_ = null;
this.contextTextState_ = null;
this.fillState_ = null;
this.strokeState_ = null;
this.image_ = null;
this.imageAnchorX_ = 0;
this.imageAnchorY_ = 0;
this.imageHeight_ = 0;
this.imageOpacity_ = 0;
this.imageRotateWithView_ = false;
this.imageRotation_ = 0;
this.imageScale_ = 0;
this.imageSnapToPixel_ = false;
this.imageWidth_ = 0;
this.text_ = "";
this.textOffsetX_ = 0;
this.textOffsetY_ = 0;
this.textRotation_ = 0;
this.textScale_ = 0;
this.textFillState_ = null;
this.textStrokeState_ = null;
this.textState_ = null;
this.pixelCoordinates_ = [];
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber()
};
ol.render.canvas.Immediate.prototype.drawImages_ = function(flatCoordinates, offset, end, stride) {
if(goog.isNull(this.image_)) {
return
}
goog.asserts.assert(offset === 0);
goog.asserts.assert(end == flatCoordinates.length);
var pixelCoordinates = ol.geom.flat.transform.transform2D(flatCoordinates, 2, this.transform_, this.pixelCoordinates_);
var context = this.context_;
var localTransform = this.tmpLocalTransform_;
var alpha = context.globalAlpha;
if(this.imageOpacity_ != 1) {
context.globalAlpha = alpha * this.imageOpacity_
}
var rotation = this.imageRotation_;
if(this.imageRotateWithView_) {
rotation += this.viewRotation_
}
var i, ii;
for(i = 0, ii = pixelCoordinates.length;i < ii;i += 2) {
var x = pixelCoordinates[i] - this.imageAnchorX_;
var y = pixelCoordinates[i + 1] - this.imageAnchorY_;
if(this.imageSnapToPixel_) {
x = x + 0.5 | 0;
y = y + 0.5 | 0
}
if(rotation !== 0 || this.imageScale_ != 1) {
var centerX = x + this.imageAnchorX_;
var centerY = y + this.imageAnchorY_;
ol.vec.Mat4.makeTransform2D(localTransform, centerX, centerY, this.imageScale_, this.imageScale_, rotation, -centerX, -centerY);
context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3))
}
context.drawImage(this.image_, x, y, this.imageWidth_, this.imageHeight_)
}
if(rotation !== 0 || this.imageScale_ != 1) {
context.setTransform(1, 0, 0, 1, 0, 0)
}
if(this.imageOpacity_ != 1) {
context.globalAlpha = alpha
}
};
ol.render.canvas.Immediate.prototype.drawText_ = function(flatCoordinates, offset, end, stride) {
if(goog.isNull(this.textState_) || this.text_ === "") {
return
}
if(!goog.isNull(this.textFillState_)) {
this.setContextFillState_(this.textFillState_)
}
if(!goog.isNull(this.textStrokeState_)) {
this.setContextStrokeState_(this.textStrokeState_)
}
this.setContextTextState_(this.textState_);
goog.asserts.assert(offset === 0);
goog.asserts.assert(end == flatCoordinates.length);
var pixelCoordinates = ol.geom.flat.transform.transform2D(flatCoordinates, stride, this.transform_, this.pixelCoordinates_);
var context = this.context_;
for(;offset < end;offset += stride) {
var x = pixelCoordinates[offset] + this.textOffsetX_;
var y = pixelCoordinates[offset + 1] + this.textOffsetY_;
if(this.textRotation_ !== 0 || this.textScale_ != 1) {
var localTransform = ol.vec.Mat4.makeTransform2D(this.tmpLocalTransform_, x, y, this.textScale_, this.textScale_, this.textRotation_, -x, -y);
context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3))
}
if(!goog.isNull(this.textStrokeState_)) {
context.strokeText(this.text_, x, y)
}
if(!goog.isNull(this.textFillState_)) {
context.fillText(this.text_, x, y)
}
}
if(this.textRotation_ !== 0 || this.textScale_ != 1) {
context.setTransform(1, 0, 0, 1, 0, 0)
}
};
ol.render.canvas.Immediate.prototype.moveToLineTo_ = function(pixelCoordinates, offset, end, close) {
var context = this.context_;
context.moveTo(pixelCoordinates[offset], pixelCoordinates[offset + 1]);
var i;
for(i = offset + 2;i < end;i += 2) {
context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1])
}
if(close) {
context.lineTo(pixelCoordinates[offset], pixelCoordinates[offset + 1])
}
return end
};
ol.render.canvas.Immediate.prototype.drawRings_ = function(pixelCoordinates, offset, ends) {
var context = this.context_;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], true);
context.closePath()
}
return offset
};
ol.render.canvas.Immediate.prototype.drawAsync = function(zIndex, callback) {
var zIndexKey = zIndex.toString();
var callbacks = this.callbacksByZIndex_[zIndexKey];
if(goog.isDef(callbacks)) {
callbacks.push(callback)
}else {
this.callbacksByZIndex_[zIndexKey] = [callback]
}
};
ol.render.canvas.Immediate.prototype.drawCircleGeometry = function(circleGeometry, data) {
if(!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) {
return
}
if(!goog.isNull(this.fillState_) || !goog.isNull(this.strokeState_)) {
if(!goog.isNull(this.fillState_)) {
this.setContextFillState_(this.fillState_)
}
if(!goog.isNull(this.strokeState_)) {
this.setContextStrokeState_(this.strokeState_)
}
var pixelCoordinates = ol.geom.transformSimpleGeometry2D(circleGeometry, this.transform_, this.pixelCoordinates_);
var dx = pixelCoordinates[2] - pixelCoordinates[0];
var dy = pixelCoordinates[3] - pixelCoordinates[1];
var radius = Math.sqrt(dx * dx + dy * dy);
var context = this.context_;
context.beginPath();
context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);
if(!goog.isNull(this.fillState_)) {
context.fill()
}
if(!goog.isNull(this.strokeState_)) {
context.stroke()
}
}
if(this.text_ !== "") {
this.drawText_(circleGeometry.getCenter(), 0, 2, 2)
}
};
ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {
var geometry = feature.getGeometry();
if(goog.isNull(geometry) || !ol.extent.intersects(this.extent_, geometry.getExtent())) {
return
}
var zIndex = style.getZIndex();
if(!goog.isDef(zIndex)) {
zIndex = 0
}
this.drawAsync(zIndex, function(render) {
render.setFillStrokeStyle(style.getFill(), style.getStroke());
render.setImageStyle(style.getImage());
render.setTextStyle(style.getText());
var renderGeometry = ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()];
goog.asserts.assert(goog.isDef(renderGeometry));
renderGeometry.call(render, geometry, null)
})
};
ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) {
var geometries = geometryCollectionGeometry.getGeometriesArray();
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
var geometry = geometries[i];
var geometryRenderer = ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()];
goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer.call(this, geometry, data)
}
};
ol.render.canvas.Immediate.prototype.drawPointGeometry = function(pointGeometry, data) {
var flatCoordinates = pointGeometry.getFlatCoordinates();
var stride = pointGeometry.getStride();
if(!goog.isNull(this.image_)) {
this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride)
}
if(this.text_ !== "") {
this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride)
}
};
ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) {
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride();
if(!goog.isNull(this.image_)) {
this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride)
}
if(this.text_ !== "") {
this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride)
}
};
ol.render.canvas.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry, data) {
if(!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) {
return
}
if(!goog.isNull(this.strokeState_)) {
this.setContextStrokeState_(this.strokeState_);
var pixelCoordinates = ol.geom.transformSimpleGeometry2D(lineStringGeometry, this.transform_, this.pixelCoordinates_);
var context = this.context_;
context.beginPath();
this.moveToLineTo_(pixelCoordinates, 0, pixelCoordinates.length, false);
context.stroke()
}
if(this.text_ !== "") {
var flatMidpoint = lineStringGeometry.getFlatMidpoint();
this.drawText_(flatMidpoint, 0, 2, 2)
}
};
ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) {
var geometryExtent = multiLineStringGeometry.getExtent();
if(!ol.extent.intersects(this.extent_, geometryExtent)) {
return
}
var pixelCoordinates;
if(!goog.isNull(this.strokeState_)) {
this.setContextStrokeState_(this.strokeState_);
pixelCoordinates = ol.geom.transformSimpleGeometry2D(multiLineStringGeometry, this.transform_, this.pixelCoordinates_);
var context = this.context_;
context.beginPath();
var ends = multiLineStringGeometry.getEnds();
var offset = 0;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], false)
}
context.stroke()
}
if(this.text_ !== "") {
var flatMidpoints = multiLineStringGeometry.getFlatMidpoints();
this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2)
}
};
ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry, data) {
if(!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) {
return
}
var pixelCoordinates;
if(!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) {
if(!goog.isNull(this.fillState_)) {
this.setContextFillState_(this.fillState_)
}
if(!goog.isNull(this.strokeState_)) {
this.setContextStrokeState_(this.strokeState_)
}
pixelCoordinates = ol.geom.transformSimpleGeometry2D(polygonGeometry, this.transform_, this.pixelCoordinates_);
var context = this.context_;
context.beginPath();
this.drawRings_(pixelCoordinates, 0, polygonGeometry.getEnds());
if(!goog.isNull(this.fillState_)) {
context.fill()
}
if(!goog.isNull(this.strokeState_)) {
context.stroke()
}
}
if(this.text_ !== "") {
var flatInteriorPoint = polygonGeometry.getFlatInteriorPoint();
this.drawText_(flatInteriorPoint, 0, 2, 2)
}
};
ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) {
if(!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) {
return
}
var pixelCoordinates;
if(!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) {
if(!goog.isNull(this.fillState_)) {
this.setContextFillState_(this.fillState_)
}
if(!goog.isNull(this.strokeState_)) {
this.setContextStrokeState_(this.strokeState_)
}
pixelCoordinates = ol.geom.transformSimpleGeometry2D(multiPolygonGeometry, this.transform_, this.pixelCoordinates_);
var context = this.context_;
var endss = multiPolygonGeometry.getEndss();
var offset = 0;
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
context.beginPath();
offset = this.drawRings_(pixelCoordinates, offset, ends);
if(!goog.isNull(this.fillState_)) {
context.fill()
}
if(!goog.isNull(this.strokeState_)) {
context.stroke()
}
}
}
if(this.text_ !== "") {
var flatInteriorPoints = multiPolygonGeometry.getFlatInteriorPoints();
this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2)
}
};
ol.render.canvas.Immediate.prototype.drawText = goog.abstractMethod;
ol.render.canvas.Immediate.prototype.flush = function() {
var zs = goog.array.map(goog.object.getKeys(this.callbacksByZIndex_), Number);
goog.array.sort(zs);
var i, ii, callbacks, j, jj;
for(i = 0, ii = zs.length;i < ii;++i) {
callbacks = this.callbacksByZIndex_[zs[i].toString()];
for(j = 0, jj = callbacks.length;j < jj;++j) {
callbacks[j](this)
}
}
};
ol.render.canvas.Immediate.prototype.setContextFillState_ = function(fillState) {
var context = this.context_;
var contextFillState = this.contextFillState_;
if(goog.isNull(contextFillState)) {
context.fillStyle = fillState.fillStyle;
this.contextFillState_ = {fillStyle:fillState.fillStyle}
}else {
if(contextFillState.fillStyle != fillState.fillStyle) {
contextFillState.fillStyle = context.fillStyle = fillState.fillStyle
}
}
};
ol.render.canvas.Immediate.prototype.setContextStrokeState_ = function(strokeState) {
var context = this.context_;
var contextStrokeState = this.contextStrokeState_;
if(goog.isNull(contextStrokeState)) {
context.lineCap = strokeState.lineCap;
if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) {
context.setLineDash(strokeState.lineDash)
}
context.lineJoin = strokeState.lineJoin;
context.lineWidth = strokeState.lineWidth;
context.miterLimit = strokeState.miterLimit;
context.strokeStyle = strokeState.strokeStyle;
this.contextStrokeState_ = {lineCap:strokeState.lineCap, lineDash:strokeState.lineDash, lineJoin:strokeState.lineJoin, lineWidth:strokeState.lineWidth, miterLimit:strokeState.miterLimit, strokeStyle:strokeState.strokeStyle}
}else {
if(contextStrokeState.lineCap != strokeState.lineCap) {
contextStrokeState.lineCap = context.lineCap = strokeState.lineCap
}
if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) {
if(!goog.array.equals(contextStrokeState.lineDash, strokeState.lineDash)) {
context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash)
}
}
if(contextStrokeState.lineJoin != strokeState.lineJoin) {
contextStrokeState.lineJoin = context.lineJoin = strokeState.lineJoin
}
if(contextStrokeState.lineWidth != strokeState.lineWidth) {
contextStrokeState.lineWidth = context.lineWidth = strokeState.lineWidth
}
if(contextStrokeState.miterLimit != strokeState.miterLimit) {
contextStrokeState.miterLimit = context.miterLimit = strokeState.miterLimit
}
if(contextStrokeState.strokeStyle != strokeState.strokeStyle) {
contextStrokeState.strokeStyle = context.strokeStyle = strokeState.strokeStyle
}
}
};
ol.render.canvas.Immediate.prototype.setContextTextState_ = function(textState) {
var context = this.context_;
var contextTextState = this.contextTextState_;
if(goog.isNull(contextTextState)) {
context.font = textState.font;
context.textAlign = textState.textAlign;
context.textBaseline = textState.textBaseline;
this.contextTextState_ = {font:textState.font, textAlign:textState.textAlign, textBaseline:textState.textBaseline}
}else {
if(contextTextState.font != textState.font) {
contextTextState.font = context.font = textState.font
}
if(contextTextState.textAlign != textState.textAlign) {
contextTextState.textAlign = context.textAlign = textState.textAlign
}
if(contextTextState.textBaseline != textState.textBaseline) {
contextTextState.textBaseline = context.textBaseline = textState.textBaseline
}
}
};
ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
if(goog.isNull(fillStyle)) {
this.fillState_ = null
}else {
var fillStyleColor = fillStyle.getColor();
this.fillState_ = {fillStyle:ol.color.asString(!goog.isNull(fillStyleColor) ? fillStyleColor : ol.render.canvas.defaultFillStyle)}
}
if(goog.isNull(strokeStyle)) {
this.strokeState_ = null
}else {
var strokeStyleColor = strokeStyle.getColor();
var strokeStyleLineCap = strokeStyle.getLineCap();
var strokeStyleLineDash = strokeStyle.getLineDash();
var strokeStyleLineJoin = strokeStyle.getLineJoin();
var strokeStyleWidth = strokeStyle.getWidth();
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
this.strokeState_ = {lineCap:goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap, lineDash:goog.isDefAndNotNull(strokeStyleLineDash) ? strokeStyleLineDash : ol.render.canvas.defaultLineDash, lineJoin:goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin, lineWidth:this.pixelRatio_ * (goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth), miterLimit:goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit :
ol.render.canvas.defaultMiterLimit, strokeStyle:ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle)}
}
};
ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) {
if(goog.isNull(imageStyle)) {
this.image_ = null
}else {
var imageAnchor = imageStyle.getAnchor();
var imageImage = imageStyle.getImage(1);
var imageOpacity = imageStyle.getOpacity();
var imageRotateWithView = imageStyle.getRotateWithView();
var imageRotation = imageStyle.getRotation();
var imageScale = imageStyle.getScale();
var imageSize = imageStyle.getSize();
var imageSnapToPixel = imageStyle.getSnapToPixel();
goog.asserts.assert(!goog.isNull(imageAnchor));
goog.asserts.assert(!goog.isNull(imageImage));
goog.asserts.assert(!goog.isNull(imageSize));
this.imageAnchorX_ = imageAnchor[0];
this.imageAnchorY_ = imageAnchor[1];
this.imageHeight_ = imageSize[1];
this.image_ = imageImage;
this.imageOpacity_ = goog.isDef(imageOpacity) ? imageOpacity : 1;
this.imageRotateWithView_ = goog.isDef(imageRotateWithView) ? imageRotateWithView : false;
this.imageRotation_ = goog.isDef(imageRotation) ? imageRotation : 0;
this.imageScale_ = goog.isDef(imageScale) ? imageScale : 1;
this.imageSnapToPixel_ = goog.isDef(imageSnapToPixel) ? imageSnapToPixel : false;
this.imageWidth_ = imageSize[0]
}
};
ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) {
if(goog.isNull(textStyle)) {
this.text_ = ""
}else {
var textFillStyle = textStyle.getFill();
if(goog.isNull(textFillStyle)) {
this.textFillState_ = null
}else {
var textFillStyleColor = textFillStyle.getColor();
this.textFillState_ = {fillStyle:ol.color.asString(!goog.isNull(textFillStyleColor) ? textFillStyleColor : ol.render.canvas.defaultFillStyle)}
}
var textStrokeStyle = textStyle.getStroke();
if(goog.isNull(textStrokeStyle)) {
this.textStrokeState_ = null
}else {
var textStrokeStyleColor = textStrokeStyle.getColor();
var textStrokeStyleLineCap = textStrokeStyle.getLineCap();
var textStrokeStyleLineDash = textStrokeStyle.getLineDash();
var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();
var textStrokeStyleWidth = textStrokeStyle.getWidth();
var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();
this.textStrokeState_ = {lineCap:goog.isDef(textStrokeStyleLineCap) ? textStrokeStyleLineCap : ol.render.canvas.defaultLineCap, lineDash:goog.isDefAndNotNull(textStrokeStyleLineDash) ? textStrokeStyleLineDash : ol.render.canvas.defaultLineDash, lineJoin:goog.isDef(textStrokeStyleLineJoin) ? textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin, lineWidth:this.pixelRatio_ * (goog.isDef(textStrokeStyleWidth) ? textStrokeStyleWidth : ol.render.canvas.defaultLineWidth), miterLimit:goog.isDef(textStrokeStyleMiterLimit) ?
textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit, strokeStyle:ol.color.asString(!goog.isNull(textStrokeStyleColor) ? textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle)}
}
var textFont = textStyle.getFont();
var textOffsetX = textStyle.getOffsetX();
var textOffsetY = textStyle.getOffsetY();
var textRotation = textStyle.getRotation();
var textScale = textStyle.getScale();
var textText = textStyle.getText();
var textTextAlign = textStyle.getTextAlign();
var textTextBaseline = textStyle.getTextBaseline();
this.textState_ = {font:goog.isDef(textFont) ? textFont : ol.render.canvas.defaultFont, textAlign:goog.isDef(textTextAlign) ? textTextAlign : ol.render.canvas.defaultTextAlign, textBaseline:goog.isDef(textTextBaseline) ? textTextBaseline : ol.render.canvas.defaultTextBaseline};
this.text_ = goog.isDef(textText) ? textText : "";
this.textOffsetX_ = goog.isDef(textOffsetX) ? this.pixelRatio_ * textOffsetX : 0;
this.textOffsetY_ = goog.isDef(textOffsetY) ? this.pixelRatio_ * textOffsetY : 0;
this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0;
this.textScale_ = this.pixelRatio_ * (goog.isDef(textScale) ? textScale : 1)
}
};
ol.render.canvas.Immediate.GEOMETRY_RENDERES_ = {"Point":ol.render.canvas.Immediate.prototype.drawPointGeometry, "LineString":ol.render.canvas.Immediate.prototype.drawLineStringGeometry, "Polygon":ol.render.canvas.Immediate.prototype.drawPolygonGeometry, "MultiPoint":ol.render.canvas.Immediate.prototype.drawMultiPointGeometry, "MultiLineString":ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry, "MultiPolygon":ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry, "GeometryCollection":ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry,
"Circle":ol.render.canvas.Immediate.prototype.drawCircleGeometry};
goog.provide("ol.renderer.canvas.Layer");
goog.require("goog.array");
goog.require("goog.vec.Mat4");
goog.require("ol.dom");
goog.require("ol.layer.Layer");
goog.require("ol.render.Event");
goog.require("ol.render.EventType");
goog.require("ol.render.canvas.Immediate");
goog.require("ol.renderer.Layer");
goog.require("ol.vec.Mat4");
ol.renderer.canvas.Layer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer);
this.transform_ = goog.vec.Mat4.createNumber()
};
goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerState, context) {
this.dispatchPreComposeEvent(context, frameState);
var image = this.getImage();
if(!goog.isNull(image)) {
var imageTransform = this.getImageTransform();
context.globalAlpha = layerState.opacity;
if(frameState.view2DState.rotation === 0) {
var dx = goog.vec.Mat4.getElement(imageTransform, 0, 3);
var dy = goog.vec.Mat4.getElement(imageTransform, 1, 3);
var dw = image.width * goog.vec.Mat4.getElement(imageTransform, 0, 0);
var dh = image.height * goog.vec.Mat4.getElement(imageTransform, 1, 1);
context.drawImage(image, 0, 0, +image.width, +image.height, Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh))
}else {
context.setTransform(goog.vec.Mat4.getElement(imageTransform, 0, 0), goog.vec.Mat4.getElement(imageTransform, 1, 0), goog.vec.Mat4.getElement(imageTransform, 0, 1), goog.vec.Mat4.getElement(imageTransform, 1, 1), goog.vec.Mat4.getElement(imageTransform, 0, 3), goog.vec.Mat4.getElement(imageTransform, 1, 3));
context.drawImage(image, 0, 0);
context.setTransform(1, 0, 0, 1, 0, 0)
}
}
this.dispatchPostComposeEvent(context, frameState)
};
ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {
var layer = this.getLayer();
if(layer.hasListener(type)) {
var transform = goog.isDef(opt_transform) ? opt_transform : this.getTransform(frameState);
var render = new ol.render.canvas.Immediate(context, frameState.pixelRatio, frameState.extent, transform, frameState.view2DState.rotation);
var composeEvent = new ol.render.Event(type, layer, render, frameState, context, null);
layer.dispatchEvent(composeEvent);
render.flush()
}
};
ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) {
this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context, frameState, opt_transform)
};
ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) {
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context, frameState, opt_transform)
};
ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {
this.dispatchComposeEvent_(ol.render.EventType.RENDER, context, frameState, opt_transform)
};
ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod;
ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) {
var view2DState = frameState.view2DState;
var pixelRatio = frameState.pixelRatio;
return ol.vec.Mat4.makeTransform2D(this.transform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, pixelRatio / view2DState.resolution, -pixelRatio / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1])
};
ol.renderer.canvas.Layer.testCanvasSize = function() {
var context = null;
var imageData = null;
return function(size) {
if(goog.isNull(context)) {
context = ol.dom.createCanvasContext2D(1, 1);
imageData = context.createImageData(1, 1);
var data = imageData.data;
data[0] = 42;
data[1] = 84;
data[2] = 126;
data[3] = 255
}
var canvas = context.canvas;
var good = size[0] <= canvas.width && size[1] <= canvas.height;
if(!good) {
canvas.width = size[0];
canvas.height = size[1];
var x = size[0] - 1;
var y = size[1] - 1;
context.putImageData(imageData, x, y);
var result = context.getImageData(x, y, 1, 1);
good = goog.array.equals(imageData.data, result.data)
}
return good
}
}();
goog.provide("ol.source.Image");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Image");
goog.require("ol.array");
goog.require("ol.source.Source");
ol.source.ImageOptions;
ol.source.Image = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, state:options.state});
this.resolutions_ = goog.isDef(options.resolutions) ? options.resolutions : null;
goog.asserts.assert(goog.isNull(this.resolutions_) || goog.array.isSorted(this.resolutions_, function(a, b) {
return b - a
}, true))
};
goog.inherits(ol.source.Image, ol.source.Source);
ol.source.Image.prototype.getResolutions = function() {
return this.resolutions_
};
ol.source.Image.prototype.findNearestResolution = function(resolution) {
if(!goog.isNull(this.resolutions_)) {
var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0);
resolution = this.resolutions_[idx]
}
return resolution
};
ol.source.Image.prototype.getImage = goog.abstractMethod;
goog.provide("ol.renderer.canvas.ImageLayer");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.ImageBase");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.layer.Image");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.source.Image");
goog.require("ol.vec.Mat4");
ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) {
goog.base(this, mapRenderer, imageLayer);
this.image_ = null;
this.imageTransform_ = goog.vec.Mat4.createNumber()
};
goog.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) {
var layer = this.getLayer();
var source = layer.getSource();
goog.asserts.assertInstanceof(source, ol.source.Image);
var extent = frameState.extent;
var resolution = frameState.view2DState.resolution;
var rotation = frameState.view2DState.rotation;
return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) {
return callback.call(thisArg, feature, layer)
})
};
ol.renderer.canvas.ImageLayer.prototype.getImage = function() {
return goog.isNull(this.image_) ? null : this.image_.getImageElement()
};
ol.renderer.canvas.ImageLayer.prototype.getImageTransform = function() {
return this.imageTransform_
};
ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, layerState) {
var pixelRatio = frameState.pixelRatio;
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image;
var imageLayer = this.getLayer();
goog.asserts.assertInstanceof(imageLayer, ol.layer.Image);
var imageSource = imageLayer.getSource();
goog.asserts.assertInstanceof(imageSource, ol.source.Image);
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
image = imageSource.getImage(frameState.extent, viewResolution, pixelRatio, view2DState.projection);
if(!goog.isNull(image)) {
var imageState = image.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image.load()
}else {
if(imageState == ol.ImageState.LOADED) {
this.image_ = image
}
}
}
}
if(!goog.isNull(this.image_)) {
image = this.image_;
var imageExtent = image.getExtent();
var imageResolution = image.getResolution();
var imagePixelRatio = image.getPixelRatio();
var scale = pixelRatio * imageResolution / (viewResolution * imagePixelRatio);
ol.vec.Mat4.makeTransform2D(this.imageTransform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, scale, scale, viewRotation, imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution, imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
goog.provide("ol.renderer.canvas.TileLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.dom");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.source.Tile");
goog.require("ol.vec.Mat4");
ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) {
goog.base(this, mapRenderer, tileLayer);
this.canvas_ = null;
this.canvasSize_ = null;
this.canvasTooBig_ = false;
this.context_ = null;
this.imageTransform_ = goog.vec.Mat4.createNumber();
this.renderedCanvasZ_ = NaN;
this.renderedCanvasTileRange_ = null;
this.renderedTiles_ = null
};
goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.TileLayer.prototype.getImage = function() {
return this.canvas_
};
ol.renderer.canvas.TileLayer.prototype.getImageTransform = function() {
return this.imageTransform_
};
ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layerState) {
var pixelRatio = frameState.pixelRatio;
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getLayer();
goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile);
var tileSource = tileLayer.getSource();
goog.asserts.assertInstanceof(tileSource, ol.source.Tile);
var tileGrid = tileSource.getTileGridForProjection(projection);
var tileGutter = tileSource.getGutter();
var z = tileGrid.getZForResolution(view2DState.resolution);
var tilePixelSize = tileSource.getTilePixelSize(z, frameState.pixelRatio, projection);
var tilePixelRatio = tilePixelSize / tileGrid.getTileSize(z);
var tileResolution = tileGrid.getResolution(z);
var tilePixelResolution = tileResolution / tilePixelRatio;
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var canvasWidth = tilePixelSize * tileRange.getWidth();
var canvasHeight = tilePixelSize * tileRange.getHeight();
var canvas, context;
if(goog.isNull(this.canvas_)) {
goog.asserts.assert(goog.isNull(this.canvasSize_));
goog.asserts.assert(goog.isNull(this.context_));
goog.asserts.assert(goog.isNull(this.renderedCanvasTileRange_));
context = ol.dom.createCanvasContext2D(canvasWidth, canvasHeight);
this.canvas_ = context.canvas;
this.canvasSize_ = [canvasWidth, canvasHeight];
this.context_ = context;
this.canvasTooBig_ = !ol.renderer.canvas.Layer.testCanvasSize(this.canvasSize_)
}else {
goog.asserts.assert(!goog.isNull(this.canvasSize_));
goog.asserts.assert(!goog.isNull(this.context_));
canvas = this.canvas_;
context = this.context_;
if(this.canvasSize_[0] < canvasWidth || this.canvasSize_[1] < canvasHeight || this.canvasTooBig_ && (this.canvasSize_[0] > canvasWidth || this.canvasSize_[1] > canvasHeight)) {
canvas.width = canvasWidth;
canvas.height = canvasHeight;
this.canvasSize_ = [canvasWidth, canvasHeight];
this.canvasTooBig_ = !ol.renderer.canvas.Layer.testCanvasSize(this.canvasSize_);
this.renderedCanvasTileRange_ = null
}else {
canvasWidth = this.canvasSize_[0];
canvasHeight = this.canvasSize_[1];
if(z != this.renderedCanvasZ_ || !this.renderedCanvasTileRange_.containsTileRange(tileRange)) {
this.renderedCanvasTileRange_ = null
}
}
}
var canvasTileRange, canvasTileRangeWidth, minX, minY;
if(goog.isNull(this.renderedCanvasTileRange_)) {
canvasTileRangeWidth = canvasWidth / tilePixelSize;
var canvasTileRangeHeight = canvasHeight / tilePixelSize;
minX = tileRange.minX - Math.floor((canvasTileRangeWidth - tileRange.getWidth()) / 2);
minY = tileRange.minY - Math.floor((canvasTileRangeHeight - tileRange.getHeight()) / 2);
this.renderedCanvasZ_ = z;
this.renderedCanvasTileRange_ = new ol.TileRange(minX, minX + canvasTileRangeWidth - 1, minY, minY + canvasTileRangeHeight - 1);
this.renderedTiles_ = new Array(canvasTileRangeWidth * canvasTileRangeHeight);
canvasTileRange = this.renderedCanvasTileRange_
}else {
canvasTileRange = this.renderedCanvasTileRange_;
canvasTileRangeWidth = canvasTileRange.getWidth()
}
goog.asserts.assert(canvasTileRange.containsTileRange(tileRange));
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var tilesToClear = [];
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED
}, tileSource, pixelRatio, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
if(!goog.isDef(useInterimTilesOnError)) {
useInterimTilesOnError = true
}
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED || tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
tilesToClear.push(tile);
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var i, ii;
for(i = 0, ii = tilesToClear.length;i < ii;++i) {
tile = tilesToClear[i];
x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX);
y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y);
context.clearRect(x, y, tilePixelSize, tilePixelSize)
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var opaque = tileSource.getOpaque();
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), tmpExtent));
var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw;
var ix, iy, interimTileExtent, interimTileRange, maxX, maxY;
var height, width;
for(i = 0, ii = zs.length;i < ii;++i) {
currentZ = zs[i];
tilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection);
tilesToDraw = tilesToDrawByZ[currentZ];
if(currentZ == z) {
for(tileCoordKey in tilesToDraw) {
tile = tilesToDraw[tileCoordKey];
index = (tile.tileCoord.y - canvasTileRange.minY) * canvasTileRangeWidth + (tile.tileCoord.x - canvasTileRange.minX);
if(this.renderedTiles_[index] != tile) {
x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX);
y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y);
tileState = tile.getState();
if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError || !opaque) {
context.clearRect(x, y, tilePixelSize, tilePixelSize)
}
if(tileState == ol.TileState.LOADED) {
context.drawImage(tile.getImage(), tileGutter, tileGutter, tilePixelSize, tilePixelSize, x, y, tilePixelSize, tilePixelSize)
}
this.renderedTiles_[index] = tile
}
}
}else {
scale = tileGrid.getResolution(currentZ) / tileResolution;
for(tileCoordKey in tilesToDraw) {
tile = tilesToDraw[tileCoordKey];
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
x = (tileExtent[0] - origin[0]) / tilePixelResolution;
y = (origin[1] - tileExtent[3]) / tilePixelResolution;
width = scale * tilePixelSize;
height = scale * tilePixelSize;
tileState = tile.getState();
if(tileState == ol.TileState.EMPTY || !opaque) {
context.clearRect(x, y, width, height)
}
if(tileState == ol.TileState.LOADED) {
context.drawImage(tile.getImage(), tileGutter, tileGutter, tilePixelSize, tilePixelSize, x, y, width, height)
}
interimTileRange = tileGrid.getTileRangeForExtentAndZ(tileExtent, z, tmpTileRange);
minX = Math.max(interimTileRange.minX, canvasTileRange.minX);
maxX = Math.min(interimTileRange.maxX, canvasTileRange.maxX);
minY = Math.max(interimTileRange.minY, canvasTileRange.minY);
maxY = Math.min(interimTileRange.maxY, canvasTileRange.maxY);
for(ix = minX;ix <= maxX;++ix) {
for(iy = minY;iy <= maxY;++iy) {
index = (iy - canvasTileRange.minY) * canvasTileRangeWidth + (ix - canvasTileRange.minX);
this.renderedTiles_[index] = undefined
}
}
}
}
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
ol.vec.Mat4.makeTransform2D(this.imageTransform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, pixelRatio * tilePixelResolution / view2DState.resolution, pixelRatio * tilePixelResolution / view2DState.resolution, view2DState.rotation, (origin[0] - center[0]) / tilePixelResolution, (center[1] - origin[1]) / tilePixelResolution)
};
goog.provide("ol.render.IReplayGroup");
goog.require("goog.functions");
goog.require("ol.render.IVectorContext");
ol.render.ReplayType = {IMAGE:"Image", LINE_STRING:"LineString", POLYGON:"Polygon", TEXT:"Text"};
ol.render.REPLAY_ORDER = [ol.render.ReplayType.POLYGON, ol.render.ReplayType.LINE_STRING, ol.render.ReplayType.IMAGE, ol.render.ReplayType.TEXT];
ol.render.IReplayGroup = function() {
};
ol.render.IReplayGroup.prototype.finish = function() {
};
ol.render.IReplayGroup.prototype.getReplay = function(zIndex, replayType) {
};
ol.render.IReplayGroup.prototype.isEmpty = function() {
};
goog.provide("ol.render.canvas.Replay");
goog.provide("ol.render.canvas.ReplayGroup");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.BrowserFeature");
goog.require("ol.array");
goog.require("ol.color");
goog.require("ol.dom");
goog.require("ol.extent");
goog.require("ol.extent.Relationship");
goog.require("ol.geom.flat.simplify");
goog.require("ol.geom.flat.transform");
goog.require("ol.render.IReplayGroup");
goog.require("ol.render.IVectorContext");
goog.require("ol.render.canvas");
goog.require("ol.vec.Mat4");
ol.render.canvas.Instruction = {BEGIN_GEOMETRY:0, BEGIN_PATH:1, CIRCLE:2, CLOSE_PATH:3, DRAW_IMAGE:4, DRAW_TEXT:5, END_GEOMETRY:6, FILL:7, MOVE_TO_LINE_TO:8, SET_FILL_STYLE:9, SET_STROKE_STYLE:10, SET_TEXT_STYLE:11, STROKE:12};
ol.render.canvas.Replay = function(tolerance, maxExtent, resolution) {
this.tolerance = tolerance;
this.maxExtent = maxExtent;
this.maxLineWidth = 0;
this.resolution = resolution;
this.beginGeometryInstruction1_ = null;
this.beginGeometryInstruction2_ = null;
this.instructions = [];
this.coordinates = [];
this.renderedTransform_ = goog.vec.Mat4.createNumber();
this.hitDetectionInstructions = [];
this.pixelCoordinates_ = [];
this.extent_ = ol.extent.createEmpty();
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber()
};
ol.render.canvas.Replay.prototype.appendFlatCoordinates = function(flatCoordinates, offset, end, stride, close) {
var myEnd = this.coordinates.length;
var extent = this.getBufferedMaxExtent();
var lastCoord = [flatCoordinates[offset], flatCoordinates[offset + 1]];
var nextCoord = [NaN, NaN];
var skipped = true;
var i, lastRel, nextRel;
for(i = offset + stride;i < end;i += stride) {
nextCoord[0] = flatCoordinates[i];
nextCoord[1] = flatCoordinates[i + 1];
nextRel = ol.extent.coordinateRelationship(extent, nextCoord);
if(nextRel !== lastRel) {
if(skipped) {
this.coordinates[myEnd++] = lastCoord[0];
this.coordinates[myEnd++] = lastCoord[1]
}
this.coordinates[myEnd++] = nextCoord[0];
this.coordinates[myEnd++] = nextCoord[1];
skipped = false
}else {
if(nextRel === ol.extent.Relationship.INTERSECTING) {
this.coordinates[myEnd++] = nextCoord[0];
this.coordinates[myEnd++] = nextCoord[1];
skipped = false
}else {
skipped = true
}
}
lastCoord[0] = nextCoord[0];
lastCoord[1] = nextCoord[1];
lastRel = nextRel
}
if(i === offset + stride) {
this.coordinates[myEnd++] = lastCoord[0];
this.coordinates[myEnd++] = lastCoord[1]
}
if(close) {
this.coordinates[myEnd++] = flatCoordinates[offset];
this.coordinates[myEnd++] = flatCoordinates[offset + 1]
}
return myEnd
};
ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, data) {
this.beginGeometryInstruction1_ = [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, data, 0];
this.instructions.push(this.beginGeometryInstruction1_);
this.beginGeometryInstruction2_ = [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, data, 0];
this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)
};
ol.render.canvas.Replay.prototype.replay_ = function(context, pixelRatio, transform, viewRotation, skippedFeaturesHash, instructions, geometryCallback) {
var pixelCoordinates;
if(ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) {
pixelCoordinates = this.pixelCoordinates_
}else {
pixelCoordinates = ol.geom.flat.transform.transform2D(this.coordinates, 2, transform, this.pixelCoordinates_);
goog.vec.Mat4.setFromArray(this.renderedTransform_, transform);
goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_)
}
var i = 0;
var ii = instructions.length;
var d = 0;
var dd;
var localTransform = this.tmpLocalTransform_;
while(i < ii) {
var instruction = instructions[i];
var type = (instruction[0]);
var data, fill, geometry, stroke, text, x, y;
switch(type) {
case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
geometry = (instruction[1]);
data = (instruction[2]);
var dataUid = goog.getUid(data).toString();
if(!goog.isDef(goog.object.get(skippedFeaturesHash, dataUid))) {
++i
}else {
i = (instruction[3])
}
break;
case ol.render.canvas.Instruction.BEGIN_PATH:
context.beginPath();
++i;
break;
case ol.render.canvas.Instruction.CIRCLE:
var x1 = pixelCoordinates[d];
var y1 = pixelCoordinates[d + 1];
var x2 = pixelCoordinates[d + 2];
var y2 = pixelCoordinates[d + 3];
var dx = x2 - x1;
var dy = y2 - y1;
var r = Math.sqrt(dx * dx + dy * dy);
context.arc(x1, y1, r, 0, 2 * Math.PI, true);
d += 4;
++i;
break;
case ol.render.canvas.Instruction.CLOSE_PATH:
context.closePath();
++i;
break;
case ol.render.canvas.Instruction.DRAW_IMAGE:
goog.asserts.assert(goog.isNumber(instruction[1]));
d = (instruction[1]);
goog.asserts.assert(goog.isNumber(instruction[2]));
dd = (instruction[2]);
var image = (instruction[3]);
var anchorX = (instruction[4]) * pixelRatio;
var anchorY = (instruction[5]) * pixelRatio;
var height = (instruction[6]) * pixelRatio;
var opacity = (instruction[7]);
var rotateWithView = (instruction[8]);
var rotation = (instruction[9]);
var scale = (instruction[10]);
var snapToPixel = (instruction[11]);
var width = (instruction[12]) * pixelRatio;
if(rotateWithView) {
rotation += viewRotation
}
for(;d < dd;d += 2) {
x = pixelCoordinates[d] - anchorX;
y = pixelCoordinates[d + 1] - anchorY;
if(snapToPixel) {
x = x + 0.5 | 0;
y = y + 0.5 | 0
}
if(scale != 1 || rotation !== 0) {
var centerX = x + anchorX;
var centerY = y + anchorY;
ol.vec.Mat4.makeTransform2D(localTransform, centerX, centerY, scale, scale, rotation, -centerX, -centerY);
context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3))
}
var alpha = context.globalAlpha;
if(opacity != 1) {
context.globalAlpha = alpha * opacity
}
context.drawImage(image, x, y, width, height);
if(opacity != 1) {
context.globalAlpha = alpha
}
if(scale != 1 || rotation !== 0) {
context.setTransform(1, 0, 0, 1, 0, 0)
}
}
++i;
break;
case ol.render.canvas.Instruction.DRAW_TEXT:
goog.asserts.assert(goog.isNumber(instruction[1]));
d = (instruction[1]);
goog.asserts.assert(goog.isNumber(instruction[2]));
dd = (instruction[2]);
goog.asserts.assert(goog.isString(instruction[3]));
text = (instruction[3]);
goog.asserts.assert(goog.isNumber(instruction[4]));
var offsetX = (instruction[4]) * pixelRatio;
goog.asserts.assert(goog.isNumber(instruction[5]));
var offsetY = (instruction[5]) * pixelRatio;
goog.asserts.assert(goog.isNumber(instruction[6]));
rotation = (instruction[6]);
goog.asserts.assert(goog.isNumber(instruction[7]));
scale = (instruction[7]) * pixelRatio;
goog.asserts.assert(goog.isBoolean(instruction[8]));
fill = (instruction[8]);
goog.asserts.assert(goog.isBoolean(instruction[9]));
stroke = (instruction[9]);
for(;d < dd;d += 2) {
x = pixelCoordinates[d] + offsetX;
y = pixelCoordinates[d + 1] + offsetY;
if(scale != 1 || rotation !== 0) {
ol.vec.Mat4.makeTransform2D(localTransform, x, y, scale, scale, rotation, -x, -y);
context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3))
}
if(stroke) {
context.strokeText(text, x, y)
}
if(fill) {
context.fillText(text, x, y)
}
if(scale != 1 || rotation !== 0) {
context.setTransform(1, 0, 0, 1, 0, 0)
}
}
++i;
break;
case ol.render.canvas.Instruction.END_GEOMETRY:
if(goog.isDef(geometryCallback)) {
geometry = (instruction[1]);
data = (instruction[2]);
var result = geometryCallback(geometry, data);
if(result) {
return result
}
}
++i;
break;
case ol.render.canvas.Instruction.FILL:
context.fill();
++i;
break;
case ol.render.canvas.Instruction.MOVE_TO_LINE_TO:
goog.asserts.assert(goog.isNumber(instruction[1]));
d = (instruction[1]);
goog.asserts.assert(goog.isNumber(instruction[2]));
dd = (instruction[2]);
context.moveTo(pixelCoordinates[d], pixelCoordinates[d + 1]);
for(d += 2;d < dd;d += 2) {
context.lineTo(pixelCoordinates[d], pixelCoordinates[d + 1])
}
++i;
break;
case ol.render.canvas.Instruction.SET_FILL_STYLE:
goog.asserts.assert(goog.isString(instruction[1]));
context.fillStyle = (instruction[1]);
++i;
break;
case ol.render.canvas.Instruction.SET_STROKE_STYLE:
goog.asserts.assert(goog.isString(instruction[1]));
goog.asserts.assert(goog.isNumber(instruction[2]));
goog.asserts.assert(goog.isString(instruction[3]));
goog.asserts.assert(goog.isString(instruction[4]));
goog.asserts.assert(goog.isNumber(instruction[5]));
goog.asserts.assert(!goog.isNull(instruction[6]));
context.strokeStyle = (instruction[1]);
context.lineWidth = (instruction[2]) * pixelRatio;
context.lineCap = (instruction[3]);
context.lineJoin = (instruction[4]);
context.miterLimit = (instruction[5]);
if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) {
context.setLineDash((instruction[6]))
}
++i;
break;
case ol.render.canvas.Instruction.SET_TEXT_STYLE:
goog.asserts.assert(goog.isString(instruction[1]));
goog.asserts.assert(goog.isString(instruction[2]));
goog.asserts.assert(goog.isString(instruction[3]));
context.font = (instruction[1]);
context.textAlign = (instruction[2]);
context.textBaseline = (instruction[3]);
++i;
break;
case ol.render.canvas.Instruction.STROKE:
context.stroke();
++i;
break;
default:
goog.asserts.fail();
++i;
break
}
}
goog.asserts.assert(i == instructions.length);
return undefined
};
ol.render.canvas.Replay.prototype.replay = function(context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
var instructions = this.instructions;
return this.replay_(context, pixelRatio, transform, viewRotation, skippedFeaturesHash, instructions, undefined)
};
ol.render.canvas.Replay.prototype.replayHitDetection = function(context, transform, viewRotation, skippedFeaturesHash, opt_geometryCallback) {
var instructions = this.hitDetectionInstructions;
return this.replay_(context, 1, transform, viewRotation, skippedFeaturesHash, instructions, opt_geometryCallback)
};
ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions_ = function() {
var hitDetectionInstructions = this.hitDetectionInstructions;
hitDetectionInstructions.reverse();
var i;
var n = hitDetectionInstructions.length;
var instruction;
var type;
var begin = -1;
for(i = 0;i < n;++i) {
instruction = hitDetectionInstructions[i];
type = (instruction[0]);
if(type == ol.render.canvas.Instruction.END_GEOMETRY) {
goog.asserts.assert(begin == -1);
begin = i
}else {
if(type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) {
instruction[3] = i;
goog.asserts.assert(begin >= 0);
ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i);
begin = -1
}
}
}
};
ol.render.canvas.Replay.prototype.drawAsync = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawCircleGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawFeature = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawGeometryCollectionGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawLineStringGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawMultiLineStringGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawPointGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawMultiPointGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawPolygonGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawMultiPolygonGeometry = goog.abstractMethod;
ol.render.canvas.Replay.prototype.drawText = goog.abstractMethod;
ol.render.canvas.Replay.prototype.endGeometry = function(geometry, data) {
goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction1_));
this.beginGeometryInstruction1_[3] = this.instructions.length;
this.beginGeometryInstruction1_ = null;
goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction2_));
this.beginGeometryInstruction2_[3] = this.hitDetectionInstructions.length;
this.beginGeometryInstruction2_ = null;
var endGeometryInstruction = [ol.render.canvas.Instruction.END_GEOMETRY, geometry, data];
this.instructions.push(endGeometryInstruction);
this.hitDetectionInstructions.push(endGeometryInstruction)
};
ol.render.canvas.Replay.prototype.finish = goog.nullFunction;
ol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {
return this.maxExtent
};
ol.render.canvas.Replay.prototype.getExtent = function() {
return this.extent_
};
ol.render.canvas.Replay.prototype.setFillStrokeStyle = goog.abstractMethod;
ol.render.canvas.Replay.prototype.setImageStyle = goog.abstractMethod;
ol.render.canvas.Replay.prototype.setTextStyle = goog.abstractMethod;
ol.render.canvas.ImageReplay = function(tolerance, maxExtent, resolution) {
goog.base(this, tolerance, maxExtent, resolution);
this.hitDetectionImage_ = null;
this.image_ = null;
this.anchorX_ = undefined;
this.anchorY_ = undefined;
this.height_ = undefined;
this.opacity_ = undefined;
this.rotateWithView_ = undefined;
this.rotation_ = undefined;
this.scale_ = undefined;
this.snapToPixel_ = undefined;
this.width_ = undefined
};
goog.inherits(ol.render.canvas.ImageReplay, ol.render.canvas.Replay);
ol.render.canvas.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) {
return this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false)
};
ol.render.canvas.ImageReplay.prototype.drawPointGeometry = function(pointGeometry, data) {
if(goog.isNull(this.image_)) {
return
}
goog.asserts.assert(goog.isDef(this.anchorX_));
goog.asserts.assert(goog.isDef(this.anchorY_));
goog.asserts.assert(goog.isDef(this.height_));
goog.asserts.assert(goog.isDef(this.opacity_));
goog.asserts.assert(goog.isDef(this.rotateWithView_));
goog.asserts.assert(goog.isDef(this.rotation_));
goog.asserts.assert(goog.isDef(this.scale_));
goog.asserts.assert(goog.isDef(this.width_));
ol.extent.extend(this.extent_, pointGeometry.getExtent());
this.beginGeometry(pointGeometry, data);
var flatCoordinates = pointGeometry.getFlatCoordinates();
var stride = pointGeometry.getStride();
var myBegin = this.coordinates.length;
var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
this.instructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]);
this.endGeometry(pointGeometry, data)
};
ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) {
if(goog.isNull(this.image_)) {
return
}
goog.asserts.assert(goog.isDef(this.anchorX_));
goog.asserts.assert(goog.isDef(this.anchorY_));
goog.asserts.assert(goog.isDef(this.height_));
goog.asserts.assert(goog.isDef(this.opacity_));
goog.asserts.assert(goog.isDef(this.rotateWithView_));
goog.asserts.assert(goog.isDef(this.rotation_));
goog.asserts.assert(goog.isDef(this.scale_));
goog.asserts.assert(goog.isDef(this.width_));
ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
this.beginGeometry(multiPointGeometry, data);
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride();
var myBegin = this.coordinates.length;
var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
this.instructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]);
this.endGeometry(multiPointGeometry, data)
};
ol.render.canvas.ImageReplay.prototype.finish = function() {
this.reverseHitDetectionInstructions_();
this.anchorX_ = undefined;
this.anchorY_ = undefined;
this.hitDetectionImage_ = null;
this.image_ = null;
this.height_ = undefined;
this.scale_ = undefined;
this.opacity_ = undefined;
this.rotateWithView_ = undefined;
this.rotation_ = undefined;
this.snapToPixel_ = undefined;
this.width_ = undefined
};
ol.render.canvas.ImageReplay.prototype.setImageStyle = function(imageStyle) {
goog.asserts.assert(!goog.isNull(imageStyle));
var anchor = imageStyle.getAnchor();
goog.asserts.assert(!goog.isNull(anchor));
var size = imageStyle.getSize();
goog.asserts.assert(!goog.isNull(size));
var hitDetectionImage = imageStyle.getHitDetectionImage(1);
goog.asserts.assert(!goog.isNull(hitDetectionImage));
var image = imageStyle.getImage(1);
goog.asserts.assert(!goog.isNull(image));
this.anchorX_ = anchor[0];
this.anchorY_ = anchor[1];
this.hitDetectionImage_ = hitDetectionImage;
this.image_ = image;
this.height_ = size[1];
this.opacity_ = imageStyle.getOpacity();
this.rotateWithView_ = imageStyle.getRotateWithView();
this.rotation_ = imageStyle.getRotation();
this.scale_ = imageStyle.getScale();
this.snapToPixel_ = imageStyle.getSnapToPixel();
this.width_ = size[0]
};
ol.render.canvas.LineStringReplay = function(tolerance, maxExtent, resolution) {
goog.base(this, tolerance, maxExtent, resolution);
this.state_ = {currentStrokeStyle:undefined, currentLineCap:undefined, currentLineDash:null, currentLineJoin:undefined, currentLineWidth:undefined, currentMiterLimit:undefined, lastStroke:0, strokeStyle:undefined, lineCap:undefined, lineDash:null, lineJoin:undefined, lineWidth:undefined, miterLimit:undefined}
};
goog.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay);
ol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = function(flatCoordinates, offset, end, stride) {
var myBegin = this.coordinates.length;
var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false);
var moveToLineToInstruction = [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];
this.instructions.push(moveToLineToInstruction);
this.hitDetectionInstructions.push(moveToLineToInstruction);
return end
};
ol.render.canvas.LineStringReplay.prototype.getBufferedMaxExtent = function() {
var extent = this.maxExtent;
if(this.maxLineWidth) {
extent = ol.extent.buffer(extent, this.resolution * (this.maxLineWidth + 1) / 2)
}
return extent
};
ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() {
var state = this.state_;
var strokeStyle = state.strokeStyle;
var lineCap = state.lineCap;
var lineDash = state.lineDash;
var lineJoin = state.lineJoin;
var lineWidth = state.lineWidth;
var miterLimit = state.miterLimit;
goog.asserts.assert(goog.isDef(strokeStyle));
goog.asserts.assert(goog.isDef(lineCap));
goog.asserts.assert(!goog.isNull(lineDash));
goog.asserts.assert(goog.isDef(lineJoin));
goog.asserts.assert(goog.isDef(lineWidth));
goog.asserts.assert(goog.isDef(miterLimit));
if(state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || !goog.array.equals(state.currentLineDash, lineDash) || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) {
if(state.lastStroke != this.coordinates.length) {
this.instructions.push([ol.render.canvas.Instruction.STROKE]);
state.lastStroke = this.coordinates.length
}
this.instructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]);
state.currentStrokeStyle = strokeStyle;
state.currentLineCap = lineCap;
state.currentLineDash = lineDash;
state.currentLineJoin = lineJoin;
state.currentLineWidth = lineWidth;
state.currentMiterLimit = miterLimit
}
};
ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = function(lineStringGeometry, data) {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
var strokeStyle = state.strokeStyle;
var lineWidth = state.lineWidth;
if(!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) {
return
}
ol.extent.extend(this.extent_, lineStringGeometry.getExtent());
this.setStrokeStyle_();
this.beginGeometry(lineStringGeometry, data);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]);
var flatCoordinates = lineStringGeometry.getFlatCoordinates();
var stride = lineStringGeometry.getStride();
this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
this.endGeometry(lineStringGeometry, data)
};
ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
var strokeStyle = state.strokeStyle;
var lineWidth = state.lineWidth;
if(!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) {
return
}
ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent());
this.setStrokeStyle_();
this.beginGeometry(multiLineStringGeometry, data);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]);
var ends = multiLineStringGeometry.getEnds();
var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();
var stride = multiLineStringGeometry.getStride();
var offset = 0;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
offset = this.drawFlatCoordinates_(flatCoordinates, offset, ends[i], stride)
}
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
this.endGeometry(multiLineStringGeometry, data)
};
ol.render.canvas.LineStringReplay.prototype.finish = function() {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
if(state.lastStroke != this.coordinates.length) {
this.instructions.push([ol.render.canvas.Instruction.STROKE])
}
this.reverseHitDetectionInstructions_();
this.state_ = null
};
ol.render.canvas.LineStringReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
goog.asserts.assert(!goog.isNull(this.state_));
goog.asserts.assert(goog.isNull(fillStyle));
goog.asserts.assert(!goog.isNull(strokeStyle));
var strokeStyleColor = strokeStyle.getColor();
this.state_.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
var strokeStyleLineCap = strokeStyle.getLineCap();
this.state_.lineCap = goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap;
var strokeStyleLineDash = strokeStyle.getLineDash();
this.state_.lineDash = !goog.isNull(strokeStyleLineDash) ? strokeStyleLineDash : ol.render.canvas.defaultLineDash;
var strokeStyleLineJoin = strokeStyle.getLineJoin();
this.state_.lineJoin = goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
var strokeStyleWidth = strokeStyle.getWidth();
this.state_.lineWidth = goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth;
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
this.state_.miterLimit = goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
this.maxLineWidth = Math.max(this.maxLineWidth, this.state_.lineWidth)
};
ol.render.canvas.PolygonReplay = function(tolerance, maxExtent, resolution) {
goog.base(this, tolerance, maxExtent, resolution);
this.state_ = {currentFillStyle:undefined, currentStrokeStyle:undefined, currentLineCap:undefined, currentLineDash:null, currentLineJoin:undefined, currentLineWidth:undefined, currentMiterLimit:undefined, fillStyle:undefined, strokeStyle:undefined, lineCap:undefined, lineDash:null, lineJoin:undefined, lineWidth:undefined, miterLimit:undefined}
};
goog.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);
ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) {
var state = this.state_;
var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];
this.instructions.push(beginPathInstruction);
this.hitDetectionInstructions.push(beginPathInstruction);
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var myBegin = this.coordinates.length;
var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, true);
var moveToLineToInstruction = [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];
var closePathInstruction = [ol.render.canvas.Instruction.CLOSE_PATH];
this.instructions.push(moveToLineToInstruction, closePathInstruction);
this.hitDetectionInstructions.push(moveToLineToInstruction, closePathInstruction);
offset = end
}
var fillInstruction = [ol.render.canvas.Instruction.FILL];
this.hitDetectionInstructions.push(fillInstruction);
if(goog.isDef(state.fillStyle)) {
this.instructions.push(fillInstruction)
}
if(goog.isDef(state.strokeStyle)) {
goog.asserts.assert(goog.isDef(state.lineWidth));
var strokeInstruction = [ol.render.canvas.Instruction.STROKE];
this.instructions.push(strokeInstruction);
this.hitDetectionInstructions.push(strokeInstruction)
}
return offset
};
ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = function(circleGeometry, data) {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle;
var strokeStyle = state.strokeStyle;
if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) {
return
}
if(goog.isDef(strokeStyle)) {
goog.asserts.assert(goog.isDef(state.lineWidth))
}
ol.extent.extend(this.extent_, circleGeometry.getExtent());
this.setFillStrokeStyles_();
this.beginGeometry(circleGeometry, data);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]);
if(goog.isDef(state.strokeStyle)) {
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash])
}
var flatCoordinates = circleGeometry.getFlatCoordinates();
var stride = circleGeometry.getStride();
this.appendFlatCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false);
var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];
var circleInstruction = [ol.render.canvas.Instruction.CIRCLE];
this.instructions.push(beginPathInstruction, circleInstruction);
this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);
this.endGeometry(circleGeometry, data);
var fillInstruction = [ol.render.canvas.Instruction.FILL];
this.hitDetectionInstructions.push(fillInstruction);
if(goog.isDef(state.fillStyle)) {
this.instructions.push(fillInstruction)
}
if(goog.isDef(state.strokeStyle)) {
goog.asserts.assert(goog.isDef(state.lineWidth));
var strokeInstruction = [ol.render.canvas.Instruction.STROKE];
this.instructions.push(strokeInstruction);
this.hitDetectionInstructions.push(strokeInstruction)
}
};
ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = function(polygonGeometry, data) {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle;
var strokeStyle = state.strokeStyle;
if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) {
return
}
if(goog.isDef(strokeStyle)) {
goog.asserts.assert(goog.isDef(state.lineWidth))
}
ol.extent.extend(this.extent_, polygonGeometry.getExtent());
this.setFillStrokeStyles_();
this.beginGeometry(polygonGeometry, data);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]);
if(goog.isDef(state.strokeStyle)) {
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash])
}
var ends = polygonGeometry.getEnds();
var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();
var stride = polygonGeometry.getStride();
this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride);
this.endGeometry(polygonGeometry, data)
};
ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) {
var state = this.state_;
goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle;
var strokeStyle = state.strokeStyle;
if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) {
return
}
if(goog.isDef(strokeStyle)) {
goog.asserts.assert(goog.isDef(state.lineWidth))
}
ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent());
this.setFillStrokeStyles_();
this.beginGeometry(multiPolygonGeometry, data);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]);
if(goog.isDef(state.strokeStyle)) {
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash])
}
var endss = multiPolygonGeometry.getEndss();
var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();
var stride = multiPolygonGeometry.getStride();
var offset = 0;
var i, ii;
for(i = 0, ii = endss.length;i < ii;++i) {
offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride)
}
this.endGeometry(multiPolygonGeometry, data)
};
ol.render.canvas.PolygonReplay.prototype.finish = function() {
goog.asserts.assert(!goog.isNull(this.state_));
this.reverseHitDetectionInstructions_();
this.state_ = null;
var tolerance = this.tolerance;
if(tolerance !== 0) {
var coordinates = this.coordinates;
var i, ii;
for(i = 0, ii = coordinates.length;i < ii;++i) {
coordinates[i] = ol.geom.flat.simplify.snap(coordinates[i], tolerance)
}
}
};
ol.render.canvas.PolygonReplay.prototype.getBufferedMaxExtent = function() {
var extent = this.maxExtent;
if(this.maxLineWidth) {
extent = ol.extent.buffer(extent, this.resolution * (this.maxLineWidth + 1) / 2)
}
return extent
};
ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
goog.asserts.assert(!goog.isNull(this.state_));
goog.asserts.assert(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle));
var state = this.state_;
if(!goog.isNull(fillStyle)) {
var fillStyleColor = fillStyle.getColor();
state.fillStyle = ol.color.asString(!goog.isNull(fillStyleColor) ? fillStyleColor : ol.render.canvas.defaultFillStyle)
}else {
state.fillStyle = undefined
}
if(!goog.isNull(strokeStyle)) {
var strokeStyleColor = strokeStyle.getColor();
state.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
var strokeStyleLineCap = strokeStyle.getLineCap();
state.lineCap = goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap;
var strokeStyleLineDash = strokeStyle.getLineDash();
state.lineDash = !goog.isNull(strokeStyleLineDash) ? strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
var strokeStyleLineJoin = strokeStyle.getLineJoin();
state.lineJoin = goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
var strokeStyleWidth = strokeStyle.getWidth();
state.lineWidth = goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth;
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
state.miterLimit = goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
this.maxLineWidth = Math.max(this.maxLineWidth, state.lineWidth)
}else {
state.strokeStyle = undefined;
state.lineCap = undefined;
state.lineDash = null;
state.lineJoin = undefined;
state.lineWidth = undefined;
state.miterLimit = undefined
}
};
ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function() {
var state = this.state_;
var fillStyle = state.fillStyle;
var strokeStyle = state.strokeStyle;
var lineCap = state.lineCap;
var lineDash = state.lineDash;
var lineJoin = state.lineJoin;
var lineWidth = state.lineWidth;
var miterLimit = state.miterLimit;
if(goog.isDef(fillStyle) && state.currentFillStyle != fillStyle) {
this.instructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle]);
state.currentFillStyle = state.fillStyle
}
if(goog.isDef(strokeStyle)) {
goog.asserts.assert(goog.isDef(lineCap));
goog.asserts.assert(!goog.isNull(lineDash));
goog.asserts.assert(goog.isDef(lineJoin));
goog.asserts.assert(goog.isDef(lineWidth));
goog.asserts.assert(goog.isDef(miterLimit));
if(state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || state.currentLineDash != lineDash || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) {
this.instructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash]);
state.currentStrokeStyle = strokeStyle;
state.currentLineCap = lineCap;
state.currentLineDash = lineDash;
state.currentLineJoin = lineJoin;
state.currentLineWidth = lineWidth;
state.currentMiterLimit = miterLimit
}
}
};
ol.render.canvas.TextReplay = function(tolerance, maxExtent, resolution) {
goog.base(this, tolerance, maxExtent, resolution);
this.replayFillState_ = null;
this.replayStrokeState_ = null;
this.replayTextState_ = null;
this.text_ = "";
this.textOffsetX_ = 0;
this.textOffsetY_ = 0;
this.textRotation_ = 0;
this.textScale_ = 0;
this.textFillState_ = null;
this.textStrokeState_ = null;
this.textState_ = null
};
goog.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay);
ol.render.canvas.TextReplay.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) {
if(this.text_ === "" || goog.isNull(this.textState_) || goog.isNull(this.textFillState_) && goog.isNull(this.textStrokeState_)) {
return
}
ol.extent.extendFlatCoordinates(this.extent_, flatCoordinates, offset, end, stride);
if(!goog.isNull(this.textFillState_)) {
this.setReplayFillState_(this.textFillState_)
}
if(!goog.isNull(this.textStrokeState_)) {
this.setReplayStrokeState_(this.textStrokeState_)
}
this.setReplayTextState_(this.textState_);
this.beginGeometry(geometry, data);
var myBegin = this.coordinates.length;
var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false);
var fill = !goog.isNull(this.textFillState_);
var stroke = !goog.isNull(this.textStrokeState_);
var drawTextInstruction = [ol.render.canvas.Instruction.DRAW_TEXT, myBegin, myEnd, this.text_, this.textOffsetX_, this.textOffsetY_, this.textRotation_, this.textScale_, fill, stroke];
this.instructions.push(drawTextInstruction);
this.hitDetectionInstructions.push(drawTextInstruction);
this.endGeometry(geometry, data)
};
ol.render.canvas.TextReplay.prototype.setReplayFillState_ = function(fillState) {
var replayFillState = this.replayFillState_;
if(!goog.isNull(replayFillState) && replayFillState.fillStyle == fillState.fillStyle) {
return
}
var setFillStyleInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillState.fillStyle];
this.instructions.push(setFillStyleInstruction);
this.hitDetectionInstructions.push(setFillStyleInstruction);
if(goog.isNull(replayFillState)) {
this.replayFillState_ = {fillStyle:fillState.fillStyle}
}else {
replayFillState.fillStyle = fillState.fillStyle
}
};
ol.render.canvas.TextReplay.prototype.setReplayStrokeState_ = function(strokeState) {
var replayStrokeState = this.replayStrokeState_;
if(!goog.isNull(replayStrokeState) && replayStrokeState.lineCap == strokeState.lineCap && replayStrokeState.lineDash == strokeState.lineDash && replayStrokeState.lineJoin == strokeState.lineJoin && replayStrokeState.lineWidth == strokeState.lineWidth && replayStrokeState.miterLimit == strokeState.miterLimit && replayStrokeState.strokeStyle == strokeState.strokeStyle) {
return
}
var setStrokeStyleInstruction = [ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeState.strokeStyle, strokeState.lineWidth, strokeState.lineCap, strokeState.lineJoin, strokeState.miterLimit, strokeState.lineDash];
this.instructions.push(setStrokeStyleInstruction);
this.hitDetectionInstructions.push(setStrokeStyleInstruction);
if(goog.isNull(replayStrokeState)) {
this.replayStrokeState_ = {lineCap:strokeState.lineCap, lineDash:strokeState.lineDash, lineJoin:strokeState.lineJoin, lineWidth:strokeState.lineWidth, miterLimit:strokeState.miterLimit, strokeStyle:strokeState.strokeStyle}
}else {
replayStrokeState.lineCap = strokeState.lineCap;
replayStrokeState.lineDash = strokeState.lineDash;
replayStrokeState.lineJoin = strokeState.lineJoin;
replayStrokeState.lineWidth = strokeState.lineWidth;
replayStrokeState.miterLimit = strokeState.miterLimit;
replayStrokeState.strokeStyle = strokeState.strokeStyle
}
};
ol.render.canvas.TextReplay.prototype.setReplayTextState_ = function(textState) {
var replayTextState = this.replayTextState_;
if(!goog.isNull(replayTextState) && replayTextState.font == textState.font && replayTextState.textAlign == textState.textAlign && replayTextState.textBaseline == textState.textBaseline) {
return
}
var setTextStyleInstruction = [ol.render.canvas.Instruction.SET_TEXT_STYLE, textState.font, textState.textAlign, textState.textBaseline];
this.instructions.push(setTextStyleInstruction);
this.hitDetectionInstructions.push(setTextStyleInstruction);
if(goog.isNull(replayTextState)) {
this.replayTextState_ = {font:textState.font, textAlign:textState.textAlign, textBaseline:textState.textBaseline}
}else {
replayTextState.font = textState.font;
replayTextState.textAlign = textState.textAlign;
replayTextState.textBaseline = textState.textBaseline
}
};
ol.render.canvas.TextReplay.prototype.setTextStyle = function(textStyle) {
if(goog.isNull(textStyle)) {
this.text_ = ""
}else {
var textFillStyle = textStyle.getFill();
if(goog.isNull(textFillStyle)) {
this.textFillState_ = null
}else {
var textFillStyleColor = textFillStyle.getColor();
var fillStyle = ol.color.asString(!goog.isNull(textFillStyleColor) ? textFillStyleColor : ol.render.canvas.defaultFillStyle);
if(goog.isNull(this.textFillState_)) {
this.textFillState_ = {fillStyle:fillStyle}
}else {
var textFillState = this.textFillState_;
textFillState.fillStyle = fillStyle
}
}
var textStrokeStyle = textStyle.getStroke();
if(goog.isNull(textStrokeStyle)) {
this.textStrokeState_ = null
}else {
var textStrokeStyleColor = textStrokeStyle.getColor();
var textStrokeStyleLineCap = textStrokeStyle.getLineCap();
var textStrokeStyleLineDash = textStrokeStyle.getLineDash();
var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();
var textStrokeStyleWidth = textStrokeStyle.getWidth();
var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();
var lineCap = goog.isDef(textStrokeStyleLineCap) ? textStrokeStyleLineCap : ol.render.canvas.defaultLineCap;
var lineDash = goog.isDefAndNotNull(textStrokeStyleLineDash) ? textStrokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
var lineJoin = goog.isDef(textStrokeStyleLineJoin) ? textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
var lineWidth = goog.isDef(textStrokeStyleWidth) ? textStrokeStyleWidth : ol.render.canvas.defaultLineWidth;
var miterLimit = goog.isDef(textStrokeStyleMiterLimit) ? textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
var strokeStyle = ol.color.asString(!goog.isNull(textStrokeStyleColor) ? textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle);
if(goog.isNull(this.textStrokeState_)) {
this.textStrokeState_ = {lineCap:lineCap, lineDash:lineDash, lineJoin:lineJoin, lineWidth:lineWidth, miterLimit:miterLimit, strokeStyle:strokeStyle}
}else {
var textStrokeState = this.textStrokeState_;
textStrokeState.lineCap = lineCap;
textStrokeState.lineDash = lineDash;
textStrokeState.lineJoin = lineJoin;
textStrokeState.lineWidth = lineWidth;
textStrokeState.miterLimit = miterLimit;
textStrokeState.strokeStyle = strokeStyle
}
}
var textFont = textStyle.getFont();
var textOffsetX = textStyle.getOffsetX();
var textOffsetY = textStyle.getOffsetY();
var textRotation = textStyle.getRotation();
var textScale = textStyle.getScale();
var textText = textStyle.getText();
var textTextAlign = textStyle.getTextAlign();
var textTextBaseline = textStyle.getTextBaseline();
var font = goog.isDef(textFont) ? textFont : ol.render.canvas.defaultFont;
var textAlign = goog.isDef(textTextAlign) ? textTextAlign : ol.render.canvas.defaultTextAlign;
var textBaseline = goog.isDef(textTextBaseline) ? textTextBaseline : ol.render.canvas.defaultTextBaseline;
if(goog.isNull(this.textState_)) {
this.textState_ = {font:font, textAlign:textAlign, textBaseline:textBaseline}
}else {
var textState = this.textState_;
textState.font = font;
textState.textAlign = textAlign;
textState.textBaseline = textBaseline
}
this.text_ = goog.isDef(textText) ? textText : "";
this.textOffsetX_ = goog.isDef(textOffsetX) ? textOffsetX : 0;
this.textOffsetY_ = goog.isDef(textOffsetY) ? textOffsetY : 0;
this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0;
this.textScale_ = goog.isDef(textScale) ? textScale : 1
}
};
ol.render.canvas.ReplayGroup = function(tolerance, maxExtent, resolution) {
this.tolerance_ = tolerance;
this.maxExtent_ = maxExtent;
this.resolution_ = resolution;
this.replaysByZIndex_ = {};
this.hitDetectionContext_ = ol.dom.createCanvasContext2D(1, 1);
this.hitDetectionTransform_ = goog.vec.Mat4.createNumber()
};
ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
goog.array.sort(zs);
return this.replay_(zs, context, extent, pixelRatio, transform, viewRotation, skippedFeaturesHash)
};
ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(zs, context, extent, transform, viewRotation, skippedFeaturesHash, geometryCallback) {
var i, ii, replays, replayType, replay, result;
for(i = 0, ii = zs.length;i < ii;++i) {
replays = this.replaysByZIndex_[zs[i].toString()];
for(replayType in replays) {
replay = replays[replayType];
if(ol.extent.intersects(extent, replay.getExtent())) {
result = replay.replayHitDetection(context, transform, viewRotation, skippedFeaturesHash, geometryCallback);
if(result) {
return result
}
}
}
}
return undefined
};
ol.render.canvas.ReplayGroup.prototype.replay_ = function(zs, context, extent, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
var maxExtent = this.maxExtent_;
var minX = maxExtent[0];
var minY = maxExtent[1];
var maxX = maxExtent[2];
var maxY = maxExtent[3];
var flatClipCoords = ol.geom.flat.transform.transform2D([minX, minY, minX, maxY, maxX, maxY, maxX, minY], 2, transform);
context.save();
context.beginPath();
context.moveTo(flatClipCoords[0], flatClipCoords[1]);
context.lineTo(flatClipCoords[2], flatClipCoords[3]);
context.lineTo(flatClipCoords[4], flatClipCoords[5]);
context.lineTo(flatClipCoords[6], flatClipCoords[7]);
context.closePath();
context.clip();
var i, ii, j, jj, replays, replayType, replay, result;
for(i = 0, ii = zs.length;i < ii;++i) {
replays = this.replaysByZIndex_[zs[i].toString()];
for(j = 0, jj = ol.render.REPLAY_ORDER.length;j < jj;++j) {
replay = replays[ol.render.REPLAY_ORDER[j]];
if(goog.isDef(replay) && ol.extent.intersects(extent, replay.getExtent())) {
result = replay.replay(context, pixelRatio, transform, viewRotation, skippedFeaturesHash);
if(result) {
return result
}
}
}
}
context.restore();
return undefined
};
ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(extent, resolution, rotation, coordinate, skippedFeaturesHash, callback) {
var transform = this.hitDetectionTransform_;
ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]);
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
goog.array.sort(zs, function(a, b) {
return b - a
});
var context = this.hitDetectionContext_;
context.clearRect(0, 0, 1, 1);
return this.replayHitDetection_(zs, context, extent, transform, rotation, skippedFeaturesHash, function(geometry, data) {
var imageData = context.getImageData(0, 0, 1, 1).data;
if(imageData[3] > 0) {
var result = callback(geometry, data);
if(result) {
return result
}
context.clearRect(0, 0, 1, 1)
}
})
};
ol.render.canvas.ReplayGroup.prototype.finish = function() {
var zKey;
for(zKey in this.replaysByZIndex_) {
var replays = this.replaysByZIndex_[zKey];
var replayKey;
for(replayKey in replays) {
replays[replayKey].finish()
}
}
};
ol.render.canvas.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {
var zIndexKey = goog.isDef(zIndex) ? zIndex.toString() : "0";
var replays = this.replaysByZIndex_[zIndexKey];
if(!goog.isDef(replays)) {
replays = {};
this.replaysByZIndex_[zIndexKey] = replays
}
var replay = replays[replayType];
if(!goog.isDef(replay)) {
var Constructor = ol.render.canvas.BATCH_CONSTRUCTORS_[replayType];
goog.asserts.assert(goog.isDef(Constructor));
replay = new Constructor(this.tolerance_, this.maxExtent_, this.resolution_);
replays[replayType] = replay
}
return replay
};
ol.render.canvas.ReplayGroup.prototype.isEmpty = function() {
return goog.object.isEmpty(this.replaysByZIndex_)
};
ol.render.canvas.BATCH_CONSTRUCTORS_ = {"Image":ol.render.canvas.ImageReplay, "LineString":ol.render.canvas.LineStringReplay, "Polygon":ol.render.canvas.PolygonReplay, "Text":ol.render.canvas.TextReplay};
goog.provide("ol.geom.Circle");
goog.require("goog.asserts");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.deflate");
ol.geom.Circle = function(center, opt_radius, opt_layout) {
goog.base(this);
var radius = goog.isDef(opt_radius) ? opt_radius : 0;
this.setCenterAndRadius(center, radius, (opt_layout))
};
goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry);
ol.geom.Circle.prototype.clone = function() {
var circle = new ol.geom.Circle(null);
circle.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
return circle
};
ol.geom.Circle.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
var flatCoordinates = this.flatCoordinates;
var dx = x - flatCoordinates[0];
var dy = y - flatCoordinates[1];
var squaredDistance = dx * dx + dy * dy;
if(squaredDistance < minSquaredDistance) {
var i;
if(squaredDistance === 0) {
for(i = 0;i < this.stride;++i) {
closestPoint[i] = flatCoordinates[i]
}
}else {
var delta = this.getRadius() / Math.sqrt(squaredDistance);
closestPoint[0] = flatCoordinates[0] + delta * dx;
closestPoint[1] = flatCoordinates[1] + delta * dy;
for(i = 2;i < this.stride;++i) {
closestPoint[i] = flatCoordinates[i]
}
}
closestPoint.length = this.stride;
return squaredDistance
}else {
return minSquaredDistance
}
};
ol.geom.Circle.prototype.containsXY = function(x, y) {
var flatCoordinates = this.flatCoordinates;
var dx = x - flatCoordinates[0];
var dy = y - flatCoordinates[1];
return dx * dx + dy * dy <= this.getRadiusSquared_()
};
ol.geom.Circle.prototype.getCenter = function() {
return this.flatCoordinates.slice(0, this.stride)
};
ol.geom.Circle.prototype.getExtent = function(opt_extent) {
if(this.extentRevision != this.getRevision()) {
var flatCoordinates = this.flatCoordinates;
var radius = flatCoordinates[this.stride] - flatCoordinates[0];
this.extent = ol.extent.createOrUpdate(flatCoordinates[0] - radius, flatCoordinates[1] - radius, flatCoordinates[0] + radius, flatCoordinates[1] + radius, this.extent);
this.extentRevision = this.getRevision()
}
goog.asserts.assert(goog.isDef(this.extent));
return ol.extent.returnOrUpdate(this.extent, opt_extent)
};
ol.geom.Circle.prototype.getRadius = function() {
return Math.sqrt(this.getRadiusSquared_())
};
ol.geom.Circle.prototype.getRadiusSquared_ = function() {
var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];
var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];
return dx * dx + dy * dy
};
ol.geom.Circle.prototype.getSimplifiedGeometry = function(squaredTolerance) {
return this
};
ol.geom.Circle.prototype.getType = function() {
return ol.geom.GeometryType.CIRCLE
};
ol.geom.Circle.prototype.setCenter = function(center) {
var stride = this.stride;
goog.asserts.assert(center.length == stride);
var radius = this.flatCoordinates[stride] - this.flatCoordinates[0];
var flatCoordinates = center.slice();
flatCoordinates[stride] = flatCoordinates[0] + radius;
var i;
for(i = 1;i < stride;++i) {
flatCoordinates[stride + i] = center[i]
}
this.setFlatCoordinates(this.layout, flatCoordinates)
};
ol.geom.Circle.prototype.setCenterAndRadius = function(center, radius, opt_layout) {
if(goog.isNull(center)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null)
}else {
this.setLayout(opt_layout, center, 0);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
var flatCoordinates = this.flatCoordinates;
var offset = ol.geom.flat.deflate.coordinate(flatCoordinates, 0, center, this.stride);
flatCoordinates[offset++] = flatCoordinates[0] + radius;
var i, ii;
for(i = 1, ii = this.stride;i < ii;++i) {
flatCoordinates[offset++] = flatCoordinates[i]
}
flatCoordinates.length = offset;
this.dispatchChangeEvent()
}
};
ol.geom.Circle.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.dispatchChangeEvent()
};
ol.geom.Circle.prototype.setRadius = function(radius) {
goog.asserts.assert(!goog.isNull(this.flatCoordinates));
this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;
this.dispatchChangeEvent()
};
ol.geom.Circle.prototype.transform = goog.abstractMethod;
goog.provide("ol.geom.GeometryCollection");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.extent");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
ol.geom.GeometryCollection = function(opt_geometries) {
goog.base(this);
this.geometries_ = goog.isDef(opt_geometries) ? opt_geometries : null;
this.listenGeometriesChange_()
};
goog.inherits(ol.geom.GeometryCollection, ol.geom.Geometry);
ol.geom.GeometryCollection.cloneGeometries_ = function(geometries) {
var clonedGeometries = [];
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
clonedGeometries.push(geometries[i].clone())
}
return clonedGeometries
};
ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() {
var i, ii;
if(goog.isNull(this.geometries_)) {
return
}
for(i = 0, ii = this.geometries_.length;i < ii;++i) {
goog.events.unlisten(this.geometries_[i], goog.events.EventType.CHANGE, this.dispatchChangeEvent, false, this)
}
};
ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() {
var i, ii;
if(goog.isNull(this.geometries_)) {
return
}
for(i = 0, ii = this.geometries_.length;i < ii;++i) {
goog.events.listen(this.geometries_[i], goog.events.EventType.CHANGE, this.dispatchChangeEvent, false, this)
}
};
ol.geom.GeometryCollection.prototype.clone = function() {
var geometryCollection = new ol.geom.GeometryCollection(null);
geometryCollection.setGeometries(this.geometries_);
return geometryCollection
};
ol.geom.GeometryCollection.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
var geometries = this.geometries_;
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
minSquaredDistance = geometries[i].closestPointXY(x, y, closestPoint, minSquaredDistance)
}
return minSquaredDistance
};
ol.geom.GeometryCollection.prototype.containsXY = function(x, y) {
var geometries = this.geometries_;
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
if(geometries[i].containsXY(x, y)) {
return true
}
}
return false
};
ol.geom.GeometryCollection.prototype.getExtent = function(opt_extent) {
if(this.extentRevision != this.getRevision()) {
var extent = ol.extent.createOrUpdateEmpty(this.extent);
var geometries = this.geometries_;
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
ol.extent.extend(extent, geometries[i].getExtent())
}
this.extent = extent;
this.extentRevision = this.getRevision()
}
goog.asserts.assert(goog.isDef(this.extent));
return ol.extent.returnOrUpdate(this.extent, opt_extent)
};
ol.geom.GeometryCollection.prototype.getGeometries = function() {
return ol.geom.GeometryCollection.cloneGeometries_(this.geometries_)
};
ol.geom.GeometryCollection.prototype.getGeometriesArray = function() {
return this.geometries_
};
ol.geom.GeometryCollection.prototype.getSimplifiedGeometry = function(squaredTolerance) {
if(this.simplifiedGeometryRevision != this.getRevision()) {
goog.object.clear(this.simplifiedGeometryCache);
this.simplifiedGeometryMaxMinSquaredTolerance = 0;
this.simplifiedGeometryRevision = this.getRevision()
}
if(squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance) {
return this
}
var key = squaredTolerance.toString();
if(this.simplifiedGeometryCache.hasOwnProperty(key)) {
return this.simplifiedGeometryCache[key]
}else {
var simplifiedGeometries = [];
var geometries = this.geometries_;
var simplified = false;
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
var geometry = geometries[i];
var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);
simplifiedGeometries.push(simplifiedGeometry);
if(simplifiedGeometry !== geometry) {
simplified = true
}
}
if(simplified) {
var simplifiedGeometryCollection = new ol.geom.GeometryCollection(null);
simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);
this.simplifiedGeometryCache[key] = simplifiedGeometryCollection;
return simplifiedGeometryCollection
}else {
this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
return this
}
}
};
ol.geom.GeometryCollection.prototype.getType = function() {
return ol.geom.GeometryType.GEOMETRY_COLLECTION
};
ol.geom.GeometryCollection.prototype.isEmpty = function() {
return goog.array.isEmpty(this.geometries_)
};
ol.geom.GeometryCollection.prototype.setGeometries = function(geometries) {
this.setGeometriesArray(ol.geom.GeometryCollection.cloneGeometries_(geometries))
};
ol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) {
this.unlistenGeometriesChange_();
this.geometries_ = geometries;
this.listenGeometriesChange_();
this.dispatchChangeEvent()
};
ol.geom.GeometryCollection.prototype.transform = function(transformFn) {
var geometries = this.geometries_;
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
geometries[i].transform(transformFn)
}
this.dispatchChangeEvent()
};
ol.geom.GeometryCollection.prototype.disposeInternal = function() {
this.unlistenGeometriesChange_();
goog.base(this, "disposeInternal")
};
goog.provide("ol.geom.flat.interpolate");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.math");
ol.geom.flat.interpolate.lineString = function(flatCoordinates, offset, end, stride, fraction, opt_dest) {
goog.asserts.assert(0 <= fraction && fraction <= 1);
var pointX = NaN;
var pointY = NaN;
var n = (end - offset) / stride;
if(n === 0) {
goog.asserts.fail()
}else {
if(n == 1) {
pointX = flatCoordinates[offset];
pointY = flatCoordinates[offset + 1]
}else {
if(n == 2) {
pointX = (1 - fraction) * flatCoordinates[offset] + fraction * flatCoordinates[offset + stride];
pointY = (1 - fraction) * flatCoordinates[offset + 1] + fraction * flatCoordinates[offset + stride + 1]
}else {
var x1 = flatCoordinates[offset];
var y1 = flatCoordinates[offset + 1];
var length = 0;
var cumulativeLengths = [0];
var i;
for(i = offset + stride;i < end;i += stride) {
var x2 = flatCoordinates[i];
var y2 = flatCoordinates[i + 1];
length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
cumulativeLengths.push(length);
x1 = x2;
y1 = y2
}
var target = fraction * length;
var index = goog.array.binarySearch(cumulativeLengths, target);
if(index < 0) {
var t = (target - cumulativeLengths[-index - 2]) / (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);
var o = offset + (-index - 2) * stride;
pointX = goog.math.lerp(flatCoordinates[o], flatCoordinates[o + stride], t);
pointY = goog.math.lerp(flatCoordinates[o + 1], flatCoordinates[o + stride + 1], t)
}else {
pointX = flatCoordinates[offset + index * stride];
pointY = flatCoordinates[offset + index * stride + 1]
}
}
}
}
if(goog.isDefAndNotNull(opt_dest)) {
opt_dest.push(pointX, pointY);
return opt_dest
}else {
return[pointX, pointY]
}
};
ol.geom.flat.lineStringCoordinateAtM = function(flatCoordinates, offset, end, stride, m, extrapolate) {
if(end == offset) {
return null
}
var coordinate;
if(m < flatCoordinates[offset + stride - 1]) {
if(extrapolate) {
coordinate = flatCoordinates.slice(offset, offset + stride);
coordinate[stride - 1] = m;
return coordinate
}else {
return null
}
}else {
if(flatCoordinates[end - 1] < m) {
if(extrapolate) {
coordinate = flatCoordinates.slice(end - stride, end);
coordinate[stride - 1] = m;
return coordinate
}else {
return null
}
}
}
if(m == flatCoordinates[offset + stride - 1]) {
return flatCoordinates.slice(offset, offset + stride)
}
var lo = offset / stride;
var hi = end / stride;
while(lo < hi) {
var mid = lo + hi >> 1;
if(m < flatCoordinates[(mid + 1) * stride - 1]) {
hi = mid
}else {
lo = mid + 1
}
}
var m0 = flatCoordinates[lo * stride - 1];
if(m == m0) {
return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride)
}
var m1 = flatCoordinates[(lo + 1) * stride - 1];
goog.asserts.assert(m0 < m);
goog.asserts.assert(m <= m1);
var t = (m - m0) / (m1 - m0);
coordinate = [];
var i;
for(i = 0;i < stride - 1;++i) {
coordinate.push(goog.math.lerp(flatCoordinates[(lo - 1) * stride + i], flatCoordinates[lo * stride + i], t))
}
coordinate.push(m);
goog.asserts.assert(coordinate.length == stride);
return coordinate
};
ol.geom.flat.lineStringsCoordinateAtM = function(flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {
if(interpolate) {
return ol.geom.flat.lineStringCoordinateAtM(flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate)
}
var coordinate;
if(m < flatCoordinates[stride - 1]) {
if(extrapolate) {
coordinate = flatCoordinates.slice(0, stride);
coordinate[stride - 1] = m;
return coordinate
}else {
return null
}
}
if(flatCoordinates[flatCoordinates.length - 1] < m) {
if(extrapolate) {
coordinate = flatCoordinates.slice(flatCoordinates.length - stride);
coordinate[stride - 1] = m;
return coordinate
}else {
return null
}
}
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
if(offset == end) {
continue
}
if(m < flatCoordinates[offset + stride - 1]) {
return null
}else {
if(m <= flatCoordinates[end - 1]) {
return ol.geom.flat.lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, false)
}
}
offset = end
}
goog.asserts.fail();
return null
};
goog.provide("ol.geom.flat.length");
ol.geom.flat.length.lineString = function(flatCoordinates, offset, end, stride) {
var x1 = flatCoordinates[offset];
var y1 = flatCoordinates[offset + 1];
var length = 0;
var i;
for(i = offset + stride;i < end;i += stride) {
var x2 = flatCoordinates[i];
var y2 = flatCoordinates[i + 1];
length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
x1 = x2;
y1 = y2
}
return length
};
ol.geom.flat.length.linearRing = function(flatCoordinates, offset, end, stride) {
var perimeter = ol.geom.flat.length.lineString(flatCoordinates, offset, end, stride);
var dx = flatCoordinates[end - stride] - flatCoordinates[offset];
var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];
perimeter += Math.sqrt(dx * dx + dy * dy);
return perimeter
};
goog.provide("ol.geom.LineString");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.closest");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.geom.flat.interpolate");
goog.require("ol.geom.flat.length");
goog.require("ol.geom.flat.simplify");
ol.geom.LineString = function(coordinates, opt_layout) {
goog.base(this);
this.flatMidpoint_ = null;
this.flatMidpointRevision_ = -1;
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.LineString, ol.geom.SimpleGeometry);
ol.geom.LineString.prototype.appendCoordinate = function(coordinate) {
goog.asserts.assert(coordinate.length == this.stride);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = coordinate.slice()
}else {
ol.array.safeExtend(this.flatCoordinates, coordinate)
}
this.dispatchChangeEvent()
};
ol.geom.LineString.prototype.clone = function() {
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
return lineString
};
ol.geom.LineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
if(this.maxDeltaRevision_ != this.getRevision()) {
this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
this.maxDeltaRevision_ = this.getRevision()
}
return ol.geom.flat.closest.getClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance)
};
ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) {
if(this.layout != ol.geom.GeometryLayout.XYM && this.layout != ol.geom.GeometryLayout.XYZM) {
return null
}
var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false;
return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, m, extrapolate)
};
ol.geom.LineString.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
};
ol.geom.LineString.prototype.getLength = function() {
return ol.geom.flat.length.lineString(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
};
ol.geom.LineString.prototype.getFlatMidpoint = function() {
if(this.flatMidpointRevision_ != this.getRevision()) {
this.flatMidpoint_ = ol.geom.flat.interpolate.lineString(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0.5, this.flatMidpoint_);
this.flatMidpointRevision_ = this.getRevision()
}
return this.flatMidpoint_
};
ol.geom.LineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);
var simplifiedLineString = new ol.geom.LineString(null);
simplifiedLineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);
return simplifiedLineString
};
ol.geom.LineString.prototype.getType = function() {
return ol.geom.GeometryType.LINE_STRING
};
ol.geom.LineString.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null)
}else {
this.setLayout(opt_layout, coordinates, 1);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(this.flatCoordinates, 0, coordinates, this.stride);
this.dispatchChangeEvent()
}
};
ol.geom.LineString.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.dispatchChangeEvent()
};
goog.provide("ol.geom.MultiLineString");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.closest");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.geom.flat.interpolate");
goog.require("ol.geom.flat.simplify");
ol.geom.MultiLineString = function(coordinates, opt_layout) {
goog.base(this);
this.ends_ = [];
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry);
ol.geom.MultiLineString.prototype.appendLineString = function(lineString) {
goog.asserts.assert(lineString.getLayout() == this.layout);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = lineString.getFlatCoordinates().slice()
}else {
ol.array.safeExtend(this.flatCoordinates, lineString.getFlatCoordinates().slice())
}
this.ends_.push(this.flatCoordinates.length);
this.dispatchChangeEvent()
};
ol.geom.MultiLineString.prototype.clone = function() {
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.ends_.slice());
return multiLineString
};
ol.geom.MultiLineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
if(this.maxDeltaRevision_ != this.getRevision()) {
this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0));
this.maxDeltaRevision_ = this.getRevision()
}
return ol.geom.flat.closest.getsClosestPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance)
};
ol.geom.MultiLineString.prototype.getCoordinateAtM = function(m, opt_extrapolate, opt_interpolate) {
if(this.layout != ol.geom.GeometryLayout.XYM && this.layout != ol.geom.GeometryLayout.XYZM || this.flatCoordinates.length === 0) {
return null
}
var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false;
var interpolate = goog.isDef(opt_interpolate) ? opt_interpolate : false;
return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0, this.ends_, this.stride, m, extrapolate, interpolate)
};
ol.geom.MultiLineString.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinatess(this.flatCoordinates, 0, this.ends_, this.stride)
};
ol.geom.MultiLineString.prototype.getEnds = function() {
return this.ends_
};
ol.geom.MultiLineString.prototype.getLineString = function(index) {
goog.asserts.assert(0 <= index && index < this.ends_.length);
if(index < 0 || this.ends_.length <= index) {
return null
}
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));
return lineString
};
ol.geom.MultiLineString.prototype.getLineStrings = function() {
var flatCoordinates = this.flatCoordinates;
var ends = this.ends_;
var layout = this.layout;
var lineStrings = [];
var offset = 0;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));
lineStrings.push(lineString);
offset = end
}
return lineStrings
};
ol.geom.MultiLineString.prototype.getFlatMidpoints = function() {
var midpoints = [];
var flatCoordinates = this.flatCoordinates;
var offset = 0;
var ends = this.ends_;
var stride = this.stride;
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
var end = ends[i];
var midpoint = ol.geom.flat.interpolate.lineString(flatCoordinates, offset, end, stride, 0.5);
ol.array.safeExtend(midpoints, midpoint);
offset = end
}
return midpoints
};
ol.geom.MultiLineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
var simplifiedEnds = [];
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeuckers(this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0, simplifiedEnds);
var simplifiedMultiLineString = new ol.geom.MultiLineString(null);
simplifiedMultiLineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);
return simplifiedMultiLineString
};
ol.geom.MultiLineString.prototype.getType = function() {
return ol.geom.GeometryType.MULTI_LINE_STRING
};
ol.geom.MultiLineString.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_)
}else {
this.setLayout(opt_layout, coordinates, 2);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
var ends = ol.geom.flat.deflate.coordinatess(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
this.dispatchChangeEvent()
}
};
ol.geom.MultiLineString.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {
if(goog.isNull(flatCoordinates)) {
goog.asserts.assert(!goog.isNull(ends) && ends.length === 0)
}else {
if(ends.length === 0) {
goog.asserts.assert(flatCoordinates.length === 0)
}else {
goog.asserts.assert(flatCoordinates.length == ends[ends.length - 1])
}
}
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.ends_ = ends;
this.dispatchChangeEvent()
};
ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) {
var layout = ol.geom.GeometryLayout.XY;
var flatCoordinates = [];
var ends = [];
var i, ii;
for(i = 0, ii = lineStrings.length;i < ii;++i) {
var lineString = lineStrings[i];
if(i === 0) {
layout = lineString.getLayout()
}else {
goog.asserts.assert(lineString.getLayout() == layout)
}
ol.array.safeExtend(flatCoordinates, lineString.getFlatCoordinates());
ends.push(flatCoordinates.length)
}
this.setFlatCoordinates(layout, flatCoordinates, ends)
};
goog.provide("ol.geom.MultiPoint");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.Point");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.math");
ol.geom.MultiPoint = function(coordinates, opt_layout) {
goog.base(this);
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry);
ol.geom.MultiPoint.prototype.appendPoint = function(point) {
goog.asserts.assert(point.getLayout() == this.layout);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = point.getFlatCoordinates().slice()
}else {
ol.array.safeExtend(this.flatCoordinates, point.getFlatCoordinates())
}
this.dispatchChangeEvent()
};
ol.geom.MultiPoint.prototype.clone = function() {
var multiPoint = new ol.geom.MultiPoint(null);
multiPoint.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
return multiPoint
};
ol.geom.MultiPoint.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
var flatCoordinates = this.flatCoordinates;
var stride = this.stride;
var i, ii, j;
for(i = 0, ii = flatCoordinates.length;i < ii;i += stride) {
var squaredDistance = ol.math.squaredDistance(x, y, flatCoordinates[i], flatCoordinates[i + 1]);
if(squaredDistance < minSquaredDistance) {
minSquaredDistance = squaredDistance;
for(j = 0;j < stride;++j) {
closestPoint[j] = flatCoordinates[i + j]
}
closestPoint.length = stride
}
}
return minSquaredDistance
};
ol.geom.MultiPoint.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
};
ol.geom.MultiPoint.prototype.getPoint = function(index) {
var n = goog.isNull(this.flatCoordinates) ? 0 : this.flatCoordinates.length / this.stride;
goog.asserts.assert(0 <= index && index < n);
if(index < 0 || n <= index) {
return null
}
var point = new ol.geom.Point(null);
point.setFlatCoordinates(this.layout, this.flatCoordinates.slice(index * this.stride, (index + 1) * this.stride));
return point
};
ol.geom.MultiPoint.prototype.getPoints = function() {
var flatCoordinates = this.flatCoordinates;
var layout = this.layout;
var stride = this.stride;
var points = [];
var i, ii;
for(i = 0, ii = flatCoordinates.length;i < ii;i += stride) {
var point = new ol.geom.Point(null);
point.setFlatCoordinates(layout, flatCoordinates.slice(i, i + stride));
points.push(point)
}
return points
};
ol.geom.MultiPoint.prototype.getType = function() {
return ol.geom.GeometryType.MULTI_POINT
};
ol.geom.MultiPoint.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null)
}else {
this.setLayout(opt_layout, coordinates, 1);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(this.flatCoordinates, 0, coordinates, this.stride);
this.dispatchChangeEvent()
}
};
ol.geom.MultiPoint.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.dispatchChangeEvent()
};
goog.provide("ol.geom.flat.center");
goog.require("ol.extent");
ol.geom.flat.center.linearRingss = function(flatCoordinates, offset, endss, stride) {
var flatCenters = [];
var i, ii;
var extent = ol.extent.createEmpty();
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i];
extent = ol.extent.createOrUpdateFromFlatCoordinates(flatCoordinates, offset, ends[0], stride);
flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);
offset = ends[ends.length - 1]
}
return flatCenters
};
goog.provide("ol.geom.MultiPolygon");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.geom.flat.area");
goog.require("ol.geom.flat.center");
goog.require("ol.geom.flat.closest");
goog.require("ol.geom.flat.contains");
goog.require("ol.geom.flat.deflate");
goog.require("ol.geom.flat.inflate");
goog.require("ol.geom.flat.interiorpoint");
goog.require("ol.geom.flat.orient");
goog.require("ol.geom.flat.simplify");
ol.geom.MultiPolygon = function(coordinates, opt_layout) {
goog.base(this);
this.endss_ = [];
this.flatInteriorPointsRevision_ = -1;
this.flatInteriorPoints_ = null;
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.orientedRevision_ = -1;
this.orientedFlatCoordinates_ = null;
this.setCoordinates(coordinates, (opt_layout))
};
goog.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry);
ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {
goog.asserts.assert(polygon.getLayout() == this.layout);
var ends;
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = polygon.getFlatCoordinates().slice();
ends = polygon.getEnds().slice();
this.endss_.push()
}else {
var offset = this.flatCoordinates.length;
ol.array.safeExtend(this.flatCoordinates, polygon.getFlatCoordinates());
ends = polygon.getEnds().slice();
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
ends[i] += offset
}
}
this.endss_.push(ends);
this.dispatchChangeEvent()
};
ol.geom.MultiPolygon.prototype.clone = function() {
var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.endss_.slice());
return multiPolygon
};
ol.geom.MultiPolygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
return minSquaredDistance
}
if(this.maxDeltaRevision_ != this.getRevision()) {
this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getssMaxSquaredDelta(this.flatCoordinates, 0, this.endss_, this.stride, 0));
this.maxDeltaRevision_ = this.getRevision()
}
return ol.geom.flat.closest.getssClosestPoint(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance)
};
ol.geom.MultiPolygon.prototype.containsXY = function(x, y) {
return ol.geom.flat.contains.linearRingssContainsXY(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y)
};
ol.geom.MultiPolygon.prototype.getArea = function() {
return ol.geom.flat.area.linearRingss(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride)
};
ol.geom.MultiPolygon.prototype.getCoordinates = function() {
return ol.geom.flat.inflate.coordinatesss(this.flatCoordinates, 0, this.endss_, this.stride)
};
ol.geom.MultiPolygon.prototype.getEndss = function() {
return this.endss_
};
ol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() {
if(this.flatInteriorPointsRevision_ != this.getRevision()) {
var flatCenters = ol.geom.flat.center.linearRingss(this.flatCoordinates, 0, this.endss_, this.stride);
this.flatInteriorPoints_ = ol.geom.flat.interiorpoint.linearRingss(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, flatCenters);
this.flatInteriorPointsRevision_ = this.getRevision()
}
return this.flatInteriorPoints_
};
ol.geom.MultiPolygon.prototype.getInteriorPoints = function() {
var interiorPoints = new ol.geom.MultiPoint(null);
interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XY, this.getFlatInteriorPoints().slice());
return interiorPoints
};
ol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() {
if(this.orientedRevision_ != this.getRevision()) {
var flatCoordinates = this.flatCoordinates;
if(ol.geom.flat.linearRingssAreOriented(flatCoordinates, 0, this.endss_, this.stride)) {
this.orientedFlatCoordinates_ = flatCoordinates
}else {
this.orientedFlatCoordinates_ = flatCoordinates.slice();
this.orientedFlatCoordinates_.length = ol.geom.flat.orient.orientLinearRingss(this.orientedFlatCoordinates_, 0, this.endss_, this.stride)
}
this.orientedRevision_ = this.getRevision()
}
return this.orientedFlatCoordinates_
};
ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
var simplifiedEndss = [];
simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizess(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEndss);
var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);
simplifiedMultiPolygon.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);
return simplifiedMultiPolygon
};
ol.geom.MultiPolygon.prototype.getPolygon = function(index) {
goog.asserts.assert(0 <= index && index < this.endss_.length);
if(index < 0 || this.endss_.length <= index) {
return null
}
var offset;
if(index === 0) {
offset = 0
}else {
var prevEnds = this.endss_[index - 1];
offset = prevEnds[prevEnds.length - 1]
}
var ends = this.endss_[index].slice();
var end = ends[ends.length - 1];
if(offset !== 0) {
var i, ii;
for(i = 0, ii = ends.length;i < ii;++i) {
ends[i] -= offset
}
}
var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(this.layout, this.flatCoordinates.slice(offset, end), ends);
return polygon
};
ol.geom.MultiPolygon.prototype.getPolygons = function() {
var layout = this.layout;
var flatCoordinates = this.flatCoordinates;
var endss = this.endss_;
var polygons = [];
var offset = 0;
var i, ii, j, jj;
for(i = 0, ii = endss.length;i < ii;++i) {
var ends = endss[i].slice();
var end = ends[ends.length - 1];
if(offset !== 0) {
for(j = 0, jj = ends.length;j < jj;++j) {
ends[j] -= offset
}
}
var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(layout, flatCoordinates.slice(offset, end), ends);
polygons.push(polygon);
offset = end
}
return polygons
};
ol.geom.MultiPolygon.prototype.getType = function() {
return ol.geom.GeometryType.MULTI_POLYGON
};
ol.geom.MultiPolygon.prototype.setCoordinates = function(coordinates, opt_layout) {
if(goog.isNull(coordinates)) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_)
}else {
this.setLayout(opt_layout, coordinates, 3);
if(goog.isNull(this.flatCoordinates)) {
this.flatCoordinates = []
}
var endss = ol.geom.flat.deflate.coordinatesss(this.flatCoordinates, 0, coordinates, this.stride, this.endss_);
var lastEnds = endss[endss.length - 1];
this.flatCoordinates.length = lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1];
this.dispatchChangeEvent()
}
};
ol.geom.MultiPolygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, endss) {
goog.asserts.assert(!goog.isNull(endss));
if(goog.isNull(flatCoordinates) || flatCoordinates.length === 0) {
goog.asserts.assert(endss.length === 0)
}else {
goog.asserts.assert(endss.length > 0);
var ends = endss[endss.length - 1];
goog.asserts.assert(flatCoordinates.length == ends[ends.length - 1])
}
this.setFlatCoordinatesInternal(layout, flatCoordinates);
this.endss_ = endss;
this.dispatchChangeEvent()
};
ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) {
var layout = ol.geom.GeometryLayout.XY;
var flatCoordinates = [];
var endss = [];
var i, ii, ends;
for(i = 0, ii = polygons.length;i < ii;++i) {
var polygon = polygons[i];
if(i === 0) {
layout = polygon.getLayout()
}else {
goog.asserts.assert(polygon.getLayout() == layout)
}
var offset = flatCoordinates.length;
ends = polygon.getEnds();
var j, jj;
for(j = 0, jj = ends.length;j < jj;++j) {
ends[j] += offset
}
ol.array.safeExtend(flatCoordinates, polygon.getFlatCoordinates());
endss.push(ends)
}
this.setFlatCoordinates(layout, flatCoordinates, endss)
};
goog.provide("ol.renderer.vector");
goog.require("goog.asserts");
goog.require("ol.geom.Circle");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.render.IReplayGroup");
goog.require("ol.style.ImageState");
goog.require("ol.style.Style");
ol.renderer.vector.defaultOrder = function(feature1, feature2) {
return goog.getUid(feature1) - goog.getUid(feature2)
};
ol.renderer.vector.renderCircleGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.Circle);
var fillStyle = style.getFill();
var strokeStyle = style.getStroke();
if(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) {
var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawCircleGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, data)
}
};
ol.renderer.vector.renderFeature = function(replayGroup, feature, style, squaredTolerance, data, listener, thisArg) {
var loading = false;
var imageStyle, imageState;
imageStyle = style.getImage();
if(goog.isNull(imageStyle)) {
ol.renderer.vector.renderFeature_(replayGroup, feature, style, squaredTolerance, data)
}else {
imageState = imageStyle.getImageState();
if(imageState == ol.style.ImageState.LOADED || imageState == ol.style.ImageState.ERROR) {
imageStyle.unlistenImageChange(listener, thisArg);
if(imageState == ol.style.ImageState.LOADED) {
ol.renderer.vector.renderFeature_(replayGroup, feature, style, squaredTolerance, data)
}
}else {
if(imageState == ol.style.ImageState.IDLE) {
imageStyle.load()
}
imageState = imageStyle.getImageState();
goog.asserts.assert(imageState == ol.style.ImageState.LOADING);
imageStyle.listenImageChange(listener, thisArg);
loading = true
}
}
return loading
};
ol.renderer.vector.renderFeature_ = function(replayGroup, feature, style, squaredTolerance, data) {
var geometry = feature.getGeometry();
if(goog.isNull(geometry)) {
return
}
var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);
var geometryRenderer = ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()];
goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer(replayGroup, simplifiedGeometry, style, data)
};
ol.renderer.vector.renderGeometryCollectionGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection);
var geometries = geometry.getGeometriesArray();
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
var geometryRenderer = ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()];
goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer(replayGroup, geometries[i], style, data)
}
};
ol.renderer.vector.renderLineStringGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
var strokeStyle = style.getStroke();
if(!goog.isNull(strokeStyle)) {
var lineStringReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawLineStringGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, data)
}
};
ol.renderer.vector.renderMultiLineStringGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
var strokeStyle = style.getStroke();
if(!goog.isNull(strokeStyle)) {
var lineStringReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawMultiLineStringGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
var flatMidpointCoordinates = geometry.getFlatMidpoints();
textReplay.drawText(flatMidpointCoordinates, 0, flatMidpointCoordinates.length, 2, geometry, data)
}
};
ol.renderer.vector.renderMultiPolygonGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon);
var fillStyle = style.getFill();
var strokeStyle = style.getStroke();
if(!goog.isNull(strokeStyle) || !goog.isNull(fillStyle)) {
var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawMultiPolygonGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints();
textReplay.drawText(flatInteriorPointCoordinates, 0, flatInteriorPointCoordinates.length, 2, geometry, data)
}
};
ol.renderer.vector.renderPointGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
var imageStyle = style.getImage();
if(!goog.isNull(imageStyle)) {
var imageReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle);
imageReplay.drawPointGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getCoordinates(), 0, 2, 2, geometry, data)
}
};
ol.renderer.vector.renderMultiPointGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint);
var imageStyle = style.getImage();
if(!goog.isNull(imageStyle)) {
var imageReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle);
imageReplay.drawMultiPointGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
var flatCoordinates = geometry.getFlatCoordinates();
textReplay.drawText(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), geometry, data)
}
};
ol.renderer.vector.renderPolygonGeometry_ = function(replayGroup, geometry, style, data) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
var fillStyle = style.getFill();
var strokeStyle = style.getStroke();
if(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) {
var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawPolygonGeometry(geometry, data)
}
var textStyle = style.getText();
if(!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, data)
}
};
ol.renderer.vector.GEOMETRY_RENDERERS_ = {"Point":ol.renderer.vector.renderPointGeometry_, "LineString":ol.renderer.vector.renderLineStringGeometry_, "Polygon":ol.renderer.vector.renderPolygonGeometry_, "MultiPoint":ol.renderer.vector.renderMultiPointGeometry_, "MultiLineString":ol.renderer.vector.renderMultiLineStringGeometry_, "MultiPolygon":ol.renderer.vector.renderMultiPolygonGeometry_, "GeometryCollection":ol.renderer.vector.renderGeometryCollectionGeometry_, "Circle":ol.renderer.vector.renderCircleGeometry_};
goog.provide("ol.structs.RBush");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.extent");
ol.structs.RBushNode = function(extent, height, children, value) {
if(height === 0) {
goog.asserts.assert(goog.isNull(children));
goog.asserts.assert(!goog.isNull(value))
}else {
goog.asserts.assert(!goog.isNull(children));
goog.asserts.assert(goog.isNull(value))
}
this.extent = extent;
this.height = height;
this.children = children;
this.value = value
};
ol.structs.RBushNode.compareMinX = function(node1, node2) {
return node1.extent[0] - node2.extent[0]
};
ol.structs.RBushNode.compareMinY = function(node1, node2) {
return node1.extent[1] - node2.extent[1]
};
ol.structs.RBushNode.prototype.assertValid = function(maxEntries) {
if(this.height === 0) {
goog.asserts.assert(goog.isNull(this.children));
goog.asserts.assert(!goog.isNull(this.value))
}else {
goog.asserts.assert(!goog.isNull(this.children));
goog.asserts.assert(goog.isNull(this.value));
goog.asserts.assert(this.children.length <= maxEntries);
var i, ii;
for(i = 0, ii = this.children.length;i < ii;++i) {
var child = this.children[i];
goog.asserts.assert(ol.extent.containsExtent(this.extent, child.extent));
child.assertValid(maxEntries)
}
}
};
ol.structs.RBushNode.prototype.getChildrenExtent = function(start, stop, opt_extent) {
goog.asserts.assert(!this.isLeaf());
var children = this.children;
var extent = ol.extent.createOrUpdateEmpty(opt_extent);
var i;
for(i = start;i < stop;++i) {
ol.extent.extend(extent, children[i].extent)
}
return extent
};
ol.structs.RBushNode.prototype.remove = function(extent, value, path) {
var children = this.children;
var ii = children.length;
var child, i;
if(this.height == 1) {
for(i = 0;i < ii;++i) {
child = children[i];
if(child.value === value) {
goog.array.removeAt(children, i);
return true
}
}
}else {
goog.asserts.assert(this.height > 1);
for(i = 0;i < ii;++i) {
child = children[i];
if(ol.extent.containsExtent(child.extent, extent)) {
path.push(child);
if(child.remove(extent, value, path)) {
return true
}
path.pop()
}
}
}
return false
};
ol.structs.RBushNode.prototype.updateExtent = function() {
goog.asserts.assert(!this.isLeaf());
var extent = ol.extent.createOrUpdateEmpty(this.extent);
var children = this.children;
var i, ii;
for(i = 0, ii = children.length;i < ii;++i) {
ol.extent.extend(extent, children[i].extent)
}
};
ol.structs.RBushNode.prototype.isLeaf = function() {
return goog.isNull(this.children)
};
ol.structs.RBush = function(opt_maxEntries) {
this.maxEntries_ = Math.max(4, goog.isDef(opt_maxEntries) ? opt_maxEntries : 9);
this.minEntries_ = Math.max(2, Math.ceil(0.4 * this.maxEntries_));
this.root_ = new ol.structs.RBushNode(ol.extent.createEmpty(), 1, [], null);
this.valueExtent_ = {};
if(goog.DEBUG) {
this.readers_ = 0
}
};
ol.structs.RBush.prototype.allDistMargin_ = function(node, compare) {
var children = node.children;
var m = this.minEntries_;
var M = children.length;
var i;
goog.array.sort(children, compare);
var leftExtent = node.getChildrenExtent(0, m);
var rightExtent = node.getChildrenExtent(M - m, M);
var margin = ol.extent.getMargin(leftExtent) + ol.extent.getMargin(rightExtent);
for(i = m;i < M - m;++i) {
ol.extent.extend(leftExtent, children[i].extent);
margin += ol.extent.getMargin(leftExtent)
}
for(i = M - m - 1;i >= m;--i) {
ol.extent.extend(rightExtent, children[i].extent);
margin += ol.extent.getMargin(rightExtent)
}
return margin
};
ol.structs.RBush.prototype.assertValid = function() {
this.root_.assertValid(this.maxEntries_)
};
ol.structs.RBush.prototype.chooseSplitAxis_ = function(node) {
var xMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinX);
var yMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinY);
if(xMargin < yMargin) {
goog.array.sort(node.children, ol.structs.RBushNode.compareMinX)
}
};
ol.structs.RBush.prototype.chooseSplitIndex_ = function(node) {
var children = node.children;
var m = this.minEntries_;
var M = children.length;
var minOverlap = Infinity;
var minArea = Infinity;
var extent1 = ol.extent.createEmpty();
var extent2 = ol.extent.createEmpty();
var index = 0;
var i;
for(i = m;i <= M - m;++i) {
extent1 = node.getChildrenExtent(0, i, extent1);
extent2 = node.getChildrenExtent(i, M, extent2);
var overlap = ol.extent.getIntersectionArea(extent1, extent2);
var area = ol.extent.getArea(extent1) + ol.extent.getArea(extent2);
if(overlap < minOverlap) {
minOverlap = overlap;
minArea = Math.min(area, minArea);
index = i
}else {
if(overlap == minOverlap && area < minArea) {
minArea = area;
index = i
}
}
}
return index
};
ol.structs.RBush.prototype.chooseSubtree_ = function(extent, node, level, path) {
while(!node.isLeaf() && path.length - 1 != level) {
var minArea = Infinity;
var minEnlargement = Infinity;
var children = node.children;
var bestChild = null;
var i, ii;
for(i = 0, ii = children.length;i < ii;++i) {
var child = children[i];
var area = ol.extent.getArea(child.extent);
var enlargement = ol.extent.getEnlargedArea(child.extent, extent) - area;
if(enlargement < minEnlargement) {
minEnlargement = enlargement;
minArea = Math.min(area, minArea);
bestChild = child
}else {
if(enlargement == minEnlargement && area < minArea) {
minArea = area;
bestChild = child
}
}
}
goog.asserts.assert(!goog.isNull(bestChild));
node = bestChild;
path.push(node)
}
return node
};
ol.structs.RBush.prototype.clear = function() {
var node = this.root_;
node.extent = ol.extent.createOrUpdateEmpty(this.root_.extent);
node.height = 1;
node.children.length = 0;
node.value = null;
goog.object.clear(this.valueExtent_)
};
ol.structs.RBush.prototype.condense_ = function(path) {
var i;
for(i = path.length - 1;i >= 0;--i) {
var node = path[i];
if(node.children.length === 0) {
if(i > 0) {
goog.array.remove(path[i - 1].children, node)
}else {
this.clear()
}
}else {
node.updateExtent()
}
}
};
ol.structs.RBush.prototype.forEach = function(callback, opt_this) {
if(goog.DEBUG) {
++this.readers_;
try {
return this.forEach_(this.root_, callback, opt_this)
}finally {
--this.readers_
}
}else {
return this.forEach_(this.root_, callback, opt_this)
}
};
ol.structs.RBush.prototype.forEach_ = function(node, callback, opt_this) {
goog.asserts.assert(!node.isLeaf());
var toVisit = [node];
var children, i, ii, result;
while(toVisit.length > 0) {
node = toVisit.pop();
children = node.children;
if(node.height == 1) {
for(i = 0, ii = children.length;i < ii;++i) {
result = callback.call(opt_this, children[i].value);
if(result) {
return result
}
}
}else {
toVisit.push.apply(toVisit, children)
}
}
};
ol.structs.RBush.prototype.forEachInExtent = function(extent, callback, opt_this) {
if(goog.DEBUG) {
++this.readers_;
try {
return this.forEachInExtent_(extent, callback, opt_this)
}finally {
--this.readers_
}
}else {
return this.forEachInExtent_(extent, callback, opt_this)
}
};
ol.structs.RBush.prototype.forEachInExtent_ = function(extent, callback, opt_this) {
var toVisit = [this.root_];
var result;
while(toVisit.length > 0) {
var node = toVisit.pop();
if(ol.extent.intersects(extent, node.extent)) {
if(node.isLeaf()) {
result = callback.call(opt_this, node.value);
if(result) {
return result
}
}else {
if(ol.extent.containsExtent(extent, node.extent)) {
result = this.forEach_(node, callback, opt_this);
if(result) {
return result
}
}else {
toVisit.push.apply(toVisit, node.children)
}
}
}
}
return undefined
};
ol.structs.RBush.prototype.forEachNode = function(callback, opt_this) {
var toVisit = [this.root_];
while(toVisit.length > 0) {
var node = toVisit.pop();
var result = callback.call(opt_this, node);
if(result) {
return result
}
if(!node.isLeaf()) {
toVisit.push.apply(toVisit, node.children)
}
}
return undefined
};
ol.structs.RBush.prototype.getAll = function() {
var values = [];
this.forEach(function(value) {
values.push(value)
});
return values
};
ol.structs.RBush.prototype.getInExtent = function(extent) {
var values = [];
this.forEachInExtent(extent, function(value) {
values.push(value)
});
return values
};
ol.structs.RBush.prototype.getExtent = function(opt_extent) {
return ol.extent.returnOrUpdate(this.root_.extent, opt_extent)
};
ol.structs.RBush.prototype.getKey_ = function(value) {
goog.asserts.assert(goog.isObject(value));
return goog.getUid(value).toString()
};
ol.structs.RBush.prototype.insert = function(extent, value) {
if(goog.DEBUG && this.readers_) {
throw new Error("cannot insert value while reading");
}
var key = this.getKey_(value);
goog.asserts.assert(!this.valueExtent_.hasOwnProperty(key));
this.insert_(extent, value, this.root_.height - 1);
this.valueExtent_[key] = ol.extent.clone(extent)
};
ol.structs.RBush.prototype.insert_ = function(extent, value, level) {
var path = [this.root_];
var node = this.chooseSubtree_(extent, this.root_, level, path);
node.children.push(new ol.structs.RBushNode(extent, 0, null, value));
ol.extent.extend(node.extent, extent);
var i;
for(i = path.length - 1;i >= 0;--i) {
if(path[i].children.length > this.maxEntries_) {
this.split_(path, i)
}else {
break
}
}
for(;i >= 0;--i) {
ol.extent.extend(path[i].extent, extent)
}
return node
};
ol.structs.RBush.prototype.isEmpty = function() {
return this.root_.children.length === 0
};
ol.structs.RBush.prototype.remove = function(value) {
if(goog.DEBUG && this.readers_) {
throw new Error("cannot remove value while reading");
}
var key = this.getKey_(value);
goog.asserts.assert(this.valueExtent_.hasOwnProperty(key));
var extent = this.valueExtent_[key];
delete this.valueExtent_[key];
return this.remove_(extent, value)
};
ol.structs.RBush.prototype.remove_ = function(extent, value) {
var root = this.root_;
var path = [root];
var removed = root.remove(extent, value, path);
if(removed) {
this.condense_(path)
}else {
goog.asserts.assert(path.length == 1);
goog.asserts.assert(path[0] === root)
}
return removed
};
ol.structs.RBush.prototype.split_ = function(path, level) {
var node = path[level];
this.chooseSplitAxis_(node);
var splitIndex = this.chooseSplitIndex_(node);
var newChildren = node.children.splice(splitIndex);
var newNode = new ol.structs.RBushNode(ol.extent.createEmpty(), node.height, newChildren, null);
node.updateExtent();
newNode.updateExtent();
if(level) {
path[level - 1].children.push(newNode)
}else {
this.splitRoot_(node, newNode)
}
};
ol.structs.RBush.prototype.splitRoot_ = function(node1, node2) {
goog.asserts.assert(node1 === this.root_);
var height = node1.height + 1;
var extent = ol.extent.extend(node1.extent.slice(), node2.extent);
var children = [node1, node2];
this.root_ = new ol.structs.RBushNode(extent, height, children, null)
};
ol.structs.RBush.prototype.update = function(extent, value) {
if(goog.DEBUG && this.readers_) {
throw new Error("cannot update value while reading");
}
var key = this.getKey_(value);
var currentExtent = this.valueExtent_[key];
goog.asserts.assert(goog.isDef(currentExtent));
if(!ol.extent.equals(currentExtent, extent)) {
var removed = this.remove_(currentExtent, value);
goog.asserts.assert(removed);
this.insert_(extent, value, this.root_.height - 1);
this.valueExtent_[key] = ol.extent.clone(extent, currentExtent)
}
};
goog.provide("ol.source.Vector");
goog.provide("ol.source.VectorEvent");
goog.provide("ol.source.VectorEventType");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.ObjectEventType");
goog.require("ol.proj");
goog.require("ol.source.Source");
goog.require("ol.structs.RBush");
ol.source.VectorEventType = {ADDFEATURE:"addfeature", REMOVEFEATURE:"removefeature"};
ol.source.Vector = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, state:options.state});
this.rBush_ = new ol.structs.RBush;
this.nullGeometryFeatures_ = {};
this.featureChangeKeys_ = {};
if(goog.isDef(options.features)) {
this.addFeaturesInternal(options.features)
}
};
goog.inherits(ol.source.Vector, ol.source.Source);
ol.source.Vector.prototype.addFeature = function(feature) {
this.addFeatureInternal(feature);
this.dispatchChangeEvent()
};
ol.source.Vector.prototype.addFeatureInternal = function(feature) {
var featureKey = goog.getUid(feature).toString();
goog.asserts.assert(!(featureKey in this.featureChangeKeys_));
this.featureChangeKeys_[featureKey] = [goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this), goog.events.listen(feature, ol.ObjectEventType.PROPERTYCHANGE, this.handleFeatureChange_, false, this)];
var geometry = feature.getGeometry();
if(goog.isNull(geometry)) {
this.nullGeometryFeatures_[goog.getUid(feature).toString()] = feature
}else {
var extent = geometry.getExtent();
this.rBush_.insert(extent, feature)
}
this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.ADDFEATURE, feature))
};
ol.source.Vector.prototype.addFeatures = function(features) {
this.addFeaturesInternal(features);
this.dispatchChangeEvent()
};
ol.source.Vector.prototype.addFeaturesInternal = function(features) {
var i, ii;
for(i = 0, ii = features.length;i < ii;++i) {
this.addFeatureInternal(features[i])
}
};
ol.source.Vector.prototype.clear = function() {
this.rBush_.forEach(this.removeFeatureInternal, this);
this.rBush_.clear();
goog.object.forEach(this.nullGeometryFeatures_, this.removeFeatureInternal, this);
goog.object.clear(this.nullGeometryFeatures_);
goog.asserts.assert(goog.object.isEmpty(this.featureChangeKeys_));
this.dispatchChangeEvent()
};
ol.source.Vector.prototype.forEachFeature = function(f, opt_this) {
return this.rBush_.forEach(f, opt_this)
};
ol.source.Vector.prototype.forEachFeatureAtCoordinate = function(coordinate, f, opt_this) {
var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];
return this.forEachFeatureInExtent(extent, function(feature) {
var geometry = feature.getGeometry();
goog.asserts.assert(!goog.isNull(geometry));
if(geometry.containsCoordinate(coordinate)) {
return f.call(opt_this, feature)
}else {
return undefined
}
})
};
ol.source.Vector.prototype.forEachFeatureInExtent = function(extent, f, opt_this) {
return this.rBush_.forEachInExtent(extent, f, opt_this)
};
ol.source.Vector.prototype.forEachFeatureInExtentAtResolution = function(extent, resolution, f, opt_this) {
return this.forEachFeatureInExtent(extent, f, opt_this)
};
ol.source.Vector.prototype.getFeatures = function() {
var features = this.rBush_.getAll();
if(!goog.object.isEmpty(this.nullGeometryFeatures_)) {
goog.array.extend(features, goog.object.getValues(this.nullGeometryFeatures_))
}
return features
};
ol.source.Vector.prototype.getFeaturesAtCoordinate = function(coordinate) {
var features = [];
this.forEachFeatureAtCoordinate(coordinate, function(feature) {
features.push(feature)
});
return features
};
ol.source.Vector.prototype.getFeaturesInExtent = function(extent) {
return this.rBush_.getInExtent(extent)
};
ol.source.Vector.prototype.getClosestFeatureToCoordinate = function(coordinate) {
var x = coordinate[0];
var y = coordinate[1];
var closestFeature = null;
var closestPoint = [NaN, NaN];
var minSquaredDistance = Infinity;
var extent = [-Infinity, -Infinity, Infinity, Infinity];
this.rBush_.forEachInExtent(extent, function(feature) {
var geometry = feature.getGeometry();
goog.asserts.assert(!goog.isNull(geometry));
var previousMinSquaredDistance = minSquaredDistance;
minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);
if(minSquaredDistance < previousMinSquaredDistance) {
closestFeature = feature;
var minDistance = Math.sqrt(minSquaredDistance);
extent[0] = x - minDistance;
extent[1] = y - minDistance;
extent[2] = x + minDistance;
extent[3] = y + minDistance
}
});
return closestFeature
};
ol.source.Vector.prototype.getExtent = function() {
return this.rBush_.getExtent()
};
ol.source.Vector.prototype.handleFeatureChange_ = function(event) {
var feature = (event.target);
var featureKey = goog.getUid(feature).toString();
var geometry = feature.getGeometry();
if(goog.isNull(geometry)) {
if(!(featureKey in this.nullGeometryFeatures_)) {
this.rBush_.remove(feature);
this.nullGeometryFeatures_[featureKey] = feature
}
}else {
var extent = geometry.getExtent();
if(featureKey in this.nullGeometryFeatures_) {
delete this.nullGeometryFeatures_[featureKey];
this.rBush_.insert(extent, feature)
}else {
this.rBush_.update(extent, feature)
}
}
this.dispatchChangeEvent()
};
ol.source.Vector.prototype.isEmpty = function() {
return this.rBush_.isEmpty() && goog.object.isEmpty(this.nullGeometryFeatures_)
};
ol.source.Vector.prototype.loadFeatures = goog.nullFunction;
ol.source.Vector.prototype.removeFeature = function(feature) {
var featureKey = goog.getUid(feature).toString();
if(featureKey in this.nullGeometryFeatures_) {
delete this.nullGeometryFeatures_[featureKey]
}else {
this.rBush_.remove(feature)
}
this.removeFeatureInternal(feature);
this.dispatchChangeEvent()
};
ol.source.Vector.prototype.removeFeatureInternal = function(feature) {
var featureKey = goog.getUid(feature).toString();
goog.asserts.assert(featureKey in this.featureChangeKeys_);
goog.array.forEach(this.featureChangeKeys_[featureKey], goog.events.unlistenByKey);
delete this.featureChangeKeys_[featureKey];
this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.REMOVEFEATURE, feature))
};
ol.source.VectorEvent = function(type, opt_feature) {
goog.base(this, type);
this.feature = opt_feature
};
goog.inherits(ol.source.VectorEvent, goog.events.Event);
goog.provide("ol.renderer.canvas.VectorLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("ol.ViewHint");
goog.require("ol.dom");
goog.require("ol.extent");
goog.require("ol.feature");
goog.require("ol.layer.Vector");
goog.require("ol.render.EventType");
goog.require("ol.render.canvas.ReplayGroup");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.renderer.vector");
goog.require("ol.source.Vector");
ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) {
goog.base(this, mapRenderer, vectorLayer);
this.dirty_ = false;
this.renderedRevision_ = -1;
this.renderedResolution_ = NaN;
this.renderedExtent_ = ol.extent.createEmpty();
this.renderedRenderOrder_ = null;
this.replayGroup_ = null;
this.context_ = ol.dom.createCanvasContext2D()
};
goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) {
var transform = this.getTransform(frameState);
this.dispatchPreComposeEvent(context, frameState, transform);
var replayGroup = this.replayGroup_;
if(!goog.isNull(replayGroup) && !replayGroup.isEmpty()) {
var layer = this.getLayer();
var replayContext;
if(layer.hasListener(ol.render.EventType.RENDER)) {
this.context_.canvas.width = context.canvas.width;
this.context_.canvas.height = context.canvas.height;
replayContext = this.context_
}else {
replayContext = context
}
replayContext.globalAlpha = layerState.opacity;
replayGroup.replay(replayContext, frameState.extent, frameState.pixelRatio, transform, frameState.view2DState.rotation, frameState.skippedFeatureUids_);
if(replayContext != context) {
this.dispatchRenderEvent(replayContext, frameState, transform);
context.drawImage(replayContext.canvas, 0, 0)
}
}
this.dispatchPostComposeEvent(context, frameState, transform)
};
ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) {
if(goog.isNull(this.replayGroup_)) {
return undefined
}else {
var extent = frameState.extent;
var resolution = frameState.view2DState.resolution;
var rotation = frameState.view2DState.rotation;
var layer = this.getLayer();
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, rotation, coordinate, frameState.skippedFeatureUids_, function(geometry, data) {
var feature = (data);
goog.asserts.assert(goog.isDef(feature));
return callback.call(thisArg, feature, layer)
})
}
};
ol.renderer.canvas.VectorLayer.prototype.handleImageChange_ = function(event) {
this.renderIfReadyAndVisible()
};
ol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, layerState) {
var vectorLayer = this.getLayer();
goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector);
var vectorSource = vectorLayer.getSource();
goog.asserts.assertInstanceof(vectorSource, ol.source.Vector);
this.updateAttributions(frameState.attributions, vectorSource.getAttributions());
this.updateLogos(frameState, vectorSource);
if(!this.dirty_ && (frameState.viewHints[ol.ViewHint.ANIMATING] || frameState.viewHints[ol.ViewHint.INTERACTING])) {
return
}
var frameStateExtent = frameState.extent;
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var resolution = view2DState.resolution;
var pixelRatio = frameState.pixelRatio;
var vectorLayerRevision = vectorLayer.getRevision();
var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
if(!goog.isDef(vectorLayerRenderOrder)) {
vectorLayerRenderOrder = ol.renderer.vector.defaultOrder
}
if(!this.dirty_ && this.renderedResolution_ == resolution && this.renderedRevision_ == vectorLayerRevision && this.renderedRenderOrder_ == vectorLayerRenderOrder && ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) {
return
}
var extent = this.renderedExtent_;
var xBuffer = ol.extent.getWidth(frameStateExtent) / 4;
var yBuffer = ol.extent.getHeight(frameStateExtent) / 4;
extent[0] = frameStateExtent[0] - xBuffer;
extent[1] = frameStateExtent[1] - yBuffer;
extent[2] = frameStateExtent[2] + xBuffer;
extent[3] = frameStateExtent[3] + yBuffer;
goog.dispose(this.replayGroup_);
this.replayGroup_ = null;
this.dirty_ = false;
var styleFunction = vectorLayer.getStyleFunction();
if(!goog.isDef(styleFunction)) {
styleFunction = ol.feature.defaultStyleFunction
}
var tolerance = resolution / (2 * pixelRatio);
var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent, resolution);
vectorSource.loadFeatures(extent, resolution, projection);
var renderFeature = function(feature) {
goog.asserts.assert(goog.isDef(styleFunction));
var dirty = this.renderFeature(feature, resolution, pixelRatio, styleFunction, replayGroup);
this.dirty_ = this.dirty_ || dirty
};
if(!goog.isNull(vectorLayerRenderOrder)) {
var features = [];
vectorSource.forEachFeatureInExtentAtResolution(extent, resolution, function(feature) {
features.push(feature)
}, this);
goog.array.sort(features, vectorLayerRenderOrder);
goog.array.forEach(features, renderFeature, this)
}else {
vectorSource.forEachFeatureInExtentAtResolution(extent, resolution, renderFeature, this)
}
replayGroup.finish();
this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.replayGroup_ = replayGroup
};
ol.renderer.canvas.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styleFunction, replayGroup) {
var styles = styleFunction(feature, resolution);
if(!goog.isDefAndNotNull(styles)) {
return false
}
var squaredTolerance = resolution * resolution / (4 * pixelRatio * pixelRatio);
var i, ii, loading = false;
for(i = 0, ii = styles.length;i < ii;++i) {
loading = ol.renderer.vector.renderFeature(replayGroup, feature, styles[i], squaredTolerance, feature, this.handleImageChange_, this) || loading
}
return loading
};
goog.provide("ol.renderer.canvas.Map");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol");
goog.require("ol.css");
goog.require("ol.dom");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.layer.Vector");
goog.require("ol.render.Event");
goog.require("ol.render.EventType");
goog.require("ol.render.canvas.Immediate");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.ImageLayer");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.renderer.canvas.TileLayer");
goog.require("ol.renderer.canvas.VectorLayer");
goog.require("ol.source.State");
goog.require("ol.vec.Mat4");
ol.renderer.canvas.Map = function(container, map) {
goog.base(this, container, map);
this.context_ = ol.dom.createCanvasContext2D();
this.canvas_ = this.context_.canvas;
this.canvas_.style.width = "100%";
this.canvas_.style.height = "100%";
this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
goog.dom.insertChildAt(container, this.canvas_, 0);
this.renderedVisible_ = true;
this.transform_ = goog.vec.Mat4.createNumber()
};
goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
return new ol.renderer.canvas.ImageLayer(this, layer)
}else {
if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
return new ol.renderer.canvas.TileLayer(this, layer)
}else {
if(ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
return new ol.renderer.canvas.VectorLayer(this, layer)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {
var map = this.getMap();
var context = this.context_;
if(map.hasListener(type)) {
var view2DState = frameState.view2DState;
var pixelRatio = frameState.pixelRatio;
ol.vec.Mat4.makeTransform2D(this.transform_, this.canvas_.width / 2, this.canvas_.height / 2, pixelRatio / view2DState.resolution, -pixelRatio / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]);
var render = new ol.render.canvas.Immediate(context, pixelRatio, frameState.extent, this.transform_, view2DState.rotation);
var composeEvent = new ol.render.Event(type, map, render, frameState, context, null);
map.dispatchEvent(composeEvent);
render.flush()
}
};
ol.renderer.canvas.Map.prototype.getCanvasLayerRenderer = function(layer) {
var layerRenderer = this.getLayerRenderer(layer);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer);
return(layerRenderer)
};
ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, false);
this.renderedVisible_ = false
}
return
}
var context = this.context_;
var width = frameState.size[0] * frameState.pixelRatio;
var height = frameState.size[1] * frameState.pixelRatio;
if(this.canvas_.width != width || this.canvas_.height != height) {
this.canvas_.width = width;
this.canvas_.height = height
}else {
context.clearRect(0, 0, this.canvas_.width, this.canvas_.height)
}
this.calculateMatrices2D(frameState);
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);
var layerStatesArray = frameState.layerStatesArray;
var viewResolution = frameState.view2DState.resolution;
var i, ii, layer, layerRenderer, layerState;
for(i = 0, ii = layerStatesArray.length;i < ii;++i) {
layerState = layerStatesArray[i];
layer = layerState.layer;
layerRenderer = this.getLayerRenderer(layer);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer);
if(!layerState.visible || layerState.sourceState != ol.source.State.READY || viewResolution >= layerState.maxResolution || viewResolution < layerState.minResolution) {
continue
}
layerRenderer.prepareFrame(frameState, layerState);
layerRenderer.composeFrame(frameState, layerState, context)
}
this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState);
if(!this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, true);
this.renderedVisible_ = true
}
this.scheduleRemoveUnusedLayerRenderers(frameState);
this.scheduleExpireIconCache(frameState)
};
goog.provide("ol.renderer.dom.Layer");
goog.require("goog.dom");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
ol.renderer.dom.Layer = function(mapRenderer, layer, target) {
goog.base(this, mapRenderer, layer);
this.target = target
};
goog.inherits(ol.renderer.dom.Layer, ol.renderer.Layer);
ol.renderer.dom.Layer.prototype.getTarget = function() {
return this.target
};
goog.provide("ol.renderer.dom.ImageLayer");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.ImageBase");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.dom");
goog.require("ol.layer.Image");
goog.require("ol.renderer.dom.Layer");
goog.require("ol.source.Image");
goog.require("ol.vec.Mat4");
ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) {
var target = goog.dom.createElement(goog.dom.TagName.DIV);
target.style.position = "absolute";
goog.base(this, mapRenderer, imageLayer, target);
this.image_ = null;
this.transform_ = goog.vec.Mat4.createNumberIdentity()
};
goog.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer);
ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) {
var layer = this.getLayer();
var source = layer.getSource();
goog.asserts.assertInstanceof(source, ol.source.Image);
var extent = frameState.extent;
var resolution = frameState.view2DState.resolution;
var rotation = frameState.view2DState.rotation;
return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) {
return callback.call(thisArg, feature, layer)
})
};
ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerState) {
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image = this.image_;
var imageLayer = this.getLayer();
goog.asserts.assertInstanceof(imageLayer, ol.layer.Image);
var imageSource = imageLayer.getSource();
goog.asserts.assertInstanceof(imageSource, ol.source.Image);
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution, frameState.pixelRatio, view2DState.projection);
if(!goog.isNull(image_)) {
var imageState = image_.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image_.load()
}else {
if(imageState == ol.ImageState.LOADED) {
image = image_
}
}
}
}
if(!goog.isNull(image)) {
var imageExtent = image.getExtent();
var imageResolution = image.getResolution();
var transform = goog.vec.Mat4.createNumber();
ol.vec.Mat4.makeTransform2D(transform, frameState.size[0] / 2, frameState.size[1] / 2, imageResolution / viewResolution, imageResolution / viewResolution, viewRotation, (imageExtent[0] - viewCenter[0]) / imageResolution, (viewCenter[1] - imageExtent[3]) / imageResolution);
if(image != this.image_) {
var imageElement = image.getImageElement(this);
imageElement.style.maxWidth = "none";
imageElement.style.position = "absolute";
goog.dom.removeChildren(this.target);
goog.dom.appendChild(this.target, imageElement);
this.image_ = image
}
this.setTransform_(transform);
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) {
if(!ol.vec.Mat4.equals2D(transform, this.transform_)) {
ol.dom.transformElement2D(this.target, transform, 6);
goog.vec.Mat4.setFromArray(this.transform_, transform)
}
};
goog.provide("ol.renderer.dom.TileLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol");
goog.require("ol.Coordinate");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.ViewHint");
goog.require("ol.dom");
goog.require("ol.dom.BrowserFeature");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.dom.Layer");
goog.require("ol.source.Tile");
goog.require("ol.tilegrid.TileGrid");
goog.require("ol.vec.Mat4");
ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) {
var target = goog.dom.createElement(goog.dom.TagName.DIV);
target.style.position = "absolute";
if(ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) {
target.style.width = "100%";
target.style.height = "100%"
}
goog.base(this, mapRenderer, tileLayer, target);
this.renderedVisible_ = true;
this.renderedOpacity_ = 1;
this.renderedRevision_ = 0;
this.tileLayerZs_ = {}
};
goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer);
ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerState) {
if(!layerState.visible) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.target, false);
this.renderedVisible_ = false
}
return
}
var pixelRatio = frameState.pixelRatio;
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getLayer();
goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile);
var tileSource = tileLayer.getSource();
goog.asserts.assertInstanceof(tileSource, ol.source.Tile);
var tileGrid = tileSource.getTileGridForProjection(projection);
var tileGutter = tileSource.getGutter();
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED
}, tileSource, pixelRatio, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
if(!goog.isDef(useInterimTilesOnError)) {
useInterimTilesOnError = true
}
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}else {
if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) {
continue
}
}
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var tileLayerZ, tileLayerZKey;
if(this.renderedRevision_ != tileSource.getRevision()) {
for(tileLayerZKey in this.tileLayerZs_) {
tileLayerZ = this.tileLayerZs_[+tileLayerZKey];
goog.dom.removeNode(tileLayerZ.target)
}
this.tileLayerZs_ = {};
this.renderedRevision_ = tileSource.getRevision()
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var newTileLayerZKeys = {};
var iz, iziz, tileCoordKey, tileCoordOrigin, tilesToDraw;
for(iz = 0, iziz = zs.length;iz < iziz;++iz) {
tileLayerZKey = zs[iz];
if(tileLayerZKey in this.tileLayerZs_) {
tileLayerZ = this.tileLayerZs_[tileLayerZKey]
}else {
tileCoordOrigin = tileGrid.getTileCoordForCoordAndZ(center, tileLayerZKey);
tileLayerZ = new ol.renderer.dom.TileLayerZ_(tileGrid, tileCoordOrigin);
newTileLayerZKeys[tileLayerZKey] = true;
this.tileLayerZs_[tileLayerZKey] = tileLayerZ
}
tilesToDraw = tilesToDrawByZ[tileLayerZKey];
for(tileCoordKey in tilesToDraw) {
tileLayerZ.addTile(tilesToDraw[tileCoordKey], tileGutter)
}
tileLayerZ.finalizeAddTiles()
}
var tileLayerZKeys = goog.array.map(goog.object.getKeys(this.tileLayerZs_), Number);
goog.array.sort(tileLayerZKeys);
var i, ii, j, origin, resolution;
var transform = goog.vec.Mat4.createNumber();
for(i = 0, ii = tileLayerZKeys.length;i < ii;++i) {
tileLayerZKey = tileLayerZKeys[i];
tileLayerZ = this.tileLayerZs_[tileLayerZKey];
if(!(tileLayerZKey in tilesToDrawByZ)) {
goog.dom.removeNode(tileLayerZ.target);
delete this.tileLayerZs_[tileLayerZKey];
continue
}
resolution = tileLayerZ.getResolution();
origin = tileLayerZ.getOrigin();
ol.vec.Mat4.makeTransform2D(transform, frameState.size[0] / 2, frameState.size[1] / 2, resolution / view2DState.resolution, resolution / view2DState.resolution, view2DState.rotation, (origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution);
tileLayerZ.setTransform(transform);
if(tileLayerZKey in newTileLayerZKeys) {
for(j = tileLayerZKey - 1;j >= 0;--j) {
if(j in this.tileLayerZs_) {
goog.dom.insertSiblingAfter(tileLayerZ.target, this.tileLayerZs_[j].target);
break
}
}
if(j < 0) {
goog.dom.insertChildAt(this.target, tileLayerZ.target, 0)
}
}else {
if(!frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING]) {
tileLayerZ.removeTilesOutsideExtent(extent, tmpTileRange)
}
}
}
if(layerState.opacity != this.renderedOpacity_) {
ol.dom.setOpacity(this.target, layerState.opacity);
this.renderedOpacity_ = layerState.opacity
}
if(layerState.visible && !this.renderedVisible_) {
goog.style.setElementShown(this.target, true);
this.renderedVisible_ = true
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource)
};
ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) {
this.target = goog.dom.createElement(goog.dom.TagName.DIV);
this.target.style.position = "absolute";
this.target.style.width = "100%";
this.target.style.height = "100%";
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
this.translateTarget_ = goog.dom.createElement(goog.dom.TagName.DIV);
this.translateTarget_.style.position = "absolute";
this.translateTarget_.style.width = "100%";
this.translateTarget_.style.height = "100%";
goog.dom.appendChild(this.target, this.translateTarget_)
}
this.tileGrid_ = tileGrid;
this.tileCoordOrigin_ = tileCoordOrigin;
this.origin_ = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(tileCoordOrigin));
this.resolution_ = tileGrid.getResolution(tileCoordOrigin.z);
this.tiles_ = {};
this.documentFragment_ = null;
this.transform_ = goog.vec.Mat4.createNumberIdentity()
};
ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile, tileGutter) {
var tileCoord = tile.tileCoord;
goog.asserts.assert(tileCoord.z == this.tileCoordOrigin_.z);
var tileCoordKey = tileCoord.toString();
if(tileCoordKey in this.tiles_) {
return
}
var tileSize = this.tileGrid_.getTileSize(tileCoord.z);
var image = tile.getImage(this);
var imageStyle = image.style;
imageStyle.maxWidth = "none";
var tileElement;
var tileElementStyle;
if(tileGutter > 0) {
tileElement = goog.dom.createElement(goog.dom.TagName.DIV);
tileElementStyle = tileElement.style;
tileElementStyle.overflow = "hidden";
tileElementStyle.width = tileSize + "px";
tileElementStyle.height = tileSize + "px";
imageStyle.position = "absolute";
imageStyle.left = -tileGutter + "px";
imageStyle.top = -tileGutter + "px";
imageStyle.width = tileSize + 2 * tileGutter + "px";
imageStyle.height = tileSize + 2 * tileGutter + "px";
goog.dom.appendChild(tileElement, image)
}else {
imageStyle.width = tileSize + "px";
imageStyle.height = tileSize + "px";
tileElement = image;
tileElementStyle = imageStyle
}
tileElementStyle.position = "absolute";
tileElementStyle.left = (tileCoord.x - this.tileCoordOrigin_.x) * tileSize + "px";
tileElementStyle.top = (this.tileCoordOrigin_.y - tileCoord.y) * tileSize + "px";
if(goog.isNull(this.documentFragment_)) {
this.documentFragment_ = document.createDocumentFragment()
}
goog.dom.appendChild(this.documentFragment_, tileElement);
this.tiles_[tileCoordKey] = tile
};
ol.renderer.dom.TileLayerZ_.prototype.finalizeAddTiles = function() {
if(!goog.isNull(this.documentFragment_)) {
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
goog.dom.appendChild(this.translateTarget_, this.documentFragment_)
}else {
goog.dom.appendChild(this.target, this.documentFragment_)
}
this.documentFragment_ = null
}
};
ol.renderer.dom.TileLayerZ_.prototype.getOrigin = function() {
return this.origin_
};
ol.renderer.dom.TileLayerZ_.prototype.getResolution = function() {
return this.resolution_
};
ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent, opt_tileRange) {
var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(extent, this.tileCoordOrigin_.z, opt_tileRange);
var tilesToRemove = [];
var tile, tileCoordKey;
for(tileCoordKey in this.tiles_) {
tile = this.tiles_[tileCoordKey];
if(!tileRange.contains(tile.tileCoord)) {
tilesToRemove.push(tile)
}
}
var i, ii;
for(i = 0, ii = tilesToRemove.length;i < ii;++i) {
tile = tilesToRemove[i];
tileCoordKey = tile.tileCoord.toString();
goog.dom.removeNode(tile.getImage(this));
delete this.tiles_[tileCoordKey]
}
};
ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) {
if(!ol.vec.Mat4.equals2D(transform, this.transform_)) {
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
ol.dom.transformElement2D(this.target, transform, 6, this.translateTarget_)
}else {
ol.dom.transformElement2D(this.target, transform, 6)
}
goog.vec.Mat4.setFromArray(this.transform_, transform)
}
};
goog.provide("ol.renderer.dom.Map");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.functions");
goog.require("goog.style");
goog.require("ol");
goog.require("ol.css");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.dom.ImageLayer");
goog.require("ol.renderer.dom.Layer");
goog.require("ol.renderer.dom.TileLayer");
goog.require("ol.source.State");
ol.renderer.dom.Map = function(container, map) {
goog.base(this, container, map);
this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV);
this.layersPane_.className = ol.css.CLASS_UNSELECTABLE;
var style = this.layersPane_.style;
style.position = "absolute";
style.width = "100%";
style.height = "100%";
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
this.layersPane_.ondragstart = goog.functions.FALSE;
this.layersPane_.onselectstart = goog.functions.FALSE
}
goog.dom.insertChildAt(container, this.layersPane_, 0);
this.renderedVisible_ = true
};
goog.inherits(ol.renderer.dom.Map, ol.renderer.Map);
ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) {
var layerRenderer;
if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
layerRenderer = new ol.renderer.dom.ImageLayer(this, layer)
}else {
if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
layerRenderer = new ol.renderer.dom.TileLayer(this, layer)
}else {
goog.asserts.fail();
return null
}
}
return layerRenderer
};
ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.layersPane_, false);
this.renderedVisible_ = false
}
return
}
var addChild;
if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) {
addChild = function(elem) {
goog.dom.appendChild(this.layersPane_, elem)
}
}else {
addChild = function(elem, i) {
goog.dom.insertChildAt(this.layersPane_, elem, i)
}
}
var layerStatesArray = frameState.layerStatesArray;
var i, ii, layer, layerRenderer, layerState;
for(i = 0, ii = layerStatesArray.length;i < ii;++i) {
layerState = layerStatesArray[i];
layer = layerState.layer;
layerRenderer = (this.getLayerRenderer(layer));
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer);
addChild.call(this, layerRenderer.getTarget(), i);
if(layerState.sourceState == ol.source.State.READY) {
layerRenderer.prepareFrame(frameState, layerState)
}
}
var layerStates = frameState.layerStates;
var layerKey;
for(layerKey in this.getLayerRenderers()) {
if(!(layerKey in layerStates)) {
layerRenderer = this.getLayerRendererByKey(layerKey);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer);
goog.dom.removeNode(layerRenderer.getTarget())
}
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.layersPane_, true);
this.renderedVisible_ = true
}
this.calculateMatrices2D(frameState);
this.scheduleRemoveUnusedLayerRenderers(frameState);
this.scheduleExpireIconCache(frameState)
};
goog.provide("goog.webgl");
goog.webgl.DEPTH_BUFFER_BIT = 256;
goog.webgl.STENCIL_BUFFER_BIT = 1024;
goog.webgl.COLOR_BUFFER_BIT = 16384;
goog.webgl.POINTS = 0;
goog.webgl.LINES = 1;
goog.webgl.LINE_LOOP = 2;
goog.webgl.LINE_STRIP = 3;
goog.webgl.TRIANGLES = 4;
goog.webgl.TRIANGLE_STRIP = 5;
goog.webgl.TRIANGLE_FAN = 6;
goog.webgl.ZERO = 0;
goog.webgl.ONE = 1;
goog.webgl.SRC_COLOR = 768;
goog.webgl.ONE_MINUS_SRC_COLOR = 769;
goog.webgl.SRC_ALPHA = 770;
goog.webgl.ONE_MINUS_SRC_ALPHA = 771;
goog.webgl.DST_ALPHA = 772;
goog.webgl.ONE_MINUS_DST_ALPHA = 773;
goog.webgl.DST_COLOR = 774;
goog.webgl.ONE_MINUS_DST_COLOR = 775;
goog.webgl.SRC_ALPHA_SATURATE = 776;
goog.webgl.FUNC_ADD = 32774;
goog.webgl.BLEND_EQUATION = 32777;
goog.webgl.BLEND_EQUATION_RGB = 32777;
goog.webgl.BLEND_EQUATION_ALPHA = 34877;
goog.webgl.FUNC_SUBTRACT = 32778;
goog.webgl.FUNC_REVERSE_SUBTRACT = 32779;
goog.webgl.BLEND_DST_RGB = 32968;
goog.webgl.BLEND_SRC_RGB = 32969;
goog.webgl.BLEND_DST_ALPHA = 32970;
goog.webgl.BLEND_SRC_ALPHA = 32971;
goog.webgl.CONSTANT_COLOR = 32769;
goog.webgl.ONE_MINUS_CONSTANT_COLOR = 32770;
goog.webgl.CONSTANT_ALPHA = 32771;
goog.webgl.ONE_MINUS_CONSTANT_ALPHA = 32772;
goog.webgl.BLEND_COLOR = 32773;
goog.webgl.ARRAY_BUFFER = 34962;
goog.webgl.ELEMENT_ARRAY_BUFFER = 34963;
goog.webgl.ARRAY_BUFFER_BINDING = 34964;
goog.webgl.ELEMENT_ARRAY_BUFFER_BINDING = 34965;
goog.webgl.STREAM_DRAW = 35040;
goog.webgl.STATIC_DRAW = 35044;
goog.webgl.DYNAMIC_DRAW = 35048;
goog.webgl.BUFFER_SIZE = 34660;
goog.webgl.BUFFER_USAGE = 34661;
goog.webgl.CURRENT_VERTEX_ATTRIB = 34342;
goog.webgl.FRONT = 1028;
goog.webgl.BACK = 1029;
goog.webgl.FRONT_AND_BACK = 1032;
goog.webgl.CULL_FACE = 2884;
goog.webgl.BLEND = 3042;
goog.webgl.DITHER = 3024;
goog.webgl.STENCIL_TEST = 2960;
goog.webgl.DEPTH_TEST = 2929;
goog.webgl.SCISSOR_TEST = 3089;
goog.webgl.POLYGON_OFFSET_FILL = 32823;
goog.webgl.SAMPLE_ALPHA_TO_COVERAGE = 32926;
goog.webgl.SAMPLE_COVERAGE = 32928;
goog.webgl.NO_ERROR = 0;
goog.webgl.INVALID_ENUM = 1280;
goog.webgl.INVALID_VALUE = 1281;
goog.webgl.INVALID_OPERATION = 1282;
goog.webgl.OUT_OF_MEMORY = 1285;
goog.webgl.CW = 2304;
goog.webgl.CCW = 2305;
goog.webgl.LINE_WIDTH = 2849;
goog.webgl.ALIASED_POINT_SIZE_RANGE = 33901;
goog.webgl.ALIASED_LINE_WIDTH_RANGE = 33902;
goog.webgl.CULL_FACE_MODE = 2885;
goog.webgl.FRONT_FACE = 2886;
goog.webgl.DEPTH_RANGE = 2928;
goog.webgl.DEPTH_WRITEMASK = 2930;
goog.webgl.DEPTH_CLEAR_VALUE = 2931;
goog.webgl.DEPTH_FUNC = 2932;
goog.webgl.STENCIL_CLEAR_VALUE = 2961;
goog.webgl.STENCIL_FUNC = 2962;
goog.webgl.STENCIL_FAIL = 2964;
goog.webgl.STENCIL_PASS_DEPTH_FAIL = 2965;
goog.webgl.STENCIL_PASS_DEPTH_PASS = 2966;
goog.webgl.STENCIL_REF = 2967;
goog.webgl.STENCIL_VALUE_MASK = 2963;
goog.webgl.STENCIL_WRITEMASK = 2968;
goog.webgl.STENCIL_BACK_FUNC = 34816;
goog.webgl.STENCIL_BACK_FAIL = 34817;
goog.webgl.STENCIL_BACK_PASS_DEPTH_FAIL = 34818;
goog.webgl.STENCIL_BACK_PASS_DEPTH_PASS = 34819;
goog.webgl.STENCIL_BACK_REF = 36003;
goog.webgl.STENCIL_BACK_VALUE_MASK = 36004;
goog.webgl.STENCIL_BACK_WRITEMASK = 36005;
goog.webgl.VIEWPORT = 2978;
goog.webgl.SCISSOR_BOX = 3088;
goog.webgl.COLOR_CLEAR_VALUE = 3106;
goog.webgl.COLOR_WRITEMASK = 3107;
goog.webgl.UNPACK_ALIGNMENT = 3317;
goog.webgl.PACK_ALIGNMENT = 3333;
goog.webgl.MAX_TEXTURE_SIZE = 3379;
goog.webgl.MAX_VIEWPORT_DIMS = 3386;
goog.webgl.SUBPIXEL_BITS = 3408;
goog.webgl.RED_BITS = 3410;
goog.webgl.GREEN_BITS = 3411;
goog.webgl.BLUE_BITS = 3412;
goog.webgl.ALPHA_BITS = 3413;
goog.webgl.DEPTH_BITS = 3414;
goog.webgl.STENCIL_BITS = 3415;
goog.webgl.POLYGON_OFFSET_UNITS = 10752;
goog.webgl.POLYGON_OFFSET_FACTOR = 32824;
goog.webgl.TEXTURE_BINDING_2D = 32873;
goog.webgl.SAMPLE_BUFFERS = 32936;
goog.webgl.SAMPLES = 32937;
goog.webgl.SAMPLE_COVERAGE_VALUE = 32938;
goog.webgl.SAMPLE_COVERAGE_INVERT = 32939;
goog.webgl.COMPRESSED_TEXTURE_FORMATS = 34467;
goog.webgl.DONT_CARE = 4352;
goog.webgl.FASTEST = 4353;
goog.webgl.NICEST = 4354;
goog.webgl.GENERATE_MIPMAP_HINT = 33170;
goog.webgl.BYTE = 5120;
goog.webgl.UNSIGNED_BYTE = 5121;
goog.webgl.SHORT = 5122;
goog.webgl.UNSIGNED_SHORT = 5123;
goog.webgl.INT = 5124;
goog.webgl.UNSIGNED_INT = 5125;
goog.webgl.FLOAT = 5126;
goog.webgl.DEPTH_COMPONENT = 6402;
goog.webgl.ALPHA = 6406;
goog.webgl.RGB = 6407;
goog.webgl.RGBA = 6408;
goog.webgl.LUMINANCE = 6409;
goog.webgl.LUMINANCE_ALPHA = 6410;
goog.webgl.UNSIGNED_SHORT_4_4_4_4 = 32819;
goog.webgl.UNSIGNED_SHORT_5_5_5_1 = 32820;
goog.webgl.UNSIGNED_SHORT_5_6_5 = 33635;
goog.webgl.FRAGMENT_SHADER = 35632;
goog.webgl.VERTEX_SHADER = 35633;
goog.webgl.MAX_VERTEX_ATTRIBS = 34921;
goog.webgl.MAX_VERTEX_UNIFORM_VECTORS = 36347;
goog.webgl.MAX_VARYING_VECTORS = 36348;
goog.webgl.MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661;
goog.webgl.MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660;
goog.webgl.MAX_TEXTURE_IMAGE_UNITS = 34930;
goog.webgl.MAX_FRAGMENT_UNIFORM_VECTORS = 36349;
goog.webgl.SHADER_TYPE = 35663;
goog.webgl.DELETE_STATUS = 35712;
goog.webgl.LINK_STATUS = 35714;
goog.webgl.VALIDATE_STATUS = 35715;
goog.webgl.ATTACHED_SHADERS = 35717;
goog.webgl.ACTIVE_UNIFORMS = 35718;
goog.webgl.ACTIVE_ATTRIBUTES = 35721;
goog.webgl.SHADING_LANGUAGE_VERSION = 35724;
goog.webgl.CURRENT_PROGRAM = 35725;
goog.webgl.NEVER = 512;
goog.webgl.LESS = 513;
goog.webgl.EQUAL = 514;
goog.webgl.LEQUAL = 515;
goog.webgl.GREATER = 516;
goog.webgl.NOTEQUAL = 517;
goog.webgl.GEQUAL = 518;
goog.webgl.ALWAYS = 519;
goog.webgl.KEEP = 7680;
goog.webgl.REPLACE = 7681;
goog.webgl.INCR = 7682;
goog.webgl.DECR = 7683;
goog.webgl.INVERT = 5386;
goog.webgl.INCR_WRAP = 34055;
goog.webgl.DECR_WRAP = 34056;
goog.webgl.VENDOR = 7936;
goog.webgl.RENDERER = 7937;
goog.webgl.VERSION = 7938;
goog.webgl.NEAREST = 9728;
goog.webgl.LINEAR = 9729;
goog.webgl.NEAREST_MIPMAP_NEAREST = 9984;
goog.webgl.LINEAR_MIPMAP_NEAREST = 9985;
goog.webgl.NEAREST_MIPMAP_LINEAR = 9986;
goog.webgl.LINEAR_MIPMAP_LINEAR = 9987;
goog.webgl.TEXTURE_MAG_FILTER = 10240;
goog.webgl.TEXTURE_MIN_FILTER = 10241;
goog.webgl.TEXTURE_WRAP_S = 10242;
goog.webgl.TEXTURE_WRAP_T = 10243;
goog.webgl.TEXTURE_2D = 3553;
goog.webgl.TEXTURE = 5890;
goog.webgl.TEXTURE_CUBE_MAP = 34067;
goog.webgl.TEXTURE_BINDING_CUBE_MAP = 34068;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_X = 34069;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_X = 34070;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Y = 34071;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Z = 34073;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074;
goog.webgl.MAX_CUBE_MAP_TEXTURE_SIZE = 34076;
goog.webgl.TEXTURE0 = 33984;
goog.webgl.TEXTURE1 = 33985;
goog.webgl.TEXTURE2 = 33986;
goog.webgl.TEXTURE3 = 33987;
goog.webgl.TEXTURE4 = 33988;
goog.webgl.TEXTURE5 = 33989;
goog.webgl.TEXTURE6 = 33990;
goog.webgl.TEXTURE7 = 33991;
goog.webgl.TEXTURE8 = 33992;
goog.webgl.TEXTURE9 = 33993;
goog.webgl.TEXTURE10 = 33994;
goog.webgl.TEXTURE11 = 33995;
goog.webgl.TEXTURE12 = 33996;
goog.webgl.TEXTURE13 = 33997;
goog.webgl.TEXTURE14 = 33998;
goog.webgl.TEXTURE15 = 33999;
goog.webgl.TEXTURE16 = 34E3;
goog.webgl.TEXTURE17 = 34001;
goog.webgl.TEXTURE18 = 34002;
goog.webgl.TEXTURE19 = 34003;
goog.webgl.TEXTURE20 = 34004;
goog.webgl.TEXTURE21 = 34005;
goog.webgl.TEXTURE22 = 34006;
goog.webgl.TEXTURE23 = 34007;
goog.webgl.TEXTURE24 = 34008;
goog.webgl.TEXTURE25 = 34009;
goog.webgl.TEXTURE26 = 34010;
goog.webgl.TEXTURE27 = 34011;
goog.webgl.TEXTURE28 = 34012;
goog.webgl.TEXTURE29 = 34013;
goog.webgl.TEXTURE30 = 34014;
goog.webgl.TEXTURE31 = 34015;
goog.webgl.ACTIVE_TEXTURE = 34016;
goog.webgl.REPEAT = 10497;
goog.webgl.CLAMP_TO_EDGE = 33071;
goog.webgl.MIRRORED_REPEAT = 33648;
goog.webgl.FLOAT_VEC2 = 35664;
goog.webgl.FLOAT_VEC3 = 35665;
goog.webgl.FLOAT_VEC4 = 35666;
goog.webgl.INT_VEC2 = 35667;
goog.webgl.INT_VEC3 = 35668;
goog.webgl.INT_VEC4 = 35669;
goog.webgl.BOOL = 35670;
goog.webgl.BOOL_VEC2 = 35671;
goog.webgl.BOOL_VEC3 = 35672;
goog.webgl.BOOL_VEC4 = 35673;
goog.webgl.FLOAT_MAT2 = 35674;
goog.webgl.FLOAT_MAT3 = 35675;
goog.webgl.FLOAT_MAT4 = 35676;
goog.webgl.SAMPLER_2D = 35678;
goog.webgl.SAMPLER_CUBE = 35680;
goog.webgl.VERTEX_ATTRIB_ARRAY_ENABLED = 34338;
goog.webgl.VERTEX_ATTRIB_ARRAY_SIZE = 34339;
goog.webgl.VERTEX_ATTRIB_ARRAY_STRIDE = 34340;
goog.webgl.VERTEX_ATTRIB_ARRAY_TYPE = 34341;
goog.webgl.VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922;
goog.webgl.VERTEX_ATTRIB_ARRAY_POINTER = 34373;
goog.webgl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975;
goog.webgl.COMPILE_STATUS = 35713;
goog.webgl.LOW_FLOAT = 36336;
goog.webgl.MEDIUM_FLOAT = 36337;
goog.webgl.HIGH_FLOAT = 36338;
goog.webgl.LOW_INT = 36339;
goog.webgl.MEDIUM_INT = 36340;
goog.webgl.HIGH_INT = 36341;
goog.webgl.FRAMEBUFFER = 36160;
goog.webgl.RENDERBUFFER = 36161;
goog.webgl.RGBA4 = 32854;
goog.webgl.RGB5_A1 = 32855;
goog.webgl.RGB565 = 36194;
goog.webgl.DEPTH_COMPONENT16 = 33189;
goog.webgl.STENCIL_INDEX = 6401;
goog.webgl.STENCIL_INDEX8 = 36168;
goog.webgl.DEPTH_STENCIL = 34041;
goog.webgl.RENDERBUFFER_WIDTH = 36162;
goog.webgl.RENDERBUFFER_HEIGHT = 36163;
goog.webgl.RENDERBUFFER_INTERNAL_FORMAT = 36164;
goog.webgl.RENDERBUFFER_RED_SIZE = 36176;
goog.webgl.RENDERBUFFER_GREEN_SIZE = 36177;
goog.webgl.RENDERBUFFER_BLUE_SIZE = 36178;
goog.webgl.RENDERBUFFER_ALPHA_SIZE = 36179;
goog.webgl.RENDERBUFFER_DEPTH_SIZE = 36180;
goog.webgl.RENDERBUFFER_STENCIL_SIZE = 36181;
goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048;
goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049;
goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050;
goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051;
goog.webgl.COLOR_ATTACHMENT0 = 36064;
goog.webgl.DEPTH_ATTACHMENT = 36096;
goog.webgl.STENCIL_ATTACHMENT = 36128;
goog.webgl.DEPTH_STENCIL_ATTACHMENT = 33306;
goog.webgl.NONE = 0;
goog.webgl.FRAMEBUFFER_COMPLETE = 36053;
goog.webgl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054;
goog.webgl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055;
goog.webgl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057;
goog.webgl.FRAMEBUFFER_UNSUPPORTED = 36061;
goog.webgl.FRAMEBUFFER_BINDING = 36006;
goog.webgl.RENDERBUFFER_BINDING = 36007;
goog.webgl.MAX_RENDERBUFFER_SIZE = 34024;
goog.webgl.INVALID_FRAMEBUFFER_OPERATION = 1286;
goog.webgl.UNPACK_FLIP_Y_WEBGL = 37440;
goog.webgl.UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441;
goog.webgl.CONTEXT_LOST_WEBGL = 37442;
goog.webgl.UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443;
goog.webgl.BROWSER_DEFAULT_WEBGL = 37444;
goog.webgl.HALF_FLOAT_OES = 36193;
goog.webgl.FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 35723;
goog.webgl.VERTEX_ARRAY_BINDING_OES = 34229;
goog.webgl.UNMASKED_VENDOR_WEBGL = 37445;
goog.webgl.UNMASKED_RENDERER_WEBGL = 37446;
goog.webgl.COMPRESSED_RGB_S3TC_DXT1_EXT = 33776;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779;
goog.webgl.TEXTURE_MAX_ANISOTROPY_EXT = 34046;
goog.webgl.MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047;
goog.provide("ol.render.webgl.Immediate");
ol.render.webgl.Immediate = function(context, pixelRatio) {
};
ol.render.webgl.Immediate.prototype.drawAsync = function(zIndex, callback) {
};
ol.render.webgl.Immediate.prototype.drawCircleGeometry = function(circleGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) {
};
ol.render.webgl.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawPointGeometry = function(pointGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry, data) {
};
ol.render.webgl.Immediate.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) {
};
ol.render.webgl.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
};
ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) {
};
ol.render.webgl.Immediate.prototype.setTextStyle = function(textStyle) {
};
goog.provide("ol.color.Matrix");
goog.require("goog.vec.Mat4");
ol.color.Matrix = function() {
this.colorMatrix_ = goog.vec.Mat4.createNumber();
this.brightness_ = undefined;
this.brightnessMatrix_ = goog.vec.Mat4.createNumber();
this.contrast_ = undefined;
this.contrastMatrix_ = goog.vec.Mat4.createNumber();
this.hue_ = undefined;
this.hueMatrix_ = goog.vec.Mat4.createNumber();
this.saturation_ = undefined;
this.saturationMatrix_ = goog.vec.Mat4.createNumber()
};
ol.color.Matrix.makeBrightness = function(matrix, value) {
goog.vec.Mat4.makeTranslate(matrix, value, value, value);
return matrix
};
ol.color.Matrix.makeContrast = function(matrix, value) {
goog.vec.Mat4.makeScale(matrix, value, value, value);
var translateValue = -0.5 * value + 0.5;
goog.vec.Mat4.setColumnValues(matrix, 3, translateValue, translateValue, translateValue, 1);
return matrix
};
ol.color.Matrix.makeHue = function(matrix, value) {
var cosHue = Math.cos(value);
var sinHue = Math.sin(value);
var v00 = 0.213 + cosHue * 0.787 - sinHue * 0.213;
var v01 = 0.715 - cosHue * 0.715 - sinHue * 0.715;
var v02 = 0.072 - cosHue * 0.072 + sinHue * 0.928;
var v03 = 0;
var v10 = 0.213 - cosHue * 0.213 + sinHue * 0.143;
var v11 = 0.715 + cosHue * 0.285 + sinHue * 0.14;
var v12 = 0.072 - cosHue * 0.072 - sinHue * 0.283;
var v13 = 0;
var v20 = 0.213 - cosHue * 0.213 - sinHue * 0.787;
var v21 = 0.715 - cosHue * 0.715 + sinHue * 0.715;
var v22 = 0.072 + cosHue * 0.928 + sinHue * 0.072;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return matrix
};
ol.color.Matrix.makeSaturation = function(matrix, value) {
var v00 = 0.213 + 0.787 * value;
var v01 = 0.715 - 0.715 * value;
var v02 = 0.072 - 0.072 * value;
var v03 = 0;
var v10 = 0.213 - 0.213 * value;
var v11 = 0.715 + 0.285 * value;
var v12 = 0.072 - 0.072 * value;
var v13 = 0;
var v20 = 0.213 - 0.213 * value;
var v21 = 0.715 - 0.715 * value;
var v22 = 0.072 + 0.928 * value;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return matrix
};
ol.color.Matrix.prototype.getMatrix = function(brightness, contrast, hue, saturation) {
var colorMatrixDirty = false;
if(goog.isDef(brightness) && brightness !== this.brightness_) {
ol.color.Matrix.makeBrightness(this.brightnessMatrix_, brightness);
this.brightness_ = brightness;
colorMatrixDirty = true
}
if(goog.isDef(contrast) && contrast !== this.contrast_) {
ol.color.Matrix.makeContrast(this.contrastMatrix_, contrast);
this.contrast_ = contrast;
colorMatrixDirty = true
}
if(goog.isDef(hue) && hue !== this.hue_) {
ol.color.Matrix.makeHue(this.hueMatrix_, hue);
this.hue_ = hue;
colorMatrixDirty = true
}
if(goog.isDef(saturation) && saturation !== this.saturation_) {
ol.color.Matrix.makeSaturation(this.saturationMatrix_, saturation);
this.saturation_ = saturation;
colorMatrixDirty = true
}
if(colorMatrixDirty) {
var colorMatrix = this.colorMatrix_;
goog.vec.Mat4.makeIdentity(colorMatrix);
if(goog.isDef(contrast)) {
goog.vec.Mat4.multMat(colorMatrix, this.contrastMatrix_, colorMatrix)
}
if(goog.isDef(brightness)) {
goog.vec.Mat4.multMat(colorMatrix, this.brightnessMatrix_, colorMatrix)
}
if(goog.isDef(saturation)) {
goog.vec.Mat4.multMat(colorMatrix, this.saturationMatrix_, colorMatrix)
}
if(goog.isDef(hue)) {
goog.vec.Mat4.multMat(colorMatrix, this.hueMatrix_, colorMatrix)
}
}
return this.colorMatrix_
};
goog.provide("ol.webgl.shader");
goog.require("goog.functions");
goog.require("goog.webgl");
goog.require("ol.webgl");
ol.webgl.Shader = function(source) {
this.source_ = source
};
ol.webgl.Shader.prototype.getType = goog.abstractMethod;
ol.webgl.Shader.prototype.getSource = function() {
return this.source_
};
ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE;
ol.webgl.shader.Fragment = function(source) {
goog.base(this, source)
};
goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader);
ol.webgl.shader.Fragment.prototype.getType = function() {
return goog.webgl.FRAGMENT_SHADER
};
ol.webgl.shader.Vertex = function(source) {
goog.base(this, source)
};
goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader);
ol.webgl.shader.Vertex.prototype.getType = function() {
return goog.webgl.VERTEX_SHADER
};
goog.provide("ol.renderer.webgl.map.shader.Color");
goog.require("ol.webgl.shader");
ol.renderer.webgl.map.shader.ColorFragment = function() {
goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment);
ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n";
ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor\x3dtexture2D(h,a);gl_FragColor.rgb\x3d(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a\x3dtexColor.a*g;}";
ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.ColorVertex = function() {
goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex);
ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n";
ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position\x3de*vec4(b,0.,1.);a\x3d(d*vec4(c,0.,1.)).st;}";
ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) {
this.u_colorMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_colorMatrix" : "f");
this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "g");
this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "e");
this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "d");
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "h");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c")
};
goog.provide("ol.renderer.webgl.map.shader.Default");
goog.require("ol.webgl.shader");
ol.renderer.webgl.map.shader.DefaultFragment = function() {
goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment);
ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d texColor.rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n";
ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor\x3dtexture2D(g,a);gl_FragColor.rgb\x3dtexColor.rgb;gl_FragColor.a\x3dtexColor.a*f;}";
ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.DefaultVertex = function() {
goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex);
ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n";
ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position\x3de*vec4(b,0.,1.);a\x3d(d*vec4(c,0.,1.)).st;}";
ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) {
this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "f");
this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "e");
this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "d");
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "g");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c")
};
goog.provide("ol.structs.IntegerSet");
goog.require("goog.asserts");
ol.structs.IntegerSet = function(opt_arr) {
this.arr_ = goog.isDef(opt_arr) ? opt_arr : [];
if(goog.DEBUG) {
this.assertValid()
}
};
ol.structs.IntegerSet.prototype.addRange = function(addStart, addStop) {
goog.asserts.assert(addStart <= addStop);
if(addStart == addStop) {
return
}
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
if(addStart <= arr[i]) {
arr.splice(i, 0, addStart, addStop);
this.compactRanges_();
return
}
}
arr.push(addStart, addStop);
this.compactRanges_()
};
ol.structs.IntegerSet.prototype.assertValid = function() {
var arr = this.arr_;
var n = arr.length;
goog.asserts.assert(n % 2 === 0);
var i;
for(i = 1;i < n;++i) {
goog.asserts.assert(arr[i] > arr[i - 1])
}
};
ol.structs.IntegerSet.prototype.clear = function() {
this.arr_.length = 0
};
ol.structs.IntegerSet.prototype.compactRanges_ = function() {
var arr = this.arr_;
var n = arr.length;
var rangeIndex = 0;
var i;
for(i = 0;i < n;i += 2) {
if(arr[i] == arr[i + 1]) {
}else {
if(rangeIndex > 0 && arr[rangeIndex - 2] <= arr[i] && arr[i] <= arr[rangeIndex - 1]) {
arr[rangeIndex - 1] = Math.max(arr[rangeIndex - 1], arr[i + 1])
}else {
arr[rangeIndex++] = arr[i];
arr[rangeIndex++] = arr[i + 1]
}
}
}
arr.length = rangeIndex
};
ol.structs.IntegerSet.prototype.findRange = function(minSize) {
goog.asserts.assert(minSize > 0);
var arr = this.arr_;
var n = arr.length;
var bestIndex = -1;
var bestSize, i, size;
for(i = 0;i < n;i += 2) {
size = arr[i + 1] - arr[i];
if(size == minSize) {
return arr[i]
}else {
if(size > minSize && (bestIndex == -1 || size < bestSize)) {
bestIndex = arr[i];
bestSize = size
}
}
}
return bestIndex
};
ol.structs.IntegerSet.prototype.forEachRange = function(f, opt_this) {
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
f.call(opt_this, arr[i], arr[i + 1])
}
};
ol.structs.IntegerSet.prototype.forEachRangeInverted = function(start, stop, f, opt_this) {
goog.asserts.assert(start < stop);
var arr = this.arr_;
var n = arr.length;
if(n === 0) {
f.call(opt_this, start, stop)
}else {
if(start < arr[0]) {
f.call(opt_this, start, arr[0])
}
var i;
for(i = 1;i < n - 1;i += 2) {
f.call(opt_this, arr[i], arr[i + 1])
}
if(arr[n - 1] < stop) {
f.call(opt_this, arr[n - 1], stop)
}
}
};
ol.structs.IntegerSet.prototype.getArray = function() {
return this.arr_
};
ol.structs.IntegerSet.prototype.getFirst = function() {
return this.arr_.length === 0 ? -1 : this.arr_[0]
};
ol.structs.IntegerSet.prototype.getLast = function() {
var n = this.arr_.length;
return n === 0 ? -1 : this.arr_[n - 1]
};
ol.structs.IntegerSet.prototype.getSize = function() {
var arr = this.arr_;
var n = arr.length;
var size = 0;
var i;
for(i = 0;i < n;i += 2) {
size += arr[i + 1] - arr[i]
}
return size
};
ol.structs.IntegerSet.prototype.intersectsRange = function(start, stop) {
goog.asserts.assert(start <= stop);
if(start == stop) {
return false
}else {
var arr = this.arr_;
var n = arr.length;
var i = 0;
for(i = 0;i < n;i += 2) {
if(arr[i] <= start && start < arr[i + 1] || arr[i] < stop && stop - 1 < arr[i + 1] || start < arr[i] && arr[i + 1] <= stop) {
return true
}
}
return false
}
};
ol.structs.IntegerSet.prototype.isEmpty = function() {
return this.arr_.length === 0
};
ol.structs.IntegerSet.prototype.pack = function() {
return this.arr_
};
ol.structs.IntegerSet.prototype.removeRange = function(removeStart, removeStop) {
goog.asserts.assert(removeStart <= removeStop);
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
if(removeStop < arr[i] || arr[i + 1] < removeStart) {
continue
}else {
if(arr[i] > removeStop) {
break
}
}
if(removeStart < arr[i]) {
if(removeStop == arr[i]) {
break
}else {
if(removeStop < arr[i + 1]) {
arr[i] = Math.max(arr[i], removeStop);
break
}else {
arr.splice(i, 2);
i -= 2;
n -= 2
}
}
}else {
if(removeStart == arr[i]) {
if(removeStop < arr[i + 1]) {
arr[i] = removeStop;
break
}else {
if(removeStop == arr[i + 1]) {
arr.splice(i, 2);
break
}else {
arr.splice(i, 2);
i -= 2;
n -= 2
}
}
}else {
if(removeStop < arr[i + 1]) {
arr.splice(i, 2, arr[i], removeStart, removeStop, arr[i + 1]);
break
}else {
if(removeStop == arr[i + 1]) {
arr[i + 1] = removeStart;
break
}else {
arr[i + 1] = removeStart
}
}
}
}
}
this.compactRanges_()
};
if(goog.DEBUG) {
ol.structs.IntegerSet.prototype.toString = function() {
var arr = this.arr_;
var n = arr.length;
var result = new Array(n / 2);
var resultIndex = 0;
var i;
for(i = 0;i < n;i += 2) {
result[resultIndex++] = arr[i] + "-" + arr[i + 1]
}
return result.join(", ")
}
}
;goog.provide("ol.structs.Buffer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.webgl");
goog.require("ol");
goog.require("ol.structs.IntegerSet");
ol.structs.BufferUsage = {STATIC_DRAW:goog.webgl.STATIC_DRAW, STREAM_DRAW:goog.webgl.STREAM_DRAW, DYNAMIC_DRAW:goog.webgl.DYNAMIC_DRAW};
ol.structs.Buffer = function(opt_arr, opt_used, opt_usage) {
this.arr_ = goog.isDef(opt_arr) ? opt_arr : [];
this.dirtySets_ = [];
this.freeSet_ = new ol.structs.IntegerSet;
var used = goog.isDef(opt_used) ? opt_used : this.arr_.length;
if(used < this.arr_.length) {
this.freeSet_.addRange(used, this.arr_.length)
}
if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) {
var arr = this.arr_;
var n = arr.length;
var i;
for(i = used;i < n;++i) {
arr[i] = NaN
}
}
this.split32_ = null;
this.split32DirtySet_ = null;
this.usage_ = goog.isDef(opt_usage) ? opt_usage : ol.structs.BufferUsage.STATIC_DRAW
};
ol.structs.Buffer.prototype.allocate = function(size) {
goog.asserts.assert(size > 0);
var offset = this.freeSet_.findRange(size);
goog.asserts.assert(offset != -1);
this.freeSet_.removeRange(offset, offset + size);
return offset
};
ol.structs.Buffer.prototype.add = function(values) {
var size = values.length;
var offset = this.allocate(size);
var i;
for(i = 0;i < size;++i) {
this.arr_[offset + i] = values[i]
}
this.markDirty(size, offset);
return offset
};
ol.structs.Buffer.prototype.addDirtySet = function(dirtySet) {
goog.asserts.assert(!goog.array.contains(this.dirtySets_, dirtySet));
this.dirtySets_.push(dirtySet)
};
ol.structs.Buffer.prototype.forEachRange = function(f, opt_this) {
if(this.arr_.length !== 0) {
this.freeSet_.forEachRangeInverted(0, this.arr_.length, f, opt_this)
}
};
ol.structs.Buffer.prototype.getArray = function() {
return this.arr_
};
ol.structs.Buffer.prototype.getCount = function() {
return this.arr_.length - this.freeSet_.getSize()
};
ol.structs.Buffer.prototype.getFreeSet = function() {
return this.freeSet_
};
ol.structs.Buffer.prototype.getSplit32 = function() {
var arr = this.arr_;
var n = arr.length;
if(goog.isNull(this.split32DirtySet_)) {
this.split32DirtySet_ = new ol.structs.IntegerSet([0, n]);
this.addDirtySet(this.split32DirtySet_)
}
if(goog.isNull(this.split32_)) {
this.split32_ = new Float32Array(2 * n)
}
var split32 = this.split32_;
this.split32DirtySet_.forEachRange(function(start, stop) {
var doubleHigh, i, j, value;
for(i = start, j = 2 * start;i < stop;++i, j += 2) {
value = arr[i];
if(value < 0) {
doubleHigh = 65536 * Math.floor(-value / 65536);
split32[j] = -doubleHigh;
split32[j + 1] = value + doubleHigh
}else {
doubleHigh = 65536 * Math.floor(value / 65536);
split32[j] = doubleHigh;
split32[j + 1] = value - doubleHigh
}
}
});
this.split32DirtySet_.clear();
return this.split32_
};
ol.structs.Buffer.prototype.getUsage = function() {
return this.usage_
};
ol.structs.Buffer.prototype.markDirty = function(size, offset) {
var i, ii;
for(i = 0, ii = this.dirtySets_.length;i < ii;++i) {
this.dirtySets_[i].addRange(offset, offset + size)
}
};
ol.structs.Buffer.prototype.remove = function(size, offset) {
var i, ii;
this.freeSet_.addRange(offset, offset + size);
for(i = 0, ii = this.dirtySets_.length;i < ii;++i) {
this.dirtySets_[i].removeRange(offset, offset + size)
}
if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) {
var arr = this.arr_;
for(i = 0;i < size;++i) {
arr[offset + i] = NaN
}
}
};
ol.structs.Buffer.prototype.removeDirtySet = function(dirtySet) {
var removed = goog.array.remove(this.dirtySets_, dirtySet);
goog.asserts.assert(removed)
};
ol.structs.Buffer.prototype.set = function(values, offset) {
var arr = this.arr_;
var n = values.length;
goog.asserts.assert(0 <= offset && offset + n <= arr.length);
var i;
for(i = 0;i < n;++i) {
arr[offset + i] = values[i]
}
this.markDirty(n, offset)
};
goog.provide("ol.renderer.webgl.Layer");
goog.require("goog.vec.Mat4");
goog.require("goog.webgl");
goog.require("ol.color.Matrix");
goog.require("ol.layer.Layer");
goog.require("ol.render.Event");
goog.require("ol.render.EventType");
goog.require("ol.render.webgl.Immediate");
goog.require("ol.renderer.Layer");
goog.require("ol.renderer.webgl.map.shader.Color");
goog.require("ol.renderer.webgl.map.shader.Default");
goog.require("ol.structs.Buffer");
ol.renderer.webgl.Layer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer);
this.arrayBuffer_ = new ol.structs.Buffer([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
this.texture = null;
this.framebuffer = null;
this.framebufferDimension = undefined;
this.texCoordMatrix = goog.vec.Mat4.createNumber();
this.projectionMatrix = goog.vec.Mat4.createNumberIdentity();
this.colorMatrix_ = new ol.color.Matrix;
this.colorLocations_ = null;
this.defaultLocations_ = null
};
goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer);
ol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
if(!goog.isDef(this.framebufferDimension) || this.framebufferDimension != framebufferDimension) {
frameState.postRenderFunctions.push(goog.partial(function(gl, framebuffer, texture) {
if(!gl.isContextLost()) {
gl.deleteFramebuffer(framebuffer);
gl.deleteTexture(texture)
}
}, gl, this.framebuffer, this.texture));
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, framebufferDimension, framebufferDimension, 0, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, null);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR);
var framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(goog.webgl.FRAMEBUFFER, goog.webgl.COLOR_ATTACHMENT0, goog.webgl.TEXTURE_2D, texture, 0);
this.texture = texture;
this.framebuffer = framebuffer;
this.framebufferDimension = framebufferDimension
}else {
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, this.framebuffer)
}
};
ol.renderer.webgl.Layer.prototype.composeFrame = function(frameState, layerState, context) {
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context, frameState);
context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
var gl = context.getGL();
var useColor = layerState.brightness || layerState.contrast != 1 || layerState.hue || layerState.saturation != 1;
var fragmentShader, vertexShader;
if(useColor) {
fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance();
vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance()
}else {
fragmentShader = ol.renderer.webgl.map.shader.DefaultFragment.getInstance();
vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance()
}
var program = context.getProgram(fragmentShader, vertexShader);
var locations;
if(useColor) {
if(goog.isNull(this.colorLocations_)) {
locations = new ol.renderer.webgl.map.shader.Color.Locations(gl, program);
this.colorLocations_ = locations
}else {
locations = this.colorLocations_
}
}else {
if(goog.isNull(this.defaultLocations_)) {
locations = new ol.renderer.webgl.map.shader.Default.Locations(gl, program);
this.defaultLocations_ = locations
}else {
locations = this.defaultLocations_
}
}
if(context.useProgram(program)) {
gl.enableVertexAttribArray(locations.a_position);
gl.vertexAttribPointer(locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
gl.enableVertexAttribArray(locations.a_texCoord);
gl.vertexAttribPointer(locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
gl.uniform1i(locations.u_texture, 0)
}
gl.uniformMatrix4fv(locations.u_texCoordMatrix, false, this.getTexCoordMatrix());
gl.uniformMatrix4fv(locations.u_projectionMatrix, false, this.getProjectionMatrix());
if(useColor) {
gl.uniformMatrix4fv(locations.u_colorMatrix, false, this.colorMatrix_.getMatrix(layerState.brightness, layerState.contrast, layerState.hue, layerState.saturation))
}
gl.uniform1f(locations.u_opacity, layerState.opacity);
gl.bindTexture(goog.webgl.TEXTURE_2D, this.getTexture());
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context, frameState)
};
ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState) {
var layer = this.getLayer();
if(layer.hasListener(type)) {
var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio);
var composeEvent = new ol.render.Event(type, layer, render, frameState, null, context);
layer.dispatchEvent(composeEvent)
}
};
ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() {
return(this.getMapRenderer())
};
ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
return this.texCoordMatrix
};
ol.renderer.webgl.Layer.prototype.getTexture = function() {
return this.texture
};
ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
return this.projectionMatrix
};
ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() {
this.texture = null;
this.framebuffer = null;
this.framebufferDimension = undefined
};
goog.provide("ol.renderer.webgl.ImageLayer");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("goog.webgl");
goog.require("ol.Coordinate");
goog.require("ol.Extent");
goog.require("ol.ImageBase");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.layer.Image");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.source.Image");
ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
goog.base(this, mapRenderer, imageLayer);
this.image_ = null
};
goog.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer);
ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) {
var imageElement = image.getImageElement();
var gl = this.getWebGLMapRenderer().getGL();
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, imageElement);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR);
return texture
};
ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) {
var layer = this.getLayer();
var source = layer.getSource();
goog.asserts.assertInstanceof(source, ol.source.Image);
var extent = frameState.extent;
var resolution = frameState.view2DState.resolution;
var rotation = frameState.view2DState.rotation;
return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) {
return callback.call(thisArg, feature, layer)
})
};
ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layerState) {
var gl = this.getWebGLMapRenderer().getGL();
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image = this.image_;
var texture = this.texture;
var imageLayer = this.getLayer();
goog.asserts.assertInstanceof(imageLayer, ol.layer.Image);
var imageSource = imageLayer.getSource();
goog.asserts.assertInstanceof(imageSource, ol.source.Image);
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution, frameState.pixelRatio, view2DState.projection);
if(!goog.isNull(image_)) {
var imageState = image_.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image_.load()
}else {
if(imageState == ol.ImageState.LOADED) {
image = image_;
texture = this.createTexture_(image_);
if(!goog.isNull(this.texture)) {
frameState.postRenderFunctions.push(goog.partial(function(gl, texture) {
if(!gl.isContextLost()) {
gl.deleteTexture(texture)
}
}, gl, this.texture))
}
}
}
}
}
if(!goog.isNull(image)) {
goog.asserts.assert(!goog.isNull(texture));
var canvas = this.getWebGLMapRenderer().getContext().getCanvas();
this.updateProjectionMatrix_(canvas.width, canvas.height, viewCenter, viewResolution, viewRotation, image.getExtent());
var texCoordMatrix = this.texCoordMatrix;
goog.vec.Mat4.makeIdentity(texCoordMatrix);
goog.vec.Mat4.scale(texCoordMatrix, 1, -1, 1);
goog.vec.Mat4.translate(texCoordMatrix, 0, -1, 0);
this.image_ = image;
this.texture = texture;
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvasWidth, canvasHeight, viewCenter, viewResolution, viewRotation, imageExtent) {
var canvasExtentWidth = canvasWidth * viewResolution;
var canvasExtentHeight = canvasHeight * viewResolution;
var projectionMatrix = this.projectionMatrix;
goog.vec.Mat4.makeIdentity(projectionMatrix);
goog.vec.Mat4.scale(projectionMatrix, 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1);
goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation);
goog.vec.Mat4.translate(projectionMatrix, imageExtent[0] - viewCenter[0], imageExtent[1] - viewCenter[1], 0);
goog.vec.Mat4.scale(projectionMatrix, (imageExtent[2] - imageExtent[0]) / 2, (imageExtent[3] - imageExtent[1]) / 2, 1);
goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0)
};
goog.provide("ol.renderer.webgl.tilelayer.shader");
goog.require("ol.webgl.shader");
ol.renderer.webgl.tilelayer.shader.Fragment = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment);
ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor \x3d texture2D(u_texture, v_texCoord);\n}\n";
ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor\x3dtexture2D(e,a);}";
ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.tilelayer.shader.Vertex = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex);
ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position \x3d vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord \x3d a_texCoord;\n}\n\n\n";
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position\x3dvec4(b*d.xy+d.zw,0.,1.);a\x3dc;}";
ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) {
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "e");
this.u_tileOffset = gl.getUniformLocation(program, goog.DEBUG ? "u_tileOffset" : "d");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c")
};
goog.provide("ol.renderer.webgl.TileLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("goog.vec.Vec4");
goog.require("goog.webgl");
goog.require("ol.Tile");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.math");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.renderer.webgl.tilelayer.shader");
goog.require("ol.source.Tile");
goog.require("ol.structs.Buffer");
ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
goog.base(this, mapRenderer, tileLayer);
this.fragmentShader_ = ol.renderer.webgl.tilelayer.shader.Fragment.getInstance();
this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance();
this.locations_ = null;
this.renderArrayBuffer_ = new ol.structs.Buffer([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]);
this.renderedTileRange_ = null;
this.renderedFramebufferExtent_ = null;
this.renderedRevision_ = -1
};
goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer);
ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
var mapRenderer = this.getWebGLMapRenderer();
var context = mapRenderer.getContext();
context.deleteBuffer(this.renderArrayBuffer_);
goog.base(this, "disposeInternal")
};
ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() {
goog.base(this, "handleWebGLContextLost");
this.locations_ = null
};
ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerState) {
var mapRenderer = this.getWebGLMapRenderer();
var context = mapRenderer.getContext();
var gl = mapRenderer.getGL();
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getLayer();
goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile);
var tileSource = tileLayer.getSource();
goog.asserts.assertInstanceof(tileSource, ol.source.Tile);
var tileGrid = tileSource.getTileGridForProjection(projection);
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
var tilePixelSize = tileSource.getTilePixelSize(z, frameState.pixelRatio, projection);
var pixelRatio = tilePixelSize / tileGrid.getTileSize(z);
var tilePixelResolution = tileResolution / pixelRatio;
var tileGutter = tileSource.getGutter();
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var framebufferExtent;
if(!goog.isNull(this.renderedTileRange_) && this.renderedTileRange_.equals(tileRange) && this.renderedRevision_ == tileSource.getRevision()) {
framebufferExtent = this.renderedFramebufferExtent_
}else {
var tileRangeSize = tileRange.getSize();
var maxDimension = Math.max(tileRangeSize[0] * tilePixelSize, tileRangeSize[1] * tilePixelSize);
var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension);
var framebufferExtentDimension = tilePixelResolution * framebufferDimension;
var origin = tileGrid.getOrigin(z);
var minX = origin[0] + tileRange.minX * tilePixelSize * tilePixelResolution;
var minY = origin[1] + tileRange.minY * tilePixelSize * tilePixelResolution;
framebufferExtent = [minX, minY, minX + framebufferExtentDimension, minY + framebufferExtentDimension];
this.bindFramebuffer(frameState, framebufferDimension);
gl.viewport(0, 0, framebufferDimension, framebufferDimension);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
gl.disable(goog.webgl.BLEND);
var program = context.getProgram(this.fragmentShader_, this.vertexShader_);
context.useProgram(program);
if(goog.isNull(this.locations_)) {
this.locations_ = new ol.renderer.webgl.tilelayer.shader.Locations(gl, program)
}
context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.renderArrayBuffer_);
gl.enableVertexAttribArray(this.locations_.a_position);
gl.vertexAttribPointer(this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
gl.enableVertexAttribArray(this.locations_.a_texCoord);
gl.vertexAttribPointer(this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
gl.uniform1i(this.locations_.u_texture, 0);
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED && mapRenderer.isTileTextureLoaded(tile)
}, tileSource, pixelRatio, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
if(!goog.isDef(useInterimTilesOnError)) {
useInterimTilesOnError = true
}
var allTilesLoaded = true;
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED) {
if(mapRenderer.isTileTextureLoaded(tile)) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}
}else {
if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) {
continue
}
}
allTilesLoaded = false;
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var u_tileOffset = goog.vec.Vec4.createFloat32();
var i, ii, sx, sy, tileExtent, tileKey, tilesToDraw, tx, ty;
for(i = 0, ii = zs.length;i < ii;++i) {
tilesToDraw = tilesToDrawByZ[zs[i]];
for(tileKey in tilesToDraw) {
tile = tilesToDraw[tileKey];
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
sx = 2 * (tileExtent[2] - tileExtent[0]) / framebufferExtentDimension;
sy = 2 * (tileExtent[3] - tileExtent[1]) / framebufferExtentDimension;
tx = 2 * (tileExtent[0] - framebufferExtent[0]) / framebufferExtentDimension - 1;
ty = 2 * (tileExtent[1] - framebufferExtent[1]) / framebufferExtentDimension - 1;
goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty);
gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
mapRenderer.bindTileTexture(tile, tilePixelSize, tileGutter * pixelRatio, goog.webgl.LINEAR, goog.webgl.LINEAR);
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4)
}
}
if(allTilesLoaded) {
this.renderedTileRange_ = tileRange;
this.renderedFramebufferExtent_ = framebufferExtent;
this.renderedRevision_ = tileSource.getRevision()
}else {
this.renderedTileRange_ = null;
this.renderedFramebufferExtent_ = null;
this.renderedRevision_ = -1;
frameState.animate = true
}
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
var tileTextureQueue = mapRenderer.getTileTextureQueue();
this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload(), function(tile) {
if(tile.getState() == ol.TileState.LOADED && !mapRenderer.isTileTextureLoaded(tile) && !tileTextureQueue.isKeyQueued(tile.getKey())) {
tileTextureQueue.enqueue([tile, tileGrid.getTileCoordCenter(tile.tileCoord), tileGrid.getResolution(tile.tileCoord.z), tilePixelSize, tileGutter * pixelRatio])
}
}, this);
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
var texCoordMatrix = this.texCoordMatrix;
goog.vec.Mat4.makeIdentity(texCoordMatrix);
goog.vec.Mat4.translate(texCoordMatrix, (center[0] - framebufferExtent[0]) / (framebufferExtent[2] - framebufferExtent[0]), (center[1] - framebufferExtent[1]) / (framebufferExtent[3] - framebufferExtent[1]), 0);
if(view2DState.rotation !== 0) {
goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation)
}
goog.vec.Mat4.scale(texCoordMatrix, frameState.size[0] * view2DState.resolution / (framebufferExtent[2] - framebufferExtent[0]), frameState.size[1] * view2DState.resolution / (framebufferExtent[3] - framebufferExtent[1]), 1);
goog.vec.Mat4.translate(texCoordMatrix, -0.5, -0.5, 0)
};
goog.provide("ol.structs.LRUCache");
goog.require("goog.asserts");
goog.require("goog.object");
ol.structs.LRUCache = function() {
this.count_ = 0;
this.entries_ = {};
this.oldest_ = null;
this.newest_ = null
};
ol.structs.LRUCache.prototype.assertValid = function() {
if(this.count_ === 0) {
goog.asserts.assert(goog.object.isEmpty(this.entries_));
goog.asserts.assert(goog.isNull(this.oldest_));
goog.asserts.assert(goog.isNull(this.newest_))
}else {
goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_);
goog.asserts.assert(!goog.isNull(this.oldest_));
goog.asserts.assert(goog.isNull(this.oldest_.older));
goog.asserts.assert(!goog.isNull(this.newest_));
goog.asserts.assert(goog.isNull(this.newest_.newer));
var i, entry;
var older = null;
i = 0;
for(entry = this.oldest_;!goog.isNull(entry);entry = entry.newer) {
goog.asserts.assert(entry.older === older);
older = entry;
++i
}
goog.asserts.assert(i == this.count_);
var newer = null;
i = 0;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
goog.asserts.assert(entry.newer === newer);
newer = entry;
++i
}
goog.asserts.assert(i == this.count_)
}
};
ol.structs.LRUCache.prototype.clear = function() {
this.count_ = 0;
this.entries_ = {};
this.oldest_ = null;
this.newest_ = null
};
ol.structs.LRUCache.prototype.containsKey = function(key) {
return this.entries_.hasOwnProperty(key)
};
ol.structs.LRUCache.prototype.forEach = function(f, opt_this) {
var entry = this.oldest_;
while(!goog.isNull(entry)) {
f.call(opt_this, entry.value_, entry.key_, this);
entry = entry.newer
}
};
ol.structs.LRUCache.prototype.get = function(key) {
var entry = this.entries_[key];
goog.asserts.assert(goog.isDef(entry));
if(entry === this.newest_) {
return entry.value_
}else {
if(entry === this.oldest_) {
this.oldest_ = this.oldest_.newer;
this.oldest_.older = null
}else {
entry.newer.older = entry.older;
entry.older.newer = entry.newer
}
}
entry.newer = null;
entry.older = this.newest_;
this.newest_.newer = entry;
this.newest_ = entry;
return entry.value_
};
ol.structs.LRUCache.prototype.getCount = function() {
return this.count_
};
ol.structs.LRUCache.prototype.getKeys = function() {
var keys = new Array(this.count_);
var i = 0;
var entry;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
keys[i++] = entry.key_
}
goog.asserts.assert(i == this.count_);
return keys
};
ol.structs.LRUCache.prototype.getValues = function() {
var values = new Array(this.count_);
var i = 0;
var entry;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
values[i++] = entry.value_
}
goog.asserts.assert(i == this.count_);
return values
};
ol.structs.LRUCache.prototype.peekLast = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
return this.oldest_.value_
};
ol.structs.LRUCache.prototype.peekLastKey = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
return this.oldest_.key_
};
ol.structs.LRUCache.prototype.pop = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
goog.asserts.assert(!goog.isNull(this.newest_));
var entry = this.oldest_;
goog.asserts.assert(entry.key_ in this.entries_);
delete this.entries_[entry.key_];
if(!goog.isNull(entry.newer)) {
entry.newer.older = null
}
this.oldest_ = entry.newer;
if(goog.isNull(this.oldest_)) {
this.newest_ = null
}
--this.count_;
return entry.value_
};
ol.structs.LRUCache.prototype.set = function(key, value) {
goog.asserts.assert(!(key in {}));
goog.asserts.assert(!(key in this.entries_));
var entry = {key_:key, newer:null, older:this.newest_, value_:value};
if(goog.isNull(this.newest_)) {
this.oldest_ = entry
}else {
this.newest_.newer = entry
}
this.newest_ = entry;
this.entries_[key] = entry;
++this.count_
};
ol.structs.LRUCacheEntry;
goog.provide("ol.webgl.Context");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.log");
goog.require("goog.object");
goog.require("ol.structs.Buffer");
goog.require("ol.structs.IntegerSet");
goog.require("ol.webgl.WebGLContextEventType");
ol.webgl.BufferCacheEntry;
ol.webgl.Context = function(canvas, gl) {
this.canvas_ = canvas;
this.gl_ = gl;
this.bufferCache_ = {};
this.shaderCache_ = {};
this.programCache_ = {};
this.currentProgram_ = null;
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, this.handleWebGLContextLost, false, this);
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, this.handleWebGLContextRestored, false, this)
};
ol.webgl.Context.prototype.bindBuffer = function(target, buf) {
var gl = this.getGL();
var arr = buf.getArray();
var bufferKey = goog.getUid(buf);
if(bufferKey in this.bufferCache_) {
var bufferCacheEntry = this.bufferCache_[bufferKey];
gl.bindBuffer(target, bufferCacheEntry.buffer);
bufferCacheEntry.dirtySet.forEachRange(function(start, stop) {
var slice = arr.slice(start, stop);
gl.bufferSubData(target, start, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(slice) : new Uint16Array(slice))
});
bufferCacheEntry.dirtySet.clear()
}else {
var buffer = gl.createBuffer();
gl.bindBuffer(target, buffer);
gl.bufferData(target, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(arr) : new Uint16Array(arr), buf.getUsage());
var dirtySet = new ol.structs.IntegerSet;
buf.addDirtySet(dirtySet);
this.bufferCache_[bufferKey] = {buf:buf, buffer:buffer, dirtySet:dirtySet}
}
};
ol.webgl.Context.prototype.deleteBuffer = function(buf) {
var gl = this.getGL();
var bufferKey = goog.getUid(buf);
goog.asserts.assert(bufferKey in this.bufferCache_);
var bufferCacheEntry = this.bufferCache_[bufferKey];
bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet);
if(!gl.isContextLost()) {
gl.deleteBuffer(bufferCacheEntry.buffer)
}
delete this.bufferCache_[bufferKey]
};
ol.webgl.Context.prototype.disposeInternal = function() {
goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) {
bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet)
});
var gl = this.getGL();
if(!gl.isContextLost()) {
goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) {
gl.deleteBuffer(bufferCacheEntry.buffer)
});
goog.object.forEach(this.programCache_, function(program) {
gl.deleteProgram(program)
});
goog.object.forEach(this.shaderCache_, function(shader) {
gl.deleteShader(shader)
})
}
};
ol.webgl.Context.prototype.getCanvas = function() {
return this.canvas_
};
ol.webgl.Context.prototype.getGL = function() {
return this.gl_
};
ol.webgl.Context.prototype.getShader = function(shaderObject) {
var shaderKey = goog.getUid(shaderObject);
if(shaderKey in this.shaderCache_) {
return this.shaderCache_[shaderKey]
}else {
var gl = this.getGL();
var shader = gl.createShader(shaderObject.getType());
gl.shaderSource(shader, shaderObject.getSource());
gl.compileShader(shader);
if(goog.DEBUG) {
if(!gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) && !gl.isContextLost()) {
goog.log.error(this.logger_, gl.getShaderInfoLog(shader))
}
}
goog.asserts.assert(gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) || gl.isContextLost());
this.shaderCache_[shaderKey] = shader;
return shader
}
};
ol.webgl.Context.prototype.getProgram = function(fragmentShaderObject, vertexShaderObject) {
var programKey = goog.getUid(fragmentShaderObject) + "/" + goog.getUid(vertexShaderObject);
if(programKey in this.programCache_) {
return this.programCache_[programKey]
}else {
var gl = this.getGL();
var program = gl.createProgram();
gl.attachShader(program, this.getShader(fragmentShaderObject));
gl.attachShader(program, this.getShader(vertexShaderObject));
gl.linkProgram(program);
if(goog.DEBUG) {
if(!gl.getProgramParameter(program, goog.webgl.LINK_STATUS) && !gl.isContextLost()) {
goog.log.error(this.logger_, gl.getProgramInfoLog(program))
}
}
goog.asserts.assert(gl.getProgramParameter(program, goog.webgl.LINK_STATUS) || gl.isContextLost());
this.programCache_[programKey] = program;
return program
}
};
ol.webgl.Context.prototype.handleWebGLContextLost = function() {
goog.object.clear(this.bufferCache_);
goog.object.clear(this.shaderCache_);
goog.object.clear(this.programCache_);
this.currentProgram_ = null
};
ol.webgl.Context.prototype.handleWebGLContextRestored = function() {
};
ol.webgl.Context.prototype.useProgram = function(program) {
if(program == this.currentProgram_) {
return false
}else {
var gl = this.getGL();
gl.useProgram(program);
this.currentProgram_ = program;
return true
}
};
ol.webgl.Context.prototype.logger_ = goog.log.getLogger("ol.webgl.Context");
goog.provide("ol.renderer.webgl.Map");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.log");
goog.require("goog.log.Logger");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.webgl");
goog.require("ol");
goog.require("ol.Tile");
goog.require("ol.css");
goog.require("ol.dom");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.render.Event");
goog.require("ol.render.EventType");
goog.require("ol.render.webgl.Immediate");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.webgl.ImageLayer");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.renderer.webgl.TileLayer");
goog.require("ol.source.State");
goog.require("ol.structs.LRUCache");
goog.require("ol.structs.PriorityQueue");
goog.require("ol.webgl");
goog.require("ol.webgl.Context");
goog.require("ol.webgl.WebGLContextEventType");
ol.renderer.webgl.TextureCacheEntry;
ol.renderer.webgl.Map = function(container, map) {
goog.base(this, container, map);
this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
this.canvas_.style.width = "100%";
this.canvas_.style.height = "100%";
this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
goog.dom.insertChildAt(container, this.canvas_, 0);
this.clipTileCanvasSize_ = 0;
this.clipTileContext_ = ol.dom.createCanvasContext2D();
this.renderedVisible_ = true;
this.gl_ = ol.webgl.getContext(this.canvas_, {antialias:true, depth:false, failIfMajorPerformanceCaveat:true, preserveDrawingBuffer:false, stencil:true});
goog.asserts.assert(!goog.isNull(this.gl_));
this.context_ = new ol.webgl.Context(this.canvas_, this.gl_);
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, this.handleWebGLContextLost, false, this);
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, this.handleWebGLContextRestored, false, this);
this.textureCache_ = new ol.structs.LRUCache;
this.focus_ = null;
this.tileTextureQueue_ = new ol.structs.PriorityQueue(goog.bind(function(element) {
var tileCenter = (element[1]);
var tileResolution = (element[2]);
var deltaX = tileCenter[0] - this.focus_[0];
var deltaY = tileCenter[1] - this.focus_[1];
return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution
}, this), function(element) {
return(element[0]).getKey()
});
this.loadNextTileTexture_ = goog.bind(function(map, frameState) {
if(!this.tileTextureQueue_.isEmpty()) {
this.tileTextureQueue_.reprioritize();
var element = this.tileTextureQueue_.dequeue();
var tile = (element[0]);
var tileSize = (element[3]);
var tileGutter = (element[4]);
this.bindTileTexture(tile, tileSize, tileGutter, goog.webgl.LINEAR, goog.webgl.LINEAR)
}
}, this);
this.textureCacheFrameMarkerCount_ = 0;
this.initializeGL_()
};
goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map);
ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, tileSize, tileGutter, magFilter, minFilter) {
var gl = this.getGL();
var tileKey = tile.getKey();
if(this.textureCache_.containsKey(tileKey)) {
var textureCacheEntry = (this.textureCache_.get(tileKey));
gl.bindTexture(goog.webgl.TEXTURE_2D, textureCacheEntry.texture);
if(textureCacheEntry.magFilter != magFilter) {
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter);
textureCacheEntry.magFilter = magFilter
}
if(textureCacheEntry.minFilter != minFilter) {
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, minFilter);
textureCacheEntry.minFilter = minFilter
}
}else {
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
if(tileGutter > 0) {
var clipTileCanvas = this.clipTileContext_.canvas;
var clipTileContext = this.clipTileContext_;
if(this.clipTileCanvasSize_ != tileSize) {
clipTileCanvas.width = tileSize;
clipTileCanvas.height = tileSize;
this.clipTileCanvasSize_ = tileSize
}else {
clipTileContext.clearRect(0, 0, tileSize, tileSize)
}
clipTileContext.drawImage(tile.getImage(), tileGutter, tileGutter, tileSize, tileSize, 0, 0, tileSize, tileSize);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, clipTileCanvas)
}else {
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, tile.getImage())
}
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, minFilter);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE);
this.textureCache_.set(tileKey, {texture:texture, magFilter:magFilter, minFilter:minFilter})
}
};
ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
return new ol.renderer.webgl.ImageLayer(this, layer)
}else {
if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
return new ol.renderer.webgl.TileLayer(this, layer)
}else {
goog.asserts.fail();
return null
}
}
};
ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {
var map = this.getMap();
if(map.hasListener(type)) {
var context = this.getContext();
var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio);
var composeEvent = new ol.render.Event(type, map, render, frameState, null, context);
map.dispatchEvent(composeEvent)
}
};
ol.renderer.webgl.Map.prototype.disposeInternal = function() {
var gl = this.getGL();
if(!gl.isContextLost()) {
this.textureCache_.forEach(function(textureCacheEntry) {
if(!goog.isNull(textureCacheEntry)) {
gl.deleteTexture(textureCacheEntry.texture)
}
})
}
goog.dispose(this.context_);
goog.base(this, "disposeInternal")
};
ol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) {
var gl = this.getGL();
var textureCacheEntry;
while(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
textureCacheEntry = (this.textureCache_.peekLast());
if(goog.isNull(textureCacheEntry)) {
if(+this.textureCache_.peekLastKey() == frameState.index) {
break
}else {
--this.textureCacheFrameMarkerCount_
}
}else {
gl.deleteTexture(textureCacheEntry.texture)
}
this.textureCache_.pop()
}
};
ol.renderer.webgl.Map.prototype.getContext = function() {
return this.context_
};
ol.renderer.webgl.Map.prototype.getGL = function() {
return this.gl_
};
ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() {
return this.tileTextureQueue_
};
ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {
event.preventDefault();
this.textureCache_.clear();
this.textureCacheFrameMarkerCount_ = 0;
goog.object.forEach(this.getLayerRenderers(), function(layerRenderer, key, object) {
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer);
var webGLLayerRenderer = (layerRenderer);
webGLLayerRenderer.handleWebGLContextLost()
})
};
ol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() {
this.initializeGL_();
this.getMap().render()
};
ol.renderer.webgl.Map.prototype.initializeGL_ = function() {
var gl = this.gl_;
gl.activeTexture(goog.webgl.TEXTURE0);
gl.blendFuncSeparate(goog.webgl.SRC_ALPHA, goog.webgl.ONE_MINUS_SRC_ALPHA, goog.webgl.ONE, goog.webgl.ONE_MINUS_SRC_ALPHA);
gl.disable(goog.webgl.CULL_FACE);
gl.disable(goog.webgl.DEPTH_TEST);
gl.disable(goog.webgl.SCISSOR_TEST);
gl.disable(goog.webgl.STENCIL_TEST)
};
ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) {
return this.textureCache_.containsKey(tile.getKey())
};
ol.renderer.webgl.Map.prototype.logger_ = goog.log.getLogger("ol.renderer.webgl.Map");
ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
var context = this.getContext();
var gl = this.getGL();
if(gl.isContextLost()) {
return false
}
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, false);
this.renderedVisible_ = false
}
return false
}
this.focus_ = frameState.focus;
this.textureCache_.set((-frameState.index).toString(), null);
++this.textureCacheFrameMarkerCount_;
var layerStatesToDraw = [];
var layerStatesArray = frameState.layerStatesArray;
var viewResolution = frameState.view2DState.resolution;
var i, ii, layerState;
for(i = 0, ii = layerStatesArray.length;i < ii;++i) {
layerState = layerStatesArray[i];
if(layerState.visible && layerState.sourceState == ol.source.State.READY && viewResolution < layerState.maxResolution && viewResolution >= layerState.minResolution) {
layerStatesToDraw.push(layerState)
}
}
var layerRenderer;
for(i = 0, ii = layerStatesToDraw.length;i < ii;++i) {
layerState = layerStatesToDraw[i];
layerRenderer = this.getLayerRenderer(layerState.layer);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer);
layerRenderer.prepareFrame(frameState, layerState)
}
var width = frameState.size[0] * frameState.pixelRatio;
var height = frameState.size[1] * frameState.pixelRatio;
if(this.canvas_.width != width || this.canvas_.height != height) {
this.canvas_.width = width;
this.canvas_.height = height
}
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
gl.enable(goog.webgl.BLEND);
gl.viewport(0, 0, this.canvas_.width, this.canvas_.height);
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);
for(i = 0, ii = layerStatesToDraw.length;i < ii;++i) {
layerState = layerStatesToDraw[i];
layerRenderer = this.getLayerRenderer(layerState.layer);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer);
layerRenderer.composeFrame(frameState, layerState, context)
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, true);
this.renderedVisible_ = true
}
this.calculateMatrices2D(frameState);
if(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
frameState.postRenderFunctions.push(goog.bind(this.expireCache_, this))
}
if(!this.tileTextureQueue_.isEmpty()) {
frameState.postRenderFunctions.push(this.loadNextTileTexture_);
frameState.animate = true
}
this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState);
this.scheduleRemoveUnusedLayerRenderers(frameState);
this.scheduleExpireIconCache(frameState)
};
goog.provide("ol.Map");
goog.provide("ol.MapProperty");
goog.require("goog.Uri.QueryData");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.async.AnimationDelay");
goog.require("goog.async.nextTick");
goog.require("goog.debug.Console");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.dom.ViewportSizeMonitor");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.events.KeyHandler");
goog.require("goog.events.KeyHandler.EventType");
goog.require("goog.events.MouseWheelHandler");
goog.require("goog.events.MouseWheelHandler.EventType");
goog.require("goog.log");
goog.require("goog.log.Level");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol.BrowserFeature");
goog.require("ol.Collection");
goog.require("ol.CollectionEventType");
goog.require("ol.IView");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserEventHandler");
goog.require("ol.MapEvent");
goog.require("ol.MapEventType");
goog.require("ol.Object");
goog.require("ol.ObjectEvent");
goog.require("ol.ObjectEventType");
goog.require("ol.Pixel");
goog.require("ol.PostRenderFunction");
goog.require("ol.PreRenderFunction");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.TileQueue");
goog.require("ol.View");
goog.require("ol.View2D");
goog.require("ol.ViewHint");
goog.require("ol.control");
goog.require("ol.extent");
goog.require("ol.interaction");
goog.require("ol.layer.Base");
goog.require("ol.layer.Group");
goog.require("ol.proj");
goog.require("ol.proj.common");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Map");
goog.require("ol.renderer.dom.Map");
goog.require("ol.renderer.webgl.Map");
goog.require("ol.structs.PriorityQueue");
goog.require("ol.vec.Mat4");
ol.OL3_URL = "http://ol3js.org/";
ol.OL3_LOGO_URL = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI" + "WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA" + "AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW" + "WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY" + "asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX" + "H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk" +
"bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW" + "2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP" + "VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT" + "acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar" + "ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi" + "zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn" + "BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF" +
"hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ" + "REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC" + "Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe" + "0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8" + "a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a" + "hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn" + "B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg" +
"q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC";
ol.RendererHint = {CANVAS:"canvas", DOM:"dom", WEBGL:"webgl"};
ol.DEFAULT_RENDERER_HINTS = [ol.RendererHint.CANVAS, ol.RendererHint.WEBGL, ol.RendererHint.DOM];
ol.MapProperty = {LAYERGROUP:"layergroup", SIZE:"size", TARGET:"target", VIEW:"view"};
ol.Map = function(options) {
goog.base(this);
var optionsInternal = ol.Map.createOptionsInternal(options);
this.pixelRatio_ = goog.isDef(options.pixelRatio) ? options.pixelRatio : ol.BrowserFeature.DEVICE_PIXEL_RATIO;
this.ol3Logo_ = optionsInternal.ol3Logo;
this.animationDelay_ = new goog.async.AnimationDelay(this.renderFrame_, undefined, this);
this.registerDisposable(this.animationDelay_);
this.coordinateToPixelMatrix_ = goog.vec.Mat4.createNumber();
this.pixelToCoordinateMatrix_ = goog.vec.Mat4.createNumber();
this.frameIndex_ = 0;
this.frameState_ = null;
this.viewPropertyListenerKey_ = null;
this.layerGroupPropertyListenerKeys_ = null;
this.viewport_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-viewport");
this.viewport_.style.position = "relative";
this.viewport_.style.overflow = "hidden";
this.viewport_.style.width = "100%";
this.viewport_.style.height = "100%";
this.viewport_.style.msTouchAction = "none";
if(ol.BrowserFeature.HAS_TOUCH) {
this.viewport_.className = "ol-touch"
}
this.overlayContainer_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-overlaycontainer");
goog.dom.appendChild(this.viewport_, this.overlayContainer_);
this.overlayContainerStopEvent_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-overlaycontainer-stopevent");
goog.events.listen(this.overlayContainerStopEvent_, [goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK, goog.events.EventType.MOUSEDOWN, goog.events.EventType.TOUCHSTART, goog.events.EventType.MSPOINTERDOWN, ol.MapBrowserEvent.EventType.POINTERDOWN, goog.events.MouseWheelHandler.EventType.MOUSEWHEEL], goog.events.Event.stopPropagation);
goog.dom.appendChild(this.viewport_, this.overlayContainerStopEvent_);
var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this);
goog.events.listen(mapBrowserEventHandler, goog.object.getValues(ol.MapBrowserEvent.EventType), this.handleMapBrowserEvent, false, this);
this.registerDisposable(mapBrowserEventHandler);
this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;
this.keyHandler_ = new goog.events.KeyHandler;
goog.events.listen(this.keyHandler_, goog.events.KeyHandler.EventType.KEY, this.handleBrowserEvent, false, this);
this.registerDisposable(this.keyHandler_);
var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_);
goog.events.listen(mouseWheelHandler, goog.events.MouseWheelHandler.EventType.MOUSEWHEEL, this.handleBrowserEvent, false, this);
this.registerDisposable(mouseWheelHandler);
this.controls_ = optionsInternal.controls;
this.deviceOptions_ = optionsInternal.deviceOptions;
this.interactions_ = optionsInternal.interactions;
this.overlays_ = optionsInternal.overlays;
this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this);
this.registerDisposable(this.renderer_);
this.viewportSizeMonitor_ = new goog.dom.ViewportSizeMonitor;
goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE, this.updateSize, false, this);
this.focus_ = null;
this.preRenderFunctions_ = [];
this.postRenderFunctions_ = [];
this.tileQueue_ = new ol.TileQueue(goog.bind(this.getTilePriority, this), goog.bind(this.handleTileChange_, this));
this.skippedFeatureUids_ = {};
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP), this.handleLayerGroupChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.VIEW), this.handleViewChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.SIZE), this.handleSizeChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.TARGET), this.handleTargetChanged_, false, this);
this.setValues(optionsInternal.values);
this.controls_.forEach(function(control) {
control.setMap(this)
}, this);
goog.events.listen(this.controls_, ol.CollectionEventType.ADD, function(event) {
event.element.setMap(this)
}, false, this);
goog.events.listen(this.controls_, ol.CollectionEventType.REMOVE, function(event) {
event.element.setMap(null)
}, false, this);
this.interactions_.forEach(function(interaction) {
interaction.setMap(this)
}, this);
goog.events.listen(this.interactions_, ol.CollectionEventType.ADD, function(event) {
event.element.setMap(this)
}, false, this);
goog.events.listen(this.interactions_, ol.CollectionEventType.REMOVE, function(event) {
event.element.setMap(null)
}, false, this);
this.overlays_.forEach(function(overlay) {
overlay.setMap(this)
}, this);
goog.events.listen(this.overlays_, ol.CollectionEventType.ADD, function(event) {
event.element.setMap(this)
}, false, this);
goog.events.listen(this.overlays_, ol.CollectionEventType.REMOVE, function(event) {
event.element.setMap(null)
}, false, this)
};
goog.inherits(ol.Map, ol.Object);
ol.Map.prototype.addControl = function(control) {
var controls = this.getControls();
goog.asserts.assert(goog.isDef(controls));
controls.push(control)
};
ol.Map.prototype.addInteraction = function(interaction) {
var interactions = this.getInteractions();
goog.asserts.assert(goog.isDef(interactions));
interactions.push(interaction)
};
ol.Map.prototype.addLayer = function(layer) {
var layers = this.getLayerGroup().getLayers();
goog.asserts.assert(goog.isDef(layers));
layers.push(layer)
};
ol.Map.prototype.addOverlay = function(overlay) {
var overlays = this.getOverlays();
goog.asserts.assert(goog.isDef(overlays));
overlays.push(overlay)
};
ol.Map.prototype.beforeRender = function(var_args) {
this.render();
Array.prototype.push.apply(this.preRenderFunctions_, arguments)
};
ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) {
return goog.array.remove(this.preRenderFunctions_, preRenderFunction)
};
ol.Map.prototype.disposeInternal = function() {
goog.dom.removeNode(this.viewport_);
goog.base(this, "disposeInternal")
};
ol.Map.prototype.forEachFeatureAtPixel = function(pixel, callback, opt_this, opt_layerFilter, opt_this2) {
if(goog.isNull(this.frameState_)) {
return
}
var coordinate = this.getCoordinateFromPixel(pixel);
var thisArg = goog.isDef(opt_this) ? opt_this : null;
var layerFilter = goog.isDef(opt_layerFilter) ? opt_layerFilter : goog.functions.TRUE;
var thisArg2 = goog.isDef(opt_this2) ? opt_this2 : null;
return this.renderer_.forEachFeatureAtPixel(coordinate, this.frameState_, callback, thisArg, layerFilter, thisArg2)
};
ol.Map.prototype.getEventCoordinate = function(event) {
return this.getCoordinateFromPixel(this.getEventPixel(event))
};
ol.Map.prototype.getEventPixel = function(event) {
if(goog.isDef(event.changedTouches)) {
var touch = event.changedTouches.item(0);
var viewportPosition = goog.style.getClientPosition(this.viewport_);
return[touch.clientX - viewportPosition.x, touch.clientY - viewportPosition.y]
}else {
var eventPosition = goog.style.getRelativePosition(event, this.viewport_);
return[eventPosition.x, eventPosition.y]
}
};
ol.Map.prototype.getTarget = function() {
return(this.get(ol.MapProperty.TARGET))
};
goog.exportProperty(ol.Map.prototype, "getTarget", ol.Map.prototype.getTarget);
ol.Map.prototype.getCoordinateFromPixel = function(pixel) {
var frameState = this.frameState_;
if(goog.isNull(frameState)) {
return null
}else {
var vec2 = pixel.slice();
return ol.vec.Mat4.multVec2(frameState.pixelToCoordinateMatrix, vec2, vec2)
}
};
ol.Map.prototype.getControls = function() {
return this.controls_
};
ol.Map.prototype.getOverlays = function() {
return this.overlays_
};
ol.Map.prototype.getInteractions = function() {
return this.interactions_
};
ol.Map.prototype.getLayerGroup = function() {
return(this.get(ol.MapProperty.LAYERGROUP))
};
goog.exportProperty(ol.Map.prototype, "getLayerGroup", ol.Map.prototype.getLayerGroup);
ol.Map.prototype.getLayers = function() {
var layerGroup = this.getLayerGroup();
if(goog.isDef(layerGroup)) {
return layerGroup.getLayers()
}else {
return undefined
}
};
ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
var frameState = this.frameState_;
if(goog.isNull(frameState)) {
return null
}else {
var vec2 = coordinate.slice(0, 2);
return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2)
}
};
ol.Map.prototype.getSize = function() {
return(this.get(ol.MapProperty.SIZE))
};
goog.exportProperty(ol.Map.prototype, "getSize", ol.Map.prototype.getSize);
ol.Map.prototype.getView = function() {
return(this.get(ol.MapProperty.VIEW))
};
goog.exportProperty(ol.Map.prototype, "getView", ol.Map.prototype.getView);
ol.Map.prototype.getViewport = function() {
return this.viewport_
};
ol.Map.prototype.getOverlayContainer = function() {
return this.overlayContainer_
};
ol.Map.prototype.getOverlayContainerStopEvent = function() {
return this.overlayContainerStopEvent_
};
ol.Map.prototype.getTilePriority = function(tile, tileSourceKey, tileCenter, tileResolution) {
var frameState = this.frameState_;
if(goog.isNull(frameState) || !(tileSourceKey in frameState.wantedTiles)) {
return ol.structs.PriorityQueue.DROP
}
var coordKey = tile.tileCoord.toString();
if(!frameState.wantedTiles[tileSourceKey][coordKey]) {
return ol.structs.PriorityQueue.DROP
}
var deltaX = tileCenter[0] - frameState.focus[0];
var deltaY = tileCenter[1] - frameState.focus[1];
return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution
};
ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) {
var type = opt_type || browserEvent.type;
var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent);
this.handleMapBrowserEvent(mapBrowserEvent)
};
ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(goog.isNull(this.frameState_)) {
return
}
this.focus_ = mapBrowserEvent.coordinate;
mapBrowserEvent.frameState = this.frameState_;
var interactions = this.getInteractions();
var interactionsArray = (interactions.getArray());
var i;
if(this.dispatchEvent(mapBrowserEvent) !== false) {
for(i = interactionsArray.length - 1;i >= 0;i--) {
var interaction = interactionsArray[i];
var cont = interaction.handleMapBrowserEvent(mapBrowserEvent);
if(!cont) {
break
}
}
}
};
ol.Map.prototype.handlePostRender = function() {
var frameState = this.frameState_;
var tileQueue = this.tileQueue_;
if(!tileQueue.isEmpty()) {
var maxTotalLoading = 16;
var maxNewLoads = maxTotalLoading;
var tileSourceCount = 0;
if(!goog.isNull(frameState)) {
var hints = frameState.viewHints;
var deviceOptions = this.deviceOptions_;
if(hints[ol.ViewHint.ANIMATING]) {
maxTotalLoading = deviceOptions.loadTilesWhileAnimating === false ? 0 : 8;
maxNewLoads = 2
}
if(hints[ol.ViewHint.INTERACTING]) {
maxTotalLoading = deviceOptions.loadTilesWhileInteracting === false ? 0 : 8;
maxNewLoads = 2
}
tileSourceCount = goog.object.getCount(frameState.wantedTiles)
}
maxTotalLoading *= tileSourceCount;
maxNewLoads *= tileSourceCount;
if(tileQueue.getTilesLoading() < maxTotalLoading) {
tileQueue.reprioritize();
tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads)
}
}
var postRenderFunctions = this.postRenderFunctions_;
var i, ii;
for(i = 0, ii = postRenderFunctions.length;i < ii;++i) {
postRenderFunctions[i](this, frameState)
}
postRenderFunctions.length = 0
};
ol.Map.prototype.handleSizeChanged_ = function() {
this.render()
};
ol.Map.prototype.handleTargetChanged_ = function() {
var target = this.getTarget();
var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null;
this.keyHandler_.detach();
if(goog.isNull(targetElement)) {
goog.dom.removeNode(this.viewport_)
}else {
goog.dom.appendChild(targetElement, this.viewport_);
var keyboardEventTarget = goog.isNull(this.keyboardEventTarget_) ? targetElement : this.keyboardEventTarget_;
this.keyHandler_.attach(keyboardEventTarget)
}
this.updateSize()
};
ol.Map.prototype.handleTileChange_ = function() {
this.render()
};
ol.Map.prototype.handleViewPropertyChanged_ = function() {
this.render()
};
ol.Map.prototype.handleViewChanged_ = function() {
if(!goog.isNull(this.viewPropertyListenerKey_)) {
goog.events.unlistenByKey(this.viewPropertyListenerKey_);
this.viewPropertyListenerKey_ = null
}
var view = this.getView();
if(goog.isDefAndNotNull(view)) {
this.viewPropertyListenerKey_ = goog.events.listen(view, ol.ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, false, this)
}
this.render()
};
ol.Map.prototype.handleLayerGroupMemberChanged_ = function(event) {
goog.asserts.assertInstanceof(event, goog.events.Event);
this.render()
};
ol.Map.prototype.handleLayerGroupPropertyChanged_ = function(event) {
goog.asserts.assertInstanceof(event, ol.ObjectEvent);
this.render()
};
ol.Map.prototype.handleLayerGroupChanged_ = function() {
if(!goog.isNull(this.layerGroupPropertyListenerKeys_)) {
var length = this.layerGroupPropertyListenerKeys_.length;
for(var i = 0;i < length;++i) {
goog.events.unlistenByKey(this.layerGroupPropertyListenerKeys_[i])
}
this.layerGroupPropertyListenerKeys_ = null
}
var layerGroup = this.getLayerGroup();
if(goog.isDefAndNotNull(layerGroup)) {
this.layerGroupPropertyListenerKeys_ = [goog.events.listen(layerGroup, ol.ObjectEventType.PROPERTYCHANGE, this.handleLayerGroupPropertyChanged_, false, this), goog.events.listen(layerGroup, goog.events.EventType.CHANGE, this.handleLayerGroupMemberChanged_, false, this)]
}
this.render()
};
ol.Map.prototype.isDef = function() {
if(!goog.dom.contains(document, this.viewport_)) {
return false
}
if(!goog.style.isElementShown(this.viewport_)) {
return false
}
var size = this.getSize();
if(!goog.isDefAndNotNull(size) || size[0] <= 0 || size[1] <= 0) {
return false
}
var view = this.getView();
if(!goog.isDef(view) || !view.isDef()) {
return false
}
return true
};
ol.Map.prototype.isRendered = function() {
return!goog.isNull(this.frameState_)
};
ol.Map.prototype.renderSync = function() {
this.animationDelay_.fire()
};
ol.Map.prototype.render = function() {
if(!this.animationDelay_.isActive()) {
this.animationDelay_.start()
}
};
ol.Map.prototype.removeControl = function(control) {
var controls = this.getControls();
goog.asserts.assert(goog.isDef(controls));
if(goog.isDef(controls.remove(control))) {
return control
}
return undefined
};
ol.Map.prototype.removeInteraction = function(interaction) {
var removed;
var interactions = this.getInteractions();
goog.asserts.assert(goog.isDef(interactions));
if(goog.isDef(interactions.remove(interaction))) {
removed = interaction
}
return removed
};
ol.Map.prototype.removeLayer = function(layer) {
var layers = this.getLayerGroup().getLayers();
goog.asserts.assert(goog.isDef(layers));
return(layers.remove(layer))
};
ol.Map.prototype.removeOverlay = function(overlay) {
var overlays = this.getOverlays();
goog.asserts.assert(goog.isDef(overlays));
if(goog.isDef(overlays.remove(overlay))) {
return overlay
}
return undefined
};
ol.Map.prototype.renderFrame_ = function(time) {
var i, ii, view2DState;
function hasArea(size) {
return size[0] > 0 && size[1] > 0
}
var size = this.getSize();
var view = this.getView();
var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined;
var frameState = null;
if(goog.isDef(size) && hasArea(size) && goog.isDef(view2D) && view2D.isDef()) {
var viewHints = view.getHints();
var layerStatesArray = this.getLayerGroup().getLayerStatesArray();
var layerStates = {};
for(i = 0, ii = layerStatesArray.length;i < ii;++i) {
layerStates[goog.getUid(layerStatesArray[i].layer)] = layerStatesArray[i]
}
view2DState = view2D.getView2DState();
frameState = ({animate:false, attributions:{}, coordinateToPixelMatrix:this.coordinateToPixelMatrix_, extent:null, focus:goog.isNull(this.focus_) ? view2DState.center : this.focus_, index:this.frameIndex_++, layerStates:layerStates, layerStatesArray:layerStatesArray, logos:{}, pixelRatio:this.pixelRatio_, pixelToCoordinateMatrix:this.pixelToCoordinateMatrix_, postRenderFunctions:[], size:size, skippedFeatureUids_:this.skippedFeatureUids_, tileQueue:this.tileQueue_, time:time, usedTiles:{}, view2DState:view2DState,
viewHints:viewHints, wantedTiles:{}});
if(this.ol3Logo_) {
frameState.logos[ol.OL3_LOGO_URL] = ol.OL3_URL
}
}
var preRenderFunctions = this.preRenderFunctions_;
var n = 0, preRenderFunction;
for(i = 0, ii = preRenderFunctions.length;i < ii;++i) {
preRenderFunction = preRenderFunctions[i];
if(preRenderFunction(this, frameState)) {
preRenderFunctions[n++] = preRenderFunction
}
}
preRenderFunctions.length = n;
if(!goog.isNull(frameState)) {
frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, view2DState.resolution, view2DState.rotation, frameState.size)
}
this.frameState_ = frameState;
this.renderer_.renderFrame(frameState);
if(!goog.isNull(frameState)) {
if(frameState.animate) {
this.render()
}
Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);
var idle = this.preRenderFunctions_.length === 0 && !frameState.animate && !frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING];
if(idle) {
this.dispatchEvent(new ol.MapEvent(ol.MapEventType.MOVEEND, this))
}
}
this.dispatchEvent(new ol.MapEvent(ol.MapEventType.POSTRENDER, this, frameState));
goog.async.nextTick(this.handlePostRender, this)
};
ol.Map.prototype.setLayerGroup = function(layerGroup) {
this.set(ol.MapProperty.LAYERGROUP, layerGroup)
};
goog.exportProperty(ol.Map.prototype, "setLayerGroup", ol.Map.prototype.setLayerGroup);
ol.Map.prototype.setSize = function(size) {
this.set(ol.MapProperty.SIZE, size)
};
goog.exportProperty(ol.Map.prototype, "setSize", ol.Map.prototype.setSize);
ol.Map.prototype.setTarget = function(target) {
this.set(ol.MapProperty.TARGET, target)
};
goog.exportProperty(ol.Map.prototype, "setTarget", ol.Map.prototype.setTarget);
ol.Map.prototype.setView = function(view) {
this.set(ol.MapProperty.VIEW, view)
};
goog.exportProperty(ol.Map.prototype, "setView", ol.Map.prototype.setView);
ol.Map.prototype.skipFeature = function(feature) {
var featureUid = goog.getUid(feature).toString();
this.skippedFeatureUids_[featureUid] = true;
this.render()
};
ol.Map.prototype.updateSize = function() {
var target = this.getTarget();
var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null;
if(goog.isNull(targetElement)) {
this.setSize(undefined)
}else {
var size = goog.style.getContentBoxSize(targetElement);
this.setSize([size.width, size.height])
}
};
ol.Map.prototype.unskipFeature = function(feature) {
var featureUid = goog.getUid(feature).toString();
delete this.skippedFeatureUids_[featureUid];
this.render()
};
ol.MapOptionsInternal;
ol.Map.createOptionsInternal = function(options) {
var keyboardEventTarget = null;
if(goog.isDef(options.keyboardEventTarget)) {
keyboardEventTarget = goog.isString(options.keyboardEventTarget) ? document.getElementById(options.keyboardEventTarget) : options.keyboardEventTarget
}
var values = {};
var ol3Logo = goog.isDef(options.ol3Logo) ? options.ol3Logo : true;
var layerGroup = options.layers instanceof ol.layer.Group ? options.layers : new ol.layer.Group({layers:options.layers});
values[ol.MapProperty.LAYERGROUP] = layerGroup;
values[ol.MapProperty.TARGET] = options.target;
values[ol.MapProperty.VIEW] = goog.isDef(options.view) ? options.view : new ol.View2D;
var rendererConstructor = ol.renderer.Map;
var rendererHints;
if(goog.isDef(options.renderer)) {
if(goog.isArray(options.renderer)) {
rendererHints = options.renderer
}else {
if(goog.isString(options.renderer)) {
rendererHints = [options.renderer]
}else {
goog.asserts.fail("Incorrect format for renderer option")
}
}
}else {
rendererHints = ol.DEFAULT_RENDERER_HINTS
}
var i, ii;
for(i = 0, ii = rendererHints.length;i < ii;++i) {
var rendererHint = rendererHints[i];
if(ol.ENABLE_CANVAS && rendererHint == ol.RendererHint.CANVAS) {
if(ol.BrowserFeature.HAS_CANVAS) {
rendererConstructor = ol.renderer.canvas.Map;
break
}
}else {
if(ol.ENABLE_DOM && rendererHint == ol.RendererHint.DOM) {
if(ol.BrowserFeature.HAS_DOM) {
rendererConstructor = ol.renderer.dom.Map;
break
}
}else {
if(ol.ENABLE_WEBGL && rendererHint == ol.RendererHint.WEBGL) {
if(ol.BrowserFeature.HAS_WEBGL) {
rendererConstructor = ol.renderer.webgl.Map;
break
}
}
}
}
}
var controls;
if(goog.isDef(options.controls)) {
if(goog.isArray(options.controls)) {
controls = new ol.Collection(goog.array.clone(options.controls))
}else {
goog.asserts.assertInstanceof(options.controls, ol.Collection);
controls = options.controls
}
}else {
controls = ol.control.defaults()
}
var deviceOptions = goog.isDef(options.deviceOptions) ? options.deviceOptions : ({});
var interactions;
if(goog.isDef(options.interactions)) {
if(goog.isArray(options.interactions)) {
interactions = new ol.Collection(goog.array.clone(options.interactions))
}else {
goog.asserts.assertInstanceof(options.interactions, ol.Collection);
interactions = options.interactions
}
}else {
interactions = ol.interaction.defaults()
}
var overlays;
if(goog.isDef(options.overlays)) {
if(goog.isArray(options.overlays)) {
overlays = new ol.Collection(goog.array.clone(options.overlays))
}else {
goog.asserts.assertInstanceof(options.overlays, ol.Collection);
overlays = options.overlays
}
}else {
overlays = new ol.Collection
}
return{controls:controls, deviceOptions:deviceOptions, interactions:interactions, keyboardEventTarget:keyboardEventTarget, ol3Logo:ol3Logo, overlays:overlays, rendererConstructor:rendererConstructor, values:values}
};
ol.proj.common.add();
if(goog.DEBUG) {
(function() {
goog.debug.Console.autoInstall();
var logger = goog.log.getLogger("ol");
logger.setLevel(goog.log.Level.FINEST)
})()
}
;goog.provide("ol.DrawEvent");
goog.provide("ol.interaction.Draw");
goog.require("goog.asserts");
goog.require("goog.events.Event");
goog.require("ol.Collection");
goog.require("ol.Coordinate");
goog.require("ol.Feature");
goog.require("ol.FeatureOverlay");
goog.require("ol.Map");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.feature");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.interaction.Pointer");
goog.require("ol.source.Vector");
ol.DrawEventType = {DRAWSTART:"drawstart", DRAWEND:"drawend"};
ol.DrawEvent = function(type, feature) {
goog.base(this, type);
this.feature = feature
};
goog.inherits(ol.DrawEvent, goog.events.Event);
ol.interaction.Draw = function(options) {
goog.base(this);
this.downPx_ = null;
this.source_ = goog.isDef(options.source) ? options.source : null;
this.features_ = goog.isDef(options.features) ? options.features : null;
this.snapTolerance_ = goog.isDef(options.snapTolerance) ? options.snapTolerance : 12;
this.minPointsPerRing_ = goog.isDef(options.minPointsPerRing) ? options.minPointsPerRing : 3;
this.type_ = options.type;
this.mode_ = ol.interaction.Draw.getMode_(this.type_);
this.finishCoordinate_ = null;
this.sketchFeature_ = null;
this.sketchPoint_ = null;
this.sketchLine_ = null;
this.sketchRawPolygon_ = null;
this.squaredClickTolerance_ = 4;
this.overlay_ = new ol.FeatureOverlay({style:goog.isDef(options.style) ? options.style : ol.interaction.Draw.getDefaultStyleFunction()})
};
goog.inherits(ol.interaction.Draw, ol.interaction.Pointer);
ol.interaction.Draw.getDefaultStyleFunction = function() {
var styles = ol.feature.createDefaultEditingStyles();
return function(feature, resolution) {
return styles[feature.getGeometry().getType()]
}
};
ol.interaction.Draw.prototype.setMap = function(map) {
if(goog.isNull(map)) {
this.abortDrawing_()
}
this.overlay_.setMap(map);
goog.base(this, "setMap", map)
};
ol.interaction.Draw.prototype.handleMapBrowserEvent = function(event) {
var map = event.map;
if(!map.isDef()) {
return true
}
var pass = true;
if(event.type === ol.MapBrowserEvent.EventType.POINTERMOVE) {
pass = this.handlePointerMove_(event)
}else {
if(event.type === ol.MapBrowserEvent.EventType.DBLCLICK) {
pass = false
}
}
return goog.base(this, "handleMapBrowserEvent", event) && pass
};
ol.interaction.Draw.prototype.handlePointerDown = function(event) {
this.downPx_ = event.pixel;
return true
};
ol.interaction.Draw.prototype.handlePointerUp = function(event) {
var downPx = this.downPx_;
var clickPx = event.pixel;
var dx = downPx[0] - clickPx[0];
var dy = downPx[1] - clickPx[1];
var squaredDistance = dx * dx + dy * dy;
var pass = true;
if(squaredDistance <= this.squaredClickTolerance_) {
this.handlePointerMove_(event);
if(goog.isNull(this.finishCoordinate_)) {
this.startDrawing_(event)
}else {
if(this.mode_ === ol.interaction.DrawMode.POINT || this.atFinish_(event)) {
this.finishDrawing_(event)
}else {
this.addToDrawing_(event)
}
}
pass = false
}
return pass
};
ol.interaction.Draw.prototype.handlePointerMove_ = function(event) {
if(this.mode_ === ol.interaction.DrawMode.POINT && goog.isNull(this.finishCoordinate_)) {
this.startDrawing_(event)
}else {
if(!goog.isNull(this.finishCoordinate_)) {
this.modifyDrawing_(event)
}
}
return true
};
ol.interaction.Draw.prototype.atFinish_ = function(event) {
var at = false;
if(!goog.isNull(this.sketchFeature_)) {
var geometry = this.sketchFeature_.getGeometry();
var potentiallyDone = false;
var potentiallyFinishCoordinates = [this.finishCoordinate_];
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
potentiallyDone = geometry.getCoordinates().length > 2
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
potentiallyDone = geometry.getCoordinates()[0].length > this.minPointsPerRing_;
potentiallyFinishCoordinates = [this.sketchRawPolygon_[0][0], this.sketchRawPolygon_[0][this.sketchRawPolygon_[0].length - 2]]
}
}
if(potentiallyDone) {
var map = event.map;
for(var i = 0, ii = potentiallyFinishCoordinates.length;i < ii;i++) {
var finishCoordinate = potentiallyFinishCoordinates[i];
var finishPixel = map.getPixelFromCoordinate(finishCoordinate);
var pixel = event.pixel;
var dx = pixel[0] - finishPixel[0];
var dy = pixel[1] - finishPixel[1];
at = Math.sqrt(dx * dx + dy * dy) <= this.snapTolerance_;
if(at) {
this.finishCoordinate_ = finishCoordinate;
break
}
}
}
}
return at
};
ol.interaction.Draw.prototype.startDrawing_ = function(event) {
var start = event.coordinate;
this.finishCoordinate_ = start;
var geometry;
if(this.mode_ === ol.interaction.DrawMode.POINT) {
geometry = new ol.geom.Point(start.slice())
}else {
this.sketchPoint_ = new ol.Feature(new ol.geom.Point(start.slice()));
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
geometry = new ol.geom.LineString([start.slice(), start.slice()])
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
this.sketchLine_ = new ol.Feature(new ol.geom.LineString([start.slice(), start.slice()]));
this.sketchRawPolygon_ = [[start.slice(), start.slice()]];
geometry = new ol.geom.Polygon(this.sketchRawPolygon_)
}
}
}
goog.asserts.assert(goog.isDef(geometry));
this.sketchFeature_ = new ol.Feature(geometry);
this.updateSketchFeatures_();
this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWSTART, this.sketchFeature_))
};
ol.interaction.Draw.prototype.modifyDrawing_ = function(event) {
var coordinate = event.coordinate;
var geometry = this.sketchFeature_.getGeometry();
var coordinates, last;
if(this.mode_ === ol.interaction.DrawMode.POINT) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
last = geometry.getCoordinates();
last[0] = coordinate[0];
last[1] = coordinate[1];
geometry.setCoordinates(last)
}else {
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
coordinates = geometry.getCoordinates()
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
coordinates = this.sketchRawPolygon_[0]
}
}
if(this.atFinish_(event)) {
coordinate = this.finishCoordinate_.slice()
}
var sketchPointGeom = this.sketchPoint_.getGeometry();
goog.asserts.assertInstanceof(sketchPointGeom, ol.geom.Point);
sketchPointGeom.setCoordinates(coordinate);
last = coordinates[coordinates.length - 1];
last[0] = coordinate[0];
last[1] = coordinate[1];
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
geometry.setCoordinates(coordinates)
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
var sketchLineGeom = this.sketchLine_.getGeometry();
goog.asserts.assertInstanceof(sketchLineGeom, ol.geom.LineString);
sketchLineGeom.setCoordinates(coordinates);
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
geometry.setCoordinates(this.sketchRawPolygon_)
}
}
}
this.updateSketchFeatures_()
};
ol.interaction.Draw.prototype.addToDrawing_ = function(event) {
var coordinate = event.coordinate;
var geometry = this.sketchFeature_.getGeometry();
var coordinates, last;
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
this.finishCoordinate_ = coordinate.slice();
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
coordinates = geometry.getCoordinates();
coordinates.push(coordinate.slice());
geometry.setCoordinates(coordinates)
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
this.sketchRawPolygon_[0].push(coordinate.slice());
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
geometry.setCoordinates(this.sketchRawPolygon_)
}
}
this.updateSketchFeatures_()
};
ol.interaction.Draw.prototype.finishDrawing_ = function(event) {
var sketchFeature = this.abortDrawing_();
goog.asserts.assert(!goog.isNull(sketchFeature));
var coordinates;
var geometry = sketchFeature.getGeometry();
if(this.mode_ === ol.interaction.DrawMode.POINT) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
coordinates = geometry.getCoordinates()
}else {
if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
coordinates = geometry.getCoordinates();
coordinates.pop();
geometry.setCoordinates(coordinates)
}else {
if(this.mode_ === ol.interaction.DrawMode.POLYGON) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
this.sketchRawPolygon_[0].pop();
this.sketchRawPolygon_[0].push(this.sketchRawPolygon_[0][0]);
geometry.setCoordinates(this.sketchRawPolygon_);
coordinates = geometry.getCoordinates()
}
}
}
if(this.type_ === ol.geom.GeometryType.MULTI_POINT) {
sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates]))
}else {
if(this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) {
sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates]))
}else {
if(this.type_ === ol.geom.GeometryType.MULTI_POLYGON) {
sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates]))
}
}
}
if(!goog.isNull(this.features_)) {
this.features_.push(sketchFeature)
}
if(!goog.isNull(this.source_)) {
this.source_.addFeature(sketchFeature)
}
this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWEND, sketchFeature))
};
ol.interaction.Draw.prototype.abortDrawing_ = function() {
this.finishCoordinate_ = null;
var sketchFeature = this.sketchFeature_;
if(!goog.isNull(sketchFeature)) {
this.sketchFeature_ = null;
this.sketchPoint_ = null;
this.sketchLine_ = null;
this.overlay_.getFeatures().clear()
}
return sketchFeature
};
ol.interaction.Draw.prototype.updateSketchFeatures_ = function() {
var sketchFeatures = [this.sketchFeature_];
if(!goog.isNull(this.sketchLine_)) {
sketchFeatures.push(this.sketchLine_)
}
if(!goog.isNull(this.sketchPoint_)) {
sketchFeatures.push(this.sketchPoint_)
}
this.overlay_.setFeatures(new ol.Collection(sketchFeatures))
};
ol.interaction.Draw.getMode_ = function(type) {
var mode;
if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTI_POINT) {
mode = ol.interaction.DrawMode.POINT
}else {
if(type === ol.geom.GeometryType.LINE_STRING || type === ol.geom.GeometryType.MULTI_LINE_STRING) {
mode = ol.interaction.DrawMode.LINE_STRING
}else {
if(type === ol.geom.GeometryType.POLYGON || type === ol.geom.GeometryType.MULTI_POLYGON) {
mode = ol.interaction.DrawMode.POLYGON
}
}
}
goog.asserts.assert(goog.isDef(mode));
return mode
};
ol.interaction.DrawMode = {POINT:"Point", LINE_STRING:"LineString", POLYGON:"Polygon"};
goog.provide("ol.sphere.WGS84");
goog.require("ol.Sphere");
ol.sphere.WGS84 = new ol.Sphere(6378137);
goog.provide("ol.Geolocation");
goog.provide("ol.GeolocationProperty");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.math");
goog.require("ol.BrowserFeature");
goog.require("ol.Coordinate");
goog.require("ol.Object");
goog.require("ol.geom.Geometry");
goog.require("ol.proj");
goog.require("ol.sphere.WGS84");
ol.GeolocationProperty = {ACCURACY:"accuracy", ACCURACY_GEOMETRY:"accuracyGeometry", ALTITUDE:"altitude", ALTITUDE_ACCURACY:"altitudeAccuracy", HEADING:"heading", POSITION:"position", PROJECTION:"projection", SPEED:"speed", TRACKING:"tracking", TRACKING_OPTIONS:"trackingOptions"};
ol.Geolocation = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.position_ = null;
this.transform_ = ol.proj.identityTransform;
this.watchId_ = undefined;
goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.PROJECTION), this.handleProjectionChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING), this.handleTrackingChanged_, false, this);
if(goog.isDef(options.projection)) {
this.setProjection(ol.proj.get(options.projection))
}
if(goog.isDef(options.trackingOptions)) {
this.setTrackingOptions(options.trackingOptions)
}
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false)
};
goog.inherits(ol.Geolocation, ol.Object);
ol.Geolocation.prototype.disposeInternal = function() {
this.setTracking(false);
goog.base(this, "disposeInternal")
};
ol.Geolocation.prototype.handleProjectionChanged_ = function() {
var projection = this.getProjection();
if(goog.isDefAndNotNull(projection)) {
this.transform_ = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), projection);
if(!goog.isNull(this.position_)) {
this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_))
}
}
};
ol.Geolocation.prototype.handleTrackingChanged_ = function() {
if(ol.BrowserFeature.HAS_GEOLOCATION) {
var tracking = this.getTracking();
if(tracking && !goog.isDef(this.watchId_)) {
this.watchId_ = goog.global.navigator.geolocation.watchPosition(goog.bind(this.positionChange_, this), goog.bind(this.positionError_, this), this.getTrackingOptions())
}else {
if(!tracking && goog.isDef(this.watchId_)) {
goog.global.navigator.geolocation.clearWatch(this.watchId_);
this.watchId_ = undefined
}
}
}
};
ol.Geolocation.prototype.positionChange_ = function(position) {
var coords = position.coords;
this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy);
this.set(ol.GeolocationProperty.ALTITUDE, goog.isNull(coords.altitude) ? undefined : coords.altitude);
this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY, goog.isNull(coords.altitudeAccuracy) ? undefined : coords.altitudeAccuracy);
this.set(ol.GeolocationProperty.HEADING, goog.isNull(coords.heading) ? undefined : goog.math.toRadians(coords.heading));
if(goog.isNull(this.position_)) {
this.position_ = [coords.longitude, coords.latitude]
}else {
this.position_[0] = coords.longitude;
this.position_[1] = coords.latitude
}
var projectedPosition = this.transform_(this.position_);
this.set(ol.GeolocationProperty.POSITION, projectedPosition);
this.set(ol.GeolocationProperty.SPEED, goog.isNull(coords.speed) ? undefined : coords.speed);
var geometry = ol.sphere.WGS84.circle(this.position_, coords.accuracy);
geometry.transform(this.transform_);
this.set(ol.GeolocationProperty.ACCURACY_GEOMETRY, geometry);
this.dispatchChangeEvent()
};
ol.Geolocation.prototype.positionError_ = function(error) {
error.type = goog.events.EventType.ERROR;
this.dispatchEvent(error)
};
ol.Geolocation.prototype.getAccuracy = function() {
return(this.get(ol.GeolocationProperty.ACCURACY))
};
goog.exportProperty(ol.Geolocation.prototype, "getAccuracy", ol.Geolocation.prototype.getAccuracy);
ol.Geolocation.prototype.getAccuracyGeometry = function() {
return(this.get(ol.GeolocationProperty.ACCURACY_GEOMETRY) || null)
};
goog.exportProperty(ol.Geolocation.prototype, "getAccuracyGeometry", ol.Geolocation.prototype.getAccuracyGeometry);
ol.Geolocation.prototype.getAltitude = function() {
return(this.get(ol.GeolocationProperty.ALTITUDE))
};
goog.exportProperty(ol.Geolocation.prototype, "getAltitude", ol.Geolocation.prototype.getAltitude);
ol.Geolocation.prototype.getAltitudeAccuracy = function() {
return(this.get(ol.GeolocationProperty.ALTITUDE_ACCURACY))
};
goog.exportProperty(ol.Geolocation.prototype, "getAltitudeAccuracy", ol.Geolocation.prototype.getAltitudeAccuracy);
ol.Geolocation.prototype.getHeading = function() {
return(this.get(ol.GeolocationProperty.HEADING))
};
goog.exportProperty(ol.Geolocation.prototype, "getHeading", ol.Geolocation.prototype.getHeading);
ol.Geolocation.prototype.getPosition = function() {
return(this.get(ol.GeolocationProperty.POSITION))
};
goog.exportProperty(ol.Geolocation.prototype, "getPosition", ol.Geolocation.prototype.getPosition);
ol.Geolocation.prototype.getProjection = function() {
return(this.get(ol.GeolocationProperty.PROJECTION))
};
goog.exportProperty(ol.Geolocation.prototype, "getProjection", ol.Geolocation.prototype.getProjection);
ol.Geolocation.prototype.getSpeed = function() {
return(this.get(ol.GeolocationProperty.SPEED))
};
goog.exportProperty(ol.Geolocation.prototype, "getSpeed", ol.Geolocation.prototype.getSpeed);
ol.Geolocation.prototype.getTracking = function() {
return(this.get(ol.GeolocationProperty.TRACKING))
};
goog.exportProperty(ol.Geolocation.prototype, "getTracking", ol.Geolocation.prototype.getTracking);
ol.Geolocation.prototype.getTrackingOptions = function() {
return(this.get(ol.GeolocationProperty.TRACKING_OPTIONS))
};
goog.exportProperty(ol.Geolocation.prototype, "getTrackingOptions", ol.Geolocation.prototype.getTrackingOptions);
ol.Geolocation.prototype.setProjection = function(projection) {
this.set(ol.GeolocationProperty.PROJECTION, projection)
};
goog.exportProperty(ol.Geolocation.prototype, "setProjection", ol.Geolocation.prototype.setProjection);
ol.Geolocation.prototype.setTracking = function(tracking) {
this.set(ol.GeolocationProperty.TRACKING, tracking)
};
goog.exportProperty(ol.Geolocation.prototype, "setTracking", ol.Geolocation.prototype.setTracking);
ol.Geolocation.prototype.setTrackingOptions = function(options) {
this.set(ol.GeolocationProperty.TRACKING_OPTIONS, options)
};
goog.exportProperty(ol.Geolocation.prototype, "setTrackingOptions", ol.Geolocation.prototype.setTrackingOptions);
goog.provide("ol.TileLoadFunctionType");
ol.TileLoadFunctionType;
goog.provide("ol.ImageTile");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileLoadFunctionType");
goog.require("ol.TileState");
ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction) {
goog.base(this, tileCoord, state);
this.src_ = src;
this.image_ = new Image;
if(!goog.isNull(crossOrigin)) {
this.image_.crossOrigin = crossOrigin
}
this.imageByContext_ = {};
this.imageListenerKeys_ = null;
this.tileLoadFunction_ = tileLoadFunction
};
goog.inherits(ol.ImageTile, ol.Tile);
ol.ImageTile.prototype.getImage = function(opt_context) {
if(goog.isDef(opt_context)) {
var image;
var key = goog.getUid(opt_context);
if(key in this.imageByContext_) {
return this.imageByContext_[key]
}else {
if(goog.object.isEmpty(this.imageByContext_)) {
image = this.image_
}else {
image = (this.image_.cloneNode(false))
}
}
this.imageByContext_[key] = image;
return image
}else {
return this.image_
}
};
ol.ImageTile.prototype.getKey = function() {
return this.src_
};
ol.ImageTile.prototype.handleImageError_ = function() {
this.state = ol.TileState.ERROR;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.ImageTile.prototype.handleImageLoad_ = function() {
if(!goog.isDef(this.image_.naturalWidth)) {
this.image_.naturalWidth = this.image_.width;
this.image_.naturalHeight = this.image_.height
}
if(this.image_.naturalWidth && this.image_.naturalHeight) {
this.state = ol.TileState.LOADED
}else {
this.state = ol.TileState.EMPTY
}
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.ImageTile.prototype.load = function() {
if(this.state == ol.TileState.IDLE) {
this.state = ol.TileState.LOADING;
goog.asserts.assert(goog.isNull(this.imageListenerKeys_));
this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)];
this.tileLoadFunction_(this, this.src_)
}
};
ol.ImageTile.prototype.unlistenImage_ = function() {
goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));
goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey);
this.imageListenerKeys_ = null
};
goog.provide("ol.Overlay");
goog.provide("ol.OverlayPositioning");
goog.provide("ol.OverlayProperty");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.Map");
goog.require("ol.MapEventType");
goog.require("ol.Object");
ol.OverlayProperty = {ELEMENT:"element", MAP:"map", POSITION:"position", POSITIONING:"positioning"};
ol.OverlayPositioning = {BOTTOM_LEFT:"bottom-left", BOTTOM_CENTER:"bottom-center", BOTTOM_RIGHT:"bottom-right", CENTER_LEFT:"center-left", CENTER_CENTER:"center-center", CENTER_RIGHT:"center-right", TOP_LEFT:"top-left", TOP_CENTER:"top-center", TOP_RIGHT:"top-right"};
ol.Overlay = function(options) {
goog.base(this);
this.insertFirst_ = goog.isDef(options.insertFirst) ? options.insertFirst : true;
this.stopEvent_ = goog.isDef(options.stopEvent) ? options.stopEvent : true;
this.offsetX_ = goog.isDef(options.offsetX) ? options.offsetX : 0;
this.offsetY_ = goog.isDef(options.offsetY) ? options.offsetY : 0;
this.element_ = goog.dom.createElement(goog.dom.TagName.DIV);
this.element_.style.position = "absolute";
this.rendered_ = {bottom_:"", left_:"", right_:"", top_:"", visible:true};
this.mapPostrenderListenerKey_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.ELEMENT), this.handleElementChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.MAP), this.handleMapChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITION), this.handlePositionChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITIONING), this.handlePositioningChanged, false, this);
if(goog.isDef(options.element)) {
this.setElement(options.element)
}
if(goog.isDef(options.position)) {
this.setPosition(options.position)
}
if(goog.isDef(options.positioning)) {
this.setPositioning((options.positioning))
}
};
goog.inherits(ol.Overlay, ol.Object);
ol.Overlay.prototype.getElement = function() {
return(this.get(ol.OverlayProperty.ELEMENT))
};
goog.exportProperty(ol.Overlay.prototype, "getElement", ol.Overlay.prototype.getElement);
ol.Overlay.prototype.getMap = function() {
return(this.get(ol.OverlayProperty.MAP))
};
goog.exportProperty(ol.Overlay.prototype, "getMap", ol.Overlay.prototype.getMap);
ol.Overlay.prototype.getPosition = function() {
return(this.get(ol.OverlayProperty.POSITION))
};
goog.exportProperty(ol.Overlay.prototype, "getPosition", ol.Overlay.prototype.getPosition);
ol.Overlay.prototype.getPositioning = function() {
return(this.get(ol.OverlayProperty.POSITIONING))
};
goog.exportProperty(ol.Overlay.prototype, "getPositioning", ol.Overlay.prototype.getPositioning);
ol.Overlay.prototype.handleElementChanged = function() {
goog.dom.removeChildren(this.element_);
var element = this.getElement();
if(goog.isDefAndNotNull(element)) {
goog.dom.append((this.element_), element)
}
};
ol.Overlay.prototype.handleMapChanged = function() {
if(!goog.isNull(this.mapPostrenderListenerKey_)) {
goog.dom.removeNode(this.element_);
goog.events.unlistenByKey(this.mapPostrenderListenerKey_);
this.mapPostrenderListenerKey_ = null
}
var map = this.getMap();
if(goog.isDefAndNotNull(map)) {
this.mapPostrenderListenerKey_ = goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this);
this.updatePixelPosition_();
var container = this.stopEvent_ ? map.getOverlayContainerStopEvent() : map.getOverlayContainer();
if(this.insertFirst_) {
goog.dom.insertChildAt((container), this.element_, 0)
}else {
goog.dom.append((container), this.element_)
}
}
};
ol.Overlay.prototype.handleMapPostrender = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.handlePositionChanged = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.handlePositioningChanged = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.setElement = function(element) {
this.set(ol.OverlayProperty.ELEMENT, element)
};
goog.exportProperty(ol.Overlay.prototype, "setElement", ol.Overlay.prototype.setElement);
ol.Overlay.prototype.setMap = function(map) {
this.set(ol.OverlayProperty.MAP, map)
};
goog.exportProperty(ol.Overlay.prototype, "setMap", ol.Overlay.prototype.setMap);
ol.Overlay.prototype.setPosition = function(position) {
this.set(ol.OverlayProperty.POSITION, position)
};
goog.exportProperty(ol.Overlay.prototype, "setPosition", ol.Overlay.prototype.setPosition);
ol.Overlay.prototype.setPositioning = function(positioning) {
this.set(ol.OverlayProperty.POSITIONING, positioning)
};
goog.exportProperty(ol.Overlay.prototype, "setPositioning", ol.Overlay.prototype.setPositioning);
ol.Overlay.prototype.updatePixelPosition_ = function() {
var map = this.getMap();
var position = this.getPosition();
if(!goog.isDef(map) || !map.isRendered() || !goog.isDef(position)) {
if(this.rendered_.visible) {
goog.style.setElementShown(this.element_, false);
this.rendered_.visible = false
}
return
}
var pixel = map.getPixelFromCoordinate(position);
goog.asserts.assert(!goog.isNull(pixel));
var mapSize = map.getSize();
goog.asserts.assert(goog.isDef(mapSize));
var style = this.element_.style;
var positioning = this.getPositioning();
if(positioning == ol.OverlayPositioning.BOTTOM_RIGHT || positioning == ol.OverlayPositioning.CENTER_RIGHT || positioning == ol.OverlayPositioning.TOP_RIGHT) {
if(this.rendered_.left_ !== "") {
this.rendered_.left_ = style.left = ""
}
var right = Math.round(mapSize[0] - pixel[0]) + "px";
if(this.rendered_.right_ != right) {
this.rendered_.right_ = style.right = right
}
}else {
if(this.rendered_.right_ !== "") {
this.rendered_.right_ = style.right = ""
}
var offsetX = -this.offsetX_;
if(positioning == ol.OverlayPositioning.BOTTOM_CENTER || positioning == ol.OverlayPositioning.CENTER_CENTER || positioning == ol.OverlayPositioning.TOP_CENTER) {
offsetX += goog.style.getSize(this.element_).width / 2
}
var left = Math.round(pixel[0] - offsetX) + "px";
if(this.rendered_.left_ != left) {
this.rendered_.left_ = style.left = left
}
}
if(positioning == ol.OverlayPositioning.BOTTOM_LEFT || positioning == ol.OverlayPositioning.BOTTOM_CENTER || positioning == ol.OverlayPositioning.BOTTOM_RIGHT) {
if(this.rendered_.top_ !== "") {
this.rendered_.top_ = style.top = ""
}
var bottom = Math.round(mapSize[1] - pixel[1]) + "px";
if(this.rendered_.bottom_ != bottom) {
this.rendered_.bottom_ = style.bottom = bottom
}
}else {
if(this.rendered_.bottom_ !== "") {
this.rendered_.bottom_ = style.bottom = ""
}
var offsetY = -this.offsetY_;
if(positioning == ol.OverlayPositioning.CENTER_LEFT || positioning == ol.OverlayPositioning.CENTER_CENTER || positioning == ol.OverlayPositioning.CENTER_RIGHT) {
offsetY += goog.style.getSize(this.element_).height / 2
}
var top = Math.round(pixel[1] - offsetY) + "px";
if(this.rendered_.top_ != top) {
this.rendered_.top_ = style.top = top
}
}
if(!this.rendered_.visible) {
goog.style.setElementShown(this.element_, true);
this.rendered_.visible = true
}
};
goog.provide("googx.dom.fullscreen");
goog.provide("googx.dom.fullscreen.EventType");
goog.require("goog.dom");
goog.require("goog.userAgent");
googx.dom.fullscreen.EventType = {CHANGE:function() {
if(goog.userAgent.WEBKIT) {
return"webkitfullscreenchange"
}
if(goog.userAgent.GECKO) {
return"mozfullscreenchange"
}
if(goog.userAgent.IE) {
return"MSFullscreenChange"
}
return"fullscreenchange"
}()};
googx.dom.fullscreen.isSupported = function(opt_domHelper) {
var doc = googx.dom.fullscreen.getDocument_(opt_domHelper);
var body = doc.body;
return!!(body.webkitRequestFullscreen || body.mozRequestFullScreen && doc.mozFullScreenEnabled || body.msRequestFullscreen && doc.msFullscreenEnabled || body.requestFullscreen && doc.fullscreenEnabled)
};
googx.dom.fullscreen.requestFullScreen = function(element) {
if(element.webkitRequestFullscreen) {
element.webkitRequestFullscreen()
}else {
if(element.mozRequestFullScreen) {
element.mozRequestFullScreen()
}else {
if(element.msRequestFullscreen) {
element.msRequestFullscreen()
}else {
if(element.requestFullscreen) {
element.requestFullscreen()
}
}
}
}
};
googx.dom.fullscreen.requestFullScreenWithKeys = function(element) {
if(element.mozRequestFullScreenWithKeys) {
element.mozRequestFullScreenWithKeys()
}else {
if(element.webkitRequestFullscreen) {
element.webkitRequestFullscreen()
}else {
googx.dom.fullscreen.requestFullScreen(element)
}
}
};
googx.dom.fullscreen.exitFullScreen = function(opt_domHelper) {
var doc = googx.dom.fullscreen.getDocument_(opt_domHelper);
if(doc.webkitCancelFullScreen) {
doc.webkitCancelFullScreen()
}else {
if(doc.mozCancelFullScreen) {
doc.mozCancelFullScreen()
}else {
if(doc.msExitFullscreen) {
doc.msExitFullscreen()
}else {
if(doc.exitFullscreen) {
doc.exitFullscreen()
}
}
}
}
};
googx.dom.fullscreen.isFullScreen = function(opt_domHelper) {
var doc = googx.dom.fullscreen.getDocument_(opt_domHelper);
return!!(doc.webkitIsFullScreen || doc.mozFullScreen || doc.msFullscreenElement || doc.fullscreenElement)
};
googx.dom.fullscreen.getDocument_ = function(opt_domHelper) {
return opt_domHelper ? opt_domHelper.getDocument() : goog.dom.getDomHelper().getDocument()
};
goog.provide("ol.control.FullScreen");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.dom.classes");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("googx.dom.fullscreen");
goog.require("googx.dom.fullscreen.EventType");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.pointer.PointerEventHandler");
ol.control.FullScreen = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.cssClassName_ = goog.isDef(options.className) ? options.className : "ol-full-screen";
var tipLabel = goog.isDef(options.tipLabel) ? options.tipLabel : "Toggle full-screen";
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, tipLabel);
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":this.cssClassName_ + "-" + googx.dom.fullscreen.isFullScreen() + " ol-has-tooltip"});
goog.dom.appendChild(button, tip);
var buttonHandler = new ol.pointer.PointerEventHandler(button);
this.registerDisposable(buttonHandler);
goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP, this.handleClick_, false, this);
goog.events.listen(button, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() {
this.blur()
}, false);
goog.events.listen(goog.global.document, googx.dom.fullscreen.EventType.CHANGE, this.handleFullScreenChange_, false, this);
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":this.cssClassName_ + " " + ol.css.CLASS_UNSELECTABLE + " " + (!googx.dom.fullscreen.isSupported() ? ol.css.CLASS_UNSUPPORTED : "")}, button);
goog.base(this, {element:element, target:options.target});
this.keys_ = goog.isDef(options.keys) ? options.keys : false
};
goog.inherits(ol.control.FullScreen, ol.control.Control);
ol.control.FullScreen.prototype.handleClick_ = function(pointerEvent) {
if(!googx.dom.fullscreen.isSupported()) {
return
}
pointerEvent.browserEvent.preventDefault();
var map = this.getMap();
if(goog.isNull(map)) {
return
}
if(googx.dom.fullscreen.isFullScreen()) {
googx.dom.fullscreen.exitFullScreen()
}else {
var target = map.getTarget();
goog.asserts.assert(goog.isDefAndNotNull(target));
var element = goog.dom.getElement(target);
goog.asserts.assert(goog.isDefAndNotNull(element));
if(this.keys_) {
googx.dom.fullscreen.requestFullScreenWithKeys(element)
}else {
googx.dom.fullscreen.requestFullScreen(element)
}
}
};
ol.control.FullScreen.prototype.handleFullScreenChange_ = function() {
var opened = this.cssClassName_ + "-true";
var closed = this.cssClassName_ + "-false";
var anchor = goog.dom.getFirstElementChild(this.element);
var map = this.getMap();
if(googx.dom.fullscreen.isFullScreen()) {
goog.dom.classes.swap(anchor, closed, opened)
}else {
goog.dom.classes.swap(anchor, opened, closed)
}
if(!goog.isNull(map)) {
map.updateSize()
}
};
goog.provide("ol.control.MousePosition");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.style");
goog.require("ol.CoordinateFormatType");
goog.require("ol.Object");
goog.require("ol.Pixel");
goog.require("ol.TransformFunction");
goog.require("ol.control.Control");
goog.require("ol.proj");
goog.require("ol.proj.Projection");
ol.control.MousePositionProperty = {PROJECTION:"projection", COORDINATE_FORMAT:"coordinateFormat"};
ol.control.MousePosition = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : "ol-mouse-position";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className});
goog.base(this, {element:element, target:options.target});
goog.events.listen(this, ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION), this.handleProjectionChanged_, false, this);
if(goog.isDef(options.coordinateFormat)) {
this.setCoordinateFormat(options.coordinateFormat)
}
if(goog.isDef(options.projection)) {
this.setProjection(ol.proj.get(options.projection))
}
this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ? options.undefinedHTML : "";
this.renderedHTML_ = element.innerHTML;
this.mapProjection_ = null;
this.transform_ = null;
this.lastMouseMovePixel_ = null
};
goog.inherits(ol.control.MousePosition, ol.control.Control);
ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) {
var frameState = mapEvent.frameState;
if(goog.isNull(frameState)) {
this.mapProjection_ = null
}else {
if(this.mapProjection_ != frameState.view2DState.projection) {
this.mapProjection_ = frameState.view2DState.projection;
this.transform_ = null
}
}
this.updateHTML_(this.lastMouseMovePixel_)
};
ol.control.MousePosition.prototype.handleProjectionChanged_ = function() {
this.transform_ = null
};
ol.control.MousePosition.prototype.getCoordinateFormat = function() {
return(this.get(ol.control.MousePositionProperty.COORDINATE_FORMAT))
};
goog.exportProperty(ol.control.MousePosition.prototype, "getCoordinateFormat", ol.control.MousePosition.prototype.getCoordinateFormat);
ol.control.MousePosition.prototype.getProjection = function() {
return(this.get(ol.control.MousePositionProperty.PROJECTION))
};
goog.exportProperty(ol.control.MousePosition.prototype, "getProjection", ol.control.MousePosition.prototype.getProjection);
ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) {
var map = this.getMap();
var eventPosition = goog.style.getRelativePosition(browserEvent, map.getViewport());
this.lastMouseMovePixel_ = [eventPosition.x, eventPosition.y];
this.updateHTML_(this.lastMouseMovePixel_)
};
ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) {
this.updateHTML_(null);
this.lastMouseMovePixel_ = null
};
ol.control.MousePosition.prototype.setMap = function(map) {
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
var viewport = map.getViewport();
this.listenerKeys.push(goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, this.handleMouseMove, false, this), goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, this.handleMouseOut, false, this))
}
};
ol.control.MousePosition.prototype.setCoordinateFormat = function(format) {
this.set(ol.control.MousePositionProperty.COORDINATE_FORMAT, format)
};
goog.exportProperty(ol.control.MousePosition.prototype, "setCoordinateFormat", ol.control.MousePosition.prototype.setCoordinateFormat);
ol.control.MousePosition.prototype.setProjection = function(projection) {
this.set(ol.control.MousePositionProperty.PROJECTION, projection)
};
goog.exportProperty(ol.control.MousePosition.prototype, "setProjection", ol.control.MousePosition.prototype.setProjection);
ol.control.MousePosition.prototype.updateHTML_ = function(pixel) {
var html = this.undefinedHTML_;
if(!goog.isNull(pixel) && !goog.isNull(this.mapProjection_)) {
if(goog.isNull(this.transform_)) {
var projection = this.getProjection();
if(goog.isDef(projection)) {
this.transform_ = ol.proj.getTransformFromProjections(this.mapProjection_, projection)
}else {
this.transform_ = ol.proj.identityTransform
}
}
var map = this.getMap();
var coordinate = map.getCoordinateFromPixel(pixel);
if(!goog.isNull(coordinate)) {
this.transform_(coordinate, coordinate);
var coordinateFormat = this.getCoordinateFormat();
if(goog.isDef(coordinateFormat)) {
html = coordinateFormat(coordinate)
}else {
html = coordinate.toString()
}
}
}
if(!goog.isDef(this.renderedHTML_) || html != this.renderedHTML_) {
this.element.innerHTML = html;
this.renderedHTML_ = html
}
};
goog.provide("ol.control.ScaleLine");
goog.provide("ol.control.ScaleLineProperty");
goog.provide("ol.control.ScaleLineUnits");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.math");
goog.require("goog.style");
goog.require("ol.Object");
goog.require("ol.TransformFunction");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.proj");
goog.require("ol.proj.Units");
goog.require("ol.sphere.NORMAL");
ol.control.ScaleLineProperty = {UNITS:"units"};
ol.control.ScaleLineUnits = {DEGREES:"degrees", IMPERIAL:"imperial", NAUTICAL:"nautical", METRIC:"metric", US:"us"};
ol.control.ScaleLine = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : "ol-scale-line";
this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + "-inner"});
this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.innerElement_);
this.view2DState_ = null;
this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64;
this.renderedVisible_ = false;
this.renderedWidth_ = undefined;
this.renderedHTML_ = "";
this.toEPSG4326_ = null;
goog.base(this, {element:this.element_, target:options.target});
goog.events.listen(this, ol.Object.getChangeEventType(ol.control.ScaleLineProperty.UNITS), this.handleUnitsChanged_, false, this);
this.setUnits((options.units) || ol.control.ScaleLineUnits.METRIC)
};
goog.inherits(ol.control.ScaleLine, ol.control.Control);
ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5];
ol.control.ScaleLine.prototype.getUnits = function() {
return(this.get(ol.control.ScaleLineProperty.UNITS))
};
goog.exportProperty(ol.control.ScaleLine.prototype, "getUnits", ol.control.ScaleLine.prototype.getUnits);
ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) {
var frameState = mapEvent.frameState;
if(goog.isNull(frameState)) {
this.view2DState_ = null
}else {
this.view2DState_ = frameState.view2DState
}
this.updateElement_()
};
ol.control.ScaleLine.prototype.handleUnitsChanged_ = function() {
this.updateElement_()
};
ol.control.ScaleLine.prototype.setUnits = function(units) {
this.set(ol.control.ScaleLineProperty.UNITS, units)
};
goog.exportProperty(ol.control.ScaleLine.prototype, "setUnits", ol.control.ScaleLine.prototype.setUnits);
ol.control.ScaleLine.prototype.updateElement_ = function() {
var view2DState = this.view2DState_;
if(goog.isNull(view2DState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element_, false);
this.renderedVisible_ = false
}
return
}
var center = view2DState.center;
var projection = view2DState.projection;
var pointResolution = projection.getPointResolution(view2DState.resolution, center);
var projectionUnits = projection.getUnits();
var cosLatitude;
var units = this.getUnits();
if(projectionUnits == ol.proj.Units.DEGREES && (units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL)) {
this.toEPSG4326_ = null;
cosLatitude = Math.cos(goog.math.toRadians(center[1]));
pointResolution *= Math.PI * cosLatitude * ol.sphere.NORMAL.radius / 180;
projectionUnits = ol.proj.Units.METERS
}else {
if((projectionUnits == ol.proj.Units.FEET || projectionUnits == ol.proj.Units.METERS) && units == ol.control.ScaleLineUnits.DEGREES) {
if(goog.isNull(this.toEPSG4326_)) {
this.toEPSG4326_ = ol.proj.getTransformFromProjections(projection, ol.proj.get("EPSG:4326"))
}
cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1]));
var radius = ol.sphere.NORMAL.radius;
if(projectionUnits == ol.proj.Units.FEET) {
radius /= 0.3048
}
pointResolution *= 180 / (Math.PI * cosLatitude * radius);
projectionUnits = ol.proj.Units.DEGREES
}else {
this.toEPSG4326_ = null
}
}
goog.asserts.assert((units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL) && projectionUnits == ol.proj.Units.METERS || units == ol.control.ScaleLineUnits.DEGREES && projectionUnits == ol.proj.Units.DEGREES);
var nominalCount = this.minWidth_ * pointResolution;
var suffix = "";
if(units == ol.control.ScaleLineUnits.DEGREES) {
if(nominalCount < 1 / 60) {
suffix = "\u2033";
pointResolution *= 3600
}else {
if(nominalCount < 1) {
suffix = "\u2032";
pointResolution *= 60
}else {
suffix = "\u00b0"
}
}
}else {
if(units == ol.control.ScaleLineUnits.IMPERIAL) {
if(nominalCount < 0.9144) {
suffix = "in";
pointResolution /= 0.0254
}else {
if(nominalCount < 1609.344) {
suffix = "ft";
pointResolution /= 0.3048
}else {
suffix = "mi";
pointResolution /= 1609.344
}
}
}else {
if(units == ol.control.ScaleLineUnits.NAUTICAL) {
pointResolution /= 1852;
suffix = "nm"
}else {
if(units == ol.control.ScaleLineUnits.METRIC) {
if(nominalCount < 1) {
suffix = "mm";
pointResolution *= 1E3
}else {
if(nominalCount < 1E3) {
suffix = "m"
}else {
suffix = "km";
pointResolution /= 1E3
}
}
}else {
if(units == ol.control.ScaleLineUnits.US) {
if(nominalCount < 0.9144) {
suffix = "in";
pointResolution *= 39.37
}else {
if(nominalCount < 1609.344) {
suffix = "ft";
pointResolution /= 0.30480061
}else {
suffix = "mi";
pointResolution /= 1609.3472
}
}
}else {
goog.asserts.fail()
}
}
}
}
}
var i = 3 * Math.floor(Math.log(this.minWidth_ * pointResolution) / Math.log(10));
var count, width;
while(true) {
count = ol.control.ScaleLine.LEADING_DIGITS[i % 3] * Math.pow(10, Math.floor(i / 3));
width = Math.round(count / pointResolution);
if(width >= this.minWidth_) {
break
}
++i
}
var html = count + suffix;
if(this.renderedHTML_ != html) {
this.innerElement_.innerHTML = html;
this.renderedHTML_ = html
}
if(this.renderedWidth_ != width) {
this.innerElement_.style.width = width + "px";
this.renderedWidth_ = width
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.element_, true);
this.renderedVisible_ = true
}
};
goog.provide("goog.events.EventHandler");
goog.require("goog.Disposable");
goog.require("goog.events");
goog.require("goog.object");
goog.events.EventHandler = function(opt_handler) {
goog.Disposable.call(this);
this.handler_ = opt_handler;
this.keys_ = {}
};
goog.inherits(goog.events.EventHandler, goog.Disposable);
goog.events.EventHandler.typeArray_ = [];
goog.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_capture, opt_handler) {
if(!goog.isArray(type)) {
goog.events.EventHandler.typeArray_[0] = (type);
type = goog.events.EventHandler.typeArray_
}
for(var i = 0;i < type.length;i++) {
var listenerObj = goog.events.listen(src, type[i], opt_fn || this, opt_capture || false, opt_handler || this.handler_ || this);
if(goog.DEBUG && !listenerObj) {
return this
}
var key = listenerObj.key;
this.keys_[key] = listenerObj
}
return this
};
goog.events.EventHandler.prototype.listenOnce = function(src, type, opt_fn, opt_capture, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
this.listenOnce(src, type[i], opt_fn, opt_capture, opt_handler)
}
}else {
var listenerObj = goog.events.listenOnce(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this);
var key = listenerObj.key;
this.keys_[key] = listenerObj
}
return this
};
goog.events.EventHandler.prototype.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.listen(src, listener, opt_capt, opt_handler || this.handler_ || this, this);
return this
};
goog.events.EventHandler.prototype.getListenerCount = function() {
var count = 0;
for(var key in this.keys_) {
if(Object.prototype.hasOwnProperty.call(this.keys_, key)) {
count++
}
}
return count
};
goog.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_capture, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
this.unlisten(src, type[i], opt_fn, opt_capture, opt_handler)
}
}else {
var listener = goog.events.getListener(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this);
if(listener) {
goog.events.unlistenByKey(listener);
delete this.keys_[listener.key]
}
}
return this
};
goog.events.EventHandler.prototype.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.unlisten(src, listener, opt_capt, opt_handler || this.handler_ || this, this);
return this
};
goog.events.EventHandler.prototype.removeAll = function() {
goog.object.forEach(this.keys_, goog.events.unlistenByKey);
this.keys_ = {}
};
goog.events.EventHandler.prototype.disposeInternal = function() {
goog.events.EventHandler.superClass_.disposeInternal.call(this);
this.removeAll()
};
goog.events.EventHandler.prototype.handleEvent = function(e) {
throw Error("EventHandler.handleEvent not implemented");
};
goog.provide("goog.style.bidi");
goog.require("goog.dom");
goog.require("goog.style");
goog.require("goog.userAgent");
goog.style.bidi.getScrollLeft = function(element) {
var isRtl = goog.style.isRightToLeft(element);
if(isRtl && goog.userAgent.GECKO) {
return-element.scrollLeft
}else {
if(isRtl && !(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) {
var overflowX = goog.style.getComputedOverflowX(element);
if(overflowX == "visible") {
return element.scrollLeft
}else {
return element.scrollWidth - element.clientWidth - element.scrollLeft
}
}
}
return element.scrollLeft
};
goog.style.bidi.getOffsetStart = function(element) {
var offsetLeftForReal = element.offsetLeft;
var bestParent = element.offsetParent;
if(!bestParent && goog.style.getComputedPosition(element) == "fixed") {
bestParent = goog.dom.getOwnerDocument(element).documentElement
}
if(!bestParent) {
return offsetLeftForReal
}
if(goog.userAgent.GECKO) {
var borderWidths = goog.style.getBorderBox(bestParent);
offsetLeftForReal += borderWidths.left
}else {
if(goog.userAgent.isDocumentModeOrHigher(8)) {
var borderWidths = goog.style.getBorderBox(bestParent);
offsetLeftForReal -= borderWidths.left
}
}
if(goog.style.isRightToLeft(bestParent)) {
var elementRightOffset = offsetLeftForReal + element.offsetWidth;
return bestParent.clientWidth - elementRightOffset
}
return offsetLeftForReal
};
goog.style.bidi.setScrollOffset = function(element, offsetStart) {
offsetStart = Math.max(offsetStart, 0);
if(!goog.style.isRightToLeft(element)) {
element.scrollLeft = offsetStart
}else {
if(goog.userAgent.GECKO) {
element.scrollLeft = -offsetStart
}else {
if(!(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) {
element.scrollLeft = element.scrollWidth - offsetStart - element.clientWidth
}else {
element.scrollLeft = offsetStart
}
}
}
};
goog.style.bidi.setPosition = function(elem, left, top, isRtl) {
if(!goog.isNull(top)) {
elem.style.top = top + "px"
}
if(isRtl) {
elem.style.right = left + "px";
elem.style.left = ""
}else {
elem.style.left = left + "px";
elem.style.right = ""
}
};
goog.provide("goog.fx.DragEvent");
goog.provide("goog.fx.Dragger");
goog.provide("goog.fx.Dragger.EventType");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.EventHandler");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Rect");
goog.require("goog.style");
goog.require("goog.style.bidi");
goog.require("goog.userAgent");
goog.fx.Dragger = function(target, opt_handle, opt_limits) {
goog.events.EventTarget.call(this);
this.target = target;
this.handle = opt_handle || target;
this.limits = opt_limits || new goog.math.Rect(NaN, NaN, NaN, NaN);
this.document_ = goog.dom.getOwnerDocument(target);
this.eventHandler_ = new goog.events.EventHandler(this);
this.registerDisposable(this.eventHandler_);
goog.events.listen(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this)
};
goog.inherits(goog.fx.Dragger, goog.events.EventTarget);
goog.fx.Dragger.HAS_SET_CAPTURE_ = goog.userAgent.IE || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.3");
goog.fx.Dragger.EventType = {EARLY_CANCEL:"earlycancel", START:"start", BEFOREDRAG:"beforedrag", DRAG:"drag", END:"end"};
goog.fx.Dragger.prototype.target;
goog.fx.Dragger.prototype.handle;
goog.fx.Dragger.prototype.limits;
goog.fx.Dragger.prototype.rightToLeft_;
goog.fx.Dragger.prototype.clientX = 0;
goog.fx.Dragger.prototype.clientY = 0;
goog.fx.Dragger.prototype.screenX = 0;
goog.fx.Dragger.prototype.screenY = 0;
goog.fx.Dragger.prototype.startX = 0;
goog.fx.Dragger.prototype.startY = 0;
goog.fx.Dragger.prototype.deltaX = 0;
goog.fx.Dragger.prototype.deltaY = 0;
goog.fx.Dragger.prototype.pageScroll;
goog.fx.Dragger.prototype.enabled_ = true;
goog.fx.Dragger.prototype.dragging_ = false;
goog.fx.Dragger.prototype.hysteresisDistanceSquared_ = 0;
goog.fx.Dragger.prototype.mouseDownTime_ = 0;
goog.fx.Dragger.prototype.document_;
goog.fx.Dragger.prototype.scrollTarget_;
goog.fx.Dragger.prototype.ieDragStartCancellingOn_ = false;
goog.fx.Dragger.prototype.useRightPositioningForRtl_ = false;
goog.fx.Dragger.prototype.enableRightPositioningForRtl = function(useRightPositioningForRtl) {
this.useRightPositioningForRtl_ = useRightPositioningForRtl
};
goog.fx.Dragger.prototype.getHandler = function() {
return this.eventHandler_
};
goog.fx.Dragger.prototype.setLimits = function(limits) {
this.limits = limits || new goog.math.Rect(NaN, NaN, NaN, NaN)
};
goog.fx.Dragger.prototype.setHysteresis = function(distance) {
this.hysteresisDistanceSquared_ = Math.pow(distance, 2)
};
goog.fx.Dragger.prototype.getHysteresis = function() {
return Math.sqrt(this.hysteresisDistanceSquared_)
};
goog.fx.Dragger.prototype.setScrollTarget = function(scrollTarget) {
this.scrollTarget_ = scrollTarget
};
goog.fx.Dragger.prototype.setCancelIeDragStart = function(cancelIeDragStart) {
this.ieDragStartCancellingOn_ = cancelIeDragStart
};
goog.fx.Dragger.prototype.getEnabled = function() {
return this.enabled_
};
goog.fx.Dragger.prototype.setEnabled = function(enabled) {
this.enabled_ = enabled
};
goog.fx.Dragger.prototype.disposeInternal = function() {
goog.fx.Dragger.superClass_.disposeInternal.call(this);
goog.events.unlisten(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this);
this.cleanUpAfterDragging_();
this.target = null;
this.handle = null
};
goog.fx.Dragger.prototype.isRightToLeft_ = function() {
if(!goog.isDef(this.rightToLeft_)) {
this.rightToLeft_ = goog.style.isRightToLeft(this.target)
}
return this.rightToLeft_
};
goog.fx.Dragger.prototype.startDrag = function(e) {
var isMouseDown = e.type == goog.events.EventType.MOUSEDOWN;
if(this.enabled_ && !this.dragging_ && (!isMouseDown || e.isMouseActionButton())) {
this.maybeReinitTouchEvent_(e);
if(this.hysteresisDistanceSquared_ == 0) {
if(this.fireDragStart_(e)) {
this.dragging_ = true;
e.preventDefault()
}else {
return
}
}else {
e.preventDefault()
}
this.setupDragHandlers();
this.clientX = this.startX = e.clientX;
this.clientY = this.startY = e.clientY;
this.screenX = e.screenX;
this.screenY = e.screenY;
this.deltaX = this.useRightPositioningForRtl_ ? goog.style.bidi.getOffsetStart(this.target) : this.target.offsetLeft;
this.deltaY = this.target.offsetTop;
this.pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll();
this.mouseDownTime_ = goog.now()
}else {
this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL)
}
};
goog.fx.Dragger.prototype.setupDragHandlers = function() {
var doc = this.document_;
var docEl = doc.documentElement;
var useCapture = !goog.fx.Dragger.HAS_SET_CAPTURE_;
this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHMOVE, goog.events.EventType.MOUSEMOVE], this.handleMove_, useCapture);
this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHEND, goog.events.EventType.MOUSEUP], this.endDrag, useCapture);
if(goog.fx.Dragger.HAS_SET_CAPTURE_) {
docEl.setCapture(false);
this.eventHandler_.listen(docEl, goog.events.EventType.LOSECAPTURE, this.endDrag)
}else {
this.eventHandler_.listen(goog.dom.getWindow(doc), goog.events.EventType.BLUR, this.endDrag)
}
if(goog.userAgent.IE && this.ieDragStartCancellingOn_) {
this.eventHandler_.listen(doc, goog.events.EventType.DRAGSTART, goog.events.Event.preventDefault)
}
if(this.scrollTarget_) {
this.eventHandler_.listen(this.scrollTarget_, goog.events.EventType.SCROLL, this.onScroll_, useCapture)
}
};
goog.fx.Dragger.prototype.fireDragStart_ = function(e) {
return this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.START, this, e.clientX, e.clientY, e))
};
goog.fx.Dragger.prototype.cleanUpAfterDragging_ = function() {
this.eventHandler_.removeAll();
if(goog.fx.Dragger.HAS_SET_CAPTURE_) {
this.document_.releaseCapture()
}
};
goog.fx.Dragger.prototype.endDrag = function(e, opt_dragCanceled) {
this.cleanUpAfterDragging_();
if(this.dragging_) {
this.maybeReinitTouchEvent_(e);
this.dragging_ = false;
var x = this.limitX(this.deltaX);
var y = this.limitY(this.deltaY);
var dragCanceled = opt_dragCanceled || e.type == goog.events.EventType.TOUCHCANCEL;
this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.END, this, e.clientX, e.clientY, e, x, y, dragCanceled))
}else {
this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL)
}
};
goog.fx.Dragger.prototype.endDragCancel = function(e) {
this.endDrag(e, true)
};
goog.fx.Dragger.prototype.maybeReinitTouchEvent_ = function(e) {
var type = e.type;
if(type == goog.events.EventType.TOUCHSTART || type == goog.events.EventType.TOUCHMOVE) {
e.init(e.getBrowserEvent().targetTouches[0], e.currentTarget)
}else {
if(type == goog.events.EventType.TOUCHEND || type == goog.events.EventType.TOUCHCANCEL) {
e.init(e.getBrowserEvent().changedTouches[0], e.currentTarget)
}
}
};
goog.fx.Dragger.prototype.handleMove_ = function(e) {
if(this.enabled_) {
this.maybeReinitTouchEvent_(e);
var sign = this.useRightPositioningForRtl_ && this.isRightToLeft_() ? -1 : 1;
var dx = sign * (e.clientX - this.clientX);
var dy = e.clientY - this.clientY;
this.clientX = e.clientX;
this.clientY = e.clientY;
this.screenX = e.screenX;
this.screenY = e.screenY;
if(!this.dragging_) {
var diffX = this.startX - this.clientX;
var diffY = this.startY - this.clientY;
var distance = diffX * diffX + diffY * diffY;
if(distance > this.hysteresisDistanceSquared_) {
if(this.fireDragStart_(e)) {
this.dragging_ = true
}else {
if(!this.isDisposed()) {
this.endDrag(e)
}
return
}
}
}
var pos = this.calculatePosition_(dx, dy);
var x = pos.x;
var y = pos.y;
if(this.dragging_) {
var rv = this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG, this, e.clientX, e.clientY, e, x, y));
if(rv) {
this.doDrag(e, x, y, false);
e.preventDefault()
}
}
}
};
goog.fx.Dragger.prototype.calculatePosition_ = function(dx, dy) {
var pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll();
dx += pageScroll.x - this.pageScroll.x;
dy += pageScroll.y - this.pageScroll.y;
this.pageScroll = pageScroll;
this.deltaX += dx;
this.deltaY += dy;
var x = this.limitX(this.deltaX);
var y = this.limitY(this.deltaY);
return new goog.math.Coordinate(x, y)
};
goog.fx.Dragger.prototype.onScroll_ = function(e) {
var pos = this.calculatePosition_(0, 0);
e.clientX = this.clientX;
e.clientY = this.clientY;
this.doDrag(e, pos.x, pos.y, true)
};
goog.fx.Dragger.prototype.doDrag = function(e, x, y, dragFromScroll) {
this.defaultAction(x, y);
this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG, this, e.clientX, e.clientY, e, x, y))
};
goog.fx.Dragger.prototype.limitX = function(x) {
var rect = this.limits;
var left = !isNaN(rect.left) ? rect.left : null;
var width = !isNaN(rect.width) ? rect.width : 0;
var maxX = left != null ? left + width : Infinity;
var minX = left != null ? left : -Infinity;
return Math.min(maxX, Math.max(minX, x))
};
goog.fx.Dragger.prototype.limitY = function(y) {
var rect = this.limits;
var top = !isNaN(rect.top) ? rect.top : null;
var height = !isNaN(rect.height) ? rect.height : 0;
var maxY = top != null ? top + height : Infinity;
var minY = top != null ? top : -Infinity;
return Math.min(maxY, Math.max(minY, y))
};
goog.fx.Dragger.prototype.defaultAction = function(x, y) {
if(this.useRightPositioningForRtl_ && this.isRightToLeft_()) {
this.target.style.right = x + "px"
}else {
this.target.style.left = x + "px"
}
this.target.style.top = y + "px"
};
goog.fx.Dragger.prototype.isDragging = function() {
return this.dragging_
};
goog.fx.DragEvent = function(type, dragobj, clientX, clientY, browserEvent, opt_actX, opt_actY, opt_dragCanceled) {
goog.events.Event.call(this, type);
this.clientX = clientX;
this.clientY = clientY;
this.browserEvent = browserEvent;
this.left = goog.isDef(opt_actX) ? opt_actX : dragobj.deltaX;
this.top = goog.isDef(opt_actY) ? opt_actY : dragobj.deltaY;
this.dragger = dragobj;
this.dragCanceled = !!opt_dragCanceled
};
goog.inherits(goog.fx.DragEvent, goog.events.Event);
goog.provide("ol.control.ZoomSlider");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.fx.Dragger");
goog.require("goog.fx.Dragger.EventType");
goog.require("goog.math");
goog.require("goog.math.Rect");
goog.require("goog.style");
goog.require("ol");
goog.require("ol.animation");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.easing");
ol.control.ZoomSlider = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.currentResolution_ = undefined;
this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
this.sliderInitialized_ = false;
var className = goog.isDef(options.className) ? options.className : "ol-zoomslider";
var thumbElement = goog.dom.createDom(goog.dom.TagName.DIV, [className + "-thumb", ol.css.CLASS_UNSELECTABLE]);
var sliderElement = goog.dom.createDom(goog.dom.TagName.DIV, [className, ol.css.CLASS_UNSELECTABLE], thumbElement);
this.dragger_ = new goog.fx.Dragger(thumbElement);
this.registerDisposable(this.dragger_);
goog.events.listen(this.dragger_, [goog.fx.Dragger.EventType.DRAG, goog.fx.Dragger.EventType.END], this.handleSliderChange_, undefined, this);
goog.events.listen(sliderElement, goog.events.EventType.CLICK, this.handleContainerClick_, false, this);
goog.events.listen(thumbElement, goog.events.EventType.CLICK, goog.events.Event.stopPropagation);
goog.base(this, {element:sliderElement})
};
goog.inherits(ol.control.ZoomSlider, ol.control.Control);
ol.control.ZoomSlider.direction = {VERTICAL:0, HORIZONTAL:1};
ol.control.ZoomSlider.prototype.setMap = function(map) {
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
map.render()
}
};
ol.control.ZoomSlider.prototype.initSlider_ = function() {
var container = this.element, thumb = goog.dom.getFirstElementChild(container), elemSize = goog.style.getContentBoxSize(container), thumbBounds = goog.style.getBounds(thumb), thumbMargins = goog.style.getMarginBox(thumb), thumbBorderBox = goog.style.getBorderBox(thumb), w = elemSize.width - thumbMargins.left - thumbMargins.right - thumbBorderBox.left - thumbBorderBox.right - thumbBounds.width, h = elemSize.height - thumbMargins.top - thumbMargins.bottom - thumbBorderBox.top - thumbBorderBox.bottom -
thumbBounds.height, limits;
if(elemSize.width > elemSize.height) {
this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL;
limits = new goog.math.Rect(0, 0, w, 0)
}else {
this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
limits = new goog.math.Rect(0, 0, 0, h)
}
this.dragger_.setLimits(limits);
this.sliderInitialized_ = true
};
ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) {
if(goog.isNull(mapEvent.frameState)) {
return
}
goog.asserts.assert(goog.isDefAndNotNull(mapEvent.frameState.view2DState));
if(!this.sliderInitialized_) {
this.initSlider_()
}
var res = mapEvent.frameState.view2DState.resolution;
if(res !== this.currentResolution_) {
this.currentResolution_ = res;
this.positionThumbForResolution_(res)
}
};
ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) {
var map = this.getMap();
var view = map.getView().getView2D();
var resolution;
var amountDragged = this.amountDragged_(browserEvent.offsetX, browserEvent.offsetY);
resolution = this.resolutionForAmount_(amountDragged);
goog.asserts.assert(goog.isDef(resolution));
map.beforeRender(ol.animation.zoom({resolution:resolution, duration:ol.ZOOMSLIDER_ANIMATION_DURATION, easing:ol.easing.easeOut}));
resolution = view.constrainResolution(resolution);
view.setResolution(resolution)
};
ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) {
var amount = this.amountForResolution_(res), dragger = this.dragger_, thumb = goog.dom.getFirstElementChild(this.element);
if(this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) {
var left = dragger.limits.left + dragger.limits.width * amount;
goog.style.setPosition(thumb, left)
}else {
var top = dragger.limits.top + dragger.limits.height * amount;
goog.style.setPosition(thumb, dragger.limits.left, top)
}
};
ol.control.ZoomSlider.prototype.amountDragged_ = function(x, y) {
var draggerLimits = this.dragger_.limits, amount = 0;
if(this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) {
amount = (x - draggerLimits.left) / draggerLimits.width
}else {
amount = (y - draggerLimits.top) / draggerLimits.height
}
return amount
};
ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) {
amount = (goog.math.clamp(amount, 0, 1) - 1) * -1;
var fn = this.getMap().getView().getView2D().getResolutionForValueFunction();
return fn(amount)
};
ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) {
var fn = this.getMap().getView().getView2D().getValueForResolutionFunction();
var value = fn(res);
return(value - 1) * -1
};
ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) {
var map = this.getMap();
var view = map.getView().getView2D();
var resolution;
if(e.type === goog.fx.Dragger.EventType.DRAG) {
var amountDragged = this.amountDragged_(e.left, e.top);
resolution = this.resolutionForAmount_(amountDragged);
if(resolution !== this.currentResolution_) {
this.currentResolution_ = resolution;
view.setResolution(resolution)
}
}else {
goog.asserts.assert(goog.isDef(this.currentResolution_));
map.beforeRender(ol.animation.zoom({resolution:this.currentResolution_, duration:ol.ZOOMSLIDER_ANIMATION_DURATION, easing:ol.easing.easeOut}));
resolution = view.constrainResolution(this.currentResolution_);
view.setResolution(resolution)
}
};
goog.provide("ol.control.ZoomToExtent");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.pointer.PointerEventHandler");
ol.control.ZoomToExtent = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.extent_ = goog.isDef(options.extent) ? options.extent : null;
var className = goog.isDef(options.className) ? options.className : "ol-zoom-extent";
var tipLabel = goog.isDef(options.tipLabel) ? options.tipLabel : "Fit to extent";
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, tipLabel);
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE});
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":"ol-has-tooltip"});
goog.dom.appendChild(button, tip);
goog.dom.appendChild(element, button);
var buttonHandler = new ol.pointer.PointerEventHandler(button);
this.registerDisposable(buttonHandler);
goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP, this.handleZoomToExtent_, false, this);
goog.events.listen(button, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() {
this.blur()
}, false);
goog.base(this, {element:element, target:options.target})
};
goog.inherits(ol.control.ZoomToExtent, ol.control.Control);
ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function(pointerEvent) {
pointerEvent.browserEvent.preventDefault();
var map = this.getMap();
var view = map.getView();
goog.asserts.assert(goog.isDef(view));
var view2D = view.getView2D();
var extent = goog.isNull(this.extent_) ? view2D.getProjection().getExtent() : this.extent_;
view2D.fitExtent(extent, map.getSize())
};
goog.provide("ol.dom.Input");
goog.provide("ol.dom.InputProperty");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.Object");
ol.dom.InputProperty = {VALUE:"value", CHECKED:"checked"};
ol.dom.Input = function(target) {
goog.base(this);
this.target_ = (target);
goog.events.listen(this.target_, [goog.events.EventType.CHANGE, goog.events.EventType.INPUT], this.handleInputChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE), this.handleValueChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.CHECKED), this.handleCheckedChanged_, false, this)
};
goog.inherits(ol.dom.Input, ol.Object);
ol.dom.Input.prototype.getChecked = function() {
return(this.get(ol.dom.InputProperty.CHECKED))
};
goog.exportProperty(ol.dom.Input.prototype, "getChecked", ol.dom.Input.prototype.getChecked);
ol.dom.Input.prototype.getValue = function() {
return(this.get(ol.dom.InputProperty.VALUE))
};
goog.exportProperty(ol.dom.Input.prototype, "getValue", ol.dom.Input.prototype.getValue);
ol.dom.Input.prototype.setValue = function(value) {
this.set(ol.dom.InputProperty.VALUE, value)
};
goog.exportProperty(ol.dom.Input.prototype, "setValue", ol.dom.Input.prototype.setValue);
ol.dom.Input.prototype.setChecked = function(checked) {
this.set(ol.dom.InputProperty.CHECKED, checked)
};
goog.exportProperty(ol.dom.Input.prototype, "setChecked", ol.dom.Input.prototype.setChecked);
ol.dom.Input.prototype.handleInputChanged_ = function(browserEvent) {
goog.asserts.assert(browserEvent.currentTarget == this.target_);
var target = this.target_;
if(target.type === "checkbox" || target.type === "radio") {
this.setChecked(target.checked)
}else {
this.setValue(target.value)
}
};
ol.dom.Input.prototype.handleCheckedChanged_ = function(event) {
this.target_.checked = (this.getChecked())
};
ol.dom.Input.prototype.handleValueChanged_ = function(event) {
this.target_.value = (this.getValue())
};
goog.provide("ol.format.Feature");
goog.require("goog.functions");
ol.format.Feature = function() {
};
ol.format.Feature.prototype.getExtensions = goog.abstractMethod;
ol.format.Feature.prototype.getType = goog.abstractMethod;
ol.format.Feature.prototype.readFeature = goog.abstractMethod;
ol.format.Feature.prototype.readFeatures = goog.abstractMethod;
ol.format.Feature.prototype.readGeometry = goog.abstractMethod;
ol.format.Feature.prototype.readProjection = goog.abstractMethod;
ol.format.Feature.prototype.writeFeature = goog.abstractMethod;
ol.format.Feature.prototype.writeFeatures = goog.abstractMethod;
ol.format.Feature.prototype.writeGeometry = goog.abstractMethod;
goog.provide("ol.format.FormatType");
ol.format.FormatType = {BINARY:"binary", JSON:"json", TEXT:"text", XML:"xml"};
goog.provide("goog.dom.xml");
goog.require("goog.dom");
goog.require("goog.dom.NodeType");
goog.dom.xml.MAX_XML_SIZE_KB = 2 * 1024;
goog.dom.xml.MAX_ELEMENT_DEPTH = 256;
goog.dom.xml.createDocument = function(opt_rootTagName, opt_namespaceUri) {
if(opt_namespaceUri && !opt_rootTagName) {
throw Error("Can't create document with namespace and no root tag");
}
if(document.implementation && document.implementation.createDocument) {
return document.implementation.createDocument(opt_namespaceUri || "", opt_rootTagName || "", null)
}else {
if(typeof ActiveXObject != "undefined") {
var doc = goog.dom.xml.createMsXmlDocument_();
if(doc) {
if(opt_rootTagName) {
doc.appendChild(doc.createNode(goog.dom.NodeType.ELEMENT, opt_rootTagName, opt_namespaceUri || ""))
}
return doc
}
}
}
throw Error("Your browser does not support creating new documents");
};
goog.dom.xml.loadXml = function(xml) {
if(typeof DOMParser != "undefined") {
return(new DOMParser).parseFromString(xml, "application/xml")
}else {
if(typeof ActiveXObject != "undefined") {
var doc = goog.dom.xml.createMsXmlDocument_();
doc.loadXML(xml);
return doc
}
}
throw Error("Your browser does not support loading xml documents");
};
goog.dom.xml.serialize = function(xml) {
if(typeof XMLSerializer != "undefined") {
return(new XMLSerializer).serializeToString(xml)
}
var text = xml.xml;
if(text) {
return text
}
throw Error("Your browser does not support serializing XML documents");
};
goog.dom.xml.selectSingleNode = function(node, path) {
if(typeof node.selectSingleNode != "undefined") {
var doc = goog.dom.getOwnerDocument(node);
if(typeof doc.setProperty != "undefined") {
doc.setProperty("SelectionLanguage", "XPath")
}
return node.selectSingleNode(path)
}else {
if(document.implementation.hasFeature("XPath", "3.0")) {
var doc = goog.dom.getOwnerDocument(node);
var resolver = doc.createNSResolver(doc.documentElement);
var result = doc.evaluate(path, node, resolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return result.singleNodeValue
}
}
return null
};
goog.dom.xml.selectNodes = function(node, path) {
if(typeof node.selectNodes != "undefined") {
var doc = goog.dom.getOwnerDocument(node);
if(typeof doc.setProperty != "undefined") {
doc.setProperty("SelectionLanguage", "XPath")
}
return node.selectNodes(path)
}else {
if(document.implementation.hasFeature("XPath", "3.0")) {
var doc = goog.dom.getOwnerDocument(node);
var resolver = doc.createNSResolver(doc.documentElement);
var nodes = doc.evaluate(path, node, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var results = [];
var count = nodes.snapshotLength;
for(var i = 0;i < count;i++) {
results.push(nodes.snapshotItem(i))
}
return results
}else {
return[]
}
}
};
goog.dom.xml.setAttributes = function(element, attributes) {
for(var key in attributes) {
if(attributes.hasOwnProperty(key)) {
element.setAttribute(key, attributes[key])
}
}
};
goog.dom.xml.createMsXmlDocument_ = function() {
var doc = new ActiveXObject("MSXML2.DOMDocument");
if(doc) {
doc.resolveExternals = false;
doc.validateOnParse = false;
try {
doc.setProperty("ProhibitDTD", true);
doc.setProperty("MaxXMLSize", goog.dom.xml.MAX_XML_SIZE_KB);
doc.setProperty("MaxElementDepth", goog.dom.xml.MAX_ELEMENT_DEPTH)
}catch(e) {
}
}
return doc
};
goog.provide("ol.xml");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.dom.xml");
goog.require("goog.object");
goog.require("goog.userAgent");
ol.xml.NodeStackItem;
ol.xml.Parser;
ol.xml.Serializer;
ol.xml.DOCUMENT = goog.dom.xml.createDocument();
ol.xml.createElementNS_ = function(namespaceURI, qualifiedName) {
return ol.xml.DOCUMENT.createElementNS(namespaceURI, qualifiedName)
};
ol.xml.createElementNSActiveX_ = function(namespaceURI, qualifiedName) {
if(goog.isNull(namespaceURI)) {
namespaceURI = ""
}
return ol.xml.DOCUMENT.createNode(1, qualifiedName, namespaceURI)
};
ol.xml.createElementNS = document.implementation && document.implementation.createDocument ? ol.xml.createElementNS_ : ol.xml.createElementNSActiveX_;
ol.xml.getAllTextContent = function(node, normalizeWhitespace) {
return ol.xml.getAllTextContent_(node, normalizeWhitespace, []).join("")
};
ol.xml.getAllTextContent_ = function(node, normalizeWhitespace, accumulator) {
if(node.nodeType == goog.dom.NodeType.CDATA_SECTION || node.nodeType == goog.dom.NodeType.TEXT) {
if(normalizeWhitespace) {
accumulator.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, ""))
}else {
accumulator.push(node.nodeValue)
}
}else {
var n;
for(n = node.firstChild;!goog.isNull(n);n = n.nextSibling) {
ol.xml.getAllTextContent_(n, normalizeWhitespace, accumulator)
}
}
return accumulator
};
ol.xml.getLocalName_ = function(node) {
return node.localName
};
ol.xml.getLocalNameIE_ = function(node) {
var localName = node.localName;
if(goog.isDef(localName)) {
return localName
}
var baseName = node.baseName;
goog.asserts.assert(goog.isDefAndNotNull(baseName));
return baseName
};
ol.xml.getLocalName = goog.userAgent.IE ? ol.xml.getLocalNameIE_ : ol.xml.getLocalName_;
ol.xml.isDocument_ = function(value) {
return value instanceof Document
};
ol.xml.isDocumentIE_ = function(value) {
return goog.isObject(value) && value.nodeType == goog.dom.NodeType.DOCUMENT
};
ol.xml.isDocument = goog.userAgent.IE ? ol.xml.isDocumentIE_ : ol.xml.isDocument_;
ol.xml.isNode_ = function(value) {
return value instanceof Node
};
ol.xml.isNodeIE_ = function(value) {
return goog.isObject(value) && goog.isDef(value.nodeType)
};
ol.xml.isNode = goog.userAgent.IE ? ol.xml.isNodeIE_ : ol.xml.isNode_;
ol.xml.getAttributeNS_ = function(node, namespaceURI, name) {
return node.getAttributeNS(namespaceURI, name) || ""
};
ol.xml.getAttributeNSActiveX_ = function(node, namespaceURI, name) {
var attributeValue = "";
var attributeNode = ol.xml.getAttributeNodeNS(node, namespaceURI, name);
if(goog.isDef(attributeNode)) {
attributeValue = attributeNode.nodeValue
}
return attributeValue
};
ol.xml.getAttributeNS = document.implementation && document.implementation.createDocument ? ol.xml.getAttributeNS_ : ol.xml.getAttributeNSActiveX_;
ol.xml.getAttributeNodeNS_ = function(node, namespaceURI, name) {
return node.getAttributeNodeNS(namespaceURI, name)
};
ol.xml.getAttributeNodeNSActiveX_ = function(node, namespaceURI, name) {
var attributeNode = null;
var attributes = node.attributes;
var potentialNode, fullName;
for(var i = 0, len = attributes.length;i < len;++i) {
potentialNode = attributes[i];
if(potentialNode.namespaceURI == namespaceURI) {
fullName = potentialNode.prefix ? potentialNode.prefix + ":" + name : name;
if(fullName == potentialNode.nodeName) {
attributeNode = potentialNode;
break
}
}
}
return attributeNode
};
ol.xml.getAttributeNodeNS = document.implementation && document.implementation.createDocument ? ol.xml.getAttributeNodeNS_ : ol.xml.getAttributeNodeNSActiveX_;
ol.xml.setAttributeNS_ = function(node, namespaceURI, name, value) {
node.setAttributeNS(namespaceURI, name, value)
};
ol.xml.setAttributeNSActiveX_ = function(node, namespaceURI, name, value) {
if(!goog.isNull(namespaceURI)) {
var attribute = node.ownerDocument.createNode(2, name, namespaceURI);
attribute.nodeValue = value;
node.setAttributeNode(attribute)
}else {
node.setAttribute(name, value)
}
};
ol.xml.setAttributeNS = document.implementation && document.implementation.createDocument ? ol.xml.setAttributeNS_ : ol.xml.setAttributeNSActiveX_;
ol.xml.load = function(xml) {
return(new DOMParser).parseFromString(xml, "application/xml")
};
ol.xml.makeArrayExtender = function(valueReader, opt_this) {
return function(node, objectStack) {
var value = valueReader.call(opt_this, node, objectStack);
if(goog.isDef(value)) {
goog.asserts.assert(goog.isArray(value));
var array = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(array));
goog.array.extend(array, value)
}
}
};
ol.xml.makeArrayPusher = function(valueReader, opt_this) {
return function(node, objectStack) {
var value = valueReader.call(opt_this, node, objectStack);
if(goog.isDef(value)) {
var array = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isArray(array));
array.push(value)
}
}
};
ol.xml.makeReplacer = function(valueReader, opt_this) {
return function(node, objectStack) {
var value = valueReader.call(opt_this, node, objectStack);
if(goog.isDef(value)) {
objectStack[objectStack.length - 1] = value
}
}
};
ol.xml.makeObjectPropertyPusher = function(valueReader, opt_property, opt_this) {
goog.asserts.assert(goog.isDef(valueReader));
return function(node, objectStack) {
var value = valueReader.call(opt_this, node, objectStack);
if(goog.isDef(value)) {
var object = (objectStack[objectStack.length - 1]);
var property = goog.isDef(opt_property) ? opt_property : node.localName;
goog.asserts.assert(goog.isObject(object));
var array = goog.object.setIfUndefined(object, property, []);
array.push(value)
}
}
};
ol.xml.makeObjectPropertySetter = function(valueReader, opt_property, opt_this) {
goog.asserts.assert(goog.isDef(valueReader));
return function(node, objectStack) {
var value = valueReader.call(opt_this, node, objectStack);
if(goog.isDef(value)) {
var object = (objectStack[objectStack.length - 1]);
var property = goog.isDef(opt_property) ? opt_property : node.localName;
goog.asserts.assert(goog.isObject(object));
goog.object.set(object, property, value)
}
}
};
ol.xml.makeParsersNS = function(namespaceURIs, parsers, opt_parsersNS) {
return(ol.xml.makeStructureNS(namespaceURIs, parsers, opt_parsersNS))
};
ol.xml.makeChildAppender = function(nodeWriter, opt_this) {
return function(node, value, objectStack) {
nodeWriter.call(opt_this, node, value, objectStack);
var parent = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(parent));
var parentNode = parent.node;
goog.asserts.assert(ol.xml.isNode(parentNode) || ol.xml.isDocument(parentNode));
parentNode.appendChild(node)
}
};
ol.xml.makeArraySerializer = function(nodeWriter, opt_this) {
var serializersNS, nodeFactory;
return function(node, value, objectStack) {
if(!goog.isDef(serializersNS)) {
serializersNS = {};
var serializers = {};
goog.object.set(serializers, node.localName, nodeWriter);
goog.object.set(serializersNS, node.namespaceURI, serializers);
nodeFactory = ol.xml.makeSimpleNodeFactory(node.localName)
}
ol.xml.serialize(serializersNS, nodeFactory, value, objectStack)
}
};
ol.xml.makeSimpleNodeFactory = function(opt_nodeName, opt_namespaceURI) {
var fixedNodeName = opt_nodeName;
return function(value, objectStack, opt_nodeName) {
var context = objectStack[objectStack.length - 1];
var node = context.node;
goog.asserts.assert(ol.xml.isNode(node) || ol.xml.isDocument(node));
var nodeName = fixedNodeName;
if(!goog.isDef(nodeName)) {
nodeName = opt_nodeName
}
var namespaceURI = opt_namespaceURI;
if(!goog.isDef(opt_namespaceURI)) {
namespaceURI = node.namespaceURI
}
goog.asserts.assert(goog.isDef(nodeName));
return ol.xml.createElementNS(namespaceURI, nodeName)
}
};
ol.xml.OBJECT_PROPERTY_NODE_FACTORY = ol.xml.makeSimpleNodeFactory();
ol.xml.makeSequence = function(object, orderedKeys) {
var length = orderedKeys.length;
var sequence = new Array(length);
for(var i = 0;i < length;++i) {
sequence[i] = object[orderedKeys[i]]
}
return sequence
};
ol.xml.makeStructureNS = function(namespaceURIs, structure, opt_structureNS) {
var structureNS = goog.isDef(opt_structureNS) ? opt_structureNS : {};
var i, ii;
for(i = 0, ii = namespaceURIs.length;i < ii;++i) {
structureNS[namespaceURIs[i]] = structure
}
return structureNS
};
ol.xml.parse = function(parsersNS, node, objectStack, opt_this) {
var n;
for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
var parsers = parsersNS[n.namespaceURI];
if(goog.isDef(parsers)) {
var parser = parsers[n.localName];
if(goog.isDef(parser)) {
parser.call(opt_this, n, objectStack)
}
}
}
};
ol.xml.pushParseAndPop = function(object, parsersNS, node, objectStack, opt_this) {
objectStack.push(object);
ol.xml.parse(parsersNS, node, objectStack, opt_this);
return objectStack.pop()
};
ol.xml.serialize = function(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
var length = (goog.isDef(opt_keys) ? opt_keys : values).length;
var value, node;
for(var i = 0;i < length;++i) {
value = values[i];
if(goog.isDef(value)) {
node = nodeFactory.call(opt_this, value, objectStack, goog.isDef(opt_keys) ? opt_keys[i] : undefined);
if(goog.isDef(node)) {
serializersNS[node.namespaceURI][node.localName].call(opt_this, node, value, objectStack)
}
}
}
};
ol.xml.pushSerializeAndPop = function(object, serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
objectStack.push(object);
ol.xml.serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this);
return objectStack.pop()
};
goog.provide("ol.format.XMLFeature");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("ol.format.Feature");
goog.require("ol.format.FormatType");
goog.require("ol.xml");
ol.format.XMLFeature = function() {
goog.base(this)
};
goog.inherits(ol.format.XMLFeature, ol.format.Feature);
ol.format.XMLFeature.prototype.getType = function() {
return ol.format.FormatType.XML
};
ol.format.XMLFeature.prototype.readFeature = function(source) {
if(ol.xml.isDocument(source)) {
return this.readFeatureFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readFeatureFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readFeatureFromDocument(doc)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.format.XMLFeature.prototype.readFeatureFromDocument = function(doc) {
var features = this.readFeaturesFromDocument(doc);
if(features.length > 0) {
return features[0]
}else {
return null
}
};
ol.format.XMLFeature.prototype.readFeatureFromNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.readFeatures = function(source) {
if(ol.xml.isDocument(source)) {
return this.readFeaturesFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readFeaturesFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readFeaturesFromDocument(doc)
}else {
goog.asserts.fail();
return[]
}
}
}
};
ol.format.XMLFeature.prototype.readFeaturesFromDocument = function(doc) {
var features = [];
var n;
for(n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
goog.array.extend(features, this.readFeaturesFromNode(n))
}
}
return features
};
ol.format.XMLFeature.prototype.readFeaturesFromNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.readGeometry = function(source) {
if(ol.xml.isDocument(source)) {
return this.readGeometryFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readGeometryFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readGeometryFromDocument(doc)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.format.XMLFeature.prototype.readGeometryFromDocument = goog.abstractMethod;
ol.format.XMLFeature.prototype.readGeometryFromNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.readProjection = function(source) {
if(ol.xml.isDocument(source)) {
return this.readProjectionFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readProjectionFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readProjectionFromDocument(doc)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.format.XMLFeature.prototype.readProjectionFromDocument = goog.abstractMethod;
ol.format.XMLFeature.prototype.readProjectionFromNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.writeFeature = function(feature) {
return this.writeFeatureNode(feature)
};
ol.format.XMLFeature.prototype.writeFeatureNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.writeFeatures = function(features) {
return this.writeFeaturesNode(features)
};
ol.format.XMLFeature.prototype.writeFeaturesNode = goog.abstractMethod;
ol.format.XMLFeature.prototype.writeGeometry = function(geometry) {
return this.writeGeometryNode(geometry)
};
ol.format.XMLFeature.prototype.writeGeometryNode = goog.abstractMethod;
goog.provide("ol.format.XSD");
goog.require("goog.asserts");
goog.require("goog.string");
goog.require("ol.xml");
ol.format.XSD.NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema";
ol.format.XSD.readBoolean = function(node) {
var s = ol.xml.getAllTextContent(node, false);
return ol.format.XSD.readBooleanString(s)
};
ol.format.XSD.readBooleanString = function(string) {
var m = /^\s*(true|1)|(false|0)\s*$/.exec(string);
if(m) {
return goog.isDef(m[1]) || false
}else {
return undefined
}
};
ol.format.XSD.readDateTime = function(node) {
var s = ol.xml.getAllTextContent(node, false);
var re = /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/;
var m = re.exec(s);
if(m) {
var year = parseInt(m[1], 10);
var month = parseInt(m[2], 10) - 1;
var day = parseInt(m[3], 10);
var hour = parseInt(m[4], 10);
var minute = parseInt(m[5], 10);
var second = parseInt(m[6], 10);
var dateTime = Date.UTC(year, month, day, hour, minute, second) / 1E3;
if(m[7] != "Z") {
var sign = m[8] == "-" ? -1 : 1;
dateTime += sign * 60 * parseInt(m[9], 10);
if(goog.isDef(m[10])) {
dateTime += sign * 60 * 60 * parseInt(m[10], 10)
}
}
return dateTime
}else {
return undefined
}
};
ol.format.XSD.readDecimal = function(node) {
var s = ol.xml.getAllTextContent(node, false);
return ol.format.XSD.readDecimalString(s)
};
ol.format.XSD.readDecimalString = function(string) {
var m = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string);
if(m) {
return parseFloat(m[1])
}else {
return undefined
}
};
ol.format.XSD.readNonNegativeInteger = function(node) {
var s = ol.xml.getAllTextContent(node, false);
return ol.format.XSD.readNonNegativeIntegerString(s)
};
ol.format.XSD.readNonNegativeIntegerString = function(string) {
var m = /^\s*(\d+)\s*$/.exec(string);
if(m) {
return parseInt(m[1], 10)
}else {
return undefined
}
};
ol.format.XSD.readString = function(node) {
var s = ol.xml.getAllTextContent(node, false);
return goog.string.trim(s)
};
ol.format.XSD.writeDateTimeTextNode = function(node, dateTime) {
var date = new Date(dateTime * 1E3);
var string = date.getUTCFullYear() + "-" + goog.string.padNumber(date.getUTCMonth() + 1, 2) + "-" + goog.string.padNumber(date.getUTCDate(), 2) + "T" + goog.string.padNumber(date.getUTCHours(), 2) + ":" + goog.string.padNumber(date.getUTCMinutes(), 2) + ":" + goog.string.padNumber(date.getUTCSeconds(), 2) + "Z";
node.appendChild(ol.xml.DOCUMENT.createTextNode(string))
};
ol.format.XSD.writeDecimalTextNode = function(node, decimal) {
var string = decimal.toPrecision();
node.appendChild(ol.xml.DOCUMENT.createTextNode(string))
};
ol.format.XSD.writeNonNegativeIntegerTextNode = function(node, nonNegativeInteger) {
goog.asserts.assert(nonNegativeInteger >= 0);
goog.asserts.assert(nonNegativeInteger == (nonNegativeInteger | 0));
var string = nonNegativeInteger.toString();
node.appendChild(ol.xml.DOCUMENT.createTextNode(string))
};
ol.format.XSD.writeStringTextNode = function(node, string) {
node.appendChild(ol.xml.DOCUMENT.createTextNode(string))
};
goog.provide("ol.format.GPX");
goog.provide("ol.format.GPX.V1_1");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.format.XMLFeature");
goog.require("ol.format.XSD");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.Point");
goog.require("ol.proj");
goog.require("ol.xml");
ol.format.GPX = function() {
goog.base(this)
};
goog.inherits(ol.format.GPX, ol.format.XMLFeature);
ol.format.GPX.NAMESPACE_URIS_ = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"];
ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
flatCoordinates.push(parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat")));
if(goog.object.containsKey(values, "ele")) {
flatCoordinates.push((goog.object.get(values, "ele")));
goog.object.remove(values, "ele")
}else {
flatCoordinates.push(0)
}
if(goog.object.containsKey(values, "time")) {
flatCoordinates.push((goog.object.get(values, "time")));
goog.object.remove(values, "time")
}else {
flatCoordinates.push(0)
}
return flatCoordinates
};
ol.format.GPX.parseLink_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "link");
var values = (objectStack[objectStack.length - 1]);
var href = node.getAttribute("href");
if(!goog.isNull(href)) {
goog.object.set(values, "link", href)
}
ol.xml.parse(ol.format.GPX.LINK_PARSERS_, node, objectStack)
};
ol.format.GPX.parseRtePt_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "rtept");
var values = ol.xml.pushParseAndPop({}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack);
if(goog.isDef(values)) {
var rteValues = (objectStack[objectStack.length - 1]);
var flatCoordinates = (goog.object.get(rteValues, "flatCoordinates"));
ol.format.GPX.appendCoordinate_(flatCoordinates, node, values)
}
};
ol.format.GPX.parseTrkPt_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "trkpt");
var values = ol.xml.pushParseAndPop({}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack);
if(goog.isDef(values)) {
var trkValues = (objectStack[objectStack.length - 1]);
var flatCoordinates = (goog.object.get(trkValues, "flatCoordinates"));
ol.format.GPX.appendCoordinate_(flatCoordinates, node, values)
}
};
ol.format.GPX.parseTrkSeg_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "trkseg");
var values = (objectStack[objectStack.length - 1]);
ol.xml.parse(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);
var flatCoordinates = (goog.object.get(values, "flatCoordinates"));
var ends = (goog.object.get(values, "ends"));
ends.push(flatCoordinates.length)
};
ol.format.GPX.readRte_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "rte");
var values = ol.xml.pushParseAndPop({"flatCoordinates":[]}, ol.format.GPX.RTE_PARSERS_, node, objectStack);
if(!goog.isDef(values)) {
return undefined
}
var flatCoordinates = (goog.object.get(values, "flatCoordinates"));
goog.object.remove(values, "flatCoordinates");
var geometry = new ol.geom.LineString(null);
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
var feature = new ol.Feature(geometry);
feature.setValues(values);
return feature
};
ol.format.GPX.readTrk_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "trk");
var values = ol.xml.pushParseAndPop({"flatCoordinates":[], "ends":[]}, ol.format.GPX.TRK_PARSERS_, node, objectStack);
if(!goog.isDef(values)) {
return undefined
}
var flatCoordinates = (goog.object.get(values, "flatCoordinates"));
goog.object.remove(values, "flatCoordinates");
var ends = (goog.object.get(values, "ends"));
goog.object.remove(values, "ends");
var geometry = new ol.geom.MultiLineString(null);
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates, ends);
var feature = new ol.Feature(geometry);
feature.setValues(values);
return feature
};
ol.format.GPX.readWpt_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "wpt");
var values = ol.xml.pushParseAndPop({}, ol.format.GPX.WPT_PARSERS_, node, objectStack);
if(!goog.isDef(values)) {
return undefined
}
var coordinates = ol.format.GPX.appendCoordinate_([], node, values);
var geometry = new ol.geom.Point(coordinates, ol.geom.GeometryLayout.XYZM);
var feature = new ol.Feature(geometry);
feature.setValues(values);
return feature
};
ol.format.GPX.FEATURE_READER_ = {"rte":ol.format.GPX.readRte_, "trk":ol.format.GPX.readTrk_, "wpt":ol.format.GPX.readWpt_};
ol.format.GPX.GPX_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"rte":ol.xml.makeArrayPusher(ol.format.GPX.readRte_), "trk":ol.xml.makeArrayPusher(ol.format.GPX.readTrk_), "wpt":ol.xml.makeArrayPusher(ol.format.GPX.readWpt_)});
ol.format.GPX.LINK_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"text":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, "linkText"), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, "linkType")});
ol.format.GPX.RTE_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "number":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
"rtept":ol.format.GPX.parseRtePt_});
ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)});
ol.format.GPX.TRK_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "number":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
"trkseg":ol.format.GPX.parseTrkSeg_});
ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"trkpt":ol.format.GPX.parseTrkPt_});
ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)});
ol.format.GPX.WPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime), "magvar":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "geoidheight":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
"src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "sym":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "fix":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "sat":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "hdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "vdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
"pdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "ageofdgpsdata":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "dgpsid":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger)});
ol.format.GPX.prototype.readFeature;
ol.format.GPX.prototype.readFeatureFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
if(!goog.array.contains(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
return null
}
var featureReader = ol.format.GPX.FEATURE_READER_[node.localName];
if(!goog.isDef(featureReader)) {
return null
}
var feature = featureReader(node, []);
if(!goog.isDef(feature)) {
return null
}
return feature
};
ol.format.GPX.prototype.readFeatures;
ol.format.GPX.prototype.readFeaturesFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
if(!goog.array.contains(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
return[]
}
if(node.localName == "gpx") {
var features = ol.xml.pushParseAndPop(([]), ol.format.GPX.GPX_PARSERS_, node, []);
if(goog.isDef(features)) {
return features
}else {
return[]
}
}
return[]
};
ol.format.GPX.prototype.readProjection;
ol.format.GPX.prototype.readProjectionFromDocument = function(doc) {
return ol.proj.get("EPSG:4326")
};
ol.format.GPX.prototype.readProjectionFromNode = function(node) {
return ol.proj.get("EPSG:4326")
};
ol.format.GPX.writeLink_ = function(node, value, objectStack) {
node.setAttribute("href", value);
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var properties = goog.object.get(context, "properties");
var link = [goog.object.get(properties, "linkText"), goog.object.get(properties, "linkType")];
ol.xml.pushSerializeAndPop(({node:node}), ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, link, objectStack, ol.format.GPX.LINK_SEQUENCE_)
};
ol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var parentNode = context.node;
goog.asserts.assert(ol.xml.isNode(parentNode));
var namespaceURI = parentNode.namespaceURI;
var properties = goog.object.get(context, "properties");
ol.xml.setAttributeNS(node, null, "lat", coordinate[1]);
ol.xml.setAttributeNS(node, null, "lon", coordinate[0]);
var geometryLayout = goog.object.get(context, "geometryLayout");
switch(geometryLayout) {
case ol.geom.GeometryLayout.XYZM:
if(coordinate[3] !== 0) {
goog.object.set(properties, "time", coordinate[3])
}
;
case ol.geom.GeometryLayout.XYZ:
if(coordinate[2] !== 0) {
goog.object.set(properties, "ele", coordinate[2])
}
break;
case ol.geom.GeometryLayout.XYM:
if(coordinate[2] !== 0) {
goog.object.set(properties, "time", coordinate[2])
}
}
var orderedKeys = ol.format.GPX.WPT_TYPE_SEQUENCE_[namespaceURI];
var values = ol.xml.makeSequence(properties, orderedKeys);
ol.xml.pushSerializeAndPop(({node:node, "properties":properties}), ol.format.GPX.WPT_TYPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys)
};
ol.format.GPX.writeRte_ = function(node, feature, objectStack) {
var properties = feature.getProperties();
var context = {node:node, "properties":properties};
var geometry = feature.getGeometry();
if(goog.isDef(geometry)) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
goog.object.set(context, "geometryLayout", geometry.getLayout());
goog.object.set(properties, "rtept", geometry.getCoordinates())
}
var parentNode = objectStack[objectStack.length - 1].node;
var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI];
var values = ol.xml.makeSequence(properties, orderedKeys);
ol.xml.pushSerializeAndPop((context), ol.format.GPX.RTE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys)
};
ol.format.GPX.writeTrk_ = function(node, feature, objectStack) {
var properties = feature.getProperties();
var context = {node:node, "properties":properties};
var geometry = feature.getGeometry();
if(goog.isDef(geometry)) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
goog.object.set(properties, "trkseg", geometry.getLineStrings())
}
var parentNode = objectStack[objectStack.length - 1].node;
var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI];
var values = ol.xml.makeSequence(properties, orderedKeys);
ol.xml.pushSerializeAndPop((context), ol.format.GPX.TRK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys)
};
ol.format.GPX.writeTrkSeg_ = function(node, lineString, objectStack) {
var context = {node:node, "geometryLayout":lineString.getLayout(), "properties":{}};
ol.xml.pushSerializeAndPop((context), ol.format.GPX.TRKSEG_SERIALIZERS_, ol.format.GPX.TRKSEG_NODE_FACTORY_, lineString.getCoordinates(), objectStack)
};
ol.format.GPX.writeWpt_ = function(node, feature, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
goog.object.set(context, "properties", feature.getProperties());
var geometry = feature.getGeometry();
if(goog.isDef(geometry)) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
goog.object.set(context, "geometryLayout", geometry.getLayout());
ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack)
}
};
ol.format.GPX.LINK_SEQUENCE_ = ["text", "type"];
ol.format.GPX.LINK_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"text":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)});
ol.format.GPX.RTE_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["name", "cmt", "desc", "src", "link", "number", "type", "rtept"]);
ol.format.GPX.RTE_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "number":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
"rtept":ol.xml.makeArraySerializer(ol.xml.makeChildAppender(ol.format.GPX.writeWptType_))});
ol.format.GPX.TRK_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["name", "cmt", "desc", "src", "link", "number", "type", "trkseg"]);
ol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "number":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
"trkseg":ol.xml.makeArraySerializer(ol.xml.makeChildAppender(ol.format.GPX.writeTrkSeg_))});
ol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory("trkpt");
ol.format.GPX.TRKSEG_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"trkpt":ol.xml.makeChildAppender(ol.format.GPX.writeWptType_)});
ol.format.GPX.WPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["ele", "time", "magvar", "geoidheight", "name", "cmt", "desc", "src", "link", "sym", "type", "fix", "sat", "hdop", "vdop", "pdop", "ageofdgpsdata", "dgpsid"]);
ol.format.GPX.WPT_TYPE_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "time":ol.xml.makeChildAppender(ol.format.XSD.writeDateTimeTextNode), "magvar":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "geoidheight":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
"desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "sym":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "fix":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "sat":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "hdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
"vdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "pdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "ageofdgpsdata":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "dgpsid":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode)});
ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_ = {"Point":"wpt", "LineString":"rte", "MultiLineString":"trk"};
ol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
goog.asserts.assertInstanceof(value, ol.Feature);
var geometry = value.getGeometry();
if(goog.isDef(geometry)) {
var parentNode = objectStack[objectStack.length - 1].node;
goog.asserts.assert(ol.xml.isNode(parentNode));
return ol.xml.createElementNS(parentNode.namespaceURI, ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_[geometry.getType()])
}
};
ol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"rte":ol.xml.makeChildAppender(ol.format.GPX.writeRte_), "trk":ol.xml.makeChildAppender(ol.format.GPX.writeTrk_), "wpt":ol.xml.makeChildAppender(ol.format.GPX.writeWpt_)});
ol.format.GPX.V1_1 = function() {
goog.base(this)
};
goog.inherits(ol.format.GPX.V1_1, ol.format.GPX);
ol.format.GPX.prototype.writeFeatures;
ol.format.GPX.V1_1.prototype.writeFeaturesNode = function(features) {
var gpx = ol.xml.createElementNS("http://www.topografix.com/GPX/1/1", "gpx");
ol.xml.pushSerializeAndPop(({node:gpx}), ol.format.GPX.GPX_SERIALIZERS_, ol.format.GPX.GPX_NODE_FACTORY_, features, []);
return gpx
};
goog.provide("goog.json");
goog.provide("goog.json.Serializer");
goog.json.isValid_ = function(s) {
if(/^\s*$/.test(s)) {
return false
}
var backslashesRe = /\\["\\\/bfnrtu]/g;
var simpleValuesRe = /"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var openBracketsRe = /(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g;
var remainderRe = /^[\],:{}\s\u2028\u2029]*$/;
return remainderRe.test(s.replace(backslashesRe, "@").replace(simpleValuesRe, "]").replace(openBracketsRe, ""))
};
goog.json.parse = function(s) {
var o = String(s);
if(goog.json.isValid_(o)) {
try {
return(eval("(" + o + ")"))
}catch(ex) {
}
}
throw Error("Invalid JSON string: " + o);
};
goog.json.unsafeParse = function(s) {
return(eval("(" + s + ")"))
};
goog.json.Replacer;
goog.json.Reviver;
goog.json.serialize = function(object, opt_replacer) {
return(new goog.json.Serializer(opt_replacer)).serialize(object)
};
goog.json.Serializer = function(opt_replacer) {
this.replacer_ = opt_replacer
};
goog.json.Serializer.prototype.serialize = function(object) {
var sb = [];
this.serialize_(object, sb);
return sb.join("")
};
goog.json.Serializer.prototype.serialize_ = function(object, sb) {
switch(typeof object) {
case "string":
this.serializeString_((object), sb);
break;
case "number":
this.serializeNumber_((object), sb);
break;
case "boolean":
sb.push(object);
break;
case "undefined":
sb.push("null");
break;
case "object":
if(object == null) {
sb.push("null");
break
}
if(goog.isArray(object)) {
this.serializeArray((object), sb);
break
}
this.serializeObject_((object), sb);
break;
case "function":
break;
default:
throw Error("Unknown type: " + typeof object);
}
};
goog.json.Serializer.charToJsonCharCache_ = {'"':'\\"', "\\":"\\\\", "/":"\\/", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\u000b"};
goog.json.Serializer.charsToReplace_ = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g;
goog.json.Serializer.prototype.serializeString_ = function(s, sb) {
sb.push('"', s.replace(goog.json.Serializer.charsToReplace_, function(c) {
if(c in goog.json.Serializer.charToJsonCharCache_) {
return goog.json.Serializer.charToJsonCharCache_[c]
}
var cc = c.charCodeAt(0);
var rv = "\\u";
if(cc < 16) {
rv += "000"
}else {
if(cc < 256) {
rv += "00"
}else {
if(cc < 4096) {
rv += "0"
}
}
}
return goog.json.Serializer.charToJsonCharCache_[c] = rv + cc.toString(16)
}), '"')
};
goog.json.Serializer.prototype.serializeNumber_ = function(n, sb) {
sb.push(isFinite(n) && !isNaN(n) ? n : "null")
};
goog.json.Serializer.prototype.serializeArray = function(arr, sb) {
var l = arr.length;
sb.push("[");
var sep = "";
for(var i = 0;i < l;i++) {
sb.push(sep);
var value = arr[i];
this.serialize_(this.replacer_ ? this.replacer_.call(arr, String(i), value) : value, sb);
sep = ","
}
sb.push("]")
};
goog.json.Serializer.prototype.serializeObject_ = function(obj, sb) {
sb.push("{");
var sep = "";
for(var key in obj) {
if(Object.prototype.hasOwnProperty.call(obj, key)) {
var value = obj[key];
if(typeof value != "function") {
sb.push(sep);
this.serializeString_(key, sb);
sb.push(":");
this.serialize_(this.replacer_ ? this.replacer_.call(obj, key, value) : value, sb);
sep = ","
}
}
}
sb.push("}")
};
goog.provide("ol.format.JSONFeature");
goog.require("goog.asserts");
goog.require("goog.json");
goog.require("ol.BrowserFeature");
goog.require("ol.format.Feature");
goog.require("ol.format.FormatType");
ol.format.JSONFeature = function() {
goog.base(this)
};
goog.inherits(ol.format.JSONFeature, ol.format.Feature);
ol.format.JSONFeature.prototype.getObject_ = function(source) {
if(goog.isObject(source)) {
return source
}else {
if(goog.isString(source)) {
var object;
if(ol.BrowserFeature.HAS_JSON_PARSE) {
object = (JSON.parse(source))
}else {
object = goog.json.parse(source)
}
return goog.isDef(object) ? object : null
}else {
goog.asserts.fail();
return null
}
}
};
ol.format.JSONFeature.prototype.getType = function() {
return ol.format.FormatType.JSON
};
ol.format.JSONFeature.prototype.readFeature = function(source) {
return this.readFeatureFromObject(this.getObject_(source))
};
ol.format.JSONFeature.prototype.readFeatures = function(source) {
return this.readFeaturesFromObject(this.getObject_(source))
};
ol.format.JSONFeature.prototype.readFeatureFromObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.readFeaturesFromObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.readGeometry = function(source) {
return this.readGeometryFromObject(this.getObject_(source))
};
ol.format.JSONFeature.prototype.readGeometryFromObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.readProjection = function(source) {
return this.readProjectionFromObject(this.getObject_(source))
};
ol.format.JSONFeature.prototype.readProjectionFromObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.writeFeature = function(feature) {
return this.writeFeatureObject(feature)
};
ol.format.JSONFeature.prototype.writeFeatureObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.writeFeatures = function(features) {
return this.writeFeaturesObject(features)
};
ol.format.JSONFeature.prototype.writeFeaturesObject = goog.abstractMethod;
ol.format.JSONFeature.prototype.writeGeometry = function(geometry) {
return this.writeGeometryObject(geometry)
};
ol.format.JSONFeature.prototype.writeGeometryObject = goog.abstractMethod;
goog.provide("ol.format.GeoJSON");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.format.JSONFeature");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.proj");
ol.format.GeoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.defaultProjection_ = ol.proj.get(options.defaultProjection ? options.defaultProjection : "EPSG:4326")
};
goog.inherits(ol.format.GeoJSON, ol.format.JSONFeature);
ol.format.GeoJSON.EXTENSIONS_ = [".geojson"];
ol.format.GeoJSON.readGeometry_ = function(object) {
if(goog.isNull(object)) {
return null
}
var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];
goog.asserts.assert(goog.isDef(geometryReader));
return geometryReader(object)
};
ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(object) {
goog.asserts.assert(object.type == "GeometryCollection");
var geometries = goog.array.map(object.geometries, ol.format.GeoJSON.readGeometry_);
return new ol.geom.GeometryCollection(geometries)
};
ol.format.GeoJSON.readPointGeometry_ = function(object) {
goog.asserts.assert(object.type == "Point");
return new ol.geom.Point(object.coordinates)
};
ol.format.GeoJSON.readLineStringGeometry_ = function(object) {
goog.asserts.assert(object.type == "LineString");
return new ol.geom.LineString(object.coordinates)
};
ol.format.GeoJSON.readMultiLineStringGeometry_ = function(object) {
goog.asserts.assert(object.type == "MultiLineString");
return new ol.geom.MultiLineString(object.coordinates)
};
ol.format.GeoJSON.readMultiPointGeometry_ = function(object) {
goog.asserts.assert(object.type == "MultiPoint");
return new ol.geom.MultiPoint(object.coordinates)
};
ol.format.GeoJSON.readMultiPolygonGeometry_ = function(object) {
goog.asserts.assert(object.type == "MultiPolygon");
return new ol.geom.MultiPolygon(object.coordinates)
};
ol.format.GeoJSON.readPolygonGeometry_ = function(object) {
goog.asserts.assert(object.type == "Polygon");
return new ol.geom.Polygon(object.coordinates)
};
ol.format.GeoJSON.writeGeometry_ = function(geometry) {
var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];
goog.asserts.assert(goog.isDef(geometryWriter));
return geometryWriter(geometry)
};
ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ = function(geometry) {
return({"type":"GeometryCollection", "geometries":[]})
};
ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection);
var geometries = goog.array.map(geometry.getGeometriesArray(), ol.format.GeoJSON.writeGeometry_);
return({"type":"GeometryCollection", "geometries":geometries})
};
ol.format.GeoJSON.writeLineStringGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
return({"type":"LineString", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.writeMultiLineStringGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
goog.asserts.assert(geometry.getType() == ol.geom.GeometryType.MULTI_LINE_STRING);
return({"type":"MultiLineString", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.writeMultiPointGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint);
return({"type":"MultiPoint", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon);
return({"type":"MultiPolygon", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.writePointGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
return({"type":"Point", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.writePolygonGeometry_ = function(geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
return({"type":"Polygon", "coordinates":geometry.getCoordinates()})
};
ol.format.GeoJSON.GEOMETRY_READERS_ = {"Point":ol.format.GeoJSON.readPointGeometry_, "LineString":ol.format.GeoJSON.readLineStringGeometry_, "Polygon":ol.format.GeoJSON.readPolygonGeometry_, "MultiPoint":ol.format.GeoJSON.readMultiPointGeometry_, "MultiLineString":ol.format.GeoJSON.readMultiLineStringGeometry_, "MultiPolygon":ol.format.GeoJSON.readMultiPolygonGeometry_, "GeometryCollection":ol.format.GeoJSON.readGeometryCollectionGeometry_};
ol.format.GeoJSON.GEOMETRY_WRITERS_ = {"Point":ol.format.GeoJSON.writePointGeometry_, "LineString":ol.format.GeoJSON.writeLineStringGeometry_, "Polygon":ol.format.GeoJSON.writePolygonGeometry_, "MultiPoint":ol.format.GeoJSON.writeMultiPointGeometry_, "MultiLineString":ol.format.GeoJSON.writeMultiLineStringGeometry_, "MultiPolygon":ol.format.GeoJSON.writeMultiPolygonGeometry_, "GeometryCollection":ol.format.GeoJSON.writeGeometryCollectionGeometry_, "Circle":ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_};
ol.format.GeoJSON.prototype.getExtensions = function() {
return ol.format.GeoJSON.EXTENSIONS_
};
ol.format.GeoJSON.prototype.readFeature;
ol.format.GeoJSON.prototype.readFeatures;
ol.format.GeoJSON.prototype.readFeatureFromObject = function(object) {
var geoJSONFeature = (object);
goog.asserts.assert(geoJSONFeature.type == "Feature");
var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry);
var feature = new ol.Feature(geometry);
if(goog.isDef(geoJSONFeature.id)) {
feature.setId(geoJSONFeature.id)
}
if(goog.isDef(geoJSONFeature.properties)) {
feature.setValues(geoJSONFeature.properties)
}
return feature
};
ol.format.GeoJSON.prototype.readFeaturesFromObject = function(object) {
var geoJSONObject = (object);
if(geoJSONObject.type == "Feature") {
return[this.readFeatureFromObject(object)]
}else {
if(geoJSONObject.type == "FeatureCollection") {
var geoJSONFeatureCollection = (object);
var features = [];
var geoJSONFeatures = geoJSONFeatureCollection.features;
var i, ii;
for(i = 0, ii = geoJSONFeatures.length;i < ii;++i) {
features.push(this.readFeatureFromObject(geoJSONFeatures[i]))
}
return features
}else {
goog.asserts.fail();
return[]
}
}
};
ol.format.GeoJSON.prototype.readGeometry;
ol.format.GeoJSON.prototype.readGeometryFromObject = function(object) {
return ol.format.GeoJSON.readGeometry_((object))
};
ol.format.GeoJSON.prototype.readProjection = function(object) {
var geoJSONObject = (object);
var crs = geoJSONObject.crs;
if(goog.isDefAndNotNull(crs)) {
if(crs.type == "name") {
return ol.proj.get(crs.properties.name)
}else {
if(crs.type == "EPSG") {
return ol.proj.get("EPSG:" + crs.properties.code)
}else {
goog.asserts.fail();
return null
}
}
}else {
return this.defaultProjection_
}
};
ol.format.GeoJSON.prototype.writeFeature;
ol.format.GeoJSON.prototype.writeFeatureObject = function(feature) {
var object = {"type":"Feature"};
var id = feature.getId();
if(goog.isDefAndNotNull(id)) {
goog.object.set(object, "id", id)
}
var geometry = feature.getGeometry();
if(goog.isDefAndNotNull(geometry)) {
goog.object.set(object, "geometry", ol.format.GeoJSON.writeGeometry_(geometry))
}
var properties = feature.getProperties();
goog.object.remove(properties, "geometry");
if(!goog.object.isEmpty(properties)) {
goog.object.set(object, "properties", properties)
}
return object
};
ol.format.GeoJSON.prototype.writeFeatures;
ol.format.GeoJSON.prototype.writeFeaturesObject = function(features) {
var objects = [];
var i, ii;
for(i = 0, ii = features.length;i < ii;++i) {
objects.push(this.writeFeatureObject(features[i]))
}
return({"type":"FeatureCollection", "features":objects})
};
ol.format.GeoJSON.prototype.writeGeometryObject = ol.format.GeoJSON.writeGeometry_;
goog.provide("goog.string.newlines");
goog.provide("goog.string.newlines.Line");
goog.require("goog.array");
goog.string.newlines.splitLines = function(str, opt_keepNewlines) {
var lines = goog.string.newlines.getLines(str);
return goog.array.map(lines, function(line) {
return opt_keepNewlines ? line.getFullLine() : line.getContent()
})
};
goog.string.newlines.Line = function(string, startLineIndex, endContentIndex, endLineIndex) {
this.string = string;
this.startLineIndex = startLineIndex;
this.endContentIndex = endContentIndex;
this.endLineIndex = endLineIndex
};
goog.string.newlines.Line.prototype.getContent = function() {
return this.string.substring(this.startLineIndex, this.endContentIndex)
};
goog.string.newlines.Line.prototype.getFullLine = function() {
return this.string.substring(this.startLineIndex, this.endLineIndex)
};
goog.string.newlines.Line.prototype.getNewline = function() {
return this.string.substring(this.endContentIndex, this.endLineIndex)
};
goog.string.newlines.getLines = function(str) {
var re = RegExp("\r\n|\r|\n", "g");
var sliceIndex = 0;
var result;
var lines = [];
while(result = re.exec(str)) {
var line = new goog.string.newlines.Line(str, sliceIndex, result.index, result.index + result[0].length);
lines.push(line);
sliceIndex = re.lastIndex
}
if(sliceIndex < str.length) {
var line = new goog.string.newlines.Line(str, sliceIndex, str.length, str.length);
lines.push(line)
}
return lines
};
goog.provide("ol.format.TextFeature");
goog.require("goog.asserts");
goog.require("ol.format.Feature");
goog.require("ol.format.FormatType");
ol.format.TextFeature = function() {
goog.base(this)
};
goog.inherits(ol.format.TextFeature, ol.format.Feature);
ol.format.TextFeature.prototype.getText_ = function(source) {
if(goog.isString(source)) {
return source
}else {
goog.asserts.fail();
return""
}
};
ol.format.TextFeature.prototype.getType = function() {
return ol.format.FormatType.TEXT
};
ol.format.TextFeature.prototype.readFeature = function(source) {
return this.readFeatureFromText(this.getText_(source))
};
ol.format.TextFeature.prototype.readFeatureFromText = goog.abstractMethod;
ol.format.TextFeature.prototype.readFeatures = function(source) {
return this.readFeaturesFromText(this.getText_(source))
};
ol.format.TextFeature.prototype.readFeaturesFromText = goog.abstractMethod;
ol.format.TextFeature.prototype.readGeometry = function(source) {
return this.readGeometryFromText(this.getText_(source))
};
ol.format.TextFeature.prototype.readGeometryFromText = goog.abstractMethod;
ol.format.TextFeature.prototype.readProjection = function(source) {
return this.readProjectionFromText(this.getText_(source))
};
ol.format.TextFeature.prototype.readProjectionFromText = goog.abstractMethod;
ol.format.TextFeature.prototype.writeFeature = function(feature) {
return this.writeFeatureText(feature)
};
ol.format.TextFeature.prototype.writeFeatureText = goog.abstractMethod;
ol.format.TextFeature.prototype.writeFeatures = function(features) {
return this.writeFeaturesText(features)
};
ol.format.TextFeature.prototype.writeFeaturesText = goog.abstractMethod;
ol.format.TextFeature.prototype.writeGeometry = function(geometry) {
return this.writeGeometryText(geometry)
};
ol.format.TextFeature.prototype.writeGeometryText = goog.abstractMethod;
goog.provide("ol.format.IGC");
goog.provide("ol.format.IGCZ");
goog.require("goog.asserts");
goog.require("goog.string");
goog.require("goog.string.newlines");
goog.require("ol.Feature");
goog.require("ol.format.TextFeature");
goog.require("ol.geom.LineString");
goog.require("ol.proj");
ol.format.IGCZ = {BAROMETRIC:"barometric", GPS:"gps", NONE:"none"};
ol.format.IGC = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.altitudeMode_ = goog.isDef(options.altitudeMode) ? options.altitudeMode : ol.format.IGCZ.NONE
};
goog.inherits(ol.format.IGC, ol.format.TextFeature);
ol.format.IGC.EXTENSIONS_ = [".igc"];
ol.format.IGC.B_RECORD_RE_ = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/;
ol.format.IGC.H_RECORD_RE_ = /^H.([A-Z]{3}).*?:(.*)/;
ol.format.IGC.HFDTE_RECORD_RE_ = /^HFDTE(\d{2})(\d{2})(\d{2})/;
ol.format.IGC.prototype.getExtensions = function() {
return ol.format.IGC.EXTENSIONS_
};
ol.format.IGC.prototype.readFeature;
ol.format.IGC.prototype.readFeatureFromText = function(text) {
var altitudeMode = this.altitudeMode_;
var lines = goog.string.newlines.splitLines(text);
var properties = {};
var flatCoordinates = [];
var year = 2E3;
var month = 0;
var day = 1;
var i, ii;
for(i = 0, ii = lines.length;i < ii;++i) {
var line = lines[i];
var m;
if(line.charAt(0) == "B") {
m = ol.format.IGC.B_RECORD_RE_.exec(line);
if(m) {
var hour = parseInt(m[1], 10);
var minute = parseInt(m[2], 10);
var second = parseInt(m[3], 10);
var y = parseInt(m[4], 10) + parseInt(m[5], 10) / 6E4;
if(m[6] == "S") {
y = -y
}
var x = parseInt(m[7], 10) + parseInt(m[8], 10) / 6E4;
if(m[9] == "W") {
x = -x
}
flatCoordinates.push(x, y);
if(altitudeMode != ol.format.IGCZ.NONE) {
var z;
if(altitudeMode == ol.format.IGCZ.GPS) {
z = parseInt(m[11], 10)
}else {
if(altitudeMode == ol.format.IGCZ.BAROMETRIC) {
z = parseInt(m[12], 10)
}else {
goog.asserts.fail();
z = 0
}
}
flatCoordinates.push(z)
}
var dateTime = Date.UTC(year, month, day, hour, minute, second);
flatCoordinates.push(dateTime / 1E3)
}
}else {
if(line.charAt(0) == "H") {
m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line);
if(m) {
day = parseInt(m[1], 10);
month = parseInt(m[2], 10) - 1;
year = 2E3 + parseInt(m[3], 10)
}else {
m = ol.format.IGC.H_RECORD_RE_.exec(line);
if(m) {
properties[m[1]] = goog.string.trim(m[2]);
m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line)
}
}
}
}
}
if(flatCoordinates.length === 0) {
return null
}
var lineString = new ol.geom.LineString(null);
var layout = altitudeMode == ol.format.IGCZ.NONE ? ol.geom.GeometryLayout.XYM : ol.geom.GeometryLayout.XYZM;
lineString.setFlatCoordinates(layout, flatCoordinates);
var feature = new ol.Feature(lineString);
feature.setValues(properties);
return feature
};
ol.format.IGC.prototype.readFeatures;
ol.format.IGC.prototype.readFeaturesFromText = function(text) {
var feature = this.readFeatureFromText(text);
if(!goog.isNull(feature)) {
return[feature]
}else {
return[]
}
};
ol.format.IGC.prototype.readProjection;
ol.format.IGC.prototype.readProjectionFromText = function(text) {
return ol.proj.get("EPSG:4326")
};
goog.provide("ol.format.KML");
goog.require("goog.Uri");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.math");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.Feature");
goog.require("ol.array");
goog.require("ol.feature");
goog.require("ol.format.XMLFeature");
goog.require("ol.format.XSD");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.proj");
goog.require("ol.style.Fill");
goog.require("ol.style.Icon");
goog.require("ol.style.IconAnchorOrigin");
goog.require("ol.style.IconAnchorUnits");
goog.require("ol.style.Image");
goog.require("ol.style.Stroke");
goog.require("ol.style.Style");
goog.require("ol.xml");
ol.format.KMLVec2_;
ol.format.KMLGxTrackObject_;
ol.format.KML = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
var defaultStyle = goog.isDef(options.defaultStyle) ? options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_;
var sharedStyles = {};
var findStyle = function(styleValue) {
if(goog.isArray(styleValue)) {
return styleValue
}else {
if(goog.isString(styleValue)) {
if(!(styleValue in sharedStyles) && "#" + styleValue in sharedStyles) {
styleValue = "#" + styleValue
}
return findStyle(sharedStyles[styleValue])
}else {
return defaultStyle
}
}
};
this.sharedStyles_ = sharedStyles;
this.featureStyleFunction_ = function(resolution) {
var style = (this.get("Style"));
if(goog.isDef(style)) {
return style
}
var styleUrl = (this.get("styleUrl"));
if(goog.isDef(styleUrl)) {
return findStyle(styleUrl)
}
return defaultStyle
}
};
goog.inherits(ol.format.KML, ol.format.XMLFeature);
ol.format.KML.EXTENSIONS_ = [".kml"];
ol.format.KML.GX_NAMESPACE_URIS_ = ["http://www.google.com/kml/ext/2.2"];
ol.format.KML.NAMESPACE_URIS_ = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1", "http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"];
ol.format.KML.DEFAULT_COLOR_ = [255, 255, 255, 1];
ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({color:ol.format.KML.DEFAULT_COLOR_});
ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [2, 20];
ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_ = ol.style.IconAnchorUnits.PIXELS;
ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ = ol.style.IconAnchorUnits.PIXELS;
ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [32, 32];
ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ = "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";
ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({anchor:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_, anchorXUnits:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_, anchorYUnits:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_, crossOrigin:"anonymous", rotation:0, scale:1, size:ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_, src:ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_});
ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({color:ol.format.KML.DEFAULT_COLOR_, width:1});
ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({fill:ol.format.KML.DEFAULT_FILL_STYLE_, image:ol.format.KML.DEFAULT_IMAGE_STYLE_, text:null, stroke:ol.format.KML.DEFAULT_STROKE_STYLE_, zIndex:0});
ol.format.KML.DEFAULT_STYLE_ARRAY_ = [ol.format.KML.DEFAULT_STYLE_];
ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {"fraction":ol.style.IconAnchorUnits.FRACTION, "pixels":ol.style.IconAnchorUnits.PIXELS};
ol.format.KML.readColor_ = function(node) {
var s = ol.xml.getAllTextContent(node, false);
var m = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(s);
if(m) {
var hexColor = m[1];
return[parseInt(hexColor.substr(6, 2), 16), parseInt(hexColor.substr(4, 2), 16), parseInt(hexColor.substr(2, 2), 16), parseInt(hexColor.substr(0, 2), 16) / 255]
}else {
return undefined
}
};
ol.format.KML.readFlatCoordinates_ = function(node) {
var s = ol.xml.getAllTextContent(node, false);
var flatCoordinates = [];
var re = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;
var m;
while(m = re.exec(s)) {
var x = parseFloat(m[1]);
var y = parseFloat(m[2]);
var z = m[3] ? parseFloat(m[3]) : 0;
flatCoordinates.push(x, y, z);
s = s.substr(m[0].length)
}
if(s !== "") {
return undefined
}
return flatCoordinates
};
ol.format.KML.readStyleUrl_ = function(node) {
var s = goog.string.trim(ol.xml.getAllTextContent(node, false));
if(goog.isDefAndNotNull(node.baseURI)) {
return goog.Uri.resolve(node.baseURI, s).toString()
}else {
return s
}
};
ol.format.KML.readURI_ = function(node) {
var s = ol.xml.getAllTextContent(node, false);
if(goog.isDefAndNotNull(node.baseURI)) {
return goog.Uri.resolve(node.baseURI, goog.string.trim(s)).toString()
}else {
return goog.string.trim(s)
}
};
ol.format.KML.readVec2_ = function(node) {
var xunits = node.getAttribute("xunits");
var yunits = node.getAttribute("yunits");
return{x:parseFloat(node.getAttribute("x")), xunits:ol.format.KML.ICON_ANCHOR_UNITS_MAP_[xunits], y:parseFloat(node.getAttribute("y")), yunits:ol.format.KML.ICON_ANCHOR_UNITS_MAP_[yunits]}
};
ol.format.KML.readScale_ = function(node) {
var number = ol.format.XSD.readDecimal(node);
if(goog.isDef(number)) {
return Math.sqrt(number)
}else {
return undefined
}
};
ol.format.KML.readStyleMapValue_ = function(node, objectStack) {
return ol.xml.pushParseAndPop((undefined), ol.format.KML.STYLE_MAP_PARSERS_, node, objectStack)
};
ol.format.KML.IconStyleParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "IconStyle");
var object = ol.xml.pushParseAndPop({}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack);
if(!goog.isDef(object)) {
return
}
var styleObject = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(styleObject));
var IconObject = (goog.object.get(object, "Icon", {}));
var src;
var href = (goog.object.get(IconObject, "href"));
if(goog.isDef(href)) {
src = href
}else {
src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_
}
var anchor, anchorXUnits, anchorYUnits;
var hotSpot = (goog.object.get(object, "hotSpot"));
if(goog.isDef(hotSpot)) {
anchor = [hotSpot.x, hotSpot.y];
anchorXUnits = hotSpot.xunits;
anchorYUnits = hotSpot.yunits
}else {
if(src === ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
anchor = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_;
anchorXUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_;
anchorYUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_
}else {
if(/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(src)) {
anchor = [0.5, 0];
anchorXUnits = ol.style.IconAnchorUnits.FRACTION;
anchorYUnits = ol.style.IconAnchorUnits.FRACTION
}
}
}
var rotation;
var heading = (goog.object.get(object, "heading"));
if(goog.isDef(heading)) {
rotation = goog.math.toRadians(heading)
}
var scale = (goog.object.get(object, "scale"));
var size;
if(src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_
}
var imageStyle = new ol.style.Icon({anchor:anchor, anchorOrigin:ol.style.IconAnchorOrigin.BOTTOM_LEFT, anchorXUnits:anchorXUnits, anchorYUnits:anchorYUnits, crossOrigin:"anonymous", rotation:rotation, scale:scale, size:size, src:src});
goog.object.set(styleObject, "imageStyle", imageStyle)
};
ol.format.KML.LineStyleParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LineStyle");
var object = ol.xml.pushParseAndPop({}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack);
if(!goog.isDef(object)) {
return
}
var styleObject = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(styleObject));
var strokeStyle = new ol.style.Stroke({color:(goog.object.get(object, "color", ol.format.KML.DEFAULT_COLOR_)), width:(goog.object.get(object, "width", 1))});
goog.object.set(styleObject, "strokeStyle", strokeStyle)
};
ol.format.KML.PolyStyleParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "PolyStyle");
var object = ol.xml.pushParseAndPop({}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack);
if(!goog.isDef(object)) {
return
}
var styleObject = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(styleObject));
var fillStyle = new ol.style.Fill({color:(goog.object.get(object, "color", ol.format.KML.DEFAULT_COLOR_))});
goog.object.set(styleObject, "fillStyle", fillStyle);
var fill = (goog.object.get(object, "fill"));
if(goog.isDef(fill)) {
goog.object.set(styleObject, "fill", fill)
}
var outline = (goog.object.get(object, "outline"));
if(goog.isDef(outline)) {
goog.object.set(styleObject, "outline", outline)
}
};
ol.format.KML.readFlatLinearRing_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LinearRing");
return(ol.xml.pushParseAndPop(null, ol.format.KML.FLAT_LINEAR_RING_PARSERS_, node, objectStack))
};
ol.format.KML.gxCoordParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(goog.array.contains(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI));
goog.asserts.assert(node.localName == "coord");
var gxTrackObject = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(gxTrackObject));
var flatCoordinates = gxTrackObject.flatCoordinates;
var s = ol.xml.getAllTextContent(node, false);
var re = /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i;
var m = re.exec(s);
if(m) {
var x = parseFloat(m[1]);
var y = parseFloat(m[2]);
var z = parseFloat(m[3]);
flatCoordinates.push(x, y, z, 0)
}else {
flatCoordinates.push(0, 0, 0, 0)
}
};
ol.format.KML.readGxMultiTrack_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(goog.array.contains(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI));
goog.asserts.assert(node.localName == "MultiTrack");
var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack);
if(!goog.isDef(lineStrings)) {
return undefined
}
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(lineStrings);
return multiLineString
};
ol.format.KML.readGxTrack_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(goog.array.contains(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI));
goog.asserts.assert(node.localName == "Track");
var gxTrackObject = ol.xml.pushParseAndPop(({flatCoordinates:[], whens:[]}), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack);
if(!goog.isDef(gxTrackObject)) {
return undefined
}
var flatCoordinates = gxTrackObject.flatCoordinates;
var whens = gxTrackObject.whens;
goog.asserts.assert(flatCoordinates.length / 4 == whens.length);
var i, ii;
for(i = 0, ii = Math.min(flatCoordinates.length, whens.length);i < ii;++i) {
flatCoordinates[4 * i + 3] = whens[i]
}
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
return lineString
};
ol.format.KML.readIcon_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Icon");
var iconObject = ol.xml.pushParseAndPop({}, ol.format.KML.ICON_PARSERS_, node, objectStack);
if(goog.isDef(iconObject)) {
return iconObject
}else {
return null
}
};
ol.format.KML.readFlatCoordinatesFromNode_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
return(ol.xml.pushParseAndPop(null, ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack))
};
ol.format.KML.readLineString_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LineString");
var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDef(flatCoordinates)) {
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return lineString
}else {
return undefined
}
};
ol.format.KML.readLinearRing_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LinearRing");
var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDef(flatCoordinates)) {
var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, [flatCoordinates.length]);
return polygon
}else {
return undefined
}
};
ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiGeometry");
var geometries = ol.xml.pushParseAndPop(([]), ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack);
if(!goog.isDef(geometries)) {
return null
}
if(geometries.length === 0) {
return new ol.geom.GeometryCollection(geometries)
}
var homogeneous = true;
var type = geometries[0].getType();
var geometry, i, ii;
for(i = 1, ii = geometries.length;i < ii;++i) {
geometry = geometries[i];
if(geometry.getType() != type) {
homogeneous = false;
break
}
}
if(homogeneous) {
var layout;
var flatCoordinates;
if(type == ol.geom.GeometryType.POINT) {
var point = geometries[0];
goog.asserts.assertInstanceof(point, ol.geom.Point);
layout = point.getLayout();
flatCoordinates = point.getFlatCoordinates();
for(i = 1, ii = geometries.length;i < ii;++i) {
geometry = geometries[i];
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
goog.asserts.assert(geometry.getLayout() == layout);
ol.array.safeExtend(flatCoordinates, geometry.getFlatCoordinates())
}
var multiPoint = new ol.geom.MultiPoint(null);
multiPoint.setFlatCoordinates(layout, flatCoordinates);
return multiPoint
}else {
if(type == ol.geom.GeometryType.LINE_STRING) {
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(geometries);
return multiLineString
}else {
if(type == ol.geom.GeometryType.POLYGON) {
var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setPolygons(geometries);
return multiPolygon
}else {
if(type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {
return new ol.geom.GeometryCollection(geometries)
}else {
goog.asserts.fail();
return null
}
}
}
}
}else {
return new ol.geom.GeometryCollection(geometries)
}
};
ol.format.KML.readPoint_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Point");
var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDefAndNotNull(flatCoordinates)) {
var point = new ol.geom.Point(null);
goog.asserts.assert(flatCoordinates.length == 3);
point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return point
}else {
return undefined
}
};
ol.format.KML.readPolygon_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Polygon");
var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack);
if(goog.isDefAndNotNull(flatLinearRings) && !goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length];
var i, ii;
for(i = 1, ii = flatLinearRings.length;i < ii;++i) {
ol.array.safeExtend(flatCoordinates, flatLinearRings[i]);
ends.push(flatCoordinates.length)
}
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
return polygon
}else {
return undefined
}
};
ol.format.KML.readStyle_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Style");
var styleObject = ol.xml.pushParseAndPop({}, ol.format.KML.STYLE_PARSERS_, node, objectStack);
if(!goog.isDef(styleObject)) {
return null
}
var fillStyle = (goog.object.get(styleObject, "fillStyle", ol.format.KML.DEFAULT_FILL_STYLE_));
var fill = (goog.object.get(styleObject, "fill"));
if(goog.isDef(fill) && !fill) {
fillStyle = null
}
var imageStyle = (goog.object.get(styleObject, "imageStyle", ol.format.KML.DEFAULT_IMAGE_STYLE_));
var strokeStyle = (goog.object.get(styleObject, "strokeStyle", ol.format.KML.DEFAULT_STROKE_STYLE_));
var outline = (goog.object.get(styleObject, "outline"));
if(goog.isDef(outline) && !outline) {
strokeStyle = null
}
return[new ol.style.Style({fill:fillStyle, image:imageStyle, stroke:strokeStyle, text:null, zIndex:undefined})]
};
ol.format.KML.DataParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Data");
var name = node.getAttribute("name");
if(!goog.isNull(name)) {
var data = ol.xml.pushParseAndPop(undefined, ol.format.KML.DATA_PARSERS_, node, objectStack);
if(goog.isDef(data)) {
var featureObject = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(featureObject));
goog.object.set(featureObject, name, data)
}
}
};
ol.format.KML.ExtendedDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "ExtendedData");
ol.xml.parse(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack)
};
ol.format.KML.PairDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Pair");
var pairObject = ol.xml.pushParseAndPop({}, ol.format.KML.PAIR_PARSERS_, node, objectStack);
if(!goog.isDef(pairObject)) {
return
}
var key = (goog.object.get(pairObject, "key"));
if(goog.isDef(key) && key == "normal") {
var styleUrl = (goog.object.get(pairObject, "styleUrl"));
if(goog.isDef(styleUrl)) {
objectStack[objectStack.length - 1] = styleUrl
}
var Style = (goog.object.get(pairObject, "Style"));
if(goog.isDef(Style)) {
objectStack[objectStack.length - 1] = Style
}
}
};
ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "StyleMap");
var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
if(!goog.isDef(styleMapValue)) {
return
}
var placemarkObject = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(placemarkObject));
if(goog.isArray(styleMapValue)) {
goog.object.set(placemarkObject, "Style", styleMapValue)
}else {
if(goog.isString(styleMapValue)) {
goog.object.set(placemarkObject, "styleUrl", styleMapValue)
}else {
goog.asserts.fail()
}
}
};
ol.format.KML.SchemaDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "SchemaData");
ol.xml.parse(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack)
};
ol.format.KML.SimpleDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "SimpleData");
var name = node.getAttribute("name");
if(!goog.isNull(name)) {
var data = ol.format.XSD.readString(node);
var featureObject = (objectStack[objectStack.length - 1]);
goog.object.set(featureObject, name, data)
}
};
ol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "innerBoundaryIs");
var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRing)) {
var flatLinearRings = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings));
goog.asserts.assert(flatLinearRings.length > 0);
flatLinearRings.push(flatLinearRing)
}
};
ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "outerBoundaryIs");
var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRing)) {
var flatLinearRings = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings));
goog.asserts.assert(flatLinearRings.length > 0);
flatLinearRings[0] = flatLinearRing
}
};
ol.format.KML.whenParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "when");
var gxTrackObject = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(gxTrackObject));
var whens = gxTrackObject.whens;
var s = ol.xml.getAllTextContent(node, false);
var re = /^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/;
var m = re.exec(s);
if(m) {
var year = parseInt(m[1], 10);
var month = goog.isDef(m[3]) ? parseInt(m[3], 10) - 1 : 0;
var day = goog.isDef(m[5]) ? parseInt(m[5], 10) : 1;
var hour = goog.isDef(m[7]) ? parseInt(m[7], 10) : 0;
var minute = goog.isDef(m[8]) ? parseInt(m[8], 10) : 0;
var second = goog.isDef(m[9]) ? parseInt(m[9], 10) : 0;
var when = Date.UTC(year, month, day, hour, minute, second);
if(goog.isDef(m[10]) && m[10] != "Z") {
var sign = m[11] == "-" ? -1 : 1;
when += sign * 60 * parseInt(m[12], 10);
if(goog.isDef(m[13])) {
when += sign * 60 * 60 * parseInt(m[13], 10)
}
}
whens.push(when)
}else {
whens.push(0)
}
};
ol.format.KML.DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"value":ol.xml.makeReplacer(ol.format.XSD.readString)});
ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Data":ol.format.KML.DataParser_, "SchemaData":ol.format.KML.SchemaDataParser_});
ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"coordinates":ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)});
ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"innerBoundaryIs":ol.format.KML.innerBoundaryIsParser_, "outerBoundaryIs":ol.format.KML.outerBoundaryIsParser_});
ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"when":ol.format.KML.whenParser_}, ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"coord":ol.format.KML.gxCoordParser_}));
ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"coordinates":ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)});
ol.format.KML.ICON_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"href":ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)});
ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Icon":ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_), "heading":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "hotSpot":ol.xml.makeObjectPropertySetter(ol.format.KML.readVec2_), "scale":ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)});
ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LinearRing":ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)});
ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"color":ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), "width":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)});
ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LineString":ol.xml.makeArrayPusher(ol.format.KML.readLineString_), "LinearRing":ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_), "MultiGeometry":ol.xml.makeArrayPusher(ol.format.KML.readMultiGeometry_), "Point":ol.xml.makeArrayPusher(ol.format.KML.readPoint_), "Polygon":ol.xml.makeArrayPusher(ol.format.KML.readPolygon_)});
ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"Track":ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_)});
ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LinearRing":ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)});
ol.format.KML.PAIR_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Style":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), "key":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "styleUrl":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyleUrl_)});
ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"ExtendedData":ol.format.KML.ExtendedDataParser_, "MultiGeometry":ol.xml.makeObjectPropertySetter(ol.format.KML.readMultiGeometry_, "geometry"), "LineString":ol.xml.makeObjectPropertySetter(ol.format.KML.readLineString_, "geometry"), "LinearRing":ol.xml.makeObjectPropertySetter(ol.format.KML.readLinearRing_, "geometry"), "Point":ol.xml.makeObjectPropertySetter(ol.format.KML.readPoint_, "geometry"), "Polygon":ol.xml.makeObjectPropertySetter(ol.format.KML.readPolygon_,
"geometry"), "Style":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), "StyleMap":ol.format.KML.PlacemarkStyleMapParser_, "address":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "description":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "open":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), "phoneNumber":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "styleUrl":ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_),
"visibility":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)}, ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"MultiTrack":ol.xml.makeObjectPropertySetter(ol.format.KML.readGxMultiTrack_, "geometry"), "Track":ol.xml.makeObjectPropertySetter(ol.format.KML.readGxTrack_, "geometry")}));
ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"color":ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), "fill":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), "outline":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)});
ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"SimpleData":ol.format.KML.SimpleDataParser_});
ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"IconStyle":ol.format.KML.IconStyleParser_, "LineStyle":ol.format.KML.LineStyleParser_, "PolyStyle":ol.format.KML.PolyStyleParser_});
ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Pair":ol.format.KML.PairDataParser_});
ol.format.KML.prototype.getExtensions = function() {
return ol.format.KML.EXTENSIONS_
};
ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
var localName = ol.xml.getLocalName(node);
goog.asserts.assert(localName == "Document" || localName == "Folder");
var parsersNS = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Folder":ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this), "Placemark":ol.xml.makeArrayPusher(this.readPlacemark_, this), "Style":goog.bind(this.readSharedStyle_, this), "StyleMap":goog.bind(this.readSharedStyleMap_, this)});
var features = ol.xml.pushParseAndPop(([]), parsersNS, node, objectStack, this);
if(goog.isDef(features)) {
return features
}else {
return undefined
}
};
ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Placemark");
var object = ol.xml.pushParseAndPop({"geometry":null}, ol.format.KML.PLACEMARK_PARSERS_, node, objectStack);
if(!goog.isDef(object)) {
return undefined
}
var feature = new ol.Feature;
var id = node.getAttribute("id");
if(!goog.isNull(id)) {
feature.setId(id)
}
feature.setValues(object);
feature.setStyle(this.featureStyleFunction_);
return feature
};
ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Style");
var id = node.getAttribute("id");
if(!goog.isNull(id)) {
var style = ol.format.KML.readStyle_(node, objectStack);
if(goog.isDef(style)) {
var styleUri;
if(goog.isDefAndNotNull(node.baseURI)) {
styleUri = goog.Uri.resolve(node.baseURI, "#" + id).toString()
}else {
styleUri = "#" + id
}
this.sharedStyles_[styleUri] = style
}
}
};
ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "StyleMap");
var id = node.getAttribute("id");
if(goog.isNull(id)) {
return
}
var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
if(!goog.isDef(styleMapValue)) {
return
}
var styleUri;
if(goog.isDefAndNotNull(node.baseURI)) {
styleUri = goog.Uri.resolve(node.baseURI, "#" + id).toString()
}else {
styleUri = "#" + id
}
this.sharedStyles_[styleUri] = styleMapValue
};
ol.format.KML.prototype.readFeature;
ol.format.KML.prototype.readFeatureFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
if(!goog.array.contains(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
return null
}
goog.asserts.assert(node.localName == "Placemark");
var feature = this.readPlacemark_(node, []);
if(goog.isDef(feature)) {
return feature
}else {
return null
}
};
ol.format.KML.prototype.readFeatures;
ol.format.KML.prototype.readFeaturesFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
if(!goog.array.contains(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
return[]
}
var features;
var localName = ol.xml.getLocalName(node);
if(localName == "Document" || localName == "Folder") {
features = this.readDocumentOrFolder_(node, []);
if(goog.isDef(features)) {
return features
}else {
return[]
}
}else {
if(localName == "Placemark") {
var feature = this.readPlacemark_(node, []);
if(goog.isDef(feature)) {
return[feature]
}else {
return[]
}
}else {
if(localName == "kml") {
features = [];
var n;
for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
var fs = this.readFeaturesFromNode(n);
if(goog.isDef(fs)) {
goog.array.extend(features, fs)
}
}
return features
}else {
return[]
}
}
}
};
ol.format.KML.prototype.readName = function(source) {
if(ol.xml.isDocument(source)) {
return this.readNameFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readNameFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readNameFromDocument(doc)
}else {
goog.asserts.fail();
return undefined
}
}
}
};
ol.format.KML.prototype.readNameFromDocument = function(doc) {
var n;
for(n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
var name = this.readNameFromNode(n);
if(goog.isDef(name)) {
return name
}
}
}
return undefined
};
ol.format.KML.prototype.readNameFromNode = function(node) {
var n;
for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
if(goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && n.localName == "name") {
return ol.format.XSD.readString(n)
}
}
for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
var localName = ol.xml.getLocalName(n);
if(goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && (localName == "Document" || localName == "Folder" || localName == "Placemark" || localName == "kml")) {
var name = this.readNameFromNode(n);
if(goog.isDef(name)) {
return name
}
}
}
return undefined
};
ol.format.KML.prototype.readProjection;
ol.format.KML.prototype.readProjectionFromDocument = function(doc) {
return ol.proj.get("EPSG:4326")
};
ol.format.KML.prototype.readProjectionFromNode = function(node) {
return ol.proj.get("EPSG:4326")
};
goog.provide("ol.format.OSMXML");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.format.XMLFeature");
goog.require("ol.geom.LineString");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.proj");
goog.require("ol.xml");
ol.format.OSMXML = function() {
goog.base(this)
};
goog.inherits(ol.format.OSMXML, ol.format.XMLFeature);
ol.format.OSMXML.EXTENSIONS_ = [".osm"];
ol.format.OSMXML.prototype.getExtensions = function() {
return ol.format.OSMXML.EXTENSIONS_
};
ol.format.OSMXML.readNode_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "node");
var state = (objectStack[objectStack.length - 1]);
var id = node.getAttribute("id");
var coordinates = ([parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat"))]);
goog.object.set(state.nodes, id, coordinates);
var values = ol.xml.pushParseAndPop({tags:{}}, ol.format.OSMXML.NODE_PARSERS_, node, objectStack);
if(!goog.object.isEmpty(values.tags)) {
var geometry = new ol.geom.Point(coordinates);
var feature = new ol.Feature(geometry);
feature.setId(id);
feature.setValues(values.tags);
state.features.push(feature)
}
};
ol.format.OSMXML.readWay_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "way");
var id = node.getAttribute("id");
var values = ol.xml.pushParseAndPop({ndrefs:[], tags:{}}, ol.format.OSMXML.WAY_PARSERS_, node, objectStack);
var state = (objectStack[objectStack.length - 1]);
var flatCoordinates = ([]);
for(var i = 0, ii = values.ndrefs.length;i < ii;i++) {
var point = goog.object.get(state.nodes, values.ndrefs[i]);
goog.array.extend(flatCoordinates, point)
}
var geometry;
if(values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) {
geometry = new ol.geom.Polygon(null);
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length])
}else {
geometry = new ol.geom.LineString(null);
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates)
}
var feature = new ol.Feature(geometry);
feature.setId(id);
feature.setValues(values.tags);
state.features.push(feature)
};
ol.format.OSMXML.readNd_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "nd");
var values = (objectStack[objectStack.length - 1]);
values.ndrefs.push(node.getAttribute("ref"))
};
ol.format.OSMXML.readTag_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "tag");
var values = (objectStack[objectStack.length - 1]);
goog.object.set(values.tags, node.getAttribute("k"), node.getAttribute("v"))
};
ol.format.OSMXML.NAMESPACE_URIS_ = [null];
ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"nd":ol.format.OSMXML.readNd_, "tag":ol.format.OSMXML.readTag_});
ol.format.OSMXML.PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"node":ol.format.OSMXML.readNode_, "way":ol.format.OSMXML.readWay_});
ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"tag":ol.format.OSMXML.readTag_});
ol.format.OSMXML.prototype.readFeaturesFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
if(node.localName == "osm") {
var state = ol.xml.pushParseAndPop({nodes:{}, features:[]}, ol.format.OSMXML.PARSERS_, node, []);
if(goog.isDef(state.features)) {
return state.features
}
}
return[]
};
ol.format.OSMXML.prototype.readProjectionFromDocument = function(doc) {
return ol.proj.get("EPSG:4326")
};
ol.format.OSMXML.prototype.readProjectionFromNode = function(node) {
return ol.proj.get("EPSG:4326")
};
goog.provide("ol.format.TopoJSON");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.format.JSONFeature");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.proj");
ol.format.TopoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.defaultProjection_ = ol.proj.get(options.defaultProjection || "EPSG:4326")
};
goog.inherits(ol.format.TopoJSON, ol.format.JSONFeature);
ol.format.TopoJSON.EXTENSIONS_ = [".topojson"];
ol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) {
var coordinates = [];
var index, arc;
var i, ii;
var j, jj;
for(i = 0, ii = indices.length;i < ii;++i) {
index = indices[i];
if(i > 0) {
coordinates.pop()
}
if(index >= 0) {
arc = arcs[index]
}else {
arc = arcs[~index].slice().reverse()
}
coordinates.push.apply(coordinates, arc)
}
for(j = 0, jj = coordinates.length;j < jj;++j) {
coordinates[j] = coordinates[j].slice()
}
return coordinates
};
ol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) {
var coordinates = object.coordinates;
if(!goog.isNull(scale) && !goog.isNull(translate)) {
ol.format.TopoJSON.transformVertex_(coordinates, scale, translate)
}
return new ol.geom.Point(coordinates)
};
ol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale, translate) {
var coordinates = object.coordinates;
var i, ii;
if(!goog.isNull(scale) && !goog.isNull(translate)) {
for(i = 0, ii = coordinates.length;i < ii;++i) {
ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate)
}
}
return new ol.geom.MultiPoint(coordinates)
};
ol.format.TopoJSON.readLineStringGeometry_ = function(object, arcs) {
var coordinates = ol.format.TopoJSON.concatenateArcs_(object.arcs, arcs);
return new ol.geom.LineString(coordinates)
};
ol.format.TopoJSON.readMultiLineStringGeometry_ = function(object, arcs) {
var coordinates = [];
var i, ii;
for(i = 0, ii = object.arcs.length;i < ii;++i) {
coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs)
}
return new ol.geom.MultiLineString(coordinates)
};
ol.format.TopoJSON.readPolygonGeometry_ = function(object, arcs) {
var coordinates = [];
var i, ii;
for(i = 0, ii = object.arcs.length;i < ii;++i) {
coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs)
}
return new ol.geom.Polygon(coordinates)
};
ol.format.TopoJSON.readMultiPolygonGeometry_ = function(object, arcs) {
var coordinates = [];
var polyArray, ringCoords, j, jj;
var i, ii;
for(i = 0, ii = object.arcs.length;i < ii;++i) {
polyArray = object.arcs[i];
ringCoords = [];
for(j = 0, jj = polyArray.length;j < jj;++j) {
ringCoords[j] = ol.format.TopoJSON.concatenateArcs_(polyArray[j], arcs)
}
coordinates[i] = ringCoords
}
return new ol.geom.MultiPolygon(coordinates)
};
ol.format.TopoJSON.prototype.getExtensions = function() {
return ol.format.TopoJSON.EXTENSIONS_
};
ol.format.TopoJSON.readFeaturesFromGeometryCollection_ = function(collection, arcs, scale, translate) {
var geometries = collection.geometries;
var features = [];
var i, ii;
for(i = 0, ii = geometries.length;i < ii;++i) {
features[i] = ol.format.TopoJSON.readFeatureFromGeometry_(geometries[i], arcs, scale, translate)
}
return features
};
ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs, scale, translate) {
var geometry;
var type = object.type;
var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type];
goog.asserts.assert(goog.isDef(geometryReader));
if(type === "Point" || type === "MultiPoint") {
geometry = geometryReader(object, scale, translate)
}else {
geometry = geometryReader(object, arcs)
}
var feature = new ol.Feature;
feature.setGeometry(geometry);
if(goog.isDef(object.id)) {
feature.setId(object.id)
}
if(goog.isDef(object.properties)) {
feature.setValues(object.properties)
}
return feature
};
ol.format.TopoJSON.prototype.readFeatures;
ol.format.TopoJSON.prototype.readFeaturesFromObject = function(object) {
if(object.type == "Topology") {
var topoJSONTopology = (object);
var transform, scale = null, translate = null;
if(goog.isDef(topoJSONTopology.transform)) {
transform = (topoJSONTopology.transform);
scale = transform.scale;
translate = transform.translate
}
var arcs = topoJSONTopology.arcs;
if(goog.isDef(transform)) {
ol.format.TopoJSON.transformArcs_(arcs, scale, translate)
}
var features = [];
var topoJSONFeatures = goog.object.getValues(topoJSONTopology.objects);
var i, ii;
var feature;
for(i = 0, ii = topoJSONFeatures.length;i < ii;++i) {
if(topoJSONFeatures[i].type === "GeometryCollection") {
feature = (topoJSONFeatures[i]);
features.push.apply(features, ol.format.TopoJSON.readFeaturesFromGeometryCollection_(feature, arcs, scale, translate))
}else {
feature = (topoJSONFeatures[i]);
features.push(ol.format.TopoJSON.readFeatureFromGeometry_(feature, arcs, scale, translate))
}
}
return features
}else {
return[]
}
};
ol.format.TopoJSON.transformArcs_ = function(arcs, scale, translate) {
var i, ii;
for(i = 0, ii = arcs.length;i < ii;++i) {
ol.format.TopoJSON.transformArc_(arcs[i], scale, translate)
}
};
ol.format.TopoJSON.transformArc_ = function(arc, scale, translate) {
var x = 0;
var y = 0;
var vertex;
var i, ii;
for(i = 0, ii = arc.length;i < ii;++i) {
vertex = arc[i];
x += vertex[0];
y += vertex[1];
vertex[0] = x;
vertex[1] = y;
ol.format.TopoJSON.transformVertex_(vertex, scale, translate)
}
};
ol.format.TopoJSON.transformVertex_ = function(vertex, scale, translate) {
vertex[0] = vertex[0] * scale[0] + translate[0];
vertex[1] = vertex[1] * scale[1] + translate[1]
};
ol.format.TopoJSON.prototype.readProjection = function(object) {
return this.defaultProjection_
};
ol.format.TopoJSON.GEOMETRY_READERS_ = {"Point":ol.format.TopoJSON.readPointGeometry_, "LineString":ol.format.TopoJSON.readLineStringGeometry_, "Polygon":ol.format.TopoJSON.readPolygonGeometry_, "MultiPoint":ol.format.TopoJSON.readMultiPointGeometry_, "MultiLineString":ol.format.TopoJSON.readMultiLineStringGeometry_, "MultiPolygon":ol.format.TopoJSON.readMultiPolygonGeometry_};
goog.provide("ol.format.GML");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.NodeType");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.Feature");
goog.require("ol.array");
goog.require("ol.extent");
goog.require("ol.format.XMLFeature");
goog.require("ol.format.XSD");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.LineString");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.proj");
goog.require("ol.xml");
ol.format.GML = function(opt_options) {
var options = (goog.isDef(opt_options) ? opt_options : {});
this.featureType_ = options.featureType;
this.featureNS_ = options.featureNS;
this.srsName_ = options.srsName;
this.surface_ = goog.isDef(options.surface) ? options.surface : false;
this.curve_ = goog.isDef(options.curve) ? options.curve : false;
this.multiCurve_ = goog.isDef(options.multiCurve) ? options.multiCurve : true;
this.multiSurface_ = goog.isDef(options.multiSurface) ? options.multiSurface : true;
this.schemaLocation_ = goog.isDef(options.schemaLocation) ? options.schemaLocation : ol.format.GML.schemaLocation_;
goog.base(this)
};
goog.inherits(ol.format.GML, ol.format.XMLFeature);
ol.format.GML.schemaLocation_ = "http://www.opengis.net/gml " + "http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/" + "1.0.0/gmlsf.xsd";
ol.format.GML.readFeatures_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
var localName = ol.xml.getLocalName(node);
var context = objectStack[0];
goog.asserts.assert(goog.isObject(context));
var featureType = goog.object.get(context, "featureType");
var features;
if(localName == "FeatureCollection") {
features = ol.xml.pushParseAndPop(null, ol.format.GML.FEATURE_COLLECTION_PARSERS, node, objectStack)
}else {
if(localName == "featureMembers" || localName == "featureMember") {
var parsers = {};
var parsersNS = {};
parsers[featureType] = localName == "featureMembers" ? ol.xml.makeArrayPusher(ol.format.GML.readFeature_) : ol.xml.makeReplacer(ol.format.GML.readFeature_);
parsersNS[goog.object.get(context, "featureNS")] = parsers;
features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack)
}
}
if(!goog.isDef(features)) {
features = []
}
return features
};
ol.format.GML.FEATURE_COLLECTION_PARSERS = {"http://www.opengis.net/gml":{"featureMember":ol.xml.makeArrayPusher(ol.format.GML.readFeatures_), "featureMembers":ol.xml.makeReplacer(ol.format.GML.readFeatures_)}};
ol.format.GML.readGeometry = function(node, objectStack) {
var context = objectStack[0];
goog.asserts.assert(goog.isObject(context));
goog.object.set(context, "srsName", node.firstElementChild.getAttribute("srsName"));
var geometry = ol.xml.pushParseAndPop((null), ol.format.GML.GEOMETRY_PARSERS_, node, objectStack);
if(goog.isDefAndNotNull(geometry)) {
return geometry
}else {
return undefined
}
};
ol.format.GML.readFeature_ = function(node, objectStack) {
var n;
var fid = node.getAttribute("fid") || ol.xml.getAttributeNS(node, "http://www.opengis.net/gml", "id");
var values = {}, geometryName;
for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
if(n.childNodes.length === 0 || n.childNodes.length === 1 && n.firstChild.nodeType === 3) {
var value = ol.xml.getAllTextContent(n, false);
if(goog.string.isEmpty(value)) {
value = undefined
}
values[ol.xml.getLocalName(n)] = value
}else {
geometryName = ol.xml.getLocalName(n);
values[geometryName] = ol.format.GML.readGeometry(n, objectStack)
}
}
var feature = new ol.Feature(values);
if(goog.isDef(geometryName)) {
feature.setGeometryName(geometryName)
}
if(fid) {
feature.setId(fid)
}
return feature
};
ol.format.GML.readPoint_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Point");
var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDefAndNotNull(flatCoordinates)) {
var point = new ol.geom.Point(null);
goog.asserts.assert(flatCoordinates.length == 3);
point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return point
}
};
ol.format.GML.readMultiPoint_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiPoint");
var coordinates = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTIPOINT_PARSERS_, node, objectStack);
if(goog.isDef(coordinates)) {
return new ol.geom.MultiPoint(coordinates)
}else {
return undefined
}
};
ol.format.GML.readMultiLineString_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiLineString");
var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTILINESTRING_PARSERS_, node, objectStack);
if(goog.isDef(lineStrings)) {
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(lineStrings);
return multiLineString
}else {
return undefined
}
};
ol.format.GML.readMultiCurve_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiCurve");
var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTICURVE_PARSERS_, node, objectStack);
if(goog.isDef(lineStrings)) {
var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(lineStrings);
return multiLineString
}else {
return undefined
}
};
ol.format.GML.readMultiSurface_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiSurface");
var polygons = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTISURFACE_PARSERS_, node, objectStack);
if(goog.isDef(polygons)) {
var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setPolygons(polygons);
return multiPolygon
}else {
return undefined
}
};
ol.format.GML.readMultiPolygon_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MultiPolygon");
var polygons = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTIPOLYGON_PARSERS_, node, objectStack);
if(goog.isDef(polygons)) {
var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setPolygons(polygons);
return multiPolygon
}else {
return undefined
}
};
ol.format.GML.pointMemberParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "pointMember" || node.localName == "pointMembers");
ol.xml.parse(ol.format.GML.POINTMEMBER_PARSERS_, node, objectStack)
};
ol.format.GML.lineStringMemberParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "lineStringMember" || node.localName == "lineStringMembers");
ol.xml.parse(ol.format.GML.LINESTRINGMEMBER_PARSERS_, node, objectStack)
};
ol.format.GML.curveMemberParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "curveMember" || node.localName == "curveMembers");
ol.xml.parse(ol.format.GML.CURVEMEMBER_PARSERS_, node, objectStack)
};
ol.format.GML.surfaceMemberParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "surfaceMember" || node.localName == "surfaceMembers");
ol.xml.parse(ol.format.GML.SURFACEMEMBER_PARSERS_, node, objectStack)
};
ol.format.GML.polygonMemberParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "polygonMember" || node.localName == "polygonMembers");
ol.xml.parse(ol.format.GML.POLYGONMEMBER_PARSERS_, node, objectStack)
};
ol.format.GML.readLineString_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LineString");
var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDefAndNotNull(flatCoordinates)) {
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return lineString
}else {
return undefined
}
};
ol.format.GML.readPatch_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "patches");
return ol.xml.pushParseAndPop(([null]), ol.format.GML.PATCHES_PARSERS_, node, objectStack)
};
ol.format.GML.readSegment_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "segments");
return ol.xml.pushParseAndPop(([null]), ol.format.GML.SEGMENTS_PARSERS_, node, objectStack)
};
ol.format.GML.readPolygonPatch_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "PolygonPatch");
return ol.xml.pushParseAndPop(([null]), ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack)
};
ol.format.GML.readLineStringSegment_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LineStringSegment");
return ol.xml.pushParseAndPop(([null]), ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack)
};
ol.format.GML.interiorParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "interior");
var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.GML.RING_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRing)) {
var flatLinearRings = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings));
goog.asserts.assert(flatLinearRings.length > 0);
flatLinearRings.push(flatLinearRing)
}
};
ol.format.GML.exteriorParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "exterior");
var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.GML.RING_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRing)) {
var flatLinearRings = (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings));
goog.asserts.assert(flatLinearRings.length > 0);
flatLinearRings[0] = flatLinearRing
}
};
ol.format.GML.readFlatLinearRing_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LinearRing");
var ring = ol.xml.pushParseAndPop((null), ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack);
if(goog.isDefAndNotNull(ring)) {
return ring
}else {
return undefined
}
};
ol.format.GML.readLinearRing_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "LinearRing");
var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack);
if(goog.isDef(flatCoordinates)) {
var ring = new ol.geom.LinearRing(null);
ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return ring
}else {
return undefined
}
};
ol.format.GML.readPolygon_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Polygon");
var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRings) && !goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length];
var i, ii;
for(i = 1, ii = flatLinearRings.length;i < ii;++i) {
ol.array.safeExtend(flatCoordinates, flatLinearRings[i]);
ends.push(flatCoordinates.length)
}
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
return polygon
}else {
return undefined
}
};
ol.format.GML.readSurface_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Surface");
var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.GML.SURFACE_PARSERS_, node, objectStack);
if(goog.isDef(flatLinearRings) && !goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length];
var i, ii;
for(i = 1, ii = flatLinearRings.length;i < ii;++i) {
ol.array.safeExtend(flatCoordinates, flatLinearRings[i]);
ends.push(flatCoordinates.length)
}
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
return polygon
}else {
return undefined
}
};
ol.format.GML.readCurve_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Curve");
var flatCoordinates = ol.xml.pushParseAndPop(([null]), ol.format.GML.CURVE_PARSERS_, node, objectStack);
if(goog.isDef(flatCoordinates)) {
var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return lineString
}else {
return undefined
}
};
ol.format.GML.readEnvelope_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Envelope");
var flatCoordinates = ol.xml.pushParseAndPop(([null]), ol.format.GML.ENVELOPE_PARSERS_, node, objectStack);
return ol.extent.createOrUpdate(flatCoordinates[1][0], flatCoordinates[1][1], flatCoordinates[2][0], flatCoordinates[2][1])
};
ol.format.GML.readFlatCoordinatesFromNode_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
return(ol.xml.pushParseAndPop(null, ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack))
};
ol.format.GML.readFlatPos_ = function(node, objectStack) {
var s = ol.xml.getAllTextContent(node, false);
var re = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*/;
var flatCoordinates = [];
var m;
while(m = re.exec(s)) {
flatCoordinates.push(parseFloat(m[1]));
s = s.substr(m[0].length)
}
if(s !== "") {
return undefined
}
var context = objectStack[0];
goog.asserts.assert(goog.isObject(context));
var containerSrs = goog.object.get(context, "srsName");
var axisOrientation = "enu";
if(!goog.isNull(containerSrs)) {
var proj = ol.proj.get(containerSrs);
axisOrientation = proj.getAxisOrientation()
}
if(axisOrientation === "neu") {
var i, ii;
for(i = 0, ii = flatCoordinates.length;i < ii;i += 3) {
var y = flatCoordinates[i];
var x = flatCoordinates[i + 1];
flatCoordinates[i] = x;
flatCoordinates[i + 1] = y
}
}
var len = flatCoordinates.length;
if(len == 2) {
flatCoordinates.push(0)
}
if(len === 0) {
return undefined
}
return flatCoordinates
};
ol.format.GML.readFlatPosList_ = function(node, objectStack) {
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, "");
var context = objectStack[0];
goog.asserts.assert(goog.isObject(context));
var containerSrs = goog.object.get(context, "srsName");
var containerDimension = node.parentNode.getAttribute("srsDimension");
var axisOrientation = "enu";
if(!goog.isNull(containerSrs)) {
var proj = ol.proj.get(containerSrs);
axisOrientation = proj.getAxisOrientation()
}
var coords = s.split(/\s+/);
var dim = 2;
if(!goog.isNull(node.getAttribute("srsDimension"))) {
dim = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("srsDimension"))
}else {
if(!goog.isNull(node.getAttribute("dimension"))) {
dim = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("dimension"))
}else {
if(!goog.isNull(containerDimension)) {
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension)
}
}
}
var x, y, z;
var flatCoordinates = [];
for(var i = 0, ii = coords.length;i < ii;i += dim) {
x = parseFloat(coords[i]);
y = parseFloat(coords[i + 1]);
z = dim === 3 ? parseFloat(coords[i + 2]) : 0;
if(axisOrientation.substr(0, 2) === "en") {
flatCoordinates.push(x, y, z)
}else {
flatCoordinates.push(y, x, z)
}
}
return flatCoordinates
};
ol.format.GML.GEOMETRY_PARSERS_ = {"http://www.opengis.net/gml":{"Point":ol.xml.makeReplacer(ol.format.GML.readPoint_), "MultiPoint":ol.xml.makeReplacer(ol.format.GML.readMultiPoint_), "LineString":ol.xml.makeReplacer(ol.format.GML.readLineString_), "MultiLineString":ol.xml.makeReplacer(ol.format.GML.readMultiLineString_), "LinearRing":ol.xml.makeReplacer(ol.format.GML.readLinearRing_), "Polygon":ol.xml.makeReplacer(ol.format.GML.readPolygon_), "MultiPolygon":ol.xml.makeReplacer(ol.format.GML.readMultiPolygon_),
"Surface":ol.xml.makeReplacer(ol.format.GML.readSurface_), "MultiSurface":ol.xml.makeReplacer(ol.format.GML.readMultiSurface_), "Curve":ol.xml.makeReplacer(ol.format.GML.readCurve_), "MultiCurve":ol.xml.makeReplacer(ol.format.GML.readMultiCurve_), "Envelope":ol.xml.makeReplacer(ol.format.GML.readEnvelope_)}};
ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {"http://www.opengis.net/gml":{"pos":ol.xml.makeReplacer(ol.format.GML.readFlatPos_), "posList":ol.xml.makeReplacer(ol.format.GML.readFlatPosList_)}};
ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_ = {"http://www.opengis.net/gml":{"interior":ol.format.GML.interiorParser_, "exterior":ol.format.GML.exteriorParser_}};
ol.format.GML.MULTIPOINT_PARSERS_ = {"http://www.opengis.net/gml":{"pointMember":ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_), "pointMembers":ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_)}};
ol.format.GML.MULTILINESTRING_PARSERS_ = {"http://www.opengis.net/gml":{"lineStringMember":ol.xml.makeArrayPusher(ol.format.GML.lineStringMemberParser_), "lineStringMembers":ol.xml.makeArrayPusher(ol.format.GML.lineStringMemberParser_)}};
ol.format.GML.MULTICURVE_PARSERS_ = {"http://www.opengis.net/gml":{"curveMember":ol.xml.makeArrayPusher(ol.format.GML.curveMemberParser_), "curveMembers":ol.xml.makeArrayPusher(ol.format.GML.curveMemberParser_)}};
ol.format.GML.MULTISURFACE_PARSERS_ = {"http://www.opengis.net/gml":{"surfaceMember":ol.xml.makeArrayPusher(ol.format.GML.surfaceMemberParser_), "surfaceMembers":ol.xml.makeArrayPusher(ol.format.GML.surfaceMemberParser_)}};
ol.format.GML.MULTIPOLYGON_PARSERS_ = {"http://www.opengis.net/gml":{"polygonMember":ol.xml.makeArrayPusher(ol.format.GML.polygonMemberParser_), "polygonMembers":ol.xml.makeArrayPusher(ol.format.GML.polygonMemberParser_)}};
ol.format.GML.POINTMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Point":ol.xml.makeArrayPusher(ol.format.GML.readFlatCoordinatesFromNode_)}};
ol.format.GML.LINESTRINGMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"LineString":ol.xml.makeArrayPusher(ol.format.GML.readLineString_)}};
ol.format.GML.CURVEMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"LineString":ol.xml.makeArrayPusher(ol.format.GML.readLineString_), "Curve":ol.xml.makeArrayPusher(ol.format.GML.readCurve_)}};
ol.format.GML.SURFACEMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Polygon":ol.xml.makeArrayPusher(ol.format.GML.readPolygon_), "Surface":ol.xml.makeArrayPusher(ol.format.GML.readSurface_)}};
ol.format.GML.POLYGONMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Polygon":ol.xml.makeArrayPusher(ol.format.GML.readPolygon_)}};
ol.format.GML.SURFACE_PARSERS_ = {"http://www.opengis.net/gml":{"patches":ol.xml.makeReplacer(ol.format.GML.readPatch_)}};
ol.format.GML.CURVE_PARSERS_ = {"http://www.opengis.net/gml":{"segments":ol.xml.makeReplacer(ol.format.GML.readSegment_)}};
ol.format.GML.ENVELOPE_PARSERS_ = {"http://www.opengis.net/gml":{"lowerCorner":ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_), "upperCorner":ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_)}};
ol.format.GML.PATCHES_PARSERS_ = {"http://www.opengis.net/gml":{"PolygonPatch":ol.xml.makeReplacer(ol.format.GML.readPolygonPatch_)}};
ol.format.GML.SEGMENTS_PARSERS_ = {"http://www.opengis.net/gml":{"LineStringSegment":ol.xml.makeReplacer(ol.format.GML.readLineStringSegment_)}};
ol.format.GML.RING_PARSERS_ = {"http://www.opengis.net/gml":{"LinearRing":ol.xml.makeReplacer(ol.format.GML.readFlatLinearRing_)}};
ol.format.GML.prototype.readGeometryFromNode = function(node) {
var geometry = ol.format.GML.readGeometry(node, [{}]);
return goog.isDef(geometry) ? geometry : null
};
ol.format.GML.prototype.readFeaturesFromNode = function(node) {
var objectStack = [{"featureType":this.featureType_, "featureNS":this.featureNS_}];
return ol.format.GML.readFeatures_(node, objectStack)
};
ol.format.GML.writePos_ = function(node, value, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
var axisOrientation = "enu";
if(goog.isDefAndNotNull(srsName)) {
axisOrientation = ol.proj.get(srsName).getAxisOrientation()
}
var point = value.getCoordinates();
var coords;
if(axisOrientation.substr(0, 2) === "en") {
coords = point[0] + " " + point[1]
}else {
coords = point[1] + " " + point[0]
}
ol.format.XSD.writeStringTextNode(node, coords)
};
ol.format.GML.getCoords_ = function(point, opt_srsName) {
var axisOrientation = "enu";
if(goog.isDefAndNotNull(opt_srsName)) {
axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation()
}
return axisOrientation.substr(0, 2) === "en" ? point[0] + " " + point[1] : point[1] + " " + point[0]
};
ol.format.GML.writePosList_ = function(node, value, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
var points = value.getCoordinates();
var len = points.length;
var parts = new Array(len);
var point;
for(var i = 0;i < len;++i) {
point = points[i];
parts[i] = ol.format.GML.getCoords_(point, srsName)
}
ol.format.XSD.writeStringTextNode(node, parts.join(" "))
};
ol.format.GML.writePoint_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
var pos = ol.xml.createElementNS(node.namespaceURI, "pos");
node.appendChild(pos);
ol.format.GML.writePos_(pos, geometry, objectStack)
};
ol.format.GML.ENVELOPE_SERIALIZERS_ = {"http://www.opengis.net/gml":{"lowerCorner":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "upperCorner":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)}};
ol.format.GML.writeEnvelope = function(node, extent, objectStack) {
goog.asserts.assert(extent.length == 4);
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(goog.isDef(srsName)) {
node.setAttribute("srsName", srsName)
}
var keys = ["lowerCorner", "upperCorner"];
var values = [extent[0] + " " + extent[1], extent[2] + " " + extent[3]];
ol.xml.pushSerializeAndPop(({node:node}), ol.format.GML.ENVELOPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, keys)
};
ol.format.GML.writeLinearRing_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
var posList = ol.xml.createElementNS(node.namespaceURI, "posList");
node.appendChild(posList);
ol.format.GML.writePosList_(posList, geometry, objectStack)
};
ol.format.GML.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
var context = objectStack[objectStack.length - 1];
var parentNode = context.node;
goog.asserts.assert(goog.isObject(context));
var exteriorWritten = goog.object.get(context, "exteriorWritten");
if(!goog.isDef(exteriorWritten)) {
goog.object.set(context, "exteriorWritten", true)
}
return ol.xml.createElementNS(parentNode.namespaceURI, goog.isDef(exteriorWritten) ? "interior" : "exterior")
};
ol.format.GML.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(node.nodeName !== "PolygonPatch" && goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
if(node.nodeName === "Polygon" || node.nodeName === "PolygonPatch") {
var rings = geometry.getLinearRings();
ol.xml.pushSerializeAndPop({node:node, srsName:srsName}, ol.format.GML.RING_SERIALIZERS_, ol.format.GML.RING_NODE_FACTORY_, rings, objectStack)
}else {
if(node.nodeName === "Surface") {
var patches = ol.xml.createElementNS(node.namespaceURI, "patches");
node.appendChild(patches);
ol.format.GML.writeSurfacePatches_(patches, geometry, objectStack)
}
}
};
ol.format.GML.writeCurveOrLineString_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(node.nodeName !== "LineStringSegment" && goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
if(node.nodeName === "LineString" || node.nodeName === "LineStringSegment") {
var posList = ol.xml.createElementNS(node.namespaceURI, "posList");
node.appendChild(posList);
ol.format.GML.writePosList_(posList, geometry, objectStack)
}else {
if(node.nodeName === "Curve") {
var segments = ol.xml.createElementNS(node.namespaceURI, "segments");
node.appendChild(segments);
ol.format.GML.writeCurveSegments_(segments, geometry, objectStack)
}
}
};
ol.format.GML.writeMultiSurfaceOrPolygon_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
var surface = goog.object.get(context, "surface");
if(goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
var polygons = geometry.getPolygons();
ol.xml.pushSerializeAndPop({node:node, srsName:srsName, surface:surface}, ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_, ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons, objectStack)
};
ol.format.GML.writeMultiPoint_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
if(goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
var points = geometry.getPoints();
ol.xml.pushSerializeAndPop({node:node, srsName:srsName}, ol.format.GML.POINTMEMBER_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("pointMember"), points, objectStack)
};
ol.format.GML.writeMultiCurveOrLineString_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var srsName = goog.object.get(context, "srsName");
var curve = goog.object.get(context, "curve");
if(goog.isDefAndNotNull(srsName)) {
node.setAttribute("srsName", srsName)
}
var lines = geometry.getLineStrings();
ol.xml.pushSerializeAndPop({node:node, srsName:srsName, curve:curve}, ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_, ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines, objectStack)
};
ol.format.GML.writeRing_ = function(node, ring, objectStack) {
var linearRing = ol.xml.createElementNS(node.namespaceURI, "LinearRing");
node.appendChild(linearRing);
ol.format.GML.writeLinearRing_(linearRing, ring, objectStack)
};
ol.format.GML.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(polygon, objectStack);
if(goog.isDef(child)) {
node.appendChild(child);
ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack)
}
};
ol.format.GML.writePointMember_ = function(node, point, objectStack) {
var child = ol.xml.createElementNS(node.namespaceURI, "Point");
node.appendChild(child);
ol.format.GML.writePoint_(child, point, objectStack)
};
ol.format.GML.writeLineStringOrCurveMember_ = function(node, line, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(line, objectStack);
if(goog.isDef(child)) {
node.appendChild(child);
ol.format.GML.writeCurveOrLineString_(child, line, objectStack)
}
};
ol.format.GML.writeSurfacePatches_ = function(node, polygon, objectStack) {
var child = ol.xml.createElementNS(node.namespaceURI, "PolygonPatch");
node.appendChild(child);
ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack)
};
ol.format.GML.writeCurveSegments_ = function(node, line, objectStack) {
var child = ol.xml.createElementNS(node.namespaceURI, "LineStringSegment");
node.appendChild(child);
ol.format.GML.writeCurveOrLineString_(child, line, objectStack)
};
ol.format.GML.writeGeometry = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var item = goog.object.clone(context);
item.node = node;
ol.xml.pushSerializeAndPop((item), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], objectStack)
};
ol.format.GML.writeFeature = function(node, feature, objectStack) {
var fid = feature.getId();
if(goog.isDef(fid)) {
node.setAttribute("fid", fid)
}
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featureNS = goog.object.get(context, "featureNS");
var geometryName = feature.getGeometryName();
if(!goog.isDef(context.serializers)) {
context.serializers = {};
context.serializers[featureNS] = {}
}
var properties = feature.getProperties();
var keys = [], values = [];
for(var key in properties) {
var value = properties[key];
if(!goog.isNull(value)) {
keys.push(key);
values.push(value);
if(key == geometryName) {
if(!(key in context.serializers[featureNS])) {
context.serializers[featureNS][key] = ol.xml.makeChildAppender(ol.format.GML.writeGeometry)
}
}else {
if(!(key in context.serializers[featureNS])) {
context.serializers[featureNS][key] = ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
}
}
}
}
var item = goog.object.clone(context);
item.node = node;
ol.xml.pushSerializeAndPop((item), context.serializers, ol.xml.makeSimpleNodeFactory(undefined, featureNS), values, objectStack, keys)
};
ol.format.GML.writeFeatureMembers_ = function(node, features, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featureType = goog.object.get(context, "featureType");
var featureNS = goog.object.get(context, "featureNS");
var serializers = {};
serializers[featureNS] = {};
serializers[featureNS][featureType] = ol.xml.makeChildAppender(ol.format.GML.writeFeature);
var item = goog.object.clone(context);
item.node = node;
ol.xml.pushSerializeAndPop((item), serializers, ol.xml.makeSimpleNodeFactory(featureType, featureNS), features, objectStack)
};
ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"surfaceMember":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygonMember_), "polygonMember":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygonMember_)}};
ol.format.GML.POINTMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"pointMember":ol.xml.makeChildAppender(ol.format.GML.writePointMember_)}};
ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"lineStringMember":ol.xml.makeChildAppender(ol.format.GML.writeLineStringOrCurveMember_), "curveMember":ol.xml.makeChildAppender(ol.format.GML.writeLineStringOrCurveMember_)}};
ol.format.GML.RING_SERIALIZERS_ = {"http://www.opengis.net/gml":{"exterior":ol.xml.makeChildAppender(ol.format.GML.writeRing_), "interior":ol.xml.makeChildAppender(ol.format.GML.writeRing_)}};
ol.format.GML.GEOMETRY_SERIALIZERS_ = {"http://www.opengis.net/gml":{"Curve":ol.xml.makeChildAppender(ol.format.GML.writeCurveOrLineString_), "MultiCurve":ol.xml.makeChildAppender(ol.format.GML.writeMultiCurveOrLineString_), "Point":ol.xml.makeChildAppender(ol.format.GML.writePoint_), "MultiPoint":ol.xml.makeChildAppender(ol.format.GML.writeMultiPoint_), "LineString":ol.xml.makeChildAppender(ol.format.GML.writeCurveOrLineString_), "MultiLineString":ol.xml.makeChildAppender(ol.format.GML.writeMultiCurveOrLineString_),
"LinearRing":ol.xml.makeChildAppender(ol.format.GML.writeLinearRing_), "Polygon":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), "MultiPolygon":ol.xml.makeChildAppender(ol.format.GML.writeMultiSurfaceOrPolygon_), "Surface":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), "MultiSurface":ol.xml.makeChildAppender(ol.format.GML.writeMultiSurfaceOrPolygon_), "Envelope":ol.xml.makeChildAppender(ol.format.GML.writeEnvelope)}};
ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {"MultiLineString":"lineStringMember", "MultiCurve":"curveMember", "MultiPolygon":"polygonMember", "MultiSurface":"surfaceMember"};
ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
var parentNode = objectStack[objectStack.length - 1].node;
goog.asserts.assert(ol.xml.isNode(parentNode));
return ol.xml.createElementNS("http://www.opengis.net/gml", ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName])
};
ol.format.GML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var multiSurface = goog.object.get(context, "multiSurface");
var surface = goog.object.get(context, "surface");
var curve = goog.object.get(context, "curve");
var multiCurve = goog.object.get(context, "multiCurve");
var parentNode = objectStack[objectStack.length - 1].node;
goog.asserts.assert(ol.xml.isNode(parentNode));
var nodeName;
if(!goog.isArray(value)) {
goog.asserts.assertInstanceof(value, ol.geom.Geometry);
nodeName = value.getType();
if(nodeName === "MultiPolygon" && multiSurface === true) {
nodeName = "MultiSurface"
}else {
if(nodeName === "Polygon" && surface === true) {
nodeName = "Surface"
}else {
if(nodeName === "LineString" && curve === true) {
nodeName = "Curve"
}else {
if(nodeName === "MultiLineString" && multiCurve === true) {
nodeName = "MultiCurve"
}
}
}
}
}else {
nodeName = "Envelope"
}
return ol.xml.createElementNS("http://www.opengis.net/gml", nodeName)
};
ol.format.GML.prototype.writeGeometryNode = function(geometry) {
var geom = ol.xml.createElementNS("http://www.opengis.net/gml", "geom");
var context = {node:geom, srsName:this.srsName_, curve:this.curve_, surface:this.surface_, multiSurface:this.multiSurface_, multiCurve:this.multiCurve_};
ol.xml.pushSerializeAndPop((context), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], []);
return geom
};
ol.format.GML.prototype.writeFeaturesNode = function(features) {
var node = ol.xml.createElementNS("http://www.opengis.net/gml", "featureMembers");
ol.xml.setAttributeNS(node, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation_);
var context = {srsName:this.srsName_, curve:this.curve_, surface:this.surface_, multiSurface:this.multiSurface_, multiCurve:this.multiCurve_, featureNS:this.featureNS_, featureType:this.featureType_};
ol.format.GML.writeFeatureMembers_(node, features, [context]);
return node
};
goog.provide("ol.format.WFS");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.object");
goog.require("ol.format.GML");
goog.require("ol.format.XMLFeature");
goog.require("ol.format.XSD");
goog.require("ol.geom.Geometry");
goog.require("ol.proj");
goog.require("ol.xml");
ol.format.WFS = function(opt_options) {
var options = (goog.isDef(opt_options) ? opt_options : {});
this.featureType_ = options.featureType;
this.featureNS_ = options.featureNS;
this.schemaLocation_ = goog.isDef(options.schemaLocation) ? options.schemaLocation : ol.format.WFS.schemaLocation_;
goog.base(this)
};
goog.inherits(ol.format.WFS, ol.format.XMLFeature);
ol.format.WFS.FeatureCollectionMetadata;
ol.format.WFS.TransactionResponse;
ol.format.WFS.schemaLocation_ = "http://www.opengis.net/wfs " + "http://schemas.opengis.net/wfs/1.1.0/wfs.xsd";
ol.format.WFS.prototype.readFeaturesFromNode = function(node) {
var objectStack = [{"featureType":this.featureType_, "featureNS":this.featureNS_}];
var features = ol.xml.pushParseAndPop([], ol.format.GML.FEATURE_COLLECTION_PARSERS, node, objectStack);
if(!goog.isDef(features)) {
features = []
}
return features
};
ol.format.WFS.prototype.readTransactionResponse = function(source) {
if(ol.xml.isDocument(source)) {
return this.readTransactionResponseFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readTransactionResponseFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readTransactionResponseFromDocument(doc)
}else {
goog.asserts.fail();
return undefined
}
}
}
};
ol.format.WFS.prototype.readFeatureCollectionMetadata = function(source) {
if(ol.xml.isDocument(source)) {
return this.readFeatureCollectionMetadataFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readFeatureCollectionMetadataFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readFeatureCollectionMetadataFromDocument(doc)
}else {
goog.asserts.fail();
return undefined
}
}
}
};
ol.format.WFS.prototype.readFeatureCollectionMetadataFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT);
for(var n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFeatureCollectionMetadataFromNode(n)
}
}
return undefined
};
ol.format.WFS.FEATURE_COLLECTION_PARSERS_ = {"http://www.opengis.net/gml":{"boundedBy":ol.xml.makeObjectPropertySetter(ol.format.GML.readGeometry, "bounds")}};
ol.format.WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "FeatureCollection");
var result = {};
var value = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("numberOfFeatures"));
goog.object.set(result, "numberOfFeatures", value);
return ol.xml.pushParseAndPop((result), ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, [])
};
ol.format.WFS.TRANSACTION_SUMMARY_PARSERS_ = {"http://www.opengis.net/wfs":{"totalInserted":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "totalUpdated":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "totalDeleted":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger)}};
ol.format.WFS.readTransactionSummary_ = function(node, objectStack) {
return ol.xml.pushParseAndPop({}, ol.format.WFS.TRANSACTION_SUMMARY_PARSERS_, node, objectStack)
};
ol.format.WFS.OGC_FID_PARSERS_ = {"http://www.opengis.net/ogc":{"FeatureId":ol.xml.makeArrayPusher(function(node, objectStack) {
return node.getAttribute("fid")
})}};
ol.format.WFS.fidParser_ = function(node, objectStack) {
ol.xml.parse(ol.format.WFS.OGC_FID_PARSERS_, node, objectStack)
};
ol.format.WFS.INSERT_RESULTS_PARSERS_ = {"http://www.opengis.net/wfs":{"Feature":ol.format.WFS.fidParser_}};
ol.format.WFS.readInsertResults_ = function(node, objectStack) {
return ol.xml.pushParseAndPop([], ol.format.WFS.INSERT_RESULTS_PARSERS_, node, objectStack)
};
ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_ = {"http://www.opengis.net/wfs":{"TransactionSummary":ol.xml.makeObjectPropertySetter(ol.format.WFS.readTransactionSummary_, "transactionSummary"), "InsertResults":ol.xml.makeObjectPropertySetter(ol.format.WFS.readInsertResults_, "insertIds")}};
ol.format.WFS.prototype.readTransactionResponseFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT);
for(var n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readTransactionResponseFromNode(n)
}
}
return undefined
};
ol.format.WFS.prototype.readTransactionResponseFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "TransactionResponse");
return ol.xml.pushParseAndPop(({}), ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_, node, [])
};
ol.format.WFS.QUERY_SERIALIZERS_ = {"http://www.opengis.net/wfs":{"PropertyName":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)}};
ol.format.WFS.writeFeature_ = function(node, feature, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featureType = goog.object.get(context, "featureType");
var featureNS = goog.object.get(context, "featureNS");
var child = ol.xml.createElementNS(featureNS, featureType);
node.appendChild(child);
ol.format.GML.writeFeature(child, feature, objectStack)
};
ol.format.WFS.writeOgcFidFilter_ = function(node, fid, objectStack) {
var filter = ol.xml.createElementNS("http://www.opengis.net/ogc", "Filter");
var child = ol.xml.createElementNS("http://www.opengis.net/ogc", "FeatureId");
filter.appendChild(child);
child.setAttribute("fid", fid);
node.appendChild(filter)
};
ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featureType = goog.object.get(context, "featureType");
var featurePrefix = goog.object.get(context, "featurePrefix");
node.setAttribute("typeName", featurePrefix + ":" + featureType);
var fid = feature.getId();
if(goog.isDef(fid)) {
ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack)
}
};
ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featureType = goog.object.get(context, "featureType");
var featurePrefix = goog.object.get(context, "featurePrefix");
node.setAttribute("typeName", featurePrefix + ":" + featureType);
var fid = feature.getId();
if(goog.isDef(fid)) {
var keys = feature.getKeys();
var values = [];
for(var i = 0, ii = keys.length;i < ii;i++) {
var value = feature.get(keys[i]);
if(goog.isDef(value)) {
values.push({name:keys[i], value:value})
}
}
ol.xml.pushSerializeAndPop({node:node}, ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Property"), values, objectStack);
ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack)
}
};
ol.format.WFS.writeProperty_ = function(node, pair, objectStack) {
var name = ol.xml.createElementNS("http://www.opengis.net/wfs", "Name");
node.appendChild(name);
ol.format.XSD.writeStringTextNode(name, pair.name);
if(goog.isDefAndNotNull(pair.value)) {
var value = ol.xml.createElementNS("http://www.opengis.net/wfs", "Value");
node.appendChild(value);
if(pair.value instanceof ol.geom.Geometry) {
ol.format.GML.writeGeometry(value, pair.value, objectStack)
}else {
ol.format.XSD.writeStringTextNode(value, pair.value)
}
}
};
ol.format.WFS.writeNative_ = function(node, nativeElement, objectStack) {
if(goog.isDef(nativeElement.vendorId)) {
node.setAttribute("vendorId", nativeElement.vendorId)
}
if(goog.isDef(nativeElement.safeToIgnore)) {
node.setAttribute("safeToIgnore", nativeElement.safeToIgnore)
}
if(goog.isDef(nativeElement.value)) {
ol.format.XSD.writeStringTextNode(node, nativeElement.value)
}
};
ol.format.WFS.TRANSACTION_SERIALIZERS_ = {"http://www.opengis.net/wfs":{"Insert":ol.xml.makeChildAppender(ol.format.WFS.writeFeature_), "Update":ol.xml.makeChildAppender(ol.format.WFS.writeUpdate_), "Delete":ol.xml.makeChildAppender(ol.format.WFS.writeDelete_), "Property":ol.xml.makeChildAppender(ol.format.WFS.writeProperty_), "Native":ol.xml.makeChildAppender(ol.format.WFS.writeNative_)}};
ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var featurePrefix = goog.object.get(context, "featurePrefix");
var featureNS = goog.object.get(context, "featureNS");
var propertyNames = goog.object.get(context, "propertyNames");
var srsName = goog.object.get(context, "srsName");
var prefix = goog.isDef(featurePrefix) ? featurePrefix + ":" : "";
node.setAttribute("typeName", prefix + featureType);
if(goog.isDef(srsName)) {
node.setAttribute("srsName", srsName)
}
if(goog.isDef(featureNS)) {
node.setAttribute("xmlns:" + featurePrefix, featureNS)
}
var item = goog.object.clone(context);
item.node = node;
ol.xml.pushSerializeAndPop(item, ol.format.WFS.QUERY_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("PropertyName"), propertyNames, objectStack);
var bbox = goog.object.get(context, "bbox");
if(goog.isDef(bbox)) {
var child = ol.xml.createElementNS("http://www.opengis.net/ogc", "Filter");
ol.format.WFS.writeOgcBBOX_(child, bbox, objectStack);
node.appendChild(child)
}
};
ol.format.WFS.writeOgcPropertyName_ = function(node, value, objectStack) {
var property = ol.xml.createElementNS("http://www.opengis.net/ogc", "PropertyName");
ol.format.XSD.writeStringTextNode(property, value);
node.appendChild(property)
};
ol.format.WFS.writeOgcBBOX_ = function(node, bbox, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var geometryName = goog.object.get(context, "geometryName");
var bboxNode = ol.xml.createElementNS("http://www.opengis.net/ogc", "BBOX");
node.appendChild(bboxNode);
ol.format.WFS.writeOgcPropertyName_(bboxNode, geometryName, objectStack);
ol.format.GML.writeGeometry(bboxNode, bbox, objectStack)
};
ol.format.WFS.GETFEATURE_SERIALIZERS_ = {"http://www.opengis.net/wfs":{"Query":ol.xml.makeChildAppender(ol.format.WFS.writeQuery_)}};
ol.format.WFS.writeGetFeature_ = function(node, featureTypes, objectStack) {
var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context));
var item = goog.object.clone(context);
item.node = node;
ol.xml.pushSerializeAndPop(item, ol.format.WFS.GETFEATURE_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Query"), featureTypes, objectStack)
};
ol.format.WFS.prototype.writeGetFeature = function(options) {
var node = ol.xml.createElementNS("http://www.opengis.net/wfs", "GetFeature");
node.setAttribute("service", "WFS");
node.setAttribute("version", "1.1.0");
if(goog.isDef(options)) {
if(goog.isDef(options.handle)) {
node.setAttribute("handle", options.handle)
}
if(goog.isDef(options.outputFormat)) {
node.setAttribute("outputFormat", options.outputFormat)
}
if(goog.isDef(options.maxFeatures)) {
node.setAttribute("maxFeatures", options.maxFeatures)
}
if(goog.isDef(options.resultType)) {
node.setAttribute("resultType", options.resultType)
}
if(goog.isDef(options.startIndex)) {
node.setAttribute("startIndex", options.startIndex)
}
if(goog.isDef(options.count)) {
node.setAttribute("count", options.count)
}
}
ol.xml.setAttributeNS(node, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation_);
var context = {node:node, srsName:options.srsName, featureNS:goog.isDef(options.featureNS) ? options.featureNS : this.featureNS_, featurePrefix:options.featurePrefix, geometryName:options.geometryName, bbox:options.bbox, propertyNames:goog.isDef(options.propertyNames) ? options.propertyNames : []};
goog.asserts.assert(goog.isArray(options.featureTypes));
ol.format.WFS.writeGetFeature_(node, options.featureTypes, [context]);
return node
};
ol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes, options) {
var objectStack = [];
var node = ol.xml.createElementNS("http://www.opengis.net/wfs", "Transaction");
node.setAttribute("service", "WFS");
node.setAttribute("version", "1.1.0");
if(goog.isDef(options)) {
if(goog.isDef(options.handle)) {
node.setAttribute("handle", options.handle)
}
}
ol.xml.setAttributeNS(node, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation_);
if(goog.isDefAndNotNull(inserts)) {
ol.xml.pushSerializeAndPop({node:node, featureNS:options.featureNS, featureType:options.featureType}, ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Insert"), inserts, objectStack)
}
if(goog.isDefAndNotNull(updates)) {
ol.xml.pushSerializeAndPop({node:node, featureNS:options.featureNS, featureType:options.featureType, featurePrefix:options.featurePrefix}, ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Update"), updates, objectStack)
}
if(goog.isDefAndNotNull(deletes)) {
ol.xml.pushSerializeAndPop({node:node, featureNS:options.featureNS, featureType:options.featureType, featurePrefix:options.featurePrefix}, ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Delete"), deletes, objectStack)
}
if(goog.isDef(options.nativeElements)) {
ol.xml.pushSerializeAndPop({node:node, featureNS:options.featureNS, featureType:options.featureType, featurePrefix:options.featurePrefix}, ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("Native"), options.nativeElements, objectStack)
}
return node
};
ol.format.WFS.prototype.readProjection;
ol.format.WFS.prototype.readProjectionFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT);
for(var n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readProjectionFromNode(n)
}
}
return null
};
ol.format.WFS.prototype.readProjectionFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "FeatureCollection");
node = node.firstElementChild.firstElementChild;
if(goog.isDefAndNotNull(node)) {
for(var n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) {
if(!(n.childNodes.length === 0 || n.childNodes.length === 1 && n.firstChild.nodeType === 3)) {
var objectStack = [{}];
ol.format.GML.readGeometry(n, objectStack);
return ol.proj.get(objectStack.pop().srsName)
}
}
}
return null
};
goog.provide("ol.format.XLink");
ol.format.XLink.NAMESPACE_URI = "http://www.w3.org/1999/xlink";
ol.format.XLink.readHref = function(node) {
return node.getAttributeNS(ol.format.XLink.NAMESPACE_URI, "href")
};
goog.provide("ol.format.XML");
goog.require("goog.asserts");
goog.require("ol.xml");
ol.format.XML = function() {
};
ol.format.XML.prototype.read = function(source) {
if(ol.xml.isDocument(source)) {
return this.readFromDocument((source))
}else {
if(ol.xml.isNode(source)) {
return this.readFromNode((source))
}else {
if(goog.isString(source)) {
var doc = ol.xml.load(source);
return this.readFromDocument(doc)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.format.XML.prototype.readFromDocument = goog.abstractMethod;
ol.format.XML.prototype.readFromNode = goog.abstractMethod;
goog.provide("ol.format.WMSCapabilities");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.NodeType");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.format.XLink");
goog.require("ol.format.XML");
goog.require("ol.format.XSD");
goog.require("ol.xml");
ol.format.WMSCapabilities = function() {
goog.base(this);
this.version = undefined
};
goog.inherits(ol.format.WMSCapabilities, ol.format.XML);
ol.format.WMSCapabilities.prototype.read;
ol.format.WMSCapabilities.prototype.readFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT);
for(var n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) {
if(n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFromNode(n)
}
}
return null
};
ol.format.WMSCapabilities.prototype.readFromNode = function(node) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "WMS_Capabilities" || node.localName == "WMT_MS_Capabilities");
this.version = goog.string.trim(node.getAttribute("version"));
goog.asserts.assertString(this.version);
var wmsCapabilityObject = ol.xml.pushParseAndPop({"version":this.version}, ol.format.WMSCapabilities.PARSERS_, node, []);
return goog.isDef(wmsCapabilityObject) ? wmsCapabilityObject : null
};
ol.format.WMSCapabilities.readAttribution_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Attribution");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readBoundingBox_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "BoundingBox");
var extent = [ol.format.XSD.readDecimalString(node.getAttribute("minx")), ol.format.XSD.readDecimalString(node.getAttribute("miny")), ol.format.XSD.readDecimalString(node.getAttribute("maxx")), ol.format.XSD.readDecimalString(node.getAttribute("maxy"))];
var resolutions = [ol.format.XSD.readDecimalString(node.getAttribute("resx")), ol.format.XSD.readDecimalString(node.getAttribute("resy"))];
return{"crs":node.getAttribute("CRS"), "extent":extent, "res":resolutions}
};
ol.format.WMSCapabilities.readEXGeographicBoundingBox_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "EX_GeographicBoundingBox");
var geographicBoundingBox = ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_, node, objectStack);
if(!goog.isDef(geographicBoundingBox)) {
return undefined
}
var westBoundLongitude = (goog.object.get(geographicBoundingBox, "westBoundLongitude"));
var southBoundLatitude = (goog.object.get(geographicBoundingBox, "southBoundLatitude"));
var eastBoundLongitude = (goog.object.get(geographicBoundingBox, "eastBoundLongitude"));
var northBoundLatitude = (goog.object.get(geographicBoundingBox, "northBoundLatitude"));
if(!goog.isDef(westBoundLongitude) || !goog.isDef(southBoundLatitude) || !goog.isDef(eastBoundLongitude) || !goog.isDef(northBoundLatitude)) {
return undefined
}
return[westBoundLongitude, southBoundLatitude, eastBoundLongitude, northBoundLatitude]
};
ol.format.WMSCapabilities.readCapability_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Capability");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.CAPABILITY_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readService_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Service");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.SERVICE_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readContactInformation_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "ContactInformation");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readContactPersonPrimary_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "ContactPersonPrimary");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readContactAddress_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "ContactAddress");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readException_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Exception");
return ol.xml.pushParseAndPop([], ol.format.WMSCapabilities.EXCEPTION_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readCapabilityLayer_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Layer");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readLayer_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Layer");
var parentLayerObject = (objectStack[objectStack.length - 1]);
var layerObject = (ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack));
if(!goog.isDef(layerObject)) {
return undefined
}
var queryable = ol.format.XSD.readBooleanString(node.getAttribute("queryable"));
if(!goog.isDef(queryable)) {
queryable = goog.object.get(parentLayerObject, "queryable")
}
goog.object.set(layerObject, "queryable", goog.isDef(queryable) ? queryable : false);
var cascaded = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("cascaded"));
if(!goog.isDef(cascaded)) {
cascaded = goog.object.get(parentLayerObject, "cascaded")
}
goog.object.set(layerObject, "cascaded", cascaded);
var opaque = ol.format.XSD.readBooleanString(node.getAttribute("opaque"));
if(!goog.isDef(opaque)) {
opaque = goog.object.get(parentLayerObject, "opaque")
}
goog.object.set(layerObject, "opaque", goog.isDef(opaque) ? opaque : false);
var noSubsets = ol.format.XSD.readBooleanString(node.getAttribute("noSubsets"));
if(!goog.isDef(noSubsets)) {
noSubsets = goog.object.get(parentLayerObject, "noSubsets")
}
goog.object.set(layerObject, "noSubsets", goog.isDef(noSubsets) ? noSubsets : false);
var fixedWidth = ol.format.XSD.readDecimalString(node.getAttribute("fixedWidth"));
if(!goog.isDef(fixedWidth)) {
fixedWidth = goog.object.get(parentLayerObject, "fixedWidth")
}
goog.object.set(layerObject, "fixedWidth", fixedWidth);
var fixedHeight = ol.format.XSD.readDecimalString(node.getAttribute("fixedHeight"));
if(!goog.isDef(fixedHeight)) {
fixedHeight = goog.object.get(parentLayerObject, "fixedHeight")
}
goog.object.set(layerObject, "fixedHeight", fixedHeight);
var addKeys = ["Style", "CRS", "AuthorityURL"];
goog.array.forEach(addKeys, function(key) {
var parentValue = goog.object.get(parentLayerObject, key);
if(goog.isDef(parentValue)) {
var childValue = goog.object.setIfUndefined(layerObject, key, []);
childValue = childValue.concat(parentValue)
}
});
var replaceKeys = ["EX_GeographicBoundingBox", "BoundingBox", "Dimension", "Attribution", "MinScaleDenominator", "MaxScaleDenominator"];
goog.array.forEach(replaceKeys, function(key) {
var childValue = goog.object.get(layerObject, key);
if(!goog.isDef(childValue)) {
var parentValue = goog.object.get(parentLayerObject, key);
goog.object.set(layerObject, key, parentValue)
}
});
return layerObject
};
ol.format.WMSCapabilities.readDimension_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Dimension");
var dimensionObject = {"name":node.getAttribute("name"), "units":node.getAttribute("units"), "unitSymbol":node.getAttribute("unitSymbol"), "default":node.getAttribute("default"), "multipleValues":ol.format.XSD.readBooleanString(node.getAttribute("multipleValues")), "nearestValue":ol.format.XSD.readBooleanString(node.getAttribute("nearestValue")), "current":ol.format.XSD.readBooleanString(node.getAttribute("current")), "values":ol.format.XSD.readString(node)};
return dimensionObject
};
ol.format.WMSCapabilities.readFormatOnlineresource_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readRequest_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Request");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.REQUEST_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readDCPType_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "DCPType");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.DCPTYPE_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readHTTP_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "HTTP");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.HTTP_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readOperationType_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readSizedFormatOnlineresource_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
var formatOnlineresource = ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if(goog.isDef(formatOnlineresource)) {
var size = [ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("width")), ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("height"))];
goog.object.set(formatOnlineresource, "size", size);
return formatOnlineresource
}
return undefined
};
ol.format.WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "AuthorityURL");
var authorityObject = ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if(goog.isDef(authorityObject)) {
goog.object.set(authorityObject, "name", node.getAttribute("name"));
return authorityObject
}
return undefined
};
ol.format.WMSCapabilities.readMetadataURL_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "MetadataURL");
var metadataObject = ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if(goog.isDef(metadataObject)) {
goog.object.set(metadataObject, "type", node.getAttribute("type"));
return metadataObject
}
return undefined
};
ol.format.WMSCapabilities.readStyle_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "Style");
return ol.xml.pushParseAndPop({}, ol.format.WMSCapabilities.STYLE_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.readKeywordList_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == "KeywordList");
return ol.xml.pushParseAndPop([], ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_, node, objectStack)
};
ol.format.WMSCapabilities.NAMESPACE_URIS_ = [null, "http://www.opengis.net/wms"];
ol.format.WMSCapabilities.PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Service":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readService_), "Capability":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readCapability_)});
ol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Request":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readRequest_), "Exception":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readException_), "Layer":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readCapabilityLayer_)});
ol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Title":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Abstract":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "KeywordList":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readKeywordList_), "OnlineResource":ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref), "ContactInformation":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readContactInformation_),
"Fees":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "AccessConstraints":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "LayerLimit":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "MaxWidth":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "MaxHeight":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger)});
ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"ContactPersonPrimary":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readContactPersonPrimary_), "ContactPosition":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "ContactAddress":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readContactAddress_), "ContactVoiceTelephone":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "ContactFacsimileTelephone":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
"ContactElectronicMailAddress":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)});
ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"ContactPerson":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "ContactOrganization":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)});
ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"AddressType":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Address":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "City":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "StateOrProvince":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "PostCode":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Country":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)});
ol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Format":ol.xml.makeArrayPusher(ol.format.XSD.readString)});
ol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Title":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Abstract":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "KeywordList":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readKeywordList_), "CRS":ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString), "EX_GeographicBoundingBox":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readEXGeographicBoundingBox_),
"BoundingBox":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readBoundingBox_), "Dimension":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readDimension_), "Attribution":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readAttribution_), "AuthorityURL":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readAuthorityURL_), "Identifier":ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString), "MetadataURL":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readMetadataURL_),
"DataURL":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readFormatOnlineresource_), "FeatureListURL":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readFormatOnlineresource_), "Style":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readStyle_), "MinScaleDenominator":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "MaxScaleDenominator":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "Layer":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readLayer_)});
ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Title":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "OnlineResource":ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref), "LogoURL":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readSizedFormatOnlineresource_)});
ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"westBoundLongitude":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "eastBoundLongitude":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "southBoundLatitude":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "northBoundLatitude":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)});
ol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"GetCapabilities":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readOperationType_), "GetMap":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readOperationType_), "GetFeatureInfo":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readOperationType_)});
ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Format":ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString), "DCPType":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readDCPType_)});
ol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"HTTP":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readHTTP_)});
ol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Get":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readFormatOnlineresource_), "Post":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readFormatOnlineresource_)});
ol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Title":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "Abstract":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "LegendURL":ol.xml.makeObjectPropertyPusher(ol.format.WMSCapabilities.readSizedFormatOnlineresource_), "StyleSheetURL":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readFormatOnlineresource_),
"StyleURL":ol.xml.makeObjectPropertySetter(ol.format.WMSCapabilities.readFormatOnlineresource_)});
ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Format":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "OnlineResource":ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref)});
ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_ = ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {"Keyword":ol.xml.makeArrayPusher(ol.format.XSD.readString)});
goog.provide("goog.events.FileDropHandler");
goog.provide("goog.events.FileDropHandler.EventType");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventHandler");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.log");
goog.events.FileDropHandler = function(element, opt_preventDropOutside) {
goog.events.EventTarget.call(this);
this.eventHandler_ = new goog.events.EventHandler(this);
var doc = element;
if(opt_preventDropOutside) {
doc = goog.dom.getOwnerDocument(element)
}
this.eventHandler_.listen(doc, goog.events.EventType.DRAGENTER, this.onDocDragEnter_);
if(doc != element) {
this.eventHandler_.listen(doc, goog.events.EventType.DRAGOVER, this.onDocDragOver_)
}
this.eventHandler_.listen(element, goog.events.EventType.DRAGOVER, this.onElemDragOver_);
this.eventHandler_.listen(element, goog.events.EventType.DROP, this.onElemDrop_)
};
goog.inherits(goog.events.FileDropHandler, goog.events.EventTarget);
goog.events.FileDropHandler.prototype.dndContainsFiles_ = false;
goog.events.FileDropHandler.prototype.logger_ = goog.log.getLogger("goog.events.FileDropHandler");
goog.events.FileDropHandler.EventType = {DROP:goog.events.EventType.DROP};
goog.events.FileDropHandler.prototype.disposeInternal = function() {
goog.events.FileDropHandler.superClass_.disposeInternal.call(this);
this.eventHandler_.dispose()
};
goog.events.FileDropHandler.prototype.dispatch_ = function(e) {
goog.log.fine(this.logger_, "Firing DROP event...");
var event = new goog.events.BrowserEvent(e.getBrowserEvent());
event.type = goog.events.FileDropHandler.EventType.DROP;
this.dispatchEvent(event)
};
goog.events.FileDropHandler.prototype.onDocDragEnter_ = function(e) {
goog.log.log(this.logger_, goog.log.Level.FINER, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type);
var dt = e.getBrowserEvent().dataTransfer;
this.dndContainsFiles_ = !!(dt && (dt.types && (goog.array.contains(dt.types, "Files") || goog.array.contains(dt.types, "public.file-url")) || dt.files && dt.files.length > 0));
if(this.dndContainsFiles_) {
e.preventDefault()
}
goog.log.log(this.logger_, goog.log.Level.FINER, "dndContainsFiles_: " + this.dndContainsFiles_)
};
goog.events.FileDropHandler.prototype.onDocDragOver_ = function(e) {
goog.log.log(this.logger_, goog.log.Level.FINEST, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type);
if(this.dndContainsFiles_) {
e.preventDefault();
var dt = e.getBrowserEvent().dataTransfer;
dt.dropEffect = "none"
}
};
goog.events.FileDropHandler.prototype.onElemDragOver_ = function(e) {
goog.log.log(this.logger_, goog.log.Level.FINEST, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type);
if(this.dndContainsFiles_) {
e.preventDefault();
e.stopPropagation();
var dt = e.getBrowserEvent().dataTransfer;
dt.effectAllowed = "all";
dt.dropEffect = "copy"
}
};
goog.events.FileDropHandler.prototype.onElemDrop_ = function(e) {
goog.log.log(this.logger_, goog.log.Level.FINER, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type);
if(this.dndContainsFiles_) {
e.preventDefault();
e.stopPropagation();
this.dispatch_(e)
}
};
/*
Portions of this code are from MochiKit, received by
The Closure Authors under the MIT license. All other code is Copyright
2005-2009 The Closure Authors. All Rights Reserved.
*/
goog.provide("goog.async.Deferred");
goog.provide("goog.async.Deferred.AlreadyCalledError");
goog.provide("goog.async.Deferred.CanceledError");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug.Error");
goog.require("goog.functions");
goog.async.Deferred = function(opt_onCancelFunction, opt_defaultScope) {
this.sequence_ = [];
this.onCancelFunction_ = opt_onCancelFunction;
this.defaultScope_ = opt_defaultScope || null;
if(goog.async.Deferred.LONG_STACK_TRACES) {
this.constructorStack_ = null;
if(Error.captureStackTrace) {
var target = {stack:""};
Error.captureStackTrace(target, goog.async.Deferred);
if(typeof target.stack == "string") {
this.constructorStack_ = target.stack.replace(/^[^\n]*\n/, "")
}
}
}
};
goog.async.Deferred.prototype.fired_ = false;
goog.async.Deferred.prototype.hadError_ = false;
goog.async.Deferred.prototype.result_;
goog.async.Deferred.prototype.blocked_ = false;
goog.async.Deferred.prototype.blocking_ = false;
goog.async.Deferred.prototype.silentlyCanceled_ = false;
goog.async.Deferred.prototype.unhandledExceptionTimeoutId_;
goog.async.Deferred.prototype.parent_;
goog.async.Deferred.prototype.branches_ = 0;
goog.define("goog.async.Deferred.STRICT_ERRORS", false);
goog.define("goog.async.Deferred.LONG_STACK_TRACES", goog.DEBUG);
goog.async.Deferred.prototype.cancel = function(opt_deepCancel) {
if(!this.hasFired()) {
if(this.parent_) {
var parent = this.parent_;
delete this.parent_;
if(opt_deepCancel) {
parent.cancel(opt_deepCancel)
}else {
parent.branchCancel_()
}
}
if(this.onCancelFunction_) {
this.onCancelFunction_.call(this.defaultScope_, this)
}else {
this.silentlyCanceled_ = true
}
if(!this.hasFired()) {
this.errback(new goog.async.Deferred.CanceledError(this))
}
}else {
if(this.result_ instanceof goog.async.Deferred) {
this.result_.cancel()
}
}
};
goog.async.Deferred.prototype.branchCancel_ = function() {
this.branches_--;
if(this.branches_ <= 0) {
this.cancel()
}
};
goog.async.Deferred.prototype.continue_ = function(isSuccess, res) {
this.blocked_ = false;
this.updateResult_(isSuccess, res)
};
goog.async.Deferred.prototype.updateResult_ = function(isSuccess, res) {
this.fired_ = true;
this.result_ = res;
this.hadError_ = !isSuccess;
this.fire_()
};
goog.async.Deferred.prototype.check_ = function() {
if(this.hasFired()) {
if(!this.silentlyCanceled_) {
throw new goog.async.Deferred.AlreadyCalledError(this);
}
this.silentlyCanceled_ = false
}
};
goog.async.Deferred.prototype.callback = function(opt_result) {
this.check_();
this.assertNotDeferred_(opt_result);
this.updateResult_(true, opt_result)
};
goog.async.Deferred.prototype.errback = function(opt_result) {
this.check_();
this.assertNotDeferred_(opt_result);
this.makeStackTraceLong_(opt_result);
this.updateResult_(false, opt_result)
};
goog.async.Deferred.prototype.makeStackTraceLong_ = function(error) {
if(!goog.async.Deferred.LONG_STACK_TRACES) {
return
}
if(this.constructorStack_ && goog.isObject(error) && error.stack && /^[^\n]+(\n [^\n]+)+/.test(error.stack)) {
error.stack = error.stack + "\nDEFERRED OPERATION:\n" + this.constructorStack_
}
};
goog.async.Deferred.prototype.assertNotDeferred_ = function(obj) {
goog.asserts.assert(!(obj instanceof goog.async.Deferred), "An execution sequence may not be initiated with a blocking Deferred.")
};
goog.async.Deferred.prototype.addCallback = function(cb, opt_scope) {
return this.addCallbacks(cb, null, opt_scope)
};
goog.async.Deferred.prototype.addErrback = function(eb, opt_scope) {
return this.addCallbacks(null, eb, opt_scope)
};
goog.async.Deferred.prototype.addBoth = function(f, opt_scope) {
return this.addCallbacks(f, f, opt_scope)
};
goog.async.Deferred.prototype.addCallbacks = function(cb, eb, opt_scope) {
goog.asserts.assert(!this.blocking_, "Blocking Deferreds can not be re-used");
this.sequence_.push([cb, eb, opt_scope]);
if(this.hasFired()) {
this.fire_()
}
return this
};
goog.async.Deferred.prototype.chainDeferred = function(otherDeferred) {
this.addCallbacks(otherDeferred.callback, otherDeferred.errback, otherDeferred);
return this
};
goog.async.Deferred.prototype.awaitDeferred = function(otherDeferred) {
return this.addCallback(goog.bind(otherDeferred.branch, otherDeferred))
};
goog.async.Deferred.prototype.branch = function(opt_propagateCancel) {
var d = new goog.async.Deferred;
this.chainDeferred(d);
if(opt_propagateCancel) {
d.parent_ = this;
this.branches_++
}
return d
};
goog.async.Deferred.prototype.hasFired = function() {
return this.fired_
};
goog.async.Deferred.prototype.isError = function(res) {
return res instanceof Error
};
goog.async.Deferred.prototype.hasErrback_ = function() {
return goog.array.some(this.sequence_, function(sequenceRow) {
return goog.isFunction(sequenceRow[1])
})
};
goog.async.Deferred.prototype.fire_ = function() {
if(this.unhandledExceptionTimeoutId_ && this.hasFired() && this.hasErrback_()) {
goog.global.clearTimeout(this.unhandledExceptionTimeoutId_);
delete this.unhandledExceptionTimeoutId_
}
if(this.parent_) {
this.parent_.branches_--;
delete this.parent_
}
var res = this.result_;
var unhandledException = false;
var isNewlyBlocked = false;
while(this.sequence_.length && !this.blocked_) {
var sequenceEntry = this.sequence_.shift();
var callback = sequenceEntry[0];
var errback = sequenceEntry[1];
var scope = sequenceEntry[2];
var f = this.hadError_ ? errback : callback;
if(f) {
try {
var ret = f.call(scope || this.defaultScope_, res);
if(goog.isDef(ret)) {
this.hadError_ = this.hadError_ && (ret == res || this.isError(ret));
this.result_ = res = ret
}
if(res instanceof goog.async.Deferred) {
isNewlyBlocked = true;
this.blocked_ = true
}
}catch(ex) {
res = ex;
this.hadError_ = true;
this.makeStackTraceLong_(res);
if(!this.hasErrback_()) {
unhandledException = true
}
}
}
}
this.result_ = res;
if(isNewlyBlocked) {
res.addCallbacks(goog.bind(this.continue_, this, true), goog.bind(this.continue_, this, false));
res.blocking_ = true
}else {
if(goog.async.Deferred.STRICT_ERRORS && this.isError(res) && !(res instanceof goog.async.Deferred.CanceledError)) {
this.hadError_ = true;
unhandledException = true
}
}
if(unhandledException) {
this.unhandledExceptionTimeoutId_ = goog.global.setTimeout(goog.functions.fail(res), 0)
}
};
goog.async.Deferred.succeed = function(opt_result) {
var d = new goog.async.Deferred;
d.callback(opt_result);
return d
};
goog.async.Deferred.fail = function(res) {
var d = new goog.async.Deferred;
d.errback(res);
return d
};
goog.async.Deferred.canceled = function() {
var d = new goog.async.Deferred;
d.cancel();
return d
};
goog.async.Deferred.when = function(value, callback, opt_scope) {
if(value instanceof goog.async.Deferred) {
return value.branch(true).addCallback(callback, opt_scope)
}else {
return goog.async.Deferred.succeed(value).addCallback(callback, opt_scope)
}
};
goog.async.Deferred.AlreadyCalledError = function(deferred) {
goog.debug.Error.call(this);
this.deferred = deferred
};
goog.inherits(goog.async.Deferred.AlreadyCalledError, goog.debug.Error);
goog.async.Deferred.AlreadyCalledError.prototype.message = "Deferred has already fired";
goog.async.Deferred.AlreadyCalledError.prototype.name = "AlreadyCalledError";
goog.async.Deferred.CanceledError = function(deferred) {
goog.debug.Error.call(this);
this.deferred = deferred
};
goog.inherits(goog.async.Deferred.CanceledError, goog.debug.Error);
goog.async.Deferred.CanceledError.prototype.message = "Deferred was canceled";
goog.async.Deferred.CanceledError.prototype.name = "CanceledError";
goog.provide("goog.fs.Error");
goog.provide("goog.fs.Error.ErrorCode");
goog.require("goog.debug.Error");
goog.require("goog.string");
goog.fs.Error = function(code, action) {
goog.base(this, goog.string.subs("Error %s: %s", action, goog.fs.Error.getDebugMessage(code)));
this.code = (code)
};
goog.inherits(goog.fs.Error, goog.debug.Error);
goog.fs.Error.ErrorCode = {NOT_FOUND:1, SECURITY:2, ABORT:3, NOT_READABLE:4, ENCODING:5, NO_MODIFICATION_ALLOWED:6, INVALID_STATE:7, SYNTAX:8, INVALID_MODIFICATION:9, QUOTA_EXCEEDED:10, TYPE_MISMATCH:11, PATH_EXISTS:12};
goog.fs.Error.getDebugMessage = function(errorCode) {
switch(errorCode) {
case goog.fs.Error.ErrorCode.NOT_FOUND:
return"File or directory not found";
case goog.fs.Error.ErrorCode.SECURITY:
return"Insecure or disallowed operation";
case goog.fs.Error.ErrorCode.ABORT:
return"Operation aborted";
case goog.fs.Error.ErrorCode.NOT_READABLE:
return"File or directory not readable";
case goog.fs.Error.ErrorCode.ENCODING:
return"Invalid encoding";
case goog.fs.Error.ErrorCode.NO_MODIFICATION_ALLOWED:
return"Cannot modify file or directory";
case goog.fs.Error.ErrorCode.INVALID_STATE:
return"Invalid state";
case goog.fs.Error.ErrorCode.SYNTAX:
return"Invalid line-ending specifier";
case goog.fs.Error.ErrorCode.INVALID_MODIFICATION:
return"Invalid modification";
case goog.fs.Error.ErrorCode.QUOTA_EXCEEDED:
return"Quota exceeded";
case goog.fs.Error.ErrorCode.TYPE_MISMATCH:
return"Invalid filetype";
case goog.fs.Error.ErrorCode.PATH_EXISTS:
return"File or directory already exists at specified path";
default:
return"Unrecognized error"
}
};
goog.provide("goog.fs.ProgressEvent");
goog.require("goog.events.Event");
goog.fs.ProgressEvent = function(event, target) {
goog.base(this, event.type, target);
this.event_ = event
};
goog.inherits(goog.fs.ProgressEvent, goog.events.Event);
goog.fs.ProgressEvent.prototype.isLengthComputable = function() {
return this.event_.lengthComputable
};
goog.fs.ProgressEvent.prototype.getLoaded = function() {
return this.event_.loaded
};
goog.fs.ProgressEvent.prototype.getTotal = function() {
return this.event_.total
};
goog.provide("goog.fs.FileReader");
goog.provide("goog.fs.FileReader.EventType");
goog.provide("goog.fs.FileReader.ReadyState");
goog.require("goog.async.Deferred");
goog.require("goog.events.Event");
goog.require("goog.events.EventTarget");
goog.require("goog.fs.Error");
goog.require("goog.fs.ProgressEvent");
goog.fs.FileReader = function() {
goog.base(this);
this.reader_ = new FileReader;
this.reader_.onloadstart = goog.bind(this.dispatchProgressEvent_, this);
this.reader_.onprogress = goog.bind(this.dispatchProgressEvent_, this);
this.reader_.onload = goog.bind(this.dispatchProgressEvent_, this);
this.reader_.onabort = goog.bind(this.dispatchProgressEvent_, this);
this.reader_.onerror = goog.bind(this.dispatchProgressEvent_, this);
this.reader_.onloadend = goog.bind(this.dispatchProgressEvent_, this)
};
goog.inherits(goog.fs.FileReader, goog.events.EventTarget);
goog.fs.FileReader.ReadyState = {INIT:0, LOADING:1, DONE:2};
goog.fs.FileReader.EventType = {LOAD_START:"loadstart", PROGRESS:"progress", LOAD:"load", ABORT:"abort", ERROR:"error", LOAD_END:"loadend"};
goog.fs.FileReader.prototype.abort = function() {
try {
this.reader_.abort()
}catch(e) {
throw new goog.fs.Error(e.code, "aborting read");
}
};
goog.fs.FileReader.prototype.getReadyState = function() {
return(this.reader_.readyState)
};
goog.fs.FileReader.prototype.getResult = function() {
return this.reader_.result
};
goog.fs.FileReader.prototype.getError = function() {
return this.reader_.error && new goog.fs.Error(this.reader_.error.code, "reading file")
};
goog.fs.FileReader.prototype.dispatchProgressEvent_ = function(event) {
this.dispatchEvent(new goog.fs.ProgressEvent(event, this))
};
goog.fs.FileReader.prototype.disposeInternal = function() {
goog.base(this, "disposeInternal");
delete this.reader_
};
goog.fs.FileReader.prototype.readAsBinaryString = function(blob) {
this.reader_.readAsBinaryString(blob)
};
goog.fs.FileReader.readAsBinaryString = function(blob) {
var reader = new goog.fs.FileReader;
var d = goog.fs.FileReader.createDeferred_(reader);
reader.readAsBinaryString(blob);
return d
};
goog.fs.FileReader.prototype.readAsArrayBuffer = function(blob) {
this.reader_.readAsArrayBuffer(blob)
};
goog.fs.FileReader.readAsArrayBuffer = function(blob) {
var reader = new goog.fs.FileReader;
var d = goog.fs.FileReader.createDeferred_(reader);
reader.readAsArrayBuffer(blob);
return d
};
goog.fs.FileReader.prototype.readAsText = function(blob, opt_encoding) {
this.reader_.readAsText(blob, opt_encoding)
};
goog.fs.FileReader.readAsText = function(blob, opt_encoding) {
var reader = new goog.fs.FileReader;
var d = goog.fs.FileReader.createDeferred_(reader);
reader.readAsText(blob, opt_encoding);
return d
};
goog.fs.FileReader.prototype.readAsDataUrl = function(blob) {
this.reader_.readAsDataURL(blob)
};
goog.fs.FileReader.readAsDataUrl = function(blob) {
var reader = new goog.fs.FileReader;
var d = goog.fs.FileReader.createDeferred_(reader);
reader.readAsDataUrl(blob);
return d
};
goog.fs.FileReader.createDeferred_ = function(reader) {
var deferred = new goog.async.Deferred;
reader.addEventListener(goog.fs.FileReader.EventType.LOAD_END, goog.partial(function(d, r, e) {
var result = r.getResult();
var error = r.getError();
if(result != null && !error) {
d.callback(result)
}else {
d.errback(error)
}
r.dispose()
}, deferred, reader));
return deferred
};
goog.provide("ol.interaction.DragAndDrop");
goog.provide("ol.interaction.DragAndDropEvent");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.FileDropHandler");
goog.require("goog.events.FileDropHandler.EventType");
goog.require("goog.fs.FileReader");
goog.require("goog.functions");
goog.require("ol.interaction.Interaction");
goog.require("ol.proj");
ol.interaction.DragAndDrop = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.formatConstructors_ = goog.isDef(options.formatConstructors) ? options.formatConstructors : [];
this.reprojectTo_ = goog.isDef(options.reprojectTo) ? ol.proj.get(options.reprojectTo) : null;
this.fileDropHandler_ = null;
this.dropListenKey_ = undefined
};
goog.inherits(ol.interaction.DragAndDrop, ol.interaction.Interaction);
ol.interaction.DragAndDrop.prototype.disposeInternal = function() {
if(goog.isDef(this.dropListenKey_)) {
goog.events.unlistenByKey(this.dropListenKey_)
}
goog.base(this, "disposeInternal")
};
ol.interaction.DragAndDrop.prototype.handleDrop_ = function(event) {
var files = event.getBrowserEvent().dataTransfer.files;
var i, ii, file;
for(i = 0, ii = files.length;i < ii;++i) {
file = files[i];
var reader = goog.fs.FileReader.readAsText(file, "");
reader.addCallback(goog.partial(this.handleResult_, file), this)
}
};
ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, result) {
var map = this.getMap();
goog.asserts.assert(!goog.isNull(map));
var projection = this.reprojectTo_;
if(goog.isNull(projection)) {
var view = map.getView();
goog.asserts.assert(goog.isDef(view));
projection = view.getView2D().getProjection();
goog.asserts.assert(goog.isDef(projection))
}
var formatConstructors = this.formatConstructors_;
var features = [];
var i, ii;
for(i = 0, ii = formatConstructors.length;i < ii;++i) {
var formatConstructor = formatConstructors[i];
var format = new formatConstructor;
var readFeatures = this.tryReadFeatures_(format, result);
if(!goog.isNull(readFeatures)) {
var featureProjection = format.readProjection(result);
var transform = ol.proj.getTransform(featureProjection, projection);
var j, jj;
for(j = 0, jj = readFeatures.length;j < jj;++j) {
var feature = readFeatures[j];
var geometry = feature.getGeometry();
if(!goog.isNull(geometry)) {
geometry.transform(transform)
}
features.push(feature)
}
}
}
this.dispatchEvent(new ol.interaction.DragAndDropEvent(ol.interaction.DragAndDropEventType.ADD_FEATURES, this, file, features, projection))
};
ol.interaction.DragAndDrop.prototype.handleMapBrowserEvent = goog.functions.TRUE;
ol.interaction.DragAndDrop.prototype.setMap = function(map) {
if(goog.isDef(this.dropListenKey_)) {
goog.events.unlistenByKey(this.dropListenKey_);
this.dropListenKey_ = undefined
}
if(!goog.isNull(this.fileDropHandler_)) {
goog.dispose(this.fileDropHandler_);
this.fileDropHandler_ = null
}
goog.asserts.assert(!goog.isDef(this.dropListenKey_));
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
this.fileDropHandler_ = new goog.events.FileDropHandler(map.getViewport());
this.dropListenKey_ = goog.events.listen(this.fileDropHandler_, goog.events.FileDropHandler.EventType.DROP, this.handleDrop_, false, this)
}
};
ol.interaction.DragAndDrop.prototype.tryReadFeatures_ = function(format, text) {
try {
return format.readFeatures(text)
}catch(e) {
return null
}
};
ol.interaction.DragAndDropEventType = {ADD_FEATURES:"addfeatures"};
ol.interaction.DragAndDropEvent = function(type, target, file, opt_features, opt_projection) {
goog.base(this, type, target);
this.features = opt_features;
this.file = file;
this.projection = opt_projection
};
goog.inherits(ol.interaction.DragAndDropEvent, goog.events.Event);
goog.provide("goog.math.Vec2");
goog.require("goog.math");
goog.require("goog.math.Coordinate");
goog.math.Vec2 = function(x, y) {
this.x = x;
this.y = y
};
goog.inherits(goog.math.Vec2, goog.math.Coordinate);
goog.math.Vec2.randomUnit = function() {
var angle = Math.random() * Math.PI * 2;
return new goog.math.Vec2(Math.cos(angle), Math.sin(angle))
};
goog.math.Vec2.random = function() {
var mag = Math.sqrt(Math.random());
var angle = Math.random() * Math.PI * 2;
return new goog.math.Vec2(Math.cos(angle) * mag, Math.sin(angle) * mag)
};
goog.math.Vec2.fromCoordinate = function(a) {
return new goog.math.Vec2(a.x, a.y)
};
goog.math.Vec2.prototype.clone = function() {
return new goog.math.Vec2(this.x, this.y)
};
goog.math.Vec2.prototype.magnitude = function() {
return Math.sqrt(this.x * this.x + this.y * this.y)
};
goog.math.Vec2.prototype.squaredMagnitude = function() {
return this.x * this.x + this.y * this.y
};
goog.math.Vec2.prototype.scale = (goog.math.Coordinate.prototype.scale);
goog.math.Vec2.prototype.invert = function() {
this.x = -this.x;
this.y = -this.y;
return this
};
goog.math.Vec2.prototype.normalize = function() {
return this.scale(1 / this.magnitude())
};
goog.math.Vec2.prototype.add = function(b) {
this.x += b.x;
this.y += b.y;
return this
};
goog.math.Vec2.prototype.subtract = function(b) {
this.x -= b.x;
this.y -= b.y;
return this
};
goog.math.Vec2.prototype.rotate = function(angle) {
var cos = Math.cos(angle);
var sin = Math.sin(angle);
var newX = this.x * cos - this.y * sin;
var newY = this.y * cos + this.x * sin;
this.x = newX;
this.y = newY;
return this
};
goog.math.Vec2.rotateAroundPoint = function(v, axisPoint, angle) {
var res = v.clone();
return res.subtract(axisPoint).rotate(angle).add(axisPoint)
};
goog.math.Vec2.prototype.equals = function(b) {
return this == b || !!b && this.x == b.x && this.y == b.y
};
goog.math.Vec2.distance = goog.math.Coordinate.distance;
goog.math.Vec2.squaredDistance = goog.math.Coordinate.squaredDistance;
goog.math.Vec2.equals = goog.math.Coordinate.equals;
goog.math.Vec2.sum = function(a, b) {
return new goog.math.Vec2(a.x + b.x, a.y + b.y)
};
goog.math.Vec2.difference = function(a, b) {
return new goog.math.Vec2(a.x - b.x, a.y - b.y)
};
goog.math.Vec2.dot = function(a, b) {
return a.x * b.x + a.y * b.y
};
goog.math.Vec2.lerp = function(a, b, x) {
return new goog.math.Vec2(goog.math.lerp(a.x, b.x, x), goog.math.lerp(a.y, b.y, x))
};
goog.provide("ol.interaction.DragRotateAndZoom");
goog.require("goog.asserts");
goog.require("goog.functions");
goog.require("goog.math.Vec2");
goog.require("ol");
goog.require("ol.ViewHint");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Pointer");
ol.interaction.DragRotateAndZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.shiftKeyOnly;
this.lastAngle_ = undefined;
this.lastMagnitude_ = undefined;
this.lastScaleDelta_ = 0
};
goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Pointer);
ol.interaction.DragRotateAndZoom.prototype.handlePointerDrag = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return
}
var map = mapBrowserEvent.map;
var size = map.getSize();
var offset = mapBrowserEvent.pixel;
var delta = new goog.math.Vec2(offset[0] - size[0] / 2, size[1] / 2 - offset[1]);
var theta = Math.atan2(delta.y, delta.x);
var magnitude = delta.magnitude();
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.render();
if(goog.isDef(this.lastAngle_)) {
var angleDelta = theta - this.lastAngle_;
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - angleDelta)
}
this.lastAngle_ = theta;
if(goog.isDef(this.lastMagnitude_)) {
var resolution = this.lastMagnitude_ * (view2DState.resolution / magnitude);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution)
}
if(goog.isDef(this.lastMagnitude_)) {
this.lastScaleDelta_ = this.lastMagnitude_ / magnitude
}
this.lastMagnitude_ = magnitude
};
ol.interaction.DragRotateAndZoom.prototype.handlePointerUp = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return true
}
var map = mapBrowserEvent.map;
var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1);
var view2D = view.getView2D();
var view2DState = view2D.getView2DState();
var direction = this.lastScaleDelta_ - 1;
ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation);
ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, undefined, ol.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction);
this.lastScaleDelta_ = 0;
return false
};
ol.interaction.DragRotateAndZoom.prototype.handlePointerDown = function(mapBrowserEvent) {
if(!ol.events.condition.mouseOnly(mapBrowserEvent)) {
return false
}
if(this.condition_(mapBrowserEvent)) {
mapBrowserEvent.map.getView().setHint(ol.ViewHint.INTERACTING, 1);
this.lastAngle_ = undefined;
this.lastMagnitude_ = undefined;
return true
}else {
return false
}
};
ol.interaction.DragRotateAndZoom.prototype.shouldStopEvent = goog.functions.identity;
goog.provide("ol.interaction.Modify");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.functions");
goog.require("ol.Collection");
goog.require("ol.CollectionEventType");
goog.require("ol.Feature");
goog.require("ol.FeatureOverlay");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.ViewHint");
goog.require("ol.coordinate");
goog.require("ol.events.condition");
goog.require("ol.extent");
goog.require("ol.feature");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.interaction.Pointer");
goog.require("ol.structs.RBush");
ol.interaction.SegmentDataType;
ol.interaction.Modify = function(options) {
goog.base(this);
this.deleteCondition_ = goog.isDef(options.deleteCondition) ? options.deleteCondition : (goog.functions.and(ol.events.condition.noModifierKeys, ol.events.condition.singleClick));
this.vertexFeature_ = null;
this.vertexSegments_ = null;
this.lastPixel_ = [0, 0];
this.rBush_ = new ol.structs.RBush;
this.pixelTolerance_ = goog.isDef(options.pixelTolerance) ? options.pixelTolerance : 10;
this.snappedToVertex_ = false;
this.dragSegments_ = null;
this.overlay_ = new ol.FeatureOverlay({style:goog.isDef(options.style) ? options.style : ol.interaction.Modify.getDefaultStyleFunction()});
this.SEGMENT_WRITERS_ = {"Point":this.writePointGeometry_, "LineString":this.writeLineStringGeometry_, "LinearRing":this.writeLineStringGeometry_, "Polygon":this.writePolygonGeometry_, "MultiPoint":this.writeMultiPointGeometry_, "MultiLineString":this.writeMultiLineStringGeometry_, "MultiPolygon":this.writeMultiPolygonGeometry_, "GeometryCollection":this.writeGeometryCollectionGeometry_};
this.features_ = options.features;
this.features_.forEach(this.addFeature_, this);
goog.events.listen(this.features_, ol.CollectionEventType.ADD, this.handleFeatureAdd_, false, this);
goog.events.listen(this.features_, ol.CollectionEventType.REMOVE, this.handleFeatureRemove_, false, this)
};
goog.inherits(ol.interaction.Modify, ol.interaction.Pointer);
ol.interaction.Modify.prototype.addFeature_ = function(feature) {
var geometry = feature.getGeometry();
if(goog.isDef(this.SEGMENT_WRITERS_[geometry.getType()])) {
this.SEGMENT_WRITERS_[geometry.getType()].call(this, feature, geometry)
}
var map = this.getMap();
if(!goog.isNull(map)) {
this.handlePointerAtPixel_(this.lastPixel_, map)
}
};
ol.interaction.Modify.prototype.setMap = function(map) {
this.overlay_.setMap(map);
goog.base(this, "setMap", map)
};
ol.interaction.Modify.prototype.handleFeatureAdd_ = function(evt) {
var feature = evt.element;
goog.asserts.assertInstanceof(feature, ol.Feature);
this.addFeature_(feature)
};
ol.interaction.Modify.prototype.handleFeatureRemove_ = function(evt) {
var feature = evt.element;
var rBush = this.rBush_;
var i, nodesToRemove = [];
rBush.forEachInExtent(feature.getGeometry().getExtent(), function(node) {
if(feature === node.feature) {
nodesToRemove.push(node)
}
});
for(i = nodesToRemove.length - 1;i >= 0;--i) {
rBush.remove(nodesToRemove[i])
}
if(!goog.isNull(this.vertexFeature_) && this.features_.getLength() === 0) {
this.overlay_.removeFeature(this.vertexFeature_);
this.vertexFeature_ = null
}
};
ol.interaction.Modify.prototype.writePointGeometry_ = function(feature, geometry) {
var coordinates = geometry.getCoordinates();
var segmentData = ({feature:feature, geometry:geometry, segment:[coordinates, coordinates]});
this.rBush_.insert(geometry.getExtent(), segmentData)
};
ol.interaction.Modify.prototype.writeMultiPointGeometry_ = function(feature, geometry) {
var points = geometry.getCoordinates();
var coordinates, i, ii, segmentData;
for(i = 0, ii = points.length;i < ii;++i) {
coordinates = points[i];
segmentData = ({feature:feature, geometry:geometry, depth:[i], index:i, segment:[coordinates, coordinates]});
this.rBush_.insert(geometry.getExtent(), segmentData)
}
};
ol.interaction.Modify.prototype.writeLineStringGeometry_ = function(feature, geometry) {
var coordinates = geometry.getCoordinates();
var i, ii, segment, segmentData;
for(i = 0, ii = coordinates.length - 1;i < ii;++i) {
segment = coordinates.slice(i, i + 2);
segmentData = ({feature:feature, geometry:geometry, index:i, segment:segment});
this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData)
}
};
ol.interaction.Modify.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) {
var lines = geometry.getCoordinates();
var coordinates, i, ii, j, jj, segment, segmentData;
for(j = 0, jj = lines.length;j < jj;++j) {
coordinates = lines[j];
for(i = 0, ii = coordinates.length - 1;i < ii;++i) {
segment = coordinates.slice(i, i + 2);
segmentData = ({feature:feature, geometry:geometry, depth:[j], index:i, segment:segment});
this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData)
}
}
};
ol.interaction.Modify.prototype.writePolygonGeometry_ = function(feature, geometry) {
var rings = geometry.getCoordinates();
var coordinates, i, ii, j, jj, segment, segmentData;
for(j = 0, jj = rings.length;j < jj;++j) {
coordinates = rings[j];
for(i = 0, ii = coordinates.length - 1;i < ii;++i) {
segment = coordinates.slice(i, i + 2);
segmentData = ({feature:feature, geometry:geometry, depth:[j], index:i, segment:segment});
this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData)
}
}
};
ol.interaction.Modify.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) {
var polygons = geometry.getCoordinates();
var coordinates, i, ii, j, jj, k, kk, rings, segment, segmentData;
for(k = 0, kk = polygons.length;k < kk;++k) {
rings = polygons[k];
for(j = 0, jj = rings.length;j < jj;++j) {
coordinates = rings[j];
for(i = 0, ii = coordinates.length - 1;i < ii;++i) {
segment = coordinates.slice(i, i + 2);
segmentData = ({feature:feature, geometry:geometry, depth:[j, k], index:i, segment:segment});
this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData)
}
}
}
};
ol.interaction.Modify.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) {
var i, geometries = geometry.getGeometriesArray();
for(i = 0;i < geometries.length;++i) {
this.SEGMENT_WRITERS_[geometries[i].getType()].call(this, feature, geometries[i])
}
};
ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = function(coordinates) {
var vertexFeature = this.vertexFeature_;
if(goog.isNull(vertexFeature)) {
vertexFeature = new ol.Feature(new ol.geom.Point(coordinates));
this.vertexFeature_ = vertexFeature;
this.overlay_.addFeature(vertexFeature)
}else {
var geometry = (vertexFeature.getGeometry());
geometry.setCoordinates(coordinates)
}
return vertexFeature
};
ol.interaction.Modify.prototype.handlePointerDown = function(evt) {
this.handlePointerAtPixel_(evt.pixel, evt.map);
this.dragSegments_ = [];
var vertexFeature = this.vertexFeature_;
if(!goog.isNull(vertexFeature)) {
var insertVertices = [];
var geometry = (vertexFeature.getGeometry());
var vertex = geometry.getCoordinates();
var vertexExtent = ol.extent.boundingExtent([vertex]);
var segmentDataMatches = [];
this.rBush_.forEachInExtent(vertexExtent, function(segmentData) {
segmentDataMatches.push(segmentData)
});
var distinctFeatures = {};
for(var i = 0, ii = segmentDataMatches.length;i < ii;++i) {
var segmentDataMatch = segmentDataMatches[i];
var segment = segmentDataMatch.segment;
if(!(goog.getUid(segmentDataMatch.feature) in distinctFeatures)) {
var feature = segmentDataMatch.feature;
distinctFeatures[goog.getUid(feature)] = true
}
if(ol.coordinate.equals(segment[0], vertex)) {
this.dragSegments_.push([segmentDataMatch, 0])
}else {
if(ol.coordinate.equals(segment[1], vertex)) {
this.dragSegments_.push([segmentDataMatch, 1])
}else {
if(goog.getUid(segment) in this.vertexSegments_) {
insertVertices.push([segmentDataMatch, vertex])
}
}
}
}
for(i = insertVertices.length - 1;i >= 0;--i) {
this.insertVertex_.apply(this, insertVertices[i])
}
}
return!goog.isNull(this.vertexFeature_)
};
ol.interaction.Modify.prototype.handlePointerDrag = function(evt) {
var vertex = evt.coordinate;
for(var i = 0, ii = this.dragSegments_.length;i < ii;++i) {
var dragSegment = this.dragSegments_[i];
var segmentData = dragSegment[0];
var depth = segmentData.depth;
var geometry = segmentData.geometry;
var coordinates = geometry.getCoordinates();
var segment = segmentData.segment;
var index = dragSegment[1];
switch(geometry.getType()) {
case ol.geom.GeometryType.POINT:
coordinates = vertex;
segment[0] = segment[1] = vertex;
break;
case ol.geom.GeometryType.MULTI_POINT:
coordinates[segmentData.index] = vertex;
segment[0] = segment[1] = vertex;
break;
case ol.geom.GeometryType.LINE_STRING:
coordinates[segmentData.index + index] = vertex;
segment[index] = vertex;
break;
case ol.geom.GeometryType.MULTI_LINE_STRING:
coordinates[depth[0]][segmentData.index + index] = vertex;
segment[index] = vertex;
break;
case ol.geom.GeometryType.POLYGON:
coordinates[depth[0]][segmentData.index + index] = vertex;
segment[index] = vertex;
break;
case ol.geom.GeometryType.MULTI_POLYGON:
coordinates[depth[1]][depth[0]][segmentData.index + index] = vertex;
segment[index] = vertex;
break
}
geometry.setCoordinates(coordinates);
this.createOrUpdateVertexFeature_(vertex)
}
};
ol.interaction.Modify.prototype.handlePointerUp = function(evt) {
var segmentData;
for(var i = this.dragSegments_.length - 1;i >= 0;--i) {
segmentData = this.dragSegments_[i][0];
this.rBush_.update(ol.extent.boundingExtent(segmentData.segment), segmentData)
}
return false
};
ol.interaction.Modify.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var handled;
if(!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE) {
this.handlePointerMove_(mapBrowserEvent)
}
if(!goog.isNull(this.vertexFeature_) && this.snappedToVertex_ && this.deleteCondition_(mapBrowserEvent)) {
var geometry = this.vertexFeature_.getGeometry();
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
handled = this.removeVertex_()
}
return goog.base(this, "handleMapBrowserEvent", mapBrowserEvent) && !handled
};
ol.interaction.Modify.prototype.handlePointerMove_ = function(evt) {
this.lastPixel_ = evt.pixel;
this.handlePointerAtPixel_(evt.pixel, evt.map)
};
ol.interaction.Modify.prototype.handlePointerAtPixel_ = function(pixel, map) {
var pixelCoordinate = map.getCoordinateFromPixel(pixel);
var sortByDistance = function(a, b) {
return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a.segment) - ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b.segment)
};
var lowerLeft = map.getCoordinateFromPixel([pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);
var upperRight = map.getCoordinateFromPixel([pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);
var box = ol.extent.boundingExtent([lowerLeft, upperRight]);
var rBush = this.rBush_;
var nodes = rBush.getInExtent(box);
if(nodes.length > 0) {
nodes.sort(sortByDistance);
var node = nodes[0];
var closestSegment = node.segment;
var vertex = ol.coordinate.closestOnSegment(pixelCoordinate, closestSegment);
var vertexPixel = map.getPixelFromCoordinate(vertex);
if(Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <= this.pixelTolerance_) {
var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
this.snappedToVertex_ = dist <= this.pixelTolerance_;
if(this.snappedToVertex_) {
vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0]
}
this.createOrUpdateVertexFeature_(vertex);
var vertexSegments = {};
vertexSegments[goog.getUid(closestSegment)] = true;
var segment;
for(var i = 1, ii = nodes.length;i < ii;++i) {
segment = nodes[i].segment;
if(ol.coordinate.equals(closestSegment[0], segment[0]) && ol.coordinate.equals(closestSegment[1], segment[1]) || ol.coordinate.equals(closestSegment[0], segment[1]) && ol.coordinate.equals(closestSegment[1], segment[0])) {
vertexSegments[goog.getUid(segment)] = true
}else {
break
}
}
this.vertexSegments_ = vertexSegments;
return
}
}
if(!goog.isNull(this.vertexFeature_)) {
this.overlay_.removeFeature(this.vertexFeature_);
this.vertexFeature_ = null
}
};
ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) {
var segment = segmentData.segment;
var feature = segmentData.feature;
var geometry = segmentData.geometry;
var depth = segmentData.depth;
var index = segmentData.index;
var coordinates;
switch(geometry.getType()) {
case ol.geom.GeometryType.MULTI_LINE_STRING:
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
coordinates = geometry.getCoordinates();
coordinates[depth[0]].splice(index + 1, 0, vertex);
break;
case ol.geom.GeometryType.POLYGON:
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
coordinates = geometry.getCoordinates();
coordinates[depth[0]].splice(index + 1, 0, vertex);
break;
case ol.geom.GeometryType.MULTI_POLYGON:
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon);
coordinates = geometry.getCoordinates();
coordinates[depth[1]][depth[0]].splice(index + 1, 0, vertex);
break;
case ol.geom.GeometryType.LINE_STRING:
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
coordinates = geometry.getCoordinates();
coordinates.splice(index + 1, 0, vertex);
break;
default:
return
}
geometry.setCoordinates(coordinates);
var rTree = this.rBush_;
goog.asserts.assert(goog.isDef(segment));
rTree.remove(segmentData);
goog.asserts.assert(goog.isDef(index));
this.updateSegmentIndices_(geometry, index, depth, 1);
var newSegmentData = ({segment:[segment[0], vertex], feature:feature, geometry:geometry, depth:depth, index:index});
rTree.insert(ol.extent.boundingExtent(newSegmentData.segment), newSegmentData);
this.dragSegments_.push([newSegmentData, 1]);
var newSegmentData2 = ({segment:[vertex, segment[1]], feature:feature, geometry:geometry, depth:depth, index:index + 1});
rTree.insert(ol.extent.boundingExtent(newSegmentData2.segment), newSegmentData2);
this.dragSegments_.push([newSegmentData2, 0])
};
ol.interaction.Modify.prototype.removeVertex_ = function() {
var dragSegments = this.dragSegments_;
var segmentsByFeature = {};
var deleted = false;
var component, coordinates, dragSegment, geometry, i, index, left;
var newIndex, newSegment, right, segmentData, uid;
for(i = dragSegments.length - 1;i >= 0;--i) {
dragSegment = dragSegments[i];
segmentData = dragSegment[0];
geometry = segmentData.geometry;
coordinates = geometry.getCoordinates();
uid = goog.getUid(segmentData.feature);
left = right = index = undefined;
if(dragSegment[1] === 0) {
right = segmentData;
index = segmentData.index
}else {
if(dragSegment[1] == 1) {
left = segmentData;
index = segmentData.index + 1
}
}
if(!(uid in segmentsByFeature)) {
segmentsByFeature[uid] = [left, right, index]
}
newSegment = segmentsByFeature[uid];
if(goog.isDef(left)) {
newSegment[0] = left
}
if(goog.isDef(right)) {
newSegment[1] = right
}
if(goog.isDef(newSegment[0]) && goog.isDef(newSegment[1])) {
component = coordinates;
deleted = false;
newIndex = index - 1;
switch(geometry.getType()) {
case ol.geom.GeometryType.MULTI_LINE_STRING:
coordinates[segmentData.depth[0]].splice(index, 1);
deleted = true;
break;
case ol.geom.GeometryType.LINE_STRING:
coordinates.splice(index, 1);
deleted = true;
break;
case ol.geom.GeometryType.MULTI_POLYGON:
component = component[segmentData.depth[1]];
case ol.geom.GeometryType.POLYGON:
component = component[segmentData.depth[0]];
if(component.length > 4) {
if(index == component.length - 1) {
index = 0
}
component.splice(index, 1);
deleted = true;
if(index === 0) {
component.pop();
component.push(component[0]);
newIndex = component.length - 1
}
}
break
}
if(deleted) {
this.rBush_.remove(newSegment[0]);
this.rBush_.remove(newSegment[1]);
geometry.setCoordinates(coordinates);
goog.asserts.assert(newIndex >= 0);
var newSegmentData = ({depth:segmentData.depth, feature:segmentData.feature, geometry:segmentData.geometry, index:newIndex, segment:[newSegment[0].segment[0], newSegment[1].segment[1]]});
this.rBush_.insert(ol.extent.boundingExtent(newSegmentData.segment), newSegmentData);
this.updateSegmentIndices_(geometry, index, segmentData.depth, -1);
this.overlay_.removeFeature(this.vertexFeature_);
this.vertexFeature_ = null
}
}
}
return deleted
};
ol.interaction.Modify.prototype.shouldStopEvent = goog.functions.identity;
ol.interaction.Modify.prototype.updateSegmentIndices_ = function(geometry, index, depth, delta) {
this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentDataMatch) {
if(segmentDataMatch.geometry === geometry && (!goog.isDef(depth) || goog.array.equals(segmentDataMatch.depth, depth)) && segmentDataMatch.index > index) {
segmentDataMatch.index += delta
}
})
};
ol.interaction.Modify.getDefaultStyleFunction = function() {
var style = ol.feature.createDefaultEditingStyles();
return function(feature, resolution) {
return style[ol.geom.GeometryType.POINT]
}
};
goog.provide("ol.interaction.Select");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.functions");
goog.require("ol.CollectionEventType");
goog.require("ol.Feature");
goog.require("ol.FeatureOverlay");
goog.require("ol.events.condition");
goog.require("ol.feature");
goog.require("ol.geom.GeometryType");
goog.require("ol.interaction.Interaction");
ol.interaction.Select = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.singleClick;
this.addCondition_ = goog.isDef(options.addCondition) ? options.addCondition : ol.events.condition.never;
this.removeCondition_ = goog.isDef(options.removeCondition) ? options.removeCondition : ol.events.condition.never;
this.toggleCondition_ = goog.isDef(options.toggleCondition) ? options.toggleCondition : ol.events.condition.shiftKeyOnly;
var layerFilter;
if(goog.isDef(options.layers)) {
if(goog.isFunction(options.layers)) {
layerFilter = options.layers
}else {
var layers = options.layers;
layerFilter = function(layer) {
return goog.array.contains(layers, layer)
}
}
}else {
layerFilter = goog.functions.TRUE
}
this.layerFilter_ = layerFilter;
this.featureOverlay_ = new ol.FeatureOverlay({style:goog.isDef(options.style) ? options.style : ol.interaction.Select.getDefaultStyleFunction()});
var features = this.featureOverlay_.getFeatures();
goog.events.listen(features, ol.CollectionEventType.ADD, this.addFeature_, false, this);
goog.events.listen(features, ol.CollectionEventType.REMOVE, this.removeFeature_, false, this)
};
goog.inherits(ol.interaction.Select, ol.interaction.Interaction);
ol.interaction.Select.prototype.getFeatures = function() {
return this.featureOverlay_.getFeatures()
};
ol.interaction.Select.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(!this.condition_(mapBrowserEvent)) {
return true
}
var add = this.addCondition_(mapBrowserEvent);
var remove = this.removeCondition_(mapBrowserEvent);
var toggle = this.toggleCondition_(mapBrowserEvent);
var set = !add && !remove && !toggle;
var map = mapBrowserEvent.map;
var features = this.featureOverlay_.getFeatures();
if(set) {
var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel, function(feature, layer) {
return feature
}, undefined, this.layerFilter_);
if(goog.isDef(feature) && features.getLength() == 1 && features.getAt(0) == feature) {
}else {
if(features.getLength() !== 0) {
features.clear()
}
if(goog.isDef(feature)) {
features.push(feature)
}
}
}else {
map.forEachFeatureAtPixel(mapBrowserEvent.pixel, function(feature, layer) {
var index = goog.array.indexOf(features.getArray(), feature);
if(index == -1) {
if(add || toggle) {
features.push(feature)
}
}else {
if(remove || toggle) {
features.removeAt(index)
}
}
}, undefined, this.layerFilter_)
}
return false
};
ol.interaction.Select.prototype.setMap = function(map) {
var currentMap = this.getMap();
var selectedFeatures = this.featureOverlay_.getFeatures();
if(!goog.isNull(currentMap)) {
selectedFeatures.forEach(currentMap.unskipFeature, currentMap)
}
goog.base(this, "setMap", map);
this.featureOverlay_.setMap(map);
if(!goog.isNull(map)) {
selectedFeatures.forEach(map.skipFeature, map)
}
};
ol.interaction.Select.getDefaultStyleFunction = function() {
var styles = ol.feature.createDefaultEditingStyles();
goog.array.extend(styles[ol.geom.GeometryType.POLYGON], styles[ol.geom.GeometryType.LINE_STRING]);
goog.array.extend(styles[ol.geom.GeometryType.GEOMETRY_COLLECTION], styles[ol.geom.GeometryType.LINE_STRING]);
return function(feature, resolution) {
return styles[feature.getGeometry().getType()]
}
};
ol.interaction.Select.prototype.addFeature_ = function(evt) {
var feature = evt.element;
var map = this.getMap();
goog.asserts.assertInstanceof(feature, ol.Feature);
if(!goog.isNull(map)) {
map.skipFeature(feature)
}
};
ol.interaction.Select.prototype.removeFeature_ = function(evt) {
var feature = evt.element;
var map = this.getMap();
goog.asserts.assertInstanceof(feature, ol.Feature);
if(!goog.isNull(map)) {
map.unskipFeature(feature)
}
};
goog.provide("ol.layer.Heatmap");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.math");
goog.require("ol.Object");
goog.require("ol.dom");
goog.require("ol.layer.Vector");
goog.require("ol.render.EventType");
goog.require("ol.style.Icon");
goog.require("ol.style.Style");
ol.layer.HeatmapLayerProperty = {GRADIENT:"gradient"};
ol.layer.Heatmap = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, (options));
this.gradient_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.HeatmapLayerProperty.GRADIENT), this.handleGradientChanged_, false, this);
this.setGradient(goog.isDef(options.gradient) ? options.gradient : ol.layer.Heatmap.DEFAULT_GRADIENT);
var circle = ol.layer.Heatmap.createCircle_(goog.isDef(options.radius) ? options.radius : 8, goog.isDef(options.blur) ? options.blur : 15, goog.isDef(options.shadow) ? options.shadow : 250);
var styleCache = new Array(256);
var weight = goog.isDef(options.weight) ? options.weight : "weight";
var weightFunction;
if(goog.isString(weight)) {
weightFunction = function(feature) {
return feature.get(weight)
}
}else {
weightFunction = weight
}
goog.asserts.assert(goog.isFunction(weightFunction));
this.setStyle(function(feature, resolution) {
var weight = weightFunction(feature);
var opacity = goog.isDef(weight) ? goog.math.clamp(weight, 0, 1) : 1;
var index = 255 * opacity | 0;
var style = styleCache[index];
if(!goog.isDef(style)) {
style = [new ol.style.Style({image:new ol.style.Icon({opacity:opacity, src:circle})})];
styleCache[index] = style
}
return style
});
this.setRenderOrder(null);
goog.events.listen(this, ol.render.EventType.RENDER, this.handleRender_, false, this)
};
goog.inherits(ol.layer.Heatmap, ol.layer.Vector);
ol.layer.Heatmap.DEFAULT_GRADIENT = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"];
ol.layer.Heatmap.createGradient_ = function(colors) {
var width = 1;
var height = 256;
var context = ol.dom.createCanvasContext2D(width, height);
var gradient = context.createLinearGradient(0, 0, width, height);
var step = 1 / (colors.length - 1);
for(var i = 0, ii = colors.length;i < ii;++i) {
gradient.addColorStop(i * step, colors[i])
}
context.fillStyle = gradient;
context.fillRect(0, 0, width, height);
return context.getImageData(0, 0, width, height).data
};
ol.layer.Heatmap.createCircle_ = function(radius, blur, shadow) {
var halfSize = radius + blur + 1;
var size = 2 * halfSize;
var context = ol.dom.createCanvasContext2D(size, size);
context.shadowOffsetX = context.shadowOffsetY = shadow;
context.shadowBlur = blur;
context.shadowColor = "#000";
context.beginPath();
var center = halfSize - shadow;
context.arc(center, center, radius, 0, Math.PI * 2, true);
context.fill();
return context.canvas.toDataURL()
};
ol.layer.Heatmap.prototype.getGradient = function() {
return(this.get(ol.layer.HeatmapLayerProperty.GRADIENT))
};
goog.exportProperty(ol.layer.Heatmap.prototype, "getGradient", ol.layer.Heatmap.prototype.getGradient);
ol.layer.Heatmap.prototype.handleGradientChanged_ = function() {
this.gradient_ = ol.layer.Heatmap.createGradient_(this.getGradient())
};
ol.layer.Heatmap.prototype.handleRender_ = function(event) {
goog.asserts.assert(event.type == ol.render.EventType.RENDER);
var context = event.context;
var canvas = context.canvas;
var image = context.getImageData(0, 0, canvas.width, canvas.height);
var view8 = image.data;
var i, ii, alpha, offset;
for(i = 0, ii = view8.length;i < ii;i += 4) {
alpha = view8[i + 3] * 4;
if(alpha) {
view8[i] = this.gradient_[alpha];
view8[i + 1] = this.gradient_[alpha + 1];
view8[i + 2] = this.gradient_[alpha + 2]
}
}
context.putImageData(image, 0, 0)
};
ol.layer.Heatmap.prototype.setGradient = function(colors) {
this.set(ol.layer.HeatmapLayerProperty.GRADIENT, colors)
};
goog.exportProperty(ol.layer.Heatmap.prototype, "setGradient", ol.layer.Heatmap.prototype.setGradient);
goog.provide("ol.loadingstrategy");
goog.require("ol.TileCoord");
ol.loadingstrategy.all = function(extent, resolution) {
return[[-Infinity, -Infinity, Infinity, Infinity]]
};
ol.loadingstrategy.bbox = function(extent, resolution) {
return[extent]
};
ol.loadingstrategy.createTile = function(tileGrid) {
return function(extent, resolution) {
var z = tileGrid.getZForResolution(resolution);
var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
var extents = [];
var tileCoord = new ol.TileCoord(z, 0, 0);
for(tileCoord.x = tileRange.minX;tileCoord.x <= tileRange.maxX;++tileCoord.x) {
for(tileCoord.y = tileRange.minY;tileCoord.y <= tileRange.maxY;++tileCoord.y) {
extents.push(tileGrid.getTileCoordExtent(tileCoord))
}
}
return extents
}
};
goog.provide("ol.Ellipsoid");
goog.require("goog.math");
goog.require("ol.Coordinate");
ol.Ellipsoid = function(a, flattening) {
this.a = a;
this.flattening = flattening;
this.b = this.a * (1 - this.flattening);
this.eSquared = 2 * flattening - flattening * flattening;
this.e = Math.sqrt(this.eSquared)
};
ol.Ellipsoid.prototype.vincenty = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var minDeltaLambda = goog.isDef(opt_minDeltaLambda) ? opt_minDeltaLambda : 1E-12;
var maxIterations = goog.isDef(opt_maxIterations) ? opt_maxIterations : 100;
var f = this.flattening;
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var U1 = Math.atan((1 - f) * Math.tan(lat1));
var cosU1 = Math.cos(U1);
var sinU1 = Math.sin(U1);
var U2 = Math.atan((1 - f) * Math.tan(lat2));
var cosU2 = Math.cos(U2);
var sinU2 = Math.sin(U2);
var lambda = deltaLon;
var cosSquaredAlpha, sinAlpha;
var cosLambda, deltaLambda = Infinity, sinLambda;
var cos2SigmaM, cosSigma, sigma, sinSigma;
var i;
for(i = maxIterations;i > 0;--i) {
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var x = cosU2 * sinLambda;
var y = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda;
sinSigma = Math.sqrt(x * x + y * y);
if(sinSigma === 0) {
return{distance:0, initialBearing:0, finalBearing:0}
}
cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;
sigma = Math.atan2(sinSigma, cosSigma);
sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;
cosSquaredAlpha = 1 - sinAlpha * sinAlpha;
cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSquaredAlpha;
if(isNaN(cos2SigmaM)) {
cos2SigmaM = 0
}
var C = f / 16 * cosSquaredAlpha * (4 + f * (4 - 3 * cosSquaredAlpha));
var lambdaPrime = deltaLon + (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1)));
deltaLambda = Math.abs(lambdaPrime - lambda);
lambda = lambdaPrime;
if(deltaLambda < minDeltaLambda) {
break
}
}
if(i === 0) {
return{distance:NaN, finalBearing:NaN, initialBearing:NaN}
}
var aSquared = this.a * this.a;
var bSquared = this.b * this.b;
var uSquared = cosSquaredAlpha * (aSquared - bSquared) / bSquared;
var A = 1 + uSquared / 16384 * (4096 + uSquared * (uSquared * (320 - 175 * uSquared) - 768));
var B = uSquared / 1024 * (256 + uSquared * (uSquared * (74 - 47 * uSquared) - 128));
var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1) - B / 6 * cos2SigmaM * (4 * sinSigma * sinSigma - 3) * (4 * cos2SigmaM * cos2SigmaM - 3)));
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var alpha1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);
var alpha2 = Math.atan2(cosU1 * sinLambda, cosU1 * sinU2 * cosLambda - sinU1 * cosU2);
return{distance:this.b * A * (sigma - deltaSigma), initialBearing:goog.math.toDegrees(alpha1), finalBearing:goog.math.toDegrees(alpha2)}
};
ol.Ellipsoid.prototype.vincentyDistance = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.distance
};
ol.Ellipsoid.prototype.vincentyFinalBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.finalBearing
};
ol.Ellipsoid.prototype.vincentyInitialBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.initialBearing
};
goog.provide("ol.ellipsoid.BESSEL1841");
goog.require("ol.Ellipsoid");
ol.ellipsoid.BESSEL1841 = new ol.Ellipsoid(6377397.155, 1 / 299.15281285);
goog.provide("ol.proj.CH");
goog.provide("ol.proj.EPSG2056");
goog.provide("ol.proj.EPSG21781");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("ol.ellipsoid.BESSEL1841");
goog.require("ol.proj");
goog.require("ol.proj.EPSG4326");
goog.require("ol.proj.Projection");
goog.require("ol.proj.Units");
ol.proj.CH = function(options) {
goog.base(this, {code:options.code, extent:options.extent, global:false, units:ol.proj.Units.METERS})
};
goog.inherits(ol.proj.CH, ol.proj.Projection);
ol.proj.CH.PHI0 = goog.math.toRadians((3600 * 46 + 60 * 57 + 8.66) / 3600);
ol.proj.CH.LAMBDA0 = goog.math.toRadians((3600 * 7 + 60 * 26 + 22.5) / 3600);
ol.proj.CH.ELLIPSOID = ol.ellipsoid.BESSEL1841;
ol.proj.CH.COS_PHI0 = Math.cos(ol.proj.CH.PHI0);
ol.proj.CH.SIN_PHI0 = Math.sin(ol.proj.CH.PHI0);
ol.proj.CH.R = ol.proj.CH.ELLIPSOID.a * Math.sqrt(1 - ol.proj.CH.ELLIPSOID.eSquared) / (1 - ol.proj.CH.ELLIPSOID.eSquared * ol.proj.CH.SIN_PHI0 * ol.proj.CH.SIN_PHI0);
ol.proj.CH.ALPHA = Math.sqrt(1 + ol.proj.CH.ELLIPSOID.eSquared * Math.pow(ol.proj.CH.COS_PHI0, 4) / (1 - ol.proj.CH.ELLIPSOID.eSquared));
ol.proj.CH.SIN_B0 = ol.proj.CH.SIN_PHI0 / ol.proj.CH.ALPHA;
ol.proj.CH.B0 = Math.asin(ol.proj.CH.SIN_B0);
ol.proj.CH.COS_B0 = Math.cos(ol.proj.CH.B0);
ol.proj.CH.K = Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.B0 / 2)) - ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.PHI0 / 2)) + ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0) / (1 - ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0)) / 2;
ol.proj.CH.add = function() {
ol.proj.EPSG2056.add();
ol.proj.EPSG21781.add();
var epsg2056 = ol.proj.get("EPSG:2056");
var epsg21781 = ol.proj.get("EPSG:21781");
ol.proj.addTransform(epsg2056, epsg21781, goog.partial(ol.proj.CH.translate_, -2E6, -1E6));
ol.proj.addTransform(epsg21781, epsg2056, goog.partial(ol.proj.CH.translate_, 2E6, 1E6))
};
ol.proj.CH.fromEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var auxLat, auxLon, i;
for(i = 0;i < n;i += dimension) {
auxLat = 36 * input[i + 1] / 100 - 16.902866;
auxLon = 36 * input[i] / 100 - 2.67825;
output[i] = offsetY + 72.37 + 211455.93 * auxLon - 10938.51 * auxLon * auxLat - 0.36 * auxLon * auxLat * auxLat - 44.54 * auxLon * auxLon * auxLon;
output[i + 1] = offsetX + 147.07 + 308807.95 * auxLat + 3745.25 * auxLon * auxLon + 76.63 * auxLat * auxLat - 194.56 * auxLon * auxLon * auxLat + 119.79 * auxLat * auxLat * auxLat
}
return output
};
ol.proj.CH.fromEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var b, bBar, eSinPhi, i, l, lambda, lBar, phi, s;
for(i = 0;i < n;i += dimension) {
lambda = goog.math.toRadians(input[i]);
phi = goog.math.toRadians(input[i + 1]);
eSinPhi = ol.proj.CH.ELLIPSOID.e * Math.sin(phi);
s = ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + phi / 2)) - ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + eSinPhi) / (1 - eSinPhi)) / 2 + ol.proj.CH.K;
b = 2 * (Math.atan(Math.exp(s)) - Math.PI / 4);
l = ol.proj.CH.ALPHA * (lambda - ol.proj.CH.LAMBDA0);
lBar = Math.atan2(Math.sin(l), ol.proj.CH.SIN_B0 * Math.tan(b) + ol.proj.CH.COS_B0 * Math.cos(l));
bBar = Math.asin(ol.proj.CH.COS_B0 * Math.sin(b) - ol.proj.CH.SIN_B0 * Math.cos(b) * Math.cos(l));
output[i] = offsetY + ol.proj.CH.R * lBar;
output[i + 1] = offsetX + ol.proj.CH.R * Math.log((1 + Math.sin(bBar)) / (1 - Math.sin(bBar))) / 2
}
return output
};
ol.proj.CH.toEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var auxX, auxY, i;
for(i = 0;i < n;i += dimension) {
auxY = (input[i] - offsetY) / 1E6;
auxX = (input[i + 1] - offsetX) / 1E6;
output[i] = 100 * (2.6779094 + 4.728982 * auxY + 0.791484 * auxY * auxX + 0.1306 * auxY * auxX * auxX - 0.0436 * auxY * auxY * auxY) / 36;
output[i + 1] = 100 * (16.9023892 + 3.238272 * auxX - 0.270978 * auxY * auxY - 0.002528 * auxX * auxX - 0.0447 * auxY * auxY * auxX - 0.014 * auxX * auxX * auxX) / 36
}
return output
};
ol.proj.CH.toEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var b, bBar, eSinPhi, i, iterations, l, lambda, lastPhi, lBar, phi, s, x, y;
for(i = 0;i < n;i += dimension) {
y = input[i] - offsetY;
x = input[i + 1] - offsetX;
lBar = y / ol.proj.CH.R;
bBar = 2 * (Math.atan(Math.exp(x / ol.proj.CH.R)) - Math.PI / 4);
b = Math.asin(ol.proj.CH.COS_B0 * Math.sin(bBar) + ol.proj.CH.SIN_B0 * Math.cos(bBar) * Math.cos(lBar));
l = Math.atan2(Math.sin(lBar), ol.proj.CH.COS_B0 * Math.cos(lBar) - ol.proj.CH.SIN_B0 * Math.tan(bBar));
lambda = ol.proj.CH.LAMBDA0 + l / ol.proj.CH.ALPHA;
lastPhi = phi = b;
for(iterations = 20;iterations > 0;--iterations) {
s = (Math.log(Math.tan(Math.PI / 4 + b / 2)) - ol.proj.CH.K) / ol.proj.CH.ALPHA + ol.proj.CH.ELLIPSOID.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(ol.proj.CH.ELLIPSOID.e * Math.sin(phi)) / 2));
phi = 2 * Math.atan(Math.exp(s)) - Math.PI / 2;
if(Math.abs(phi - lastPhi) < 1E-7) {
break
}
lastPhi = phi
}
goog.asserts.assert(iterations !== 0);
output[i] = goog.math.toDegrees(lambda);
output[i + 1] = goog.math.toDegrees(phi)
}
return output
};
ol.proj.CH.translate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var i;
for(i = 0;i < n;i += dimension) {
output[i] = input[i] + offsetY;
output[i + 1] = input[i + 1] + offsetX
}
return output
};
ol.proj.CH.prototype.getPointResolution = function(resolution, point) {
return resolution
};
ol.proj.EPSG2056 = function() {
goog.base(this, {code:"EPSG:2056", extent:ol.proj.EPSG2056.EXTENT})
};
goog.inherits(ol.proj.EPSG2056, ol.proj.CH);
ol.proj.EPSG2056.EXTENT = [2485869.5728, 1076443.1884, 2837076.5648, 1299941.7864];
ol.proj.EPSG2056.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
var epsg2056 = new ol.proj.EPSG2056;
ol.proj.addProjection(epsg2056);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg2056], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 26E5, 12E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 26E5, 12E5))
};
ol.proj.EPSG21781 = function() {
goog.base(this, {code:"EPSG:21781", extent:ol.proj.EPSG21781.EXTENT})
};
goog.inherits(ol.proj.EPSG21781, ol.proj.CH);
ol.proj.EPSG21781.EXTENT = [485869.5728, 76443.1884, 837076.5648, 299941.7864];
ol.proj.EPSG21781.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
var epsg21781 = new ol.proj.EPSG21781;
ol.proj.addProjection(epsg21781);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg21781], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 6E5, 2E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 6E5, 2E5))
};
goog.provide("goog.net.jsloader");
goog.provide("goog.net.jsloader.Error");
goog.provide("goog.net.jsloader.ErrorCode");
goog.provide("goog.net.jsloader.Options");
goog.require("goog.array");
goog.require("goog.async.Deferred");
goog.require("goog.debug.Error");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.net.jsloader.GLOBAL_VERIFY_OBJS_ = "closure_verification";
goog.net.jsloader.DEFAULT_TIMEOUT = 5E3;
goog.net.jsloader.Options;
goog.net.jsloader.scriptsToLoad_ = [];
goog.net.jsloader.loadMany = function(uris, opt_options) {
if(!uris.length) {
return
}
var isAnotherModuleLoading = goog.net.jsloader.scriptsToLoad_.length;
goog.array.extend(goog.net.jsloader.scriptsToLoad_, uris);
if(isAnotherModuleLoading) {
return
}
uris = goog.net.jsloader.scriptsToLoad_;
var popAndLoadNextScript = function() {
var uri = uris.shift();
var deferred = goog.net.jsloader.load(uri, opt_options);
if(uris.length) {
deferred.addBoth(popAndLoadNextScript)
}
};
popAndLoadNextScript()
};
goog.net.jsloader.load = function(uri, opt_options) {
var options = opt_options || {};
var doc = options.document || document;
var script = goog.dom.createElement(goog.dom.TagName.SCRIPT);
var request = {script_:script, timeout_:undefined};
var deferred = new goog.async.Deferred(goog.net.jsloader.cancel_, request);
var timeout = null;
var timeoutDuration = goog.isDefAndNotNull(options.timeout) ? options.timeout : goog.net.jsloader.DEFAULT_TIMEOUT;
if(timeoutDuration > 0) {
timeout = window.setTimeout(function() {
goog.net.jsloader.cleanup_(script, true);
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.TIMEOUT, "Timeout reached for loading script " + uri))
}, timeoutDuration);
request.timeout_ = timeout
}
script.onload = script.onreadystatechange = function() {
if(!script.readyState || script.readyState == "loaded" || script.readyState == "complete") {
var removeScriptNode = options.cleanupWhenDone || false;
goog.net.jsloader.cleanup_(script, removeScriptNode, timeout);
deferred.callback(null)
}
};
script.onerror = function() {
goog.net.jsloader.cleanup_(script, true, timeout);
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.LOAD_ERROR, "Error while loading script " + uri))
};
goog.dom.setProperties(script, {"type":"text/javascript", "charset":"UTF-8", "src":uri});
var scriptParent = goog.net.jsloader.getScriptParentElement_(doc);
scriptParent.appendChild(script);
return deferred
};
goog.net.jsloader.loadAndVerify = function(uri, verificationObjName, options) {
if(!goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_]) {
goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_] = {}
}
var verifyObjs = goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_];
if(goog.isDef(verifyObjs[verificationObjName])) {
return goog.async.Deferred.fail(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_OBJECT_ALREADY_EXISTS, "Verification object " + verificationObjName + " already defined."))
}
var sendDeferred = goog.net.jsloader.load(uri, options);
var deferred = new goog.async.Deferred(goog.bind(sendDeferred.cancel, sendDeferred));
sendDeferred.addCallback(function() {
var result = verifyObjs[verificationObjName];
if(goog.isDef(result)) {
deferred.callback(result);
delete verifyObjs[verificationObjName]
}else {
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_ERROR, "Script " + uri + " loaded, but verification object " + verificationObjName + " was not defined."))
}
});
sendDeferred.addErrback(function(error) {
if(goog.isDef(verifyObjs[verificationObjName])) {
delete verifyObjs[verificationObjName]
}
deferred.errback(error)
});
return deferred
};
goog.net.jsloader.getScriptParentElement_ = function(doc) {
var headElements = doc.getElementsByTagName(goog.dom.TagName.HEAD);
if(!headElements || goog.array.isEmpty(headElements)) {
return doc.documentElement
}else {
return headElements[0]
}
};
goog.net.jsloader.cancel_ = function() {
var request = this;
if(request && request.script_) {
var scriptNode = request.script_;
if(scriptNode && scriptNode.tagName == "SCRIPT") {
goog.net.jsloader.cleanup_(scriptNode, true, request.timeout_)
}
}
};
goog.net.jsloader.cleanup_ = function(scriptNode, removeScriptNode, opt_timeout) {
if(goog.isDefAndNotNull(opt_timeout)) {
goog.global.clearTimeout(opt_timeout)
}
scriptNode.onload = goog.nullFunction;
scriptNode.onerror = goog.nullFunction;
scriptNode.onreadystatechange = goog.nullFunction;
if(removeScriptNode) {
window.setTimeout(function() {
goog.dom.removeNode(scriptNode)
}, 0)
}
};
goog.net.jsloader.ErrorCode = {LOAD_ERROR:0, TIMEOUT:1, VERIFY_ERROR:2, VERIFY_OBJECT_ALREADY_EXISTS:3};
goog.net.jsloader.Error = function(code, opt_message) {
var msg = "Jsloader error (code #" + code + ")";
if(opt_message) {
msg += ": " + opt_message
}
goog.base(this, msg);
this.code = code
};
goog.inherits(goog.net.jsloader.Error, goog.debug.Error);
goog.provide("goog.net.Jsonp");
goog.require("goog.Uri");
goog.require("goog.net.jsloader");
goog.net.Jsonp = function(uri, opt_callbackParamName) {
this.uri_ = new goog.Uri(uri);
this.callbackParamName_ = opt_callbackParamName ? opt_callbackParamName : "callback";
this.timeout_ = 5E3
};
goog.net.Jsonp.CALLBACKS = "_callbacks_";
goog.net.Jsonp.scriptCounter_ = 0;
goog.net.Jsonp.prototype.setRequestTimeout = function(timeout) {
this.timeout_ = timeout
};
goog.net.Jsonp.prototype.getRequestTimeout = function() {
return this.timeout_
};
goog.net.Jsonp.prototype.send = function(opt_payload, opt_replyCallback, opt_errorCallback, opt_callbackParamValue) {
var payload = opt_payload || null;
var id = opt_callbackParamValue || "_" + (goog.net.Jsonp.scriptCounter_++).toString(36) + goog.now().toString(36);
if(!goog.global[goog.net.Jsonp.CALLBACKS]) {
goog.global[goog.net.Jsonp.CALLBACKS] = {}
}
var uri = this.uri_.clone();
if(payload) {
goog.net.Jsonp.addPayloadToUri_(payload, uri)
}
if(opt_replyCallback) {
var reply = goog.net.Jsonp.newReplyHandler_(id, opt_replyCallback);
goog.global[goog.net.Jsonp.CALLBACKS][id] = reply;
uri.setParameterValues(this.callbackParamName_, goog.net.Jsonp.CALLBACKS + "." + id)
}
var deferred = goog.net.jsloader.load(uri.toString(), {timeout:this.timeout_, cleanupWhenDone:true});
var error = goog.net.Jsonp.newErrorHandler_(id, payload, opt_errorCallback);
deferred.addErrback(error);
return{id_:id, deferred_:deferred}
};
goog.net.Jsonp.prototype.cancel = function(request) {
if(request) {
if(request.deferred_) {
request.deferred_.cancel()
}
if(request.id_) {
goog.net.Jsonp.cleanup_(request.id_, false)
}
}
};
goog.net.Jsonp.newErrorHandler_ = function(id, payload, opt_errorCallback) {
return function() {
goog.net.Jsonp.cleanup_(id, false);
if(opt_errorCallback) {
opt_errorCallback(payload)
}
}
};
goog.net.Jsonp.newReplyHandler_ = function(id, replyCallback) {
return function(var_args) {
goog.net.Jsonp.cleanup_(id, true);
replyCallback.apply(undefined, arguments)
}
};
goog.net.Jsonp.cleanup_ = function(id, deleteReplyHandler) {
if(goog.global[goog.net.Jsonp.CALLBACKS][id]) {
if(deleteReplyHandler) {
delete goog.global[goog.net.Jsonp.CALLBACKS][id]
}else {
goog.global[goog.net.Jsonp.CALLBACKS][id] = goog.nullFunction
}
}
};
goog.net.Jsonp.addPayloadToUri_ = function(payload, uri) {
for(var name in payload) {
if(!payload.hasOwnProperty || payload.hasOwnProperty(name)) {
uri.setParameterValues(name, payload[name])
}
}
return uri
};
goog.provide("ol.TileUrlFunction");
goog.provide("ol.TileUrlFunctionType");
goog.require("goog.array");
goog.require("goog.math");
goog.require("ol.TileCoord");
ol.TileUrlFunctionType;
ol.TileCoordTransformType;
ol.TileUrlFunction.createFromTemplate = function(template) {
return function(tileCoord, pixelRatio, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
return template.replace("{z}", tileCoord.z.toString()).replace("{x}", tileCoord.x.toString()).replace("{y}", tileCoord.y.toString()).replace("{-y}", function() {
var y = (1 << tileCoord.z) - tileCoord.y - 1;
return y.toString()
})
}
}
};
ol.TileUrlFunction.createFromTemplates = function(templates) {
return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(templates, ol.TileUrlFunction.createFromTemplate))
};
ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) {
if(tileUrlFunctions.length === 1) {
return tileUrlFunctions[0]
}
return function(tileCoord, pixelRatio, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var index = goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length);
return tileUrlFunctions[index](tileCoord, pixelRatio, projection)
}
}
};
ol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, pixelRatio, projection) {
return undefined
};
ol.TileUrlFunction.withTileCoordTransform = function(transformFn, tileUrlFunction) {
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
return function(tileCoord, pixelRatio, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
return tileUrlFunction(transformFn(tileCoord, projection, tmpTileCoord), pixelRatio, projection)
}
}
};
ol.TileUrlFunction.expandUrl = function(url) {
var urls = [];
var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url);
if(match) {
var startCharCode = match[1].charCodeAt(0);
var stopCharCode = match[2].charCodeAt(0);
var charCode;
for(charCode = startCharCode;charCode <= stopCharCode;++charCode) {
urls.push(url.replace(match[0], String.fromCharCode(charCode)))
}
}else {
urls.push(url)
}
return urls
};
goog.provide("ol.TileCache");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.structs.LRUCache");
ol.TileCache = function(opt_highWaterMark) {
goog.base(this);
this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK
};
goog.inherits(ol.TileCache, ol.structs.LRUCache);
ol.TileCache.prototype.canExpireCache = function() {
return this.getCount() > this.highWaterMark_
};
ol.TileCache.prototype.expireCache = function(usedTiles) {
var tile, zKey;
while(this.canExpireCache()) {
tile = (this.peekLast());
zKey = tile.tileCoord.z.toString();
if(zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) {
break
}else {
this.pop()
}
}
};
ol.TileCache.prototype.pruneTileRange = function(tileRange) {
var i = this.getCount(), key;
while(i--) {
key = this.peekLastKey();
if(tileRange.contains(ol.TileCoord.createFromString(key))) {
this.pop()
}else {
this.get(key)
}
}
};
goog.provide("ol.source.TileImage");
goog.require("goog.asserts");
goog.require("ol.ImageTile");
goog.require("ol.Tile");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TileLoadFunctionType");
goog.require("ol.TileState");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.source.Tile");
ol.source.TileImage = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, opaque:options.opaque, projection:options.projection, tileGrid:options.tileGrid});
this.tileUrlFunction = goog.isDef(options.tileUrlFunction) ? options.tileUrlFunction : ol.TileUrlFunction.nullTileUrlFunction;
this.crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.tileCache = new ol.TileCache;
this.tileLoadFunction = goog.isDef(options.tileLoadFunction) ? options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction;
this.tileClass = goog.isDef(options.tileClass) ? options.tileClass : ol.ImageTile
};
goog.inherits(ol.source.TileImage, ol.source.Tile);
ol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) {
imageTile.getImage().src = src
};
ol.source.TileImage.prototype.canExpireCache = function() {
return this.tileCache.canExpireCache()
};
ol.source.TileImage.prototype.expireCache = function(usedTiles) {
this.tileCache.expireCache(usedTiles)
};
ol.source.TileImage.prototype.getTile = function(z, x, y, pixelRatio, projection) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache.containsKey(tileCoordKey)) {
return(this.tileCache.get(tileCoordKey))
}else {
goog.asserts.assert(projection);
var tileCoord = new ol.TileCoord(z, x, y);
var tileUrl = this.tileUrlFunction(tileCoord, pixelRatio, projection);
var tile = new this.tileClass(tileCoord, goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY, goog.isDef(tileUrl) ? tileUrl : "", this.crossOrigin, this.tileLoadFunction);
this.tileCache.set(tileCoordKey, tile);
return tile
}
};
ol.source.TileImage.prototype.setTileUrlFunction = function(tileUrlFunction) {
this.tileCache.clear();
this.tileUrlFunction = tileUrlFunction;
this.dispatchChangeEvent()
};
ol.source.TileImage.prototype.useTile = function(z, x, y) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache.containsKey(tileCoordKey)) {
this.tileCache.get(tileCoordKey)
}
};
goog.provide("ol.tilegrid.XYZ");
goog.require("goog.math");
goog.require("ol");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.proj");
goog.require("ol.proj.EPSG3857");
goog.require("ol.tilegrid.TileGrid");
ol.tilegrid.XYZ = function(options) {
var resolutions = new Array(options.maxZoom + 1);
var z;
var size = 2 * ol.proj.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE;
for(z = 0;z <= options.maxZoom;++z) {
resolutions[z] = size / Math.pow(2, z)
}
goog.base(this, {minZoom:options.minZoom, origin:[-ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE], resolutions:resolutions, tileSize:ol.DEFAULT_TILE_SIZE})
};
goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid);
ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var minZ = this.minZoom;
var maxZ = this.maxZoom;
var wrapX = goog.isDef(options.wrapX) ? options.wrapX : true;
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
var tileRangeByZ = null;
if(goog.isDef(options.extent)) {
tileRangeByZ = new Array(maxZ + 1);
var z;
for(z = 0;z <= maxZ;++z) {
if(z < minZ) {
tileRangeByZ[z] = null
}else {
tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z)
}
}
}
return function(tileCoord, projection, opt_tileCoord) {
var z = tileCoord.z;
if(z < minZ || maxZ < z) {
return null
}
var n = Math.pow(2, z);
var x = tileCoord.x;
if(wrapX) {
x = goog.math.modulo(x, n)
}else {
if(x < 0 || n <= x) {
return null
}
}
var y = tileCoord.y;
if(y < -n || -1 < y) {
return null
}
if(!goog.isNull(tileRangeByZ)) {
tmpTileCoord.z = z;
tmpTileCoord.x = x;
tmpTileCoord.y = y;
if(!tileRangeByZ[z].contains(tmpTileCoord)) {
return null
}
}
return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord)
}
};
ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange) {
if(tileCoord.z < this.maxZoom) {
return ol.TileRange.createOrUpdate(2 * tileCoord.x, 2 * (tileCoord.x + 1), 2 * tileCoord.y, 2 * (tileCoord.y + 1), opt_tileRange)
}else {
return null
}
};
ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange) {
var tileRange = ol.TileRange.createOrUpdate(0, tileCoord.x, 0, tileCoord.y, opt_tileRange);
var z;
for(z = tileCoord.z - 1;z >= this.minZoom;--z) {
tileRange.minX = tileRange.maxX >>= 1;
tileRange.minY = tileRange.maxY >>= 1;
if(callback.call(opt_this, z, tileRange)) {
return true
}
}
return false
};
goog.provide("ol.source.BingMaps");
goog.require("goog.Uri");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.net.Jsonp");
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.TileRange");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.State");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.source.BingMaps = function(options) {
goog.base(this, {crossOrigin:"anonymous", opaque:true, projection:ol.proj.get("EPSG:3857"), state:ol.source.State.LOADING, tileLoadFunction:options.tileLoadFunction});
this.culture_ = goog.isDef(options.culture) ? options.culture : "en-us";
var protocol = ol.IS_HTTPS ? "https:" : "http:";
var uri = new goog.Uri(protocol + "//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + options.imagerySet);
var jsonp = new goog.net.Jsonp(uri, "jsonp");
jsonp.send({"include":"ImageryProviders", "key":options.key}, goog.bind(this.handleImageryMetadataResponse, this))
};
goog.inherits(ol.source.BingMaps, ol.source.TileImage);
ol.source.BingMaps.TOS_ATTRIBUTION = new ol.Attribution({html:'\x3ca class\x3d"ol-attribution-bing-tos" target\x3d"_blank" ' + 'href\x3d"http://www.microsoft.com/maps/product/terms.html"\x3e' + "Terms of Use\x3c/a\x3e"});
ol.source.BingMaps.prototype.handleImageryMetadataResponse = function(response) {
if(response.statusCode != 200 || response.statusDescription != "OK" || response.authenticationResultCode != "ValidCredentials" || response.resourceSets.length != 1 || response.resourceSets[0].resources.length != 1) {
this.setState(ol.source.State.ERROR);
return
}
var brandLogoUri = response.brandLogoUri;
var resource = response.resourceSets[0].resources[0];
goog.asserts.assert(resource.imageWidth == resource.imageHeight);
var tileGrid = new ol.tilegrid.XYZ({minZoom:resource.zoomMin, maxZoom:resource.zoomMax, tileSize:resource.imageWidth});
this.tileGrid = tileGrid;
var culture = this.culture_;
var sourceProjection = this.getProjection();
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform(), ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(resource.imageUrlSubdomains, function(subdomain) {
var imageUrl = resource.imageUrl.replace("{subdomain}", subdomain).replace("{culture}", culture);
return function(tileCoord, pixelRatio, projection) {
goog.asserts.assert(ol.proj.equivalent(projection, sourceProjection));
if(goog.isNull(tileCoord)) {
return undefined
}else {
return imageUrl.replace("{quadkey}", tileCoord.quadKey())
}
}
})));
if(resource.imageryProviders) {
var transform = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), this.getProjection());
var attributions = goog.array.map(resource.imageryProviders, function(imageryProvider) {
var html = imageryProvider.attribution;
var tileRanges = {};
goog.array.forEach(imageryProvider.coverageAreas, function(coverageArea) {
var minZ = coverageArea.zoomMin;
var maxZ = coverageArea.zoomMax;
var bbox = coverageArea.bbox;
var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];
var extent = ol.extent.transform(epsg4326Extent, transform);
var tileRange, z, zKey;
for(z = minZ;z <= maxZ;++z) {
zKey = z.toString();
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
if(zKey in tileRanges) {
tileRanges[zKey].push(tileRange)
}else {
tileRanges[zKey] = [tileRange]
}
}
});
return new ol.Attribution({html:html, tileRanges:tileRanges})
});
attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);
this.setAttributions(attributions)
}
this.setLogo(brandLogoUri);
this.setState(ol.source.State.READY)
};
goog.provide("goog.net.EventType");
goog.net.EventType = {COMPLETE:"complete", SUCCESS:"success", ERROR:"error", ABORT:"abort", READY:"ready", READY_STATE_CHANGE:"readystatechange", TIMEOUT:"timeout", INCREMENTAL_DATA:"incrementaldata", PROGRESS:"progress"};
goog.provide("goog.Timer");
goog.require("goog.events.EventTarget");
goog.Timer = function(opt_interval, opt_timerObject) {
goog.events.EventTarget.call(this);
this.interval_ = opt_interval || 1;
this.timerObject_ = opt_timerObject || goog.Timer.defaultTimerObject;
this.boundTick_ = goog.bind(this.tick_, this);
this.last_ = goog.now()
};
goog.inherits(goog.Timer, goog.events.EventTarget);
goog.Timer.MAX_TIMEOUT_ = 2147483647;
goog.Timer.prototype.enabled = false;
goog.Timer.defaultTimerObject = goog.global;
goog.Timer.intervalScale = 0.8;
goog.Timer.prototype.timer_ = null;
goog.Timer.prototype.getInterval = function() {
return this.interval_
};
goog.Timer.prototype.setInterval = function(interval) {
this.interval_ = interval;
if(this.timer_ && this.enabled) {
this.stop();
this.start()
}else {
if(this.timer_) {
this.stop()
}
}
};
goog.Timer.prototype.tick_ = function() {
if(this.enabled) {
var elapsed = goog.now() - this.last_;
if(elapsed > 0 && elapsed < this.interval_ * goog.Timer.intervalScale) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_ - elapsed);
return
}
if(this.timer_) {
this.timerObject_.clearTimeout(this.timer_);
this.timer_ = null
}
this.dispatchTick();
if(this.enabled) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_);
this.last_ = goog.now()
}
}
};
goog.Timer.prototype.dispatchTick = function() {
this.dispatchEvent(goog.Timer.TICK)
};
goog.Timer.prototype.start = function() {
this.enabled = true;
if(!this.timer_) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_);
this.last_ = goog.now()
}
};
goog.Timer.prototype.stop = function() {
this.enabled = false;
if(this.timer_) {
this.timerObject_.clearTimeout(this.timer_);
this.timer_ = null
}
};
goog.Timer.prototype.disposeInternal = function() {
goog.Timer.superClass_.disposeInternal.call(this);
this.stop();
delete this.timerObject_
};
goog.Timer.TICK = "tick";
goog.Timer.callOnce = function(listener, opt_delay, opt_handler) {
if(goog.isFunction(listener)) {
if(opt_handler) {
listener = goog.bind(listener, opt_handler)
}
}else {
if(listener && typeof listener.handleEvent == "function") {
listener = goog.bind(listener.handleEvent, listener)
}else {
throw Error("Invalid listener argument");
}
}
if(opt_delay > goog.Timer.MAX_TIMEOUT_) {
return-1
}else {
return goog.Timer.defaultTimerObject.setTimeout(listener, opt_delay || 0)
}
};
goog.Timer.clear = function(timerId) {
goog.Timer.defaultTimerObject.clearTimeout(timerId)
};
goog.provide("goog.net.ErrorCode");
goog.net.ErrorCode = {NO_ERROR:0, ACCESS_DENIED:1, FILE_NOT_FOUND:2, FF_SILENT_ERROR:3, CUSTOM_ERROR:4, EXCEPTION:5, HTTP_ERROR:6, ABORT:7, TIMEOUT:8, OFFLINE:9};
goog.net.ErrorCode.getDebugMessage = function(errorCode) {
switch(errorCode) {
case goog.net.ErrorCode.NO_ERROR:
return"No Error";
case goog.net.ErrorCode.ACCESS_DENIED:
return"Access denied to content document";
case goog.net.ErrorCode.FILE_NOT_FOUND:
return"File not found";
case goog.net.ErrorCode.FF_SILENT_ERROR:
return"Firefox silently errored";
case goog.net.ErrorCode.CUSTOM_ERROR:
return"Application custom error";
case goog.net.ErrorCode.EXCEPTION:
return"An exception occurred";
case goog.net.ErrorCode.HTTP_ERROR:
return"Http response at 400 or 500 level";
case goog.net.ErrorCode.ABORT:
return"Request was aborted";
case goog.net.ErrorCode.TIMEOUT:
return"Request timed out";
case goog.net.ErrorCode.OFFLINE:
return"The resource is not available offline";
default:
return"Unrecognized error code"
}
};
goog.provide("goog.net.HttpStatus");
goog.net.HttpStatus = {CONTINUE:100, SWITCHING_PROTOCOLS:101, OK:200, CREATED:201, ACCEPTED:202, NON_AUTHORITATIVE_INFORMATION:203, NO_CONTENT:204, RESET_CONTENT:205, PARTIAL_CONTENT:206, MULTIPLE_CHOICES:300, MOVED_PERMANENTLY:301, FOUND:302, SEE_OTHER:303, NOT_MODIFIED:304, USE_PROXY:305, TEMPORARY_REDIRECT:307, BAD_REQUEST:400, UNAUTHORIZED:401, PAYMENT_REQUIRED:402, FORBIDDEN:403, NOT_FOUND:404, METHOD_NOT_ALLOWED:405, NOT_ACCEPTABLE:406, PROXY_AUTHENTICATION_REQUIRED:407, REQUEST_TIMEOUT:408,
CONFLICT:409, GONE:410, LENGTH_REQUIRED:411, PRECONDITION_FAILED:412, REQUEST_ENTITY_TOO_LARGE:413, REQUEST_URI_TOO_LONG:414, UNSUPPORTED_MEDIA_TYPE:415, REQUEST_RANGE_NOT_SATISFIABLE:416, EXPECTATION_FAILED:417, INTERNAL_SERVER_ERROR:500, NOT_IMPLEMENTED:501, BAD_GATEWAY:502, SERVICE_UNAVAILABLE:503, GATEWAY_TIMEOUT:504, HTTP_VERSION_NOT_SUPPORTED:505, QUIRK_IE_NO_CONTENT:1223};
goog.net.HttpStatus.isSuccess = function(status) {
switch(status) {
case goog.net.HttpStatus.OK:
;
case goog.net.HttpStatus.CREATED:
;
case goog.net.HttpStatus.ACCEPTED:
;
case goog.net.HttpStatus.NO_CONTENT:
;
case goog.net.HttpStatus.PARTIAL_CONTENT:
;
case goog.net.HttpStatus.NOT_MODIFIED:
;
case goog.net.HttpStatus.QUIRK_IE_NO_CONTENT:
return true;
default:
return false
}
};
goog.provide("goog.net.XmlHttpFactory");
goog.net.XmlHttpFactory = function() {
};
goog.net.XmlHttpFactory.prototype.cachedOptions_ = null;
goog.net.XmlHttpFactory.prototype.createInstance = goog.abstractMethod;
goog.net.XmlHttpFactory.prototype.getOptions = function() {
return this.cachedOptions_ || (this.cachedOptions_ = this.internalGetOptions())
};
goog.net.XmlHttpFactory.prototype.internalGetOptions = goog.abstractMethod;
goog.provide("goog.net.WrapperXmlHttpFactory");
goog.require("goog.net.XmlHttpFactory");
goog.net.WrapperXmlHttpFactory = function(xhrFactory, optionsFactory) {
goog.net.XmlHttpFactory.call(this);
this.xhrFactory_ = xhrFactory;
this.optionsFactory_ = optionsFactory
};
goog.inherits(goog.net.WrapperXmlHttpFactory, goog.net.XmlHttpFactory);
goog.net.WrapperXmlHttpFactory.prototype.createInstance = function() {
return this.xhrFactory_()
};
goog.net.WrapperXmlHttpFactory.prototype.getOptions = function() {
return this.optionsFactory_()
};
goog.provide("goog.net.DefaultXmlHttpFactory");
goog.provide("goog.net.XmlHttp");
goog.provide("goog.net.XmlHttp.OptionType");
goog.provide("goog.net.XmlHttp.ReadyState");
goog.require("goog.net.WrapperXmlHttpFactory");
goog.require("goog.net.XmlHttpFactory");
goog.net.XmlHttp = function() {
return goog.net.XmlHttp.factory_.createInstance()
};
goog.define("goog.net.XmlHttp.ASSUME_NATIVE_XHR", false);
goog.net.XmlHttp.getOptions = function() {
return goog.net.XmlHttp.factory_.getOptions()
};
goog.net.XmlHttp.OptionType = {USE_NULL_FUNCTION:0, LOCAL_REQUEST_ERROR:1};
goog.net.XmlHttp.ReadyState = {UNINITIALIZED:0, LOADING:1, LOADED:2, INTERACTIVE:3, COMPLETE:4};
goog.net.XmlHttp.factory_;
goog.net.XmlHttp.setFactory = function(factory, optionsFactory) {
goog.net.XmlHttp.setGlobalFactory(new goog.net.WrapperXmlHttpFactory((factory), (optionsFactory)))
};
goog.net.XmlHttp.setGlobalFactory = function(factory) {
goog.net.XmlHttp.factory_ = factory
};
goog.net.DefaultXmlHttpFactory = function() {
goog.net.XmlHttpFactory.call(this)
};
goog.inherits(goog.net.DefaultXmlHttpFactory, goog.net.XmlHttpFactory);
goog.net.DefaultXmlHttpFactory.prototype.createInstance = function() {
var progId = this.getProgId_();
if(progId) {
return new ActiveXObject(progId)
}else {
return new XMLHttpRequest
}
};
goog.net.DefaultXmlHttpFactory.prototype.internalGetOptions = function() {
var progId = this.getProgId_();
var options = {};
if(progId) {
options[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] = true;
options[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] = true
}
return options
};
goog.net.DefaultXmlHttpFactory.prototype.ieProgId_;
goog.net.DefaultXmlHttpFactory.prototype.getProgId_ = function() {
if(goog.net.XmlHttp.ASSUME_NATIVE_XHR) {
return""
}
if(!this.ieProgId_ && typeof XMLHttpRequest == "undefined" && typeof ActiveXObject != "undefined") {
var ACTIVE_X_IDENTS = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
for(var i = 0;i < ACTIVE_X_IDENTS.length;i++) {
var candidate = ACTIVE_X_IDENTS[i];
try {
new ActiveXObject(candidate);
this.ieProgId_ = candidate;
return candidate
}catch(e) {
}
}
throw Error("Could not create ActiveXObject. ActiveX might be disabled," + " or MSXML might not be installed");
}
return(this.ieProgId_)
};
goog.net.XmlHttp.setGlobalFactory(new goog.net.DefaultXmlHttpFactory);
goog.provide("goog.net.XhrIo");
goog.provide("goog.net.XhrIo.ResponseType");
goog.require("goog.Timer");
goog.require("goog.array");
goog.require("goog.debug.entryPointRegistry");
goog.require("goog.events.EventTarget");
goog.require("goog.json");
goog.require("goog.log");
goog.require("goog.net.ErrorCode");
goog.require("goog.net.EventType");
goog.require("goog.net.HttpStatus");
goog.require("goog.net.XmlHttp");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.structs");
goog.require("goog.structs.Map");
goog.require("goog.uri.utils");
goog.require("goog.userAgent");
goog.net.XhrIo = function(opt_xmlHttpFactory) {
goog.base(this);
this.headers = new goog.structs.Map;
this.xmlHttpFactory_ = opt_xmlHttpFactory || null;
this.active_ = false;
this.xhr_ = null;
this.xhrOptions_ = null;
this.lastUri_ = "";
this.lastMethod_ = "";
this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR;
this.lastError_ = "";
this.errorDispatched_ = false;
this.inSend_ = false;
this.inOpen_ = false;
this.inAbort_ = false;
this.timeoutInterval_ = 0;
this.timeoutId_ = null;
this.responseType_ = goog.net.XhrIo.ResponseType.DEFAULT;
this.withCredentials_ = false;
this.useXhr2Timeout_ = false
};
goog.inherits(goog.net.XhrIo, goog.events.EventTarget);
goog.net.XhrIo.ResponseType = {DEFAULT:"", TEXT:"text", DOCUMENT:"document", BLOB:"blob", ARRAY_BUFFER:"arraybuffer"};
goog.net.XhrIo.prototype.logger_ = goog.log.getLogger("goog.net.XhrIo");
goog.net.XhrIo.CONTENT_TYPE_HEADER = "Content-Type";
goog.net.XhrIo.HTTP_SCHEME_PATTERN = /^https?$/i;
goog.net.XhrIo.METHODS_WITH_FORM_DATA = ["POST", "PUT"];
goog.net.XhrIo.FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset\x3dutf-8";
goog.net.XhrIo.XHR2_TIMEOUT_ = "timeout";
goog.net.XhrIo.XHR2_ON_TIMEOUT_ = "ontimeout";
goog.net.XhrIo.sendInstances_ = [];
goog.net.XhrIo.send = function(url, opt_callback, opt_method, opt_content, opt_headers, opt_timeoutInterval, opt_withCredentials) {
var x = new goog.net.XhrIo;
goog.net.XhrIo.sendInstances_.push(x);
if(opt_callback) {
x.listen(goog.net.EventType.COMPLETE, opt_callback)
}
x.listenOnce(goog.net.EventType.READY, x.cleanupSend_);
if(opt_timeoutInterval) {
x.setTimeoutInterval(opt_timeoutInterval)
}
if(opt_withCredentials) {
x.setWithCredentials(opt_withCredentials)
}
x.send(url, opt_method, opt_content, opt_headers)
};
goog.net.XhrIo.cleanup = function() {
var instances = goog.net.XhrIo.sendInstances_;
while(instances.length) {
instances.pop().dispose()
}
};
goog.net.XhrIo.protectEntryPoints = function(errorHandler) {
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = errorHandler.protectEntryPoint(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_)
};
goog.net.XhrIo.prototype.cleanupSend_ = function() {
this.dispose();
goog.array.remove(goog.net.XhrIo.sendInstances_, this)
};
goog.net.XhrIo.prototype.getTimeoutInterval = function() {
return this.timeoutInterval_
};
goog.net.XhrIo.prototype.setTimeoutInterval = function(ms) {
this.timeoutInterval_ = Math.max(0, ms)
};
goog.net.XhrIo.prototype.setResponseType = function(type) {
this.responseType_ = type
};
goog.net.XhrIo.prototype.getResponseType = function() {
return this.responseType_
};
goog.net.XhrIo.prototype.setWithCredentials = function(withCredentials) {
this.withCredentials_ = withCredentials
};
goog.net.XhrIo.prototype.getWithCredentials = function() {
return this.withCredentials_
};
goog.net.XhrIo.prototype.send = function(url, opt_method, opt_content, opt_headers) {
if(this.xhr_) {
throw Error("[goog.net.XhrIo] Object is active with another request\x3d" + this.lastUri_ + "; newUri\x3d" + url);
}
var method = opt_method ? opt_method.toUpperCase() : "GET";
this.lastUri_ = url;
this.lastError_ = "";
this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR;
this.lastMethod_ = method;
this.errorDispatched_ = false;
this.active_ = true;
this.xhr_ = this.createXhr();
this.xhrOptions_ = this.xmlHttpFactory_ ? this.xmlHttpFactory_.getOptions() : goog.net.XmlHttp.getOptions();
this.xhr_.onreadystatechange = goog.bind(this.onReadyStateChange_, this);
try {
goog.log.fine(this.logger_, this.formatMsg_("Opening Xhr"));
this.inOpen_ = true;
this.xhr_.open(method, url, true);
this.inOpen_ = false
}catch(err) {
goog.log.fine(this.logger_, this.formatMsg_("Error opening Xhr: " + err.message));
this.error_(goog.net.ErrorCode.EXCEPTION, err);
return
}
var content = opt_content || "";
var headers = this.headers.clone();
if(opt_headers) {
goog.structs.forEach(opt_headers, function(value, key) {
headers.set(key, value)
})
}
var contentTypeKey = goog.array.find(headers.getKeys(), goog.net.XhrIo.isContentTypeHeader_);
var contentIsFormData = goog.global["FormData"] && content instanceof goog.global["FormData"];
if(goog.array.contains(goog.net.XhrIo.METHODS_WITH_FORM_DATA, method) && !contentTypeKey && !contentIsFormData) {
headers.set(goog.net.XhrIo.CONTENT_TYPE_HEADER, goog.net.XhrIo.FORM_CONTENT_TYPE)
}
goog.structs.forEach(headers, function(value, key) {
this.xhr_.setRequestHeader(key, value)
}, this);
if(this.responseType_) {
this.xhr_.responseType = this.responseType_
}
if(goog.object.containsKey(this.xhr_, "withCredentials")) {
this.xhr_.withCredentials = this.withCredentials_
}
try {
this.cleanUpTimeoutTimer_();
if(this.timeoutInterval_ > 0) {
this.useXhr2Timeout_ = goog.net.XhrIo.shouldUseXhr2Timeout_(this.xhr_);
goog.log.fine(this.logger_, this.formatMsg_("Will abort after " + this.timeoutInterval_ + "ms if incomplete, xhr2 " + this.useXhr2Timeout_));
if(this.useXhr2Timeout_) {
this.xhr_[goog.net.XhrIo.XHR2_TIMEOUT_] = this.timeoutInterval_;
this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = goog.bind(this.timeout_, this)
}else {
this.timeoutId_ = goog.Timer.callOnce(this.timeout_, this.timeoutInterval_, this)
}
}
goog.log.fine(this.logger_, this.formatMsg_("Sending request"));
this.inSend_ = true;
this.xhr_.send(content);
this.inSend_ = false
}catch(err) {
goog.log.fine(this.logger_, this.formatMsg_("Send error: " + err.message));
this.error_(goog.net.ErrorCode.EXCEPTION, err)
}
};
goog.net.XhrIo.shouldUseXhr2Timeout_ = function(xhr) {
return goog.userAgent.IE && goog.userAgent.isVersionOrHigher(9) && goog.isNumber(xhr[goog.net.XhrIo.XHR2_TIMEOUT_]) && goog.isDef(xhr[goog.net.XhrIo.XHR2_ON_TIMEOUT_])
};
goog.net.XhrIo.isContentTypeHeader_ = function(header) {
return goog.string.caseInsensitiveEquals(goog.net.XhrIo.CONTENT_TYPE_HEADER, header)
};
goog.net.XhrIo.prototype.createXhr = function() {
return this.xmlHttpFactory_ ? this.xmlHttpFactory_.createInstance() : goog.net.XmlHttp()
};
goog.net.XhrIo.prototype.timeout_ = function() {
if(typeof goog == "undefined") {
}else {
if(this.xhr_) {
this.lastError_ = "Timed out after " + this.timeoutInterval_ + "ms, aborting";
this.lastErrorCode_ = goog.net.ErrorCode.TIMEOUT;
goog.log.fine(this.logger_, this.formatMsg_(this.lastError_));
this.dispatchEvent(goog.net.EventType.TIMEOUT);
this.abort(goog.net.ErrorCode.TIMEOUT)
}
}
};
goog.net.XhrIo.prototype.error_ = function(errorCode, err) {
this.active_ = false;
if(this.xhr_) {
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false
}
this.lastError_ = err;
this.lastErrorCode_ = errorCode;
this.dispatchErrors_();
this.cleanUpXhr_()
};
goog.net.XhrIo.prototype.dispatchErrors_ = function() {
if(!this.errorDispatched_) {
this.errorDispatched_ = true;
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.ERROR)
}
};
goog.net.XhrIo.prototype.abort = function(opt_failureCode) {
if(this.xhr_ && this.active_) {
goog.log.fine(this.logger_, this.formatMsg_("Aborting"));
this.active_ = false;
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false;
this.lastErrorCode_ = opt_failureCode || goog.net.ErrorCode.ABORT;
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.ABORT);
this.cleanUpXhr_()
}
};
goog.net.XhrIo.prototype.disposeInternal = function() {
if(this.xhr_) {
if(this.active_) {
this.active_ = false;
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false
}
this.cleanUpXhr_(true)
}
goog.base(this, "disposeInternal")
};
goog.net.XhrIo.prototype.onReadyStateChange_ = function() {
if(this.isDisposed()) {
return
}
if(!this.inOpen_ && !this.inSend_ && !this.inAbort_) {
this.onReadyStateChangeEntryPoint_()
}else {
this.onReadyStateChangeHelper_()
}
};
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = function() {
this.onReadyStateChangeHelper_()
};
goog.net.XhrIo.prototype.onReadyStateChangeHelper_ = function() {
if(!this.active_) {
return
}
if(typeof goog == "undefined") {
}else {
if(this.xhrOptions_[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE && this.getStatus() == 2) {
goog.log.fine(this.logger_, this.formatMsg_("Local request error detected and ignored"))
}else {
if(this.inSend_ && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE) {
goog.Timer.callOnce(this.onReadyStateChange_, 0, this);
return
}
this.dispatchEvent(goog.net.EventType.READY_STATE_CHANGE);
if(this.isComplete()) {
goog.log.fine(this.logger_, this.formatMsg_("Request complete"));
this.active_ = false;
try {
if(this.isSuccess()) {
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.SUCCESS)
}else {
this.lastErrorCode_ = goog.net.ErrorCode.HTTP_ERROR;
this.lastError_ = this.getStatusText() + " [" + this.getStatus() + "]";
this.dispatchErrors_()
}
}finally {
this.cleanUpXhr_()
}
}
}
}
};
goog.net.XhrIo.prototype.cleanUpXhr_ = function(opt_fromDispose) {
if(this.xhr_) {
this.cleanUpTimeoutTimer_();
var xhr = this.xhr_;
var clearedOnReadyStateChange = this.xhrOptions_[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] ? goog.nullFunction : null;
this.xhr_ = null;
this.xhrOptions_ = null;
if(!opt_fromDispose) {
this.dispatchEvent(goog.net.EventType.READY)
}
try {
xhr.onreadystatechange = clearedOnReadyStateChange
}catch(e) {
goog.log.error(this.logger_, "Problem encountered resetting onreadystatechange: " + e.message)
}
}
};
goog.net.XhrIo.prototype.cleanUpTimeoutTimer_ = function() {
if(this.xhr_ && this.useXhr2Timeout_) {
this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = null
}
if(goog.isNumber(this.timeoutId_)) {
goog.Timer.clear(this.timeoutId_);
this.timeoutId_ = null
}
};
goog.net.XhrIo.prototype.isActive = function() {
return!!this.xhr_
};
goog.net.XhrIo.prototype.isComplete = function() {
return this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE
};
goog.net.XhrIo.prototype.isSuccess = function() {
var status = this.getStatus();
return goog.net.HttpStatus.isSuccess(status) || status === 0 && !this.isLastUriEffectiveSchemeHttp_()
};
goog.net.XhrIo.prototype.isLastUriEffectiveSchemeHttp_ = function() {
var scheme = goog.uri.utils.getEffectiveScheme(String(this.lastUri_));
return goog.net.XhrIo.HTTP_SCHEME_PATTERN.test(scheme)
};
goog.net.XhrIo.prototype.getReadyState = function() {
return this.xhr_ ? (this.xhr_.readyState) : goog.net.XmlHttp.ReadyState.UNINITIALIZED
};
goog.net.XhrIo.prototype.getStatus = function() {
try {
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.status : -1
}catch(e) {
goog.log.warning(this.logger_, "Can not get status: " + e.message);
return-1
}
};
goog.net.XhrIo.prototype.getStatusText = function() {
try {
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.statusText : ""
}catch(e) {
goog.log.fine(this.logger_, "Can not get status: " + e.message);
return""
}
};
goog.net.XhrIo.prototype.getLastUri = function() {
return String(this.lastUri_)
};
goog.net.XhrIo.prototype.getResponseText = function() {
try {
return this.xhr_ ? this.xhr_.responseText : ""
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseText: " + e.message);
return""
}
};
goog.net.XhrIo.prototype.getResponseBody = function() {
try {
if(this.xhr_ && "responseBody" in this.xhr_) {
return this.xhr_["responseBody"]
}
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseBody: " + e.message)
}
return null
};
goog.net.XhrIo.prototype.getResponseXml = function() {
try {
return this.xhr_ ? this.xhr_.responseXML : null
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseXML: " + e.message);
return null
}
};
goog.net.XhrIo.prototype.getResponseJson = function(opt_xssiPrefix) {
if(!this.xhr_) {
return undefined
}
var responseText = this.xhr_.responseText;
if(opt_xssiPrefix && responseText.indexOf(opt_xssiPrefix) == 0) {
responseText = responseText.substring(opt_xssiPrefix.length)
}
return goog.json.parse(responseText)
};
goog.net.XhrIo.prototype.getResponse = function() {
try {
if(!this.xhr_) {
return null
}
if("response" in this.xhr_) {
return this.xhr_.response
}
switch(this.responseType_) {
case goog.net.XhrIo.ResponseType.DEFAULT:
;
case goog.net.XhrIo.ResponseType.TEXT:
return this.xhr_.responseText;
case goog.net.XhrIo.ResponseType.ARRAY_BUFFER:
if("mozResponseArrayBuffer" in this.xhr_) {
return this.xhr_.mozResponseArrayBuffer
}
}
goog.log.error(this.logger_, "Response type " + this.responseType_ + " is not " + "supported on this browser");
return null
}catch(e) {
goog.log.fine(this.logger_, "Can not get response: " + e.message);
return null
}
};
goog.net.XhrIo.prototype.getResponseHeader = function(key) {
return this.xhr_ && this.isComplete() ? this.xhr_.getResponseHeader(key) : undefined
};
goog.net.XhrIo.prototype.getAllResponseHeaders = function() {
return this.xhr_ && this.isComplete() ? this.xhr_.getAllResponseHeaders() : ""
};
goog.net.XhrIo.prototype.getLastErrorCode = function() {
return this.lastErrorCode_
};
goog.net.XhrIo.prototype.getLastError = function() {
return goog.isString(this.lastError_) ? this.lastError_ : String(this.lastError_)
};
goog.net.XhrIo.prototype.formatMsg_ = function(msg) {
return msg + " [" + this.lastMethod_ + " " + this.lastUri_ + " " + this.getStatus() + "]"
};
goog.debug.entryPointRegistry.register(function(transformer) {
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = transformer(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_)
});
goog.provide("ol.source.FormatVector");
goog.require("goog.asserts");
goog.require("goog.dispose");
goog.require("goog.events");
goog.require("goog.net.EventType");
goog.require("goog.net.XhrIo");
goog.require("goog.net.XhrIo.ResponseType");
goog.require("goog.userAgent");
goog.require("ol.BrowserFeature");
goog.require("ol.format.FormatType");
goog.require("ol.proj");
goog.require("ol.source.State");
goog.require("ol.source.Vector");
goog.require("ol.xml");
ol.source.FormatVector = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection});
this.format = options.format
};
goog.inherits(ol.source.FormatVector, ol.source.Vector);
ol.source.FormatVector.prototype.loadFeaturesFromURL = function(url, callback, thisArg) {
var xhrIo = new goog.net.XhrIo;
var type = this.format.getType();
var responseType;
if(type == ol.format.FormatType.BINARY && ol.BrowserFeature.HAS_ARRAY_BUFFER) {
responseType = goog.net.XhrIo.ResponseType.ARRAY_BUFFER
}else {
responseType = goog.net.XhrIo.ResponseType.TEXT
}
xhrIo.setResponseType(responseType);
goog.events.listen(xhrIo, goog.net.EventType.COMPLETE, function(event) {
var xhrIo = event.target;
goog.asserts.assertInstanceof(xhrIo, goog.net.XhrIo);
if(xhrIo.isSuccess()) {
var type = this.format.getType();
var source;
if(type == ol.format.FormatType.BINARY && ol.BrowserFeature.HAS_ARRAY_BUFFER) {
source = xhrIo.getResponse();
goog.asserts.assertInstanceof(source, ArrayBuffer)
}else {
if(type == ol.format.FormatType.JSON) {
source = xhrIo.getResponseText()
}else {
if(type == ol.format.FormatType.TEXT) {
source = xhrIo.getResponseText()
}else {
if(type == ol.format.FormatType.XML) {
if(!goog.userAgent.IE) {
source = xhrIo.getResponseXml()
}
if(!goog.isDefAndNotNull(source)) {
source = ol.xml.load(xhrIo.getResponseText())
}
}else {
goog.asserts.fail()
}
}
}
}
if(goog.isDefAndNotNull(source)) {
callback.call(thisArg, this.readFeatures(source))
}else {
this.setState(ol.source.State.ERROR);
goog.asserts.fail()
}
}else {
this.setState(ol.source.State.ERROR)
}
goog.dispose(xhrIo)
}, false, this);
xhrIo.send(url)
};
ol.source.FormatVector.prototype.readFeatures = function(source) {
var format = this.format;
var features = format.readFeatures(source);
var featureProjection = format.readProjection(source);
var projection = this.getProjection();
if(!goog.isNull(projection) && !goog.isNull(featureProjection)) {
if(!ol.proj.equivalent(featureProjection, projection)) {
var transform = ol.proj.getTransform(featureProjection, projection);
var i, ii;
for(i = 0, ii = features.length;i < ii;++i) {
var feature = features[i];
var geometry = feature.getGeometry();
if(!goog.isNull(geometry)) {
geometry.transform(transform)
}
}
}
}
return features
};
goog.provide("ol.source.StaticVector");
goog.require("ol.source.FormatVector");
goog.require("ol.source.State");
ol.source.StaticVector = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, format:options.format, logo:options.logo, projection:options.projection});
if(goog.isDef(options.arrayBuffer)) {
this.addFeaturesInternal(this.readFeatures(options.arrayBuffer))
}
if(goog.isDef(options.doc)) {
this.addFeaturesInternal(this.readFeatures(options.doc))
}
if(goog.isDef(options.node)) {
this.addFeaturesInternal(this.readFeatures(options.node))
}
if(goog.isDef(options.object)) {
this.addFeaturesInternal(this.readFeatures(options.object))
}
if(goog.isDef(options.text)) {
this.addFeaturesInternal(this.readFeatures(options.text))
}
if(goog.isDef(options.url) || goog.isDef(options.urls)) {
this.setState(ol.source.State.LOADING);
if(goog.isDef(options.url)) {
this.loadFeaturesFromURL(options.url, function(features) {
this.addFeaturesInternal(features);
this.setState(ol.source.State.READY)
}, this)
}
if(goog.isDef(options.urls)) {
var urls = options.urls;
var i, ii;
for(i = 0, ii = urls.length;i < ii;++i) {
this.loadFeaturesFromURL(urls[i], function(features) {
this.addFeaturesInternal(features);
this.setState(ol.source.State.READY)
}, this)
}
}
}
};
goog.inherits(ol.source.StaticVector, ol.source.FormatVector);
goog.provide("ol.source.GPX");
goog.require("ol.format.GPX");
goog.require("ol.source.StaticVector");
ol.source.GPX = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.GPX, logo:options.logo, node:options.node, projection:options.projection, text:options.text, url:options.url, urls:options.urls})
};
goog.inherits(ol.source.GPX, ol.source.StaticVector);
goog.provide("ol.source.GeoJSON");
goog.require("ol.format.GeoJSON");
goog.require("ol.source.StaticVector");
ol.source.GeoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, extent:options.extent, format:new ol.format.GeoJSON({defaultProjection:options.defaultProjection}), logo:options.logo, object:options.object, projection:options.projection, text:options.text, url:options.url, urls:options.urls})
};
goog.inherits(ol.source.GeoJSON, ol.source.StaticVector);
goog.provide("ol.source.IGC");
goog.require("ol.format.IGC");
goog.require("ol.source.StaticVector");
ol.source.IGC = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {format:new ol.format.IGC({altitudeMode:options.altitudeMode}), projection:options.projection, text:options.text, url:options.url, urls:options.urls})
};
goog.inherits(ol.source.IGC, ol.source.StaticVector);
goog.provide("ol.CanvasFunctionType");
ol.CanvasFunctionType;
goog.provide("ol.ImageCanvas");
goog.require("ol.ImageBase");
goog.require("ol.ImageState");
ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions, canvas) {
goog.base(this, extent, resolution, pixelRatio, ol.ImageState.LOADED, attributions);
this.canvas_ = canvas
};
goog.inherits(ol.ImageCanvas, ol.ImageBase);
ol.ImageCanvas.prototype.getImageElement = function(opt_context) {
return this.canvas_
};
goog.provide("ol.source.ImageCanvas");
goog.require("ol.CanvasFunctionType");
goog.require("ol.ImageCanvas");
goog.require("ol.extent");
goog.require("ol.source.Image");
ol.source.ImageCanvas = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, resolutions:options.resolutions, state:options.state});
this.canvasFunction_ = options.canvasFunction;
this.canvas_ = null;
this.renderedRevision_ = 0;
this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5
};
goog.inherits(ol.source.ImageCanvas, ol.source.Image);
ol.source.ImageCanvas.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
resolution = this.findNearestResolution(resolution);
var canvas = this.canvas_;
if(!goog.isNull(canvas) && this.renderedRevision_ == this.getRevision() && canvas.getResolution() == resolution && canvas.getPixelRatio() == pixelRatio && ol.extent.containsExtent(canvas.getExtent(), extent)) {
return canvas
}
extent = extent.slice();
ol.extent.scaleFromCenter(extent, this.ratio_);
var width = ol.extent.getWidth(extent) / resolution;
var height = ol.extent.getHeight(extent) / resolution;
var size = [width * pixelRatio, height * pixelRatio];
var canvasElement = this.canvasFunction_(extent, resolution, pixelRatio, size, projection);
if(!goog.isNull(canvasElement)) {
canvas = new ol.ImageCanvas(extent, resolution, pixelRatio, this.getAttributions(), canvasElement)
}
this.canvas_ = canvas;
this.renderedRevision_ = this.getRevision();
return canvas
};
goog.provide("ol.source.ImageStatic");
goog.require("ol.Image");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.Image");
ol.source.ImageStatic = function(options) {
var attributions = goog.isDef(options.attributions) ? options.attributions : null;
var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
var imageExtent = options.imageExtent;
var imageSize = options.imageSize;
var imageResolution = (imageExtent[3] - imageExtent[1]) / imageSize[1];
var imageUrl = options.url;
var projection = ol.proj.get(options.projection);
goog.base(this, {attributions:attributions, extent:options.extent, logo:options.logo, projection:projection, resolutions:[imageResolution]});
this.image_ = new ol.Image(imageExtent, imageResolution, 1, attributions, imageUrl, crossOrigin)
};
goog.inherits(ol.source.ImageStatic, ol.source.Image);
ol.source.ImageStatic.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
if(ol.extent.intersects(extent, this.image_.getExtent())) {
return this.image_
}
return null
};
goog.provide("ol.source.ImageVector");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.dom");
goog.require("ol.extent");
goog.require("ol.feature");
goog.require("ol.render.canvas.ReplayGroup");
goog.require("ol.renderer.vector");
goog.require("ol.source.ImageCanvas");
goog.require("ol.source.Vector");
goog.require("ol.vec.Mat4");
ol.source.ImageVector = function(options) {
this.source_ = options.source;
this.styleFunction_ = goog.isDef(options.style) ? ol.feature.createStyleFunction(options.style) : ol.feature.defaultStyleFunction;
this.transform_ = goog.vec.Mat4.createNumber();
this.canvasContext_ = ol.dom.createCanvasContext2D();
this.canvasSize_ = [0, 0];
this.replayGroup_ = null;
goog.base(this, {attributions:options.attributions, canvasFunction:goog.bind(this.canvasFunctionInternal_, this), extent:options.extent, logo:options.logo, projection:options.projection, ratio:options.ratio, resolutions:options.resolutions, state:this.source_.getState()});
goog.events.listen(this.source_, goog.events.EventType.CHANGE, this.handleSourceChange_, undefined, this)
};
goog.inherits(ol.source.ImageVector, ol.source.ImageCanvas);
ol.source.ImageVector.prototype.canvasFunctionInternal_ = function(extent, resolution, pixelRatio, size, projection) {
var tolerance = resolution / (2 * pixelRatio);
var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent, resolution);
var loading = false;
this.source_.forEachFeatureInExtentAtResolution(extent, resolution, function(feature) {
loading = loading || this.renderFeature_(feature, resolution, pixelRatio, replayGroup)
}, this);
replayGroup.finish();
if(loading) {
return null
}
if(this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) {
this.canvasContext_.canvas.width = size[0];
this.canvasContext_.canvas.height = size[1];
this.canvasSize_[0] = size[0];
this.canvasSize_[1] = size[1]
}else {
this.canvasContext_.clearRect(0, 0, size[0], size[1])
}
var transform = this.getTransform_(ol.extent.getCenter(extent), resolution, pixelRatio, size);
replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0, {});
this.replayGroup_ = replayGroup;
return this.canvasContext_.canvas
};
ol.source.ImageVector.prototype.forEachFeatureAtPixel = function(extent, resolution, rotation, coordinate, callback) {
if(goog.isNull(this.replayGroup_)) {
return undefined
}else {
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, 0, coordinate, {}, function(geometry, data) {
var feature = (data);
return callback(feature)
})
}
};
ol.source.ImageVector.prototype.getSource = function() {
return this.source_
};
ol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) {
return ol.vec.Mat4.makeTransform2D(this.transform_, size[0] / 2, size[1] / 2, pixelRatio / resolution, -pixelRatio / resolution, 0, -center[0], -center[1])
};
ol.source.ImageVector.prototype.handleImageChange_ = function(event) {
this.dispatchChangeEvent()
};
ol.source.ImageVector.prototype.handleSourceChange_ = function() {
this.setState(this.source_.getState())
};
ol.source.ImageVector.prototype.renderFeature_ = function(feature, resolution, pixelRatio, replayGroup) {
var styles = this.styleFunction_(feature, resolution);
if(!goog.isDefAndNotNull(styles)) {
return false
}
var squaredTolerance = resolution * resolution / (4 * pixelRatio * pixelRatio);
var i, ii, loading = false;
for(i = 0, ii = styles.length;i < ii;++i) {
loading = ol.renderer.vector.renderFeature(replayGroup, feature, styles[i], squaredTolerance, feature, this.handleImageChange_, this) || loading
}
return loading
};
goog.provide("ol.source.wms");
goog.provide("ol.source.wms.ServerType");
ol.source.wms.ServerType = {CARMENTA_SERVER:"carmentaserver", GEOSERVER:"geoserver", MAPSERVER:"mapserver", QGIS:"qgis"};
goog.provide("ol.source.ImageWMS");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.uri.utils");
goog.require("ol");
goog.require("ol.Image");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.Image");
goog.require("ol.source.wms");
goog.require("ol.source.wms.ServerType");
ol.source.ImageWMS = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, resolutions:options.resolutions});
this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.url_ = options.url;
this.params_ = options.params;
this.v13_ = true;
this.updateV13_();
this.serverType_ = (options.serverType);
this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true;
this.image_ = null;
this.imageSize_ = [0, 0];
this.renderedProjection_ = null;
this.renderedResolution_ = NaN;
this.renderedRevision_ = 0;
this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5
};
goog.inherits(ol.source.ImageWMS, ol.source.Image);
ol.source.ImageWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {
goog.asserts.assert(!("VERSION" in params));
if(!goog.isDef(this.url_) || goog.isNull(this.image_)) {
return undefined
}
goog.asserts.assert(this.imageSize_[0] !== 0 && this.imageSize_[1] !== 0);
goog.asserts.assert(!isNaN(this.renderedResolution_));
goog.asserts.assert(!goog.isNull(this.renderedProjection_));
if(resolution != this.renderedResolution_ || !ol.proj.equivalent(projection, this.renderedProjection_)) {
return undefined
}
var extent = this.image_.getExtent();
var pixelRatio = this.image_.getPixelRatio();
var baseParams = {"SERVICE":"WMS", "VERSION":ol.DEFAULT_WMS_VERSION, "REQUEST":"GetFeatureInfo", "FORMAT":"image/png", "TRANSPARENT":true, "QUERY_LAYERS":goog.object.get(this.params_, "LAYERS")};
goog.object.extend(baseParams, this.params_, params);
var imageResolution = resolution / pixelRatio;
var x = Math.floor((coordinate[0] - extent[0]) / imageResolution);
var y = Math.floor((extent[3] - coordinate[1]) / imageResolution);
goog.object.set(baseParams, this.v13_ ? "I" : "X", x);
goog.object.set(baseParams, this.v13_ ? "J" : "Y", y);
return this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, baseParams)
};
ol.source.ImageWMS.prototype.getParams = function() {
return this.params_
};
ol.source.ImageWMS.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
if(!goog.isDef(this.url_)) {
return null
}
resolution = this.findNearestResolution(resolution);
if(pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) {
pixelRatio = 1
}
var image = this.image_;
if(!goog.isNull(image) && this.renderedRevision_ == this.getRevision() && image.getResolution() == resolution && image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) {
return image
}
var params = {"SERVICE":"WMS", "VERSION":ol.DEFAULT_WMS_VERSION, "REQUEST":"GetMap", "FORMAT":"image/png", "TRANSPARENT":true};
goog.object.extend(params, this.params_);
extent = extent.slice();
var centerX = (extent[0] + extent[2]) / 2;
var centerY = (extent[1] + extent[3]) / 2;
if(this.ratio_ != 1) {
var halfWidth = this.ratio_ * ol.extent.getWidth(extent) / 2;
var halfHeight = this.ratio_ * ol.extent.getHeight(extent) / 2;
extent[0] = centerX - halfWidth;
extent[1] = centerY - halfHeight;
extent[2] = centerX + halfWidth;
extent[3] = centerY + halfHeight
}
var imageResolution = resolution / pixelRatio;
var width = Math.ceil(ol.extent.getWidth(extent) / imageResolution);
var height = Math.ceil(ol.extent.getHeight(extent) / imageResolution);
extent[0] = centerX - imageResolution * width / 2;
extent[2] = centerX + imageResolution * width / 2;
extent[1] = centerY - imageResolution * height / 2;
extent[3] = centerY + imageResolution * height / 2;
this.imageSize_[0] = width;
this.imageSize_[1] = height;
var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, params);
this.image_ = new ol.Image(extent, resolution, pixelRatio, this.getAttributions(), url, this.crossOrigin_);
this.renderedProjection_ = projection;
this.renderedResolution_ = resolution;
this.renderedRevision_ = this.getRevision();
return this.image_
};
ol.source.ImageWMS.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) {
goog.asserts.assert(goog.isDef(this.url_));
params[this.v13_ ? "CRS" : "SRS"] = projection.getCode();
if(!("STYLES" in this.params_)) {
goog.object.set(params, "STYLES", new String(""))
}
if(pixelRatio != 1) {
switch(this.serverType_) {
case ol.source.wms.ServerType.GEOSERVER:
var dpi = 90 * pixelRatio + 0.5 | 0;
goog.object.set(params, "FORMAT_OPTIONS", "dpi:" + dpi);
break;
case ol.source.wms.ServerType.MAPSERVER:
goog.object.set(params, "MAP_RESOLUTION", 90 * pixelRatio);
break;
case ol.source.wms.ServerType.CARMENTA_SERVER:
;
case ol.source.wms.ServerType.QGIS:
goog.object.set(params, "DPI", 90 * pixelRatio);
break;
default:
goog.asserts.fail();
break
}
}
goog.object.set(params, "WIDTH", size[0]);
goog.object.set(params, "HEIGHT", size[1]);
var axisOrientation = projection.getAxisOrientation();
var bbox;
if(this.v13_ && axisOrientation.substr(0, 2) == "ne") {
bbox = [extent[1], extent[0], extent[3], extent[2]]
}else {
bbox = extent
}
goog.object.set(params, "BBOX", bbox.join(","));
return goog.uri.utils.appendParamsFromMap(this.url_, params)
};
ol.source.ImageWMS.prototype.getUrl = function() {
return this.url_
};
ol.source.ImageWMS.prototype.setUrl = function(url) {
if(url != this.url_) {
this.url_ = url;
this.image_ = null;
this.dispatchChangeEvent()
}
};
ol.source.ImageWMS.prototype.updateParams = function(params) {
goog.object.extend(this.params_, params);
this.updateV13_();
this.image_ = null;
this.dispatchChangeEvent()
};
ol.source.ImageWMS.prototype.updateV13_ = function() {
var version = goog.object.get(this.params_, "VERSION", ol.DEFAULT_WMS_VERSION);
this.v13_ = goog.string.compareVersions(version, "1.3") >= 0
};
goog.provide("ol.source.KML");
goog.require("ol.format.KML");
goog.require("ol.source.StaticVector");
ol.source.KML = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.KML({defaultStyle:options.defaultStyle}), logo:options.logo, node:options.node, projection:options.projection, text:options.text, url:options.url, urls:options.urls})
};
goog.inherits(ol.source.KML, ol.source.StaticVector);
goog.provide("ol.ImageUrlFunction");
goog.provide("ol.ImageUrlFunctionType");
goog.require("ol.Size");
ol.ImageUrlFunctionType;
ol.ImageUrlFunction.createFromParamsFunction = function(baseUrl, params, paramsFunction) {
return function(extent, size, projection) {
return paramsFunction(baseUrl, params, extent, size, projection)
}
};
ol.ImageUrlFunction.nullImageUrlFunction = function(extent, size) {
return undefined
};
goog.provide("ol.source.MapGuide");
goog.require("goog.object");
goog.require("goog.uri.utils");
goog.require("ol.Image");
goog.require("ol.ImageUrlFunction");
goog.require("ol.extent");
goog.require("ol.source.Image");
ol.source.MapGuide = function(options) {
goog.base(this, {extent:options.extent, projection:options.projection, resolutions:options.resolutions});
this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.displayDpi_ = goog.isDef(options.displayDpi) ? options.displayDpi : 96;
var imageUrlFunction;
if(goog.isDef(options.url)) {
var params = goog.isDef(options.params) ? options.params : {};
imageUrlFunction = ol.ImageUrlFunction.createFromParamsFunction(options.url, params, goog.bind(this.getUrl, this))
}else {
imageUrlFunction = ol.ImageUrlFunction.nullImageUrlFunction
}
this.imageUrlFunction_ = imageUrlFunction;
this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true;
this.metersPerUnit_ = goog.isDef(options.metersPerUnit) ? options.metersPerUnit : 1;
this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1;
this.useOverlay_ = goog.isDef(options.useOverlay) ? options.useOverlay : false;
this.image_ = null
};
goog.inherits(ol.source.MapGuide, ol.source.Image);
ol.source.MapGuide.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
resolution = this.findNearestResolution(resolution);
pixelRatio = this.hidpi_ ? pixelRatio : 1;
var image = this.image_;
if(!goog.isNull(image) && image.getResolution() == resolution && image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) {
return image
}
if(this.ratio_ != 1) {
extent = extent.slice();
ol.extent.scaleFromCenter(extent, this.ratio_)
}
var width = ol.extent.getWidth(extent) / resolution;
var height = ol.extent.getHeight(extent) / resolution;
var size = [width * pixelRatio, height * pixelRatio];
var imageUrl = this.imageUrlFunction_(extent, size, projection);
if(goog.isDef(imageUrl)) {
image = new ol.Image(extent, resolution, pixelRatio, this.getAttributions(), imageUrl, this.crossOrigin_)
}else {
image = null
}
this.image_ = image;
return image
};
ol.source.MapGuide.getScale = function(extent, size, metersPerUnit, dpi) {
var mcsW = ol.extent.getWidth(extent);
var mcsH = ol.extent.getHeight(extent);
var devW = size[0];
var devH = size[1];
var mpp = 0.0254 / dpi;
if(devH * mcsW > devW * mcsH) {
return mcsW * metersPerUnit / (devW * mpp)
}else {
return mcsH * metersPerUnit / (devH * mpp)
}
};
ol.source.MapGuide.prototype.getUrl = function(baseUrl, params, extent, size, projection) {
var scale = ol.source.MapGuide.getScale(extent, size, this.metersPerUnit_, this.displayDpi_);
var center = ol.extent.getCenter(extent);
var baseParams = {"OPERATION":this.useOverlay_ ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE", "VERSION":"2.0.0", "LOCALE":"en", "CLIENTAGENT":"ol.source.MapGuide source", "CLIP":"1", "SETDISPLAYDPI":this.displayDpi_, "SETDISPLAYWIDTH":Math.round(size[0]), "SETDISPLAYHEIGHT":Math.round(size[1]), "SETVIEWSCALE":scale, "SETVIEWCENTERX":center[0], "SETVIEWCENTERY":center[1]};
goog.object.extend(baseParams, params);
return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams)
};
goog.provide("ol.source.XYZ");
goog.require("ol.Attribution");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.source.XYZ = function(options) {
var projection = goog.isDef(options.projection) ? options.projection : "EPSG:3857";
var maxZoom = goog.isDef(options.maxZoom) ? options.maxZoom : 18;
var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom});
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, projection:projection, tileGrid:tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:ol.TileUrlFunction.nullTileUrlFunction});
this.tileCoordTransform_ = tileGrid.createTileCoordTransform({extent:options.extent, wrapX:options.wrapX});
if(goog.isDef(options.tileUrlFunction)) {
this.setTileUrlFunction(options.tileUrlFunction)
}else {
if(goog.isDef(options.urls)) {
this.setUrls(options.urls)
}else {
if(goog.isDef(options.url)) {
this.setUrl(options.url)
}
}
}
};
goog.inherits(ol.source.XYZ, ol.source.TileImage);
ol.source.XYZ.prototype.setTileUrlFunction = function(tileUrlFunction) {
goog.base(this, "setTileUrlFunction", ol.TileUrlFunction.withTileCoordTransform(this.tileCoordTransform_, tileUrlFunction))
};
ol.source.XYZ.prototype.setUrl = function(url) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(url)))
};
ol.source.XYZ.prototype.setUrls = function(urls) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(urls))
};
goog.provide("ol.source.OSM");
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.source.XYZ");
ol.source.OSM = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var attributions;
if(goog.isDef(options.attributions)) {
attributions = options.attributions
}else {
attributions = ol.source.OSM.ATTRIBUTIONS
}
var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : "anonymous";
var protocol = ol.IS_HTTPS ? "https:" : "http:";
var url = goog.isDef(options.url) ? options.url : protocol + "//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";
goog.base(this, {attributions:attributions, crossOrigin:crossOrigin, opaque:true, maxZoom:options.maxZoom, tileLoadFunction:options.tileLoadFunction, url:url})
};
goog.inherits(ol.source.OSM, ol.source.XYZ);
ol.source.OSM.DATA_ATTRIBUTION = new ol.Attribution({html:"Data \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://www.openstreetmap.org/copyright"\x3eODbL\x3c/a\x3e'});
ol.source.OSM.TILE_ATTRIBUTION = new ol.Attribution({html:"Tiles \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC BY-SA\x3c/a\x3e'});
ol.source.OSM.ATTRIBUTIONS = [ol.source.OSM.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION];
goog.provide("ol.source.MapQuest");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.source.OSM");
goog.require("ol.source.XYZ");
ol.source.MapQuest = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.asserts.assert(options.layer in ol.source.MapQuestConfig);
var layerConfig = ol.source.MapQuestConfig[options.layer];
var protocol = ol.IS_HTTPS ? "https:" : "http:";
var url = protocol + "//otile{1-4}-s.mqcdn.com/tiles/1.0.0/" + options.layer + "/{z}/{x}/{y}.jpg";
goog.base(this, {attributions:layerConfig.attributions, crossOrigin:"anonymous", logo:"//developer.mapquest.com/content/osm/mq_logo.png", maxZoom:layerConfig.maxZoom, opaque:true, tileLoadFunction:options.tileLoadFunction, url:url})
};
goog.inherits(ol.source.MapQuest, ol.source.XYZ);
ol.source.MapQuest.TILE_ATTRIBUTION = new ol.Attribution({html:"Tiles Courtesy of " + '\x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'});
ol.source.MapQuestConfig = {"osm":{maxZoom:28, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION]}, "sat":{maxZoom:18, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, new ol.Attribution({html:"Portions Courtesy NASA/JPL-Caltech and " + "U.S. Depart. of Agriculture, Farm Service Agency"})]}, "hyb":{maxZoom:18, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION]}};
goog.provide("ol.source.OSMXML");
goog.require("ol.format.OSMXML");
goog.require("ol.source.StaticVector");
ol.source.OSMXML = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.OSMXML, logo:options.logo, node:options.node, projection:options.projection, reprojectTo:options.reprojectTo, text:options.text, url:options.url})
};
goog.inherits(ol.source.OSMXML, ol.source.StaticVector);
goog.provide("ol.source.ServerVector");
goog.require("ol.extent");
goog.require("ol.loadingstrategy");
goog.require("ol.source.FormatVector");
goog.require("ol.structs.RBush");
ol.source.ServerVector = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, format:options.format, logo:options.logo, projection:options.projection});
this.loadedExtents_ = new ol.structs.RBush;
this.loader_ = options.loader;
this.strategy_ = goog.isDef(options.strategy) ? options.strategy : ol.loadingstrategy.bbox;
this.loadedFeatures_ = {}
};
goog.inherits(ol.source.ServerVector, ol.source.FormatVector);
ol.source.ServerVector.prototype.addFeaturesInternal = function(features) {
var notLoadedFeatures = [];
var i, ii;
for(i = 0, ii = features.length;i < ii;++i) {
var feature = features[i];
var featureId = feature.getId();
if(!(featureId in this.loadedFeatures_)) {
notLoadedFeatures.push(feature);
this.loadedFeatures_[featureId] = true
}
}
goog.base(this, "addFeaturesInternal", notLoadedFeatures)
};
ol.source.ServerVector.prototype.loadFeatures = function(extent, resolution, projection) {
var loadedExtents = this.loadedExtents_;
var extentsToLoad = this.strategy_(extent, resolution);
var i, ii;
for(i = 0, ii = extentsToLoad.length;i < ii;++i) {
var extentToLoad = extentsToLoad[i];
var alreadyLoaded = loadedExtents.forEachInExtent(extentToLoad, function(object) {
return ol.extent.containsExtent(object.extent, extentToLoad)
});
if(!alreadyLoaded) {
this.loader_.call(this, extentToLoad, resolution, projection);
loadedExtents.insert(extentToLoad, {extent:extentToLoad.slice()})
}
}
};
ol.source.ServerVector.prototype.readFeatures;
goog.provide("ol.source.Stamen");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.source.OSM");
goog.require("ol.source.XYZ");
ol.source.StamenLayerConfig = {"terrain":{extension:"jpg", opaque:true}, "terrain-background":{extension:"jpg", opaque:true}, "terrain-labels":{extension:"png", opaque:false}, "terrain-lines":{extension:"png", opaque:false}, "toner-background":{extension:"png", opaque:true}, "toner":{extension:"png", opaque:true}, "toner-hybrid":{extension:"png", opaque:false}, "toner-labels":{extension:"png", opaque:false}, "toner-lines":{extension:"png", opaque:false}, "toner-lite":{extension:"png", opaque:true},
"watercolor":{extension:"jpg", opaque:true}};
ol.source.StamenProviderConfig = {"terrain":{minZoom:4, maxZoom:18}, "toner":{minZoom:0, maxZoom:20}, "watercolor":{minZoom:3, maxZoom:16}};
ol.source.Stamen = function(options) {
var i = options.layer.indexOf("-");
var provider = i == -1 ? options.layer : options.layer.slice(0, i);
goog.asserts.assert(provider in ol.source.StamenProviderConfig);
var providerConfig = ol.source.StamenProviderConfig[provider];
goog.asserts.assert(options.layer in ol.source.StamenLayerConfig);
var layerConfig = ol.source.StamenLayerConfig[options.layer];
var protocol = ol.IS_HTTPS ? "https:" : "http:";
var url = goog.isDef(options.url) ? options.url : protocol + "//{a-d}.tile.stamen.com/" + options.layer + "/{z}/{x}/{y}." + layerConfig.extension;
goog.base(this, {attributions:ol.source.Stamen.ATTRIBUTIONS, crossOrigin:"anonymous", maxZoom:providerConfig.maxZoom, opaque:layerConfig.opaque, tileLoadFunction:options.tileLoadFunction, url:url})
};
goog.inherits(ol.source.Stamen, ol.source.XYZ);
ol.source.Stamen.ATTRIBUTIONS = [new ol.Attribution({html:'Map tiles by \x3ca href\x3d"http://stamen.com/"\x3eStamen Design\x3c/a\x3e, ' + 'under \x3ca href\x3d"http://creativecommons.org/licenses/by/3.0/"\x3eCC BY' + " 3.0\x3c/a\x3e."}), ol.source.OSM.DATA_ATTRIBUTION];
goog.provide("ol.source.TileDebug");
goog.require("ol.Tile");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
goog.require("ol.dom");
goog.require("ol.source.Tile");
goog.require("ol.tilegrid.TileGrid");
ol.DebugTile_ = function(tileCoord, tileGrid) {
goog.base(this, tileCoord, ol.TileState.LOADED);
this.tileCoord_ = tileCoord;
this.tileSize_ = tileGrid.getTileSize(tileCoord.z);
this.canvasByContext_ = {}
};
goog.inherits(ol.DebugTile_, ol.Tile);
ol.DebugTile_.prototype.getImage = function(opt_context) {
var key = goog.isDef(opt_context) ? goog.getUid(opt_context) : -1;
if(key in this.canvasByContext_) {
return this.canvasByContext_[key]
}else {
var tileSize = this.tileSize_;
var context = ol.dom.createCanvasContext2D(tileSize, tileSize);
context.strokeStyle = "black";
context.strokeRect(0.5, 0.5, tileSize + 0.5, tileSize + 0.5);
context.fillStyle = "black";
context.textAlign = "center";
context.textBaseline = "middle";
context.font = "24px sans-serif";
context.fillText(this.tileCoord_.toString(), tileSize / 2, tileSize / 2);
this.canvasByContext_[key] = context.canvas;
return context.canvas
}
};
ol.source.TileDebug = function(options) {
goog.base(this, {extent:options.extent, opaque:false, projection:options.projection, tileGrid:options.tileGrid});
this.tileCache_ = new ol.TileCache
};
goog.inherits(ol.source.TileDebug, ol.source.Tile);
ol.source.TileDebug.prototype.canExpireCache = function() {
return this.tileCache_.canExpireCache()
};
ol.source.TileDebug.prototype.expireCache = function(usedTiles) {
this.tileCache_.expireCache(usedTiles)
};
ol.source.TileDebug.prototype.getTile = function(z, x, y) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache_.containsKey(tileCoordKey)) {
return(this.tileCache_.get(tileCoordKey))
}else {
var tile = new ol.DebugTile_(new ol.TileCoord(z, x, y), this.tileGrid);
this.tileCache_.set(tileCoordKey, tile);
return tile
}
};
goog.provide("ol.source.TileJSON");
goog.provide("ol.tilejson");
goog.require("goog.asserts");
goog.require("goog.net.Jsonp");
goog.require("ol.Attribution");
goog.require("ol.TileRange");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.State");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.source.TileJSON = function(options) {
goog.base(this, {crossOrigin:options.crossOrigin, projection:ol.proj.get("EPSG:3857"), state:ol.source.State.LOADING, tileLoadFunction:options.tileLoadFunction});
var request = new goog.net.Jsonp(options.url);
request.send(undefined, goog.bind(this.handleTileJSONResponse, this))
};
goog.inherits(ol.source.TileJSON, ol.source.TileImage);
ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
var epsg4326Projection = ol.proj.get("EPSG:4326");
var extent;
if(goog.isDef(tileJSON.bounds)) {
var transform = ol.proj.getTransformFromProjections(epsg4326Projection, this.getProjection());
extent = ol.extent.transform(tileJSON.bounds, transform);
this.setExtent(extent)
}
if(goog.isDef(tileJSON.scheme)) {
goog.asserts.assert(tileJSON.scheme == "xyz")
}
var minZoom = tileJSON.minzoom || 0;
var maxZoom = tileJSON.maxzoom || 22;
var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom, minZoom:minZoom});
this.tileGrid = tileGrid;
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform({extent:extent}), ol.TileUrlFunction.createFromTemplates(tileJSON.tiles));
if(goog.isDef(tileJSON.attribution)) {
var attributionExtent = goog.isDef(extent) ? extent : epsg4326Projection.getExtent();
var tileRanges = {};
var z, zKey;
for(z = minZoom;z <= maxZoom;++z) {
zKey = z.toString();
tileRanges[zKey] = [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)]
}
this.setAttributions([new ol.Attribution({html:tileJSON.attribution, tileRanges:tileRanges})])
}
this.setState(ol.source.State.READY)
};
goog.provide("ol.source.TileVector");
goog.require("goog.array");
goog.require("goog.object");
goog.require("ol.TileCoord");
goog.require("ol.TileUrlFunction");
goog.require("ol.source.FormatVector");
goog.require("ol.source.State");
goog.require("ol.tilegrid.TileGrid");
ol.source.TileVector = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, format:options.format, logo:options.logo, projection:options.projection});
var tileGrid = options.tileGrid;
this.tileGrid_ = options.tileGrid;
this.tileUrlFunction_ = ol.TileUrlFunction.nullTileUrlFunction;
this.tileCoordTransform_ = tileGrid.createTileCoordTransform({extent:options.extent});
this.tiles_ = {};
if(goog.isDef(options.tileUrlFunction)) {
this.setTileUrlFunction(options.tileUrlFunction)
}else {
if(goog.isDef(options.urls)) {
this.setUrls(options.urls)
}else {
if(goog.isDef(options.url)) {
this.setUrl(options.url)
}
}
}
};
goog.inherits(ol.source.TileVector, ol.source.FormatVector);
ol.source.TileVector.prototype.addFeature = goog.abstractMethod;
ol.source.TileVector.prototype.addFeatures = goog.abstractMethod;
ol.source.TileVector.prototype.clear = function() {
goog.object.clear(this.tiles_)
};
ol.source.TileVector.prototype.forEachFeature = goog.abstractMethod;
ol.source.TileVector.prototype.forEachFeatureInExtent = goog.abstractMethod;
ol.source.TileVector.prototype.forEachFeatureInExtentAtResolution = function(extent, resolution, f, opt_this) {
var tileGrid = this.tileGrid_;
var tiles = this.tiles_;
var z = tileGrid.getZForResolution(resolution);
var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
var x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
var tileKey = this.getTileKeyZXY_(z, x, y);
var features = tiles[tileKey];
if(goog.isDef(features)) {
var i, ii;
for(i = 0, ii = features.length;i < ii;++i) {
var result = f.call(opt_this, features[i]);
if(result) {
return result
}
}
}
}
}
return undefined
};
ol.source.TileVector.prototype.getClosestFeatureToCoordinate = goog.abstractMethod;
ol.source.TileVector.prototype.getExtent = goog.abstractMethod;
ol.source.TileVector.prototype.getFeatures = function() {
var tiles = this.tiles_;
var features = [];
var tileKey;
for(tileKey in tiles) {
goog.array.extend(features, tiles[tileKey])
}
return features
};
ol.source.TileVector.prototype.getFeaturesInExtent = goog.abstractMethod;
ol.source.TileVector.prototype.getTileKeyZXY_ = function(z, x, y) {
return z + "/" + x + "/" + y
};
ol.source.TileVector.prototype.loadFeatures = function(extent, resolution, projection) {
var tileCoordTransform = this.tileCoordTransform_;
var tileGrid = this.tileGrid_;
var tileUrlFunction = this.tileUrlFunction_;
var tiles = this.tiles_;
var z = tileGrid.getZForResolution(resolution);
var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
var tileCoord = new ol.TileCoord(z, 0, 0);
var x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
var tileKey = this.getTileKeyZXY_(z, x, y);
if(!(tileKey in tiles)) {
tileCoord.z = z;
tileCoord.x = x;
tileCoord.y = y;
tileCoordTransform(tileCoord, projection, tileCoord);
var url = tileUrlFunction(tileCoord, 1, projection);
if(goog.isDef(url)) {
tiles[tileKey] = [];
this.loadFeaturesFromURL(url, goog.partial(function(tileKey, features) {
tiles[tileKey] = features;
this.setState(ol.source.State.READY)
}, tileKey), this)
}
}
}
}
};
ol.source.TileVector.prototype.removeFeature = goog.abstractMethod;
ol.source.TileVector.prototype.setTileUrlFunction = function(tileUrlFunction) {
this.tileUrlFunction_ = tileUrlFunction;
this.dispatchChangeEvent()
};
ol.source.TileVector.prototype.setUrl = function(url) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(url)))
};
ol.source.TileVector.prototype.setUrls = function(urls) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(urls))
};
goog.provide("ol.source.TileWMS");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.uri.utils");
goog.require("ol");
goog.require("ol.TileCoord");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.source.TileImage");
goog.require("ol.source.wms");
goog.require("ol.source.wms.ServerType");
ol.source.TileWMS = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var params = goog.isDef(options.params) ? options.params : {};
var transparent = goog.object.get(params, "TRANSPARENT", true);
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, opaque:!transparent, projection:options.projection, tileGrid:options.tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:goog.bind(this.tileUrlFunction_, this)});
var urls = options.urls;
if(!goog.isDef(urls) && goog.isDef(options.url)) {
urls = ol.TileUrlFunction.expandUrl(options.url)
}
this.urls_ = urls;
this.gutter_ = goog.isDef(options.gutter) ? options.gutter : 0;
this.params_ = params;
this.pixelRatio_ = NaN;
this.v13_ = true;
this.serverType_ = (options.serverType);
this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true;
this.coordKeyPrefix_ = "";
this.resetCoordKeyPrefix_();
this.tmpExtent_ = ol.extent.createEmpty();
this.updateV13_()
};
goog.inherits(ol.source.TileWMS, ol.source.TileImage);
ol.source.TileWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {
goog.asserts.assert(!("VERSION" in params));
var pixelRatio = this.pixelRatio_;
if(isNaN(this.pixelRatio_)) {
return undefined
}
var tileGrid = this.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = this.getTileGridForProjection(projection)
}
var tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);
if(tileGrid.getResolutions().length <= tileCoord.z) {
return undefined
}
var tileResolution = tileGrid.getResolution(tileCoord.z);
var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
var tileSize = tileGrid.getTileSize(tileCoord.z);
var gutter = this.gutter_;
if(gutter !== 0) {
tileSize += 2 * gutter;
tileExtent = ol.extent.buffer(tileExtent, tileResolution * gutter, tileExtent)
}
if(pixelRatio != 1) {
tileSize = tileSize * pixelRatio + 0.5 | 0
}
var baseParams = {"SERVICE":"WMS", "VERSION":ol.DEFAULT_WMS_VERSION, "REQUEST":"GetFeatureInfo", "FORMAT":"image/png", "TRANSPARENT":true, "QUERY_LAYERS":goog.object.get(this.params_, "LAYERS")};
goog.object.extend(baseParams, this.params_, params);
var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio));
var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio));
goog.object.set(baseParams, this.v13_ ? "I" : "X", x);
goog.object.set(baseParams, this.v13_ ? "J" : "Y", y);
return this.getRequestUrl_(tileCoord, tileSize, tileExtent, pixelRatio, projection, baseParams)
};
ol.source.TileWMS.prototype.getGutter = function() {
return this.gutter_
};
ol.source.TileWMS.prototype.getKeyZXY = function(z, x, y) {
return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y)
};
ol.source.TileWMS.prototype.getParams = function() {
return this.params_
};
ol.source.TileWMS.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent, pixelRatio, projection, params) {
var urls = this.urls_;
if(!goog.isDef(urls) || goog.array.isEmpty(urls)) {
return undefined
}
goog.object.set(params, "WIDTH", tileSize);
goog.object.set(params, "HEIGHT", tileSize);
params[this.v13_ ? "CRS" : "SRS"] = projection.getCode();
if(!("STYLES" in this.params_)) {
goog.object.set(params, "STYLES", new String(""))
}
if(pixelRatio != 1) {
switch(this.serverType_) {
case ol.source.wms.ServerType.GEOSERVER:
var dpi = 90 * pixelRatio + 0.5 | 0;
goog.object.set(params, "FORMAT_OPTIONS", "dpi:" + dpi);
break;
case ol.source.wms.ServerType.MAPSERVER:
goog.object.set(params, "MAP_RESOLUTION", 90 * pixelRatio);
break;
case ol.source.wms.ServerType.CARMENTA_SERVER:
;
case ol.source.wms.ServerType.QGIS:
goog.object.set(params, "DPI", 90 * pixelRatio);
break;
default:
goog.asserts.fail();
break
}
}
var axisOrientation = projection.getAxisOrientation();
var bbox = tileExtent;
if(this.v13_ && axisOrientation.substr(0, 2) == "ne") {
var tmp;
tmp = tileExtent[0];
bbox[0] = tileExtent[1];
bbox[1] = tmp;
tmp = tileExtent[2];
bbox[2] = tileExtent[3];
bbox[3] = tmp
}
goog.object.set(params, "BBOX", bbox.join(","));
var url;
if(urls.length == 1) {
url = urls[0]
}else {
var index = goog.math.modulo(tileCoord.hash(), this.urls_.length);
url = urls[index]
}
return goog.uri.utils.appendParamsFromMap(url, params)
};
ol.source.TileWMS.prototype.getTilePixelSize = function(z, pixelRatio, projection) {
var tileSize = goog.base(this, "getTilePixelSize", z, pixelRatio, projection);
if(pixelRatio == 1 || !this.hidpi_ || !goog.isDef(this.serverType_)) {
return tileSize
}else {
return tileSize * pixelRatio + 0.5 | 0
}
};
ol.source.TileWMS.prototype.getUrls = function() {
return this.urls_
};
ol.source.TileWMS.prototype.resetCoordKeyPrefix_ = function() {
var i = 0;
var res = [];
for(var key in this.params_) {
res[i++] = key + "-" + this.params_[key]
}
this.coordKeyPrefix_ = res.join("/")
};
ol.source.TileWMS.prototype.tileUrlFunction_ = function(tileCoord, pixelRatio, projection) {
var tileGrid = this.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = this.getTileGridForProjection(projection)
}
if(tileGrid.getResolutions().length <= tileCoord.z) {
return undefined
}
if(pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) {
pixelRatio = 1
}
var tileResolution = tileGrid.getResolution(tileCoord.z);
var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
var tileSize = tileGrid.getTileSize(tileCoord.z);
var gutter = this.gutter_;
if(gutter !== 0) {
tileSize += 2 * gutter;
tileExtent = ol.extent.buffer(tileExtent, tileResolution * gutter, tileExtent)
}
var extent = this.getExtent();
if(!goog.isNull(extent) && (!ol.extent.intersects(tileExtent, extent) || ol.extent.touches(tileExtent, extent))) {
return undefined
}
if(pixelRatio != 1) {
tileSize = tileSize * pixelRatio + 0.5 | 0
}
var baseParams = {"SERVICE":"WMS", "VERSION":ol.DEFAULT_WMS_VERSION, "REQUEST":"GetMap", "FORMAT":"image/png", "TRANSPARENT":true};
goog.object.extend(baseParams, this.params_);
this.pixelRatio_ = pixelRatio;
return this.getRequestUrl_(tileCoord, tileSize, tileExtent, pixelRatio, projection, baseParams)
};
ol.source.TileWMS.prototype.updateParams = function(params) {
goog.object.extend(this.params_, params);
this.resetCoordKeyPrefix_();
this.updateV13_();
this.dispatchChangeEvent()
};
ol.source.TileWMS.prototype.updateV13_ = function() {
var version = goog.object.get(this.params_, "VERSION", ol.DEFAULT_WMS_VERSION);
this.v13_ = goog.string.compareVersions(version, "1.3") >= 0
};
goog.provide("ol.source.TopoJSON");
goog.require("ol.format.TopoJSON");
goog.require("ol.source.StaticVector");
ol.source.TopoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this, {attributions:options.attributions, extent:options.extent, format:new ol.format.TopoJSON({defaultProjection:options.defaultProjection}), logo:options.logo, object:options.object, projection:options.projection, text:options.text, url:options.url})
};
goog.inherits(ol.source.TopoJSON, ol.source.StaticVector);
goog.provide("ol.tilegrid.WMTS");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.proj");
goog.require("ol.tilegrid.TileGrid");
ol.tilegrid.WMTS = function(options) {
goog.asserts.assert(options.resolutions.length == options.matrixIds.length);
this.matrixIds_ = options.matrixIds;
goog.base(this, {origin:options.origin, origins:options.origins, resolutions:options.resolutions, tileSize:options.tileSize, tileSizes:options.tileSizes})
};
goog.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid);
ol.tilegrid.WMTS.prototype.getMatrixId = function(z) {
goog.asserts.assert(0 <= z && z < this.matrixIds_.length);
return this.matrixIds_[z]
};
ol.tilegrid.WMTS.prototype.getMatrixIds = function() {
return this.matrixIds_
};
ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet) {
var resolutions = [];
var matrixIds = [];
var origins = [];
var tileSizes = [];
var supportedCRSPropName = "supportedCRS";
var matrixIdsPropName = "matrixIds";
var identifierPropName = "identifier";
var scaleDenominatorPropName = "scaleDenominator";
var topLeftCornerPropName = "topLeftCorner";
var tileWidthPropName = "tileWidth";
var tileHeightPropName = "tileHeight";
var projection = ol.proj.get(matrixSet[supportedCRSPropName]);
var metersPerUnit = projection.getMetersPerUnit();
goog.array.sort(matrixSet[matrixIdsPropName], function(a, b) {
return b[scaleDenominatorPropName] - a[scaleDenominatorPropName]
});
goog.array.forEach(matrixSet[matrixIdsPropName], function(elt, index, array) {
matrixIds.push(elt[identifierPropName]);
origins.push(elt[topLeftCornerPropName]);
resolutions.push(elt[scaleDenominatorPropName] * 2.8E-4 / metersPerUnit);
var tileWidth = elt[tileWidthPropName];
var tileHeight = elt[tileHeightPropName];
goog.asserts.assert(tileWidth == tileHeight);
tileSizes.push(tileWidth)
});
return new ol.tilegrid.WMTS({origins:origins, resolutions:resolutions, matrixIds:matrixIds, tileSizes:tileSizes})
};
goog.provide("ol.source.WMTS");
goog.provide("ol.source.WMTSRequestEncoding");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("goog.object");
goog.require("goog.uri.utils");
goog.require("ol.TileCoord");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.WMTS");
ol.source.WMTSRequestEncoding = {KVP:"KVP", REST:"REST"};
ol.source.WMTS = function(options) {
var version = goog.isDef(options.version) ? options.version : "1.0.0";
var format = goog.isDef(options.format) ? options.format : "image/jpeg";
this.dimensions_ = goog.isDef(options.dimensions) ? options.dimensions : {};
this.coordKeyPrefix_ = "";
this.resetCoordKeyPrefix_();
var requestEncoding = goog.isDef(options.requestEncoding) ? options.requestEncoding : ol.source.WMTSRequestEncoding.KVP;
var tileGrid = options.tileGrid;
var context = {"Layer":options.layer, "style":options.style, "Style":options.style, "TileMatrixSet":options.matrixSet};
if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) {
goog.object.extend(context, {"Service":"WMTS", "Request":"GetTile", "Version":version, "Format":format})
}
var dimensions = this.dimensions_;
function createFromWMTSTemplate(template) {
template = requestEncoding == ol.source.WMTSRequestEncoding.KVP ? goog.uri.utils.appendParamsFromMap(template, context) : template.replace(/\{(\w+?)\}/g, function(m, p) {
return p in context ? context[p] : m
});
return function(tileCoord, pixelRatio, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var localContext = {"TileMatrix":tileGrid.getMatrixId(tileCoord.z), "TileCol":tileCoord.x, "TileRow":tileCoord.y};
goog.object.extend(localContext, dimensions);
var url = template;
if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) {
url = goog.uri.utils.appendParamsFromMap(url, localContext)
}else {
url = url.replace(/\{(\w+?)\}/g, function(m, p) {
return localContext[p]
})
}
return url
}
}
}
var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction;
var urls = options.urls;
if(!goog.isDef(urls) && goog.isDef(options.url)) {
urls = ol.TileUrlFunction.expandUrl(options.url)
}
if(goog.isDef(urls)) {
tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(urls, createFromWMTSTemplate))
}
var tmpExtent = ol.extent.createEmpty();
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(function(tileCoord, projection, opt_tileCoord) {
goog.asserts.assert(!goog.isNull(tileGrid));
if(tileGrid.getResolutions().length <= tileCoord.z) {
return null
}
var x = tileCoord.x;
var y = -tileCoord.y - 1;
var tileExtent = tileGrid.getTileCoordExtent(tileCoord);
var projectionExtent = projection.getExtent();
var extent = goog.isDef(options.extent) ? options.extent : projectionExtent;
if(!goog.isNull(extent) && projection.isGlobal() && extent[0] === projectionExtent[0] && extent[2] === projectionExtent[2]) {
var numCols = Math.ceil(ol.extent.getWidth(extent) / ol.extent.getWidth(tileExtent));
x = goog.math.modulo(x, numCols);
tmpTileCoord.z = tileCoord.z;
tmpTileCoord.x = x;
tmpTileCoord.y = tileCoord.y;
tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent)
}
if(!ol.extent.intersects(tileExtent, extent) || ol.extent.touches(tileExtent, extent)) {
return null
}
return new ol.TileCoord(tileCoord.z, x, y)
}, tileUrlFunction);
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, projection:options.projection, tileGrid:tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:tileUrlFunction})
};
goog.inherits(ol.source.WMTS, ol.source.TileImage);
ol.source.WMTS.prototype.getDimensions = function() {
return this.dimensions_
};
ol.source.WMTS.prototype.getKeyZXY = function(z, x, y) {
return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y)
};
ol.source.WMTS.prototype.resetCoordKeyPrefix_ = function() {
var i = 0;
var res = [];
for(var key in this.dimensions_) {
res[i++] = key + "-" + this.dimensions_[key]
}
this.coordKeyPrefix_ = res.join("/")
};
ol.source.WMTS.prototype.updateDimensions = function(dimensions) {
goog.object.extend(this.dimensions_, dimensions);
this.resetCoordKeyPrefix_();
this.dispatchChangeEvent()
};
ol.source.WMTS.optionsFromCapabilities = function(wmtsCap, layer) {
var layers = wmtsCap["contents"]["layers"];
var l = goog.array.find(layers, function(elt, index, array) {
return elt["identifier"] == layer
});
goog.asserts.assert(!goog.isNull(l));
goog.asserts.assert(l["tileMatrixSetLinks"].length > 0);
var matrixSet = (l["tileMatrixSetLinks"][0]["tileMatrixSet"]);
var format = (l["formats"][0]);
var idx = goog.array.findIndex(l["styles"], function(elt, index, array) {
return elt["isDefault"]
});
if(idx < 0) {
idx = 0
}
var style = (l["styles"][idx]["identifier"]);
var dimensions = {};
goog.array.forEach(l["dimensions"], function(elt, index, array) {
var key = elt["identifier"];
var value = elt["default"];
if(goog.isDef(value)) {
goog.asserts.assert(goog.array.contains(elt["values"], value))
}else {
value = elt["values"][0]
}
goog.asserts.assert(goog.isDef(value));
dimensions[key] = value
});
var matrixSets = wmtsCap["contents"]["tileMatrixSets"];
goog.asserts.assert(matrixSet in matrixSets);
var matrixSetObj = matrixSets[matrixSet];
var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(matrixSetObj);
var projection = ol.proj.get(matrixSetObj["supportedCRS"]);
var gets = wmtsCap["operationsMetadata"]["GetTile"]["dcp"]["http"]["get"];
var encodings = goog.object.getKeys(gets[0]["constraints"]["GetEncoding"]["allowedValues"]);
goog.asserts.assert(encodings.length > 0);
var urls;
var requestEncoding;
switch(encodings[0]) {
case "REST":
;
case "RESTful":
requestEncoding = ol.source.WMTSRequestEncoding.REST;
goog.asserts.assert(l["resourceUrls"].hasOwnProperty("tile"));
goog.asserts.assert(l["resourceUrls"]["tile"].hasOwnProperty(format));
urls = (l["resourceUrls"]["tile"][format]);
break;
case "KVP":
requestEncoding = ol.source.WMTSRequestEncoding.KVP;
urls = [];
goog.array.forEach(gets, function(elt, index, array) {
if(elt["constraints"]["GetEncoding"]["allowedValues"].hasOwnProperty(ol.source.WMTSRequestEncoding.KVP)) {
urls.push((elt["url"]))
}
});
goog.asserts.assert(urls.length > 0);
break;
default:
goog.asserts.fail()
}
return{urls:urls, layer:layer, matrixSet:matrixSet, format:format, projection:projection, requestEncoding:requestEncoding, tileGrid:tileGrid, style:style, dimensions:dimensions}
};
goog.provide("ol.tilegrid.Zoomify");
goog.require("goog.math");
goog.require("ol.TileCoord");
goog.require("ol.proj");
goog.require("ol.tilegrid.TileGrid");
ol.tilegrid.Zoomify = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : options;
goog.base(this, {origin:[0, 0], resolutions:options.resolutions})
};
goog.inherits(ol.tilegrid.Zoomify, ol.tilegrid.TileGrid);
ol.tilegrid.Zoomify.prototype.createTileCoordTransform = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var minZ = this.minZoom;
var maxZ = this.maxZoom;
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
var tileRangeByZ = null;
if(goog.isDef(options.extent)) {
tileRangeByZ = new Array(maxZ + 1);
var z;
for(z = 0;z <= maxZ;++z) {
if(z < minZ) {
tileRangeByZ[z] = null
}else {
tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z)
}
}
}
return function(tileCoord, projection, opt_tileCoord) {
var z = tileCoord.z;
if(z < minZ || maxZ < z) {
return null
}
var n = Math.pow(2, z);
var x = tileCoord.x;
if(x < 0 || n <= x) {
return null
}
var y = tileCoord.y;
if(y < -n || -1 < y) {
return null
}
if(!goog.isNull(tileRangeByZ)) {
tmpTileCoord.z = z;
tmpTileCoord.x = x;
tmpTileCoord.y = -y - 1;
if(!tileRangeByZ[z].contains(tmpTileCoord)) {
return null
}
}
return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord)
}
};
goog.provide("ol.source.Zoomify");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol");
goog.require("ol.ImageTile");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
goog.require("ol.TileUrlFunction");
goog.require("ol.dom");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.Zoomify");
ol.source.ZoomifyTierSizeCalculation = {DEFAULT:"default", TRUNCATED:"truncated"};
ol.source.Zoomify = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var size = options.size;
var tierSizeCalculation = goog.isDef(options.tierSizeCalculation) ? options.tierSizeCalculation : ol.source.ZoomifyTierSizeCalculation.DEFAULT;
var imageWidth = size[0];
var imageHeight = size[1];
var tierSizeInTiles = [];
var tileSize = ol.DEFAULT_TILE_SIZE;
switch(tierSizeCalculation) {
case ol.source.ZoomifyTierSizeCalculation.DEFAULT:
while(imageWidth > tileSize || imageHeight > tileSize) {
tierSizeInTiles.push([Math.ceil(imageWidth / tileSize), Math.ceil(imageHeight / tileSize)]);
tileSize += tileSize
}
break;
case ol.source.ZoomifyTierSizeCalculation.TRUNCATED:
var width = imageWidth;
var height = imageHeight;
while(width > tileSize || height > tileSize) {
tierSizeInTiles.push([Math.ceil(width / tileSize), Math.ceil(height / tileSize)]);
width >>= 1;
height >>= 1
}
break;
default:
goog.asserts.fail();
break
}
tierSizeInTiles.push([1, 1]);
tierSizeInTiles.reverse();
var resolutions = [1];
var tileCountUpToTier = [0];
var i, ii;
for(i = 1, ii = tierSizeInTiles.length;i < ii;i++) {
resolutions.push(1 << i);
tileCountUpToTier.push(tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] + tileCountUpToTier[i - 1])
}
resolutions.reverse();
var tileGrid = new ol.tilegrid.Zoomify({resolutions:resolutions});
var url = options.url;
var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform({extent:[0, 0, size[0], size[1]]}), function(tileCoord, pixelRatio, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var tileIndex = tileCoord.x + tileCoord.y * tierSizeInTiles[tileCoord.z][0] + tileCountUpToTier[tileCoord.z];
var tileGroup = tileIndex / ol.DEFAULT_TILE_SIZE | 0;
return url + "TileGroup" + tileGroup + "/" + tileCoord.z + "-" + tileCoord.x + "-" + tileCoord.y + ".jpg"
}
});
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, logo:options.logo, tileClass:ol.source.ZoomifyTile_, tileGrid:tileGrid, tileUrlFunction:tileUrlFunction})
};
goog.inherits(ol.source.Zoomify, ol.source.TileImage);
ol.source.ZoomifyTile_ = function(tileCoord, state, src, crossOrigin, tileLoadFunction) {
goog.base(this, tileCoord, state, src, crossOrigin, tileLoadFunction);
this.zoomifyImageByContext_ = {}
};
goog.inherits(ol.source.ZoomifyTile_, ol.ImageTile);
ol.source.ZoomifyTile_.prototype.getImage = function(opt_context) {
var tileSize = ol.DEFAULT_TILE_SIZE;
var key = goog.isDef(opt_context) ? goog.getUid(opt_context).toString() : "";
if(key in this.zoomifyImageByContext_) {
return this.zoomifyImageByContext_[key]
}else {
var image = goog.base(this, "getImage", opt_context);
if(this.state == ol.TileState.LOADED) {
if(image.width == tileSize && image.height == tileSize) {
this.zoomifyImageByContext_[key] = image;
return image
}else {
var context = ol.dom.createCanvasContext2D(tileSize, tileSize);
context.drawImage(image, 0, 0);
this.zoomifyImageByContext_[key] = context.canvas;
return context.canvas
}
}else {
return image
}
}
};
goog.provide("ol.style.Text");
ol.style.Text = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.font_ = options.font;
this.rotation_ = options.rotation;
this.scale_ = options.scale;
this.text_ = options.text;
this.textAlign_ = options.textAlign;
this.textBaseline_ = options.textBaseline;
this.fill_ = goog.isDef(options.fill) ? options.fill : null;
this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null;
this.offsetX_ = goog.isDef(options.offsetX) ? options.offsetX : 0;
this.offsetY_ = goog.isDef(options.offsetY) ? options.offsetY : 0
};
ol.style.Text.prototype.getFont = function() {
return this.font_
};
ol.style.Text.prototype.getOffsetX = function() {
return this.offsetX_
};
ol.style.Text.prototype.getOffsetY = function() {
return this.offsetY_
};
ol.style.Text.prototype.getFill = function() {
return this.fill_
};
ol.style.Text.prototype.getRotation = function() {
return this.rotation_
};
ol.style.Text.prototype.getScale = function() {
return this.scale_
};
ol.style.Text.prototype.getStroke = function() {
return this.stroke_
};
ol.style.Text.prototype.getText = function() {
return this.text_
};
ol.style.Text.prototype.getTextAlign = function() {
return this.textAlign_
};
ol.style.Text.prototype.getTextBaseline = function() {
return this.textBaseline_
};
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.BrowserFeature");
goog.require("ol.Collection");
goog.require("ol.CollectionEvent");
goog.require("ol.CollectionEventType");
goog.require("ol.Coordinate");
goog.require("ol.CoordinateArray");
goog.require("ol.CoordinateFormatType");
goog.require("ol.DeviceOrientation");
goog.require("ol.DeviceOrientationProperty");
goog.require("ol.DragBoxEvent");
goog.require("ol.DrawEvent");
goog.require("ol.Extent");
goog.require("ol.Feature");
goog.require("ol.FeatureOverlay");
goog.require("ol.Geolocation");
goog.require("ol.GeolocationProperty");
goog.require("ol.ImageTile");
goog.require("ol.Kinetic");
goog.require("ol.Map");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserEventHandler");
goog.require("ol.MapBrowserPointerEvent");
goog.require("ol.MapProperty");
goog.require("ol.Object");
goog.require("ol.ObjectEvent");
goog.require("ol.ObjectEventType");
goog.require("ol.Observable");
goog.require("ol.Overlay");
goog.require("ol.OverlayPositioning");
goog.require("ol.OverlayProperty");
goog.require("ol.Sphere");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
goog.require("ol.View2D");
goog.require("ol.View2DProperty");
goog.require("ol.animation");
goog.require("ol.color");
goog.require("ol.control");
goog.require("ol.control.Attribution");
goog.require("ol.control.Control");
goog.require("ol.control.FullScreen");
goog.require("ol.control.Logo");
goog.require("ol.control.MousePosition");
goog.require("ol.control.ScaleLine");
goog.require("ol.control.ScaleLineProperty");
goog.require("ol.control.ScaleLineUnits");
goog.require("ol.control.Zoom");
goog.require("ol.control.ZoomSlider");
goog.require("ol.control.ZoomToExtent");
goog.require("ol.coordinate");
goog.require("ol.dom.Input");
goog.require("ol.dom.InputProperty");
goog.require("ol.easing");
goog.require("ol.events.ConditionType");
goog.require("ol.events.condition");
goog.require("ol.extent");
goog.require("ol.extent.Relationship");
goog.require("ol.feature");
goog.require("ol.format.GPX");
goog.require("ol.format.GPX.V1_1");
goog.require("ol.format.GeoJSON");
goog.require("ol.format.IGC");
goog.require("ol.format.IGCZ");
goog.require("ol.format.KML");
goog.require("ol.format.OSMXML");
goog.require("ol.format.TopoJSON");
goog.require("ol.format.WFS");
goog.require("ol.format.WMSCapabilities");
goog.require("ol.geom.Circle");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SimpleGeometry");
goog.require("ol.interaction");
goog.require("ol.interaction.DoubleClickZoom");
goog.require("ol.interaction.DragAndDrop");
goog.require("ol.interaction.DragAndDropEvent");
goog.require("ol.interaction.DragBox");
goog.require("ol.interaction.DragPan");
goog.require("ol.interaction.DragRotate");
goog.require("ol.interaction.DragRotateAndZoom");
goog.require("ol.interaction.DragZoom");
goog.require("ol.interaction.Draw");
goog.require("ol.interaction.KeyboardPan");
goog.require("ol.interaction.KeyboardZoom");
goog.require("ol.interaction.Modify");
goog.require("ol.interaction.MouseWheelZoom");
goog.require("ol.interaction.PinchRotate");
goog.require("ol.interaction.PinchZoom");
goog.require("ol.interaction.Select");
goog.require("ol.layer.Base");
goog.require("ol.layer.Group");
goog.require("ol.layer.Heatmap");
goog.require("ol.layer.Image");
goog.require("ol.layer.Layer");
goog.require("ol.layer.LayerProperty");
goog.require("ol.layer.LayerState");
goog.require("ol.layer.Tile");
goog.require("ol.layer.Vector");
goog.require("ol.loadingstrategy");
goog.require("ol.proj");
goog.require("ol.proj.CH");
goog.require("ol.proj.EPSG2056");
goog.require("ol.proj.EPSG21781");
goog.require("ol.proj.EPSG3857");
goog.require("ol.proj.EPSG4326");
goog.require("ol.proj.METERS_PER_UNIT");
goog.require("ol.proj.Projection");
goog.require("ol.proj.ProjectionLike");
goog.require("ol.proj.Units");
goog.require("ol.proj.common");
goog.require("ol.render.canvas.Immediate");
goog.require("ol.source.BingMaps");
goog.require("ol.source.GPX");
goog.require("ol.source.GeoJSON");
goog.require("ol.source.IGC");
goog.require("ol.source.ImageCanvas");
goog.require("ol.source.ImageStatic");
goog.require("ol.source.ImageVector");
goog.require("ol.source.ImageWMS");
goog.require("ol.source.KML");
goog.require("ol.source.MapGuide");
goog.require("ol.source.MapQuest");
goog.require("ol.source.OSM");
goog.require("ol.source.OSMXML");
goog.require("ol.source.ServerVector");
goog.require("ol.source.Source");
goog.require("ol.source.Stamen");
goog.require("ol.source.State");
goog.require("ol.source.StaticVector");
goog.require("ol.source.Tile");
goog.require("ol.source.TileDebug");
goog.require("ol.source.TileImage");
goog.require("ol.source.TileJSON");
goog.require("ol.source.TileOptions");
goog.require("ol.source.TileVector");
goog.require("ol.source.TileWMS");
goog.require("ol.source.TopoJSON");
goog.require("ol.source.Vector");
goog.require("ol.source.VectorEvent");
goog.require("ol.source.VectorEventType");
goog.require("ol.source.WMTS");
goog.require("ol.source.WMTSRequestEncoding");
goog.require("ol.source.XYZ");
goog.require("ol.source.Zoomify");
goog.require("ol.sphere.WGS84");
goog.require("ol.style.Circle");
goog.require("ol.style.Fill");
goog.require("ol.style.Icon");
goog.require("ol.style.IconAnchorOrigin");
goog.require("ol.style.IconAnchorUnits");
goog.require("ol.style.IconImageCache");
goog.require("ol.style.Image");
goog.require("ol.style.ImageState");
goog.require("ol.style.Stroke");
goog.require("ol.style.Style");
goog.require("ol.style.Text");
goog.require("ol.tilegrid.TileGrid");
goog.require("ol.tilegrid.WMTS");
goog.require("ol.tilegrid.XYZ");
goog.require("ol.tilegrid.Zoomify");
goog.require("ol.tilejson");
goog.require("ol.webgl.Context");
goog.exportSymbol("ol.Attribution", ol.Attribution);
goog.exportSymbol("ol.BrowserFeature.DEVICE_PIXEL_RATIO", ol.BrowserFeature.DEVICE_PIXEL_RATIO);
goog.exportSymbol("ol.BrowserFeature.HAS_CANVAS", ol.BrowserFeature.HAS_CANVAS);
goog.exportSymbol("ol.BrowserFeature.HAS_DEVICE_ORIENTATION", ol.BrowserFeature.HAS_DEVICE_ORIENTATION);
goog.exportSymbol("ol.BrowserFeature.HAS_GEOLOCATION", ol.BrowserFeature.HAS_GEOLOCATION);
goog.exportSymbol("ol.BrowserFeature.HAS_TOUCH", ol.BrowserFeature.HAS_TOUCH);
goog.exportSymbol("ol.Collection", ol.Collection);
goog.exportProperty(ol.Collection.prototype, "bindTo", ol.Collection.prototype.bindTo);
goog.exportProperty(ol.Collection.prototype, "clear", ol.Collection.prototype.clear);
goog.exportProperty(ol.Collection.prototype, "dispatchChangeEvent", ol.Collection.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Collection.prototype, "extend", ol.Collection.prototype.extend);
goog.exportProperty(ol.Collection.prototype, "forEach", ol.Collection.prototype.forEach);
goog.exportProperty(ol.Collection.prototype, "get", ol.Collection.prototype.get);
goog.exportProperty(ol.Collection.prototype, "getArray", ol.Collection.prototype.getArray);
goog.exportProperty(ol.Collection.prototype, "getAt", ol.Collection.prototype.getAt);
goog.exportProperty(ol.Collection.prototype, "getKeys", ol.Collection.prototype.getKeys);
goog.exportProperty(ol.Collection.prototype, "getLength", ol.Collection.prototype.getLength);
goog.exportProperty(ol.Collection.prototype, "getProperties", ol.Collection.prototype.getProperties);
goog.exportProperty(ol.Collection.prototype, "insertAt", ol.Collection.prototype.insertAt);
goog.exportProperty(ol.Collection.prototype, "notify", ol.Collection.prototype.notify);
goog.exportProperty(ol.Collection.prototype, "on", ol.Collection.prototype.on);
goog.exportProperty(ol.Collection.prototype, "once", ol.Collection.prototype.once);
goog.exportProperty(ol.Collection.prototype, "pop", ol.Collection.prototype.pop);
goog.exportProperty(ol.Collection.prototype, "push", ol.Collection.prototype.push);
goog.exportProperty(ol.Collection.prototype, "remove", ol.Collection.prototype.remove);
goog.exportProperty(ol.Collection.prototype, "removeAt", ol.Collection.prototype.removeAt);
goog.exportProperty(ol.Collection.prototype, "set", ol.Collection.prototype.set);
goog.exportProperty(ol.Collection.prototype, "setAt", ol.Collection.prototype.setAt);
goog.exportProperty(ol.Collection.prototype, "setValues", ol.Collection.prototype.setValues);
goog.exportProperty(ol.Collection.prototype, "un", ol.Collection.prototype.un);
goog.exportProperty(ol.Collection.prototype, "unByKey", ol.Collection.prototype.unByKey);
goog.exportProperty(ol.Collection.prototype, "unbind", ol.Collection.prototype.unbind);
goog.exportProperty(ol.Collection.prototype, "unbindAll", ol.Collection.prototype.unbindAll);
goog.exportSymbol("ol.DeviceOrientation", ol.DeviceOrientation);
goog.exportProperty(ol.DeviceOrientation.prototype, "bindTo", ol.DeviceOrientation.prototype.bindTo);
goog.exportProperty(ol.DeviceOrientation.prototype, "dispatchChangeEvent", ol.DeviceOrientation.prototype.dispatchChangeEvent);
goog.exportProperty(ol.DeviceOrientation.prototype, "get", ol.DeviceOrientation.prototype.get);
goog.exportProperty(ol.DeviceOrientation.prototype, "getAlpha", ol.DeviceOrientation.prototype.getAlpha);
goog.exportProperty(ol.DeviceOrientation.prototype, "getBeta", ol.DeviceOrientation.prototype.getBeta);
goog.exportProperty(ol.DeviceOrientation.prototype, "getGamma", ol.DeviceOrientation.prototype.getGamma);
goog.exportProperty(ol.DeviceOrientation.prototype, "getHeading", ol.DeviceOrientation.prototype.getHeading);
goog.exportProperty(ol.DeviceOrientation.prototype, "getKeys", ol.DeviceOrientation.prototype.getKeys);
goog.exportProperty(ol.DeviceOrientation.prototype, "getProperties", ol.DeviceOrientation.prototype.getProperties);
goog.exportProperty(ol.DeviceOrientation.prototype, "getTracking", ol.DeviceOrientation.prototype.getTracking);
goog.exportProperty(ol.DeviceOrientation.prototype, "notify", ol.DeviceOrientation.prototype.notify);
goog.exportProperty(ol.DeviceOrientation.prototype, "on", ol.DeviceOrientation.prototype.on);
goog.exportProperty(ol.DeviceOrientation.prototype, "once", ol.DeviceOrientation.prototype.once);
goog.exportProperty(ol.DeviceOrientation.prototype, "set", ol.DeviceOrientation.prototype.set);
goog.exportProperty(ol.DeviceOrientation.prototype, "setTracking", ol.DeviceOrientation.prototype.setTracking);
goog.exportProperty(ol.DeviceOrientation.prototype, "setValues", ol.DeviceOrientation.prototype.setValues);
goog.exportProperty(ol.DeviceOrientation.prototype, "un", ol.DeviceOrientation.prototype.un);
goog.exportProperty(ol.DeviceOrientation.prototype, "unByKey", ol.DeviceOrientation.prototype.unByKey);
goog.exportProperty(ol.DeviceOrientation.prototype, "unbind", ol.DeviceOrientation.prototype.unbind);
goog.exportProperty(ol.DeviceOrientation.prototype, "unbindAll", ol.DeviceOrientation.prototype.unbindAll);
goog.exportSymbol("ol.Feature", ol.Feature);
goog.exportProperty(ol.Feature.prototype, "bindTo", ol.Feature.prototype.bindTo);
goog.exportProperty(ol.Feature.prototype, "dispatchChangeEvent", ol.Feature.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Feature.prototype, "get", ol.Feature.prototype.get);
goog.exportProperty(ol.Feature.prototype, "getGeometry", ol.Feature.prototype.getGeometry);
goog.exportProperty(ol.Feature.prototype, "getGeometryName", ol.Feature.prototype.getGeometryName);
goog.exportProperty(ol.Feature.prototype, "getId", ol.Feature.prototype.getId);
goog.exportProperty(ol.Feature.prototype, "getKeys", ol.Feature.prototype.getKeys);
goog.exportProperty(ol.Feature.prototype, "getProperties", ol.Feature.prototype.getProperties);
goog.exportProperty(ol.Feature.prototype, "getStyle", ol.Feature.prototype.getStyle);
goog.exportProperty(ol.Feature.prototype, "getStyleFunction", ol.Feature.prototype.getStyleFunction);
goog.exportProperty(ol.Feature.prototype, "notify", ol.Feature.prototype.notify);
goog.exportProperty(ol.Feature.prototype, "on", ol.Feature.prototype.on);
goog.exportProperty(ol.Feature.prototype, "once", ol.Feature.prototype.once);
goog.exportProperty(ol.Feature.prototype, "set", ol.Feature.prototype.set);
goog.exportProperty(ol.Feature.prototype, "setGeometry", ol.Feature.prototype.setGeometry);
goog.exportProperty(ol.Feature.prototype, "setGeometryName", ol.Feature.prototype.setGeometryName);
goog.exportProperty(ol.Feature.prototype, "setId", ol.Feature.prototype.setId);
goog.exportProperty(ol.Feature.prototype, "setStyle", ol.Feature.prototype.setStyle);
goog.exportProperty(ol.Feature.prototype, "setValues", ol.Feature.prototype.setValues);
goog.exportProperty(ol.Feature.prototype, "un", ol.Feature.prototype.un);
goog.exportProperty(ol.Feature.prototype, "unByKey", ol.Feature.prototype.unByKey);
goog.exportProperty(ol.Feature.prototype, "unbind", ol.Feature.prototype.unbind);
goog.exportProperty(ol.Feature.prototype, "unbindAll", ol.Feature.prototype.unbindAll);
goog.exportSymbol("ol.FeatureOverlay", ol.FeatureOverlay);
goog.exportProperty(ol.FeatureOverlay.prototype, "addFeature", ol.FeatureOverlay.prototype.addFeature);
goog.exportProperty(ol.FeatureOverlay.prototype, "getFeatures", ol.FeatureOverlay.prototype.getFeatures);
goog.exportProperty(ol.FeatureOverlay.prototype, "getStyle", ol.FeatureOverlay.prototype.getStyle);
goog.exportProperty(ol.FeatureOverlay.prototype, "getStyleFunction", ol.FeatureOverlay.prototype.getStyleFunction);
goog.exportProperty(ol.FeatureOverlay.prototype, "removeFeature", ol.FeatureOverlay.prototype.removeFeature);
goog.exportProperty(ol.FeatureOverlay.prototype, "setFeatures", ol.FeatureOverlay.prototype.setFeatures);
goog.exportProperty(ol.FeatureOverlay.prototype, "setMap", ol.FeatureOverlay.prototype.setMap);
goog.exportProperty(ol.FeatureOverlay.prototype, "setStyle", ol.FeatureOverlay.prototype.setStyle);
goog.exportSymbol("ol.Geolocation", ol.Geolocation);
goog.exportProperty(ol.Geolocation.prototype, "bindTo", ol.Geolocation.prototype.bindTo);
goog.exportProperty(ol.Geolocation.prototype, "dispatchChangeEvent", ol.Geolocation.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Geolocation.prototype, "get", ol.Geolocation.prototype.get);
goog.exportProperty(ol.Geolocation.prototype, "getAccuracy", ol.Geolocation.prototype.getAccuracy);
goog.exportProperty(ol.Geolocation.prototype, "getAccuracyGeometry", ol.Geolocation.prototype.getAccuracyGeometry);
goog.exportProperty(ol.Geolocation.prototype, "getAltitude", ol.Geolocation.prototype.getAltitude);
goog.exportProperty(ol.Geolocation.prototype, "getAltitudeAccuracy", ol.Geolocation.prototype.getAltitudeAccuracy);
goog.exportProperty(ol.Geolocation.prototype, "getHeading", ol.Geolocation.prototype.getHeading);
goog.exportProperty(ol.Geolocation.prototype, "getKeys", ol.Geolocation.prototype.getKeys);
goog.exportProperty(ol.Geolocation.prototype, "getPosition", ol.Geolocation.prototype.getPosition);
goog.exportProperty(ol.Geolocation.prototype, "getProjection", ol.Geolocation.prototype.getProjection);
goog.exportProperty(ol.Geolocation.prototype, "getProperties", ol.Geolocation.prototype.getProperties);
goog.exportProperty(ol.Geolocation.prototype, "getSpeed", ol.Geolocation.prototype.getSpeed);
goog.exportProperty(ol.Geolocation.prototype, "getTracking", ol.Geolocation.prototype.getTracking);
goog.exportProperty(ol.Geolocation.prototype, "getTrackingOptions", ol.Geolocation.prototype.getTrackingOptions);
goog.exportProperty(ol.Geolocation.prototype, "notify", ol.Geolocation.prototype.notify);
goog.exportProperty(ol.Geolocation.prototype, "on", ol.Geolocation.prototype.on);
goog.exportProperty(ol.Geolocation.prototype, "once", ol.Geolocation.prototype.once);
goog.exportProperty(ol.Geolocation.prototype, "set", ol.Geolocation.prototype.set);
goog.exportProperty(ol.Geolocation.prototype, "setProjection", ol.Geolocation.prototype.setProjection);
goog.exportProperty(ol.Geolocation.prototype, "setTracking", ol.Geolocation.prototype.setTracking);
goog.exportProperty(ol.Geolocation.prototype, "setTrackingOptions", ol.Geolocation.prototype.setTrackingOptions);
goog.exportProperty(ol.Geolocation.prototype, "setValues", ol.Geolocation.prototype.setValues);
goog.exportProperty(ol.Geolocation.prototype, "un", ol.Geolocation.prototype.un);
goog.exportProperty(ol.Geolocation.prototype, "unByKey", ol.Geolocation.prototype.unByKey);
goog.exportProperty(ol.Geolocation.prototype, "unbind", ol.Geolocation.prototype.unbind);
goog.exportProperty(ol.Geolocation.prototype, "unbindAll", ol.Geolocation.prototype.unbindAll);
goog.exportProperty(ol.ImageTile.prototype, "getImage", ol.ImageTile.prototype.getImage);
goog.exportProperty(ol.ImageTile.prototype, "getTileCoord", ol.ImageTile.prototype.getTileCoord);
goog.exportSymbol("ol.Kinetic", ol.Kinetic);
goog.exportSymbol("ol.Map", ol.Map);
goog.exportProperty(ol.Map.prototype, "addControl", ol.Map.prototype.addControl);
goog.exportProperty(ol.Map.prototype, "addInteraction", ol.Map.prototype.addInteraction);
goog.exportProperty(ol.Map.prototype, "addLayer", ol.Map.prototype.addLayer);
goog.exportProperty(ol.Map.prototype, "addOverlay", ol.Map.prototype.addOverlay);
goog.exportProperty(ol.Map.prototype, "beforeRender", ol.Map.prototype.beforeRender);
goog.exportProperty(ol.Map.prototype, "bindTo", ol.Map.prototype.bindTo);
goog.exportProperty(ol.Map.prototype, "dispatchChangeEvent", ol.Map.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Map.prototype, "forEachFeatureAtPixel", ol.Map.prototype.forEachFeatureAtPixel);
goog.exportProperty(ol.Map.prototype, "get", ol.Map.prototype.get);
goog.exportProperty(ol.Map.prototype, "getControls", ol.Map.prototype.getControls);
goog.exportProperty(ol.Map.prototype, "getCoordinateFromPixel", ol.Map.prototype.getCoordinateFromPixel);
goog.exportProperty(ol.Map.prototype, "getEventCoordinate", ol.Map.prototype.getEventCoordinate);
goog.exportProperty(ol.Map.prototype, "getEventPixel", ol.Map.prototype.getEventPixel);
goog.exportProperty(ol.Map.prototype, "getInteractions", ol.Map.prototype.getInteractions);
goog.exportProperty(ol.Map.prototype, "getKeys", ol.Map.prototype.getKeys);
goog.exportProperty(ol.Map.prototype, "getLayerGroup", ol.Map.prototype.getLayerGroup);
goog.exportProperty(ol.Map.prototype, "getLayers", ol.Map.prototype.getLayers);
goog.exportProperty(ol.Map.prototype, "getOverlays", ol.Map.prototype.getOverlays);
goog.exportProperty(ol.Map.prototype, "getPixelFromCoordinate", ol.Map.prototype.getPixelFromCoordinate);
goog.exportProperty(ol.Map.prototype, "getProperties", ol.Map.prototype.getProperties);
goog.exportProperty(ol.Map.prototype, "getSize", ol.Map.prototype.getSize);
goog.exportProperty(ol.Map.prototype, "getTarget", ol.Map.prototype.getTarget);
goog.exportProperty(ol.Map.prototype, "getView", ol.Map.prototype.getView);
goog.exportProperty(ol.Map.prototype, "getViewport", ol.Map.prototype.getViewport);
goog.exportProperty(ol.Map.prototype, "notify", ol.Map.prototype.notify);
goog.exportProperty(ol.Map.prototype, "on", ol.Map.prototype.on);
goog.exportProperty(ol.Map.prototype, "once", ol.Map.prototype.once);
goog.exportProperty(ol.Map.prototype, "removeControl", ol.Map.prototype.removeControl);
goog.exportProperty(ol.Map.prototype, "removeInteraction", ol.Map.prototype.removeInteraction);
goog.exportProperty(ol.Map.prototype, "removeLayer", ol.Map.prototype.removeLayer);
goog.exportProperty(ol.Map.prototype, "removeOverlay", ol.Map.prototype.removeOverlay);
goog.exportProperty(ol.Map.prototype, "render", ol.Map.prototype.render);
goog.exportProperty(ol.Map.prototype, "renderSync", ol.Map.prototype.renderSync);
goog.exportProperty(ol.Map.prototype, "set", ol.Map.prototype.set);
goog.exportProperty(ol.Map.prototype, "setLayerGroup", ol.Map.prototype.setLayerGroup);
goog.exportProperty(ol.Map.prototype, "setSize", ol.Map.prototype.setSize);
goog.exportProperty(ol.Map.prototype, "setTarget", ol.Map.prototype.setTarget);
goog.exportProperty(ol.Map.prototype, "setValues", ol.Map.prototype.setValues);
goog.exportProperty(ol.Map.prototype, "setView", ol.Map.prototype.setView);
goog.exportProperty(ol.Map.prototype, "un", ol.Map.prototype.un);
goog.exportProperty(ol.Map.prototype, "unByKey", ol.Map.prototype.unByKey);
goog.exportProperty(ol.Map.prototype, "unbind", ol.Map.prototype.unbind);
goog.exportProperty(ol.Map.prototype, "unbindAll", ol.Map.prototype.unbindAll);
goog.exportProperty(ol.Map.prototype, "updateSize", ol.Map.prototype.updateSize);
goog.exportProperty(ol.MapBrowserEvent.prototype, "preventDefault", ol.MapBrowserEvent.prototype.preventDefault);
goog.exportProperty(ol.MapBrowserEvent.prototype, "stopPropagation", ol.MapBrowserEvent.prototype.stopPropagation);
goog.exportProperty(ol.MapBrowserPointerEvent.prototype, "preventDefault", ol.MapBrowserPointerEvent.prototype.preventDefault);
goog.exportProperty(ol.MapBrowserPointerEvent.prototype, "stopPropagation", ol.MapBrowserPointerEvent.prototype.stopPropagation);
goog.exportSymbol("ol.Object", ol.Object);
goog.exportProperty(ol.Object.prototype, "bindTo", ol.Object.prototype.bindTo);
goog.exportProperty(ol.Object.prototype, "dispatchChangeEvent", ol.Object.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Object.prototype, "get", ol.Object.prototype.get);
goog.exportProperty(ol.Object.prototype, "getKeys", ol.Object.prototype.getKeys);
goog.exportProperty(ol.Object.prototype, "getProperties", ol.Object.prototype.getProperties);
goog.exportProperty(ol.Object.prototype, "notify", ol.Object.prototype.notify);
goog.exportProperty(ol.Object.prototype, "on", ol.Object.prototype.on);
goog.exportProperty(ol.Object.prototype, "once", ol.Object.prototype.once);
goog.exportProperty(ol.Object.prototype, "set", ol.Object.prototype.set);
goog.exportProperty(ol.Object.prototype, "setValues", ol.Object.prototype.setValues);
goog.exportProperty(ol.Object.prototype, "un", ol.Object.prototype.un);
goog.exportProperty(ol.Object.prototype, "unByKey", ol.Object.prototype.unByKey);
goog.exportProperty(ol.Object.prototype, "unbind", ol.Object.prototype.unbind);
goog.exportProperty(ol.Object.prototype, "unbindAll", ol.Object.prototype.unbindAll);
goog.exportSymbol("ol.Observable", ol.Observable);
goog.exportProperty(ol.Observable.prototype, "dispatchChangeEvent", ol.Observable.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Observable.prototype, "on", ol.Observable.prototype.on);
goog.exportProperty(ol.Observable.prototype, "once", ol.Observable.prototype.once);
goog.exportProperty(ol.Observable.prototype, "un", ol.Observable.prototype.un);
goog.exportProperty(ol.Observable.prototype, "unByKey", ol.Observable.prototype.unByKey);
goog.exportSymbol("ol.Overlay", ol.Overlay);
goog.exportProperty(ol.Overlay.prototype, "bindTo", ol.Overlay.prototype.bindTo);
goog.exportProperty(ol.Overlay.prototype, "dispatchChangeEvent", ol.Overlay.prototype.dispatchChangeEvent);
goog.exportProperty(ol.Overlay.prototype, "get", ol.Overlay.prototype.get);
goog.exportProperty(ol.Overlay.prototype, "getElement", ol.Overlay.prototype.getElement);
goog.exportProperty(ol.Overlay.prototype, "getKeys", ol.Overlay.prototype.getKeys);
goog.exportProperty(ol.Overlay.prototype, "getMap", ol.Overlay.prototype.getMap);
goog.exportProperty(ol.Overlay.prototype, "getPosition", ol.Overlay.prototype.getPosition);
goog.exportProperty(ol.Overlay.prototype, "getPositioning", ol.Overlay.prototype.getPositioning);
goog.exportProperty(ol.Overlay.prototype, "getProperties", ol.Overlay.prototype.getProperties);
goog.exportProperty(ol.Overlay.prototype, "notify", ol.Overlay.prototype.notify);
goog.exportProperty(ol.Overlay.prototype, "on", ol.Overlay.prototype.on);
goog.exportProperty(ol.Overlay.prototype, "once", ol.Overlay.prototype.once);
goog.exportProperty(ol.Overlay.prototype, "set", ol.Overlay.prototype.set);
goog.exportProperty(ol.Overlay.prototype, "setElement", ol.Overlay.prototype.setElement);
goog.exportProperty(ol.Overlay.prototype, "setMap", ol.Overlay.prototype.setMap);
goog.exportProperty(ol.Overlay.prototype, "setPosition", ol.Overlay.prototype.setPosition);
goog.exportProperty(ol.Overlay.prototype, "setPositioning", ol.Overlay.prototype.setPositioning);
goog.exportProperty(ol.Overlay.prototype, "setValues", ol.Overlay.prototype.setValues);
goog.exportProperty(ol.Overlay.prototype, "un", ol.Overlay.prototype.un);
goog.exportProperty(ol.Overlay.prototype, "unByKey", ol.Overlay.prototype.unByKey);
goog.exportProperty(ol.Overlay.prototype, "unbind", ol.Overlay.prototype.unbind);
goog.exportProperty(ol.Overlay.prototype, "unbindAll", ol.Overlay.prototype.unbindAll);
goog.exportProperty(ol.Sphere.prototype, "circle", ol.Sphere.prototype.circle);
goog.exportProperty(ol.Tile.prototype, "getTileCoord", ol.Tile.prototype.getTileCoord);
goog.exportProperty(ol.TileCoord.prototype, "getZXY", ol.TileCoord.prototype.getZXY);
goog.exportSymbol("ol.View2D", ol.View2D);
goog.exportProperty(ol.View2D.prototype, "calculateExtent", ol.View2D.prototype.calculateExtent);
goog.exportProperty(ol.View2D.prototype, "centerOn", ol.View2D.prototype.centerOn);
goog.exportProperty(ol.View2D.prototype, "constrainResolution", ol.View2D.prototype.constrainResolution);
goog.exportProperty(ol.View2D.prototype, "constrainRotation", ol.View2D.prototype.constrainRotation);
goog.exportProperty(ol.View2D.prototype, "fitExtent", ol.View2D.prototype.fitExtent);
goog.exportProperty(ol.View2D.prototype, "fitGeometry", ol.View2D.prototype.fitGeometry);
goog.exportProperty(ol.View2D.prototype, "getCenter", ol.View2D.prototype.getCenter);
goog.exportProperty(ol.View2D.prototype, "getProjection", ol.View2D.prototype.getProjection);
goog.exportProperty(ol.View2D.prototype, "getResolution", ol.View2D.prototype.getResolution);
goog.exportProperty(ol.View2D.prototype, "getRotation", ol.View2D.prototype.getRotation);
goog.exportProperty(ol.View2D.prototype, "getView2D", ol.View2D.prototype.getView2D);
goog.exportProperty(ol.View2D.prototype, "getZoom", ol.View2D.prototype.getZoom);
goog.exportProperty(ol.View2D.prototype, "rotate", ol.View2D.prototype.rotate);
goog.exportProperty(ol.View2D.prototype, "setCenter", ol.View2D.prototype.setCenter);
goog.exportProperty(ol.View2D.prototype, "setProjection", ol.View2D.prototype.setProjection);
goog.exportProperty(ol.View2D.prototype, "setResolution", ol.View2D.prototype.setResolution);
goog.exportProperty(ol.View2D.prototype, "setRotation", ol.View2D.prototype.setRotation);
goog.exportProperty(ol.View2D.prototype, "setZoom", ol.View2D.prototype.setZoom);
goog.exportSymbol("ol.animation.bounce", ol.animation.bounce);
goog.exportSymbol("ol.animation.pan", ol.animation.pan);
goog.exportSymbol("ol.animation.rotate", ol.animation.rotate);
goog.exportSymbol("ol.animation.zoom", ol.animation.zoom);
goog.exportSymbol("ol.color.asArray", ol.color.asArray);
goog.exportSymbol("ol.color.asString", ol.color.asString);
goog.exportSymbol("ol.control.Attribution", ol.control.Attribution);
goog.exportProperty(ol.control.Attribution.prototype, "bindTo", ol.control.Attribution.prototype.bindTo);
goog.exportProperty(ol.control.Attribution.prototype, "dispatchChangeEvent", ol.control.Attribution.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.Attribution.prototype, "get", ol.control.Attribution.prototype.get);
goog.exportProperty(ol.control.Attribution.prototype, "getKeys", ol.control.Attribution.prototype.getKeys);
goog.exportProperty(ol.control.Attribution.prototype, "getMap", ol.control.Attribution.prototype.getMap);
goog.exportProperty(ol.control.Attribution.prototype, "getProperties", ol.control.Attribution.prototype.getProperties);
goog.exportProperty(ol.control.Attribution.prototype, "notify", ol.control.Attribution.prototype.notify);
goog.exportProperty(ol.control.Attribution.prototype, "on", ol.control.Attribution.prototype.on);
goog.exportProperty(ol.control.Attribution.prototype, "once", ol.control.Attribution.prototype.once);
goog.exportProperty(ol.control.Attribution.prototype, "set", ol.control.Attribution.prototype.set);
goog.exportProperty(ol.control.Attribution.prototype, "setMap", ol.control.Attribution.prototype.setMap);
goog.exportProperty(ol.control.Attribution.prototype, "setValues", ol.control.Attribution.prototype.setValues);
goog.exportProperty(ol.control.Attribution.prototype, "un", ol.control.Attribution.prototype.un);
goog.exportProperty(ol.control.Attribution.prototype, "unByKey", ol.control.Attribution.prototype.unByKey);
goog.exportProperty(ol.control.Attribution.prototype, "unbind", ol.control.Attribution.prototype.unbind);
goog.exportProperty(ol.control.Attribution.prototype, "unbindAll", ol.control.Attribution.prototype.unbindAll);
goog.exportSymbol("ol.control.Control", ol.control.Control);
goog.exportProperty(ol.control.Control.prototype, "bindTo", ol.control.Control.prototype.bindTo);
goog.exportProperty(ol.control.Control.prototype, "dispatchChangeEvent", ol.control.Control.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.Control.prototype, "get", ol.control.Control.prototype.get);
goog.exportProperty(ol.control.Control.prototype, "getKeys", ol.control.Control.prototype.getKeys);
goog.exportProperty(ol.control.Control.prototype, "getMap", ol.control.Control.prototype.getMap);
goog.exportProperty(ol.control.Control.prototype, "getProperties", ol.control.Control.prototype.getProperties);
goog.exportProperty(ol.control.Control.prototype, "notify", ol.control.Control.prototype.notify);
goog.exportProperty(ol.control.Control.prototype, "on", ol.control.Control.prototype.on);
goog.exportProperty(ol.control.Control.prototype, "once", ol.control.Control.prototype.once);
goog.exportProperty(ol.control.Control.prototype, "set", ol.control.Control.prototype.set);
goog.exportProperty(ol.control.Control.prototype, "setMap", ol.control.Control.prototype.setMap);
goog.exportProperty(ol.control.Control.prototype, "setValues", ol.control.Control.prototype.setValues);
goog.exportProperty(ol.control.Control.prototype, "un", ol.control.Control.prototype.un);
goog.exportProperty(ol.control.Control.prototype, "unByKey", ol.control.Control.prototype.unByKey);
goog.exportProperty(ol.control.Control.prototype, "unbind", ol.control.Control.prototype.unbind);
goog.exportProperty(ol.control.Control.prototype, "unbindAll", ol.control.Control.prototype.unbindAll);
goog.exportSymbol("ol.control.FullScreen", ol.control.FullScreen);
goog.exportProperty(ol.control.FullScreen.prototype, "bindTo", ol.control.FullScreen.prototype.bindTo);
goog.exportProperty(ol.control.FullScreen.prototype, "dispatchChangeEvent", ol.control.FullScreen.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.FullScreen.prototype, "get", ol.control.FullScreen.prototype.get);
goog.exportProperty(ol.control.FullScreen.prototype, "getKeys", ol.control.FullScreen.prototype.getKeys);
goog.exportProperty(ol.control.FullScreen.prototype, "getMap", ol.control.FullScreen.prototype.getMap);
goog.exportProperty(ol.control.FullScreen.prototype, "getProperties", ol.control.FullScreen.prototype.getProperties);
goog.exportProperty(ol.control.FullScreen.prototype, "notify", ol.control.FullScreen.prototype.notify);
goog.exportProperty(ol.control.FullScreen.prototype, "on", ol.control.FullScreen.prototype.on);
goog.exportProperty(ol.control.FullScreen.prototype, "once", ol.control.FullScreen.prototype.once);
goog.exportProperty(ol.control.FullScreen.prototype, "set", ol.control.FullScreen.prototype.set);
goog.exportProperty(ol.control.FullScreen.prototype, "setMap", ol.control.FullScreen.prototype.setMap);
goog.exportProperty(ol.control.FullScreen.prototype, "setValues", ol.control.FullScreen.prototype.setValues);
goog.exportProperty(ol.control.FullScreen.prototype, "un", ol.control.FullScreen.prototype.un);
goog.exportProperty(ol.control.FullScreen.prototype, "unByKey", ol.control.FullScreen.prototype.unByKey);
goog.exportProperty(ol.control.FullScreen.prototype, "unbind", ol.control.FullScreen.prototype.unbind);
goog.exportProperty(ol.control.FullScreen.prototype, "unbindAll", ol.control.FullScreen.prototype.unbindAll);
goog.exportSymbol("ol.control.Logo", ol.control.Logo);
goog.exportProperty(ol.control.Logo.prototype, "bindTo", ol.control.Logo.prototype.bindTo);
goog.exportProperty(ol.control.Logo.prototype, "dispatchChangeEvent", ol.control.Logo.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.Logo.prototype, "get", ol.control.Logo.prototype.get);
goog.exportProperty(ol.control.Logo.prototype, "getKeys", ol.control.Logo.prototype.getKeys);
goog.exportProperty(ol.control.Logo.prototype, "getMap", ol.control.Logo.prototype.getMap);
goog.exportProperty(ol.control.Logo.prototype, "getProperties", ol.control.Logo.prototype.getProperties);
goog.exportProperty(ol.control.Logo.prototype, "notify", ol.control.Logo.prototype.notify);
goog.exportProperty(ol.control.Logo.prototype, "on", ol.control.Logo.prototype.on);
goog.exportProperty(ol.control.Logo.prototype, "once", ol.control.Logo.prototype.once);
goog.exportProperty(ol.control.Logo.prototype, "set", ol.control.Logo.prototype.set);
goog.exportProperty(ol.control.Logo.prototype, "setMap", ol.control.Logo.prototype.setMap);
goog.exportProperty(ol.control.Logo.prototype, "setValues", ol.control.Logo.prototype.setValues);
goog.exportProperty(ol.control.Logo.prototype, "un", ol.control.Logo.prototype.un);
goog.exportProperty(ol.control.Logo.prototype, "unByKey", ol.control.Logo.prototype.unByKey);
goog.exportProperty(ol.control.Logo.prototype, "unbind", ol.control.Logo.prototype.unbind);
goog.exportProperty(ol.control.Logo.prototype, "unbindAll", ol.control.Logo.prototype.unbindAll);
goog.exportSymbol("ol.control.MousePosition", ol.control.MousePosition);
goog.exportProperty(ol.control.MousePosition.prototype, "bindTo", ol.control.MousePosition.prototype.bindTo);
goog.exportProperty(ol.control.MousePosition.prototype, "dispatchChangeEvent", ol.control.MousePosition.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.MousePosition.prototype, "get", ol.control.MousePosition.prototype.get);
goog.exportProperty(ol.control.MousePosition.prototype, "getCoordinateFormat", ol.control.MousePosition.prototype.getCoordinateFormat);
goog.exportProperty(ol.control.MousePosition.prototype, "getKeys", ol.control.MousePosition.prototype.getKeys);
goog.exportProperty(ol.control.MousePosition.prototype, "getMap", ol.control.MousePosition.prototype.getMap);
goog.exportProperty(ol.control.MousePosition.prototype, "getProjection", ol.control.MousePosition.prototype.getProjection);
goog.exportProperty(ol.control.MousePosition.prototype, "getProperties", ol.control.MousePosition.prototype.getProperties);
goog.exportProperty(ol.control.MousePosition.prototype, "notify", ol.control.MousePosition.prototype.notify);
goog.exportProperty(ol.control.MousePosition.prototype, "on", ol.control.MousePosition.prototype.on);
goog.exportProperty(ol.control.MousePosition.prototype, "once", ol.control.MousePosition.prototype.once);
goog.exportProperty(ol.control.MousePosition.prototype, "set", ol.control.MousePosition.prototype.set);
goog.exportProperty(ol.control.MousePosition.prototype, "setCoordinateFormat", ol.control.MousePosition.prototype.setCoordinateFormat);
goog.exportProperty(ol.control.MousePosition.prototype, "setMap", ol.control.MousePosition.prototype.setMap);
goog.exportProperty(ol.control.MousePosition.prototype, "setProjection", ol.control.MousePosition.prototype.setProjection);
goog.exportProperty(ol.control.MousePosition.prototype, "setValues", ol.control.MousePosition.prototype.setValues);
goog.exportProperty(ol.control.MousePosition.prototype, "un", ol.control.MousePosition.prototype.un);
goog.exportProperty(ol.control.MousePosition.prototype, "unByKey", ol.control.MousePosition.prototype.unByKey);
goog.exportProperty(ol.control.MousePosition.prototype, "unbind", ol.control.MousePosition.prototype.unbind);
goog.exportProperty(ol.control.MousePosition.prototype, "unbindAll", ol.control.MousePosition.prototype.unbindAll);
goog.exportSymbol("ol.control.ScaleLine", ol.control.ScaleLine);
goog.exportProperty(ol.control.ScaleLine.prototype, "bindTo", ol.control.ScaleLine.prototype.bindTo);
goog.exportProperty(ol.control.ScaleLine.prototype, "dispatchChangeEvent", ol.control.ScaleLine.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.ScaleLine.prototype, "get", ol.control.ScaleLine.prototype.get);
goog.exportProperty(ol.control.ScaleLine.prototype, "getKeys", ol.control.ScaleLine.prototype.getKeys);
goog.exportProperty(ol.control.ScaleLine.prototype, "getMap", ol.control.ScaleLine.prototype.getMap);
goog.exportProperty(ol.control.ScaleLine.prototype, "getProperties", ol.control.ScaleLine.prototype.getProperties);
goog.exportProperty(ol.control.ScaleLine.prototype, "getUnits", ol.control.ScaleLine.prototype.getUnits);
goog.exportProperty(ol.control.ScaleLine.prototype, "notify", ol.control.ScaleLine.prototype.notify);
goog.exportProperty(ol.control.ScaleLine.prototype, "on", ol.control.ScaleLine.prototype.on);
goog.exportProperty(ol.control.ScaleLine.prototype, "once", ol.control.ScaleLine.prototype.once);
goog.exportProperty(ol.control.ScaleLine.prototype, "set", ol.control.ScaleLine.prototype.set);
goog.exportProperty(ol.control.ScaleLine.prototype, "setMap", ol.control.ScaleLine.prototype.setMap);
goog.exportProperty(ol.control.ScaleLine.prototype, "setUnits", ol.control.ScaleLine.prototype.setUnits);
goog.exportProperty(ol.control.ScaleLine.prototype, "setValues", ol.control.ScaleLine.prototype.setValues);
goog.exportProperty(ol.control.ScaleLine.prototype, "un", ol.control.ScaleLine.prototype.un);
goog.exportProperty(ol.control.ScaleLine.prototype, "unByKey", ol.control.ScaleLine.prototype.unByKey);
goog.exportProperty(ol.control.ScaleLine.prototype, "unbind", ol.control.ScaleLine.prototype.unbind);
goog.exportProperty(ol.control.ScaleLine.prototype, "unbindAll", ol.control.ScaleLine.prototype.unbindAll);
goog.exportSymbol("ol.control.Zoom", ol.control.Zoom);
goog.exportProperty(ol.control.Zoom.prototype, "bindTo", ol.control.Zoom.prototype.bindTo);
goog.exportProperty(ol.control.Zoom.prototype, "dispatchChangeEvent", ol.control.Zoom.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.Zoom.prototype, "get", ol.control.Zoom.prototype.get);
goog.exportProperty(ol.control.Zoom.prototype, "getKeys", ol.control.Zoom.prototype.getKeys);
goog.exportProperty(ol.control.Zoom.prototype, "getMap", ol.control.Zoom.prototype.getMap);
goog.exportProperty(ol.control.Zoom.prototype, "getProperties", ol.control.Zoom.prototype.getProperties);
goog.exportProperty(ol.control.Zoom.prototype, "notify", ol.control.Zoom.prototype.notify);
goog.exportProperty(ol.control.Zoom.prototype, "on", ol.control.Zoom.prototype.on);
goog.exportProperty(ol.control.Zoom.prototype, "once", ol.control.Zoom.prototype.once);
goog.exportProperty(ol.control.Zoom.prototype, "set", ol.control.Zoom.prototype.set);
goog.exportProperty(ol.control.Zoom.prototype, "setMap", ol.control.Zoom.prototype.setMap);
goog.exportProperty(ol.control.Zoom.prototype, "setValues", ol.control.Zoom.prototype.setValues);
goog.exportProperty(ol.control.Zoom.prototype, "un", ol.control.Zoom.prototype.un);
goog.exportProperty(ol.control.Zoom.prototype, "unByKey", ol.control.Zoom.prototype.unByKey);
goog.exportProperty(ol.control.Zoom.prototype, "unbind", ol.control.Zoom.prototype.unbind);
goog.exportProperty(ol.control.Zoom.prototype, "unbindAll", ol.control.Zoom.prototype.unbindAll);
goog.exportSymbol("ol.control.ZoomSlider", ol.control.ZoomSlider);
goog.exportProperty(ol.control.ZoomSlider.prototype, "bindTo", ol.control.ZoomSlider.prototype.bindTo);
goog.exportProperty(ol.control.ZoomSlider.prototype, "dispatchChangeEvent", ol.control.ZoomSlider.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.ZoomSlider.prototype, "get", ol.control.ZoomSlider.prototype.get);
goog.exportProperty(ol.control.ZoomSlider.prototype, "getKeys", ol.control.ZoomSlider.prototype.getKeys);
goog.exportProperty(ol.control.ZoomSlider.prototype, "getMap", ol.control.ZoomSlider.prototype.getMap);
goog.exportProperty(ol.control.ZoomSlider.prototype, "getProperties", ol.control.ZoomSlider.prototype.getProperties);
goog.exportProperty(ol.control.ZoomSlider.prototype, "notify", ol.control.ZoomSlider.prototype.notify);
goog.exportProperty(ol.control.ZoomSlider.prototype, "on", ol.control.ZoomSlider.prototype.on);
goog.exportProperty(ol.control.ZoomSlider.prototype, "once", ol.control.ZoomSlider.prototype.once);
goog.exportProperty(ol.control.ZoomSlider.prototype, "set", ol.control.ZoomSlider.prototype.set);
goog.exportProperty(ol.control.ZoomSlider.prototype, "setValues", ol.control.ZoomSlider.prototype.setValues);
goog.exportProperty(ol.control.ZoomSlider.prototype, "un", ol.control.ZoomSlider.prototype.un);
goog.exportProperty(ol.control.ZoomSlider.prototype, "unByKey", ol.control.ZoomSlider.prototype.unByKey);
goog.exportProperty(ol.control.ZoomSlider.prototype, "unbind", ol.control.ZoomSlider.prototype.unbind);
goog.exportProperty(ol.control.ZoomSlider.prototype, "unbindAll", ol.control.ZoomSlider.prototype.unbindAll);
goog.exportSymbol("ol.control.ZoomToExtent", ol.control.ZoomToExtent);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "bindTo", ol.control.ZoomToExtent.prototype.bindTo);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "dispatchChangeEvent", ol.control.ZoomToExtent.prototype.dispatchChangeEvent);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "get", ol.control.ZoomToExtent.prototype.get);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "getKeys", ol.control.ZoomToExtent.prototype.getKeys);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "getMap", ol.control.ZoomToExtent.prototype.getMap);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "getProperties", ol.control.ZoomToExtent.prototype.getProperties);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "notify", ol.control.ZoomToExtent.prototype.notify);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "on", ol.control.ZoomToExtent.prototype.on);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "once", ol.control.ZoomToExtent.prototype.once);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "set", ol.control.ZoomToExtent.prototype.set);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "setMap", ol.control.ZoomToExtent.prototype.setMap);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "setValues", ol.control.ZoomToExtent.prototype.setValues);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "un", ol.control.ZoomToExtent.prototype.un);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "unByKey", ol.control.ZoomToExtent.prototype.unByKey);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "unbind", ol.control.ZoomToExtent.prototype.unbind);
goog.exportProperty(ol.control.ZoomToExtent.prototype, "unbindAll", ol.control.ZoomToExtent.prototype.unbindAll);
goog.exportSymbol("ol.control.defaults", ol.control.defaults);
goog.exportSymbol("ol.coordinate.add", ol.coordinate.add);
goog.exportSymbol("ol.coordinate.createStringXY", ol.coordinate.createStringXY);
goog.exportSymbol("ol.coordinate.format", ol.coordinate.format);
goog.exportSymbol("ol.coordinate.fromProjectedArray", ol.coordinate.fromProjectedArray);
goog.exportSymbol("ol.coordinate.rotate", ol.coordinate.rotate);
goog.exportSymbol("ol.coordinate.toStringHDMS", ol.coordinate.toStringHDMS);
goog.exportSymbol("ol.coordinate.toStringXY", ol.coordinate.toStringXY);
goog.exportSymbol("ol.dom.Input", ol.dom.Input);
goog.exportProperty(ol.dom.Input.prototype, "bindTo", ol.dom.Input.prototype.bindTo);
goog.exportProperty(ol.dom.Input.prototype, "dispatchChangeEvent", ol.dom.Input.prototype.dispatchChangeEvent);
goog.exportProperty(ol.dom.Input.prototype, "get", ol.dom.Input.prototype.get);
goog.exportProperty(ol.dom.Input.prototype, "getChecked", ol.dom.Input.prototype.getChecked);
goog.exportProperty(ol.dom.Input.prototype, "getKeys", ol.dom.Input.prototype.getKeys);
goog.exportProperty(ol.dom.Input.prototype, "getProperties", ol.dom.Input.prototype.getProperties);
goog.exportProperty(ol.dom.Input.prototype, "getValue", ol.dom.Input.prototype.getValue);
goog.exportProperty(ol.dom.Input.prototype, "notify", ol.dom.Input.prototype.notify);
goog.exportProperty(ol.dom.Input.prototype, "on", ol.dom.Input.prototype.on);
goog.exportProperty(ol.dom.Input.prototype, "once", ol.dom.Input.prototype.once);
goog.exportProperty(ol.dom.Input.prototype, "set", ol.dom.Input.prototype.set);
goog.exportProperty(ol.dom.Input.prototype, "setChecked", ol.dom.Input.prototype.setChecked);
goog.exportProperty(ol.dom.Input.prototype, "setValue", ol.dom.Input.prototype.setValue);
goog.exportProperty(ol.dom.Input.prototype, "setValues", ol.dom.Input.prototype.setValues);
goog.exportProperty(ol.dom.Input.prototype, "un", ol.dom.Input.prototype.un);
goog.exportProperty(ol.dom.Input.prototype, "unByKey", ol.dom.Input.prototype.unByKey);
goog.exportProperty(ol.dom.Input.prototype, "unbind", ol.dom.Input.prototype.unbind);
goog.exportProperty(ol.dom.Input.prototype, "unbindAll", ol.dom.Input.prototype.unbindAll);
goog.exportSymbol("ol.easing.bounce", ol.easing.bounce);
goog.exportSymbol("ol.easing.easeIn", ol.easing.easeIn);
goog.exportSymbol("ol.easing.easeOut", ol.easing.easeOut);
goog.exportSymbol("ol.easing.elastic", ol.easing.elastic);
goog.exportSymbol("ol.easing.inAndOut", ol.easing.inAndOut);
goog.exportSymbol("ol.easing.linear", ol.easing.linear);
goog.exportSymbol("ol.easing.upAndDown", ol.easing.upAndDown);
goog.exportSymbol("ol.events.condition.altKeyOnly", ol.events.condition.altKeyOnly);
goog.exportSymbol("ol.events.condition.altShiftKeysOnly", ol.events.condition.altShiftKeysOnly);
goog.exportSymbol("ol.events.condition.always", ol.events.condition.always);
goog.exportSymbol("ol.events.condition.never", ol.events.condition.never);
goog.exportSymbol("ol.events.condition.noModifierKeys", ol.events.condition.noModifierKeys);
goog.exportSymbol("ol.events.condition.platformModifierKeyOnly", ol.events.condition.platformModifierKeyOnly);
goog.exportSymbol("ol.events.condition.shiftKeyOnly", ol.events.condition.shiftKeyOnly);
goog.exportSymbol("ol.events.condition.targetNotEditable", ol.events.condition.targetNotEditable);
goog.exportSymbol("ol.extent.boundingExtent", ol.extent.boundingExtent);
goog.exportSymbol("ol.extent.buffer", ol.extent.buffer);
goog.exportSymbol("ol.extent.containsCoordinate", ol.extent.containsCoordinate);
goog.exportSymbol("ol.extent.containsExtent", ol.extent.containsExtent);
goog.exportSymbol("ol.extent.createEmpty", ol.extent.createEmpty);
goog.exportSymbol("ol.extent.equals", ol.extent.equals);
goog.exportSymbol("ol.extent.extend", ol.extent.extend);
goog.exportSymbol("ol.extent.getBottomLeft", ol.extent.getBottomLeft);
goog.exportSymbol("ol.extent.getBottomRight", ol.extent.getBottomRight);
goog.exportSymbol("ol.extent.getCenter", ol.extent.getCenter);
goog.exportSymbol("ol.extent.getHeight", ol.extent.getHeight);
goog.exportSymbol("ol.extent.getSize", ol.extent.getSize);
goog.exportSymbol("ol.extent.getTopLeft", ol.extent.getTopLeft);
goog.exportSymbol("ol.extent.getTopRight", ol.extent.getTopRight);
goog.exportSymbol("ol.extent.getWidth", ol.extent.getWidth);
goog.exportSymbol("ol.extent.intersects", ol.extent.intersects);
goog.exportSymbol("ol.extent.isEmpty", ol.extent.isEmpty);
goog.exportSymbol("ol.extent.transform", ol.extent.transform);
goog.exportSymbol("ol.format.GPX", ol.format.GPX);
goog.exportProperty(ol.format.GPX.prototype, "readFeature", ol.format.GPX.prototype.readFeature);
goog.exportProperty(ol.format.GPX.prototype, "readFeatures", ol.format.GPX.prototype.readFeatures);
goog.exportProperty(ol.format.GPX.prototype, "readProjection", ol.format.GPX.prototype.readProjection);
goog.exportProperty(ol.format.GPX.prototype, "writeFeatures", ol.format.GPX.prototype.writeFeatures);
goog.exportProperty(ol.format.GPX.V1_1.prototype, "readFeature", ol.format.GPX.V1_1.prototype.readFeature);
goog.exportProperty(ol.format.GPX.V1_1.prototype, "readFeatures", ol.format.GPX.V1_1.prototype.readFeatures);
goog.exportProperty(ol.format.GPX.V1_1.prototype, "readProjection", ol.format.GPX.V1_1.prototype.readProjection);
goog.exportProperty(ol.format.GPX.V1_1.prototype, "writeFeatures", ol.format.GPX.V1_1.prototype.writeFeatures);
goog.exportSymbol("ol.format.GeoJSON", ol.format.GeoJSON);
goog.exportProperty(ol.format.GeoJSON.prototype, "readFeature", ol.format.GeoJSON.prototype.readFeature);
goog.exportProperty(ol.format.GeoJSON.prototype, "readFeatures", ol.format.GeoJSON.prototype.readFeatures);
goog.exportProperty(ol.format.GeoJSON.prototype, "readGeometry", ol.format.GeoJSON.prototype.readGeometry);
goog.exportProperty(ol.format.GeoJSON.prototype, "readProjection", ol.format.GeoJSON.prototype.readProjection);
goog.exportProperty(ol.format.GeoJSON.prototype, "writeFeature", ol.format.GeoJSON.prototype.writeFeature);
goog.exportProperty(ol.format.GeoJSON.prototype, "writeFeatures", ol.format.GeoJSON.prototype.writeFeatures);
goog.exportSymbol("ol.format.IGC", ol.format.IGC);
goog.exportProperty(ol.format.IGC.prototype, "readFeature", ol.format.IGC.prototype.readFeature);
goog.exportProperty(ol.format.IGC.prototype, "readFeatures", ol.format.IGC.prototype.readFeatures);
goog.exportProperty(ol.format.IGC.prototype, "readProjection", ol.format.IGC.prototype.readProjection);
goog.exportSymbol("ol.format.KML", ol.format.KML);
goog.exportProperty(ol.format.KML.prototype, "readFeature", ol.format.KML.prototype.readFeature);
goog.exportProperty(ol.format.KML.prototype, "readFeatures", ol.format.KML.prototype.readFeatures);
goog.exportProperty(ol.format.KML.prototype, "readProjection", ol.format.KML.prototype.readProjection);
goog.exportSymbol("ol.format.OSMXML", ol.format.OSMXML);
goog.exportSymbol("ol.format.TopoJSON", ol.format.TopoJSON);
goog.exportProperty(ol.format.TopoJSON.prototype, "readFeatures", ol.format.TopoJSON.prototype.readFeatures);
goog.exportProperty(ol.format.TopoJSON.prototype, "readProjection", ol.format.TopoJSON.prototype.readProjection);
goog.exportSymbol("ol.format.WFS", ol.format.WFS);
goog.exportProperty(ol.format.WFS.prototype, "readFeatureCollectionMetadata", ol.format.WFS.prototype.readFeatureCollectionMetadata);
goog.exportProperty(ol.format.WFS.prototype, "readTransactionResponse", ol.format.WFS.prototype.readTransactionResponse);
goog.exportProperty(ol.format.WFS.prototype, "writeGetFeature", ol.format.WFS.prototype.writeGetFeature);
goog.exportProperty(ol.format.WFS.prototype, "writeTransaction", ol.format.WFS.prototype.writeTransaction);
goog.exportSymbol("ol.format.WMSCapabilities", ol.format.WMSCapabilities);
goog.exportProperty(ol.format.WMSCapabilities.prototype, "read", ol.format.WMSCapabilities.prototype.read);
goog.exportSymbol("ol.geom.Circle", ol.geom.Circle);
goog.exportProperty(ol.geom.Circle.prototype, "clone", ol.geom.Circle.prototype.clone);
goog.exportProperty(ol.geom.Circle.prototype, "clone", ol.geom.Circle.prototype.clone);
goog.exportProperty(ol.geom.Circle.prototype, "dispatchChangeEvent", ol.geom.Circle.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.Circle.prototype, "getCenter", ol.geom.Circle.prototype.getCenter);
goog.exportProperty(ol.geom.Circle.prototype, "getCenter", ol.geom.Circle.prototype.getCenter);
goog.exportProperty(ol.geom.Circle.prototype, "getClosestPoint", ol.geom.Circle.prototype.getClosestPoint);
goog.exportProperty(ol.geom.Circle.prototype, "getExtent", ol.geom.Circle.prototype.getExtent);
goog.exportProperty(ol.geom.Circle.prototype, "getExtent", ol.geom.Circle.prototype.getExtent);
goog.exportProperty(ol.geom.Circle.prototype, "getFirstCoordinate", ol.geom.Circle.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Circle.prototype, "getFirstCoordinate", ol.geom.Circle.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Circle.prototype, "getLastCoordinate", ol.geom.Circle.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Circle.prototype, "getLastCoordinate", ol.geom.Circle.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Circle.prototype, "getLayout", ol.geom.Circle.prototype.getLayout);
goog.exportProperty(ol.geom.Circle.prototype, "getLayout", ol.geom.Circle.prototype.getLayout);
goog.exportProperty(ol.geom.Circle.prototype, "getRadius", ol.geom.Circle.prototype.getRadius);
goog.exportProperty(ol.geom.Circle.prototype, "getRadius", ol.geom.Circle.prototype.getRadius);
goog.exportProperty(ol.geom.Circle.prototype, "getSimplifiedGeometry", ol.geom.Circle.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Circle.prototype, "getSimplifiedGeometry", ol.geom.Circle.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Circle.prototype, "getType", ol.geom.Circle.prototype.getType);
goog.exportProperty(ol.geom.Circle.prototype, "getType", ol.geom.Circle.prototype.getType);
goog.exportProperty(ol.geom.Circle.prototype, "on", ol.geom.Circle.prototype.on);
goog.exportProperty(ol.geom.Circle.prototype, "once", ol.geom.Circle.prototype.once);
goog.exportProperty(ol.geom.Circle.prototype, "setCenter", ol.geom.Circle.prototype.setCenter);
goog.exportProperty(ol.geom.Circle.prototype, "setCenter", ol.geom.Circle.prototype.setCenter);
goog.exportProperty(ol.geom.Circle.prototype, "setCenterAndRadius", ol.geom.Circle.prototype.setCenterAndRadius);
goog.exportProperty(ol.geom.Circle.prototype, "setCenterAndRadius", ol.geom.Circle.prototype.setCenterAndRadius);
goog.exportProperty(ol.geom.Circle.prototype, "setRadius", ol.geom.Circle.prototype.setRadius);
goog.exportProperty(ol.geom.Circle.prototype, "setRadius", ol.geom.Circle.prototype.setRadius);
goog.exportProperty(ol.geom.Circle.prototype, "un", ol.geom.Circle.prototype.un);
goog.exportProperty(ol.geom.Circle.prototype, "unByKey", ol.geom.Circle.prototype.unByKey);
goog.exportSymbol("ol.geom.Geometry", ol.geom.Geometry);
goog.exportProperty(ol.geom.Geometry.prototype, "dispatchChangeEvent", ol.geom.Geometry.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.Geometry.prototype, "getClosestPoint", ol.geom.Geometry.prototype.getClosestPoint);
goog.exportProperty(ol.geom.Geometry.prototype, "getExtent", ol.geom.Geometry.prototype.getExtent);
goog.exportProperty(ol.geom.Geometry.prototype, "on", ol.geom.Geometry.prototype.on);
goog.exportProperty(ol.geom.Geometry.prototype, "once", ol.geom.Geometry.prototype.once);
goog.exportProperty(ol.geom.Geometry.prototype, "un", ol.geom.Geometry.prototype.un);
goog.exportProperty(ol.geom.Geometry.prototype, "unByKey", ol.geom.Geometry.prototype.unByKey);
goog.exportSymbol("ol.geom.GeometryCollection", ol.geom.GeometryCollection);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "clone", ol.geom.GeometryCollection.prototype.clone);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "clone", ol.geom.GeometryCollection.prototype.clone);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "dispatchChangeEvent", ol.geom.GeometryCollection.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getClosestPoint", ol.geom.GeometryCollection.prototype.getClosestPoint);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getExtent", ol.geom.GeometryCollection.prototype.getExtent);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getExtent", ol.geom.GeometryCollection.prototype.getExtent);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getGeometries", ol.geom.GeometryCollection.prototype.getGeometries);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getGeometries", ol.geom.GeometryCollection.prototype.getGeometries);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getSimplifiedGeometry", ol.geom.GeometryCollection.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getSimplifiedGeometry", ol.geom.GeometryCollection.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getType", ol.geom.GeometryCollection.prototype.getType);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "getType", ol.geom.GeometryCollection.prototype.getType);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "on", ol.geom.GeometryCollection.prototype.on);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "once", ol.geom.GeometryCollection.prototype.once);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "setGeometries", ol.geom.GeometryCollection.prototype.setGeometries);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "setGeometries", ol.geom.GeometryCollection.prototype.setGeometries);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "un", ol.geom.GeometryCollection.prototype.un);
goog.exportProperty(ol.geom.GeometryCollection.prototype, "unByKey", ol.geom.GeometryCollection.prototype.unByKey);
goog.exportSymbol("ol.geom.LineString", ol.geom.LineString);
goog.exportProperty(ol.geom.LineString.prototype, "appendCoordinate", ol.geom.LineString.prototype.appendCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "appendCoordinate", ol.geom.LineString.prototype.appendCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "clone", ol.geom.LineString.prototype.clone);
goog.exportProperty(ol.geom.LineString.prototype, "clone", ol.geom.LineString.prototype.clone);
goog.exportProperty(ol.geom.LineString.prototype, "dispatchChangeEvent", ol.geom.LineString.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.LineString.prototype, "getClosestPoint", ol.geom.LineString.prototype.getClosestPoint);
goog.exportProperty(ol.geom.LineString.prototype, "getCoordinateAtM", ol.geom.LineString.prototype.getCoordinateAtM);
goog.exportProperty(ol.geom.LineString.prototype, "getCoordinateAtM", ol.geom.LineString.prototype.getCoordinateAtM);
goog.exportProperty(ol.geom.LineString.prototype, "getCoordinates", ol.geom.LineString.prototype.getCoordinates);
goog.exportProperty(ol.geom.LineString.prototype, "getCoordinates", ol.geom.LineString.prototype.getCoordinates);
goog.exportProperty(ol.geom.LineString.prototype, "getExtent", ol.geom.LineString.prototype.getExtent);
goog.exportProperty(ol.geom.LineString.prototype, "getExtent", ol.geom.LineString.prototype.getExtent);
goog.exportProperty(ol.geom.LineString.prototype, "getFirstCoordinate", ol.geom.LineString.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "getFirstCoordinate", ol.geom.LineString.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "getLastCoordinate", ol.geom.LineString.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "getLastCoordinate", ol.geom.LineString.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.LineString.prototype, "getLayout", ol.geom.LineString.prototype.getLayout);
goog.exportProperty(ol.geom.LineString.prototype, "getLayout", ol.geom.LineString.prototype.getLayout);
goog.exportProperty(ol.geom.LineString.prototype, "getLength", ol.geom.LineString.prototype.getLength);
goog.exportProperty(ol.geom.LineString.prototype, "getLength", ol.geom.LineString.prototype.getLength);
goog.exportProperty(ol.geom.LineString.prototype, "getSimplifiedGeometry", ol.geom.LineString.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.LineString.prototype, "getSimplifiedGeometry", ol.geom.LineString.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.LineString.prototype, "getType", ol.geom.LineString.prototype.getType);
goog.exportProperty(ol.geom.LineString.prototype, "getType", ol.geom.LineString.prototype.getType);
goog.exportProperty(ol.geom.LineString.prototype, "on", ol.geom.LineString.prototype.on);
goog.exportProperty(ol.geom.LineString.prototype, "once", ol.geom.LineString.prototype.once);
goog.exportProperty(ol.geom.LineString.prototype, "setCoordinates", ol.geom.LineString.prototype.setCoordinates);
goog.exportProperty(ol.geom.LineString.prototype, "setCoordinates", ol.geom.LineString.prototype.setCoordinates);
goog.exportProperty(ol.geom.LineString.prototype, "transform", ol.geom.LineString.prototype.transform);
goog.exportProperty(ol.geom.LineString.prototype, "transform", ol.geom.LineString.prototype.transform);
goog.exportProperty(ol.geom.LineString.prototype, "un", ol.geom.LineString.prototype.un);
goog.exportProperty(ol.geom.LineString.prototype, "unByKey", ol.geom.LineString.prototype.unByKey);
goog.exportSymbol("ol.geom.LinearRing", ol.geom.LinearRing);
goog.exportProperty(ol.geom.LinearRing.prototype, "clone", ol.geom.LinearRing.prototype.clone);
goog.exportProperty(ol.geom.LinearRing.prototype, "clone", ol.geom.LinearRing.prototype.clone);
goog.exportProperty(ol.geom.LinearRing.prototype, "dispatchChangeEvent", ol.geom.LinearRing.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.LinearRing.prototype, "getArea", ol.geom.LinearRing.prototype.getArea);
goog.exportProperty(ol.geom.LinearRing.prototype, "getArea", ol.geom.LinearRing.prototype.getArea);
goog.exportProperty(ol.geom.LinearRing.prototype, "getClosestPoint", ol.geom.LinearRing.prototype.getClosestPoint);
goog.exportProperty(ol.geom.LinearRing.prototype, "getCoordinates", ol.geom.LinearRing.prototype.getCoordinates);
goog.exportProperty(ol.geom.LinearRing.prototype, "getCoordinates", ol.geom.LinearRing.prototype.getCoordinates);
goog.exportProperty(ol.geom.LinearRing.prototype, "getExtent", ol.geom.LinearRing.prototype.getExtent);
goog.exportProperty(ol.geom.LinearRing.prototype, "getExtent", ol.geom.LinearRing.prototype.getExtent);
goog.exportProperty(ol.geom.LinearRing.prototype, "getFirstCoordinate", ol.geom.LinearRing.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.LinearRing.prototype, "getFirstCoordinate", ol.geom.LinearRing.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.LinearRing.prototype, "getLastCoordinate", ol.geom.LinearRing.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.LinearRing.prototype, "getLastCoordinate", ol.geom.LinearRing.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.LinearRing.prototype, "getLayout", ol.geom.LinearRing.prototype.getLayout);
goog.exportProperty(ol.geom.LinearRing.prototype, "getLayout", ol.geom.LinearRing.prototype.getLayout);
goog.exportProperty(ol.geom.LinearRing.prototype, "getSimplifiedGeometry", ol.geom.LinearRing.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.LinearRing.prototype, "getSimplifiedGeometry", ol.geom.LinearRing.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.LinearRing.prototype, "getType", ol.geom.LinearRing.prototype.getType);
goog.exportProperty(ol.geom.LinearRing.prototype, "getType", ol.geom.LinearRing.prototype.getType);
goog.exportProperty(ol.geom.LinearRing.prototype, "on", ol.geom.LinearRing.prototype.on);
goog.exportProperty(ol.geom.LinearRing.prototype, "once", ol.geom.LinearRing.prototype.once);
goog.exportProperty(ol.geom.LinearRing.prototype, "setCoordinates", ol.geom.LinearRing.prototype.setCoordinates);
goog.exportProperty(ol.geom.LinearRing.prototype, "setCoordinates", ol.geom.LinearRing.prototype.setCoordinates);
goog.exportProperty(ol.geom.LinearRing.prototype, "transform", ol.geom.LinearRing.prototype.transform);
goog.exportProperty(ol.geom.LinearRing.prototype, "transform", ol.geom.LinearRing.prototype.transform);
goog.exportProperty(ol.geom.LinearRing.prototype, "un", ol.geom.LinearRing.prototype.un);
goog.exportProperty(ol.geom.LinearRing.prototype, "unByKey", ol.geom.LinearRing.prototype.unByKey);
goog.exportSymbol("ol.geom.MultiLineString", ol.geom.MultiLineString);
goog.exportProperty(ol.geom.MultiLineString.prototype, "appendLineString", ol.geom.MultiLineString.prototype.appendLineString);
goog.exportProperty(ol.geom.MultiLineString.prototype, "appendLineString", ol.geom.MultiLineString.prototype.appendLineString);
goog.exportProperty(ol.geom.MultiLineString.prototype, "clone", ol.geom.MultiLineString.prototype.clone);
goog.exportProperty(ol.geom.MultiLineString.prototype, "clone", ol.geom.MultiLineString.prototype.clone);
goog.exportProperty(ol.geom.MultiLineString.prototype, "dispatchChangeEvent", ol.geom.MultiLineString.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getClosestPoint", ol.geom.MultiLineString.prototype.getClosestPoint);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getCoordinateAtM", ol.geom.MultiLineString.prototype.getCoordinateAtM);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getCoordinateAtM", ol.geom.MultiLineString.prototype.getCoordinateAtM);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getCoordinates", ol.geom.MultiLineString.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getCoordinates", ol.geom.MultiLineString.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getExtent", ol.geom.MultiLineString.prototype.getExtent);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getExtent", ol.geom.MultiLineString.prototype.getExtent);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getFirstCoordinate", ol.geom.MultiLineString.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getFirstCoordinate", ol.geom.MultiLineString.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLastCoordinate", ol.geom.MultiLineString.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLastCoordinate", ol.geom.MultiLineString.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLayout", ol.geom.MultiLineString.prototype.getLayout);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLayout", ol.geom.MultiLineString.prototype.getLayout);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLineString", ol.geom.MultiLineString.prototype.getLineString);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLineString", ol.geom.MultiLineString.prototype.getLineString);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLineStrings", ol.geom.MultiLineString.prototype.getLineStrings);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getLineStrings", ol.geom.MultiLineString.prototype.getLineStrings);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getSimplifiedGeometry", ol.geom.MultiLineString.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getSimplifiedGeometry", ol.geom.MultiLineString.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getType", ol.geom.MultiLineString.prototype.getType);
goog.exportProperty(ol.geom.MultiLineString.prototype, "getType", ol.geom.MultiLineString.prototype.getType);
goog.exportProperty(ol.geom.MultiLineString.prototype, "on", ol.geom.MultiLineString.prototype.on);
goog.exportProperty(ol.geom.MultiLineString.prototype, "once", ol.geom.MultiLineString.prototype.once);
goog.exportProperty(ol.geom.MultiLineString.prototype, "setCoordinates", ol.geom.MultiLineString.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiLineString.prototype, "setCoordinates", ol.geom.MultiLineString.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiLineString.prototype, "transform", ol.geom.MultiLineString.prototype.transform);
goog.exportProperty(ol.geom.MultiLineString.prototype, "transform", ol.geom.MultiLineString.prototype.transform);
goog.exportProperty(ol.geom.MultiLineString.prototype, "un", ol.geom.MultiLineString.prototype.un);
goog.exportProperty(ol.geom.MultiLineString.prototype, "unByKey", ol.geom.MultiLineString.prototype.unByKey);
goog.exportSymbol("ol.geom.MultiPoint", ol.geom.MultiPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "appendPoint", ol.geom.MultiPoint.prototype.appendPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "appendPoint", ol.geom.MultiPoint.prototype.appendPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "clone", ol.geom.MultiPoint.prototype.clone);
goog.exportProperty(ol.geom.MultiPoint.prototype, "clone", ol.geom.MultiPoint.prototype.clone);
goog.exportProperty(ol.geom.MultiPoint.prototype, "dispatchChangeEvent", ol.geom.MultiPoint.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getClosestPoint", ol.geom.MultiPoint.prototype.getClosestPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getCoordinates", ol.geom.MultiPoint.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getCoordinates", ol.geom.MultiPoint.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getExtent", ol.geom.MultiPoint.prototype.getExtent);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getExtent", ol.geom.MultiPoint.prototype.getExtent);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getFirstCoordinate", ol.geom.MultiPoint.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getFirstCoordinate", ol.geom.MultiPoint.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getLastCoordinate", ol.geom.MultiPoint.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getLastCoordinate", ol.geom.MultiPoint.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getLayout", ol.geom.MultiPoint.prototype.getLayout);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getLayout", ol.geom.MultiPoint.prototype.getLayout);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getPoint", ol.geom.MultiPoint.prototype.getPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getPoint", ol.geom.MultiPoint.prototype.getPoint);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getPoints", ol.geom.MultiPoint.prototype.getPoints);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getPoints", ol.geom.MultiPoint.prototype.getPoints);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getSimplifiedGeometry", ol.geom.MultiPoint.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getSimplifiedGeometry", ol.geom.MultiPoint.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getType", ol.geom.MultiPoint.prototype.getType);
goog.exportProperty(ol.geom.MultiPoint.prototype, "getType", ol.geom.MultiPoint.prototype.getType);
goog.exportProperty(ol.geom.MultiPoint.prototype, "on", ol.geom.MultiPoint.prototype.on);
goog.exportProperty(ol.geom.MultiPoint.prototype, "once", ol.geom.MultiPoint.prototype.once);
goog.exportProperty(ol.geom.MultiPoint.prototype, "setCoordinates", ol.geom.MultiPoint.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiPoint.prototype, "setCoordinates", ol.geom.MultiPoint.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiPoint.prototype, "transform", ol.geom.MultiPoint.prototype.transform);
goog.exportProperty(ol.geom.MultiPoint.prototype, "transform", ol.geom.MultiPoint.prototype.transform);
goog.exportProperty(ol.geom.MultiPoint.prototype, "un", ol.geom.MultiPoint.prototype.un);
goog.exportProperty(ol.geom.MultiPoint.prototype, "unByKey", ol.geom.MultiPoint.prototype.unByKey);
goog.exportSymbol("ol.geom.MultiPolygon", ol.geom.MultiPolygon);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "appendPolygon", ol.geom.MultiPolygon.prototype.appendPolygon);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "appendPolygon", ol.geom.MultiPolygon.prototype.appendPolygon);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "clone", ol.geom.MultiPolygon.prototype.clone);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "clone", ol.geom.MultiPolygon.prototype.clone);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "dispatchChangeEvent", ol.geom.MultiPolygon.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getArea", ol.geom.MultiPolygon.prototype.getArea);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getArea", ol.geom.MultiPolygon.prototype.getArea);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getClosestPoint", ol.geom.MultiPolygon.prototype.getClosestPoint);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getCoordinates", ol.geom.MultiPolygon.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getCoordinates", ol.geom.MultiPolygon.prototype.getCoordinates);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getExtent", ol.geom.MultiPolygon.prototype.getExtent);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getExtent", ol.geom.MultiPolygon.prototype.getExtent);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getFirstCoordinate", ol.geom.MultiPolygon.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getFirstCoordinate", ol.geom.MultiPolygon.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getInteriorPoints", ol.geom.MultiPolygon.prototype.getInteriorPoints);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getInteriorPoints", ol.geom.MultiPolygon.prototype.getInteriorPoints);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getLastCoordinate", ol.geom.MultiPolygon.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getLastCoordinate", ol.geom.MultiPolygon.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getLayout", ol.geom.MultiPolygon.prototype.getLayout);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getLayout", ol.geom.MultiPolygon.prototype.getLayout);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getPolygon", ol.geom.MultiPolygon.prototype.getPolygon);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getPolygon", ol.geom.MultiPolygon.prototype.getPolygon);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getPolygons", ol.geom.MultiPolygon.prototype.getPolygons);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getPolygons", ol.geom.MultiPolygon.prototype.getPolygons);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getSimplifiedGeometry", ol.geom.MultiPolygon.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getSimplifiedGeometry", ol.geom.MultiPolygon.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getType", ol.geom.MultiPolygon.prototype.getType);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "getType", ol.geom.MultiPolygon.prototype.getType);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "on", ol.geom.MultiPolygon.prototype.on);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "once", ol.geom.MultiPolygon.prototype.once);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "setCoordinates", ol.geom.MultiPolygon.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "setCoordinates", ol.geom.MultiPolygon.prototype.setCoordinates);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "transform", ol.geom.MultiPolygon.prototype.transform);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "transform", ol.geom.MultiPolygon.prototype.transform);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "un", ol.geom.MultiPolygon.prototype.un);
goog.exportProperty(ol.geom.MultiPolygon.prototype, "unByKey", ol.geom.MultiPolygon.prototype.unByKey);
goog.exportSymbol("ol.geom.Point", ol.geom.Point);
goog.exportProperty(ol.geom.Point.prototype, "clone", ol.geom.Point.prototype.clone);
goog.exportProperty(ol.geom.Point.prototype, "clone", ol.geom.Point.prototype.clone);
goog.exportProperty(ol.geom.Point.prototype, "dispatchChangeEvent", ol.geom.Point.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.Point.prototype, "getClosestPoint", ol.geom.Point.prototype.getClosestPoint);
goog.exportProperty(ol.geom.Point.prototype, "getCoordinates", ol.geom.Point.prototype.getCoordinates);
goog.exportProperty(ol.geom.Point.prototype, "getCoordinates", ol.geom.Point.prototype.getCoordinates);
goog.exportProperty(ol.geom.Point.prototype, "getFirstCoordinate", ol.geom.Point.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Point.prototype, "getFirstCoordinate", ol.geom.Point.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Point.prototype, "getLastCoordinate", ol.geom.Point.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Point.prototype, "getLastCoordinate", ol.geom.Point.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Point.prototype, "getLayout", ol.geom.Point.prototype.getLayout);
goog.exportProperty(ol.geom.Point.prototype, "getLayout", ol.geom.Point.prototype.getLayout);
goog.exportProperty(ol.geom.Point.prototype, "getSimplifiedGeometry", ol.geom.Point.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Point.prototype, "getSimplifiedGeometry", ol.geom.Point.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Point.prototype, "getType", ol.geom.Point.prototype.getType);
goog.exportProperty(ol.geom.Point.prototype, "getType", ol.geom.Point.prototype.getType);
goog.exportProperty(ol.geom.Point.prototype, "on", ol.geom.Point.prototype.on);
goog.exportProperty(ol.geom.Point.prototype, "once", ol.geom.Point.prototype.once);
goog.exportProperty(ol.geom.Point.prototype, "setCoordinates", ol.geom.Point.prototype.setCoordinates);
goog.exportProperty(ol.geom.Point.prototype, "setCoordinates", ol.geom.Point.prototype.setCoordinates);
goog.exportProperty(ol.geom.Point.prototype, "transform", ol.geom.Point.prototype.transform);
goog.exportProperty(ol.geom.Point.prototype, "transform", ol.geom.Point.prototype.transform);
goog.exportProperty(ol.geom.Point.prototype, "un", ol.geom.Point.prototype.un);
goog.exportProperty(ol.geom.Point.prototype, "unByKey", ol.geom.Point.prototype.unByKey);
goog.exportSymbol("ol.geom.Polygon", ol.geom.Polygon);
goog.exportProperty(ol.geom.Polygon.prototype, "appendLinearRing", ol.geom.Polygon.prototype.appendLinearRing);
goog.exportProperty(ol.geom.Polygon.prototype, "appendLinearRing", ol.geom.Polygon.prototype.appendLinearRing);
goog.exportProperty(ol.geom.Polygon.prototype, "clone", ol.geom.Polygon.prototype.clone);
goog.exportProperty(ol.geom.Polygon.prototype, "clone", ol.geom.Polygon.prototype.clone);
goog.exportProperty(ol.geom.Polygon.prototype, "dispatchChangeEvent", ol.geom.Polygon.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.Polygon.prototype, "getArea", ol.geom.Polygon.prototype.getArea);
goog.exportProperty(ol.geom.Polygon.prototype, "getArea", ol.geom.Polygon.prototype.getArea);
goog.exportProperty(ol.geom.Polygon.prototype, "getClosestPoint", ol.geom.Polygon.prototype.getClosestPoint);
goog.exportProperty(ol.geom.Polygon.prototype, "getCoordinates", ol.geom.Polygon.prototype.getCoordinates);
goog.exportProperty(ol.geom.Polygon.prototype, "getCoordinates", ol.geom.Polygon.prototype.getCoordinates);
goog.exportProperty(ol.geom.Polygon.prototype, "getExtent", ol.geom.Polygon.prototype.getExtent);
goog.exportProperty(ol.geom.Polygon.prototype, "getExtent", ol.geom.Polygon.prototype.getExtent);
goog.exportProperty(ol.geom.Polygon.prototype, "getFirstCoordinate", ol.geom.Polygon.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Polygon.prototype, "getFirstCoordinate", ol.geom.Polygon.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.Polygon.prototype, "getInteriorPoint", ol.geom.Polygon.prototype.getInteriorPoint);
goog.exportProperty(ol.geom.Polygon.prototype, "getInteriorPoint", ol.geom.Polygon.prototype.getInteriorPoint);
goog.exportProperty(ol.geom.Polygon.prototype, "getLastCoordinate", ol.geom.Polygon.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Polygon.prototype, "getLastCoordinate", ol.geom.Polygon.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.Polygon.prototype, "getLayout", ol.geom.Polygon.prototype.getLayout);
goog.exportProperty(ol.geom.Polygon.prototype, "getLayout", ol.geom.Polygon.prototype.getLayout);
goog.exportProperty(ol.geom.Polygon.prototype, "getLinearRing", ol.geom.Polygon.prototype.getLinearRing);
goog.exportProperty(ol.geom.Polygon.prototype, "getLinearRing", ol.geom.Polygon.prototype.getLinearRing);
goog.exportProperty(ol.geom.Polygon.prototype, "getLinearRings", ol.geom.Polygon.prototype.getLinearRings);
goog.exportProperty(ol.geom.Polygon.prototype, "getLinearRings", ol.geom.Polygon.prototype.getLinearRings);
goog.exportProperty(ol.geom.Polygon.prototype, "getSimplifiedGeometry", ol.geom.Polygon.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Polygon.prototype, "getSimplifiedGeometry", ol.geom.Polygon.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.Polygon.prototype, "getType", ol.geom.Polygon.prototype.getType);
goog.exportProperty(ol.geom.Polygon.prototype, "getType", ol.geom.Polygon.prototype.getType);
goog.exportProperty(ol.geom.Polygon.prototype, "on", ol.geom.Polygon.prototype.on);
goog.exportProperty(ol.geom.Polygon.prototype, "once", ol.geom.Polygon.prototype.once);
goog.exportProperty(ol.geom.Polygon.prototype, "setCoordinates", ol.geom.Polygon.prototype.setCoordinates);
goog.exportProperty(ol.geom.Polygon.prototype, "setCoordinates", ol.geom.Polygon.prototype.setCoordinates);
goog.exportProperty(ol.geom.Polygon.prototype, "transform", ol.geom.Polygon.prototype.transform);
goog.exportProperty(ol.geom.Polygon.prototype, "transform", ol.geom.Polygon.prototype.transform);
goog.exportProperty(ol.geom.Polygon.prototype, "un", ol.geom.Polygon.prototype.un);
goog.exportProperty(ol.geom.Polygon.prototype, "unByKey", ol.geom.Polygon.prototype.unByKey);
goog.exportSymbol("ol.geom.SimpleGeometry", ol.geom.SimpleGeometry);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "dispatchChangeEvent", ol.geom.SimpleGeometry.prototype.dispatchChangeEvent);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getClosestPoint", ol.geom.SimpleGeometry.prototype.getClosestPoint);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getExtent", ol.geom.SimpleGeometry.prototype.getExtent);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getExtent", ol.geom.SimpleGeometry.prototype.getExtent);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getFirstCoordinate", ol.geom.SimpleGeometry.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getFirstCoordinate", ol.geom.SimpleGeometry.prototype.getFirstCoordinate);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getLastCoordinate", ol.geom.SimpleGeometry.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getLastCoordinate", ol.geom.SimpleGeometry.prototype.getLastCoordinate);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getLayout", ol.geom.SimpleGeometry.prototype.getLayout);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getLayout", ol.geom.SimpleGeometry.prototype.getLayout);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getSimplifiedGeometry", ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "getSimplifiedGeometry", ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "on", ol.geom.SimpleGeometry.prototype.on);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "once", ol.geom.SimpleGeometry.prototype.once);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "transform", ol.geom.SimpleGeometry.prototype.transform);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "transform", ol.geom.SimpleGeometry.prototype.transform);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "un", ol.geom.SimpleGeometry.prototype.un);
goog.exportProperty(ol.geom.SimpleGeometry.prototype, "unByKey", ol.geom.SimpleGeometry.prototype.unByKey);
goog.exportSymbol("ol.inherits", ol.inherits);
goog.exportSymbol("ol.interaction.DoubleClickZoom", ol.interaction.DoubleClickZoom);
goog.exportProperty(ol.interaction.DoubleClickZoom.prototype, "dispatchChangeEvent", ol.interaction.DoubleClickZoom.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.DoubleClickZoom.prototype, "on", ol.interaction.DoubleClickZoom.prototype.on);
goog.exportProperty(ol.interaction.DoubleClickZoom.prototype, "once", ol.interaction.DoubleClickZoom.prototype.once);
goog.exportProperty(ol.interaction.DoubleClickZoom.prototype, "un", ol.interaction.DoubleClickZoom.prototype.un);
goog.exportProperty(ol.interaction.DoubleClickZoom.prototype, "unByKey", ol.interaction.DoubleClickZoom.prototype.unByKey);
goog.exportSymbol("ol.interaction.DragAndDrop", ol.interaction.DragAndDrop);
goog.exportProperty(ol.interaction.DragAndDrop.prototype, "dispatchChangeEvent", ol.interaction.DragAndDrop.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.DragAndDrop.prototype, "on", ol.interaction.DragAndDrop.prototype.on);
goog.exportProperty(ol.interaction.DragAndDrop.prototype, "once", ol.interaction.DragAndDrop.prototype.once);
goog.exportProperty(ol.interaction.DragAndDrop.prototype, "un", ol.interaction.DragAndDrop.prototype.un);
goog.exportProperty(ol.interaction.DragAndDrop.prototype, "unByKey", ol.interaction.DragAndDrop.prototype.unByKey);
goog.exportSymbol("ol.interaction.DragBox", ol.interaction.DragBox);
goog.exportProperty(ol.interaction.DragBox.prototype, "getGeometry", ol.interaction.DragBox.prototype.getGeometry);
goog.exportSymbol("ol.interaction.DragPan", ol.interaction.DragPan);
goog.exportSymbol("ol.interaction.DragRotate", ol.interaction.DragRotate);
goog.exportSymbol("ol.interaction.DragRotateAndZoom", ol.interaction.DragRotateAndZoom);
goog.exportSymbol("ol.interaction.DragZoom", ol.interaction.DragZoom);
goog.exportProperty(ol.interaction.DragZoom.prototype, "getGeometry", ol.interaction.DragZoom.prototype.getGeometry);
goog.exportSymbol("ol.interaction.Draw", ol.interaction.Draw);
goog.exportProperty(ol.interaction.Interaction.prototype, "dispatchChangeEvent", ol.interaction.Interaction.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.Interaction.prototype, "on", ol.interaction.Interaction.prototype.on);
goog.exportProperty(ol.interaction.Interaction.prototype, "once", ol.interaction.Interaction.prototype.once);
goog.exportProperty(ol.interaction.Interaction.prototype, "un", ol.interaction.Interaction.prototype.un);
goog.exportProperty(ol.interaction.Interaction.prototype, "unByKey", ol.interaction.Interaction.prototype.unByKey);
goog.exportSymbol("ol.interaction.KeyboardPan", ol.interaction.KeyboardPan);
goog.exportProperty(ol.interaction.KeyboardPan.prototype, "dispatchChangeEvent", ol.interaction.KeyboardPan.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.KeyboardPan.prototype, "on", ol.interaction.KeyboardPan.prototype.on);
goog.exportProperty(ol.interaction.KeyboardPan.prototype, "once", ol.interaction.KeyboardPan.prototype.once);
goog.exportProperty(ol.interaction.KeyboardPan.prototype, "un", ol.interaction.KeyboardPan.prototype.un);
goog.exportProperty(ol.interaction.KeyboardPan.prototype, "unByKey", ol.interaction.KeyboardPan.prototype.unByKey);
goog.exportSymbol("ol.interaction.KeyboardZoom", ol.interaction.KeyboardZoom);
goog.exportProperty(ol.interaction.KeyboardZoom.prototype, "dispatchChangeEvent", ol.interaction.KeyboardZoom.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.KeyboardZoom.prototype, "on", ol.interaction.KeyboardZoom.prototype.on);
goog.exportProperty(ol.interaction.KeyboardZoom.prototype, "once", ol.interaction.KeyboardZoom.prototype.once);
goog.exportProperty(ol.interaction.KeyboardZoom.prototype, "un", ol.interaction.KeyboardZoom.prototype.un);
goog.exportProperty(ol.interaction.KeyboardZoom.prototype, "unByKey", ol.interaction.KeyboardZoom.prototype.unByKey);
goog.exportSymbol("ol.interaction.Modify", ol.interaction.Modify);
goog.exportSymbol("ol.interaction.MouseWheelZoom", ol.interaction.MouseWheelZoom);
goog.exportProperty(ol.interaction.MouseWheelZoom.prototype, "dispatchChangeEvent", ol.interaction.MouseWheelZoom.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.MouseWheelZoom.prototype, "on", ol.interaction.MouseWheelZoom.prototype.on);
goog.exportProperty(ol.interaction.MouseWheelZoom.prototype, "once", ol.interaction.MouseWheelZoom.prototype.once);
goog.exportProperty(ol.interaction.MouseWheelZoom.prototype, "un", ol.interaction.MouseWheelZoom.prototype.un);
goog.exportProperty(ol.interaction.MouseWheelZoom.prototype, "unByKey", ol.interaction.MouseWheelZoom.prototype.unByKey);
goog.exportSymbol("ol.interaction.PinchRotate", ol.interaction.PinchRotate);
goog.exportSymbol("ol.interaction.PinchZoom", ol.interaction.PinchZoom);
goog.exportSymbol("ol.interaction.Select", ol.interaction.Select);
goog.exportProperty(ol.interaction.Select.prototype, "dispatchChangeEvent", ol.interaction.Select.prototype.dispatchChangeEvent);
goog.exportProperty(ol.interaction.Select.prototype, "getFeatures", ol.interaction.Select.prototype.getFeatures);
goog.exportProperty(ol.interaction.Select.prototype, "on", ol.interaction.Select.prototype.on);
goog.exportProperty(ol.interaction.Select.prototype, "once", ol.interaction.Select.prototype.once);
goog.exportProperty(ol.interaction.Select.prototype, "setMap", ol.interaction.Select.prototype.setMap);
goog.exportProperty(ol.interaction.Select.prototype, "un", ol.interaction.Select.prototype.un);
goog.exportProperty(ol.interaction.Select.prototype, "unByKey", ol.interaction.Select.prototype.unByKey);
goog.exportSymbol("ol.interaction.defaults", ol.interaction.defaults);
goog.exportProperty(ol.layer.Base.prototype, "bindTo", ol.layer.Base.prototype.bindTo);
goog.exportProperty(ol.layer.Base.prototype, "dispatchChangeEvent", ol.layer.Base.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Base.prototype, "get", ol.layer.Base.prototype.get);
goog.exportProperty(ol.layer.Base.prototype, "getBrightness", ol.layer.Base.prototype.getBrightness);
goog.exportProperty(ol.layer.Base.prototype, "getContrast", ol.layer.Base.prototype.getContrast);
goog.exportProperty(ol.layer.Base.prototype, "getHue", ol.layer.Base.prototype.getHue);
goog.exportProperty(ol.layer.Base.prototype, "getKeys", ol.layer.Base.prototype.getKeys);
goog.exportProperty(ol.layer.Base.prototype, "getMaxResolution", ol.layer.Base.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Base.prototype, "getMinResolution", ol.layer.Base.prototype.getMinResolution);
goog.exportProperty(ol.layer.Base.prototype, "getOpacity", ol.layer.Base.prototype.getOpacity);
goog.exportProperty(ol.layer.Base.prototype, "getProperties", ol.layer.Base.prototype.getProperties);
goog.exportProperty(ol.layer.Base.prototype, "getSaturation", ol.layer.Base.prototype.getSaturation);
goog.exportProperty(ol.layer.Base.prototype, "getVisible", ol.layer.Base.prototype.getVisible);
goog.exportProperty(ol.layer.Base.prototype, "notify", ol.layer.Base.prototype.notify);
goog.exportProperty(ol.layer.Base.prototype, "on", ol.layer.Base.prototype.on);
goog.exportProperty(ol.layer.Base.prototype, "once", ol.layer.Base.prototype.once);
goog.exportProperty(ol.layer.Base.prototype, "set", ol.layer.Base.prototype.set);
goog.exportProperty(ol.layer.Base.prototype, "setBrightness", ol.layer.Base.prototype.setBrightness);
goog.exportProperty(ol.layer.Base.prototype, "setContrast", ol.layer.Base.prototype.setContrast);
goog.exportProperty(ol.layer.Base.prototype, "setHue", ol.layer.Base.prototype.setHue);
goog.exportProperty(ol.layer.Base.prototype, "setMaxResolution", ol.layer.Base.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Base.prototype, "setMinResolution", ol.layer.Base.prototype.setMinResolution);
goog.exportProperty(ol.layer.Base.prototype, "setOpacity", ol.layer.Base.prototype.setOpacity);
goog.exportProperty(ol.layer.Base.prototype, "setSaturation", ol.layer.Base.prototype.setSaturation);
goog.exportProperty(ol.layer.Base.prototype, "setValues", ol.layer.Base.prototype.setValues);
goog.exportProperty(ol.layer.Base.prototype, "setVisible", ol.layer.Base.prototype.setVisible);
goog.exportProperty(ol.layer.Base.prototype, "un", ol.layer.Base.prototype.un);
goog.exportProperty(ol.layer.Base.prototype, "unByKey", ol.layer.Base.prototype.unByKey);
goog.exportProperty(ol.layer.Base.prototype, "unbind", ol.layer.Base.prototype.unbind);
goog.exportProperty(ol.layer.Base.prototype, "unbindAll", ol.layer.Base.prototype.unbindAll);
goog.exportSymbol("ol.layer.Group", ol.layer.Group);
goog.exportProperty(ol.layer.Group.prototype, "bindTo", ol.layer.Group.prototype.bindTo);
goog.exportProperty(ol.layer.Group.prototype, "dispatchChangeEvent", ol.layer.Group.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Group.prototype, "get", ol.layer.Group.prototype.get);
goog.exportProperty(ol.layer.Group.prototype, "getBrightness", ol.layer.Group.prototype.getBrightness);
goog.exportProperty(ol.layer.Group.prototype, "getContrast", ol.layer.Group.prototype.getContrast);
goog.exportProperty(ol.layer.Group.prototype, "getHue", ol.layer.Group.prototype.getHue);
goog.exportProperty(ol.layer.Group.prototype, "getKeys", ol.layer.Group.prototype.getKeys);
goog.exportProperty(ol.layer.Group.prototype, "getMaxResolution", ol.layer.Group.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Group.prototype, "getMinResolution", ol.layer.Group.prototype.getMinResolution);
goog.exportProperty(ol.layer.Group.prototype, "getOpacity", ol.layer.Group.prototype.getOpacity);
goog.exportProperty(ol.layer.Group.prototype, "getProperties", ol.layer.Group.prototype.getProperties);
goog.exportProperty(ol.layer.Group.prototype, "getSaturation", ol.layer.Group.prototype.getSaturation);
goog.exportProperty(ol.layer.Group.prototype, "getVisible", ol.layer.Group.prototype.getVisible);
goog.exportProperty(ol.layer.Group.prototype, "notify", ol.layer.Group.prototype.notify);
goog.exportProperty(ol.layer.Group.prototype, "on", ol.layer.Group.prototype.on);
goog.exportProperty(ol.layer.Group.prototype, "once", ol.layer.Group.prototype.once);
goog.exportProperty(ol.layer.Group.prototype, "set", ol.layer.Group.prototype.set);
goog.exportProperty(ol.layer.Group.prototype, "setBrightness", ol.layer.Group.prototype.setBrightness);
goog.exportProperty(ol.layer.Group.prototype, "setContrast", ol.layer.Group.prototype.setContrast);
goog.exportProperty(ol.layer.Group.prototype, "setHue", ol.layer.Group.prototype.setHue);
goog.exportProperty(ol.layer.Group.prototype, "setMaxResolution", ol.layer.Group.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Group.prototype, "setMinResolution", ol.layer.Group.prototype.setMinResolution);
goog.exportProperty(ol.layer.Group.prototype, "setOpacity", ol.layer.Group.prototype.setOpacity);
goog.exportProperty(ol.layer.Group.prototype, "setSaturation", ol.layer.Group.prototype.setSaturation);
goog.exportProperty(ol.layer.Group.prototype, "setValues", ol.layer.Group.prototype.setValues);
goog.exportProperty(ol.layer.Group.prototype, "setVisible", ol.layer.Group.prototype.setVisible);
goog.exportProperty(ol.layer.Group.prototype, "un", ol.layer.Group.prototype.un);
goog.exportProperty(ol.layer.Group.prototype, "unByKey", ol.layer.Group.prototype.unByKey);
goog.exportProperty(ol.layer.Group.prototype, "unbind", ol.layer.Group.prototype.unbind);
goog.exportProperty(ol.layer.Group.prototype, "unbindAll", ol.layer.Group.prototype.unbindAll);
goog.exportSymbol("ol.layer.Heatmap", ol.layer.Heatmap);
goog.exportProperty(ol.layer.Heatmap.prototype, "bindTo", ol.layer.Heatmap.prototype.bindTo);
goog.exportProperty(ol.layer.Heatmap.prototype, "dispatchChangeEvent", ol.layer.Heatmap.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Heatmap.prototype, "get", ol.layer.Heatmap.prototype.get);
goog.exportProperty(ol.layer.Heatmap.prototype, "getBrightness", ol.layer.Heatmap.prototype.getBrightness);
goog.exportProperty(ol.layer.Heatmap.prototype, "getContrast", ol.layer.Heatmap.prototype.getContrast);
goog.exportProperty(ol.layer.Heatmap.prototype, "getHue", ol.layer.Heatmap.prototype.getHue);
goog.exportProperty(ol.layer.Heatmap.prototype, "getKeys", ol.layer.Heatmap.prototype.getKeys);
goog.exportProperty(ol.layer.Heatmap.prototype, "getMaxResolution", ol.layer.Heatmap.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Heatmap.prototype, "getMinResolution", ol.layer.Heatmap.prototype.getMinResolution);
goog.exportProperty(ol.layer.Heatmap.prototype, "getOpacity", ol.layer.Heatmap.prototype.getOpacity);
goog.exportProperty(ol.layer.Heatmap.prototype, "getProperties", ol.layer.Heatmap.prototype.getProperties);
goog.exportProperty(ol.layer.Heatmap.prototype, "getSaturation", ol.layer.Heatmap.prototype.getSaturation);
goog.exportProperty(ol.layer.Heatmap.prototype, "getSource", ol.layer.Heatmap.prototype.getSource);
goog.exportProperty(ol.layer.Heatmap.prototype, "getStyle", ol.layer.Heatmap.prototype.getStyle);
goog.exportProperty(ol.layer.Heatmap.prototype, "getStyleFunction", ol.layer.Heatmap.prototype.getStyleFunction);
goog.exportProperty(ol.layer.Heatmap.prototype, "getVisible", ol.layer.Heatmap.prototype.getVisible);
goog.exportProperty(ol.layer.Heatmap.prototype, "notify", ol.layer.Heatmap.prototype.notify);
goog.exportProperty(ol.layer.Heatmap.prototype, "on", ol.layer.Heatmap.prototype.on);
goog.exportProperty(ol.layer.Heatmap.prototype, "once", ol.layer.Heatmap.prototype.once);
goog.exportProperty(ol.layer.Heatmap.prototype, "set", ol.layer.Heatmap.prototype.set);
goog.exportProperty(ol.layer.Heatmap.prototype, "setBrightness", ol.layer.Heatmap.prototype.setBrightness);
goog.exportProperty(ol.layer.Heatmap.prototype, "setContrast", ol.layer.Heatmap.prototype.setContrast);
goog.exportProperty(ol.layer.Heatmap.prototype, "setHue", ol.layer.Heatmap.prototype.setHue);
goog.exportProperty(ol.layer.Heatmap.prototype, "setMaxResolution", ol.layer.Heatmap.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Heatmap.prototype, "setMinResolution", ol.layer.Heatmap.prototype.setMinResolution);
goog.exportProperty(ol.layer.Heatmap.prototype, "setOpacity", ol.layer.Heatmap.prototype.setOpacity);
goog.exportProperty(ol.layer.Heatmap.prototype, "setSaturation", ol.layer.Heatmap.prototype.setSaturation);
goog.exportProperty(ol.layer.Heatmap.prototype, "setStyle", ol.layer.Heatmap.prototype.setStyle);
goog.exportProperty(ol.layer.Heatmap.prototype, "setValues", ol.layer.Heatmap.prototype.setValues);
goog.exportProperty(ol.layer.Heatmap.prototype, "setVisible", ol.layer.Heatmap.prototype.setVisible);
goog.exportProperty(ol.layer.Heatmap.prototype, "un", ol.layer.Heatmap.prototype.un);
goog.exportProperty(ol.layer.Heatmap.prototype, "unByKey", ol.layer.Heatmap.prototype.unByKey);
goog.exportProperty(ol.layer.Heatmap.prototype, "unbind", ol.layer.Heatmap.prototype.unbind);
goog.exportProperty(ol.layer.Heatmap.prototype, "unbindAll", ol.layer.Heatmap.prototype.unbindAll);
goog.exportSymbol("ol.layer.Image", ol.layer.Image);
goog.exportProperty(ol.layer.Image.prototype, "bindTo", ol.layer.Image.prototype.bindTo);
goog.exportProperty(ol.layer.Image.prototype, "dispatchChangeEvent", ol.layer.Image.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Image.prototype, "get", ol.layer.Image.prototype.get);
goog.exportProperty(ol.layer.Image.prototype, "getBrightness", ol.layer.Image.prototype.getBrightness);
goog.exportProperty(ol.layer.Image.prototype, "getContrast", ol.layer.Image.prototype.getContrast);
goog.exportProperty(ol.layer.Image.prototype, "getHue", ol.layer.Image.prototype.getHue);
goog.exportProperty(ol.layer.Image.prototype, "getKeys", ol.layer.Image.prototype.getKeys);
goog.exportProperty(ol.layer.Image.prototype, "getMaxResolution", ol.layer.Image.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Image.prototype, "getMinResolution", ol.layer.Image.prototype.getMinResolution);
goog.exportProperty(ol.layer.Image.prototype, "getOpacity", ol.layer.Image.prototype.getOpacity);
goog.exportProperty(ol.layer.Image.prototype, "getProperties", ol.layer.Image.prototype.getProperties);
goog.exportProperty(ol.layer.Image.prototype, "getSaturation", ol.layer.Image.prototype.getSaturation);
goog.exportProperty(ol.layer.Image.prototype, "getSource", ol.layer.Image.prototype.getSource);
goog.exportProperty(ol.layer.Image.prototype, "getVisible", ol.layer.Image.prototype.getVisible);
goog.exportProperty(ol.layer.Image.prototype, "notify", ol.layer.Image.prototype.notify);
goog.exportProperty(ol.layer.Image.prototype, "on", ol.layer.Image.prototype.on);
goog.exportProperty(ol.layer.Image.prototype, "once", ol.layer.Image.prototype.once);
goog.exportProperty(ol.layer.Image.prototype, "set", ol.layer.Image.prototype.set);
goog.exportProperty(ol.layer.Image.prototype, "setBrightness", ol.layer.Image.prototype.setBrightness);
goog.exportProperty(ol.layer.Image.prototype, "setContrast", ol.layer.Image.prototype.setContrast);
goog.exportProperty(ol.layer.Image.prototype, "setHue", ol.layer.Image.prototype.setHue);
goog.exportProperty(ol.layer.Image.prototype, "setMaxResolution", ol.layer.Image.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Image.prototype, "setMinResolution", ol.layer.Image.prototype.setMinResolution);
goog.exportProperty(ol.layer.Image.prototype, "setOpacity", ol.layer.Image.prototype.setOpacity);
goog.exportProperty(ol.layer.Image.prototype, "setSaturation", ol.layer.Image.prototype.setSaturation);
goog.exportProperty(ol.layer.Image.prototype, "setValues", ol.layer.Image.prototype.setValues);
goog.exportProperty(ol.layer.Image.prototype, "setVisible", ol.layer.Image.prototype.setVisible);
goog.exportProperty(ol.layer.Image.prototype, "un", ol.layer.Image.prototype.un);
goog.exportProperty(ol.layer.Image.prototype, "unByKey", ol.layer.Image.prototype.unByKey);
goog.exportProperty(ol.layer.Image.prototype, "unbind", ol.layer.Image.prototype.unbind);
goog.exportProperty(ol.layer.Image.prototype, "unbindAll", ol.layer.Image.prototype.unbindAll);
goog.exportSymbol("ol.layer.Layer", ol.layer.Layer);
goog.exportProperty(ol.layer.Layer.prototype, "bindTo", ol.layer.Layer.prototype.bindTo);
goog.exportProperty(ol.layer.Layer.prototype, "dispatchChangeEvent", ol.layer.Layer.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Layer.prototype, "get", ol.layer.Layer.prototype.get);
goog.exportProperty(ol.layer.Layer.prototype, "getBrightness", ol.layer.Layer.prototype.getBrightness);
goog.exportProperty(ol.layer.Layer.prototype, "getContrast", ol.layer.Layer.prototype.getContrast);
goog.exportProperty(ol.layer.Layer.prototype, "getHue", ol.layer.Layer.prototype.getHue);
goog.exportProperty(ol.layer.Layer.prototype, "getKeys", ol.layer.Layer.prototype.getKeys);
goog.exportProperty(ol.layer.Layer.prototype, "getMaxResolution", ol.layer.Layer.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Layer.prototype, "getMinResolution", ol.layer.Layer.prototype.getMinResolution);
goog.exportProperty(ol.layer.Layer.prototype, "getOpacity", ol.layer.Layer.prototype.getOpacity);
goog.exportProperty(ol.layer.Layer.prototype, "getProperties", ol.layer.Layer.prototype.getProperties);
goog.exportProperty(ol.layer.Layer.prototype, "getSaturation", ol.layer.Layer.prototype.getSaturation);
goog.exportProperty(ol.layer.Layer.prototype, "getSource", ol.layer.Layer.prototype.getSource);
goog.exportProperty(ol.layer.Layer.prototype, "getVisible", ol.layer.Layer.prototype.getVisible);
goog.exportProperty(ol.layer.Layer.prototype, "notify", ol.layer.Layer.prototype.notify);
goog.exportProperty(ol.layer.Layer.prototype, "on", ol.layer.Layer.prototype.on);
goog.exportProperty(ol.layer.Layer.prototype, "once", ol.layer.Layer.prototype.once);
goog.exportProperty(ol.layer.Layer.prototype, "set", ol.layer.Layer.prototype.set);
goog.exportProperty(ol.layer.Layer.prototype, "setBrightness", ol.layer.Layer.prototype.setBrightness);
goog.exportProperty(ol.layer.Layer.prototype, "setContrast", ol.layer.Layer.prototype.setContrast);
goog.exportProperty(ol.layer.Layer.prototype, "setHue", ol.layer.Layer.prototype.setHue);
goog.exportProperty(ol.layer.Layer.prototype, "setMaxResolution", ol.layer.Layer.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Layer.prototype, "setMinResolution", ol.layer.Layer.prototype.setMinResolution);
goog.exportProperty(ol.layer.Layer.prototype, "setOpacity", ol.layer.Layer.prototype.setOpacity);
goog.exportProperty(ol.layer.Layer.prototype, "setSaturation", ol.layer.Layer.prototype.setSaturation);
goog.exportProperty(ol.layer.Layer.prototype, "setValues", ol.layer.Layer.prototype.setValues);
goog.exportProperty(ol.layer.Layer.prototype, "setVisible", ol.layer.Layer.prototype.setVisible);
goog.exportProperty(ol.layer.Layer.prototype, "un", ol.layer.Layer.prototype.un);
goog.exportProperty(ol.layer.Layer.prototype, "unByKey", ol.layer.Layer.prototype.unByKey);
goog.exportProperty(ol.layer.Layer.prototype, "unbind", ol.layer.Layer.prototype.unbind);
goog.exportProperty(ol.layer.Layer.prototype, "unbindAll", ol.layer.Layer.prototype.unbindAll);
goog.exportSymbol("ol.layer.Tile", ol.layer.Tile);
goog.exportProperty(ol.layer.Tile.prototype, "bindTo", ol.layer.Tile.prototype.bindTo);
goog.exportProperty(ol.layer.Tile.prototype, "dispatchChangeEvent", ol.layer.Tile.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Tile.prototype, "get", ol.layer.Tile.prototype.get);
goog.exportProperty(ol.layer.Tile.prototype, "getBrightness", ol.layer.Tile.prototype.getBrightness);
goog.exportProperty(ol.layer.Tile.prototype, "getContrast", ol.layer.Tile.prototype.getContrast);
goog.exportProperty(ol.layer.Tile.prototype, "getHue", ol.layer.Tile.prototype.getHue);
goog.exportProperty(ol.layer.Tile.prototype, "getKeys", ol.layer.Tile.prototype.getKeys);
goog.exportProperty(ol.layer.Tile.prototype, "getMaxResolution", ol.layer.Tile.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Tile.prototype, "getMinResolution", ol.layer.Tile.prototype.getMinResolution);
goog.exportProperty(ol.layer.Tile.prototype, "getOpacity", ol.layer.Tile.prototype.getOpacity);
goog.exportProperty(ol.layer.Tile.prototype, "getProperties", ol.layer.Tile.prototype.getProperties);
goog.exportProperty(ol.layer.Tile.prototype, "getSaturation", ol.layer.Tile.prototype.getSaturation);
goog.exportProperty(ol.layer.Tile.prototype, "getSource", ol.layer.Tile.prototype.getSource);
goog.exportProperty(ol.layer.Tile.prototype, "getVisible", ol.layer.Tile.prototype.getVisible);
goog.exportProperty(ol.layer.Tile.prototype, "notify", ol.layer.Tile.prototype.notify);
goog.exportProperty(ol.layer.Tile.prototype, "on", ol.layer.Tile.prototype.on);
goog.exportProperty(ol.layer.Tile.prototype, "once", ol.layer.Tile.prototype.once);
goog.exportProperty(ol.layer.Tile.prototype, "set", ol.layer.Tile.prototype.set);
goog.exportProperty(ol.layer.Tile.prototype, "setBrightness", ol.layer.Tile.prototype.setBrightness);
goog.exportProperty(ol.layer.Tile.prototype, "setContrast", ol.layer.Tile.prototype.setContrast);
goog.exportProperty(ol.layer.Tile.prototype, "setHue", ol.layer.Tile.prototype.setHue);
goog.exportProperty(ol.layer.Tile.prototype, "setMaxResolution", ol.layer.Tile.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Tile.prototype, "setMinResolution", ol.layer.Tile.prototype.setMinResolution);
goog.exportProperty(ol.layer.Tile.prototype, "setOpacity", ol.layer.Tile.prototype.setOpacity);
goog.exportProperty(ol.layer.Tile.prototype, "setSaturation", ol.layer.Tile.prototype.setSaturation);
goog.exportProperty(ol.layer.Tile.prototype, "setValues", ol.layer.Tile.prototype.setValues);
goog.exportProperty(ol.layer.Tile.prototype, "setVisible", ol.layer.Tile.prototype.setVisible);
goog.exportProperty(ol.layer.Tile.prototype, "un", ol.layer.Tile.prototype.un);
goog.exportProperty(ol.layer.Tile.prototype, "unByKey", ol.layer.Tile.prototype.unByKey);
goog.exportProperty(ol.layer.Tile.prototype, "unbind", ol.layer.Tile.prototype.unbind);
goog.exportProperty(ol.layer.Tile.prototype, "unbindAll", ol.layer.Tile.prototype.unbindAll);
goog.exportSymbol("ol.layer.Vector", ol.layer.Vector);
goog.exportProperty(ol.layer.Vector.prototype, "bindTo", ol.layer.Vector.prototype.bindTo);
goog.exportProperty(ol.layer.Vector.prototype, "dispatchChangeEvent", ol.layer.Vector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.layer.Vector.prototype, "get", ol.layer.Vector.prototype.get);
goog.exportProperty(ol.layer.Vector.prototype, "getBrightness", ol.layer.Vector.prototype.getBrightness);
goog.exportProperty(ol.layer.Vector.prototype, "getContrast", ol.layer.Vector.prototype.getContrast);
goog.exportProperty(ol.layer.Vector.prototype, "getHue", ol.layer.Vector.prototype.getHue);
goog.exportProperty(ol.layer.Vector.prototype, "getKeys", ol.layer.Vector.prototype.getKeys);
goog.exportProperty(ol.layer.Vector.prototype, "getMaxResolution", ol.layer.Vector.prototype.getMaxResolution);
goog.exportProperty(ol.layer.Vector.prototype, "getMinResolution", ol.layer.Vector.prototype.getMinResolution);
goog.exportProperty(ol.layer.Vector.prototype, "getOpacity", ol.layer.Vector.prototype.getOpacity);
goog.exportProperty(ol.layer.Vector.prototype, "getProperties", ol.layer.Vector.prototype.getProperties);
goog.exportProperty(ol.layer.Vector.prototype, "getSaturation", ol.layer.Vector.prototype.getSaturation);
goog.exportProperty(ol.layer.Vector.prototype, "getSource", ol.layer.Vector.prototype.getSource);
goog.exportProperty(ol.layer.Vector.prototype, "getStyle", ol.layer.Vector.prototype.getStyle);
goog.exportProperty(ol.layer.Vector.prototype, "getStyleFunction", ol.layer.Vector.prototype.getStyleFunction);
goog.exportProperty(ol.layer.Vector.prototype, "getVisible", ol.layer.Vector.prototype.getVisible);
goog.exportProperty(ol.layer.Vector.prototype, "notify", ol.layer.Vector.prototype.notify);
goog.exportProperty(ol.layer.Vector.prototype, "on", ol.layer.Vector.prototype.on);
goog.exportProperty(ol.layer.Vector.prototype, "once", ol.layer.Vector.prototype.once);
goog.exportProperty(ol.layer.Vector.prototype, "set", ol.layer.Vector.prototype.set);
goog.exportProperty(ol.layer.Vector.prototype, "setBrightness", ol.layer.Vector.prototype.setBrightness);
goog.exportProperty(ol.layer.Vector.prototype, "setContrast", ol.layer.Vector.prototype.setContrast);
goog.exportProperty(ol.layer.Vector.prototype, "setHue", ol.layer.Vector.prototype.setHue);
goog.exportProperty(ol.layer.Vector.prototype, "setMaxResolution", ol.layer.Vector.prototype.setMaxResolution);
goog.exportProperty(ol.layer.Vector.prototype, "setMinResolution", ol.layer.Vector.prototype.setMinResolution);
goog.exportProperty(ol.layer.Vector.prototype, "setOpacity", ol.layer.Vector.prototype.setOpacity);
goog.exportProperty(ol.layer.Vector.prototype, "setSaturation", ol.layer.Vector.prototype.setSaturation);
goog.exportProperty(ol.layer.Vector.prototype, "setStyle", ol.layer.Vector.prototype.setStyle);
goog.exportProperty(ol.layer.Vector.prototype, "setValues", ol.layer.Vector.prototype.setValues);
goog.exportProperty(ol.layer.Vector.prototype, "setVisible", ol.layer.Vector.prototype.setVisible);
goog.exportProperty(ol.layer.Vector.prototype, "un", ol.layer.Vector.prototype.un);
goog.exportProperty(ol.layer.Vector.prototype, "unByKey", ol.layer.Vector.prototype.unByKey);
goog.exportProperty(ol.layer.Vector.prototype, "unbind", ol.layer.Vector.prototype.unbind);
goog.exportProperty(ol.layer.Vector.prototype, "unbindAll", ol.layer.Vector.prototype.unbindAll);
goog.exportSymbol("ol.loadingstrategy.all", ol.loadingstrategy.all);
goog.exportSymbol("ol.loadingstrategy.bbox", ol.loadingstrategy.bbox);
goog.exportSymbol("ol.loadingstrategy.createTile", ol.loadingstrategy.createTile);
goog.exportSymbol("ol.proj.CH", ol.proj.CH);
goog.exportProperty(ol.proj.CH.prototype, "getCode", ol.proj.CH.prototype.getCode);
goog.exportProperty(ol.proj.CH.prototype, "getExtent", ol.proj.CH.prototype.getExtent);
goog.exportProperty(ol.proj.CH.prototype, "getUnits", ol.proj.CH.prototype.getUnits);
goog.exportSymbol("ol.proj.EPSG2056", ol.proj.EPSG2056);
goog.exportProperty(ol.proj.EPSG2056.prototype, "getCode", ol.proj.EPSG2056.prototype.getCode);
goog.exportProperty(ol.proj.EPSG2056.prototype, "getExtent", ol.proj.EPSG2056.prototype.getExtent);
goog.exportProperty(ol.proj.EPSG2056.prototype, "getUnits", ol.proj.EPSG2056.prototype.getUnits);
goog.exportSymbol("ol.proj.EPSG21781", ol.proj.EPSG21781);
goog.exportProperty(ol.proj.EPSG21781.prototype, "getCode", ol.proj.EPSG21781.prototype.getCode);
goog.exportProperty(ol.proj.EPSG21781.prototype, "getExtent", ol.proj.EPSG21781.prototype.getExtent);
goog.exportProperty(ol.proj.EPSG21781.prototype, "getUnits", ol.proj.EPSG21781.prototype.getUnits);
goog.exportSymbol("ol.proj.EPSG3857", ol.proj.EPSG3857);
goog.exportProperty(ol.proj.EPSG3857.prototype, "getCode", ol.proj.EPSG3857.prototype.getCode);
goog.exportProperty(ol.proj.EPSG3857.prototype, "getExtent", ol.proj.EPSG3857.prototype.getExtent);
goog.exportProperty(ol.proj.EPSG3857.prototype, "getUnits", ol.proj.EPSG3857.prototype.getUnits);
goog.exportSymbol("ol.proj.EPSG4326", ol.proj.EPSG4326);
goog.exportProperty(ol.proj.EPSG4326.prototype, "getCode", ol.proj.EPSG4326.prototype.getCode);
goog.exportProperty(ol.proj.EPSG4326.prototype, "getExtent", ol.proj.EPSG4326.prototype.getExtent);
goog.exportProperty(ol.proj.EPSG4326.prototype, "getUnits", ol.proj.EPSG4326.prototype.getUnits);
goog.exportSymbol("ol.proj.METERS_PER_UNIT[undefined]", ol.proj.METERS_PER_UNIT[undefined]);
goog.exportSymbol("ol.proj.Projection", ol.proj.Projection);
goog.exportProperty(ol.proj.Projection.prototype, "getCode", ol.proj.Projection.prototype.getCode);
goog.exportProperty(ol.proj.Projection.prototype, "getExtent", ol.proj.Projection.prototype.getExtent);
goog.exportProperty(ol.proj.Projection.prototype, "getUnits", ol.proj.Projection.prototype.getUnits);
goog.exportSymbol("ol.proj.addProjection", ol.proj.addProjection);
goog.exportSymbol("ol.proj.common.add", ol.proj.common.add);
goog.exportSymbol("ol.proj.configureProj4jsProjection", ol.proj.configureProj4jsProjection);
goog.exportSymbol("ol.proj.get", ol.proj.get);
goog.exportSymbol("ol.proj.getTransform", ol.proj.getTransform);
goog.exportSymbol("ol.proj.getTransformFromProjections", ol.proj.getTransformFromProjections);
goog.exportSymbol("ol.proj.transform", ol.proj.transform);
goog.exportSymbol("ol.proj.transformWithProjections", ol.proj.transformWithProjections);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawAsync", ol.render.canvas.Immediate.prototype.drawAsync);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawCircleGeometry", ol.render.canvas.Immediate.prototype.drawCircleGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawFeature", ol.render.canvas.Immediate.prototype.drawFeature);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawLineStringGeometry", ol.render.canvas.Immediate.prototype.drawLineStringGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawMultiLineStringGeometry", ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawMultiPointGeometry", ol.render.canvas.Immediate.prototype.drawMultiPointGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawMultiPolygonGeometry", ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawPointGeometry", ol.render.canvas.Immediate.prototype.drawPointGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "drawPolygonGeometry", ol.render.canvas.Immediate.prototype.drawPolygonGeometry);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "setFillStrokeStyle", ol.render.canvas.Immediate.prototype.setFillStrokeStyle);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "setImageStyle", ol.render.canvas.Immediate.prototype.setImageStyle);
goog.exportProperty(ol.render.canvas.Immediate.prototype, "setTextStyle", ol.render.canvas.Immediate.prototype.setTextStyle);
goog.exportSymbol("ol.source.BingMaps", ol.source.BingMaps);
goog.exportProperty(ol.source.BingMaps.prototype, "dispatchChangeEvent", ol.source.BingMaps.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.BingMaps.prototype, "getState", ol.source.BingMaps.prototype.getState);
goog.exportProperty(ol.source.BingMaps.prototype, "getTileGrid", ol.source.BingMaps.prototype.getTileGrid);
goog.exportProperty(ol.source.BingMaps.prototype, "on", ol.source.BingMaps.prototype.on);
goog.exportProperty(ol.source.BingMaps.prototype, "once", ol.source.BingMaps.prototype.once);
goog.exportProperty(ol.source.BingMaps.prototype, "un", ol.source.BingMaps.prototype.un);
goog.exportProperty(ol.source.BingMaps.prototype, "unByKey", ol.source.BingMaps.prototype.unByKey);
goog.exportSymbol("ol.source.BingMaps.TOS_ATTRIBUTION", ol.source.BingMaps.TOS_ATTRIBUTION);
goog.exportProperty(ol.source.FormatVector.prototype, "addFeature", ol.source.FormatVector.prototype.addFeature);
goog.exportProperty(ol.source.FormatVector.prototype, "addFeatures", ol.source.FormatVector.prototype.addFeatures);
goog.exportProperty(ol.source.FormatVector.prototype, "dispatchChangeEvent", ol.source.FormatVector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.FormatVector.prototype, "forEachFeature", ol.source.FormatVector.prototype.forEachFeature);
goog.exportProperty(ol.source.FormatVector.prototype, "forEachFeatureInExtent", ol.source.FormatVector.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.FormatVector.prototype, "getClosestFeatureToCoordinate", ol.source.FormatVector.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.FormatVector.prototype, "getExtent", ol.source.FormatVector.prototype.getExtent);
goog.exportProperty(ol.source.FormatVector.prototype, "getFeatures", ol.source.FormatVector.prototype.getFeatures);
goog.exportProperty(ol.source.FormatVector.prototype, "getFeaturesAtCoordinate", ol.source.FormatVector.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.FormatVector.prototype, "getState", ol.source.FormatVector.prototype.getState);
goog.exportProperty(ol.source.FormatVector.prototype, "on", ol.source.FormatVector.prototype.on);
goog.exportProperty(ol.source.FormatVector.prototype, "once", ol.source.FormatVector.prototype.once);
goog.exportProperty(ol.source.FormatVector.prototype, "removeFeature", ol.source.FormatVector.prototype.removeFeature);
goog.exportProperty(ol.source.FormatVector.prototype, "un", ol.source.FormatVector.prototype.un);
goog.exportProperty(ol.source.FormatVector.prototype, "unByKey", ol.source.FormatVector.prototype.unByKey);
goog.exportSymbol("ol.source.GPX", ol.source.GPX);
goog.exportProperty(ol.source.GPX.prototype, "addFeature", ol.source.GPX.prototype.addFeature);
goog.exportProperty(ol.source.GPX.prototype, "addFeatures", ol.source.GPX.prototype.addFeatures);
goog.exportProperty(ol.source.GPX.prototype, "dispatchChangeEvent", ol.source.GPX.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.GPX.prototype, "forEachFeature", ol.source.GPX.prototype.forEachFeature);
goog.exportProperty(ol.source.GPX.prototype, "forEachFeatureInExtent", ol.source.GPX.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.GPX.prototype, "getClosestFeatureToCoordinate", ol.source.GPX.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.GPX.prototype, "getExtent", ol.source.GPX.prototype.getExtent);
goog.exportProperty(ol.source.GPX.prototype, "getFeatures", ol.source.GPX.prototype.getFeatures);
goog.exportProperty(ol.source.GPX.prototype, "getFeaturesAtCoordinate", ol.source.GPX.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.GPX.prototype, "getState", ol.source.GPX.prototype.getState);
goog.exportProperty(ol.source.GPX.prototype, "on", ol.source.GPX.prototype.on);
goog.exportProperty(ol.source.GPX.prototype, "once", ol.source.GPX.prototype.once);
goog.exportProperty(ol.source.GPX.prototype, "removeFeature", ol.source.GPX.prototype.removeFeature);
goog.exportProperty(ol.source.GPX.prototype, "un", ol.source.GPX.prototype.un);
goog.exportProperty(ol.source.GPX.prototype, "unByKey", ol.source.GPX.prototype.unByKey);
goog.exportSymbol("ol.source.GeoJSON", ol.source.GeoJSON);
goog.exportProperty(ol.source.GeoJSON.prototype, "addFeature", ol.source.GeoJSON.prototype.addFeature);
goog.exportProperty(ol.source.GeoJSON.prototype, "addFeatures", ol.source.GeoJSON.prototype.addFeatures);
goog.exportProperty(ol.source.GeoJSON.prototype, "dispatchChangeEvent", ol.source.GeoJSON.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.GeoJSON.prototype, "forEachFeature", ol.source.GeoJSON.prototype.forEachFeature);
goog.exportProperty(ol.source.GeoJSON.prototype, "forEachFeatureInExtent", ol.source.GeoJSON.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.GeoJSON.prototype, "getClosestFeatureToCoordinate", ol.source.GeoJSON.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.GeoJSON.prototype, "getExtent", ol.source.GeoJSON.prototype.getExtent);
goog.exportProperty(ol.source.GeoJSON.prototype, "getFeatures", ol.source.GeoJSON.prototype.getFeatures);
goog.exportProperty(ol.source.GeoJSON.prototype, "getFeaturesAtCoordinate", ol.source.GeoJSON.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.GeoJSON.prototype, "getState", ol.source.GeoJSON.prototype.getState);
goog.exportProperty(ol.source.GeoJSON.prototype, "on", ol.source.GeoJSON.prototype.on);
goog.exportProperty(ol.source.GeoJSON.prototype, "once", ol.source.GeoJSON.prototype.once);
goog.exportProperty(ol.source.GeoJSON.prototype, "removeFeature", ol.source.GeoJSON.prototype.removeFeature);
goog.exportProperty(ol.source.GeoJSON.prototype, "un", ol.source.GeoJSON.prototype.un);
goog.exportProperty(ol.source.GeoJSON.prototype, "unByKey", ol.source.GeoJSON.prototype.unByKey);
goog.exportSymbol("ol.source.IGC", ol.source.IGC);
goog.exportProperty(ol.source.IGC.prototype, "addFeature", ol.source.IGC.prototype.addFeature);
goog.exportProperty(ol.source.IGC.prototype, "addFeatures", ol.source.IGC.prototype.addFeatures);
goog.exportProperty(ol.source.IGC.prototype, "dispatchChangeEvent", ol.source.IGC.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.IGC.prototype, "forEachFeature", ol.source.IGC.prototype.forEachFeature);
goog.exportProperty(ol.source.IGC.prototype, "forEachFeatureInExtent", ol.source.IGC.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.IGC.prototype, "getClosestFeatureToCoordinate", ol.source.IGC.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.IGC.prototype, "getExtent", ol.source.IGC.prototype.getExtent);
goog.exportProperty(ol.source.IGC.prototype, "getFeatures", ol.source.IGC.prototype.getFeatures);
goog.exportProperty(ol.source.IGC.prototype, "getFeaturesAtCoordinate", ol.source.IGC.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.IGC.prototype, "getState", ol.source.IGC.prototype.getState);
goog.exportProperty(ol.source.IGC.prototype, "on", ol.source.IGC.prototype.on);
goog.exportProperty(ol.source.IGC.prototype, "once", ol.source.IGC.prototype.once);
goog.exportProperty(ol.source.IGC.prototype, "removeFeature", ol.source.IGC.prototype.removeFeature);
goog.exportProperty(ol.source.IGC.prototype, "un", ol.source.IGC.prototype.un);
goog.exportProperty(ol.source.IGC.prototype, "unByKey", ol.source.IGC.prototype.unByKey);
goog.exportProperty(ol.source.Image.prototype, "dispatchChangeEvent", ol.source.Image.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Image.prototype, "getState", ol.source.Image.prototype.getState);
goog.exportProperty(ol.source.Image.prototype, "on", ol.source.Image.prototype.on);
goog.exportProperty(ol.source.Image.prototype, "once", ol.source.Image.prototype.once);
goog.exportProperty(ol.source.Image.prototype, "un", ol.source.Image.prototype.un);
goog.exportProperty(ol.source.Image.prototype, "unByKey", ol.source.Image.prototype.unByKey);
goog.exportSymbol("ol.source.ImageCanvas", ol.source.ImageCanvas);
goog.exportProperty(ol.source.ImageCanvas.prototype, "dispatchChangeEvent", ol.source.ImageCanvas.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.ImageCanvas.prototype, "getState", ol.source.ImageCanvas.prototype.getState);
goog.exportProperty(ol.source.ImageCanvas.prototype, "on", ol.source.ImageCanvas.prototype.on);
goog.exportProperty(ol.source.ImageCanvas.prototype, "once", ol.source.ImageCanvas.prototype.once);
goog.exportProperty(ol.source.ImageCanvas.prototype, "un", ol.source.ImageCanvas.prototype.un);
goog.exportProperty(ol.source.ImageCanvas.prototype, "unByKey", ol.source.ImageCanvas.prototype.unByKey);
goog.exportSymbol("ol.source.ImageStatic", ol.source.ImageStatic);
goog.exportProperty(ol.source.ImageStatic.prototype, "dispatchChangeEvent", ol.source.ImageStatic.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.ImageStatic.prototype, "getState", ol.source.ImageStatic.prototype.getState);
goog.exportProperty(ol.source.ImageStatic.prototype, "on", ol.source.ImageStatic.prototype.on);
goog.exportProperty(ol.source.ImageStatic.prototype, "once", ol.source.ImageStatic.prototype.once);
goog.exportProperty(ol.source.ImageStatic.prototype, "un", ol.source.ImageStatic.prototype.un);
goog.exportProperty(ol.source.ImageStatic.prototype, "unByKey", ol.source.ImageStatic.prototype.unByKey);
goog.exportSymbol("ol.source.ImageVector", ol.source.ImageVector);
goog.exportProperty(ol.source.ImageVector.prototype, "dispatchChangeEvent", ol.source.ImageVector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.ImageVector.prototype, "getSource", ol.source.ImageVector.prototype.getSource);
goog.exportProperty(ol.source.ImageVector.prototype, "getState", ol.source.ImageVector.prototype.getState);
goog.exportProperty(ol.source.ImageVector.prototype, "on", ol.source.ImageVector.prototype.on);
goog.exportProperty(ol.source.ImageVector.prototype, "once", ol.source.ImageVector.prototype.once);
goog.exportProperty(ol.source.ImageVector.prototype, "un", ol.source.ImageVector.prototype.un);
goog.exportProperty(ol.source.ImageVector.prototype, "unByKey", ol.source.ImageVector.prototype.unByKey);
goog.exportSymbol("ol.source.ImageWMS", ol.source.ImageWMS);
goog.exportProperty(ol.source.ImageWMS.prototype, "dispatchChangeEvent", ol.source.ImageWMS.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.ImageWMS.prototype, "getGetFeatureInfoUrl", ol.source.ImageWMS.prototype.getGetFeatureInfoUrl);
goog.exportProperty(ol.source.ImageWMS.prototype, "getParams", ol.source.ImageWMS.prototype.getParams);
goog.exportProperty(ol.source.ImageWMS.prototype, "getState", ol.source.ImageWMS.prototype.getState);
goog.exportProperty(ol.source.ImageWMS.prototype, "getUrl", ol.source.ImageWMS.prototype.getUrl);
goog.exportProperty(ol.source.ImageWMS.prototype, "on", ol.source.ImageWMS.prototype.on);
goog.exportProperty(ol.source.ImageWMS.prototype, "once", ol.source.ImageWMS.prototype.once);
goog.exportProperty(ol.source.ImageWMS.prototype, "setUrl", ol.source.ImageWMS.prototype.setUrl);
goog.exportProperty(ol.source.ImageWMS.prototype, "un", ol.source.ImageWMS.prototype.un);
goog.exportProperty(ol.source.ImageWMS.prototype, "unByKey", ol.source.ImageWMS.prototype.unByKey);
goog.exportProperty(ol.source.ImageWMS.prototype, "updateParams", ol.source.ImageWMS.prototype.updateParams);
goog.exportSymbol("ol.source.KML", ol.source.KML);
goog.exportProperty(ol.source.KML.prototype, "addFeature", ol.source.KML.prototype.addFeature);
goog.exportProperty(ol.source.KML.prototype, "addFeatures", ol.source.KML.prototype.addFeatures);
goog.exportProperty(ol.source.KML.prototype, "dispatchChangeEvent", ol.source.KML.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.KML.prototype, "forEachFeature", ol.source.KML.prototype.forEachFeature);
goog.exportProperty(ol.source.KML.prototype, "forEachFeatureInExtent", ol.source.KML.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.KML.prototype, "getClosestFeatureToCoordinate", ol.source.KML.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.KML.prototype, "getExtent", ol.source.KML.prototype.getExtent);
goog.exportProperty(ol.source.KML.prototype, "getFeatures", ol.source.KML.prototype.getFeatures);
goog.exportProperty(ol.source.KML.prototype, "getFeaturesAtCoordinate", ol.source.KML.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.KML.prototype, "getState", ol.source.KML.prototype.getState);
goog.exportProperty(ol.source.KML.prototype, "on", ol.source.KML.prototype.on);
goog.exportProperty(ol.source.KML.prototype, "once", ol.source.KML.prototype.once);
goog.exportProperty(ol.source.KML.prototype, "removeFeature", ol.source.KML.prototype.removeFeature);
goog.exportProperty(ol.source.KML.prototype, "un", ol.source.KML.prototype.un);
goog.exportProperty(ol.source.KML.prototype, "unByKey", ol.source.KML.prototype.unByKey);
goog.exportSymbol("ol.source.MapGuide", ol.source.MapGuide);
goog.exportProperty(ol.source.MapGuide.prototype, "dispatchChangeEvent", ol.source.MapGuide.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.MapGuide.prototype, "getState", ol.source.MapGuide.prototype.getState);
goog.exportProperty(ol.source.MapGuide.prototype, "on", ol.source.MapGuide.prototype.on);
goog.exportProperty(ol.source.MapGuide.prototype, "once", ol.source.MapGuide.prototype.once);
goog.exportProperty(ol.source.MapGuide.prototype, "un", ol.source.MapGuide.prototype.un);
goog.exportProperty(ol.source.MapGuide.prototype, "unByKey", ol.source.MapGuide.prototype.unByKey);
goog.exportSymbol("ol.source.MapQuest", ol.source.MapQuest);
goog.exportProperty(ol.source.MapQuest.prototype, "dispatchChangeEvent", ol.source.MapQuest.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.MapQuest.prototype, "getState", ol.source.MapQuest.prototype.getState);
goog.exportProperty(ol.source.MapQuest.prototype, "getTileGrid", ol.source.MapQuest.prototype.getTileGrid);
goog.exportProperty(ol.source.MapQuest.prototype, "on", ol.source.MapQuest.prototype.on);
goog.exportProperty(ol.source.MapQuest.prototype, "once", ol.source.MapQuest.prototype.once);
goog.exportProperty(ol.source.MapQuest.prototype, "setUrl", ol.source.MapQuest.prototype.setUrl);
goog.exportProperty(ol.source.MapQuest.prototype, "un", ol.source.MapQuest.prototype.un);
goog.exportProperty(ol.source.MapQuest.prototype, "unByKey", ol.source.MapQuest.prototype.unByKey);
goog.exportSymbol("ol.source.OSM", ol.source.OSM);
goog.exportProperty(ol.source.OSM.prototype, "dispatchChangeEvent", ol.source.OSM.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.OSM.prototype, "getState", ol.source.OSM.prototype.getState);
goog.exportProperty(ol.source.OSM.prototype, "getTileGrid", ol.source.OSM.prototype.getTileGrid);
goog.exportProperty(ol.source.OSM.prototype, "on", ol.source.OSM.prototype.on);
goog.exportProperty(ol.source.OSM.prototype, "once", ol.source.OSM.prototype.once);
goog.exportProperty(ol.source.OSM.prototype, "setUrl", ol.source.OSM.prototype.setUrl);
goog.exportProperty(ol.source.OSM.prototype, "un", ol.source.OSM.prototype.un);
goog.exportProperty(ol.source.OSM.prototype, "unByKey", ol.source.OSM.prototype.unByKey);
goog.exportSymbol("ol.source.OSM.DATA_ATTRIBUTION", ol.source.OSM.DATA_ATTRIBUTION);
goog.exportSymbol("ol.source.OSM.TILE_ATTRIBUTION", ol.source.OSM.TILE_ATTRIBUTION);
goog.exportSymbol("ol.source.OSMXML", ol.source.OSMXML);
goog.exportProperty(ol.source.OSMXML.prototype, "addFeature", ol.source.OSMXML.prototype.addFeature);
goog.exportProperty(ol.source.OSMXML.prototype, "addFeatures", ol.source.OSMXML.prototype.addFeatures);
goog.exportProperty(ol.source.OSMXML.prototype, "dispatchChangeEvent", ol.source.OSMXML.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.OSMXML.prototype, "forEachFeature", ol.source.OSMXML.prototype.forEachFeature);
goog.exportProperty(ol.source.OSMXML.prototype, "forEachFeatureInExtent", ol.source.OSMXML.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.OSMXML.prototype, "getClosestFeatureToCoordinate", ol.source.OSMXML.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.OSMXML.prototype, "getExtent", ol.source.OSMXML.prototype.getExtent);
goog.exportProperty(ol.source.OSMXML.prototype, "getFeatures", ol.source.OSMXML.prototype.getFeatures);
goog.exportProperty(ol.source.OSMXML.prototype, "getFeaturesAtCoordinate", ol.source.OSMXML.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.OSMXML.prototype, "getState", ol.source.OSMXML.prototype.getState);
goog.exportProperty(ol.source.OSMXML.prototype, "on", ol.source.OSMXML.prototype.on);
goog.exportProperty(ol.source.OSMXML.prototype, "once", ol.source.OSMXML.prototype.once);
goog.exportProperty(ol.source.OSMXML.prototype, "removeFeature", ol.source.OSMXML.prototype.removeFeature);
goog.exportProperty(ol.source.OSMXML.prototype, "un", ol.source.OSMXML.prototype.un);
goog.exportProperty(ol.source.OSMXML.prototype, "unByKey", ol.source.OSMXML.prototype.unByKey);
goog.exportSymbol("ol.source.ServerVector", ol.source.ServerVector);
goog.exportProperty(ol.source.ServerVector.prototype, "addFeature", ol.source.ServerVector.prototype.addFeature);
goog.exportProperty(ol.source.ServerVector.prototype, "addFeatures", ol.source.ServerVector.prototype.addFeatures);
goog.exportProperty(ol.source.ServerVector.prototype, "dispatchChangeEvent", ol.source.ServerVector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.ServerVector.prototype, "forEachFeature", ol.source.ServerVector.prototype.forEachFeature);
goog.exportProperty(ol.source.ServerVector.prototype, "forEachFeatureInExtent", ol.source.ServerVector.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.ServerVector.prototype, "getClosestFeatureToCoordinate", ol.source.ServerVector.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.ServerVector.prototype, "getExtent", ol.source.ServerVector.prototype.getExtent);
goog.exportProperty(ol.source.ServerVector.prototype, "getFeatures", ol.source.ServerVector.prototype.getFeatures);
goog.exportProperty(ol.source.ServerVector.prototype, "getFeaturesAtCoordinate", ol.source.ServerVector.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.ServerVector.prototype, "getState", ol.source.ServerVector.prototype.getState);
goog.exportProperty(ol.source.ServerVector.prototype, "on", ol.source.ServerVector.prototype.on);
goog.exportProperty(ol.source.ServerVector.prototype, "once", ol.source.ServerVector.prototype.once);
goog.exportProperty(ol.source.ServerVector.prototype, "readFeatures", ol.source.ServerVector.prototype.readFeatures);
goog.exportProperty(ol.source.ServerVector.prototype, "removeFeature", ol.source.ServerVector.prototype.removeFeature);
goog.exportProperty(ol.source.ServerVector.prototype, "un", ol.source.ServerVector.prototype.un);
goog.exportProperty(ol.source.ServerVector.prototype, "unByKey", ol.source.ServerVector.prototype.unByKey);
goog.exportProperty(ol.source.Source.prototype, "dispatchChangeEvent", ol.source.Source.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Source.prototype, "getState", ol.source.Source.prototype.getState);
goog.exportProperty(ol.source.Source.prototype, "on", ol.source.Source.prototype.on);
goog.exportProperty(ol.source.Source.prototype, "once", ol.source.Source.prototype.once);
goog.exportProperty(ol.source.Source.prototype, "un", ol.source.Source.prototype.un);
goog.exportProperty(ol.source.Source.prototype, "unByKey", ol.source.Source.prototype.unByKey);
goog.exportSymbol("ol.source.Stamen", ol.source.Stamen);
goog.exportProperty(ol.source.Stamen.prototype, "dispatchChangeEvent", ol.source.Stamen.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Stamen.prototype, "getState", ol.source.Stamen.prototype.getState);
goog.exportProperty(ol.source.Stamen.prototype, "getTileGrid", ol.source.Stamen.prototype.getTileGrid);
goog.exportProperty(ol.source.Stamen.prototype, "on", ol.source.Stamen.prototype.on);
goog.exportProperty(ol.source.Stamen.prototype, "once", ol.source.Stamen.prototype.once);
goog.exportProperty(ol.source.Stamen.prototype, "setUrl", ol.source.Stamen.prototype.setUrl);
goog.exportProperty(ol.source.Stamen.prototype, "un", ol.source.Stamen.prototype.un);
goog.exportProperty(ol.source.Stamen.prototype, "unByKey", ol.source.Stamen.prototype.unByKey);
goog.exportSymbol("ol.source.StaticVector", ol.source.StaticVector);
goog.exportProperty(ol.source.StaticVector.prototype, "addFeature", ol.source.StaticVector.prototype.addFeature);
goog.exportProperty(ol.source.StaticVector.prototype, "addFeatures", ol.source.StaticVector.prototype.addFeatures);
goog.exportProperty(ol.source.StaticVector.prototype, "dispatchChangeEvent", ol.source.StaticVector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.StaticVector.prototype, "forEachFeature", ol.source.StaticVector.prototype.forEachFeature);
goog.exportProperty(ol.source.StaticVector.prototype, "forEachFeatureInExtent", ol.source.StaticVector.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.StaticVector.prototype, "getClosestFeatureToCoordinate", ol.source.StaticVector.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.StaticVector.prototype, "getExtent", ol.source.StaticVector.prototype.getExtent);
goog.exportProperty(ol.source.StaticVector.prototype, "getFeatures", ol.source.StaticVector.prototype.getFeatures);
goog.exportProperty(ol.source.StaticVector.prototype, "getFeaturesAtCoordinate", ol.source.StaticVector.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.StaticVector.prototype, "getState", ol.source.StaticVector.prototype.getState);
goog.exportProperty(ol.source.StaticVector.prototype, "on", ol.source.StaticVector.prototype.on);
goog.exportProperty(ol.source.StaticVector.prototype, "once", ol.source.StaticVector.prototype.once);
goog.exportProperty(ol.source.StaticVector.prototype, "removeFeature", ol.source.StaticVector.prototype.removeFeature);
goog.exportProperty(ol.source.StaticVector.prototype, "un", ol.source.StaticVector.prototype.un);
goog.exportProperty(ol.source.StaticVector.prototype, "unByKey", ol.source.StaticVector.prototype.unByKey);
goog.exportSymbol("ol.source.Tile", ol.source.Tile);
goog.exportProperty(ol.source.Tile.prototype, "dispatchChangeEvent", ol.source.Tile.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Tile.prototype, "getState", ol.source.Tile.prototype.getState);
goog.exportProperty(ol.source.Tile.prototype, "getTileGrid", ol.source.Tile.prototype.getTileGrid);
goog.exportProperty(ol.source.Tile.prototype, "on", ol.source.Tile.prototype.on);
goog.exportProperty(ol.source.Tile.prototype, "once", ol.source.Tile.prototype.once);
goog.exportProperty(ol.source.Tile.prototype, "un", ol.source.Tile.prototype.un);
goog.exportProperty(ol.source.Tile.prototype, "unByKey", ol.source.Tile.prototype.unByKey);
goog.exportSymbol("ol.source.TileDebug", ol.source.TileDebug);
goog.exportProperty(ol.source.TileDebug.prototype, "dispatchChangeEvent", ol.source.TileDebug.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TileDebug.prototype, "getState", ol.source.TileDebug.prototype.getState);
goog.exportProperty(ol.source.TileDebug.prototype, "getTileGrid", ol.source.TileDebug.prototype.getTileGrid);
goog.exportProperty(ol.source.TileDebug.prototype, "on", ol.source.TileDebug.prototype.on);
goog.exportProperty(ol.source.TileDebug.prototype, "once", ol.source.TileDebug.prototype.once);
goog.exportProperty(ol.source.TileDebug.prototype, "un", ol.source.TileDebug.prototype.un);
goog.exportProperty(ol.source.TileDebug.prototype, "unByKey", ol.source.TileDebug.prototype.unByKey);
goog.exportSymbol("ol.source.TileImage", ol.source.TileImage);
goog.exportProperty(ol.source.TileImage.prototype, "dispatchChangeEvent", ol.source.TileImage.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TileImage.prototype, "getState", ol.source.TileImage.prototype.getState);
goog.exportProperty(ol.source.TileImage.prototype, "getTileGrid", ol.source.TileImage.prototype.getTileGrid);
goog.exportProperty(ol.source.TileImage.prototype, "on", ol.source.TileImage.prototype.on);
goog.exportProperty(ol.source.TileImage.prototype, "once", ol.source.TileImage.prototype.once);
goog.exportProperty(ol.source.TileImage.prototype, "un", ol.source.TileImage.prototype.un);
goog.exportProperty(ol.source.TileImage.prototype, "unByKey", ol.source.TileImage.prototype.unByKey);
goog.exportSymbol("ol.source.TileJSON", ol.source.TileJSON);
goog.exportProperty(ol.source.TileJSON.prototype, "dispatchChangeEvent", ol.source.TileJSON.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TileJSON.prototype, "getState", ol.source.TileJSON.prototype.getState);
goog.exportProperty(ol.source.TileJSON.prototype, "getTileGrid", ol.source.TileJSON.prototype.getTileGrid);
goog.exportProperty(ol.source.TileJSON.prototype, "on", ol.source.TileJSON.prototype.on);
goog.exportProperty(ol.source.TileJSON.prototype, "once", ol.source.TileJSON.prototype.once);
goog.exportProperty(ol.source.TileJSON.prototype, "un", ol.source.TileJSON.prototype.un);
goog.exportProperty(ol.source.TileJSON.prototype, "unByKey", ol.source.TileJSON.prototype.unByKey);
goog.exportSymbol("ol.source.TileVector", ol.source.TileVector);
goog.exportProperty(ol.source.TileVector.prototype, "dispatchChangeEvent", ol.source.TileVector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TileVector.prototype, "getFeaturesAtCoordinate", ol.source.TileVector.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.TileVector.prototype, "getState", ol.source.TileVector.prototype.getState);
goog.exportProperty(ol.source.TileVector.prototype, "on", ol.source.TileVector.prototype.on);
goog.exportProperty(ol.source.TileVector.prototype, "once", ol.source.TileVector.prototype.once);
goog.exportProperty(ol.source.TileVector.prototype, "un", ol.source.TileVector.prototype.un);
goog.exportProperty(ol.source.TileVector.prototype, "unByKey", ol.source.TileVector.prototype.unByKey);
goog.exportSymbol("ol.source.TileWMS", ol.source.TileWMS);
goog.exportProperty(ol.source.TileWMS.prototype, "dispatchChangeEvent", ol.source.TileWMS.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TileWMS.prototype, "getGetFeatureInfoUrl", ol.source.TileWMS.prototype.getGetFeatureInfoUrl);
goog.exportProperty(ol.source.TileWMS.prototype, "getParams", ol.source.TileWMS.prototype.getParams);
goog.exportProperty(ol.source.TileWMS.prototype, "getState", ol.source.TileWMS.prototype.getState);
goog.exportProperty(ol.source.TileWMS.prototype, "getTileGrid", ol.source.TileWMS.prototype.getTileGrid);
goog.exportProperty(ol.source.TileWMS.prototype, "getUrls", ol.source.TileWMS.prototype.getUrls);
goog.exportProperty(ol.source.TileWMS.prototype, "on", ol.source.TileWMS.prototype.on);
goog.exportProperty(ol.source.TileWMS.prototype, "once", ol.source.TileWMS.prototype.once);
goog.exportProperty(ol.source.TileWMS.prototype, "un", ol.source.TileWMS.prototype.un);
goog.exportProperty(ol.source.TileWMS.prototype, "unByKey", ol.source.TileWMS.prototype.unByKey);
goog.exportProperty(ol.source.TileWMS.prototype, "updateParams", ol.source.TileWMS.prototype.updateParams);
goog.exportSymbol("ol.source.TopoJSON", ol.source.TopoJSON);
goog.exportProperty(ol.source.TopoJSON.prototype, "addFeature", ol.source.TopoJSON.prototype.addFeature);
goog.exportProperty(ol.source.TopoJSON.prototype, "addFeatures", ol.source.TopoJSON.prototype.addFeatures);
goog.exportProperty(ol.source.TopoJSON.prototype, "dispatchChangeEvent", ol.source.TopoJSON.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.TopoJSON.prototype, "forEachFeature", ol.source.TopoJSON.prototype.forEachFeature);
goog.exportProperty(ol.source.TopoJSON.prototype, "forEachFeatureInExtent", ol.source.TopoJSON.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.TopoJSON.prototype, "getClosestFeatureToCoordinate", ol.source.TopoJSON.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.TopoJSON.prototype, "getExtent", ol.source.TopoJSON.prototype.getExtent);
goog.exportProperty(ol.source.TopoJSON.prototype, "getFeatures", ol.source.TopoJSON.prototype.getFeatures);
goog.exportProperty(ol.source.TopoJSON.prototype, "getFeaturesAtCoordinate", ol.source.TopoJSON.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.TopoJSON.prototype, "getState", ol.source.TopoJSON.prototype.getState);
goog.exportProperty(ol.source.TopoJSON.prototype, "on", ol.source.TopoJSON.prototype.on);
goog.exportProperty(ol.source.TopoJSON.prototype, "once", ol.source.TopoJSON.prototype.once);
goog.exportProperty(ol.source.TopoJSON.prototype, "removeFeature", ol.source.TopoJSON.prototype.removeFeature);
goog.exportProperty(ol.source.TopoJSON.prototype, "un", ol.source.TopoJSON.prototype.un);
goog.exportProperty(ol.source.TopoJSON.prototype, "unByKey", ol.source.TopoJSON.prototype.unByKey);
goog.exportSymbol("ol.source.Vector", ol.source.Vector);
goog.exportProperty(ol.source.Vector.prototype, "addFeature", ol.source.Vector.prototype.addFeature);
goog.exportProperty(ol.source.Vector.prototype, "addFeatures", ol.source.Vector.prototype.addFeatures);
goog.exportProperty(ol.source.Vector.prototype, "dispatchChangeEvent", ol.source.Vector.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Vector.prototype, "forEachFeature", ol.source.Vector.prototype.forEachFeature);
goog.exportProperty(ol.source.Vector.prototype, "forEachFeatureInExtent", ol.source.Vector.prototype.forEachFeatureInExtent);
goog.exportProperty(ol.source.Vector.prototype, "getClosestFeatureToCoordinate", ol.source.Vector.prototype.getClosestFeatureToCoordinate);
goog.exportProperty(ol.source.Vector.prototype, "getExtent", ol.source.Vector.prototype.getExtent);
goog.exportProperty(ol.source.Vector.prototype, "getFeatures", ol.source.Vector.prototype.getFeatures);
goog.exportProperty(ol.source.Vector.prototype, "getFeaturesAtCoordinate", ol.source.Vector.prototype.getFeaturesAtCoordinate);
goog.exportProperty(ol.source.Vector.prototype, "getState", ol.source.Vector.prototype.getState);
goog.exportProperty(ol.source.Vector.prototype, "on", ol.source.Vector.prototype.on);
goog.exportProperty(ol.source.Vector.prototype, "once", ol.source.Vector.prototype.once);
goog.exportProperty(ol.source.Vector.prototype, "removeFeature", ol.source.Vector.prototype.removeFeature);
goog.exportProperty(ol.source.Vector.prototype, "un", ol.source.Vector.prototype.un);
goog.exportProperty(ol.source.Vector.prototype, "unByKey", ol.source.Vector.prototype.unByKey);
goog.exportSymbol("ol.source.WMTS", ol.source.WMTS);
goog.exportProperty(ol.source.WMTS.prototype, "dispatchChangeEvent", ol.source.WMTS.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.WMTS.prototype, "getDimensions", ol.source.WMTS.prototype.getDimensions);
goog.exportProperty(ol.source.WMTS.prototype, "getState", ol.source.WMTS.prototype.getState);
goog.exportProperty(ol.source.WMTS.prototype, "getTileGrid", ol.source.WMTS.prototype.getTileGrid);
goog.exportProperty(ol.source.WMTS.prototype, "on", ol.source.WMTS.prototype.on);
goog.exportProperty(ol.source.WMTS.prototype, "once", ol.source.WMTS.prototype.once);
goog.exportProperty(ol.source.WMTS.prototype, "un", ol.source.WMTS.prototype.un);
goog.exportProperty(ol.source.WMTS.prototype, "unByKey", ol.source.WMTS.prototype.unByKey);
goog.exportProperty(ol.source.WMTS.prototype, "updateDimensions", ol.source.WMTS.prototype.updateDimensions);
goog.exportSymbol("ol.source.WMTS.optionsFromCapabilities", ol.source.WMTS.optionsFromCapabilities);
goog.exportSymbol("ol.source.XYZ", ol.source.XYZ);
goog.exportProperty(ol.source.XYZ.prototype, "dispatchChangeEvent", ol.source.XYZ.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.XYZ.prototype, "getState", ol.source.XYZ.prototype.getState);
goog.exportProperty(ol.source.XYZ.prototype, "getTileGrid", ol.source.XYZ.prototype.getTileGrid);
goog.exportProperty(ol.source.XYZ.prototype, "on", ol.source.XYZ.prototype.on);
goog.exportProperty(ol.source.XYZ.prototype, "once", ol.source.XYZ.prototype.once);
goog.exportProperty(ol.source.XYZ.prototype, "setUrl", ol.source.XYZ.prototype.setUrl);
goog.exportProperty(ol.source.XYZ.prototype, "un", ol.source.XYZ.prototype.un);
goog.exportProperty(ol.source.XYZ.prototype, "unByKey", ol.source.XYZ.prototype.unByKey);
goog.exportSymbol("ol.source.Zoomify", ol.source.Zoomify);
goog.exportProperty(ol.source.Zoomify.prototype, "dispatchChangeEvent", ol.source.Zoomify.prototype.dispatchChangeEvent);
goog.exportProperty(ol.source.Zoomify.prototype, "getState", ol.source.Zoomify.prototype.getState);
goog.exportProperty(ol.source.Zoomify.prototype, "getTileGrid", ol.source.Zoomify.prototype.getTileGrid);
goog.exportProperty(ol.source.Zoomify.prototype, "on", ol.source.Zoomify.prototype.on);
goog.exportProperty(ol.source.Zoomify.prototype, "once", ol.source.Zoomify.prototype.once);
goog.exportProperty(ol.source.Zoomify.prototype, "un", ol.source.Zoomify.prototype.un);
goog.exportProperty(ol.source.Zoomify.prototype, "unByKey", ol.source.Zoomify.prototype.unByKey);
goog.exportSymbol("ol.sphere.WGS84", ol.sphere.WGS84);
goog.exportSymbol("ol.style.Circle", ol.style.Circle);
goog.exportProperty(ol.style.Circle.prototype, "getAnchor", ol.style.Circle.prototype.getAnchor);
goog.exportProperty(ol.style.Circle.prototype, "getFill", ol.style.Circle.prototype.getFill);
goog.exportProperty(ol.style.Circle.prototype, "getImage", ol.style.Circle.prototype.getImage);
goog.exportProperty(ol.style.Circle.prototype, "getRadius", ol.style.Circle.prototype.getRadius);
goog.exportProperty(ol.style.Circle.prototype, "getRotation", ol.style.Circle.prototype.getRotation);
goog.exportProperty(ol.style.Circle.prototype, "getScale", ol.style.Circle.prototype.getScale);
goog.exportProperty(ol.style.Circle.prototype, "getSize", ol.style.Circle.prototype.getSize);
goog.exportProperty(ol.style.Circle.prototype, "getStroke", ol.style.Circle.prototype.getStroke);
goog.exportSymbol("ol.style.Fill", ol.style.Fill);
goog.exportProperty(ol.style.Fill.prototype, "getColor", ol.style.Fill.prototype.getColor);
goog.exportSymbol("ol.style.Icon", ol.style.Icon);
goog.exportProperty(ol.style.Icon.prototype, "getAnchor", ol.style.Icon.prototype.getAnchor);
goog.exportProperty(ol.style.Icon.prototype, "getImage", ol.style.Icon.prototype.getImage);
goog.exportProperty(ol.style.Icon.prototype, "getRotation", ol.style.Icon.prototype.getRotation);
goog.exportProperty(ol.style.Icon.prototype, "getScale", ol.style.Icon.prototype.getScale);
goog.exportProperty(ol.style.Icon.prototype, "getSize", ol.style.Icon.prototype.getSize);
goog.exportProperty(ol.style.Icon.prototype, "getSrc", ol.style.Icon.prototype.getSrc);
goog.exportSymbol("ol.style.Image", ol.style.Image);
goog.exportProperty(ol.style.Image.prototype, "getRotation", ol.style.Image.prototype.getRotation);
goog.exportProperty(ol.style.Image.prototype, "getScale", ol.style.Image.prototype.getScale);
goog.exportSymbol("ol.style.Stroke", ol.style.Stroke);
goog.exportProperty(ol.style.Stroke.prototype, "getColor", ol.style.Stroke.prototype.getColor);
goog.exportProperty(ol.style.Stroke.prototype, "getLineCap", ol.style.Stroke.prototype.getLineCap);
goog.exportProperty(ol.style.Stroke.prototype, "getLineDash", ol.style.Stroke.prototype.getLineDash);
goog.exportProperty(ol.style.Stroke.prototype, "getLineJoin", ol.style.Stroke.prototype.getLineJoin);
goog.exportProperty(ol.style.Stroke.prototype, "getMiterLimit", ol.style.Stroke.prototype.getMiterLimit);
goog.exportProperty(ol.style.Stroke.prototype, "getWidth", ol.style.Stroke.prototype.getWidth);
goog.exportSymbol("ol.style.Style", ol.style.Style);
goog.exportProperty(ol.style.Style.prototype, "getFill", ol.style.Style.prototype.getFill);
goog.exportProperty(ol.style.Style.prototype, "getImage", ol.style.Style.prototype.getImage);
goog.exportProperty(ol.style.Style.prototype, "getStroke", ol.style.Style.prototype.getStroke);
goog.exportProperty(ol.style.Style.prototype, "getText", ol.style.Style.prototype.getText);
goog.exportProperty(ol.style.Style.prototype, "getZIndex", ol.style.Style.prototype.getZIndex);
goog.exportSymbol("ol.style.Text", ol.style.Text);
goog.exportProperty(ol.style.Text.prototype, "getFill", ol.style.Text.prototype.getFill);
goog.exportProperty(ol.style.Text.prototype, "getFont", ol.style.Text.prototype.getFont);
goog.exportProperty(ol.style.Text.prototype, "getRotation", ol.style.Text.prototype.getRotation);
goog.exportProperty(ol.style.Text.prototype, "getScale", ol.style.Text.prototype.getScale);
goog.exportProperty(ol.style.Text.prototype, "getStroke", ol.style.Text.prototype.getStroke);
goog.exportProperty(ol.style.Text.prototype, "getText", ol.style.Text.prototype.getText);
goog.exportProperty(ol.style.Text.prototype, "getTextAlign", ol.style.Text.prototype.getTextAlign);
goog.exportProperty(ol.style.Text.prototype, "getTextBaseline", ol.style.Text.prototype.getTextBaseline);
goog.exportSymbol("ol.tilegrid.TileGrid", ol.tilegrid.TileGrid);
goog.exportProperty(ol.tilegrid.TileGrid.prototype, "getMinZoom", ol.tilegrid.TileGrid.prototype.getMinZoom);
goog.exportProperty(ol.tilegrid.TileGrid.prototype, "getOrigin", ol.tilegrid.TileGrid.prototype.getOrigin);
goog.exportProperty(ol.tilegrid.TileGrid.prototype, "getResolution", ol.tilegrid.TileGrid.prototype.getResolution);
goog.exportProperty(ol.tilegrid.TileGrid.prototype, "getTileSize", ol.tilegrid.TileGrid.prototype.getTileSize);
goog.exportSymbol("ol.tilegrid.WMTS", ol.tilegrid.WMTS);
goog.exportProperty(ol.tilegrid.WMTS.prototype, "getMatrixIds", ol.tilegrid.WMTS.prototype.getMatrixIds);
goog.exportProperty(ol.tilegrid.WMTS.prototype, "getMinZoom", ol.tilegrid.WMTS.prototype.getMinZoom);
goog.exportProperty(ol.tilegrid.WMTS.prototype, "getOrigin", ol.tilegrid.WMTS.prototype.getOrigin);
goog.exportProperty(ol.tilegrid.WMTS.prototype, "getResolution", ol.tilegrid.WMTS.prototype.getResolution);
goog.exportProperty(ol.tilegrid.WMTS.prototype, "getTileSize", ol.tilegrid.WMTS.prototype.getTileSize);
goog.exportSymbol("ol.tilegrid.XYZ", ol.tilegrid.XYZ);
goog.exportProperty(ol.tilegrid.XYZ.prototype, "getMinZoom", ol.tilegrid.XYZ.prototype.getMinZoom);
goog.exportProperty(ol.tilegrid.XYZ.prototype, "getOrigin", ol.tilegrid.XYZ.prototype.getOrigin);
goog.exportProperty(ol.tilegrid.XYZ.prototype, "getResolution", ol.tilegrid.XYZ.prototype.getResolution);
goog.exportProperty(ol.tilegrid.XYZ.prototype, "getTileSize", ol.tilegrid.XYZ.prototype.getTileSize);
goog.exportSymbol("ol.tilegrid.Zoomify", ol.tilegrid.Zoomify);
goog.exportProperty(ol.tilegrid.Zoomify.prototype, "getMinZoom", ol.tilegrid.Zoomify.prototype.getMinZoom);
goog.exportProperty(ol.tilegrid.Zoomify.prototype, "getOrigin", ol.tilegrid.Zoomify.prototype.getOrigin);
goog.exportProperty(ol.tilegrid.Zoomify.prototype, "getResolution", ol.tilegrid.Zoomify.prototype.getResolution);
goog.exportProperty(ol.tilegrid.Zoomify.prototype, "getTileSize", ol.tilegrid.Zoomify.prototype.getTileSize);
goog.exportSymbol("ol.webgl.Context", ol.webgl.Context);
goog.exportProperty(ol.webgl.Context.prototype, "getGL", ol.webgl.Context.prototype.getGL);
goog.exportProperty(ol.webgl.Context.prototype, "useProgram", ol.webgl.Context.prototype.useProgram);