angular-on-rails 1.0.5 → 1.1.3u

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/lib/angularjs/version.rb +1 -1
  2. data/vendor/assets/javascripts/angular-bootstrap-prettify.js +1 -1
  3. data/vendor/assets/javascripts/angular-bootstrap.js +1 -1
  4. data/vendor/assets/javascripts/angular-cookies.js +1 -1
  5. data/vendor/assets/javascripts/angular-loader.js +1 -1
  6. data/vendor/assets/javascripts/angular-mocks.js +68 -37
  7. data/vendor/assets/javascripts/angular-resource.js +99 -37
  8. data/vendor/assets/javascripts/angular-sanitize.js +25 -4
  9. data/vendor/assets/javascripts/angular-scenario.js +4204 -3710
  10. data/vendor/assets/javascripts/angular.js +603 -172
  11. data/vendor/assets/javascripts/i18n/angular-locale_am-et.js +4 -0
  12. data/vendor/assets/javascripts/i18n/angular-locale_am.js +4 -0
  13. data/vendor/assets/javascripts/i18n/angular-locale_ar-eg.js +4 -0
  14. data/vendor/assets/javascripts/i18n/angular-locale_ar.js +4 -0
  15. data/vendor/assets/javascripts/i18n/angular-locale_bg-bg.js +4 -0
  16. data/vendor/assets/javascripts/i18n/angular-locale_bg.js +4 -0
  17. data/vendor/assets/javascripts/i18n/angular-locale_bn-bd.js +4 -0
  18. data/vendor/assets/javascripts/i18n/angular-locale_bn.js +4 -0
  19. data/vendor/assets/javascripts/i18n/angular-locale_ca-es.js +4 -0
  20. data/vendor/assets/javascripts/i18n/angular-locale_ca.js +4 -0
  21. data/vendor/assets/javascripts/i18n/angular-locale_cs-cz.js +4 -0
  22. data/vendor/assets/javascripts/i18n/angular-locale_cs.js +4 -0
  23. data/vendor/assets/javascripts/i18n/angular-locale_da-dk.js +4 -0
  24. data/vendor/assets/javascripts/i18n/angular-locale_da.js +4 -0
  25. data/vendor/assets/javascripts/i18n/angular-locale_de-at.js +4 -0
  26. data/vendor/assets/javascripts/i18n/angular-locale_de-be.js +4 -0
  27. data/vendor/assets/javascripts/i18n/angular-locale_de-ch.js +4 -0
  28. data/vendor/assets/javascripts/i18n/angular-locale_de-de.js +4 -0
  29. data/vendor/assets/javascripts/i18n/angular-locale_de-lu.js +4 -0
  30. data/vendor/assets/javascripts/i18n/angular-locale_de.js +4 -0
  31. data/vendor/assets/javascripts/i18n/angular-locale_el-gr.js +4 -0
  32. data/vendor/assets/javascripts/i18n/angular-locale_el-polyton.js +4 -0
  33. data/vendor/assets/javascripts/i18n/angular-locale_el.js +4 -0
  34. data/vendor/assets/javascripts/i18n/angular-locale_en-as.js +4 -0
  35. data/vendor/assets/javascripts/i18n/angular-locale_en-au.js +4 -0
  36. data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt-us.js +4 -0
  37. data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt.js +4 -0
  38. data/vendor/assets/javascripts/i18n/angular-locale_en-gb.js +4 -0
  39. data/vendor/assets/javascripts/i18n/angular-locale_en-gu.js +4 -0
  40. data/vendor/assets/javascripts/i18n/angular-locale_en-ie.js +4 -0
  41. data/vendor/assets/javascripts/i18n/angular-locale_en-in.js +4 -0
  42. data/vendor/assets/javascripts/i18n/angular-locale_en-iso.js +4 -0
  43. data/vendor/assets/javascripts/i18n/angular-locale_en-mh.js +4 -0
  44. data/vendor/assets/javascripts/i18n/angular-locale_en-mp.js +4 -0
  45. data/vendor/assets/javascripts/i18n/angular-locale_en-sg.js +4 -0
  46. data/vendor/assets/javascripts/i18n/angular-locale_en-um.js +4 -0
  47. data/vendor/assets/javascripts/i18n/angular-locale_en-us.js +4 -0
  48. data/vendor/assets/javascripts/i18n/angular-locale_en-vi.js +4 -0
  49. data/vendor/assets/javascripts/i18n/angular-locale_en-za.js +4 -0
  50. data/vendor/assets/javascripts/i18n/angular-locale_en-zz.js +4 -0
  51. data/vendor/assets/javascripts/i18n/angular-locale_en.js +4 -0
  52. data/vendor/assets/javascripts/i18n/angular-locale_es-es.js +4 -0
  53. data/vendor/assets/javascripts/i18n/angular-locale_es.js +4 -0
  54. data/vendor/assets/javascripts/i18n/angular-locale_et-ee.js +4 -0
  55. data/vendor/assets/javascripts/i18n/angular-locale_et.js +4 -0
  56. data/vendor/assets/javascripts/i18n/angular-locale_eu-es.js +4 -0
  57. data/vendor/assets/javascripts/i18n/angular-locale_eu.js +4 -0
  58. data/vendor/assets/javascripts/i18n/angular-locale_fa-ir.js +4 -0
  59. data/vendor/assets/javascripts/i18n/angular-locale_fa.js +4 -0
  60. data/vendor/assets/javascripts/i18n/angular-locale_fi-fi.js +4 -0
  61. data/vendor/assets/javascripts/i18n/angular-locale_fi.js +4 -0
  62. data/vendor/assets/javascripts/i18n/angular-locale_fil-ph.js +4 -0
  63. data/vendor/assets/javascripts/i18n/angular-locale_fil.js +4 -0
  64. data/vendor/assets/javascripts/i18n/angular-locale_fr-bl.js +4 -0
  65. data/vendor/assets/javascripts/i18n/angular-locale_fr-ca.js +4 -0
  66. data/vendor/assets/javascripts/i18n/angular-locale_fr-fr.js +4 -0
  67. data/vendor/assets/javascripts/i18n/angular-locale_fr-gp.js +4 -0
  68. data/vendor/assets/javascripts/i18n/angular-locale_fr-mc.js +4 -0
  69. data/vendor/assets/javascripts/i18n/angular-locale_fr-mf.js +4 -0
  70. data/vendor/assets/javascripts/i18n/angular-locale_fr-mq.js +4 -0
  71. data/vendor/assets/javascripts/i18n/angular-locale_fr-re.js +4 -0
  72. data/vendor/assets/javascripts/i18n/angular-locale_fr.js +4 -0
  73. data/vendor/assets/javascripts/i18n/angular-locale_gl-es.js +4 -0
  74. data/vendor/assets/javascripts/i18n/angular-locale_gl.js +4 -0
  75. data/vendor/assets/javascripts/i18n/angular-locale_gsw-ch.js +4 -0
  76. data/vendor/assets/javascripts/i18n/angular-locale_gsw.js +4 -0
  77. data/vendor/assets/javascripts/i18n/angular-locale_gu-in.js +4 -0
  78. data/vendor/assets/javascripts/i18n/angular-locale_gu.js +4 -0
  79. data/vendor/assets/javascripts/i18n/angular-locale_he-il.js +4 -0
  80. data/vendor/assets/javascripts/i18n/angular-locale_he.js +4 -0
  81. data/vendor/assets/javascripts/i18n/angular-locale_hi-in.js +4 -0
  82. data/vendor/assets/javascripts/i18n/angular-locale_hi.js +4 -0
  83. data/vendor/assets/javascripts/i18n/angular-locale_hr-hr.js +4 -0
  84. data/vendor/assets/javascripts/i18n/angular-locale_hr.js +4 -0
  85. data/vendor/assets/javascripts/i18n/angular-locale_hu-hu.js +4 -0
  86. data/vendor/assets/javascripts/i18n/angular-locale_hu.js +4 -0
  87. data/vendor/assets/javascripts/i18n/angular-locale_id-id.js +4 -0
  88. data/vendor/assets/javascripts/i18n/angular-locale_id.js +4 -0
  89. data/vendor/assets/javascripts/i18n/angular-locale_in.js +4 -0
  90. data/vendor/assets/javascripts/i18n/angular-locale_is-is.js +4 -0
  91. data/vendor/assets/javascripts/i18n/angular-locale_is.js +4 -0
  92. data/vendor/assets/javascripts/i18n/angular-locale_it-it.js +4 -0
  93. data/vendor/assets/javascripts/i18n/angular-locale_it.js +4 -0
  94. data/vendor/assets/javascripts/i18n/angular-locale_iw.js +4 -0
  95. data/vendor/assets/javascripts/i18n/angular-locale_ja-jp.js +4 -0
  96. data/vendor/assets/javascripts/i18n/angular-locale_ja.js +4 -0
  97. data/vendor/assets/javascripts/i18n/angular-locale_kn-in.js +4 -0
  98. data/vendor/assets/javascripts/i18n/angular-locale_kn.js +4 -0
  99. data/vendor/assets/javascripts/i18n/angular-locale_ko-kr.js +4 -0
  100. data/vendor/assets/javascripts/i18n/angular-locale_ko.js +4 -0
  101. data/vendor/assets/javascripts/i18n/angular-locale_ln-cd.js +4 -0
  102. data/vendor/assets/javascripts/i18n/angular-locale_ln.js +4 -0
  103. data/vendor/assets/javascripts/i18n/angular-locale_lt-lt.js +4 -0
  104. data/vendor/assets/javascripts/i18n/angular-locale_lt.js +4 -0
  105. data/vendor/assets/javascripts/i18n/angular-locale_lv-lv.js +4 -0
  106. data/vendor/assets/javascripts/i18n/angular-locale_lv.js +4 -0
  107. data/vendor/assets/javascripts/i18n/angular-locale_ml-in.js +4 -0
  108. data/vendor/assets/javascripts/i18n/angular-locale_ml.js +4 -0
  109. data/vendor/assets/javascripts/i18n/angular-locale_mo.js +4 -0
  110. data/vendor/assets/javascripts/i18n/angular-locale_mr-in.js +4 -0
  111. data/vendor/assets/javascripts/i18n/angular-locale_mr.js +4 -0
  112. data/vendor/assets/javascripts/i18n/angular-locale_ms-my.js +4 -0
  113. data/vendor/assets/javascripts/i18n/angular-locale_ms.js +4 -0
  114. data/vendor/assets/javascripts/i18n/angular-locale_mt-mt.js +4 -0
  115. data/vendor/assets/javascripts/i18n/angular-locale_mt.js +4 -0
  116. data/vendor/assets/javascripts/i18n/angular-locale_nl-nl.js +4 -0
  117. data/vendor/assets/javascripts/i18n/angular-locale_nl.js +4 -0
  118. data/vendor/assets/javascripts/i18n/angular-locale_no.js +4 -0
  119. data/vendor/assets/javascripts/i18n/angular-locale_or-in.js +4 -0
  120. data/vendor/assets/javascripts/i18n/angular-locale_or.js +4 -0
  121. data/vendor/assets/javascripts/i18n/angular-locale_pl-pl.js +4 -0
  122. data/vendor/assets/javascripts/i18n/angular-locale_pl.js +4 -0
  123. data/vendor/assets/javascripts/i18n/angular-locale_pt-br.js +4 -0
  124. data/vendor/assets/javascripts/i18n/angular-locale_pt-pt.js +4 -0
  125. data/vendor/assets/javascripts/i18n/angular-locale_pt.js +4 -0
  126. data/vendor/assets/javascripts/i18n/angular-locale_ro-ro.js +4 -0
  127. data/vendor/assets/javascripts/i18n/angular-locale_ro.js +4 -0
  128. data/vendor/assets/javascripts/i18n/angular-locale_ru-ru.js +4 -0
  129. data/vendor/assets/javascripts/i18n/angular-locale_ru.js +4 -0
  130. data/vendor/assets/javascripts/i18n/angular-locale_sk-sk.js +4 -0
  131. data/vendor/assets/javascripts/i18n/angular-locale_sk.js +4 -0
  132. data/vendor/assets/javascripts/i18n/angular-locale_sl-si.js +4 -0
  133. data/vendor/assets/javascripts/i18n/angular-locale_sl.js +4 -0
  134. data/vendor/assets/javascripts/i18n/angular-locale_sq-al.js +4 -0
  135. data/vendor/assets/javascripts/i18n/angular-locale_sq.js +4 -0
  136. data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-rs.js +4 -0
  137. data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-rs.js +4 -0
  138. data/vendor/assets/javascripts/i18n/angular-locale_sr-rs.js +4 -0
  139. data/vendor/assets/javascripts/i18n/angular-locale_sr.js +4 -0
  140. data/vendor/assets/javascripts/i18n/angular-locale_sv-se.js +4 -0
  141. data/vendor/assets/javascripts/i18n/angular-locale_sv.js +4 -0
  142. data/vendor/assets/javascripts/i18n/angular-locale_sw-tz.js +4 -0
  143. data/vendor/assets/javascripts/i18n/angular-locale_sw.js +4 -0
  144. data/vendor/assets/javascripts/i18n/angular-locale_ta-in.js +4 -0
  145. data/vendor/assets/javascripts/i18n/angular-locale_ta.js +4 -0
  146. data/vendor/assets/javascripts/i18n/angular-locale_te-in.js +4 -0
  147. data/vendor/assets/javascripts/i18n/angular-locale_te.js +4 -0
  148. data/vendor/assets/javascripts/i18n/angular-locale_th-th.js +4 -0
  149. data/vendor/assets/javascripts/i18n/angular-locale_th.js +4 -0
  150. data/vendor/assets/javascripts/i18n/angular-locale_tl-ph.js +4 -0
  151. data/vendor/assets/javascripts/i18n/angular-locale_tl.js +4 -0
  152. data/vendor/assets/javascripts/i18n/angular-locale_tr-tr.js +4 -0
  153. data/vendor/assets/javascripts/i18n/angular-locale_tr.js +4 -0
  154. data/vendor/assets/javascripts/i18n/angular-locale_uk-ua.js +4 -0
  155. data/vendor/assets/javascripts/i18n/angular-locale_uk.js +4 -0
  156. data/vendor/assets/javascripts/i18n/angular-locale_ur-pk.js +4 -0
  157. data/vendor/assets/javascripts/i18n/angular-locale_ur.js +4 -0
  158. data/vendor/assets/javascripts/i18n/angular-locale_vi-vn.js +4 -0
  159. data/vendor/assets/javascripts/i18n/angular-locale_vi.js +4 -0
  160. data/vendor/assets/javascripts/i18n/angular-locale_zh-cn.js +4 -0
  161. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-cn.js +4 -0
  162. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans.js +4 -0
  163. data/vendor/assets/javascripts/i18n/angular-locale_zh-hk.js +4 -0
  164. data/vendor/assets/javascripts/i18n/angular-locale_zh-tw.js +4 -0
  165. data/vendor/assets/javascripts/i18n/angular-locale_zh.js +4 -0
  166. metadata +160 -10
  167. data/vendor/assets/javascripts/jstd-scenario-adapter-config.js +0 -6
  168. data/vendor/assets/javascripts/jstd-scenario-adapter.js +0 -185
