forked from BorisMoore/jsviews
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.observable.min.js
2 lines (2 loc) · 1.82 KB
/
jquery.observable.min.js
1
2
/* JsObservable: http://github.com/BorisMoore/jsviews */
(function(a,f){a.observable=function(b){return a.isArray(b)?new d(b):new c(b)};var g=[].splice;function c(a){if(!this.data)return new c(a);this._data=a;return this}a.observable.Object=c;c.prototype={_data:null,data:function(){return this._data},setProperty:function(b,e){if(a.isArray(b))for(var g=0,l=b.length;g<l;g++){var i=b[g];this.setProperty(i.name,i.value)}else if(typeof b==="object")for(var j in b)this.setProperty(j,b[j]);else{var f,d,k=this._data,c=h(k,b);b=c[1];c=c[0];if(c){d=c[b];if(a.isFunction(d)){f=d;d=d.call(c)}if(d!=e){if(f){f.call(c,e);e=f.call(c)}else c[b]=e;a(c).triggerHandler("propertyChange",{path:b,value:e,oldValue:d})}}}return this}};function h(a,b){if(a&&b){var c=b.split(".");b=c.pop();while(a&&c.length)a=a[c.shift()];return[a,b]}return[]}function d(a){if(!this.data)return new d(a);this._data=a;return this}function b(c,b){a([c]).triggerHandler("arrayChange",b)}function e(a){if(typeof a!=="number")throw"Invalid index.";}a.observable.Array=d;d.prototype={_data:null,data:function(){return this._data},insert:function(d,c){e(d);if(arguments.length>1){c=a.isArray(c)?c:[c];if(c.length>0){g.apply(this._data,[d,0].concat(c));b(this._data,{change:"insert",index:d,items:c})}}return this},remove:function(c,a){e(c);a=a===f||a===null?1:a;if(a&&c>-1){var d=this._data.slice(c,c+a);a=d.length;if(a){this._data.splice(c,a);b(this._data,{change:"remove",index:c,items:d})}}return this},move:function(c,d,a){e(c);e(d);a=a===f||a===null?1:a;if(a){var g=this._data.slice(c,c+a);this._data.splice(c,a);this._data.splice.apply(this._data,[d,0].concat(g));b(this._data,{change:"move",oldIndex:c,index:d,items:g})}return this},refresh:function(a){var c=this._data.slice(0);g.apply(this._data,[0,this._data.length].concat(a));b(this._data,{change:"refresh",oldItems:c});return this}}})(jQuery);