angularjs-rails 1.3.15 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/angularjs-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/angular-animate.js +3443 -1872
  4. data/vendor/assets/javascripts/angular-aria.js +89 -75
  5. data/vendor/assets/javascripts/angular-cookies.js +255 -141
  6. data/vendor/assets/javascripts/angular-loader.js +41 -17
  7. data/vendor/assets/javascripts/angular-message-format.js +980 -0
  8. data/vendor/assets/javascripts/angular-messages.js +430 -153
  9. data/vendor/assets/javascripts/angular-mocks.js +76 -92
  10. data/vendor/assets/javascripts/angular-resource.js +6 -6
  11. data/vendor/assets/javascripts/angular-route.js +8 -6
  12. data/vendor/assets/javascripts/angular-sanitize.js +32 -28
  13. data/vendor/assets/javascripts/angular-scenario.js +4315 -2452
  14. data/vendor/assets/javascripts/angular-touch.js +26 -21
  15. data/vendor/assets/javascripts/angular.js +4314 -2490
  16. data/vendor/assets/javascripts/unstable/angular2.js +24024 -0
  17. metadata +4 -14
  18. data/vendor/assets/javascripts/unstable/angular-animate.js +0 -2137
  19. data/vendor/assets/javascripts/unstable/angular-aria.js +0 -364
  20. data/vendor/assets/javascripts/unstable/angular-cookies.js +0 -206
  21. data/vendor/assets/javascripts/unstable/angular-loader.js +0 -405
  22. data/vendor/assets/javascripts/unstable/angular-messages.js +0 -401
  23. data/vendor/assets/javascripts/unstable/angular-mocks.js +0 -2468
  24. data/vendor/assets/javascripts/unstable/angular-resource.js +0 -668
  25. data/vendor/assets/javascripts/unstable/angular-route.js +0 -989
  26. data/vendor/assets/javascripts/unstable/angular-sanitize.js +0 -679
  27. data/vendor/assets/javascripts/unstable/angular-scenario.js +0 -37678
  28. data/vendor/assets/javascripts/unstable/angular-touch.js +0 -622
  29. data/vendor/assets/javascripts/unstable/angular.js +0 -26309
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @license AngularJS v1.3.15
3
- * (c) 2010-2014 Google, Inc. http://angularjs.org
2
+ * @license AngularJS v1.4.0
3
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
6
6
  (function(window, angular, undefined) {'use strict';
@@ -216,88 +216,101 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
216
216
  restrict: 'A',
217
217
  require: '?ngModel',
218
218
  priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value
219
- link: function(scope, elem, attr, ngModel) {
219
+ compile: function(elem, attr) {
220
220
  var shape = getShape(attr, elem);
221
- var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem);
222
-
223
- function ngAriaWatchModelValue() {
224
- return ngModel.$modelValue;
225
- }
226
-
227
- function getRadioReaction() {
228
- if (needsTabIndex) {
229
- needsTabIndex = false;
230
- return function ngAriaRadioReaction(newVal) {
231
- var boolVal = (attr.value == ngModel.$viewValue);
232
- elem.attr('aria-checked', boolVal);
233
- elem.attr('tabindex', 0 - !boolVal);
234
- };
235
- } else {
236
- return function ngAriaRadioReaction(newVal) {
237
- elem.attr('aria-checked', (attr.value == ngModel.$viewValue));
238
- };
239
- }
240
- }
241
-
242
- function ngAriaCheckboxReaction(newVal) {
243
- elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));
244
- }
245
221
 
246
- switch (shape) {
247
- case 'radio':
248
- case 'checkbox':
249
- if (shouldAttachRole(shape, elem)) {
250
- elem.attr('role', shape);
251
- }
252
- if (shouldAttachAttr('aria-checked', 'ariaChecked', elem)) {
253
- scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?
254
- getRadioReaction() : ngAriaCheckboxReaction);
222
+ return {
223
+ pre: function(scope, elem, attr, ngModel) {
224
+ if (shape === 'checkbox' && attr.type !== 'checkbox') {
225
+ //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles
226
+ ngModel.$isEmpty = function(value) {
227
+ return value === false;
228
+ };
255
229
  }
256
- break;
257
- case 'range':
258
- if (shouldAttachRole(shape, elem)) {
259
- elem.attr('role', 'slider');
230
+ },
231
+ post: function(scope, elem, attr, ngModel) {
232
+ var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem);
233
+
234
+ function ngAriaWatchModelValue() {
235
+ return ngModel.$modelValue;
260
236
  }
261
- if ($aria.config('ariaValue')) {
262
- if (attr.min && !elem.attr('aria-valuemin')) {
263
- elem.attr('aria-valuemin', attr.min);
264
- }
265
- if (attr.max && !elem.attr('aria-valuemax')) {
266
- elem.attr('aria-valuemax', attr.max);
267
- }
268
- if (!elem.attr('aria-valuenow')) {
269
- scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {
270
- elem.attr('aria-valuenow', newVal);
271
- });
237
+
238
+ function getRadioReaction() {
239
+ if (needsTabIndex) {
240
+ needsTabIndex = false;
241
+ return function ngAriaRadioReaction(newVal) {
242
+ var boolVal = (attr.value == ngModel.$viewValue);
243
+ elem.attr('aria-checked', boolVal);
244
+ elem.attr('tabindex', 0 - !boolVal);
245
+ };
246
+ } else {
247
+ return function ngAriaRadioReaction(newVal) {
248
+ elem.attr('aria-checked', (attr.value == ngModel.$viewValue));
249
+ };
272
250
  }
273
251
  }
274
- break;
275
- case 'multiline':
276
- if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) {
277
- elem.attr('aria-multiline', true);
252
+
253
+ function ngAriaCheckboxReaction() {
254
+ elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));
278
255
  }
279
- break;
280
- }
281
256
 
282
- if (needsTabIndex) {
283
- elem.attr('tabindex', 0);
284
- }
257
+ switch (shape) {
258
+ case 'radio':
259
+ case 'checkbox':
260
+ if (shouldAttachRole(shape, elem)) {
261
+ elem.attr('role', shape);
262
+ }
263
+ if (shouldAttachAttr('aria-checked', 'ariaChecked', elem)) {
264
+ scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?
265
+ getRadioReaction() : ngAriaCheckboxReaction);
266
+ }
267
+ break;
268
+ case 'range':
269
+ if (shouldAttachRole(shape, elem)) {
270
+ elem.attr('role', 'slider');
271
+ }
272
+ if ($aria.config('ariaValue')) {
273
+ if (attr.min && !elem.attr('aria-valuemin')) {
274
+ elem.attr('aria-valuemin', attr.min);
275
+ }
276
+ if (attr.max && !elem.attr('aria-valuemax')) {
277
+ elem.attr('aria-valuemax', attr.max);
278
+ }
279
+ if (!elem.attr('aria-valuenow')) {
280
+ scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {
281
+ elem.attr('aria-valuenow', newVal);
282
+ });
283
+ }
284
+ }
285
+ break;
286
+ case 'multiline':
287
+ if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) {
288
+ elem.attr('aria-multiline', true);
289
+ }
290
+ break;
291
+ }
285
292
 
