diff --git a/README.md b/README.md
index c6b75370e..c064a4184 100755
--- a/README.md
+++ b/README.md
@@ -69,6 +69,7 @@ List of Definitions
* [Firebase](https://www.firebase.com/docs/javascript/firebase) (by [Vincent Bortone](https://github.com/vbortone))
* [Firefox](https://developer.mozilla.org/en-US/docs/Web/API) (by [vvakame](https://github.com/vvakame))
* [FlexSlider](http://www.woothemes.com/flexslider/) (by [Diullei Gomes](https://github.com/Diullei))
+* [Flight by Twitter](http://flightjs.github.com/flight/) (by [Jonathan Hedrén](https://github.com/jonathanhedren))
* [Foundation](http://foundation.zurb.com/) (by [Boris Yankov](https://github.com/borisyankov))
* [FPSMeter](http://darsa.in/fpsmeter/) (by [Aaron Lampros](https://github.com/alampros))
* [FullCalendar](http://arshaw.com/fullcalendar/) (by [Neil Stalker](https://github.com/nestalk))
@@ -95,7 +96,6 @@ List of Definitions
* [i18next](http://i18next.com/) (by [Maarten Docter](https://github.com/mdocter))
* [iCheck](http://damirfoy.com/iCheck/) (by [Dániel Tar](https://github.com/qcz))
* [Impress.js](https://github.com/bartaz/impress.js) (by [Boris Yankov](https://github.com/borisyankov))
-* [Intl](http://www.ecma-international.org/ecma-402/1.0/) (by [Jeffery Grajkowski](http://github.com/pushplay))
* [iScroll](http://cubiq.org/iscroll-4) (by [Boris Yankov](https://github.com/borisyankov) and [Christiaan Rakowski](https://github.com/csrakowski))
* [jake](https://github.com/mde/jake) (by [Kon](http://phyzkit.net/))
* [Jasmine](http://pivotal.github.com/jasmine/) (by [Boris Yankov](https://github.com/borisyankov))
@@ -109,9 +109,10 @@ List of Definitions
* [jQuery.areYouSure](https://github.com/codedance/jquery.AreYouSure) (by [Jon Egerton](https://github.com/jonegerton))
* [jQuery.autosize](http://www.jacklmoore.com/autosize/) (by [Jack Moore](http://www.jacklmoore.com/))
* [jQuery.BBQ](http://benalman.com/projects/jquery-bbq-plugin/) (by [Adam R. Smith](https://github.com/sunetos))
-* [jQuery.contextMenu](http://medialize.github.com/jQuery-contextMenu/) (by [Natan Vivo](https://github.com/nvivo/))
+* [jQuery.CLEditor](http://premiumsoftware.net/CLEditor) (by [Jeffery Grajkowski](https://github.com/pushplay))
* [jQuery.clientSideLogging](https://github.com/remybach/jQuery.clientSideLogging/) (by [Diullei Gomes](https://github.com/diullei/))
* [jQuery.Colorbox](http://www.jacklmoore.com/colorbox/) (by [Gidon Junge](https://github.com/gjunge))
+* [jQuery.contextMenu](http://medialize.github.com/jQuery-contextMenu/) (by [Natan Vivo](https://github.com/nvivo/))
* [jQuery.Cookie](https://github.com/carhartl/jquery-cookie) (by [Roy Goode](https://github.com/RoyGoode))
* [jQuery.Cycle](http://jquery.malsup.com/cycle/) (by [François Guillot](http://fguillot.developpez.com/))
* [jQuery.dataTables](http://www.datatables.net) (by [Armin Sander](https://github.com/pragmatrix))
@@ -135,6 +136,7 @@ List of Definitions
* [jQuery.Transit](http://ricostacruz.com/jquery.transit/) (by [MrBigDog2U](https://github.com/MrBigDog2U))
* [jQuery.Validation](http://bassistance.de/jquery-plugins/jquery-plugin-validation/) (by [Boris Yankov](https://github.com/borisyankov))
* [jQuery.Watermark](http://jquery-watermark.googlecode.com) (by [Anwar Javed](https://github.com/anwarjaved))
+* [jQuery.base64](https://github.com/yatt/jquery.base64) (by [Shinya Mochizuki](https://github.com/enrapt-mochizuki))
* [jScrollPane](http://jscrollpane.kelvinluck.com) (by [Dániel Tar](https://github.com/qcz))
* [JSDeferred](http://cho45.stfuawsc.com/jsdeferred/) (by [Daisuke Mino](https://github.com/minodisk))
* [JSONEditorOnline](https://github.com/josdejong/jsoneditoronline) (by [Vincent Bortone](https://github.com/vbortone/))
@@ -147,7 +149,7 @@ List of Definitions
* [Knockout.ES5](https://github.com/SteveSanderson/knockout-es5) (by [Sebastián Galiano](https://github.com/sgaliano))
* [Knockout.Mapper](https://github.com/LucasLorentz/knockout.mapper) (by [Brandon Meyer](https://github.com/BMeyerKC))
* [Knockout.Mapping](https://github.com/SteveSanderson/knockout.mapping) (by [Boris Yankov](https://github.com/borisyankov))
-* [Knockout.Postbox](https://github.com/rniemeyer/knockout-postbox) (by [Judah Gabriel](https://github.com/JudahGabriel))
+* [Knockout.Postbox](https://github.com/rniemeyer/knockout-postbox) (by [Judah Gabriel Himango](https://github.com/JudahGabriel))
* [Knockout.Validation](https://github.com/ericmbarnard/Knockout-Validation) (by [Dan Ludwig](https://github.com/danludwig))
* [Knockout.Viewmodel](http://coderenaissance.github.com/knockout.viewmodel/) (by [Oisin Grehan](https://github.com/oising))
* [ko.editables](http://romanych.github.com/ko.editables/) (by [Oisin Grehan](https://github.com/oising))
@@ -158,6 +160,7 @@ List of Definitions
* [Levelup](https://github.com/rvagg/node-levelup) (by [Bret Little](https://github.com/blittle))
* [linq.js](http://linqjs.codeplex.com/) (by [Marcin Najder](https://github.com/marcinnajder))
* [Livestamp.js](https://github.com/mattbradley/livestampjs) (by [Vincent Bortone](https://github.com/vbortone))
+* [Lodash](http://lodash.com/) (by [Brian Zengel](https://github.com/bczengel))
* [Logg](https://github.com/dpup/node-logg) (by [Bret Little](https://github.com/blittle))
* [Marked](https://github.com/chjj/marked) (by [William Orr](https://github.com/worr))
* [mCustomScrollbar](https://github.com/malihu/malihu-custom-scrollbar-plugin) (by [Sarah Williams] (https://github.com/flurg))
@@ -172,7 +175,9 @@ List of Definitions
* [node-ffi](https://github.com/rbranson/node-ffi) (by [Paul Loyd](https://github.com/loyd))
* [node_zeromq](https://github.com/JustinTulloss/zeromq.node) (by [Dave McKeown](https://github.com/davemckeown))
* [node-sqlserver](https://github.com/WindowsAzure/node-sqlserver) (by [Boris Yankov](https://github.com/borisyankov))
+* [NProgress](https://github.com/rstacruz/nprogress) (by [Judah Gabriel Himango](https://github.com/judahgabriel))
* [Numeral.js](https://github.com/adamwdraper/Numeral-js) (by [Vincent Bortone](https://github.com/vbortone/))
+* [OpenLayers] (https://github.com/openlayers/openlayers) (by [Ilya Bolkhovsky](https://github.com/bolhovsky/))
* [Parallel.js](https://github.com/adambom/parallel.js) (by [Josh Baldwin](https://github.com/jbaldwin))
* [PDF.js](https://github.com/mozilla/pdf.js) (by [Josh Baldwin](https://github.com/jbaldwin))
* [Persona](http://www.mozilla.org/en-US/persona) (by [James Frasca](https://github.com/Nycto))
@@ -239,7 +244,6 @@ Requested Definitions
* [google.visualizations](https://developers.google.com/chart/)
* [Prelude.ls](http://gkz.github.com/prelude-ls/)
* [MooTools](http://mootools.net/)
-* [Lo-Dash](http://lodash.com/)
* [java](https://github.com/nearinfinity/node-java)
* [SVG.js](http://www.svgjs.com/)
diff --git a/_infrastructure/tests/compile-runner.bat b/_infrastructure/tests/compile-runner.bat
new file mode 100644
index 000000000..53e014841
--- /dev/null
+++ b/_infrastructure/tests/compile-runner.bat
@@ -0,0 +1 @@
+tsc runner.ts --out runner.js --module commonjs
\ No newline at end of file
diff --git a/_infrastructure/tests/runner.js b/_infrastructure/tests/runner.js
index fd926bcb1..3721f7e11 100644
--- a/_infrastructure/tests/runner.js
+++ b/_infrastructure/tests/runner.js
@@ -552,10 +552,11 @@ else if (typeof require === "function")
else
return null;
})();
-///
-///
var DefinitelyTyped;
(function (DefinitelyTyped) {
+ ///
+ ///
+ ///
(function (TestManager) {
var path = require('path');
@@ -614,6 +615,10 @@ var DefinitelyTyped;
return Typing;
})();
+ /////////////////////////////////
+ // Given a document root + ts file pattern this class returns:
+ // all the TS files OR just tests OR just definition files
+ /////////////////////////////////
var FileHandler = (function () {
function FileHandler(path, pattern) {
this.path = path;
@@ -659,6 +664,10 @@ var DefinitelyTyped;
return FileHandler;
})();
+ /////////////////////////////////
+ // Timer.start starts a timer
+ // Timer.end stops the timer and sets asString to the pretty print value
+ /////////////////////////////////
var Timer = (function () {
function Timer() {
this.time = 0;
@@ -688,6 +697,9 @@ var DefinitelyTyped;
return Timer;
})();
+ /////////////////////////////////
+ // All the common things that we pring are functions of this class
+ /////////////////////////////////
var Print = (function () {
function Print(version, typings, tsFiles) {
this.version = version;
@@ -707,19 +719,19 @@ var DefinitelyTyped;
this.out(' \33[36m\33[1mTypeScript files :\33[0m ' + this.tsFiles + '\n');
};
- Print.prototype.printSyntaxChecking = function () {
+ Print.prototype.printSyntaxCheckingHeader = function () {
this.out('============================ \33[34m\33[1mSyntax checking\33[0m ================================\n');
};
- Print.prototype.printTypingTests = function () {
+ Print.prototype.printTypingTestsHeader = function () {
this.out('============================= \33[34m\33[1mTyping tests\33[0m ==================================\n');
};
- Print.prototype.printSuccess = function () {
+ Print.prototype.printSuccessCharacter = function () {
this.out('\33[36m\33[1m.\33[0m');
};
- Print.prototype.printFailure = function () {
+ Print.prototype.printFailureCharacter = function () {
this.out('x');
};
@@ -727,6 +739,23 @@ var DefinitelyTyped;
this.out('-----------------------------------------------------------------------------\n');
};
+ Print.prototype.printBoldDiv = function () {
+ this.out('=============================================================================\n');
+ };
+
+ Print.prototype.printErrorsHeader = function () {
+ this.out('=============================================================================\n');
+ this.out(' \33[34m\33[1mErrors in files\33[0m \n');
+ this.out('=============================================================================\n');
+ };
+
+ Print.prototype.printErrorsForFile = function (file) {
+ this.out('----------------- For file:' + file.formatName());
+ this.printBreak();
+ this.out(file.execResult.stderr);
+ this.printBreak();
+ };
+
Print.prototype.printfilesWithSintaxErrorMessage = function () {
this.out(' \33[36m\33[1mFiles with syntax error\33[0m\n');
};
@@ -751,7 +780,7 @@ var DefinitelyTyped;
this.out(' - \33[33m\33[1m' + file + '\33[0m\n');
};
- Print.prototype.breack = function () {
+ Print.prototype.printBreak = function () {
this.out('\n');
};
@@ -781,22 +810,30 @@ var DefinitelyTyped;
return Print;
})();
+ /////////////////////////////
+ // Represents the results of a test file execution
+ /////////////////////////////
var File = (function () {
- function File(name, hasError) {
- this.name = name;
- this.hasError = hasError;
+ function File(baseDir, filePathWithName, execResult) {
+ this.baseDir = baseDir;
+ this.filePathWithName = filePathWithName;
+ this.execResult = execResult;
}
- File.prototype.formatName = function (baseDir) {
- var dirName = path.dirname(this.name.substr(baseDir.length + 1)).replace('\\', '/');
+ // From '/complete/path/to/file' to 'specfolder/specfile.d.ts'
+ File.prototype.formatName = function () {
+ var dirName = path.dirname(this.filePathWithName.substr(this.baseDir.length + 1)).replace('\\', '/');
var dir = dirName.split('/')[0];
- var file = path.basename(this.name, '.ts');
- var ext = path.extname(this.name);
+ var file = path.basename(this.filePathWithName, '.ts');
+ var ext = path.extname(this.filePathWithName);
return dir + ((dirName.split('/').length > 1) ? '/-/' : '/') + '\33[36m\33[1m' + file + '\33[0m' + ext;
};
return File;
})();
+ /////////////////////////////
+ // Determine syntax errors in typings
+ /////////////////////////////
var SyntaxChecking = (function () {
function SyntaxChecking(fileHandler, out) {
this.fileHandler = fileHandler;
@@ -808,7 +845,7 @@ var DefinitelyTyped;
var list = [];
for (var i = 0; i < this.files.length; i++) {
- if (this.files[i].hasError) {
+ if (this.files[i].execResult.exitCode) {
list.push(this.files[i]);
}
}
@@ -820,7 +857,7 @@ var DefinitelyTyped;
var list = [];
for (var i = 0; i < this.files.length; i++) {
- if (!this.files[i].hasError) {
+ if (!this.files[i].execResult.exitCode) {
list.push(this.files[i]);
}
}
@@ -845,7 +882,7 @@ var DefinitelyTyped;
for (var i = 0; i < this.getFailedFiles().length; i++) {
var errorFile = this.getFailedFiles()[i];
- this.out.printErrorFile(errorFile.formatName(this.fileHandler.path));
+ this.out.printErrorFile(errorFile.formatName());
}
}
};
@@ -853,29 +890,26 @@ var DefinitelyTyped;
SyntaxChecking.prototype.run = function (it, file, len, maxLen, callback) {
var _this = this;
if (!endsWith(file.toUpperCase(), '-TESTS.TS') && endsWith(file.toUpperCase(), '.TS') && file.indexOf('../_infrastructure') < 0) {
- new Test(file).run(function (o) {
- var failed = false;
-
- if (o.exitCode === 1) {
- _this.out.printFailure();
- failed = true;
+ new Test(file).run(function (execResult) {
+ if (execResult.exitCode === 1) {
+ _this.out.printFailureCharacter();
len++;
} else {
- _this.out.printSuccess();
+ _this.out.printSuccessCharacter();
len++;
}
- _this.files.push(new File(file, failed));
+ _this.files.push(new File(_this.fileHandler.path, file, execResult));
if (len > maxLen) {
len = 0;
- _this.out.breack();
+ _this.out.printBreak();
}
if (it.hasNext()) {
_this.run(it, it.next(), len, maxLen, callback);
} else {
- _this.out.breack();
+ _this.out.printBreak();
_this.timer.end();
_this.printFailedFiles();
_this.printStats();
@@ -886,7 +920,7 @@ var DefinitelyTyped;
} else if (it.hasNext()) {
this.run(it, it.next(), len, maxLen, callback);
} else {
- this.out.breack();
+ this.out.printBreak();
this.timer.end();
this.printStats();
this.printFailedFiles();
@@ -912,6 +946,9 @@ var DefinitelyTyped;
return SyntaxChecking;
})();
+ /////////////////////////////
+ // Determines errors in typing tests
+ /////////////////////////////
var TestEval = (function () {
function TestEval(fileHandler, out) {
this.fileHandler = fileHandler;
@@ -923,7 +960,7 @@ var DefinitelyTyped;
var list = [];
for (var i = 0; i < this.files.length; i++) {
- if (this.files[i].hasError) {
+ if (this.files[i].execResult.exitCode) {
list.push(this.files[i]);
}
}
@@ -935,7 +972,7 @@ var DefinitelyTyped;
var list = [];
for (var i = 0; i < this.files.length; i++) {
- if (!this.files[i].hasError) {
+ if (!this.files[i].execResult.exitCode) {
list.push(this.files[i]);
}
}
@@ -960,7 +997,7 @@ var DefinitelyTyped;
for (var i = 0; i < this.getFailedFiles().length; i++) {
var errorFile = this.getFailedFiles()[i];
- this.out.printErrorFile(errorFile.formatName(this.fileHandler.path));
+ this.out.printErrorFile(errorFile.formatName());
}
}
};
@@ -968,29 +1005,26 @@ var DefinitelyTyped;
TestEval.prototype.run = function (it, file, len, maxLen, callback) {
var _this = this;
if (endsWith(file.toUpperCase(), '-TESTS.TS')) {
- new Test(file).run(function (o) {
- var failed = false;
-
- if (o.exitCode === 1) {
- _this.out.printFailure();
- failed = true;
+ new Test(file).run(function (execResult) {
+ if (execResult.exitCode === 1) {
+ _this.out.printFailureCharacter();
len++;
} else {
- _this.out.printSuccess();
+ _this.out.printSuccessCharacter();
len++;
}
- _this.files.push(new File(file, failed));
+ _this.files.push(new File(_this.fileHandler.path, file, execResult));
if (len > maxLen) {
len = 0;
- _this.out.breack();
+ _this.out.printBreak();
}
if (it.hasNext()) {
_this.run(it, it.next(), len, maxLen, callback);
} else {
- _this.out.breack();
+ _this.out.printBreak();
_this.timer.end();
_this.printFailedFiles();
_this.printStats();
@@ -1001,7 +1035,7 @@ var DefinitelyTyped;
} else if (it.hasNext()) {
this.run(it, it.next(), len, maxLen, callback);
} else {
- this.out.breack();
+ this.out.printBreak();
this.timer.end();
this.printFailedFiles();
this.printStats();
@@ -1027,6 +1061,9 @@ var DefinitelyTyped;
return TestEval;
})();
+ /////////////////////////////////
+ // The main class to kick things off
+ /////////////////////////////////
var TestRunner = (function () {
function TestRunner(dtPath) {
this.dtPath = dtPath;
@@ -1065,19 +1102,41 @@ var DefinitelyTyped;
return count;
};
+ TestRunner.prototype.printErrorsDetected = function () {
+ var _this = this;
+ this.out.printErrorsHeader();
+
+ var printErrorsForFileIfFound = function (file) {
+ if (file.execResult.exitCode)
+ _this.out.printErrorsForFile(file);
+ };
+
+ // sc errors:
+ this.sc.files.forEach(printErrorsForFileIfFound);
+ this.out.printBoldDiv();
+
+ // te errors:
+ this.te.files.forEach(printErrorsForFileIfFound);
+ this.out.printBoldDiv();
+ };
+
TestRunner.prototype.run = function () {
var _this = this;
var timer = new Timer();
timer.start();
this.out.printHeader();
- this.out.printSyntaxChecking();
+ // Run syntax tests
+ this.out.printSyntaxCheckingHeader();
this.sc.start(function (syntaxFailedCount, syntaxTotal) {
- _this.out.printTypingTests();
+ // Now run typing tests
+ _this.out.printTypingTestsHeader();
_this.te.start(function (testFailedCount, testTotal) {
- var total = _this.printTypingsWithoutTest();
+ // Get the tests without any typing and simultaneously print their names
+ var totalTypingsWithoutTest = _this.printTypingsWithoutTest();
+ // End total timer and print final messages
timer.end();
_this.out.printDiv();
@@ -1087,11 +1146,12 @@ var DefinitelyTyped;
_this.out.printElapsedTime(timer.asString, timer.time);
_this.out.printSyntaxErrorCount(syntaxFailedCount, syntaxTotal);
_this.out.printTestErrorCount(testFailedCount, testTotal);
- _this.out.printWithoutTestCount(total, _this.fh.allTypings().length);
+ _this.out.printWithoutTestCount(totalTypingsWithoutTest, _this.fh.allTypings().length);
_this.out.printDiv();
if (syntaxFailedCount > 0 || testFailedCount > 0) {
+ _this.printErrorsDetected();
process.exit(1);
}
});
diff --git a/_infrastructure/tests/runner.ts b/_infrastructure/tests/runner.ts
index 68e5f36ba..68682f536 100644
--- a/_infrastructure/tests/runner.ts
+++ b/_infrastructure/tests/runner.ts
@@ -1,562 +1,626 @@
-///
+///
+
+///
///
-module DefinitelyTyped {
-
- export module TestManager {
-
- var path = require('path');
-
- function endsWith(str, suffix) {
- return str.indexOf(suffix, str.length - suffix.length) !== -1;
- }
-
- class Iterator {
- index: number = -1;
-
- constructor(public list: any[]){}
-
- public next() {
- this.index++;
- return this.list[this.index];
- }
-
- public hasNext() {
- return this.list[1 + this.index] != null;
- }
- }
-
- class Tsc {
- public static run(tsfile: string, callback: Function) {
- var command = 'node ./_infrastructure/tests/typescript/tsc.js --module commonjs ';
- if (IO.fileExists(tsfile + '.tscparams')) {
- command += '@' + tsfile + '.tscparams';
- } else {
- command += '--noImplicitAny';
- }
- Exec.exec(command, [tsfile], (ExecResult) => {
- callback(ExecResult);
- });
- }
- }
-
- class Test {
- constructor(public tsfile: string) {}
-
- public run(callback: Function) {
- Tsc.run(this.tsfile , callback);
- }
- }
-
- class Typing {
- public fileHandler: FileHandler;
-
- constructor(public name: string, baseDir: string) {
- this.fileHandler = new FileHandler(baseDir + '/' + name + '/', /.\.ts/g);
- }
- }
-
- class FileHandler {
- public files: string[] = [];
- public typings: Typing[] = [];
-
- constructor(public path: string, pattern: any) {
- this.files = IO.dir(path, pattern, { recursive: true }).sort();
- }
-
- public allTS(): string[] {
- return this.files;
- }
-
- public allTests(): string[] {
- var tests = [];
-
- for(var i = 0; i < this.files.length; i++) {
- if (endsWith(this.files[i].toUpperCase(), '-TESTS.TS')) {
- tests.push(this.files[i]);
- }
- }
-
- return tests;
- }
-
- public allTypings(): string[] {
- var typings = {};
-
- for(var i = 0; i < this.files.length; i++) {
- var file = this.files[i];
- var firName = path.dirname(file.substr(this.path.length + 1)).replace('\\', '/');
- var dir = firName.split('/')[0];
-
- if(!typings[dir]) typings[dir] = true;
- }
-
- var list = [];
- for(var attr in typings) {
- list.push(attr);
- }
-
- return list;
- }
- }
-
- class Timer {
- public startTime;
- public time = 0;
- public asString: string;
-
- private static prettyDate(date1, date2): string {
- var diff = ((date2 - date1) / 1000),
- day_diff = Math.floor(diff / 86400);
-
- if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
- return;
-
- return (day_diff == 0 && (
- diff < 60 && (diff + " seconds") ||
- diff < 120 && "1 minute" ||
- diff < 3600 && Math.floor( diff / 60 ) + " minutes" ||
- diff < 7200 && "1 hour" ||
- diff < 86400 && Math.floor( diff / 3600 ) + " hours") ||
- day_diff == 1 && "Yesterday" ||
- day_diff < 7 && day_diff + " days" ||
- day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks");
- }
-
- public start() {
- this.time = 0;
- this.startTime = this.now();
- }
-
- private now() {
- return Date.now();
- }
-
- public end() {
- this.time = (this.now() - this.startTime) / 1000;
- this.asString = Timer.prettyDate(this.startTime, this.now());
- }
- }
-
- class Print {
- constructor(public version: string, public typings: number, public tsFiles: number) { }
-
- public out(s) {
- process.stdout.write(s);
- }
-
- public printHeader() {
- this.out('=============================================================================\n');
- this.out(' \33[36m\33[1mDefinitelyTyped test runner 0.3.0\33[0m\n');
- this.out('=============================================================================\n');
- this.out(' \33[36m\33[1mTypescript version:\33[0m ' + this.version + '\n');
- this.out(' \33[36m\33[1mTypings :\33[0m ' + this.typings + '\n');
- this.out(' \33[36m\33[1mTypeScript files :\33[0m ' + this.tsFiles + '\n');
- }
-
- public printSyntaxChecking() {
- this.out('============================ \33[34m\33[1mSyntax checking\33[0m ================================\n');
- }
-
- public printTypingTests() {
- this.out('============================= \33[34m\33[1mTyping tests\33[0m ==================================\n');
- }
-
- public printSuccess() {
- this.out('\33[36m\33[1m.\33[0m');
- }
-
- public printFailure() {
- this.out('x');
- }
-
- public printDiv() {
- this.out('-----------------------------------------------------------------------------\n');
- }
-
- public printfilesWithSintaxErrorMessage() {
- this.out(' \33[36m\33[1mFiles with syntax error\33[0m\n');
- }
-
- public printFailedTestMessage() {
- this.out(' \33[36m\33[1mFailed tests\33[0m\n');
- }
-
- public printTypingsWithoutTestsMessage() {
- this.out(' \33[36m\33[1mTyping without tests\33[0m\n');
- }
-
- public printTotalMessage() {
- this.out(' \33[36m\33[1mTotal\33[0m\n');
- }
-
- public printErrorFile(file) {
- this.out(' - ' + file + '\n');
- }
-
- public printTypingsWithoutTest(file) {
- this.out(' - \33[33m\33[1m' + file + '\33[0m\n');
- }
-
- public breack() {
- this.out('\n');
- }
-
- public printSuccessCount(current: number, total: number) {
- this.out(' \33[36m\33[1mSuccessful :\33[0m \33[32m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
- }
-
- public printFailedCount(current: number, total: number) {
- this.out(' \33[36m\33[1mFailure :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
- }
-
- public printElapsedTime(time, s) {
- this.out(' \33[36m\33[1mElapsed time :\33[0m ~' + time + ' (' + s + 's)\n');
- }
-
- public printSyntaxErrorCount(current: number, total: number) {
- this.out(' \33[36m\33[1mSyntax error :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
- }
-
- public printTestErrorCount(current: number, total: number) {
- this.out(' \33[36m\33[1mFailed tests :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
- }
-
- public printWithoutTestCount(current: number, total: number) {
- this.out(' \33[36m\33[1mWithout tests :\33[0m \33[33m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
- }
- }
-
- class File {
-
- constructor(public name: string, public hasError: boolean) {}
-
- public formatName(baseDir: string): string {
- var dirName = path.dirname(this.name.substr(baseDir.length + 1)).replace('\\', '/');
- var dir = dirName.split('/')[0];
- var file = path.basename(this.name, '.ts');
- var ext = path.extname(this.name);
-
- return dir + ((dirName.split('/').length > 1) ? '/-/' : '/') + '\33[36m\33[1m' + file + '\33[0m' + ext;
- }
- }
-
- class SyntaxChecking {
-
- private timer: Timer;
-
- public files: File[] = [];
-
- private getFailedFiles(): File[] {
- var list: File[] = [];
-
- for(var i = 0; i < this.files.length; i++) {
- if(this.files[i].hasError) {
- list.push(this.files[i]);
- }
- }
-
- return list;
- }
-
- private getSuccessFiles(): File[] {
- var list: File[] = [];
-
- for(var i = 0; i < this.files.length; i++) {
- if(!this.files[i].hasError) {
- list.push(this.files[i]);
- }
- }
-
- return list;
- }
-
- constructor(public fileHandler: FileHandler, public out: Print) {
- this.timer = new Timer();
- }
-
- private printStats() {
- this.out.printDiv();
- this.out.printElapsedTime(this.timer.asString, this.timer.time);
- this.out.printSuccessCount(this.getSuccessFiles().length, this.files.length);
- this.out.printFailedCount(this.getFailedFiles().length, this.files.length);
- }
-
- private printFailedFiles() {
- if (this.getFailedFiles().length > 0) {
- this.out.printDiv();
-
- this.out.printfilesWithSintaxErrorMessage();
-
- this.out.printDiv();
-
- for(var i = 0; i < this.getFailedFiles().length; i++) {
- var errorFile = this.getFailedFiles()[i];
- this.out.printErrorFile(errorFile.formatName(this.fileHandler.path));
- }
- }
- }
-
- private run(it, file, len, maxLen, callback: Function) {
- if (!endsWith(file.toUpperCase(), '-TESTS.TS') && endsWith(file.toUpperCase(), '.TS') && file.indexOf('../_infrastructure') < 0) {
- new Test(file).run((o) => {
- var failed = false;
-
- if(o.exitCode === 1) {
- this.out.printFailure();
- failed = true;
- len++;
- } else {
- this.out.printSuccess();
- len++;
- }
-
- this.files.push(new File(file, failed));
-
- if(len > maxLen) {
- len = 0;
- this.out.breack();
- }
-
- if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- } else {
- this.out.breack();
- this.timer.end();
- this.printFailedFiles();
- this.printStats();
-
- callback(this.getFailedFiles().length, this.files.length);
- }
- });
- } else if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- } else {
- this.out.breack();
- this.timer.end();
- this.printStats();
- this.printFailedFiles();
-
- callback(this.getFailedFiles().length, this.files.length);
- }
- }
-
- public start(callback: Function) {
- this.timer.start();
-
- var tsFiles = this.fileHandler.allTS();
-
- var it = new Iterator(tsFiles);
-
- var len = 0;
- var maxLen = 76;
-
- if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- }
- }
- }
-
- class TestEval {
-
- private timer: Timer;
-
- public files: File[] = [];
-
- private getFailedFiles(): File[] {
- var list: File[] = [];
-
- for(var i = 0; i < this.files.length; i++) {
- if(this.files[i].hasError) {
- list.push(this.files[i]);
- }
- }
-
- return list;
- }
-
- private getSuccessFiles(): File[] {
- var list: File[] = [];
-
- for(var i = 0; i < this.files.length; i++) {
- if(!this.files[i].hasError) {
- list.push(this.files[i]);
- }
- }
-
- return list;
- }
-
- constructor(public fileHandler: FileHandler, public out: Print) {
- this.timer = new Timer();
- }
-
- private printStats() {
- this.out.printDiv();
- this.out.printElapsedTime(this.timer.asString, this.timer.time);
- this.out.printSuccessCount(this.getSuccessFiles().length, this.files.length);
- this.out.printFailedCount(this.getFailedFiles().length, this.files.length);
- }
-
- private printFailedFiles() {
- if (this.getFailedFiles().length > 0) {
- this.out.printDiv();
-
- this.out.printFailedTestMessage();
-
- this.out.printDiv();
-
- for(var i = 0; i < this.getFailedFiles().length; i++) {
- var errorFile = this.getFailedFiles()[i];
- this.out.printErrorFile(errorFile.formatName(this.fileHandler.path));
- }
- }
- }
-
- private run(it, file, len, maxLen, callback: Function) {
- if (endsWith(file.toUpperCase(), '-TESTS.TS')) {
- new Test(file).run((o) => {
- var failed = false;
-
- if(o.exitCode === 1) {
- this.out.printFailure();
- failed = true;
- len++;
- } else {
- this.out.printSuccess();
- len++;
- }
-
- this.files.push(new File(file, failed));
-
- if(len > maxLen) {
- len = 0;
- this.out.breack();
- }
-
- if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- } else {
- this.out.breack();
- this.timer.end();
- this.printFailedFiles();
- this.printStats();
-
- callback(this.getFailedFiles().length, this.files.length);
- }
- });
- } else if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- } else {
- this.out.breack();
- this.timer.end();
- this.printFailedFiles();
- this.printStats();
-
- callback(this.getFailedFiles().length, this.files.length);
- }
- }
-
- public start(callback: Function) {
- this.timer.start();
-
- var tsFiles = this.fileHandler.allTS();
-
- var it = new Iterator(tsFiles);
-
- var len = 0;
- var maxLen = 76;
-
- if (it.hasNext()) {
- this.run(it, it.next(), len, maxLen, callback);
- }
- }
- }
-
- export class TestRunner {
- private fh: FileHandler;
- private out: Print;
- private sc: SyntaxChecking;
- private te: TestEval;
- private typings: Typing[] = [];
-
- private printTypingsWithoutTest() {
- var count = 0;
-
- if (this.typings.length > 0) {
- this.out.printDiv();
-
- this.out.printTypingsWithoutTestsMessage();
-
- this.out.printDiv();
-
- for(var i = 0; i < this.typings.length; i++) {
- var typing = this.typings[i];
- if(typing.fileHandler.allTests().length == 0) {
- if (typing.name != '_infrastructure'
- && typing.name != '_ReSharper.DefinitelyTyped'
- && typing.name != 'obj'
- && typing.name != 'bin'
- && typing.name != 'Properties') {
- this.out.printTypingsWithoutTest(typing.name);
- count++;
- }
- }
- }
- }
-
- return count;
- }
-
- constructor(public dtPath: string) {
- this.fh = new FileHandler(dtPath, /.\.ts/g);
- this.out = new Print('0.9.1.1', this.fh.allTypings().length, this.fh.allTS().length);
- this.sc = new SyntaxChecking(this.fh, this.out);
- this.te = new TestEval(this.fh, this.out);
-
- var tpgs = this.fh.allTypings();
- for(var i = 0; i < tpgs.length; i++) {
- this.typings.push(new Typing(tpgs[i], this.dtPath));
- }
- }
-
- public run() {
- var timer = new Timer();
- timer.start();
-
- this.out.printHeader();
- this.out.printSyntaxChecking();
-
- this.sc.start((syntaxFailedCount, syntaxTotal) => {
- this.out.printTypingTests();
- this.te.start((testFailedCount, testTotal) => {
- var total = this.printTypingsWithoutTest();
-
- timer.end();
-
- this.out.printDiv();
- this.out.printTotalMessage();
- this.out.printDiv();
-
- this.out.printElapsedTime(timer.asString, timer.time);
- this.out.printSyntaxErrorCount(syntaxFailedCount, syntaxTotal);
- this.out.printTestErrorCount(testFailedCount, testTotal);
- this.out.printWithoutTestCount(total, this.fh.allTypings().length);
-
- this.out.printDiv();
-
- if (syntaxFailedCount > 0 || testFailedCount > 0) {
- process.exit(1);
- }
- });
- });
- }
- }
- }
+module DefinitelyTyped.TestManager {
+
+ var path = require('path');
+
+ function endsWith(str, suffix) {
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ }
+
+ class Iterator {
+ index: number = -1;
+
+ constructor(public list: any[]) { }
+
+ public next() {
+ this.index++;
+ return this.list[this.index];
+ }
+
+ public hasNext() {
+ return this.list[1 + this.index] != null;
+ }
+ }
+
+ interface TscCallback {
+ (result: ExecResult): void;
+ }
+
+ class Tsc {
+ public static run(tsfile: string, callback: TscCallback) {
+ var command = 'node ./_infrastructure/tests/typescript/tsc.js --module commonjs ';
+ if (IO.fileExists(tsfile + '.tscparams')) {
+ command += '@' + tsfile + '.tscparams';
+ } else {
+ command += '--noImplicitAny';
+ }
+ Exec.exec(command, [tsfile], (ExecResult) => {
+ callback(ExecResult);
+ });
+ }
+ }
+
+ class Test {
+ constructor(public tsfile: string) { }
+
+ public run(callback: TscCallback) {
+ Tsc.run(this.tsfile, callback);
+ }
+ }
+
+ class Typing {
+ public fileHandler: FileHandler;
+
+ constructor(public name: string, baseDir: string) {
+ this.fileHandler = new FileHandler(baseDir + '/' + name + '/', /.\.ts/g);
+ }
+ }
+
+ /////////////////////////////////
+ // Given a document root + ts file pattern this class returns:
+ // all the TS files OR just tests OR just definition files
+ /////////////////////////////////
+ class FileHandler {
+ public files: string[] = [];
+ public typings: Typing[] = [];
+
+ constructor(public path: string, pattern: any) {
+ this.files = IO.dir(path, pattern, { recursive: true }).sort();
+ }
+
+ public allTS(): string[] {
+ return this.files;
+ }
+
+ public allTests(): string[] {
+ var tests = [];
+
+ for (var i = 0; i < this.files.length; i++) {
+ if (endsWith(this.files[i].toUpperCase(), '-TESTS.TS')) {
+ tests.push(this.files[i]);
+ }
+ }
+
+ return tests;
+ }
+
+ public allTypings(): string[] {
+ var typings = {};
+
+ for (var i = 0; i < this.files.length; i++) {
+ var file = this.files[i];
+ var firName = path.dirname(file.substr(this.path.length + 1)).replace('\\', '/');
+ var dir = firName.split('/')[0];
+
+ if (!typings[dir]) typings[dir] = true;
+ }
+
+ var list = [];
+ for (var attr in typings) {
+ list.push(attr);
+ }
+
+ return list;
+ }
+ }
+
+ /////////////////////////////////
+ // Timer.start starts a timer
+ // Timer.end stops the timer and sets asString to the pretty print value
+ /////////////////////////////////
+ class Timer {
+ public startTime;
+ public time = 0;
+ public asString: string;
+
+ private static prettyDate(date1, date2): string {
+ var diff = ((date2 - date1) / 1000),
+ day_diff = Math.floor(diff / 86400);
+
+ if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31)
+ return;
+
+ return (day_diff == 0 && (
+ diff < 60 && (diff + " seconds") ||
+ diff < 120 && "1 minute" ||
+ diff < 3600 && Math.floor(diff / 60) + " minutes" ||
+ diff < 7200 && "1 hour" ||
+ diff < 86400 && Math.floor(diff / 3600) + " hours") ||
+ day_diff == 1 && "Yesterday" ||
+ day_diff < 7 && day_diff + " days" ||
+ day_diff < 31 && Math.ceil(day_diff / 7) + " weeks");
+ }
+
+ public start() {
+ this.time = 0;
+ this.startTime = this.now();
+ }
+
+ private now() {
+ return Date.now();
+ }
+
+ public end() {
+ this.time = (this.now() - this.startTime) / 1000;
+ this.asString = Timer.prettyDate(this.startTime, this.now());
+ }
+ }
+
+ /////////////////////////////////
+ // All the common things that we pring are functions of this class
+ /////////////////////////////////
+ class Print {
+ constructor(public version: string, public typings: number, public tsFiles: number) { }
+
+ public out(s) {
+ process.stdout.write(s);
+ }
+
+ public printHeader() {
+ this.out('=============================================================================\n');
+ this.out(' \33[36m\33[1mDefinitelyTyped test runner 0.3.0\33[0m\n');
+ this.out('=============================================================================\n');
+ this.out(' \33[36m\33[1mTypescript version:\33[0m ' + this.version + '\n');
+ this.out(' \33[36m\33[1mTypings :\33[0m ' + this.typings + '\n');
+ this.out(' \33[36m\33[1mTypeScript files :\33[0m ' + this.tsFiles + '\n');
+ }
+
+ public printSyntaxCheckingHeader() {
+ this.out('============================ \33[34m\33[1mSyntax checking\33[0m ================================\n');
+ }
+
+ public printTypingTestsHeader() {
+ this.out('============================= \33[34m\33[1mTyping tests\33[0m ==================================\n');
+ }
+
+ public printSuccessCharacter() {
+ this.out('\33[36m\33[1m.\33[0m');
+ }
+
+ public printFailureCharacter() {
+ this.out('x');
+ }
+
+ public printDiv() {
+ this.out('-----------------------------------------------------------------------------\n');
+ }
+
+ public printBoldDiv() {
+ this.out('=============================================================================\n');
+ }
+
+ public printErrorsHeader() {
+ this.out('=============================================================================\n');
+ this.out(' \33[34m\33[1mErrors in files\33[0m \n');
+ this.out('=============================================================================\n');
+ }
+
+ public printErrorsForFile(file: File) {
+ this.out('----------------- For file:' + file.formatName() );
+ this.printBreak();
+ this.out(file.execResult.stderr);
+ this.printBreak();
+ }
+
+ public printfilesWithSintaxErrorMessage() {
+ this.out(' \33[36m\33[1mFiles with syntax error\33[0m\n');
+ }
+
+ public printFailedTestMessage() {
+ this.out(' \33[36m\33[1mFailed tests\33[0m\n');
+ }
+
+ public printTypingsWithoutTestsMessage() {
+ this.out(' \33[36m\33[1mTyping without tests\33[0m\n');
+ }
+
+ public printTotalMessage() {
+ this.out(' \33[36m\33[1mTotal\33[0m\n');
+ }
+
+ public printErrorFile(file: string) {
+ this.out(' - ' + file + '\n');
+ }
+
+ public printTypingsWithoutTest(file) {
+ this.out(' - \33[33m\33[1m' + file + '\33[0m\n');
+ }
+
+ public printBreak() {
+ this.out('\n');
+ }
+
+ public printSuccessCount(current: number, total: number) {
+ this.out(' \33[36m\33[1mSuccessful :\33[0m \33[32m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
+ }
+
+ public printFailedCount(current: number, total: number) {
+ this.out(' \33[36m\33[1mFailure :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
+ }
+
+ public printElapsedTime(time, s) {
+ this.out(' \33[36m\33[1mElapsed time :\33[0m ~' + time + ' (' + s + 's)\n');
+ }
+
+ public printSyntaxErrorCount(current: number, total: number) {
+ this.out(' \33[36m\33[1mSyntax error :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
+ }
+
+ public printTestErrorCount(current: number, total: number) {
+ this.out(' \33[36m\33[1mFailed tests :\33[0m \33[31m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
+ }
+
+ public printWithoutTestCount(current: number, total: number) {
+ this.out(' \33[36m\33[1mWithout tests :\33[0m \33[33m\33[1m' + ((current / total) * 100).toFixed(2) + '% (' + current + '/' + total + ')\33[0m\n');
+ }
+ }
+
+ /////////////////////////////
+ // Represents the results of a test file execution
+ /////////////////////////////
+ class File {
+ static baseDir: string;
+
+ constructor(public baseDir: string, public filePathWithName: string, public execResult: ExecResult) { }
+
+ // From '/complete/path/to/file' to 'specfolder/specfile.d.ts'
+ public formatName(): string {
+ var dirName = path.dirname(this.filePathWithName.substr(this.baseDir.length + 1)).replace('\\', '/');
+ var dir = dirName.split('/')[0];
+ var file = path.basename(this.filePathWithName, '.ts');
+ var ext = path.extname(this.filePathWithName);
+
+ return dir + ((dirName.split('/').length > 1) ? '/-/' : '/') + '\33[36m\33[1m' + file + '\33[0m' + ext;
+ }
+ }
+
+
+ /////////////////////////////
+ // Determine syntax errors in typings
+ /////////////////////////////
+ class SyntaxChecking {
+
+ private timer: Timer;
+
+ public files: File[] = [];
+
+ private getFailedFiles(): File[] {
+ var list: File[] = [];
+
+ for (var i = 0; i < this.files.length; i++) {
+ if (this.files[i].execResult.exitCode) {
+ list.push(this.files[i]);
+ }
+ }
+
+ return list;
+ }
+
+ private getSuccessFiles(): File[] {
+ var list: File[] = [];
+
+ for (var i = 0; i < this.files.length; i++) {
+ if (!this.files[i].execResult.exitCode) {
+ list.push(this.files[i]);
+ }
+ }
+
+ return list;
+ }
+
+ constructor(public fileHandler: FileHandler, public out: Print) {
+ this.timer = new Timer();
+ }
+
+ private printStats() {
+ this.out.printDiv();
+ this.out.printElapsedTime(this.timer.asString, this.timer.time);
+ this.out.printSuccessCount(this.getSuccessFiles().length, this.files.length);
+ this.out.printFailedCount(this.getFailedFiles().length, this.files.length);
+ }
+
+ private printFailedFiles() {
+ if (this.getFailedFiles().length > 0) {
+ this.out.printDiv();
+
+ this.out.printfilesWithSintaxErrorMessage();
+
+ this.out.printDiv();
+
+ for (var i = 0; i < this.getFailedFiles().length; i++) {
+ var errorFile = this.getFailedFiles()[i];
+ this.out.printErrorFile(errorFile.formatName());
+ }
+ }
+ }
+
+ private run(it, file, len, maxLen, callback: Function) {
+ if (!endsWith(file.toUpperCase(), '-TESTS.TS') && endsWith(file.toUpperCase(), '.TS') && file.indexOf('../_infrastructure') < 0) {
+ new Test(file).run((execResult) => {
+
+ if (execResult.exitCode === 1) {
+ this.out.printFailureCharacter();
+ len++;
+ } else {
+ this.out.printSuccessCharacter();
+ len++;
+ }
+
+ this.files.push(new File(this.fileHandler.path, file, execResult));
+
+ if (len > maxLen) {
+ len = 0;
+ this.out.printBreak();
+ }
+
+ if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ } else {
+ this.out.printBreak();
+ this.timer.end();
+ this.printFailedFiles();
+ this.printStats();
+
+ callback(this.getFailedFiles().length, this.files.length);
+ }
+ });
+ } else if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ } else {
+ this.out.printBreak();
+ this.timer.end();
+ this.printStats();
+ this.printFailedFiles();
+
+ callback(this.getFailedFiles().length, this.files.length);
+ }
+ }
+
+ public start(callback: Function) {
+ this.timer.start();
+
+ var tsFiles = this.fileHandler.allTS();
+
+ var it = new Iterator(tsFiles);
+
+ var len = 0;
+ var maxLen = 76;
+
+ if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ }
+ }
+ }
+
+ /////////////////////////////
+ // Determines errors in typing tests
+ /////////////////////////////
+ class TestEval {
+
+ private timer: Timer;
+
+ public files: File[] = [];
+
+ private getFailedFiles(): File[] {
+ var list: File[] = [];
+
+ for (var i = 0; i < this.files.length; i++) {
+ if (this.files[i].execResult.exitCode) {
+ list.push(this.files[i]);
+ }
+ }
+
+ return list;
+ }
+
+ private getSuccessFiles(): File[] {
+ var list: File[] = [];
+
+ for (var i = 0; i < this.files.length; i++) {
+ if (!this.files[i].execResult.exitCode) {
+ list.push(this.files[i]);
+ }
+ }
+
+ return list;
+ }
+
+ constructor(public fileHandler: FileHandler, public out: Print) {
+ this.timer = new Timer();
+ }
+
+ private printStats() {
+ this.out.printDiv();
+ this.out.printElapsedTime(this.timer.asString, this.timer.time);
+ this.out.printSuccessCount(this.getSuccessFiles().length, this.files.length);
+ this.out.printFailedCount(this.getFailedFiles().length, this.files.length);
+ }
+
+ private printFailedFiles() {
+ if (this.getFailedFiles().length > 0) {
+ this.out.printDiv();
+
+ this.out.printFailedTestMessage();
+
+ this.out.printDiv();
+
+ for (var i = 0; i < this.getFailedFiles().length; i++) {
+ var errorFile = this.getFailedFiles()[i];
+ this.out.printErrorFile(errorFile.formatName());
+ }
+ }
+ }
+
+ private run(it, file, len, maxLen, callback: Function) {
+ if (endsWith(file.toUpperCase(), '-TESTS.TS')) {
+ new Test(file).run((execResult) => {
+
+ if (execResult.exitCode === 1) {
+ this.out.printFailureCharacter();
+ len++;
+ } else {
+ this.out.printSuccessCharacter();
+ len++;
+ }
+
+ this.files.push(new File(this.fileHandler.path, file, execResult));
+
+ if (len > maxLen) {
+ len = 0;
+ this.out.printBreak();
+ }
+
+ if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ } else {
+ this.out.printBreak();
+ this.timer.end();
+ this.printFailedFiles();
+ this.printStats();
+
+ callback(this.getFailedFiles().length, this.files.length);
+ }
+ });
+ } else if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ } else {
+ this.out.printBreak();
+ this.timer.end();
+ this.printFailedFiles();
+ this.printStats();
+
+ callback(this.getFailedFiles().length, this.files.length);
+ }
+ }
+
+ public start(callback: Function) {
+ this.timer.start();
+
+ var tsFiles = this.fileHandler.allTS();
+
+ var it = new Iterator(tsFiles);
+
+ var len = 0;
+ var maxLen = 76;
+
+ if (it.hasNext()) {
+ this.run(it, it.next(), len, maxLen, callback);
+ }
+ }
+ }
+
+ /////////////////////////////////
+ // The main class to kick things off
+ /////////////////////////////////
+ export class TestRunner {
+ private fh: FileHandler;
+ private out: Print;
+ private sc: SyntaxChecking;
+ private te: TestEval;
+ private typings: Typing[] = [];
+
+ private printTypingsWithoutTest() {
+ var count = 0;
+
+ if (this.typings.length > 0) {
+ this.out.printDiv();
+
+ this.out.printTypingsWithoutTestsMessage();
+
+ this.out.printDiv();
+
+ for (var i = 0; i < this.typings.length; i++) {
+ var typing = this.typings[i];
+ if (typing.fileHandler.allTests().length == 0) {
+ if (typing.name != '_infrastructure'
+ && typing.name != '_ReSharper.DefinitelyTyped'
+ && typing.name != 'obj'
+ && typing.name != 'bin'
+ && typing.name != 'Properties') {
+ this.out.printTypingsWithoutTest(typing.name);
+ count++;
+ }
+ }
+ }
+ }
+
+ return count;
+ }
+
+ private printErrorsDetected() {
+ this.out.printErrorsHeader();
+
+ var printErrorsForFileIfFound = (file: File) => {
+ if (file.execResult.exitCode)
+ this.out.printErrorsForFile(file);
+ };
+
+ // sc errors:
+ this.sc.files.forEach(printErrorsForFileIfFound);
+ this.out.printBoldDiv();
+
+ // te errors:
+ this.te.files.forEach(printErrorsForFileIfFound);
+ this.out.printBoldDiv();
+ }
+
+ constructor(public dtPath: string) {
+ this.fh = new FileHandler(dtPath, /.\.ts/g);
+ this.out = new Print('0.9.1.1', this.fh.allTypings().length, this.fh.allTS().length);
+ this.sc = new SyntaxChecking(this.fh, this.out);
+ this.te = new TestEval(this.fh, this.out);
+
+ var tpgs = this.fh.allTypings();
+ for (var i = 0; i < tpgs.length; i++) {
+ this.typings.push(new Typing(tpgs[i], this.dtPath));
+ }
+ }
+
+ public run() {
+ var timer = new Timer();
+ timer.start();
+
+ this.out.printHeader();
+
+ // Run syntax tests
+ this.out.printSyntaxCheckingHeader();
+ this.sc.start((syntaxFailedCount, syntaxTotal) => {
+
+ // Now run typing tests
+ this.out.printTypingTestsHeader();
+ this.te.start((testFailedCount, testTotal) => {
+
+ // Get the tests without any typing and simultaneously print their names
+ var totalTypingsWithoutTest = this.printTypingsWithoutTest();
+
+ // End total timer and print final messages
+ timer.end();
+
+ this.out.printDiv();
+ this.out.printTotalMessage();
+ this.out.printDiv();
+
+ this.out.printElapsedTime(timer.asString, timer.time);
+ this.out.printSyntaxErrorCount(syntaxFailedCount, syntaxTotal);
+ this.out.printTestErrorCount(testFailedCount, testTotal);
+ this.out.printWithoutTestCount(totalTypingsWithoutTest, this.fh.allTypings().length);
+
+ this.out.printDiv();
+
+ if (syntaxFailedCount > 0 || testFailedCount > 0) {
+ this.printErrorsDetected();
+ process.exit(1);
+ }
+ });
+ });
+ }
+ }
}
-declare var __dirname: any;
-
var dtPath = __dirname + '/../..';
var runner = new DefinitelyTyped.TestManager.TestRunner(dtPath);
diff --git a/_infrastructure/tests/src/io.ts b/_infrastructure/tests/src/io.ts
index 6fce75489..2c7a81f4f 100644
--- a/_infrastructure/tests/src/io.ts
+++ b/_infrastructure/tests/src/io.ts
@@ -83,22 +83,12 @@ declare class Enumerator {
public item(): any;
constructor (o: any);
}
-declare function setTimeout(callback: () =>void , ms?: number);
-//declare var require: any;
-declare module process {
- export var argv: string[];
- export var platform: string;
- export function on(event: string, handler: (any) => void ): void;
- export module stdout {
- export function write(str: string);
+
+// Missing in node definitions, but called in code below.
+interface NodeProcess {
+ mainModule: {
+ filename: string;
}
- export module stderr {
- export function write(str: string);
- }
- export module mainModule {
- export var filename: string;
- }
- export function exit(exitCode?: number);
}
var IO = (function() {
diff --git a/angularjs/angular.d.ts b/angularjs/angular.d.ts
index 08f22481a..921cbafc9 100755
--- a/angularjs/angular.d.ts
+++ b/angularjs/angular.d.ts
@@ -94,7 +94,7 @@ declare module ng {
controller(name: string, controllerConstructor: Function): IModule;
controller(name: string, inlineAnnotadedConstructor: any[]): IModule;
controller(object : Object): IModule;
- directive(name: string, directiveFactory: (...params:any[])=> IDirective): IModule;
+ directive(name: string, directiveFactory: Function): IModule;
directive(name: string, inlineAnnotadedFunction: any[]): IModule;
directive(object: Object): IModule;
factory(name: string, serviceFactoryFunction: Function): IModule;
@@ -215,8 +215,8 @@ declare module ng {
$emit(name: string, ...args: any[]): IAngularEvent;
// Documentation says exp is optional, but actual implementaton counts on it
- $eval(expression: string): any;
- $eval(expression: (scope: IScope) => any): any;
+ $eval(expression: string, args?: Object): any;
+ $eval(expression: (scope: IScope) => any, args?: Object): any;
// Documentation says exp is optional, but actual implementaton counts on it
$evalAsync(expression: string): void;
@@ -276,6 +276,15 @@ declare module ng {
cancel(promise: IPromise): boolean;
}
+ ///////////////////////////////////////////////////////////////////////////
+ // IntervalService
+ // see http://docs.angularjs.org/api/ng.$interval
+ ///////////////////////////////////////////////////////////////////////////
+ interface IIntervalService {
+ (func: Function, delay: number, count?: number, invokeApply?: boolean): IPromise;
+ cancel(promise: IPromise): boolean;
+ }
+
///////////////////////////////////////////////////////////////////////////
// FilterService
// see http://docs.angularjs.org/api/ng.$filter
@@ -640,6 +649,59 @@ declare module ng {
///////////////////////////////////////////////////////////////////////////
interface IRootScopeService extends IScope {}
+ ///////////////////////////////////////////////////////////////////////////
+ // SCEService
+ // see http://docs.angularjs.org/api/ng.$sce
+ ///////////////////////////////////////////////////////////////////////////
+ interface ISCEService {
+ getTrusted(type: string, mayBeTrusted: any): any;
+ getTrustedCss(value: any): any;
+ getTrustedHtml(value: any): any;
+ getTrustedJs(value: any): any;
+ getTrustedResourceUrl(value: any): any;
+ getTrustedUrl(value: any): any;
+ parse(type: string, expression: string): (context: any, locals: any) => any;
+ parseAsCss(expression: string): (context: any, locals: any) => any;
+ parseAsHtml(expression: string): (context: any, locals: any) => any;
+ parseAsJs(expression: string): (context: any, locals: any) => any;
+ parseAsResourceUrl(expression: string): (context: any, locals: any) => any;
+ parseAsUrl(expression: string): (context: any, locals: any) => any;
+ trustAs(type: string, value: any): any;
+ trustAsHtml(value: any): any;
+ trustAsJs(value: any): any;
+ trustAsResourceUrl(value: any): any;
+ trustAsUrl(value: any): any;
+ isEnabled(): boolean;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // SCEProvider
+ // see http://docs.angularjs.org/api/ng.$sceProvider
+ ///////////////////////////////////////////////////////////////////////////
+ interface ISCEProvider extends IServiceProvider {
+ enabled(value: boolean): void;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // SCEDelegateService
+ // see http://docs.angularjs.org/api/ng.$sceDelegate
+ ///////////////////////////////////////////////////////////////////////////
+ interface ISCEDelegateService {
+ getTrusted(type: string, mayBeTrusted: any): any;
+ trustAs(type: string, value: any): any;
+ valueOf(value: any): any;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // SCEDelegateProvider
+ // see http://docs.angularjs.org/api/ng.$sceDelegateProvider
+ ///////////////////////////////////////////////////////////////////////////
+ interface ISCEDelegateProvider extends IServiceProvider {
+ resourceUrlBlacklist(blacklist: any[]): void;
+ resourceUrlWhitelist(whitelist: any[]): void;
+ }
+
///////////////////////////////////////////////////////////////////////////
// Directive
// see http://docs.angularjs.org/api/ng.$compileProvider#directive
diff --git a/casperjs/casperjs.d.ts b/casperjs/casperjs.d.ts
index 4be7b40c4..de43c548b 100644
--- a/casperjs/casperjs.d.ts
+++ b/casperjs/casperjs.d.ts
@@ -5,39 +5,50 @@
///
-interface Casper {
+interface CasperModule {
+ create(options: CasperOptions): Casper;
+ selectXPath(expression: string): Object
+}
- constructor (options: CasperOptions);
+interface EventEmitter {
+ removeAllFilters(filter: string): Casper;
+ setFilter(filter: string, cb: Function): boolean;
+}
+
+interface Casper extends EventEmitter {
+ test: Tester;
+
+ constructor (options: CasperOptions): Casper;
// Properties
__utils__: ClientUtils;
// Methods
- back();
- base64encode(url: string, method?: string, data?: any);
- click(selector: string);
- clickLabel(label: string, tag?: string);
- capture(targetFilePath: string, clipRect: ClipRect);
- captureBase64(format: string);
- captureBase64(format: string, area: string);
- captureBase64(format: string, area: ClipRect);
- captureBase64(format: string, area: any);
- captureSelector(targetFile: string, selector: string);
- clear();
- debugHTML(selector?: string, outer?: boolean);
- debugPage();
- die(message: string, status?: number);
- download(url: string, target?: string, method?: string, data?: any);
- each(array: Array, fn: (self, link) => void);
- echo(message: string, style?: string);
- evaluate(fn: Function, ...args: any[]);
- evaluateOrDie(fn: Function, message?: string);
- exit(status?: number);
- exists(selector: string);
- fetchText(selector: string);
- forward();
- log(message: string, level?: string, space?: string);
- fill(selector: string, values: any, submit?: boolean);
+ back(): Casper;
+ base64encode(url: string, method?: string, data?: any): string;
+ click(selector: string): boolean;
+ clickLabel(label: string, tag?: string): boolean;
+ capture(targetFilePath: string, clipRect: ClipRect): Casper;
+ captureBase64(format: string): string;
+ captureBase64(format: string, area: string): string;
+ captureBase64(format: string, area: ClipRect): string;
+ captureBase64(format: string, area: any): string;
+ captureSelector(targetFile: string, selector: string): Casper;
+ clear(): Casper;
+ debugHTML(selector?: string, outer?: boolean): Casper;
+ debugPage(): Casper;
+ die(message: string, status?: number): Casper;
+ download(url: string, target?: string, method?: string, data?: any): Casper;
+ each(array: T[], fn: (self: Casper, item: T, index: number) => void): Casper;
+ echo(message: string, style?: string): Casper;
+ evaluate(fn: () => T, ...args: any[]): T
+ evaluateOrDie(fn: () => any, message?: string, status?: number): Casper;
+ exit(status?: number): Casper;
+ exists(selector: string): boolean;
+ fetchText(selector: string): string;
+ forward(): Casper;
+ log(message: string, level?: string, space?: string): Casper;
+ fill(selector: string, values: any, submit?: boolean): void;
getCurrentUrl(): string;
getElementAttribute(selector: string, attribute: string): string;
getElementBounds(selector: string): ElementBounds;
@@ -48,44 +59,44 @@ interface Casper {
getHTML(selector?: string, outer?: boolean): string;
getPageContent(): string;
getTitle(): string;
- mouseEvent(type: string, selector: string);
+ mouseEvent(type: string, selector: string): boolean;
open(location: string, settings: OpenSettings): Casper;
- reload(then?: (response: HttpResponse) => void);
- repeat(times: number, then: Function);
- resourceExists(test: Function);
- resourceExists(test: string);
- run(onComplete: Function, time?: number);
- sendKeys(selector: string, keys: string, options?: any);
- setHttpAuth(username: string, password: string);
+ reload(then?: (response: HttpResponse) => void): Casper;
+ repeat(times: number, then: Function): Casper;
+ resourceExists(test: Function): boolean;
+ resourceExists(test: string): boolean;
+ run(onComplete: Function, time?: number): Casper;
+ sendKeys(selector: string, keys: string, options?: any): Casper;
+ setHttpAuth(username: string, password: string): Casper;
start(url?: string, then?: (response: HttpResponse) => void): Casper;
status(asString: boolean): any;
- then(fn: (self?: Casper) => void);
- thenClick(selector: string);
- thenEvaluate(fn: Function, ...args: any[]);
- thenOpen(location: string, then?: (response: HttpResponse) => void);
- thenOpen(location: string, options?: OpenSettings, then?: (response: HttpResponse) => void);
- thenOpenAndEvaluate(location: string, then?: Function, ...args: any[]);
- toString();
- userAgent(agent: string);
- viewport(width: number, height: number);
- visible(selector: string);
- wait(timeout: number, then?: Function);
- waitFor(testFx: Function, then?: Function, onTimeout?: Function, timeout?: number);
- waitForPopup(urlPattern: string, then?: Function, onTimeout?: Function, timeout?: number);
- waitForPopup(urlPattern: RegExp, then?: Function, onTimeout?: Function, timeout?: number);
- waitForSelector(selector: string, then?: Function, onTimeout?: Function, timeout?: number);
- waitWhileSelector(selector: string, then?: Function, onTimeout?: Function, timeout?: number);
- waitForResource(testFx: Function, then?: Function, onTimeout?: Function, timeout?: number);
- waitForText(pattern: string, then?: Function, onTimeout?: Function, timeout?: number);
- waitForText(pattern: RegExp, then?: Function, onTimeout?: Function, timeout?: number);
- waitUntilVisible(selector: string, then?: Function, onTimeout?: Function, timeout?: number);
- waitWhileVisible(selector: string, then?: Function, onTimeout?: Function, timeout?: number);
- warn(message: string);
- withFrame(frameInfo: string, then: Function);
- withFrame(frameInfo: number, then: Function);
- withPopup(popupInfo: string, step: Function);
- withPopup(popupInfo: RegExp, step: Function);
- zoom(factor: number);
+ then(fn: (self?: Casper) => void): Casper;
+ thenClick(selector: string): Casper;
+ thenEvaluate(fn: () => any, ...args: any[]): Casper;
+ thenOpen(location: string, then?: (response: HttpResponse) => void): Casper;
+ thenOpen(location: string, options?: OpenSettings, then?: (response: HttpResponse) => void): Casper;
+ thenOpenAndEvaluate(location: string, then?: Function, ...args: any[]): Casper;
+ toString(): string;
+ userAgent(agent: string): string;
+ viewport(width: number, height: number): Casper;
+ visible(selector: string): boolean;
+ wait(timeout: number, then?: Function): Casper;
+ waitFor(testFx: Function, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForPopup(urlPattern: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForPopup(urlPattern: RegExp, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForSelector(selector: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitWhileSelector(selector: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForResource(testFx: Function, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForText(pattern: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitForText(pattern: RegExp, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitUntilVisible(selector: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ waitWhileVisible(selector: string, then?: Function, onTimeout?: Function, timeout?: number): Casper;
+ warn(message: string): Casper;
+ withFrame(frameInfo: string, then: Function): Casper;
+ withFrame(frameInfo: number, then: Function): Casper;
+ withPopup(popupInfo: string, step: Function): Casper;
+ withPopup(popupInfo: RegExp, step: Function): Casper;
+ zoom(factor: number): Casper;
}
interface HttpResponse {
@@ -127,96 +138,105 @@ interface ElementInfo {
}
interface CasperOptions {
- clientScripts: Array;
- exitOnError: boolean;
- httpStatusHandlers: any;
- logLevel: string;
- onAlert: Function;
- onDie: Function;
- onError: Function;
- onLoadError: Function;
- onPageInitialized: Function;
- onResourceReceived: Function;
- onResourceRequested: Function;
- onStepComplete: Function;
- onStepTimeout: Function;
- onTimeout: Function;
- onWaitTimeout: Function;
- page: WebPage;
- pageSettings: any;
- remoteScripts: Array;
- safeLogs: boolean;
- stepTimeout: number;
- timeout: number;
- verbose: boolean;
- viewportSize: any;
- waitTimeout: number;
+ clientScripts?: Array;
+ exitOnError?: boolean;
+ httpStatusHandlers?: any;
+ logLevel?: string;
+ onAlert?: Function;
+ onDie?: Function;
+ onError?: Function;
+ onLoadError?: Function;
+ onPageInitialized?: Function;
+ onResourceReceived?: Function;
+ onResourceRequested?: Function;
+ onStepComplete?: Function;
+ onStepTimeout?: Function;
+ onTimeout?: Function;
+ onWaitTimeout?: Function;
+ page?: WebPage;
+ pageSettings?: any;
+ remoteScripts?: Array;
+ safeLogs?: boolean;
+ stepTimeout?: number;
+ timeout?: number;
+ verbose?: boolean;
+ viewportSize?: any;
+ waitTimeout?: number;
}
interface ClientUtils {
- echo(message: string);
- encode(contents: string);
- exists(selector: string);
- findAll(selector: string);
- findOne(selector: string);
- getBase64(url: string, method?: string, data?: any);
- getBinary(url: string, method?: string, data?: any);
- getDocumentHeight();
- getElementBounds(selector: string);
- getElementsBounds(selector: string);
- getElementByXPath(expression: string, scope?: HTMLElement);
- getElementsByXPath(expression: string, scope?: HTMLElement);
- getFieldValue(inputName: string);
- getFormValues(selector: string);
- mouseEvent(type: string, selector: string);
- removeElementsByXPath(expression: string);
- sendAJAX(url: string, method?: string, data?: any, async?: boolean);
- visible(selector: string);
+ echo(message: string): void;
+ encode(contents: string): void;
+ exists(selector: string): void;
+ findAll(selector: string): void;
+ findOne(selector: string): void;
+ getBase64(url: string, method?: string, data?: any): void;
+ getBinary(url: string, method?: string, data?: any): void;
+ getDocumentHeight(): void;
+ getElementBounds(selector: string): void;
+ getElementsBounds(selector: string): void;
+ getElementByXPath(expression: string, scope?: HTMLElement): void;
+ getElementsByXPath(expression: string, scope?: HTMLElement): void;
+ getFieldValue(inputName: string): void;
+ getFormValues(selector: string): void;
+ mouseEvent(type: string, selector: string): void;
+ removeElementsByXPath(expression: string): void;
+ sendAJAX(url: string, method?: string, data?: any, async?: boolean): void;
+ visible(selector: string): void;
}
interface Colorizer {
- colorize(text: string, styleName: string);
- format(text: string, style: any);
+ colorize(text: string, styleName: string): void;
+ format(text: string, style: any): void;
}
interface Tester {
- assert(condition: boolean, message?: string);
- assertDoesntExist(selector: string, message?: string);
- assertEquals(testValue: any, expected: any, message?: string);
- assertEval(fn: Function, message: string, arguments: any);
- assertEvalEquals(fn: Function, expected: any, message?: string, arguments?: any);
- assertExists(selector: string, message?: string);
- assertFalsy(subject: any, message?: string);
- assertField(inputName: string, expected: string, message?: string);
- assertHttpStatus(status: number, message?: string);
- assertMatch(subject: any, pattern: RegExp, message?: string);
- assertNot(subject: any, message?: string);
- assertNotEquals(testValue: any, expected: any, message?: string);
- assertNotVisible(selector: string, message?: string);
- assertRaises(fn: Function, args: Array, message?: string);
- assertSelectorDoesntHaveText(selector: string, text: string, message?: string);
- assertSelectorExists(selector: string, message?: string);
- assertSelectorHasText(selector: string, text: string, message?: string);
- assertResourceExists(testFx: Function, message?: string);
- assertTextExists(expected: string, message?: string);
- assertTextDoesntExist(unexpected: string, message: string);
- assertTitle(expected: string, message?: string);
- assertTitleMatch(pattern: RegExp, message?: string);
- assertTruthy(subject: any, message?: string);
- assertType(input: any, type: string, message?: string);
- assertUrlMatch(pattern: RegExp, message?: string);
- assertVisible(selector: string, message?: string);
- colorize(message: string, style: string);
- comment(message: string);
- done(expected?: number);
- error(message: string);
- fail(message: string);
- formatMessage(message: string, style: string);
+ assert(condition: boolean, message?: string): any;
+ assertDoesntExist(selector: string, message?: string): any;
+ assertElementCount(selctor: string, expected: number, message?: string): any;
+ assertEquals(testValue: any, expected: any, message?: string): any;
+ assertEval(fn: Function, message: string, arguments: any): any;
+ assertEvalEquals(fn: Function, expected: any, message?: string, arguments?: any): any;
+ assertExists(selector: string, message?: string): any;
+ assertFalsy(subject: any, message?: string): any;
+ assertField(inputName: string, expected: string, message?: string): any;
+ assertHttpStatus(status: number, message?: string): any;
+ assertMatch(subject: any, pattern: RegExp, message?: string): any;
+ assertNot(subject: any, message?: string): any;
+ assertNotEquals(testValue: any, expected: any, message?: string): any;
+ assertNotVisible(selector: string, message?: string): any;
+ assertRaises(fn: Function, args: Array, message?: string): any;
+ assertSelectorDoesntHaveText(selector: string, text: string, message?: string): any;
+ assertSelectorExists(selector: string, message?: string): any;
+ assertSelectorHasText(selector: string, text: string, message?: string): any;
+ assertResourceExists(testFx: Function, message?: string): any;
+ assertTextExists(expected: string, message?: string): any;
+ assertTextDoesntExist(unexpected: string, message: string): any;
+ assertTitle(expected: string, message?: string): any;
+ assertTitleMatch(pattern: RegExp, message?: string): any;
+ assertTruthy(subject: any, message?: string): any;
+ assertType(input: any, type: string, message?: string): any;
+ assertUrlMatch(pattern: string, message?: string): any;
+ assertUrlMatch(pattern: RegExp, message?: string): any;
+ assertVisible(selector: string, message?: string): any;
+
+ /* since 1.1 */
+ begin(description: string, planned: number, suite: Function): any;
+ begin(description: string, suite: Function): any;
+ begin(description: string, planned: number, config: Object): any;
+ begin(description: string, config: Object): any;
+
+ colorize(message: string, style: string): any;
+ comment(message: string): any;
+ done(expected?: number): any;
+ error(message: string): any;
+ fail(message: string): any;
+ formatMessage(message: string, style: string): any;
getFailures(): Cases;
getPasses(): Cases;
- info(message: string);
- pass(message: string);
- renderResults(exit: boolean, status: number, save: string);
+ info(message: string): any;
+ pass(message: string): any;
+ renderResults(exit: boolean, status: number, save: string): any;
}
interface Cases {
@@ -238,30 +258,30 @@ interface CaseValues {
}
interface Utils {
- betterTypeOf(input: any);
- dump(value: any);
- fileExt(file: string);
- fillBlanks(text: string, pad: number);
- format(f: string, ...args: any[]);
- getPropertyPath(obj: any, path: string);
- inherits(ctor: any, superCtor: any);
- isArray(value: any);
- isCasperObject(value: any);
- isClipRect(value: any);
- isFalsy(subject: any);
- isFunction(value: any);
- isJsFile(file: string);
- isNull(value: any);
- isNumber(value: any);
- isObject(value: any);
- isRegExp(value: any);
- isString(value: any);
- isTruthy(subject: any);
- isType(what: any, type: string);
- isUndefined(value: any);
- isWebPage(what: any);
- mergeObjects(origin: any, add: any);
- node(name: string, attributes: any);
- serialize(value: any);
- unique(array: Array);
+ betterTypeOf(input: any): any;
+ dump(value: any): any;
+ fileExt(file: string): any;
+ fillBlanks(text: string, pad: number): any;
+ format(f: string, ...args: any[]): any;
+ getPropertyPath(obj: any, path: string): any;
+ inherits(ctor: any, superCtor: any): any;
+ isArray(value: any): any;
+ isCasperObject(value: any): any;
+ isClipRect(value: any): any;
+ isFalsy(subject: any): any;
+ isFunction(value: any): any;
+ isJsFile(file: string): any;
+ isNull(value: any): any;
+ isNumber(value: any): any;
+ isObject(value: any): any;
+ isRegExp(value: any): any;
+ isString(value: any): any;
+ isTruthy(subject: any): any;
+ isType(what: any, type: string): any;
+ isUndefined(value: any): any;
+ isWebPage(what: any): any;
+ mergeObjects(origin: any, add: any): any;
+ node(name: string, attributes: any): any;
+ serialize(value: any): any;
+ unique(array: Array): any;
}
diff --git a/chrome/chrome.d.ts b/chrome/chrome.d.ts
index 8b77c9617..8c9ec22dd 100644
--- a/chrome/chrome.d.ts
+++ b/chrome/chrome.d.ts
@@ -830,44 +830,11 @@ declare module chrome.events {
// Extension
////////////////////
declare module chrome.extension {
- interface MessageSender {
- id: string;
- tab?: chrome.tabs.Tab;
- }
-
- interface Port {
- postMessage: Function;
- sender?: MessageSender;
- onDisconnect: chrome.events.Event;
- onMessage: chrome.events.Event;
- name: string;
- }
-
interface FetchProperties {
windowId?: number;
type?: string;
}
- interface ConnectInfo {
- name?: string;
- }
-
- interface ExtensionMessageEvent extends chrome.events.Event {
- addListener(callback: (message: any, sender: MessageSender, sendResponse: Function) => void): void;
- }
-
- interface ExtensionMessageExternalEvent extends chrome.events.Event {
- addListener(callback: (message: any, sender: MessageSender, sendResponse: Function) => void): void;
- }
-
- interface ExtensionConnectEvent extends chrome.events.Event {
- addListener(callback: (port: Port) => void): void;
- }
-
- interface ExtensionConnectExternalEvent extends chrome.events.Event {
- addListener(callback: (port: Port) => void): void;
- }
-
var inIncognitoContext: boolean;
var lastError: Object;
@@ -876,15 +843,7 @@ declare module chrome.extension {
export function setUpdateUrlData(data: string): void;
export function getViews(fetchProperties?: FetchProperties): Window[];
export function isAllowedFileSchemeAccess(callback: (isAllowedAccess: boolean) => void): void;
- export function sendMessage(message: any, responseCallback?: (response: any) => void): void;
- export function sendMessage(extensionId: string, message: any, responseCallback?: (response: any) => void): void;
- export function connect(extensionId?: string, connectInfo?: ConnectInfo): Port;
export function isAllowedIncognitoAccess(callback: (isAllowedAccess) => void): void;
-
- var onMessage: ExtensionMessageEvent;
- var onMessageExternal: ExtensionMessageExternalEvent;
- var onConnect: ExtensionConnectEvent;
- var onConnectExternal: ExtensionConnectExternalEvent;
}
////////////////////
@@ -1461,11 +1420,62 @@ declare module chrome.runtime {
var lastError: Object;
var id: string;
+ interface ConnectInfo {
+ name?: string;
+ }
+
interface InstalledDetails {
reason: string;
previousVersion?: string;
}
+ interface MessageOptions {
+ includeTlsChannelId?: boolean;
+ }
+
+ interface MessageSender {
+ id: string;
+ tab?: chrome.tabs.Tab;
+ }
+
+ interface PlatformInfo {
+ os: string;
+ arch: string;
+ nacl_arch: string;
+ }
+
+ interface Port {
+ postMessage: Function;
+ sender?: MessageSender;
+ onDisconnect: chrome.events.Event;
+ onMessage: chrome.events.Event;
+ name: string;
+ }
+
+ interface UpdateAvailableDetails {
+ version: string;
+ }
+
+ interface UpdateCheckDetails {
+ version: string;
+ }
+
+ interface ExtensionMessageEvent extends chrome.events.Event {
+ addListener(callback: (message: any, sender: MessageSender, sendResponse: Function) => void): void;
+ }
+
+ interface ExtensionMessageExternalEvent extends chrome.events.Event {
+ addListener(callback: (message: any, sender: MessageSender, sendResponse: Function) => void): void;
+ }
+
+ interface ExtensionConnectEvent extends chrome.events.Event {
+ addListener(callback: (port: Port) => void): void;
+ }
+
+ interface ExtensionConnectExternalEvent extends chrome.events.Event {
+ addListener(callback: (port: Port) => void): void;
+ }
+
interface RuntimeSuspendEvent extends chrome.events.Event {
addListener(callback: Function): void;
}
@@ -1484,18 +1494,43 @@ declare module chrome.runtime {
interface RuntimeMessageEvent extends chrome.events.Event {
addListener(callback: Function): void;
}
+
+ interface RuntimeRestartRequiredEvent extends chrome.events.Event {
+ addListener(callback: (reason: string) => void): void;
+ }
+
+ interface RuntimeUpdateAvailableEvent extends chrome.events.Event {
+ addListener(callback: (details: UpdateAvailableDetails) => void): void;
+ }
+ export function connect(connectInfo?: ConnectInfo): Port;
+ export function connect(extensionId: string, connectInfo?: ConnectInfo): Port;
+ export function connectNative(application: string): Port;
export function getBackgroundPage(callback: (backgroundPage?: Window) => void): void;
export function getManifest(): Object;
+ export function getPackageDirectoryEntry(callback: (directoryEntry: any) => void): void;
+ export function getPlatformInfo(callback: (platformInfo: PlatformInfo) => void): void;
export function getURL(path: string): string;
-
+ export function reload(): void;
+ export function requestUpdateCheck(callback: (status: string, details?: UpdateCheckDetails) => void): void;
+ export function restart(): void;
+ export function sendMessage(message: any, responseCallback?: (response: any) => void): void;
+ export function sendMessage(message: any, options: MessageOptions, responseCallback?: (response: any) => void): void;
+ export function sendMessage(extensionId: string, message: any, responseCallback?: (response: any) => void): void;
+ export function sendMessage(extensionId: string, message: any, options: MessageOptions, responseCallback?: (response: any) => void): void;
+ export function sendNativeMessage(application: string, message: any, responseCallback?: (response: any) => void ): void;
+ export function setUninstallUrl(url: string): void;
+
+ var onConnect: ExtensionConnectEvent;
+ var onConnectExternal: ExtensionConnectExternalEvent;
var onSuspend: RuntimeSuspendEvent;
var onStartup: RuntimeStartupEvent;
var onInstalled: RuntimeInstalledEvent;
var onSuspendCanceled: RuntimeSuspendCanceledEvent;
var onMessage: RuntimeMessageEvent;
var onMessageExternal: RuntimeMessageEvent;
- var sendMessage:(req:any, cb:(resp:any)=>void)=>void;
+ var onRestartRequired: RuntimeRestartRequiredEvent;
+ var onUpdateAvailable: RuntimeUpdateAvailableEvent;
}
@@ -1718,6 +1753,7 @@ declare module chrome.tabs {
}
interface TabRemoveInfo {
+ windowId: number;
isWindowClosing: boolean;
}
diff --git a/ember/ember.d.ts b/ember/ember.d.ts
index 2ef232644..574bb3b9f 100644
--- a/ember/ember.d.ts
+++ b/ember/ember.d.ts
@@ -2728,13 +2728,13 @@ declare module Ember {
(target: any, method: Function): void;
begin(): void;
cancel(timer: any): void;
- debounce(target: any, method: Function, wait: number, immediate: boolean): void;
- debounce(target: any, method: string, wait: number, immediate: boolean): void;
+ debounce(target: any, method: Function, ...args: any[]): void;
+ debounce(target: any, method: string, ...args: any[]): void;
end(): void;
join(target: any, method: Function, ...any): any;
join(target: any, method: string, ...any): any;
- later(target: any, method: Function, wait: boolean): string;
- later(target: any, method: string, wait: boolean): string;
+ later(target: any, method: Function, ...args: any[]): string;
+ later(target: any, method: string, ...args: any[]): string;
next(target: any, method: Function, ...any): number;
next(target: any, method: string, ...any): number;
once(target: any, method: Function, ...any): number;
@@ -2744,8 +2744,8 @@ declare module Ember {
scheduleOnce(queue: string, target: any, method: Function, ...any): void;
scheduleOnce(queue: string, target: any, method: string, ...any): void;
sync(): void;
- throttle(target: any, method: Function, spacing: number): void;
- throttle(target: any, method: string, spacing: number): void;
+ throttle(target: any, method: Function, ...args: any[]): void;
+ throttle(target: any, method: string, ...args: any[]): void;
queues: any[];
};
function runLoadHooks(name: string, object: any): void;
diff --git a/flight/flight-tests.ts b/flight/flight-tests.ts
new file mode 100644
index 000000000..1bfe68d3a
--- /dev/null
+++ b/flight/flight-tests.ts
@@ -0,0 +1,49 @@
+///
+declare var el: Element;
+declare var els: Element[];
+declare var mixinFn: Function;
+
+function TestComponent() {
+ var self: Flight.Component = this;
+
+ self.defaultAttrs({
+ fooSelector: '.bar'
+ });
+
+ this.onClick = function (ev: JQueryEventObject, data: Flight.EventData) {
+ var el: HTMLElement = data.el;
+ self.select('fooSelector').addClass('bar');
+ };
+
+ self.around('initialize', function () { });
+ self.before('initialize', function () { });
+ self.after("initialize", function () {
+
+ var $node: JQuery = self.$node;
+ var node: Element = self.node;
+
+ self.on(el, 'click', {});
+ self.on(els, 'click', function () { });
+ self.on(document, 'click', this.onClick);
+ self.on('click', function () { });
+ self.on('click', {
+ fooSelector: this.onClick
+ });
+
+ self.off('click', function () { });
+ self.off(document, 'click');
+ self.off(el, 'click')
+ self.off(els, 'click');
+
+ self.teardown();
+ });
+}
+
+flight.component(TestComponent, mixinFn).attachTo(el);
+flight.component(TestComponent, mixinFn).attachTo($(els));
+flight.component(TestComponent, mixinFn).attachTo('.test');
+flight.component(TestComponent, mixinFn).attachTo('.test', {
+ some: 'data'
+});
+
+flight.component.teardownAll();
diff --git a/flight/flight.d.ts b/flight/flight.d.ts
new file mode 100644
index 000000000..a00f6d958
--- /dev/null
+++ b/flight/flight.d.ts
@@ -0,0 +1,238 @@
+///
+
+// Type definitions for Flight 1.1.1
+// Project: http://flightjs.github.com/flight/
+// Definitions by: Jonathan Hedrén
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module Flight {
+
+ export interface Base {
+
+ /**
+ * Most Components and Mixins need to define attributes. In Flight,
+ * default values are assigned by passing an object to the defaultAttrs
+ * function.
+ */
+ defaultAttrs(obj: Object): void;
+
+ /**
+ * The select method takes an attr key as its argument. The value of the
+ * attr must be a CSS Selector. The method will return all matching
+ * elements within the component's node.
+ *
+ * This is a handy alternative to jQuery's this.$node.find() and prevents
+ * accidental access to elements outside of the component's node.
+ *
+ * @param attr
+ */
+ select(attr: string): JQuery;
+
+ /**
+ * This method is attached to the prototype of every Component; it accepts
+ * the component's node and an options object as arguments. The core
+ * implementation, which is called every time an instance is created, will
+ * assign the node to the instance and override the default attrs with the
+ * options object.
+ *
+ * Components and Mixins will typically augment the core implementation by
+ * supplying a function as an argument to the after method (see the advice
+ * API for more information). This is a good place to set up event
+ * listeners that bind to callbacks.
+ */
+ initialize(node: any, options: Object): void;
+
+ /**
+ * This allows a component instance to listen to an event and register a
+ * callback to be invoked. Flight will automatically bind the context
+ * (this) of the callback to the component instance.
+ *
+ * @param selector Optional. Specify the DOM node(s) that should listen
+ * for the event. Defaults to the component instance's node value.
+ *
+ * @param eventType The event type to listen for.
+ *
+ * @param handler Either a function (callback) to be invoked, or a map of
+ * targets and callbacks.
+ */
+ on(eventType: string, handler: Function): void;
+ on(eventType: string, handler: Object): void;
+ on(selector: string, eventType: string, handler: Function): void;
+ on(selector: Document, eventType: string, handler: Function): void;
+ on(selector: Element, eventType: string, handler: Function): void;
+ on(selector: Element[], eventType: string, handler: Function): void;
+ on(selector: string, eventType: string, handler: Object): void;
+ on(selector: Document, eventType: string, handler: Object): void;
+ on(selector: Element, eventType: string, handler: Object): void;
+ on(selector: Element[], eventType: string, handler: Object): void;
+
+ /**
+ * If we no longer want a component instance to listen to an event we can
+ * use the off method to unsubscribe.
+ *
+ * @param selector Optional. The DOM node(s) listening for the event.
+ * Defaults to the component instance's node value.
+ *
+ * @param eventType The event type being listened to.
+ *
+ * @param handler Optional. The function (callback) to detach from the
+ * component instance. Defaults to the detaching all callbacks for the event.
+ */
+ off(eventType: string, handler?: Function): void;
+ off(selector: string, eventType: string, handler?: Function): void;
+ off(selector: Document, eventType: string, handler?: Function): void;
+ off(selector: Element, eventType: string, handler?: Function): void;
+ off(selector: Element[], eventType: string, handler?: Function): void;
+ off(selector: string, eventType: Object, handler?: Function): void;
+ off(selector: Document, eventType: Object, handler?: Function): void;
+ off(selector: Element, eventType: Object, handler?: Function): void;
+ off(selector: Element[], eventType: Object, handler?: Function): void;
+ off(selector: string, eventType: string, handler?: Object): void;
+ off(selector: Document, eventType: string, handler?: Object): void;
+ off(selector: Element, eventType: string, handler?: Object): void;
+ off(selector: Element[], eventType: string, handler?: Object): void;
+ off(selector: string, eventType: Object, handler?: Object): void;
+ off(selector: Document, eventType: Object, handler?: Object): void;
+ off(selector: Element, eventType: Object, handler?: Object): void;
+ off(selector: Element[], eventType: Object, handler?: Object): void;
+
+ /**
+ * Trigger an event.
+ *
+ * @param selector Optional. The DOM node(s) that the event will be
+ * dispatched to. Defaults to the component instance's node value.
+ *
+ * @param eventType String. The event type to be triggered.
+ *
+ * You can also specify a default function that will be called by the
+ * component, providing that nothing in the event's bubble chain invokes
+ * preventDefault. Default functions in custom events are analagous to the
+ * default actions of native events.
+ *
+ * To define a default function, make the eventType argument an object
+ * that specifies the event's type and a defaultBehavior property. A
+ * common use case is defining default behavior for keyboard events.
+ *
+ * @param eventPayload This is the payload of data that accompanies the event.
+ */
+ trigger(eventType: string): void;
+ trigger(selector: string, eventType: string, eventPayload?: Object): void;
+ trigger(selector: Document, eventType: string, eventPayload?: Object): void;
+ trigger(selector: Element, eventType: string, eventPayload?: Object): void;
+ trigger(selector: Element[], eventType: string, eventPayload?: Object): void;
+ trigger(eventType: Object): void;
+ trigger(selector: string, eventType: Object, eventPayload?: Object): void;
+ trigger(selector: Document, eventType: Object, eventPayload?: Object): void;
+ trigger(selector: Element, eventType: Object, eventPayload?: Object): void;
+ trigger(selector: Element[], eventType: Object, eventPayload?: Object): void;
+
+ /**
+ * Remove a component instance and its event bindings.
+ *
+ * It's a good idea to teardown components after each unit test - and
+ * teardown is also good for unbinding event listeners when, for example,
+ * the user navigates away from a page.
+ *
+ */
+ teardown(): void;
+ }
+
+ export interface Advice extends Base {
+ /**
+ * Run the customFunc function after the existingFunc function.
+ *
+ * @param existingFuncName The name of the existing function (existingFunc)
+ * you want to augment.
+ *
+ * customFunc The function to be invoked after existingFunc.
+ */
+ after(method: string, fn: Function): void;
+
+ /**
+ * Run the existingFunc function in the middle of the customFunc function.
+ * It's similar to underscore's _wrap function).
+ *
+ * @param existingFuncName The name of the existing function (existingFunc)
+ * you want to augment.
+ *
+ * customFunc The function to wrap around existingFunc. The existingFunc
+ * function will be passed to customFunc as an argument.
+ *
+ * The existing function is passed to the custom function as an argument so
+ * that it can be referenced. If the custom function does not call the
+ * existing function then it will replace that function instead of
+ * surrounding it.
+ */
+ around(method: string, fn: Function): void;
+
+ /**
+ * Run the customFunc function before the existingFunc function.
+ *
+ * @param existingFuncName The name of the existing function (existingFunc)
+ * you want to augment.
+ *
+ * @param customFunc The function to be invoked before existingFunc.
+ */
+ before(method: string, fn: Function): void;
+ }
+
+ export interface Component extends Base, Advice {
+ node: Element;
+ $node: JQuery;
+ }
+
+
+ export interface AdviceStatic {
+ withAdvice(): Function;
+ }
+
+ export interface ComponentStatic {
+ (...fns: Function[]): ComponentStatic;
+ attachTo(selector: string, options?: Object): void;
+ attachTo(selector: Element, options?: Object): void;
+ attachTo(selector: JQuery, options?: Object): void;
+ teardownAll(): void;
+ }
+
+ export interface ComposeStatic {
+ mixin(base: Object, mixins: Function[]): void;
+ }
+
+ export interface DebugStatic {
+ events: {
+ logAll(): void;
+ logByAction(action: string): void;
+ logByName(name: string): void;
+ logNone(): void;
+ }
+ }
+
+ export interface UtilsStatic {
+ compose(fn1: Function, fn2: Function, ...fns: Function[]): Function;
+ countThen(num: number, base: Function): Function;
+ debounce(func: Function, wait: number, immediate: boolean): Function;
+ delegate(rules: Object): void;
+ isDomObj(obj: Object): boolean;
+ isEnumerable(obj: Object, property: string): boolean;
+ merge(obj1: Object, obj2: Object, deepClone?: boolean): Object;
+ merge(obj1: Object, obj2: Object, ...args: any[]): Object;
+ push(base: Object, extra: Object, protect?: boolean): void;
+ throttle(func: Function, wait: number): Function;
+ toArray(obj: Object, from?: number): Array;
+ uniqueArray(array: Array): Array;
+ }
+
+ export interface EventData {
+ el: HTMLElement;
+ }
+
+ export interface FlightStatic {
+ advice: AdviceStatic;
+ component: ComponentStatic;
+ compose: ComposeStatic;
+ utils: UtilsStatic;
+ }
+}
+
+declare var DEBUG: Flight.DebugStatic;
+declare var flight: Flight.FlightStatic;
\ No newline at end of file
diff --git a/flot/jquery.flot.d.ts b/flot/jquery.flot.d.ts
index fc484aae5..542810545 100644
--- a/flot/jquery.flot.d.ts
+++ b/flot/jquery.flot.d.ts
@@ -72,7 +72,7 @@ declare module jquery.flot {
}
interface seriesOptions {
- color?: number;
+ color?: any; // color or number
label?: string;
lines?: linesOptions;
bars?: barsOptions;
diff --git a/globalize/globalize-tests.ts b/globalize/globalize-tests.ts
index 577330424..5174f90f9 100644
--- a/globalize/globalize-tests.ts
+++ b/globalize/globalize-tests.ts
@@ -22,10 +22,14 @@ Globalize.addCultureInfo("fr", { messages: { "translate": "traduire" } });
console.log(Globalize.localize("translate", "fr"));
Globalize.parseInt("1,234.56");
-Globalize.parseInt("1.234,56");
+Globalize.parseInt("1.234,56", 10);
+Globalize.parseInt("1.234,56", 10, "de");
Globalize.parseFloat("1,234.56");
-Globalize.parseFloat("1.234,56");
+Globalize.parseFloat("1.234,56", 10);
+Globalize.parseFloat("1.234,56", 10, "de");
Globalize.parseDate("1/2/2003");
+Globalize.parseDate("15 Jun 2012", "dd MMM yyyy");
+Globalize.parseDate("15 Jun 2012", ["dd MMM yyyy"]);
Globalize.culture("fr");
Globalize.parseDate("1/2/2003");
diff --git a/globalize/globalize.d.ts b/globalize/globalize.d.ts
index dd2876bc8..da17957f1 100644
--- a/globalize/globalize.d.ts
+++ b/globalize/globalize.d.ts
@@ -107,14 +107,16 @@ interface GlobalizeStatic {
culture(cultureSelector: string): GlobalizeCulture;
culture(cultureSelector: string[]): GlobalizeCulture;
- addCultureInfo(cultureName, baseCultureName, info? );
+ addCultureInfo(cultureName: string, baseCultureName, info?);
findClosestCulture(cultureSelector: string);
- format(value, format, cultureSelector? );
- localize(key, cultureSelector?);
+ format(value: number, format: string, cultureSelector?: string);
+ format(value: Date, format: string, cultureSelector?: string);
+ localize(key: string, cultureSelector?: string);
- parseDate(value: string, formats? , cultureSelector?: string): Date;
- parseInt(value: string, radix? , cultureSelector?: string): number;
- parseFloat(value: string, radix? , cultureSelector?: string): number;
+ parseDate(value: string, format?: string, cultureSelector?: string): Date;
+ parseDate(value: string, formats?: string[], cultureSelector?: string): Date;
+ parseInt(value: string, radix?: number, cultureSelector?: string): number;
+ parseFloat(value: string, radix?: number, cultureSelector?: string): number;
}
declare var Globalize: GlobalizeStatic;
diff --git a/google.visualization/google.visualization.d.ts b/google.visualization/google.visualization.d.ts
index 13d9421bc..511d65a23 100644
--- a/google.visualization/google.visualization.d.ts
+++ b/google.visualization/google.visualization.d.ts
@@ -4,9 +4,28 @@ declare module google {
function setOnLoadCallback(handler: Function): void;
function setOnLoadCallback(handler: () => void): void;
+ //https://developers.google.com/chart/interactive/docs/reference
module visualization {
+ //#region DataTable
// https://developers.google.com/chart/interactive/docs/reference#DataTable
+ export class DataTable {
+ constructor(data?: any, version?: any);
+ addColumn(type: string, label?: string, id?: string): number;
+ addColumn(descriptionObject: DataTableColumnDescription): number;
+ addRow(cellObject: DataObjectCell): number;
+ addRow(cellArray?: any[]): number;
+ addRows(count: number): number;
+ addRows(array: DataObjectCell[][]): number;
+ addRows(array: any[]): number;
+ getFilteredRows(filters: DataTableCellFilter[]): number[];
+ getFormattedValue(rowIndex: number, columnIndex: number): string;
+ getNumberOfColumns(): number;
+ getNumberOfRows(): number;
+ removeRow(rowIndex: number): void;
+ removeRows(rowIndex: number, numberOfRows: number): void;
+ setColumnLabel(columnIndex: number, label: string): void;
+ }
export interface DataTableColumnDescription {
type?: string;
@@ -16,10 +35,10 @@ declare module google {
pattern?: string;
}
- export interface DataObjectCell {
- v?: any;
- f?: string;
- p?: any;
+ export interface DataObject {
+ cols: DataObjectColumn[];
+ rows: DataObjectRow[];
+ p: any;
}
export interface DataObjectColumn {
@@ -35,30 +54,52 @@ declare module google {
p?: any;
}
- export interface DataObject {
- cols: DataObjectColumn[];
- rows: DataObjectRow[];
- p: any;
+ export interface DataTableCellFilter {
+ column: number;
}
- export class DataTable {
- constructor(data?: any, version?: any);
- addColumn(type: string, label?: string, id?: string): number;
- addColumn(descriptionObject: DataTableColumnDescription): number;
- addRow(cellObject: DataObjectCell): number;
- addRow(cellArray?: any[]): number;
- addRows(count: number): number;
- addRows(array: DataObjectCell[][]): number;
- addRows(array: any[]): number;
+ export interface DataObjectCell {
+ v?: any;
+ f?: string;
+ p?: any;
+ }
+
+ export interface DataTableCellValueFilter extends DataTableCellFilter {
+ value: any;
+ }
+
+ export interface DataTableCellRangeFilter extends DataTableCellFilter {
+ minValue?: any;
+ maxValue?: any;
}
function arrayToDataTable(data: any[]): DataTable;
+ //#endregion
+ //#region DataView
+
+ // https://developers.google.com/chart/interactive/docs/reference#DataView
+ export class DataView {
+ constructor(data: DataTable);
+ constructor(data: DataView);
+ setColumns(columnIndexes: number[]): void;
+ }
+
+ //#endregion
+ //#region GeoChart
+
//https://google-developers.appspot.com/chart/interactive/docs/gallery/geochart
export class GeoChart {
constructor(element: Element);
- draw(chart: DataTable, options: GeoChartOptions): void;
+
+ // https://developers.google.com/chart/interactive/docs/gallery/geochart?hl=fr&csw=1#Methods
+ draw(data: DataTable, options: GeoChartOptions): void;
+ getSelection(): GeoChartSelection[];
+ setSelection(selection: VisualizationSelectionArray[]): void;
+ clearChart(): void;
}
+
+ // https://developers.google.com/chart/interactive/docs/gallery/geochart?hl=fr&csw=1#Configuration_Options
export interface GeoChartOptions {
backgroundColor?: any;
colorAxis?: GeoChartColorAxis;
@@ -76,11 +117,12 @@ declare module google {
tooltip?: GeoChartTooltip;
width?: number;
}
- //export interface GeoChartColor {
- // fill?: string;
- // stroke?: string;
- // strokeWidth: number;
- //}
+ export interface GeoChartAxis {
+ maxSize?: number;
+ maxValue?: number;
+ minSize?: number;
+ minValue?: number;
+ }
export interface GeoChartColorAxis extends GeoChartAxis {
minValue?: number;
maxValue?: number;
@@ -102,20 +144,226 @@ declare module google {
enable?: boolean;
zoomFactor?: number;
}
- export interface GeoChartAxis {
- maxSize?: number;
- maxValue?: number;
- minSize?: number;
- minValue?: number;
- }
export interface GeoChartTooltip {
textStyle?: GeoChartTextStyle;
trigger?: string;
}
+ export interface GeoChartRegionClickEvent {
+ region: string;
+ }
+ export interface GeoChartSelection {
+ row: number;
+ }
+
+ //#endregion
+ //#region Common
+
+ export interface ChartArea {
+ top: any;
+ left: any;
+ width: any;
+ height: any;
+ }
+
+ export interface ChartTextStyle {
+ color?: string;
+ fontName?: string;
+ fontSize?: number;
+ bold?: boolean;
+ italic?: boolean;
+ }
+
+ export interface ChartLegend {
+ alignment?: string;
+ maxLines?: number;
+ position?: string;
+ textStyle?: ChartTextStyle;
+ }
+
+ // https://google-developers.appspot.com/chart/interactive/docs/animation
+ export interface TransitionAnimation {
+ duration?: number;
+ easing?: string; // linear, in, out, inAndOut
+ }
+
+ export interface ChartAxis {
+ baseline?: number; // This option is only supported for a continuous axis. https://google-developers.appspot.com/chart/interactive/docs/customizing_axes#Terminology
+ baselineColor?: string; // google's documentation on this is wrong, specifies it as a number. The color of the baseline for the horizontal axis. Can be any HTML color string, for example: 'red' or '#00cc00'
+ direction?: number; // The direction in which the values along the horizontal axis grow. Specify -1 to reverse the order of the values.
+ format?: string; // icu pattern set http://icu-project.org/apiref/icu4c/classDecimalFormat.html#_details
+ gridlines?: ChartGridlines;
+ logScale?: boolean;
+ textPosition?: string;
+ textStyle?: ChartTextStyle;
+ ticks?: any[];
+ title?: string;
+ titleTextStyle?: ChartTextStyle;
+ allowContainerBoundaryTextCufoff?: boolean;
+ slantedText?: boolean;
+ slantedTextAngle?: number;
+ maxAlternation?: number;
+ maxTextLines?: number;
+ minTextSpacing?: number;
+ showTextEvery?: number;
+ maxValue?: number;
+ minValue?: number;
+ viewWindowMode?: string;
+ viewWindow?: ChartViewWindow;
+ }
+
+ export interface ChartGridlines {
+ color?: string;
+ count?: number;
+ minorGridlines?: ChartMinorGridlines;
+ }
+
+ export interface ChartMinorGridlines {
+ color?: string;
+ count?: number;
+ }
+
+ export interface ChartViewWindow {
+ max?: number;
+ min?: number;
+ }
+
+ export interface ChartTooltip {
+ isHtml?: boolean;
+ showColorCode?: boolean;
+ textStyle?: ChartTextStyle;
+ trigger?: string;
+ }
+
+ export interface ChartBoundingBox {
+ left: number;
+ top: number;
+ width: number;
+ height: number;
+ }
+
+ export interface ChartLayoutInterface {
+ getBoundingBox(id: string): ChartBoundingBox;
+ getChartAreaBoundingBox(): ChartBoundingBox;
+ getHAxisValue(position: number, axisIndex?: number): number;
+ getVAxisValue(position: number, axisIndex?: number): number;
+ getXLocation(position: number, axisIndex?: number): number;
+ getYLocation(position: number, axisIndex?: number): number;
+ }
+
+ export interface VisualizationSelectionArray {
+ column?: number;
+ row?: number;
+ }
+
+ //#endregion
+ //#region ColumnChart
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/columnchart
+ export class ColumnChart {
+ constructor(element: Element);
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/columnchart#Methods
+ draw(data: DataTable, options?: ColumnChartOptions): void;
+ draw(data: DataView, options?: ColumnChartOptions): void;
+ getChartLayoutInterface(): ChartLayoutInterface;
+ getSelection(): any[];
+ setSelection(selection: any[]): void;
+ clearChart(): void;
+ }
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/columnchart#Configuration_Options
+ export interface ColumnChartOptions {
+ aggregationTarget?: string;
+ animation?: TransitionAnimation;
+ axisTitlesPosition?: string; // in, out, none
+ backgroundColor?: any;
+ bar?: ColumnChartBarOptions;
+ chartArea?: ChartArea;
+ colors?: string[];
+ enableInteractivity?: boolean;
+ focusTarget?: string;
+ fontSize?: number;
+ fontName?: string;
+ hAxis?: ChartAxis;
+ height?: number;
+ isStacked?: boolean;
+ legend?: ChartLegend;
+ reverseCategories?: boolean;
+ selectionMode?: string // single / multiple
+ series?: any;
+ theme?: string;
+ title?: string;
+ titlePosition?: string;
+ titleTextStyle?: ChartTextStyle;
+ tooltip?: ChartTooltip;
+ vAxes?: any;
+ vAxis?: ChartAxis;
+ width?: number;
+ }
+
+ export interface ColumnChartBarOptions {
+ groupWidth: any;
+ }
+
+ //#endregion
+ //#region LineChart
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart
+ export class LineChart {
+ constructor(element: Element);
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart#Methods
+ draw(data: DataTable, options: any): void;
+ draw(data: DataView, options: any): void;
+ getChartLayoutInterface(): ChartLayoutInterface;
+ getSelection(): any[];
+ setSelection(selection: any[]): void;
+ clearChart(): void;
+ }
+
+ // https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart#Configuration_Options
+ export interface LineChartOptions {
+ aggregationTarget?: string;
+ animation?: TransitionAnimation;
+ axisTitlesPosition?: string;
+ backgroundColor?: any;
+ chartArea?: ChartArea;
+ colors?: string[];
+ curveType?: string;
+ enableInteractivity?: boolean;
+ focusTarget?: string;
+ fontSize?: number;
+ fontName?: string;
+ hAxis?: ChartAxis;
+ height?: number;
+ interpolateNulls?: boolean;
+ legend?: ChartLegend;
+ lineWidth?: number;
+ pointSize?: number;
+ reverseCategories?: boolean;
+ selectionMode?: string // single / multiple
+ series?: any;
+ theme?: string;
+ title?: string;
+ titlePosition?: string;
+ titleTextStyle?: ChartTextStyle;
+ tooltip?: ChartTooltip;
+ vAxes?: any;
+ vAxis?: ChartAxis;
+ width?: number;
+ }
+
+ //#endregion
+ //#region Events
module events {
- function addListener(chart: any, eventName: string, callback: Function): any;
- function addListener(chart: any, eventName: string, callback: () => any): any;
+ function addListener(visualization: any, eventName: string, callback: Function): any;
+ function addListener(visualization: any, eventName: string, callback: (...args: any[]) => void): any;
+ function removeListener(listener: any): void;
+ function removeAllListeners(visualization: any): void;
+ function trigger(visualization: any, eventName: string, args?: any): void;
}
+
+ //#endregion
}
}
\ No newline at end of file
diff --git a/jquery.base64/jquery.base64-tests.ts b/jquery.base64/jquery.base64-tests.ts
new file mode 100644
index 000000000..5f6b6eaa6
--- /dev/null
+++ b/jquery.base64/jquery.base64-tests.ts
@@ -0,0 +1,8 @@
+///
+///
+
+var encoded = $.base64.encode("");
+$.base64.decode(encoded);
+
+var encodedUTF8 = $.base64.encode("", true);
+$.base64.decode(encodedUTF8, true);
diff --git a/jquery.base64/jquery.base64.d.ts b/jquery.base64/jquery.base64.d.ts
new file mode 100644
index 000000000..9af24ed01
--- /dev/null
+++ b/jquery.base64/jquery.base64.d.ts
@@ -0,0 +1,15 @@
+// Type definitions for jQuery Plugin - base64 codec
+// Project: https://github.com/yatt/jquery.base64/
+// Definitions by: Shinya Mochizuki
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+interface JQueryBase64Static {
+ encode(data: string, isUTF8?: boolean): string;
+ decode(data: string, isUTF8?: boolean): string;
+}
+
+interface JQueryStatic {
+ base64: JQueryBase64Static;
+}
diff --git a/jquery.cleditor/jquery.cleditor-tests.ts b/jquery.cleditor/jquery.cleditor-tests.ts
new file mode 100644
index 000000000..b29885150
--- /dev/null
+++ b/jquery.cleditor/jquery.cleditor-tests.ts
@@ -0,0 +1,42 @@
+///
+///
+
+// cribbed from http://premiumsoftware.net/CLEditor/GettingStarted
+
+$(document).ready(function () { $("#input").cleditor(); });
+
+$(document).ready(function() {
+ $("#input").cleditor({
+ width: 500, // width not including margins, borders or padding
+ height: 250, // height not including margins, borders or padding
+ controls: // controls to add to the toolbar
+ "bold italic underline strikethrough subscript superscript | font size " +
+ "style | color highlight removeformat | bullets numbering | outdent " +
+ "indent | alignleft center alignright justify | undo redo | " +
+ "rule image link unlink | cut copy paste pastetext | print source",
+ colors: // colors in the color popup
+ "FFF FCC FC9 FF9 FFC 9F9 9FF CFF CCF FCF " +
+ "CCC F66 F96 FF6 FF3 6F9 3FF 6FF 99F F9F " +
+ "BBB F00 F90 FC6 FF0 3F3 6CC 3CF 66C C6C " +
+ "999 C00 F60 FC3 FC0 3C0 0CC 36F 63F C3C " +
+ "666 900 C60 C93 990 090 399 33F 60C 939 " +
+ "333 600 930 963 660 060 366 009 339 636 " +
+ "000 300 630 633 330 030 033 006 309 303",
+ fonts: // font names in the font popup
+ "Arial,Arial Black,Comic Sans MS,Courier New,Narrow,Garamond," +
+ "Georgia,Impact,Sans Serif,Serif,Tahoma,Trebuchet MS,Verdana",
+ sizes: // sizes in the font size popup
+ "1,2,3,4,5,6,7",
+ styles: // styles in the style popup
+ [["Paragraph", ""], ["Header 1", "
"], ["Header 2", ""],
+ ["Header 3", ""], ["Header 4",""], ["Header 5",""],
+ ["Header 6",""]],
+ useCSS: false, // use CSS to style HTML when possible (not supported in ie)
+ docType: // Document type contained within the editor
+ '',
+ docCSSFile: // CSS file used to style the document contained within the editor
+ "",
+ bodyStyle: // style to assign to document body contained within the editor
+ "margin:4px; font:10pt Arial,Verdana; cursor:text"
+ });
+ });
\ No newline at end of file
diff --git a/jquery.cleditor/jquery.cleditor.d.ts b/jquery.cleditor/jquery.cleditor.d.ts
new file mode 100644
index 000000000..c273f3227
--- /dev/null
+++ b/jquery.cleditor/jquery.cleditor.d.ts
@@ -0,0 +1,98 @@
+// Type definitions for jQuery CLEditor Plugin 1.4.3
+// Project: http://premiumsoftware.net/CLEditor
+// Definitions by: Jeffery Grajkowski
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+/**
+ * An editor is composed of a main div element used to hold a toolbar,
+ * a text area and an iframe. The toolbar can hold multiple groups
+ * which in turn hold multiple buttons.
+ */
+interface CLEditor {
+ $area: JQuery;
+ $frame: JQuery;
+ $main: JQuery;
+ $toolbar: JQuery;
+ disabled: boolean;
+ doc: Document;
+ options: JQueryCLEditorOptions;
+ change(handler: Function): CLEditor;
+ clear(): CLEditor;
+ disable(disabled: boolean): CLEditor;
+ execCommand(commands: string, value: any, useCSS?: boolean, button?: any): CLEditor;
+ focus(): CLEditor;
+ hidePopups(): CLEditor;
+ refresh(): CLEditor;
+ select(): CLEditor;
+ selectedHTML(): string;
+ selectedText(): string;
+ showMessage(message: string, button?: any): CLEditor;
+ sourceMode(): boolean;
+ updateFrame(): CLEditor;
+ updateTextArea(): CLEditor;
+}
+
+interface JQueryCLEditorOptions {
+ width?: number;
+ height?: number;
+ controls?: string;
+ colors?: string;
+ fonts?: string;
+ sizes?: string;
+ styles?: string[][];
+ useCSS?: boolean;
+ docType?: string;
+ docCSSFile?: string;
+ bodyStyle?: string;
+}
+
+interface JQueryCLEditorButtonDefinition {
+ name: string;
+ title: string;
+ css?: any;
+ image?: string;
+ stripIndex?: number;
+ command?: string;
+ popupName?: string;
+ popupContent?: string;
+ getEnabled?: (data: JQueryCLEditorButtonDefinitionEventData) => boolean;
+ getPressed?: (data: JQueryCLEditorButtonDefinitionEventData) => boolean;
+ buttonClick?: (event: Event, data: JQueryCLEditorButtonDefinitionEventData) => boolean;
+ popupClick?: (event: Event, data: JQueryCLEditorButtonDefinitionEventData) => boolean;
+}
+
+interface JQueryCLEditorButtonDefinitionEventData {
+ editor: CLEditor;
+ button: HTMLElement;
+ buttonName: string;
+ popup: HTMLElement;
+ popupName: string;
+ command: string;
+ value: any;
+ useCSS: boolean;
+}
+
+/**
+ * This object contains global properties and methods used to create
+ * custom plugins and override built in functionality.
+ */
+interface JQueryCLEditorStatic {
+ defaultOptions: JQueryCLEditorOptions;
+ buttons: JQueryCLEditorButtonDefinition[];
+ imagesPath: () => string;
+}
+
+interface JQueryStatic {
+ cleditor: JQueryCLEditorStatic;
+}
+
+interface JQuery {
+ /**
+ * If the cleditor object does not exist for a matched textarea element,
+ * it will be created using the default options combined with the supplied options.
+ * This is the core method for creating and selecting cleditor objects.
+ */
+ cleditor(options?: JQueryCLEditorOptions): CLEditor;
+}
diff --git a/jqueryui/jqueryui.d.ts b/jqueryui/jqueryui.d.ts
index 42de3a3af..1a09df7fd 100644
--- a/jqueryui/jqueryui.d.ts
+++ b/jqueryui/jqueryui.d.ts
@@ -73,7 +73,7 @@ declare module JQueryUI {
}
interface Autocomplete extends Widget, AutocompleteOptions, AutocompleteEvents {
- escapeRegex: (string) => string;
+ escapeRegex: (value: string) => string;
}
@@ -154,7 +154,7 @@ declare module JQueryUI {
interface Datepicker extends Widget, DatepickerOptions {
regional: { [languageCod3: string]: any; };
- setDefaults(defaults: DatepickerOptions);
+ setDefaults(defaults: DatepickerOptions): void;
formatDate(format: string, date: Date, settings?: DatepickerFormatDateOptions): string;
parseDate(format: string, date: string, settings?: DatepickerFormatDateOptions): Date;
iso8601Week(date: Date): void;
diff --git a/knockout.es5/knockout.es5-tests.ts b/knockout.es5/knockout.es5-tests.ts
index f8faf9529..c51b9bc9d 100644
--- a/knockout.es5/knockout.es5-tests.ts
+++ b/knockout.es5/knockout.es5-tests.ts
@@ -1,4 +1,4 @@
-///
+///
var empty = {},
obj = { a: 'string', b: 123, c: true, d: empty },
@@ -75,3 +75,12 @@ anOrder.lines.shift();
console.log(someOrderLine.subtotal == someOrderLine.getSubtotal()); // true
console.log(anOrder.lines.length); // 1
+
+//Array methods
+anOrder.lines.remove(someOrderLine);
+anOrder.lines.removeAll([someOrderLine]);
+anOrder.lines.removeAll();
+
+anOrder.lines.destroy(someOrderLine);
+anOrder.lines.destroyAll([someOrderLine]);
+anOrder.lines.destroyAll();
\ No newline at end of file
diff --git a/knockout.es5/knockout.es5.d.ts b/knockout.es5/knockout.es5.d.ts
index c546e1beb..868655545 100644
--- a/knockout.es5/knockout.es5.d.ts
+++ b/knockout.es5/knockout.es5.d.ts
@@ -8,7 +8,22 @@
interface KnockoutStatic {
track(obj: any, propertyNames?: Array): any;
defineProperty(obj: any, propertyName: string, evaluator: Function): any;
- defineProperty(obj: any, propertyName: string, options: { get: () => any; set?: (value: any) => void; }): any;
+ defineProperty(obj: any, propertyName: string, options: KnockoutDefinePropertyOptions): any;
getObservable(obj: any, propertyName: string): KnockoutObservable;
valueHasMutated(obj: any, propertyName: string): void;
+}
+
+interface KnockoutDefinePropertyOptions {
+ get(): any;
+ set?(value: any): void;
+}
+
+interface Array {
+ remove(item): T[];
+ removeAll(items: T[]): T[];
+ removeAll(): T[];
+
+ destroy(item: T): void;
+ destroyAll(items: T[]): void;
+ destroyAll(): void;
}
\ No newline at end of file
diff --git a/knockout.postbox/knockout-postbox.d.ts b/knockout.postbox/knockout-postbox.d.ts
index 3e6698851..daa35458a 100644
--- a/knockout.postbox/knockout-postbox.d.ts
+++ b/knockout.postbox/knockout-postbox.d.ts
@@ -19,6 +19,14 @@ interface KnockoutObservable {
syncWith(topic: string, initializeWithLatestValue?: boolean, skipInitialPublish?: boolean, equalityComparer?: (newValue: T, oldValue: T) => boolean): KnockoutObservable;
}
+interface KnockoutObservableArray {
+ subscribeTo(topic: string, useLastPublishedValueToInitialize?: boolean, transform?: (val: any) => T): KnockoutObservableArray;
+ unsubscribeFrom(topic: string): KnockoutObservableArray;
+ publishOn(topic: string, skipInitialPublish?: boolean, equalityComparer?: (newValue: T, oldValue: T) => boolean): KnockoutObservableArray;
+ stopPublishingOn(topic: string): KnockoutObservableArray;
+ syncWith(topic: string, initializeWithLatestValue?: boolean, skipInitialPublish?: boolean, equalityComparer?: (newValue: T, oldValue: T) => boolean): KnockoutObservableArray;
+}
+
interface KnockoutStatic {
postbox: KnockoutPostBox;
}
\ No newline at end of file
diff --git a/knockout.rx/knockout.rx-tests.ts b/knockout.rx/knockout.rx-tests.ts
new file mode 100644
index 000000000..674e9bb6a
--- /dev/null
+++ b/knockout.rx/knockout.rx-tests.ts
@@ -0,0 +1,12 @@
+///
+
+var ax: Rx.IObservable;
+
+var ao = ax.toKoObservable();
+
+ao(100);
+ao.getSubscriptionsCount();
+
+ao.toObservable();
+ao.toObservable("change");
+ao.toObservable("error");
\ No newline at end of file
diff --git a/knockout.rx/knockout.rx-tests.ts.tscparams b/knockout.rx/knockout.rx-tests.ts.tscparams
new file mode 100644
index 000000000..e16c76dff
--- /dev/null
+++ b/knockout.rx/knockout.rx-tests.ts.tscparams
@@ -0,0 +1 @@
+""
diff --git a/knockout.rx/knockout.rx.d.ts b/knockout.rx/knockout.rx.d.ts
new file mode 100644
index 000000000..4f44153d8
--- /dev/null
+++ b/knockout.rx/knockout.rx.d.ts
@@ -0,0 +1,26 @@
+// Type definitions for knockout.rx 0.1
+// Project: https://github.com/Igorbek/knockout.rx
+// Definitions by: Igor Oleinikov
+
+///
+///
+
+interface KnockoutSubscribableFunctions {
+ toObservable(event?: string): Rx.IObservable;
+ toObservable(event: string): Rx.IObservable;
+}
+
+interface KnockoutObservableFunctions {
+ toObservableWithReplyLatest(): Rx.IObservable;
+}
+
+interface KnockoutComputedFunctions {
+ toObservableWithReplyLatest(): Rx.IObservable;
+}
+
+declare module Rx {
+ interface IObservable {
+ toKoSubscribable(): KnockoutSubscribable;
+ toKoObservable(initialValue?: T): KnockoutObservable;
+ }
+}
diff --git a/knockout.rx/knockout.rx.d.ts.tscparams b/knockout.rx/knockout.rx.d.ts.tscparams
new file mode 100644
index 000000000..e16c76dff
--- /dev/null
+++ b/knockout.rx/knockout.rx.d.ts.tscparams
@@ -0,0 +1 @@
+""
diff --git a/knockout/knockout.amd.d.ts b/knockout/knockout.amd.d.ts
index 960a0286d..7eb134612 100644
--- a/knockout/knockout.amd.d.ts
+++ b/knockout/knockout.amd.d.ts
@@ -24,10 +24,10 @@ declare module 'knockout' {
export function isObservable(instance: any): boolean;
export function isComputed(instance: any): boolean;
export function dataFor(node: any): any;
- export function removeNode(node: Element);
- export function cleanNode(node: Element);
- export function renderTemplate(template: Function, viewModel: any, options?: any, target?: any, renderMode?: any);
- export function renderTemplate(template: string, viewModel: any, options?: any, target?: any, renderMode?: any);
+ export function removeNode(node: Element): void;
+ export function cleanNode(node: Element): Element;
+ export function renderTemplate(template: Function, viewModel: any, options?: any, target?: any, renderMode?: any): any;
+ export function renderTemplate(template: string, viewModel: any, options?: any, target?: any, renderMode?: any): any;
//////////////////////////////////
//// templateSources.js
@@ -44,9 +44,10 @@ declare module 'knockout' {
//// templateRewriting.js
////////////////////////////////////
export var templateRewriting: {
- ensureTemplateIsRewritten(template, templateEngine, templateDocument);
- memoizeBindingAttributeSyntax(htmlString: string, templateEngine: KnockoutTemplateEngine);
- applyMemoizedBindingsToNextSibling(bindings);
+ ensureTemplateIsRewritten(template: Node, templateEngine: KnockoutTemplateEngine, templateDocument: Document): any;
+ ensureTemplateIsRewritten(template: string, templateEngine: KnockoutTemplateEngine, templateDocument: Document): any;
+ memoizeBindingAttributeSyntax(htmlString: string, templateEngine: KnockoutTemplateEngine): any;
+ applyMemoizedBindingsToNextSibling(bindings: any, nodeName: string): string;
};
////////////////////////////////////
//// nativeTemplateEngine.js
@@ -61,16 +62,25 @@ declare module 'knockout' {
////////////////////////////////////
export var jqueryTmplTemplateEngine: {
prototype: KnockoutTemplateEngine;
- renderTemplateSource(templateSource, bindingContext, options);
+ renderTemplateSource(templateSource: Object, bindingContext: KnockoutBindingContext, options: Object): Node[];
createJavaScriptEvaluatorBlock(script: string): string;
- addTemplate(templateName, templateMarkup);
+ addTemplate(templateName: string, templateMarkup: string): void;
};
////////////////////////////////////
//// templating.js
////////////////////////////////////
- export function setTemplateEngine(templateEngine: KnockoutNativeTemplateEngine);
- export function renderTemplate(template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode);
- export function renderTemplateForEach(template, arrayOrObservableArray, options, targetNode, parentBindingContext);
+ export function renderTemplate(template: Function, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ export function renderTemplate(template: any, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ export function renderTemplate(template: Function, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ export function renderTemplate(template: any, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ export function renderTemplate(template: Function, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ export function renderTemplate(template: any, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ export function renderTemplate(template: Function, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ export function renderTemplate(template: any, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ export function renderTemplateForEach(template: Function, arrayOrObservableArray: Array, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ export function renderTemplateForEach(template: any, arrayOrObservableArray: Array, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ export function renderTemplateForEach(template: Function, arrayOrObservableArray: KnockoutObservable, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ export function renderTemplateForEach(template: any, arrayOrObservableArray: KnockoutObservable < Array>, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
export var expressionRewriting: {
bindingRewriteValidators: any;
};
diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts
index 63f993894..79d0c1737 100644
--- a/knockout/knockout.d.ts
+++ b/knockout/knockout.d.ts
@@ -5,7 +5,7 @@
interface KnockoutSubscribableFunctions {
- notifySubscribers(valueToWrite: T, event?: string);
+ notifySubscribers(valueToWrite: T, event?: string): void;
}
interface KnockoutComputedFunctions {
@@ -27,12 +27,13 @@ interface KnockoutObservableArrayFunctions {
unshift(...items: T[]): number;
reverse(): T[];
sort(): void;
- sort(compareFunction): void;
+ sort(compareFunction: (left: any, right: any) => number): void;
// Ko specific
replace(oldItem: T, newItem: T): void;
- remove(item): T[];
+ remove(item: T): T[];
+ remove(removeFunction: (item: T) => boolean): T[];
removeAll(items: T[]): T[];
removeAll(): T[];
@@ -52,10 +53,8 @@ interface KnockoutSubscription {
}
interface KnockoutSubscribable extends KnockoutSubscribableFunctions {
- (): T;
- (value: T): void;
-
subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription;
+ subscribe(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription;
extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable;
getSubscriptionsCount(): number;
}
@@ -70,10 +69,14 @@ interface KnockoutComputedStatic {
}
interface KnockoutComputed extends KnockoutSubscribable, KnockoutComputedFunctions {
+ (): T;
+ (value: T): void;
+
peek(): T;
dispose(): void;
isActive(): boolean;
getDependenciesCount(): number;
+ extend(requestedExtenders: { [key: string]: any; }): KnockoutComputed;
}
interface KnockoutObservableArrayStatic {
@@ -83,6 +86,7 @@ interface KnockoutObservableArrayStatic {
}
interface KnockoutObservableArray extends KnockoutObservable, KnockoutObservableArrayFunctions {
+ extend(requestedExtenders: { [key: string]: any; }): KnockoutObservableArray;
}
interface KnockoutObservableStatic {
@@ -92,9 +96,13 @@ interface KnockoutObservableStatic {
}
interface KnockoutObservable extends KnockoutSubscribable, KnockoutObservableFunctions {
+ (): T;
+ (value: T): void;
+
peek(): T;
valueHasMutated(): void;
valueWillMutate(): void;
+ extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable;
}
interface KnockoutComputedDefine {
@@ -114,8 +122,8 @@ interface KnockoutBindingContext {
$index?: number;
$parentContext?: KnockoutBindingContext;
- extend(any): any;
- createChildContext(any): any;
+ extend(properties: any): any;
+ createChildContext(dataItemOrAccessor: any, dataItemAlias?: any, extendCallback?: Function): any;
}
interface KnockoutBindingHandler {
@@ -159,23 +167,23 @@ interface KnockoutBindingHandlers {
}
interface KnockoutMemoization {
- memoize(callback);
- unmemoize(memoId, callbackParams);
- unmemoizeDomNodeAndDescendants(domNode, extraCallbackParamsArray);
- parseMemoText(memoText);
+ memoize(callback: () => string): string;
+ unmemoize(memoId: string, callbackParams: Array): boolean;
+ unmemoizeDomNodeAndDescendants(domNode: any, extraCallbackParamsArray: Array): boolean;
+ parseMemoText(memoText: string): string;
}
interface KnockoutVirtualElement {}
interface KnockoutVirtualElements {
allowedBindings: { [bindingName: string]: boolean; };
- emptyNode( e: KnockoutVirtualElement );
- firstChild( e: KnockoutVirtualElement );
- insertAfter( container: KnockoutVirtualElement, nodeToInsert: HTMLElement, insertAfter: HTMLElement );
- nextSibling( e: KnockoutVirtualElement );
- prepend( e: KnockoutVirtualElement, toInsert: HTMLElement );
- setDomNodeChildren( e: KnockoutVirtualElement, newChildren: { length: number;[index: number]: HTMLElement; } );
- childNodes( e: KnockoutVirtualElement ): HTMLElement[];
+ emptyNode(node: KnockoutVirtualElement ): void;
+ firstChild(node: KnockoutVirtualElement ): KnockoutVirtualElement;
+ insertAfter( container: KnockoutVirtualElement, nodeToInsert: HTMLElement, insertAfter: HTMLElement ): void;
+ nextSibling(node: KnockoutVirtualElement): HTMLElement;
+ prepend(node: KnockoutVirtualElement, toInsert: HTMLElement ): void;
+ setDomNodeChildren(node: KnockoutVirtualElement, newChildren: { length: number;[index: number]: HTMLElement; } ): void;
+ childNodes(node: KnockoutVirtualElement ): HTMLElement[];
}
interface KnockoutExtenders {
@@ -189,11 +197,11 @@ interface KnockoutUtils {
// utils.domManipulation.js
//////////////////////////////////
- simpleHtmlParse(html: string);
+ simpleHtmlParse(html: string): Array;
- jQueryHtmlParse(html: string);
+ jQueryHtmlParse(html: string): Array;
- parseHtmlFragment(html: string);
+ parseHtmlFragment(html: string): Array;
setHtml(node: Element, html: string): void;
@@ -204,13 +212,13 @@ interface KnockoutUtils {
//////////////////////////////////
domData: {
- get (node: Element, key: string);
+ get (node: Element, key: string): any;
- set (node: Element, key: string, value: any);
+ set (node: Element, key: string, value: any): void;
- getAll(node: Element, createIfNotFound: boolean);
+ getAll(node: Element, createIfNotFound: boolean): any;
- clear(node: Element);
+ clear(node: Element): boolean;
};
//////////////////////////////////
@@ -218,13 +226,13 @@ interface KnockoutUtils {
//////////////////////////////////
domNodeDisposal: {
- addDisposeCallback(node: Element, callback: Function);
+ addDisposeCallback(node: Element, callback: Function): void;
- removeDisposeCallback(node: Element, callback: Function);
+ removeDisposeCallback(node: Element, callback: Function): void;
- cleanNode(node: Element);
+ cleanNode(node: Element): Element;
- removeNode(node: Element);
+ removeNode(node: Element): void;
};
//////////////////////////////////
@@ -233,41 +241,29 @@ interface KnockoutUtils {
fieldsIncludedWithJsonPost: any[];
- arrayForEach(array: T[], action: (item: T) => void): void;
+ compareArrays(a: T[], b: T[]): Array>;
- arrayForEach(array: any[], action: (any) => void ): void;
+ arrayForEach(array: T[], action: (item: T) => void): void;
arrayIndexOf(array: any[], item: any): number;
arrayFirst(array: T[], predicate: (item: T) => boolean, predicateOwner?: any): T;
- arrayFirst(array: any[], predicate: (item) => boolean, predicateOwner?: any): any;
-
arrayRemoveItem(array: any[], itemToRemove: any): void;
arrayGetDistinctValues(array: T[]): T[];
- arrayGetDistinctValues(array: any[]): any[];
-
arrayMap(array: T[], mapping: (item: T) => U): U[];
- arrayMap(array: any[], mapping: (item) => any): any[];
-
arrayFilter(array: T[], predicate: (item: T) => boolean): T[];
- arrayFilter(array: any[], predicate: (item) => boolean): any[];
-
arrayPushAll(array: T[], valuesToPush: T[]): T[];
- arrayPushAll(array: any[], valuesToPush: any[]): any[];
-
arrayPushAll(array: KnockoutObservableArray, valuesToPush: T[]): T[];
- arrayPushAll(array: KnockoutObservableArray, valuesToPush: any[]): any[];
+ extend(target: Object, source: Object): Object;
- extend(target, source);
-
- emptyDomNode(domNode): void;
+ emptyDomNode(domNode: HTMLElement): void;
moveCleanedNodesToContainerElement(nodes: any[]): HTMLElement;
@@ -328,15 +324,21 @@ interface KnockoutUtils {
isIe7: boolean;
}
+interface KnockoutArrayChange {
+ status: string;
+ value: T;
+ index: number;
+}
+
//////////////////////////////////
// templateSources.js
//////////////////////////////////
interface KnockoutTemplateSourcesDomElement {
- text(valueToWrite?);
+ text(valueToWrite?: any): any;
- data(key, valueToWrite?);
+ data(key: string, valueToWrite?: any): any;
}
@@ -358,7 +360,7 @@ interface KnockoutTemplateSources {
interface KnockoutNativeTemplateEngine {
- renderTemplateSource(templateSource, bindingContext, options?);
+ renderTemplateSource(templateSource: Object, bindingContext?: KnockoutBindingContext, options?: Object): Array;
}
//////////////////////////////////
@@ -367,15 +369,15 @@ interface KnockoutNativeTemplateEngine {
interface KnockoutTemplateEngine extends KnockoutNativeTemplateEngine {
- createJavaScriptEvaluatorBlock(script: string);
+ createJavaScriptEvaluatorBlock(script: string): string;
- makeTemplateSource(template, templateDocument);
+ makeTemplateSource(template: any, templateDocument?: Document): any;
- renderTemplate(template, bindingContext, options, templateDocument);
+ renderTemplate(template: any, bindingContext: KnockoutBindingContext, options: Object, templateDocument: Document): any;
- isTemplateRewritten(template, templateDocument): boolean;
+ isTemplateRewritten(template: any, templateDocument: Document): boolean;
- rewriteTemplate(template, rewriterCallback, templateDocument);
+ rewriteTemplate(template: any, rewriterCallback: Function, templateDocument: Document): void;
}
/////////////////////////////////
@@ -404,10 +406,10 @@ interface KnockoutStatic {
isWriteableObservable(instance: any): boolean;
isComputed(instance: any): boolean;
dataFor(node: any): any;
- removeNode(node: Element);
- cleanNode(node: Element);
- renderTemplate(template: Function, viewModel: any, options?: any, target?: any, renderMode?: any);
- renderTemplate(template: string, viewModel: any, options?: any, target?: any, renderMode?: any);
+ removeNode(node: Element): void;
+ cleanNode(node: Element): Element;
+ renderTemplate(template: Function, viewModel: any, options?: any, target?: any, renderMode?: any): any;
+ renderTemplate(template: string, viewModel: any, options?: any, target?: any, renderMode?: any): any;
unwrap(value: any): any;
//////////////////////////////////
@@ -433,11 +435,12 @@ interface KnockoutStatic {
templateRewriting: {
- ensureTemplateIsRewritten(template, templateEngine, templateDocument);
+ ensureTemplateIsRewritten(template: Node, templateEngine: KnockoutTemplateEngine, templateDocument: Document): any;
+ ensureTemplateIsRewritten(template: string, templateEngine: KnockoutTemplateEngine, templateDocument: Document): any;
- memoizeBindingAttributeSyntax(htmlString: string, templateEngine: KnockoutTemplateEngine);
+ memoizeBindingAttributeSyntax(htmlString: string, templateEngine: KnockoutTemplateEngine): any;
- applyMemoizedBindingsToNextSibling(bindings);
+ applyMemoizedBindingsToNextSibling(bindings: any, nodeName: string): string;
};
//////////////////////////////////
@@ -461,22 +464,32 @@ interface KnockoutStatic {
prototype: KnockoutTemplateEngine;
- renderTemplateSource(templateSource, bindingContext, options);
+ renderTemplateSource(templateSource: Object, bindingContext: KnockoutBindingContext, options: Object): Node[];
createJavaScriptEvaluatorBlock(script: string): string;
- addTemplate(templateName, templateMarkup);
+ addTemplate(templateName: string, templateMarkup: string): void;
};
//////////////////////////////////
// templating.js
//////////////////////////////////
- setTemplateEngine(templateEngine: KnockoutNativeTemplateEngine);
+ setTemplateEngine(templateEngine: KnockoutNativeTemplateEngine): void;
- renderTemplate(template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode);
+ renderTemplate(template: Function, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ renderTemplate(template: any, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ renderTemplate(template: Function, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ renderTemplate(template: any, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node, renderMode: string): any;
+ renderTemplate(template: Function, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ renderTemplate(template: any, dataOrBindingContext: KnockoutBindingContext, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ renderTemplate(template: Function, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
+ renderTemplate(template: any, dataOrBindingContext: any, options: Object, targetNodeOrNodeArray: Node[], renderMode: string): any;
- renderTemplateForEach(template, arrayOrObservableArray, options, targetNode, parentBindingContext);
+ renderTemplateForEach(template: Function, arrayOrObservableArray: Array, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ renderTemplateForEach(template: any, arrayOrObservableArray: Array, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ renderTemplateForEach(template: Function, arrayOrObservableArray: KnockoutObservable, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
+ renderTemplateForEach(template: any, arrayOrObservableArray: KnockoutObservable, options: Object, targetNode: Node, parentBindingContext: KnockoutBindingContext): any;
expressionRewriting: {
bindingRewriteValidators: any;
@@ -492,9 +505,9 @@ interface KnockoutStatic {
selectExtensions: {
- readValue(element: any);
+ readValue(element: HTMLElement): any;
- writeValue(element: any, value: any);
+ writeValue(element: HTMLElement, value: any): void;
};
}
diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts
index 5cdc961bd..6234475b4 100644
--- a/leaflet/leaflet.d.ts
+++ b/leaflet/leaflet.d.ts
@@ -1,35 +1,2341 @@
-// Type definitions for Leaflet.js 0.5
+// Type definitions for Leaflet.js 0.6.4
// Project: https://github.com/Leaflet/Leaflet
-// Definitions by: Vladimir
+// Definitions by: Vladimir Zotov
// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
declare module L {
+
+ export interface AttributionOptions {
+
+ /**
+ * The position of the control (one of the map corners). See control positions.
+ * Default value: 'bottomright'.
+ */
+ position?: string;
+
+ /**
+ * The HTML text shown before the attributions. Pass false to disable.
+ * Default value: 'Powered by Leaflet'.
+ */
+ prefix?: string;
+
+ }
+}
+
+declare module L {
+
+ /**
+ * Creates a Bounds object from two coordinates (usually top-left and bottom-right
+ * corners).
+ */
+ export function bounds(topLeft: Point, bottomRight: Point): Bounds;
+
+ /**
+ * Creates a Bounds object defined by the points it contains.
+ */
+ export function bounds(points: Point[]): Bounds;
+
+ export class Bounds {
+
+ /**
+ * Creates a Bounds object from two coordinates (usually top-left and bottom-right
+ * corners).
+ */
+ constructor(topLeft: Point, bottomRight: Point);
+
+ /**
+ * Creates a Bounds object defined by the points it contains.
+ */
+ constructor(points: Point[]);
+
+ /**
+ * Extends the bounds to contain the given point.
+ */
+ extend(point: Point): void;
+
+ /**
+ * Returns the center point of the bounds.
+ */
+ getCenter(): Point;
+
+ /**
+ * Returns true if the rectangle contains the given one.
+ */
+ contains(otherBounds: Bounds): boolean;
+
+ /**
+ * Returns true if the rectangle contains the given point.
+ */
+ contains(point: Point): boolean;
+
+ /**
+ * Returns true if the rectangle intersects the given bounds.
+ */
+ intersects(otherBounds: Bounds): boolean;
+
+ /**
+ * Returns true if the bounds are properly initialized.
+ */
+ isValid(): boolean;
+
+ /**
+ * Returns the size of the given bounds.
+ */
+ getSize(): Point;
+
+ /**
+ * The top left corner of the rectangle.
+ */
+ min: Point;
+
+ /**
+ * The bottom right corner of the rectangle.
+ */
+ max: Point;
+ }
+}
+
+declare module L {
+
+ export class Browser {
+
+ /**
+ * true for all Internet Explorer versions.
+ */
+ static ie: boolean;
+
+ /**
+ * true for Internet Explorer 6.
+ */
+ static ie6: boolean;
+
+ /**
+ * true for Internet Explorer 6.
+ */
+ static ie7: boolean;
+
+ /**
+ * true for webkit-based browsers like Chrome and Safari (including mobile
+ * versions).
+ */
+ static webkit: boolean;
+
+ /**
+ * true for webkit-based browsers that support CSS 3D transformations.
+ */
+ static webkit3d: boolean;
+
+ /**
+ * true for Android mobile browser.
+ */
+ static android: boolean;
+
+ /**
+ * true for old Android stock browsers (2 and 3).
+ */
+ static android23: boolean;
+
+ /**
+ * true for modern mobile browsers (including iOS Safari and different Android
+ * browsers).
+ */
+ static mobile: boolean;
+
+ /**
+ * true for mobile webkit-based browsers.
+ */
+ static mobileWebkit: boolean;
+
+ /**
+ * true for mobile Opera.
+ */
+ static mobileOpera: boolean;
+
+ /**
+ * true for all browsers on touch devices.
+ */
+ static touch: boolean;
+
+ /**
+ * true for browsers with Microsoft touch model (e.g. IE10).
+ */
+ static msTouch: boolean;
+
+ /**
+ * true for devices with Retina screens.
+ */
+ static retina: boolean;
+
+ }
+}
+
+
+declare module L {
+
+ /**
+ * Instantiates a circle object given a geographical point, a radius in meters
+ * and optionally an options object.
+ */
+ function circle(latlng: LatLng, radius: number, options?: PathOptions): Circle;
+
+ export class Circle extends Path {
+
+ /**
+ * Instantiates a circle object given a geographical point, a radius in meters
+ * and optionally an options object.
+ */
+ constructor(latlng: LatLng, radius: number, options?: PathOptions);
+
+ /**
+ * Returns the current geographical position of the circle.
+ */
+ getLatLng(): LatLng;
+
+ /**
+ * Returns the current radius of a circle. Units are in meters.
+ */
+ getRadius(): number;
+
+ /**
+ * Sets the position of a circle to a new location.
+ */
+ setLatLng(latlng: LatLng): Circle;
+
+ /**
+ * Sets the radius of a circle. Units are in meters.
+ */
+ setRadius(radius: number): Circle;
+
+ /**
+ * Returns a GeoJSON representation of the circle (GeoJSON Point Feature).
+ */
+ toGeoJSON(): any;
+
+ }
+}
+
+declare module L {
+
+ /**
+ * Instantiates a circle marker given a geographical point and optionally
+ * an options object. The default radius is 10 and can be altered by passing a
+ * "radius" member in the path options object.
+ */
+ function circleMarker(latlng: LatLng, options?: PathOptions): CircleMarker;
+
+ export class CircleMarker extends Circle {
+
+ /**
+ * Instantiates a circle marker given a geographical point and optionally
+ * an options object. The default radius is 10 and can be altered by passing a
+ * "radius" member in the path options object.
+ */
+ constructor(latlng: LatLng, options?: PathOptions);
+
+ /**
+ * Sets the position of a circle marker to a new location.
+ */
+ setLatLng(latlng: LatLng): CircleMarker;
+
+ /**
+ * Sets the radius of a circle marker. Units are in pixels.
+ */
+ setRadius(radius: number): CircleMarker;
+
+ /**
+ * Returns a GeoJSON representation of the circle marker (GeoJSON Point Feature).
+ */
+ toGeoJSON(): any;
+ }
+}
+
+declare module L {
+
+ export interface ClassExtendOptions {
+ /**
+ * options is a special property that unlike other objects that you pass
+ * to extend will be merged with the parent one instead of overriding it
+ * completely, which makes managing configuration of objects and default
+ * values convenient.
+ */
+ options?: any;
+
+ /**
+ * includes is a special class property that merges all specified objects
+ * into the class (such objects are called mixins). A good example of this
+ * is L.Mixin.Events that event-related methods like on, off and fire
+ * to the class.
+ */
+ includes?: any;
+
+ /**
+ * statics is just a convenience property that injects specified object
+ * properties as the static properties of the class, useful for defining
+ * constants.
+ */
+ static?: any;
+ }
+
+ /**
+ * L.Class powers the OOP facilities of Leaflet and is used to create
+ * almost all of the Leaflet classes documented.
+ */
+ export class Class {
+
+ /**
+ * You use L.Class.extend to define new classes, but you can use the
+ * same method on any class to inherit from it.
+ */
+ static extend(options: ClassExtendOptions): any;
+
+ /**
+ * You can also use the following shortcut when you just need to make
+ * one additional method call.
+ */
+ static addInitHook(methodName: string, ...args: any[]): void;
+ }
+
+}
+
+
+
+declare module L {
+
+ export class Control extends Class implements IControl {
+
+ /**
+ * Creates a control with the given options.
+ */
+ constructor(options?: ControlOptions);
+
+ /**
+ * Sets the position of the control. See control positions.
+ */
+ setPosition(position: string): Control;
+
+ /**
+ * Returns the current position of the control.
+ */
+ getPosition(): string;
+
+ /**
+ * Adds the control to the map.
+ */
+ addTo(map: Map): Control;
+
+ /**
+ * Removes the control from the map.
+ */
+ removeFrom(map: Map): Control;
+
+ /**
+ * Returns the HTML container of the control.
+ */
+ getContainer(): HTMLElement;
+
+ // IControl members
+
+ /**
+ * Should contain code that creates all the neccessary DOM elements for the
+ * control, adds listeners on relevant map events, and returns the element
+ * containing the control. Called on map.addControl(control) or control.addTo(map).
+ */
+ onAdd(map: Map): HTMLElement;
+
+ /**
+ * Optional, should contain all clean up code (e.g. removes control's event
+ * listeners). Called on map.removeControl(control) or control.removeFrom(map).
+ * The control's DOM container is removed automatically.
+ */
+ onRemove(map: Map): void;
+ }
+
+ module Control {
+
+ export class Zoom extends L.Control {
+
+ /**
+ * Creates a zoom control.
+ */
+ constructor(options?: ZoomOptions);
+ }
+
+ export class Attribution extends L.Control {
+
+ /**
+ * Creates an attribution control.
+ */
+ constructor(options?: AttributionOptions);
+
+ /**
+ * Sets the text before the attributions.
+ */
+ setPrefix(prefix: string): Attribution;
+
+ /**
+ * Adds an attribution text (e.g. 'Vector data © CloudMade').
+ */
+ addAttribution(text: string): Attribution;
+
+ /**
+ * Removes an attribution text.
+ */
+ removeAttribution(text: string): Attribution;
+
+ }
+
+ export class Layers extends L.Control implements IEventPowered {
+
+ /**
+ * Creates an attribution control with the given layers. Base layers will be
+ * switched with radio buttons, while overlays will be switched with checkboxes.
+ */
+ constructor(baseLayers?: any, overlays?: any, options?: LayersOptions);
+
+ /**
+ * Adds a base layer (radio button entry) with the given name to the control.
+ */
+ addBaseLayer(layer: ILayer, name: string): Layers;
+
+ /**
+ * Adds an overlay (checkbox entry) with the given name to the control.
+ */
+ addOverlay(layer: ILayer, name: string): Layers;
+
+ /**
+ * Remove the given layer from the control.
+ */
+ removeLayer(layer: ILayer): Layers;
+
+ ////////////////
+ ////////////////
+ addEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): Layers;
+ addOneTimeEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): Layers;
+ removeEventListener(type: string, fn?: (e: LeafletEvent) => void, context?: any): Layers;
+ hasEventListeners(type: string): boolean;
+ fireEvent(type: string, data?: any): Layers;
+ on(type: string, fn: (e: LeafletEvent) => void, context?: any): Layers;
+ once(type: string, fn: (e: LeafletEvent) => void, context?: any): Layers;
+ off(type: string, fn?: (e: LeafletEvent) => void, context?: any): Layers;
+ fire(type: string, data?: any): Layers; addEventListener(eventMap: any, context?: any): Layers;
+ removeEventListener(eventMap?: any, context?: any): Layers;
+ clearAllEventListeners(): Layers
+ on(eventMap: any, context?: any): Layers;
+ off(eventMap?: any, context?: any): Layers;
+ }
+
+ export class Scale extends L.Control {
+
+ /**
+ * Creates an scale control with the given options.
+ */
+ constructor(options?: ScaleOptions);
+
+ }
+ }
+
+ export class control {
+
+ /**
+ * Creates a control with the given options.
+ */
+ function (options?: ControlOptions): Control;
+
+ /**
+ * Creates a zoom control.
+ */
+ static zoom(options?: ZoomOptions): L.Control.Zoom;
+
+ /**
+ * Creates an attribution control.
+ */
+ static attribution(options?: AttributionOptions): L.Control.Attribution;
+
+ /**
+ * Creates an attribution control with the given layers. Base layers will be
+ * switched with radio buttons, while overlays will be switched with checkboxes.
+ */
+ static layers(baseLayers?: any, overlays?: any, options?: LayersOptions): L.Control.Layers;
+
+ /**
+ * Creates an scale control with the given options.
+ */
+ static scale(options?: ScaleOptions): L.Control.Scale;
+ }
+}
+
+declare module L {
+
+ export interface ControlOptions {
+
+ /**
+ * The initial position of the control (one of the map corners). See control
+ * positions.
+ * Default value: 'topright'.
+ */
+ position: string;
+
+ }
+}
+
+declare module L {
+
+ export class CRS {
+
+ /**
+ * The most common CRS for online maps, used by almost all free and commercial
+ * tile providers. Uses Spherical Mercator projection. Set in by default in
+ * Map's crs option.
+ */
+ static EPSG3857: ICRS;
+
+ /**
+ * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.
+ */
+ static EPSG4326: ICRS;
+
+ /**
+ * Rarely used by some commercial tile providers. Uses Elliptical Mercator
+ * projection.
+ */
+ static EPSG3395: ICRS;
+
+ /**
+ * A simple CRS that maps longitude and latitude into x and y directly. May be
+ * used for maps of flat surfaces (e.g. game maps). Note that the y axis should
+ * still be inverted (going from bottom to top).
+ */
+ static Simple: ICRS;
+
+ }
+}
+
+declare module L {
+
+ /**
+ * Creates a div icon instance with the given options.
+ */
+ function divIcon(options: DivIconOptions): DivIcon;
+
+ export class DivIcon extends Icon {
+
+ /**
+ * Creates a div icon instance with the given options.
+ */
+ constructor(options: DivIconOptions);
+ }
+}
+
+declare module L {
+
+ export interface DivIconOptions {
+
+ /**
+ * Size of the icon in pixels. Can be also set through CSS.
+ */
+ iconSize?: Point;
+
+ /**
+ * The coordinates of the "tip" of the icon (relative to its top left corner).
+ * The icon will be aligned so that this point is at the marker's geographical
+ * location. Centered by default if size is specified, also can be set in CSS
+ * with negative margins.
+ */
+ iconAnchor?: Point;
+
+ /**
+ * A custom class name to assign to the icon.
+ *
+ * Default value: 'leaflet-div-icon'.
+ */
+ className?: string;
+
+ /**
+ * A custom HTML code to put inside the div element.
+ *
+ * Default value: ''.
+ */
+ html?: string;
+
+ }
+}
+
+declare module L {
+
+ export class DomEvent {
+
+ /**
+ * Adds a listener fn to the element's DOM event of the specified type. this keyword
+ * inside the listener will point to context, or to the element if not specified.
+ */
+ static addListener(el: HTMLElement, type: string, fn: (e: Event) => void, context?: any): DomEvent;
+
+ /**
+ * Removes an event listener from the element.
+ */
+ static removeListener(el: HTMLElement, type: string, fn: (e: Event) => void): DomEvent;
+
+ /**
+ * Stop the given event from propagation to parent elements. Used inside the
+ * listener functions:
+ * L.DomEvent.addListener(div, 'click', function
+ * (e) {
+ * L.DomEvent.stopPropagation(e);
+ * });
+ */
+ static stopPropagation(e: Event): DomEvent;
+
+ /**
+ * Prevents the default action of the event from happening (such as following
+ * a link in the href of the a element, or doing a POST request with page reload
+ * when form is submitted). Use it inside listener functions.
+ */
+ static preventDefault(e: Event): DomEvent;
+
+ /**
+ * Does stopPropagation and preventDefault at the same time.
+ */
+ static stop(e: Event): DomEvent;
+
+ /**
+ * Adds stopPropagation to the element's 'click', 'doubleclick', 'mousedown'
+ * and 'touchstart' events.
+ */
+ static disableClickPropagation(el: HTMLElement): DomEvent;
+
+ /**
+ * Gets normalized mouse position from a DOM event relative to the container
+ * or to the whole page if not specified.
+ */
+ static getMousePosition(e: Event, container?: HTMLElement): Point;
+
+ /**
+ * Gets normalized wheel delta from a mousewheel DOM event.
+ */
+ static getWheelDelta(e: Event): number;
+
+ }
+}
+
+declare module L {
+
+ export class DomUtil {
+
+ /**
+ * Returns an element with the given id if a string was passed, or just returns
+ * the element if it was passed directly.
+ */
+ static get(id: string): HTMLElement;
+
+ /**
+ * Returns the value for a certain style attribute on an element, including
+ * computed values or values set through CSS.
+ */
+ static getStyle(el: HTMLElement, style: string): string;
+
+ /**
+ * Returns the offset to the viewport for the requested element.
+ */
+ static getViewportOffset(el: HTMLElement): Point;
+
+ /**
+ * Creates an element with tagName, sets the className, and optionally appends
+ * it to container element.
+ */
+ static create(tagName: string, className: string, container?: HTMLElement): HTMLElement;
+
+ /**
+ * Makes sure text cannot be selected, for example during dragging.
+ */
+ static disableTextSelection(): void;
+
+ /**
+ * Makes text selection possible again.
+ */
+ static enableTextSelection(): void;
+
+ /**
+ * Returns true if the element class attribute contains name.
+ */
+ static hasClass(el: HTMLElement, name: string): boolean;
+
+ /**
+ * Adds name to the element's class attribute.
+ */
+ static addClass(el: HTMLElement, name: string): void;
+
+ /**
+ * Removes name from the element's class attribute.
+ */
+ static removeClass(el: HTMLElement, name: string): void;
+
+ /**
+ * Set the opacity of an element (including old IE support). Value must be from
+ * 0 to 1.
+ */
+ static setOpacity(el: HTMLElement, value: number): void;
+
+ /**
+ * Goes through the array of style names and returns the first name that is a valid
+ * style name for an element. If no such name is found, it returns false. Useful
+ * for vendor-prefixed styles like transform.
+ */
+ static testProp(props: string[]): any;
+
+ /**
+ * Returns a CSS transform string to move an element by the offset provided in
+ * the given point. Uses 3D translate on WebKit for hardware-accelerated transforms
+ * and 2D on other browsers.
+ */
+ static getTranslateString(point: Point): string;
+
+ /**
+ * Returns a CSS transform string to scale an element (with the given scale origin).
+ */
+ static getScaleString(scale: number, origin: Point): string;
+
+ /**
+ * Sets the position of an element to coordinates specified by point, using
+ * CSS translate or top/left positioning depending on the browser (used by
+ * Leaflet internally to position its layers). Forces top/left positioning
+ * if disable3D is true.
+ */
+ static setPosition(el: HTMLElement, point: Point, disable3D?: boolean): void;
+
+ /**
+ * Returns the coordinates of an element previously positioned with setPosition.
+ */
+ static getPosition(el: HTMLElement): Point;
+
+ /**
+ * Vendor-prefixed transition style name (e.g. 'webkitTransition' for WebKit).
+ */
+ static TRANSITION: string;
+
+ /**
+ * Vendor-prefixed transform style name.
+ */
+ static TRANSFORM: string;
+
+ }
+}
+
+declare module L {
+
+ /**
+ * Creates a Draggable object for moving the given element when you start dragging
+ * the dragHandle element (equals the element itself by default).
+ */
+ function draggable(element: HTMLElement, dragHandle?: HTMLElement): Draggable;
+
+ export class Draggable extends Class implements IEventPowered {
+
+ /**
+ * Creates a Draggable object for moving the given element when you start dragging
+ * the dragHandle element (equals the element itself by default).
+ */
+ constructor(element: HTMLElement, dragHandle?: HTMLElement);
+
+ /**
+ * Enables the dragging ability.
+ */
+ enable(): void;
+
+ /**
+ * Disables the dragging ability.
+ */
+ disable(): void;
+
+ ////////////////
+ ////////////////
+ addEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): Draggable;
+ addOneTimeEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): Draggable;
+ removeEventListener(type: string, fn?: (e: LeafletEvent) => void, context?: any): Draggable;
+ hasEventListeners(type: string): boolean;
+ fireEvent(type: string, data?: any): Draggable;
+ on(type: string, fn: (e: LeafletEvent) => void, context?: any): Draggable;
+ once(type: string, fn: (e: LeafletEvent) => void, context?: any): Draggable;
+ off(type: string, fn?: (e: LeafletEvent) => void, context?: any): Draggable;
+ fire(type: string, data?: any): Draggable;
+ addEventListener(eventMap: any, context?: any): Draggable;
+ removeEventListener(eventMap?: any, context?: any): Draggable;
+ clearAllEventListeners(): Draggable
+ on(eventMap: any, context?: any): Draggable;
+ off(eventMap?: any, context?: any): Draggable;
+ }
+}
+
+
+
+declare module L {
+
+ /**
+ * Create a layer group, optionally given an initial set of layers.
+ */
+ function featureGroup(layers?: ILayer[]): FeatureGroup;
+
+ export class FeatureGroup extends LayerGroup implements ILayer, IEventPowered {
+
+ /**
+ * Create a layer group, optionally given an initial set of layers.
+ */
+ constructor(layers?: ILayer[]);
+
+ /**
+ * Binds a popup with a particular HTML content to a click on any layer from the
+ * group that has a bindPopup method.
+ */
+ bindPopup(htmlContent: string, options?: PopupOptions): FeatureGroup;
+
+ /**
+ * Returns the LatLngBounds of the Feature Group (created from bounds and coordinates
+ * of its children).
+ */
+ getBounds(): LatLngBounds;
+
+ /**
+ * Sets the given path options to each layer of the group that has a setStyle method.
+ */
+ setStyle(style: PathOptions): FeatureGroup;
+
+ /**
+ * Brings the layer group to the top of all other layers.
+ */
+ bringToFront(): FeatureGroup;
+
+ /**
+ * Brings the layer group to the bottom of all other layers.
+ */
+ bringToBack(): FeatureGroup;
+
+ ////////////
+ ////////////
+ /**
+ * Should contain code that creates DOM elements for the overlay, adds them
+ * to map panes where they should belong and puts listeners on relevant map events.
+ * Called on map.addLayer(layer).
+ */
+ onAdd(map: Map): void;
+
+ /**
+ * Should contain all clean up code that removes the overlay's elements from
+ * the DOM and removes listeners previously added in onAdd. Called on map.removeLayer(layer).
+ */
+ onRemove(map: Map): void;
+
+ ////////////////
+ ////////////////
+ addEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ addOneTimeEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ removeEventListener(type: string, fn?: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ hasEventListeners(type: string): boolean;
+ fireEvent(type: string, data?: any): FeatureGroup;
+ on(type: string, fn: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ once(type: string, fn: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ off(type: string, fn?: (e: LeafletEvent) => void, context?: any): FeatureGroup;
+ fire(type: string, data?: any): FeatureGroup;
+ addEventListener(eventMap: any, context?: any): FeatureGroup;
+ removeEventListener(eventMap?: any, context?: any): FeatureGroup;
+ clearAllEventListeners(): FeatureGroup
+ on(eventMap: any, context?: any): FeatureGroup;
+ off(eventMap?: any, context?: any): FeatureGroup;
+ }
+}
+
+declare module L {
+
+ export interface FitBoundsOptions extends ZoomPanOptions {
+
+ /**
+ * Sets the amount of padding in the top left corner of a map container that
+ * shouldn't be accounted for when setting the view to fit bounds. Useful if
+ * you have some control overlays on the map like a sidebar and you don't
+ * want them to obscure objects you're zooming to.
+ *
+ * Default value: [0, 0].
+ */
+ paddingTopLeft?: Point;
+
+ /**
+ * The same for bottom right corner of the map.
+ *
+ * Default value: [0, 0].
+ */
+ paddingBottomRight?: Point;
+
+ /**
+ * Equivalent of setting both top left and bottom right padding to the same value.
+ *
+ * Default value: [0, 0].
+ */
+ padding?: Point;
+ }
+}
+
+declare module L {
+
+ /**
+ * Creates a GeoJSON layer. Optionally accepts an object in GeoJSON format
+ * to display on the map (you can alternatively add it later with addData method)
+ * and an options object.
+ */
+ function geoJson(geojson?: any, options?: GeoJSONOptions): GeoJSON;
+
+ export class GeoJSON extends FeatureGroup {
+
+ /**
+ * Creates a GeoJSON layer. Optionally accepts an object in GeoJSON format
+ * to display on the map (you can alternatively add it later with addData method)
+ * and an options object.
+ */
+ constructor(geojson?: any, options?: GeoJSONOptions);
+
+ /**
+ * Adds a GeoJSON object to the layer.
+ */
+ addData(data: any): boolean;
+
+ /**
+ * Changes styles of GeoJSON vector layers with the given style function.
+ */
+ setStyle(style: (featureData: any) => any): GeoJSON;
+
+ /**
+ * Resets the the given vector layer's style to the original GeoJSON style,
+ * useful for resetting style after hover events.
+ */
+ resetStyle(layer: Path): GeoJSON;
+
+ /**
+ * Creates a layer from a given GeoJSON feature.
+ */
+ static geometryToLayer(featureData: GeoJSON, pointToLayer?: (featureData: any, latlng: LatLng) => ILayer): ILayer;
+
+ /**
+ * Creates a LatLng object from an array of 2 numbers (latitude, longitude)
+ * used in GeoJSON for points. If reverse is set to true, the numbers will be interpreted
+ * as (longitude, latitude).
+ */
+ static coordsToLatlng(coords: number[], reverse?: boolean): LatLng;
+
+ /**
+ * Creates a multidimensional array of LatLng objects from a GeoJSON coordinates
+ * array. levelsDeep specifies the nesting level (0 is for an array of points,
+ * 1 for an array of arrays of points, etc., 0 by default). If reverse is set to
+ * true, the numbers will be interpreted as (longitude, latitude).
+ */
+ static coordsToLatlngs(coords: number[], levelsDeep?: number, reverse?: boolean): LatLng[];
+
+ }
+}
+
+declare module L {
+ export interface GeoJSONOptions {
+ /**
+ * Function that will be used for creating layers for GeoJSON points (if not
+ * specified, simple markers will be created).
+ */
+ pointToLayer?: (featureData: any, latlng: LatLng) => ILayer;
+
+ /**
+ * Function that will be used to get style options for vector layers created
+ * for GeoJSON features.
+ */
+ style?: (featureData: any) => any;
+
+ /**
+ * Function that will be called on each created feature layer. Useful for attaching
+ * events and popups to features.
+ */
+ onEachFeature?: (featureData: any, layer: ILayer) => void;
+
+ /**
+ * Function that will be used to decide whether to show a feature or not.
+ */
+ filter?: (featureData: any, layer: ILayer) => boolean;
+
+ /**
+ * Function that will be used for converting GeoJSON coordinates to LatLng points
+ * (if not specified, coords will be assumed to be WGS84 standard[longitude, latitude]
+ * values in degrees).
+ */
+ coordsToLatLng?: (coords: any[]) => LatLng[];
+ }
+}
+
+
+
+
+declare module L {
+
+ /**
+ * Creates an icon instance with the given options.
+ */
+ function icon(options: IconOptions): Icon;
+
+ export class Icon extends Class {
+
+ /**
+ * Creates an icon instance with the given options.
+ */
+ constructor(options: IconOptions);
+ }
+
+ module Icon {
+
+ /**
+ * L.Icon.Default extends L.Icon and is the blue icon Leaflet uses
+ * for markers by default.
+ */
+ export class Default extends Icon {
+
+ /**
+ * Creates an icon instance with default options.
+ */
+ constructor(options: IconOptions);
+
+ static imagePath: string;
+ }
+ }
+}
+
+declare module L {
+
+ export interface IconOptions {
+
+ /**
+ * (required) The URL to the icon image (absolute or relative to your script
+ * path).
+ */
+ iconUrl?: string;
+
+ /**
+ * The URL to a retina sized version of the icon image (absolute or relative to
+ * your script path). Used for Retina screen devices.
+ */
+ iconRetinaUrl?: string;
+
+ /**
+ * Size of the icon image in pixels.
+ */
+ iconSize?: Point;
+
+ /**
+ * The coordinates of the "tip" of the icon (relative to its top left corner).
+ * The icon will be aligned so that this point is at the marker's geographical
+ * location. Centered by default if size is specified, also can be set in CSS
+ * with negative margins.
+ */
+ iconAnchor?: Point;
+
+ /**
+ * The URL to the icon shadow image. If not specified, no shadow image will be
+ * created.
+ */
+ shadowUrl?: string;
+
+ /**
+ * The URL to the retina sized version of the icon shadow image. If not specified,
+ * no shadow image will be created. Used for Retina screen devices.
+ */
+ shadowRetinaUrl?: string;
+
+ /**
+ * Size of the shadow image in pixels.
+ */
+ shadowSize?: Point;
+
+ /**
+ * The coordinates of the "tip" of the shadow (relative to its top left corner)
+ * (the same as iconAnchor if not specified).
+ */
+ shadowAnchor?: Point;
+
+ /**
+ * The coordinates of the point from which popups will "open", relative to the
+ * icon anchor.
+ */
+ popupAnchor?: Point;
+
+ /**
+ * A custom class name to assign to both icon and shadow images. Empty by default.
+ */
+ className?: string;
+ }
+}
+
+declare module L {
+
+ export interface IControl {
+
+ /**
+ * Should contain code that creates all the neccessary DOM elements for the
+ * control, adds listeners on relevant map events, and returns the element
+ * containing the control. Called on map.addControl(control) or control.addTo(map).
+ */
+ onAdd(map: Map): HTMLElement;
+
+ /**
+ * Optional, should contain all clean up code (e.g. removes control's event
+ * listeners). Called on map.removeControl(control) or control.removeFrom(map).
+ * The control's DOM container is removed automatically.
+ */
+ onRemove(map: Map): void;
+ }
+}
+
+declare module L {
+
+ export interface ICRS {
+
+ /**
+ * Projection that this CRS uses.
+ */
+ projection: IProjection;
+
+ /**
+ * Transformation that this CRS uses to turn projected coordinates into screen
+ * coordinates for a particular tile service.
+ */
+ transformation: Transformation;
+
+ /**
+ * Standard code name of the CRS passed into WMS services (e.g. 'EPSG:3857').
+ */
+ code: string;
+
+ /**
+ * Projects geographical coordinates on a given zoom into pixel coordinates.
+ */
+ latLngToPoint(latlng: LatLng, zoom: number): Point;
+
+ /**
+ * The inverse of latLngToPoint. Projects pixel coordinates on a given zoom
+ * into geographical coordinates.
+ */
+ pointToLatLng(point: Point, zoom: number): LatLng;
+
+ /**
+ * Projects geographical coordinates into coordinates in units accepted
+ * for this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).
+ */
+ project(latlng: LatLng): Point;
+
+ /**
+ * Returns the scale used when transforming projected coordinates into pixel
+ * coordinates for a particular zoom. For example, it returns 256 * 2^zoom for
+ * Mercator-based CRS.
+ */
+ scale(zoom: number): number;
+
+ }
+}
+
+declare module L {
+
+ export interface IEventPowered {
+
+ /**
+ * Adds a listener function (fn) to a particular event type of the object. You
+ * can optionally specify the context of the listener (object the this keyword
+ * will point to). You can also pass several space-separated types (e.g. 'click
+ * dblclick').
+ */
+ addEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): T;
+
+ /**
+ * The same as above except the listener will only get fired once and then removed.
+ */
+ addOneTimeEventListener(type: string, fn: (e: LeafletEvent) => void, context?: any): T;
+ /**
+ * Adds a set of type/listener pairs, e.g. {click: onClick, mousemove: onMouseMove}
+ */
+ addEventListener(eventMap: any, context?: any): T;
+
+ /**
+ * Removes a previously added listener function. If no function is specified,
+ * it will remove all the listeners of that particular event from the object.
+ */
+ removeEventListener(type: string, fn?: (e: LeafletEvent) => void, context?: any): T;
+
+ /**
+ * Removes a set of type/listener pairs.
+ */
+ removeEventListener(eventMap?: any, context?: any): T;
+
+ /**
+ * Returns true if a particular event type has some listeners attached to it.
+ */
+ hasEventListeners(type: string): boolean;
+
+ /**
+ * Fires an event of the specified type. You can optionally provide an data object
+ * — the first argument of the listener function will contain its properties.
+ */
+ fireEvent(type: string, data?: any): T;
+
+ /**
+ * Removes all listeners to all events on the object.
+ */
+ clearAllEventListeners(): T;
+
+ /**
+ * Alias to addEventListener.
+ */
+ on(type: string, fn: (e: LeafletEvent) => void, context?: any): T;
+
+ /**
+ * Alias to addEventListener.
+ */
+ on(eventMap: any, context?: any): T;
+
+ /**
+ * Alias to addOneTimeEventListener.
+ */
+ once(type: string, fn: (e: LeafletEvent) => void, context?: any): T;
+
+ /**
+ * Alias to removeEventListener.
+ */
+ off(type: string, fn?: (e: LeafletEvent) => void, context?: any): T;
+
+ /**
+ * Alias to removeEventListener.
+ */
+ off(eventMap?: any, context?: any): T;
+
+ /**
+ * Alias to fireEvent.
+ */
+ fire(type: string, data?: any): T;
+ }
+}
+
+declare module L {
+
+ export interface IHandler {
+
+ /**
+ * Enables the handler.
+ */
+ enable(): void;
+
+ /**
+ * Disables the handler.
+ */
+ disable(): void;
+
+ /**
+ * Returns true if the handler is enabled.
+ */
+ enabled(): boolean;
+ }
+}
+
+declare module L {
+
+ export interface ILayer {
+
+ /**
+ * Should contain code that creates DOM elements for the overlay, adds them
+ * to map panes where they should belong and puts listeners on relevant map events.
+ * Called on map.addLayer(layer).
+ */
+ onAdd(map: Map): void;
+
+ /**
+ * Should contain all clean up code that removes the overlay's elements from
+ * the DOM and removes listeners previously added in onAdd. Called on map.removeLayer(layer).
+ */
+ onRemove(map: Map): void;
+ }
+}
+
+declare module L {
+
+ /**
+ * Instantiates an image overlay object given the URL of the image and the geographical
+ * bounds it is tied to.
+ */
+ function imageOverlay(imageUrl: string, bounds: LatLngBounds, options?: ImageOverlayOptions): ImageOverlay;
+
+ export class ImageOverlay extends Class implements ILayer {
+
+ /**
+ * Instantiates an image overlay object given the URL of the image and the geographical
+ * bounds it is tied to.
+ */
+ constructor(imageUrl: string, bounds: LatLngBounds, options?: ImageOverlayOptions);
+
+ /**
+ * Adds the overlay to the map.
+ */
+ addTo(map: Map): ImageOverlay;
+
+ /**
+ * Sets the opacity of the overlay.
+ */
+ setOpacity(opacity: number): ImageOverlay;
+
+ /**
+ * Brings the layer to the top of all overlays.
+ */
+ bringToFront(): ImageOverlay;
+
+ /**
+ * Brings the layer to the bottom of all overlays.
+ */
+ bringToBack(): ImageOverlay;
+
+ ////////////
+ ////////////
+ /**
+ * Should contain code that creates DOM elements for the overlay, adds them
+ * to map panes where they should belong and puts listeners on relevant map events.
+ * Called on map.addLayer(layer).
+ */
+ onAdd(map: Map): void;
+
+ /**
+ * Should contain all clean up code that removes the overlay's elements from
+ * the DOM and removes listeners previously added in onAdd. Called on map.removeLayer(layer).
+ */
+ onRemove(map: Map): void;
+ }
+}
+
+declare module L {
+
+ export interface ImageOverlayOptions {
+
+ /**
+ * The opacity of the image overlay.
+ */
+ opacity?: number;
+ }
+}
+
+declare module L {
+
+ export interface IProjection {
+
+ /**
+ * Projects geographical coordinates into a 2D point.
+ */
+ project(latlng: LatLng): Point;
+
+ /**
+ * The inverse of project. Projects a 2D point into geographical location.
+ */
+ unproject(point: Point): LatLng;
+ }
+}
+
+declare module L {
+
+ /**
+ * A constant that represents the Leaflet version in use.
+ */
+ export var version: string;
+
+ /**
+ * This method restores the L global variale to the original value it had
+ * before Leaflet inclusion, and returns the real Leaflet namespace.
+ */
+ export function noConflict(): typeof L;
+}
+
+declare module L {
+
+ /**
+ * Creates an object representing a geographical point with the given latitude
+ * and longitude.
+ */
+ function latLng(latitude: number, longitude: number): LatLng;
+
+ /**
+ * Creates an object representing a geographical point with the given latitude
+ * and longitude.
+ */
+ function latLng(coords: number[]): LatLng;
+
+ export class LatLng {
+
+ /**
+ * Creates an object representing a geographical point with the given latitude
+ * and longitude.
+ */
+ constructor(latitude: number, longitude: number);
+
+ /**
+ * Creates an object representing a geographical point with the given latitude
+ * and longitude.
+ */
+ constructor(coords: number[]);
+
+ /**
+ * Returns the distance (in meters) to the given LatLng calculated using the
+ * Haversine formula. See description on wikipedia
+ */
+ distanceTo(otherLatlng: LatLng): number;
+
+ /**
+ * Returns true if the given LatLng point is at the same position (within a small
+ * margin of error).
+ */
+ equals(otherLatlng: LatLng): boolean;
+
+ /**
+ * Returns a string representation of the point (for debugging purposes).
+ */
+ toString(): string;
+
+ /**
+ * Returns a new LatLng object with the longitude wrapped around left and right
+ * boundaries (-180 to 180 by default).
+ */
+ wrap(left: number, right: number): LatLng;
+
+ /**
+ * Latitude in degrees.
+ */
+ lat: number;
+
+ /**
+ * Longitude in degrees.
+ */
+ lng: number;
+
+ /**
+ * A multiplier for converting degrees into radians.
+ *
+ * Value: Math.PI / 180.
+ */
+ static DEG_TO_RAD: number;
+
+ /**
+ * A multiplier for converting radians into degrees.
+ *
+ * Value: 180 / Math.PI.
+ */
+ static RAD_TO_DEG: number;
+
+ /**
+ * Max margin of error for the equality check.
+ *
+ * Value: 1.0E-9.
+ */
+ static MAX_MARGIN: number;
+ }
+}
+
+declare module L {
+
+ /**
+ * Creates a LatLngBounds object by defining south-west and north-east corners
+ * of the rectangle.
+ */
+ function latLngBounds(southWest: LatLng, northEast: LatLng): LatLngBounds;
+
+ /**
+ * Creates a LatLngBounds object defined by the geographical points it contains.
+ * Very useful for zooming the map to fit a particular set of locations with fitBounds.
+ */
+ function latLngBounds(latlngs: LatLng[]): LatLngBounds;
+
+ export class LatLngBounds {
+
+ /**
+ * Creates a LatLngBounds object by defining south-west and north-east corners
+ * of the rectangle.
+ */
+ constructor(southWest: LatLng, northEast: LatLng);
+
+ /**
+ * Creates a LatLngBounds object defined by the geographical points it contains.
+ * Very useful for zooming the map to fit a particular set of locations with fitBounds.
+ */
+ constructor(latlngs: LatLng[]);
+
+ /**
+ * Extends the bounds to contain the given point.
+ */
+ extend(latlng: LatLng): LatLngBounds;
+
+ /**
+ * Extends the bounds to contain the given bounds.
+ */
+ extend(latlng: LatLngBounds): LatLngBounds;
+
+ /**
+ * Returns the south-west point of the bounds.
+ */
+ getSouthWest(): LatLng;
+
+ /**
+ * Returns the north-east point of the bounds.
+ */
+ getNorthEast(): LatLng;
+
+ /**
+ * Returns the north-west point of the bounds.
+ */
+ getNorthWest(): LatLng;
+
+ /**
+ * Returns the south-east point of the bounds.
+ */
+ getSouthEast(): LatLng;
+
+ /**
+ * Returns the center point of the bounds.
+ */
+ getCenter(): LatLng;
+
+ /**
+ * Returns true if the rectangle contains the given one.
+ */
+ contains(otherBounds: LatLngBounds): boolean;
+
+ /**
+ * Returns true if the rectangle contains the given point.
+ */
+ contains(latlng: LatLng): boolean;
+
+ /**
+ * Returns true if the rectangle intersects the given bounds.
+ */
+ intersects(otherBounds: LatLngBounds): boolean;
+
+ /**
+ * Returns true if the rectangle is equivalent (within a small margin of error)
+ * to the given bounds.
+ */
+ equals(otherBounds: LatLngBounds): boolean;
+
+ /**
+ * Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat'
+ * format. Useful for sending requests to web services that return geo data.
+ */
+ toBBoxString(): string;
+
+ /**
+ * Returns bigger bounds created by extending the current bounds by a given
+ * percentage in each direction.
+ */
+ pad(bufferRatio: number): LatLngBounds;
+
+ /**
+ * Returns true if the bounds are properly initialized.
+ */
+ isValid(): boolean;
+
+ }
+}
+
+declare module L {
+
+ /**
+ * Create a layer group, optionally given an initial set of layers.
+ */
+ function layerGroup(layers?: ILayer[]): LayerGroup;
+
+ export class LayerGroup extends Class implements ILayer {
+
+ /**
+ * Create a layer group, optionally given an initial set of layers.
+ */
+ constructor(layers?: ILayer[]);
+
+ /**
+ * Adds the group of layers to the map.
+ */
+ addTo(map: Map): LayerGroup;
+
+ /**
+ * Adds a given layer to the group.
+ */
+ addLayer(layer: ILayer): LayerGroup;
+
+ /**
+ * Removes a given layer from the group.
+ */
+ removeLayer(layer: ILayer): LayerGroup;
+
+ /**
+ * Removes a given layer of the given id from the group.
+ */
+ removeLayer(id: string): LayerGroup;
+
+ /**
+ * Returns true if the given layer is currently added to the group.
+ */
+ hasLayer(layer: ILayer): boolean;
+
+ /**
+ * Returns the layer with the given id.
+ */
+ getLayer(id: string): ILayer;
+
+ /**
+ * Returns an array of all the layers added to the group.
+ */
+ getLayers(): ILayer[];
+
+ /**
+ * Removes all the layers from the group.
+ */
+ clearLayers(): LayerGroup;
+
+ /**
+ * Iterates over the layers of the group, optionally specifying context of
+ * the iterator function.
+ */
+ eachLayer(fn: (layer: ILayer) => void, context?: any): LayerGroup;
+
+ /**
+ * Returns a GeoJSON representation of the layer group (GeoJSON FeatureCollection).
+ */
+ toGeoJSON(): any;
+
+ ////////////
+ ////////////
+ /**
+ * Should contain code that creates DOM elements for the overlay, adds them
+ * to map panes where they should belong and puts listeners on relevant map events.
+ * Called on map.addLayer(layer).
+ */
+ onAdd(map: Map): void;
+
+ /**
+ * Should contain all clean up code that removes the overlay's elements from
+ * the DOM and removes listeners previously added in onAdd. Called on map.removeLayer(layer).
+ */
+ onRemove(map: Map): void;
+ }
+}
+
+
+declare module L {
+
+ export interface LayersOptions {
+
+ /**
+ * The position of the control (one of the map corners). See control positions.
+ *
+ * Default value: 'topright'.
+ */
+ position?: string;
+
+ /**
+ * If true, the control will be collapsed into an icon and expanded on mouse hover
+ * or touch.
+ *
+ * Default value: true.
+ */
+ collapsed?: boolean;
+
+ /**
+ * If true, the control will assign zIndexes in increasing order to all of its
+ * layers so that the order is preserved when switching them on/off.
+ *
+ * Default value: true.
+ */
+ autoZIndex?: boolean;
+
+ }
+}
+
+declare module L {
+
+ export interface LeafletErrorEvent extends LeafletEvent {
+
+ /**
+ * Error message.
+ */
+ message: string;
+
+ /**
+ * Error code (if applicable).
+ */
+ code: number;
+ }
+}
+
+declare module L {
+
+ export interface LeafletEvent {
+
+ /**
+ * The event type (e.g. 'click').
+ */
+ type: string;
+
+ /**
+ * The object that fired the event.
+ */
+ target: any;
+ }
+}
+
+declare module L {
+
+ export interface LeafletGeoJSONEvent extends LeafletEvent {
+
+ /**
+ * The layer for the GeoJSON feature that is being added to the map.
+ */
+ layer: ILayer;
+
+ /**
+ * GeoJSON properties of the feature.
+ */
+ properties: any;
+
+ /**
+ * GeoJSON geometry type of the feature.
+ */
+ geometryType: string;
+
+ /**
+ * GeoJSON ID of the feature (if present).
+ */
+ id: string;
+ }
+}
+
+declare module L {
+
+ export interface LeafletLayerEvent extends LeafletEvent {
+
+ /**
+ * The layer that was added or removed.
+ */
+ layer: ILayer;
+ }
+}
+
+declare module L {
+
+ export interface LeafletLocationEvent extends LeafletEvent {
+
+ /**
+ * Detected geographical location of the user.
+ */
+ latlng: LatLng;
+
+ /**
+ * Geographical bounds of the area user is located in (with respect to the accuracy
+ * of location).
+ */
+ bounds: LatLngBounds;
+
+ /**
+ * Accuracy of location in meters.
+ */
+ accuracy: number;
+
+ /**
+ * Height of the position above the WGS84 ellipsoid in meters.
+ */
+ altitude: number;
+
+ /**
+ * Accuracy of altitude in meters.
+ */
+ altitudeAccuracy: number;
+
+ /**
+ * The direction of travel in degrees counting clockwise from true North.
+ */
+ heading: number;
+
+ /**
+ * Current velocity in meters per second.
+ */
+ speed: number;
+
+ /**
+ * The time when the position was acquired.
+ */
+ timestamp: number;
+
+ }
+}
+
+declare module L {
+
+ export interface LeafletMouseEvent extends LeafletEvent {
+
+ /**
+ * The geographical point where the mouse event occured.
+ */
+ latlng: LatLng;
+
+ /**
+ * Pixel coordinates of the point where the mouse event occured relative to
+ * the map layer.
+ */
+ layerPoint: Point;
+
+ /**
+ * Pixel coordinates of the point where the mouse event occured relative to
+ * the map сontainer.
+ */
+ containerPoint: Point;
+
+ /**
+ * The original DOM mouse event fired by the browser.
+ */
+ originalEvent: MouseEvent;
+ }
+}
+
+declare module L {
+
+ export interface LeafletPopupEvent extends LeafletEvent {
+
+ /**
+ * The popup that was opened or closed.
+ */
+ popup: Popup;
+ }
+}
+
+declare module L {
+
+ export interface LeafletResizeEvent extends LeafletEvent {
+
+ /**
+ * The old size before resize event.
+ */
+ oldSize: Point;
+
+ /**
+ * The new size after the resize event.
+ */
+ newSize: Point;
+ }
+}
+
+declare module L {
+
+ export interface LeafletTileEvent extends LeafletEvent {
+
+ /**
+ * The tile element (image).
+ */
+ tile: HTMLElement;
+
+ /**
+ * The source URL of the tile.
+ */
+ url: string;
+ }
+}
+
+declare module L {
+
+ export class LineUtil {
+
+ /**
+ * Dramatically reduces the number of points in a polyline while retaining
+ * its shape and returns a new array of simplified points. Used for a huge performance
+ * boost when processing/displaying Leaflet polylines for each zoom level
+ * and also reducing visual noise. tolerance affects the amount of simplification
+ * (lesser value means higher quality but slower and with more points). Also
+ * released as a separated micro-library Simplify.js.
+ */
+ static simplify(points: Point[], tolerance: number): Point[];
+
+ /**
+ * Returns the distance between point p and segment p1 to p2.
+ */
+ static pointToSegmentDistance(p: Point, p1: Point, p2: Point): number;
+
+ /**
+ * Returns the closest point from a point p on a segment p1 to p2.
+ */
+ static closestPointOnSegment(p: Point, p1: Point, p2: Point): number;
+
+ /**
+ * Clips the segment a to b by rectangular bounds (modifying the segment points
+ * directly!). Used by Leaflet to only show polyline points that are on the screen
+ * or near, increasing performance.
+ */
+ static clipSegment(a: Point, b: Point, bounds: Bounds): void;
+
+ }
+}
+
+declare module L {
+
+ export interface LocateOptions {
+
+ /**
+ * If true, starts continous watching of location changes (instead of detecting
+ * it once) using W3C watchPosition method. You can later stop watching using
+ * map.stopLocate() method.
+ *
+ * Default value: false.
+ */
+ watch?: boolean;
+
+ /**
+ * If true, automatically sets the map view to the user location with respect
+ * to detection accuracy, or to world view if geolocation failed.
+ *
+ * Default value: false.
+ */
+ setView?: boolean;
+
+ /**
+ * The maximum zoom for automatic view setting when using `setView` option.
+ *
+ * Default value: Infinity.
+ */
+ maxZoom?: number;
+
+ /**
+ * Number of millisecond to wait for a response from geolocation before firing
+ * a locationerror event.
+ *
+ * Default value: 10000.
+ */
+ timeout?: number;
+
+ /**
+ * Maximum age of detected location. If less than this amount of milliseconds
+ * passed since last geolocation response, locate will return a cached location.
+ *
+ * Default value: 0.
+ */
+ maximumAge?: number;
+
+ /**
+ * Enables high accuracy, see description in the W3C spec.
+ *
+ * Default value: false.
+ */
+ enableHighAccuracy?: boolean;
+ }
+}
+
+declare module L {
+
+ /**
+ * Instantiates a map object given a div element and optionally an
+ * object literal with map options described below.
+ */
+ function map(id: HTMLElement, options?: MapOptions): Map;
+
+ /**
+ * Instantiates a map object given a div element id and optionally an
+ * object literal with map options described below.
+ */
+ function map(id: string, options?: MapOptions): Map;
+
+ export class Map extends Class implements IEventPowered