mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-15 07:46:06 +10:00
8 lines
9.7 KiB
JavaScript
8 lines
9.7 KiB
JavaScript
/**
|
|
* Restfull Resources service for AngularJS apps
|
|
* @version v1.0.2 - 2013-06-25
|
|
* @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,c,d){var e={};return _.each(_.keys(d),function(f){var g=d[f];_.isEmpty(g.params)&&delete g.params,e[f]=b.isSafe(g.method)?function(){return a(_.extend(g,{url:c}))}:function(b){return a(_.extend(g,{url:c,data:b}))}}),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=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||{},a.setDefaultRequestParams=function(a){b.defaultRequestParams=a},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"},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.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.onElemRestangularized=b.onElemRestangularized||function(a){return a},a.setOnElemRestangularized=function(a){b.onElemRestangularized=a},a.setListTypeIsArray=function(){},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})},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=[];!_.isUndefined(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),h=_.defaults(d||{},this.config.defaultHeaders),i=this.base(a);return i+=f?"/"+f:"",i+=this.config.suffix||"",c(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 b=this;return this.config.baseUrl+_.reduce(this.parentsArray(a),function(a,c){var d=a+"/"+c[b.config.restangularFields.route];if(!c[b.config.restangularFields.restangularCollection]){var e=b.config.getIdFromElem(c);e&&(d+="/"+e)}return d},"")},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){var d=_.union(_.values(_.pick(f.restangularFields,["id","route","parentResource"])),f.extraFields);b[f.restangularFields.parentResource]=_.pick(a,d)}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=g(a,b,c);return d[f.restangularFields.restangularCollection]=!1,d.get=_.bind(v,d),d.getList=_.bind(t,d),d.put=_.bind(x,d),d.post=_.bind(y,d),d.remove=_.bind(w,d),d.head=_.bind(z,d),d.trace=_.bind(A,d),d.options=_.bind(B,d),d.patch=_.bind(C,d),o(d),f.transformElem(d,!1,c,G)}function r(a,b,c){var d=g(a,b,c);return d[f.restangularFields.restangularCollection]=!0,d.post=_.bind(y,d,null),d.head=_.bind(z,d),d.trace=_.bind(A,d),d.putElement=_.bind(s,d),d.options=_.bind(B,d),d.patch=_.bind(C,d),d.getList=_.bind(t,d,null),o(d),f.transformElem(d,!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),h.reject(a)}),j(h.promise,!0)}function u(a,b,e,g,h){var i=this,k=d.defer(),l=e||{},o=g||this,p=b||this[f.restangularFields.route],r=H.fetchUrl(this,b),s=g||n(this);request=f.fullRequestInterceptor(s,a,p,r,h||{},l||{});var t=function(c){var d=c.data,e=f.responseExtractor(d,a,p,r)||o;"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))},u=function(a){f.errorInterceptor(a),k.reject(a)},v=a,w=_.extend({},request.headers),x=f.isOverridenMethod(a);return x&&(v="post",w=_.extend(w,{"X-HTTP-Method-Override":a})),f.isSafe(a)?x?H.resource(this,c,w,request.params,b)[v]({}).then(t,u):H.resource(this,c,w,request.params,b)[v]().then(t,u):H.resource(this,c,w,request.params,b)[v](request.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){return _.bind(u,this)("patch",void 0,a,void 0,b)}function D(a,b,c,d,e){return _.bind(u,this)(a,b,c,e,d)}function E(a,b,c,d,e,f){var g;g="getList"===b?_.bind(t,this,c):_.bind(D,this,b,c),this[a]=function(a,b,c){var h=_.defaults({params:a,headers:b,elem:c},{params:d,headers:e,elem:f});return g(h.params,h.headers,h.elem)}}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,b),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)}]})}(); |