| /** |
| * @license AngularJS v1.3.5 |
| * (c) 2010-2014 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`} and |
| * {@link ngCookies.$cookieStore `$cookieStore`} for usage. |
| */ |
| |
| |
| angular.module('ngCookies', ['ng']). |
| /** |
| * @ngdoc service |
| * @name $cookies |
| * |
| * @description |
| * Provides read/write access to browser's cookies. |
| * |
| * Only a simple Object is exposed and by adding or removing properties to/from this object, new |
| * cookies are created/deleted at the end of current $eval. |
| * The object's properties can only be strings. |
| * |
| * 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.myFavorite; |
| * // Setting a cookie |
| * $cookies.myFavorite = 'oatmeal'; |
| * }]); |
| * ``` |
| */ |
| factory('$cookies', ['$rootScope', '$browser', function($rootScope, $browser) { |
| var cookies = {}, |
| lastCookies = {}, |
| lastBrowserCookies, |
| runEval = false, |
| copy = angular.copy, |
| isUndefined = angular.isUndefined; |
| |
| //creates a poller fn that copies all cookies from the $browser to service & inits the service |
| $browser.addPollFn(function() { |
| var currentCookies = $browser.cookies(); |
| if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl |
| lastBrowserCookies = currentCookies; |
| copy(currentCookies, lastCookies); |
| copy(currentCookies, cookies); |
| if (runEval) $rootScope.$apply(); |
| } |
| })(); |
| |
| runEval = true; |
| |
| //at the end of each eval, push cookies |
| //TODO: this should happen before the "delayed" watches fire, because if some cookies are not |
| // strings or browser refuses to store some cookies, we update the model in the push fn. |
| $rootScope.$watch(push); |
| |
| return cookies; |
| |
| |
| /** |
| * Pushes all the cookies from the service to the browser and verifies if all cookies were |
| * stored. |
| */ |
| function push() { |
| var name, |
| value, |
| browserCookies, |
| updated; |
| |
| //delete any cookies deleted in $cookies |
| for (name in lastCookies) { |
| if (isUndefined(cookies[name])) { |
| $browser.cookies(name, undefined); |
| } |
| } |
| |
| //update all cookies updated in $cookies |
| for (name in cookies) { |
| value = cookies[name]; |
| if (!angular.isString(value)) { |
| value = '' + value; |
| cookies[name] = value; |
| } |
| if (value !== lastCookies[name]) { |
| $browser.cookies(name, value); |
| updated = true; |
| } |
| } |
| |
| //verify what was actually stored |
| if (updated) { |
| updated = false; |
| browserCookies = $browser.cookies(); |
| |
| for (name in cookies) { |
| if (cookies[name] !== browserCookies[name]) { |
| //delete or reset all cookies that the browser dropped from $cookies |
| if (isUndefined(browserCookies[name])) { |
| delete cookies[name]; |
| } else { |
| cookies[name] = browserCookies[name]; |
| } |
| updated = true; |
| } |
| } |
| } |
| } |
| }]). |
| |
| |
| /** |
| * @ngdoc service |
| * @name $cookieStore |
| * @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. |
| * |
| * @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. |
| */ |
| get: function(key) { |
| var value = $cookies[key]; |
| return value ? angular.fromJson(value) : value; |
| }, |
| |
| /** |
| * @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[key] = angular.toJson(value); |
| }, |
| |
| /** |
| * @ngdoc method |
| * @name $cookieStore#remove |
| * |
| * @description |
| * Remove given cookie |
| * |
| * @param {string} key Id of the key-value pair to delete. |
| */ |
| remove: function(key) { |
| delete $cookies[key]; |
| } |
| }; |
| |
| }]); |
| |
| |
| })(window, window.angular); |