322 lines
9.8 KiB
JavaScript
322 lines
9.8 KiB
JavaScript
/**
|
|
* @license AngularJS v1.4.6
|
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
|
* License: MIT
|
|
*/
|
|
(function(window, angular, undefined) {'use strict';
|
|
|
|
/**
|
|
* @ngdoc module
|
|
* @name ngCookies
|
|
* @description
|
|
*
|
|
* # ngCookies
|
|
*
|
|
* The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
|
|
*
|
|
*
|
|
* <div doc-module-components="ngCookies"></div>
|
|
*
|
|
* See {@link ngCookies.$cookies `$cookies`} for usage.
|
|
*/
|
|
|
|
|
|
angular.module('ngCookies', ['ng']).
|
|
/**
|
|
* @ngdoc provider
|
|
* @name $cookiesProvider
|
|
* @description
|
|
* Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
|
|
* */
|
|
provider('$cookies', [function $CookiesProvider() {
|
|
/**
|
|
* @ngdoc property
|
|
* @name $cookiesProvider#defaults
|
|
* @description
|
|
*
|
|
* Object containing default options to pass when setting cookies.
|
|
*
|
|
* The object may have following properties:
|
|
*
|
|
* - **path** - `{string}` - The cookie will be available only for this path and its
|
|
* sub-paths. By default, this would be the URL that appears in your base tag.
|
|
* - **domain** - `{string}` - The cookie will be available only for this domain and
|
|
* its sub-domains. For obvious security reasons the user agent will not accept the
|
|
* cookie if the current domain is not a sub domain or equals to the requested domain.
|
|
* - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT"
|
|
* or a Date object indicating the exact date/time this cookie will expire.
|
|
* - **secure** - `{boolean}` - The cookie will be available only in secured connection.
|
|
*
|
|
* Note: by default the address that appears in your `<base>` tag will be used as path.
|
|
* This is important so that cookies will be visible for all routes in case html5mode is enabled
|
|
*
|
|
**/
|
|
var defaults = this.defaults = {};
|
|
|
|
function calcOptions(options) {
|
|
return options ? angular.extend({}, defaults, options) : defaults;
|
|
}
|
|
|
|
/**
|
|
* @ngdoc service
|
|
* @name $cookies
|
|
*
|
|
* @description
|
|
* Provides read/write access to browser's cookies.
|
|
*
|
|
* <div class="alert alert-info">
|
|
* Up until Angular 1.3, `$cookies` exposed properties that represented the
|
|
* current browser cookie values. In version 1.4, this behavior has changed, and
|
|
* `$cookies` now provides a standard api of getters, setters etc.
|
|
* </div>
|
|
*
|
|
* Requires the {@link ngCookies `ngCookies`} module to be installed.
|
|
*
|
|
* @example
|
|
*
|
|
* ```js
|
|
* angular.module('cookiesExample', ['ngCookies'])
|
|
* .controller('ExampleController', ['$cookies', function($cookies) {
|
|
* // Retrieving a cookie
|
|
* var favoriteCookie = $cookies.get('myFavorite');
|
|
* // Setting a cookie
|
|
* $cookies.put('myFavorite', 'oatmeal');
|
|
* }]);
|
|
* ```
|
|
*/
|
|
this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {
|
|
return {
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#get
|
|
*
|
|
* @description
|
|
* Returns the value of given cookie key
|
|
*
|
|
* @param {string} key Id to use for lookup.
|
|
* @returns {string} Raw cookie value.
|
|
*/
|
|
get: function(key) {
|
|
return $$cookieReader()[key];
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#getObject
|
|
*
|
|
* @description
|
|
* Returns the deserialized value of given cookie key
|
|
*
|
|
* @param {string} key Id to use for lookup.
|
|
* @returns {Object} Deserialized cookie value.
|
|
*/
|
|
getObject: function(key) {
|
|
var value = this.get(key);
|
|
return value ? angular.fromJson(value) : value;
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#getAll
|
|
*
|
|
* @description
|
|
* Returns a key value object with all the cookies
|
|
*
|
|
* @returns {Object} All cookies
|
|
*/
|
|
getAll: function() {
|
|
return $$cookieReader();
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#put
|
|
*
|
|
* @description
|
|
* Sets a value for given cookie key
|
|
*
|
|
* @param {string} key Id for the `value`.
|
|
* @param {string} value Raw value to be stored.
|
|
* @param {Object=} options Options object.
|
|
* See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
|
|
*/
|
|
put: function(key, value, options) {
|
|
$$cookieWriter(key, value, calcOptions(options));
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#putObject
|
|
*
|
|
* @description
|
|
* Serializes and sets a value for given cookie key
|
|
*
|
|
* @param {string} key Id for the `value`.
|
|
* @param {Object} value Value to be stored.
|
|
* @param {Object=} options Options object.
|
|
* See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
|
|
*/
|
|
putObject: function(key, value, options) {
|
|
this.put(key, angular.toJson(value), options);
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookies#remove
|
|
*
|
|
* @description
|
|
* Remove given cookie
|
|
*
|
|
* @param {string} key Id of the key-value pair to delete.
|
|
* @param {Object=} options Options object.
|
|
* See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
|
|
*/
|
|
remove: function(key, options) {
|
|
$$cookieWriter(key, undefined, calcOptions(options));
|
|
}
|
|
};
|
|
}];
|
|
}]);
|
|
|
|
angular.module('ngCookies').
|
|
/**
|
|
* @ngdoc service
|
|
* @name $cookieStore
|
|
* @deprecated
|
|
* @requires $cookies
|
|
*
|
|
* @description
|
|
* Provides a key-value (string-object) storage, that is backed by session cookies.
|
|
* Objects put or retrieved from this storage are automatically serialized or
|
|
* deserialized by angular's toJson/fromJson.
|
|
*
|
|
* Requires the {@link ngCookies `ngCookies`} module to be installed.
|
|
*
|
|
* <div class="alert alert-danger">
|
|
* **Note:** The $cookieStore service is **deprecated**.
|
|
* Please use the {@link ngCookies.$cookies `$cookies`} service instead.
|
|
* </div>
|
|
*
|
|
* @example
|
|
*
|
|
* ```js
|
|
* angular.module('cookieStoreExample', ['ngCookies'])
|
|
* .controller('ExampleController', ['$cookieStore', function($cookieStore) {
|
|
* // Put cookie
|
|
* $cookieStore.put('myFavorite','oatmeal');
|
|
* // Get cookie
|
|
* var favoriteCookie = $cookieStore.get('myFavorite');
|
|
* // Removing a cookie
|
|
* $cookieStore.remove('myFavorite');
|
|
* }]);
|
|
* ```
|
|
*/
|
|
factory('$cookieStore', ['$cookies', function($cookies) {
|
|
|
|
return {
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookieStore#get
|
|
*
|
|
* @description
|
|
* Returns the value of given cookie key
|
|
*
|
|
* @param {string} key Id to use for lookup.
|
|
* @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
|
|
*/
|
|
get: function(key) {
|
|
return $cookies.getObject(key);
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookieStore#put
|
|
*
|
|
* @description
|
|
* Sets a value for given cookie key
|
|
*
|
|
* @param {string} key Id for the `value`.
|
|
* @param {Object} value Value to be stored.
|
|
*/
|
|
put: function(key, value) {
|
|
$cookies.putObject(key, value);
|
|
},
|
|
|
|
/**
|
|
* @ngdoc method
|
|
* @name $cookieStore#remove
|
|
*
|
|
* @description
|
|
* Remove given cookie
|
|
*
|
|
* @param {string} key Id of the key-value pair to delete.
|
|
*/
|
|
remove: function(key) {
|
|
$cookies.remove(key);
|
|
}
|
|
};
|
|
|
|
}]);
|
|
|
|
/**
|
|
* @name $$cookieWriter
|
|
* @requires $document
|
|
*
|
|
* @description
|
|
* This is a private service for writing cookies
|
|
*
|
|
* @param {string} name Cookie name
|
|
* @param {string=} value Cookie value (if undefined, cookie will be deleted)
|
|
* @param {Object=} options Object with options that need to be stored for the cookie.
|
|
*/
|
|
function $$CookieWriter($document, $log, $browser) {
|
|
var cookiePath = $browser.baseHref();
|
|
var rawDocument = $document[0];
|
|
|
|
function buildCookieString(name, value, options) {
|
|
var path, expires;
|
|
options = options || {};
|
|
expires = options.expires;
|
|
path = angular.isDefined(options.path) ? options.path : cookiePath;
|
|
if (angular.isUndefined(value)) {
|
|
expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
|
|
value = '';
|
|
}
|
|
if (angular.isString(expires)) {
|
|
expires = new Date(expires);
|
|
}
|
|
|
|
var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
|
|
str += path ? ';path=' + path : '';
|
|
str += options.domain ? ';domain=' + options.domain : '';
|
|
str += expires ? ';expires=' + expires.toUTCString() : '';
|
|
str += options.secure ? ';secure' : '';
|
|
|
|
// per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
|
|
// - 300 cookies
|
|
// - 20 cookies per unique domain
|
|
// - 4096 bytes per cookie
|
|
var cookieLength = str.length + 1;
|
|
if (cookieLength > 4096) {
|
|
$log.warn("Cookie '" + name +
|
|
"' possibly not set or overflowed because it was too large (" +
|
|
cookieLength + " > 4096 bytes)!");
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
return function(name, value, options) {
|
|
rawDocument.cookie = buildCookieString(name, value, options);
|
|
};
|
|
}
|
|
|
|
$$CookieWriter.$inject = ['$document', '$log', '$browser'];
|
|
|
|
angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
|
|
this.$get = $$CookieWriter;
|
|
});
|
|
|
|
|
|
})(window, window.angular);
|