todo_rails 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. checksums.yaml +4 -4
  2. data/lib/todo_rails/version.rb +1 -1
  3. data/vendor/assets/bower.json +8 -0
  4. data/vendor/assets/bower_components/angular-animate/README.md +68 -0
  5. data/vendor/assets/bower_components/angular-animate/angular-animate.js +3721 -0
  6. data/vendor/assets/bower_components/angular-animate/angular-animate.min.js +52 -0
  7. data/vendor/assets/bower_components/angular-animate/angular-animate.min.js.map +8 -0
  8. data/vendor/assets/bower_components/angular-animate/bower.json +9 -0
  9. data/vendor/assets/bower_components/angular-animate/index.js +2 -0
  10. data/vendor/assets/bower_components/angular-animate/package.json +26 -0
  11. data/vendor/assets/bower_components/angular-aria/README.md +67 -0
  12. data/vendor/assets/bower_components/angular-aria/angular-aria.js +393 -0
  13. data/vendor/assets/bower_components/angular-aria/angular-aria.min.js +13 -0
  14. data/vendor/assets/bower_components/angular-aria/angular-aria.min.js.map +8 -0
  15. data/vendor/assets/bower_components/angular-aria/bower.json +9 -0
  16. data/vendor/assets/bower_components/angular-aria/index.js +2 -0
  17. data/vendor/assets/bower_components/angular-aria/package.json +27 -0
  18. data/vendor/assets/bower_components/angular-material/CHANGELOG.md +1599 -0
  19. data/vendor/assets/bower_components/angular-material/LICENSE +21 -0
  20. data/vendor/assets/bower_components/angular-material/README.md +211 -0
  21. data/vendor/assets/bower_components/angular-material/angular-material-mocks.js +77 -0
  22. data/vendor/assets/bower_components/angular-material/angular-material.css +7183 -0
  23. data/vendor/assets/bower_components/angular-material/angular-material.js +15406 -0
  24. data/vendor/assets/bower_components/angular-material/angular-material.min.css +6 -0
  25. data/vendor/assets/bower_components/angular-material/angular-material.min.js +14 -0
  26. data/vendor/assets/bower_components/angular-material/bower.json +14 -0
  27. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/copy.svg +1 -0
  28. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/copy2.svg +1 -0
  29. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/facebook.svg +1 -0
  30. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/hangout.svg +1 -0
  31. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/mail.svg +1 -0
  32. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/message.svg +1 -0
  33. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/print.svg +1 -0
  34. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/share-arrow.svg +1 -0
  35. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/twitter.svg +2 -0
  36. data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/upload.svg +1 -0
  37. data/vendor/assets/bower_components/angular-material/demos/chips/demoBasicUsage/style.scss +39 -0
  38. data/vendor/assets/bower_components/angular-material/demos/chips/demoContactChips/style.scss +47 -0
  39. data/vendor/assets/bower_components/angular-material/demos/gridList/demoBasicUsage/style.scss +75 -0
  40. data/vendor/assets/bower_components/angular-material/demos/gridList/demoDynamicTiles/style.scss +78 -0
  41. data/vendor/assets/bower_components/angular-material/demos/gridList/demoResponsiveUsage/style.scss +0 -0
  42. data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/addShoppingCart.svg +1 -0
  43. data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/android.svg +1 -0
  44. data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/cake.svg +1 -0
  45. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/cake.svg +1 -0
  46. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/core-icons.svg +26 -0
  47. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/social-icons.svg +26 -0
  48. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/addShoppingCart.svg +1 -0
  49. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/android.svg +1 -0
  50. data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/cake.svg +1 -0
  51. data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/android.svg +1 -0
  52. data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/cake.svg +1 -0
  53. data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/core-icons.svg +26 -0
  54. data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_email_24px.svg +4 -0
  55. data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_person_24px.svg +4 -0
  56. data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_phone_24px.svg +4 -0
  57. data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_place_24px.svg +4 -0
  58. data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/style.scss +18 -0
  59. data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-0.jpeg +0 -0
  60. data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-1.jpeg +0 -0
  61. data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-2.jpeg +0 -0
  62. data/vendor/assets/bower_components/angular-material/demos/tabs/demoDynamicHeight/style.scss +13 -0
  63. data/vendor/assets/bower_components/angular-material/demos/tabs/demoDynamicTabs/style.scss +44 -0
  64. data/vendor/assets/bower_components/angular-material/demos/tabs/demoStaticTabs/style.scss +25 -0
  65. data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/favorite.svg +4 -0
  66. data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/menu.svg +4 -0
  67. data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/more_vert.svg +4 -0
  68. data/vendor/assets/bower_components/angular-material/index.js +12 -0
  69. data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.css +24 -0
  70. data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css +220 -0
  71. data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js +951 -0
  72. data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.css +9 -0
  73. data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop.css +59 -0
  74. data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop.js +38 -0
  75. data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.css +16 -0
  76. data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.css +170 -0
  77. data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.js +267 -0
  78. data/vendor/assets/bower_components/angular-material/modules/closure/button/button-default-theme.css +94 -0
  79. data/vendor/assets/bower_components/angular-material/modules/closure/button/button.css +158 -0
  80. data/vendor/assets/bower_components/angular-material/modules/closure/button/button.js +135 -0
  81. data/vendor/assets/bower_components/angular-material/modules/closure/card/card-default-theme.css +12 -0
  82. data/vendor/assets/bower_components/angular-material/modules/closure/card/card.css +34 -0
  83. data/vendor/assets/bower_components/angular-material/modules/closure/card/card.js +84 -0
  84. data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox-default-theme.css +47 -0
  85. data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox.css +124 -0
  86. data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox.js +166 -0
  87. data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips-default-theme.css +24 -0
  88. data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips.css +131 -0
  89. data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips.js +949 -0
  90. data/vendor/assets/bower_components/angular-material/modules/closure/content/content-default-theme.css +9 -0
  91. data/vendor/assets/bower_components/angular-material/modules/closure/content/content.css +20 -0
  92. data/vendor/assets/bower_components/angular-material/modules/closure/content/content.js +84 -0
  93. data/vendor/assets/bower_components/angular-material/modules/closure/core/core.css +2594 -0
  94. data/vendor/assets/bower_components/angular-material/modules/closure/core/core.js +3772 -0
  95. data/vendor/assets/bower_components/angular-material/modules/closure/core/default-theme.js +4 -0
  96. data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog-default-theme.css +12 -0
  97. data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog.css +111 -0
  98. data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog.js +713 -0
  99. data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider-default-theme.css +9 -0
  100. data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider.css +14 -0
  101. data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider.js +45 -0
  102. data/vendor/assets/bower_components/angular-material/modules/closure/fabActions/fabActions.js +57 -0
  103. data/vendor/assets/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.css +100 -0
  104. data/vendor/assets/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.js +236 -0
  105. data/vendor/assets/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.css +74 -0
  106. data/vendor/assets/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.js +218 -0
  107. data/vendor/assets/bower_components/angular-material/modules/closure/fabTrigger/fabTrigger.js +54 -0
  108. data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList-default-theme.css +6 -0
  109. data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList.css +68 -0
  110. data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList.js +762 -0
  111. data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon-default-theme.css +15 -0
  112. data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon.css +20 -0
  113. data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon.js +783 -0
  114. data/vendor/assets/bower_components/angular-material/modules/closure/input/input-default-theme.css +46 -0
  115. data/vendor/assets/bower_components/angular-material/modules/closure/input/input.css +162 -0
  116. data/vendor/assets/bower_components/angular-material/modules/closure/input/input.js +371 -0
  117. data/vendor/assets/bower_components/angular-material/modules/closure/list/list-default-theme.css +23 -0
  118. data/vendor/assets/bower_components/angular-material/modules/closure/list/list.css +147 -0
  119. data/vendor/assets/bower_components/angular-material/modules/closure/list/list.js +273 -0
  120. data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu-default-theme.css +11 -0
  121. data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu.css +121 -0
  122. data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu.js +620 -0
  123. data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular-default-theme.css +36 -0
  124. data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular.css +1409 -0
  125. data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular.js +109 -0
  126. data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear-default-theme.css +27 -0
  127. data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear.css +287 -0
  128. data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear.js +126 -0
  129. data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton-default-theme.css +47 -0
  130. data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton.css +91 -0
  131. data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton.js +312 -0
  132. data/vendor/assets/bower_components/angular-material/modules/closure/select/select-default-theme.css +42 -0
  133. data/vendor/assets/bower_components/angular-material/modules/closure/select/select.css +170 -0
  134. data/vendor/assets/bower_components/angular-material/modules/closure/select/select.js +1055 -0
  135. data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav-default-theme.css +9 -0
  136. data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav.css +99 -0
  137. data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav.js +424 -0
  138. data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider-default-theme.css +56 -0
  139. data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider.css +220 -0
  140. data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider.js +403 -0
  141. data/vendor/assets/bower_components/angular-material/modules/closure/sticky/sticky.css +21 -0
  142. data/vendor/assets/bower_components/angular-material/modules/closure/sticky/sticky.js +315 -0
  143. data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader-default-theme.css +16 -0
  144. data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader.css +63 -0
  145. data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader.js +93 -0
  146. data/vendor/assets/bower_components/angular-material/modules/closure/swipe/swipe.js +72 -0
  147. data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch-default-theme.css +33 -0
  148. data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch.css +110 -0
  149. data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch.js +169 -0
  150. data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs-arrow.svg +7 -0
  151. data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs-default-theme.css +82 -0
  152. data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs.css +274 -0
  153. data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs.js +1060 -0
  154. data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField-default-theme.css +30 -0
  155. data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField.css +111 -0
  156. data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField.js +145 -0
  157. data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast-default-theme.css +18 -0
  158. data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast.css +119 -0
  159. data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast.js +265 -0
  160. data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar-default-theme.css +20 -0
  161. data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar.css +83 -0
  162. data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar.js +169 -0
  163. data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip-default-theme.css +11 -0
  164. data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip.css +72 -0
  165. data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip.js +267 -0
  166. data/vendor/assets/bower_components/angular-material/modules/closure/whiteframe/whiteframe.css +25 -0
  167. data/vendor/assets/bower_components/angular-material/modules/closure/whiteframe/whiteframe.js +15 -0
  168. data/vendor/assets/bower_components/angular-material/modules/css/angular-material-layout.css +2375 -0
  169. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete-default-theme.css +24 -0
  170. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete-default-theme.min.css +6 -0
  171. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.css +220 -0
  172. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.js +951 -0
  173. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.min.css +6 -0
  174. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.min.js +7 -0
  175. data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/bower.json +8 -0
  176. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop-default-theme.css +9 -0
  177. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop-default-theme.min.css +6 -0
  178. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.css +59 -0
  179. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.js +39 -0
  180. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.min.css +6 -0
  181. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.min.js +7 -0
  182. data/vendor/assets/bower_components/angular-material/modules/js/backdrop/bower.json +7 -0
  183. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet-default-theme.css +16 -0
  184. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet-default-theme.min.css +6 -0
  185. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.css +170 -0
  186. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.js +267 -0
  187. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.min.css +6 -0
  188. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.min.js +7 -0
  189. data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bower.json +8 -0
  190. data/vendor/assets/bower_components/angular-material/modules/js/button/bower.json +7 -0
  191. data/vendor/assets/bower_components/angular-material/modules/js/button/button-default-theme.css +94 -0
  192. data/vendor/assets/bower_components/angular-material/modules/js/button/button-default-theme.min.css +6 -0
  193. data/vendor/assets/bower_components/angular-material/modules/js/button/button.css +158 -0
  194. data/vendor/assets/bower_components/angular-material/modules/js/button/button.js +136 -0
  195. data/vendor/assets/bower_components/angular-material/modules/js/button/button.min.css +6 -0
  196. data/vendor/assets/bower_components/angular-material/modules/js/button/button.min.js +7 -0
  197. data/vendor/assets/bower_components/angular-material/modules/js/card/bower.json +7 -0
  198. data/vendor/assets/bower_components/angular-material/modules/js/card/card-default-theme.css +12 -0
  199. data/vendor/assets/bower_components/angular-material/modules/js/card/card-default-theme.min.css +6 -0
  200. data/vendor/assets/bower_components/angular-material/modules/js/card/card.css +34 -0
  201. data/vendor/assets/bower_components/angular-material/modules/js/card/card.js +85 -0
  202. data/vendor/assets/bower_components/angular-material/modules/js/card/card.min.css +6 -0
  203. data/vendor/assets/bower_components/angular-material/modules/js/card/card.min.js +7 -0
  204. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/bower.json +7 -0
  205. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox-default-theme.css +47 -0
  206. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox-default-theme.min.css +6 -0
  207. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.css +124 -0
  208. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.js +167 -0
  209. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.min.css +6 -0
  210. data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.min.js +7 -0
  211. data/vendor/assets/bower_components/angular-material/modules/js/chips/bower.json +8 -0
  212. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips-default-theme.css +24 -0
  213. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips-default-theme.min.css +6 -0
  214. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.css +131 -0
  215. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.js +949 -0
  216. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.min.css +6 -0
  217. data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.min.js +7 -0
  218. data/vendor/assets/bower_components/angular-material/modules/js/content/bower.json +7 -0
  219. data/vendor/assets/bower_components/angular-material/modules/js/content/content-default-theme.css +9 -0
  220. data/vendor/assets/bower_components/angular-material/modules/js/content/content-default-theme.min.css +6 -0
  221. data/vendor/assets/bower_components/angular-material/modules/js/content/content.css +20 -0
  222. data/vendor/assets/bower_components/angular-material/modules/js/content/content.js +85 -0
  223. data/vendor/assets/bower_components/angular-material/modules/js/content/content.min.css +6 -0
  224. data/vendor/assets/bower_components/angular-material/modules/js/content/content.min.js +7 -0
  225. data/vendor/assets/bower_components/angular-material/modules/js/core/bower.json +8 -0
  226. data/vendor/assets/bower_components/angular-material/modules/js/core/core.css +2594 -0
  227. data/vendor/assets/bower_components/angular-material/modules/js/core/core.js +3772 -0
  228. data/vendor/assets/bower_components/angular-material/modules/js/core/core.min.css +6 -0
  229. data/vendor/assets/bower_components/angular-material/modules/js/core/core.min.js +10 -0
  230. data/vendor/assets/bower_components/angular-material/modules/js/core/default-theme.js +4 -0
  231. data/vendor/assets/bower_components/angular-material/modules/js/dialog/bower.json +8 -0
  232. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog-default-theme.css +12 -0
  233. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog-default-theme.min.css +6 -0
  234. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.css +111 -0
  235. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.js +713 -0
  236. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.min.css +6 -0
  237. data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.min.js +7 -0
  238. data/vendor/assets/bower_components/angular-material/modules/js/divider/bower.json +7 -0
  239. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider-default-theme.css +9 -0
  240. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider-default-theme.min.css +6 -0
  241. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.css +14 -0
  242. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.js +46 -0
  243. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.min.css +6 -0
  244. data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.min.js +7 -0
  245. data/vendor/assets/bower_components/angular-material/modules/js/fabActions/bower.json +7 -0
  246. data/vendor/assets/bower_components/angular-material/modules/js/fabActions/fabActions.js +58 -0
  247. data/vendor/assets/bower_components/angular-material/modules/js/fabActions/fabActions.min.js +7 -0
  248. data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/bower.json +9 -0
  249. data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.css +100 -0
  250. data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.js +235 -0
  251. data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.min.css +6 -0
  252. data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.min.js +7 -0
  253. data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/bower.json +9 -0
  254. data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.css +74 -0
  255. data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.js +217 -0
  256. data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.min.css +6 -0
  257. data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.min.js +7 -0
  258. data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/bower.json +7 -0
  259. data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/fabTrigger.js +55 -0
  260. data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/fabTrigger.min.js +7 -0
  261. data/vendor/assets/bower_components/angular-material/modules/js/gridList/bower.json +7 -0
  262. data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.css +68 -0
  263. data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.js +763 -0
  264. data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.min.css +6 -0
  265. data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.min.js +7 -0
  266. data/vendor/assets/bower_components/angular-material/modules/js/icon/bower.json +7 -0
  267. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon-default-theme.css +15 -0
  268. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon-default-theme.min.css +6 -0
  269. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.css +20 -0
  270. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.js +784 -0
  271. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.min.css +6 -0
  272. data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.min.js +7 -0
  273. data/vendor/assets/bower_components/angular-material/modules/js/input/bower.json +7 -0
  274. data/vendor/assets/bower_components/angular-material/modules/js/input/input-default-theme.css +46 -0
  275. data/vendor/assets/bower_components/angular-material/modules/js/input/input-default-theme.min.css +6 -0
  276. data/vendor/assets/bower_components/angular-material/modules/js/input/input.css +162 -0
  277. data/vendor/assets/bower_components/angular-material/modules/js/input/input.js +372 -0
  278. data/vendor/assets/bower_components/angular-material/modules/js/input/input.min.css +6 -0
  279. data/vendor/assets/bower_components/angular-material/modules/js/input/input.min.js +7 -0
  280. data/vendor/assets/bower_components/angular-material/modules/js/list/bower.json +7 -0
  281. data/vendor/assets/bower_components/angular-material/modules/js/list/list-default-theme.css +23 -0
  282. data/vendor/assets/bower_components/angular-material/modules/js/list/list-default-theme.min.css +6 -0
  283. data/vendor/assets/bower_components/angular-material/modules/js/list/list.css +147 -0
  284. data/vendor/assets/bower_components/angular-material/modules/js/list/list.js +274 -0
  285. data/vendor/assets/bower_components/angular-material/modules/js/list/list.min.css +6 -0
  286. data/vendor/assets/bower_components/angular-material/modules/js/list/list.min.js +7 -0
  287. data/vendor/assets/bower_components/angular-material/modules/js/menu/bower.json +8 -0
  288. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu-default-theme.css +11 -0
  289. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu-default-theme.min.css +6 -0
  290. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.css +121 -0
  291. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.js +620 -0
  292. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.min.css +6 -0
  293. data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.min.js +7 -0
  294. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/bower.json +7 -0
  295. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular-default-theme.css +36 -0
  296. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular-default-theme.min.css +6 -0
  297. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.css +1409 -0
  298. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.js +110 -0
  299. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.min.css +6 -0
  300. data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.min.js +7 -0
  301. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/bower.json +7 -0
  302. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear-default-theme.css +27 -0
  303. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear-default-theme.min.css +6 -0
  304. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.css +287 -0
  305. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.js +127 -0
  306. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.min.css +6 -0
  307. data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.min.js +7 -0
  308. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/bower.json +7 -0
  309. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton-default-theme.css +47 -0
  310. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton-default-theme.min.css +6 -0
  311. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.css +91 -0
  312. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.js +313 -0
  313. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.min.css +6 -0
  314. data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.min.js +7 -0
  315. data/vendor/assets/bower_components/angular-material/modules/js/select/bower.json +8 -0
  316. data/vendor/assets/bower_components/angular-material/modules/js/select/select-default-theme.css +42 -0
  317. data/vendor/assets/bower_components/angular-material/modules/js/select/select-default-theme.min.css +6 -0
  318. data/vendor/assets/bower_components/angular-material/modules/js/select/select.css +170 -0
  319. data/vendor/assets/bower_components/angular-material/modules/js/select/select.js +1055 -0
  320. data/vendor/assets/bower_components/angular-material/modules/js/select/select.min.css +6 -0
  321. data/vendor/assets/bower_components/angular-material/modules/js/select/select.min.js +7 -0
  322. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/bower.json +8 -0
  323. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav-default-theme.css +9 -0
  324. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav-default-theme.min.css +6 -0
  325. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.css +99 -0
  326. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.js +424 -0
  327. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.min.css +6 -0
  328. data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.min.js +7 -0
  329. data/vendor/assets/bower_components/angular-material/modules/js/slider/bower.json +7 -0
  330. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider-default-theme.css +56 -0
  331. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider-default-theme.min.css +6 -0
  332. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.css +220 -0
  333. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.js +404 -0
  334. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.min.css +6 -0
  335. data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.min.js +7 -0
  336. data/vendor/assets/bower_components/angular-material/modules/js/sticky/bower.json +8 -0
  337. data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.css +21 -0
  338. data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.js +315 -0
  339. data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.min.css +6 -0
  340. data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.min.js +7 -0
  341. data/vendor/assets/bower_components/angular-material/modules/js/subheader/bower.json +8 -0
  342. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader-default-theme.css +16 -0
  343. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader-default-theme.min.css +6 -0
  344. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.css +63 -0
  345. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.js +93 -0
  346. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.min.css +6 -0
  347. data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.min.js +7 -0
  348. data/vendor/assets/bower_components/angular-material/modules/js/swipe/bower.json +7 -0
  349. data/vendor/assets/bower_components/angular-material/modules/js/swipe/swipe.js +73 -0
  350. data/vendor/assets/bower_components/angular-material/modules/js/swipe/swipe.min.js +7 -0
  351. data/vendor/assets/bower_components/angular-material/modules/js/switch/bower.json +8 -0
  352. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch-default-theme.css +33 -0
  353. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch-default-theme.min.css +6 -0
  354. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.css +110 -0
  355. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.js +169 -0
  356. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.min.css +6 -0
  357. data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.min.js +7 -0
  358. data/vendor/assets/bower_components/angular-material/modules/js/tabs/bower.json +8 -0
  359. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs-default-theme.css +82 -0
  360. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs-default-theme.min.css +6 -0
  361. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.css +274 -0
  362. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.js +1060 -0
  363. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.min.css +6 -0
  364. data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.min.js +7 -0
  365. data/vendor/assets/bower_components/angular-material/modules/js/textField/bower.json +7 -0
  366. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField-default-theme.css +30 -0
  367. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField-default-theme.min.css +6 -0
  368. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.css +111 -0
  369. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.js +143 -0
  370. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.min.css +6 -0
  371. data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.min.js +7 -0
  372. data/vendor/assets/bower_components/angular-material/modules/js/toast/bower.json +8 -0
  373. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast-default-theme.css +18 -0
  374. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast-default-theme.min.css +6 -0
  375. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.css +119 -0
  376. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.js +265 -0
  377. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.min.css +6 -0
  378. data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.min.js +7 -0
  379. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/bower.json +8 -0
  380. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar-default-theme.css +20 -0
  381. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar-default-theme.min.css +6 -0
  382. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.css +83 -0
  383. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.js +169 -0
  384. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.min.css +6 -0
  385. data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.min.js +7 -0
  386. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/bower.json +7 -0
  387. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip-default-theme.css +11 -0
  388. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip-default-theme.min.css +6 -0
  389. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.css +72 -0
  390. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.js +268 -0
  391. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.min.css +6 -0
  392. data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.min.js +7 -0
  393. data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/bower.json +5 -0
  394. data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.css +25 -0
  395. data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.js +16 -0
  396. data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.min.css +6 -0
  397. data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.min.js +7 -0
  398. data/vendor/assets/bower_components/angular-material/package.json +48 -0
  399. data/vendor/assets/bower_components/angular/README.md +64 -0
  400. data/vendor/assets/bower_components/angular/angular-csp.css +21 -0
  401. data/vendor/assets/bower_components/angular/angular.js +28364 -0
  402. data/vendor/assets/bower_components/angular/angular.min.js +290 -0
  403. data/vendor/assets/bower_components/angular/angular.min.js.gzip +0 -0
  404. data/vendor/assets/bower_components/angular/angular.min.js.map +8 -0
  405. data/vendor/assets/bower_components/angular/bower.json +8 -0
  406. data/vendor/assets/bower_components/angular/index.js +2 -0
  407. data/vendor/assets/bower_components/angular/package.json +25 -0
  408. data/vendor/assets/bower_components/lodash/LICENSE +22 -0
  409. data/vendor/assets/bower_components/lodash/bower.json +19 -0
  410. data/vendor/assets/bower_components/lodash/lodash.js +12351 -0
  411. data/vendor/assets/bower_components/lodash/lodash.min.js +99 -0
  412. data/vendor/assets/bower_components/restangular/CHANGELOG.md +18 -0
  413. data/vendor/assets/bower_components/restangular/CONTRIBUTE.md +31 -0
  414. data/vendor/assets/bower_components/restangular/Gruntfile.js +149 -0
  415. data/vendor/assets/bower_components/restangular/README.md +1336 -0
  416. data/vendor/assets/bower_components/restangular/bower.json +19 -0
  417. data/vendor/assets/bower_components/restangular/dist/restangular.js +1355 -0
  418. data/vendor/assets/bower_components/restangular/dist/restangular.min.js +6 -0
  419. data/vendor/assets/bower_components/restangular/dist/restangular.zip +0 -0
  420. data/vendor/assets/bower_components/restangular/karma.conf.js +74 -0
  421. data/vendor/assets/bower_components/restangular/karma.underscore.conf.js +74 -0
  422. data/vendor/assets/bower_components/restangular/license.md +21 -0
  423. data/vendor/assets/bower_components/restangular/package.json +55 -0
  424. data/vendor/assets/bower_components/restangular/src/restangular.js +1350 -0
  425. data/vendor/assets/bower_components/restangular/test/restangularSpec.js +1136 -0
  426. metadata +424 -1
