This repository has been archived by the owner on Jun 29, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathangular-ra-model.min.js
1 lines (1 loc) · 6.07 KB
/
angular-ra-model.min.js
1
"use strict";angular.module("ra.model",["ra.model.services"]),function(){function a(a){var b=a.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return 1!==b.length||b[0]?b:[]}function b(a){return angular.forEach(Array.prototype.slice.call(arguments,1),function(b){if(a&&b)for(var c in b)a[c]=b[c]}),a}angular.module("ra.model.services",[]).run(["$rootScope","raModel",function(a,b){a.model=function(a,c){var d=new b(this,a,c);return this[a]=d,d}}]).factory("raModel",["$rootScope","$cacheFactory","$location","$log","$q",function(c,d,e,f,g){var h=d("raModel"),i=function(a,b,d){var e=Array.prototype.slice.call(arguments);angular.isObject(e[0])||e[0]===!1||e.unshift(c),a=e[0],b=e[1],d=e[2]||{},this.extend(d),this.is=d.is||{},this.opts=d.opts||{},this.attr_accessible=d.attr_accessible||[],this.attr_protected=d.attr_protected||[],this.resource_attribute=d.resource_attribute||"items",this.opts.name=this.opts.name||b,this._scope=function(){return a},angular.isFunction(this.onload)&&this.onload.call(this)};i.prototype.init=function(a){angular.isFunction(this.beforeInit)&&(this.beforeInit.call(this,a),f.warn("raModel.beforeInit is deprecated, use init instead"));var b=this.get(a);return angular.isFunction(this.afterInit)&&(this.afterInit.call(this,b,a),f.warn("raModel.init is deprecated, use init instead")),angular.isFunction(this.config.init)&&this.config.init.call(this,b,a),this.is.inited=!0,b},i.prototype.get=function(a){if(this.opts.cache){var b=this.cached();if(b)return g.when(b).then(function(){this.success(b)}.bind(this)),b}var c,d,e=[];if(this.params&&(d=angular.isFunction(this.params)?this.params():this.params),e.push(angular.extend({},d,a),this._setHeaders.bind(this)),this.resource){var f=this.resource,h=this;this.resource_method&&(f=f[this.resource_method],h=this.resource),c=f.apply(h,e),c&&c.$promise&&(this.$promise=c.$promise.then(this.success.bind(this),this.error.bind(this)))}else angular.isFunction(this.config.get)&&(c=this.config.get.apply(this,e));return this.is.loading=!0,c},i.prototype.update=function(){this.is.updating=!0,this.is.processing=!0;var a,b=function(a){this.is.updating=!1,this.is.processing=!1,this.snapshot(),this._broadcast("updateComplete","updateSuccess").data(a)},c=function(a){return this.is.updating=!1,this.is.processing=!1,this._broadcast("updateComplete","updateError").data(a),g.reject(a)};if(angular.isFunction(this.config.update))a=this.config.update.apply(this,arguments);else{if(!angular.isFunction(this.$update))throw new Error("Model must have an resource.$update method or update method.");a=this.$update.call(this.getData())}return a=g.when(a),angular.isFunction(this.config.updateSuccess)&&(a=a.then(this.config.updateSuccess.bind(this))),angular.isFunction(this.config.updateError)&&(a=a["catch"](this.config.updateError.bind(this))),a.then(b.bind(this),c.bind(this))},i.prototype.success=function(a){return this._setAttrs(a),this.resource_set!==!1&&(angular.isArray(a)?this[this.resource_attribute]=a:b(this,a)),this.is.loaded=!0,this.is.loading=!1,angular.isFunction(this.config.success)&&this.config.success.call(this,a,this.$headers),this.snapshot(),this.opts.cache&&this.opts.cache.set!==!1&&this.cache(a),this._broadcast("success","complete").data(a,this.$headers),a},i.prototype.error=function(a){return this.is.loaded=!0,this.is.loading=!1,angular.isFunction(this.config.error)&&this.config.error.call(this,a),this._broadcast("error","complete").data(a),g.reject(a)},i.prototype.cache=function(a,b){h.put(this._cacheKey(b),a)},i.prototype.cached=function(a){return h.get(this._cacheKey(a))},i.prototype.snapshot=function(){this._original=this.getData()},i.prototype.reset=function(){angular.isArray(this._original)?angular.forEach(this[this.resource_attribute],function(a){for(var b=0,c=this._original.length;c>b;b++)if(angular.isObject(a)&&angular.isObject(this._original[b])&&a.id===this._original[b].id){angular.extend(a,angular.copy(this._original[b]));break}}.bind(this)):angular.extend(this,angular.copy(this._original))},i.prototype.flush=function(a){h.remove(this._cacheKey(a))},i.prototype.extend=function(c){var d=this;c=c||{},this.config?b(this.config,c):this.config=c;for(var e in c){var f=c[e];if(angular.isFunction(f))if("$super"===a(f)[0]){var g=this[e],h=angular.copy(f);f=function(){var a=Array.prototype.slice.call(arguments,0);return a.unshift(g.bind(d)),h.apply(d,a)},this[e]=f}else(angular.isUndefined(i.prototype[e])||angular.isDefined(i.prototype[e])&&i.prototype[e]===Object.prototype[e])&&(this[e]=f);else this[e]=f}};var j=function k(a){var b;return angular.isArray(a)?(b=[],angular.forEach(a,function(a){b.push(k.call(this,a))}.bind(this))):(b={},angular.forEach(this._getAttrs(),function(c){c in a&&(b[c]=angular.copy(a[c]))})),b};return i.prototype.data=i.prototype.getData=function(a){var b;return b=arguments.length>0?a:this[this.resource_attribute]||this,j.call(this,b)},i.prototype._setHeaders=function(a,b){this.$headers=b,this.$headers.parse=function(a){return angular.fromJson(this(a))}},i.prototype.setAttr=function(a,b){this[a]=b,this.attr_accessible.push(a),angular.isArray(this._attrs)&&this._attrs.push(a)},i.prototype._setAttrs=function(a){var b;if(b=angular.isArray(a)&&a.length>0?a[0]:a,angular.isObject(b)){this._attrs=[];var c=Object.keys(b).concat(this.attr_accessible),d=this;angular.forEach(c,function(a){if(a){var b=a.charAt(0);"$"!==b&&"_"!==b&&-1===d._attrs.indexOf(a)&&-1===d.attr_protected.indexOf(a)&&d._attrs.push(a)}})}},i.prototype._getAttrs=function(){return angular.isArray(this._attrs)&&this._attrs.length>0?this._attrs:angular.isArray(this.attr_accessible)&&this.attr_accessible.length>0?this.attr_accessible:[]},i.prototype._cacheKey=function(a){var b=[];return b.push(a?a:this.opts.cache.key!==!0?this.opts.cache.key:e.path()),b.push(this.opts.name),b.join("|")},i.prototype._broadcast=function(){var a=this,b=a._scope(),c=Array.prototype.slice.call(arguments,0),d=function(){if(b&&b.$broadcast){var d=Array.prototype.slice.call(arguments,0);angular.forEach(c,function(c){var e=angular.copy(d);e.unshift(a.opts.name+":"+c),b.$broadcast.apply(b,e)})}};return{data:d}},i}])}();