From 88c842ccda19af8587a448969ed7bfbcb58e6e8c Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Wed, 6 May 2020 16:41:00 +0200 Subject: [PATCH] Add utility function equivalent to angular.fromJson (#8014) --- .../components/forms/umbrawmodel.directive.js | 4 ++-- .../src/common/mocks/resources/_utils.js | 6 +++--- .../src/common/services/util.service.js | 2 +- src/Umbraco.Web.UI.Client/src/utilities.js | 13 ++++++++++++- .../macropicker/macropicker.controller.js | 4 ++-- .../treepicker/treepicker.controller.js | 2 +- .../test/unit/utilities.spec.js | 8 ++++++++ 7 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbrawmodel.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbrawmodel.directive.js index 271a499b09..6098cb8a0d 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbrawmodel.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbrawmodel.directive.js @@ -39,7 +39,7 @@ angular.module("umbraco.directives") function stringToJson(text) { try { - return JSON.parse(text); + return Utilities.fromJson(text); } catch (err) { setInvalid(); return text; @@ -55,7 +55,7 @@ angular.module("umbraco.directives") function isValidJson(model) { var flag = true; try { - JSON.parse(model) + Utilities.fromJson(model) } catch (err) { flag = false; } diff --git a/src/Umbraco.Web.UI.Client/src/common/mocks/resources/_utils.js b/src/Umbraco.Web.UI.Client/src/common/mocks/resources/_utils.js index 6e6eb00da7..f07a2a441c 100644 --- a/src/Umbraco.Web.UI.Client/src/common/mocks/resources/_utils.js +++ b/src/Umbraco.Web.UI.Client/src/common/mocks/resources/_utils.js @@ -90,7 +90,7 @@ angular.module('umbraco.mocks'). name: "1 column layout", sections: [ { - grid: 12, + grid: 12 } ] }, @@ -98,7 +98,7 @@ angular.module('umbraco.mocks'). name: "2 column layout", sections: [ { - grid: 4, + grid: 4 }, { grid: 8 @@ -139,7 +139,7 @@ angular.module('umbraco.mocks'). } } - }, + } ] }, { diff --git a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js index 58ef342f44..82353df744 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js @@ -206,7 +206,7 @@ function umbSessionStorage($window) { return { get: function (key) { - return JSON.parse(storage["umb_" + key]); + return Utilities.fromJson(storage["umb_" + key]); }, set: function (key, value) { diff --git a/src/Umbraco.Web.UI.Client/src/utilities.js b/src/Umbraco.Web.UI.Client/src/utilities.js index 71d904427b..edf804e08b 100644 --- a/src/Umbraco.Web.UI.Client/src/utilities.js +++ b/src/Umbraco.Web.UI.Client/src/utilities.js @@ -94,6 +94,16 @@ return JSON.stringify(obj, toJsonReplacer, pretty); } + /** + * Equivalent to angular.fromJson + */ + const fromJson = (val) => { + if (!isString(val)) { + return val; + } + return JSON.parse(val); + } + let _utilities = { noop: noop, copy: copy, @@ -106,10 +116,11 @@ isString: isString, isNumber: isNumber, isObject: isObject, + fromJson: fromJson, toJson: toJson }; if (typeof (window.Utilities) === 'undefined') { window.Utilities = _utilities; } -})(window); \ No newline at end of file +})(window); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/macropicker/macropicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/macropicker/macropicker.controller.js index 83c49d604f..ba577045aa 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/macropicker/macropicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/macropicker/macropicker.controller.js @@ -70,8 +70,8 @@ function MacroPickerController($scope, entityResource, macroResource, umbPropEdi //detect if it is a json string if (val.detectIsJson()) { try { - //Parse it to json - prop.value = JSON.parse(val); + //Parse it from json + prop.value = Utilities.fromJson(val); } catch (e) { // not json diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/treepicker/treepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/treepicker/treepicker.controller.js index f6118e1523..387dd71da8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/treepicker/treepicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/treepicker/treepicker.controller.js @@ -189,7 +189,7 @@ angular.module("umbraco").controller("Umbraco.Editors.TreePickerController", if ($scope.model.filter.startsWith("{")) { $scope.model.filterAdvanced = true; //convert to object - $scope.model.filter = JSON.parse($scope.model.filter); + $scope.model.filter = Utilities.fromJson($scope.model.filter); } } } diff --git a/src/Umbraco.Web.UI.Client/test/unit/utilities.spec.js b/src/Umbraco.Web.UI.Client/test/unit/utilities.spec.js index 825ede8ea5..db642fde9f 100644 --- a/src/Umbraco.Web.UI.Client/test/unit/utilities.spec.js +++ b/src/Umbraco.Web.UI.Client/test/unit/utilities.spec.js @@ -1,5 +1,13 @@ (function () { describe("Utilities", function () { + describe("fromJson", function () { + it("should deserialize json as object", function () { + expect(Utilities.fromJson('{"a":1,"b":2}')).toEqual({ a: 1, b: 2 }); + }); + it("should return object as object", function () { + expect(Utilities.fromJson({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 }); + }); + }), describe("toJson", function () { it("should delegate to JSON.stringify", function () { var spy = spyOn(JSON, "stringify").and.callThrough();