angular-on-rails 1.0.5 → 1.1.3u

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 (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);