angularjs-rails 1.0.7 → 1.0.8

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 (300) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2 -2
  3. data/lib/angularjs-rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/angular-bootstrap-prettify.js +14 -4
  5. data/vendor/assets/javascripts/angular-bootstrap.js +1 -1
  6. data/vendor/assets/javascripts/angular-cookies.js +12 -1
  7. data/vendor/assets/javascripts/angular-loader.js +3 -3
  8. data/vendor/assets/javascripts/angular-mocks.js +99 -82
  9. data/vendor/assets/javascripts/angular-resource.js +1 -1
  10. data/vendor/assets/javascripts/angular-sanitize.js +24 -5
  11. data/vendor/assets/javascripts/angular-scenario.js +484 -173
  12. data/vendor/assets/javascripts/angular.js +484 -173
  13. data/vendor/assets/javascripts/i18n/angular-locale_af-na.js +98 -0
  14. data/vendor/assets/javascripts/i18n/angular-locale_af-za.js +98 -0
  15. data/vendor/assets/javascripts/i18n/angular-locale_af.js +98 -0
  16. data/vendor/assets/javascripts/i18n/angular-locale_am-et.js +98 -0
  17. data/vendor/assets/javascripts/i18n/angular-locale_am.js +98 -0
  18. data/vendor/assets/javascripts/i18n/angular-locale_ar-001.js +98 -0
  19. data/vendor/assets/javascripts/i18n/angular-locale_ar-ae.js +98 -0
  20. data/vendor/assets/javascripts/i18n/angular-locale_ar-bh.js +98 -0
  21. data/vendor/assets/javascripts/i18n/angular-locale_ar-dz.js +98 -0
  22. data/vendor/assets/javascripts/i18n/angular-locale_ar-eg.js +98 -0
  23. data/vendor/assets/javascripts/i18n/angular-locale_ar-iq.js +98 -0
  24. data/vendor/assets/javascripts/i18n/angular-locale_ar-jo.js +98 -0
  25. data/vendor/assets/javascripts/i18n/angular-locale_ar-kw.js +98 -0
  26. data/vendor/assets/javascripts/i18n/angular-locale_ar-lb.js +98 -0
  27. data/vendor/assets/javascripts/i18n/angular-locale_ar-ly.js +98 -0
  28. data/vendor/assets/javascripts/i18n/angular-locale_ar-ma.js +98 -0
  29. data/vendor/assets/javascripts/i18n/angular-locale_ar-om.js +98 -0
  30. data/vendor/assets/javascripts/i18n/angular-locale_ar-qa.js +98 -0
  31. data/vendor/assets/javascripts/i18n/angular-locale_ar-sa.js +98 -0
  32. data/vendor/assets/javascripts/i18n/angular-locale_ar-sd.js +98 -0
  33. data/vendor/assets/javascripts/i18n/angular-locale_ar-sy.js +98 -0
  34. data/vendor/assets/javascripts/i18n/angular-locale_ar-tn.js +98 -0
  35. data/vendor/assets/javascripts/i18n/angular-locale_ar-ye.js +98 -0
  36. data/vendor/assets/javascripts/i18n/angular-locale_ar.js +98 -0
  37. data/vendor/assets/javascripts/i18n/angular-locale_bg-bg.js +98 -0
  38. data/vendor/assets/javascripts/i18n/angular-locale_bg.js +98 -0
  39. data/vendor/assets/javascripts/i18n/angular-locale_bn-bd.js +98 -0
  40. data/vendor/assets/javascripts/i18n/angular-locale_bn-in.js +98 -0
  41. data/vendor/assets/javascripts/i18n/angular-locale_bn.js +98 -0
  42. data/vendor/assets/javascripts/i18n/angular-locale_ca-ad.js +98 -0
  43. data/vendor/assets/javascripts/i18n/angular-locale_ca-es.js +98 -0
  44. data/vendor/assets/javascripts/i18n/angular-locale_ca.js +98 -0
  45. data/vendor/assets/javascripts/i18n/angular-locale_chr.js +4 -0
  46. data/vendor/assets/javascripts/i18n/angular-locale_cs-cz.js +98 -0
  47. data/vendor/assets/javascripts/i18n/angular-locale_cs.js +98 -0
  48. data/vendor/assets/javascripts/i18n/angular-locale_cy.js +4 -0
  49. data/vendor/assets/javascripts/i18n/angular-locale_da-dk.js +98 -0
  50. data/vendor/assets/javascripts/i18n/angular-locale_da.js +98 -0
  51. data/vendor/assets/javascripts/i18n/angular-locale_de-at.js +98 -0
  52. data/vendor/assets/javascripts/i18n/angular-locale_de-be.js +98 -0
  53. data/vendor/assets/javascripts/i18n/angular-locale_de-ch.js +98 -0
  54. data/vendor/assets/javascripts/i18n/angular-locale_de-de.js +98 -0
  55. data/vendor/assets/javascripts/i18n/angular-locale_de-li.js +98 -0
  56. data/vendor/assets/javascripts/i18n/angular-locale_de-lu.js +98 -0
  57. data/vendor/assets/javascripts/i18n/angular-locale_de.js +98 -0
  58. data/vendor/assets/javascripts/i18n/angular-locale_el-cy.js +98 -0
  59. data/vendor/assets/javascripts/i18n/angular-locale_el-gr.js +98 -0
  60. data/vendor/assets/javascripts/i18n/angular-locale_el-polyton.js +4 -0
  61. data/vendor/assets/javascripts/i18n/angular-locale_el.js +98 -0
  62. data/vendor/assets/javascripts/i18n/angular-locale_en-as.js +98 -0
  63. data/vendor/assets/javascripts/i18n/angular-locale_en-au.js +98 -0
  64. data/vendor/assets/javascripts/i18n/angular-locale_en-bb.js +98 -0
  65. data/vendor/assets/javascripts/i18n/angular-locale_en-be.js +98 -0
  66. data/vendor/assets/javascripts/i18n/angular-locale_en-bm.js +98 -0
  67. data/vendor/assets/javascripts/i18n/angular-locale_en-bw.js +98 -0
  68. data/vendor/assets/javascripts/i18n/angular-locale_en-bz.js +98 -0
  69. data/vendor/assets/javascripts/i18n/angular-locale_en-ca.js +98 -0
  70. data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt-us.js +98 -0
  71. data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt.js +98 -0
  72. data/vendor/assets/javascripts/i18n/angular-locale_en-fm.js +98 -0
  73. data/vendor/assets/javascripts/i18n/angular-locale_en-gb.js +98 -0
  74. data/vendor/assets/javascripts/i18n/angular-locale_en-gu.js +98 -0
  75. data/vendor/assets/javascripts/i18n/angular-locale_en-gy.js +98 -0
  76. data/vendor/assets/javascripts/i18n/angular-locale_en-hk.js +98 -0
  77. data/vendor/assets/javascripts/i18n/angular-locale_en-ie.js +98 -0
  78. data/vendor/assets/javascripts/i18n/angular-locale_en-in.js +98 -0
  79. data/vendor/assets/javascripts/i18n/angular-locale_en-iso.js +98 -0
  80. data/vendor/assets/javascripts/i18n/angular-locale_en-jm.js +98 -0
  81. data/vendor/assets/javascripts/i18n/angular-locale_en-mh.js +98 -0
  82. data/vendor/assets/javascripts/i18n/angular-locale_en-mp.js +98 -0
  83. data/vendor/assets/javascripts/i18n/angular-locale_en-mt.js +98 -0
  84. data/vendor/assets/javascripts/i18n/angular-locale_en-mu.js +98 -0
  85. data/vendor/assets/javascripts/i18n/angular-locale_en-na.js +98 -0
  86. data/vendor/assets/javascripts/i18n/angular-locale_en-nz.js +98 -0
  87. data/vendor/assets/javascripts/i18n/angular-locale_en-ph.js +98 -0
  88. data/vendor/assets/javascripts/i18n/angular-locale_en-pk.js +98 -0
  89. data/vendor/assets/javascripts/i18n/angular-locale_en-pr.js +98 -0
  90. data/vendor/assets/javascripts/i18n/angular-locale_en-pw.js +98 -0
  91. data/vendor/assets/javascripts/i18n/angular-locale_en-sg.js +98 -0
  92. data/vendor/assets/javascripts/i18n/angular-locale_en-tc.js +98 -0
  93. data/vendor/assets/javascripts/i18n/angular-locale_en-tt.js +98 -0
  94. data/vendor/assets/javascripts/i18n/angular-locale_en-um.js +98 -0
  95. data/vendor/assets/javascripts/i18n/angular-locale_en-us.js +98 -0
  96. data/vendor/assets/javascripts/i18n/angular-locale_en-vg.js +98 -0
  97. data/vendor/assets/javascripts/i18n/angular-locale_en-vi.js +98 -0
  98. data/vendor/assets/javascripts/i18n/angular-locale_en-za.js +98 -0
  99. data/vendor/assets/javascripts/i18n/angular-locale_en-zw.js +98 -0
  100. data/vendor/assets/javascripts/i18n/angular-locale_en-zz.js +4 -0
  101. data/vendor/assets/javascripts/i18n/angular-locale_en.js +98 -0
  102. data/vendor/assets/javascripts/i18n/angular-locale_es-419.js +98 -0
  103. data/vendor/assets/javascripts/i18n/angular-locale_es-ar.js +98 -0
  104. data/vendor/assets/javascripts/i18n/angular-locale_es-bo.js +98 -0
  105. data/vendor/assets/javascripts/i18n/angular-locale_es-cl.js +98 -0
  106. data/vendor/assets/javascripts/i18n/angular-locale_es-co.js +98 -0
  107. data/vendor/assets/javascripts/i18n/angular-locale_es-cr.js +98 -0
  108. data/vendor/assets/javascripts/i18n/angular-locale_es-do.js +98 -0
  109. data/vendor/assets/javascripts/i18n/angular-locale_es-ea.js +98 -0
  110. data/vendor/assets/javascripts/i18n/angular-locale_es-ec.js +98 -0
  111. data/vendor/assets/javascripts/i18n/angular-locale_es-es.js +98 -0
  112. data/vendor/assets/javascripts/i18n/angular-locale_es-gq.js +98 -0
  113. data/vendor/assets/javascripts/i18n/angular-locale_es-gt.js +98 -0
  114. data/vendor/assets/javascripts/i18n/angular-locale_es-hn.js +98 -0
  115. data/vendor/assets/javascripts/i18n/angular-locale_es-ic.js +98 -0
  116. data/vendor/assets/javascripts/i18n/angular-locale_es-mx.js +98 -0
  117. data/vendor/assets/javascripts/i18n/angular-locale_es-ni.js +98 -0
  118. data/vendor/assets/javascripts/i18n/angular-locale_es-pa.js +98 -0
  119. data/vendor/assets/javascripts/i18n/angular-locale_es-pe.js +98 -0
  120. data/vendor/assets/javascripts/i18n/angular-locale_es-pr.js +98 -0
  121. data/vendor/assets/javascripts/i18n/angular-locale_es-py.js +98 -0
  122. data/vendor/assets/javascripts/i18n/angular-locale_es-sv.js +98 -0
  123. data/vendor/assets/javascripts/i18n/angular-locale_es-us.js +98 -0
  124. data/vendor/assets/javascripts/i18n/angular-locale_es-uy.js +98 -0
  125. data/vendor/assets/javascripts/i18n/angular-locale_es-ve.js +98 -0
  126. data/vendor/assets/javascripts/i18n/angular-locale_es.js +98 -0
  127. data/vendor/assets/javascripts/i18n/angular-locale_et-ee.js +98 -0
  128. data/vendor/assets/javascripts/i18n/angular-locale_et.js +98 -0
  129. data/vendor/assets/javascripts/i18n/angular-locale_eu-es.js +98 -0
  130. data/vendor/assets/javascripts/i18n/angular-locale_eu.js +98 -0
  131. data/vendor/assets/javascripts/i18n/angular-locale_fa-af.js +98 -0
  132. data/vendor/assets/javascripts/i18n/angular-locale_fa-ir.js +98 -0
  133. data/vendor/assets/javascripts/i18n/angular-locale_fa.js +98 -0
  134. data/vendor/assets/javascripts/i18n/angular-locale_fi-fi.js +98 -0
  135. data/vendor/assets/javascripts/i18n/angular-locale_fi.js +98 -0
  136. data/vendor/assets/javascripts/i18n/angular-locale_fil-ph.js +98 -0
  137. data/vendor/assets/javascripts/i18n/angular-locale_fil.js +98 -0
  138. data/vendor/assets/javascripts/i18n/angular-locale_fr-be.js +98 -0
  139. data/vendor/assets/javascripts/i18n/angular-locale_fr-bf.js +98 -0
  140. data/vendor/assets/javascripts/i18n/angular-locale_fr-bi.js +98 -0
  141. data/vendor/assets/javascripts/i18n/angular-locale_fr-bj.js +98 -0
  142. data/vendor/assets/javascripts/i18n/angular-locale_fr-bl.js +98 -0
  143. data/vendor/assets/javascripts/i18n/angular-locale_fr-ca.js +98 -0
  144. data/vendor/assets/javascripts/i18n/angular-locale_fr-cd.js +98 -0
  145. data/vendor/assets/javascripts/i18n/angular-locale_fr-cf.js +98 -0
  146. data/vendor/assets/javascripts/i18n/angular-locale_fr-cg.js +98 -0
  147. data/vendor/assets/javascripts/i18n/angular-locale_fr-ch.js +98 -0
  148. data/vendor/assets/javascripts/i18n/angular-locale_fr-ci.js +98 -0
  149. data/vendor/assets/javascripts/i18n/angular-locale_fr-cm.js +98 -0
  150. data/vendor/assets/javascripts/i18n/angular-locale_fr-dj.js +98 -0
  151. data/vendor/assets/javascripts/i18n/angular-locale_fr-fr.js +98 -0
  152. data/vendor/assets/javascripts/i18n/angular-locale_fr-ga.js +98 -0
  153. data/vendor/assets/javascripts/i18n/angular-locale_fr-gf.js +98 -0
  154. data/vendor/assets/javascripts/i18n/angular-locale_fr-gn.js +98 -0
  155. data/vendor/assets/javascripts/i18n/angular-locale_fr-gp.js +98 -0
  156. data/vendor/assets/javascripts/i18n/angular-locale_fr-gq.js +98 -0
  157. data/vendor/assets/javascripts/i18n/angular-locale_fr-km.js +98 -0
  158. data/vendor/assets/javascripts/i18n/angular-locale_fr-lu.js +98 -0
  159. data/vendor/assets/javascripts/i18n/angular-locale_fr-mc.js +98 -0
  160. data/vendor/assets/javascripts/i18n/angular-locale_fr-mf.js +98 -0
  161. data/vendor/assets/javascripts/i18n/angular-locale_fr-mg.js +98 -0
  162. data/vendor/assets/javascripts/i18n/angular-locale_fr-ml.js +98 -0
  163. data/vendor/assets/javascripts/i18n/angular-locale_fr-mq.js +98 -0
  164. data/vendor/assets/javascripts/i18n/angular-locale_fr-ne.js +98 -0
  165. data/vendor/assets/javascripts/i18n/angular-locale_fr-re.js +98 -0
  166. data/vendor/assets/javascripts/i18n/angular-locale_fr-rw.js +98 -0
  167. data/vendor/assets/javascripts/i18n/angular-locale_fr-sn.js +98 -0
  168. data/vendor/assets/javascripts/i18n/angular-locale_fr-td.js +98 -0
  169. data/vendor/assets/javascripts/i18n/angular-locale_fr-tg.js +98 -0
  170. data/vendor/assets/javascripts/i18n/angular-locale_fr-yt.js +98 -0
  171. data/vendor/assets/javascripts/i18n/angular-locale_fr.js +98 -0
  172. data/vendor/assets/javascripts/i18n/angular-locale_gl-es.js +98 -0
  173. data/vendor/assets/javascripts/i18n/angular-locale_gl.js +98 -0
  174. data/vendor/assets/javascripts/i18n/angular-locale_gsw-ch.js +98 -0
  175. data/vendor/assets/javascripts/i18n/angular-locale_gsw.js +98 -0
  176. data/vendor/assets/javascripts/i18n/angular-locale_gu-in.js +98 -0
  177. data/vendor/assets/javascripts/i18n/angular-locale_gu.js +98 -0
  178. data/vendor/assets/javascripts/i18n/angular-locale_haw.js +4 -0
  179. data/vendor/assets/javascripts/i18n/angular-locale_he-il.js +98 -0
  180. data/vendor/assets/javascripts/i18n/angular-locale_he.js +98 -0
  181. data/vendor/assets/javascripts/i18n/angular-locale_hi-in.js +98 -0
  182. data/vendor/assets/javascripts/i18n/angular-locale_hi.js +98 -0
  183. data/vendor/assets/javascripts/i18n/angular-locale_hr-hr.js +98 -0
  184. data/vendor/assets/javascripts/i18n/angular-locale_hr.js +98 -0
  185. data/vendor/assets/javascripts/i18n/angular-locale_hu-hu.js +98 -0
  186. data/vendor/assets/javascripts/i18n/angular-locale_hu.js +98 -0
  187. data/vendor/assets/javascripts/i18n/angular-locale_id-id.js +98 -0
  188. data/vendor/assets/javascripts/i18n/angular-locale_id.js +98 -0
  189. data/vendor/assets/javascripts/i18n/angular-locale_in.js +98 -0
  190. data/vendor/assets/javascripts/i18n/angular-locale_is-is.js +98 -0
  191. data/vendor/assets/javascripts/i18n/angular-locale_is.js +98 -0
  192. data/vendor/assets/javascripts/i18n/angular-locale_it-ch.js +98 -0
  193. data/vendor/assets/javascripts/i18n/angular-locale_it-it.js +98 -0
  194. data/vendor/assets/javascripts/i18n/angular-locale_it-sm.js +98 -0
  195. data/vendor/assets/javascripts/i18n/angular-locale_it.js +98 -0
  196. data/vendor/assets/javascripts/i18n/angular-locale_iw.js +98 -0
  197. data/vendor/assets/javascripts/i18n/angular-locale_ja-jp.js +98 -0
  198. data/vendor/assets/javascripts/i18n/angular-locale_ja.js +98 -0
  199. data/vendor/assets/javascripts/i18n/angular-locale_kn-in.js +98 -0
  200. data/vendor/assets/javascripts/i18n/angular-locale_kn.js +98 -0
  201. data/vendor/assets/javascripts/i18n/angular-locale_ko-kr.js +98 -0
  202. data/vendor/assets/javascripts/i18n/angular-locale_ko.js +98 -0
  203. data/vendor/assets/javascripts/i18n/angular-locale_ln-cd.js +98 -0
  204. data/vendor/assets/javascripts/i18n/angular-locale_ln-cg.js +98 -0
  205. data/vendor/assets/javascripts/i18n/angular-locale_ln.js +98 -0
  206. data/vendor/assets/javascripts/i18n/angular-locale_lt-lt.js +98 -0
  207. data/vendor/assets/javascripts/i18n/angular-locale_lt.js +98 -0
  208. data/vendor/assets/javascripts/i18n/angular-locale_lv-lv.js +98 -0
  209. data/vendor/assets/javascripts/i18n/angular-locale_lv.js +98 -0
  210. data/vendor/assets/javascripts/i18n/angular-locale_ml-in.js +98 -0
  211. data/vendor/assets/javascripts/i18n/angular-locale_ml.js +98 -0
  212. data/vendor/assets/javascripts/i18n/angular-locale_mo.js +4 -0
  213. data/vendor/assets/javascripts/i18n/angular-locale_mr-in.js +98 -0
  214. data/vendor/assets/javascripts/i18n/angular-locale_mr.js +98 -0
  215. data/vendor/assets/javascripts/i18n/angular-locale_ms-bn.js +98 -0
  216. data/vendor/assets/javascripts/i18n/angular-locale_ms-my.js +98 -0
  217. data/vendor/assets/javascripts/i18n/angular-locale_ms.js +98 -0
  218. data/vendor/assets/javascripts/i18n/angular-locale_mt-mt.js +98 -0
  219. data/vendor/assets/javascripts/i18n/angular-locale_mt.js +98 -0
  220. data/vendor/assets/javascripts/i18n/angular-locale_nl-aw.js +98 -0
  221. data/vendor/assets/javascripts/i18n/angular-locale_nl-be.js +98 -0
  222. data/vendor/assets/javascripts/i18n/angular-locale_nl-cw.js +98 -0
  223. data/vendor/assets/javascripts/i18n/angular-locale_nl-nl.js +98 -0
  224. data/vendor/assets/javascripts/i18n/angular-locale_nl-sx.js +98 -0
  225. data/vendor/assets/javascripts/i18n/angular-locale_nl.js +98 -0
  226. data/vendor/assets/javascripts/i18n/angular-locale_no.js +98 -0
  227. data/vendor/assets/javascripts/i18n/angular-locale_or-in.js +98 -0
  228. data/vendor/assets/javascripts/i18n/angular-locale_or.js +98 -0
  229. data/vendor/assets/javascripts/i18n/angular-locale_pl-pl.js +98 -0
  230. data/vendor/assets/javascripts/i18n/angular-locale_pl.js +98 -0
  231. data/vendor/assets/javascripts/i18n/angular-locale_pt-ao.js +98 -0
  232. data/vendor/assets/javascripts/i18n/angular-locale_pt-br.js +98 -0
  233. data/vendor/assets/javascripts/i18n/angular-locale_pt-gw.js +98 -0
  234. data/vendor/assets/javascripts/i18n/angular-locale_pt-mz.js +98 -0
  235. data/vendor/assets/javascripts/i18n/angular-locale_pt-pt.js +98 -0
  236. data/vendor/assets/javascripts/i18n/angular-locale_pt-st.js +98 -0
  237. data/vendor/assets/javascripts/i18n/angular-locale_pt.js +98 -0
  238. data/vendor/assets/javascripts/i18n/angular-locale_ro-md.js +98 -0
  239. data/vendor/assets/javascripts/i18n/angular-locale_ro-ro.js +98 -0
  240. data/vendor/assets/javascripts/i18n/angular-locale_ro.js +98 -0
  241. data/vendor/assets/javascripts/i18n/angular-locale_ru-md.js +98 -0
  242. data/vendor/assets/javascripts/i18n/angular-locale_ru-ru.js +98 -0
  243. data/vendor/assets/javascripts/i18n/angular-locale_ru-ua.js +98 -0
  244. data/vendor/assets/javascripts/i18n/angular-locale_ru.js +98 -0
  245. data/vendor/assets/javascripts/i18n/angular-locale_sk-sk.js +98 -0
  246. data/vendor/assets/javascripts/i18n/angular-locale_sk.js +98 -0
  247. data/vendor/assets/javascripts/i18n/angular-locale_sl-si.js +98 -0
  248. data/vendor/assets/javascripts/i18n/angular-locale_sl.js +98 -0
  249. data/vendor/assets/javascripts/i18n/angular-locale_sq-al.js +98 -0
  250. data/vendor/assets/javascripts/i18n/angular-locale_sq.js +98 -0
  251. data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-ba.js +98 -0
  252. data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-me.js +98 -0
  253. data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-rs.js +98 -0
  254. data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl.js +98 -0
  255. data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-ba.js +98 -0
  256. data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-me.js +98 -0
  257. data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-rs.js +98 -0
  258. data/vendor/assets/javascripts/i18n/angular-locale_sr-latn.js +98 -0
  259. data/vendor/assets/javascripts/i18n/angular-locale_sr-rs.js +4 -0
  260. data/vendor/assets/javascripts/i18n/angular-locale_sr.js +98 -0
  261. data/vendor/assets/javascripts/i18n/angular-locale_sv-fi.js +98 -0
  262. data/vendor/assets/javascripts/i18n/angular-locale_sv-se.js +98 -0
  263. data/vendor/assets/javascripts/i18n/angular-locale_sv.js +98 -0
  264. data/vendor/assets/javascripts/i18n/angular-locale_sw-ke.js +98 -0
  265. data/vendor/assets/javascripts/i18n/angular-locale_sw-tz.js +98 -0
  266. data/vendor/assets/javascripts/i18n/angular-locale_sw.js +98 -0
  267. data/vendor/assets/javascripts/i18n/angular-locale_ta-in.js +98 -0
  268. data/vendor/assets/javascripts/i18n/angular-locale_ta-lk.js +98 -0
  269. data/vendor/assets/javascripts/i18n/angular-locale_ta.js +98 -0
  270. data/vendor/assets/javascripts/i18n/angular-locale_te-in.js +98 -0
  271. data/vendor/assets/javascripts/i18n/angular-locale_te.js +98 -0
  272. data/vendor/assets/javascripts/i18n/angular-locale_th-th.js +98 -0
  273. data/vendor/assets/javascripts/i18n/angular-locale_th.js +98 -0
  274. data/vendor/assets/javascripts/i18n/angular-locale_tl-ph.js +4 -0
  275. data/vendor/assets/javascripts/i18n/angular-locale_tl.js +98 -0
  276. data/vendor/assets/javascripts/i18n/angular-locale_tr-tr.js +98 -0
  277. data/vendor/assets/javascripts/i18n/angular-locale_tr.js +98 -0
  278. data/vendor/assets/javascripts/i18n/angular-locale_uk-ua.js +98 -0
  279. data/vendor/assets/javascripts/i18n/angular-locale_uk.js +98 -0
  280. data/vendor/assets/javascripts/i18n/angular-locale_ur-in.js +98 -0
  281. data/vendor/assets/javascripts/i18n/angular-locale_ur-pk.js +98 -0
  282. data/vendor/assets/javascripts/i18n/angular-locale_ur.js +98 -0
  283. data/vendor/assets/javascripts/i18n/angular-locale_vi-vn.js +98 -0
  284. data/vendor/assets/javascripts/i18n/angular-locale_vi.js +98 -0
  285. data/vendor/assets/javascripts/i18n/angular-locale_zh-cn.js +98 -0
  286. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-cn.js +98 -0
  287. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-hk.js +98 -0
  288. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-mo.js +98 -0
  289. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-sg.js +98 -0
  290. data/vendor/assets/javascripts/i18n/angular-locale_zh-hans.js +98 -0
  291. data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-hk.js +98 -0
  292. data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-mo.js +98 -0
  293. data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-tw.js +98 -0
  294. data/vendor/assets/javascripts/i18n/angular-locale_zh-hant.js +98 -0
  295. data/vendor/assets/javascripts/i18n/angular-locale_zh-hk.js +98 -0
  296. data/vendor/assets/javascripts/i18n/angular-locale_zh-tw.js +98 -0
  297. data/vendor/assets/javascripts/i18n/angular-locale_zh.js +98 -0
  298. data/vendor/assets/javascripts/i18n/angular-locale_zu-za.js +98 -0
  299. data/vendor/assets/javascripts/i18n/angular-locale_zu.js +98 -0
  300. metadata +294 -9
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.0.7
2
+ * @license AngularJS v1.0.8
3
3
  * (c) 2010-2012 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -282,7 +282,7 @@ noop.$inject = [];
