diff --git a/.travis.yml b/.travis.yml index 158af09d61..8a9a661f7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,8 @@ before_install: - "npm install -g npm && npm install" before_script: - - "./build.py plovr" - - "./build.py serve-integration-test &" + - "./build.py serve &" - "rm src/ol/renderer/webgl/*shader.js" - "sleep 3" -script: "./build.py integration-test" +script: "./build.py ci" diff --git a/build.py b/build.py index 54918a65ed..f0763dc48b 100755 --- a/build.py +++ b/build.py @@ -129,9 +129,6 @@ SRC = [path if path.endswith('.js') if path not in SHADER_SRC] -PLOVR_JAR = 'build/plovr-81ed862.jar' -PLOVR_JAR_MD5 = '1c752daaf11ad6220b298e7d2ee2b87d' - PROJ4JS = 'build/proj4js/lib/proj4js-combined.js' PROJ4JS_ZIP = 'build/proj4js-1.1.0.zip' PROJ4JS_ZIP_MD5 = '17caad64cf6ebc6e6fe62f292b134897' @@ -153,7 +150,7 @@ def report_sizes(t): virtual('default', 'build') -virtual('integration-test', 'lint', 'jshint', 'build', 'build-all', +virtual('ci', 'lint', 'jshint', 'build', 'build-all', 'test', 'build/examples/all.combined.js', 'check-examples', 'apidoc') @@ -172,39 +169,30 @@ def build_ol_css(t): t.touch() -@target('build/ol.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC, - 'buildcfg/base.json', 'buildcfg/ol.json') -def build_ol_js(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'buildcfg/ol.json') +@target('build/ol.js', SRC, SHADER_SRC, 'buildcfg/ol.json') +def build_ol_new_js(t): + t.run('node', 'tasks/build.js', 'buildcfg/ol.json', 'build/ol.js') report_sizes(t) -@target('build/ol-simple.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC, - 'buildcfg/base.json', 'buildcfg/ol.json', 'buildcfg/ol-simple.json') +@target('build/ol-simple.js', SRC, SHADER_SRC, 'buildcfg/ol-simple.json') def build_ol_simple_js(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'buildcfg/ol-simple.json') + t.run('node', 'tasks/build.js', 'buildcfg/ol-simple.json', 'build/ol-simple.js') report_sizes(t) -@target('build/ol-whitespace.js', PLOVR_JAR, SRC, EXPORTS, - SHADER_SRC, 'buildcfg/base.json', 'buildcfg/ol.json', - 'buildcfg/ol-whitespace.json') +@target('build/ol-whitespace.js', SRC, SHADER_SRC, 'buildcfg/ol-whitespace.json') def build_ol_whitespace_js(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'buildcfg/ol-whitespace.json') + t.run('node', 'tasks/build.js', 'buildcfg/ol-whitespace.json', 'build/ol-whitespace.js') report_sizes(t) virtual('build-all', 'build/ol-all.js') -@target('build/ol-all.js', PLOVR_JAR, SRC, EXPORTS, SHADER_SRC, - 'buildcfg/base.json', 'buildcfg/ol-all.json') +@target('build/ol-all.js', SRC, SHADER_SRC, 'buildcfg/ol-all.json') def build_ol_all_js(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'buildcfg/ol-all.json') + t.run('node', 'tasks/build.js', 'buildcfg/ol-all.json', 'build/ol-all.js') @target(EXPORTS, SRC) @@ -254,11 +242,11 @@ def examples_examples_list_js(t): t.run('%(PYTHON)s', 'bin/exampleparser.py', 'examples', 'examples') -@target('build/examples/all.combined.js', 'build/examples/all.js', PLOVR_JAR, - SRC, SHADER_SRC, 'buildcfg/base.json', 'build/examples/all.json') +@target('build/examples/all.combined.js', 'build/examples/all.js', + SRC, SHADER_SRC, 'buildcfg/examples-all.json') def build_examples_all_combined_js(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'buildcfg/examples-all.json') + t.run('node', 'tasks/build.js', 'buildcfg/examples-all.json', + 'build/examples/all.combined.js') report_sizes(t) @@ -276,55 +264,91 @@ def examples_star_json(name, match): # Note that we use the proper way in buildcfg/examples-all.json, which # is only used to check the examples code using the compiler. content = json.dumps({ - 'id': match.group('id'), - 'inherits': '../../buildcfg/base.json', - 'inputs': [ - '../examples/%(id)s.js' % match.groupdict() + "exports": [], + "src": ["src/**/*.js", "examples/%(id)s.js" % match.groupdict()], + "compile": { + "externs": [ + "externs/bingmaps.js", + "externs/bootstrap.js", + "externs/closure-compiler.js", + "externs/example.js", + "externs/geojson.js", + "externs/jquery-1.7.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" ], - 'externs': [ - '//jquery-1.7.js', - '../externs/bingmaps.js', - '../externs/bootstrap.js', - '../externs/closure-compiler.js', - '../externs/example.js', - '../externs/geojson.js', - '../externs/oli.js', - '../externs/olx.js', - '../externs/proj4js.js', - '../externs/tilejson.js', - '../externs/topojson.js', - '../externs/vbarray.js', + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkDebuggerStatement", + "checkEventfulObjectDisposal", + "checkProvides", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicate", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingProperties", + "nonStandardJsDocs", + "strictModuleDepCheck", + "suspiciousCode", + "typeInvalidation", + "tweakValidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "violatedModuleDep", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "ADVANCED", + "output_wrapper": "// OpenLayers 3. See http://ol3.js.org/\n(function(){%output%})();", + "use_types_for_optimization": True, + "manage_closure_dependencies": True + } }) with open(t.name, 'wb') as f: f.write(content) - dependencies = [__file__, 'buildcfg/base.json'] - return Target(name, action=action, dependencies=dependencies) + return Target(name, action=action, dependencies=[__file__]) @rule(r'\Abuild/examples/(?P.*).combined.js\Z') def examples_star_combined_js(name, match): def action(t): - t.output('%(JAVA)s', '-server', '-XX:+TieredCompilation', '-jar', - PLOVR_JAR, 'build', 'build/examples/%(id)s.json' % - match.groupdict()) + config = 'build/examples/%(id)s.json' % match.groupdict() + t.run('node', 'tasks/build.js', config, name) report_sizes(t) - dependencies = [PLOVR_JAR, SRC, SHADER_SRC, 'buildcfg/base.json', + dependencies = [SRC, SHADER_SRC, 'examples/%(id)s.js' % match.groupdict(), 'build/examples/%(id)s.json' % match.groupdict()] return Target(name, action=action, dependencies=dependencies) -@target('serve', PLOVR_JAR, 'test-deps', 'examples') +@target('serve', PROJ4JS, 'examples') def serve(t): - t.run('%(JAVA)s', '-jar', PLOVR_JAR, 'serve', 'buildcfg/ol.json', - 'buildcfg/ol-all.json', EXAMPLES_JSON, 'buildcfg/test.json') - - -@target('serve-integration-test', PLOVR_JAR) -def serve_precommit(t): - t.run('%(JAVA)s', '-jar', PLOVR_JAR, 'serve', - 'buildcfg/ol-all.json', 'buildcfg/test.json') + t.run('node', 'tasks/serve.js') virtual('lint', 'build/lint-timestamp', 'build/check-requires-timestamp', @@ -375,19 +399,19 @@ def _strip_comments(lines): @target('build/check-requires-timestamp', SRC, EXAMPLES_SRC, SHADER_SRC, SPEC) def build_check_requires_timestamp(t): - from zipfile import ZipFile unused_count = 0 all_provides = set() - zf = ZipFile(PLOVR_JAR) - for zi in zf.infolist(): - if zi.filename.endswith('.js'): - if not zi.filename.startswith('closure/goog/'): + closure_lib_path = output('node', '-e', + 'process.stdout.write(require("closure-util").getLibraryPath())') + for filename in ifind(closure_lib_path): + if filename.endswith('.js'): + if not re.match(r'.*/closure/goog/', filename): continue # Skip goog.i18n because it contains so many modules that it causes # the generated regular expression to exceed Python's limits - if zi.filename.startswith('closure/goog/i18n/'): + if re.match(r'.*/closure/goog/i18n/', filename): continue - for line in zf.open(zi, 'rU'): + for line in open(filename, 'rU'): m = re.match(r'goog.provide\(\'(.*)\'\);', line) if m: all_provides.add(m.group(1)) @@ -546,17 +570,6 @@ def build_check_whitespace_timestamp(t): t.touch() -virtual('plovr', PLOVR_JAR) - - -@target(PLOVR_JAR, clean=False) -def plovr_jar(t): - t.info('downloading %r', t.name) - t.download('https://plovr.googlecode.com/files/' + - os.path.basename(PLOVR_JAR), md5=PLOVR_JAR_MD5) - t.info('downloaded %r', t.name) - - virtual('apidoc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables)) @@ -613,6 +626,8 @@ def host_examples(t): examples_dir = 'build/hosted/%(BRANCH)s/examples' build_dir = 'build/hosted/%(BRANCH)s/build' css_dir = 'build/hosted/%(BRANCH)s/css' + closure_lib_path = output('node', '-e', + 'process.stdout.write(require("closure-util").getLibraryPath())') t.rm_rf(examples_dir) t.makedirs(examples_dir) t.rm_rf(build_dir) @@ -631,10 +646,7 @@ def host_examples(t): 'examples/example-list.xml', 'examples/Jugl.js', 'examples/jquery.min.js', examples_dir) t.rm_rf('build/hosted/%(BRANCH)s/closure-library') - t.makedirs('build/hosted/%(BRANCH)s/closure-library') - with t.chdir('build/hosted/%(BRANCH)s/closure-library'): - t.run('%(JAR)s', 'xf', '../../../../' + PLOVR_JAR, 'closure') - t.run('%(JAR)s', 'xf', '../../../../' + PLOVR_JAR, 'third_party') + t.cp_r(closure_lib_path, 'build/hosted/%(BRANCH)s/closure-library') t.rm_rf('build/hosted/%(BRANCH)s/ol') t.makedirs('build/hosted/%(BRANCH)s/ol') t.cp_r('src/ol', 'build/hosted/%(BRANCH)s/ol/ol') @@ -674,12 +686,10 @@ def proj4js_zip(t): t.info('downloaded %r', t.name) -virtual('test-deps', PROJ4JS, 'build/test/requireall.js') - - -@target('test', 'test-deps', phony=True) +@target('test', PROJ4JS, phony=True) def test(t): - t.run('%(PHANTOMJS)s', 'test/mocha-phantomjs.js', 'test/ol.html') + t.run('%(PHANTOMJS)s', 'test/mocha-phantomjs.js', + 'http://localhost:3000/test/index.html') @target('fixme', phony=True) @@ -740,7 +750,7 @@ There is one option: -c - Cleans up the repository from previous builds. The most common targets are: - serve - Serves files through plovr, usually on port 9810. + serve - Serves files, on port 3000. lint - Runs gjslint on all sourcefiles to enforce specific syntax. build - Builds singlefile versions of OpenLayers JavaScript and CSS. This is also the default build target which runs when @@ -753,18 +763,17 @@ The most common targets are: Other less frequently used targets are: apidoc - Builds the API-Documentation using JSDoc3. - integration-test - Builds all examples in various modes and usually takes a + ci - Builds all examples in various modes and usually takes a long time to finish. This target calls the following targets: lint, build, build-all, test, build-examples, - check-examples and apidoc. + check-examples and apidoc. This is the target run on + Travis CI. reallyclean - Remove untracked files from the repository. checkdeps - Checks whether all required development software is installed on your machine. fixme - Will print a list of parts of the code that are marked with either TODO or FIXME. todo - This is an alias for the fixme-target (see above). - plovr - Fetches the required plovr.jar. Usually called by other - targets that depend on plovr. If no target is given, the build-target will be executed. diff --git a/buildcfg/base.json b/buildcfg/base.json deleted file mode 100644 index 72435a700e..0000000000 --- a/buildcfg/base.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - - "ambiguate-properties": true, - - "checks": { - "accessControls": "ERROR", - "ambiguousFunctionDecl": "ERROR", - "checkDebuggerStatement": "WARNING", - "checkEventfulObjectDisposal": "ERROR", - "checkProvides": "ERROR", - "checkRegExp": "ERROR", - "checkStructDictInheritance": "ERROR", - "checkTypes": "ERROR", - "checkVars": "ERROR", - "const": "ERROR", - "constantProperty": "ERROR", - "deprecated": "ERROR", - "duplicate": "ERROR", - "duplicateMessage": "ERROR", - "es3": "ERROR", - "es5Strict": "ERROR", - "externsValidation": "ERROR", - "fileoverviewTags": "ERROR", - "globalThis": "ERROR", - "internetExplorerChecks": "ERROR", - "invalidCasts": "ERROR", - "misplacedTypeAnnotation": "ERROR", - "missingProperties": "ERROR", - "nonStandardJsDocs": "ERROR", - "strictModuleDepCheck": "ERROR", - "suspiciousCode": "ERROR", - "typeInvalidation": "ERROR", - "tweakValidation": "ERROR", - "undefinedNames": "ERROR", - "undefinedVars": "ERROR", - "unknownDefines": "ERROR", - "uselessCode": "ERROR", - "violatedModuleDep": "ERROR", - "visibility": "ERROR" - }, - - "define": { - "goog.dom.ASSUME_STANDARDS_MODE": true, - "goog.DEBUG": false - }, - - "disambiguate-properties": true, - - "externs": [ - "../externs/bingmaps.js", - "../externs/closure-compiler.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/olx.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - - "level": "VERBOSE", - - "mode": "ADVANCED", - - "name-suffixes-to-strip": [ - "logger", - "logger_" - ], - - "paths": [ - "../src" - ], - - "treat-warnings-as-errors": false, - - "type-prefixes-to-strip": [ - "goog.asserts", - "goog.debug.Console", - "goog.debug.DebugWindow", - "goog.debug.DevCss", - "goog.debug.DivConsole", - "goog.debug.EntryPointMonitor", - "goog.debug.ErrorHandler", - "goog.debug.ErrorReporter", - "goog.debug.FancyWindow", - "goog.debug.Formatter", - "goog.debug.FpsDisplay", - "goog.debug.GcDiagnostics", - "goog.debug.HtmlFormatter", - "goog.debug.LogBuffer", - "goog.debug.LogManager", - "goog.debug.LogRecord", - "goog.debug.Logger", - "goog.debug.RelativeTimeProvider", - "goog.debug.TextFormatter", - "goog.debug.Trace", - "goog.debug.catchErrors", - "goog.debug.deepExpose", - "goog.debug.enhanceError", - "goog.debug.entryPointRegistry", - "goog.debug.errorHandlerWeakDep", - "goog.debug.expose", - "goog.debug.exposeArray", - "goog.debug.exposeException", - "goog.debug.getFunctionName", - "goog.debug.getStacktrace", - "goog.debug.getStacktraceSimple", - "goog.debug.logRecordSerializer", - "goog.debug.makeWhitespaceVisible", - "goog.debug.normalizeErrorObject", - "goog.debug.reflect", - "goog.log" - ] - -} diff --git a/buildcfg/examples-all.json b/buildcfg/examples-all.json index e0c671503c..254399c730 100644 --- a/buildcfg/examples-all.json +++ b/buildcfg/examples-all.json @@ -1,21 +1,67 @@ { + "exports": [], + "src": ["src/**/*.js", "build/examples/all.js"], + "compile": { "externs": [ - "//jquery-1.7.js", - "../externs/bingmaps.js", - "../externs/bootstrap.js", - "../externs/closure-compiler.js", - "../externs/example.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - "id": "simple", - "inherits": "base.json", - "inputs": [ - "../build/examples/all.js", - "../externs/olx.js" - ] + "externs/bingmaps.js", + "externs/bootstrap.js", + "externs/closure-compiler.js", + "externs/example.js", + "externs/geojson.js", + "externs/jquery-1.7.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" + ], + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" + ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkEventfulObjectDisposal", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingGetCssName", + "missingProperties", + "missingProvide", + "missingRequire", + "missingReturn", + "newCheckTypes", + "nonStandardJsDocs", + "suspiciousCode", + "strictModuleDepCheck", + "typeInvalidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "ADVANCED", + "output_wrapper": "// OpenLayers 3. See http://ol3.js.org/\n(function(){%output%})();", + "use_types_for_optimization": true, + "manage_closure_dependencies": true + + } } diff --git a/buildcfg/ol-all.json b/buildcfg/ol-all.json index 7ce2c28f73..2df1769dce 100644 --- a/buildcfg/ol-all.json +++ b/buildcfg/ol-all.json @@ -1,23 +1,62 @@ { - - "id": "ol-all", - - "externs": [ - "../externs/bingmaps.js", - "../externs/closure-compiler.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/olx.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - - "inherits": "base.json", - - "inputs": [ - "../build/exports.js" - ] - + "exports": ["*"], + "src": ["src/**/*.js"], + "compile": { + "externs": [ + "externs/bingmaps.js", + "externs/closure-compiler.js", + "externs/geojson.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" + ], + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" + ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkEventfulObjectDisposal", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingGetCssName", + "missingProperties", + "missingProvide", + "missingRequire", + "missingReturn", + "newCheckTypes", + "nonStandardJsDocs", + "suspiciousCode", + "strictModuleDepCheck", + "typeInvalidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "ADVANCED", + "output_wrapper": "// OpenLayers 3. See http://ol3.js.org/\n(function(){%output%})();", + "use_types_for_optimization": true + } } diff --git a/buildcfg/ol-simple.json b/buildcfg/ol-simple.json index 5cb4be99de..bd45f77f79 100644 --- a/buildcfg/ol-simple.json +++ b/buildcfg/ol-simple.json @@ -1,39 +1,63 @@ { - - // If ambiguate-properties and disambiguate-properties are set to true - // we get function names like "ol_control_Control_prototype$setMap" in - // the compiled code when using the SIMPLE compilation. It looks like - // "ambiguate-properties" and "disambiguate-properties" are only - // appropriate for ADVANCED compilation. - - "ambiguate-properties": false, - - "disambiguate-properties": false, - - "id": "ol-simple", - - "externs": [ - "../externs/bingmaps.js", - "../externs/closure-compiler.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/olx.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - - "inherits": "ol.json", - - "inputs": [ - "../build/exports.js" - ], - - "mode": "SIMPLE", - - // Note: we can't have a (function(){%output%})() output wrapper with - // WHITESPACE and SIMPLE modes. See this link for explanations: - // https://groups.google.com/forum/#!topic/plovr/gQyZEa2NpsU - "output-wrapper": "%output%" + "exports": ["*"], + "src": ["src/**/*.js"], + "compile": { + "externs": [ + "externs/bingmaps.js", + "externs/closure-compiler.js", + "externs/geojson.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" + ], + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" + ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkEventfulObjectDisposal", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingGetCssName", + "missingProperties", + "missingProvide", + "missingRequire", + "missingReturn", + "newCheckTypes", + "nonStandardJsDocs", + "suspiciousCode", + "strictModuleDepCheck", + "typeInvalidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "SIMPLE", + "output_wrapper": "%output%", + "use_types_for_optimization": false, + "manage_closure_dependencies": true + } } diff --git a/buildcfg/ol-whitespace.json b/buildcfg/ol-whitespace.json index c409225de4..9e3a6eea36 100644 --- a/buildcfg/ol-whitespace.json +++ b/buildcfg/ol-whitespace.json @@ -1,42 +1,63 @@ { - - "id": "ol-whitespace", - - // If ambiguate-properties and disambiguate-properties are set to true - // we get function names like "ol_control_Control_prototype$setMap" in - // the compiled code when using the SIMPLE compilation. It looks like - // "ambiguate-properties" and "disambiguate-properties" are only - // appropriate for ADVANCED compilation. To be sure we also don't - // set them for WHITESPACE. - - "ambiguate-properties": false, - - "disambiguate-properties": false, - - "externs": [ - "../externs/bingmaps.js", - "../externs/closure-compiler.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/olx.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - - "inherits": "ol.json", - - "inputs": [ - "../build/exports.js" - ], - - "mode": "WHITESPACE", - - "output-wrapper": [ - "var CLOSURE_NO_DEPS = true;\n", - "%output%" - ], - - "pretty-print": true + "exports": ["*"], + "src": ["src/**/*.js"], + "compile": { + "externs": [ + "externs/bingmaps.js", + "externs/closure-compiler.js", + "externs/geojson.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" + ], + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" + ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkEventfulObjectDisposal", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingGetCssName", + "missingProperties", + "missingProvide", + "missingRequire", + "missingReturn", + "newCheckTypes", + "nonStandardJsDocs", + "suspiciousCode", + "strictModuleDepCheck", + "typeInvalidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "WHITESPACE_ONLY", + "output_wrapper": "var CLOSURE_DEPS = false;\n%output%", + "use_types_for_optimization": false, + "manage_closure_dependencies": true + } } diff --git a/buildcfg/ol.json b/buildcfg/ol.json index 77513d9363..f457a49072 100644 --- a/buildcfg/ol.json +++ b/buildcfg/ol.json @@ -1,39 +1,63 @@ { - - "id": "ol", - - "css-allowed-unrecognized-properties": [ - "user-select" - ], - - "css-inputs": [ - "../css/ol.css" - ], - - "css-output-file": "../build/ol.css", - - "externs": [ - "../externs/bingmaps.js", - "../externs/closure-compiler.js", - "../externs/geojson.js", - "../externs/oli.js", - "../externs/olx.js", - "../externs/proj4js.js", - "../externs/tilejson.js", - "../externs/topojson.js", - "../externs/vbarray.js" - ], - - "inherits": "base.json", - - "inputs": [ - "../build/exports.js" - ], - - "output-wrapper": "// OpenLayers 3. see http://ol3js.org/\n(function(){%output%})();", - - "paths": [ - "../src" - ] - + "exports": ["*"], + "src": ["src/**/*.js"], + "compile": { + "externs": [ + "externs/bingmaps.js", + "externs/closure-compiler.js", + "externs/geojson.js", + "externs/oli.js", + "externs/olx.js", + "externs/proj4js.js", + "externs/tilejson.js", + "externs/topojson.js", + "externs/vbarray.js" + ], + "define": [ + "goog.dom.ASSUME_STANDARDS_MODE=true", + "goog.DEBUG=false" + ], + "jscomp_error": [ + "accessControls", + "ambiguousFunctionDecl", + "checkEventfulObjectDisposal", + "checkRegExp", + "checkStructDictInheritance", + "checkTypes", + "checkVars", + "const", + "constantProperty", + "deprecated", + "duplicateMessage", + "es3", + "externsValidation", + "fileoverviewTags", + "globalThis", + "internetExplorerChecks", + "invalidCasts", + "misplacedTypeAnnotation", + "missingGetCssName", + "missingProperties", + "missingProvide", + "missingRequire", + "missingReturn", + "newCheckTypes", + "nonStandardJsDocs", + "suspiciousCode", + "strictModuleDepCheck", + "typeInvalidation", + "undefinedNames", + "undefinedVars", + "unknownDefines", + "uselessCode", + "visibility" + ], + "jscomp_off": [ + "es5Strict" + ], + "compilation_level": "ADVANCED", + "output_wrapper": "// OpenLayers 3. See http://ol3.js.org/\n(function(){%output%})();", + "use_types_for_optimization": true, + "manage_closure_dependencies": true + } } diff --git a/buildcfg/readme.md b/buildcfg/readme.md new file mode 100644 index 0000000000..f69b3c648d --- /dev/null +++ b/buildcfg/readme.md @@ -0,0 +1,12 @@ +# Build configs + +This directory includes configuration files (json) for the tasks/build.js +build script. + +Notes: + +`use_types_for_optimization` is set to `false` for the SIMPLE and WHITESPACE +builds. If it was set to `true` we would get function names like +`ol_control_Control_prototype$setMap` in the compiled code when using the +SIMPLE compilation. `use_types_for_optimization` is only appropriate for +ADVANCED compilation. To be sure we also don't set it for WHITESPACE. diff --git a/buildcfg/test.json b/buildcfg/test.json deleted file mode 100644 index 22f1c70c0b..0000000000 --- a/buildcfg/test.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - - "id": "test", - - "inherits": "base.json", - - "inputs": [ - "../build/test/requireall.js" - ], - - "paths": [ - "../src", - "../test" - ] - -} diff --git a/examples/geojson.js b/examples/geojson.js index fe22fd08e0..1f1dea970b 100644 --- a/examples/geojson.js +++ b/examples/geojson.js @@ -144,7 +144,7 @@ var vectorSource = new ol.source.GeoJSON( 'type': 'MultiPolygon', 'coordinates': [ [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], [-3e6, 6e6]]], - [[[-2e6, 6e6], [-2e6, 8e6], [0e6, 8e6], [0e6, 6e6]]], + [[[-2e6, 6e6], [-2e6, 8e6], [0, 8e6], [0, 6e6]]], [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], [3e6, 6e6]]] ] } @@ -156,7 +156,7 @@ var vectorSource = new ol.source.GeoJSON( 'geometries': [ { 'type': 'LineString', - 'coordinates': [[-5e6, -5e6], [0e6, -5e6]] + 'coordinates': [[-5e6, -5e6], [0, -5e6]] }, { 'type': 'Point', diff --git a/examples/modify-test.js b/examples/modify-test.js index 230889d67f..d0f46dd0f9 100644 --- a/examples/modify-test.js +++ b/examples/modify-test.js @@ -127,8 +127,8 @@ var source = new ol.source.GeoJSON( 'coordinates': [ [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], [-3e6, 6e6], [-5e6, 6e6]]], - [[[-2e6, 6e6], [-2e6, 8e6], [0e6, 8e6], - [0e6, 6e6], [-2e6, 6e6]]], + [[[-2e6, 6e6], [-2e6, 8e6], [0, 8e6], + [0, 6e6], [-2e6, 6e6]]], [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], [3e6, 6e6], [1e6, 6e6]]] ] @@ -141,7 +141,7 @@ var source = new ol.source.GeoJSON( 'geometries': [ { 'type': 'LineString', - 'coordinates': [[-5e6, -5e6], [0e6, -5e6]] + 'coordinates': [[-5e6, -5e6], [0, -5e6]] }, { 'type': 'Point', diff --git a/externs/closure-compiler.js b/externs/closure-compiler.js index a7bd61fd62..b9c546b0ae 100644 --- a/externs/closure-compiler.js +++ b/externs/closure-compiler.js @@ -8,63 +8,6 @@ * @externs */ -// @see https://code.google.com/p/closure-compiler/issues/detail?id=1060 - - -/** @type {Date} */ -HTMLInputElement.prototype.valueAsDate; - - -/** @type {number} */ -HTMLInputElement.prototype.valueAsNumber; - - -// @see https://code.google.com/p/closure-compiler/issues/detail?id=1084 - - -/** @type {?number} */ -DeviceRotationRate.prototype.alpha; - - -/** @type {?number} */ -DeviceRotationRate.prototype.beta; - - -/** @type {?number} */ -DeviceRotationRate.prototype.gamma; - - -// @see https://code.google.com/p/closure-compiler/issues/detail?id=1088 - - -/** @type {?number} */ -DeviceOrientationEvent.prototype.webkitCompassAccuracy; - - -/** @type {?number} */ -DeviceOrientationEvent.prototype.webkitCompassHeading; - - -// IE 11 fullscreen API -// http://msdn.microsoft.com/en-us/library/ie/dn265028(v=vs.85).aspx - - -/** @return {void} */ -Element.prototype.msRequestFullscreen = function() {}; - - -/** @return {void} */ -Element.prototype.msExitFullscreen = function() {}; - - -/** @type {boolean} */ -Document.prototype.msFullscreenEnabled; - - -/** @type {Element} */ -Document.prototype.msFullscreenElement; - - /** @type {number} */ Touch.prototype.force; diff --git a/externs/jquery-1.7.js b/externs/jquery-1.7.js new file mode 100644 index 0000000000..554d9a01d3 --- /dev/null +++ b/externs/jquery-1.7.js @@ -0,0 +1,2296 @@ +/* + * Copyright 2011 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Externs for jQuery 1.7.2 + * + * Note that some functions use different return types depending on the number + * of parameters passed in. In these cases, you may need to annotate the type + * of the result in your code, so the JSCompiler understands which type you're + * expecting. For example: + * var elt = /** @type {Element} * / (foo.get(0)); + * + * @see http://api.jquery.com/ + * @externs + */ + +/** + * @typedef {(Window|Document|Element|Array.|string|jQuery| + * NodeList)} + */ +var jQuerySelector; + +/** @typedef {function(...)|Array.} */ +var jQueryCallback; + +/** + * @constructor + * @param {(jQuerySelector|Element|Object|Array.|jQuery|string| + * function())=} arg1 + * @param {(Element|jQuery|Document| + * Object.)=} arg2 + * @return {!jQuery} + */ +function jQuery(arg1, arg2) {} + +/** + * @constructor + * @extends {jQuery} + * @param {(jQuerySelector|Element|Object|Array.|jQuery|string| + * function())=} arg1 + * @param {(Element|jQuery|Document| + * Object.)=} arg2 + * @return {!jQuery} + */ +function $(arg1, arg2) {} + +/** + * @param {(jQuerySelector|Array.|string|jQuery)} arg1 + * @param {Element=} context + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.add = function(arg1, context) {}; + +/** + * @param {(string|function(number,String))} arg1 + * @return {!jQuery} + */ +jQuery.prototype.addClass = function(arg1) {}; + +/** + * @param {(string|Element|jQuery|function(number))} arg1 + * @param {(string|Element|Array.|jQuery)=} content + * @return {!jQuery} + */ +jQuery.prototype.after = function(arg1, content) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {Object.=} settings + * @return {jQuery.jqXHR} + */ +jQuery.ajax = function(arg1, settings) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {Object.=} settings + * @return {jQuery.jqXHR} + */ +$.ajax = function(arg1, settings) {}; + +/** + * @param {function(!jQuery.event,XMLHttpRequest,Object.)} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxComplete = function(handler) {}; + +/** + * @param {function(!jQuery.event,jQuery.jqXHR,Object.,*)} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxError = function(handler) {}; + +/** + * @param {(string| + * function(Object.,Object.,jQuery.jqXHR))} dataTypes + * @param {function(Object.,Object.,jQuery.jqXHR)=} handler + */ +jQuery.ajaxPrefilter = function(dataTypes, handler) {}; + +/** + * @param {(string| + * function(Object.,Object.,jQuery.jqXHR))} dataTypes + * @param {function(Object.,Object.,jQuery.jqXHR)=} handler + */ +$.ajaxPrefilter = function(dataTypes, handler) {}; + +/** + * @param {function(!jQuery.event,jQuery.jqXHR,Object.)} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxSend = function(handler) {}; + +/** @const */ +jQuery.ajaxSettings = {}; + +/** @const */ +$.ajaxSettings = {}; + +/** @type {Object.} */ +jQuery.ajaxSettings.accepts = {}; + +/** @type {Object.} */ +$.ajaxSettings.accepts = {}; + +/** @type {boolean} */ +jQuery.ajaxSettings.async; + +/** @type {boolean} */ +$.ajaxSettings.async; + +/** @type {Object.} */ +jQuery.ajaxSettings.contents = {}; + +/** @type {Object.} */ +$.ajaxSettings.contents = {}; + +/** @type {string} */ +jQuery.ajaxSettings.contentType; + +/** @type {string} */ +$.ajaxSettings.contentType; + +/** @type {Object.} */ +jQuery.ajaxSettings.converters = {}; + +/** @type {Object.} */ +$.ajaxSettings.converters = {}; + +/** @type {Object.} */ +jQuery.ajaxSettings.flatOptions = {}; + +/** @type {Object.} */ +$.ajaxSettings.flatOptions = {}; + +/** @type {boolean} */ +jQuery.ajaxSettings.global; + +/** @type {boolean} */ +$.ajaxSettings.global; + +/** @type {boolean} */ +jQuery.ajaxSettings.isLocal; + +/** @type {boolean} */ +$.ajaxSettings.isLocal; + +/** @type {boolean} */ +jQuery.ajaxSettings.processData; + +/** @type {boolean} */ +$.ajaxSettings.processData; + +/** @type {Object.} */ +jQuery.ajaxSettings.responseFields = {}; + +/** @type {Object.} */ +$.ajaxSettings.responseFields = {}; + +/** @type {boolean} */ +jQuery.ajaxSettings.traditional; + +/** @type {boolean} */ +$.ajaxSettings.traditional; + +/** @type {string} */ +jQuery.ajaxSettings.type; + +/** @type {string} */ +$.ajaxSettings.type; + +/** @type {string} */ +jQuery.ajaxSettings.url; + +/** @type {string} */ +$.ajaxSettings.url; + +/** @return {XMLHttpRequest|ActiveXObject} */ +jQuery.ajaxSettings.xhr = function() {}; + +/** @return {XMLHttpRequest|ActiveXObject} */ +$.ajaxSettings.xhr = function() {}; + +/** @param {Object.} options */ +jQuery.ajaxSetup = function(options) {}; + +/** @param {Object.} options */ +$.ajaxSetup = function(options) {}; + +/** + * @param {function()} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxStart = function(handler) {}; + +/** + * @param {function()} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxStop = function(handler) {}; + +/** + * @param {function(!jQuery.event,XMLHttpRequest,Object.)} handler + * @return {!jQuery} + */ +jQuery.prototype.ajaxSuccess = function(handler) {}; + +/** + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.andSelf = function() {}; + +/** + * @param {Object.} properties + * @param {(string|number|function()|Object.)=} arg2 + * @param {(string|function())=} easing + * @param {function()=} complete + * @return {!jQuery} + */ +jQuery.prototype.animate = function(properties, arg2, easing, complete) {}; + +/** + * @param {(string|Element|jQuery|function(number,string))} arg1 + * @param {(string|Element|Array.|jQuery)=} content + * @return {!jQuery} + */ +jQuery.prototype.append = function(arg1, content) {}; + +/** + * @param {(jQuerySelector|Element|jQuery)} target + * @return {!jQuery} + */ +jQuery.prototype.appendTo = function(target) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {(string|number|boolean|function(number,string))=} arg2 + * @return {(string|!jQuery)} + */ +jQuery.prototype.attr = function(arg1, arg2) {}; + +/** + * @param {(string|Element|jQuery|function())} arg1 + * @param {(string|Element|Array.|jQuery)=} content + * @return {!jQuery} + */ +jQuery.prototype.before = function(arg1, content) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {(Object.|function(!jQuery.event=)|boolean)=} eventData + * @param {(function(!jQuery.event=)|boolean)=} arg3 + * @return {!jQuery} + */ +jQuery.prototype.bind = function(arg1, eventData, arg3) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.blur = function(arg1, handler) {}; + +/** @type {boolean} */ +jQuery.boxModel; + +/** @type {boolean} */ +$.boxModel; + +/** @type {Object.} */ +jQuery.browser; + +/** @type {Object.} */ +$.browser; + +/** + * @type {boolean} + * @const + */ +jQuery.browser.mozilla; + +/** + * @type {boolean} + * @const + */ +$.browser.mozilla; + +/** + * @type {boolean} + * @const + */ +jQuery.browser.msie; + +/** + * @type {boolean} + * @const + */ +$.browser.msie; + +/** + * @type {boolean} + * @const + */ +jQuery.browser.opera; + +/** + * @type {boolean} + * @const + */ +$.browser.opera; + +/** + * @deprecated + * @type {boolean} + * @const + */ +jQuery.browser.safari; + +/** + * @deprecated + * @type {boolean} + * @const + */ +$.browser.safari; + +/** @type {string} */ +jQuery.browser.version; + +/** @type {string} */ +$.browser.version; + +/** + * @type {boolean} + * @const + */ +jQuery.browser.webkit; + +/** + * @type {boolean} + * @const + */ +$.browser.webkit; + +/** + * @constructor + * @private + */ +jQuery.callbacks = function () {}; + +/** + * @param {string=} flags + * @return {jQuery.callbacks} + */ +jQuery.Callbacks = function (flags) {}; + +/** @param {function()} callbacks */ +jQuery.callbacks.prototype.add = function(callbacks) {}; + +/** @return {undefined} */ +jQuery.callbacks.prototype.disable = function() {}; + +/** @return {undefined} */ +jQuery.callbacks.prototype.empty = function() {}; + +/** @param {...*} var_args */ +jQuery.callbacks.prototype.fire = function(var_args) {}; + +/** @return {boolean} */ +jQuery.callbacks.prototype.fired = function() {}; + +/** @param {...*} var_args */ +jQuery.callbacks.prototype.fireWith = function(var_args) {}; + +/** + * @param {function()} callback + * @return {boolean} + * @nosideeffects + */ +jQuery.callbacks.prototype.has = function(callback) {}; + +/** @return {undefined} */ +jQuery.callbacks.prototype.lock = function() {}; + +/** @return {boolean} */ +jQuery.callbacks.prototype.locked = function() {}; + +/** @param {function()} callbacks */ +jQuery.callbacks.prototype.remove = function(callbacks) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.change = function(arg1, handler) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.children = function(selector) {}; + +/** + * @param {string=} queueName + * @return {!jQuery} + */ +jQuery.prototype.clearQueue = function(queueName) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.click = function(arg1, handler) {}; + +/** + * @param {boolean=} withDataAndEvents + * @param {boolean=} deepWithDataAndEvents + * @return {!jQuery} + * @suppress {checkTypes} see issue 583 + */ +jQuery.prototype.clone = function(withDataAndEvents, deepWithDataAndEvents) {}; + +/** + * @param {(jQuerySelector|jQuery|Element|string|Array.)} arg1 + * @param {Element=} context + * @return {(!jQuery|Array.)} + * @nosideeffects + */ +jQuery.prototype.closest = function(arg1, context) {}; + +/** + * @param {Element} container + * @param {Element} contained + * @return {boolean} + */ +jQuery.contains = function(container, contained) {}; + +/** + * @param {Element} container + * @param {Element} contained + * @return {boolean} + */ +$.contains = function(container, contained) {}; + +/** + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.contents = function() {}; + +/** @type {Element} */ +jQuery.prototype.context; + +/** + * @param {(string|Object.)} arg1 + * @param {(string|number|function(number,*))=} arg2 + * @return {(string|!jQuery)} + */ +jQuery.prototype.css = function(arg1, arg2) {}; + +/** @type {Object.} */ +jQuery.cssHooks; + +/** @type {Object.} */ +$.cssHooks; + +/** + * @param {Element} elem + * @param {string=} key + * @param {*=} value + * @return {*} + */ +jQuery.data = function(elem, key, value) {}; + +/** + * @param {(string|Object.)=} arg1 + * @param {*=} value + * @return {*} + */ +jQuery.prototype.data = function(arg1, value) {}; + +/** + * @param {Element} elem + * @param {string=} key + * @param {*=} value + * @return {*} + */ +$.data = function(elem, key, value) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.dblclick = function(arg1, handler) {}; + +/** + * @constructor + * @implements {jQuery.Promise} + * @param {function()=} opt_fn + * @see http://api.jquery.com/category/deferred-object/ + */ +jQuery.deferred = function(opt_fn) {}; + +/** + * @constructor + * @extends {jQuery.deferred} + * @param {function()=} opt_fn + * @return {jQuery.Deferred} + */ +jQuery.Deferred = function(opt_fn) {}; + +/** + * @constructor + * @extends {jQuery.deferred} + * @param {function()=} opt_fn + * @see http://api.jquery.com/category/deferred-object/ + */ +$.deferred = function(opt_fn) {}; + +/** + * @constructor + * @extends {jQuery.deferred} + * @param {function()=} opt_fn + * @return {jQuery.deferred} + */ +$.Deferred = function(opt_fn) {}; + +/** + * @override + * @param {jQueryCallback} alwaysCallbacks + * @param {jQueryCallback=} alwaysCallbacks2 + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.always + = function(alwaysCallbacks, alwaysCallbacks2) {}; + +/** + * @override + * @param {jQueryCallback} doneCallbacks + * @param {jQueryCallback=} doneCallbacks2 + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.done = function(doneCallbacks, doneCallbacks2) {}; + +/** + * @override + * @param {jQueryCallback} failCallbacks + * @param {jQueryCallback=} failCallbacks2 + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.fail = function(failCallbacks, failCallbacks2) {}; + +/** + * @deprecated + * @override + * @return {boolean} + * @nosideeffects + */ +jQuery.deferred.prototype.isRejected = function() {}; + +/** + * @deprecated + * @override + * @return {boolean} + * @nosideeffects + */ +jQuery.deferred.prototype.isResolved = function() {}; + +/** + * @param {...*} var_args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.notify = function(var_args) {}; + +/** + * @param {Object} context + * @param {...*} var_args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.notifyWith = function(context, var_args) {}; + +/** + * @override + * @param {function()=} doneFilter + * @param {function()=} failFilter + * @param {function()=} progressFilter + * @return {jQuery.Promise} + */ +jQuery.deferred.prototype.pipe + = function(doneFilter, failFilter, progressFilter) {}; + +/** + * @param {function()} progressCallbacks + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.progress = function(progressCallbacks) {}; + +/** + * @param {Object=} target + * @return {jQuery.Promise} + */ +jQuery.deferred.prototype.promise = function(target) {}; + +/** + * @param {...*} var_args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.reject = function(var_args) {}; + +/** + * @param {Object} context + * @param {Array.<*>=} args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.rejectWith = function(context, args) {}; + +/** + * @param {...*} var_args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.resolve = function(var_args) {}; + +/** + * @param {Object} context + * @param {Array.<*>=} args + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.resolveWith = function(context, args) {}; + +/** @return {string} */ +jQuery.deferred.prototype.state = function() {}; + +/** + * @override + * @param {jQueryCallback} doneCallbacks + * @param {jQueryCallback=} failCallbacks + * @param {jQueryCallback=} progressCallbacks + * @return {jQuery.deferred} + */ +jQuery.deferred.prototype.then + = function(doneCallbacks, failCallbacks, progressCallbacks) {}; + +/** + * @param {number} duration + * @param {string=} queueName + * @return {!jQuery} + */ +jQuery.prototype.delay = function(duration, queueName) {}; + +/** + * @param {string} selector + * @param {(string|Object.)} arg2 + * @param {(function(!jQuery.event=)|Object.)=} arg3 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.delegate = function(selector, arg2, arg3, handler) {}; + +/** + * @param {Element} elem + * @param {string=} queueName + */ +jQuery.dequeue = function(elem, queueName) {}; + +/** + * @param {string=} queueName + * @return {!jQuery} + */ +jQuery.prototype.dequeue = function(queueName) {}; + +/** + * @param {Element} elem + * @param {string=} queueName + */ +$.dequeue = function(elem, queueName) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + */ +jQuery.prototype.detach = function(selector) {}; + +/** + * @deprecated + * @param {(string|Object.)=} arg1 + * @param {string=} handler + * @return {!jQuery} + */ +jQuery.prototype.die = function(arg1, handler) {}; + +/** + * @param {Object} collection + * @param {function((number|string),?)} callback + * @return {Object} + */ +jQuery.each = function(collection, callback) {}; + +/** + * @param {function(number,Element)} fnc + * @return {!jQuery} + */ +jQuery.prototype.each = function(fnc) {}; + +/** + * @param {Object} collection + * @param {function((number|string),?)} callback + * @return {Object} + */ +$.each = function(collection, callback) {}; + +/** @return {!jQuery} */ +jQuery.prototype.empty = function() {}; + +/** + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.end = function() {}; + +/** + * @param {number} arg1 + * @return {!jQuery} + */ +jQuery.prototype.eq = function(arg1) {}; + +/** @param {string} message */ +jQuery.error = function(message) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.error = function(arg1, handler) {}; + +/** @param {string} message */ +$.error = function(message) {}; + +/** + * @constructor + * @param {string} eventType + */ +jQuery.event = function(eventType) {}; + +/** + * @constructor + * @extends {jQuery.event} + * @param {string} eventType + * @param {Object=} properties + * @return {jQuery.Event} + */ +jQuery.Event = function(eventType, properties) {}; + +/** + * @constructor + * @extends {jQuery.event} + * @param {string} eventType + */ +$.event = function(eventType) {}; + +/** + * @constructor + * @extends {jQuery.event} + * @param {string} eventType + * @param {Object=} properties + * @return {$.Event} + */ +$.Event = function(eventType, properties) {}; + +/** @type {Element} */ +jQuery.event.prototype.currentTarget; + +/** @type {Object.} */ +jQuery.event.prototype.data; + +/** @type {Element} */ +jQuery.event.prototype.delegateTarget; + +/** + * @return {boolean} + * @nosideeffects + */ +jQuery.event.prototype.isDefaultPrevented = function() {}; + +/** + * @return {boolean} + * @nosideeffects + */ +jQuery.event.prototype.isImmediatePropagationStopped = function() {}; + +/** + * @return {boolean} + * @nosideeffects + */ +jQuery.event.prototype.isPropagationStopped = function() {}; + +/** @type {string} */ +jQuery.event.prototype.namespace; + +/** @type {Event} */ +jQuery.event.prototype.originalEvent; + +/** @type {number} */ +jQuery.event.prototype.pageX; + +/** @type {number} */ +jQuery.event.prototype.pageY; + +/** @return {undefined} */ +jQuery.event.prototype.preventDefault = function() {}; + +/** @type {Object.} */ +jQuery.event.prototype.props; + +/** @type {Element} */ +jQuery.event.prototype.relatedTarget; + +/** @type {*} */ +jQuery.event.prototype.result; + +/** @return {undefined} */ +jQuery.event.prototype.stopImmediatePropagation = function() {}; + +/** @return {undefined} */ +jQuery.event.prototype.stopPropagation = function() {}; + +/** @type {Element} */ +jQuery.event.prototype.target; + +/** @type {number} */ +jQuery.event.prototype.timeStamp; + +/** @type {string} */ +jQuery.event.prototype.type; + +/** @type {number} */ +jQuery.event.prototype.which; + +/** + * @param {(Object|boolean)} arg1 + * @param {...*} var_args + * @return {Object} + */ +jQuery.extend = function(arg1, var_args) {}; + +/** + * @param {(Object|boolean)} arg1 + * @param {...*} var_args + * @return {Object} + */ +jQuery.prototype.extend = function(arg1, var_args) {}; + +/** + * @param {(Object|boolean)} arg1 + * @param {...*} var_args + * @return {Object} + */ +$.extend = function(arg1, var_args) {}; + +/** + * @param {(string|number|function())=} duration + * @param {(function()|string)=} arg2 + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.fadeIn = function(duration, arg2, callback) {}; + +/** + * @param {(string|number|function())=} duration + * @param {(function()|string)=} arg2 + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.fadeOut = function(duration, arg2, callback) {}; + +/** + * @param {(string|number)} duration + * @param {number} opacity + * @param {(function()|string)=} arg3 + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.fadeTo = function(duration, opacity, arg3, callback) {}; + +/** + * @param {(string|number|function())=} duration + * @param {(string|function())=} easing + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.fadeToggle = function(duration, easing, callback) {}; + +/** + * @param {(jQuerySelector|function(number)|Element|jQuery)} arg1 + * @return {!jQuery} + */ +jQuery.prototype.filter = function(arg1) {}; + +/** + * @param {(jQuerySelector|jQuery|Element)} arg1 + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.find = function(arg1) {}; + +/** @return {!jQuery} */ +jQuery.prototype.first = function() {}; + +/** @see http://docs.jquery.com/Plugins/Authoring */ +jQuery.fn; + +/** @see http://docs.jquery.com/Plugins/Authoring */ +$.fn; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.focus = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.focusin = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.focusout = function(arg1, handler) {}; + +/** @const */ +jQuery.fx = {}; + +/** @const */ +$.fx = {}; + +/** @type {number} */ +jQuery.fx.interval; + +/** @type {number} */ +$.fx.interval; + +/** @type {boolean} */ +jQuery.fx.off; + +/** @type {boolean} */ +$.fx.off; + +/** + * @param {string} url + * @param {(Object.|string| + * function(string,string,jQuery.jqXHR))=} data + * @param {(function(string,string,jQuery.jqXHR)|string)=} success + * @param {string=} dataType + * @return {jQuery.jqXHR} + */ +jQuery.get = function(url, data, success, dataType) {}; + +/** + * @param {number=} index + * @return {(Element|Array.)} + * @nosideeffects + */ +jQuery.prototype.get = function(index) {}; + +/** + * @param {string} url + * @param {(Object.|string| + * function(string,string,jQuery.jqXHR))=} data + * @param {(function(string,string,jQuery.jqXHR)|string)=} success + * @param {string=} dataType + * @return {jQuery.jqXHR} + */ +$.get = function(url, data, success, dataType) {}; + +/** + * @param {string} url + * @param {(Object.|function(Object,string,jQuery.jqXHR))=} data + * @param {function(Object,string,jQuery.jqXHR)=} success + * @return {jQuery.jqXHR} + */ +jQuery.getJSON = function(url, data, success) {}; + +/** + * @param {string} url + * @param {(Object.|function(Object,string,jQuery.jqXHR))=} data + * @param {function(Object,string,jQuery.jqXHR)=} success + * @return {jQuery.jqXHR} + */ +$.getJSON = function(url, data, success) {}; + +/** + * @param {string} url + * @param {function(Node,string,jQuery.jqXHR)=} success + * @return {jQuery.jqXHR} + */ +jQuery.getScript = function(url, success) {}; + +/** + * @param {string} url + * @param {function(Node,string,jQuery.jqXHR)=} success + * @return {jQuery.jqXHR} + */ +$.getScript = function(url, success) {}; + +/** @param {string} code */ +jQuery.globalEval = function(code) {}; + +/** @param {string} code */ +$.globalEval = function(code) {}; + +/** + * @param {Array.<*>} arr + * @param {function(*,number)} fnc + * @param {boolean=} invert + * @return {Array.<*>} + */ +jQuery.grep = function(arr, fnc, invert) {}; + +/** + * @param {Array.<*>} arr + * @param {function(*,number)} fnc + * @param {boolean=} invert + * @return {Array.<*>} + */ +$.grep = function(arr, fnc, invert) {}; + +/** + * @param {(string|Element)} arg1 + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.has = function(arg1) {}; + +/** + * @param {string} className + * @return {boolean} + * @nosideeffects + */ +jQuery.prototype.hasClass = function(className) {}; + +/** + * @param {Element} elem + * @return {boolean} + * @nosideeffects + */ +jQuery.hasData = function(elem) {}; + +/** + * @param {Element} elem + * @return {boolean} + * @nosideeffects + */ +$.hasData = function(elem) {}; + +/** + * @param {(string|number|function(number,number))=} arg1 + * @return {(number|!jQuery)} + */ +jQuery.prototype.height = function(arg1) {}; + +/** + * @param {(string|number|function())=} duration + * @param {(function()|string)=} arg2 + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.hide = function(duration, arg2, callback) {}; + +/** @param {boolean} hold */ +jQuery.holdReady = function(hold) {}; + +/** @param {boolean} hold */ +$.holdReady = function(hold) {}; + +/** + * @param {function(!jQuery.event=)} arg1 + * @param {function(!jQuery.event=)=} handlerOut + * @return {!jQuery} + */ +jQuery.prototype.hover = function(arg1, handlerOut) {}; + +/** + * @param {(string|function(number,string))=} arg1 + * @return {(string|!jQuery)} + */ +jQuery.prototype.html = function(arg1) {}; + +/** + * @param {*} value + * @param {Array.<*>} arr + * @param {number=} fromIndex + * @return {number} + * @nosideeffects + */ +jQuery.inArray = function(value, arr, fromIndex) {}; + +/** + * @param {*} value + * @param {Array.<*>} arr + * @param {number=} fromIndex + * @return {number} + * @nosideeffects + */ +$.inArray = function(value, arr, fromIndex) {}; + +/** + * @param {(jQuerySelector|Element|jQuery)=} arg1 + * @return {number} + */ +jQuery.prototype.index = function(arg1) {}; + +/** + * @return {number} + * @nosideeffects + */ +jQuery.prototype.innerHeight = function() {}; + +/** + * @return {number} + * @nosideeffects + */ +jQuery.prototype.innerWidth = function() {}; + +/** + * @param {(jQuerySelector|Element|jQuery)} target + * @return {!jQuery} + */ +jQuery.prototype.insertAfter = function(target) {}; + +/** + * @param {(jQuerySelector|Element|jQuery)} target + * @return {!jQuery} + */ +jQuery.prototype.insertBefore = function(target) {}; + +/** + * @param {(jQuerySelector|function(number)|jQuery|Element)} arg1 + * @return {boolean} + */ +jQuery.prototype.is = function(arg1) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +jQuery.isArray = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +$.isArray = function(obj) {}; + +/** + * @param {Object} obj + * @return {boolean} + * @nosideeffects + */ +jQuery.isEmptyObject = function(obj) {}; + +/** + * @param {Object} obj + * @return {boolean} + * @nosideeffects + */ +$.isEmptyObject = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +jQuery.isFunction = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +$.isFunction = function(obj) {}; + +/** + * @param {*} value + * @return {boolean} + * @nosideeffects + */ +jQuery.isNumeric = function(value) {}; + +/** + * @param {*} value + * @return {boolean} + * @nosideeffects + */ +$.isNumeric = function(value) {}; + +/** + * @param {Object} obj + * @return {boolean} + * @nosideeffects + */ +jQuery.isPlainObject = function(obj) {}; + +/** + * @param {Object} obj + * @return {boolean} + * @nosideeffects + */ +$.isPlainObject = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +jQuery.isWindow = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + * @nosideeffects + */ +$.isWindow = function(obj) {}; + +/** + * @param {Element} node + * @return {boolean} + * @nosideeffects + */ +jQuery.isXMLDoc = function(node) {}; + +/** + * @param {Element} node + * @return {boolean} + * @nosideeffects + */ +$.isXMLDoc = function(node) {}; + +/** @type {string} */ +jQuery.prototype.jquery; + +/** + * @constructor + * @extends {XMLHttpRequest} + * @implements {jQuery.Promise} + * @private + * @see http://api.jquery.com/jQuery.ajax/#jqXHR + */ +jQuery.jqXHR = function () {}; + +/** + * @override + * @param {jQueryCallback} alwaysCallbacks + * @param {jQueryCallback=} alwaysCallbacks2 + * @return {jQuery.jqXHR} + */ +jQuery.jqXHR.prototype.always = + function(alwaysCallbacks, alwaysCallbacks2) {}; + +/** + * @deprecated + * @param {function()} callback + * @return {jQuery.jqXHR} +*/ +jQuery.jqXHR.prototype.complete = function (callback) {}; + +/** + * @override + * @param {jQueryCallback} doneCallbacks + * @return {jQuery.jqXHR} + */ +jQuery.jqXHR.prototype.done = function(doneCallbacks) {}; + +/** + * @deprecated + * @param {function()} callback + * @return {jQuery.jqXHR} +*/ +jQuery.jqXHR.prototype.error = function (callback) {}; + +/** + * @override + * @param {jQueryCallback} failCallbacks + * @return {jQuery.jqXHR} + */ +jQuery.jqXHR.prototype.fail = function(failCallbacks) {}; + +/** + * @deprecated + * @override + * @return {boolean} + * @nosideeffects + */ +jQuery.jqXHR.prototype.isRejected = function() {}; + +/** + * @deprecated + * @override + * @return {boolean} + * @nosideeffects + */ +jQuery.jqXHR.prototype.isResolved = function() {}; + +/** + * @deprecated + * @override + */ +jQuery.jqXHR.prototype.onreadystatechange = function (callback) {}; + +/** + * @param {function()=} doneFilter + * @param {function()=} failFilter + * @param {function()=} progressFilter + * @return {jQuery.jqXHR} + */ +jQuery.jqXHR.prototype.pipe = + function(doneFilter, failFilter, progressFilter) {}; + +/** + * @deprecated + * @param {function()} callback + * @return {jQuery.jqXHR} +*/ +jQuery.jqXHR.prototype.success = function (callback) {}; + +/** + * @override + * @param {jQueryCallback} doneCallbacks + * @param {jQueryCallback=} failCallbacks + * @param {jQueryCallback=} progressCallbacks + * @return {jQuery.jqXHR} + */ +jQuery.jqXHR.prototype.then = + function(doneCallbacks, failCallbacks, progressCallbacks) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.keydown = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.keypress = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.keyup = function(arg1, handler) {}; + +/** @return {!jQuery} */ +jQuery.prototype.last = function() {}; + +/** @type {number} */ +jQuery.prototype.length; + +/** + * @deprecated + * @param {(string|Object)} arg1 + * @param {(function(!jQuery.event=)|Object)=} arg2 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.live = function(arg1, arg2, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.|string)} arg1 + * @param {(function(!jQuery.event=)|Object.|string)=} arg2 + * @param {function(string,string,XMLHttpRequest)=} complete + * @return {!jQuery} + */ +jQuery.prototype.load = function(arg1, arg2, complete) {}; + +/** + * @param {*} obj + * @return {Array.<*>} + */ +jQuery.makeArray = function(obj) {}; + +/** + * @param {*} obj + * @return {Array.<*>} + */ +$.makeArray = function(obj) {}; + +/** + * @param {(Array.<*>|Object.)} arg1 + * @param {(function(*,number)|function(*,(string|number)))} callback + * @return {Array.<*>} + */ +jQuery.map = function(arg1, callback) {}; + +/** + * @param {function(number,Element)} callback + * @return {!jQuery} + */ +jQuery.prototype.map = function(callback) {}; + +/** + * @param {(Array.<*>|Object.)} arg1 + * @param {(function(*,number)|function(*,(string|number)))} callback + * @return {Array.<*>} + */ +$.map = function(arg1, callback) {}; + +/** + * @param {Array.<*>} first + * @param {Array.<*>} second + * @return {Array.<*>} + */ +jQuery.merge = function(first, second) {}; + +/** + * @param {Array.<*>} first + * @param {Array.<*>} second + * @return {Array.<*>} + */ +$.merge = function(first, second) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mousedown = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mouseenter = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mouseleave = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mousemove = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mouseout = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mouseover = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.mouseup = function(arg1, handler) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.next = function(selector) {}; + +/** + * @param {string=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.nextAll = function(selector) {}; + +/** + * @param {(jQuerySelector|Element)=} arg1 + * @param {jQuerySelector=} filter + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.nextUntil = function(arg1, filter) {}; + +/** + * @param {boolean=} removeAll + * @return {Object} + */ +jQuery.noConflict = function(removeAll) {}; + +/** + * @param {boolean=} removeAll + * @return {Object} + */ +$.noConflict = function(removeAll) {}; + +/** + * @return {function()} + * @nosideeffects + */ +jQuery.noop = function() {}; + +/** + * @return {function()} + * @nosideeffects + */ +$.noop = function() {}; + +/** + * @param {(jQuerySelector|Array.|function(number)|jQuery)} arg1 + * @return {!jQuery} + */ +jQuery.prototype.not = function(arg1) {}; + +/** + * @return {number} + * @nosideeffects + */ +jQuery.now = function() {}; + +/** + * @return {number} + * @nosideeffects + */ +$.now = function() {}; + +/** + * @param {(string|Object.)=} arg1 + * @param {(string|function(!jQuery.event=))=} selector + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.off = function(arg1, selector, handler) {}; + +/** + * @param {({left:number,top:number}| + * function(number,{top:number,left:number}))=} arg1 + * @return {({left:number,top:number}|!jQuery)} + */ +jQuery.prototype.offset = function(arg1) {}; + +/** + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.offsetParent = function() {}; + +/** + * @param {(string|Object.)} arg1 + * @param {*=} selector + * @param {*=} data + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.on = function(arg1, selector, data, handler) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {*=} arg2 + * @param {*=} arg3 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.one = function(arg1, arg2, arg3, handler) {}; + +/** + * @param {boolean=} includeMargin + * @return {number} + * @nosideeffects + */ +jQuery.prototype.outerHeight = function(includeMargin) {}; + +/** + * @param {boolean=} includeMargin + * @return {number} + * @nosideeffects + */ +jQuery.prototype.outerWidth = function(includeMargin) {}; + +/** + * @param {(Object.|Array.>)} obj + * @param {boolean=} traditional + * @return {string} + */ +jQuery.param = function(obj, traditional) {}; + +/** + * @param {(Object.|Array.>)} obj + * @param {boolean=} traditional + * @return {string} + */ +$.param = function(obj, traditional) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.parent = function(selector) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.parents = function(selector) {}; + +/** + * @param {(jQuerySelector|Element)=} arg1 + * @param {jQuerySelector=} filter + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.parentsUntil = function(arg1, filter) {}; + +/** + * @param {string} json + * @return {Object.} + */ +jQuery.parseJSON = function(json) {}; + +/** + * @param {string} json + * @return {Object.} + */ +$.parseJSON = function(json) {}; + +/** + * @param {string} data + * @return {Document} + */ +jQuery.parseXML = function(data) {}; + +/** + * @param {string} data + * @return {Document} + */ +$.parseXML = function(data) {}; + +/** + * @return {{left:number,top:number}} + * @nosideeffects + */ +jQuery.prototype.position = function() {}; + +/** + * @param {string} url + * @param {(Object.|string| + * function(string,string,jQuery.jqXHR))=} data + * @param {(function(string,string,jQuery.jqXHR)|string)=} success + * @param {string=} dataType + * @return {jQuery.jqXHR} + */ +jQuery.post = function(url, data, success, dataType) {}; + +/** + * @param {string} url + * @param {(Object.|string| + * function(string,string,jQuery.jqXHR))=} data + * @param {(function(string,string,jQuery.jqXHR)|string)=} success + * @param {string=} dataType + * @return {jQuery.jqXHR} + */ +$.post = function(url, data, success, dataType) {}; + +/** + * @param {(string|Element|jQuery|function(number,string))} arg1 + * @param {(string|Element|jQuery)=} content + * @return {!jQuery} + */ +jQuery.prototype.prepend = function(arg1, content) {}; + +/** + * @param {(jQuerySelector|Element|jQuery)} target + * @return {!jQuery} + */ +jQuery.prototype.prependTo = function(target) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.prev = function(selector) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.prevAll = function(selector) {}; + +/** + * @param {(jQuerySelector|Element)=} arg1 + * @param {jQuerySelector=} filter + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.prevUntil = function(arg1, filter) {}; + +/** + * @param {(string|Object)=} type + * @param {Object=} target + * @return {jQuery.Promise} + */ +jQuery.prototype.promise = function(type, target) {}; + +/** + * @interface + * @private + * @see http://api.jquery.com/Types/#Promise + */ +jQuery.Promise = function () {}; + +/** + * @param {jQueryCallback} alwaysCallbacks + * @param {jQueryCallback=} alwaysCallbacks2 + * @return {jQuery.Promise} + */ +jQuery.Promise.prototype.always = + function(alwaysCallbacks, alwaysCallbacks2) {}; + +/** + * @param {jQueryCallback} doneCallbacks + * @return {jQuery.Promise} + */ +jQuery.Promise.prototype.done = function(doneCallbacks) {}; + +/** + * @param {jQueryCallback} failCallbacks + * @return {jQuery.Promise} + */ +jQuery.Promise.prototype.fail = function(failCallbacks) {}; + +/** + * @deprecated + * @return {boolean} + * @nosideeffects + */ +jQuery.Promise.prototype.isRejected = function() {}; + +/** + * @deprecated + * @return {boolean} + * @nosideeffects + */ +jQuery.Promise.prototype.isResolved = function() {}; + +/** + * @param {function()=} doneFilter + * @param {function()=} failFilter + * @param {function()=} progressFilter + * @return {jQuery.Promise} + */ +jQuery.Promise.prototype.pipe = + function(doneFilter, failFilter, progressFilter) {}; + +/** + * @param {jQueryCallback} doneCallbacks + * @param {jQueryCallback=} failCallbacks + * @param {jQueryCallback=} progressCallbacks + * @return {jQuery.Promise} + */ +jQuery.Promise.prototype.then = + function(doneCallbacks, failCallbacks, progressCallbacks) {}; + +/** + * @param {(string|Object.)} arg1 + * @param {(string|number|boolean|function(number,String))=} arg2 + * @return {(string|boolean|!jQuery)} + */ +jQuery.prototype.prop = function(arg1, arg2) {}; + +/** + * @param {...*} var_args + * @return {function()} + */ +jQuery.proxy = function(var_args) {}; + +/** + * @param {...*} var_args + * @return {function()} + */ +$.proxy = function(var_args) {}; + +/** + * @param {Array.} elements + * @param {string=} name + * @param {Array.<*>=} args + * @return {!jQuery} + */ +jQuery.prototype.pushStack = function(elements, name, args) {}; + +/** + * @param {(string|Array.|function(function()))=} queueName + * @param {(Array.|function(function()))=} arg2 + * @return {(Array.|!jQuery)} + */ +jQuery.prototype.queue = function(queueName, arg2) {}; + +/** + * @param {Element} elem + * @param {string=} queueName + * @param {(Array.|function())=} arg3 + * @return {(Array.|!jQuery)} + */ +jQuery.queue = function(elem, queueName, arg3) {}; + +/** + * @param {Element} elem + * @param {string=} queueName + * @param {(Array.|function())=} arg3 + * @return {(Array.|!jQuery)} + */ +$.queue = function(elem, queueName, arg3) {}; + +/** + * @param {function()} handler + * @return {!jQuery} + */ +jQuery.prototype.ready = function(handler) {}; + +/** + * @param {string=} selector + * @return {!jQuery} + */ +jQuery.prototype.remove = function(selector) {}; + +/** + * @param {string} attributeName + * @return {!jQuery} + */ +jQuery.prototype.removeAttr = function(attributeName) {}; + +/** + * @param {(string|function(number,string))=} arg1 + * @return {!jQuery} + */ +jQuery.prototype.removeClass = function(arg1) {}; + +/** + * @param {(string|Array.)=} arg1 + * @return {!jQuery} + */ +jQuery.prototype.removeData = function(arg1) {}; + +/** + * @param {Element} elem + * @param {string=} name + * @return {!jQuery} + */ +jQuery.removeData = function(elem, name) {}; + +/** + * @param {Element} elem + * @param {string=} name + * @return {!jQuery} + */ +$.removeData = function(elem, name) {}; + +/** + * @param {string} propertyName + * @return {!jQuery} + */ +jQuery.prototype.removeProp = function(propertyName) {}; + +/** + * @param {jQuerySelector} target + * @return {!jQuery} + */ +jQuery.prototype.replaceAll = function(target) {}; + +/** + * @param {(string|Element|jQuery|function())} arg1 + * @return {!jQuery} + */ +jQuery.prototype.replaceWith = function(arg1) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.resize = function(arg1, handler) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.scroll = function(arg1, handler) {}; + +/** + * @param {number=} value + * @return {(number|!jQuery)} + */ +jQuery.prototype.scrollLeft = function(value) {}; + +/** + * @param {number=} value + * @return {(number|!jQuery)} + */ +jQuery.prototype.scrollTop = function(value) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.select = function(arg1, handler) {}; + +/** + * @return {string} + * @nosideeffects + */ +jQuery.prototype.serialize = function() {}; + +/** + * @return {Array.>} + * @nosideeffects + */ +jQuery.prototype.serializeArray = function() {}; + +/** + * @param {(string|number|function())=} duration + * @param {(function()|string)=} arg2 + * @param {function()=} callback + * @return {!jQuery} + */ +jQuery.prototype.show = function(duration, arg2, callback) {}; + +/** + * @param {jQuerySelector=} selector + * @return {!jQuery} + * @nosideeffects + */ +jQuery.prototype.siblings = function(selector) {}; + +/** + * @return {number} + * @nosideeffects + */ +jQuery.prototype.size = function() {}; + +/** + * @param {number} start + * @param {number=} end + * @return {!jQuery} + */ +jQuery.prototype.slice = function(start, end) {}; + +/** + * @param {(Object.|string|number)=} optionsOrDuration + * @param {(function()|string)=} completeOrEasing + * @param {function()=} complete + * @return {!jQuery} + */ +jQuery.prototype.slideDown = + function(optionsOrDuration, completeOrEasing, complete) {}; + +/** + * @param {(Object.|string|number)=} optionsOrDuration + * @param {(function()|string)=} completeOrEasing + * @param {function()=} complete + * @return {!jQuery} + */ +jQuery.prototype.slideToggle = + function(optionsOrDuration, completeOrEasing, complete) {}; + +/** + * @param {(Object.|string|number)=} optionsOrDuration + * @param {(function()|string)=} completeOrEasing + * @param {function()=} complete + * @return {!jQuery} + */ +jQuery.prototype.slideUp = + function(optionsOrDuration, completeOrEasing, complete) {}; + +/** + * @param {(boolean|string)=} arg1 + * @param {boolean=} arg2 + * @param {boolean=} jumpToEnd + * @return {!jQuery} + */ +jQuery.prototype.stop = function(arg1, arg2, jumpToEnd) {}; + +/** + * @deprecated + * @return {!jQuery} + * @nosideeffects + */ +jQuery.sub = function() {}; + +/** + * @deprecated + * @return {!jQuery} + * @nosideeffects + */ +$.sub = function() {}; + +/** + * @param {(function(!jQuery.event=)|Object.)=} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.submit = function(arg1, handler) {}; + +/** @type {Object.} */ +jQuery.support; + +/** @type {Object.} */ +$.support; + +/** @type {boolean} */ +jQuery.support.boxModel; + +/** @type {boolean} */ +$.support.boxModel; + +/** @type {boolean} */ +jQuery.support.changeBubbles; + +/** @type {boolean} */ +$.support.changeBubbles; + +/** @type {boolean} */ +jQuery.support.cssFloat; + +/** @type {boolean} */ +$.support.cssFloat; + +/** @type {boolean} */ +jQuery.support.fixedPosition; + +/** @type {boolean} */ +$.support.fixedPosition; + +/** @type {boolean} */ +jQuery.support.hrefNormalized; + +/** @type {boolean} */ +$.support.hrefNormalized; + +/** @type {boolean} */ +jQuery.support.htmlSerialize; + +/** @type {boolean} */ +$.support.htmlSerialize; + +/** @type {boolean} */ +jQuery.support.leadingWhitespace; + +/** @type {boolean} */ +$.support.leadingWhitespace; + +/** @type {boolean} */ +jQuery.support.noCloneEvent; + +/** @type {boolean} */ +$.support.noCloneEvent; + +/** @type {boolean} */ +jQuery.support.opacity; + +/** @type {boolean} */ +$.support.opacity; + +/** @type {boolean} */ +jQuery.support.scriptEval; + +/** @type {boolean} */ +$.support.scriptEval; + +/** @type {boolean} */ +jQuery.support.style; + +/** @type {boolean} */ +$.support.style; + +/** @type {boolean} */ +jQuery.support.submitBubbles; + +/** @type {boolean} */ +$.support.submitBubbles; + +/** @type {boolean} */ +jQuery.support.tbody; + +/** @type {boolean} */ +$.support.tbody; + +/** + * @param {(string|function(number,string))=} arg1 + * @return {(string|!jQuery)} + */ +jQuery.prototype.text = function(arg1) {}; + +/** + * @return {Array.} + * @nosideeffects + */ +jQuery.prototype.toArray = function() {}; + +/** + * @param {(function(!jQuery.event=)|string|number|function()|boolean)=} arg1 + * @param {(function(!jQuery.event=)|function()|string)=} arg2 + * @param {(function(!jQuery.event=)|function())=} arg3 + * @return {!jQuery} + */ +jQuery.prototype.toggle = function(arg1, arg2, arg3) {}; + +/** + * @param {(string|boolean|function(number,string,boolean))=} arg1 + * @param {boolean=} flag + * @return {!jQuery} + */ +jQuery.prototype.toggleClass = function(arg1, flag) {}; + +/** + * @param {(string|jQuery.event)} arg1 + * @param {...*} var_args + * @return {!jQuery} + */ +jQuery.prototype.trigger = function(arg1, var_args) {}; + +/** + * @param {string|jQuery.event} eventType + * @param {Array.<*>=} extraParameters + * @return {*} + */ +jQuery.prototype.triggerHandler = function(eventType, extraParameters) {}; + +/** + * @param {string} str + * @return {string} + * @nosideeffects + */ +jQuery.trim = function(str) {}; + +/** + * @param {string} str + * @return {string} + * @nosideeffects + */ +$.trim = function(str) {}; + +/** + * @param {*} obj + * @return {string} + * @nosideeffects + */ +jQuery.type = function(obj) {}; + +/** + * @param {*} obj + * @return {string} + * @nosideeffects + */ +$.type = function(obj) {}; + +/** + * @param {(string|function(!jQuery.event=)|jQuery.event)=} arg1 + * @param {(function(!jQuery.event=)|boolean)=} arg2 + * @return {!jQuery} + */ +jQuery.prototype.unbind = function(arg1, arg2) {}; + +/** + * @param {string=} arg1 + * @param {(string|Object.)=} arg2 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.undelegate = function(arg1, arg2, handler) {}; + +/** + * @param {Array.} arr + * @return {Array.} + */ +jQuery.unique = function(arr) {}; + +/** + * @param {Array.} arr + * @return {Array.} + */ +$.unique = function(arr) {}; + +/** + * @param {(function(!jQuery.event=)|Object.)} arg1 + * @param {function(!jQuery.event=)=} handler + * @return {!jQuery} + */ +jQuery.prototype.unload = function(arg1, handler) {}; + +/** @return {!jQuery} */ +jQuery.prototype.unwrap = function() {}; + +/** + * @param {(string|Array.|function(number,*))=} arg1 + * @return {(string|number|Array.|!jQuery)} + */ +jQuery.prototype.val = function(arg1) {}; + +/** + * @param {jQuery.deferred} deferred + * @param {...jQuery.deferred} deferreds + * @return {jQuery.Promise} + */ +jQuery.when = function(deferred, deferreds) {}; + +/** + * @param {jQuery.deferred} deferred + * @param {...jQuery.deferred} deferreds + * @return {jQuery.Promise} + */ +$.when = function(deferred, deferreds) {}; + +/** + * @param {(string|number|function(number,number))=} arg1 + * @return {(number|!jQuery)} + */ +jQuery.prototype.width = function(arg1) {}; + +/** + * @param {(string|jQuerySelector|Element|jQuery|function(number))} arg1 + * @return {!jQuery} + */ +jQuery.prototype.wrap = function(arg1) {}; + +/** + * @param {(string|jQuerySelector|Element|jQuery)} wrappingElement + * @return {!jQuery} + */ +jQuery.prototype.wrapAll = function(wrappingElement) {}; + +/** + * @param {(string|function(number))} arg1 + * @return {!jQuery} + */ +jQuery.prototype.wrapInner = function(arg1) {}; diff --git a/test/index.html b/test/index.html index 57d7f9eb76..d7c982ba5d 100644 --- a/test/index.html +++ b/test/index.html @@ -23,7 +23,7 @@ - +