angularjs-rails 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/angularjs-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/angular-animate.js +2 -2
  4. data/vendor/assets/javascripts/angular-aria.js +83 -23
  5. data/vendor/assets/javascripts/angular-cookies.js +1 -1
  6. data/vendor/assets/javascripts/angular-loader.js +6 -23
  7. data/vendor/assets/javascripts/angular-messages.js +1 -1
  8. data/vendor/assets/javascripts/angular-mocks.js +21 -17
  9. data/vendor/assets/javascripts/angular-resource.js +1 -1
  10. data/vendor/assets/javascripts/angular-route.js +19 -5
  11. data/vendor/assets/javascripts/angular-sanitize.js +20 -20
  12. data/vendor/assets/javascripts/angular-scenario.js +298 -269
  13. data/vendor/assets/javascripts/angular-touch.js +3 -3
  14. data/vendor/assets/javascripts/angular.js +292 -263
  15. data/vendor/assets/javascripts/unstable/angular-animate.js +2 -2
  16. data/vendor/assets/javascripts/unstable/angular-aria.js +83 -23
  17. data/vendor/assets/javascripts/unstable/angular-cookies.js +1 -1
  18. data/vendor/assets/javascripts/unstable/angular-loader.js +6 -23
  19. data/vendor/assets/javascripts/unstable/angular-messages.js +1 -1
  20. data/vendor/assets/javascripts/unstable/angular-mocks.js +21 -17
  21. data/vendor/assets/javascripts/unstable/angular-resource.js +1 -1
  22. data/vendor/assets/javascripts/unstable/angular-route.js +19 -5
  23. data/vendor/assets/javascripts/unstable/angular-sanitize.js +20 -20
  24. data/vendor/assets/javascripts/unstable/angular-scenario.js +298 -269
  25. data/vendor/assets/javascripts/unstable/angular-touch.js +3 -3
  26. data/vendor/assets/javascripts/unstable/angular.js +292 -263
  27. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cdd4814fca14a51577c70a75585ecf932d4e3bd
4
- data.tar.gz: ca162793dcaf6e3971fa848b7e08f688c339eb86
3
+ metadata.gz: 692800e1f539e50a1abdf5c8e9f185fcfd2a27e9
4
+ data.tar.gz: 143518fca83eb56c30f56338a3063ae2c17a8e84
5
5
  SHA512:
6
- metadata.gz: 0c6ae85cb9848e791308d7205fd8455d71fc98543f8a92239a1e2074960a7239d92c443f310e8c86c7dd69a25b6c7f478ae9bde59fda978d0355c994b1341af2
7
- data.tar.gz: 6249d5d214a0473195336667cc6d1ec7781019c8c47fda5c34dea8f108c00db69d9507de8be8551971662b3dfc22c8e29f73cda227068dd6e381dc3f7e4c0392
6
+ metadata.gz: 7dd28987a3e83aa9d49189a75581e47bf38a204576a300ae2c2849d21174f9875c956b126a074572655635c1d5f6f96211fd51d1aaefebd42f3afa43c86753cc
7
+ data.tar.gz: e33e1c60ae11ffd8f881e352b8d180a32201426929eccc36308dcb2c62bc7b7cbd98fb6eb30c6f2773e60f7469c54e5d3331be1ed397ef291ed1f0286792271d
@@ -1,6 +1,6 @@
1
1
  module AngularJS
2
2
  module Rails
3
- VERSION = "1.3.2"
4
- UNSTABLE_VERSION = "1.3.2"
3
+ VERSION = "1.3.3"
4
+ UNSTABLE_VERSION = "1.3.3"
5
5
  end
6
6
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1889,7 +1889,7 @@ angular.module('ngAnimate', ['ng'])
1889
1889
  //the jqLite object, so we're safe to use a single variable to house
1890
1890
  //the styles since there is always only one element being animated
1891
1891
  var oldStyle = node.getAttribute('style') || '';
