From 9936e51718378c2d82e202386bf0e84ffea39665 Mon Sep 17 00:00:00 2001 From: egucciar Date: Tue, 13 Oct 2015 11:59:59 -0400 Subject: [PATCH 01/12] Added severity option --- dist/knockout.validation.js | 7 +++++-- src/api.js | 11 +++++++---- src/extenders.js | 10 ++++++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index 07b697b6..c269eb5a 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -512,6 +512,7 @@ kv.configuration = configuration; // 1. Just the params to be passed to the validator // 2. An object containing the Message to be used and the Params to pass to the validator // 3. A condition when the validation rule to be applied + // 4. An object containing the severity to be ysed // // Example: // var test = ko.observable(3).extend({ @@ -524,17 +525,19 @@ kv.configuration = configuration; // } // )}; // - if (params && (params.message || params.onlyIf)) { //if it has a message or condition object, then its an object literal to use + if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, params: utils.isEmptyVal(params.params) ? true : params.params, + severity: params.severity || 1, condition: params.onlyIf }); } else { return kv.addRule(observable, { rule: ruleName, - params: params + params: params, + severity: 1 }); } }; diff --git a/src/api.js b/src/api.js index d9c8ad02..b412856d 100644 --- a/src/api.js +++ b/src/api.js @@ -314,6 +314,7 @@ // 1. Just the params to be passed to the validator // 2. An object containing the Message to be used and the Params to pass to the validator // 3. A condition when the validation rule to be applied + // 4. An object containing the severity to be ysed // // Example: // var test = ko.observable(3).extend({ @@ -326,17 +327,19 @@ // } // )}; // - if (params && (params.message || params.onlyIf)) { //if it has a message or condition object, then its an object literal to use - return ko.validation.addRule(observable, { + if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + return kv.addRule(observable, { rule: ruleName, message: params.message, params: utils.isEmptyVal(params.params) ? true : params.params, + severity: params.severity || 1, condition: params.onlyIf }); } else { - return ko.validation.addRule(observable, { + return kv.addRule(observable, { rule: ruleName, - params: params + params: params, + severity: 1 }); } }; diff --git a/src/extenders.js b/src/extenders.js index 4f69493b..fe03cd9b 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -42,12 +42,13 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid - + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.severity = ko.observable(1); + // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it // - // Rule Context = { rule: '', params: '', message: '' } + // Rule Context = { rule: '', params: '', message: '', severity: ' Date: Tue, 13 Oct 2015 12:02:40 -0400 Subject: [PATCH 02/12] update bower to 2.0.4 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b8b64f59..17d054cb 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "knockout-validation", - "version": "2.0.3", + "version": "2.0.4", "description": "A KnockoutJS Plugin for model and property validation", "main": "dist/knockout.validation.js", "license": "MIT", From 22587c1c89de2fb4a36700badb426c127c7d917d Mon Sep 17 00:00:00 2001 From: egucciar Date: Tue, 13 Oct 2015 12:06:12 -0400 Subject: [PATCH 03/12] changed repo --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 17d054cb..5d732f08 100644 --- a/bower.json +++ b/bower.json @@ -20,7 +20,7 @@ "homepage": "https://github.com/Knockout-Contrib/Knockout-Validation", "repository": { "type": "git", - "url": "git://github.com/Knockout-Contrib/Knockout-Validation.git" + "url": "git://github.com/EikosPartners/Knockout-Validation.git" }, "dependencies": { "knockout": ">=2.3.0" From 12dba8a5707da5e95d666c1c6ec6eae3acf5b197 Mon Sep 17 00:00:00 2001 From: egucciar Date: Tue, 13 Oct 2015 12:29:27 -0400 Subject: [PATCH 04/12] Fixed issues and update to 2.0.5 --- bower.json | 2 +- dist/knockout.validation.js | 34 +++++++++++++++++++++++++--------- src/api.js | 2 +- src/extenders.js | 30 ++++++++++++++++++++++-------- 4 files changed, 49 insertions(+), 19 deletions(-) diff --git a/bower.json b/bower.json index 5d732f08..b9f7a717 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "knockout-validation", - "version": "2.0.4", + "version": "2.0.5", "description": "A KnockoutJS Plugin for model and property validation", "main": "dist/knockout.validation.js", "license": "MIT", diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index c269eb5a..6125a98a 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -512,7 +512,7 @@ kv.configuration = configuration; // 1. Just the params to be passed to the validator // 2. An object containing the Message to be used and the Params to pass to the validator // 3. A condition when the validation rule to be applied - // 4. An object containing the severity to be ysed + // 4. An object containing the severity to be used // // Example: // var test = ko.observable(3).extend({ @@ -1207,12 +1207,13 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid - + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.severity = ko.observable(1); + // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it // - // Rule Context = { rule: '', params: '', message: '' } + // Rule Context = { rule: '', params: '', message: '', severity: ' Date: Wed, 15 Jun 2016 14:58:35 -0400 Subject: [PATCH 05/12] Fix severity being set in validator --- dist/knockout.validation.js | 2 +- src/extenders.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index 6125a98a..1dc95ece 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -1301,7 +1301,7 @@ function validateSync(observable, rule, ctx) { observable.setError(kv.formatMessage( ctx.message || rule.message, unwrap(ctx.params), - observable), ctx.severity); + observable), ctx.severity || rule.severity); return ctx.severity === 1 ? false : "warning"; } else { return true; diff --git a/src/extenders.js b/src/extenders.js index 7e558ce1..f0bc6025 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -136,7 +136,7 @@ function validateSync(observable, rule, ctx) { observable.setError(kv.formatMessage( ctx.message || rule.message, unwrap(ctx.params), - observable), ctx.severity); + observable), ctx.severity || rule.severity); return ctx.severity === 1 ? false : "warning"; } else { return true; From ff0fe2d70e56fd40c2f2fc4b905122ea5e71364b Mon Sep 17 00:00:00 2001 From: egucciar Date: Wed, 15 Jun 2016 15:56:46 -0400 Subject: [PATCH 06/12] Update the bower.json version --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b9f7a717..babd3ec7 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "knockout-validation", - "version": "2.0.5", + "version": "2.0.6", "description": "A KnockoutJS Plugin for model and property validation", "main": "dist/knockout.validation.js", "license": "MIT", From e22bcd7270af1d7268fe03ab449919a7911647b9 Mon Sep 17 00:00:00 2001 From: Hekku2 Date: Thu, 3 Nov 2016 20:01:18 +0200 Subject: [PATCH 07/12] Added tests for severity Fixed jshint-warnings Fixed case where observable with severity-function defined causes errors. This can happen when for example 'equal'-rule is used and it refers to validatable observable. --- dist/knockout.validation.js | 2 +- src/api.js | 6 ++-- src/extenders.js | 8 +++--- test/api-tests.js | 39 +++++++++++++++++++++----- test/validation-tests.js | 56 +++++++++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 15 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index 1dc95ece..e6ab5443 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -525,7 +525,7 @@ kv.configuration = configuration; // } // )}; // - if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, diff --git a/src/api.js b/src/api.js index e590af2a..ec52d0db 100644 --- a/src/api.js +++ b/src/api.js @@ -327,8 +327,8 @@ // } // )}; // - if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use - return kv.addRule(observable, { + if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + return ko.validation.addRule(observable, { rule: ruleName, message: params.message, params: utils.isEmptyVal(params.params) ? true : params.params, @@ -336,7 +336,7 @@ condition: params.onlyIf }); } else { - return kv.addRule(observable, { + return ko.validation.addRule(observable, { rule: ruleName, params: params, severity: 1 diff --git a/src/extenders.js b/src/extenders.js index f0bc6025..0ab64ceb 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -133,9 +133,9 @@ function validateSync(observable, rule, ctx) { if (!rule.validator(observable(), (ctx.params === undefined ? true : ko.utils.unwrapObservable(ctx.params)))) { // default param is true, eg. required = true //not valid, so format the error message and stick it in the 'error' variable - observable.setError(kv.formatMessage( + observable.setError(ko.validation.formatMessage( ctx.message || rule.message, - unwrap(ctx.params), + ko.utils.unwrapObservable(ctx.params), observable), ctx.severity || rule.severity); return ctx.severity === 1 ? false : "warning"; } else { @@ -185,7 +185,7 @@ function validateAsync(observable, rule, ctx) { }); } -kv.validateObservable = function (observable) { +ko.validation.validateObservable = function (observable) { var i = 0, rule, // the rule validator to execute ctx, // the current Rule Context for the loop @@ -205,7 +205,7 @@ kv.validateObservable = function (observable) { } //get the core Rule to use for validation - rule = ctx.rule ? kv.rules[ctx.rule] : ctx; + rule = ctx.rule ? ko.validation.rules[ctx.rule] : ctx; if (rule['async'] || ctx['async']) { //run async validation diff --git a/test/api-tests.js b/test/api-tests.js index 24fbcb9b..56691ea4 100644 --- a/test/api-tests.js +++ b/test/api-tests.js @@ -766,7 +766,10 @@ QUnit.test('setRules applies rules to all properties', function(assert) { }, grandchild: { property3: { - number: true + number: true, + required: { + severity: 2 + } } }, ignoredDefinition: { required: true } @@ -799,22 +802,23 @@ QUnit.test('setRules applies rules to all properties', function(assert) { //check that all rules have been applied assert.deepEqual(target.property1.rules(), [ - { rule: 'required', params: true }, - { rule: 'min', params: 10 }, - { rule: 'max', params: 99 } + { rule: 'required', params: true, severity: 1 }, + { rule: 'min', params: 10, severity: 1 }, + { rule: 'max', params: 99, severity: 1 } ]); assert.deepEqual(target.child.property2.rules(), [ - { rule: 'pattern', message: 'Only AlphaNumeric please', params: '^[a-z0-9].$', condition: undefined } + { rule: 'pattern', message: 'Only AlphaNumeric please', params: '^[a-z0-9].$', condition: undefined, severity: 1 } ]); assert.deepEqual(target.child.grandchild.property3.rules(), [ - { rule: 'number', params: true } + { rule: 'number', params: true, severity: 1 }, + { rule: 'required', condition: undefined, message: undefined, params: true, severity: 2 } ]); for (var i = 0; i < target.nestedArray().length; i++) { assert.deepEqual(target.nestedArray()[i].property4.rules(), [ - { rule: 'email', params: true } + { rule: 'email', params: true, severity: 1 } ]); } @@ -827,6 +831,27 @@ QUnit.test('setRules applies rules to all properties', function(assert) { assert.ok(!target.nestedArray()[2].ignoredProperty.rules); }); +QUnit.test('setRules work correctly when params is validatedObservable', function(assert) { + var equalityComparison = ko.observable().extend({ min: 2 }); + + var definition = { + property1: { + equal: equalityComparison + } + }; + + var target = { + property1: ko.observable() + }; + + ko.validation.setRules(target, definition); + + //check that all rules have been applied + assert.deepEqual(target.property1.rules(), [ + { rule: 'equal', params: equalityComparison, severity: 1 } + ]); +}); + QUnit.test('Issue #461 - validatedObservable works with nested view models if grouping.deep is true', function(assert) { ko.validation.init({grouping: {deep: true}}, true); diff --git a/test/validation-tests.js b/test/validation-tests.js index d63d1eea..4242812a 100644 --- a/test/validation-tests.js +++ b/test/validation-tests.js @@ -433,3 +433,59 @@ QUnit.test('message parameter receives params and observable when async', functi }); //#endregion + +//#region Severity tests + +QUnit.module('Severity tests'); + +QUnit.test('isValid returns false for warning severity', function(assert) { + var testObj = ko.observable('something').extend({ + required: { + severity: 2 + } + }); + testObj(''); + assert.equal(testObj.isValid(), false); + assert.equal(testObj.severity(), 2, 'Severity should equal severity defined in required-validation'); +}); + +QUnit.test('default severity is 1', function(assert) { + var testObj = ko.observable('something').extend({ + required: true + }); + testObj(''); + assert.equal(testObj.isValid(), false); + assert.equal(testObj.severity(), 1, 'Severity should be 1 when not defined'); +}); + +QUnit.test('Lowest invalid rule severity is returned', function(assert) { + var testObj = ko.observable('something').extend({ + minLength: { + params: 200, + severity: 3 + }, + email: { + severity: 2 + }, + required: { + severity: 1, + params: true + } + }); + testObj('test'); + assert.equal(testObj.isValid(), false); + assert.equal(testObj.severity(), 2, 'Lowest broken rule severity should be 2'); +}); + +QUnit.test('Lowest invalid rule severity for default severity is returned', function(assert) { + var testObj = ko.observable('something').extend({ + required: { + severity: 2 + }, + equal: 'cant be this.' + }); + testObj(''); + assert.equal(testObj.isValid(), false); + assert.equal(testObj.severity(), 1, 'Default severity for broken rule should be 1'); +}); +//#endregion From 466c0b336e5c0e0b5f3d193c55dc628899e19782 Mon Sep 17 00:00:00 2001 From: Hekku2 Date: Thu, 3 Nov 2016 20:32:06 +0200 Subject: [PATCH 08/12] Renamed 'severity' in 'validatable' to 'errorSeverity' Removed 'isObservable'-check, because it is not needed anymore. --- dist/knockout.validation.js | 8 ++++---- src/api.js | 2 +- src/extenders.js | 6 +++--- test/validation-tests.js | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index e6ab5443..ff7635eb 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -525,7 +525,7 @@ kv.configuration = configuration; // } // )}; // - if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, @@ -1207,8 +1207,8 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 - observable.severity = ko.observable(1); + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 + observable.errorSeverity = ko.observable(1); // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it @@ -1233,7 +1233,7 @@ ko.extenders['validatable'] = function (observable, options) { var previousIsValid = observable.__valid__.peek(); observable.error(error); - observable.severity(severity); + observable.errorSeverity(severity); observable.__valid__(false); if (previousError !== error && !previousIsValid) { diff --git a/src/api.js b/src/api.js index ec52d0db..7405d3ee 100644 --- a/src/api.js +++ b/src/api.js @@ -327,7 +327,7 @@ // } // )}; // - if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return ko.validation.addRule(observable, { rule: ruleName, message: params.message, diff --git a/src/extenders.js b/src/extenders.js index 0ab64ceb..6e69fb50 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -42,8 +42,8 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 - observable.severity = ko.observable(1); + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 + observable.errorSeverity = ko.observable(1); // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it @@ -68,7 +68,7 @@ ko.extenders['validatable'] = function (observable, options) { var previousIsValid = observable.__valid__.peek(); observable.error(error); - observable.severity(severity); + observable.errorSeverity(severity); observable.__valid__(false); if (previousError !== error && !previousIsValid) { diff --git a/test/validation-tests.js b/test/validation-tests.js index 4242812a..2b32b758 100644 --- a/test/validation-tests.js +++ b/test/validation-tests.js @@ -436,7 +436,7 @@ QUnit.test('message parameter receives params and observable when async', functi //#region Severity tests -QUnit.module('Severity tests'); +QUnit.module('Error Severity tests'); QUnit.test('isValid returns false for warning severity', function(assert) { var testObj = ko.observable('something').extend({ @@ -446,7 +446,7 @@ QUnit.test('isValid returns false for warning severity', function(assert) { }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.severity(), 2, 'Severity should equal severity defined in required-validation'); + assert.equal(testObj.errorSeverity(), 2, 'Severity should equal severity defined in required-validation'); }); QUnit.test('default severity is 1', function(assert) { @@ -455,7 +455,7 @@ QUnit.test('default severity is 1', function(assert) { }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.severity(), 1, 'Severity should be 1 when not defined'); + assert.equal(testObj.errorSeverity(), 1, 'Severity should be 1 when not defined'); }); QUnit.test('Lowest invalid rule severity is returned', function(assert) { @@ -474,7 +474,7 @@ QUnit.test('Lowest invalid rule severity is returned', function(assert) { }); testObj('test'); assert.equal(testObj.isValid(), false); - assert.equal(testObj.severity(), 2, 'Lowest broken rule severity should be 2'); + assert.equal(testObj.errorSeverity(), 2, 'Lowest broken rule severity should be 2'); }); QUnit.test('Lowest invalid rule severity for default severity is returned', function(assert) { @@ -486,6 +486,6 @@ QUnit.test('Lowest invalid rule severity for default severity is returned', func }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.severity(), 1, 'Default severity for broken rule should be 1'); + assert.equal(testObj.errorSeverity(), 1, 'Default severity for broken rule should be 1'); }); //#endregion From a7fa4e51fb1ada9a2aabe3c63a9e9866069d6fb4 Mon Sep 17 00:00:00 2001 From: Hekku2 Date: Thu, 3 Nov 2016 20:56:21 +0200 Subject: [PATCH 09/12] Revert "Renamed 'severity' in 'validatable' to 'errorSeverity'" This reverts commit 466c0b336e5c0e0b5f3d193c55dc628899e19782. --- dist/knockout.validation.js | 8 ++++---- src/api.js | 2 +- src/extenders.js | 6 +++--- test/validation-tests.js | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index ff7635eb..e6ab5443 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -525,7 +525,7 @@ kv.configuration = configuration; // } // )}; // - if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, @@ -1207,8 +1207,8 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 - observable.errorSeverity = ko.observable(1); + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.severity = ko.observable(1); // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it @@ -1233,7 +1233,7 @@ ko.extenders['validatable'] = function (observable, options) { var previousIsValid = observable.__valid__.peek(); observable.error(error); - observable.errorSeverity(severity); + observable.severity(severity); observable.__valid__(false); if (previousError !== error && !previousIsValid) { diff --git a/src/api.js b/src/api.js index 7405d3ee..ec52d0db 100644 --- a/src/api.js +++ b/src/api.js @@ -327,7 +327,7 @@ // } // )}; // - if (params && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use return ko.validation.addRule(observable, { rule: ruleName, message: params.message, diff --git a/src/extenders.js b/src/extenders.js index 6e69fb50..0ab64ceb 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -42,8 +42,8 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 - observable.errorSeverity = ko.observable(1); + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.severity = ko.observable(1); // observable.rules: // ObservableArray of Rule Contexts, where a Rule Context is simply the name of a rule and the params to supply to it @@ -68,7 +68,7 @@ ko.extenders['validatable'] = function (observable, options) { var previousIsValid = observable.__valid__.peek(); observable.error(error); - observable.errorSeverity(severity); + observable.severity(severity); observable.__valid__(false); if (previousError !== error && !previousIsValid) { diff --git a/test/validation-tests.js b/test/validation-tests.js index 2b32b758..4242812a 100644 --- a/test/validation-tests.js +++ b/test/validation-tests.js @@ -436,7 +436,7 @@ QUnit.test('message parameter receives params and observable when async', functi //#region Severity tests -QUnit.module('Error Severity tests'); +QUnit.module('Severity tests'); QUnit.test('isValid returns false for warning severity', function(assert) { var testObj = ko.observable('something').extend({ @@ -446,7 +446,7 @@ QUnit.test('isValid returns false for warning severity', function(assert) { }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.errorSeverity(), 2, 'Severity should equal severity defined in required-validation'); + assert.equal(testObj.severity(), 2, 'Severity should equal severity defined in required-validation'); }); QUnit.test('default severity is 1', function(assert) { @@ -455,7 +455,7 @@ QUnit.test('default severity is 1', function(assert) { }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.errorSeverity(), 1, 'Severity should be 1 when not defined'); + assert.equal(testObj.severity(), 1, 'Severity should be 1 when not defined'); }); QUnit.test('Lowest invalid rule severity is returned', function(assert) { @@ -474,7 +474,7 @@ QUnit.test('Lowest invalid rule severity is returned', function(assert) { }); testObj('test'); assert.equal(testObj.isValid(), false); - assert.equal(testObj.errorSeverity(), 2, 'Lowest broken rule severity should be 2'); + assert.equal(testObj.severity(), 2, 'Lowest broken rule severity should be 2'); }); QUnit.test('Lowest invalid rule severity for default severity is returned', function(assert) { @@ -486,6 +486,6 @@ QUnit.test('Lowest invalid rule severity for default severity is returned', func }); testObj(''); assert.equal(testObj.isValid(), false); - assert.equal(testObj.errorSeverity(), 1, 'Default severity for broken rule should be 1'); + assert.equal(testObj.severity(), 1, 'Default severity for broken rule should be 1'); }); //#endregion From 07ae2efc4c408fe0cc740ffffbfcafd3965b6a69 Mon Sep 17 00:00:00 2001 From: Hekku2 Date: Thu, 3 Nov 2016 20:59:01 +0200 Subject: [PATCH 10/12] Removed "isObservable" check from 'params' and checks from 'severity' instead. --- dist/knockout.validation.js | 2 +- src/api.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index e6ab5443..17993d02 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -525,7 +525,7 @@ kv.configuration = configuration; // } // )}; // - if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, diff --git a/src/api.js b/src/api.js index ec52d0db..ea4d6028 100644 --- a/src/api.js +++ b/src/api.js @@ -327,7 +327,7 @@ // } // )}; // - if (params && !ko.isObservable(params) && (params.message || params.onlyIf || params.severity)) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use return ko.validation.addRule(observable, { rule: ruleName, message: params.message, From fc97ea7b5e7ebe41ee1874c1ae5e517b72810c92 Mon Sep 17 00:00:00 2001 From: Hekku2 Date: Thu, 3 Nov 2016 21:01:01 +0200 Subject: [PATCH 11/12] Removed extra whitespace and typofix. --- dist/knockout.validation.js | 4 ++-- src/api.js | 2 +- src/extenders.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index 17993d02..3d68fe25 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -525,7 +525,7 @@ kv.configuration = configuration; // } // )}; // - if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use return kv.addRule(observable, { rule: ruleName, message: params.message, @@ -1207,7 +1207,7 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 observable.severity = ko.observable(1); // observable.rules: diff --git a/src/api.js b/src/api.js index ea4d6028..a0a07e75 100644 --- a/src/api.js +++ b/src/api.js @@ -327,7 +327,7 @@ // } // )}; // - if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use + if (params && (params.message || params.onlyIf || (params.severity && !ko.isObservable(params.severity)))) { //if it has a message, condition, or severity object, then its an object literal to use return ko.validation.addRule(observable, { rule: ruleName, message: params.message, diff --git a/src/extenders.js b/src/extenders.js index 0ab64ceb..ec59aa80 100644 --- a/src/extenders.js +++ b/src/extenders.js @@ -42,7 +42,7 @@ ko.extenders['validatable'] = function (observable, options) { throttleEvaluation : options.throttle || config.throttle }; - observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has and has a severity of 1 + observable.error = ko.observable(null); // holds the error message, we only need one since we stop processing validators when one is invalid and has a severity of 1 observable.severity = ko.observable(1); // observable.rules: From 8fe0a9ca513c747d978bcefede11b368f50b2f16 Mon Sep 17 00:00:00 2001 From: Gucciardo Date: Tue, 7 Feb 2017 16:23:47 -0500 Subject: [PATCH 12/12] package.json update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b61e506c..d71c8036 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "knockout.validation", + "name": "ep-knockout.validation", "version": "2.0.3", "description": "A KnockoutJS Plugin for model and property validation", "main": "dist/knockout.validation.js",