From 4aa5d601dca622e015c92ccc5f76e3b041a2d19f Mon Sep 17 00:00:00 2001 From: futpib Date: Fri, 28 Aug 2015 12:23:47 +0300 Subject: [PATCH] Make it possible to use an arbitrary object as validation message --- dist/knockout.validation.js | 3 +++ src/api.js | 3 +++ test/api-tests.js | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/dist/knockout.validation.js b/dist/knockout.validation.js index 07b697b6..1d2f8341 100644 --- a/dist/knockout.validation.js +++ b/dist/knockout.validation.js @@ -436,6 +436,9 @@ kv.configuration = configuration; }, formatMessage: function (message, params, observable) { + if (typeof message === 'object') { + return message; + } if (utils.isObject(params) && params.typeAttr) { params = params.value; } diff --git a/src/api.js b/src/api.js index d9c8ad02..6348ec85 100644 --- a/src/api.js +++ b/src/api.js @@ -238,6 +238,9 @@ }, formatMessage: function (message, params, observable) { + if (typeof message === 'object') { + return message; + } if (utils.isObject(params) && params.typeAttr) { params = params.value; } diff --git a/test/api-tests.js b/test/api-tests.js index 24fbcb9b..558d1895 100644 --- a/test/api-tests.js +++ b/test/api-tests.js @@ -977,6 +977,28 @@ QUnit.test('formatMessage may use multiple replacements', function(assert) { assert.equal(result, 'Value must be between 1 and 5.'); }); +QUnit.test('formatMessage allows arbitrary object as message', function(assert) { + var params = null, + message = { custom: 'object' }, + obsv = ko.observable(); + + var result = ko.validation.formatMessage(message, params, obsv); + assert.strictEqual(result, message, '`formatMessage` must return message object intact'); +}); + +QUnit.test('arbitrary object can be used as a message', function(assert) { + var message = { custom: 'object' }, + obsv = ko.observable().extend({ + validation: { + validator: function () { return false; }, + message: message + } + }); + + var result = obsv.error(); + assert.strictEqual(result, message); +}); + QUnit.test('Issue #547 - formatMessage fails when params is 0', function(assert) { var params = 0, message = 'Please enter a value greater than or equal to {0}.',