1892
- if (oldStyle.charAt(oldStyle.length-1) !== ';') {
1892
+ if (oldStyle.charAt(oldStyle.length - 1) !== ';') {
1893
1893
  oldStyle += ';';
1894
1894
  }
1895
1895
  node.setAttribute('style', oldStyle + ' ' + style);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -10,33 +10,49 @@
10
10
  * @name ngAria
11
11
  * @description
12
12
  *
13
- * The `ngAria` module provides support for adding <abbr title="Accessible Rich Internet Applications">ARIA</abbr>
14
- * attributes that convey state or semantic information about the application in order to allow assistive technologies
15
- * to convey appropriate information to persons with disabilities.
13
+ * The `ngAria` module provides support for common
14
+ * [<abbr title="Accessible Rich Internet Applications">ARIA</abbr>](http://www.w3.org/TR/wai-aria/)
15
+ * attributes that convey state or semantic information about the application for users
16
+ * of assistive technologies, such as screen readers.
16
17
  *
17
18
  * <div doc-module-components="ngAria"></div>
18
19
  *
19
- * # Usage
20
- * To enable the addition of the ARIA tags, just require the module into your application and the tags will
21
- * hook into your ng-show/ng-hide, input, textarea, button, select and ng-required directives and adds the
22
- * appropriate ARIA attributes.
20
+ * ## Usage
23
21
  *
24
- * Currently, the following ARIA attributes are implemented:
22
+ * For ngAria to do its magic, simply include the module as a dependency. The directives supported
23
+ * by ngAria are:
24
+ * `ngModel`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`, `ngDblClick`, and `ngMessages`.
25
25
  *
26
- * + aria-hidden
27
- * + aria-checked
28
- * + aria-disabled
29
- * + aria-required
30
- * + aria-invalid
31
- * + aria-multiline
32
- * + aria-valuenow
33
- * + aria-valuemin
34
- * + aria-valuemax
35
- * + tabindex
26
+ * Below is a more detailed breakdown of the attributes handled by ngAria:
36
27
  *
37
- * You can disable individual ARIA attributes by using the {@link ngAria.$ariaProvider#config config} method.
28
+ * | Directive | Supported Attributes |
29
+ * |---------------------------------------------|----------------------------------------------------------------------------------------|
30
+ * | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required |
31
+ * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
32
+ * | {@link ng.directive:ngShow ngShow} | aria-hidden |
33
+ * | {@link ng.directive:ngHide ngHide} | aria-hidden |
34
+ * | {@link ng.directive:ngClick ngClick} | tabindex |
35
+ * | {@link ng.directive:ngDblclick ngDblclick} | tabindex |
36
+ * | {@link module:ngMessages ngMessages} | aria-live |
37
+ *
38
+ * Find out more information about each directive by reading the
39
+ * {@link guide/accessibility ngAria Developer Guide}.
40
+ *
41
+ * ##Example
42
+ * Using ngDisabled with ngAria:
43
+ * ```html
44
+ * <md-checkbox ng-disabled="disabled">
45
+ * ```
46
+ * Becomes:
47
+ * ```html
48
+ * <md-checkbox ng-disabled="disabled" aria-disabled="true">
49
+ * ```
50
+ *
51
+ * ##Disabling Attributes
52
+ * It's possible to disable individual attributes added by ngAria with the
53
+ * {@link ngAria.$ariaProvider#config config} method. For more details, see the
54
+ * {@link guide/accessibility Developer Guide}.
38
55
  */
39
-
40
56
  /* global -ngAriaModule */
41
57
  var ngAriaModule = angular.module('ngAria', ['ng']).
42
58
  provider('$aria', $AriaProvider);
@@ -47,10 +63,20 @@ var ngAriaModule = angular.module('ngAria', ['ng']).
47
63
  *
48
64
  * @description
49
65
  *
50
- * Used for configuring ARIA attributes.
66
+ * Used for configuring the ARIA attributes injected and managed by ngAria.
67
+ *
68
+ * ```js
69
+ * angular.module('myApp', ['ngAria'], function config($ariaProvider) {
70
+ * $ariaProvider.config({
71
+ * ariaValue: true,
72
+ * tabindex: false
73
+ * });
74
+ * });
75
+ *```
51
76
  *
52
77
  * ## Dependencies
53
78
  * Requires the {@link ngAria} module to be installed.
79
+ *
54
80
  */
55
81
  function $AriaProvider() {
56
82
  var config = {
@@ -113,7 +139,41 @@ function $AriaProvider() {
113
139
  *
114
140
  * @description
115
141
  *
116
- * Contains helper methods for applying ARIA attributes to HTML
142
+ * The $aria service contains helper methods for applying common
143
+ * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.
144
+ *
145
+ * ngAria injects common accessibility attributes that tell assistive technologies when HTML
146
+ * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria,
147
+ * let's review a code snippet from ngAria itself:
148
+ *
149
+ *```js
150
+ * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) {
151
+ * return $aria.$$watchExpr('ngDisabled', 'aria-disabled');
152
+ * }])
153
+ *```
154
+ * Shown above, the ngAria module creates a directive with the same signature as the
155
+ * traditional `ng-disabled` directive. But this ngAria version is dedicated to
156
+ * solely managing accessibility attributes. The internal `$aria` service is used to watch the
157
+ * boolean attribute `ngDisabled`. If it has not been explicitly set by the developer,
158
+ * `aria-disabled` is injected as an attribute with its value synchronized to the value in
159
+ * `ngDisabled`.
160
+ *
161
+ * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do
162
+ * anything to enable this feature. The `aria-disabled` attribute is automatically managed
163
+ * simply as a silent side-effect of using `ng-disabled` with the ngAria module.
164
+ *
165
+ * The full list of directives that interface with ngAria:
166
+ * * **ngModel**
167
+ * * **ngShow**
168
+ * * **ngHide**
169
+ * * **ngClick**
170
+ * * **ngDblclick**
171
+ * * **ngMessages**
172
+ * * **ngDisabled**
173
+ *
174
+ * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each
175
+ * directive.
176
+ *
117
177
  *
118
178
  * ## Dependencies
119
179
  * Requires the {@link ngAria} module to be installed.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -43,40 +43,23 @@ function minErr(module, ErrorConstructor) {
43
43
  prefix = '[' + (module ? module + ':' : '') + code + '] ',
44
44
  template = arguments[1],
45
45
  templateArgs = arguments,
46
- stringify = function(obj) {
47
- if (typeof obj === 'function') {
48
- return obj.toString().replace(/ \{[\s\S]*$/, '');
49
- } else if (typeof obj === 'undefined') {
50
- return 'undefined';
51
- } else if (typeof obj !== 'string') {
52
- return JSON.stringify(obj);
53
- }
54
- return obj;
55
- },
46
+
56
47
  message, i;
57
48
 
58
49
  message = prefix + template.replace(/\{\d+\}/g, function(match) {
59
50
  var index = +match.slice(1, -1), arg;
60
51
 
61
52
  if (index + 2 < templateArgs.length) {
62
- arg = templateArgs[index + 2];
63
- if (typeof arg === 'function') {
64
- return arg.toString().replace(/ ?\{[\s\S]*$/, '');
65
- } else if (typeof arg === 'undefined') {
66
- return 'undefined';
67
- } else if (typeof arg !== 'string') {
68
- return toJson(arg);
69
- }
70
- return arg;
53
+ return toDebugString(templateArgs[index + 2]);
71
54
  }
72
55
  return match;
73
56
  });
74
57
 
75
- message = message + '\nhttp://errors.angularjs.org/1.3.2/' +
58
+ message = message + '\nhttp://errors.angularjs.org/1.3.3/' +
76
59
  (module ? module + '/' : '') + code;
77
60
  for (i = 2; i < arguments.length; i++) {
78
- message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
79
- encodeURIComponent(stringify(arguments[i]));
61
+ message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
62
+ encodeURIComponent(toDebugString(arguments[i]));
80
63
  }
81
64
  return new ErrorConstructor(message);
82
65
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -117,7 +117,7 @@ angular.mock.$Browser = function() {
117
117
  self.defer.now += delay;
118
118
  } else {
119
119
  if (self.deferredFns.length) {
120
- self.defer.now = self.deferredFns[self.deferredFns.length-1].time;
120
+ self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;
121
121
  } else {
122
122
  throw new Error('No deferred tasks to be flushed');
123
123
  }
@@ -428,7 +428,7 @@ angular.mock.$LogProvider = function() {
428
428
  });
429
429
  });
430
430
  if (errors.length) {
431
- errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+
431
+ errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " +
432
432
  "an expected log message was not checked and removed:");
433
433
  errors.push('');
434
434
  throw new Error(errors.join('\n---------\n'));
@@ -461,17 +461,17 @@ angular.mock.$LogProvider = function() {
461
461
  * @returns {promise} A promise which will be notified on each iteration.
462
462
  */
463
463
  angular.mock.$IntervalProvider = function() {
464
- this.$get = ['$rootScope', '$q',
465
- function($rootScope, $q) {
464
+ this.$get = ['$browser', '$rootScope', '$q', '$$q',
465
+ function($browser, $rootScope, $q, $$q) {
466
466
  var repeatFns = [],
467
467
  nextRepeatId = 0,
468
468
  now = 0;
469
469
 
470
470
  var $interval = function(fn, delay, count, invokeApply) {
471
- var deferred = $q.defer(),
472
- promise = deferred.promise,
473
- iteration = 0,
474
- skipApply = (angular.isDefined(invokeApply) && !invokeApply);
471
+ var iteration = 0,
472
+ skipApply = (angular.isDefined(invokeApply) && !invokeApply),
473
+ deferred = (skipApply ? $$q : $q).defer(),
474
+ promise = deferred.promise;
475
475
 
476
476
  count = (angular.isDefined(count)) ? count : 0;
477
477
  promise.then(null, null, fn);
@@ -494,7 +494,11 @@ angular.mock.$IntervalProvider = function() {
494
494
  }
495
495
  }
496
496
 
497
- if (!skipApply) $rootScope.$apply();
497
+ if (skipApply) {
498
+ $browser.defer.flush();
499
+ } else {
500
+ $rootScope.$apply();
501
+ }
498
502
  }
499
503
 
500
504
  repeatFns.push({
@@ -581,10 +585,10 @@ function jsonStringToDate(string) {
581
585
  tzMin = int(match[9] + match[11]);
582
586
  }
583
587
  date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));
584
- date.setUTCHours(int(match[4]||0) - tzHour,
585
- int(match[5]||0) - tzMin,
586
- int(match[6]||0),
587
- int(match[7]||0));
588
+ date.setUTCHours(int(match[4] || 0) - tzHour,
589
+ int(match[5] || 0) - tzMin,
590
+ int(match[6] || 0),
591
+ int(match[7] || 0));
588
592
  return date;
589
593
  }
590
594
  return string;
@@ -663,7 +667,7 @@ angular.mock.TzDate = function(offset, timestamp) {
663
667
  }
664
668
 
665
669
  var localOffset = new Date(timestamp).getTimezoneOffset();
666
- self.offsetDiff = localOffset*60*1000 - offset*1000*60*60;
670
+ self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;
667
671
  self.date = new Date(timestamp + self.offsetDiff);
668
672
 
669
673
  self.getTime = function() {
@@ -815,7 +819,7 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
815
819
  animate.queue.push({
816
820
  event: method,
817
821
  element: arguments[0],
818
- options: arguments[arguments.length-1],
822
+ options: arguments[arguments.length - 1],
819
823
  args: arguments
820
824
  });
821
825
  return $delegate[method].apply($delegate, arguments);
@@ -1770,7 +1774,7 @@ angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
1770
1774
  }
1771
1775
 
1772
1776
  var length = queue.length;
1773
- for (var i=0;i<length;i++) {
1777
+ for (var i = 0; i < length; i++) {
1774
1778
  queue[i]();
1775
1779
  }
1776
1780
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -151,6 +151,9 @@ function $RouteProvider() {
151
151
  if (angular.isUndefined(routeCopy.reloadOnSearch)) {
152
152
  routeCopy.reloadOnSearch = true;
153
153
  }
154
+ if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
155
+ routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
156
+ }
154
157
  routes[path] = angular.extend(
155
158
  routeCopy,
156
159
  path && pathRegExp(path, routeCopy)
@@ -158,9 +161,9 @@ function $RouteProvider() {
158
161
 
159
162
  // create redirection for trailing slashes
160
163
  if (path) {
161
- var redirectPath = (path[path.length-1] == '/')
162
- ? path.substr(0, path.length-1)
163
- : path +'/';
164
+ var redirectPath = (path[path.length - 1] == '/')
165
+ ? path.substr(0, path.length - 1)
166
+ : path + '/';
164
167
 
165
168
  routes[redirectPath] = angular.extend(
166
169
  {redirectTo: path},
@@ -171,6 +174,17 @@ function $RouteProvider() {
171
174
  return this;
172
175
  };
173
176
 
177
+ /**
178
+ * @ngdoc property
179
+ * @name $routeProvider#caseInsensitiveMatch
180
+ * @description
181
+ *
182
+ * A boolean property indicating if routes defined
183
+ * using this provider should be matched using a case sensitive
184
+ * algorithm. Defaults to `false`.
185
+ */
186
+ this.caseInsensitiveMatch = false;
187
+
174
188
  /**
175
189
  * @param path {string} path
176
190
  * @param opts {Object} options
@@ -639,7 +653,7 @@ function $RouteProvider() {
639
653
  */
640
654
  function interpolate(string, params) {
641
655
  var result = [];
642
- angular.forEach((string||'').split(':'), function(segment, i) {
656
+ angular.forEach((string || '').split(':'), function(segment, i) {
643
657
  if (i === 0) {
644
658
  result.push(segment);
645
659
  } else {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.2
2
+ * @license AngularJS v1.3.3
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -218,29 +218,29 @@ var validElements = angular.extend({},
218
218
  //Attributes that have href and hence need to be sanitized
219
219
  var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
220
220
 
221
- var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+
222
- 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+
223
- 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+
224
- 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+
221
+ var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
222
+ 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
223
+ 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
224
+ 'scope,scrolling,shape,size,span,start,summary,target,title,type,' +
225
225
  'valign,value,vspace,width');
226
226
 
227
227
  // SVG attributes (without "id" and "name" attributes)
228
228
  // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
229
- var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,'+
230
- 'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,'+
231
- 'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,'+
232
- 'font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,'+
233
- 'gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,'+
234
- 'keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,'+
235
- 'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,'+
236
- 'overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,'+
237
- 'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,'+
238
- 'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,'+
239
- 'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,'+
240
- 'stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,'+
241
- 'underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,'+
242
- 'viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,'+
243
- 'xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,'+
229
+ var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
230
+ 'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,' +
231
+ 'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,' +
232
+ 'font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,' +
233
+ 'gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,' +
234
+ 'keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,' +
235
+ 'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,' +
236
+ 'overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,' +
237
+ 'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,' +
238
+ 'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,' +
239
+ 'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,' +
240
+ 'stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,' +
241
+ 'underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,' +
242
+ 'viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,' +
243
+ 'xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,' +
244
244
  'zoomAndPan');
245
245
 
246
246
  var validAttrs = angular.extend({},