From f29d33810cc44cfed81e4d476c13089a9320763b Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Tue, 22 May 2018 08:29:02 +0200 Subject: [PATCH 1/5] test(v-text/v-html): Add tests to check ` toString` and `toJson` methods. --- test/unit/features/directives/html.spec.js | 6 ++++++ test/unit/features/directives/text.spec.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/test/unit/features/directives/html.spec.js b/test/unit/features/directives/html.spec.js index c398828ac1d..5e67c815b2e 100644 --- a/test/unit/features/directives/html.spec.js +++ b/test/unit/features/directives/html.spec.js @@ -44,6 +44,12 @@ describe('Directive v-html', () => { vm.a = {} }).then(() => { expect(vm.$el.innerHTML).toBe('{}') + vm.a = { toString () { return 'foo' } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('foo') + vm.a = { toJSON () { return { foo: 'bar' } } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('{\n "foo": "bar"\n}') vm.a = 123 }).then(() => { expect(vm.$el.innerHTML).toBe('123') diff --git a/test/unit/features/directives/text.spec.js b/test/unit/features/directives/text.spec.js index 477badf9b9b..84f9bbe5db7 100644 --- a/test/unit/features/directives/text.spec.js +++ b/test/unit/features/directives/text.spec.js @@ -30,6 +30,12 @@ describe('Directive v-text', () => { vm.a = {} }).then(() => { expect(vm.$el.innerHTML).toBe('{}') + vm.a = { toString () { return 'foo' } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('foo') + vm.a = { toJSON () { return { foo: 'bar' } } } + }).then(() => { + expect(vm.$el.innerHTML).toBe('{\n "foo": "bar"\n}') vm.a = 123 }).then(() => { expect(vm.$el.innerHTML).toBe('123') From 13e7af361eac7a83547fb851af79db7e1d13741f Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Tue, 22 May 2018 08:37:31 +0200 Subject: [PATCH 2/5] feat(v-text/v-html): Add the ability to render custom `toString()` https://github.com/vuejs/vue/issues/8093 --- src/shared/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/util.js b/src/shared/util.js index e4884734326..c3fa011e829 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -77,7 +77,7 @@ export function isValidArrayIndex (val: any): boolean { export function toString (val: any): string { return val == null ? '' - : typeof val === 'object' + : typeof val === 'object' && (!isPlainObject(val) || val.toString() === _toString.call(val)) ? JSON.stringify(val, null, 2) : String(val) } From d2f10269ee274703c43051d6ee98c2177f0a2ec0 Mon Sep 17 00:00:00 2001 From: Mathieu TUDISCO Date: Tue, 22 May 2018 10:49:04 +0200 Subject: [PATCH 3/5] perf(v-text/v-html): Increase performances by comparing functions by reference instead of value of t --- src/shared/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/util.js b/src/shared/util.js index c3fa011e829..7dbff9ad45d 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -77,7 +77,7 @@ export function isValidArrayIndex (val: any): boolean { export function toString (val: any): string { return val == null ? '' - : typeof val === 'object' && (!isPlainObject(val) || val.toString() === _toString.call(val)) + : typeof val === 'object' && (!isPlainObject(val) || val.toString === _toString) ? JSON.stringify(val, null, 2) : String(val) } From a00efdd2426d39b0990a4c04c0a775164c30442d Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 21 Dec 2018 13:01:01 -0500 Subject: [PATCH 4/5] Update util.js --- src/shared/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/util.js b/src/shared/util.js index 7dbff9ad45d..975d3ee168b 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -77,7 +77,7 @@ export function isValidArrayIndex (val: any): boolean { export function toString (val: any): string { return val == null ? '' - : typeof val === 'object' && (!isPlainObject(val) || val.toString === _toString) + : isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val) } From 49713ec2dc2e382740e14f2be9e4badb46e69b61 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 21 Dec 2018 13:08:33 -0500 Subject: [PATCH 5/5] Update util.js --- src/shared/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/util.js b/src/shared/util.js index 975d3ee168b..3621a3ab0b6 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -77,7 +77,7 @@ export function isValidArrayIndex (val: any): boolean { export function toString (val: any): string { return val == null ? '' - : isPlainObject(val) && val.toString === _toString + : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) ? JSON.stringify(val, null, 2) : String(val) }