diff --git a/Definitions/sammyjs-0.7.d.ts b/Definitions/sammyjs-0.7.d.ts
index b26d23ca28..42723157a5 100644
--- a/Definitions/sammyjs-0.7.d.ts
+++ b/Definitions/sammyjs-0.7.d.ts
@@ -5,224 +5,225 @@
///
-interface Sammy {
- (): Application;
- (selector: string): Application;
- (handler: Function): Application;
- (selector: string, handler: Function): Application;
+module Sammy {
+ export function (): Sammy.Application;
+ export function (selector: string): Sammy.Application;
+ export function (handler: Function): Sammy.Application;
+ export function (selector: string, handler: Function): Sammy.Application;
- Cache(app, options);
- DataCacheProxy(initial, $element);
- DataLocationProxy(app, data_name, href_attribute);
- DefaultLocationProxy(app, run_interval_every);
- EJS(app, method_alias);
+ export function Cache(app, options);
+ export function DataCacheProxy(initial, $element);
+ export function DataLocationProxy(app, data_name, href_attribute);
+ export function DefaultLocationProxy(app, run_interval_every);
+ export function EJS(app, method_alias);
- Exceptional(app, errorReporter);
- Flash(app);
- Form(app); // formFor ( name, object, content_callback )
+ export function Exceptional(app, errorReporter);
+ export function Flash(app);
+ export function Form(app); // formFor ( name, object, content_callback )
- Haml(app, method_alias);
- Handlebars(app, method_alias);
- Hogan(app, method_alias);
- Hoptoad(app, errorReporter);
- JSON(app);
- Meld(app, method_alias);
- MemoryCacheProxy(initial);
- Mustache(app, method_alias);
- NestedParams(app);
- OAuth2(app);
- PathLocationProxy(app);
- Pure(app, method_alias);
- PushLocationProxy(app);
- Session(app, options);
- Storage(app);
+ export function Haml(app, method_alias);
+ export function Handlebars(app, method_alias);
+ export function Hogan(app, method_alias);
+ export function Hoptoad(app, errorReporter);
+ export function JSON(app);
+ export function Meld(app, method_alias);
+ export function MemoryCacheProxy(initial);
+ export function Mustache(app, method_alias);
+ export function NestedParams(app);
+ export function OAuth2(app);
+ export function PathLocationProxy(app);
+ export function Pure(app, method_alias);
+ export function PushLocationProxy(app);
+ export function Session(app, options);
+ export function Storage(app);
- Title();
- Tmpl(app, method_alias);
- addLogger(logger);
- log();
+ export function Title();
+ export function Tmpl(app, method_alias);
+ export function addLogger(logger);
+ export function log();
+
+ export interface Object {
+
+ constructor (obj: any);
+
+ escapeHTML(s: string): string;
+ h(s: string): string;
+
+ has(key: string): bool;
+ join(...args: any[]): string;
+ keys(attributes_only?: bool): string[];
+ log(...args: any[]): void;
+ toHTML(): string;
+ toHash(): any;
+ toString(include_functions?: bool): string;
+ }
+
+ export interface Application extends Object {
+
+ ROUTE_VERBS: string[];
+ APP_EVENTS: string[];
+
+ (appFn: Function);
+
+ $element(selector?: string): JQuery;
+ after(callback: Function): Application;
+ any(verb: string, path: string, callback: Function): void;
+ route(verb: string, path: string, callback: Function): void;
+ around(callback: Function): Application;
+ before(options: any, callback: Function): Application;
+ bind(name: string, callback: Function): Application;
+ bind(name: string, data: any, callback: Function): Application;
+ bindToAllEvents(callback: Function): Application;
+ clearTemplateCache(): any;
+ contextMatchesOptions(context: any, match_options: any, positive?: bool): bool;
+ del(path: string, callback: Function): Application;
+ del(path: RegExp, callback: Function): Application;
+ destroy(): Application;
+ error(message: string, original_error: Error): void;
+ eventNamespace(): string;
+ get(path: string, callback: Function): Application;
+ get(path: RegExp, callback: Function): Application;
+ getLocation(): string;
+ helper(name: string, method: Function): Application;
+ helpers(extensions: any): Application;
+ isRunning(): bool;
+ log(...params: any[]): void;
+ lookupRoute(verb: string, path: string): any;
+ mapRoutes(route_array: any[]): Application;
+ notFound(verb: string, path: string): any;
+ post(path: string, callback: Function): Application;
+ post(path: RegExp, callback: Function): Application;
+ put(path: string, callback: Function): Application;
+ put(path: RegExp, callback: Function): Application;
+ refresh(): Application;
+ routablePath(path: string): string;
+ route(verb: string, path: string, callback: Function): Application;
+ route(verb: string, path: RegExp, callback: Function): Application;
+ run(start_url?: string): Application;
+ runRoute(verb: string, path: string, params: any, target: any): any;
+ setLocation(new_location: string): string;
+ setLocationProxy(new_proxy: DataLocationProxy): void;
+ swap(content: any, callback: Function): string;
+ templateCache(key: string, value: any): any;
+ toString(): string;
+ trigger(name: string, data?: any): Application;
+ unload(): Application;
+ use(...params: any[]): void;
+ }
+
+ export interface DataLocationProxy {
+ constructor (app, run_interval_every): DataLocationProxy;
+ fullPath(location_obj): string;
+ bind(): void;
+ unbind(): void;
+ setLocation(new_location: string): string;
+ _startPolling(every: number): void;
+ }
+
+ export interface EventContext extends Object {
+ constructor (app, verb, path, params, target);
+ $element(): JQuery;
+ engineFor(engine: any): any;
+ eventNamespace(): string;
+ interpolate(content: any, data: any, engine: any, partials): EventContext;
+ json(str: string): any;
+ load(location: any, options?: any, callback?: Function): any;
+ loadPartials(partials);
+ notFound(): any;
+ partial(location, data, callback, partials);
+ redirect(...params: any[]): void;
+ render(location: string, data: any, callback: Function, partials): RenderContext;
+ renderEach(location: any, name?: string, data?: any, callback?: Function): RenderContext;
+ send(...params: any[]): RenderContext;
+ swap(contents: any, callback: Function): string;
+ toString(): string;
+ trigger(name: string, data?: any): EventContext;
+ }
+
+ export interface FormBuilder {
+ constructor (name, object);
+ checkbox(keypath, value, attributes);
+ close();
+ hidden(keypath, attributes);
+ label(keypath, content, attributes);
+ open(attributes);
+ password(keypath, attributes);
+ radio(keypath, value, attributes);
+ select(keypath, options, attributes);
+ submit(attributes);
+ text(keypath, attributes);
+ textarea(keypath, attributes);
+ }
+
+ export interface GoogleAnalytics {
+ constructor (app, tracker);
+ noTrack();
+ track(path);
+ }
+
+ export interface RenderContext extends Object {
+ constructor (event_context);
+ appendTo(selector: string): RenderContext;
+ collect(array: any[], callback: Function, now?: bool): RenderContext;
+ interpolate(data: any, engine?: any, retain?: bool): RenderContext;
+ load(location: string, options?: any, callback?: Function): RenderContext;
+ loadPartials(partials?: any): RenderContext;
+ next(content: any): void;
+ partial(location: string, callback: Function, partials): RenderContext;
+ partial(location: string, data: any, callback: Function, partials): RenderContext;
+ prependTo(selector: string): RenderContext;
+ render(callback: Function): RenderContext;
+ render(location: string, data: any): RenderContext;
+ render(location: string, callback: Function, partials?: any): RenderContext;
+ render(location: string, data: any, callback: Function): RenderContext;
+ render(location: string, data: any, callback: Function, partials: any): RenderContext;
+ renderEach(location: string, name: string, data: any, callback: Function): RenderContext;
+ replace(selector: string): RenderContext;
+ send(...params: any[]): RenderContext;
+ swap(callback: Function): RenderContext;
+ then(callback: Function): RenderContext;
+ trigger(name, data);
+ wait(): void;
+ }
+
+
+ export interface StoreOptions {
+ name?: string;
+ element?: string;
+ type?: string;
+ memory?: any;
+ data?: any;
+ cookie?: any;
+ local?: any;
+ session?: any;
+ }
+
+ export interface Store {
+ constructor (options);
+
+ clear(key);
+ clearAll();
+ each(callback);
+ exists(key);
+ fetch(key, callback);
+ filter(callback);
+ first(callback);
+ get(key);
+ isAvailable();
+ keys();
+ load(key, path, callback);
+ set(key, value);
+
+ Cookie(name, element, options);
+ Data(name, element);
+ LocalStorage(name, element);
+ Memory(name, element);
+ SessionStorage(name, element);
+ isAvailable(type);
+ Template(app, method_alias);
+ }
- Object: Object;
}
-
-interface Object {
-
- constructor (obj: any);
-
- escapeHTML(s: string): string;
- h(s: string): string;
-
- has(key: string): bool;
- join(...args: any[]): string;
- keys(attributes_only?: bool): string[];
- log(...args: any[]): void;
- toHTML(): string;
- toHash(): any;
- toString(include_functions?: bool): string;
-}
-
-interface Application extends Object {
-
- ROUTE_VERBS: string[];
- APP_EVENTS: string[];
-
- (appFn: Function);
-
- $element(selector: string): JQuery;
- after: (callback: Function): Application;
- any(verb: string, path: string, callback: Function): void;
- route(verb: string, path: string, callback: Function): void;
- around(callback);
- before(options: any, callback: Function): Application;
- bind(name: string, data: any, callback: Function): Application;
- bindToAllEvents(callback);
- clearTemplateCache();
- contextMatchesOptions(context, match_options, positive);
- del(path: string, callback: Function): Application;
- del(path: RegExp, callback: Function): Application;
- destroy();
- error(message, original_error);
- eventNamespace(): string;
- get(path: string, callback: Function): Application;
- get(path: RegExp, callback: Function): Application;
- getLocation(): string;
- helper(name, method);
- helpers(extensions);
- isRunning();
- log(...params: any[]): void;
- lookupRoute(verb, path);
- mapRoutes(route_array: any[]): Application;
- notFound(verb, path);
- post(path: string, callback: Function): Application;
- post(path: RegExp, callback: Function): Application;
- put(path: string, callback: Function): Application;
- put(path: RegExp, callback: Function): Application;
- refresh(): Application;
- routablePath(path);
- route(verb: string, path: string, callback: Function): Application;
- route(verb: string, path: RegExp, callback: Function): Application;
- run(start_url);
- runRoute(verb, path, params, target);
- setLocation(new_location: string): string;
- setLocationProxy(new_proxy: DataLocationProxy): void;
- swap(content, callback);
- templateCache(key, value);
- toString(): string;
- trigger(name: string, data: any): Application;
- unload();
- use(...params: any[]): void;
-}
-
-interface DataLocationProxy {
- (app, run_interval_every): DataLocationProxy;
- fullPath(location_obj): string;
- bind(): void;
- unbind(): void;
- setLocation(new_location: string): string;
- _startPolling(every: number): void;
-}
-
-interface EventContext {
- constructor (app, verb, path, params, target);
- $element();
- engineFor(engine);
- eventNamespace();
- interpolate(content, data, engine, partials);
- json(string);
- load(location, options, callback);
- loadPartials(partials);
- notFound();
- partial(location, data, callback, partials);
- redirect();
- render(location, data, callback, partials);
- renderEach(location, name, data, callback);
- send();
- swap(contents, callback);
- toString();
- trigger(name, data);
-}
-
-interface FormBuilder {
- constructor (name, object);
- checkbox(keypath, value, attributes);
- close();
- hidden(keypath, attributes);
- label(keypath, content, attributes);
- open(attributes);
- password(keypath, attributes);
- radio(keypath, value, attributes);
- select(keypath, options, attributes);
- submit(attributes);
- text(keypath, attributes);
- textarea(keypath, attributes);
-}
-
-interface GoogleAnalytics {
- constructor (app, tracker);
- noTrack();
- track(path);
-}
-
-interface RenderContext {
- constructor (event_context);
- appendTo(selector);
- collect(array, callback, now);
- interpolate(data, engine, retain);
- load(location, options, callback);
- loadPartials(partials);
- next(content);
- partial(location, data, callback, partials);
- prependTo(selector);
- render(location, data, callback, partials);
- renderEach(location, name, data, callback);
- replace(selector);
- send();
- swap(callback);
- then(callback);
- trigger(name, data);
- wait();
-}
-
-
-interface StoreOptions {
- name?: string;
- element?: string;
- type?: string;
- memory?: any;
- data?: any;
- cookie?: any;
- local?: any;
- session?: any;
-}
-
-interface Store {
- constructor (options);
-
- clear(key);
- clearAll();
- each(callback);
- exists(key);
- fetch(key, callback);
- filter(callback);
- first(callback);
- get(key);
- isAvailable();
- keys();
- load(key, path, callback);
- set(key, value);
-
- Cookie(name, element, options);
- Data(name, element);
- LocalStorage(name, element);
- Memory(name, element);
- SessionStorage(name, element);
- isAvailable(type);
- Template(app, method_alias);
-}
-
-
interface JQueryStatic {
sammy: Sammy;
-}
-
-declare var Sammy: Sammy;
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/Tests/sammyjs-tests.ts b/Tests/sammyjs-tests.ts
index fa0fa3a67c..e6249c78a4 100644
--- a/Tests/sammyjs-tests.ts
+++ b/Tests/sammyjs-tests.ts
@@ -1,12 +1,11 @@
///
-var _this: RenderContext;
-
function test_general() {
var app = Sammy('#main', function () {
- var _this: Application;
+ var _this: Sammy.Application;
_this.use('Mustache');
_this.get('#/', function () {
+ var _this: Sammy.RenderContext;
_this.load('posts.json')
.renderEach('post.mustache')
.swap();
@@ -15,14 +14,16 @@ function test_general() {
app.run('#/');
- _this.get('#/', function(context) {
+ var _this: Sammy.Application;
+ _this.get('#/', function (context) {
+ var _this: Sammy.RenderContext;
_this.load('data/items.json')
- .then(function(items) {
- $.each(items, function(i, item) {
- context.log(item.title, '-', item.artist);
+ .then(function (items) {
+ $.each(items, function (i, item) {
+ context.log(item.title, '-', item.artist);
});
});
- });
+ });
}
function test_app() {
@@ -30,8 +31,10 @@ function test_app() {
s.toHTML();
var app = $.sammy(function () {
+
var current_user = false;
function checkLoggedIn(callback) {
+ var _this: Sammy.EventContext;
if (!current_user) {
$.getJSON('/session', function (json) {
if (json.login) {
@@ -46,10 +49,12 @@ function test_app() {
callback();
}
};
+ var _this: Sammy.Application;
_this.around(checkLoggedIn);
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.before('#/route', function () { });
_this.before({ except: { path: '#/route' } }, function () {
_this.log('not before #/route');
@@ -81,30 +86,32 @@ function test_app() {
app.contextMatchesOptions(context, { except: { path: ['#/otherpath', '#/thirdpath'] } });
var app = $.sammy(function (app) {
+ var _this: Sammy.Application;
$.each([1, 2, 3], function (i, num) {
app.helper('helper' + num, function () {
_this.log("I'm helper number " + num);
});
});
_this.get('#/', function () {
- _this.helper2();
});
});
var app = $.sammy(function () {
- helpers({
+ var _this: Sammy.Application;
+ _this.helpers({
upcase: function (text) {
return text.toString().toUpperCase();
}
});
- get('#/', function () {
+ _this.get('#/', function () {
with (_this) {
- $('#main').html(upcase($('#main').text());
+ $('#main').html(upcase($('#main').text()));
}
});
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.mapRoutes([
['get', '#/', function () { _this.log('index'); }],
['post', '#/create', 'addUser'],
@@ -113,15 +120,17 @@ function test_app() {
});
var app = $.sammy(function () { });
- $(function ()
+ $(function () {
app.run();
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.setLocationProxy(new Sammy.DataLocationProxy(_this));
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.swap = function (content, callback) {
var context = _this;
context.$element().fadeOut('slow', function () {
@@ -136,6 +145,7 @@ function test_app() {
});
var MyPlugin = function (app, prepend) {
+ var _this: Sammy.Application;
_this.helpers({
myhelper: function (text) {
alert(prepend + " " + text);
@@ -143,6 +153,7 @@ function test_app() {
});
};
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use(MyPlugin, '_this is my plugin');
_this.get('#/', function () {
_this.myhelper('and dont you forget it!');
@@ -150,6 +161,7 @@ function test_app() {
});
$.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Mustache');
_this.use('Storage');
});
@@ -157,6 +169,7 @@ function test_app() {
function test_misc() {
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.setLocationProxy(new Sammy.DataLocationProxy(_this, 'location', 'rel'));
_this.get('about', function () {
_this.partial('about.html');
@@ -164,6 +177,7 @@ function test_misc() {
});
$.sammy(function () {
+ var _this: Sammy.Application;
_this.get('#/:name', function () {
if (_this.params['name'] == 'sammy') {
_this.partial('name.html.erb', { name: 'Sammy' });
@@ -173,11 +187,12 @@ function test_misc() {
});
});
- redirect('#/other/route');
- redirect('#', 'other', 'route');
- render('mytemplate.mustache', { name: 'quirkey' })
+ var _this: Sammy.Application;
+ _this.redirect('#/other/route');
+ _this.redirect('#', 'other', 'route');
+ _this.render('mytemplate.mustache', { name: 'quirkey' })
.appendTo('ul');
- renderEach('mytemplate.mustache', [{ name: 'quirkey' }, { name: 'endor' }]);
+ _this.renderEach('mytemplate.mustache', [{ name: 'quirkey' }, { name: 'endor' }]);
var item = {
name: 'My Item',
@@ -197,6 +212,7 @@ function test_misc() {
form.select('size', options);
$.sammy(function () {
+ var _this: Sammy.Application;
_this.use('GoogleAnalytics')
_this.get('#/dont/track/me', function () {
_this.noTrack();
@@ -204,6 +220,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use(Sammy.Haml);
_this.get('#/hello/:name', function () {
_this.title = 'Hello!'
@@ -214,6 +231,7 @@ function test_misc() {
app.run()
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Handlebars', 'hb');
_this.get('#/hello/:name', function () {
_this.title = 'Hello!'
@@ -223,6 +241,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Handlebars', 'hb');
_this.get('#/hello/:name/to/:friend', function (context) {
_this.load('mypartial.hb')
@@ -236,6 +255,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Hogan', 'hg');
_this.get('#/hello/:name', function () {
_this.title = 'Hello!'
@@ -245,6 +265,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Hogan', 'hg');
_this.get('#/hello/:name/to/:friend', function (context) {
_this.load('mypartial.hg')
@@ -258,6 +279,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use(Sammy.JSON);
_this.get('#/', function () {
_this.json({ user_id: 123 });
@@ -267,6 +289,7 @@ function test_misc() {
})
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Mustache', 'ms');
_this.get('#/hello/:name', function () {
_this.title = 'Hello!'
@@ -276,6 +299,7 @@ function test_misc() {
});
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use('Mustache', 'ms');
_this.get('#/hello/:name/to/:friend', function (context) {
_this.load('mypartial.ms')
@@ -289,12 +313,14 @@ function test_misc() {
});
var app = $.sammy(function (app) {
+ var _this: Sammy.Application;
_this.use(Sammy.NestedParams);
_this.post('#/parse_me', function (context) {
$.log(_this.params);
});
});
+ var _this: Sammy.Application;
_this.use('Storage');
_this.use('OAuth2');
_this.oauthorize = "/oauth/authorize";
@@ -407,46 +433,54 @@ function test_misc() {
}
function test_routes() {
- route('get', '#/', function () {
+ var _this: Sammy.Application;
+
+ _this.route('get', '#/', function () {
});
- put('#/post/form', function () {
+ _this.put('#/post/form', function () {
return false;
});
- get('/test/123', function () {
+ _thisget('/test/123', function () {
});
- get('#/by_name/:name', function () {
+ _thisget('#/by_name/:name', function () {
alert(_this.params['name']);
});
- get(/\#\/by_name\/(.*)/, function () {
+ _thisget(/\#\/by_name\/(.*)/, function () {
alert(_this.params['splat']);
});
- get('#/by_name/:name', function () {
+ _thisget('#/by_name/:name', function () {
_this.redirect('#', _this.params['name']);
});
- get('#/by_name/:name', function (context) {
+ _thisget('#/by_name/:name', function (context) {
context.redirect('#', _this.params['name']);
});
}
function test_events() {
- bind('db-loaded', function (e, data) {
+ var _this: Sammy.Application;
+
+ _this.bind('db-loaded', function (e, data) {
+ var _this: Sammy.EventContext;
_this.redirect('#/');
});
var app = $.sammy(function () {
- bind('test', function () {
+ var _this: Sammy.Application;
+ _this.bind('test', function () {
+ var _this: Sammy.EventContext;
_this.trigger('other-event');
});
});
app.trigger('other-event');
var app = $.sammy(function () {
- bind('test', function (e, data) {
+ var _this: Sammy.Application;
+ _this.bind('test', function (e, data) {
alert(data['my_data']);
});
- get('#/', function () {
+ _this.get('#/', function () {
_this.trigger('test', { my_data: 'EVENTED!' });
});
});
@@ -454,6 +488,7 @@ function test_events() {
function test_plugins() {
var MyPlugin = function (app) {
+ var _this: Sammy.Application;
_this.helpers({
alert: function (message) {
_this.log("ALERT! " + message);
@@ -461,12 +496,15 @@ function test_plugins() {
});
};
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use(MyPlugin);
_this.get('#/', function () {
+ var _this: Sammy.EventContext;
_this.alert("I'm home");
});
});
var MyAdvancedPlugin = function (app, prefix, suffix) {
+ var _this: Sammy.Application;
_this.helpers({
alert: function (message) {
_this.log(prefix, message, suffix);
@@ -475,6 +513,7 @@ function test_plugins() {
};
var app = $.sammy(function () {
+ var _this: Sammy.Application;
_this.use(MyAdvancedPlugin, 'BEFORE!', 'AFTER!');
_this.get('#/', function () {
_this.alert("I'm home");
@@ -482,6 +521,7 @@ function test_plugins() {
});
var dbLoadAndDisplay = function (app) {
+ var _this: Sammy.Application;
_this.get('#/', function () {
_this.record = _this.app.db[_this.app.element_selector];
_this.app.swap(_this.record.toHTML());