diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 0fa1322942..ef4467f223 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -164,6 +164,7 @@ All definitions files include a header with the author and editors, so at some p
* [jQuery.payment](http://needim.github.io/noty/) (by [Eric J. Smith](https://github.com/ejsmith/))
* [jQuery.pickadate](https://github.com/amsul/pickadate.js) (by [Theodore Brown](https://github.com/theodorejb))
* [jQuery.pjax](https://github.com/defunkt/jquery-pjax) (by [Junle Li](https://github.com/lijunle))
+* [jQuery.pjax.falsandtru](https://github.com/falsandtru/jquery.pjax.js/) (by [NewNotMoon](https://new.not-moon.net/))
* [jQuery.pnotify](http://sciactive.github.io/pnotify/) (by [David Sichau](https://github.com/DavidSichau/))
* [jQuery.postMessage](http://benalman.com/projects/jquery-postmessage-plugin/) (by [Junle Li](https://github.com/lijunle))
* [jQuery.prettyphoto](https://github.com/scaron/prettyphoto) (by [Paul Gaske](https://github.com/pgaske))
diff --git a/jquery.pjax.falsandtru/jquery.pjax-tests.ts b/jquery.pjax.falsandtru/jquery.pjax-tests.ts
new file mode 100644
index 0000000000..fd8cbaecde
--- /dev/null
+++ b/jquery.pjax.falsandtru/jquery.pjax-tests.ts
@@ -0,0 +1,96 @@
+///
+///
+
+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);
+ });
+}
+
+function test_pjax_progressbar() {
+ $('body').append('
');
+ $.pjax({
+ area: 'div.pjax',
+ callbacks: {
+ before: function () {
+ $('div.loading').children().width('');
+ $('div.loading').fadeIn(0);
+ },
+ ajax: {
+ xhr: function () {
+ var xhr = jQuery.ajaxSettings.xhr();
+
+ $('div.loading').children().width('5%');
+ if (xhr instanceof Object && 'onprogress' in xhr) {
+ xhr.addEventListener('progress', function (event) {
+ var percentage = event.total ? event.loaded / event.total : 0.4;
+ percentage = percentage * 90 + 5;
+ $('div.loading').children().width(percentage + '%');
+ }, false);
+ xhr.addEventListener('load', function (event) {
+ $('div.loading').children().width('95%');
+ }, false);
+ xhr.addEventListener('error', function (event) {
+ $('div.loading').children().css('background-color', '#00f');
+ }, false);
+ }
+ return xhr;
+ }
+ },
+ update: {
+ content: {
+ after: function () {
+ $('div.loading').children().width('96.25%');
+ }
+ },
+ css: {
+ after: function () {
+ $('div.loading').children().width('97.5%');
+ }
+ },
+ script: {
+ after: function () {
+ $('div.loading').children().width('98.75%');
+ }
+ },
+ render: {
+ after: function () {
+ $('div.loading').children().width('100%');
+ $('div.loading').fadeOut(50);
+ }
+ }
+ }
+ },
+ ajax: { timeout: 3000 },
+ wait: 1000
+ });
+}
\ No newline at end of file
diff --git a/jquery.pjax.falsandtru/jquery.pjax.d.ts b/jquery.pjax.falsandtru/jquery.pjax.d.ts
new file mode 100644
index 0000000000..07bc153df3
--- /dev/null
+++ b/jquery.pjax.falsandtru/jquery.pjax.d.ts
@@ -0,0 +1,189 @@
+// Type definitions for jquery.pjax.ts by falsandtru
+// Project: https://github.com/falsandtru/jquery.pjax.js/
+// Definitions by: 新ゝ月 NewNotMoon
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+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;
+}
\ No newline at end of file