Merge pull request #1 from borisyankov/master

Update fork
This commit is contained in:
bluong
2014-09-02 11:43:17 -07:00
58 changed files with 8676 additions and 3583 deletions
+9 -1
View File
@@ -13,6 +13,7 @@ All definitions files include a header with the author and editors, so at some p
* [AngularFire](https://www.firebase.com/docs/angular/reference.html) (by [Dénes Harmath](https://github.com/thSoft))
* [AngularJS](http://angularjs.org) (by [Diego Vilar](https://github.com/diegovilar)) ([wiki](https://github.com/borisyankov/DefinitelyTyped/wiki/AngularJS-Definitions-Usage-Notes))
* [angularLocalStorage](https://github.com/agrublev/angularLocalStorage) (by [Hiroki Horiuchi](https://github.com/horiuchi/))
* [angular-spinner](https://github.com/urish/angular-spinner) (by [Marcin Biegała](https://github.com/Biegal))
* [AngularUI](http://angular-ui.github.io/) (by [Michel Salib](https://github.com/michelsalib))
* [Angular Hotkeys](https://github.com/chieffancypants/angular-hotkeys/) (by [Jason Zhao](https://github.com/jlz27))
* [Angular Protractor](https://github.com/angular/protractor) (by [Bill Armstrong](https://github.com/BillArmstrong))
@@ -73,6 +74,7 @@ All definitions files include a header with the author and editors, so at some p
* [Elm](http://elm-lang.org) (by [Dénes Harmath](https://github.com/thSoft))
* [ember.js](http://emberjs.com/) (by [Boris Yankov](https://github.com/borisyankov))
* [emissary](https://github.com/atom/emissary) (by [vvakame](https://github.com/vvakame))
* [Emscripten](http://kripken.github.io/emscripten-site/) (by [Kensuke MATSUZAKI](https://github.com/zakki))
* [EpicEditor](http://epiceditor.com/) (by [Boris Yankov](https://github.com/borisyankov))
* [ES6-Promises](https://github.com/jakearchibald/ES6-Promises) (by [François de Campredon](https://github.com/fdecampredon/))
* [Esprima](http://esprima.org/) (by [Teppei Sato](https://github.com/teppeis))
@@ -117,6 +119,7 @@ All definitions files include a header with the author and editors, so at some p
* [Google Translate API](https://developers.google.com/translate/) (by [Frank M](https://github.com/sgtfrankieboy))
* [Google Url Shortener](https://developers.google.com/url-shortener/) (by [Frank M](https://github.com/sgtfrankieboy))
* [Hammer.js](http://eightmedia.github.com/hammer.js/) (by [Boris Yankov](https://github.com/borisyankov))
* [Hapi](http://github.com/spumko/hapi) (by [Hakubo](http://github.com/hakubo))
* [Handlebars](http://handlebarsjs.com/) (by [Boris Yankov](https://github.com/borisyankov))
* [HashMap](https://github.com/flesler/hashmap) (by [Rafał Wrzeszcz](https://wrzasq.pl))
* [HashSet](http://www.timdown.co.uk/jshashtable/jshashset.html) (by [Sergey Gerasimov](https://github.com/gerich-home))
@@ -196,6 +199,7 @@ All definitions files include a header with the author and editors, so at some p
* [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))
* [jquery-handsontable](https://github.com/handsontable/jquery-handsontable) (by [Ted John](https://github.com/intelorca))
* [js-git](https://github.com/creationix/js-git) (by [Bart van der Schoor](https://github.com/Bartvds))
* [js-url](https://github.com/websanova/js-url) (by [MIZUNE Pine](https://github.com/pine613))
* [js-yaml](https://github.com/nodeca/js-yaml) (by [Bart van der Schoor](https://github.com/Bartvds/))
@@ -240,7 +244,8 @@ All definitions files include a header with the author and editors, so at some p
* [Marked](https://github.com/chjj/marked) (by [William Orr](https://github.com/worr))
* [MathJax](https://github.com/mathjax/MathJax) (by [Roland Zwaga](https://github.com/rolandzwaga))
* [mCustomScrollbar](https://github.com/malihu/malihu-custom-scrollbar-plugin) (by [Sarah Williams](https://github.com/flurg))
* [Meteor](https://www.meteor.com) (by [Dave Allen](https://github.com/fullflavedave))
* [Meteor](https://www.meteor.com) (by [Dave Allen](https://github.com/fullflavedave))
* [md5.js](http://labs.cybozu.co.jp/blog/mitsunari/2007/07/md5js_1.html) (by [MIZUNE Pine](https://github.com/pine613))
* [Microsoft Ajax](http://msdn.microsoft.com/en-us/library/ee341002(v=vs.100).aspx) (by [Patrick Magee](https://github.com/pjmagee))
* [Microsoft Live Connect](http://msdn.microsoft.com/en-us/library/live/hh243643.aspx) (by [John Vilk](https://github.com/jvilk))
* [Minimatch](https://github.com/isaacs/minimatch) (by [vvakame](https://github.com/vvakame))
@@ -287,6 +292,7 @@ All definitions files include a header with the author and editors, so at some p
* [Persona](http://www.mozilla.org/en-US/persona) (by [James Frasca](https://github.com/Nycto))
* [PhantomJS](http://phantomjs.org) (by [Jed Hunsaker](https://github.com/jedhunsaker))
* [PhoneGap](http://phonegap.com) (by [Boris Yankov](https://github.com/borisyankov))
* [Physijs](http://chandlerprall.github.io/Physijs/) (by [gyoh_k](https://github.com/gyohk))
* [PixiJS](https://github.com/GoodBoyDigital/pixi.js) (by [Pedro Casaubon](https://github.com/xperiments))
* [Platform](https://github.com/bestiejs/platform.js) (by [Jake Hickman](https://github.com/JakeH))
* [PouchDB](http://pouchdb.com) (by [Bill Sears](https://github.com/MrBigDog2U/))
@@ -320,6 +326,7 @@ All definitions files include a header with the author and editors, so at some p
* [SignalR](http://www.asp.net/signalr) (by [Boris Yankov](https://github.com/borisyankov))
* [simple-cw-node](https://github.com/astronaughts/simple-cw-node) (by [vvakame](https://github.com/vvakame))
* [Sinon](http://sinonjs.org/) (by [William Sears](https://github.com/mrbigdog2u))
* [SIPml](http://sipml5.org/) (by [Adriaan Groenenboom](https://github.com/chookies))
* [sjcl](http://crypto.stanford.edu/sjcl/) (by [Eugene Chernyshov](https://github.com/Evgenus))
* [SlickGrid](https://github.com/mleibman/SlickGrid) (by [Josh Baldwin](https://github.com/jbaldwin))
* [smoothie](https://github.com/joewalnes/smoothie) (by [Mike H. Hawley](https://github.com/mikehhawley) and [Drew Noakes](https://drewnoakes.com))
@@ -374,6 +381,7 @@ All definitions files include a header with the author and editors, so at some p
* [ws](http://einaros.github.io/ws/) (by [Paul Loyd](https://github.com/loyd))
* [x2js](https://code.google.com/p/x2js/) (by [Hiroki Horiuchi](https://github.com/horiuchi/))
* [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) (by [Michel Salib](https://github.com/michelsalib))
* [xpath](https://github.com/goto100/xpath) (by [Andrew Bradley](https://github.com/cspotcode))
* [XRegExp](http://xregexp.com/) (by [Bart van der Schoor](https://github.com/Bartvds))
* [YouTube](https://developers.google.com/youtube/) (by [Daz Wilkin](https://github.com/DazWilkin/))
* [YouTube Analytics API](https://developers.google.com/youtube/analytics/) (by [Frank M](https://github.com/sgtfrankieboy))
+12
View File
@@ -0,0 +1,12 @@
/// <reference path="angular-spinner.d.ts" />
var myApp = angular.module('testModule');
module AngularSpinnerTest {
var app = angular.module("angularSpinnerTest", ["angular-spinner"]);
app.config(['usSpinnerService', function(usSpinnerService: ISpinnerService) {
usSpinnerService.spin('key1');
usSpinnerService.stop('key2');
}]);
}
+26
View File
@@ -0,0 +1,26 @@
// Type definitions for angular-spinner.js 0.5.1
// Project: https://github.com/urish/angular-spinner
// Definitions by: Marcin Biegała <https://github.com/Biegal>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../angularjs/angular.d.ts" />
/**
* SpinnerService
* see https://github.com/urish/angular-spinner
*/
interface ISpinnerService {
/**
* Start selected spinner
*
* @param spinner key
*/
spin(key: string): void;
/**
* Stop selected spinner
*
* @param spinner key
*/
stop(key: string): void;
}
@@ -118,7 +118,7 @@ testApp.config((
});
testApp.controller('TestCtrl', (
$scope: ng.IScope,
$scope: ng.ui.bootstrap.IModalScope,
$log: ng.ILogService,
$modal: ng.ui.bootstrap.IModalService,
$modalStack: ng.ui.bootstrap.IModalStackService,
@@ -147,9 +147,9 @@ testApp.controller('TestCtrl', (
$log.log('modal opened');
});
modalInstance.result.then(closeResult=> {
modalInstance.result.then((closeResult:any)=> {
$log.log('modal closed', closeResult);
}, dismissResult=> {
}, (dismissResult:any)=> {
$log.log('modal dismissed', dismissResult);
});
+29 -3
View File
@@ -1,4 +1,4 @@
// Type definitions for Angular UI Bootstrap 0.10.0
// Type definitions for Angular UI Bootstrap 0.11.0
// Project: https://github.com/angular-ui/bootstrap
// Definitions by: Brian Surowiec <https://github.com/xt0rted>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
@@ -198,6 +198,22 @@ declare module ng.ui.bootstrap {
opened: ng.IPromise<any>;
}
interface IModalScope extends ng.IScope {
/**
* Those methods make it easy to close a modal window without a need to create a dedicated controller
*/
/**
* Dismiss the dialog without assigning a value to the promise output
*/
$dismiss(reason?: any): void;
/**
* Close the dialog resolving the promise to the given value
*/
$close(result?: any): void;
}
interface IModalSettings {
/**
* a path to a template representing modal's content
@@ -211,9 +227,9 @@ declare module ng.ui.bootstrap {
/**
* a scope instance to be used for the modal's content (actually the $modal service is going to create a child scope of a provided scope).
* Defaults to `$rootScope`
* Defaults to `$rootScope`.
*/
scope?: any;
scope?: IModalScope;
/**
* a controller for a modal instance - it can initialize scope used by modal.
@@ -246,6 +262,16 @@ declare module ng.ui.bootstrap {
* additional CSS class(es) to be added to a modal window template
*/
windowClass?: string;
/**
* optional size of modal window. Allowed values: 'sm' (small) or 'lg' (large). Requires Bootstrap 3.1.0 or later
*/
size?: string;
/**
* a path to a template overriding modal's window template
*/
windowTemplateUrl?: string;
}
interface IModalStackService {
+108 -8
View File
@@ -497,6 +497,35 @@ declare module AtomCore {
screenRangeChanged():any;
}
interface IDecorationParams {
id?: number;
class: string;
type: any /* string or string[] */;
}
interface IDecorationStatic {
isType(decorationParams:IDecorationParams, type:any /* string or string[] */):boolean;
new (marker:IDisplayBufferMarker, displayBuffer:IDisplayBuffer, params: IDecorationParams): IDecoration;
}
interface IDecoration extends Emissary.IEmitter {
marker: IDisplayBufferMarker;
displayBuffer: IDisplayBuffer;
params: IDecorationParams
id: number;
flashQueue: any[];
isDestroyed: boolean;
destroy():void;
update(newParams:IDecorationParams):void;
getMarker():IDisplayBufferMarker;
getParams():IDecorationParams;
isType(type:string):boolean;
matchesPattern(decorationPattern:{[key:string]:IDecorationParams;}):boolean;
flash(klass:string, duration?:number):void;
consumeNextFlash():any;
}
interface IEditor {
// Serializable.includeInto(Editor);
// Delegator.includeInto(Editor);
@@ -509,6 +538,8 @@ declare module AtomCore {
cursors:ICursor[];
selections: ISelection[];
suppressSelectionMerging:boolean;
updateBatchDepth: number;
selectionFlashDuration: number;
softTabs: boolean;
displayBuffer: IDisplayBuffer;
@@ -522,6 +553,8 @@ declare module AtomCore {
subscriptionsByObject: any; /* WeakMap */
subscriptions: Emissary.ISubscription[];
mini: any;
serializeParams():{id:number; softTabs:boolean; scrollTop:number; scrollLeft:number; displayBuffer:any;};
deserializeParams(params:any):any;
subscribeToBuffer():void;
@@ -532,10 +565,7 @@ declare module AtomCore {
getTitle():string;
getLongTitle():string;
setVisible(visible:boolean):void;
setScrollTop(scrollTop:any):void;
getScrollTop():number;
setScrollLeft(scrollLeft:any):void;
getScrollLeft():number;
setMini(mini:any):void;
setEditorWidthInChars(editorWidthInChars:any):void;
getSoftWrapColumn():number;
getSoftTabs():boolean;
@@ -545,6 +575,7 @@ declare module AtomCore {
getTabText():string;
getTabLength():number;
setTabLength(tabLength:any):void;
usesSoftTabs():boolean;
clipBufferPosition(bufferPosition:any):void;
clipBufferRange(range:any):void;
indentationForBufferRow(bufferRow:any):void;
@@ -553,6 +584,7 @@ declare module AtomCore {
buildIndentString(number:any):string;
save():void;
saveAs(filePath:any):void;
copyPathToClipboard():void;
getPath():string;
getText():string;
setText(text:any):void;
@@ -572,6 +604,7 @@ declare module AtomCore {
scanInBufferRange():any;
backwardsScanInBufferRange():any;
isModified():boolean;
isEmpty():boolean;
shouldPromptToSave():boolean;
screenPositionForBufferPosition(bufferPosition:any, options?:any):TextBuffer.IPoint;
bufferPositionForScreenPosition(screenPosition:any, options?:any):TextBuffer.IPoint;
@@ -589,15 +622,19 @@ declare module AtomCore {
bufferRangeForScopeAtCursor(selector:string):any;
tokenForBufferPosition(bufferPosition:any):IToken;
getCursorScopes():string[];
logCursorScope():void;
insertText(text:string, options?:any):TextBuffer.IRange[];
insertNewline():TextBuffer.IRange[];
insertNewlineBelow():TextBuffer.IRange[];
insertNewlineAbove():any;
indent(options?:any):any;
backspace():any[];
backspaceToBeginningOfWord():any[];
backspaceToBeginningOfLine():any[];
// deprecated backspaceToBeginningOfWord():any[];
// deprecated backspaceToBeginningOfLine():any[];
deleteToBeginningOfWord():any[];
deleteToBeginningOfLine():any[];
delete():any[];
deleteToEndOfLine():any[];
deleteToEndOfWord():any[];
deleteLine():TextBuffer.IRange[];
indentSelectedRows():TextBuffer.IRange[][];
@@ -620,6 +657,7 @@ declare module AtomCore {
foldBufferRow(bufferRow:any):any;
unfoldBufferRow(bufferRow:any):any;
isFoldableAtBufferRow(bufferRow:any):boolean;
isFoldableAtScreenRow(screenRow:any):boolean;
createFold(startRow:any, endRow:any):IFold;
destroyFoldWithId(id:any):any;
destroyFoldsIntersectingBufferRange(bufferRange:any):any;
@@ -633,9 +671,12 @@ declare module AtomCore {
moveLineUp():ISelection[];
moveLineDown():ISelection[];
duplicateLines():any[][];
duplicateLine():any[][];
// duprecated duplicateLine():any[][];
mutateSelectedText(fn:(selection:ISelection)=>any):any;
replaceSelectedText(options:any, fn:(selection:string)=>any):any;
decorationsForScreenRowRange(startScreenRow:any, endScreenRow:any):{[id:number]: IDecoration[]};
decorateMarker(marker:IDisplayBufferMarker, decorationParams: {type:string; class: string;}):IDecoration;
decorationForId(id:number):IDecoration;
getMarker(id:number):IDisplayBufferMarker;
getMarkers():IDisplayBufferMarker[];
findMarkers(...args:any[]):IDisplayBufferMarker[];
@@ -659,6 +700,7 @@ declare module AtomCore {
removeSelection(selection:ISelection):any;
clearSelections():boolean;
consolidateSelections():boolean;
selectionScreenRangeChanged(selection:any):void;
getSelections():ISelection[];
getSelection(index?:number):ISelection;
getLastSelection():ISelection;
@@ -694,7 +736,16 @@ declare module AtomCore {
moveCursorToBeginningOfNextWord():void;
moveCursorToPreviousWordBoundary():void;
moveCursorToNextWordBoundary():void;
moveCursorToBeginningOfNextParagraph():void;
moveCursorToBeginningOfPreviousParagraph():void;
scrollToCursorPosition(options:any):any;
pageUp():void;
pageDown():void;
selectPageUp():void;
selectPageDown():void;
getRowsPerPage():number;
moveCursors(fn:(cursor:ICursor)=>any):any;
cursorMoved(event:any):void;
selectToScreenPosition(position:TextBuffer.IPoint):any;
selectRight():ISelection[];
selectLeft():ISelection[];
@@ -720,6 +771,8 @@ declare module AtomCore {
selectToEndOfWord():ISelection[];
selectToBeginningOfNextWord():ISelection[];
selectWord():ISelection[];
selectToBeginningOfNextParagraph():ISelection[];
selectToBeginningOfPreviousParagraph():ISelection[];
selectMarker(marker:any):any;
mergeCursors():number[];
expandSelectionsForward():any;
@@ -731,16 +784,63 @@ declare module AtomCore {
setGrammar(grammer:IGrammar):void;
reloadGrammar():any;
shouldAutoIndent():boolean;
shouldShowInvisibles():boolean;
updateInvisibles():void;
transact(fn:Function):any;
beginTransaction():ITransaction;
commitTransaction():any;
abortTransaction():any[];
inspect():string;
logScreenLines(start:number, end:number):any[];
handleTokenization():void;
handleGrammarChange():void;
handleMarkerCreated(marker:any):any;
getSelectionMarkerAttributes():{type: string; editorId: number; invalidate: string; };
// joinLine():any; // deprecated
getVerticalScrollMargin():number;
setVerticalScrollMargin(verticalScrollMargin:number):void;
getHorizontalScrollMargin():number;
setHorizontalScrollMargin(horizontalScrollMargin:number):void;
getLineHeightInPixels():number;
setLineHeightInPixels(lineHeightInPixels:number):void;
batchCharacterMeasurement(fn:Function):void;
getScopedCharWidth(scopeNames:any, char:any):any;
setScopedCharWidth(scopeNames:any, char:any, width:any):any;
getScopedCharWidths(scopeNames:any):any;
clearScopedCharWidths():any;
getDefaultCharWidth():number;
setDefaultCharWidth(defaultCharWidth:number):void;
setHeight(height:number):void;
getHeight():number;
getClientHeight():number;
setWidth(width:number):void;
getWidth():number;
getScrollTop():number;
setScrollTop(scrollTop:number):void;
getScrollBottom():number;
setScrollBottom(scrollBottom:number):void;
getScrollLeft():number;
setScrollLeft(scrollLeft:number):void;
getScrollRight():number;
setScrollRight(scrollRight:number):void;
getScrollHeight():number;
getScrollWidth():number;
getVisibleRowRange():number;
intersectsVisibleRowRange(startRow:any, endRow:any):any;
selectionIntersectsVisibleRowRange(selection:any):any;
pixelPositionForScreenPosition(screenPosition:any):any;
pixelPositionForBufferPosition(bufferPosition:any):any;
screenPositionForPixelPosition(pixelPosition:any):any;
pixelRectForScreenRange(screenRange:any):any;
scrollToScreenRange(screenRange:any, options:any):any;
scrollToScreenPosition(screenPosition:any, options:any):any;
scrollToBufferPosition(bufferPosition:any, options:any):any;
horizontallyScrollable():any;
verticallyScrollable():any;
getHorizontalScrollbarHeight():any;
setHorizontalScrollbarHeight(height:any):any;
getVerticalScrollbarWidth():any;
setVerticalScrollbarWidth(width:any):any;
// deprecated joinLine():any;
}
interface IGrammar {
+16 -10
View File
@@ -2230,13 +2230,19 @@ declare module chrome.webRequest {
username: string;
password: string;
}
interface HttpHeader {
name: string;
value?: string;
binaryValue?: ArrayBuffer;
}
interface BlockingResponse {
cancel?: boolean;
redirectUrl?: string;
responseHeaders?: Object;
responseHeaders?: HttpHeader[];
authCredentials?: AuthCredentials;
requestHeaders?: Object;
requestHeaders?: HttpHeader[];
}
interface RequestFilter {
@@ -2256,7 +2262,7 @@ declare module chrome.webRequest {
ip?: string;
statusLine?: string;
frameId: number;
responseHeaders?: Object;
responseHeaders?: HttpHeader[];
parentFrameId: number;
fromCache: boolean;
url: string;
@@ -2275,7 +2281,7 @@ declare module chrome.webRequest {
statusLine?: string;
frameId: number;
requestId: string;
responseHeaders: Object;
responseHeaders?: HttpHeader[];
type: string;
method: string;
}
@@ -2285,7 +2291,7 @@ declare module chrome.webRequest {
ip?: string;
statusLine?: string;
frameId: number;
responseHeaders?: Object;
responseHeaders?: HttpHeader[];
parentFrameId: number;
fromCache: boolean;
url: string;
@@ -2307,7 +2313,7 @@ declare module chrome.webRequest {
statusLine?: string;
frameId: number;
challenger: Challenger;
responseHeaders: Object;
responseHeaders?: HttpHeader[];
isProxy: boolean;
realm?: string;
parentFrameId: number;
@@ -2326,7 +2332,7 @@ declare module chrome.webRequest {
timeStamp: number;
frameId: number;
requestId: number;
requestHeaders?: Object;
requestHeaders?: HttpHeader[];
type: string;
method: string;
}
@@ -2350,7 +2356,7 @@ declare module chrome.webRequest {
ip?: string;
statusLine?: string;
frameId: number;
responseHeaders?: Object;
responseHeaders?: HttpHeader[];
parentFrameId: number;
fromCache: boolean;
url: string;
@@ -2368,7 +2374,7 @@ declare module chrome.webRequest {
timeStamp: number;
frameId: number;
requestId: string;
requestHeaders: Object;
requestHeaders?: HttpHeader[];
type: string;
method: string;
}
Vendored
+2
View File
@@ -1102,6 +1102,8 @@ declare module D3 {
<T>(layers: T[], index?: number): T[];
values(accessor?: (d: any) => any): StackLayout;
offset(offset: string): StackLayout;
x(accessor: (d: any, i: number) => any): StackLayout;
y(accessor: (d: any, i: number) => any): StackLayout;
}
export interface TreeLayout {
+16
View File
@@ -72,6 +72,22 @@ declare class Dropzone {
getRejectedFiles(): DropzoneFile[];
getQueuedFiles(): DropzoneFile[];
getUploadingFiles(): DropzoneFile[];
emit(eventName: string, file: DropzoneFile, str?: string);
emit(eventName: "thumbnail", file: DropzoneFile, path: string);
emit(eventName: "addedfile", file: DropzoneFile);
emit(eventName: "removedfile", file: DropzoneFile);
emit(eventName: "processing", file: DropzoneFile);
emit(eventName: "canceled", file: DropzoneFile);
emit(eventName: "complete", file: DropzoneFile);
emit(eventName: string, e: Event);
emit(eventName: "drop", e: Event);
emit(eventName: "dragstart", e: Event);
emit(eventName: "dragend", e: Event);
emit(eventName: "dragenter", e: Event);
emit(eventName: "dragover", e: Event);
emit(eventName: "dragleave", e: Event);
}
interface JQuery {
+162 -159
View File
@@ -11,12 +11,15 @@ declare var Handlebars: HandlebarsStatic;
declare module EmberStates {
interface Transition {
abort(): void;
addInitialStates(): void;
matchContextsToStates(contexts: any[]): void;
normalize(manager: Ember.StateManager, contexts: any[]): void;
removeUnchangedContexts(manager: Ember.StateManager): void;
retry(): void;
sendEvents(eventName: string, sendRecursiveArguments: boolean, isUnhandledPass: boolean): void;
sendRecursively(event: string, currentState: Ember.State, isUnhandledPass: boolean): void;
targetName: string;
}
}
@@ -38,10 +41,10 @@ declare module EmberTesting {
}
interface Function {
observes(...string): Function;
observesBefore(...string): Function;
on(...string): Function;
property(...string): Function;
observes(...args: string[]): Function;
observesBefore(...args: string[]): Function;
on(...args: string[]): Function;
property(...args: string[]): Function;
}
interface String {
@@ -50,9 +53,9 @@ interface String {
classify(): string;
dasherize(): string;
decamelize(): string;
fmt(...string): string;
fmt(...args: string[]): string;
htmlSafe(): typeof Handlebars.SafeString;
loc(...string): string;
loc(...args: string[]): string;
underscore(): string;
w(): string[];
}
@@ -70,14 +73,14 @@ interface Array<T> {
clear(): any[];
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Ember.Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Ember.Enumerable);
enumerableContentDidChange(start: number, removing: Ember.Enumerable, adding: Ember.Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Ember.Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Ember.Enumerable);
enumerableContentDidChange(removing: Ember.Enumerable, adding: Ember.Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Ember.Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Ember.Enumerable): any;
enumerableContentDidChange(start: number, removing: Ember.Enumerable, adding: Ember.Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Ember.Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Ember.Enumerable): any;
enumerableContentDidChange(removing: Ember.Enumerable, adding: Ember.Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): any[];
enumerableContentWillChange(removing: Ember.Enumerable, adding: number): any[];
enumerableContentWillChange(removing: number, adding: Ember.Enumerable): any[];
@@ -93,15 +96,15 @@ interface Array<T> {
getEach(key: string): any[];
indexOf(object: any, startAt: number): number;
insertAt(idx: number, object: any): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
lastIndexOf(object: any, startAt: number): number;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
objectAt(idx: number): any;
objectsAt(...number): any[];
objectsAt(...args: number[]): any[];
popObject(): any;
pushObject(obj: any): any;
pushObjects(...any): any[];
pushObjects(...args: any[]): any[];
reduce(callback: ReduceCallback, initialValue: any, reducerProperty: string): any;
reject: ItemIndexEnumerableCallbackTarget;
rejectBy(key: string, value?: string): any[];
@@ -136,7 +139,7 @@ interface Array<T> {
decrementProperty(keyName: string, decrement?: number): number;
endPropertyChanges(): any[];
get(keyName: string): any;
getProperties(...string): {};
getProperties(...args: string[]): {};
getProperties(keys: string[]): {};
getWithDefault(keyName: string, defaultValue: any): any;
hasObserverFor(key: string): boolean;
@@ -190,8 +193,8 @@ interface CoreObjectArguments {
}
interface EnumerableConfigurationOptions {
willChange? ;
didChange? ;
willChange?: boolean ;
didChange?: boolean ;
}
interface ItemIndexEnumerableCallbackTarget {
@@ -365,14 +368,14 @@ declare module Ember {
someProperty(key: string, value?: string): boolean;
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Enumerable;
enumerableContentWillChange(removing: Enumerable, adding: number): Enumerable;
enumerableContentWillChange(removing: number, adding: Enumerable): Enumerable;
@@ -387,13 +390,13 @@ declare module Ember {
forEach(callback: Function, target?: any): any;
getEach(key: string): any[];
indexOf(object: any, startAt: number): number;
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
lastIndexOf(object: any, startAt: number): number;
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
objectAt(idx: number): any;
objectsAt(...number): any[];
objectsAt(...args: number[]): any[];
reduce(callback: ReduceCallback, initialValue: any, reducerProperty: string): any;
reject: ItemIndexEnumerableCallbackTarget;
rejectBy(key: string, value?: string): any[];
@@ -405,9 +408,9 @@ declare module Ember {
toArray(): any[];
uniq(): Enumerable;
without(value: any): Enumerable;
'@each': EachProxy;
'@each': EachProxy;
Boolean: boolean;
'[]': any[];
'[]': any[];
firstObject: any;
hasEnumerableObservers: boolean;
lastObject: any;
@@ -438,8 +441,8 @@ declare module Ember {
sortAscending: boolean;
sortFunction: Comparable;
sortProperties: any[];
replaceRoute(name: string, ...any);
transitionToRoute(name: string, ...any);
replaceRoute(name: string, ...args: any[]): void;
transitionToRoute(name: string, ...args: any[]): void;
controllers: {};
needs: string[];
target: any;
@@ -482,14 +485,14 @@ declare module Ember {
clear(): any[];
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): any[];
enumerableContentWillChange(removing: Enumerable, adding: number): any[];
enumerableContentWillChange(removing: number, adding: Enumerable): any[];
@@ -505,24 +508,24 @@ declare module Ember {
getEach(key: string): any[];
indexOf(object: any, startAt: number): number;
insertAt(idx: number, object: any): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
lastIndexOf(object: any, startAt: number): number;
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
objectAt(idx: number): any;
objectAtContent(idx: number): any;
objectsAt(...number): any[];
objectsAt(...args: number[]): any[];
popObject(): any;
pushObject(obj: any): any;
pushObjects(...any): any[];
pushObjects(...args: any[]): any[];
reduce(callback: ReduceCallback, initialValue: any, reducerProperty: string): any;
reject: ItemIndexEnumerableCallbackTarget;
rejectBy(key: string, value?: string): any[];
removeArrayObserver(target: any, opts: EnumerableConfigurationOptions): any[];
removeAt(start: number, len: number): any;
removeEnumerableObserver(target: any, opts: EnumerableConfigurationOptions): any[];
replace(idx: number, amt: number, objects: any[]);
replace(idx: number, amt: number, objects: any[]): any;
replaceContent(idx: number, amt: number, objects: any[]): void;
reverseObjects(): any[];
setEach(key: string, value?: any): any;
@@ -535,8 +538,8 @@ declare module Ember {
unshiftObject(object: any): any;
unshiftObjects(objects: any[]): any[];
without(value: any): any[];
'[]': any[];
'@each': EachProxy;
'[]': any[];
'@each': EachProxy;
Boolean: boolean;
firstObject: any;
hasEnumerableObservers: boolean;
@@ -657,7 +660,7 @@ declare module Ember {
cacheable(aFlag?: boolean): ComputedProperty;
get(keyName: string): any;
meta(meta: {}): ComputedProperty;
property(...string): ComputedProperty;
property(...args: string[]): ComputedProperty;
readOnly(): ComputedProperty;
set(keyName: string, newValue: any, oldValue: string): any;
// ReSharper disable UsingOfReservedWord
@@ -721,8 +724,8 @@ declare module Ember {
Additional methods for the ControllerMixin.
**/
class ControllerMixin {
replaceRoute(name: string, ...any): void;
transitionToRoute(name: string, ...any): void;
replaceRoute(name: string, ...args: any[]): void;
transitionToRoute(name: string, ...args: any[]): void;
controllers: {};
needs: string[];
target: any;
@@ -879,14 +882,14 @@ declare module Ember {
someProperty(key: string, value?: string): boolean;
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Enumerable;
enumerableContentWillChange(removing: Enumerable, adding: number): Enumerable;
enumerableContentWillChange(removing: number, adding: Enumerable): Enumerable;
@@ -900,7 +903,7 @@ declare module Ember {
findBy(key: string, value?: string): any;
forEach(callback: Function, target?: any): any;
getEach(key: string): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
@@ -913,7 +916,7 @@ declare module Ember {
toArray(): any[];
uniq(): Enumerable;
without(value: any): Enumerable;
'[]': any[];
'[]': any[];
firstObject: any;
hasEnumerableObservers: boolean;
lastObject: any;
@@ -954,7 +957,7 @@ declare module Ember {
off(name: string, target: any, method: Function): Evented;
on(name: string, target: any, method: Function): Evented;
one(name: string, target: any, method: Function): Evented;
trigger(name: string, ...string): void;
trigger(name: string, ...args: string[]): void;
}
var FROZEN_ERROR: string;
class Freezable {
@@ -996,19 +999,19 @@ declare module Ember {
class Compiler { }
class JavaScriptCompiler { }
function registerHelper(name: string, fn: Function, inverse?: boolean): void;
function registerPartial(name: string, str): void;
function K();
function createFrame(object);
function registerPartial(name: string, str: any): void;
function K(): any;
function createFrame(objec: any): any;
function Exception(message: string): void;
class SafeString {
constructor(str: string);
static toString(): string;
}
function parse(string: string);
function print(ast);
var logger;
function log(level, str): void;
function compile(environment, options?, context?, asObject?);
function parse(string: string): any;
function print(ast: any): void;
var logger: typeof Ember.Logger;
function log(level: string, str: string): void;
function compile(environment: any, options?: any, context?: any, asObject?: any): any;
}
class HashLocation extends Object {
static detect(obj: any): boolean;
@@ -1046,7 +1049,7 @@ declare module Ember {
var IS_BINDING: RegExp;
class Instrumentation {
getProperties(obj: any, list: any[]): {};
getProperties(obj: any, ...string): {};
getProperties(obj: any, ...args: string[]): {};
instrument(name: string, payload: any, callback: Function, binding: any): void;
reset(): void;
subscribe(pattern: string, object: any): void;
@@ -1094,11 +1097,11 @@ declare module Ember {
}
var Logger: {
assert(param: any): void;
debug(...any): void;
error(...any): void;
info(...any): void;
log(...any): void;
warn(...any): void;
debug(...args: any[]): void;
error(...args: any[]): void;
info(...args: any[]): void;
log(...args: any[]): void;
warn(...args: any[]): void;
};
function MANDATORY_SETTER_FUNCTION(value: string): void;
var META_KEY: string;
@@ -1137,14 +1140,14 @@ declare module Ember {
clear(): any[];
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Enumerable;
enumerableContentWillChange(removing: Enumerable, adding: number): Enumerable;
enumerableContentWillChange(removing: number, adding: Enumerable): Enumerable;
@@ -1160,23 +1163,23 @@ declare module Ember {
getEach(key: string): any[];
indexOf(object: any, startAt: number): number;
insertAt(idx: number, object: any): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
lastIndexOf(object: any, startAt: number): number;
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
objectAt(idx: number): any;
objectsAt(...number): any[];
objectsAt(...args: number[]): any[];
popObject(): any;
pushObject(obj: any): any;
pushObjects(...any): any[];
pushObjects(...args: any[]): any[];
reduce(callback: ReduceCallback, initialValue: any, reducerProperty: string): any;
reject: ItemIndexEnumerableCallbackTarget;
rejectBy(key: string, value?: string): any[];
removeArrayObserver(target: any, opts: EnumerableConfigurationOptions): any[];
removeAt(start: number, len: number): any;
removeEnumerableObserver(target: any, opts: EnumerableConfigurationOptions): Enumerable;
replace(idx: number, amt: number, objects: any[]);
replace(idx: number, amt: number, objects: any[]): any;
reverseObjects(): any[];
setEach(key: string, value?: any): any;
setObjects(objects: any[]): any[];
@@ -1209,14 +1212,14 @@ declare module Ember {
someProperty(key: string, value?: string): boolean;
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Enumerable;
enumerableContentWillChange(removing: Enumerable, adding: number): Enumerable;
enumerableContentWillChange(removing: number, adding: Enumerable): Enumerable;
@@ -1230,7 +1233,7 @@ declare module Ember {
findBy(key: string, value?: string): any;
forEach(callback: Function, target?: any): any;
getEach(key: string): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
@@ -1245,7 +1248,7 @@ declare module Ember {
toArray(): any[];
uniq(): Enumerable;
without(value: any): Enumerable;
'[]': any[];
'[]': any[];
firstObject: any;
hasEnumerableObservers: boolean;
lastObject: any;
@@ -1280,14 +1283,14 @@ declare module Ember {
clear(): any[];
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): any[];
enumerableContentWillChange(removing: Enumerable, adding: number): any[];
enumerableContentWillChange(removing: number, adding: Enumerable): any[];
@@ -1303,23 +1306,23 @@ declare module Ember {
getEach(key: string): any[];
indexOf(object: any, startAt: number): number;
insertAt(idx: number, object: any): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
lastIndexOf(object: any, startAt: number): number;
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
objectAt(idx: number): any;
objectsAt(...number): any[];
objectsAt(...args: number[]): any[];
popObject(): any;
pushObject(obj: any): any;
pushObjects(...any): any[];
pushObjects(...args: any[]): any[];
reduce(callback: ReduceCallback, initialValue: any, reducerProperty: string): any;
reject: ItemIndexEnumerableCallbackTarget;
rejectBy(key: string, value?: string): any[];
removeArrayObserver(target: any, opts: EnumerableConfigurationOptions): any[];
removeAt(start: number, len: number): any;
removeEnumerableObserver(target: any, opts: EnumerableConfigurationOptions): any[];
replace(idx: number, amt: number, objects: any[]);
replace(idx: number, amt: number, objects: any[]): any;
reverseObjects(): any[];
setEach(key: string, value?: any): any;
setObjects(objects: any[]): any[];
@@ -1348,7 +1351,7 @@ declare module Ember {
decrementProperty(keyName: string, decrement?: number): number;
endPropertyChanges(): any[];
get(keyName: string): any;
getProperties(...string): {};
getProperties(...args: string[]): {};
getProperties(keys: string[]): {};
getWithDefault(keyName: string, defaultValue: any): any;
hasObserverFor(key: string): boolean;
@@ -1426,7 +1429,7 @@ declare module Ember {
decrementProperty(keyName: string, decrement?: number): number;
endPropertyChanges(): Observable;
get(keyName: string): any;
getProperties(...string): {};
getProperties(...args: string[]): {};
getProperties(keys: string[]): {};
getWithDefault(keyName: string, defaultValue: any): any;
hasObserverFor(key: string): boolean;
@@ -1441,8 +1444,8 @@ declare module Ember {
toggleProperty(keyName: string): any;
}
class ObjectController extends ObjectProxy implements ControllerMixin {
replaceRoute(name: string, ...any): void;
transitionToRoute(name: string, ...any): void;
replaceRoute(name: string, ...args: any[]): void;
transitionToRoute(name: string, ...args: any[]): void;
controllers: Object;
needs: string[];
target: any;
@@ -1474,7 +1477,7 @@ declare module Ember {
decrementProperty(keyName: string, decrement?: number): number;
endPropertyChanges(): Observable;
get(keyName: string): any;
getProperties(...string): {};
getProperties(...args: string[]): {};
getProperties(keys: string[]): {};
getWithDefault(keyName: string, defaultValue: any): any;
hasObserverFor(key: string): boolean;
@@ -1551,12 +1554,12 @@ declare module Ember {
render(name: string, options?: RenderOptions): void;
renderTemplate(controller: Controller, model: {}): void;
// ReSharper disable once InconsistentNaming
replaceWith(name: string, ...Object): void;
send(name: string, ...any): void;
replaceWith(name: string, ...object: any[]): void;
send(name: string, ...args: any[]): void;
serialize(model: {}, params: string[]): string;
setupController(controller: Controller, model: {}): void;
// ReSharper disable once InconsistentNaming
transitionTo(name: string, ...Object): void;
transitionTo(name: string, ...object: any[]): void;
actions: ActionsHash;
}
class Router extends Object {
@@ -1634,14 +1637,14 @@ declare module Ember {
someProperty(key: string, value?: string): boolean;
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Set;
enumerableContentWillChange(removing: Enumerable, adding: number): Set;
enumerableContentWillChange(removing: number, adding: Enumerable): Set;
@@ -1655,7 +1658,7 @@ declare module Ember {
findBy(key: string, value?: string): any;
forEach(callback: Function, target?: any): any;
getEach(key: string): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
@@ -1679,13 +1682,13 @@ declare module Ember {
freeze(): Set;
isFrozen: boolean;
add(obj: any): Set;
addEach(...any): Set;
addEach(...args: any[]): Set;
clear(): Set;
isEqual(obj: Set): boolean;
pop(): any;
push(obj: any): Set;
remove(obj: any): Set;
removeEach(...any): Set;
removeEach(...args: any[]): Set;
shift(): any;
unshift(obj: any): Set;
length: number;
@@ -1699,14 +1702,14 @@ declare module Ember {
someProperty(key: string, value?: string): boolean;
compact(): any[];
contains(obj: any): boolean;
enumerableContentDidChange(start: number, removing: number, adding: number);
enumerableContentDidChange(start: number, removing: Enumerable, adding: number);
enumerableContentDidChange(start: number, removing: number, adding: Enumerable);
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(removing: number, adding: number);
enumerableContentDidChange(removing: Enumerable, adding: number);
enumerableContentDidChange(removing: number, adding: Enumerable);
enumerableContentDidChange(removing: Enumerable, adding: Enumerable);
enumerableContentDidChange(start: number, removing: number, adding: number): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: number): any;
enumerableContentDidChange(start: number, removing: number, adding: Enumerable): any;
enumerableContentDidChange(start: number, removing: Enumerable, adding: Enumerable): any;
enumerableContentDidChange(removing: number, adding: number): any;
enumerableContentDidChange(removing: Enumerable, adding: number): any;
enumerableContentDidChange(removing: number, adding: Enumerable): any;
enumerableContentDidChange(removing: Enumerable, adding: Enumerable): any;
enumerableContentWillChange(removing: number, adding: number): Enumerable;
enumerableContentWillChange(removing: Enumerable, adding: number): Enumerable;
enumerableContentWillChange(removing: number, adding: Enumerable): Enumerable;
@@ -1720,7 +1723,7 @@ declare module Ember {
findBy(key: string, value?: string): any;
forEach(callback: Function, target?: any): any;
getEach(key: string): any[];
invoke(methodName: string, ...any): any[];
invoke(methodName: string, ...args: any[]): any[];
map: ItemIndexEnumerableCallbackTarget;
mapBy(key: string): any[];
nextObject(index: number, previousObject: any, context: any): any;
@@ -1763,7 +1766,7 @@ declare module Ember {
off(name: string, target: any, method: Function): State;
on(name: string, target: any, method: Function): State;
one(name: string, target: any, method: Function): State;
trigger(name: string, ...string): void;
trigger(name: string, ...args: string[]): void;
getPathsCache(stateManager: {}, path: string): {};
init(): void;
setPathsCache(stateManager: {}, path: string, transitions: any): void;
@@ -1804,7 +1807,7 @@ declare module Ember {
stateMetaFor(state: State): {};
transitionTo(path: string, context: any): void;
triggerSetupContext(transitions: TransitionsHash): void;
unhandledEvent(manager: StateManager, event: string);
unhandledEvent(manager: StateManager, event: string): any;
currentPath: string;
currentState: State;
errorOnUnhandledEvents: boolean;
@@ -1816,9 +1819,9 @@ declare module Ember {
function classify(str: string): string;
function dasherize(str: string): string;
function decamelize(str: string): string;
function fmt(...string): string;
function fmt(...args: string[]): string;
function htmlSafe(str: string): void; // TODO: @returns Handlebars.SafeStringStatic;
function loc(...string): string;
function loc(...args: string[]): string;
function underscore(str: string): string;
function w(str: string): string[];
}
@@ -2001,8 +2004,8 @@ declare module Ember {
var computed: {
(callback: Function): ComputedProperty;
alias(dependentKey: string): ComputedProperty;
and(...string): ComputedProperty;
any(...string): ComputedProperty;
and(...args: string[]): ComputedProperty;
any(...args: string[]): ComputedProperty;
bool(dependentKey: string): ComputedProperty;
defaultTo(defaultPath: string): ComputedProperty;
empty(dependentKey: string): ComputedProperty;
@@ -2011,13 +2014,13 @@ declare module Ember {
gte(dependentKey: string, value: number): ComputedProperty;
lt(dependentKey: string, value: number): ComputedProperty;
lte(dependentKey: string, value: number): ComputedProperty;
map(...string): ComputedProperty;
map(...args: string[]): ComputedProperty;
match(dependentKey: string, regexp: RegExp): ComputedProperty;
none(dependentKey: string): ComputedProperty;
not(dependentKey: string): ComputedProperty;
notEmpty(dependentKey: string): ComputedProperty;
oneWay(dependentKey: string): ComputedProperty;
or(...string): ComputedProperty;
or(...args: string[]): ComputedProperty;
};
// ReSharper disable DuplicatingLocalDeclaration
var config: {};
@@ -2057,7 +2060,7 @@ declare module Ember {
function handleErrors(func: Function, context: any): any;
function hasListeners(context: any, name: string): boolean;
function hasOwnProperty(prop: string): boolean;
function immediateObserver(func: Function, ...propertyNames): Function;
function immediateObserver(func: Function, ...propertyNames: any[]): Function;
var imports: {};
function inspect(obj: any): string;
function instrument(name: string, payload: any, callback: Function, binding: any): void;
@@ -2079,13 +2082,13 @@ declare module Ember {
function merge(original: any, updates: any): any;
function meta(obj: any, writable?: boolean): {};
function metaPath(obj: any, path: string, writable?: boolean): any;
function mixin(obj: any, ...any): any;
function mixin(obj: any, ...args: any[]): any;
/**
Ember.none is deprecated. Please use Ember.isNone instead.
**/
var none: typeof deprecateFunc;
function normalizeTuple(target: any, path: string): any[];
function observer(func: Function, ...string): Function;
function observer(func: Function, ...args: string[]): Function;
function observersFor(obj: any, path: string): any[];
function onLoad(name: string, callback: Function): void;
function oneWay(obj: any, to: string, from: string): Binding;
@@ -2119,18 +2122,18 @@ declare module Ember {
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;
join(target: any, method: Function, ...args: any[]): any;
join(target: any, method: string, ...args: any[]): any;
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;
once(target: any, method: string, ...any): number;
schedule(queue: string, target: any, method: Function, ...any): void;
schedule(queue: string, target: any, method: string, ...any): void;
scheduleOnce(queue: string, target: any, method: Function, ...any): void;
scheduleOnce(queue: string, target: any, method: string, ...any): void;
next(target: any, method: Function, ...args: any[]): number;
next(target: any, method: string, ...args: any[]): number;
once(target: any, method: Function, ...args: any[]): number;
once(target: any, method: string, ...args: any[]): number;
schedule(queue: string, target: any, method: Function, ...args: any[]): void;
schedule(queue: string, target: any, method: string, ...args: any[]): void;
scheduleOnce(queue: string, target: any, method: Function, ...args: any[]): void;
scheduleOnce(queue: string, target: any, method: string, ...args: any[]): void;
sync(): void;
throttle(target: any, method: Function, ...args: any[]): void;
throttle(target: any, method: string, ...args: any[]): void;
+69
View File
@@ -0,0 +1,69 @@
/// <reference path="emscripten.d.ts" />
/// Module
function ModuleTest(): void {
Module.print = function(text) { alert('stdout: ' + text) };
var int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)
var myTypedArray = new Uint8Array(10);
var buf = Module._malloc(myTypedArray.length*myTypedArray.BYTES_PER_ELEMENT);
Module.HEAPU8.set(myTypedArray, buf);
Module.ccall('my_function', 'number', ['number'], [buf]);
Module._free(buf);
}
/// FS
function FSTest(): void {
FS.mkdir('/working');
FS.mount(NODEFS, { root: '.' }, '/working');
function myAppStartup(): void {
FS.mkdir('/data');
FS.mount(IDBFS, {}, '/data');
FS.syncfs(true, function (err) {
// handle callback
});
}
function myAppShutdown() {
FS.syncfs(function (err) {
// handle callback
});
}
var id = FS.makedev(64, 0);
FS.registerDevice(id, {});
FS.mkdev('/dummy', id);
FS.writeFile('file', 'foobar');
FS.symlink('file', 'link');
FS.writeFile('/foobar.txt', 'Hello, world');
FS.unlink('/foobar.txt');
FS.writeFile('file', 'foobar');
FS.symlink('file', 'link');
FS.writeFile('forbidden', 'can\'t touch this');
FS.chmod('forbidden', 0000);
FS.writeFile('file', 'foobar');
FS.truncate('file', 3);
var stream = FS.open('abinaryfile', 'r');
var buf = new Uint8Array(4);
FS.read(stream, buf, 0, 4, 0);
FS.close(stream);
var data = new Uint8Array(32);
var stream = FS.open('dummy', 'w+');
FS.write(stream, data, 0, data.length, 0);
FS.close(stream);
var lookup = FS.lookupPath("path", { parent: true });
}
+185
View File
@@ -0,0 +1,185 @@
// Type definitions for Emscripten
// Project: http://kripken.github.io/emscripten-site/index.html
// Definitions by: Kensuke Matsuzaki <https://github.com/zakki>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module Emscripten {
interface FileSystemType {
}
}
declare module Module {
function print(str: string): void;
function printErr(str: string): void;
var arguments: string[];
var preInit: { (): void }[];
var preRun: { (): void }[];
var postRun: { (): void }[];
var noExitRuntime: boolean;
var Runtime: any;
function ccall(ident: string, returnType: string, argTypes: string[], args: any[]): any;
function cwrap(ident: string, returnType: string, argTypes: string[]): any;
function setValue(ptr: number, value: any, type: string, noSafe: boolean): void;
function getValue(ptr: number, type: string, noSafe: boolean): any;
var ALLOC_NORMAL: number;
var ALLOC_STACK: number;
var ALLOC_STATIC: number;
var ALLOC_DYNAMIC: number;
var ALLOC_NONE: number;
function allocate(slab: any, types: string, allocator: number, ptr: number): number;
function allocate(slab: any, types: string[], allocator: number, ptr: number): number;
function Pointer_stringify(ptr: number, length?: number): string;
function UTF16ToString(ptr: number): string;
function stringToUTF16(str: string, outPtr: number): void;
function UTF32ToString(ptr: number): string;
function stringToUTF32(str: string, outPtr: number): void;
// USE_TYPED_ARRAYS == 1
var HEAP: Int32Array;
var IHEAP: Int32Array;
var FHEAP: Float64Array;
// USE_TYPED_ARRAYS == 2
var HEAP8: Int8Array;
var HEAP16: Int16Array;
var HEAP32: Int32Array;
var HEAPU8: Uint8Array;
var HEAPU16: Uint16Array;
var HEAPU32: Uint32Array;
var HEAPF32: Float32Array;
var HEAPF64: Float64Array;
var TOTAL_STACK: number;
var TOTAL_MEMORY: number;
var FAST_MEMORY: number;
function addOnPreRun(cb: () => any): void;
function addOnInit(cb: () => any): void;
function addOnPreMain(cb: () => any): void;
function addOnExit(cb: () => any): void;
function addOnPostRun(cb: () => any): void;
// Tools
function intArrayFromString(stringy: string, dontAddNull?: boolean, length?: number): number[];
function intArrayToString(array: number[]): string;
function writeStringToMemory(str: string, buffer: number, dontAddNull: boolean): void;
function writeArrayToMemory(array: number[], buffer: number): void;
function writeAsciiToMemory(str: string, buffer: number, dontAddNull: boolean): void;
function addRunDependency(id: any): void;
function removeRunDependency(id: any): void;
var preloadedImages: any;
var preloadedAudios: any;
function _malloc(size: number): number;
function _free(ptr: number): void;
}
declare module FS {
interface Lookup {
path: string;
node: FSNode;
}
interface FSStream {}
interface FSNode {}
interface ErrnoError {}
var ignorePermissions: boolean;
var trackingDelegate: any;
var tracking: any;
var genericErrors: any;
//
// paths
//
function lookupPath(path: string, opts: any): Lookup;
function getPath(node: FSNode): string;
//
// nodes
//
function isFile(mode: number): boolean;
function isDir(mode: number): boolean;
function isLink(mode: number): boolean;
function isChrdev(mode: number): boolean;
function isBlkdev(mode: number): boolean;
function isFIFO(mode: number): boolean;
function isSocket(mode: number): boolean;
//
// devices
//
function major(dev: number): number;
function minor(dev: number): number;
function makedev(ma: number, mi: number): number;
function registerDevice(dev: number, ops: any): void;
//
// core
//
function syncfs(populate: boolean, callback: (e: any) => any): void;
function syncfs( callback: (e: any) => any, populate?: boolean): void;
function mount(type: Emscripten.FileSystemType, opts: any, mountpoint: string): any;
function unmount(mountpoint: string): void;
function mkdir(path: string, mode?: number): any;
function mkdev(path: string, mode?: number, dev?: number): any;
function symlink(oldpath: string, newpath: string): any;
function rename(old_path: string, new_path: string): void;
function rmdir(path: string): void;
function readdir(path: string): any;
function unlink(path: string): void;
function readlink(path: string): string;
function stat(path: string, dontFollow?: boolean): any;
function lstat(path: string): any;
function chmod(path: string, mode: number, dontFollow?: boolean): void;
function lchmod(path: string, mode: number): void;
function fchmod(fd: number, mode: number): void;
function chown(path: string, uid: number, gid: number, dontFollow?: boolean): void;
function lchown(path: string, uid: number, gid: number): void;
function fchown(fd: number, uid: number, gid: number): void;
function truncate(path: string, len: number): void;
function ftruncate(fd: number, len: number): void;
function utime(path: string, atime: number, mtime: number): void;
function open(path: string, flags: string, mode?: number, fd_start?: number, fd_end?: number): FSStream;
function close(stream: FSStream): void;
function llseek(stream: FSStream, offset: number, whence: number): any;
function read(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number): number;
function write(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position?: number, canOwn?: boolean): number;
function allocate(stream: FSStream, offset: number, length: number): void;
function mmap(stream: FSStream, buffer: ArrayBufferView, offset: number, length: number, position: number, prot: number, flags: number): any;
function ioctl(stream: FSStream, cmd: any, arg: any): any;
function readFile(path: string, opts?: {encoding: string; flags: string}): any;
function writeFile(path: string, data: ArrayBufferView, opts?: {encoding: string; flags: string}): void;
function writeFile(path: string, data: string, opts?: {encoding: string; flags: string}): void;
//
// module-level FS code
//
function cwd(): string;
function chdir(path: string): void;
function init(input: () => number, output: (c: number) => any, error: (c: number) => any): void;
function createLazyFile(parent: string, name: string, url: string, canRead: boolean, canWrite: boolean): FSNode;
function createLazyFile(parent: FSNode, name: string, url: string, canRead: boolean, canWrite: boolean): FSNode;
function createPreloadedFile(parent: string, name: string, url: string, canRead: boolean, canWrite: boolean, onload?: ()=> void, onerror?: ()=>void, dontCreateFile?:boolean, canOwn?: boolean): void;
function createPreloadedFile(parent: FSNode, name: string, url: string, canRead: boolean, canWrite: boolean, onload?: ()=> void, onerror?: ()=>void, dontCreateFile?:boolean, canOwn?: boolean): void;
}
declare var MEMFS: Emscripten.FileSystemType;
declare var NODEFS: Emscripten.FileSystemType;
declare var IDBFS: Emscripten.FileSystemType;
interface Math {
imul(a: number, b: number): number;
}
+26
View File
@@ -0,0 +1,26 @@
/// <reference path="hapi.d.ts" />
import Hapi = require('hapi');
// Create a server with a host and port
var server = Hapi.createServer('localhost', 8000);
// Add the route
server.route({
method: 'GET',
path: '/hello',
handler: function (request: Hapi.Request, reply: Function) {
reply('hello world');
}
});
server.route([{
method: 'GET',
path: '/hello2',
handler: function (request: Hapi.Request, reply: Function) {
reply('hello world2');
}
}]);
// Start the server
server.start();
+457
View File
@@ -0,0 +1,457 @@
// Type definitions for hapi
// Project: http://github.com/spumko/hapi
// Definitions by: Hakubo <http://github.com/hakubo>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module Hapi {
export interface ServerOptions {
app?: any;
// cache?: string;
// cache?: {
// engine: any;
// };
cache?: any;
// cors?: boolean;
// cors?: {
// origin?: Array<string>;
// isOriginExposed?: boolean;
// matchOrigin?: boolean;
// maxAge?: number;
// headers?: Array<string>;
// additionalHeaders?: Array<string>;
// methods?: Array<string>;
// additionalMethods?: Array<string>;
// exposedHeaders?: Array<string>;
// additionalExposedHeaders?: Array<string>;
// credentials?: boolean;
// };
cors?: any;
// security?: boolean;
// security?: {
// hsts?: boolean;
// hsts?: {
// maxAge: number;
// includeSubdomains: boolean;
// };
// xframe?: boolean;
// xframe?: string;
// xframe?: {
// rule: string;
// source: any;
// };
// xss?: boolean;
// noOpen?: boolean;
// noSniff?: boolean;
// };
security?: any;
debug?: {
request: Array<string>;
};
files?: {
relativeTo: string;
etagsCacheMaxSize: number;
};
json?: {
// replacer?: () => void;
// replacer?: Array<() => void>;
replacer?: any;
space?: number;
};
labels?: Array<string>;
load?: {
maxHeapUsedBytes?: number;
maxRssBytes?: number;
maxEventLoopDelay?: number;
sampleInterval?: number;
};
location?: string;
payload?: {
maxBytes: number;
uploads: string;
};
plugins?: any;
router?: {
isCaseSensitive?: boolean;
stripTrailingSlash?: boolean;
};
state?: {
cookies: {
parse?: boolean;
failAction?: string;
clearInvalid?: boolean;
strictHeader?: boolean;
}
};
timeout?: {
// server?: boolean;
// server?: number;
server?: any;
// client?: boolean;
// client?: number;
client?: any;
// socket?: boolean;
// socket?: number;
socket?: any;
};
tls?: any; //This should be Node.tls
maxSockets?: number;
validation?: any;
views?: ServerView;
}
export class Pack {
require(name: string, options: {}, callback: Function): void;
}
export interface ServerView {
engines: {
[extension: string]: string;
module?: string;
// compile: (
// template: string,
// options: any
// ) => void;
// compile: (
// template: string,
// options: any,
// callback: (
// err: any,
// compiled: (
// context: any,
// options: any,
// callback: (
// err: any,
// rendered: boolean
// ) => void
// ) => void
// ) => void
// ) => void;
compile?: any;
};
defaultExtension?: string;
path?: string;
partialsPath?: string;
helpersPath?: string;
basePath?: string;
layout?: boolean;
layoutPath?: string;
layoutKeyword?: string;
encoding?: string;
isCached?: boolean;
allowAbsolutePaths?: boolean;
allowInsecureAccess?: boolean;
compileOptions?: any;
runtimeOptions?: any;
contentType?: string;
compileMode?: string;
}
export interface RouteOptions {
path: string;
method: string;
// vhost?: string;
// vhost?: Array<string>;
vhost?: any;
// handler: string;
// handler: (request: Request, reply: Function) => void;
// handler: {
// file: string;
// file: (request: Request) => void;
// file: {
// path: string;
// filename?: string;
// mode?: boolean;
// mode?: string;
// lookupCompressed: boolean;
// };
// directory: {
// path: string;
// path: Array<string>;
// path: (request: Request) => string;
// path: (request: Request) => Array<string>;
// index?: boolean;
// listing?: boolean;
// showHidden?: boolean;
// redirectToSlash?: boolean;
// lookupCompressed?: boolean;
// defaultExtension?: string;
// };
// proxy?: {
// host?: string;
// port?: number;
// protocol?: string;
// uri?: string;
// passThrough?: boolean;
// rejectUnauthorized?: boolean;
// xforward?: boolean;
// redirects?: boolean;
// redirects?: number;
// timeout?: number;
//
// mapUri?: (request: Request, callback: (err: any, uri: string, headers: {[key: string]: string}) => void) => void;
// onResponse: (
// err: any,
// res: any,//Node Response
// req: any,//Node Request
// reply: () => void,
// settings: any,
// ttl: number
// ) => void;
// ttl: number;
// };
// view: string;
// view: {
// template: string;
// context: {
// payload: any;
// params: any;
// query: any;
// pre: any;
// }
// };
// config: {
// handler: any;
// bind: any;
// app: any;
// plugins: {
// [name: string]: any;
// };
// pre: Array<() => void>;
// validate: {
// headers: any;
// params: any;
// query: any;
// payload: any;
// errorFields?: any;
// failAction?: string;
// failAction?: (source: string, error: any, next: () => void) => void;
// };
// payload: {
// output: {
// data: any;
// stream: any;
// file: any;
// };
// parse?: any;
// allow?: string;
// allow?: Array<string>;
// override?: string;
// maxBytes?: number;
// uploads?: number;
// failAction?: string;
// };
// response: {
// schema: any;
// sample: number;
// failAction: string;
// };
// cache: {
// privacy: string;
// expiresIn: number;
// expiresAt: number;
// };
// auth: string;
// auth: boolean;
// auth: {
// mode: string;
// strategies: Array<string>;
// payload?: boolean;
// payload?: string;
// tos?: boolean;
// tos?: string;
// scope?: string;
// scope?: Array<string>;
// entity: string;
// };
// cors?: boolean;
// jsonp?: string;
// description?: string;
// notes?: string;
// notes?: Array<string>;
// tags?: Array<string>;
// }
// };
handler: any;
}
export class Server {
app: any;
methods: Array<() => void>;
info: {
port: number;
host?: string;
protocol?: string;
uri?: string;
};
listener: any;// Node Http server
load: {
eventLoopDelay: number;
heapUsed: number;
rss: number;
};
pack: Pack;
plugins: {
[pluginName: string]: any;
};
start(callback?: () => void): void;
stop(options?: {timeout: number;}, callback?: () => void): void;
route(options: RouteOptions): void;
route(routes: Array<RouteOptions>): void;
table(host?: string): Array<RouteOptions>;
log(tags: string, data?: string, timestamp?: number): void;
log(tags: Array<string>, data?: string, timestamp?: number): void;
log(tags: string, data?: any, timestamp?: number): void;
log(tags: Array<string>, data?: any, timestamp?: number): void;
state(name: string, options?: {
ttl: number;
isSecure: boolean;
isHttpOnly: boolean;
path: string;
domain: string;
autoValue: (request: Request, next: (err: any, value: any) => void) => void;
encoding?: string;
sign: any;
password: string;
iron: any;
}): void;
views(options: ServerView): void;
cache(name: string, options: {
expiresIn: number;
expiresAt: number;
staleIn: number;
staleTimeout: number;
cache: string;
}): void;
auth: {
scheme(name: string, scheme: {
name: string;
scheme: (server: Server, options: any) => (authenticate: any, payload: any, response: any) => void;
}): void;
strategy: any;
};
ext(event: any, method: string, options?: any): void;
method(method: Array<{name: string; fn: () => void; options: any}>): void;
method(name: string, fn: () => void, options: any): void;
inject(options: any, callback: any): void;
handler(name: string, method: (name: string, options: any) => void): void;
}
export interface Request {
app: any;
auth: {
isAuthenticated: boolean;
credentials: Object;
artifacts: Object;
session: Object
};
domain: any;
headers: Object;
id: number;
info: {
received: number;
remoteAddress: string;
remotePort: number;
referrer: string;
host: string;
};
method: string;
mime?: string;
params: any;
path: string;
payload: any;
plugins: Object;
pre: Object;
response: Object;
responses: Object;
query: Object;
raw: {
req: any; //http.ClientRequest
res: any; //http.ClientResponse
};
route: string;
server: Server;
session: any;
state: Object;
url: Object;
setUrl? (url: string): void;
setMethod? (method: string): void;
log (tags: string, data?: string, timestamp?: number): void;
log (tags: string, data?: Object, timestamp?: number): void;
log (tags: string[], data?: string, timestamp?: number): void;
log (tags: string[], data?: Object, timestamp?: number): void;
getLog(): string[];
getLog(tag: string): string[];
getLog(tags: string[]): string[];
tail(name?: string): Function;
}
export interface Response {
statusCode: number;
headers: Object;
source: any;
variety: string;
app: any;
plugins: Object;
settings: {
encoding: string;
charset: string;
location: string;
ttl: number;
stringify: any;
passThrough: boolean;
}
code (statusCode: number): void;
header (name: string, value: string, options?: {
append: boolean;
separator: string;
override: boolean;
}): void;
type (mimeType: string): void;
bytes (length: number): void;
vary (header: string): void;
location (location: string): void;
created (location: string): void;
redirect (location: string): void;
encoding (encoding: string): void;
charset (charset: string): void;
ttl (ttl: number): void;
state (name: string, value: string, options?: any): void;
unstate (name: string): void;
replacer (method: Function): void;
replacer (method: Array<Function>): void;
spaces (count: number): void;
temporary (isTemporary: boolean): void;
permanent (isPermanent: boolean): void;
rewritable (isRewritable: boolean): void;
}
export module reply {
function file(path: string, options: {
filePath: string;
options: {
filename: string;
mode: string
}
}): void;
function view(template: string, context?: Object, options?: Object): Response;
function close(options?: Object): void;
function proxy(options: Object): void;
export function reply(result: any): any;
}
export function createServer (host: string, port: number, options?: ServerOptions): Server;
}
declare module "hapi" {
export = Hapi;
}
+45 -15
View File
@@ -1,13 +1,13 @@
// Type definitions for History.js
// Project: https://github.com/balupton/History.js
// Definitions by: Boris Yankov <https://github.com/borisyankov/>
// Type definitions for History.js 1.8.0
// Project: https://github.com/browserstate/history.js
// Definitions by: Boris Yankov <https://github.com/borisyankov/>, Gidon Junge <https://github.com/gjunge/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface HistoryAdapter {
bind(element, event, callback);
trigger(element, event);
onDomLoad(callback);
bind(element: any, event: string, callback: () => void);
trigger(element: any, event: string);
onDomLoad(callback: () => void);
}
// Since History is defined in lib.d.ts as well
@@ -17,15 +17,45 @@ interface HistoryAdapter {
// var Historyjs: Historyjs = <any>History;
interface Historyjs {
enabled: boolean;
pushState(data, title, url);
replaceState(data, title, url);
getState();
getHash();
pushState(data: any, title: string, url: string);
replaceState(data: any, title: string, url: string);
getState(): HistoryState;
getStateByIndex(index: number): HistoryState;
getCurrentIndex(): number;
getHash(): string;
Adapter: HistoryAdapter;
back();
forward();
go(X);
log(...messages: any[]);
debug(...messages: any[]);
back(): void;
forward(): void;
go(x: Number): void;
log(...messages: any[]): void;
debug(...messages: any[]): void;
options: HistoryOptions;
}
interface HistoryState {
data?: any;
title?: string;
url: string;
}
interface HistoryOptions {
hashChangeInterval?: number;
safariPollInterval?: number;
doubleCheckInterval?: number;
disableSuid?: boolean;
storeInterval?: number;
busyDelay?: number;
debug?: boolean;
initialTitle?: string;
html4Mode?: boolean;
delayInit?: number;
}
@@ -0,0 +1,28 @@
/// <reference path="../jquery/jquery.d.ts" />
/// <reference path="jquery-handsontable.d.ts" />
var data = [
["", "Maserati", "Mazda", "Mercedes", "Mini", "Mitsubishi"],
["2009", 0, 2941, 4303, 354, 5814],
["2010", 5, 2905, 2867, 412, 5284],
["2011", 4, 2517, 4822, 552, 6127],
["2012", 2, 2422, 5399, 776, 4151]
];
var div = $('div');
$('body').append(div);
div.handsontable({
data: data,
minSpareRows: 1,
colHeaders: true,
contextMenu: true
});
var instance: Handsontable.Context = div.handsontable('getInstance');
for (var i = 1; i < instance.countCols(); i++) {
for (var j = 1; j < instance.countRows(); j++) {
var value = parseInt(instance.getDataAtCell(j, i)) * 2;
instance.setDataAtCell(j, i, value);
}
}
+950
View File
@@ -0,0 +1,950 @@
// Type definitions for jquery-handsontable
// Project: http://handsontable.com
// Definitions by: Ted John <https://github.com/intelorca>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../jquery/jquery.d.ts"/>
declare module Handsontable {
interface CellPosition {
row: number;
col: number;
}
interface Options {
/**
* Initial data source that will be bound to the data grid by reference (editing data grid alters the data source. See Understanding binding as reference.
*/
data?: any;
/**
* Width of the grid. Can be a number or a function that returns a number.
*/
width?: any;
/**
* Height of the grid. Can be a number or a function that returns a number.
*/
height?: any;
/**
* Minimum number of rows. At least that many of rows will be created during initialization.
*/
minRows?: number;
/**
* Minimum number of columns. At least that many of columns will be created during initialization.
*/
minCols?: number;
/**
* Maximum number of rows.
*/
maxRows?: number;
/**
* Maximum number of columns.
*/
maxCols?: number;
/**
* Initial number of rows. Notice: This option only has effect in Handsontable constructor and only if data option is not provided.
*/
startRows?: number;
/**
* Initial number of rows. Notice: This option only has effect in Handsontable constructor and only if data option is not provided.
*/
startCols?: number;
/**
* Setting true or false will enable or disable the default row headers (1, 2, 3). You can also define an array ['One', 'Two', 'Three', ...] or a function to define the headers. If a function is set the index of the rowis passed as a parameter.
*/
rowHeaders?: any;
/**
* Setting true or false will enable or disable the default column headers (A, B, C). You can also define an array ['One', 'Two', 'Three', ...] or a function to define the headers. If a function is set the index of the column is passed as a parameter.
*/
colHeaders?: any;
/**
* Defines column widths in pixels. Accepts number, string (that will be converted to number), array of numbers (if you want to define column width separately for each column) or a function (if you want to set column width dynamically on each render).
*/
colWidths?: any;
/**
* Defines the cell properties and data binding for certain columns. Notice: Using this option sets a fixed number of columns (options startCols, minCols, maxCols will be ignored).
* @see https://github.com/handsontable/jquery-handsontable/wiki/Options below for more detailed explanation.
* @see http://handsontable.com/demo/datasources.html for examples
*/
columns?: any[];
/**
* Defines the cell properties for given row, col, prop coordinates.
* See Cells section below for more detailed explanation.
*/
cells?: (row: number, col: number, prop: string) => void;
/**
* Defines the structure of a new row when data source is an object.
* @see http://handsontable.com/demo/datasources.html for examples.
*/
dataSchema?: any;
/**
* When set to 1 (or more), Handsontable will add a new row at the end of grid if there are no more empty rows.
*/
minSpareRows?: number;
/**
* When set to 1 (or more), Handsontable will add a new column at the end of grid if there are no more empty columns.
*/
minSpareCols?: number;
/**
* If true, selection of multiple cells using keyboard or mouse is allowed.
*/
multiSelect?: boolean;
/**
* Enables the fill handle (drag-down and copy-down) functionality, which shows the small rectangle in bottom right corner of the selected area, that let's you expand values to the adjacent cells.
* Possible values: true (to enable in all directions), "vertical" or "horizontal" (to enable in one direction), false (to disable completely). Setting to true enables the fillHandle plugin, which,
*/
fillHandle?: any;
/**
* Defines if the right-click context menu should be enabled. Context menu allows to create new row or column at any place in the grid.
* Possible values: true (to enable basic options), false (to disable completely) or array of any available strings: ["row_above", "row_below", "col_left", "col_right", "remove_row", "remove_col", "undo", "redo", "sep1", "sep2", "sep3"].
* @see http://handsontable.com/demo/contextmenu.html for examples.
*/
contextMenu?: any;
/**
* If true, undo/redo functionality is enabled.
*/
undo?: boolean;
/**
* If true, mouse click outside the grid will deselect the current selection.
*/
outsideClickDeselects?: boolean;
/**
* If true, ENTER begins editing mode (like Google Docs). If false, ENTER moves to next row (like Excel) and adds new row if necessary. TAB adds new column if necessary.
*/
enterBeginsEditing?: boolean;
/**
* Defines cursor move after ENTER is pressed (SHIFT+ENTER uses negative vector). Can be an object or a function that returns an object. The event argument passed to the function is a jQuery.Event object received after a ENTER key has been pressed. This event object can be used to check whether user pressed ENTER or SHIFT + ENTER.
*/
enterMoves?: any;
/**
* Defines cursor move after TAB is pressed (SHIFT+TAB uses negative vector). Can be an object or a function that returns an object. The event argument passed to the function is a jQuery.Event object received after a TAB key has been pressed. This event object can be used to check whether user pressed TAB or SHIFT + TAB.
*/
tabMoves?: any;
/**
* If true, pressing TAB or right arrow in the last column will move to first column in next row.
*/
autoWrapRow?: boolean;
/**
* If true, pressing ENTER or down arrow in the last row will move to first row in next column.
*/
autoWrapCol?: boolean;
/**
* Autocomplete definitions.
* @see demo/autocomplete.html for examples and definitions.
*/
autoComplete?: any[];
/**
* Maximum number of rows than can be copied to clipboard using CTRL+C.
*/
copyRowsLimit?: number;
/**
* Maximum number of columns than can be copied to clipboard using CTRL+C.
*/
copyColsLimit?: number;
/**
* Defines paste (CTRL+V) behavior. Default value "overwrite" will paste clipboard value over current selection.
* When set to "shift_down", clipboard data will be pasted in place of current selection, while all selected cells are moved down.
* When set to "shift_right", clipboard data will be pasted in place of current selection, while all selected cells are moved right.
*/
pasteMode?: string;
/**
* Column stretching mode. Possible values: "none", "last", "all".
*/
stretchH?: string;
/**
* Lets you overwrite the default isEmptyRow method.
*/
isEmptyRow?: (row: number) => boolean;
/**
* Lets you overwrite the default isEmptyCol method.
*/
isEmptyCol?: (col: number) => boolean;
/**
* Turn on Manual column resize, if set to a boolean or define initial column resized widths, if set to an array of numbers.
*/
manualColumnResize?: any;
/**
* Turn on Manual column move, if set to a boolean or define initial column order, if set to an array of column indexes.
*/
manualColumnMove?: any;
/**
* Turn on Column sorting.
*/
columnSorting?: boolean;
/**
* Turn on saving the state of column sorting, columns positions and columns sizes in local storage. For more information see How to save data localy.
*/
persistentState?: boolean;
/**
* Class name for all visible rows in current selection.
*/
currentRowClassName?: string;
/**
* Class name for all visible columns in current selection.
*/
currentColClassName?: string;
/**
* Allows to specify the number of rows fixed (aka freezed) on the top of the table.
*/
fixedRowsTop?: number;
/**
* Allows to specify the number of columns fixed (aka freezed) on the left side of the table.
*/
fixedColumnsLeft?: number;
/**
* Setting to true enables selecting just a fragment of the text within a single cell or between adjacent cells.
*/
fragmentSelection?: boolean;
/**
* Setting to true word wrapping of the cell text content that does not fit in the fixed column width.
*/
wordWrap?: boolean;
/**
* CSS class name cells configured with wordWrap: false.
*/
noWordWrapClassName?: string;
/**
* When set to an non-empty string, displayed as the cell content for empty cells.
*/
placeholder?: any;
/**
* CSS class name for cells that have a placeholder in use.
*/
placeholderCellClassName?: string;
/**
* CSS class name for cells that did not pass validation.
*/
invalidCellClassName?: string;
/**
* CSS class name for read-only cells.
*/
readOnlyCellClassName?: string;
/**
* Setting to true enables the debug mode, currently used to test the correctness of the row and column header fixed positioning on a layer above the master table.
*/
debug?: boolean;
/**
* When set to true, the table is rerendered when it is detected that it was made visible in DOM.
*/
observeDOMVisibility?: boolean;
/**
* Setting to true enables the autoColumnSize plugin, which makes sure each column gets enough space to show its content.
*/
autoColumnSize?: boolean;
/**
* Setting to true enables the observeChanges plugin, which automatically renders the table when a change in the data source is observed.
*/
observeChanges?: boolean;
/**
* Setting to true enables the manualRowResize plugin, which allows to resize the row height with your mouse.
*/
manualRowResize?: boolean;
/**
* Setting to true enables the copyPaste plugin, which enables the copying and pasting to the clipboard.
*/
copyPaste?: boolean;
/**
* Setting to true enables the search plugin (see demo).
*/
search?: boolean;
/**
* Setting to true or array enables the mergeCells plugin, which enables the merging of the cells. (see demo). You can provide the merged cells on the pageload if you feed the mergeCells option with an array.
*/
mergeCells?: any;
/**
* Callback fired before Walkontable instance is initiated.
*/
beforeInitWalkontable?: Function;
/**
* Callback fired before Handsontable instance is initiated.
* Note: this can be set only by global PluginHooks instance.
*/
beforeInit?: Function;
/**
* Callback fired before Handsontable table is rendered. Parameters:
* - isForced is true if rendering was triggered by a change of settings or data; or false if rendering was triggered by scrolling or moving selection.
*/
beforeRender?: (isForced: boolean) => void;
/**
* Callback fired before one or more cells is changed. Its main purpose is to alter changes silently before input. Parameters:
* - changes is a 2D array containing information about each of the edited cells [ [row, prop, oldVal, newVal], ... ].
* - To disregard a single change, set changes[i] to null or remove it from array using changes.splice(i, 1).
* - To alter a single change, overwrite the desired value to changes[i][3].
* - To cancel all edit, return false from the callback or set array length to 0 (changes.length = 0).
* - source is the name of a source of changes.
*/
beforeChange?: (changes: any[][], source: string) => void;
beforeChangeRender?: Function;
/**
* Callback fired before sorting the table. The column argument is a relative (displayed) index of a column that is about to be sorted. To get the absolute column index, just add the current column offset. You can get the offset by using colOffset() method.
*/
beforeColumnSort?: (column: number, order: boolean) => void;
/**
* Callback fired before setting single value from the data source array.
*/
beforeSet?: (v: Object) => void;
/**
* Callback fired before getting cell settings.
*/
beforeGetCellMeta?: (row: number, col: number, cellProperties: Object) => void;
/**
* Parameters:
* - start is an object containing information about first filled cell: { row : 2, col : 0 }.
* - end is an object containing information about last filled cell: { row : 4, col : 1 }.
* - data is an 2D array containing information about fill pattern: [ ["1", "Ted"], ["1", "John"] ].
*/
beforeAutofill?: (start: CellPosition, end: CellPosition, data: string[][]) => void;
/**
* Callback fired before keydown event is handled. It can be used to overwrite default key bindings. Caution - in your beforeKeyDown handler you need to call event.stopImmediatePropagation() to prevent default key behavior.
*/
beforeKeyDown?: (event: KeyboardEvent) => void;
/**
* A plugin hook executed before validator function, only if validator function is defined. This can be used to manipulate value of changed cell before it is applied to the validator function. NOTICE: this will not affect values of changes. This will change value ONLY for validation!
*/
beforeValidate?: (value: any, row: number, prop: string, source: string) => void;
/**
* Callback fired after Handsontable instance is initiated.
*/
afterInit?: Function;
/**
* Callback fired after new data is loaded (by loadData method) into the data source array.
*/
afterLoadData?: Function;
/**
* Callback fired after Handsontable table is rendered. Parameters:
* - isForced is true if rendering was triggered by a change of settings or data; or false if rendering was triggered by scrolling or moving selection.
*/
afterRender?: (isForced: boolean) => void;
/**
* Callback fired after one or more cells is changed. Its main use case is to save the input. Parameters:
* - changes is a 2D array containing information about each of the edited cells [ [row, prop, oldVal, newVal], ... ].
* - source is one of the strings: "alter", "empty", "edit", "populateFromArray", "loadData", "autofill", "paste".
* Note: for performance reasons, the changes array is null for "loadData" source.
*/
afterChange?: (changes: any[], source: string) => void;
/**
* Callback fired after sorting the table. The column argument is a relative (displayed) index of a column that is about to be sorted. To get the absolute column index, just add the current column offset. You can get the offset by using colOffset() method.
*/
afterColumnSort?: (column: number, order: boolean) => void;
/**
* Callback fired while one or more cells are being selected (on mouse move). Parameters:
* - r selection start row
* - c selection start column
* - r2 selection end row
* - c2 selection end column
*/
afterSelection?: (r: number, c: number, r2: number, c2: number) => void;
/**
* The same as above, but data source object property name is used instead of the column number.
*/
afterSelectionByProp?: (r: number, p: string, r2: number, p2: string) => void;
/**
* Callback fired while one or more cells are being selected (on mouse up). Parameters:
* - r selection start row
* - c selection start column
* - r2 selection end row
* - c2 selection end column
*/
afterSelectionEnd?: (r: number, c: number, r2: number, c2: number) => void;
/**
* The same as above, but data source object property name is used instead of the column number.
*/
afterSelectionEndByProp?: (r: number, p: string, r2: number, p2: string) => void;
/**
* Event called when current cell is deselected.
*/
afterDeselect?: Function;
/**
* Callback fired after getting cell settings.
*/
afterGetCellMeta?: (row: number, col: number, cellProperties: Object) => void;
/**
* Callback fired after getting info about column header.
*/
afterGetColHeader?: (col: number, TH: HTMLTableHeaderCellElement) => void;
/**
* Callback fired after calculating column width.
*/
afterGetColWidth?: (col: number, response: Object) => void;
/**
* Callback fired after destroing Handsontable instance.
*/
afterDestroy?: Function;
/**
* Callback is fired when a new row is created. Parameters:
* - index represents the index of first newly created row in the data source array.
* - amount number of newly created rows in the data source array.
*/
afterCreateRow?: (index: number, amount: number) => void;
/**
* Callback is fired when a new column is created. Parameters:
* - index represents the index of first newly created column in the data source array.
* - amount number of newly created columns in the data source array.
*/
afterCreateCol?: (index: number, amount: number) => void;
/**
* Callback is fired when one or more rows are about to be removed. Parameters:
* - index is an index of starter row.
* - amount is an anount of rows to be removed.
*/
beforeRemoveRow?: (index: number, amount: number) => void;
/**
* Callback is fired when one or more rows are removed. Parameters:
* - index is an index of starter row.
* - amount is an anount of removed rows.
*/
afterRemoveRow?: (index: number, amount: number) => void;
/**
* Callback is fired when one or more columns are about to be removed. Parameters:
* - index is an index of starter column.
* - amount is an anount of columns to be removed.
*/
beforeRemoveCol?: (index: number, amount: number) => void;
/**
* Callback is fired when one or more columns are removed. Parameters:
* - index is an index of starter column.
* - amount is an anount of removed columns.
*/
afterRemoveCol?: (index: number, amount: number) => void;
/**
* Callback is fired after changing column size.
*/
afterColumnResize?: (col: number, size: number) => void;
/**
* Callback is fired after changing column placement.
*/
afterColumnMove?: (oldIndex: number, newIndex: number) => void;
/**
* Callback fired if copyRowsLimit or copyColumnsLimit was reached.
*/
afterCopyLimit?: (selectedRowsCount: number, selectedColsCount: number, copyRowsLimit: number, copyColsLimit: number) => void;
/**
* A plugin hook executed after validator function, only if validator function is defined. Validation result is the first parameter. This can be used to determinate if validation passed successfully or not. You can cancel current change by returning false.
*/
afterValidate?: (isValid: boolean, value: any, row: number, prop: string, source: string) => boolean;
/**
* Callback fired before setting range is ended. Parameters:
* - coords is WalkontableCellCoords array
*/
beforeSetRangeEnd?: (coords: any[]) => void;
afterUpdateSettings?: Function;
afterRenderer?: (TD: HTMLTableDataCellElement, row: number, col: number, prop: string, value: string, cellProperties: Object) => void;
/**
* Callback fired after clicking on a cell or row/column header.
* In case the row/column header was clicked, the index is negative. For example clicking on the row header of cell (0, 0) results with afterOnCellMouseDown called with coords {row: 0, col: -1}.
*/
afterOnCellMouseDown?: (event: MouseEvent, coords: CellPosition, TD: HTMLTableDataCellElement) => void;
/**
* Callback fired after hovering a cell or row/column header with the mouse cursor.
* In case the row/column header was hovered, the index is negative. For example clicking on the row header of cell (0, 0) results with afterOnCellMouseOver called with coords {row: 0, col: -1}.
*/
afterOnCellMouseOver?: (event: MouseEvent, coords: CellPosition, TD: HTMLTableDataCellElement) => void;
/**
* Callback fired after.
*/
afterOnCellCornerMouseDown?: (event: MouseEvent) => void;
afterScrollVertically?: Function;
afterScrollHorizontally?: Function;
/**
* Callback fired after reset cell's meta.
*/
afterCellMetaReset?: Function;
/**
* Callback fired after modify column's width.
*/
modifyColWidth?: (width: number, col: number) => void;
/**
* Callback fired after modify hight of row.
*/
modifyRowHeight?: (height: number, row: number) => void;
/**
* Callback fired after row modify.
*/
modifyRow?: (row: number) => void;
/**
* Callback fired after column modify.
*/
modifyCol?: (col: number) => void;
afterSetCellMeta?: Function;
/**
* Deprecated! Now event is called afterSelection.
*/
onSelection?: (r: number, p: number, r2: number, p2: number) => void;
/**
* Deprecated! Now event is called afterSelectionByProp.
*/
onSelectionByProp?: (r: number, p: number, r2: number, p2: number) => void;
/**
* Deprecated! Now event is called afterSelectionEnd.
*/
onSelectionEnd?: (r: number, p: number, r2: number, p2: number) => void;
/**
* Deprecated! Now event is called afterSelectionEndByProp.
*/
onSelectionEndByProp?: (r: number, p: number, r2: number, p2: number) => void;
/**
* Deprecated! Now event is called beforeChange.
*/
onBeforeChange?: (changes: any[], source: string) => void;
/**
* Deprecated! Now event is called afterChange.
*/
onChange?: (changes: any[], source: string) => void;
/**
* Deprecated! Now event is called afterCopyLimit.
*/
onCopyLimit?: (selectedRowsCount: number, selectedColsCount: number, copyRowsLimit: number, copyColsLimit: number) => void;
}
interface Context {
/**
* Use it if you need to change configuration after initialization.
*/
updateSettings(options: Options): void;
/**
* Returns an object containing the current grid settings.
*/
getSettings(): Options;
/**
* Reset all cells in the grid to contain data from the data array.
*/
loadData(data: any[]): void;
/**
* Listen to keyboard input on document body.
*/
listen(): void;
/**
* Returns rederer type/
*/
getCellRenderer(row: number, col: number): string;
/**
* Stop listening to keyboard input on document body.
*/
unlisten(): void;
/**
* Returns true if current Handsontable instance is listening to keyboard input on document body.
*/
isListening(): boolean;
/**
* Rerender the table.
*/
render(): void;
/**
* Remove grid from DOM.
*/
destroy(): void;
/**
* Validates all cells using their validator functions and calls callback when finished. Does not render the view.
*/
validateCells(callback: Function): void;
/**
* Return the current data object (the same that was passed by data configuration option or loadData method). Optionally you can provide cell range row, col, row2, col2 to get only a fragment of grid data
*/
getData(): any;
/**
* Return the current data object (the same that was passed by data configuration option or loadData method). Optionally you can provide cell range row, col, row2, col2 to get only a fragment of grid data
*/
getData(row: number, col: number, row2: number, col2: number): any;
/**
* Return cell value at row, col. row and col are the visible indexes (note that if columns were reordered or sorted, the current order will be used).
*/
getDataAtCell(row: number, col: number): any;
/**
* Same as getDataAtCell, except instead of col, you provide name of the object property (e.g. 'first.name').
*/
getDataAtRowProp(row: number, prop: string): any;
/**
* Returns a single row of the data (array or object, depending on what you have). row is the visible index of the row
*/
getDataAtRow(row: number): any;
/**
* Returns a single row of the data (array or object, depending on what you have). row is the index of the row in the data source.
*/
getSourceDataAtRow(row: number): any;
/**
* Returns array of column values from the data source. col is the visible index of the column.
*/
getDataAtCol(col: number): any[];
/**
* Returns array of column values from the data source. col is the index of the row in the data source.
*/
getSourceDataAtCol(col: number): any[];
/**
* Given the object property name (e.g. 'first.name'), returns array of column values from the data source.
*/
getDataAtProp(prop: string): any[];
/**
* Get value of selected range. Each column is separated by tab, each row is separated by new line character.
*/
getCopyableData(startRow: number, startCol: number, endRow: number, endCol: number): any;
/**
* Returns value of selected cell.
*/
getValue(): any;
/**
* Set new value to a cell. To change many cells at once, pass an array of changes in format [ [row, col, value], ... ] as the only parameter. col is the index of visible column (note that if columns were reordered, the current order will be used). source is a flag for before/afterChange events. If you pass only array of changes then source could be set as second parameter.
*/
setDataAtCell(row: number, col: number, value: any, source?: string): void;
/**
* Set new value to a cell. To change many cells at once, pass an array of changes in format [ [row, col, value], ... ] as the only parameter. col is the index of visible column (note that if columns were reordered, the current order will be used). source is a flag for before/afterChange events. If you pass only array of changes then source could be set as second parameter.
*/
setDataAtCell(changes: any[], source?: string): void;
/**
* Same as above, except instead of col, you provide name of the object property (e.g. [0, 'first.name', 'Jennifer']).
*/
setDataAtRowProp(row: number, prop: string, value: any, source?: string): void;
/**
* Same as above, except instead of col, you provide name of the object property (e.g. [0, 'first.name', 'Jennifer']).
*/
setDataAtRowProp(changes: any[], source?: string): void;
/**
* Populate cells at position with 2D input array (e.g. [ [1, 2], [3, 4] ]).
* Use endRow, endCol when you want to cut input when certain row is reached.
* @param source (default value "populateFromArray") is used to identify this call in the resulting events (beforeChange, afterChange).
* @param populateMethod (default value "overwrite", possible values "shift_down" and "shift_right") has the same effect as pasteMethod option (see Options page).
*/
populateFromArray(row: number, col: number, input: any[], endRow: number, endCol: number, source?: string, populateMethod?: string): void;
/**
* Adds/removes data from the column. This function works is modelled after Array.splice. Parameter col is the index of column in which do you want to do splice. Parameter index is the row index at which to start changing the array. If negative, will begin that many elements from the end. Parameter amount, is the number of old array elements to remove. If the amount is 0, no elements are removed. Fourth and further parameters are the elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.
*/
spliceCol(col: number, index: number, amount: number, ...elements: any[]): void;
/**
* Adds/removes data from the row. This function works is modelled after Array.splice. Parameter row is the index of row in which do you want to do splice. Parameter index is the column index at which to start changing the array. If negative, will begin that many elements from the end. Parameter amount, is the number of old array elements to remove. If the amount is 0, no elements are removed. Fourth and further parameters are the elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.
*/
spliceRow(row: number, index: number, amount: number, ...elements: any[]): void;
/**
* Insert new row(s) above the row at given index. If index is null or undefined, the new row will be added after the current last row. Default amount equals 1.
*/
alter(type: 'insert_row', index: number, amount?: number, source?: string): void;
/**
* Insert new column(s) before the column at given index. If index is null or undefined, the new column will be added after the current last column. Default amount equals 1.
*/
alter(type: 'insert_col', index: number, amount?: number, source?: string): void;
/**
* Remove the row(s) at given index. Default amount equals 1.
*/
alter(type: 'remove_row', index: number, amount?: number, source?: string): void;
/**
* Remove the column(s) at given index. Default amount equals 1.
*/
alter(type: 'remove_col', index: number, amount?: number, source?: string): void;
alter(type: string, index: number, amount?: number, source?: string): void;
/**
* Returns TD element for given row, col if it is rendered on screen.
* Returns null if the TD is not rendered on screen (probably because that part of table is not visible).
*/
getCell(row: number, col: number): any;
/**
* Return cell properties for given row, col coordinates.
*/
getCellMeta(row: number, col: number): any;
/**
* Sets cell meta data object key corresponding to params row, col.
*/
setCellMeta(row: number, col: number, key: string, val: string): void;
/**
* Destroys current editor, renders and selects current cell. If revertOriginal == false, edited data is saved. Otherwise previous value is restored.
*/
destroyEditor(revertOriginal?: boolean): void;
/**
* Select cell row, col or range finishing at row2, col2. By default, viewport will be scrolled to selection.
*/
selectCell(row: number, col: number, row2: number, col2: number, scrollToSelection?: boolean): void;
/**
* Deselect current selection.
*/
deselectCell(): void;
/**
* Return index of the currently selected cells as an array [startRow, startCol, endRow, endCol]. Start row and start col are the coordinates of the active cell (where the selection was started).
*/
getSelected(): void;
/**
* Returns current selection as a WalkontableCellRange object. Returns undefined if there is no selection.
*/
getSelectedRange(): void;
/**
* Clears grid.
*/
clear(): void;
/**
* Returns total number of rows in the grid.
*/
countRows(): number;
/**
* Returns total number of columns in the grid.
*/
countCols(): number;
/**
* Returns property name that corresponds with the given column index.
*/
colToProp(column: number): string;
/**
* Returns index of first visible row.
*/
rowOffset(): number;
/**
* Returns index of first visible column.
*/
colOffset(): number;
/**
* Returns number of visible rows.
*/
countVisibleRows(): number;
/**
* Returns number of visible columns.
*/
countVisibleCols(): number;
/**
* Returns number of empty rows. If the optional ending parameter is true, returns number of empty rows at the bottom of the table.
*/
countEmptyRows(ending?: boolean): number;
/**
* Returns number of empty columns.If the optional ending parameter is true, returns number of empty columns at right hand edge of the table.
*/
countEmptyCols(ending?: boolean): number;
/**
* Returns true if the row at the given index is empty, false otherwise.
*/
isEmptyRow(row: number): boolean;
/**
* Returns true if the column at the given index is empty, false otherwise.
*/
isEmptyCol(col: number): boolean;
/**
* Returns array of row headers (if they are enabled). If param row given, return header at given row as string.
*/
getRowHeader(row: number): any;
/**
* Returns array of col headers (if they are enabled). If param col given, return header at given col as string.
*/
getColHeader(col: number): any;
/**
* Returns information of this table is configured to display row headers.
*/
hasRowHeaders(): boolean;
/**
* Returns information of this table is configured to display column headers.
*/
hasColHeaders(): boolean;
/**
* Return column width.
*/
getColWidth(col: number): number;
/**
* Return row height.
*/
getRowHeight(row: number): number;
/**
* Returns column index that corresponds with the given property.
*/
propToCol(property: string): number;
/**
* Clear undo history.
*/
clearUndo(): void;
/**
* Return true if undo can be performed, false otherwise.
*/
isUndoAvailable(): boolean;
/**
* Return true if redo can be performed, false otherwise.
*/
isRedoAvailable(): boolean;
/**
* Undo last edit.
*/
undo(): void;
/**
* Redo edit (used to reverse an undo).
*/
redo(): void;
/**
* Sorts table content by cell values in given column, using order. column is a zero-based column index. Order of sorting can be either ascending (order = true) or descending (order = false).
* Note I: This method is only available when coulmnSorting plugin is enabled. See column sorting demo for details.
* Note II: Running this method will not alter the table data. Sorting takes place only in view layer.
*/
sort(column: number, order: boolean): void;
}
}
interface JQuery {
handsontable(): JQuery;
handsontable(methodName: string, ...arguments: any[]): any;
handsontable(options: Handsontable.Options): JQuery;
}
+35 -35
View File
@@ -1,35 +1,35 @@
/// <reference path="jquery.pjax.d.ts" />
/// <reference path="../jquery/jquery.d.ts" />
function test_pjax() {
$.pjax();
}
function test_pjax_selector() {
$('a').pjax();
}
function test_pjax_option() {
$.pjax({
area: 'body',
load: {
head: 'base, meta, link',
css: true,
script: true
},
cache: { click: true, submit: false, popstate: true },
server: { query: null }
});
}
function test_pjax_event() {
$.pjax({
wait: 1000
});
$(document).bind('pjax.request', function () {
$('div.loading').fadeIn(100);
});
$(document).bind('pjax.render', function () {
$('div.loading').fadeOut(500);
});
}
/// <reference path="jquery.pjax.d.ts" />
/// <reference path="../jquery/jquery.d.ts" />
function test_pjax() {
$.pjax();
}
function test_pjax_selector() {
$('a').pjax();
}
function test_pjax_option() {
$.pjax({
area: 'body',
load: {
head: 'base, meta, link',
css: true,
script: true
},
cache: { click: true, submit: false, popstate: true },
server: { query: null }
});
}
function test_pjax_event() {
$.pjax({
wait: 1000
});
$(document).bind('pjax.request', function () {
$('div.loading').fadeIn(100);
});
$(document).bind('pjax.render', function () {
$('div.loading').fadeOut(500);
});
}
+188 -188
View File
@@ -1,189 +1,189 @@
// Type definitions for jquery.pjax.ts by falsandtru
// Project: https://github.com/falsandtru/jquery.pjax.js/
// Definitions by: 新ゝ月 NewNotMoon <http://new.not-moon.net/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../jquery/jquery.d.ts" />
interface PjaxSetting {
gns?: string;
ns?: string;
area?: any; // string, array, function( event, param, origUrl, destUrl )
link?: string;
filter?: any; // string, function()
form?: string;
scope?: Object;
state?: any; // any, function(event, param, origUrl, destUrl )
scrollTop?: any; // number, function( event, param, origUrl, destUrl ), null, false
scrollLeft?: any; // number, function( event, param, origUrl, destUrl ), null, false
scroll?: {
delay?: number;
record?: boolean //internal
queue?: number[] //internal
};
ajax?: JQueryAjaxSettings;
contentType?: string;
load?: {
head?: string;
css?: boolean;
script?: boolean;
execute?: boolean;
reload?: string;
ignore?: string;
sync?: boolean;
ajax?: JQueryAjaxSettings;
rewrite?: (element: any) => any;
redirect?: boolean;
};
interval?: number;
cache?: {
click?: boolean;
submit?: boolean;
popstate?: boolean;
get?: boolean;
post?: boolean;
page?: boolean;
size?: number;
mix?: number;
expires?: {
min?: number;
max?: number;
};
};
wait?: any; // number, function( event, param, origUrl, destUrl ): number
fallback?: any; // boolean, function( event, param, origUrl, destUrl ): boolean
fix?: {
location?: boolean;
history?: boolean;
scroll?: boolean;
reset?: boolean;
};
database?: boolean;
server?: {
query?: any; // string, object
header?: {
area?: boolean;
head?: boolean;
css?: boolean;
script?: boolean;
};
};
callback?: (event: JQueryEventObject, param: any) => any;
callbacks?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
ajax?: {
xhr?: (event: JQueryEventObject, param: any) => any;
beforeSend?: (event: JQueryEventObject, param: any, data: any, ajaxSettings: any) => any;
dataFilter?: (event: JQueryEventObject, param: any, data: any, dataType: any) => any;
success?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
error?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string, errorThrown: any) => any;
complete?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string) => any;
done?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
fail?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string, errorThrown: any) => any;
always?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string) => any;
};
update?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
cache?: {
before?: (event: JQueryEventObject, param: any, cache: any) => any;
after?: (event: JQueryEventObject, param: any, cache: any) => any;
};
redirect?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
url?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
title?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
head?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
content?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
scroll?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
css?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
script?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
render?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
verify?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
success?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
error?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
complete?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
param?: any;
// internal
uuid?: string;
nss?: {
name?: string;
event?: string[];
click?: string;
submit?: string;
popstate?: string;
scroll?: string;
data?: string;
class4html?: string;
requestHeader?: string;
};
origLocation?: HTMLAnchorElement;
destLocation?: HTMLAnchorElement;
retry?: boolean;
speedcheck?: boolean;
disable?: boolean;
option?: any;
};
}
interface JQueryStatic {
pjax: {
(setting?: PjaxSetting): any;
enable(): any;
disable(): any;
click(url: string, attr: { href?: string; }): any;
click(url: HTMLAnchorElement, attr: { href?: string; }): any;
click(url: JQuery, attr: { href?: string; }): any;
click(url: any, attr: { href?: string; }): any;
submit(url: string, attr: { action?: string; method?: string; }, data: any): any;
submit(url: HTMLFormElement, attr?: { action?: string; method?: string; }, data?: any): any;
submit(url: JQuery, attr?: { action?: string; method?: string; }, data?: any): any;
submit(url: any, attr?: { action?: string; method?: string; }, data?: any): any;
follow(event: JQueryEventObject, ajax: JQueryXHR, timeStamp?: number): boolean;
setCache(): any;
setCache(url: string): any;
setCache(url: string, data: string): any;
setCache(url: string, data: string, textStatus: string, XMLHttpRequest: XMLHttpRequest): any;
getCache(): any;
getCache(url: string): any;
removeCache(url: string): any;
removeCache(): any;
clearCache(): any;
};
}
interface JQuery {
pjax(setting?: PjaxSetting): any;
// Type definitions for jquery.pjax.ts by falsandtru
// Project: https://github.com/falsandtru/jquery.pjax.js/
// Definitions by: 新ゝ月 NewNotMoon <http://new.not-moon.net/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../jquery/jquery.d.ts" />
interface PjaxSetting {
gns?: string;
ns?: string;
area?: any; // string, array, function( event, param, origUrl, destUrl )
link?: string;
filter?: any; // string, function()
form?: string;
scope?: Object;
state?: any; // any, function(event, param, origUrl, destUrl )
scrollTop?: any; // number, function( event, param, origUrl, destUrl ), null, false
scrollLeft?: any; // number, function( event, param, origUrl, destUrl ), null, false
scroll?: {
delay?: number;
record?: boolean //internal
queue?: number[] //internal
};
ajax?: JQueryAjaxSettings;
contentType?: string;
load?: {
head?: string;
css?: boolean;
script?: boolean;
execute?: boolean;
reload?: string;
ignore?: string;
sync?: boolean;
ajax?: JQueryAjaxSettings;
rewrite?: (element: any) => any;
redirect?: boolean;
};
interval?: number;
cache?: {
click?: boolean;
submit?: boolean;
popstate?: boolean;
get?: boolean;
post?: boolean;
page?: boolean;
size?: number;
mix?: number;
expires?: {
min?: number;
max?: number;
};
};
wait?: any; // number, function( event, param, origUrl, destUrl ): number
fallback?: any; // boolean, function( event, param, origUrl, destUrl ): boolean
fix?: {
location?: boolean;
history?: boolean;
scroll?: boolean;
reset?: boolean;
};
database?: boolean;
server?: {
query?: any; // string, object
header?: {
area?: boolean;
head?: boolean;
css?: boolean;
script?: boolean;
};
};
callback?: (event: JQueryEventObject, param: any) => any;
callbacks?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
ajax?: {
xhr?: (event: JQueryEventObject, param: any) => any;
beforeSend?: (event: JQueryEventObject, param: any, data: any, ajaxSettings: any) => any;
dataFilter?: (event: JQueryEventObject, param: any, data: any, dataType: any) => any;
success?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
error?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string, errorThrown: any) => any;
complete?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string) => any;
done?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
fail?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string, errorThrown: any) => any;
always?: (event: JQueryEventObject, param: any, XMLHttpRequest: XMLHttpRequest, textStatus: string) => any;
};
update?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
cache?: {
before?: (event: JQueryEventObject, param: any, cache: any) => any;
after?: (event: JQueryEventObject, param: any, cache: any) => any;
};
redirect?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
url?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
title?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
head?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
content?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
scroll?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
css?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
script?: {
before?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
after?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
render?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
verify?: {
before?: (event: JQueryEventObject, param: any) => any;
after?: (event: JQueryEventObject, param: any) => any;
};
success?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
error?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
complete?: (event: JQueryEventObject, param: any, data: any, textStatus: string, XMLHttpRequest: XMLHttpRequest) => any;
};
param?: any;
// internal
uuid?: string;
nss?: {
name?: string;
event?: string[];
click?: string;
submit?: string;
popstate?: string;
scroll?: string;
data?: string;
class4html?: string;
requestHeader?: string;
};
origLocation?: HTMLAnchorElement;
destLocation?: HTMLAnchorElement;
retry?: boolean;
speedcheck?: boolean;
disable?: boolean;
option?: any;
};
}
interface JQueryStatic {
pjax: {
(setting?: PjaxSetting): any;
enable(): any;
disable(): any;
click(url: string, attr: { href?: string; }): any;
click(url: HTMLAnchorElement, attr: { href?: string; }): any;
click(url: JQuery, attr: { href?: string; }): any;
click(url: any, attr: { href?: string; }): any;
submit(url: string, attr: { action?: string; method?: string; }, data: any): any;
submit(url: HTMLFormElement, attr?: { action?: string; method?: string; }, data?: any): any;
submit(url: JQuery, attr?: { action?: string; method?: string; }, data?: any): any;
submit(url: any, attr?: { action?: string; method?: string; }, data?: any): any;
follow(event: JQueryEventObject, ajax: JQueryXHR, timeStamp?: number): boolean;
setCache(): any;
setCache(url: string): any;
setCache(url: string, data: string): any;
setCache(url: string, data: string, textStatus: string, XMLHttpRequest: XMLHttpRequest): any;
getCache(): any;
getCache(url: string): any;
removeCache(url: string): any;
removeCache(): any;
clearCache(): any;
};
}
interface JQuery {
pjax(setting?: PjaxSetting): any;
}
+9 -9
View File
@@ -1,9 +1,9 @@
/// <reference path="js-url.d.ts" />
url();
url('domain');
url(1);
url('domain', 'test.www.example.com/path/here');
url(-1, 'test.www.example.com/path/here');
/// <reference path="js-url.d.ts" />
url();
url('domain');
url(1);
url('domain', 'test.www.example.com/path/here');
url(-1, 'test.www.example.com/path/here');
+9
View File
@@ -0,0 +1,9 @@
/// <reference path="md5.d.ts" />
var hash: string;
hash = CybozuLabs.MD5.calc("abc");
hash = CybozuLabs.MD5.calc("abc", CybozuLabs.MD5.BY_ASCII);
hash = CybozuLabs.MD5.calc("abc", CybozuLabs.MD5.BY_UTF16);
var version: string;
version = CybozuLabs.MD5.VERSION;
+11
View File
@@ -0,0 +1,11 @@
// Type definitions for CybozuLabs.MD5
// Project: http://labs.cybozu.co.jp/blog/mitsunari/2007/07/md5js_1.html
// Definitions by: MIZUNE Pine <https://github.com/pine613>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module CybozuLabs.MD5 {
var VERSION: string;
var BY_ASCII: number;
var BY_UTF16: number;
function calc(str: string, option?: number): string;
}
+15
View File
@@ -0,0 +1,15 @@
/////////////////////////////////////////////////////////////
// https://github.com/chandlerprall/Physijs/tree/master/examples
//////////////////////////////////////////////////////////////
/// <reference path="./tests/body.ts" />
/// <reference path="./tests/collisions.ts" />
/// <reference path="./tests/compound.ts" />
/// <reference path="./tests/constraints_car.ts" />
/// <reference path="./tests/heightfield.ts" />
/// <reference path="./tests/jenga.ts" />
/// <reference path="./tests/memorytest.ts" />
/// <reference path="./tests/memorytest-compound.ts" />
/// <reference path="./tests/memorytest-convex.ts" />
/// <reference path="./tests/shapes.ts" />
/// <reference path="./tests/vehicle.ts" />
+2
View File
@@ -0,0 +1,2 @@
""
+250
View File
@@ -0,0 +1,250 @@
// Type definitions for Physijs
// Project: http://chandlerprall.github.io/Physijs/
// Definitions by: Satoru Kimura <https://github.com/gyohk>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../threejs/three.d.ts" />
declare module Physijs {
export function noConflict():Object;
export function createMaterial(material: THREE.Material, friction?: number, restitution?: number): Material;
export interface Material extends THREE.Material{
_physijs: {
id: number;
friction: number;
restriction: number
};
}
export interface Constraint {
getDefinition(): any;
}
export interface PointConstraintDefinition {
type: string;
id: number;
objecta: THREE.Object3D;
objectb: THREE.Object3D;
positiona: THREE.Vector3;
positionb: THREE.Vector3;
}
export class PointConstraint implements Constraint {
constructor(objecta: THREE.Object3D, objectb: THREE.Object3D, position?: THREE.Vector3);
getDefinition(): PointConstraintDefinition;
}
export interface HingeConstraintDefinition {
type: string;
id: number;
objecta: THREE.Object3D;
objectb: THREE.Object3D;
positiona: THREE.Vector3;
positionb: THREE.Vector3;
axis: THREE.Vector3;
}
export class HingeConstraint implements Constraint {
constructor(objecta: THREE.Object3D, objectb: THREE.Object3D, position: THREE.Vector3, axis?: THREE.Vector3);
getDefinition(): HingeConstraintDefinition;
setLimits( low: number, high: number, bias_factor: number, relaxation_factor: number ): void;
enableAngularMotor( velocity: number, acceleration: number ): void;
disableMotor(): void;
}
export interface SliderConstraintDefinition {
type: string;
id: number;
objecta: THREE.Object3D;
objectb: THREE.Object3D;
positiona: THREE.Vector3;
positionb: THREE.Vector3;
axis: THREE.Vector3;
}
export class SliderConstraint implements Constraint {
constructor(objecta: THREE.Object3D, objectb: THREE.Object3D, position: THREE.Vector3, axis?: THREE.Vector3);
getDefinition(): SliderConstraintDefinition;
setLimits( lin_lower: number, lin_upper: number, ang_lower: number, ang_upper: number ): void;
setRestitution( linear: number, angular: number ): void;
enableLinearMotor( velocity: number, acceleration: number): void;
disableLinearMotor(): void;
enableAngularMotor( velocity: number, acceleration: number ): void;
disableAngularMotor(): void;
}
export interface ConeTwistConstraintDefinition {
type: string;
id: number;
objecta: THREE.Object3D;
objectb: THREE.Object3D;
positiona: THREE.Vector3;
positionb: THREE.Vector3;
axisa: THREE.Vector3;
axisb: THREE.Vector3;
}
export class ConeTwistConstraint implements Constraint {
constructor(objecta: THREE.Object3D, objectb: THREE.Object3D, position: THREE.Vector3);
getDefinition(): ConeTwistConstraintDefinition;
setLimit( x: number, y: number, z: number ): void;
enableMotor(): void;
setMaxMotorImpulse( max_impulse: number ): void;
setMotorTarget( target: THREE.Vector3 ): void;
setMotorTarget( target: THREE.Euler ): void;
setMotorTarget( target: THREE.Matrix4 ): void;
disableMotor(): void;
}
export interface DOFConstraintDefinition {
type: string;
id: number;
objecta: THREE.Object3D;
objectb: THREE.Object3D;
positiona: THREE.Vector3;
positionb: THREE.Vector3;
axisa: THREE.Vector3;
axisb: THREE.Vector3;
}
export class DOFConstraint implements Constraint {
constructor(objecta: THREE.Object3D, objectb: THREE.Object3D, position?: THREE.Vector3);
getDefinition(): DOFConstraintDefinition;
setLinearLowerLimit(limit: THREE.Vector3): void;
setLinearUpperLimit(limit: THREE.Vector3): void;
setAngularLowerLimit(limit: THREE.Vector3): void;
setAngularUpperLimit(limit: THREE.Vector3): void;
enableAngularMotor( which: number ): void;
configureAngularMotor( which: number, low_angle: number, high_angle: number, velocity: number, max_force: number ): void;
disableAngularMotor( which: number ): void;
}
export var scripts: {
worker: string;
ammo: string;
};
export interface SceneParameters {
ammo?: string;
fixedTimeStep?: number;
rateLimit?: boolean;
}
export class Scene extends THREE.Scene {
constructor(param?: SceneParameters);
addConstraint(constraint:Constraint, show_marker?:boolean):void;
onSimulationResume():void;
removeConstraint(constraint:Constraint):void;
execute(cmd:string, params:any):void;
add(object:THREE.Object3D):void;
remove(object:THREE.Object3D):void;
setFixedTimeStep(fixedTimeStep:number):void;
setGravity(gravity:number):void;
simulate(timeStep?:number, maxSubSteps?:number):boolean;
// Eventable mixins
addEventListener( event_name: string, callback: (event: any) => void ): void;
removeEventListener( event_name: string, callback: (event: any) => void): void;
dispatchEvent( event_name: string ): void;
// (extends from Object3D)
dispatchEvent( event: { type: string; target: any; } ): void;
}
export class Mesh extends THREE.Mesh {
constructor(geometry:THREE.Geometry, material?:THREE.Material, mass?:number);
applyCentralImpulse(force:THREE.Vector3):void;
applyImpulse(force:THREE.Vector3, offset:THREE.Vector3):void;
applyCentralForce(force:THREE.Vector3):void;
applyForce(force:THREE.Vector3, offset:THREE.Vector3):void;
getAngularVelocity():THREE.Vector3;
setAngularVelocity(velocity:THREE.Vector3):void;
getLinearVelocity():THREE.Vector3;
setLinearVelocity(velocity:THREE.Vector3):void;
setAngularFactor(factor:THREE.Vector3):void;
setLinearFactor(factor:THREE.Vector3):void;
setDamping(linear:number, angular:number):void;
setCcdMotionThreshold(threshold:number):void;
setCcdSweptSphereRadius(radius:number):void;
// Eventable mixins
addEventListener( event_name: string, callback: (event: any) => void ): void;
removeEventListener( event_name: string, callback: (event: any) => void): void;
dispatchEvent( event_name: string ): void;
// (extends from Object3D)
dispatchEvent( event: { type: string; target: any; } ): void;
}
export class PlaneMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class HeightfieldMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number, xdiv?:number, ydiv?:number);
}
export class BoxMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class SphereMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class CylinderMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class CapsuleMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class ConeMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class ConcaveMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class ConvexMesh extends Mesh {
constructor(geometry:THREE.Geometry, material:THREE.Material, mass?:number);
}
export class Vehicle {
constructor(mesh:Mesh, tuning?:VehicleTuning);
mesh:THREE.Mesh;
wheels:THREE.Mesh[];
addWheel(wheel_geometry:THREE.Geometry, wheel_material:THREE.Material, connection_point:THREE.Vector3, wheel_direction:THREE.Vector3, wheel_axle:THREE.Vector3, suspension_rest_length:number, wheel_radius:number, is_front_wheel:boolean, tuning?:VehicleTuning): void;
setSteering(amount: number, wheel?: THREE.Mesh): void;
setBrake(amount: number, wheel?: THREE.Mesh): void;
applyEngineForce(amount: number, wheel?: THREE.Mesh): void;
}
export class VehicleTuning {
constructor(suspension_stiffness?:number, suspension_compression?:number, suspension_damping?:number, max_suspension_travel?:number, friction_slip?:number, max_suspension_force?:number);
suspension_stiffness:number;
suspension_compression:number;
suspension_damping:number;
max_suspension_travel:number;
friction_slip:number;
max_suspension_force:number;
}
}
+160
View File
@@ -0,0 +1,160 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, applyForce, setMousePosition, mouse_position,
ground_material, box_material,
projector, renderer, render_stats, physics_stats, scene, ground, light, camera, box, boxes = [];
initScene = function() {
projector = new THREE.Projector;
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '1px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene();
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
applyForce();
scene.simulate( undefined, 1 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
box_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/plywood.jpg' ) }),
.4, // low friction
.6 // high restitution
);
box_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
box_material.map.repeat.set( .25, .25 );
// Ground
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
for ( var i = 0; i < 10; i++ ) {
box = new Physijs.BoxMesh(
new THREE.BoxGeometry( 4, 4, 4 ),
box_material
);
box.position.set(
Math.random() * 50 - 25,
10 + Math.random() * 5,
Math.random() * 50 - 25
);
box.rotation.set(
Math.random() * Math.PI * 2,
Math.random() * Math.PI * 2,
Math.random() * Math.PI * 2
);
box.scale.set(
Math.random() * 1 + .5,
Math.random() * 1 + .5,
Math.random() * 1 + .5
);
box.castShadow = true;
scene.add( box );
boxes.push( box );
}
renderer.domElement.addEventListener( 'mousemove', setMousePosition );
requestAnimationFrame( render );
scene.simulate();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
setMousePosition = function( evt ) {
// Find where mouse cursor intersects the ground plane
var vector = new THREE.Vector3(
( evt.clientX / renderer.domElement.clientWidth ) * 2 - 1,
-( ( evt.clientY / renderer.domElement.clientHeight ) * 2 - 1 ),
.5
);
projector.unprojectVector( vector, camera );
vector.sub( camera.position ).normalize();
var coefficient = (box.position.y - camera.position.y) / vector.y
mouse_position = camera.position.clone().add( vector.multiplyScalar( coefficient ) );
};
applyForce = function() {
if (!mouse_position) return;
var strength = 35, distance, effect, offset, box;
for ( var i = 0; i < boxes.length; i++ ) {
box = boxes[i];
distance = mouse_position.distanceTo( box.position ),
effect = mouse_position.clone().sub( box.position ).normalize().multiplyScalar( strength / distance ).negate(),
offset = mouse_position.clone().sub( box.position );
box.applyImpulse( effect, offset );
}
};
window.onload = initScene;
+171
View File
@@ -0,0 +1,171 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, _boxes = [], spawnBox,
renderer, render_stats, physics_stats, scene, ground_material, ground, light, camera;
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 1 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Ground
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.3 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
spawnBox();
requestAnimationFrame( render );
scene.simulate();
};
spawnBox = (function() {
var box_geometry = new THREE.BoxGeometry( 4, 4, 4 ),
handleCollision = function( collided_with, linearVelocity, angularVelocity ) {
var target = <any>this;
target.collisions = 0;
switch (++target.collisions) {
case 1:
target.material.color.setHex(0xcc8855);
break;
case 2:
target.material.color.setHex(0xbb9955);
break;
case 3:
target.material.color.setHex(0xaaaa55);
break;
case 4:
target.material.color.setHex(0x99bb55);
break;
case 5:
target.material.color.setHex(0x88cc55);
break;
case 6:
target.material.color.setHex(0x77dd55);
break;
}
},
createBox = function() {
var box, material;
material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/plywood.jpg' ) }),
.6, // medium friction
.3 // low restitution
);
material.map.wrapS = material.map.wrapT = THREE.RepeatWrapping;
material.map.repeat.set( .5, .5 );
//material = new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) });
box = new Physijs.BoxMesh(
box_geometry,
material
);
box.collisions = 0;
box.position.set(
Math.random() * 15 - 7.5,
25,
Math.random() * 15 - 7.5
);
box.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
box.castShadow = true;
box.addEventListener( 'collision', handleCollision );
box.addEventListener( 'ready', spawnBox );
scene.add( box );
};
return function() {
setTimeout( createBox, 1000 );
};
})();
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+238
View File
@@ -0,0 +1,238 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, renderer, render_stats, physics_stats, scene, ground, light, camera, spawnChair,
ground_material, chair_material;
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -50, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 2 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
chair_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/wood.jpg' ) }),
.6, // medium friction
.2 // low restitution
);
chair_material.map.wrapS = chair_material.map.wrapT = THREE.RepeatWrapping;
chair_material.map.repeat.set( .25, .25 );
// Ground
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);;
ground.receiveShadow = true;
scene.add( ground );
spawnChair();
requestAnimationFrame( render );
scene.simulate();
};
spawnChair = (function() {
var buildBack, buildLegs, doSpawn;
buildBack = function() {
var back, _object;
back = new Physijs.BoxMesh(
new THREE.BoxGeometry( 5, 1, .5 ),
chair_material
);
back.position.y = 5;
back.position.z = -2.5;
back.castShadow = true;
back.receiveShadow = true;
// rungs - relative to back
_object = new Physijs.BoxMesh(
new THREE.BoxGeometry( 1, 5, .5 ),
chair_material
);
_object.position.y = -3;
_object.position.x = -2;
_object.castShadow = true;
_object.receiveShadow = true;
back.add( _object );
_object = new Physijs.BoxMesh(
new THREE.BoxGeometry( 1, 5, .5 ),
chair_material
);
_object.position.y = -3;
_object.castShadow = true;
_object.receiveShadow = true;
back.add( _object );
_object = new Physijs.BoxMesh(
new THREE.BoxGeometry( 1, 5, .5 ),
chair_material
);
_object.position.y = -3;
_object.position.x = 2;
_object.castShadow = true;
_object.receiveShadow = true;
back.add( _object );
return back;
};
buildLegs = function() {
var leg, _leg;
// back left
leg = new Physijs.BoxMesh(
new THREE.BoxGeometry( .5, 4, .5 ),
chair_material
);
leg.position.x = 2.25;
leg.position.z = -2.25;
leg.position.y = -2.5;
leg.castShadow = true;
leg.receiveShadow = true;
// back right - relative to back left leg
_leg = new Physijs.BoxMesh(
new THREE.BoxGeometry( .5, 4, .5 ),
chair_material
);
_leg.position.x = -4.5;
_leg.castShadow = true;
_leg.receiveShadow = true;
leg.add( _leg );
// front left - relative to back left leg
_leg = new Physijs.BoxMesh(
new THREE.BoxGeometry( .5, 4, .5 ),
chair_material
);
_leg.position.z = 4.5;
_leg.castShadow = true;
_leg.receiveShadow = true;
leg.add( _leg );
// front right - relative to back left leg
_leg = new Physijs.BoxMesh(
new THREE.BoxGeometry( .5, 4, .5 ),
chair_material
);
_leg.position.x = -4.5;
_leg.position.z = 4.5;
_leg.castShadow = true;
_leg.receiveShadow = true;
leg.add( _leg );
return leg;
};
doSpawn = function() {
var chair, back, legs;
// seat of the chair
chair = new Physijs.BoxMesh(
new THREE.BoxGeometry( 5, 1, 5 ),
chair_material
);
chair.castShadow = true;
chair.receiveShadow = true;
// back - relative to chair ( seat )
back = buildBack();
chair.add( back );
// legs - relative to chair ( seat )
legs = buildLegs();
chair.add( legs );
chair.position.y = 20;
chair.position.x = Math.random() * 50 - 25;
chair.position.z = Math.random() * 50 - 25;
chair.rotation.set(
Math.random() * Math.PI * 2,
Math.random() * Math.PI * 2,
Math.random() * Math.PI * 2
);
chair.addEventListener( 'ready', spawnChair );
scene.add( chair );
};
return function() {
setTimeout( doSpawn, 500 );
};
})();
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+257
View File
@@ -0,0 +1,257 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render,
ground_material, car_material, wheel_material, wheel_geometry,
projector, renderer, render_stats, physics_stats, scene, ground_geometry, ground, light, camera,
car: any = {};
initScene = function() {
projector = new THREE.Projector;
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 2 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
// Ground
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
// Car
car_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ color: 0xff6666 }),
.8, // high friction
.2 // low restitution
);
wheel_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ color: 0x444444 }),
.8, // high friction
.5 // medium restitution
);
wheel_geometry = new THREE.CylinderGeometry( 2, 2, 1, 8 );
car.body = new Physijs.BoxMesh(
new THREE.BoxGeometry( 10, 5, 7 ),
car_material,
1000
);
car.body.position.y = 10;
car.body.receiveShadow = car.body.castShadow = true;
scene.add( car.body );
car.wheel_fl = new Physijs.CylinderMesh(
wheel_geometry,
wheel_material,
500
);
car.wheel_fl.rotation.x = Math.PI / 2;
car.wheel_fl.position.set( -3.5, 6.5, 5 );
car.wheel_fl.receiveShadow = car.wheel_fl.castShadow = true;
scene.add( car.wheel_fl );
car.wheel_fl_constraint = new Physijs.DOFConstraint(
car.wheel_fl, car.body, new THREE.Vector3( -3.5, 6.5, 5 )
);
scene.addConstraint( car.wheel_fl_constraint );
car.wheel_fl_constraint.setAngularLowerLimit({ x: 0, y: -Math.PI / 8, z: 1 });
car.wheel_fl_constraint.setAngularUpperLimit({ x: 0, y: Math.PI / 8, z: 0 });
car.wheel_fr = new Physijs.CylinderMesh(
wheel_geometry,
wheel_material,
500
);
car.wheel_fr.rotation.x = Math.PI / 2;
car.wheel_fr.position.set( -3.5, 6.5, -5 );
car.wheel_fr.receiveShadow = car.wheel_fr.castShadow = true;
scene.add( car.wheel_fr );
car.wheel_fr_constraint = new Physijs.DOFConstraint(
car.wheel_fr, car.body, new THREE.Vector3( -3.5, 6.5, -5 )
);
scene.addConstraint( car.wheel_fr_constraint );
car.wheel_fr_constraint.setAngularLowerLimit({ x: 0, y: -Math.PI / 8, z: 1 });
car.wheel_fr_constraint.setAngularUpperLimit({ x: 0, y: Math.PI / 8, z: 0 });
car.wheel_bl = new Physijs.CylinderMesh(
wheel_geometry,
wheel_material,
500
);
car.wheel_bl.rotation.x = Math.PI / 2;
car.wheel_bl.position.set( 3.5, 6.5, 5 );
car.wheel_bl.receiveShadow = car.wheel_bl.castShadow = true;
scene.add( car.wheel_bl );
car.wheel_bl_constraint = new Physijs.DOFConstraint(
car.wheel_bl, car.body, new THREE.Vector3( 3.5, 6.5, 5 )
);
scene.addConstraint( car.wheel_bl_constraint );
car.wheel_bl_constraint.setAngularLowerLimit({ x: 0, y: 0, z: 0 });
car.wheel_bl_constraint.setAngularUpperLimit({ x: 0, y: 0, z: 0 });
car.wheel_br = new Physijs.CylinderMesh(
wheel_geometry,
wheel_material,
500
);
car.wheel_br.rotation.x = Math.PI / 2;
car.wheel_br.position.set( 3.5, 6.5, -5 );
car.wheel_br.receiveShadow = car.wheel_br.castShadow = true;
scene.add( car.wheel_br );
car.wheel_br_constraint = new Physijs.DOFConstraint(
car.wheel_br, car.body, new THREE.Vector3( 3.5, 6.5, -5 )
);
scene.addConstraint( car.wheel_br_constraint );
car.wheel_br_constraint.setAngularLowerLimit({ x: 0, y: 0, z: 0 });
car.wheel_br_constraint.setAngularUpperLimit({ x: 0, y: 0, z: 0 });
document.addEventListener(
'keydown',
function( ev ) {
switch( ev.keyCode ) {
case 37:
// Left
car.wheel_fl_constraint.configureAngularMotor( 1, -Math.PI / 2, Math.PI / 2, 1, 200 );
car.wheel_fr_constraint.configureAngularMotor( 1, -Math.PI / 2, Math.PI / 2, 1, 200 );
car.wheel_fl_constraint.enableAngularMotor( 1 );
car.wheel_fr_constraint.enableAngularMotor( 1 );
break;
case 39:
// Right
car.wheel_fl_constraint.configureAngularMotor( 1, -Math.PI / 2, Math.PI / 2, -1, 200 );
car.wheel_fr_constraint.configureAngularMotor( 1, -Math.PI / 2, Math.PI / 2, -1, 200 );
car.wheel_fl_constraint.enableAngularMotor( 1 );
car.wheel_fr_constraint.enableAngularMotor( 1 );
break;
case 38:
// Up
car.wheel_bl_constraint.configureAngularMotor( 2, 1, 0, 5, 2000 );
car.wheel_br_constraint.configureAngularMotor( 2, 1, 0, 5, 2000 );
car.wheel_bl_constraint.enableAngularMotor( 2 );
car.wheel_br_constraint.enableAngularMotor( 2 );
break;
case 40:
// Down
car.wheel_bl_constraint.configureAngularMotor( 2, 1, 0, -5, 2000 );
car.wheel_br_constraint.configureAngularMotor( 2, 1, 0, -5, 2000 );
car.wheel_bl_constraint.enableAngularMotor( 2 );
//car.wheel_br_constraint.enableAngularMotor( 2 );
break;
}
}
);
document.addEventListener(
'keyup',
function( ev ) {
switch( ev.keyCode ) {
case 37:
// Left
car.wheel_fl_constraint.disableAngularMotor( 1 );
car.wheel_fr_constraint.disableAngularMotor( 1 );
break;
case 39:
// Right
car.wheel_fl_constraint.disableAngularMotor( 1 );
car.wheel_fr_constraint.disableAngularMotor( 1 );
break;
case 38:
// Up
car.wheel_bl_constraint.disableAngularMotor( 2 );
car.wheel_br_constraint.disableAngularMotor( 2 );
break;
case 40:
// Down
car.wheel_bl_constraint.disableAngularMotor( 2 );
car.wheel_br_constraint.disableAngularMotor( 2 );
break;
}
}
);
requestAnimationFrame( render );
scene.simulate();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+189
View File
@@ -0,0 +1,189 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
var TWEEN: any;
var SimplexNoise: any;
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, createShape, NoiseGen,
renderer, render_stats, physics_stats, scene, light, ground, ground_geometry, ground_material, camera;
initScene = function() {
TWEEN.start();
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene({ fixedTimeStep: 1 / 120 });
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 2 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/grass.png' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 2.5, 2.5 );
// Ground
NoiseGen = new SimplexNoise;
ground_geometry = new THREE.PlaneGeometry( 75, 75, 50, 50 );
for ( var i = 0; i < ground_geometry.vertices.length; i++ ) {
var vertex = ground_geometry.vertices[i];
vertex.z = NoiseGen.noise( vertex.x / 10, vertex.y / 10 ) * 2;
}
ground_geometry.computeFaceNormals();
ground_geometry.computeVertexNormals();
// If your plane is not square as far as face count then the HeightfieldMesh
// takes two more arguments at the end: # of x faces and # of y faces that were passed to THREE.PlaneMaterial
ground = new Physijs.HeightfieldMesh(
ground_geometry,
ground_material,
0, // mass
50,
50
);
ground.rotation.x = Math.PI / -2;
ground.receiveShadow = true;
scene.add( ground );
requestAnimationFrame( render );
scene.simulate();
createShape();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
createShape = (function() {
var addshapes = true,
shapes = 0,
box_geometry = new THREE.BoxGeometry( 3, 3, 3 ),
sphere_geometry = new THREE.SphereGeometry( 1.5, 32, 32 ),
cylinder_geometry = new THREE.CylinderGeometry( 2, 2, 1, 32 ),
cone_geometry = new THREE.CylinderGeometry( 0, 2, 4, 32 ),
octahedron_geometry = new THREE.OctahedronGeometry( 1.7, 1 ),
torus_geometry = new THREE.TorusKnotGeometry ( 1.7, .2, 32, 4 ),
doCreateShape;
setTimeout(
function addListener() {
var button = document.getElementById( 'stop' );
if ( button ) {
button.addEventListener( 'click', function() { addshapes = false; } );
} else {
setTimeout( addListener );
}
}
);
doCreateShape = function() {
var shape, material = new THREE.MeshLambertMaterial({ opacity: 0, transparent: true });
switch ( Math.floor(Math.random() * 2) ) {
case 0:
shape = new Physijs.BoxMesh(
box_geometry,
material
);
break;
case 1:
shape = new Physijs.SphereMesh(
sphere_geometry,
material,
undefined
);
break;
}
shape.material.color.setRGB( Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100 );
shape.castShadow = true;
shape.receiveShadow = true;
shape.position.set(
Math.random() * 30 - 15,
20,
Math.random() * 30 - 15
);
shape.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
if ( addshapes ) {
shape.addEventListener( 'ready', createShape );
}
scene.add( shape );
new TWEEN.Tween(shape.material).to({opacity: 1}, 500).start();
document.getElementById('shapecount').textContent = (++shapes) + ' shapes created';
};
return function() {
setTimeout( doCreateShape, 250 );
};
})();
window.onload = initScene;
+236
View File
@@ -0,0 +1,236 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, initEventHandling, render, createTower,
renderer, render_stats, physics_stats, scene, dir_light, am_light, camera,
table, blocks = [], table_material, block_material, intersect_plane, _i,
selected_block = null, mouse_pos = new THREE.Vector3(), block_offset = new THREE.Vector3(), _v3 = new THREE.Vector3();
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '1px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene({ fixedTimeStep: 1 / 120 });
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
if ( selected_block !== null ) {
_v3.copy( mouse_pos ).add( block_offset ).sub( selected_block.position ).multiplyScalar( 5 );
_v3.y = 0;
selected_block.setLinearVelocity( _v3 );
// Reactivate all of the blocks
_v3.set( 0, 0, 0 );
for ( _i = 0; _i < blocks.length; _i++ ) {
blocks[_i].applyCentralImpulse( _v3 );
}
}
scene.simulate( undefined, 1 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 25, 20, 25 );
camera.lookAt(new THREE.Vector3( 0, 7, 0 ));
scene.add( camera );
// ambient light
am_light = new THREE.AmbientLight( 0x444444 );
scene.add( am_light );
// directional light
dir_light = new THREE.DirectionalLight( 0xFFFFFF );
dir_light.position.set( 20, 30, -5 );
dir_light.target.position.copy( scene.position );
dir_light.castShadow = true;
dir_light.shadowCameraLeft = -30;
dir_light.shadowCameraTop = -30;
dir_light.shadowCameraRight = 30;
dir_light.shadowCameraBottom = 30;
dir_light.shadowCameraNear = 20;
dir_light.shadowCameraFar = 200;
dir_light.shadowBias = -.001
dir_light.shadowMapWidth = dir_light.shadowMapHeight = 2048;
dir_light.shadowDarkness = .5;
scene.add( dir_light );
// Materials
table_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/wood.jpg' ), ambient: 0xFFFFFF }),
.9, // high friction
.2 // low restitution
);
table_material.map.wrapS = table_material.map.wrapT = THREE.RepeatWrapping;
table_material.map.repeat.set( 5, 5 );
block_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/plywood.jpg' ), ambient: 0xFFFFFF }),
.4, // medium friction
.4 // medium restitution
);
block_material.map.wrapS = block_material.map.wrapT = THREE.RepeatWrapping;
block_material.map.repeat.set( 1, .5 );
// Table
table = new Physijs.BoxMesh(
new THREE.BoxGeometry(50, 1, 50),
table_material,
0
);
table.position.y = -.5;
table.receiveShadow = true;
scene.add( table );
createTower();
intersect_plane = new THREE.Mesh(
new THREE.PlaneGeometry( 150, 150 ),
new THREE.MeshBasicMaterial({ opacity: 0, transparent: true })
);
intersect_plane.rotation.x = Math.PI / -2;
scene.add( intersect_plane );
initEventHandling();
requestAnimationFrame( render );
scene.simulate();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
createTower = (function() {
var block_length = 6, block_height = 1, block_width = 1.5, block_offset = 2,
block_geometry = new THREE.BoxGeometry( block_length, block_height, block_width );
return function() {
var i, j, rows = 16,
block;
for ( i = 0; i < rows; i++ ) {
for ( j = 0; j < 3; j++ ) {
block = new Physijs.BoxMesh( block_geometry, block_material );
block.position.y = (block_height / 2) + block_height * i;
if ( i % 2 === 0 ) {
block.rotation.y = Math.PI / 2.01; // #TODO: There's a bug somewhere when this is to close to 2
block.position.x = block_offset * j - ( block_offset * 3 / 2 - block_offset / 2 );
} else {
block.position.z = block_offset * j - ( block_offset * 3 / 2 - block_offset / 2 );
}
block.receiveShadow = true;
block.castShadow = true;
scene.add( block );
blocks.push( block );
}
}
}
})();
initEventHandling = (function() {
var _vector = new THREE.Vector3,
projector = new THREE.Projector(),
handleMouseDown, handleMouseMove, handleMouseUp;
handleMouseDown = function( evt ) {
var ray, intersections;
_vector.set(
( evt.clientX / window.innerWidth ) * 2 - 1,
-( evt.clientY / window.innerHeight ) * 2 + 1,
1
);
projector.unprojectVector( _vector, camera );
ray = new THREE.Raycaster( camera.position, _vector.sub( camera.position ).normalize() );
intersections = ray.intersectObjects( blocks );
if ( intersections.length > 0 ) {
selected_block = intersections[0].object;
_vector.set( 0, 0, 0 );
selected_block.setAngularFactor( _vector );
selected_block.setAngularVelocity( _vector );
selected_block.setLinearFactor( _vector );
selected_block.setLinearVelocity( _vector );
mouse_pos.copy( intersections[0].point );
block_offset.subVectors( selected_block.position, mouse_pos );
intersect_plane.position.y = mouse_pos.y;
}
};
handleMouseMove = function( evt ) {
var ray, intersection,
i, scalar;
if ( selected_block !== null ) {
_vector.set(
( evt.clientX / window.innerWidth ) * 2 - 1,
-( evt.clientY / window.innerHeight ) * 2 + 1,
1
);
projector.unprojectVector( _vector, camera );
ray = new THREE.Raycaster( camera.position, _vector.sub( camera.position ).normalize() );
intersection = ray.intersectObject( intersect_plane );
mouse_pos.copy( intersection[0].point );
}
};
handleMouseUp = function( evt ) {
if ( selected_block !== null ) {
_vector.set( 1, 1, 1 );
selected_block.setAngularFactor( _vector );
selected_block.setLinearFactor( _vector );
selected_block = null;
}
};
return function() {
renderer.domElement.addEventListener( 'mousedown', handleMouseDown );
renderer.domElement.addEventListener( 'mousemove', handleMouseMove );
renderer.domElement.addEventListener( 'mouseup', handleMouseUp );
};
})();
window.onload = initScene;
+171
View File
@@ -0,0 +1,171 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, _boxes = [], spawnBox, inc_ready, renderer, render_stats, physics_stats, scene, ground_material, ground, light, camera;
var cubes = [];
var total_cubes = 0;
var total_ready = 0;
var max_on_screen = 100;
var spawn_per_tick = 25;
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 1 );
physics_stats.update();
while(cubes.length > max_on_screen) {
scene.remove(cubes[0]);
cubes[0].geometry.dispose();
cubes[0].material.dispose();
cubes.splice( 0, 1 );
}
document.getElementById( 'totalcubecount' ).textContent = ( total_cubes.toString() );
document.getElementById( 'currentcubecount' ).textContent = ( cubes.length.toString() );
document.getElementById( 'totalobjects' ).textContent = ( scene.__objects.length );
if(total_cubes > total_ready){
return;
}
for (var i=0;i<spawn_per_tick;i++) {
spawnBox();
}
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Ground
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.3 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
spawnBox();
requestAnimationFrame( render );
scene.simulate();
};
spawnBox = (function() {
var box_geometry = new THREE.BoxGeometry( 4, 4, 4 ),
createBox = function() {
var box, material, childBox;
total_cubes++;
material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ opacity: .9, transparent: true }),
.6, // medium friction
.3 // low restitution
);
material.color.setRGB(Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100);
box = new Physijs.BoxMesh(
box_geometry,
material
);
childBox = new Physijs.BoxMesh(
box_geometry,
material
);
childBox.collisions = 0;
box.collisions = 0;
box.add(childBox);
box.position.set(
Math.random() * 15 - 7.5,
25,
Math.random() * 15 - 7.5
);
box.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
box.castShadow = true;
box.addEventListener( 'ready', inc_ready );
cubes.push( box );
scene.add( box );
};
return function() {
createBox();
};
})();
inc_ready = function() {
total_ready++;
}
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+164
View File
@@ -0,0 +1,164 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, _boxes = [], spawnBox, inc_ready, renderer, render_stats, physics_stats, scene, ground_material, ground, light, camera;
var cubes = [];
var total_cubes = 0;
var total_ready = 0;
var max_on_screen = 100;
var spawn_per_tick = 25;
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 1 );
physics_stats.update();
while(cubes.length > max_on_screen) {
scene.remove(cubes[0]);
cubes[0].geometry.dispose();
cubes[0].material.dispose();
cubes.splice( 0, 1 );
}
document.getElementById( 'totalcubecount' ).textContent = ( total_cubes.toString() );
document.getElementById( 'currentcubecount' ).textContent = ( cubes.length.toString() );
document.getElementById( 'totalobjects' ).textContent = ( scene.__objects.length );
if(total_cubes > total_ready){
return;
}
for (var i=0;i<spawn_per_tick;i++) {
spawnBox();
}
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Ground
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.3 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
spawnBox();
requestAnimationFrame( render );
scene.simulate();
};
spawnBox = (function() {
var box_geometry = new THREE.BoxGeometry( 4, 4, 4 ),
createBox = function() {
var box, material;
total_cubes++;
material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ opacity: .9, transparent: true }),
.6, // medium friction
.3 // low restitution
);
material.color.setRGB(Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100);
box = new Physijs.ConvexMesh(
box_geometry,
material
);
box.collisions = 0;
box.position.set(
Math.random() * 15 - 7.5,
25,
Math.random() * 15 - 7.5
);
box.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
box.castShadow = true;
box.addEventListener( 'ready', inc_ready );
cubes.push( box );
scene.add( box );
};
return function() {
createBox();
};
})();
inc_ready = function() {
total_ready++;
}
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+164
View File
@@ -0,0 +1,164 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, _boxes = [], spawnBox, inc_ready, renderer, render_stats, physics_stats, scene, ground_material, ground, light, camera;
var cubes = [];
var total_cubes = 0;
var total_ready = 0;
var max_on_screen = 100;
var spawn_per_tick = 25;
initScene = function() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 1 );
physics_stats.update();
while(cubes.length > max_on_screen) {
scene.remove(cubes[0]);
cubes[0].geometry.dispose();
cubes[0].material.dispose();
cubes.splice( 0, 1 );
}
document.getElementById( 'totalcubecount' ).textContent = ( total_cubes.toString() );
document.getElementById( 'currentcubecount' ).textContent = ( cubes.length.toString() );
document.getElementById( 'totalobjects' ).textContent = ( scene.__objects.length );
if(total_cubes > total_ready){
return;
}
for (var i=0;i<spawn_per_tick;i++) {
spawnBox();
}
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Ground
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.3 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(100, 1, 100),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
spawnBox();
requestAnimationFrame( render );
scene.simulate();
};
spawnBox = (function() {
var box_geometry = new THREE.BoxGeometry( 4, 4, 4 ),
createBox = function() {
var box, material;
total_cubes++;
material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ opacity: .9, transparent: true }),
.6, // medium friction
.3 // low restitution
);
material.color.setRGB(Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100);
box = new Physijs.BoxMesh(
box_geometry,
material
);
box.collisions = 0;
box.position.set(
Math.random() * 15 - 7.5,
25,
Math.random() * 15 - 7.5
);
box.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
box.castShadow = true;
box.addEventListener( 'ready', inc_ready );
cubes.push( box );
scene.add( box );
};
return function() {
createBox();
};
})();
inc_ready = function() {
total_ready++;
}
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+238
View File
@@ -0,0 +1,238 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
var TWEEN: any;
var SimplexNoise: any;
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render, createShape,
renderer, render_stats, physics_stats, scene, light, ground, ground_material, camera;
initScene = function() {
TWEEN.start();
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '0px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene({ fixedTimeStep: 1 / 120 });
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
scene.simulate( undefined, 2 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 2.5, 2.5 );
// Ground
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry(50, 1, 50),
//new THREE.PlaneGeometry(50, 50),
ground_material,
0 // mass
);
ground.receiveShadow = true;
scene.add( ground );
// Bumpers
var bumper,
bumper_geom = new THREE.BoxGeometry(2, 1, 50);
bumper = new Physijs.BoxMesh( bumper_geom, ground_material, 0 );
bumper.position.y = 1;
bumper.position.x = -24;
bumper.receiveShadow = true;
bumper.castShadow = true;
scene.add( bumper );
bumper = new Physijs.BoxMesh( bumper_geom, ground_material, 0 );
bumper.position.y = 1;
bumper.position.x = 24;
bumper.receiveShadow = true;
bumper.castShadow = true;
scene.add( bumper );
bumper = new Physijs.BoxMesh( bumper_geom, ground_material, 0 );
bumper.position.y = 1;
bumper.position.z = -24;
bumper.rotation.y = Math.PI / 2;
bumper.receiveShadow = true;
bumper.castShadow = true;
scene.add( bumper );
bumper = new Physijs.BoxMesh( bumper_geom, ground_material, 0 );
bumper.position.y = 1;
bumper.position.z = 24;
bumper.rotation.y = Math.PI / 2;
bumper.receiveShadow = true;
bumper.castShadow = true;
scene.add( bumper );
requestAnimationFrame( render );
scene.simulate();
createShape();
};
render = function() {
requestAnimationFrame( render );
renderer.render( scene, camera );
render_stats.update();
};
createShape = (function() {
var addshapes = true,
shapes = 0,
box_geometry = new THREE.BoxGeometry( 3, 3, 3 ),
sphere_geometry = new THREE.SphereGeometry( 1.5, 32, 32 ),
cylinder_geometry = new THREE.CylinderGeometry( 2, 2, 1, 32 ),
cone_geometry = new THREE.CylinderGeometry( 0, 2, 4, 32 ),
octahedron_geometry = new THREE.OctahedronGeometry( 1.7, 1 ),
torus_geometry = new THREE.TorusKnotGeometry ( 1.7, .2, 32, 4 ),
doCreateShape;
setTimeout(
function addListener() {
var button = document.getElementById( 'stop' );
if ( button ) {
button.addEventListener( 'click', function() { addshapes = false; } );
} else {
setTimeout( addListener );
}
}
);
doCreateShape = function() {
var shape, material = new THREE.MeshLambertMaterial({ opacity: 0, transparent: true });
switch ( Math.floor(Math.random() * 6) ) {
case 0:
shape = new Physijs.BoxMesh(
box_geometry,
material
);
break;
case 1:
shape = new Physijs.SphereMesh(
sphere_geometry,
material,
undefined
);
break;
case 2:
shape = new Physijs.CylinderMesh(
cylinder_geometry,
material
);
break;
case 3:
shape = new Physijs.ConeMesh(
cone_geometry,
material
);
break;
case 4:
shape = new Physijs.ConvexMesh(
octahedron_geometry,
material
);
break;
case 5:
shape = new Physijs.ConvexMesh(
torus_geometry,
material
);
break;
}
shape.material.color.setRGB( Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100 );
shape.castShadow = true;
shape.receiveShadow = true;
shape.position.set(
Math.random() * 30 - 15,
20,
Math.random() * 30 - 15
);
shape.rotation.set(
Math.random() * Math.PI,
Math.random() * Math.PI,
Math.random() * Math.PI
);
if ( addshapes ) {
shape.addEventListener( 'ready', createShape );
}
scene.add( shape );
new TWEEN.Tween(shape.material).to({opacity: 1}, 500).start();
document.getElementById( 'shapecount' ).textContent = ( ++shapes ) + ' shapes created';
};
return function() {
setTimeout( doCreateShape, 250 );
};
})();
window.onload = initScene;
+254
View File
@@ -0,0 +1,254 @@
/// <reference path="../../stats/stats.d.ts" />
/// <reference path="../physijs.d.ts" />
var TWEEN: any;
var SimplexNoise: any;
Physijs.scripts.worker = '../physijs_worker.js';
Physijs.scripts.ammo = 'examples/js/ammo.js';
var initScene, render,
ground_material, box_material,
projector, renderer, render_stats, physics_stats, scene, ground, light, camera,
vehicle_body, vehicle;
initScene = function() {
projector = new THREE.Projector;
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
document.getElementById( 'viewport' ).appendChild( renderer.domElement );
render_stats = new Stats();
render_stats.domElement.style.position = 'absolute';
render_stats.domElement.style.top = '1px';
render_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( render_stats.domElement );
physics_stats = new Stats();
physics_stats.domElement.style.position = 'absolute';
physics_stats.domElement.style.top = '50px';
physics_stats.domElement.style.zIndex = 100;
document.getElementById( 'viewport' ).appendChild( physics_stats.domElement );
scene = new Physijs.Scene;
scene.setGravity(new THREE.Vector3( 0, -30, 0 ));
scene.addEventListener(
'update',
function() {
if ( input && vehicle ) {
if ( input.direction !== null ) {
input.steering += input.direction / 50;
if ( input.steering < -.6 ) input.steering = -.6;
if ( input.steering > .6 ) input.steering = .6;
}
vehicle.setSteering( input.steering, 0 );
vehicle.setSteering( input.steering, 1 );
if ( input.power === true ) {
vehicle.applyEngineForce( 300 );
} else if ( input.power === false ) {
vehicle.setBrake( 20, 2 );
vehicle.setBrake( 20, 3 );
} else {
vehicle.applyEngineForce( 0 );
}
}
scene.simulate( undefined, 2 );
physics_stats.update();
}
);
camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
1,
1000
);
scene.add( camera );
// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 20, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -150;
light.shadowCameraTop = -150;
light.shadowCameraRight = 150;
light.shadowCameraBottom = 150;
light.shadowCameraNear = 20;
light.shadowCameraFar = 400;
light.shadowBias = -.0001
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = .7;
scene.add( light );
var input;
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/rocks.jpg' ) }),
.8, // high friction
.4 // low restitution
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 3, 3 );
box_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture( 'images/plywood.jpg' ) }),
.4, // low friction
.6 // high restitution
);
box_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
box_material.map.repeat.set( .25, .25 );
// Ground
var NoiseGen = new SimplexNoise;
var ground_geometry = new THREE.PlaneGeometry( 300, 300, 100, 100 );
for ( var i = 0; i < ground_geometry.vertices.length; i++ ) {
var vertex = ground_geometry.vertices[i];
//vertex.y = NoiseGen.noise( vertex.x / 30, vertex.z / 30 ) * 1;
}
ground_geometry.computeFaceNormals();
ground_geometry.computeVertexNormals();
// If your plane is not square as far as face count then the HeightfieldMesh
// takes two more arguments at the end: # of x faces and # of z faces that were passed to THREE.PlaneMaterial
ground = new Physijs.HeightfieldMesh(
ground_geometry,
ground_material,
0 // mass
);
ground.rotation.x = -Math.PI / 2;
ground.receiveShadow = true;
scene.add( ground );
for ( i = 0; i < 50; i++ ) {
var size = Math.random() * 2 + .5;
var box = new Physijs.BoxMesh(
new THREE.BoxGeometry( size, size, size ),
box_material
);
box.castShadow = box.receiveShadow = true;
box.position.set(
Math.random() * 25 - 50,
5,
Math.random() * 25 - 50
);
scene.add( box )
}
var loader = new THREE.JSONLoader();
loader.load( "models/mustang.js", function( car, car_materials ) {
loader.load( "models/mustang_wheel.js", function( wheel, wheel_materials ) {
var mesh = new Physijs.BoxMesh(
car,
new THREE.MeshFaceMaterial( car_materials )
);
mesh.position.y = 2;
mesh.castShadow = mesh.receiveShadow = true;
vehicle = new Physijs.Vehicle(mesh, new Physijs.VehicleTuning(
10.88,
1.83,
0.28,
500,
10.5,
6000
));
scene.add( vehicle );
var wheel_material = new THREE.MeshFaceMaterial( wheel_materials );
for ( var i = 0; i < 4; i++ ) {
vehicle.addWheel(
wheel,
wheel_material,
new THREE.Vector3(
i % 2 === 0 ? -1.6 : 1.6,
-1,
i < 2 ? 3.3 : -3.2
),
new THREE.Vector3( 0, -1, 0 ),
new THREE.Vector3( -1, 0, 0 ),
0.5,
0.7,
i < 2 ? false : true
);
}
input = <any>{
power: null,
direction: null,
steering: 0
};
document.addEventListener('keydown', function( ev ) {
switch ( ev.keyCode ) {
case 37: // left
input.direction = 1;
break;
case 38: // forward
input.power = true;
break;
case 39: // right
input.direction = -1;
break;
case 40: // back
input.power = false;
break;
}
});
document.addEventListener('keyup', function( ev ) {
switch ( ev.keyCode ) {
case 37: // left
input.direction = null;
break;
case 38: // forward
input.power = null;
break;
case 39: // right
input.direction = null;
break;
case 40: // back
input.power = null;
break;
}
});
});
});
requestAnimationFrame( render );
scene.simulate();
};
render = function() {
requestAnimationFrame( render );
if ( vehicle ) {
camera.position.copy( vehicle.mesh.position ).add( new THREE.Vector3( 40, 25, 40 ) );
camera.lookAt( vehicle.mesh.position );
light.target.position.copy( vehicle.mesh.position );
light.position.addVectors( light.target.position, new THREE.Vector3( 20, 20, -15 ) );
}
renderer.render( scene, camera );
render_stats.update();
};
window.onload = initScene;
+46 -46
View File
@@ -1,47 +1,47 @@
import Q = require('q');
import promisePool = require('promise-pool');
var pool = new promisePool.Pool<number>((taskDataId, index) => {
return Q.delay(Math.floor(Math.random() * 5000)).then(function () {
taskDataId == 0;
index == 0;
});
}, 20);
pool
.pause()
.delay(5000)
.then(function () {
pool.resume();
});
pool.retries == 0;
pool.retryInterval == 0;
pool.maxRetryInterval == 0;
pool.retryIntervalMultiplier == 0;
pool.add(0);
pool
.start(onProgress)
.then(result => {
result.total == 0;
return pool.reset();
})
.then(() => {
return pool.start(onProgress);
})
.then(result => {
result.total == 0;
return pool.reset();
})
.then(() => {
pool.endless == true;
});
function onProgress(progress: promisePool.IProgress) {
progress.success == true;
progress.fulfilled == 0;
progress.total == 0;
progress.index == 0;
import Q = require('q');
import promisePool = require('promise-pool');
var pool = new promisePool.Pool<number>((taskDataId, index) => {
return Q.delay(Math.floor(Math.random() * 5000)).then(function () {
taskDataId == 0;
index == 0;
});
}, 20);
pool
.pause()
.delay(5000)
.then(function () {
pool.resume();
});
pool.retries == 0;
pool.retryInterval == 0;
pool.maxRetryInterval == 0;
pool.retryIntervalMultiplier == 0;
pool.add(0);
pool
.start(onProgress)
.then(result => {
result.total == 0;
return pool.reset();
})
.then(() => {
return pool.start(onProgress);
})
.then(result => {
result.total == 0;
return pool.reset();
})
.then(() => {
pool.endless == true;
});
function onProgress(progress: promisePool.IProgress) {
progress.success == true;
progress.fulfilled == 0;
progress.total == 0;
progress.index == 0;
}
+123 -123
View File
@@ -1,124 +1,124 @@
// Type definitions for promise-pool
// Project: https://github.com/vilic/promise-pool
// Definitions by: VILIC VANE <https://github.com/vilic>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../q-retry/q-retry.d.ts" />
declare module "promise-pool" {
/**
* interface for the final result.
*/
export interface IResult {
fulfilled: number;
rejected: number;
total: number;
}
/**
* interface for progress data.
*/
export interface IProgress {
index: number;
success: boolean;
error: any;
retries: number;
fulfilled: number;
rejected: number;
pending: number;
total: number;
}
/**
* tasks pool that manages concurrency.
*/
export class Pool<T> {
/**
* (get/set) the max concurrency of this task pool.
*/
public concurrency: number;
private _tasksData;
/**
* (get/set) the processor function that handles tasks data.
*/
public processor: (data: T, index: number) => Q.IPromise<void>;
private _deferred;
private _pauseDeferred;
/**
* (get) the number of successful tasks.
*/
public fulfilled: number;
/**
* (get) the number of failed tasks.
*/
public rejected: number;
/**
* (get) the number of pending tasks.
*/
public pending: number;
/**
* (get) the number of completed tasks and pending tasks in total.
*/
public total: number;
/**
* (get/set) indicates whether this task pool is endless, if so, tasks can still be added even after all previous tasks have been fulfilled.
*/
public endless: boolean;
/**
* (get/set) defaults to 0, the number or retries that this task pool will take for every single task, could be Infinity.
*/
public retries: number;
/**
* (get/set) defaults to 0, interval (milliseconds) between each retries.
*/
public retryInterval: number;
/**
* (get/set) defaults to Infinity, max retry interval when retry interval multiplier applied.
*/
public maxRetryInterval: number;
/**
* (get/set) defaults to 1, the multiplier applies to interval after every retry.
*/
public retryIntervalMultiplier: number;
private _index;
private _currentConcurrency;
public onProgress: (progress: IProgress) => void;
/**
* initialize a task pool.
* @param processor a function takes the data and index as parameters and returns a promise.
* @param concurrency the concurrency of this task pool.
* @param endless defaults to false. indicates whether this task pool is endless, if so, tasks can still be added even after all previous tasks have been fulfilled.
* @param tasksData an initializing array of task data.
*/
constructor(processor: (data: T, index: number) => Q.IPromise<void>, concurrency: number, endless?: boolean, tasksData?: T[]);
/**
* add a data item.
* @param taskData task data to add.
*/
public add(taskData: T): void;
/**
* add data items.
* @param tasskData tasks data to add.
*/
public add(tasksData: T[]): void;
/**
* start tasks, return a promise that will be fulfilled after all tasks accomplish if endless is false.
* @param onProgress a callback that will be triggered every time when a single task is fulfilled.
*/
public start(onProgress?: (progress: IProgress) => void): Q.Promise<IResult>;
private _start();
private _process(data, index);
private _notifyProgress(index, success, err, retries);
private _next();
/**
* pause tasks and return a promise that will be fulfilled after the running tasks accomplish. this will wait for running tasks to complete instead of aborting them.
*/
public pause(): Q.Promise<void>;
/**
* resume tasks.
*/
public resume(): void;
/**
* pause tasks, then clear pending tasks data and reset counters. return a promise that will be fulfilled after resetting accomplish.
*/
public reset(): Q.Promise<void>;
}
// Type definitions for promise-pool
// Project: https://github.com/vilic/promise-pool
// Definitions by: VILIC VANE <https://github.com/vilic>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../q-retry/q-retry.d.ts" />
declare module "promise-pool" {
/**
* interface for the final result.
*/
export interface IResult {
fulfilled: number;
rejected: number;
total: number;
}
/**
* interface for progress data.
*/
export interface IProgress {
index: number;
success: boolean;
error: any;
retries: number;
fulfilled: number;
rejected: number;
pending: number;
total: number;
}
/**
* tasks pool that manages concurrency.
*/
export class Pool<T> {
/**
* (get/set) the max concurrency of this task pool.
*/
public concurrency: number;
private _tasksData;
/**
* (get/set) the processor function that handles tasks data.
*/
public processor: (data: T, index: number) => Q.IPromise<void>;
private _deferred;
private _pauseDeferred;
/**
* (get) the number of successful tasks.
*/
public fulfilled: number;
/**
* (get) the number of failed tasks.
*/
public rejected: number;
/**
* (get) the number of pending tasks.
*/
public pending: number;
/**
* (get) the number of completed tasks and pending tasks in total.
*/
public total: number;
/**
* (get/set) indicates whether this task pool is endless, if so, tasks can still be added even after all previous tasks have been fulfilled.
*/
public endless: boolean;
/**
* (get/set) defaults to 0, the number or retries that this task pool will take for every single task, could be Infinity.
*/
public retries: number;
/**
* (get/set) defaults to 0, interval (milliseconds) between each retries.
*/
public retryInterval: number;
/**
* (get/set) defaults to Infinity, max retry interval when retry interval multiplier applied.
*/
public maxRetryInterval: number;
/**
* (get/set) defaults to 1, the multiplier applies to interval after every retry.
*/
public retryIntervalMultiplier: number;
private _index;
private _currentConcurrency;
public onProgress: (progress: IProgress) => void;
/**
* initialize a task pool.
* @param processor a function takes the data and index as parameters and returns a promise.
* @param concurrency the concurrency of this task pool.
* @param endless defaults to false. indicates whether this task pool is endless, if so, tasks can still be added even after all previous tasks have been fulfilled.
* @param tasksData an initializing array of task data.
*/
constructor(processor: (data: T, index: number) => Q.IPromise<void>, concurrency: number, endless?: boolean, tasksData?: T[]);
/**
* add a data item.
* @param taskData task data to add.
*/
public add(taskData: T): void;
/**
* add data items.
* @param tasskData tasks data to add.
*/
public add(tasksData: T[]): void;
/**
* start tasks, return a promise that will be fulfilled after all tasks accomplish if endless is false.
* @param onProgress a callback that will be triggered every time when a single task is fulfilled.
*/
public start(onProgress?: (progress: IProgress) => void): Q.Promise<IResult>;
private _start();
private _process(data, index);
private _notifyProgress(index, success, err, retries);
private _next();
/**
* pause tasks and return a promise that will be fulfilled after the running tasks accomplish. this will wait for running tasks to complete instead of aborting them.
*/
public pause(): Q.Promise<void>;
/**
* resume tasks.
*/
public resume(): void;
/**
* pause tasks, then clear pending tasks data and reset counters. return a promise that will be fulfilled after resetting accomplish.
*/
public reset(): Q.Promise<void>;
}
}
+38 -38
View File
@@ -1,39 +1,39 @@
import Q = require('q-retry');
Q
.retry(() => {
return '';
})
.then(str => {
str.charAt;
return 0;
})
.retry(num => {
num.toFixed;
})
.retry(() => {
}, 5)
.retry(() => {
}, (reason, retries) => {
retries.toFixed;
})
.retry(() => {
}, (reason, retries) => {
retries.toFixed;
}, 10)
.retry(() => {
return '';
}, (reason, retries) => {
}, {
limit: 10,
interval: 1000,
maxInterval: 20000,
intervalMultiplier: 1.5
})
.then(str => {
str.charAt;
import Q = require('q-retry');
Q
.retry(() => {
return '';
})
.then(str => {
str.charAt;
return 0;
})
.retry(num => {
num.toFixed;
})
.retry(() => {
}, 5)
.retry(() => {
}, (reason, retries) => {
retries.toFixed;
})
.retry(() => {
}, (reason, retries) => {
retries.toFixed;
}, 10)
.retry(() => {
return '';
}, (reason, retries) => {
}, {
limit: 10,
interval: 1000,
maxInterval: 20000,
intervalMultiplier: 1.5
})
.then(str => {
str.charAt;
});
+38 -38
View File
@@ -1,39 +1,39 @@
// Type definitions for q-retry
// Project: https://github.com/vilic/q-retry
// Definitions by: VILIC VANE <https://github.com/vilic>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../q/Q.d.ts" />
declare module Q {
export interface IRetryOptions {
limit?: number;
interval?: number;
maxInterval?: number;
intervalMultiplier?: number;
}
export function retry<U>(process: () => IPromise<U>, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
export function retry<U>(process: () => IPromise<U>, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => IPromise<U>, limit: number): Promise<U>;
export function retry<U>(process: () => IPromise<U>, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => U, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
export function retry<U>(process: () => U, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => U, limit: number): Promise<U>;
export function retry<U>(process: () => U, options?: IRetryOptions): Promise<U>;
interface Promise<T> {
retry<U>(process: (value: T) => IPromise<U>, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, limit: number): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => U, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
retry<U>(process: (value: T) => U, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => U, limit: number): Promise<U>;
retry<U>(process: (value: T) => U, options?: IRetryOptions): Promise<U>;
}
}
declare module "q-retry" {
export = Q;
// Type definitions for q-retry
// Project: https://github.com/vilic/q-retry
// Definitions by: VILIC VANE <https://github.com/vilic>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../q/Q.d.ts" />
declare module Q {
export interface IRetryOptions {
limit?: number;
interval?: number;
maxInterval?: number;
intervalMultiplier?: number;
}
export function retry<U>(process: () => IPromise<U>, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
export function retry<U>(process: () => IPromise<U>, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => IPromise<U>, limit: number): Promise<U>;
export function retry<U>(process: () => IPromise<U>, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => U, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
export function retry<U>(process: () => U, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
export function retry<U>(process: () => U, limit: number): Promise<U>;
export function retry<U>(process: () => U, options?: IRetryOptions): Promise<U>;
interface Promise<T> {
retry<U>(process: (value: T) => IPromise<U>, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, limit: number): Promise<U>;
retry<U>(process: (value: T) => IPromise<U>, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => U, onFail: (reason: any, retries: number) => void, limit: number): Promise<U>;
retry<U>(process: (value: T) => U, onFail: (reason: any, retries: number) => void, options?: IRetryOptions): Promise<U>;
retry<U>(process: (value: T) => U, limit: number): Promise<U>;
retry<U>(process: (value: T) => U, options?: IRetryOptions): Promise<U>;
}
}
declare module "q-retry" {
export = Q;
}
Vendored
+6 -1
View File
@@ -101,6 +101,11 @@ declare module Q {
*/
done(onFulfilled?: (value: T) => any, onRejected?: (reason: any) => any, onProgress?: (progress: any) => any): void;
/**
* If callback is a function, assumes it's a Node.js-style callback, and calls it as either callback(rejectionReason) when/if promise becomes rejected, or as callback(null, fulfillmentValue) when/if promise becomes fulfilled. If callback is not a function, simply returns promise.
*/
nodeify(callback: (reason: any, value: any) => void): Promise<T>;
/**
* Returns a promise to get the named property of an object. Essentially equivalent to
*
@@ -161,7 +166,7 @@ declare module Q {
* Returns whether a given promise is in the pending state. When the static version is used on non-promises, the result is always false.
*/
isPending(): boolean;
valueOf(): any;
/**
+7 -3
View File
@@ -22,7 +22,7 @@ myApp.config((RestangularProvider: restangular.IProvider) => {
RestangularProvider.setRequestInterceptor(function (element, operation, route, url) {
});
RestangularProvider.addElementTransformer('accounts', false, function (elem) {
RestangularProvider.addElementTransformer('accounts', false, function (elem: any) {
elem.accountName = 'Changed';
return elem;
});
@@ -74,9 +74,13 @@ myApp.controller('TestCtrl', (
baseAccounts.post(newAccount);
Restangular.allUrl('googlers', 'http://www.google.com/').getList();
Restangular.allUrl('googlers', 'http://www.google.com/').getList<String>();
Restangular.oneUrl('googlers', 'http://www.google.com/1').get();
Restangular.oneUrl('googlers', 'http://www.google.com/1').get<String>();
Restangular.one('accounts', 123).one('buildings', 456).get();
Restangular.one('accounts', 123).one('buildings', 456).get<String>();
Restangular.one('accounts', 123).getList('buildings');
Restangular.one('accounts', 123).getList<String>('buildings');
baseAccounts.getList().then(function (accounts) {
var firstAccount = accounts[0];
@@ -104,7 +108,7 @@ myApp.controller('TestCtrl', (
console.log("There was an error saving");
});
firstAccount.getList("users", {query: "params"}).then(function(users) {
firstAccount.getList("users", {query: "params"}).then(function(users: any) {
users.post({userName: 'unknown'});
users.customGET("messages", {param: "myParam"});
@@ -151,7 +155,7 @@ myApp.controller('TestCtrl', (
configurer.setRequestInterceptor(function (element, operation, route, url) {
});
configurer.addElementTransformer('accounts', false, function (elem) {
configurer.addElementTransformer('accounts', false, function (elem: any) {
elem.accountName = 'Changed';
return elem;
});
+6
View File
@@ -99,10 +99,14 @@ declare module restangular {
interface IElement extends IService {
get(queryParams?: any, headers?: any): IPromise<any>;
get<T>(queryParams?: any, headers?: any): IPromise<T>;
getList(subElement?: any, queryParams?: any, headers?: any): ICollectionPromise<any>;
getList<T>(subElement?: any, queryParams?: any, headers?: any): ICollectionPromise<T>;
put(queryParams?: any, headers?: any): IPromise<any>;
post(subElement: any, elementToPost: any, queryParams?: any, headers?: any): IPromise<any>;
post<T>(subElement: any, elementToPost: T, queryParams?: any, headers?: any): IPromise<T>;
post(elementToPost: any, queryParams?: any, headers?: any): IPromise<any>;
post<T>(elementToPost: T, queryParams?: any, headers?: any): IPromise<T>;
remove(queryParams?: any, headers?: any): IPromise<any>;
head(queryParams?: any, headers?: any): IPromise<any>;
trace(queryParams?: any, headers?: any): IPromise<any>;
@@ -114,7 +118,9 @@ declare module restangular {
interface ICollection extends IService {
getList(queryParams?: any, headers?: any): ICollectionPromise<any>;
getList<T>(queryParams?: any, headers?: any): ICollectionPromise<T>;
post(elementToPost: any, queryParams?: any, headers?: any): IPromise<any>;
post<T>(elementToPost: T, queryParams?: any, headers?: any): IPromise<T>;
head(queryParams?: any, headers?: any): IPromise<any>;
trace(queryParams?: any, headers?: any): IPromise<any>;
options(queryParams?: any, headers?: any): IPromise<any>;
+169
View File
@@ -0,0 +1,169 @@
/// <reference path="sipml.d.ts" />
/* Code borrowed from http://sipml5.org/docgen/index.html?svn=224 */
var acceptMessage = (e: any)=> {
e.newSession.accept(); // e.newSession.reject(); to reject the message
console.info('SMS-content = ' + e.getContentString() + ' and SMS-content-type = ' + e.getContentType());
};
var acceptCall = (e:any)=> {
e.newSession.accept(); // e.newSession.reject() to reject the call
};
/* Initialize the engine */
var readyCallback = (e:any)=> {
createSipStack(); // see next section
};
var errorCallback = (e:any)=> {
console.error('Failed to initialize the engine: ' + e.message);
}
SIPml.init(readyCallback, errorCallback);
/* Create a SIP stack */
var sipStack: SIPml.Stack;
var eventsListener = (e:any)=> {
if(e.type == 'started'){
login();
}
else if(e.type == 'i_new_message'){ // incoming new SIP MESSAGE (SMS-like)
acceptMessage(e);
}
else if(e.type == 'i_new_call'){ // incoming audio/video call
acceptCall(e);
}
}
function createSipStack(){
sipStack = new SIPml.Stack('blaat');
sipStack = new SIPml.Stack({
realm: 'example.org', // mandatory: domain name
impi: 'bob', // mandatory: authorization name (IMS Private Identity)
impu: 'sip:bob@example.org', // mandatory: valid SIP Uri (IMS Public Identity)
password: 'mysecret', // optional
display_name: 'Bob legend', // optional
websocket_proxy_url: 'wss://sipml5.org:10062', // optional
outbound_proxy_url: 'udp://example.org:5060', // optional
enable_rtcweb_breaker: false, // optional
events_listener: { events: '*', listener: eventsListener }, // optional: '*' means all events
sip_headers: [ // optional
{ name: 'User-Agent', value: 'IM-client/OMA1.0 sipML5-v1.0.0.0' },
{ name: 'Organization', value: 'Doubango Telecom' }
]
}
);
}
sipStack.start();
/* Register/login */
var registerSession: SIPml.Session.Registration;
var eventsListener = (e:any)=>{
console.info('session event = ' + e.type);
if(e.type == 'connected' && e.session == registerSession){
makeCall();
sendMessage();
publishPresence();
subscribePresence('johndoe'); // watch johndoe's presence status change
}
}
var login = ()=>{
registerSession = <SIPml.Session.Registration>sipStack.newSession('register', {
events_listener: { events: '*', listener: eventsListener } // optional: '*' means all events
});
registerSession.register();
}
/* Making/receiving audio/video call */
var callSession: SIPml.Session.Call;
var eventsListener = (e:any)=>{
console.info('session event = ' + e.type);
}
var makeCall = ()=>{
callSession = <SIPml.Session.Call>sipStack.newSession('call-audiovideo', {
video_local: document.getElementById('video-local'),
video_remote: document.getElementById('video-remote'),
audio_remote: document.getElementById('audio-remote'),
events_listener: { events: '*', listener: eventsListener } // optional: '*' means all events
});
callSession.call('johndoe');
}
var acceptCall = (e:any)=>{
e.newSession.accept(); // e.newSession.reject() to reject the call
}
/* Send/receive SIP MESSAGE (SMS-like) */
var messageSession: SIPml.Session.Message;
var eventsListener = (e:any)=>{
console.info('session event = ' + e.type);
}
var sendMessage = ()=>{
messageSession = <SIPml.Session.Message>sipStack.newSession('message', {
events_listener: { events: '*', listener: eventsListener } // optional: '*' means all events
});
messageSession.send('johndoe', 'Pêche à la moule', 'text/plain;charset=utf-8');
}
/* Publish presence status */
var publishSession: SIPml.Session.Publish;
var eventsListener = (e:any)=>{
console.info('session event = ' + e.type);
}
var publishPresence = ()=>{
publishSession = <SIPml.Session.Publish>sipStack.newSession('publish', {
events_listener: { events: '*', listener: eventsListener } // optional: '*' means all events
});
var contentType = 'application/pidf+xml';
var content = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n' +
'<presence xmlns=\"urn:ietf:params:xml:ns:pidf\"\n' +
' xmlns:im=\"urn:ietf:params:xml:ns:pidf:im\"' +
' entity=\"sip:bob@example.com\">\n' +
'<tuple id=\"s8794\">\n' +
'<status>\n'+
' <basic>open</basic>\n' +
' <im:im>away</im:im>\n' +
'</status>\n' +
'<contact priority=\"0.8\">tel:+33600000000</contact>\n' +
'<note xml:lang=\"fr\">Bonjour de Paris :)</note>\n' +
'</tuple>\n' +
'</presence>';
// send the PUBLISH request
publishSession.publish(content, contentType,{
expires: 200,
sip_caps: [
{ name: '+g.oma.sip-im' },
{ name: '+sip.ice' },
{ name: 'language', value: '\"en,fr\"' }
],
sip_headers: [
{ name: 'Event', value: 'presence' },
{ name: 'Organization', value: 'Doubango Telecom' }
]
});
}
/* Subscribe for presence status */
var subscribeSession: SIPml.Session.Subscribe;
var eventsListener = (e:any)=>{
console.info('session event = ' + e.type);
if(e.type == 'i_notify'){
console.info('NOTIFY content = ' + e.getContentString());
console.info('NOTIFY content-type = ' + e.getContentType());
}
}
var subscribePresence = (to:string)=>{
subscribeSession = <SIPml.Session.Subscribe>sipStack.newSession('subscribe', {
expires: 200,
events_listener: { events: '*', listener: eventsListener },
sip_headers: [
{ name: 'Event', value: 'presence' }, // only notify for 'presence' events
{ name: 'Accept', value: 'application/pidf+xml' } // supported content types (COMMA-sparated)
],
sip_caps: [
{ name: '+g.oma.sip-im', value: null },
{ name: '+audio', value: null },
{ name: 'language', value: '\"en,fr\"' }
]
});
// start watching for entity's presence status (You may track event type 'connected' to be sure that the request has been accepted by the server)
subscribeSession.subscribe(to);
}
+149
View File
@@ -0,0 +1,149 @@
// Type definitions for SIPml5
// Project: http://sipml5.org/
// Definitions by: A. Groenenboom <https://github.com/chookies>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module SIPml {
class Event {
public description: string;
public type: string;
public getContent(): Object;
public getContentString(): string;
public getContentType(): Object;
public getSipResponseCode(): number;
}
class EventTarget {
public addEventListener(type: any, listener: Function): void;
public removeEventListener(type: any): void;
}
class Session {
public accept(configuration?: Session.Configuration): number;
public getId(): number;
public getRemoteFriendlyName(): string;
public getRemoteUri(): string;
public reject(configuration?: Session.Configuration): number;
public setConfiguration(configuration?: Session.Configuration): void;
}
export module Session {
interface Configuration {
audio_remote?: HTMLAudioElement;
bandwidth?: Object;
expires?: number;
from?: string;
sip_caps?: Object[];
sip_headers?: Object[];
video_local?: HTMLVideoElement;
video_remote?: HTMLVideoElement;
video_size?: Object;
}
class Call extends Session {
public acceptTransfer(configuration?: Session.Configuration): number;
public call(to: string, configuration?: Session.Configuration): number;
public dtmf(): number;
public hangup(configuration?: Session.Configuration): number;
public hold(configuration?: Session.Configuration): number;
public info(): number;
public rejectTransfer(): number;
public resume(): number;
public transfer(): number;
}
class Event extends SIPml.Event {
public session: Session;
public getTransferDestinationFriendlyName(): string;
}
class Message extends Session {
public send(to: string, content?: any, contentType?: string, configuration?: Session.Configuration): number;
}
class Publish extends Session {
public publish(content?: any, contentType?: string, configuration?: Session.Configuration): number;
public unpublish(configuration?: Session.Configuration): void;
}
class Registration extends Session {
public register(configuration?: Session.Configuration): void;
public unregister(configuration?: Session.Configuration): void;
}
class Subscribe extends Session {
public subscribe(to: string, configuration?: Session.Configuration): number;
public unsubscribe(configuration?: Session.Configuration): number;
}
}
class Stack extends EventTarget {
public constructor(configuration?: Stack.Configuration);
public setConfiguration(configuration: Stack.Configuration): number;
public newSession(type: string, configuration: Stack.Configuration): any;
public start(): number;
public stop(timeout: number): number;
}
export module Stack {
interface Configuration {
bandwidth?: Object;
display_name?: string;
enable_click2call?: boolean;
enable_early_ims?: boolean;
enable_media_stream_cache?: boolean;
enable_rtcweb_breaker?: boolean;
events_listener?: Object;
ice_servers?: Object[];
impi?: string;
impu?: string;
outbound_proxy_url?: string;
password?: string;
realm?: string;
sip_headers?: Object[];
video_size?: Object;
websocket_proxy_url?: string;
}
class Event extends SIPml.Event {
public description: string;
public newSession: Session;
public type: string;
}
}
function getNavigatorFriendlyName(): string;
function getNavigatorVersion(): string;
function getSystemFriendlyName(): string;
function getWebRtc4AllVersion(): string;
function haveMediaStream(): boolean;
function init(readyCallback?: (e:any) => any, errorCallback?: (e:any) => any): boolean;
function isInitialized(): boolean;
function isNavigatorOutdated(): boolean;
function isReady(): boolean;
function isScreenShareSupported(): boolean;
function isWebRtcPluginOutdated(): boolean;
function isWebRtc4AllSupported(): boolean;
function isWebRtcSupported(): boolean;
function isWebSocketSupported(): boolean;
function setDebugLevel(level: string): void;
function setWebRtcType(type: string): boolean;
}
+6 -1
View File
@@ -1,4 +1,4 @@
// Type definitions for Smoothie Charts 1.21
// Type definitions for Smoothie Charts 1.25
// Project: https://github.com/joewalnes/smoothie
// Definitions by: Drew Noakes <https://drewnoakes.com>, Mike H. Hawley <https://github.com/mikehhawley>
// Definitions: https://github.com/borisyankov/DefinitelyTyped/smoothie
@@ -41,6 +41,11 @@ declare module "smoothie"
*/
constructor(options?: ITimeSeriesOptions);
/**
* Clears all data and state from this TimeSeries object.
*/
clear(): void;
/**
* Recalculate the min/max values for this <code>TimeSeries</code> object.
*
@@ -55,12 +55,12 @@
// Cubes
var geometry = new THREE.BoxGeometry(50, 50, 50);
var geometry2 = new THREE.BoxGeometry(50, 50, 50);
var material2 = new THREE.MeshLambertMaterial({ color: 0xffffff, shading: THREE.FlatShading, overdraw: 0.5 });
for (var i = 0; i < 100; i++) {
var cube = new THREE.Mesh(geometry, material2);
var cube = new THREE.Mesh(geometry2, material2);
cube.scale.y = Math.floor(Math.random() * 2 + 1);
+3 -3
View File
@@ -61,12 +61,12 @@
// Plane
var geometry = new THREE.PlaneGeometry(200, 200);
geometry.applyMatrix(new THREE.Matrix4().makeRotationX(- Math.PI / 2));
var geometry2 = new THREE.PlaneGeometry(200, 200);
geometry2.applyMatrix(new THREE.Matrix4().makeRotationX(- Math.PI / 2));
var material = new THREE.MeshBasicMaterial({ color: 0xe0e0e0, overdraw: 0.5 });
plane = new THREE.Mesh(geometry, material);
plane = new THREE.Mesh(geometry2, material);
scene.add(plane);
renderer = new THREE.CanvasRenderer();
+4 -4
View File
@@ -50,7 +50,7 @@
// Spheres
var geometry = new THREE.SphereGeometry(100, 14, 7);
var geometry2 = new THREE.SphereGeometry(100, 14, 7);
materials = [
@@ -66,9 +66,9 @@
];
for (var i = 0, l = geometry.faces.length; i < l; i++) {
for (var i = 0, l = geometry2.faces.length; i < l; i++) {
var face = geometry.faces[i];
var face = geometry2.faces[i];
if (Math.random() > 0.5) face.materialIndex = Math.floor(Math.random() * materials.length);
}
@@ -79,7 +79,7 @@
for (var i = 0, l = materials.length; i < l; i++) {
var sphere = new THREE.Mesh(geometry, materials[i]);
var sphere = new THREE.Mesh(geometry2, materials[i]);
sphere.position.x = (i % 5) * 200 - 400;
sphere.position.z = Math.floor(i / 5) * 200 - 200;
+1041 -902
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+20 -20
View File
@@ -1,21 +1,21 @@
/// <reference path="tspromise.d.ts" />
import Promise = require('tspromise');
var MyFuncFunc = Promise.async((a: boolean, b: number) => {
console.log('[a] ' + a);
yield(Promise.waitAsync(1000));
console.log('[b]' + b);
});
MyFuncFunc(true, 10);
Promise.all([Promise.waitAsync(10), Promise.waitAsync(20)]).then(() => {
return new Promise<String>((resolve, reject) => {
resolve('test');
});
}).then(() => {
throw (new Error());
}).catch((e) => {
console.log(e.message);
/// <reference path="tspromise.d.ts" />
import Promise = require('tspromise');
var MyFuncFunc = Promise.async((a: boolean, b: number) => {
console.log('[a] ' + a);
yield(Promise.waitAsync(1000));
console.log('[b]' + b);
});
MyFuncFunc(true, 10);
Promise.all([Promise.waitAsync(10), Promise.waitAsync(20)]).then(() => {
return new Promise<String>((resolve, reject) => {
resolve('test');
});
}).then(() => {
throw (new Error());
}).catch((e) => {
console.log(e.message);
});
+36 -70
View File
@@ -6,84 +6,50 @@
//
declare var Hogan: string;
// Countries
// Prefetches data, stores it in localStorage, and searches it on the client
$('.example-countries .typeahead').typeahead({
name: 'countries',
prefetch: '../data/countries.json',
limit: 10
var substringMatcher = function (strs: any) {
return function findMatches(q: any, cb: any) {
var matches: any, substrRegex: any;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
// iterate through the pool of strings and for any string that
// contains the substring `q`, add it to the `matches` array
$.each(strs, function (i, str) {
if (substrRegex.test(str)) {
// the typeahead jQuery plugin expects suggestions to a
// JavaScript object, refer to typeahead docs for more info
matches.push({ value: str });
}
});
// Open Source Projects by Twitter
// Defines a custom template and template engine for rendering suggestions
$('.example-twitter-oss .typeahead').typeahead({
name: 'twitter-oss',
prefetch: '../data/repos.json',
template: [
'<p class="repo-language">{{language}}</p>',
'<p class="repo-name">{{name}}</p>',
'<p class="repo-description">{{description}}</p>'
].join(''),
engine: Hogan
});
cb(matches);
};
};
// Arabic Phrases
// Hardcoded list showing Right - To - Left(RTL) support
$('.example-arabic .typeahead').typeahead({
name: 'arabic',
local: [
"الإنجليزية",
"نعم",
"لا",
"مرحبا",
"کيف الحال؟",
"أهلا",
"مع السلامة",
"لا أتكلم العربية",
"لا أفهم",
"أنا جائع"
]
});
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',
'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',
'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana',
'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota',
'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota',
'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island',
'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',
'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
];
// NBA and NHL Teams
// Two datasets that are prefetched, stored, and searched on the client
$('.example-sports .typeahead').typeahead([
{
name: 'nba-teams',
prefetch: '../data/nba.json',
header: '<h3 class="league-name">NBA Teams</h3>'
},
{
name: 'nhl-teams',
prefetch: '../data/nhl.json',
header: '<h3 class="league-name">NHL Teams</h3>'
}
]);
// Best Picture Winners
// Prefetches some data then relies on remote requests for suggestions when prefetched data is insufficient
$('.example-films .typeahead').typeahead([
{
name: 'best-picture-winners',
remote: '../data/films/queries/%QUERY.json',
prefetch: '../data/films/post_1960.json',
template: '<p><strong>{{value}}</strong> {{year}}</p>',
engine: Hogan
}
]);
// Countries - Modified the first test here to add options
// Specifies options to display hint with a highlight and adds a minimum length restriction for search
// Prefetches data, stores it in localStorage, and searches it on the client
$('.example-countries .typeahead').typeahead({
$('#the-basics .typeahead').typeahead({
hint: true,
highlight: true,
minLength: 2
minLength: 1
},
{
name: 'countries',
prefetch: '../data/countries.json',
limit: 10
name: 'states',
displayKey: 'value',
source: substringMatcher(states)
});
module valueTest {
+93 -194
View File
@@ -1,53 +1,71 @@
// Type definitions for typeahead.js 0.9.3
// Type definitions for typeahead.js 0.10.4
// Project: http://twitter.github.io/typeahead.js/
// Definitions by: Ivaylo Gochkov <https://github.com/igochkov/>
// Definitions by: Ivaylo Gochkov <https://github.com/igochkov/>, Gidon Junge <https://github.com/gjunge/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../jquery/jquery.d.ts"/>
interface JQuery {
/**
* Turns an input[type="text"] element into a typeahead.
*
* @constructor
* @param dataset Single dataset
*/
typeahead(dataset: Twitter.Typeahead.Dataset): JQuery;
/**
* Turns an input[type="text"] element into a typeahead.
*
* @constructor
* @param dataset Array of datasets
*/
typeahead(datasets: Twitter.Typeahead.Dataset[]): JQuery;
/**
* Destroys previously initialized typeaheads. This entails reverting
* DOM modifications and removing event handlers.
*
* @constructor
*
* @constructor
* @param methodName Method 'destroy'
*/
*/
typeahead(methodName: 'destroy'): JQuery;
/**
* Sets the current query of the typeahead. This is always preferable to
* using $("input.typeahead").val(query), which will result in unexpected
* behavior. To clear the query, simply set it to an empty string.
* Opens the dropdown menu of typeahead. Note that being open does not mean that the menu is visible.
* The menu is only visible when it is open and has content.
*
* @constructor
* @param methodName Method 'setQuery'
* @param query The query to be set
* @param methodName Method 'open'
*/
typeahead(methodName: 'setQuery', query: string): JQuery;
typeahead(methodName: 'open'): JQuery;
/**
* Accommodates the destroy and setQuery overloads.
* Closes the dropdown menu of typeahead.
*
* @constructor
* @param methodName Method 'close'
*/
typeahead(methodName: 'close'): JQuery;
/**
* Returns the current value of the typeahead.
* The value is the text the user has entered into the input element.
*
* @constructor
* @param methodName Method name ('destroy' or 'setQuery')
* @param query The query to be set in case method 'setQuery' is used.
* @param methodName Method 'val'
*/
typeahead(methodName: 'val'): string;
/**
* Sets the value of the typeahead. This should be used in place of jQuery#val.
*
* @constructor
* @param methodName Method 'val'
* @param query The value to be set
*/
typeahead(methodName: 'val', val: string): JQuery;
/**
* Accommodates the val overload.
*
* @constructor
* @param methodName Method name ('val')
*/
typeahead(methodName: string): string;
/**
* Accommodates multiple overloads.
*
* @constructor
* @param methodName Method name
* @param query The query to be set in case method 'val' is used.
*/
typeahead(methodName: string, query: string): JQuery;
@@ -57,20 +75,19 @@ interface JQuery {
*
* @constructor
* @param options ('hint' or 'highlight' or 'minLength' all of which are optional)
* @param dataset Array of datasets
* @param datasets Array of datasets
*/
typeahead(options: Twitter.Typeahead.Options, dataset: Twitter.Typeahead.Dataset): JQuery;
typeahead(options: Twitter.Typeahead.Options, datasets: Twitter.Typeahead.Dataset[]): JQuery;
/**
* Returns the current value of the typeahead. The value is the text the user has entered into the input element.
* Accomodates specifying options such as hint and highlight.
* This is in correspondence to the examples mentioned in http://twitter.github.io/typeahead.js/examples/
*
* @constructor
* @param options ('hint' or 'highlight' or 'minLength' all of which are optional)
* @param datasets One or more datasets passed in as arguments.
*/
typeahead(methodName: 'val'): string;
typeahead(methodName: string): string;
/**
* Sets the value of the typeahead. This should be used in place of jQuery#val.
*/
typeahead(methodName: 'val', value: string): JQuery;
typeahead(options: Twitter.Typeahead.Options, ... datasets: Twitter.Typeahead.Dataset[]): JQuery;
}
declare module Twitter.Typeahead {
@@ -82,188 +99,70 @@ declare module Twitter.Typeahead {
*/
interface Dataset {
/**
* The string used to identify the dataset. Used by typeahead.js
* to cache intelligently.
* The backing data source for suggestions.
* Expected to be a function with the signature (query, cb).
* It is expected that the function will compute the suggestion set (i.e. an array of JavaScript objects) for query and then invoke cb with said set.
* cb can be invoked synchronously or asynchronously.
*
*/
name: string;
/**
* The key used to access the value of the datum in the datum object.
* Defaults to value.
*/
valueKey?: string;
/**
* The max number of suggestions from the dataset to display
* for a given query. Defaults to 5.
*/
limit?: number;
/**
* The template used to render suggestions. Can be a string or
* a precompiled template. If not provided, suggestions will render
* as their value contained in a <p> element (i.e. <p>value</p>).
*/
template?: any;
/**
* The template engine used to compile/render template if it is a
* string. Any engine can use used as long as it adheres to the
* expected API. Required if template is a string.
*/
engine?: string;
/**
* The header rendered before suggestions in the dropdown menu.
* Can be either a DOM element or HTML.
*/
header?: any;
/**
* The footer rendered after suggestions in the dropdown menu.
* Can be either a DOM element or HTML.
*/
footer?: any;
/**
* An array of datums or strings.
*/
local?: any[];
/**
* Can be a URL to a JSON file containing an array of datums or,
* if more configurability is needed, a prefetch options object.
*/
prefetch?: any;
/**
* Can be a URL to fetch suggestions from when the data provided by
* local and prefetch is insufficient or, if more configurability is
* needed, a remote options object.
*/
remote?: any;
}
source: (query: string, cb: (result: any) => void) => void;
/**
* Prefetched data is fetched and processed on initialization.
* If the browser supports localStorage, the processed data will be cached
* there to prevent additional network requests on subsequent page loads.
*/
interface PrefetchOptions {
/**
* A URL to a JSON file containing an array of datums. Required.
* The name of the dataset.
* This will be appended to tt-dataset- to form the class name of the containing DOM element.
* Must only consist of underscores, dashes, letters (a-z), and numbers.
* Defaults to a random number.
*/
url: string;
name?: string;
/**
* The time (in milliseconds) the prefetched data should be cached
* in localStorage. Defaults to 86400000 (1 day).
* For a given suggestion object, determines the string representation of it.
* This will be used when setting the value of the input control after a suggestion is selected. Can be either a key string or a function that transforms a suggestion object into a string.
* Defaults to value.
*/
ttl?: number;
displayKey?: string;
/**
* A function that transforms the response body into an array of datums.
*
* @param parsedResponse Response body
* A hash of templates to be used when rendering the dataset.
* Note a precompiled template is a function that takes a JavaScript object as its first argument and returns a HTML string.
*/
filter?: (parsedResponse: any) => Datum[];
templates?: Templates;
}
/**
* Remote data is only used when the data provided by local and prefetch
* is insufficient. In order to prevent an obscene number of requests
* being made to remote endpoint, typeahead.js rate-limits remote requests.
*/
interface RemoteOptions {
/**
* A URL to make requests to when the data provided by local and
* prefetch is insufficient. Required.
*/
url: string;
interface Templates {
/**
* The type of data you're expecting from the server. Defaults to json.
* @see http://api.jquery.com/jQuery.ajax/ for more info.
* Rendered when 0 suggestions are available for the given query.
* Can be either a HTML string or a precompiled template.
* If it's a precompiled template, the passed in context will contain query
*/
dataType?: string;
empty?: string;
/**
* Determines whether or not the browser will cache responses.
* @see http://api.jquery.com/jQuery.ajax/ for more info.
* Rendered at the bottom of the dataset.
* Can be either a HTML string or a precompiled template.
* If it's a precompiled template, the passed in context will contain query and isEmpty.
*/
cache?: boolean;
footer?: string;
/**
* Sets a timeout for requests.
* @see http://api.jquery.com/jQuery.ajax/ for more info.
* Rendered at the top of the dataset.
* Can be either a HTML string or a precompiled template.
* If it's a precompiled template, the passed in context will contain query and isEmpty.
*/
timeout?: number;
header?: string;
/**
* The pattern in url that will be replaced with the user's query
* when a request is made. Defaults to %QUERY.
* Used to render a single suggestion.
* If set, this has to be a precompiled template.
* The associated suggestion object will serve as the context.
* Defaults to the value of displayKey wrapped in a p tag i.e. <p>{{value}}</p>.
*/
wildcard?: string;
suggestion?: string;
/**
* Overrides the request URL. If set, no wildcard substitution will
* be performed on url.
*
* @param url Replacement URL
* @param uriEncodedQuery Encoded query
* @returns A valid URL
*/
replace?: (url: string, uriEncodedQuery: string) => string;
/**
* The function used for rate-limiting network requests.
* Can be either 'debounce' or 'throttle'. Defaults to 'debounce'.
*/
rateLimitFn?: string;
/**
* The time interval in milliseconds that will be used by rateLimitFn.
* Defaults to 300.
*/
rateLimitWait?: number;
/**
* The max number of parallel requests typeahead.js can have pending.
* Defaults to 6.
*/
maxParallelRequests?: number;
/**
* A pre-request callback. Can be used to set custom headers.
* @see http://api.jquery.com/jQuery.ajax/ for more info.
*/
beforeSend?: (jqXhr: JQueryXHR, settings: JQueryAjaxSettings) => void;
/**
* Transforms the response body into an array of datums.
*
* @param parsedResponse Response body
*/
filter?: (parsedResponse: any) => Datum[];
}
/**
* The individual units that compose datasets are called datums.
* The canonical form of a datum is an object with a value property and
* a tokens property.
*
* For ease of use, datums can also be represented as a string.
* Strings found in place of datum objects are implicitly converted
* to a datum object.
*
* When datums are rendered as suggestions, the datum object is the
* context passed to the template engine. This means if you include any
* arbitrary properties in datum objects, those properties will be
* available to the template used to render suggestions.
*/
interface Datum {
/**
* The string that represents the underlying value of the datum
*/
value: string;
/**
* A collection of single-word strings that aid typeahead.js in
* matching datums with a given query.
*/
tokens: string[];
}
/**
* When initializing a typeahead, there are a number of options you can configure.
+76
View File
@@ -0,0 +1,76 @@
/// <reference path="xpath.d.ts" />
import xpath = require('xpath');
// A string of xml
var xml: string;
// an xpath query
var xpathText: string;
// a DOM
var doc: Document;
// xpath returns lists of Nodes that do not implement the NodeList interface;
// they are merely arrays.
var nodes: Array<Node>;
var node: Node;
var stringResult: string;
var booleanResult: boolean;
var numberResult: number;
var expression: xpath.XPathExpression;
var namespaceResolver: xpath.XPathNSResolver;
var xpathResult: xpath.XPathResult;
var length: number;
xml = '<some>xml</some>';
xpathText = '//this/is/an/xpath/query';
doc = new DOMParser().parseFromString(xml, 'text/xml');
nodes = xpath.select(xpathText, doc);
node = xpath.select(xpathText, doc, true);
nodes = xpath.select(xpathText, doc, false);
node = xpath.select1(xpathText, doc);
stringResult = xpath.select(xpathText, doc).toString();
node = xpath.select(xpathText, doc)[0];
var selectFn = xpath.useNamespaces({
'prefix': 'http://namespaceuri.com/nsfile'
});
nodes = selectFn(xpathText, doc);
node = selectFn(xpathText, doc, true);
nodes = selectFn(xpathText, doc, false);
namespaceResolver = {
lookupNamespaceURI: function(prefix) {
return 'http://namespace.domain'
}
};
expression = xpath.createExpression(xpathText, namespaceResolver);
xpathResult = expression.evaluate(doc, xpath.XPathResult.ANY_TYPE, null);
xpathResult = expression.evaluate(doc, xpath.XPathResult.ANY_TYPE, xpathResult);
xpathResult = expression.evaluate(doc, xpath.XPathResult.ANY_TYPE);
booleanResult = xpathResult.booleanValue;
numberResult = xpathResult.numberValue;
stringResult = xpathResult.stringValue;
node = xpathResult.singleNodeValue;
node = xpathResult.iterateNext();
node = xpathResult.snapshotItem(10);
length = xpathResult.snapshotLength;
var arrayOfNumbers: Array<Number> = [
xpath.XPathResult.ANY_TYPE,
xpath.XPathResult.NUMBER_TYPE,
xpath.XPathResult.STRING_TYPE,
xpath.XPathResult.BOOLEAN_TYPE,
xpath.XPathResult.UNORDERED_NODE_ITERATOR_TYPE,
xpath.XPathResult.ORDERED_NODE_ITERATOR_TYPE,
xpath.XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
xpath.XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
xpath.XPathResult.ANY_UNORDERED_NODE_TYPE,
xpath.XPathResult.FIRST_ORDERED_NODE_TYPE
];
namespaceResolver = xpath.createNSResolver(node);
namespaceResolver = xpath.createNSResolver(doc);
+197
View File
@@ -0,0 +1,197 @@
// Type definitions for xpath v0.0.7
// Project: https://github.com/goto100/xpath
// Definitions by: Andrew Bradley <https://github.com/cspotcode/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
// Some documentation prose is copied from the XPath documentation at https://developer.mozilla.org.
declare module 'xpath' {
// select1 can return any of: `Node`, `boolean`, `string`, `number`.
// select and selectWithResolver can return any of the above return types or `Array<Node>`.
// For this reason, their return types are `any`.
interface SelectFn {
/**
* Evaluate an XPath expression against a DOM node. Returns the result as one of the following:
* * Array<Node>
* * Node
* * boolean
* * number
* * string
* @param xpathText
* @param contextNode
* @param single If true and the evaluation result is one or more Nodes, will return only the first Node instead of an Array<Node>
*/
(xpathText: string, contextNode: Node, single?: boolean): any;
}
var select: SelectFn;
/**
* Evaluate an xpath expression against a DOM node, returning the first result only.
* Equivalent to `select(xpathText, contextNode, true)`
* @param xpathText
* @param contextNode
*/
function select1(xpathText: string, contextNode: Node): any;
/**
* Evaluate an XPath expression against a DOM node using a given namespace resolver. Returns the result as one of the following:
* * Array<Node>
* * Node
* * boolean
* * number
* * string
* @param xpathText
* @param contextNode
* @param resolver
* @param single If true and the evaluation result is one or more Nodes, will return only the first Node instead of an Array<Node>
*/
function selectWithResolver(xpathText: string, contextNode: Node, resolver: XPathNSResolver, single?: boolean): any;
/**
* Evaluate an xpath expression against a DOM.
* @param xpathText xpath expression as a string.
* @param contextNode xpath expression is evaluated relative to this DOM node.
* @param resolver XML namespace resolver
* @param resultType
* @param result If non-null, xpath *may* reuse this XPathResult object instead of creating a new one. However, it is not required to do so.
* @return XPathResult object containing the result of the expression.
*/
function evaluate(xpathText: string, contextNode: Node, resolver: XPathNSResolver, resultType: number, result?: XPathResult): XPathResult;
/**
* Creates a `select` function that uses the given namespace prefix to URI mappings when evaluating queries.
* @param namespaceMappings an object mapping namespace prefixes to namespace URIs. Each key is a prefix; each value is a URI.
* @return a function with the same signature as `xpath.select`
*/
function useNamespaces(namespaceMappings: NamespaceMap): typeof select;
interface NamespaceMap {
[namespacePrefix: string]: string;
}
/**
* Compile an XPath expression into an XPathExpression which can be (repeatedly) evaluated against a DOM.
* @param xpathText XPath expression as a string
* @param namespaceURLMapper Namespace resolver
* @return compiled expression
*/
function createExpression(xpathText: string, namespaceURLMapper: XPathNSResolver): XPathExpression;
/**
* Create an XPathNSResolver that resolves based on the information available in the context of a DOM node.
* @param node
*/
function createNSResolver(node: Node): XPathNSResolver;
/**
* Result of evaluating an XPathExpression.
*/
class XPathResult {
/**
* A result set containing whatever type naturally results from evaluation of the expression. Note that if the result is a node-set then UNORDERED_NODE_ITERATOR_TYPE is always the resulting type.
*/
static ANY_TYPE: number;
/**
* A result containing a single number. This is useful for example, in an XPath expression using the count() function.
*/
static NUMBER_TYPE: number;
/**
* A result containing a single string.
*/
static STRING_TYPE: number;
/**
* A result containing a single boolean value. This is useful for example, in an XPath expression using the not() function.
*/
static BOOLEAN_TYPE: number;
/**
* A result node-set containing all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.
*/
static UNORDERED_NODE_ITERATOR_TYPE: number;
/**
* A result node-set containing all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.
*/
static ORDERED_NODE_ITERATOR_TYPE: number;
/**
* A result node-set containing snapshots of all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.
*/
static UNORDERED_NODE_SNAPSHOT_TYPE: number;
/**
* A result node-set containing snapshots of all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.
*/
static ORDERED_NODE_SNAPSHOT_TYPE: number;
/**
* A result node-set containing any single node that matches the expression. The node is not necessarily the first node in the document that matches the expression.
*/
static ANY_UNORDERED_NODE_TYPE: number;
/**
* A result node-set containing the first node in the document that matches the expression.
*/
static FIRST_ORDERED_NODE_TYPE: number;
/**
* Type of this result. It is one of the enumerated result types.
*/
resultType: number;
/**
* Returns the next node in this result, if this result is one of the _ITERATOR_ result types.
*/
iterateNext(): Node;
/**
* returns the result node for a given index, if this result is one of the _SNAPSHOT_ result types.
* @param index
*/
snapshotItem(index: number): Node;
/**
* Number of nodes in this result, if this result is one of the _SNAPSHOT_ result types.
*/
snapshotLength: number;
/**
* Value of this result, if it is a BOOLEAN_TYPE result.
*/
booleanValue: boolean;
/**
* Value of this result, if it is a NUMBER_TYPE result.
*/
numberValue: number;
/**
* Value of this result, if it is a STRING_TYPE result.
*/
stringValue: string;
/**
* Value of this result, if it is a FIRST_ORDERED_NODE_TYPE result.
*/
singleNodeValue: Node;
}
/**
* A compiled XPath expression, ready to be (repeatedly) evaluated against a DOM node.
*/
interface XPathExpression {
/**
* evaluate this expression against a DOM node.
* @param contextNode
* @param resultType
* @param result
*/
evaluate(contextNode: Node, resultType: number, result?: XPathResult): XPathResult;
}
/**
* Object that can resolve XML namespace prefixes to namespace URIs.
*/
interface XPathNSResolver {
/**
* Given an XML namespace prefix, returns the corresponding XML namespace URI.
* @param prefix XML namespace prefix
* @return XML namespace URI
*/
lookupNamespaceURI(prefix: string): string;
}
}
+6 -1
View File
@@ -1106,7 +1106,12 @@ interface ZeptoCollection {
* @return
**/
size(): number;
/**
* Get the number of elements in this collection.
**/
length: number;
/**
* Extract the subset of this array, starting at start index. If end is specified, extract up to but not including end index.
* @param start