diff --git a/boxxy/src/boxxy.js b/boxxy/src/boxxy.js index f7ecd70..af338b9 100644 --- a/boxxy/src/boxxy.js +++ b/boxxy/src/boxxy.js @@ -20,6 +20,37 @@ function Boxxy() { this.onUpdatePosition = function(position) {}; this.onUpdate = function() {}; } +function clone(obj) { + // Handle the 3 simple types, and null or undefined + if (null == obj || "object" != typeof obj) return obj; + + // Handle Date + if (obj instanceof Date) { + var copy = new Date(); + copy.setTime(obj.getTime()); + return copy; + } + + // Handle Array + if (obj instanceof Array) { + var copy = []; + for (var i = 0, len = obj.length; i < len; i++) { + copy[i] = clone(obj[i]); + } + return copy; + } + + // Handle Object + if (obj instanceof Object) { + var copy = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); + } + return copy; + } + + throw new Error("Unable to copy obj! Its type isn't supported."); +} Boxxy.prototype.putState = function(stateDelta) { if(stateDelta.notification != null) this.notification = stateDelta.notification; @@ -33,8 +64,8 @@ Boxxy.prototype.putState = function(stateDelta) { this.laps = stateDelta.laps; this.teams = stateDelta.teams; } - this.frozenLaps = this.laps; - this.frozenTeams = this.teams; + this.frozenLaps = clone(this.laps); + this.frozenTeams = clone(this.teams); this.frozen = true; }