knockout.mapper.js
Version:
Knockout.js plugin for object mapping including validation.
1 lines • 3.31 kB
JavaScript
!function(e){"function"==typeof require&&"object"==typeof exports&&"object"==typeof module?e(require("knockout"),exports):"function"==typeof define&&define.amd?define(["knockout","exports"],e):e(ko,ko.mapping={})}(function(e,n){function t(e,n){e.extend(p(n)?{fn:n}:n)}var r={},i=Array.prototype.forEach,o=Object.prototype.toString,u=Array.isArray||function(e){return"[object Array]"===o.call(e)},f=function(e){return"[object String]"===o.call(e)},c=function(e){return e===Object(e)},a=function(e){return e===!0||e===!1||"[object Boolean]"===o.call(e)},l=function(e){return o.call(e)==="[object "+Number+"]"||!isNaN(e)},p=function(e){return o.call(e)==="[object "+Function+"]"},s=function(e){return o.call(e)==="[object "+Date+"]"};"function"!=typeof/./&&(p=function(e){return"function"==typeof e});var b=function(e,n,t){if(null!==e)if(i&&e.forEach===i)e.forEach(n,t);else if(u(e)){for(var o=0,f=e.length;f>o;o+=1)if(n.call(t,e[o],o,e)===r)return}else for(var c in e)if(n.call(t,e[c],c,e)===r)return};n.toJSONByPrototype=e.toJSONByPrototype=function(e,n){var t=e,r=function(e,n,t){return Object.keys(n).forEach(function(i){if(t&&t[i]){var o=n[i];if(u(o))if(e[i]=[],u(t[i]))e[i]=t[i];else{var s=t[i](),d=o.length>0&&o[0]&&c(o[0]);d?b(s,function(n){e[i].push(r({},o[0],n))}):b(s,function(n){e[i].push(p(n)?n():n)})}else if(f(o)||l(o)||a(o))e[i]=p(t[i])?t[i]():t[i];else{if(p(o))return;if(c(o)&&p(o.read)&&p(o.write))return;c(o)&&(e[i]={},r(e[i],o,o._observable?t[i]():t[i]))}}}),e};return r({},n,t)},n.resetViewModel=e.resetViewModel=function(e){var n=e,t=function(e){return e?(p(e)?e.originalValue&&e(e.originalValue()):c(e)&&b(e,function(n,r){t(e[r])}),e):void 0};t(n)},n.updateViewModel=e.updateViewModel=function(e,t){var r=e,i=function(e,t,r){return e&&t&&b(e,function(e,o){if(t[o]){var s=r+"."+o;if(u(e)&&t[o]){t[o]([]);var d=e.length>0&&e[0]&&c(e[0]);d?b(e,function(e){t[o].push(n.mapObject({},e))}):t[o](e)}else if(f(e)||l(e)||a(e))t[o]&&p(t[o])&&t[o](e);else{if(p(e))return;if(c(e)&&p(e.read)&&p(e.write))return;c(e)&&(p(t[o])?t[o](e):i(e,t[o],s))}}}),t};i(t,r,"")},e.extenders.originalValue=function(n,t){n.originalValue||(n.originalValue=e.observable(t))},n.mapObject=e.mapObject=function(n,r,i,o,d,v){var y=n,h=r,g=i||{},j=o||{},V=d||{},m=v||{},w=function(n,r,i,o){var d=i||{};return b(n,function(n,i){if("_observable"!==i)if(u(n)){r[i]=e.observableArray(),d[i]&&t(r[i],u(d[i])&&d[i].length>0?d[i][0]:d[i]);var v=n.length>0&&n[0]&&c(n[0]);v?b(n,function(e){r[i].push(w(e,{},{},o))}):b(n,function(e){r[i].push(e)})}else if(f(n)||l(n)||a(n)||s(n))r[i]=e.observable(n).extend({originalValue:n}),d[i]&&t(r[i],d[i]);else{if(p(n))return;if(c(n)&&p(n.read)&&p(n.write))return;c(n)&&(r[i]=n._observable?e.observable():{},w(n,r[i],d[i],o))}}),r},O=function(n,r,i,o){var d=i||{};return b(n,function(n,i){if(u(n)){var v=n.length>0&&n[0]&&c(n[0]);v&&b(n,function(e){w(e,{},o)})}else{if(f(n)||l(n)||a(n)||s(n))return;p(n)?r[i]=e.pureComputed(n,o):c(n)&&p(n.read)&&p(n.write)?(r[i]=e.pureComputed(n,o),d[i]&&m.validateReadWrite&&t(r[i],d[i])):c(n)&&O(n,r[i],d[i],o)}}),r},k=function(e,n,t){b(e,function(e,r){u(e)?(n[r]=[],b(e,function(e){n[r].push(p(e)?e.bind(t):e)})):p(e)?n[r]=e.bind(t):c(e)&&(n[r]||(n[r]={}),k(e,n[r],t))})};return b(V,function(e,n){y[n]=e}),w(h,y,g,y),O(h,y,g,y),k(j,y,y),y.init&&y.init(),y}});