282
282
  *
283
283
  <pre>
284
284
  function transformer(transformationFn, value) {
285
- return (transformationFn || identity)(value);
285
+ return (transformationFn || angular.identity)(value);
286
286
  };
287
287
  </pre>
288
288
  */
@@ -409,6 +409,18 @@ function isArray(value) {
409
409
  function isFunction(value){return typeof value == 'function';}
410
410
 
411
411
 
412
+ /**
413
+ * Determines if a value is a regular expression object.
414
+ *
415
+ * @private
416
+ * @param {*} value Reference to check.
417
+ * @returns {boolean} True if `value` is a `RegExp`.
418
+ */
419
+ function isRegExp(value) {
420
+ return toString.apply(value) == '[object RegExp]';
421
+ }
422
+
423
+
412
424
  /**
413
425
  * Checks if `obj` is a window object.
414
426
  *
@@ -436,9 +448,20 @@ function isBoolean(value) {
436
448
  }
437
449
 
438
450
 
439
- function trim(value) {
440
- return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value;
441
- }
451
+ var trim = (function() {
452
+ // native trim is way faster: http://jsperf.com/angular-trim-test
453
+ // but IE doesn't have it... :-(
454
+ // TODO: we should move this into IE/ES5 polyfill
455
+ if (!String.prototype.trim) {
456
+ return function(value) {
457
+ return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value;
458
+ };
459
+ }
460
+ return function(value) {
461
+ return isString(value) ? value.trim() : value;
462
+ };
463
+ })();
464
+
442
465
 
443
466
  /**
444
467
  * @ngdoc function
@@ -581,6 +604,8 @@ function copy(source, destination){
581
604
  destination = copy(source, []);
582
605
  } else if (isDate(source)) {
583
606
  destination = new Date(source.getTime());
607
+ } else if (isRegExp(source)) {
608
+ destination = new RegExp(source.source);
584
609
  } else if (isObject(source)) {
585
610
  destination = copy(source, {});
586
611
  }
@@ -628,7 +653,7 @@ function shallowCopy(src, dst) {
628
653
  * @function
629
654
  *
630
655
  * @description
631
- * Determines if two objects or two values are equivalent. Supports value types, arrays and
656
+ * Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and
632
657
  * objects.
633
658
  *
634
659
  * Two objects or values are considered equivalent if at least one of the following is true:
@@ -636,6 +661,9 @@ function shallowCopy(src, dst) {
636
661
  * * Both objects or values pass `===` comparison.
637
662
  * * Both objects or values are of the same type and all of their properties pass `===` comparison.
638
663
  * * Both values are NaN. (In JavasScript, NaN == NaN => false. But we consider two NaN as equal)
664
+ * * Both values represent the same regular expression (In JavasScript,
665
+ * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
666
+ * representation matches).
639
667
  *
640
668
  * During a property comparision, properties of `function` type and properties with names
641
669
  * that begin with `$` are ignored.
@@ -654,6 +682,7 @@ function equals(o1, o2) {
654
682
  if (t1 == t2) {
655
683
  if (t1 == 'object') {
656
684
  if (isArray(o1)) {
685
+ if (!isArray(o2)) return false;
657
686
  if ((length = o1.length) == o2.length) {
658
687
  for(key=0; key<length; key++) {
659
688
  if (!equals(o1[key], o2[key])) return false;
@@ -662,8 +691,10 @@ function equals(o1, o2) {
662
691
  }
663
692
  } else if (isDate(o1)) {
664
693
  return isDate(o2) && o1.getTime() == o2.getTime();
694
+ } else if (isRegExp(o1) && isRegExp(o2)) {
695
+ return o1.toString() == o2.toString();
665
696
  } else {
666
- if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2)) return false;
697
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
667
698
  keySet = {};
668
699
  for(key in o1) {
669
700
  if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
@@ -752,13 +783,15 @@ function toJsonReplacer(key, value) {
752
783
  * @function
753
784
  *
754
785
  * @description
755
- * Serializes input into a JSON-formatted string.
786
+ * Serializes input into a JSON-formatted string. Properties with leading $ characters will be
787
+ * stripped since angular uses this notation internally.
756
788
  *
757
789
  * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
758
790
  * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
759
- * @returns {string} Jsonified string representing `obj`.
791
+ * @returns {string|undefined} Jsonified string representing `obj`.
760
792
  */
761
793
  function toJson(obj, pretty) {
794
+ if (typeof obj === 'undefined') return undefined;
762
795
  return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null);
763
796
  }
