From 62f6c2822c9fed4534284ede302d8650df323ac4 Mon Sep 17 00:00:00 2001 From: Matt Brooks Date: Mon, 6 Jul 2015 17:43:17 +0100 Subject: [PATCH 1/4] Add Microsoft JQuery Unobtrusive Validation --- .../jquery.validation.unobtrusive-tests.ts | 13 ++++++++ .../jquery.validation.unobtrusive.d.ts | 33 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts create mode 100644 jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts diff --git a/jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts b/jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts new file mode 100644 index 000000000..169fc1c5b --- /dev/null +++ b/jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts @@ -0,0 +1,13 @@ +/// + +$.validator.unobtrusive.adapters.add("adapter", () => { }); +$.validator.unobtrusive.adapters.add("adapter", function () { +}); + +$.validator.unobtrusive.adapters.addBool("adapter"); + +$.validator.unobtrusive.adapters.addMethod("adapter",(value, element) => { + return true; +}) + +$.validator.unobtrusive.parse(document); diff --git a/jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts b/jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts new file mode 100644 index 000000000..866d6607d --- /dev/null +++ b/jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts @@ -0,0 +1,33 @@ +// Type definitions for Microsoft jQuery Unobtrusive Validation v3.2.3 +// Project: http://aspnetwebstack.codeplex.com/ +// Definitions by: Matt Brooks +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module MicrosoftJQueryUnobtrusiveValidation { + type JQuerySelector = string | Document | Element | JQuery; + + interface Adapters { + [key: string]: Function; + add(adapterName: string, fn: Function): Adapters; + add(adapterName: string, params: any, fn: Function): Adapters; + addMinMax(adapterName: string, minRuleName: string, maxRuleName: string, minMaxRuleName: string, minAttribute?: string, maxAttribute?: string): Adapters; + addSingleVal(adapterName: string, ruleName: string): Adapters; + addSingleVal(adapterName: string, attribute: string, ruleName: string): Adapters; + addBool(adapterName: string, ruleName?: string): Adapters; + addMethod(adapterName: string, fn: (value: string, element: Element, params: any) => any): Adapters; + } + + interface Validator { + adapters: Adapters; + parseElement(element: JQuerySelector, skipAttach?: boolean): void; + parse(selector: JQuerySelector): void; + } +} + +declare module JQueryValidation { + interface ValidatorStatic { + unobtrusive: MicrosoftJQueryUnobtrusiveValidation.Validator; + } +} From ec21c91b3c34f9651f271aeb61003921885f78fe Mon Sep 17 00:00:00 2001 From: Matt Brooks Date: Tue, 7 Jul 2015 08:41:43 +0100 Subject: [PATCH 2/4] Align definition name with Bower package name --- .../jquery-validation-unobtrusive-tests.ts | 2 +- .../jquery-validation-unobtrusive.d.ts | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts => jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts (83%) rename jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts => jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts (100%) diff --git a/jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts similarity index 83% rename from jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts rename to jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts index 169fc1c5b..f50535e9d 100644 --- a/jquery.validation.unobtrusive/jquery.validation.unobtrusive-tests.ts +++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts @@ -1,4 +1,4 @@ -/// +/// $.validator.unobtrusive.adapters.add("adapter", () => { }); $.validator.unobtrusive.adapters.add("adapter", function () { diff --git a/jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts similarity index 100% rename from jquery.validation.unobtrusive/jquery.validation.unobtrusive.d.ts rename to jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts From 4618f92d024f4b554476f4bb5f55850da7e28755 Mon Sep 17 00:00:00 2001 From: Matt Brooks Date: Tue, 7 Jul 2015 08:55:54 +0100 Subject: [PATCH 3/4] Add more tests --- .../jquery-validation-unobtrusive-tests.ts | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts index f50535e9d..94bd18bdc 100644 --- a/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts +++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts @@ -1,13 +1,49 @@ /// +// Test overloads for `add` method $.validator.unobtrusive.adapters.add("adapter", () => { }); $.validator.unobtrusive.adapters.add("adapter", function () { + return true; +}); +$.validator.unobtrusive.adapters.add("adapter", ["param1", "param2"], () => { }); + +// Test overloads for `addMinMax` method +$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule"); +$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule", "minAttr"); +$.validator.unobtrusive.adapters.addMinMax("adapter", "minRule", "maxRule", "minMaxRule", "minAttr", "maxAttr"); + +// Test overloads for `addSingleVal` method +$.validator.unobtrusive.adapters.addSingleVal("adapter", "rule"); +$.validator.unobtrusive.adapters.addSingleVal("adapter", "attr", "rule"); + +// Test overloads for `addBool` method +$.validator.unobtrusive.adapters.addBool("adapter"); +$.validator.unobtrusive.adapters.addBool("adapter", "rule"); + +// Test `addMethod` +$.validator.unobtrusive.adapters.addMethod("adapter", (value, element, params) => { + return true; }); -$.validator.unobtrusive.adapters.addBool("adapter"); +// Test method chaining +$.validator.unobtrusive.adapters + .add("required", () => { }) + .addMinMax("length", "minlength", "maxlength", "rangelength") + .addSingleVal("regex", "pattern") + .addBool("url") + .addMethod("nonalphamin", (value, element, nonalphamin) => { + return null; + }); -$.validator.unobtrusive.adapters.addMethod("adapter",(value, element) => { - return true; -}) +// Test overloads for `parseElement` +$.validator.unobtrusive.parseElement("form"); +$.validator.unobtrusive.parseElement(document); +$.validator.unobtrusive.parseElement(document.getElementById("the-form")); +$.validator.unobtrusive.parseElement($("#the-form")); +$.validator.unobtrusive.parseElement($("#the-form"), true); +// Test overloads for `parse` +$.validator.unobtrusive.parse("form"); $.validator.unobtrusive.parse(document); +$.validator.unobtrusive.parse(document.getElementById("the-form")); +$.validator.unobtrusive.parse($("#the-form")); From a549443564ccc7c243ef86b09364ed3010847f04 Mon Sep 17 00:00:00 2001 From: Matt Brooks Date: Tue, 7 Jul 2015 09:22:39 +0100 Subject: [PATCH 4/4] Fix `Adapters` definition --- .../jquery-validation-unobtrusive-tests.ts | 13 +++++++++++++ .../jquery-validation-unobtrusive.d.ts | 11 ++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts index 94bd18bdc..96ccbe325 100644 --- a/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts +++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive-tests.ts @@ -35,6 +35,19 @@ $.validator.unobtrusive.adapters return null; }); +// Test `Adapters` indexer +var adapterName = $.validator.unobtrusive.adapters[0].name; + +// Test `Adapters` iterator +$.each($.validator.unobtrusive.adapters, function (index, adapter) { + console.log(adapter.name); + console.log(adapter.params); + console.log(adapter.adapt); +}); + +// Test `Adapters` array +$.validator.unobtrusive.adapters.push({ name: "adapter", params: ["param1"], adapt: () => { } }); + // Test overloads for `parseElement` $.validator.unobtrusive.parseElement("form"); $.validator.unobtrusive.parseElement(document); diff --git a/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts b/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts index 866d6607d..f14b58913 100644 --- a/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts +++ b/jquery-validation-unobtrusive/jquery-validation-unobtrusive.d.ts @@ -8,10 +8,15 @@ declare module MicrosoftJQueryUnobtrusiveValidation { type JQuerySelector = string | Document | Element | JQuery; - interface Adapters { - [key: string]: Function; + interface Adapter { + name: string; + params: string[]; + adapt: Function + } + + interface Adapters extends Array { add(adapterName: string, fn: Function): Adapters; - add(adapterName: string, params: any, fn: Function): Adapters; + add(adapterName: string, params: string[], fn: Function): Adapters; addMinMax(adapterName: string, minRuleName: string, maxRuleName: string, minMaxRuleName: string, minAttribute?: string, maxAttribute?: string): Adapters; addSingleVal(adapterName: string, ruleName: string): Adapters; addSingleVal(adapterName: string, attribute: string, ruleName: string): Adapters;