/* | |
The MIT License | |
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files (the "Software"), to deal | |
in the Software without restriction, including without limitation the rights | |
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
copies of the Software, and to permit persons to whom the Software is | |
furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
THE SOFTWARE. | |
*/ | |
/** | |
* @license AngularJS v1.3.8 | |
* (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); |