764
797
 
@@ -818,6 +851,23 @@ function startingTag(element) {
818
851
 
819
852
  /////////////////////////////////////////////////
820
853
 
854
+ /**
855
+ * Tries to decode the URI component without throwing an exception.
856
+ *
857
+ * @private
858
+ * @param str value potential URI component to check.
859
+ * @returns {boolean} True if `value` can be decoded
860
+ * with the decodeURIComponent function.
861
+ */
862
+ function tryDecodeURIComponent(value) {
863
+ try {
864
+ return decodeURIComponent(value);
865
+ } catch(e) {
866
+ // Ignore any invalid uri component
867
+ }
868
+ }
869
+
870
+
821
871
  /**
822
872
  * Parses an escaped url query string into key-value pairs.
823
873
  * @returns Object.<(string|boolean)>
@@ -825,10 +875,12 @@ function startingTag(element) {
825
875
  function parseKeyValue(/**string*/keyValue) {
826
876
  var obj = {}, key_value, key;
827
877
  forEach((keyValue || "").split('&'), function(keyValue){
828
- if (keyValue) {
878
+ if ( keyValue ) {
829
879
  key_value = keyValue.split('=');
830
- key = decodeURIComponent(key_value[0]);
831
- obj[key] = isDefined(key_value[1]) ? decodeURIComponent(key_value[1]) : true;
880
+ key = tryDecodeURIComponent(key_value[0]);
881
+ if ( isDefined(key) ) {
882
+ obj[key] = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
883
+ }
832
884
  }
833
885
  });
834
886
  return obj;
@@ -894,10 +946,14 @@ function encodeUriQuery(val, pctEncodeSpaces) {
894
946
  * @description
895
947
  *
896
948
  * Use this directive to auto-bootstrap an application. Only
897
- * one directive can be used per HTML document. The directive
949
+ * one ngApp directive can be used per HTML document. The directive
898
950
  * designates the root of the application and is typically placed
899
951
  * at the root of the page.
900
952
  *
953
+ * The first ngApp found in the document will be auto-bootstrapped. To use multiple applications in an
954
+ * HTML document you must manually bootstrap them using {@link angular.bootstrap}.
955
+ * Applications cannot be nested.
956
+ *
901
957
  * In the example below if the `ngApp` directive would not be placed
902
958
  * on the `html` element then the document would not be compiled
903
959
  * and the `{{ 1+2 }}` would not be resolved to `3`.
@@ -963,12 +1019,15 @@ function angularInit(element, bootstrap) {
963
1019
  *
964
1020
  * See: {@link guide/bootstrap Bootstrap}
965
1021
  *
1022
+ * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.
1023
+ * They must use {@link api/ng.directive:ngApp ngApp}.
1024
+ *
966
1025
  * @param {Element} element DOM element which is the root of angular application.
967
1026
  * @param {Array<String|Function>=} modules an array of module declarations. See: {@link angular.module modules}
968
1027
  * @returns {AUTO.$injector} Returns the newly created injector for this app.
969
1028
  */
970
1029
  function bootstrap(element, modules) {
971
- var resumeBootstrapInternal = function() {
1030
+ var doBootstrap = function() {
972
1031
  element = jqLite(element);
973
1032
  modules = modules || [];
974
1033
  modules.unshift(['$provide', function($provide) {
@@ -990,7 +1049,7 @@ function bootstrap(element, modules) {
990
1049
  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
991
1050
 
992
1051
  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
993
- return resumeBootstrapInternal();
1052
+ return doBootstrap();
994
1053
  }
995
1054
 
996
1055
  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
@@ -998,7 +1057,7 @@ function bootstrap(element, modules) {
998
1057
  forEach(extraModules, function(module) {
999
1058
  modules.push(module);
1000
1059
  });
1001
- resumeBootstrapInternal();
1060
+ doBootstrap();
1002
1061
  };
1003
1062
  }
1004
1063
 
@@ -1022,9 +1081,10 @@ function bindJQuery() {
1022
1081
  injector: JQLitePrototype.injector,
1023
1082
  inheritedData: JQLitePrototype.inheritedData
1024
1083
  });
1025
- JQLitePatchJQueryRemove('remove', true);
1026
- JQLitePatchJQueryRemove('empty');
1027
- JQLitePatchJQueryRemove('html');
1084
+ // Method signature: JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)
1085
+ JQLitePatchJQueryRemove('remove', true, true, false);
1086
+ JQLitePatchJQueryRemove('empty', false, false, false);
1087
+ JQLitePatchJQueryRemove('html', false, false, true);
1028
1088
  } else {
1029
1089
  jqLite = JQLite;
1030
1090
  }
@@ -1051,6 +1111,33 @@ function assertArgFn(arg, name, acceptArrayAnnotation) {
1051
1111
  return arg;
1052
1112
  }
1053
1113
 
1114
+ /**
1115
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
1116
+ * @param {Object} obj starting object
1117
+ * @param {string} path path to traverse
1118
+ * @param {boolean=true} bindFnToScope
1119
+ * @returns value as accessible by path
1120
+ */
1121
+ //TODO(misko): this function needs to be removed
1122
+ function getter(obj, path, bindFnToScope) {
1123
+ if (!path) return obj;
1124
+ var keys = path.split('.');
1125
+ var key;
1126
+ var lastInstance = obj;
1127
+ var len = keys.length;
1128
+
1129
+ for (var i = 0; i < len; i++) {
1130
+ key = keys[i];
1131
+ if (obj) {
1132
+ obj = (lastInstance = obj)[key];
1133
+ }
1134
+ }
1135
+ if (!bindFnToScope && isFunction(obj)) {
1136
+ return bind(lastInstance, obj);
1137
+ }
1138
+ return obj;
1139
+ }
1140
+
1054
1141
  /**
1055
1142
  * @ngdoc interface
1056
1143
  * @name angular.Module
@@ -1081,8 +1168,8 @@ function setupModuleLoader(window) {
1081
1168
  *
1082
1169
  * # Module
1083
1170
  *
1084
- * A module is a collocation of services, directives, filters, and configuration information. Module
1085
- * is used to configure the {@link AUTO.$injector $injector}.
1171
+ * A module is a collection of services, directives, filters, and configuration information.
1172
+ * `angular.module` is used to configure the {@link AUTO.$injector $injector}.
1086
1173
  *
1087
1174
  * <pre>
1088
1175
  * // Create a new module
@@ -1313,11 +1400,11 @@ function setupModuleLoader(window) {
1313
1400
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
1314
1401
  */
1315
1402
  var version = {
1316
- full: '1.0.7', // all of these placeholder strings will be replaced by grunt's
1403
+ full: '1.0.8', // all of these placeholder strings will be replaced by grunt's
1317
1404
  major: 1, // package task
1318
1405
  minor: 0,
1319
- dot: 7,
1320
- codeName: 'monochromatic-rainbow'
1406
+ dot: 8,
1407
+ codeName: 'bubble-burst'
1321
1408
  };
1322
1409
 
1323
1410
 
@@ -1386,7 +1473,6 @@ function publishExternalAPI(angular){
1386
1473
  ngPluralize: ngPluralizeDirective,
1387
1474
  ngRepeat: ngRepeatDirective,
1388
1475
  ngShow: ngShowDirective,
1389
- ngSubmit: ngSubmitDirective,
1390
1476
  ngStyle: ngStyleDirective,
1391
1477
  ngSwitch: ngSwitchDirective,
1392
1478
  ngSwitchWhen: ngSwitchWhenDirective,
@@ -1456,7 +1542,8 @@ function publishExternalAPI(angular){
1456
1542
  * Note: All element references in Angular are always wrapped with jQuery or jqLite; they are never
1457
1543
  * raw DOM references.
1458
1544
  *
1459
- * ## Angular's jQuery lite provides the following methods:
1545
+ * ## Angular's jqLite
1546
+ * Angular's lite version of jQuery provides only the following jQuery methods:
1460
1547
  *
1461
1548
  * - [addClass()](http://api.jquery.com/addClass/)
1462
1549
  * - [after()](http://api.jquery.com/after/)
@@ -1489,8 +1576,14 @@ function publishExternalAPI(angular){
1489
1576
  * - [val()](http://api.jquery.com/val/)
1490
1577
  * - [wrap()](http://api.jquery.com/wrap/)
1491
1578
  *
1492
- * ## In addtion to the above, Angular provides additional methods to both jQuery and jQuery lite:
1579
+ * ## jQuery/jqLite Extras
1580
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
1493
1581
  *
1582
+ * ### Events
1583
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
1584
+ * on all DOM nodes being removed. This can be used to clean up and 3rd party bindings to the DOM
1585
+ * element before it is removed.
1586
+ * ### Methods
1494
1587
  * - `controller(name)` - retrieves the controller of the current element or its parent. By default
1495
1588
  * retrieves controller associated with the `ngController` directive. If `name` is provided as
1496
1589
  * camelCase directive name, then the controller for this directive will be retrieved (e.g.
@@ -1537,37 +1630,38 @@ function camelCase(name) {
1537
1630
  /////////////////////////////////////////////
1538
1631
  // jQuery mutation patch
1539
1632
  //
1540
- // In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a
1633
+ // In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a
1541
1634
  // $destroy event on all DOM nodes being removed.
1542
1635
  //
1543
1636
  /////////////////////////////////////////////
1544
1637
 
1545
- function JQLitePatchJQueryRemove(name, dispatchThis) {
1638
+ function JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {
1546
1639
  var originalJqFn = jQuery.fn[name];
1547
1640
  originalJqFn = originalJqFn.$original || originalJqFn;
1548
1641
  removePatch.$original = originalJqFn;
1549
1642
  jQuery.fn[name] = removePatch;
1550
1643
 
1551
- function removePatch() {
1552
- var list = [this],
1644
+ function removePatch(param) {
1645
+ var list = filterElems && param ? [this.filter(param)] : [this],
1553
1646
  fireEvent = dispatchThis,
1554
1647
  set, setIndex, setLength,
1555
- element, childIndex, childLength, children,
1556
- fns, events;
1557
-
1558
- while(list.length) {
1559
- set = list.shift();
1560
- for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {
1561
- element = jqLite(set[setIndex]);
1562
- if (fireEvent) {
1563
- element.triggerHandler('$destroy');
1564
- } else {
1565
- fireEvent = !fireEvent;
1566
- }
1567
- for(childIndex = 0, childLength = (children = element.children()).length;
1568
- childIndex < childLength;
1569
- childIndex++) {
1570
- list.push(jQuery(children[childIndex]));
1648
+ element, childIndex, childLength, children;
1649
+
1650
+ if (!getterIfNoArguments || param != null) {
1651
+ while(list.length) {
1652
+ set = list.shift();
1653
+ for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {
1654
+ element = jqLite(set[setIndex]);
1655
+ if (fireEvent) {
1656
+ element.triggerHandler('$destroy');
1657
+ } else {
1658
+ fireEvent = !fireEvent;
1659
+ }
1660
+ for(childIndex = 0, childLength = (children = element.children()).length;
1661
+ childIndex < childLength;
1662
+ childIndex++) {
1663
+ list.push(jQuery(children[childIndex]));
1664
+ }
1571
1665
  }
1572
1666
  }
1573
1667
  }
@@ -1627,7 +1721,7 @@ function JQLiteUnbind(element, type, fn) {
1627
1721
  removeEventListenerFn(element, type, events[type]);
1628
1722
  delete events[type];
1629
1723
  } else {
1630
- arrayRemove(events[type], fn);
1724
+ arrayRemove(events[type] || [], fn);
1631
1725
  }
1632
1726
  }
1633
1727
  }
@@ -1901,6 +1995,15 @@ forEach({
1901
1995
 
1902
1996
  val: function(element, value) {
1903
1997
  if (isUndefined(value)) {
1998
+ if (nodeName_(element) === 'SELECT' && element.multiple) {
1999
+ var result = [];
2000
+ forEach(element.options, function (option) {
2001
+ if (option.selected) {
2002
+ result.push(option.value || option.text);
2003
+ }
2004
+ });
2005
+ return result.length === 0 ? null : result;
2006
+ }
1904
2007
  return element.value;
1905
2008
  }
1906
2009
  element.value = value;
@@ -2118,12 +2221,7 @@ forEach({
2118
2221
  if (element.nodeType === 1) {
2119
2222
  var index = element.firstChild;
2120
2223
  forEach(new JQLite(node), function(child){
2121
- if (index) {
2122
- element.insertBefore(child, index);
2123
- } else {
2124
- element.appendChild(child);
2125
- index = child;
2126
- }
2224
+ element.insertBefore(child, index);
2127
2225
  });
2128
2226
  }
2129
2227
  },
@@ -3116,7 +3214,8 @@ function Browser(window, document, $log, $sniffer) {
3116
3214
  //////////////////////////////////////////////////////////////
3117
3215
 
3118
3216
  var lastBrowserUrl = location.href,
3119
- baseElement = document.find('base');
3217
+ baseElement = document.find('base'),
3218
+ replacedUrl = null;
3120
3219
 
3121
3220
  /**
3122
3221
  * @name ng.$browser#url
@@ -3151,14 +3250,21 @@ function Browser(window, document, $log, $sniffer) {
3151
3250
  baseElement.attr('href', baseElement.attr('href'));
3152
3251
  }
3153
3252
  } else {
3154
- if (replace) location.replace(url);
3155
- else location.href = url;
3253
+ if (replace) {
3254
+ location.replace(url);
3255
+ replacedUrl = url;
3256
+ } else {
3257
+ location.href = url;
3258
+ replacedUrl = null;
3259
+ }
3156
3260
  }
3157
3261
  return self;
3158
3262
  // getter
3159
3263
  } else {
3160
- // the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
3161
- return location.href.replace(/%27/g,"'");
3264
+ // - the replacedUrl is a workaround for an IE8-9 issue with location.replace method that doesn't update
3265
+ // location.href synchronously
3266
+ // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
3267
+ return replacedUrl || location.href.replace(/%27/g,"'");
3162
3268
  }
3163
3269
  };
3164
3270
 
@@ -3365,7 +3471,20 @@ function $BrowserProvider(){
3365
3471
  * @name ng.$cacheFactory
3366
3472
  *
3367
3473
  * @description
3368
- * Factory that constructs cache objects.
3474
+ * Factory that constructs cache objects and gives access to them.
3475
+ *
3476
+ * <pre>
3477
+ *
3478
+ * var cache = $cacheFactory('cacheId');
3479
+ * expect($cacheFactory.get('cacheId')).toBe(cache);
3480
+ * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
3481
+ *
3482
+ * cache.put("key", "value");
3483
+ * cache.put("another key", "another value");
3484
+ *
3485
+ * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); // Since we've specified no options on creation
3486
+ *
3487
+ * </pre>
3369
3488
  *
3370
3489
  *
3371
3490
  * @param {string} cacheId Name or id of the newly created cache.
@@ -3497,6 +3616,16 @@ function $CacheFactoryProvider() {
3497
3616
  }
3498
3617
 
3499
3618
 
3619
+ /**
3620
+ * @ngdoc method
3621
+ * @name ng.$cacheFactory#info
3622
+ * @methodOf ng.$cacheFactory
3623
+ *
3624
+ * @description
3625
+ * Get information about all the of the caches that have been created
3626
+ *
3627
+ * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
3628
+ */
3500
3629
  cacheFactory.info = function() {
3501
3630
  var info = {};
3502
3631
  forEach(caches, function(cache, cacheId) {
@@ -3506,6 +3635,17 @@ function $CacheFactoryProvider() {
3506
3635
  };
3507
3636
 
3508
3637
 
3638
+ /**
3639
+ * @ngdoc method
3640
+ * @name ng.$cacheFactory#get
3641
+ * @methodOf ng.$cacheFactory
3642
+ *
3643
+ * @description
3644
+ * Get access to a cache object by the `cacheId` used when it was created.
3645
+ *
3646
+ * @param {string} cacheId Name or id of a cache to access.
3647
+ * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
3648
+ */
3509
3649
  cacheFactory.get = function(cacheId) {
3510
3650
  return caches[cacheId];
3511
3651
  };
@@ -3520,8 +3660,44 @@ function $CacheFactoryProvider() {
3520
3660
  * @name ng.$templateCache
3521
3661
  *
3522
3662
  * @description
3523
- * Cache used for storing html templates.
3524
- *
3663
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You can
3664
+ * load templates directly into the cache in a `script` tag, or by consuming the `$templateCache`
3665
+ * service directly.
3666
+ *
3667
+ * Adding via the `script` tag:
3668
+ * <pre>
3669
+ * <html ng-app>
3670
+ * <head>
3671
+ * <script type="text/ng-template" id="templateId.html">
3672
+ * This is the content of the template
3673
+ * </script>
3674
+ * </head>
3675
+ * ...
3676
+ * </html>
3677
+ * </pre>
3678
+ *
3679
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of the document, but
3680
+ * it must be below the `ng-app` definition.
3681
+ *
3682
+ * Adding via the $templateCache service:
3683
+ *
3684
+ * <pre>
3685
+ * var myApp = angular.module('myApp', []);
3686
+ * myApp.run(function($templateCache) {
3687
+ * $templateCache.put('templateId.html', 'This is the content of the template');
3688
+ * });
3689
+ * </pre>
3690
+ *
3691
+ * To retrieve the template later, simply use it in your HTML:
3692
+ * <pre>
3693
+ * <div ng-include=" 'templateId.html' "></div>
3694
+ * </pre>
3695
+ *
3696
+ * or get it via Javascript:
3697
+ * <pre>
3698
+ * $templateCache.get('templateId.html')
3699
+ * </pre>
3700
+ *
3525
3701
  * See {@link ng.$cacheFactory $cacheFactory}.
3526
3702
  *
3527
3703
  */
@@ -3697,11 +3873,11 @@ function $CompileProvider($provide) {
3697
3873
  * @function
3698
3874
  *
3699
3875
  * @description
3700
- * Register a new directives with the compiler.
3876
+ * Register a new directive with the compiler.
3701
3877
  *
3702
3878
  * @param {string} name Name of the directive in camel-case. (ie <code>ngBind</code> which will match as
3703
3879
  * <code>ng-bind</code>).
3704
- * @param {function} directiveFactory An injectable directive factroy function. See {@link guide/directive} for more
3880
+ * @param {function|Array} directiveFactory An injectable directive factory function. See {@link guide/directive} for more
3705
3881
  * info.
3706
3882
  * @returns {ng.$compileProvider} Self for chaining.
3707
3883
  */
@@ -3824,7 +4000,7 @@ function $CompileProvider($provide) {
3824
4000
 
3825
4001
  // href property always returns normalized absolute url, so we can match against that
3826
4002
  normalizedVal = urlSanitizationNode.href;
3827
- if (!normalizedVal.match(urlSanitizationWhitelist)) {
4003
+ if (normalizedVal !== '' && !normalizedVal.match(urlSanitizationWhitelist)) {
3828
4004
  this[key] = value = 'unsafe:' + normalizedVal;
3829
4005
  }
3830
4006
  }
@@ -4048,7 +4224,7 @@ function $CompileProvider($provide) {
4048
4224
  for (var attr, name, nName, value, nAttrs = node.attributes,
4049
4225
  j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
4050
4226
  attr = nAttrs[j];
4051
- if (attr.specified) {
4227
+ if (!msie || msie >= 8 || attr.specified) {
4052
4228
  name = attr.name;
4053
4229
  nName = directiveNormalize(name.toLowerCase());
4054
4230
  attrsMap[nName] = name;
@@ -6427,33 +6603,6 @@ function setter(obj, path, setValue) {
6427
6603
  return setValue;
6428
6604
  }
6429
6605
 
6430
- /**
6431
- * Return the value accesible from the object by path. Any undefined traversals are ignored
6432
- * @param {Object} obj starting object
6433
- * @param {string} path path to traverse
6434
- * @param {boolean=true} bindFnToScope
6435
- * @returns value as accesbile by path
6436
- */
6437
- //TODO(misko): this function needs to be removed
6438
- function getter(obj, path, bindFnToScope) {
6439
- if (!path) return obj;
6440
- var keys = path.split('.');
6441
- var key;
6442
- var lastInstance = obj;
6443
- var len = keys.length;
6444
-
6445
- for (var i = 0; i < len; i++) {
6446
- key = keys[i];
6447
- if (obj) {
6448
- obj = (lastInstance = obj)[key];
6449
- }
6450
- }
6451
- if (!bindFnToScope && isFunction(obj)) {
6452
- return bind(lastInstance, obj);
6453
- }
6454
- return obj;
6455
- }
6456
-
6457
6606
  var getterFnCache = {};
6458
6607
 
6459
6608
  /**
@@ -6715,8 +6864,8 @@ function $ParseProvider() {
6715
6864
  * **Methods**
6716
6865
  *
6717
6866
  * - `then(successCallback, errorCallback)` – regardless of when the promise was or will be resolved
6718
- * or rejected calls one of the success or error callbacks asynchronously as soon as the result
6719
- * is available. The callbacks are called with a single argument the result or rejection reason.
6867
+ * or rejected, `then` calls one of the success or error callbacks asynchronously as soon as the result
6868
+ * is available. The callbacks are called with a single argument: the result or rejection reason.
6720
6869
  *
6721
6870
  * This method *returns a new promise* which is resolved or rejected via the return value of the
6722
6871
  * `successCallback` or `errorCallback`.
@@ -6724,7 +6873,7 @@ function $ParseProvider() {
6724
6873
  *
6725
6874
  * # Chaining promises
6726
6875
  *
6727
- * Because calling `then` api of a promise returns a new derived promise, it is easily possible
6876
+ * Because calling the `then` method of a promise returns a new derived promise, it is easily possible
6728
6877
  * to create a chain of promises:
6729
6878
  *
6730
6879
  * <pre>
@@ -6732,13 +6881,13 @@ function $ParseProvider() {
6732
6881
  * return result + 1;
6733
6882
  * });
6734
6883
  *
6735
- * // promiseB will be resolved immediately after promiseA is resolved and its value will be
6736
- * // the result of promiseA incremented by 1
6884
+ * // promiseB will be resolved immediately after promiseA is resolved and its value
6885
+ * // will be the result of promiseA incremented by 1
6737
6886
  * </pre>
6738
6887
  *
6739
6888
  * It is possible to create chains of any length and since a promise can be resolved with another
6740
6889
  * promise (which will defer its resolution further), it is possible to pause/defer resolution of
6741
- * the promises at any point in the chain. This makes it possible to implement powerful apis like
6890
+ * the promises at any point in the chain. This makes it possible to implement powerful APIs like
6742
6891
  * $http's response interceptors.
6743
6892
  *
6744
6893
  *
@@ -6845,8 +6994,8 @@ function qFactory(nextTick, exceptionHandler) {
6845
6994
  try {
6846
6995
  result.resolve((callback || defaultCallback)(value));
6847
6996
  } catch(e) {
6848
- exceptionHandler(e);
6849
6997
  result.reject(e);
6998
+ exceptionHandler(e);
6850
6999
  }
6851
7000
  };
6852
7001
 
@@ -6854,8 +7003,8 @@ function qFactory(nextTick, exceptionHandler) {
6854
7003
  try {
6855
7004
  result.resolve((errback || defaultErrback)(reason));
6856
7005
  } catch(e) {
6857
- exceptionHandler(e);
6858
7006
  result.reject(e);
7007
+ exceptionHandler(e);
6859
7008
  }
6860
7009
  };
6861
7010
 
@@ -7064,8 +7213,8 @@ function $RouteProvider(){
7064
7213
  * route definition.
7065
7214
  *
7066
7215
  * `path` can contain named groups starting with a colon (`:name`). All characters up to the
7067
- * next slash are matched and stored in `$routeParams` under the given `name` when the route
7068
- * matches.
7216
+ * next slash are matched and stored in `$routeParams` under the given `name` after the route
7217
+ * is resolved.
7069
7218
  *
7070
7219
  * @param {Object} route Mapping information to be assigned to `$route.current` on route
7071
7220
  * match.
@@ -7090,7 +7239,9 @@ function $RouteProvider(){
7090
7239
  * - `factory` - `{string|function}`: If `string` then it is an alias for a service.
7091
7240
  * Otherwise if function, then it is {@link api/AUTO.$injector#invoke injected}
7092
7241
  * and the return value is treated as the dependency. If the result is a promise, it is resolved
7093
- * before its value is injected into the controller.
7242
+ * before its value is injected into the controller. Be aware that `ngRoute.$routeParams` will
7243
+ * still refer to the previous route within these resolve functions. Use `$route.current.params`
7244
+ * to access the new route parameters, instead.
7094
7245
  *
7095
7246
  * - `redirectTo` – {(string|function())=} – value to update
7096
7247
  * {@link ng.$location $location} path with and trigger route redirection.
@@ -7525,6 +7676,10 @@ function $RouteProvider(){
7525
7676
  * The service guarantees that the identity of the `$routeParams` object will remain unchanged
7526
7677
  * (but its properties will likely change) even when a route change occurs.
7527
7678
  *
7679
+ * Note that the `$routeParams` are only updated *after* a route change completes successfully.
7680
+ * This means that you cannot rely on `$routeParams` being correct in route resolve functions.
7681
+ * Instead you can use `$route.current.params` to access the new route's parameters.
7682
+ *
7528
7683
  * @example
7529
7684
  * <pre>
7530
7685
  * // Given:
@@ -7932,7 +8087,7 @@ function $RootScopeProvider(){
7932
8087
  watch = watchers[length];
7933
8088
  // Most common watches are on primitives, in which case we can short
7934
8089
  // circuit it with === operator, only when === fails do we use .equals
7935
- if ((value = watch.get(current)) !== (last = watch.last) &&
8090
+ if (watch && (value = watch.get(current)) !== (last = watch.last) &&
7936
8091
  !(watch.eq
7937
8092
  ? equals(value, last)
7938
8093
  : (typeof value == 'number' && typeof last == 'number'
@@ -7985,6 +8140,9 @@ function $RootScopeProvider(){
7985
8140
  *
7986
8141
  * @description
7987
8142
  * Broadcasted when a scope and its children are being destroyed.
8143
+ *
8144
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
8145
+ * clean up DOM bindings before an element is removed from the DOM.
7988
8146
  */
7989
8147
 
7990
8148
  /**
@@ -8006,6 +8164,9 @@ function $RootScopeProvider(){
8006
8164
  * Just before a scope is destroyed a `$destroy` event is broadcasted on this scope.
8007
8165
  * Application code can register a `$destroy` event handler that will give it chance to
8008
8166
  * perform any necessary cleanup.
8167
+ *
8168
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
8169
+ * clean up DOM bindings before an element is removed from the DOM.
8009
8170
  */
8010
8171
  $destroy: function() {
8011
8172
  // we can't destroy the root scope or a scope that has been already destroyed
@@ -8410,8 +8571,10 @@ function $SnifferProvider() {
8410
8571
  * it is a global variable. In angular we always refer to it through the
8411
8572
  * `$window` service, so it may be overriden, removed or mocked for testing.
8412
8573
  *
8413
- * All expressions are evaluated with respect to current scope so they don't
8414
- * suffer from window globality.
8574
+ * Expressions, like the one defined for the `ngClick` directive in the example
8575
+ * below, are evaluated with respect to the current scope. Therefore, there is
8576
+ * no risk of inadvertently coding in a dependency on a global value in such an
8577
+ * expression.
8415
8578
  *
8416
8579
  * @example
8417
8580
  <doc:example>
@@ -8731,6 +8894,7 @@ function $HttpProvider() {
8731
8894
  * return function(promise) {
8732
8895
  * return promise.then(function(response) {
8733
8896
  * // do something on success
8897
+ * return response;
8734
8898
  * }, function(response) {
8735
8899
  * // do something on error
8736
8900
  * if (canRecover(response)) {
@@ -8922,17 +9086,40 @@ function $HttpProvider() {
8922
9086
 
8923
9087
  var reqTransformFn = config.transformRequest || $config.transformRequest,
8924
9088
  respTransformFn = config.transformResponse || $config.transformResponse,
8925
- defHeaders = $config.headers,
8926
- reqHeaders = extend({'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']},
8927
- defHeaders.common, defHeaders[lowercase(config.method)], config.headers),
8928
- reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn),
9089
+ reqHeaders = extend({}, config.headers),
9090
+ defHeaders = extend(
9091
+ {'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']},
9092
+ $config.headers.common,
9093
+ $config.headers[lowercase(config.method)]
9094
+ ),
9095
+ reqData,
9096
+ defHeaderName, lowercaseDefHeaderName, headerName,
8929
9097
  promise;
8930
9098
 
9099
+ // using for-in instead of forEach to avoid unecessary iteration after header has been found
9100
+ defaultHeadersIteration:
9101
+ for(defHeaderName in defHeaders) {
9102
+ lowercaseDefHeaderName = lowercase(defHeaderName);
9103
+ for(headerName in config.headers) {
9104
+ if (lowercase(headerName) === lowercaseDefHeaderName) {
9105
+ continue defaultHeadersIteration;
9106
+ }
9107
+ }
9108
+ reqHeaders[defHeaderName] = defHeaders[defHeaderName];
9109
+ }
9110
+
8931
9111
  // strip content-type if data is undefined
8932
9112
  if (isUndefined(config.data)) {
8933
- delete reqHeaders['Content-Type'];
9113
+ for(var header in reqHeaders) {
9114
+ if (lowercase(header) === 'content-type') {
9115
+ delete reqHeaders[header];
9116
+ break;
9117
+ }
9118
+ }
8934
9119
  }
8935
9120
 
9121
+ reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn);
9122
+
8936
9123
  // send request
8937
9124
  promise = sendReq(config, reqData, reqHeaders);
8938
9125
 
@@ -9475,17 +9662,15 @@ function $TimeoutProvider() {
9475
9662
  deferred.reject(e);
9476
9663
  $exceptionHandler(e);
9477
9664
  }
9665
+ finally {
9666
+ delete deferreds[promise.$$timeoutId];
9667
+ }
9478
9668
 
9479
9669
  if (!skipApply) $rootScope.$apply();
9480
9670
  }, delay);
9481
9671
 
9482
- cleanup = function() {
9483
- delete deferreds[promise.$$timeoutId];
9484
- };
9485
-
9486
9672
  promise.$$timeoutId = timeoutId;
9487
9673
  deferreds[timeoutId] = deferred;
9488
- promise.then(cleanup, cleanup);
9489
9674
 
9490
9675
  return promise;
9491
9676
  }
@@ -9507,6 +9692,7 @@ function $TimeoutProvider() {
9507
9692
  timeout.cancel = function(promise) {
9508
9693
  if (promise && promise.$$timeoutId in deferreds) {
9509
9694
  deferreds[promise.$$timeoutId].reject('canceled');
9695
+ delete deferreds[promise.$$timeoutId];
9510
9696
  return $browser.defer.cancel(promise.$$timeoutId);
9511
9697
  }
9512
9698
  return false;
@@ -9843,7 +10029,9 @@ function currencyFilter($locale) {
9843
10029
  * If the input is not a number an empty string is returned.
9844
10030
  *
9845
10031
  * @param {number|string} number Number to format.
9846
- * @param {(number|string)=} [fractionSize=2] Number of decimal places to round the number to.
10032
+ * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
10033
+ * If this is not provided then the fraction size is computed from the current locale's number
10034
+ * formatting pattern. In the case of the default locale, it will be 3.
9847
10035
  * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
9848
10036
  *
9849
10037
  * @example
@@ -9950,6 +10138,11 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
9950
10138
  }
9951
10139
 
9952
10140
  if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
10141
+ } else {
10142
+
10143
+ if (fractionSize > 0 && number > -1 && number < 1) {
10144
+ formatedText = number.toFixed(fractionSize);
10145
+ }
9953
10146
  }
9954
10147
 
9955
10148
  parts.push(isNegative ? pattern.negPre : pattern.posPre);
@@ -10073,7 +10266,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
10073
10266
  * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm)
10074
10267
  * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale
10075
10268
  * (e.g. Friday, September 3, 2010)
10076
- * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010
10269
+ * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
10077
10270
  * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
10078
10271
  * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
10079
10272
  * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)
@@ -10081,7 +10274,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
10081
10274
  *
10082
10275
  * `format` string can contain literal values. These need to be quoted with single quotes (e.g.
10083
10276
  * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence
10084
- * (e.g. `"h o''clock"`).
10277
+ * (e.g. `"h 'o''clock'"`).
10085
10278
  *
10086
10279
  * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
10087
10280
  * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its
@@ -10448,8 +10641,10 @@ function orderByFilter($parse){
10448
10641
  var t1 = typeof v1;
10449
10642
  var t2 = typeof v2;
10450
10643
  if (t1 == t2) {
10451
- if (t1 == "string") v1 = v1.toLowerCase();
10452
- if (t1 == "string") v2 = v2.toLowerCase();
10644
+ if (t1 == "string") {
10645
+ v1 = v1.toLowerCase();
10646
+ v2 = v2.toLowerCase();
10647
+ }
10453
10648
  if (v1 === v2) return 0;
10454
10649
  return v1 < v2 ? -1 : 1;
10455
10650
  } else {
@@ -10869,7 +11064,7 @@ function FormController(element, attrs) {
10869
11064
  errors = form.$error = {};
10870
11065
 
10871
11066
  // init state
10872
- form.$name = attrs.name;
11067
+ form.$name = attrs.name || attrs.ngForm;
10873
11068
  form.$dirty = false;
10874
11069
  form.$pristine = true;
10875
11070
  form.$valid = true;
@@ -10889,12 +11084,32 @@ function FormController(element, attrs) {
10889
11084
  addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);
10890
11085
  }
10891
11086
 
11087
+ /**
11088
+ * @ngdoc function
11089
+ * @name ng.directive:form.FormController#$addControl
11090
+ * @methodOf ng.directive:form.FormController
11091
+ *
11092
+ * @description
11093
+ * Register a control with the form.
11094
+ *
11095
+ * Input elements using ngModelController do this automatically when they are linked.
11096
+ */
10892
11097
  form.$addControl = function(control) {
10893
11098
  if (control.$name && !form.hasOwnProperty(control.$name)) {
10894
11099
  form[control.$name] = control;
10895
11100
  }
10896
11101
  };
10897
11102
 
11103
+ /**
11104
+ * @ngdoc function
11105
+ * @name ng.directive:form.FormController#$removeControl
11106
+ * @methodOf ng.directive:form.FormController
11107
+ *
11108
+ * @description
11109
+ * Deregister a control from the form.
11110
+ *
11111
+ * Input elements using ngModelController do this automatically when they are destroyed.
11112
+ */
10898
11113
  form.$removeControl = function(control) {
10899
11114
  if (control.$name && form[control.$name] === control) {
10900
11115
  delete form[control.$name];
@@ -10904,6 +11119,16 @@ function FormController(element, attrs) {
10904
11119
  });
10905
11120
  };
10906
11121
 
11122
+ /**
11123
+ * @ngdoc function
11124
+ * @name ng.directive:form.FormController#$setValidity
11125
+ * @methodOf ng.directive:form.FormController
11126
+ *
11127
+ * @description
11128
+ * Sets the validity of a form control.
11129
+ *
11130
+ * This method will also propagate to parent forms.
11131
+ */
10907
11132
  form.$setValidity = function(validationToken, isValid, control) {
10908
11133
  var queue = errors[validationToken];
10909
11134
 
@@ -10942,6 +11167,17 @@ function FormController(element, attrs) {
10942
11167
  }
10943
11168
  };
10944
11169
 
11170
+ /**
11171
+ * @ngdoc function
11172
+ * @name ng.directive:form.FormController#$setDirty
11173
+ * @methodOf ng.directive:form.FormController
11174
+ *
11175
+ * @description
11176
+ * Sets the form to a dirty state.
11177
+ *
11178
+ * This method can be called to add the 'ng-dirty' class and set the form to a dirty
11179
+ * state (ng-dirty class). This method will also propagate to parent forms.
11180
+ */
10945
11181
  form.$setDirty = function() {
10946
11182
  element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS);
10947
11183
  form.$dirty = true;
@@ -11118,7 +11354,7 @@ var formDirective = formDirectiveFactory();
11118
11354
  var ngFormDirective = formDirectiveFactory(true);
11119
11355
 
11120
11356
  var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
11121
- var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;
11357
+ var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/;
11122
11358
  var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
11123
11359
 
11124
11360
  var inputType = {
@@ -11229,9 +11465,9 @@ var inputType = {
11229
11465
  <form name="myForm" ng-controller="Ctrl">
11230
11466
  Number: <input type="number" name="input" ng-model="value"
11231
11467
  min="0" max="99" required>
11232
- <span class="error" ng-show="myForm.list.$error.required">
11468
+ <span class="error" ng-show="myForm.input.$error.required">
11233
11469
  Required!</span>
11234
- <span class="error" ng-show="myForm.list.$error.number">
11470
+ <span class="error" ng-show="myForm.input.$error.number">
11235
11471
  Not valid number!</span>
11236
11472
  <tt>value = {{value}}</tt><br/>
11237
11473
  <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
@@ -11352,6 +11588,8 @@ var inputType = {
11352
11588
  * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
11353
11589
  * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
11354
11590
  * patterns defined as scope expressions.
11591
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
11592
+ * interaction with the input element.
11355
11593
  *
11356
11594
  * @example
11357
11595
  <doc:example>
@@ -11910,12 +12148,25 @@ var VALID_CLASS = 'ng-valid',
11910
12148
  *
11911
12149
  * @property {string} $viewValue Actual string value in the view.
11912
12150
  * @property {*} $modelValue The value in the model, that the control is bound to.
11913
- * @property {Array.<Function>} $parsers Whenever the control reads value from the DOM, it executes
11914
- * all of these functions to sanitize / convert the value as well as validate.
11915
- *
11916
- * @property {Array.<Function>} $formatters Whenever the model value changes, it executes all of
11917
- * these functions to convert the value as well as validate.
11918
- *
12151
+ * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
12152
+ the control reads value from the DOM. Each function is called, in turn, passing the value
12153
+ through to the next. Used to sanitize / convert the value as well as validation.
12154
+
12155
+ For validation, the parsers should update the validity state using
12156
+ {@link ng.directive:ngModel.NgModelController#$setValidity $setValidity()},
12157
+ and return `undefined` for invalid values.
12158
+ *
12159
+ * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
12160
+ * the model value changes. Each function is called, in turn, passing the value through to the
12161
+ * next. Used to format / convert values for display in the control and validation.
12162
+ * <pre>
12163
+ * function formatter(value) {
12164
+ * if (value) {
12165
+ * return value.toUpperCase();
12166
+ * }
12167
+ * }
12168
+ * ngModel.$formatters.push(formatter);
12169
+ * </pre>
11919
12170
  * @property {Object} $error An bject hash with all errors as keys.
11920
12171
  *
11921
12172
  * @property {boolean} $pristine True if user has not interacted with the control yet.
@@ -11930,6 +12181,10 @@ var VALID_CLASS = 'ng-valid',
11930
12181
  * specifically does not contain any logic which deals with DOM rendering or listening to
11931
12182
  * DOM events. The `NgModelController` is meant to be extended by other directives where, the
11932
12183
  * directive provides DOM manipulation and the `NgModelController` provides the data-binding.
12184
+ * Note that you cannot use `NgModelController` in a directive with an isolated scope,
12185
+ * as, in that case, the `ng-model` value gets put into the isolated scope and does not get
12186
+ * propogated to the parent scope.
12187
+ *
11933
12188
  *
11934
12189
  * This example shows how to use `NgModelController` with a custom control to achieve
11935
12190
  * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
@@ -11970,7 +12225,13 @@ var VALID_CLASS = 'ng-valid',
11970
12225
 
11971
12226
  // Write data to the model
11972
12227
  function read() {
11973
- ngModel.$setViewValue(element.html());
12228
+ var html = element.html();
12229
+ // When we clear the content editable the browser leaves a <br> behind
12230
+ // If strip-br attribute is provided then we strip this out
12231
+ if( attrs.stripBr && html == '<br>' ) {
12232
+ html = '';
12233
+ }
12234
+ ngModel.$setViewValue(html);
11974
12235
  }
11975
12236
  }
11976
12237
  };
@@ -11980,6 +12241,7 @@ var VALID_CLASS = 'ng-valid',
11980
12241
  <form name="myForm">
11981
12242
  <div contenteditable
11982
12243
  name="myWidget" ng-model="userContent"
12244
+ strip-br="true"
11983
12245
  required>Change me!</div>
11984
12246
  <span ng-show="myForm.myWidget.$error.required">Required!</span>
11985
12247
  <hr>
@@ -12102,8 +12364,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
12102
12364
  * For example {@link ng.directive:input input} or
12103
12365
  * {@link ng.directive:select select} directives call it.
12104
12366
  *
12105
- * It internally calls all `parsers` and if resulted value is valid, updates the model and
12106
- * calls all registered change listeners.
12367
+ * It internally calls all `$parsers` (including validators) and updates the `$modelValue` and the actual model path.
12368
+ * Lastly it calls all registered change listeners.
12107
12369
  *
12108
12370
  * @param {string} value Value from the view.
12109
12371
  */
@@ -12168,7 +12430,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
12168
12430
  * @element input
12169
12431
  *
12170
12432
  * @description
12171
- * Is directive that tells Angular to do two-way data binding. It works together with `input`,
12433
+ * Is a directive that tells Angular to do two-way data binding. It works together with `input`,
12172
12434
  * `select`, `textarea`. You can easily write your own directives to use `ngModel` as well.
12173
12435
  *
12174
12436
  * `ngModel` is responsible for:
@@ -12180,6 +12442,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
12180
12442
  * - setting related css class onto the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`),
12181
12443
  * - register the control with parent {@link ng.directive:form form}.
12182
12444
  *
12445
+ * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
12446
+ * current scope. If the property doesn't already exist on this scope, it will be created
12447
+ * implicitly and added to the scope.
12448
+ *
12183
12449
  * For basic examples, how to use `ngModel`, see:
12184
12450
  *
12185
12451
  * - {@link ng.directive:input input}
@@ -12320,8 +12586,9 @@ var requiredDirective = function() {
12320
12586
  </script>
12321
12587
  <form name="myForm" ng-controller="Ctrl">
12322
12588
  List: <input name="namesInput" ng-model="names" ng-list required>
12323
- <span class="error" ng-show="myForm.list.$error.required">
12589
+ <span class="error" ng-show="myForm.namesInput.$error.required">
12324
12590
  Required!</span>
12591
+ <br>
12325
12592
  <tt>names = {{names}}</tt><br/>
12326
12593
  <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
12327
12594
  <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
@@ -12333,12 +12600,14 @@ var requiredDirective = function() {
12333
12600
  it('should initialize to model', function() {
12334
12601
  expect(binding('names')).toEqual('["igor","misko","vojta"]');
12335
12602
  expect(binding('myForm.namesInput.$valid')).toEqual('true');
12603
+ expect(element('span.error').css('display')).toBe('none');
12336
12604
  });
12337
12605
 
12338
12606
  it('should be invalid if empty', function() {
12339
12607
  input('names').enter('');
12340
12608
  expect(binding('names')).toEqual('[]');
12341
12609
  expect(binding('myForm.namesInput.$valid')).toEqual('false');
12610
+ expect(element('span.error').css('display')).not().toBe('none');
12342
12611
  });
12343
12612
  </doc:scenario>
12344
12613
  </doc:example>
@@ -12388,7 +12657,7 @@ var ngValueDirective = function() {
12388
12657
  } else {
12389
12658
  return function(scope, elm, attr) {
12390
12659
  scope.$watch(attr.ngValue, function valueWatchAction(value) {
12391
- attr.$set('value', value, false);
12660
+ attr.$set('value', value);
12392
12661
  });
12393
12662
  };
12394
12663
  }
@@ -12408,10 +12677,9 @@ var ngValueDirective = function() {
12408
12677
  * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
12409
12678
  * `{{ expression }}` which is similar but less verbose.
12410
12679
  *
12411
- * One scenario in which the use of `ngBind` is preferred over `{{ expression }}` binding is when
12412
- * it's desirable to put bindings into template that is momentarily displayed by the browser in its
12413
- * raw state before Angular compiles it. Since `ngBind` is an element attribute, it makes the
12414
- * bindings invisible to the user while the page is loading.
12680
+ * It is preferrable to use `ngBind` instead of `{{ expression }}` when a template is momentarily
12681
+ * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
12682
+ * element attribute, it makes the bindings invisible to the user while the page is loading.
12415
12683
  *
12416
12684
  * An alternative solution to this problem would be using the
12417
12685
  * {@link ng.directive:ngCloak ngCloak} directive.
@@ -12457,10 +12725,11 @@ var ngBindDirective = ngDirective(function(scope, element, attr) {
12457
12725
  *
12458
12726
  * @description
12459
12727
  * The `ngBindTemplate` directive specifies that the element
12460
- * text should be replaced with the template in ngBindTemplate.
12461
- * Unlike ngBind the ngBindTemplate can contain multiple `{{` `}}`
12462
- * expressions. (This is required since some HTML elements
12463
- * can not have SPAN elements such as TITLE, or OPTION to name a few.)
12728
+ * text content should be replaced with the interpolation of the template
12729
+ * in the `ngBindTemplate` attribute.
12730
+ * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
12731
+ * expressions. This directive is needed since some HTML elements
12732
+ * (such as TITLE and OPTION) cannot contain SPAN elements.
12464
12733
  *
12465
12734
  * @element ANY
12466
12735
  * @param {string} ngBindTemplate template of form
@@ -12596,8 +12865,8 @@ function classDirective(name, selector) {
12596
12865
  * @name ng.directive:ngClass
12597
12866
  *
12598
12867
  * @description
12599
- * The `ngClass` allows you to set CSS class on HTML element dynamically by databinding an
12600
- * expression that represents all classes to be added.
12868
+ * The `ngClass` allows you to set CSS classes on HTML an element, dynamically, by databinding
12869
+ * an expression that represents all classes to be added.
12601
12870
  *
12602
12871
  * The directive won't add duplicate classes if a particular class was already set.
12603
12872
  *
@@ -12607,7 +12876,9 @@ function classDirective(name, selector) {
12607
12876
  * @element ANY
12608
12877
  * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
12609
12878
  * of the evaluation can be a string representing space delimited class
12610
- * names, an array, or a map of class names to boolean values.
12879
+ * names, an array, or a map of class names to boolean values. In the case of a map, the
12880
+ * names of the properties whose values are truthy will be added as css classes to the
12881
+ * element.
12611
12882
  *
12612
12883
  * @example
12613
12884
  <example>
@@ -12753,7 +13024,7 @@ var ngClassEvenDirective = classDirective('Even', 1);
12753
13024
  *
12754
13025
  * <pre>
12755
13026
  * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
12756
- * display: none;
13027
+ * display: none !important;
12757
13028
  * }
12758
13029
  * </pre>
12759
13030
  *
@@ -12821,11 +13092,9 @@ var ngCloakDirective = ngDirective({
12821
13092
  *
12822
13093
  * @example
12823
13094
  * Here is a simple form for editing user contact information. Adding, removing, clearing, and
12824
- * greeting are methods declared on the controller (see source tab). These methods can
12825
- * easily be called from the angular markup. Notice that the scope becomes the `this` for the
12826
- * controller's instance. This allows for easy access to the view data from the controller. Also
12827
- * notice that any changes to the data are automatically reflected in the View without the need
12828
- * for a manual update.
13095
+ * greeting are methods declared on the $scope by the controller (see source tab). These methods can
13096
+ * easily be called from the angular markup. Notice that any changes to the data are automatically
13097
+ * reflected in the View without the need for a manual update.
12829
13098
  <doc:example>
12830
13099
  <doc:source>
12831
13100
  <script>
@@ -12976,7 +13245,7 @@ var ngCspDirective = ['$sniffer', function($sniffer) {
12976
13245
  */
12977
13246
  var ngEventDirectives = {};
12978
13247
  forEach(
12979
- 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' '),
13248
+ 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave submit'.split(' '),
12980
13249
  function(name) {
12981
13250
  var directiveName = directiveNormalize('ng-' + name);
12982
13251
  ngEventDirectives[directiveName] = ['$parse', function($parse) {
@@ -13103,6 +13372,54 @@ forEach(
13103
13372
  */
13104
13373
 
13105
13374
 
13375
+ /**
13376
+ * @ngdoc directive
13377
+ * @name ng.directive:ngKeydown
13378
+ *
13379
+ * @description
13380
+ * Specify custom behavior on keydown event.
13381
+ *
13382
+ * @element ANY
13383
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
13384
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
13385
+ *
13386
+ * @example
13387
+ * See {@link ng.directive:ngClick ngClick}
13388
+ */
13389
+
13390
+
13391
+ /**
13392
+ * @ngdoc directive
13393
+ * @name ng.directive:ngKeyup
13394
+ *
13395
+ * @description
13396
+ * Specify custom behavior on keyup event.
13397
+ *
13398
+ * @element ANY
13399
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
13400
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
13401
+ *
13402
+ * @example
13403
+ * See {@link ng.directive:ngClick ngClick}
13404
+ */
13405
+
13406
+
13407
+ /**
13408
+ * @ngdoc directive
13409
+ * @name ng.directive:ngKeypress
13410
+ *
13411
+ * @description
13412
+ * Specify custom behavior on keypress event.
13413
+ *
13414
+ * @element ANY
13415
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
13416
+ * keypress. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
13417
+ *
13418
+ * @example
13419
+ * See {@link ng.directive:ngClick ngClick}
13420
+ */
13421
+
13422
+
13106
13423
  /**
13107
13424
  * @ngdoc directive
13108
13425
  * @name ng.directive:ngSubmit
@@ -13111,10 +13428,11 @@ forEach(
13111
13428
  * Enables binding angular expressions to onsubmit events.
13112
13429
  *
13113
13430
  * Additionally it prevents the default action (which for form means sending the request to the
13114
- * server and reloading the current page).
13431
+ * server and reloading the current page) **but only if the form does not contain an `action`
13432
+ * attribute**.
13115
13433
  *
13116
13434
  * @element form
13117
- * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
13435
+ * @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`)
13118
13436
  *
13119
13437
  * @example
13120
13438
  <doc:example>
@@ -13154,11 +13472,6 @@ forEach(
13154
13472
  </doc:scenario>
13155
13473
  </doc:example>
13156
13474
  */
13157
- var ngSubmitDirective = ngDirective(function(scope, element, attrs) {
13158
- element.bind('submit', function() {
13159
- scope.$apply(attrs.ngSubmit);
13160
- });
13161
- });
13162
13475
 
13163
13476
  /**
13164
13477
  * @ngdoc directive
@@ -13366,7 +13679,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
13366
13679
  * @description
13367
13680
  * # Overview
13368
13681
  * `ngPluralize` is a directive that displays messages according to en-US localization rules.
13369
- * These rules are bundled with angular.js and the rules can be overridden
13682
+ * These rules are bundled with angular.js, but can be overridden
13370
13683
  * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
13371
13684
  * by specifying the mappings between
13372
13685
  * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
@@ -13379,8 +13692,8 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
13379
13692
  *
13380
13693
  * While a pural category may match many numbers (for example, in en-US locale, "other" can match
13381
13694
  * any number that is not 1), an explicit number rule can only match one number. For example, the
13382
- * explicit number rule for "3" matches the number 3. You will see the use of plural categories
13383
- * and explicit number rules throughout later parts of this documentation.
13695
+ * explicit number rule for "3" matches the number 3. There are examples of plural categories
13696
+ * and explicit number rules throughout the rest of this documentation.
13384
13697
  *
13385
13698
  * # Configuring ngPluralize
13386
13699
  * You configure ngPluralize by providing 2 attributes: `count` and `when`.
@@ -13390,8 +13703,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
13390
13703
  * Angular expression}; these are evaluated on the current scope for its bound value.
13391
13704
  *
13392
13705
  * The `when` attribute specifies the mappings between plural categories and the actual
13393
- * string to be displayed. The value of the attribute should be a JSON object so that Angular
13394
- * can interpret it correctly.
13706
+ * string to be displayed. The value of the attribute should be a JSON object.
13395
13707
  *
13396
13708
  * The following example shows how to configure ngPluralize:
13397
13709
  *
@@ -14015,8 +14327,7 @@ var ngSwitchDefaultDirective = ngDirective({
14015
14327
  return {
14016
14328
  restrict: 'E',
14017
14329
  transclude: true,
14018
- scope: 'isolate',
14019
- locals: { title:'bind' },
14330
+ scope: { title:'@' },
14020
14331
  template: '<div style="border: 1px solid black;">' +
14021
14332
  '<div style="background-color: gray">{{title}}</div>' +
14022
14333
  '<div ng-transclude></div>' +
@@ -14271,8 +14582,8 @@ var scriptDirective = ['$templateCache', function($templateCache) {
14271
14582
  * Optionally `ngOptions` attribute can be used to dynamically generate a list of `<option>`
14272
14583
  * elements for a `<select>` element using an array or an object obtained by evaluating the
14273
14584
  * `ngOptions` expression.
14274
- *˝˝
14275
- * When an item in the select menu is select, the value of array element or object property
14585
+ *
14586
+ * When an item in the `<select>` menu is selected, the value of array element or object property
14276
14587
  * represented by the selected option will be bound to the model identified by the `ngModel`
14277
14588
  * directive of the parent select element.
14278
14589
  *
@@ -14844,4 +15155,4 @@ var styleDirective = valueFn({
14844
15155
  });
14845
15156
 
14846
15157
  })(window, document);
14847
- angular.element(document).find('head').append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}</style>');
15158
+ angular.element(document).find('head').append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none !important;}ng\\:form{display:block;}</style>');