@avica/knockout-mapping
Version:
Knockout Mapping plugin
3 lines (2 loc) • 9.84 kB
JavaScript
!function(e){"use strict";if("function"==typeof require&&"object"==typeof exports&&"object"==typeof module)e(require("knockout"),exports);else if("function"==typeof define&&define.amd)define(["knockout","exports"],e);else{if("undefined"==typeof ko)throw new Error("Knockout is required, please ensure it is loaded before loading this mapping plug-in");e(ko,ko.mapping={})}}(function(F,R){"use strict";F.mapping=R;var $,G,s=!1,K="__ko_mapping__",p=F.dependentObservable,i=0,o=["create","update","key","arrayChanged"],V={},e={include:["_destroy"],ignore:[],copy:[],observe:[]},u=e;function l(){for(var e,r,t,n=arguments,a=n.length,i={},o=[];a--;)for(e=(t=n[a]).length;e--;)i[r=t[e]]||(i[r]=1,o.push(r));return o}function f(e,r){var t;for(var n in r)if(r.hasOwnProperty(n)&&r[n])if(t=R.getType(e[n]),n&&e[n]&&"array"!==t&&"string"!==t)f(e[n],r[n]);else{var a="array"===R.getType(e[n])&&"array"===R.getType(r[n]);e[n]=a?l(e[n],r[n]):r[n]}}function z(e,r){var t={};return f(t,e),f(t,r),t}function y(e,r){for(var t=z({},e),n=o.length-1;0<=n;n--){var a=o[n];t[a]&&(t[""]instanceof Object||(t[""]={}),t[""][a]=t[a],delete t[a])}return r&&(t.ignore=c(r.ignore,t.ignore),t.include=c(r.include,t.include),t.copy=c(r.copy,t.copy),t.observe=c(r.observe,t.observe)),t.ignore=c(t.ignore,u.ignore),t.include=c(t.include,u.include),t.copy=c(t.copy,u.copy),t.observe=c(t.observe,u.observe),t.mappedProperties=t.mappedProperties||{},t.copiedProperties=t.copiedProperties||{},t}function c(e,r){return void 0===e?e=[]:"array"!==R.getType(e)&&(e=[e]),void 0===r?r=[]:"array"!==R.getType(r)&&(r=[r]),F.utils.arrayGetDistinctValues(e.concat(r))}function B(u,e){var r=F.dependentObservable;F.dependentObservable=function(e,r,t){t=t||{},e&&"object"==typeof e&&(t=e);var n=t.deferEvaluation,a=t.pure,i=!1;t.deferEvaluation=!0;var o=p(e,r,t);return n||a||(o=function(r){var e=F.dependentObservable;F.dependentObservable=p;var t=F.isWriteableObservable(r);F.dependentObservable=e;var n=p({read:function(){return i||(F.utils.arrayRemoveItem(u,r),i=!0),r.apply(r,arguments)},write:t&&function(e){return r(e)},deferEvaluation:!0});return s&&(n._wrapper=!0),n.__DO=r,n}(o),u.push(o)),o},F.dependentObservable.fn=p.fn,F.computed=F.dependentObservable;var t=e();return F.dependentObservable=r,F.computed=F.dependentObservable,t}function H(e,r,t){for(var n=0,a=e.length;n<a;n++)if(!0!==t[n]&&e[n]===r)return n;return null}function v(e,r){var t;return r&&(t=r(e)),"undefined"===R.getType(t)&&(t=e),F.utils.unwrapObservable(t)}function L(e,r,t){for(var n=0,a=(e=F.utils.unwrapObservable(e)).length;n<a;n++){var i=e[n];if(v(i,t)===r)return i}throw new Error("When calling ko.update*, the key '"+r+"' was not found!")}function Q(e,r){return F.utils.arrayMap(F.utils.unwrapObservable(e),function(e){return r?v(e,r):e})}function U(e,r){if("array"===R.getType(e))for(var t=0;t<e.length;t++)r(t);else for(var n in e)e.hasOwnProperty(n)&&r(n)}function X(e){if(null!==e){var r=R.getType(e);return"object"===r||"array"===r}}function Y(e){return(""+e).replace(/~/g,"~~").replace(/\[/g,"~[").replace(/]/g,"~]").replace(/\./g,"~.")}function a(){var n=[],a=[];this.save=function(e,r){var t=F.utils.arrayIndexOf(n,e);0<=t?a[t]=r:(n.push(e),a.push(r))},this.get=function(e){var r=F.utils.arrayIndexOf(n,e);return 0<=r?a[r]:void 0}}function g(){function t(e){var r;try{r=e}catch(e){r="$$$"}var t=n[r];return n.hasOwnProperty(r)||(t=new a,n[r]=t),t}var n={};this.save=function(e,r){t(e).save(e,r)},this.get=function(e){return t(e).get(e)}}R.isMapped=function(e){var r=F.utils.unwrapObservable(e);return r&&r[K]},R.fromJS=function(e){if(0===arguments.length)throw new Error("When calling ko.fromJS, pass the object you want to convert.");try{var r,t;i||($=[],G=new g),i++,2===arguments.length&&(arguments[1][K]?t=arguments[1]:r=arguments[1]),3===arguments.length&&(r=arguments[1],t=arguments[2]),t&&(r=z(r,t[K]));var n=function i(o,u,s,n,r,p,e,t){var a="array"===R.getType(F.utils.unwrapObservable(u));p=p||"";if(R.isMapped(o)){var l=F.utils.unwrapObservable(o)[K];s=z(l,s)}var f={data:u,parent:e||r,rawParent:t};var c=function(){return s[n]&&s[n].create instanceof Function};var v=function(e){return B($,function(){return F.utils.unwrapObservable(r)instanceof Array?s[n].create({data:e||f.data,parent:f.parent,rawParent:f.rawParent,skip:V}):s[n].create({data:e||f.data,parent:f.parent,rawParent:f.rawParent})})};var d=function(){return s[n]&&s[n].update instanceof Function};var b=function(e,r){var t={data:r||f.data,parent:f.parent,rawParent:f.rawParent,target:F.utils.unwrapObservable(e)};return F.isWriteableObservable(e)&&(t.observable=e),s[n].update(t)};var y=G.get(u);if(y)return y;n=n||"";if(a){var g=[],O=!1,h=function(e){return e};s[n]&&s[n].key&&(h=s[n].key,O=!0),F.isObservable(o)||((o=F.observableArray([])).mappedRemove=function(r){var t="function"==typeof r?r:function(e){return e===h(r)};return o.remove(function(e){return t(h(e))})},o.mappedRemoveAll=function(e){var r=Q(e,h);return o.remove(function(e){return-1!==F.utils.arrayIndexOf(r,h(e))})},o.mappedDestroy=function(r){var t="function"==typeof r?r:function(e){return e===h(r)};return o.destroy(function(e){return t(h(e))})},o.mappedDestroyAll=function(e){var r=Q(e,h);return o.destroy(function(e){return-1!==F.utils.arrayIndexOf(r,h(e))})},o.mappedIndexOf=function(e){var r=Q(o(),h),t=h(e);return F.utils.arrayIndexOf(r,t)},o.mappedGet=function(e){return o()[o.mappedIndexOf(e)]},o.mappedCreate=function(e){if(-1!==o.mappedIndexOf(e))throw new Error("There already is an object with the key that you specified.");var r=c()?v(e):e;if(d()){var t=b(r,e);F.isWriteableObservable(r)?r(t):r=t}return o.push(r),r});var w=Q(F.utils.unwrapObservable(o),h).sort(),m=Q(u,h);O&&m.sort();var k,T,P,x=F.utils.compareArrays(w,m),j={},I=F.utils.unwrapObservable(u),E={},_=!0;for(k=0,T=I.length;k<T;k++){if(void 0===(P=h(I[k]))||P instanceof Object){_=!1;break}E[P]=I[k]}var J,W,D=[],S=0;for(k=0,T=x.length;k<T;k++){var A;P=x[k];var N=p+"["+Y(k)+"]";switch(P.status){case"added":J=_?E[P.value]:L(F.utils.unwrapObservable(u),P.value,h),A=i(void 0,J,s,n,o,N,r,t),c()||(A=F.utils.unwrapObservable(A)),W=H(F.utils.unwrapObservable(u),J,j),A===V?S++:D[W-S]=A,j[W]=!0;break;case"retained":J=_?E[P.value]:L(F.utils.unwrapObservable(u),P.value,h),A=L(o,P.value,h),i(A,J,s,n,o,N,r,t),W=H(F.utils.unwrapObservable(u),J,j),D[W]=A,j[W]=!0;break;case"deleted":A=L(o,P.value,h)}g.push({event:P.status,item:A})}o(D),s[n]&&s[n].arrayChanged&&F.utils.arrayForEach(g,function(e){s[n].arrayChanged(e.event,e.item)})}else if(X(u)){if(!(o=F.utils.unwrapObservable(o))){if(c()){var M=v();return d()&&(M=b(M)),M}if(d())return b();o={}}if(d()&&(o=b(o)),G.save(u,o),d())return o;U(u,function(e){var r=p.length?p+"."+Y(e):Y(e);if(-1===F.utils.arrayIndexOf(s.ignore,r))if(-1===F.utils.arrayIndexOf(s.copy,r)){if("object"!=typeof u[e]&&"array"!==R.getType(u[e])&&0<s.observe.length&&-1===F.utils.arrayIndexOf(s.observe,r))return o[e]=u[e],void(s.copiedProperties[r]=!0);var t=G.get(u[e]),n=i(o[e],u[e],s,e,o,r,o,u),a=t||n;if(0<s.observe.length&&-1===F.utils.arrayIndexOf(s.observe,r))return o[e]=F.utils.unwrapObservable(a),void(s.copiedProperties[r]=!0);F.isWriteableObservable(o[e])?(a=F.utils.unwrapObservable(a),o[e]()!==a&&o[e](a)):(a=void 0===o[e]?a:F.utils.unwrapObservable(a),o[e]=a),s.mappedProperties[r]=!0}else o[e]=u[e]})}else switch(R.getType(u)){case"function":o=d()?F.isWriteableObservable(u)?(u(b(u)),u):b(u):u;break;default:var C;if(F.isWriteableObservable(o))return C=d()?b(o):F.utils.unwrapObservable(u),o(C),C;var q=c()||d();if(o=c()?v():F.observable(F.utils.unwrapObservable(u)),d()&&o(b(o)),q)return o}return o}(t,e,r=y(r));if(t&&(n=t),!--i)for(;$.length;){var a=$.pop();a&&(a(),a.__DO.throttleEvaluation=a.throttleEvaluation)}return n[K]=z(n[K],r),n}catch(e){throw i=0,e}},R.fromJSON=function(e){var r=Array.prototype.slice.call(arguments,0);return r[0]=F.utils.parseJson(e),R.fromJS.apply(this,r)},R.toJS=function(e,r){if(u||R.resetDefaultOptions(),0===arguments.length)throw new Error("When calling ko.mapping.toJS, pass the object you want to convert.");if("array"!==R.getType(u.ignore))throw new Error("ko.mapping.defaultOptions().ignore should be an array.");if("array"!==R.getType(u.include))throw new Error("ko.mapping.defaultOptions().include should be an array.");if("array"!==R.getType(u.copy))throw new Error("ko.mapping.defaultOptions().copy should be an array.");return r=y(r,e[K]),R.visitModel(e,function(e){return F.utils.unwrapObservable(e)},r)},R.toJSON=function(e,r,t,n){var a=R.toJS(e,r);return F.utils.stringifyJson(a,t,n)},R.defaultOptions=function(){if(!(0<arguments.length))return u;u=arguments[0]},R.resetDefaultOptions=function(){u={include:e.include.slice(0),ignore:e.ignore.slice(0),copy:e.copy.slice(0),observe:e.observe.slice(0)}},R.getType=function(e){if(e&&"object"==typeof e){if(e.constructor===Date)return"date";if(e.constructor===Array)return"array"}return typeof e},R.visitModel=function(e,f,c){var v;(c=c||{}).visitedObjects=c.visitedObjects||new g;var d=F.utils.unwrapObservable(e);if(!X(d))return f(e,c.parentName);c=y(c,d[K]),f(e,c.parentName),v="array"===R.getType(d)?[]:{},c.visitedObjects.save(e,v);var b=c.parentName;return U(d,function(e){var r=Y(e);if(!c.ignore||-1===F.utils.arrayIndexOf(c.ignore,r)){var t,n,a,i,o=d[e];if(c.parentName=(n=d,a=e,i=(t=b)||"","array"===R.getType(n)?t&&(i+="["+Y(a)+"]"):(t&&(i+="."),i+=Y(a)),i),-1===F.utils.arrayIndexOf(c.copy,r)&&-1===F.utils.arrayIndexOf(c.include,r)){var u=d[K];if(u){var s=u.mappedProperties;if(s&&!s[r]){var p=u.copiedProperties;if(p&&!p[r]&&"array"!==R.getType(d))return}}}switch(R.getType(F.utils.unwrapObservable(o))){case"object":case"array":case"undefined":var l=c.visitedObjects.get(o);v[e]="undefined"!==R.getType(l)?l:R.visitModel(o,f,c);break;default:v[e]=f(o,c.parentName)}}}),v}});
//# sourceMappingURL=knockout.mapping.min.js.map