286
- if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) {
287
- scope.$watch(function ngAriaRequiredWatch() {
288
- return ngModel.$error.required;
289
- }, function ngAriaRequiredReaction(newVal) {
290
- elem.attr('aria-required', !!newVal);
291
- });
292
- }
293
+ if (needsTabIndex) {
294
+ elem.attr('tabindex', 0);
295
+ }
293
296
 
294
- if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem)) {
295
- scope.$watch(function ngAriaInvalidWatch() {
296
- return ngModel.$invalid;
297
- }, function ngAriaInvalidReaction(newVal) {
298
- elem.attr('aria-invalid', !!newVal);
299
- });
300
- }
297
+ if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) {
298
+ scope.$watch(function ngAriaRequiredWatch() {
299
+ return ngModel.$error.required;
300
+ }, function ngAriaRequiredReaction(newVal) {
301
+ elem.attr('aria-required', !!newVal);
302
+ });
303
+ }
304
+
305
+ if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem)) {
306
+ scope.$watch(function ngAriaInvalidWatch() {
307
+ return ngModel.$invalid;
308
+ }, function ngAriaInvalidReaction(newVal) {
309
+ elem.attr('aria-invalid', !!newVal);
310
+ });
311
+ }
312
+ }
313
+ };
301
314
  }
