From f20ea6792688b97a8d9b50e9eed783e4773d9a86 Mon Sep 17 00:00:00 2001 From: Nathan Dinsmore Date: Wed, 17 Jun 2015 21:08:12 -0400 Subject: [PATCH] Provide a fallback for browsers that don't support Map --- morphic.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/morphic.js b/morphic.js index 5cc40628..fe2cc8b3 100644 --- a/morphic.js +++ b/morphic.js @@ -3077,6 +3077,40 @@ Morph.prototype.updateReferences = function (map) { } }; +if (typeof Map === 'undefined') { + // use normal objects + stringification if Map doesn't exist + + Morph.prototype.fullCopy = function () { + var dict = {}, c; + c = this.copyRecordingReferences(dict); + c.forAllChildren(function (m) { + m.updateReferences(dict); + }); + return c; + }; + + Morph.prototype.copyRecordingReferences = function (dict) { + var c = this.copy(); + dict[this] = c; + this.children.forEach(function (m) { + c.add(m.copyRecordingReferences(dict)); + }); + return c; + }; + + Morph.prototype.updateReferences = function (dict) { + var property, value, reference; + for (var properties = Object.keys(this), l = properties.length, i = 0; i < l; ++i) { + property = properties[i]; + value = this[property]; + if (value && value.isMorph) { + reference = dict[value]; + if (reference) this[property] = reference; + } + } + }; +} + // Morph dragging and dropping: Morph.prototype.rootForGrab = function () {