{"version":3,"file":"sm.knockoutObservableDictionary.min.js","names":["ko","observableDictionary","dictionary","keySelector","valueSelector","result","items","observableArray","_wrappers","_keySelector","value","key","_valueSelector","utils","extend","pushAll","remove","valueOrPredicate","predicate","sm","portal","knockout","dictionaryItem","item","call","this","push","undefined","current","get","self","Array","$","each","index","prop","hasOwnProperty","valueHasMutated","sort","method","a","b","utility","defaultComparison","indexOf","underlyingArray","length","wrap","getValue","wrapper","computed","read","write","newValue","set","keys","arrayMap","values","removeAll","toJSON","unwrapObservable","arrayForEach"],"sources":["assets/js/sm.knockoutObservableDictionary.js"],"mappings":"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","ignoreList":[],"sourcesContent":["// Knockout Observable Dictionary\r\n// (c) James Foster\r\n// License: MIT (http://www.opensource.org/licenses/mit-license.php)\r\n\r\n(function () {\r\n\r\n\tko.observableDictionary = function (dictionary, keySelector, valueSelector) {\r\n\t\tvar result = {};\r\n\r\n\t\tresult.items = new ko.observableArray();\r\n\r\n\t\tresult._wrappers = {};\r\n\t\tresult._keySelector = keySelector || function (value, key) { return key; };\r\n\t\tresult._valueSelector = valueSelector || function (value) { return value; };\r\n\r\n\t\tif (typeof keySelector == 'string') result._keySelector = function (value) { return value[keySelector]; };\r\n\t\tif (typeof valueSelector == 'string') result._valueSelector = function (value) { return value[valueSelector]; };\r\n\r\n\t\tko.utils.extend(result, ko.observableDictionary['fn']);\r\n\r\n\t\tresult.pushAll(dictionary);\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tko.observableDictionary['fn'] = {\r\n\t\tremove: function (valueOrPredicate) {\r\n\t\t\tvar predicate = valueOrPredicate;\r\n\r\n\t\t\tif (valueOrPredicate instanceof sm.portal.knockout.dictionaryItem) {\r\n\t\t\t\tpredicate = function (item) {\r\n\t\t\t\t\treturn item.key() === valueOrPredicate.key();\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\telse if (typeof valueOrPredicate != \"function\") {\r\n\t\t\t\tpredicate = function (item) {\r\n\t\t\t\t\treturn item.key() === valueOrPredicate;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tko.observableArray['fn'].remove.call(this.items, predicate);\r\n\t\t},\r\n\r\n\t\tpush: function (key, value) {\r\n\t\t\tvar item = null;\r\n\r\n\t\t\tif (key instanceof sm.portal.knockout.dictionaryItem) {\r\n\t\t\t\t// handle the case where only a DictionaryItem is passed in\r\n\t\t\t\titem = key;\r\n\t\t\t\tvalue = key.value();\r\n\t\t\t\tkey = key.key();\r\n\t\t\t}\r\n\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tvalue = this._valueSelector(key);\r\n\t\t\t\tkey = this._keySelector(value);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this._valueSelector(value);\r\n\t\t\t}\r\n\r\n\t\t\tvar current = this.get(key, false);\r\n\t\t\tif (current) {\r\n\t\t\t\t// update existing value\r\n\t\t\t\tcurrent(value);\r\n\t\t\t\treturn current;\r\n\t\t\t}\r\n\r\n\t\t\tif (!item) {\r\n\t\t\t item = new sm.portal.knockout.dictionaryItem(key, value, this);\r\n\t\t\t}\r\n\r\n\t\t\tko.observableArray['fn'].push.call(this.items, item);\r\n\r\n\t\t\treturn value;\r\n\t\t},\r\n\r\n\t\tpushAll: function (dictionary) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar items = self.items();\r\n\r\n\t\t\tif (dictionary instanceof Array) {\r\n\t\t\t\t$.each(dictionary, function (index, item) {\r\n\t\t\t\t\tvar key = self._keySelector(item, index);\r\n\t\t\t\t\tvar value = self._valueSelector(item);\r\n\t\t\t\t\titems.push(new sm.portal.knockout.dictionaryItem(key, value, self));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tfor (var prop in dictionary) {\r\n\t\t\t\t\tif (dictionary.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\tvar item = dictionary[prop];\r\n\t\t\t\t\t\tvar key = self._keySelector(item, prop);\r\n\t\t\t\t\t\tvar value = self._valueSelector(item);\r\n\t\t\t\t\t\titems.push(new sm.portal.knockout.dictionaryItem(key, value, self));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tself.items.valueHasMutated();\r\n\t\t},\r\n\r\n\t\tsort: function (method) {\r\n\t\t\tif (method === undefined) {\r\n\t\t\t\tmethod = function (a, b) {\r\n\t\t\t\t\treturn sm.portal.utility.defaultComparison(a.key(), b.key());\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn ko.observableArray['fn'].sort.call(this.items, method);\r\n\t\t},\r\n\r\n\t\tindexOf: function (key) {\r\n\t\t if (key instanceof sm.portal.knockout.dictionaryItem) {\r\n\t\t\t\treturn ko.observableArray['fn'].indexOf.call(this.items, key);\r\n\t\t\t}\r\n\r\n\t\t\tvar underlyingArray = this.items();\r\n\t\t\tfor (var index = 0; index < underlyingArray.length; index++) {\r\n\t\t\t\tif (underlyingArray[index].key() == key)\r\n\t\t\t\t\treturn index;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t},\r\n\r\n\t\tget: function (key, wrap) {\r\n\t\t\tif (wrap == false)\r\n\t\t\t return sm.portal.knockout.getValue(key, this.items());\r\n\r\n\t\t\tvar wrapper = this._wrappers[key];\r\n\r\n\t\t\tif (wrapper == null) {\r\n\t\t\t\twrapper = this._wrappers[key] = new ko.computed({\r\n\t\t\t\t\tread: function () {\r\n\t\t\t\t\t var value = sm.portal.knockout.getValue(key, this.items());\r\n\t\t\t\t\t\treturn value ? value() : null;\r\n\t\t\t\t\t},\r\n\t\t\t\t\twrite: function (newValue) {\r\n\t\t\t\t\t var value = sm.portal.knockout.getValue(key, this.items());\r\n\r\n\t\t\t\t\t\tif (value)\r\n\t\t\t\t\t\t\tvalue(newValue);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthis.push(key, newValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\r\n\t\t\treturn wrapper;\r\n\t\t},\r\n\r\n\t\tset: function (key, value) {\r\n\t\t\treturn this.push(key, value);\r\n\t\t},\r\n\r\n\t\tkeys: function () {\r\n\t\t\treturn ko.utils.arrayMap(this.items(), function (item) { return item.key(); });\r\n\t\t},\r\n\r\n\t\tvalues: function () {\r\n\t\t\treturn ko.utils.arrayMap(this.items(), function (item) { return item.value(); });\r\n\t\t},\r\n\r\n\t\tremoveAll: function () {\r\n\t\t\tthis.items.removeAll();\r\n\t\t},\r\n\r\n\t\ttoJSON: function () {\r\n\t\t\tvar result = {};\r\n\t\t\tvar items = ko.utils.unwrapObservable(this.items);\r\n\r\n\t\t\tko.utils.arrayForEach(items, function (item) {\r\n\t\t\t\tvar key = ko.utils.unwrapObservable(item.key);\r\n\t\t\t\tvar value = ko.utils.unwrapObservable(item.value);\r\n\r\n\t\t\t\tresult[key] = value;\r\n\t\t\t});\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t};\r\n\r\n})();\r\n"]}