302
315
  };
303
316
  }])
@@ -339,7 +352,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
339
352
 
340
353
  if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) {
341
354
  elem.on('keypress', function(event) {
342
- if (event.keyCode === 32 || event.keyCode === 13) {
355
+ var keyCode = event.which || event.keyCode;
356
+ if (keyCode === 32 || keyCode === 13) {
343
357
  scope.$apply(callback);
344
358
  }
345
359
 
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @license AngularJS v1.3.15
3
- * (c) 2010-2014 Google, Inc. http://angularjs.org
2
+ * @license AngularJS v1.4.0
3
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
6
6
  (function(window, angular, undefined) {'use strict';
@@ -24,183 +24,297 @@
24
24
 
25
25
  angular.module('ngCookies', ['ng']).
26
26
  /**
27
- * @ngdoc service
28
- * @name $cookies
29
- *
27
+ * @ngdoc provider
28
+ * @name $cookiesProvider
30
29
  * @description
31
- * Provides read/write access to browser's cookies.
32
- *
33
- * Only a simple Object is exposed and by adding or removing properties to/from this object, new
34
- * cookies are created/deleted at the end of current $eval.
35
- * The object's properties can only be strings.
36
- *
37
- * Requires the {@link ngCookies `ngCookies`} module to be installed.
38
- *
39
- * @example
40
- *
41
- * ```js
42
- * angular.module('cookiesExample', ['ngCookies'])
43
- * .controller('ExampleController', ['$cookies', function($cookies) {
44
- * // Retrieving a cookie
45
- * var favoriteCookie = $cookies.myFavorite;
46
- * // Setting a cookie
47
- * $cookies.myFavorite = 'oatmeal';
48
- * }]);
49
- * ```
50
- */
51
- factory('$cookies', ['$rootScope', '$browser', function($rootScope, $browser) {
52
- var cookies = {},
53
- lastCookies = {},
54
- lastBrowserCookies,
55
- runEval = false,
56
- copy = angular.copy,
57
- isUndefined = angular.isUndefined;
58
-
59
- //creates a poller fn that copies all cookies from the $browser to service & inits the service
60
- $browser.addPollFn(function() {
61
- var currentCookies = $browser.cookies();
62
- if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
63
- lastBrowserCookies = currentCookies;
64
- copy(currentCookies, lastCookies);
65
- copy(currentCookies, cookies);
66
- if (runEval) $rootScope.$apply();
67
- }
68
- })();
69
-
70
- runEval = true;
71
-
72
- //at the end of each eval, push cookies
73
- //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
74
- // strings or browser refuses to store some cookies, we update the model in the push fn.
75
- $rootScope.$watch(push);
76
-
77
- return cookies;
78
-
79
-
80
- /**
81
- * Pushes all the cookies from the service to the browser and verifies if all cookies were
82
- * stored.
83
- */
84
- function push() {
85
- var name,
86
- value,
87
- browserCookies,
88
- updated;
89
-
90
- //delete any cookies deleted in $cookies
91
- for (name in lastCookies) {
92
- if (isUndefined(cookies[name])) {
93
- $browser.cookies(name, undefined);
94
- }
95
- }
96
-
97
- //update all cookies updated in $cookies
98
- for (name in cookies) {
99
- value = cookies[name];
100
- if (!angular.isString(value)) {
101
- value = '' + value;
102
- cookies[name] = value;
103
- }
104
- if (value !== lastCookies[name]) {
105
- $browser.cookies(name, value);
106
- updated = true;
107
- }
108
- }
109
-
110
- //verify what was actually stored
111
- if (updated) {
112
- updated = false;
113
- browserCookies = $browser.cookies();
114
-
115
- for (name in cookies) {
116
- if (cookies[name] !== browserCookies[name]) {
117
- //delete or reset all cookies that the browser dropped from $cookies
118
- if (isUndefined(browserCookies[name])) {
119
- delete cookies[name];
120
- } else {
121
- cookies[name] = browserCookies[name];
122
- }
123
- updated = true;
124
- }
125
- }
126
- }
127
- }
128
- }]).
129
-
30
+ * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
31
+ * */
32
+ provider('$cookies', [function $CookiesProvider() {
33
+ /**
34
+ * @ngdoc property
35
+ * @name $cookiesProvider#defaults
36
+ * @description
37
+ *
38
+ * Object containing default options to pass when setting cookies.
39
+ *
40
+ * The object may have following properties:
41
+ *
42
+ * - **path** - `{string}` - The cookie will be available only for this path and its
43
+ * sub-paths. By default, this would be the URL that appears in your base tag.
44
+ * - **domain** - `{string}` - The cookie will be available only for this domain and
45
+ * its sub-domains. For obvious security reasons the user agent will not accept the
46
+ * cookie if the current domain is not a sub domain or equals to the requested domain.
47
+ * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT"
48
+ * or a Date object indicating the exact date/time this cookie will expire.
49
+ * - **secure** - `{boolean}` - The cookie will be available only in secured connection.
50
+ *
51
+ * Note: by default the address that appears in your <base> tag will be used as path.
52
+ * This is import so that cookies will be visible for all routes in case html5mode is enabled
53
+ *
54
+ **/
55
+ var defaults = this.defaults = {};
130
56
 
131
- /**
132
- * @ngdoc service
133
- * @name $cookieStore
134
- * @requires $cookies
135
- *
136
- * @description
137
- * Provides a key-value (string-object) storage, that is backed by session cookies.
138
- * Objects put or retrieved from this storage are automatically serialized or
139
- * deserialized by angular's toJson/fromJson.
140
- *
141
- * Requires the {@link ngCookies `ngCookies`} module to be installed.
142
- *
143
- * @example
144
- *
145
- * ```js
146
- * angular.module('cookieStoreExample', ['ngCookies'])
147
- * .controller('ExampleController', ['$cookieStore', function($cookieStore) {
148
- * // Put cookie
149
- * $cookieStore.put('myFavorite','oatmeal');
150
- * // Get cookie
151
- * var favoriteCookie = $cookieStore.get('myFavorite');
152
- * // Removing a cookie
153
- * $cookieStore.remove('myFavorite');
154
- * }]);
155
- * ```
156
- */
157
- factory('$cookieStore', ['$cookies', function($cookies) {
57
+ function calcOptions(options) {
58
+ return options ? angular.extend({}, defaults, options) : defaults;
59
+ }
158
60
 
61
+ /**
62
+ * @ngdoc service
63
+ * @name $cookies
64
+ *
65
+ * @description
66
+ * Provides read/write access to browser's cookies.
67
+ *
68
+ * BREAKING CHANGE: `$cookies` no longer exposes properties that represent the
69
+ * current browser cookie values. Now you must use the get/put/remove/etc. methods
70
+ * as described below.
71
+ *
72
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
73
+ *
74
+ * @example
75
+ *
76
+ * ```js
77
+ * angular.module('cookiesExample', ['ngCookies'])
78
+ * .controller('ExampleController', ['$cookies', function($cookies) {
79
+ * // Retrieving a cookie
80
+ * var favoriteCookie = $cookies.get('myFavorite');
81
+ * // Setting a cookie
82
+ * $cookies.put('myFavorite', 'oatmeal');
83
+ * }]);
84
+ * ```
85
+ */
86
+ this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {
159
87
  return {
160
88
  /**
161
89
  * @ngdoc method
162
- * @name $cookieStore#get
90
+ * @name $cookies#get
163
91
  *
164
92
  * @description
165
93
  * Returns the value of given cookie key
166
94
  *
167
95
  * @param {string} key Id to use for lookup.
168
- * @returns {Object} Deserialized cookie value.
96
+ * @returns {string} Raw cookie value.
169
97
  */
170
98
  get: function(key) {
171
- var value = $cookies[key];
99
+ return $$cookieReader()[key];
100
+ },
101
+
102
+ /**
103
+ * @ngdoc method
104
+ * @name $cookies#getObject
105
+ *
106
+ * @description
107
+ * Returns the deserialized value of given cookie key
108
+ *
109
+ * @param {string} key Id to use for lookup.
110
+ * @returns {Object} Deserialized cookie value.
111
+ */
112
+ getObject: function(key) {
113
+ var value = this.get(key);
172
114
  return value ? angular.fromJson(value) : value;
173
115
  },
174
116
 
175
117
  /**
176
118
  * @ngdoc method
177
- * @name $cookieStore#put
119
+ * @name $cookies#getAll
120
+ *
121
+ * @description
122
+ * Returns a key value object with all the cookies
123
+ *
124
+ * @returns {Object} All cookies
125
+ */
126
+ getAll: function() {
127
+ return $$cookieReader();
128
+ },
129
+
130
+ /**
131
+ * @ngdoc method
132
+ * @name $cookies#put
178
133
  *
179
134
  * @description
180
135
  * Sets a value for given cookie key
181
136
  *
182
137
  * @param {string} key Id for the `value`.
138
+ * @param {string} value Raw value to be stored.
139
+ * @param {Object=} options Options object.
140
+ * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
141
+ */
142
+ put: function(key, value, options) {
143
+ $$cookieWriter(key, value, calcOptions(options));
144
+ },
145
+
146
+ /**
147
+ * @ngdoc method
148
+ * @name $cookies#putObject
149
+ *
150
+ * @description
151
+ * Serializes and sets a value for given cookie key
152
+ *
153
+ * @param {string} key Id for the `value`.
183
154
  * @param {Object} value Value to be stored.
155
+ * @param {Object=} options Options object.
156
+ * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
184
157
  */
185
- put: function(key, value) {
186
- $cookies[key] = angular.toJson(value);
158
+ putObject: function(key, value, options) {
159
+ this.put(key, angular.toJson(value), options);
187
160
  },
188
161
 
189
162
  /**
190
163
  * @ngdoc method
191
- * @name $cookieStore#remove
164
+ * @name $cookies#remove
192
165
  *
193
166
  * @description
194
167
  * Remove given cookie
195
168
  *
196
169
  * @param {string} key Id of the key-value pair to delete.
170
+ * @param {Object=} options Options object.
171
+ * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
197
172
  */
198
- remove: function(key) {
199
- delete $cookies[key];
173
+ remove: function(key, options) {
174
+ $$cookieWriter(key, undefined, calcOptions(options));
200
175
  }
201
176
  };
177
+ }];
178
+ }]);
179
+
180
+ angular.module('ngCookies').
181
+ /**
182
+ * @ngdoc service
183
+ * @name $cookieStore
184
+ * @deprecated
185
+ * @requires $cookies
186
+ *
187
+ * @description
188
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
189
+ * Objects put or retrieved from this storage are automatically serialized or
190
+ * deserialized by angular's toJson/fromJson.
191
+ *
192
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
193
+ *
194
+ * <div class="alert alert-danger">
195
+ * **Note:** The $cookieStore service is deprecated.
196
+ * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
197
+ * </div>
198
+ *
199
+ * @example
200
+ *
201
+ * ```js
202
+ * angular.module('cookieStoreExample', ['ngCookies'])
203
+ * .controller('ExampleController', ['$cookieStore', function($cookieStore) {
204
+ * // Put cookie
205
+ * $cookieStore.put('myFavorite','oatmeal');
206
+ * // Get cookie
207
+ * var favoriteCookie = $cookieStore.get('myFavorite');
208
+ * // Removing a cookie
209
+ * $cookieStore.remove('myFavorite');
210
+ * }]);
211
+ * ```
212
+ */
213
+ factory('$cookieStore', ['$cookies', function($cookies) {
214
+
215
+ return {
216
+ /**
217
+ * @ngdoc method
218
+ * @name $cookieStore#get
219
+ *
220
+ * @description
221
+ * Returns the value of given cookie key
222
+ *
223
+ * @param {string} key Id to use for lookup.
224
+ * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
225
+ */
226
+ get: function(key) {
227
+ return $cookies.getObject(key);
228
+ },
229
+
230
+ /**
231
+ * @ngdoc method
232
+ * @name $cookieStore#put
233
+ *
234
+ * @description
235
+ * Sets a value for given cookie key
236
+ *
237
+ * @param {string} key Id for the `value`.
238
+ * @param {Object} value Value to be stored.
239
+ */
240
+ put: function(key, value) {
241
+ $cookies.putObject(key, value);
242
+ },
243
+
244
+ /**
245
+ * @ngdoc method
246
+ * @name $cookieStore#remove
247
+ *
248
+ * @description
249
+ * Remove given cookie
250
+ *
251
+ * @param {string} key Id of the key-value pair to delete.
252
+ */
253
+ remove: function(key) {
254
+ $cookies.remove(key);
255
+ }
256
+ };
257
+
258
+ }]);
259
+
260
+ /**
261
+ * @name $$cookieWriter
262
+ * @requires $document
263
+ *
264
+ * @description
265
+ * This is a private service for writing cookies
266
+ *
267
+ * @param {string} name Cookie name
268
+ * @param {string=} value Cookie value (if undefined, cookie will be deleted)
269
+ * @param {Object=} options Object with options that need to be stored for the cookie.
270
+ */
271
+ function $$CookieWriter($document, $log, $browser) {
272
+ var cookiePath = $browser.baseHref();
273
+ var rawDocument = $document[0];
274
+
275
+ function buildCookieString(name, value, options) {
276
+ var path, expires;
277
+ options = options || {};
278
+ expires = options.expires;
279
+ path = angular.isDefined(options.path) ? options.path : cookiePath;
280
+ if (value === undefined) {
281
+ expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
282
+ value = '';
283
+ }
284
+ if (angular.isString(expires)) {
285
+ expires = new Date(expires);
286
+ }
287
+
288
+ var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
289
+ str += path ? ';path=' + path : '';
290
+ str += options.domain ? ';domain=' + options.domain : '';
291
+ str += expires ? ';expires=' + expires.toUTCString() : '';
292
+ str += options.secure ? ';secure' : '';
293
+
294
+ // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
295
+ // - 300 cookies
296
+ // - 20 cookies per unique domain
297
+ // - 4096 bytes per cookie
298
+ var cookieLength = str.length + 1;
299
+ if (cookieLength > 4096) {
300
+ $log.warn("Cookie '" + name +
301
+ "' possibly not set or overflowed because it was too large (" +
302
+ cookieLength + " > 4096 bytes)!");
303
+ }
304
+
305
+ return str;
306
+ }
307
+
308
+ return function(name, value, options) {
309
+ rawDocument.cookie = buildCookieString(name, value, options);
310
+ };
311
+ }
312
+
313
+ $$CookieWriter.$inject = ['$document', '$log', '$browser'];
202
314
 
203
- }]);
315
+ angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
316
+ this.$get = $$CookieWriter;
317
+ });
204
318
 
205
319
 
206
320
  })(window, window.angular);