diff --git a/src/AngularPublic.js b/src/AngularPublic.js index 20c35f52f658..66817b5b2b60 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -152,7 +152,9 @@ function publishExternalAPI(angular) { 'getTestability': getTestability, '$$minErr': minErr, '$$csp': csp, - 'reloadWithDebugInfo': reloadWithDebugInfo + 'reloadWithDebugInfo': reloadWithDebugInfo, + '$$encodeUriSegment': encodeUriSegment, + '$$encodeUriQuery': encodeUriQuery }); angularModule = setupModuleLoader(window); diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index e58b0aecac40..450c07c301e7 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -424,45 +424,6 @@ angular.module('ngResource', ['ng']). copy = angular.copy, isFunction = angular.isFunction; - /** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set - * (pchar) allowed in path segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); - } - - - /** - * This method is intended for encoding *key* or *value* parts of query component. We need a - * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't - * have to be encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); - } - function Route(template, defaults) { this.template = template; this.defaults = extend({}, provider.defaults, defaults); @@ -500,9 +461,9 @@ angular.module('ngResource', ['ng']). val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; if (angular.isDefined(val) && val !== null) { if (paramInfo.isQueryParamValue) { - encodedVal = encodeUriQuery(val, true); + encodedVal = angular.$$encodeUriQuery(val, true); } else { - encodedVal = encodeUriSegment(val); + encodedVal = angular.$$encodeUriSegment(val); } url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { return encodedVal + p1;