From 805753dba47f7ef5b34af9579c1d0486f5f4ea68 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 13 Oct 2010 12:47:10 -0700 Subject: fixed issue where date copy creates an object instead of date --- regression/resource_json_date.html | 30 ++++++++++++++++++++++++++++++ regression/resource_json_date.json | 1 + src/Angular.js | 10 ++++++---- test/AngularSpec.js | 7 +++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 regression/resource_json_date.html create mode 100644 regression/resource_json_date.json diff --git a/regression/resource_json_date.html b/regression/resource_json_date.html new file mode 100644 index 00000000..59300863 --- /dev/null +++ b/regression/resource_json_date.html @@ -0,0 +1,30 @@ + + + + + + + + +

This data is loaded with angular.fromJson:

+ {{ inlineData.reportDate | date }} +
+

This data is loaded from a resource using a service:

+

Name: {{ jsonData.name }}

+

Parsed date: {{ jsonData.reportDate }} (A date should be displayed here)

+ + + \ No newline at end of file diff --git a/regression/resource_json_date.json b/regression/resource_json_date.json new file mode 100644 index 00000000..78f70cb3 --- /dev/null +++ b/regression/resource_json_date.json @@ -0,0 +1 @@ +{reportDate:"2010-10-13T17:37:00Z", name:"camilo"} \ No newline at end of file diff --git a/src/Angular.js b/src/Angular.js index 5bffac53..95970850 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -226,14 +226,16 @@ function isLeafNode (node) { */ function copy(source, destination){ if (!destination) { + destination = source; if (source) { if (isArray(source)) { - return copy(source, []); + destination = copy(source, []); + } else if (source instanceof Date) { + destination = new Date(source.getTime()); } else if (isObject(source)) { - return copy(source, {}); + destination = copy(source, {}); } } - return source; } else { if (isArray(source)) { while(destination.length) { @@ -250,8 +252,8 @@ function copy(source, destination){ destination[key] = copy(source[key]); } } - return destination; } + return destination; } function equals(o1, o2) { diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 1ccdf1c3..e0228e16 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -21,6 +21,13 @@ describe("copy", function(){ assertSame(arr, copy([], arr)); }); + it("should copy Date", function(){ + var date = new Date(123); + expect(copy(date) instanceof Date).toBeTruthy(); + expect(copy(date).getTime()).toEqual(123); + expect(copy(date) === date).toBeFalsy(); + }); + it("should copy array", function(){ var src = [1, {name:"value"}]; var dst = [{key:"v"}]; -- cgit v1.2.3