@@ -0,0 +1,274 @@
1
+ /*!
2
+ * Angular Material Design
3
+ * https://github.com/angular/material
4
+ * @license MIT
5
+ * v0.10.0
6
+ */
7
+ /* mixin definition ; sets LTR and RTL within the same style call */
8
+ @-webkit-keyframes md-tab-content-hide {
9
+ 0% {
10
+ opacity: 1; }
11
+
12
+ 50% {
13
+ opacity: 1; }
14
+
15
+ 100% {
16
+ opacity: 0; } }
17
+ @keyframes md-tab-content-hide {
18
+ 0% {
19
+ opacity: 1; }
20
+
21
+ 50% {
22
+ opacity: 1; }
23
+
24
+ 100% {
25
+ opacity: 0; } }
26
+
27
+ md-tab-data {
28
+ position: absolute;
29
+ top: 0;
30
+ left: 0;
31
+ right: 0;
32
+ bottom: 0;
33
+ z-index: -1;
34
+ opacity: 0; }
35
+
36
+ md-tabs {
37
+ display: block;
38
+ margin: 0;
39
+ border-radius: 2px;
40
+ overflow: hidden;
41
+ position: relative;
42
+ -webkit-flex-shrink: 0;
43
+ -ms-flex-negative: 0;
44
+ flex-shrink: 0; }
45
+ md-tabs.ng-animate {
46
+ transition: height 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
47
+ md-tabs:not(.md-no-tab-content):not(.md-dynamic-height) {
48
+ min-height: 248px; }
49
+ md-tabs[md-align-tabs="bottom"] md-tabs-wrapper {
50
+ position: absolute;
51
+ bottom: 0;
52
+ left: 0;
53
+ right: 0;
54
+ height: 48px; }
55
+ md-tabs[md-align-tabs="bottom"] md-tabs-content-wrapper {
56
+ top: 0;
57
+ bottom: 48px; }
58
+ md-tabs.md-dynamic-height md-tabs-content-wrapper {
59
+ min-height: 0;
60
+ position: relative;
61
+ top: auto;
62
+ left: auto;
63
+ right: auto;
64
+ bottom: auto;
65
+ overflow: visible; }
66
+ md-tabs.md-dynamic-height md-tab-content.md-active {
67
+ position: relative; }
68
+ md-tabs[md-border-bottom] md-tabs-wrapper {
69
+ border-width: 0 0 1px;
70
+ border-style: solid; }
71
+ md-tabs[md-border-bottom]:not(.md-dynamic-height) md-tabs-content-wrapper {
72
+ top: 49px; }
73
+
74
+ md-tabs-wrapper {
75
+ display: block;
76
+ position: relative; }
77
+ md-tabs-wrapper md-prev-button, md-tabs-wrapper md-next-button {
78
+ height: 100%;
79
+ width: 32px;
80
+ position: absolute;
81
+ top: 50%;
82
+ -webkit-transform: translateY(-50%);
83
+ transform: translateY(-50%);
84
+ line-height: 1em;
85
+ z-index: 2;
86
+ cursor: pointer;
87
+ font-size: 16px;
88
+ background: transparent no-repeat center center;
89
+ transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
90
+ md-tabs-wrapper md-prev-button:focus, md-tabs-wrapper md-next-button:focus {
91
+ outline: none; }
92
+ md-tabs-wrapper md-prev-button.md-disabled, md-tabs-wrapper md-next-button.md-disabled {
93
+ opacity: 0.25;
94
+ cursor: default; }
95
+ md-tabs-wrapper md-prev-button.ng-leave, md-tabs-wrapper md-next-button.ng-leave {
96
+ transition: none; }
97
+ md-tabs-wrapper md-prev-button md-icon, md-tabs-wrapper md-next-button md-icon {
98
+ position: absolute;
99
+ top: 50%;
100
+ left: 50%;
101
+ -webkit-transform: translate3d(-50%, -50%, 0);
102
+ transform: translate3d(-50%, -50%, 0); }
103
+ md-tabs-wrapper md-prev-button {
104
+ left: 0;
105
+ background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMjA4IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTUuNCw3LjQgMTQsNiA4LDEyIDE0LDE4IDE1LjQsMTYuNiAxMC44LDEyIAkJIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4gPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+IDwvZz4gPC9nPiA8ZyBpZD0iR3JpZCIgZGlzcGxheT0ibm9uZSI+IDxnIGRpc3BsYXk9ImlubGluZSI+IDwvZz4gPC9nPiA8L3N2Zz4NCg=='); }
106
+ md-tabs-wrapper md-next-button {
107
+ right: 0;
108
+ background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMzM2IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTAsNiA4LjYsNy40IDEzLjIsMTIgOC42LDE2LjYgMTAsMTggMTYsMTIgCQkiIHN0eWxlPSJmaWxsOndoaXRlOyIvPiA8cmVjdCBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz4gPC9nPiA8L2c+IDxnIGlkPSJHcmlkIiBkaXNwbGF5PSJub25lIj4gPGcgZGlzcGxheT0iaW5saW5lIj4gPC9nPiA8L2c+IDwvc3ZnPg0K'); }
109
+ md-tabs-wrapper md-next-button md-icon {
110
+ -webkit-transform: translate3d(-50%, -50%, 0) rotate(180deg);
111
+ transform: translate3d(-50%, -50%, 0) rotate(180deg); }
112
+ md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper {
113
+ width: 100%;
114
+ display: -webkit-flex;
115
+ display: -ms-flexbox;
116
+ display: flex;
117
+ -webkit-flex-direction: row;
118
+ -ms-flex-direction: row;
119
+ flex-direction: row; }
120
+ md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper md-tab-item {
121
+ -webkit-flex-grow: 1;
122
+ -ms-flex-positive: 1;
123
+ flex-grow: 1; }
124
+
125
+ md-tabs-canvas {
126
+ position: relative;
127
+ overflow: hidden;
128
+ display: block;
129
+ height: 48px; }
130
+ md-tabs-canvas:after {
131
+ content: '';
132
+ display: table;
133
+ clear: both; }
134
+ md-tabs-canvas .md-dummy-wrapper {
135
+ position: absolute;
136
+ top: 0;
137
+ left: 0; }
138
+ md-tabs-canvas.md-paginated {
139
+ margin: 0 32px; }
140
+ md-tabs-canvas.md-center-tabs {
141
+ display: -webkit-flex;
142
+ display: -ms-flexbox;
143
+ display: flex;
144
+ -webkit-flex-direction: column;
145
+ -ms-flex-direction: column;
146
+ flex-direction: column;
147
+ text-align: center; }
148
+ md-tabs-canvas.md-center-tabs .md-tab {
149
+ float: none;
150
+ display: inline-block; }
151
+
152
+ md-pagination-wrapper {
153
+ height: 48px;
154
+ display: block;
155
+ transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
156
+ transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
157
+ position: absolute;
158
+ width: 999999px;
159
+ left: 0;
160
+ -webkit-transform: translate3d(0, 0, 0);
161
+ transform: translate3d(0, 0, 0); }
162
+ md-pagination-wrapper:after {
163
+ content: '';
164
+ display: table;
165
+ clear: both; }
166
+ md-pagination-wrapper.md-center-tabs {
167
+ position: relative;
168
+ width: initial;
169
+ -webkit-flex: 1;
170
+ -ms-flex: 1;
171
+ flex: 1;
172
+ margin: 0 auto; }
173
+
174
+ md-tabs-content-wrapper {
175
+ display: block;
176
+ position: absolute;
177
+ top: 48px;
178
+ left: 0;
179
+ right: 0;
180
+ bottom: 0;
181
+ overflow: hidden; }
182
+
183
+ md-tab-content {
184
+ display: block;
185
+ position: absolute;
186
+ top: 0;
187
+ left: 0;
188
+ right: 0;
189
+ bottom: 0;
190
+ -webkit-transform: translateX(0);
191
+ transform: translateX(0);
192
+ transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
193
+ transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
194
+ overflow: auto; }
195
+ md-tab-content.md-no-scroll {
196
+ bottom: auto;
197
+ overflow: hidden; }
198
+ md-tab-content.ng-leave, md-tab-content.md-no-transition {
199
+ transition: none; }
200
+ md-tab-content.md-left {
201
+ -webkit-transform: translateX(-100%);
202
+ transform: translateX(-100%);
203
+ -webkit-animation: 1s md-tab-content-hide;
204
+ animation: 1s md-tab-content-hide;
205
+ opacity: 0; }
206
+ md-tab-content.md-left * {
207
+ transition: visibility 0s linear;
208
+ transition-delay: 0.5s;
209
+ visibility: hidden; }
210
+ md-tab-content.md-right {
211
+ -webkit-transform: translateX(100%);
212
+ transform: translateX(100%);
213
+ -webkit-animation: 1s md-tab-content-hide;
214
+ animation: 1s md-tab-content-hide;
215
+ opacity: 0; }
216
+ md-tab-content.md-right * {
217
+ transition: visibility 0s linear;
218
+ transition-delay: 0.5s;
219
+ visibility: hidden; }
220
+ md-tab-content > div.ng-leave {
221
+ -webkit-animation: 1s md-tab-content-hide;
222
+ animation: 1s md-tab-content-hide; }
223
+
224
+ md-ink-bar {
225
+ position: absolute;
226
+ left: auto;
227
+ right: auto;
228
+ bottom: 0;
229
+ height: 2px; }
230
+ md-ink-bar.md-left {
231
+ transition: left 0.225s cubic-bezier(0.35, 0, 0.25, 1), right 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
232
+ md-ink-bar.md-right {
233
+ transition: left 0.5s cubic-bezier(0.35, 0, 0.25, 1), right 0.225s cubic-bezier(0.35, 0, 0.25, 1); }
234
+
235
+ md-tab {
236
+ position: absolute;
237
+ z-index: -1;
238
+ left: -9999px; }
239
+
240
+ .md-tab {
241
+ font-size: 14px;
242
+ text-align: center;
243
+ line-height: 24px;
244
+ padding: 12px 24px;
245
+ transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
246
+ cursor: pointer;
247
+ white-space: nowrap;
248
+ position: relative;
249
+ text-transform: uppercase;
250
+ float: left;
251
+ font-weight: 500;
252
+ box-sizing: border-box; }
253
+ .md-tab.md-focused {
254
+ box-shadow: none;
255
+ outline: none; }
256
+ .md-tab.md-active {
257
+ cursor: default; }
258
+ .md-tab.md-disabled {
259
+ pointer-events: none;
260
+ -ms-touch-action: pan-y;
261
+ touch-action: pan-y;
262
+ -webkit-user-select: none;
263
+ -moz-user-select: none;
264
+ -ms-user-select: none;
265
+ user-select: none;
266
+ -webkit-user-drag: none;
267
+ opacity: 0.5;
268
+ cursor: default; }
269
+ .md-tab.ng-leave {
270
+ transition: none; }
271
+
272
+ md-toolbar + md-tabs {
273
+ border-top-left-radius: 0;
274
+ border-top-right-radius: 0; }
@@ -0,0 +1,1060 @@
1
+ /*!
2
+ * Angular Material Design
3
+ * https://github.com/angular/material
4
+ * @license MIT
5
+ * v0.10.0
6
+ */
7
+ goog.provide('ng.material.components.tabs');
8
+ goog.require('ng.material.components.icon');
9
+ goog.require('ng.material.core');
10
+ /**
11
+ * @ngdoc module
12
+ * @name material.components.tabs
13
+ * @description
14
+ *
15
+ * Tabs, created with the `<md-tabs>` directive provide *tabbed* navigation with different styles.
16
+ * The Tabs component consists of clickable tabs that are aligned horizontally side-by-side.
17
+ *
18
+ * Features include support for:
19
+ *
20
+ * - static or dynamic tabs,
21
+ * - responsive designs,
22
+ * - accessibility support (ARIA),
23
+ * - tab pagination,
24
+ * - external or internal tab content,
25
+ * - focus indicators and arrow-key navigations,
26
+ * - programmatic lookup and access to tab controllers, and
27
+ * - dynamic transitions through different tab contents.
28
+ *
29
+ */
30
+ /*
31
+ * @see js folder for tabs implementation
32
+ */
33
+ angular.module('material.components.tabs', [
34
+ 'material.core',
35
+ 'material.components.icon'
36
+ ]);
37
+
38
+ /**
39
+ * @ngdoc directive
40
+ * @name mdTab
41
+ * @module material.components.tabs
42
+ *
43
+ * @restrict E
44
+ *
45
+ * @description
46
+ * Use the `<md-tab>` a nested directive used within `<md-tabs>` to specify a tab with a **label** and optional *view content*.
47
+ *
48
+ * If the `label` attribute is not specified, then an optional `<md-tab-label>` tag can be used to specify more
49
+ * complex tab header markup. If neither the **label** nor the **md-tab-label** are specified, then the nested
50
+ * markup of the `<md-tab>` is used as the tab header markup.
51
+ *
52
+ * Please note that if you use `<md-tab-label>`, your content **MUST** be wrapped in the `<md-tab-body>` tag. This
53
+ * is to define a clear separation between the tab content and the tab label.
54
+ *
55
+ * If a tab **label** has been identified, then any **non-**`<md-tab-label>` markup
56
+ * will be considered tab content and will be transcluded to the internal `<div class="md-tabs-content">` container.
57
+ *
58
+ * This container is used by the TabsController to show/hide the active tab's content view. This synchronization is
59
+ * automatically managed by the internal TabsController whenever the tab selection changes. Selection changes can
60
+ * be initiated via data binding changes, programmatic invocation, or user gestures.
61
+ *
62
+ * @param {string=} label Optional attribute to specify a simple string as the tab label
63
+ * @param {boolean=} disabled If present, disabled tab selection.
64
+ * @param {expression=} md-on-deselect Expression to be evaluated after the tab has been de-selected.
65
+ * @param {expression=} md-on-select Expression to be evaluated after the tab has been selected.
66
+ *
67
+ *
68
+ * @usage
69
+ *
70
+ * <hljs lang="html">
71
+ * <md-tab label="" disabled="" md-on-select="" md-on-deselect="" >
72
+ * <h3>My Tab content</h3>
73
+ * </md-tab>
74
+ *
75
+ * <md-tab >
76
+ * <md-tab-label>
77
+ * <h3>My Tab content</h3>
78
+ * </md-tab-label>
79
+ * <md-tab-body>
80
+ * <p>
81
+ * Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
82
+ * totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
83
+ * dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
84
+ * sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
85
+ * </p>
86
+ * </md-tab-body>
87
+ * </md-tab>
88
+ * </hljs>
89
+ *
90
+ */
91
+ angular
92
+ .module('material.components.tabs')
93
+ .directive('mdTab', MdTab);
94
+
95
+ function MdTab () {
96
+ return {
97
+ require: '^?mdTabs',
98
+ terminal: true,
99
+ template: function (element, attr) {
100
+ var label = getLabel(),
101
+ body = getTemplate();
102
+ return '' +
103
+ '<md-tab-label>' + label + '</md-tab-label>' +
104
+ '<md-tab-body>' + body + '</md-tab-body>';
105
+ function getLabel () {
106
+ return getLabelElement() || getLabelAttribute() || getElementContents();
107
+ function getLabelAttribute () { return attr.label; }
108
+ function getLabelElement () {
109
+ var label = element.find('md-tab-label').eq(0);
110
+ if (label.length) return label.remove().html();
111
+ }
112
+ function getElementContents () {
113
+ var html = element.html();
114
+ element.empty();
115
+ return html;
116
+ }
117
+ }
118
+ function getTemplate () {
119
+ var content = element.find('md-tab-body').eq(0),
120
+ template = content.length ? content.html() : attr.label ? element.html() : '';
121
+ if (content.length) content.remove();
122
+ else if (attr.label) element.empty();
123
+ return template;
124
+ }
125
+ },
126
+ scope: {
127
+ active: '=?mdActive',
128
+ disabled: '=?ngDisabled',
129
+ select: '&?mdOnSelect',
130
+ deselect: '&?mdOnDeselect'
131
+ },
132
+ link: postLink
133
+ };
134
+
135
+ function postLink (scope, element, attr, ctrl) {
136
+ if (!ctrl) return;
137
+ var tabs = element.parent()[0].getElementsByTagName('md-tab'),
138
+ index = Array.prototype.indexOf.call(tabs, element[0]),
139
+ body = element.find('md-tab-body').eq(0).remove(),
140
+ label = element.find('md-tab-label').eq(0).remove(),
141
+ data = ctrl.insertTab({
142
+ scope: scope,
143
+ parent: scope.$parent,
144
+ index: index,
145
+ element: element,
146
+ template: body.html(),
147
+ label: label.html()
148
+ }, index);
149
+
150
+ scope.select = scope.select || angular.noop;
151
+ scope.deselect = scope.deselect || angular.noop;
152
+
153
+ scope.$watch('active', function (active) { if (active) ctrl.select(data.getIndex()); });
154
+ scope.$watch('disabled', function () { ctrl.refreshIndex(); });
155
+ scope.$watch(
156
+ function () {
157
+ return Array.prototype.indexOf.call(tabs, element[0]);
158
+ },
159
+ function (newIndex) {
160
+ data.index = newIndex;
161
+ ctrl.updateTabOrder();
162
+ }
163
+ );
164
+ scope.$on('$destroy', function () { ctrl.removeTab(data); });
165
+
166
+ }
167
+ }
168
+
169
+ angular
170
+ .module('material.components.tabs')
171
+ .directive('mdTabItem', MdTabItem);
172
+
173
+ function MdTabItem () {
174
+ return {
175
+ require: '^?mdTabs',
176
+ link: function link (scope, element, attr, ctrl) {
177
+ if (!ctrl) return;
178
+ ctrl.attachRipple(scope, element);
179
+ }
180
+ };
181
+ }
182
+
183
+ angular
184
+ .module('material.components.tabs')
185
+ .directive('mdTabLabel', MdTabLabel);
186
+
187
+ function MdTabLabel () {
188
+ return { terminal: true };
189
+ }
190
+
191
+
192
+ angular.module('material.components.tabs')
193
+ .directive('mdTabScroll', MdTabScroll);
194
+
195
+ function MdTabScroll ($parse) {
196
+ return {
197
+ restrict: 'A',
198
+ compile: function ($element, attr) {
199
+ var fn = $parse(attr.mdTabScroll, null, true);
200
+ return function ngEventHandler (scope, element) {
201
+ element.on('mousewheel', function (event) {
202
+ scope.$apply(function () { fn(scope, { $event: event }); });
203
+ });
204
+ };
205
+ }
206
+ }
207
+ }
208
+ MdTabScroll.$inject = ["$parse"];
209
+
210
+ angular
211
+ .module('material.components.tabs')
212
+ .controller('MdTabsController', MdTabsController);
213
+
214
+ /**
215
+ * ngInject
216
+ */
217
+ function MdTabsController ($scope, $element, $window, $timeout, $mdConstant, $mdTabInkRipple,
218
+ $mdUtil, $animate, $attrs, $compile, $mdTheming) {
219
+ //-- define private properties
220
+ var ctrl = this,
221
+ locked = false,
222
+ elements = getElements(),
223
+ queue = [],
224
+ destroyed = false,
225
+ loaded = false;
226
+
227
+ //-- define public properties with change handlers
228
+ defineProperty('focusIndex', handleFocusIndexChange, $scope.selectedIndex || 0);
229
+ defineProperty('offsetLeft', handleOffsetChange, 0);
230
+ defineProperty('hasContent', handleHasContent, false);
231
+
232
+ //-- define public properties
233
+ ctrl.scope = $scope;
234
+ ctrl.parent = $scope.$parent;
235
+ ctrl.tabs = [];
236
+ ctrl.lastSelectedIndex = null;
237
+ ctrl.hasFocus = false;
238
+ ctrl.lastClick = true;
239
+ ctrl.shouldPaginate = false;
240
+ ctrl.shouldCenterTabs = shouldCenterTabs();
241
+
242
+ //-- define public methods
243
+ ctrl.redirectFocus = redirectFocus;
244
+ ctrl.attachRipple = attachRipple;
245
+ ctrl.shouldStretchTabs = shouldStretchTabs;
246
+ ctrl.insertTab = insertTab;
247
+ ctrl.removeTab = removeTab;
248
+ ctrl.select = select;
249
+ ctrl.scroll = scroll;
250
+ ctrl.nextPage = nextPage;
251
+ ctrl.previousPage = previousPage;
252
+ ctrl.keydown = keydown;
253
+ ctrl.canPageForward = canPageForward;
254
+ ctrl.canPageBack = canPageBack;
255
+ ctrl.refreshIndex = refreshIndex;
256
+ ctrl.incrementSelectedIndex = incrementSelectedIndex;
257
+ ctrl.updateInkBarStyles = $mdUtil.debounce(updateInkBarStyles, 100);
258
+ ctrl.updateTabOrder = $mdUtil.debounce(updateTabOrder, 100);
259
+
260
+ init();
261
+
262
+ /**
263
+ * Perform initialization for the controller, setup events and watcher(s)
264
+ */
265
+ function init () {
266
+ $scope.selectedIndex = $scope.selectedIndex || 0;
267
+ compileTemplate();
268
+ configureWatchers();
269
+ bindEvents();
270
+ $mdTheming($element);
271
+ $timeout(function () {
272
+ updateHeightFromContent();
273
+ adjustOffset();
274
+ updatePagination();
275
+ ctrl.tabs[$scope.selectedIndex] && ctrl.tabs[$scope.selectedIndex].scope.select();
276
+ loaded = true;
277
+ });
278
+ }
279
+
280
+ function compileTemplate () {
281
+ var template = $attrs.$mdTabsTemplate,
282
+ element = angular.element(elements.data);
283
+ element.html(template);
284
+ $compile(element.contents())(ctrl.parent);
285
+ delete $attrs.$mdTabsTemplate;
286
+ }
287
+
288
+ function bindEvents () {
289
+ angular.element($window).on('resize', handleWindowResize);
290
+ angular.element(elements.paging).on('DOMSubtreeModified', ctrl.updateInkBarStyles);
291
+ angular.element(elements.paging).on('DOMSubtreeModified', updatePagination);
292
+ }
293
+
294
+ function configureWatchers () {
295
+ $mdUtil.initOptionalProperties($scope, $attrs);
296
+ $attrs.$observe('mdNoBar', function (value) { $scope.noInkBar = angular.isDefined(value); });
297
+ $scope.$watch('selectedIndex', handleSelectedIndexChange);
298
+ $scope.$watch('dynamicHeight', function (value) {
299
+ if (value) $element.addClass('md-dynamic-height');
300
+ else $element.removeClass('md-dynamic-height');
301
+ });
302
+ $scope.$on('$destroy', cleanup);
303
+ }
304
+
305
+ /**
306
+ * Remove any events defined by this controller
307
+ */
308
+ function cleanup () {
309
+ destroyed = true;
310
+ angular.element($window).off('resize', handleWindowResize);
311
+ angular.element(elements.paging).off('DOMSubtreeModified', ctrl.updateInkBarStyles);
312
+ angular.element(elements.paging).off('DOMSubtreeModified', updatePagination);
313
+ }
314
+
315
+ //-- Change handlers
316
+
317
+ /**
318
+ * Add/remove the `md-no-tab-content` class depending on `ctrl.hasContent`
319
+ * @param hasContent
320
+ */
321
+ function handleHasContent (hasContent) {
322
+ $element[hasContent ? 'removeClass' : 'addClass']('md-no-tab-content');
323
+ }
324
+
325
+ /**
326
+ * Apply ctrl.offsetLeft to the paging element when it changes
327
+ * @param left
328
+ */
329
+ function handleOffsetChange (left) {
330
+ var newValue = ctrl.shouldCenterTabs ? '' : '-' + left + 'px';
331
+ angular.element(elements.paging).css($mdConstant.CSS.TRANSFORM, 'translate3d(' + newValue + ', 0, 0)');
332
+ $scope.$broadcast('$mdTabsPaginationChanged');
333
+ }
334
+
335
+ /**
336
+ * Update the UI whenever `ctrl.focusIndex` is updated
337
+ * @param newIndex
338
+ * @param oldIndex
339
+ */
340
+ function handleFocusIndexChange (newIndex, oldIndex) {
341
+ if (newIndex === oldIndex) return;
342
+ if (!elements.tabs[newIndex]) return;
343
+ adjustOffset();
344
+ redirectFocus();
345
+ }
346
+
347
+ /**
348
+ * Update the UI whenever the selected index changes. Calls user-defined select/deselect methods.
349
+ * @param newValue
350
+ * @param oldValue
351
+ */
352
+ function handleSelectedIndexChange (newValue, oldValue) {
353
+ if (newValue === oldValue) return;
354
+
355
+ $scope.selectedIndex = getNearestSafeIndex(newValue);
356
+ ctrl.lastSelectedIndex = oldValue;
357
+ ctrl.updateInkBarStyles();
358
+ updateHeightFromContent();
359
+ adjustOffset(newValue);
360
+ $scope.$broadcast('$mdTabsChanged');
361
+ ctrl.tabs[oldValue] && ctrl.tabs[oldValue].scope.deselect();
362
+ ctrl.tabs[newValue] && ctrl.tabs[newValue].scope.select();
363
+ }
364
+
365
+ /**
366
+ * Queues up a call to `handleWindowResize` when a resize occurs while the tabs component is
367
+ * hidden.
368
+ */
369
+ function handleResizeWhenVisible () {
370
+ //-- if there is already a watcher waiting for resize, do nothing
371
+ if (handleResizeWhenVisible.watcher) return;
372
+ //-- otherwise, we will abuse the $watch function to check for visible
373
+ handleResizeWhenVisible.watcher = $scope.$watch(function () {
374
+ //-- since we are checking for DOM size, we use $timeout to wait for after the DOM updates
375
+ $timeout(function () {
376
+ //-- if the watcher has already run (ie. multiple digests in one cycle), do nothing
377
+ if (!handleResizeWhenVisible.watcher) return;
378
+
379
+ if ($element.prop('offsetParent')) {
380
+ handleResizeWhenVisible.watcher();
381
+ handleResizeWhenVisible.watcher = null;
382
+
383
+ //-- we have to trigger our own $apply so that the DOM bindings will update
384
+ handleWindowResize();
385
+ }
386
+ }, 0, false);
387
+ });
388
+ }
389
+
390
+ //-- Event handlers / actions
391
+
392
+ /**
393
+ * Handle user keyboard interactions
394
+ * @param event
395
+ */
396
+ function keydown (event) {
397
+ switch (event.keyCode) {
398
+ case $mdConstant.KEY_CODE.LEFT_ARROW:
399
+ event.preventDefault();
400
+ incrementSelectedIndex(-1, true);
401
+ break;
402
+ case $mdConstant.KEY_CODE.RIGHT_ARROW:
403
+ event.preventDefault();
404
+ incrementSelectedIndex(1, true);
405
+ break;
406
+ case $mdConstant.KEY_CODE.SPACE:
407
+ case $mdConstant.KEY_CODE.ENTER:
408
+ event.preventDefault();
409
+ if (!locked) $scope.selectedIndex = ctrl.focusIndex;
410
+ break;
411
+ }
412
+ ctrl.lastClick = false;
413
+ }
414
+
415
+ /**
416
+ * Update the selected index and trigger a click event on the original `md-tab` element in order
417
+ * to fire user-added click events.
418
+ * @param index
419
+ */
420
+ function select (index) {
421
+ if (!locked) ctrl.focusIndex = $scope.selectedIndex = index;
422
+ ctrl.lastClick = true;
423
+ ctrl.tabs[index].element.triggerHandler('click');
424
+ }
425
+
426
+ /**
427
+ * When pagination is on, this makes sure the selected index is in view.
428
+ * @param event
429
+ */
430
+ function scroll (event) {
431
+ if (!ctrl.shouldPaginate) return;
432
+ event.preventDefault();
433
+ ctrl.offsetLeft = fixOffset(ctrl.offsetLeft - event.wheelDelta);
434
+ }
435
+
436
+ /**
437
+ * Slides the tabs over approximately one page forward.
438
+ */
439
+ function nextPage () {
440
+ var viewportWidth = elements.canvas.clientWidth,
441
+ totalWidth = viewportWidth + ctrl.offsetLeft,
442
+ i, tab;
443
+ for (i = 0; i < elements.tabs.length; i++) {
444
+ tab = elements.tabs[i];
445
+ if (tab.offsetLeft + tab.offsetWidth > totalWidth) break;
446
+ }
447
+ ctrl.offsetLeft = fixOffset(tab.offsetLeft);
448
+ }
449
+
450
+ /**
451
+ * Slides the tabs over approximately one page backward.
452
+ */
453
+ function previousPage () {
454
+ var i, tab;
455
+ for (i = 0; i < elements.tabs.length; i++) {
456
+ tab = elements.tabs[i];
457
+ if (tab.offsetLeft + tab.offsetWidth >= ctrl.offsetLeft) break;
458
+ }
459
+ ctrl.offsetLeft = fixOffset(tab.offsetLeft + tab.offsetWidth - elements.canvas.clientWidth);
460
+ }
461
+
462
+ /**
463
+ * Update size calculations when the window is resized.
464
+ */
465
+ function handleWindowResize () {
466
+ $scope.$apply(function () {
467
+ ctrl.lastSelectedIndex = $scope.selectedIndex;
468
+ ctrl.offsetLeft = fixOffset(ctrl.offsetLeft);
469
+ $timeout(ctrl.updateInkBarStyles, 0, false);
470
+ $timeout(updatePagination);
471
+ });
472
+ }
473
+
474
+ /**
475
+ * Remove a tab from the data and select the nearest valid tab.
476
+ * @param tabData
477
+ */
478
+ function removeTab (tabData) {
479
+ var selectedIndex = $scope.selectedIndex,
480
+ tab = ctrl.tabs.splice(tabData.getIndex(), 1)[0];
481
+ refreshIndex();
482
+ //-- when removing a tab, if the selected index did not change, we have to manually trigger the
483
+ // tab select/deselect events
484
+ if ($scope.selectedIndex === selectedIndex && !destroyed) {
485
+ tab.scope.deselect();
486
+ ctrl.tabs[$scope.selectedIndex] && ctrl.tabs[$scope.selectedIndex].scope.select();
487
+ }
488
+ $timeout(function () {
489
+ updatePagination();
490
+ ctrl.offsetLeft = fixOffset(ctrl.offsetLeft);
491
+ });
492
+ }
493
+
494
+ /**
495
+ * Create an entry in the tabs array for a new tab at the specified index.
496
+ * @param tabData
497
+ * @param index
498
+ * @returns {*}
499
+ */
500
+ function insertTab (tabData, index) {
501
+ var proto = {
502
+ getIndex: function () { return ctrl.tabs.indexOf(tab); },
503
+ isActive: function () { return this.getIndex() === $scope.selectedIndex; },
504
+ isLeft: function () { return this.getIndex() < $scope.selectedIndex; },
505
+ isRight: function () { return this.getIndex() > $scope.selectedIndex; },
506
+ shouldRender: function () { return !$scope.noDisconnect || this.isActive(); },
507
+ hasFocus: function () { return !ctrl.lastClick
508
+ && ctrl.hasFocus && this.getIndex() === ctrl.focusIndex; },
509
+ id: $mdUtil.nextUid()
510
+ },
511
+ tab = angular.extend(proto, tabData);
512
+ if (angular.isDefined(index)) {
513
+ ctrl.tabs.splice(index, 0, tab);
514
+ } else {
515
+ ctrl.tabs.push(tab);
516
+ }
517
+ processQueue();
518
+ updateHasContent();
519
+ //-- if autoselect is enabled, select the newly added tab
520
+ if (loaded && $scope.autoselect) $timeout(function () { select(ctrl.tabs.indexOf(tab)); });
521
+ $timeout(updatePagination);
522
+ return tab;
523
+ }
524
+
525
+ //-- Getter methods
526
+
527
+ /**
528
+ * Gathers references to all of the DOM elements used by this controller.
529
+ * @returns {{}}
530
+ */
531
+ function getElements () {
532
+ var elements = {};
533
+
534
+ //-- gather tab bar elements
535
+ elements.wrapper = $element[0].getElementsByTagName('md-tabs-wrapper')[0];
536
+ elements.data = $element[0].getElementsByTagName('md-tab-data')[0];
537
+ elements.canvas = elements.wrapper.getElementsByTagName('md-tabs-canvas')[0];
538
+ elements.paging = elements.canvas.getElementsByTagName('md-pagination-wrapper')[0];
539
+ elements.tabs = elements.paging.getElementsByTagName('md-tab-item');
540
+ elements.dummies = elements.canvas.getElementsByTagName('md-dummy-tab');
541
+ elements.inkBar = elements.paging.getElementsByTagName('md-ink-bar')[0];
542
+
543
+ //-- gather tab content elements
544
+ elements.contentsWrapper = $element[0].getElementsByTagName('md-tabs-content-wrapper')[0];
545
+ elements.contents = elements.contentsWrapper.getElementsByTagName('md-tab-content');
546
+
547
+ return elements;
548
+ }
549
+
550
+ /**
551
+ * Determines whether or not the left pagination arrow should be enabled.
552
+ * @returns {boolean}
553
+ */
554
+ function canPageBack () {
555
+ return ctrl.offsetLeft > 0;
556
+ }
557
+
558
+ /**
559
+ * Determines whether or not the right pagination arrow should be enabled.
560
+ * @returns {*|boolean}
561
+ */
562
+ function canPageForward () {
563
+ var lastTab = elements.tabs[elements.tabs.length - 1];
564
+ return lastTab && lastTab.offsetLeft + lastTab.offsetWidth > elements.canvas.clientWidth +
565
+ ctrl.offsetLeft;
566
+ }
567
+
568
+ /**
569
+ * Determines if the UI should stretch the tabs to fill the available space.
570
+ * @returns {*}
571
+ */
572
+ function shouldStretchTabs () {
573
+ switch ($scope.stretchTabs) {
574
+ case 'always': return true;
575
+ case 'never': return false;
576
+ default: return !ctrl.shouldPaginate
577
+ && $window.matchMedia('(max-width: 600px)').matches;
578
+ }
579
+ }
580
+
581
+ /**
582
+ * Determines if the tabs should appear centered.
583
+ * @returns {string|boolean}
584
+ */
585
+ function shouldCenterTabs () {
586
+ return $scope.centerTabs && !ctrl.shouldPaginate;
587
+ }
588
+
589
+ /**
590
+ * Determines if pagination is necessary to display the tabs within the available space.
591
+ * @returns {boolean}
592
+ */
593
+ function shouldPaginate () {
594
+ if ($scope.noPagination || !loaded) return false;
595
+ var canvasWidth = $element.prop('clientWidth');
596
+ angular.forEach(elements.dummies, function (tab) { canvasWidth -= tab.offsetWidth; });
597
+ return canvasWidth < 0;
598
+ }
599
+
600
+ /**
601
+ * Finds the nearest tab index that is available. This is primarily used for when the active
602
+ * tab is removed.
603
+ * @param newIndex
604
+ * @returns {*}
605
+ */
606
+ function getNearestSafeIndex(newIndex) {
607
+ var maxOffset = Math.max(ctrl.tabs.length - newIndex, newIndex),
608
+ i, tab;
609
+ for (i = 0; i <= maxOffset; i++) {
610
+ tab = ctrl.tabs[newIndex + i];
611
+ if (tab && (tab.scope.disabled !== true)) return tab.getIndex();
612
+ tab = ctrl.tabs[newIndex - i];
613
+ if (tab && (tab.scope.disabled !== true)) return tab.getIndex();
614
+ }
615
+ return newIndex;
616
+ }
617
+
618
+ //-- Utility methods
619
+
620
+ /**
621
+ * Defines a property using a getter and setter in order to trigger a change handler without
622
+ * using `$watch` to observe changes.
623
+ * @param key
624
+ * @param handler
625
+ * @param value
626
+ */
627
+ function defineProperty (key, handler, value) {
628
+ Object.defineProperty(ctrl, key, {
629
+ get: function () { return value; },
630
+ set: function (newValue) {
631
+ var oldValue = value;
632
+ value = newValue;
633
+ handler(newValue, oldValue);
634
+ }
635
+ });
636
+ }
637
+
638
+ /**
639
+ * Updates whether or not pagination should be displayed.
640
+ */
641
+ function updatePagination () {
642
+ ctrl.shouldPaginate = shouldPaginate();
643
+ ctrl.shouldCenterTabs = shouldCenterTabs();
644
+ $timeout(function () {
645
+ adjustOffset($scope.selectedIndex);
646
+ });
647
+ }
648
+
649
+ /**
650
+ * Re-orders the tabs and updates the selected and focus indexes to their new positions.
651
+ * This is triggered by `tabDirective.js` when the user's tabs have been re-ordered.
652
+ */
653
+ function updateTabOrder () {
654
+ var selectedItem = ctrl.tabs[$scope.selectedIndex],
655
+ focusItem = ctrl.tabs[ctrl.focusIndex];
656
+ ctrl.tabs = ctrl.tabs.sort(function (a, b) {
657
+ return a.index - b.index;
658
+ });
659
+ $scope.selectedIndex = ctrl.tabs.indexOf(selectedItem);
660
+ ctrl.focusIndex = ctrl.tabs.indexOf(focusItem);
661
+ }
662
+
663
+ /**
664
+ * This moves the selected or focus index left or right. This is used by the keydown handler.
665
+ * @param inc
666
+ */
667
+ function incrementSelectedIndex (inc) {
668
+ var newIndex,
669
+ index = ctrl.focusIndex;
670
+ for (newIndex = index + inc;
671
+ ctrl.tabs[newIndex] && ctrl.tabs[newIndex].scope.disabled;
672
+ newIndex += inc) {}
673
+ if (ctrl.tabs[newIndex]) {
674
+ ctrl.focusIndex = newIndex;
675
+ }
676
+ }
677
+
678
+ /**
679
+ * This is used to forward focus to dummy elements. This method is necessary to avoid aniation
680
+ * issues when attempting to focus an item that is out of view.
681
+ */
682
+ function redirectFocus () {
683
+ elements.dummies[ctrl.focusIndex].focus();
684
+ }
685
+
686
+ /**
687
+ * Forces the pagination to move the focused tab into view.
688
+ */
689
+ function adjustOffset (index) {
690
+ if (ctrl.shouldCenterTabs) return;
691
+ if (index == null) index = ctrl.focusIndex;
692
+ var tab = elements.tabs[index],
693
+ left = tab.offsetLeft,
694
+ right = tab.offsetWidth + left;
695
+ ctrl.offsetLeft = Math.max(ctrl.offsetLeft, fixOffset(right - elements.canvas.clientWidth));
696
+ ctrl.offsetLeft = Math.min(ctrl.offsetLeft, fixOffset(left));
697
+ }
698
+
699
+ /**
700
+ * Iterates through all queued functions and clears the queue. This is used for functions that
701
+ * are called before the UI is ready, such as size calculations.
702
+ */
703
+ function processQueue () {
704
+ queue.forEach(function (func) { $timeout(func); });
705
+ queue = [];
706
+ }
707
+
708
+ /**
709
+ * Determines if the tab content area is needed.
710
+ */
711
+ function updateHasContent () {
712
+ var hasContent = false;
713
+ angular.forEach(ctrl.tabs, function (tab) {
714
+ if (tab.template) hasContent = true;
715
+ });
716
+ ctrl.hasContent = hasContent;
717
+ }
718
+
719
+ /**
720
+ * Moves the indexes to their nearest valid values.
721
+ */
722
+ function refreshIndex () {
723
+ $scope.selectedIndex = getNearestSafeIndex($scope.selectedIndex);
724
+ ctrl.focusIndex = getNearestSafeIndex(ctrl.focusIndex);
725
+ }
726
+
727
+ /**
728
+ * Calculates the content height of the current tab.
729
+ * @returns {*}
730
+ */
731
+ function updateHeightFromContent () {
732
+ if (!$scope.dynamicHeight) return $element.css('height', '');
733
+ if (!ctrl.tabs.length) return queue.push(updateHeightFromContent);
734
+ var tabContent = elements.contents[$scope.selectedIndex],
735
+ contentHeight = tabContent ? tabContent.offsetHeight : 0,
736
+ tabsHeight = elements.wrapper.offsetHeight,
737
+ newHeight = contentHeight + tabsHeight,
738
+ currentHeight = $element.prop('clientHeight');
739
+ if (currentHeight === newHeight) return;
740
+ locked = true;
741
+ $animate
742
+ .animate(
743
+ $element,
744
+ { height: currentHeight + 'px' },
745
+ { height: newHeight + 'px'}
746
+ )
747
+ .then(function () {
748
+ $element.css('height', '');
749
+ locked = false;
750
+ });
751
+ }
752
+
753
+ /**
754
+ * Repositions the ink bar to the selected tab.
755
+ * @returns {*}
756
+ */
757
+ function updateInkBarStyles () {
758
+ if (!elements.tabs[$scope.selectedIndex]) return;
759
+ if (!ctrl.tabs.length) return queue.push(ctrl.updateInkBarStyles);
760
+ //-- if the element is not visible, we will not be able to calculate sizes until it is
761
+ //-- we should treat that as a resize event rather than just updating the ink bar
762
+ if (!$element.prop('offsetParent')) return handleResizeWhenVisible();
763
+ var index = $scope.selectedIndex,
764
+ totalWidth = elements.paging.offsetWidth,
765
+ tab = elements.tabs[index],
766
+ left = tab.offsetLeft,
767
+ right = totalWidth - left - tab.offsetWidth;
768
+ updateInkBarClassName();
769
+ angular.element(elements.inkBar).css({ left: left + 'px', right: right + 'px' });
770
+ }
771
+
772
+ /**
773
+ * Adds left/right classes so that the ink bar will animate properly.
774
+ */
775
+ function updateInkBarClassName () {
776
+ var newIndex = $scope.selectedIndex,
777
+ oldIndex = ctrl.lastSelectedIndex,
778
+ ink = angular.element(elements.inkBar);
779
+ if (!angular.isNumber(oldIndex)) return;
780
+ if (newIndex < oldIndex) {
781
+ ink.addClass('md-left').removeClass('md-right');
782
+ } else if (newIndex > oldIndex) {
783
+ ink.addClass('md-right').removeClass('md-left');
784
+ }
785
+ }
786
+
787
+ /**
788
+ * Takes an offset value and makes sure that it is within the min/max allowed values.
789
+ * @param value
790
+ * @returns {*}
791
+ */
792
+ function fixOffset (value) {
793
+ if (!elements.tabs.length || !ctrl.shouldPaginate) return 0;
794
+ var lastTab = elements.tabs[elements.tabs.length - 1],
795
+ totalWidth = lastTab.offsetLeft + lastTab.offsetWidth;
796
+ value = Math.max(0, value);
797
+ value = Math.min(totalWidth - elements.canvas.clientWidth, value);
798
+ return value;
799
+ }
800
+
801
+ /**
802
+ * Attaches a ripple to the tab item element.
803
+ * @param scope
804
+ * @param element
805
+ */
806
+ function attachRipple (scope, element) {
807
+ var options = { colorElement: angular.element(elements.inkBar) };
808
+ $mdTabInkRipple.attach(scope, element, options);
809
+ }
810
+ }
811
+ MdTabsController.$inject = ["$scope", "$element", "$window", "$timeout", "$mdConstant", "$mdTabInkRipple", "$mdUtil", "$animate", "$attrs", "$compile", "$mdTheming"];
812
+
813
+ /**
814
+ * @ngdoc directive
815
+ * @name mdTabs
816
+ * @module material.components.tabs
817
+ *
818
+ * @restrict E
819
+ *
820
+ * @description
821
+ * The `<md-tabs>` directive serves as the container for 1..n `<md-tab>` child directives to produces a Tabs components.
822
+ * In turn, the nested `<md-tab>` directive is used to specify a tab label for the **header button** and a [optional] tab view
823
+ * content that will be associated with each tab button.
824
+ *
825
+ * Below is the markup for its simplest usage:
826
+ *
827
+ * <hljs lang="html">
828
+ * <md-tabs>
829
+ * <md-tab label="Tab #1"></md-tab>
830
+ * <md-tab label="Tab #2"></md-tab>
831
+ * <md-tab label="Tab #3"></md-tab>
832
+ * </md-tabs>
833
+ * </hljs>
834
+ *
835
+ * Tabs supports three (3) usage scenarios:
836
+ *
837
+ * 1. Tabs (buttons only)
838
+ * 2. Tabs with internal view content
839
+ * 3. Tabs with external view content
840
+ *
841
+ * **Tab-only** support is useful when tab buttons are used for custom navigation regardless of any other components, content, or views.
842
+ * **Tabs with internal views** are the traditional usages where each tab has associated view content and the view switching is managed internally by the Tabs component.
843
+ * **Tabs with external view content** is often useful when content associated with each tab is independently managed and data-binding notifications announce tab selection changes.
844
+ *
845
+ * Additional features also include:
846
+ *
847
+ * * Content can include any markup.
848
+ * * If a tab is disabled while active/selected, then the next tab will be auto-selected.
849
+ *
850
+ * ### Explanation of tab stretching
851
+ *
852
+ * Initially, tabs will have an inherent size. This size will either be defined by how much space is needed to accommodate their text or set by the user through CSS. Calculations will be based on this size.
853
+ *
854
+ * On mobile devices, tabs will be expanded to fill the available horizontal space. When this happens, all tabs will become the same size.
855
+ *
856
+ * On desktops, by default, stretching will never occur.
857
+ *
858
+ * This default behavior can be overridden through the `md-stretch-tabs` attribute. Here is a table showing when stretching will occur:
859
+ *
860
+ * `md-stretch-tabs` | mobile | desktop
861
+ * ------------------|-----------|--------
862
+ * `auto` | stretched | ---
863
+ * `always` | stretched | stretched
864
+ * `never` | --- | ---
865
+ *
866
+ * @param {integer=} md-selected Index of the active/selected tab
867
+ * @param {boolean=} md-no-ink If present, disables ink ripple effects.
868
+ * @param {boolean=} md-no-bar If present, disables the selection ink bar.
869
+ * @param {string=} md-align-tabs Attribute to indicate position of tab buttons: `bottom` or `top`; default is `top`
870
+ * @param {string=} md-stretch-tabs Attribute to indicate whether or not to stretch tabs: `auto`, `always`, or `never`; default is `auto`
871
+ * @param {boolean=} md-dynamic-height When enabled, the tab wrapper will resize based on the contents of the selected tab
872
+ * @param {boolean=} md-center-tabs When enabled, tabs will be centered provided there is no need for pagination
873
+ * @param {boolean=} md-no-pagination When enabled, pagination will remain off
874
+ * @param {boolean=} md-swipe-content When enabled, swipe gestures will be enabled for the content area to jump between tabs
875
+ * @param {boolean=} md-no-disconnect If your tab content has background tasks (ie. event listeners), you will want to include this to prevent the scope from being disconnected
876
+ * @param {boolean=} md-autoselect When present, any tabs added after the initial load will be automatically selected
877
+ *
878
+ * @usage
879
+ * <hljs lang="html">
880
+ * <md-tabs md-selected="selectedIndex" >
881
+ * <img ng-src="img/angular.png" class="centered">
882
+ * <md-tab
883
+ * ng-repeat="tab in tabs | orderBy:predicate:reversed"
884
+ * md-on-select="onTabSelected(tab)"
885
+ * md-on-deselect="announceDeselected(tab)"
886
+ * ng-disabled="tab.disabled">
887
+ * <md-tab-label>
888
+ * {{tab.title}}
889
+ * <img src="img/removeTab.png" ng-click="removeTab(tab)" class="delete">
890
+ * </md-tab-label>
891
+ * <md-tab-body>
892
+ * {{tab.content}}
893
+ * </md-tab-body>
894
+ * </md-tab>
895
+ * </md-tabs>
896
+ * </hljs>
897
+ *
898
+ */
899
+ angular
900
+ .module('material.components.tabs')
901
+ .directive('mdTabs', MdTabs);
902
+
903
+ function MdTabs ($mdTheming, $mdUtil, $compile) {
904
+ return {
905
+ scope: {
906
+ noPagination: '=?mdNoPagination',
907
+ dynamicHeight: '=?mdDynamicHeight',
908
+ centerTabs: '=?mdCenterTabs',
909
+ selectedIndex: '=?mdSelected',
910
+ stretchTabs: '@?mdStretchTabs',
911
+ swipeContent: '=?mdSwipeContent',
912
+ noDisconnect: '=?mdNoDisconnect',
913
+ autoselect: '=?mdAutoselect'
914
+ },
915
+ template: function (element, attr) {
916
+ attr["$mdTabsTemplate"] = element.html();
917
+ return '\
918
+ <md-tabs-wrapper ng-class="{ \'md-stretch-tabs\': $mdTabsCtrl.shouldStretchTabs() }">\
919
+ <md-tab-data></md-tab-data>\
920
+ <md-prev-button\
921
+ tabindex="-1"\
922
+ role="button"\
923
+ aria-label="Previous Page"\
924
+ aria-disabled="{{!$mdTabsCtrl.canPageBack()}}"\
925
+ ng-class="{ \'md-disabled\': !$mdTabsCtrl.canPageBack() }"\
926
+ ng-if="$mdTabsCtrl.shouldPaginate"\
927
+ ng-click="$mdTabsCtrl.previousPage()">\
928
+ <md-icon md-svg-icon="md-tabs-arrow"></md-icon>\
929
+ </md-prev-button>\
930
+ <md-next-button\
931
+ tabindex="-1"\
932
+ role="button"\
933
+ aria-label="Next Page"\
934
+ aria-disabled="{{!$mdTabsCtrl.canPageForward()}}"\
935
+ ng-class="{ \'md-disabled\': !$mdTabsCtrl.canPageForward() }"\
936
+ ng-if="$mdTabsCtrl.shouldPaginate"\
937
+ ng-click="$mdTabsCtrl.nextPage()">\
938
+ <md-icon md-svg-icon="md-tabs-arrow"></md-icon>\
939
+ </md-next-button>\
940
+ <md-tabs-canvas\
941
+ tabindex="0"\
942
+ aria-activedescendant="tab-item-{{$mdTabsCtrl.tabs[$mdTabsCtrl.focusIndex].id}}"\
943
+ ng-focus="$mdTabsCtrl.redirectFocus()"\
944
+ ng-class="{\
945
+ \'md-paginated\': $mdTabsCtrl.shouldPaginate,\
946
+ \'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs\
947
+ }"\
948
+ ng-keydown="$mdTabsCtrl.keydown($event)"\
949
+ role="tablist">\
950
+ <md-pagination-wrapper\
951
+ ng-class="{ \'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs }"\
952
+ md-tab-scroll="$mdTabsCtrl.scroll($event)">\
953
+ <md-tab-item\
954
+ tabindex="-1"\
955
+ class="md-tab"\
956
+ style="max-width: {{ tabWidth ? tabWidth + \'px\' : \'none\' }}"\
957
+ ng-repeat="tab in $mdTabsCtrl.tabs"\
958
+ role="tab"\
959
+ aria-controls="tab-content-{{tab.id}}"\
960
+ aria-selected="{{tab.isActive()}}"\
961
+ aria-disabled="{{tab.scope.disabled || \'false\'}}"\
962
+ ng-click="$mdTabsCtrl.select(tab.getIndex())"\
963
+ ng-class="{\
964
+ \'md-active\': tab.isActive(),\
965
+ \'md-focused\': tab.hasFocus(),\
966
+ \'md-disabled\': tab.scope.disabled\
967
+ }"\
968
+ ng-disabled="tab.scope.disabled"\
969
+ md-swipe-left="$mdTabsCtrl.nextPage()"\
970
+ md-swipe-right="$mdTabsCtrl.previousPage()"\
971
+ md-template="tab.label"\
972
+ md-scope="tab.parent"></md-tab-item>\
973
+ <md-ink-bar ng-hide="noInkBar"></md-ink-bar>\
974
+ </md-pagination-wrapper>\
975
+ <div class="md-visually-hidden md-dummy-wrapper">\
976
+ <md-dummy-tab\
977
+ class="md-tab"\
978
+ tabindex="-1"\
979
+ id="tab-item-{{tab.id}}"\
980
+ role="tab"\
981
+ aria-controls="tab-content-{{tab.id}}"\
982
+ aria-selected="{{tab.isActive()}}"\
983
+ aria-disabled="{{tab.scope.disabled || \'false\'}}"\
984
+ ng-focus="$mdTabsCtrl.hasFocus = true"\
985
+ ng-blur="$mdTabsCtrl.hasFocus = false"\
986
+ ng-repeat="tab in $mdTabsCtrl.tabs"\
987
+ md-template="tab.label"\
988
+ md-scope="tab.parent"></md-dummy-tab>\
989
+ </div>\
990
+ </md-tabs-canvas>\
991
+ </md-tabs-wrapper>\
992
+ <md-tabs-content-wrapper ng-show="$mdTabsCtrl.hasContent">\
993
+ <md-tab-content\
994
+ id="tab-content-{{tab.id}}"\
995
+ role="tabpanel"\
996
+ aria-labelledby="tab-item-{{tab.id}}"\
997
+ md-swipe-left="swipeContent && $mdTabsCtrl.incrementSelectedIndex(1)"\
998
+ md-swipe-right="swipeContent && $mdTabsCtrl.incrementSelectedIndex(-1)"\
999
+ ng-if="$mdTabsCtrl.hasContent"\
1000
+ ng-repeat="(index, tab) in $mdTabsCtrl.tabs"\
1001
+ md-connected-if="tab.isActive()"\
1002
+ ng-class="{\
1003
+ \'md-no-transition\': $mdTabsCtrl.lastSelectedIndex == null,\
1004
+ \'md-active\': tab.isActive(),\
1005
+ \'md-left\': tab.isLeft(),\
1006
+ \'md-right\': tab.isRight(),\
1007
+ \'md-no-scroll\': dynamicHeight\
1008
+ }">\
1009
+ <div\
1010
+ md-template="tab.template"\
1011
+ md-scope="tab.parent"\
1012
+ ng-if="tab.shouldRender()"></div>\
1013
+ </md-tab-content>\
1014
+ </md-tabs-content-wrapper>\
1015
+ ';
1016
+ },
1017
+ controller: 'MdTabsController',
1018
+ controllerAs: '$mdTabsCtrl'
1019
+ };
1020
+ }
1021
+ MdTabs.$inject = ["$mdTheming", "$mdUtil", "$compile"];
1022
+
1023
+ angular
1024
+ .module('material.components.tabs')
1025
+ .directive('mdTemplate', MdTemplate);
1026
+
1027
+ function MdTemplate ($compile, $mdUtil, $timeout) {
1028
+ return {
1029
+ restrict: 'A',
1030
+ link: link,
1031
+ scope: {
1032
+ template: '=mdTemplate',
1033
+ compileScope: '=mdScope',
1034
+ connected: '=?mdConnectedIf'
1035
+ },
1036
+ require: '^?mdTabs'
1037
+ };
1038
+ function link (scope, element, attr, ctrl) {
1039
+ if (!ctrl) return;
1040
+ var compileScope = scope.compileScope.$new();
1041
+ element.html(scope.template);
1042
+ $compile(element.contents())(compileScope);
1043
+ return $timeout(handleScope);
1044
+ function handleScope () {
1045
+ scope.$watch('connected', function (value) { value === false ? disconnect() : reconnect(); });
1046
+ scope.$on('$destroy', reconnect);
1047
+ }
1048
+ function disconnect () {
1049
+ if (ctrl.scope.noDisconnect) return;
1050
+ $mdUtil.disconnectScope(compileScope);
1051
+ }
1052
+ function reconnect () {
1053
+ if (ctrl.scope.noDisconnect) return;
1054
+ $mdUtil.reconnectScope(compileScope);
1055
+ }
1056
+ }
1057
+ }
1058
+ MdTemplate.$inject = ["$compile", "$mdUtil", "$timeout"];
1059
+
1060
+ ng.material.components.tabs = angular.module("material.components.tabs");