@@ -1,3 +1,3 @@
1
1
  module AngularJS
2
- VERSION = "1.0.5"
2
+ VERSION = "1.1.3u"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  *
@@ -456,6 +456,7 @@ angular.mock.$LogProvider = function() {
456
456
  * newYearInBratislava.getDate() => 1;
457
457
  * newYearInBratislava.getHours() => 0;
458
458
  * newYearInBratislava.getMinutes() => 0;
459
+ * newYearInBratislava.getSeconds() => 0;
459
460
  * </pre>
460
461
  *
461
462
  */
@@ -512,6 +513,10 @@ angular.mock.$LogProvider = function() {
512
513
  return self.date.getSeconds();
513
514
  };
514
515
 
516
+ self.getMilliseconds = function() {
517
+ return self.date.getMilliseconds();
518
+ };
519
+
515
520
  self.getTimezoneOffset = function() {
516
521
  return offset * 60;
517
522
  };
@@ -562,7 +567,7 @@ angular.mock.$LogProvider = function() {
562
567
  }
563
568
 
564
569
  //hide all methods not implemented in this mock that the Date prototype exposes
565
- var unimplementedMethods = ['getMilliseconds', 'getUTCDay',
570
+ var unimplementedMethods = ['getUTCDay',
566
571
  'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
567
572
  'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
568
573
  'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
@@ -1352,17 +1357,49 @@ function MockXhr() {
1352
1357
  * @description
1353
1358
  *
1354
1359
  * This service is just a simple decorator for {@link ng.$timeout $timeout} service
1355
- * that adds a "flush" method.
1356
- */
1360
+ * that adds a "flush" and "verifyNoPendingTasks" methods.
1361
+ */
1357
1362
 
1358
- /**
1359
- * @ngdoc method
1360
- * @name ngMock.$timeout#flush
1361
- * @methodOf ngMock.$timeout
1362
- * @description
1363
- *
1364
- * Flushes the queue of pending tasks.
1365
- */
1363
+ angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1364
+
1365
+ /**
1366
+ * @ngdoc method
1367
+ * @name ngMock.$timeout#flush
1368
+ * @methodOf ngMock.$timeout
1369
+ * @description
1370
+ *
1371
+ * Flushes the queue of pending tasks.
1372
+ */
1373
+ $delegate.flush = function() {
1374
+ $browser.defer.flush();
1375
+ };
1376
+
1377
+ /**
1378
+ * @ngdoc method
1379
+ * @name ngMock.$timeout#verifyNoPendingTasks
1380
+ * @methodOf ngMock.$timeout
1381
+ * @description
1382
+ *
1383
+ * Verifies that there are no pending tasks that need to be flushed.
1384
+ */
1385
+ $delegate.verifyNoPendingTasks = function() {
1386
+ if ($browser.deferredFns.length) {
1387
+ throw Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
1388
+ formatPendingTasksAsString($browser.deferredFns));
1389
+ }
1390
+ };
1391
+
1392
+ function formatPendingTasksAsString(tasks) {
1393
+ var result = [];
1394
+ angular.forEach(tasks, function(task) {
1395
+ result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
1396
+ });
1397
+
1398
+ return result.join(', ');
1399
+ }
1400
+
1401
+ return $delegate;
1402
+ };
1366
1403
 
1367
1404
  /**
1368
1405
  *
@@ -1388,15 +1425,9 @@ angular.module('ngMock', ['ng']).provider({
1388
1425
  $httpBackend: angular.mock.$HttpBackendProvider,
1389
1426
  $rootElement: angular.mock.$RootElementProvider
1390
1427
  }).config(function($provide) {
1391
- $provide.decorator('$timeout', function($delegate, $browser) {
1392
- $delegate.flush = function() {
1393
- $browser.defer.flush();
1394
- };
1395
- return $delegate;
1396
- });
1428
+ $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
1397
1429
  });
1398
1430
 
1399
-
1400
1431
  /**
1401
1432
  * @ngdoc overview
1402
1433
  * @name ngMockE2E
@@ -1610,14 +1641,20 @@ window.jstestdriver && (function(window) {
1610
1641
  })(window);
1611
1642
 
1612
1643
 
1613
- window.jasmine && (function(window) {
1644
+ (window.jasmine || window.mocha) && (function(window) {
1645
+
1646
+ var currentSpec = null;
1647
+
1648
+ beforeEach(function() {
1649
+ currentSpec = this;
1650
+ });
1614
1651
 
1615
1652
  afterEach(function() {
1616
- var spec = getCurrentSpec();
1617
- var injector = spec.$injector;
1653
+ var injector = currentSpec.$injector;
1618
1654
 
1619
- spec.$injector = null;
1620
- spec.$modules = null;
1655
+ currentSpec.$injector = null;
1656
+ currentSpec.$modules = null;
1657
+ currentSpec = null;
1621
1658
 
1622
1659
  if (injector) {
1623
1660
  injector.get('$rootElement').unbind();
@@ -1639,13 +1676,8 @@ window.jasmine && (function(window) {
1639
1676
  angular.callbacks.counter = 0;
1640
1677
  });
1641
1678
 
1642
- function getCurrentSpec() {
1643
- return jasmine.getEnv().currentSpec;
1644
- }
1645
-
1646
1679
  function isSpecRunning() {
1647
- var spec = getCurrentSpec();
1648
- return spec && spec.queue.running;
1680
+ return currentSpec && currentSpec.queue.running;
1649
1681
  }
1650
1682
 
1651
1683
  /**
@@ -1670,11 +1702,10 @@ window.jasmine && (function(window) {
1670
1702
  return isSpecRunning() ? workFn() : workFn;
1671
1703
  /////////////////////
1672
1704
  function workFn() {
1673
- var spec = getCurrentSpec();
1674
- if (spec.$injector) {
1705
+ if (currentSpec.$injector) {
1675
1706
  throw Error('Injector already created, can not register a module!');
1676
1707
  } else {
1677
- var modules = spec.$modules || (spec.$modules = []);
1708
+ var modules = currentSpec.$modules || (currentSpec.$modules = []);
1678
1709
  angular.forEach(moduleFns, function(module) {
1679
1710
  modules.push(module);
1680
1711
  });
@@ -1741,13 +1772,13 @@ window.jasmine && (function(window) {
1741
1772
  return isSpecRunning() ? workFn() : workFn;
1742
1773
  /////////////////////
1743
1774
  function workFn() {
1744
- var spec = getCurrentSpec();
1745
- var modules = spec.$modules || [];
1775
+ var modules = currentSpec.$modules || [];
1776
+
1746
1777
  modules.unshift('ngMock');
1747
1778
  modules.unshift('ng');
1748
- var injector = spec.$injector;
1779
+ var injector = currentSpec.$injector;
1749
1780
  if (!injector) {
1750
- injector = spec.$injector = angular.injector(modules);
1781
+ injector = currentSpec.$injector = angular.injector(modules);
1751
1782
  }
1752
1783
  for(var i = 0, ii = blockFns.length; i < ii; i++) {
1753
1784
  try {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -25,12 +25,13 @@
25
25
  * the need to interact with the low level {@link ng.$http $http} service.
26
26
  *
27
27
  * @param {string} url A parameterized URL template with parameters prefixed by `:` as in
28
- * `/user/:username`. If you are using a URL with a port number (e.g.
28
+ * `/user/:username`. If you are using a URL with a port number (e.g.
29
29
  * `http://example.com:8080/api`), you'll need to escape the colon character before the port
30
30
  * number, like this: `$resource('http://example.com\\:8080/api')`.
31
31
  *
32
32
  * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
33
- * `actions` methods.
33
+ * `actions` methods. If any of the parameter value is a function, it will be executed every time
34
+ * when a param value needs to be obtained for a request (unless the param was overriden).
34
35
  *
35
36
  * Each key value in the parameter object is first bound to url template if present and then any
36
37
  * excess keys are appended to the url search query after the `?`.
@@ -42,21 +43,40 @@
42
43
  * the data object (useful for non-GET operations).
43
44
  *
44
45
  * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend the
45
- * default set of resource actions. The declaration should be created in the following format:
46
+ * default set of resource actions. The declaration should be created in the format of {@link
47
+ * ng.$http#Parameters $http.config}:
46
48
  *
47
- * {action1: {method:?, params:?, isArray:?},
48
- * action2: {method:?, params:?, isArray:?},
49
+ * {action1: {method:?, params:?, isArray:?, headers:?, ...},
50
+ * action2: {method:?, params:?, isArray:?, headers:?, ...},
49
51
  * ...}
50
52
  *
51
53
  * Where:
52
54
  *
53
- * - `action` – {string} – The name of action. This name becomes the name of the method on your
55
+ * - **`action`** – {string} – The name of action. This name becomes the name of the method on your
54
56
  * resource object.
55
- * - `method` – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, `DELETE`,
56
- * and `JSONP`
57
- * - `params` – {object=} – Optional set of pre-bound parameters for this action.
58
- * - isArray {boolean=} If true then the returned object for this action is an array, see
57
+ * - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, `DELETE`,
58
+ * and `JSONP`.
59
+ * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of the
60
+ * parameter value is a function, it will be executed every time when a param value needs to be
61
+ * obtained for a request (unless the param was overriden).
62
+ * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, see
59
63
  * `returns` section.
64
+ * - **`transformRequest`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
65
+ * transform function or an array of such functions. The transform function takes the http
66
+ * request body and headers and returns its transformed (typically serialized) version.
67
+ * - **`transformResponse`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
68
+ * transform function or an array of such functions. The transform function takes the http
69
+ * response body and headers and returns its transformed (typically deserialized) version.
70
+ * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
71
+ * GET request, otherwise if a cache instance built with
72
+ * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
73
+ * caching.
74
+ * - **`timeout`** – `{number}` – timeout in milliseconds.
75
+ * - **`withCredentials`** - `{boolean}` - whether to to set the `withCredentials` flag on the
76
+ * XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5
77
+ * requests with credentials} for more information.
78
+ * - **`responseType`** - `{string}` - see {@link
79
+ * https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.
60
80
  *
61
81
  * @returns {Object} A resource "class" object with methods for the default set of resource actions
62
82
  * optionally extended with custom `actions`. The default set contains these actions:
@@ -96,6 +116,24 @@
96
116
  * - non-GET instance actions: `instance.$action([parameters], [success], [error])`
97
117
  *
98
118
  *
119
+ * The Resource instances and collection have these additional properties:
120
+ *
121
+ * - `$then`: the `then` method of a {@link ng.$q promise} derived from the underlying
122
+ * {@link ng.$http $http} call.
123
+ *
124
+ * The success callback for the `$then` method will be resolved if the underlying `$http` requests
125
+ * succeeds.
126
+ *
127
+ * The success callback is called with a single object which is the {@link ng.$http http response}
128
+ * object extended with a new property `resource`. This `resource` property is a reference to the
129
+ * result of the resource action — resource object or array of resources.
130
+ *
131
+ * The error callback is called with the {@link ng.$http http response} object when an http
132
+ * error occurs.
133
+ *
134
+ * - `$resolved`: true if the promise has been resolved (either with success or rejection);
135
+ * Knowing if the Resource has been resolved is useful in data-binding.
136
+ *
99
137
  * @example
100
138
  *
101
139
  * # Credit card resource
@@ -138,7 +176,7 @@
138
176
  * The object returned from this function execution is a resource "class" which has "static" method
139
177
  * for each action in the definition.
140
178
  *
141
- * Calling these methods invoke `$http` on the `url` template with the given `method` and `params`.
179
+ * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and `headers`.
142
180
  * When the data is returned from the server then the object is an instance of the resource type and
143
181
  * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
144
182
  * operations (create, read, update, delete) on server-side data.
@@ -284,7 +322,7 @@ angular.module('ngResource', ['ng']).
284
322
  }
285
323
 
286
324
  Route.prototype = {
287
- url: function(params) {
325
+ setUrlParams: function(config, params) {
288
326
  var self = this,
289
327
  url = this.template,
290
328
  val,
@@ -307,16 +345,17 @@ angular.module('ngResource', ['ng']).
307
345
  });
308
346
  }
309
347
  });
310
- url = url.replace(/\/?#$/, '');
311
- var query = [];
348
+
349
+ // set the url
350
+ config.url = url.replace(/\/?#$/, '').replace(/\/*$/, '');
351
+
352
+ // set params - delegate param encoding to $http
312
353
  forEach(params, function(value, key){
313
354
  if (!self.urlParams[key]) {
314
- query.push(encodeUriQuery(key) + '=' + encodeUriQuery(value));
355
+ config.params = config.params || {};
356
+ config.params[key] = value;
315
357
  }
316
358
  });
317
- query.sort();
318
- url = url.replace(/\/*$/, '');
319
- return url + (query.length ? '?' + query.join('&') : '');
320
359
  }
321
360
  };
322
361
 
@@ -330,6 +369,7 @@ angular.module('ngResource', ['ng']).
330
369
  var ids = {};
331
370
  actionParams = extend({}, paramDefaults, actionParams);
332
371
  forEach(actionParams, function(value, key){
372
+ if (isFunction(value)) { value = value(); }
333
373
  ids[key] = value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value;
334
374
  });
335
375
  return ids;
@@ -347,6 +387,8 @@ angular.module('ngResource', ['ng']).
347
387
  var data;
348
388
  var success = noop;
349
389
  var error = null;
390
+ var promise;
391
+
350
392
  switch(arguments.length) {
351
393
  case 4:
352
394
  error = a4;
@@ -382,25 +424,45 @@ angular.module('ngResource', ['ng']).
382
424
  }
383
425
 
384
426
  var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
385
- $http({
386
- method: action.method,
387
- url: route.url(extend({}, extractParams(data, action.params || {}), params)),
388
- data: data
389
- }).then(function(response) {
390
- var data = response.data;
391
-
392
- if (data) {
393
- if (action.isArray) {
394
- value.length = 0;
395
- forEach(data, function(item) {
396
- value.push(new Resource(item));
397
- });
398
- } else {
399
- copy(data, value);
400
- }
427
+ var httpConfig = {},
428
+ promise;
429
+
430
+ forEach(action, function(value, key) {
431
+ if (key != 'params' && key != 'isArray' ) {
432
+ httpConfig[key] = copy(value);
433
+ }
434
+ });
435
+ httpConfig.data = data;
436
+ route.setUrlParams(httpConfig, extend({}, extractParams(data, action.params || {}), params));
437
+
438
+ function markResolved() { value.$resolved = true; }
439
+
440
+ promise = $http(httpConfig);
441
+ value.$resolved = false;
442
+
443
+ promise.then(markResolved, markResolved);
444
+ value.$then = promise.then(function(response) {
445
+ var data = response.data;
446
+ var then = value.$then, resolved = value.$resolved;
447
+
448
+ if (data) {
449
+ if (action.isArray) {
450
+ value.length = 0;
451
+ forEach(data, function(item) {
452
+ value.push(new Resource(item));
453
+ });
454
+ } else {
455
+ copy(data, value);
456
+ value.$then = then;
457
+ value.$resolved = resolved;
401
458
  }
402
- (success||noop)(value, response.headers);
403
- }, error);
459
+ }
460
+
461
+ (success||noop)(value, response.headers);
462
+
463
+ response.resource = value;
464
+ return response;
465
+ }, error).then;
404
466
 
405
467
  return value;
406
468
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.5
2
+ * @license AngularJS v1.1.3
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -129,7 +129,7 @@ var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:
129
129
  BEGING_END_TAGE_REGEXP = /^<\s*\//,
130
130
  COMMENT_REGEXP = /<!--(.*?)-->/g,
131
131
  CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
132
- URI_REGEXP = /^((ftp|https?):\/\/|mailto:|#)/,
132
+ URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/,
133
133
  NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character)
134
134
 
135
135
 
@@ -432,6 +432,7 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
432
432
  * plain email address links.
433
433
  *
434
434
  * @param {string} text Input text.
435
+ * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
435
436
  * @returns {string} Html-linkified text.
436
437
  *
437
438
  * @usage
@@ -448,6 +449,7 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
448
449
  'mailto:us@somewhere.org,\n'+
449
450
  'another@somewhere.org,\n'+
450
451
  'and one more: ftp://127.0.0.1/.';
452
+ $scope.snippetWithTarget = 'http://angularjs.org/';
451
453
  }
452
454
  </script>
453
455
  <div ng-controller="Ctrl">
@@ -467,6 +469,15 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
467
469
  <div ng-bind-html="snippet | linky"></div>
468
470
  </td>
469
471
  </tr>
472
+ <tr id="linky-target">
473
+ <td>linky target</td>
474
+ <td>
475
+ <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
476
+ </td>
477
+ <td>
478
+ <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
479
+ </td>
480
+ </tr>
470
481
  <tr id="escaped-html">
471
482
  <td>no filter</td>
472
483
  <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
@@ -499,6 +510,11 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
499
510
  toBe('new <a href="http://link">http://link</a>.');
500
511
  expect(using('#escaped-html').binding('snippet')).toBe('new http://link.');
501
512
  });
513
+
514
+ it('should work with the target property', function() {
515
+ expect(using('#linky-target').binding("snippetWithTarget | linky:'_blank'")).
516
+ toBe('<a target="_blank" href="http://angularjs.org/">http://angularjs.org/</a>');
517
+ });
502
518
  </doc:scenario>
503
519
  </doc:example>
504
520
  */
@@ -506,7 +522,7 @@ angular.module('ngSanitize').filter('linky', function() {
506
522
  var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,
507
523
  MAILTO_REGEXP = /^mailto:/;
508
524
 
509
- return function(text) {
525
+ return function(text, target) {
510
526
  if (!text) return text;
511
527
  var match;
512
528
  var raw = text;
@@ -515,6 +531,10 @@ angular.module('ngSanitize').filter('linky', function() {
515
531
  var writer = htmlSanitizeWriter(html);
516
532
  var url;
517
533
  var i;
534
+ var properties = {};
535
+ if (angular.isDefined(target)) {
536
+ properties.target = target;
537
+ }
518
538
  while ((match = raw.match(LINKY_URL_REGEXP))) {
519
539
  // We can not end in these as they are sometimes found at the end of the sentence
520
540
  url = match[0];
@@ -522,7 +542,8 @@ angular.module('ngSanitize').filter('linky', function() {
522
542
  if (match[2] == match[3]) url = 'mailto:' + url;
523
543
  i = match.index;
524
544
  writer.chars(raw.substr(0, i));
525
- writer.start('a', {href:url});
545
+ properties.href = url;
546
+ writer.start('a', properties);
526
547
  writer.chars(match[0].replace(MAILTO_REGEXP, ''));
527
548
  writer.end('a');
528
549
  raw = raw.substring(i + match[0].length);