Files
cdnjs/ajax/libs/restangular/1.0.11/restangular.min.js
T

8 lines
11 KiB
JavaScript

/**
* Restful Resources service for AngularJS apps
* @version v1.0.11 - 2013-08-09
* @link https://github.com/mgonto/restangular
* @author Martin Gontovnikas <martin@gonto.com.ar>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
!function(){var a=angular.module("restangular",[]);a.provider("Restangular",function(){var a={};a.init=function(a,b){function c(a,b,c,d){var e={};return _.each(_.keys(d),function(f){var g=d[f];g.params=_.extend({},g.params,a.defaultRequestParams[g.method.toLowerCase()]),_.isEmpty(g.params)&&delete g.params,e[f]=a.isSafe(g.method)?function(){return b(_.extend(g,{url:c}))}:function(a){return b(_.extend(g,{url:c,data:a}))}}),e}var d=["get","head","options","trace"];b.isSafe=function(a){return _.contains(d,a.toLowerCase())},b.baseUrl=_.isUndefined(b.baseUrl)?"":b.baseUrl,a.setBaseUrl=function(a){b.baseUrl="/"===_.last(a)?_.initial(a).join(""):a},b.extraFields=b.extraFields||[],a.setExtraFields=function(a){b.extraFields=a},b.defaultHttpFields=b.defaultHttpFields||{},a.setDefaultHttpFields=function(a){b.defaultHttpFields=a},b.withHttpDefaults=function(a){return _.defaults(a,b.defaultHttpFields)},b.defaultRequestParams=b.defaultRequestParams||{get:{},post:{},put:{},remove:{},common:{}},a.setDefaultRequestParams=function(a){b.defaultRequestParams.common=a},a.requestParams=b.defaultRequestParams,b.defaultHeaders=b.defaultHeaders||{},a.setDefaultHeaders=function(a){b.defaultHeaders=a},b.methodOverriders=b.methodOverriders||[],a.setMethodOverriders=function(a){var c=_.extend([],a);b.isOverridenMethod("delete",c)&&c.push("remove"),b.methodOverriders=c},b.isOverridenMethod=function(a,c){var d=c||b.methodOverriders;return!_.isUndefined(_.find(d,function(b){return b.toLowerCase()===a.toLowerCase()}))},b.urlCreator=b.urlCreator||"path",a.setUrlCreator=function(a){if(!_.has(b.urlCreatorFactory,a))throw new Error("URL Path selected isn't valid");b.urlCreator=a},b.restangularFields=b.restangularFields||{id:"id",route:"route",parentResource:"parentResource",restangularCollection:"restangularCollection",cannonicalId:"__cannonicalId"},a.setRestangularFields=function(a){b.restangularFields=_.extend(b.restangularFields,a)},b.setIdToElem=function(a,c){var d=b.restangularFields.id.split("."),e=a;_.each(_.initial(d),function(a){e[a]={},e=e[a]}),e[_.last(d)]=c},b.getIdFromElem=function(a){var c=b.restangularFields.id.split("."),d=angular.copy(a);return _.each(c,function(a){d=d[a]}),d},b.useCannonicalId=_.isUndefined(b.useCannonicalId)?!1:b.useCannonicalId,a.setUseCannonicalId=function(a){b.useCannonicalId=a},b.responseExtractor=b.responseExtractor||function(a){return a},a.setResponseExtractor=function(a){b.responseExtractor=a},a.setResponseInterceptor=a.setResponseExtractor,b.fullRequestInterceptor=b.fullRequestInterceptor||function(a,b,c,d,e,f){return{element:a,headers:e,params:f}},a.setRequestInterceptor=function(a){b.fullRequestInterceptor=function(b,c,d,e,f,g){return{headers:f,params:g,element:a(b,c,d,e)}}},a.setFullRequestInterceptor=function(a){b.fullRequestInterceptor=a},b.errorInterceptor=b.errorInterceptor||function(){},a.setErrorInterceptor=function(a){b.errorInterceptor=a},b.onBeforeElemRestangularized=b.onBeforeElemRestangularized||function(a){return a},a.setOnBeforeElemRestangularized=function(a){b.onBeforeElemRestangularized=a},b.onElemRestangularized=b.onElemRestangularized||function(a){return a},a.setOnElemRestangularized=function(a){b.onElemRestangularized=a},a.setListTypeIsArray=function(){},b.shouldSaveParent=b.shouldSaveParent||function(){return!0},a.setParentless=function(a){_.isArray(a)?b.shouldSaveParent=function(b){return!_.contains(a,b)}:_.isBoolean(a)&&(b.shouldSaveParent=function(){return!a})},b.suffix=_.isUndefined(b.suffix)?null:b.suffix,a.setRequestSuffix=function(a){b.suffix=a},b.transformers=b.transformers||{},a.addElementTransformer=function(a,c,d){var e=null,f=null;2===arguments.length?f=c:(f=d,e=c);var g=b.transformers[a];g||(g=b.transformers[a]=[]),g.push(function(a,b){return _.isNull(e)||a==e?f(b):b})},a.extendCollection=function(b,c){return a.addElementTransformer(b,!0,c)},a.extendModel=function(b,c){return a.addElementTransformer(b,!1,c)},b.transformElem=function(a,c,d,e){var f=b.transformers[d],g=a;return f&&_.each(f,function(a){g=a(c,g)}),b.onElemRestangularized(g,c,d,e)},b.fullResponse=_.isUndefined(b.fullResponse)?!1:b.fullResponse,a.setFullResponse=function(a){b.fullResponse=a},b.urlCreatorFactory={};var e=function(){};e.prototype.setConfig=function(a){this.config=a},e.prototype.parentsArray=function(a){for(var b=[];a;)b.push(a),a=a[this.config.restangularFields.parentResource];return b.reverse()},e.prototype.resource=function(a,b,d,e,f){var g=_.defaults(e||{},this.config.defaultRequestParams.common),h=_.defaults(d||{},this.config.defaultHeaders),i=this.base(a);return i+=f?"/"+f:"",i+=this.config.suffix||"",c(this.config,b,i,{getList:this.config.withHttpDefaults({method:"GET",params:g,headers:h}),get:this.config.withHttpDefaults({method:"GET",params:g,headers:h}),put:this.config.withHttpDefaults({method:"PUT",params:g,headers:h}),post:this.config.withHttpDefaults({method:"POST",params:g,headers:h}),remove:this.config.withHttpDefaults({method:"DELETE",params:g,headers:h}),head:this.config.withHttpDefaults({method:"HEAD",params:g,headers:h}),trace:this.config.withHttpDefaults({method:"TRACE",params:g,headers:h}),options:this.config.withHttpDefaults({method:"OPTIONS",params:g,headers:h}),patch:this.config.withHttpDefaults({method:"PATCH",params:g,headers:h})})};var f=function(){};f.prototype=new e,f.prototype.base=function(a){var c=this;return this.config.baseUrl+_.reduce(this.parentsArray(a),function(a,d){var e=a+"/"+d[c.config.restangularFields.route];if(!d[c.config.restangularFields.restangularCollection]){var f;f=b.useCannonicalId?d[b.restangularFields.cannonicalId]:c.config.getIdFromElem(d),""===f||_.isUndefined(f)||_.isNull(f)||(e+="/"+f)}return e},"")},f.prototype.fetchUrl=function(a,b){var c=this.base(a);return b&&(c+="/"+b),c},b.urlCreatorFactory.path=f};var b={};a.init(this,b),this.$get=["$http","$q",function(c,d){function e(f){function g(a,b,c){if(b[f.restangularFields.route]=c,b.getRestangularUrl=_.bind(H.fetchUrl,H,b),b.addRestangularMethod=_.bind(E,b),b.one=_.bind(h,b,b),b.all=_.bind(i,b,b),a&&f.shouldSaveParent(c)){var d=_.union(_.values(_.pick(f.restangularFields,["id","route","parentResource"])),f.extraFields);b[f.restangularFields.parentResource]=_.pick(a,d)}else b[f.restangularFields.parentResource]=null;return b}function h(a,b,c){var d={};return f.setIdToElem(d,c),q(a,d,b)}function i(a,b){return r(a,{},b,!0)}function j(a,b){return a.call=_.bind(k,a),a.get=_.bind(l,a),a[f.restangularFields.restangularCollection]=b,b&&(a.push=_.bind(k,a,"push")),a}function k(a){var b=d.defer(),c=arguments;return this.then(function(d){var e=Array.prototype.slice.call(c,1),f=d[a];f.apply(d,e),b.resolve(d)}),j(b.promise,this[f.restangularFields.restangularCollection])}function l(a){var b=d.defer();return this.then(function(c){b.resolve(c[a])}),j(b.promise,this[f.restangularFields.restangularCollection])}function m(a,b,c){return f.fullResponse?a.resolve(_.extend(b,{data:c})):(a.resolve(c),void 0)}function n(a){return _.omit(a,_.values(_.omit(f.restangularFields,"id")))}function o(a){a.customOperation=_.bind(D,a),_.each(["put","post","get","delete"],function(b){_.each(["do","custom"],function(c){var d="delete"===b?"remove":b,e=c+b.toUpperCase();a[e]=_.bind(D,a,d)})}),a.customGETLIST=_.bind(t,a),a.doGETLIST=a.customGETLIST}function p(a){var b=angular.copy(a);return q(b[f.restangularFields.parentResource],b,b[f.restangularFields.route])}function q(a,b,c){var d=f.onBeforeElemRestangularized(b,!1,c),e=g(a,d,c);return f.useCannonicalId&&(e[f.restangularFields.cannonicalId]=f.getIdFromElem(e)),e[f.restangularFields.restangularCollection]=!1,e.get=_.bind(v,e),e.getList=_.bind(t,e),e.put=_.bind(x,e),e.post=_.bind(y,e),e.remove=_.bind(w,e),e.head=_.bind(z,e),e.trace=_.bind(A,e),e.options=_.bind(B,e),e.patch=_.bind(C,e),o(e),f.transformElem(e,!1,c,G)}function r(a,b,c){var d=f.onBeforeElemRestangularized(b,!0,c),e=g(a,d,c);return e[f.restangularFields.restangularCollection]=!0,e.post=_.bind(y,e,null),e.head=_.bind(z,e),e.trace=_.bind(A,e),e.putElement=_.bind(s,e),e.options=_.bind(B,e),e.patch=_.bind(C,e),e.getList=_.bind(t,e,null),o(e),f.transformElem(e,!0,c,G)}function s(a,b,c){var e=this,f=this[a],g=d.defer();return f.put(b,c).then(function(b){var c=p(e);c[a]=b,g.resolve(c)},function(a){g.reject(a)}),j(g.promise,!0)}function t(a,b,e){var g=this,h=d.defer(),i="getList",k=H.fetchUrl(this,a),l=a||g[f.restangularFields.route],n=f.fullRequestInterceptor(null,i,l,k,e||{},b||{});return H.resource(this,c,n.headers,n.params,a).getList().then(function(b){var c=b.data,d=f.responseExtractor(c,i,l,k),e=_.map(d,function(b){return g[f.restangularFields.restangularCollection]?q(g[f.restangularFields.parentResource],b,g[f.restangularFields.route]):q(g,b,a)});e=_.extend(d,e),g[f.restangularFields.restangularCollection]?m(h,b,r(null,e,g[f.restangularFields.route])):m(h,b,r(g,e,a))},function(a){f.errorInterceptor(a)!==!1&&h.reject(a)}),j(h.promise,!0)}function u(a,b,e,g,h){var i=this,k=d.defer(),l=e||{},o=b||this[f.restangularFields.route],p=H.fetchUrl(this,b),r=g||("remove"===a?void 0:n(this)),s=f.fullRequestInterceptor(r,a,o,p,h||{},l||{}),t=function(c){var d=c.data,e=f.responseExtractor(d,a,o,p);e?"post"!==a||i[f.restangularFields.restangularCollection]?m(k,c,q(i[f.restangularFields.parentResource],e,i[f.restangularFields.route])):m(k,c,q(i,e,b)):m(k,c,void 0)},u=function(a){f.errorInterceptor(a)!==!1&&k.reject(a)},v=a,w=_.extend({},s.headers),x=f.isOverridenMethod(a);return x&&(v="post",w=_.extend(w,{"X-HTTP-Method-Override":"remove"===a?"DELETE":a})),f.isSafe(a)?x?H.resource(this,c,w,s.params,b)[v]({}).then(t,u):H.resource(this,c,w,s.params,b)[v]().then(t,u):H.resource(this,c,w,s.params,b)[v](s.element).then(t,u),j(k.promise)}function v(a,b){return _.bind(u,this)("get",void 0,a,void 0,b)}function w(a,b){return _.bind(u,this)("remove",void 0,a,void 0,b)}function x(a,b){return _.bind(u,this)("put",void 0,a,void 0,b)}function y(a,b,c,d){return _.bind(u,this)("post",a,c,b,d)}function z(a,b){return _.bind(u,this)("head",void 0,a,void 0,b)}function A(a,b){return _.bind(u,this)("trace",void 0,a,void 0,b)}function B(a,b){return _.bind(u,this)("options",void 0,a,void 0,b)}function C(a,b,c){return _.bind(u,this)("patch",void 0,b,a,c)}function D(a,b,c,d,e){return _.bind(u,this)(a,b,c,e,d)}function E(a,b,c,d,e,g){var h;h="getList"===b?_.bind(t,this,c):_.bind(D,this,b,c);var i=function(a,b,c){var f=_.defaults({params:a,headers:b,elem:c},{params:d,headers:e,elem:g});return h(f.params,f.headers,f.elem)};this[a]=f.isSafe(b)?i:function(a,b,c){return i(b,c,a)}}function F(c){var d=angular.copy(b);return a.init(d,d),c(d),e(d)}var G={},H=new f.urlCreatorFactory[f.urlCreator];return H.setConfig(f),a.init(G,f),G.copy=_.bind(p,G),G.withConfig=_.bind(F,G),G.one=_.bind(h,G,null),G.all=_.bind(i,G,null),G.restangularizeElement=_.bind(q,G),G.restangularizeCollection=_.bind(r,G),G}return e(b)}]})}();