mno-enterprise-frontend 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -0
  3. data/Rakefile +12 -0
  4. data/app/assets/images/favicon.ico +0 -0
  5. data/app/assets/images/mno_enterprise/impac/close-widget-pink.png +0 -0
  6. data/app/assets/images/mno_enterprise/impac/close-widget.png +0 -0
  7. data/app/assets/images/mno_enterprise/loader-32x32-bg-inverse.gif +0 -0
  8. data/app/assets/images/mno_enterprise/loader-32x32-bg-main.gif +0 -0
  9. data/app/assets/images/mno_enterprise/maestrano/logo-whitebg.png +0 -0
  10. data/app/assets/javascripts/mno_enterprise/angular/app.js.coffee.erb +173 -0
  11. data/app/assets/javascripts/mno_enterprise/angular/controllers/maestrano-controllers.js.coffee +4 -0
  12. data/app/assets/javascripts/mno_enterprise/angular/controllers/modals/modals-ctrl.js.coffee +62 -0
  13. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-account.js.coffee +157 -0
  14. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-app-deletion-request.js.coffee +62 -0
  15. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-apps-list.js.coffee +127 -0
  16. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-components.js.coffee +25 -0
  17. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace-app.js.coffee +77 -0
  18. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace.js.coffee +51 -0
  19. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-menu.js.coffee +174 -0
  20. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/arrears.js.coffee +70 -0
  21. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/billing.js.coffee +48 -0
  22. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/credit-card.js.coffee +142 -0
  23. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/index.js.coffee +61 -0
  24. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/invoices.js.coffee +42 -0
  25. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/members.js.coffee +280 -0
  26. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/settings.js.coffee +91 -0
  27. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/team-list.js.coffee +179 -0
  28. data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/teams.js.coffee +268 -0
  29. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/file-model.js.coffee +33 -0
  30. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/maestrano-components.js.coffee +22 -0
  31. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-autostop-app.js.coffee +123 -0
  32. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-compile.js.coffee +18 -0
  33. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-currency-widget.js.coffee +43 -0
  34. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-current-currency.js.coffee +22 -0
  35. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-editable.js.coffee +68 -0
  36. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-flash-msg.js.coffee +40 -0
  37. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-helptext.js.coffee +38 -0
  38. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-loading-lounge.js.coffee +184 -0
  39. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-match.js.coffee +14 -0
  40. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-message-modal.js.coffee +56 -0
  41. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-notification-widget.js.coffee +192 -0
  42. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-code-popup.js.coffee +74 -0
  43. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-contact.js.coffee +59 -0
  44. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-password-strength.js.coffee +154 -0
  45. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-password.js.coffee +40 -0
  46. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-price-converter.js.coffee +49 -0
  47. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-scroll-to.js.coffee +14 -0
  48. data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-typeahead.js.coffee +89 -0
  49. data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/components.js.coffee +7 -0
  50. data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/index.js.coffee +256 -0
  51. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-app-by-category.js.coffee +5 -0
  52. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-currency.js.coffee +30 -0
  53. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-filters.js.coffee +7 -0
  54. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-replace-underscore-with-space.js.coffee +4 -0
  55. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-titleize.js.coffee +7 -0
  56. data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-truncate.js.coffee +24 -0
  57. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-app-instance.js.coffee +15 -0
  58. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-apps-document.js.coffee +83 -0
  59. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-user.js.coffee +27 -0
  60. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/organization-svc.js.coffee +318 -0
  61. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/team-svc.js.coffee +180 -0
  62. data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/tickets-svc.js.coffee +109 -0
  63. data/app/assets/javascripts/mno_enterprise/angular/services/impac-config.svc.js.coffee +35 -0
  64. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-apps-list-helper.js.coffee +337 -0
  65. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-assets.js.coffee.erb +21 -0
  66. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-currency.js.coffee +7 -0
  67. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-user-svc.js.coffee +99 -0
  68. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-exchange-rates.js.coffee +102 -0
  69. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-message-svc.js.coffee +71 -0
  70. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-miscellaneous.js.coffee.erb +46 -0
  71. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-modal.js.coffee +67 -0
  72. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-msg-bus.js.coffee +50 -0
  73. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-services.js.coffee +21 -0
  74. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-shopping-cart.js.coffee +361 -0
  75. data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-utilities.js.coffee +61 -0
  76. data/app/assets/javascripts/mno_enterprise/angular/services/marketplace-svc.js.coffee +59 -0
  77. data/app/assets/javascripts/mno_enterprise/application.js +17 -0
  78. data/app/assets/javascripts/mno_enterprise/application_lib.js +14 -0
  79. data/app/assets/javascripts/mno_enterprise/lib/angular-really-click.js +17 -0
  80. data/app/assets/javascripts/mno_enterprise/lib/sortable.js +315 -0
  81. data/app/assets/javascripts/mno_enterprise/lib/ui-bootstrap-tpls-0.13.4.js +5836 -0
  82. data/app/assets/javascripts/mno_enterprise/lib/xeditable.js +1588 -0
  83. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap.js +12 -0
  84. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/affix.js +162 -0
  85. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/alert.js +94 -0
  86. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/button.js +116 -0
  87. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/carousel.js +237 -0
  88. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/collapse.js +211 -0
  89. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/dropdown.js +161 -0
  90. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/modal.js +324 -0
  91. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/popover.js +113 -0
  92. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/scrollspy.js +175 -0
  93. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/tab.js +153 -0
  94. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/tooltip.js +472 -0
  95. data/app/assets/javascripts/mno_enterprise/twitter/bootstrap/transition.js +59 -0
  96. data/app/assets/javascripts/ng-performance/ngPerformance.html +109 -0
  97. data/app/assets/javascripts/ng-performance/ngPerformance.js +211 -0
  98. data/app/assets/stylesheets/mno_enterprise/application.css +13 -0
  99. data/app/assets/stylesheets/mno_enterprise/custom/accordion.less +90 -0
  100. data/app/assets/stylesheets/mno_enterprise/custom/alert.less +30 -0
  101. data/app/assets/stylesheets/mno_enterprise/custom/angular-animate.less +42 -0
  102. data/app/assets/stylesheets/mno_enterprise/custom/angular-material.less +56 -0
  103. data/app/assets/stylesheets/mno_enterprise/custom/bootstrap-on-juice.less +22 -0
  104. data/app/assets/stylesheets/mno_enterprise/custom/button.less +84 -0
  105. data/app/assets/stylesheets/mno_enterprise/custom/footer.less +44 -0
  106. data/app/assets/stylesheets/mno_enterprise/custom/form.less +191 -0
  107. data/app/assets/stylesheets/mno_enterprise/custom/header.less +281 -0
  108. data/app/assets/stylesheets/mno_enterprise/custom/impac-variables-override.less +65 -0
  109. data/app/assets/stylesheets/mno_enterprise/custom/modal.less +183 -0
  110. data/app/assets/stylesheets/mno_enterprise/custom/utilities.less +729 -0
  111. data/app/assets/stylesheets/mno_enterprise/custom/utility/app-presentation.less +77 -0
  112. data/app/assets/stylesheets/mno_enterprise/custom/utility/banners.less +145 -0
  113. data/app/assets/stylesheets/mno_enterprise/custom/utility/carousel.less +68 -0
  114. data/app/assets/stylesheets/mno_enterprise/custom/utility/helptext.less +40 -0
  115. data/app/assets/stylesheets/mno_enterprise/custom/utility/miscellaneous.less +134 -0
  116. data/app/assets/stylesheets/mno_enterprise/custom/utility/progress-bar.less +55 -0
  117. data/app/assets/stylesheets/mno_enterprise/custom/utility/step.less +101 -0
  118. data/app/assets/stylesheets/mno_enterprise/custom/utility/tabset.less +87 -0
  119. data/app/assets/stylesheets/mno_enterprise/custom/utility/testimonial.less +118 -0
  120. data/app/assets/stylesheets/mno_enterprise/custom/utility/text.less +23 -0
  121. data/app/assets/stylesheets/mno_enterprise/custom/views/apps.less +243 -0
  122. data/app/assets/stylesheets/mno_enterprise/custom/views/myspace.less +477 -0
  123. data/app/assets/stylesheets/mno_enterprise/custom/views/pages/confirmation_lounge.less +31 -0
  124. data/app/assets/stylesheets/mno_enterprise/custom/views/pages/home.less +57 -0
  125. data/app/assets/stylesheets/mno_enterprise/custom/views/pages/oauth-config-page.less +6 -0
  126. data/app/assets/stylesheets/mno_enterprise/custom/views/registration.less +84 -0
  127. data/app/assets/stylesheets/mno_enterprise/custom/views/star.less +18 -0
  128. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/bootstrap-wizard.less +63 -0
  129. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-marketplace.less +187 -0
  130. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-organization.less +149 -0
  131. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-teams.less +119 -0
  132. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/support.less +42 -0
  133. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/tickets.less +80 -0
  134. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/mno-editable.less +60 -0
  135. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/notification-widget.less +49 -0
  136. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/password-strength.less +28 -0
  137. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/shopping-cart.less +333 -0
  138. data/app/assets/stylesheets/mno_enterprise/custom/views/templates/star-wizard.less +49 -0
  139. data/app/assets/stylesheets/mno_enterprise/custom/views/user-setup.less +10 -0
  140. data/app/assets/stylesheets/mno_enterprise/custom/xeditable.less +40 -0
  141. data/app/assets/stylesheets/mno_enterprise/font-awesome/font-awesome-regular.less +13 -0
  142. data/app/assets/stylesheets/mno_enterprise/font-awesome/font-awesome-sprockets.less +13 -0
  143. data/app/assets/stylesheets/mno_enterprise/font-awesome/font-awesome.less +16 -0
  144. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/FontAwesome.otf +0 -0
  145. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  146. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/fontawesome-webfont.svg +640 -0
  147. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  148. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  149. data/app/assets/stylesheets/mno_enterprise/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  150. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/animated.less +34 -0
  151. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/bordered-pulled.less +25 -0
  152. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/core.less +12 -0
  153. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/extras.less +2 -0
  154. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/fixed-width.less +6 -0
  155. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/icons.less +677 -0
  156. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/larger.less +13 -0
  157. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/list.less +19 -0
  158. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/mixins.less +26 -0
  159. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/rotated-flipped.less +20 -0
  160. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/stacked.less +20 -0
  161. data/app/assets/stylesheets/mno_enterprise/font-awesome/framework/variables.less +687 -0
  162. data/app/assets/stylesheets/mno_enterprise/main.less +132 -0
  163. data/app/assets/stylesheets/mno_enterprise/mixins.less +75 -0
  164. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/alerts.less +73 -0
  165. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/badges.less +65 -0
  166. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/bootstrap.less +50 -0
  167. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/breadcrumbs.less +26 -0
  168. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/button-groups.less +243 -0
  169. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/buttons.less +160 -0
  170. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/carousel.less +269 -0
  171. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/close.less +34 -0
  172. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/code.less +69 -0
  173. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/component-animations.less +34 -0
  174. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/dropdowns.less +214 -0
  175. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/forms.less +566 -0
  176. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/glyphicons.less +301 -0
  177. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/grid.less +84 -0
  178. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/input-groups.less +166 -0
  179. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/jumbotron.less +50 -0
  180. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/labels.less +64 -0
  181. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/list-group.less +124 -0
  182. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/media.less +61 -0
  183. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins.less +39 -0
  184. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/alerts.less +14 -0
  185. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/background-variant.less +8 -0
  186. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/border-radius.less +18 -0
  187. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/buttons.less +52 -0
  188. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/center-block.less +7 -0
  189. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/clearfix.less +22 -0
  190. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/forms.less +85 -0
  191. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/gradients.less +59 -0
  192. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/grid-framework.less +91 -0
  193. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/grid.less +122 -0
  194. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/hide-text.less +21 -0
  195. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/image.less +33 -0
  196. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/labels.less +12 -0
  197. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/list-group.less +29 -0
  198. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/nav-divider.less +10 -0
  199. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/nav-vertical-align.less +9 -0
  200. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/opacity.less +8 -0
  201. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/pagination.less +23 -0
  202. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/panels.less +24 -0
  203. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/progress-bar.less +10 -0
  204. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/reset-filter.less +8 -0
  205. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/resize.less +6 -0
  206. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/responsive-visibility.less +15 -0
  207. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/size.less +10 -0
  208. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/tab-focus.less +9 -0
  209. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/table-row.less +28 -0
  210. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/text-emphasis.less +8 -0
  211. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/text-overflow.less +8 -0
  212. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/mixins/vendor-prefixes.less +227 -0
  213. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/modals.less +148 -0
  214. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/navbar.less +661 -0
  215. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/navs.less +244 -0
  216. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/normalize.less +427 -0
  217. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/pager.less +54 -0
  218. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/pagination.less +88 -0
  219. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/panels.less +265 -0
  220. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/popovers.less +135 -0
  221. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/print.less +107 -0
  222. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/progress-bars.less +87 -0
  223. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/responsive-embed.less +35 -0
  224. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/responsive-utilities.less +194 -0
  225. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/scaffolding.less +150 -0
  226. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/tables.less +234 -0
  227. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/theme.less +273 -0
  228. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/thumbnails.less +36 -0
  229. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/tooltip.less +103 -0
  230. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/type.less +302 -0
  231. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/utilities.less +56 -0
  232. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/variables.less +857 -0
  233. data/app/assets/stylesheets/mno_enterprise/twitter-bootstrap/wells.less +29 -0
  234. data/app/assets/stylesheets/mno_enterprise/variables.less +226 -0
  235. data/app/assets/templates/mno_enterprise/dashboard/account.html +131 -0
  236. data/app/assets/templates/mno_enterprise/dashboard/app_deletion.html +36 -0
  237. data/app/assets/templates/mno_enterprise/dashboard/apps_list.html +103 -0
  238. data/app/assets/templates/mno_enterprise/dashboard/horizontal_menu.html +85 -0
  239. data/app/assets/templates/mno_enterprise/dashboard/marketplace/index.html +60 -0
  240. data/app/assets/templates/mno_enterprise/dashboard/marketplace/show.html +133 -0
  241. data/app/assets/templates/mno_enterprise/dashboard/menu.html +161 -0
  242. data/app/assets/templates/mno_enterprise/dashboard/organization/arrears.html +37 -0
  243. data/app/assets/templates/mno_enterprise/dashboard/organization/billing.html +37 -0
  244. data/app/assets/templates/mno_enterprise/dashboard/organization/credit-card.html +156 -0
  245. data/app/assets/templates/mno_enterprise/dashboard/organization/index.full.html +181 -0
  246. data/app/assets/templates/mno_enterprise/dashboard/organization/index.html +173 -0
  247. data/app/assets/templates/mno_enterprise/dashboard/organization/invoices.html +27 -0
  248. data/app/assets/templates/mno_enterprise/dashboard/organization/members.html +288 -0
  249. data/app/assets/templates/mno_enterprise/dashboard/organization/settings.html +55 -0
  250. data/app/assets/templates/mno_enterprise/dashboard/teams/index.html +175 -0
  251. data/app/assets/templates/mno_enterprise/dashboard/teams/member-add-modal.html +60 -0
  252. data/app/assets/templates/mno_enterprise/dashboard/teams/member-removal-modal.html +35 -0
  253. data/app/assets/templates/mno_enterprise/dashboard/teams/team-add-modal.html +35 -0
  254. data/app/assets/templates/mno_enterprise/dashboard/teams/team-delete-modal.html +35 -0
  255. data/app/assets/templates/mno_enterprise/dashboard/teams/team-list.html +107 -0
  256. data/app/assets/templates/mno_enterprise/default_template.html +20 -0
  257. data/app/assets/templates/mno_enterprise/maestrano-components/autostop_app.html +42 -0
  258. data/app/assets/templates/mno_enterprise/maestrano-components/currency_widget.html +1 -0
  259. data/app/assets/templates/mno_enterprise/maestrano-components/editable.html +28 -0
  260. data/app/assets/templates/mno_enterprise/maestrano-components/loading_lounge.html +63 -0
  261. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/congratulations.html +8 -0
  262. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/default.html +1 -0
  263. data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/information.html +8 -0
  264. data/app/assets/templates/mno_enterprise/maestrano-components/notification-widget.html +31 -0
  265. data/app/assets/templates/mno_enterprise/maestrano-components/password.html +55 -0
  266. data/app/assets/templates/mno_enterprise/maestrano-components/star_wizard.html +254 -0
  267. data/app/assets/templates/mno_enterprise/maestrano-components/upload_spreadsheet.html +191 -0
  268. data/app/assets/templates/mno_enterprise/modals/new-organization-reseller-req.html +35 -0
  269. data/app/assets/templates/mno_enterprise/modals/new-organization.html +35 -0
  270. data/app/assets/templates/mno_enterprise/user-setup/index.html +312 -0
  271. data/app/controllers/mno_enterprise/invoices_controller.rb +22 -0
  272. data/app/controllers/mno_enterprise/pages_controller.rb +9 -0
  273. data/app/controllers/mno_enterprise/user_setup_controller.rb +11 -0
  274. data/app/views/layouts/mno_enterprise/_application_js.html.haml +17 -0
  275. data/app/views/layouts/mno_enterprise/_common_cdn_lib_js.html.haml +19 -0
  276. data/app/views/layouts/mno_enterprise/_footer_files.html.haml +5 -0
  277. data/app/views/layouts/mno_enterprise/_header_files.html.haml +31 -0
  278. data/app/views/layouts/mno_enterprise/_impersonate_header.html.haml +7 -0
  279. data/app/views/layouts/mno_enterprise/_public_page_header.html.haml +2 -0
  280. data/app/views/layouts/mno_enterprise/application.html.haml +18 -0
  281. data/app/views/layouts/mno_enterprise/application_dashboard.html.haml +22 -0
  282. data/app/views/layouts/mno_enterprise/third_party/_google_tag_container.html.haml +10 -0
  283. data/app/views/mno_enterprise/pages/app_access_unauthorized.html.haml +19 -0
  284. data/app/views/mno_enterprise/pages/app_logout.html.haml +18 -0
  285. data/app/views/mno_enterprise/pages/billing_details_required.html.haml +19 -0
  286. data/app/views/mno_enterprise/pages/loading.html.haml +3 -0
  287. data/app/views/mno_enterprise/pages/myspace.html.haml +6 -0
  288. data/app/views/mno_enterprise/provision/_provision_apps.html.haml +43 -0
  289. data/app/views/mno_enterprise/provision/_select_organization.html.haml +17 -0
  290. data/app/views/mno_enterprise/provision/new.html.haml +4 -0
  291. data/app/views/mno_enterprise/user_setup/index.html.haml +2 -0
  292. data/config/initializers/ng-annotate.rb +3 -0
  293. data/config/initializers/ng-performance.rb +3 -0
  294. data/config/routes.rb +19 -0
  295. data/lib/assets/javascripts/impac-angular.js +8719 -0
  296. data/lib/assets/stylesheets/impac-angular.less +2352 -0
  297. data/lib/mno-enterprise-frontend.rb +1 -0
  298. data/lib/mno_enterprise/frontend.rb +13 -0
  299. data/lib/mno_enterprise/frontend/assets_util.rb +47 -0
  300. data/lib/mno_enterprise/frontend/concerns/README.md +6 -0
  301. data/lib/mno_enterprise/frontend/concerns/controllers/pages_controller.rb +25 -0
  302. data/lib/mno_enterprise/frontend/engine.rb +13 -0
  303. data/spec/controllers/mno_enterprise/auth/confirmations_controller_spec.rb +84 -0
  304. data/spec/controllers/mno_enterprise/invoices_controller_spec.rb +34 -0
  305. data/spec/controllers/mno_enterprise/pages_controller_spec.rb +42 -0
  306. data/spec/controllers/mno_enterprise/user_setup_controller_spec.rb +33 -0
  307. data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +76 -0
  308. data/spec/rails_helper.rb +92 -0
  309. data/spec/routing/mno_enterprise/invoices_controller_routing_spec.rb +11 -0
  310. data/spec/routing/mno_enterprise/pages_controller_routing_spec.rb +18 -0
  311. data/spec/routing/mno_enterprise/user_setup_controller_routing_spec.rb +11 -0
  312. data/spec/spec_helper.rb +78 -0
  313. metadata +464 -0
@@ -0,0 +1,69 @@
1
+ //
2
+ // Code (inline and block)
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Inline and block code styles
7
+ code,
8
+ kbd,
9
+ pre,
10
+ samp {
11
+ font-family: @font-family-monospace;
12
+ }
13
+
14
+ // Inline code
15
+ code {
16
+ padding: 2px 4px;
17
+ font-size: 90%;
18
+ color: @code-color;
19
+ background-color: @code-bg;
20
+ border-radius: @border-radius-base;
21
+ }
22
+
23
+ // User input typically entered via keyboard
24
+ kbd {
25
+ padding: 2px 4px;
26
+ font-size: 90%;
27
+ color: @kbd-color;
28
+ background-color: @kbd-bg;
29
+ border-radius: @border-radius-small;
30
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
31
+
32
+ kbd {
33
+ padding: 0;
34
+ font-size: 100%;
35
+ font-weight: bold;
36
+ box-shadow: none;
37
+ }
38
+ }
39
+
40
+ // Blocks of code
41
+ pre {
42
+ display: block;
43
+ padding: ((@line-height-computed - 1) / 2);
44
+ margin: 0 0 (@line-height-computed / 2);
45
+ font-size: (@font-size-base - 1); // 14px to 13px
46
+ line-height: @line-height-base;
47
+ word-break: break-all;
48
+ word-wrap: break-word;
49
+ color: @pre-color;
50
+ background-color: @pre-bg;
51
+ border: 1px solid @pre-border-color;
52
+ border-radius: @border-radius-base;
53
+
54
+ // Account for some code outputs that place code tags in pre tags
55
+ code {
56
+ padding: 0;
57
+ font-size: inherit;
58
+ color: inherit;
59
+ white-space: pre-wrap;
60
+ background-color: transparent;
61
+ border-radius: 0;
62
+ }
63
+ }
64
+
65
+ // Enable scrollable blocks of code
66
+ .pre-scrollable {
67
+ max-height: @pre-scrollable-max-height;
68
+ overflow-y: scroll;
69
+ }
@@ -0,0 +1,34 @@
1
+ //
2
+ // Component animations
3
+ // --------------------------------------------------
4
+
5
+ // Heads up!
6
+ //
7
+ // We don't use the `.opacity()` mixin here since it causes a bug with text
8
+ // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
9
+
10
+ .fade {
11
+ opacity: 0;
12
+ .transition(opacity .15s linear);
13
+ &.in {
14
+ opacity: 1;
15
+ }
16
+ }
17
+
18
+ .collapse {
19
+ display: none;
20
+ visibility: hidden;
21
+
22
+ &.in { display: block; visibility: visible; }
23
+ tr&.in { display: table-row; }
24
+ tbody&.in { display: table-row-group; }
25
+ }
26
+
27
+ .collapsing {
28
+ position: relative;
29
+ height: 0;
30
+ overflow: hidden;
31
+ .transition-property(~"height, visibility");
32
+ .transition-duration(.35s);
33
+ .transition-timing-function(ease);
34
+ }
@@ -0,0 +1,214 @@
1
+ //
2
+ // Dropdown menus
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Dropdown arrow/caret
7
+ .caret {
8
+ display: inline-block;
9
+ width: 0;
10
+ height: 0;
11
+ margin-left: 2px;
12
+ vertical-align: middle;
13
+ border-top: @caret-width-base solid;
14
+ border-right: @caret-width-base solid transparent;
15
+ border-left: @caret-width-base solid transparent;
16
+ }
17
+
18
+ // The dropdown wrapper (div)
19
+ .dropup,
20
+ .dropdown {
21
+ position: relative;
22
+ }
23
+
24
+ // Prevent the focus on the dropdown toggle when closing dropdowns
25
+ .dropdown-toggle:focus {
26
+ outline: 0;
27
+ }
28
+
29
+ // The dropdown menu (ul)
30
+ .dropdown-menu {
31
+ position: absolute;
32
+ top: 100%;
33
+ left: 0;
34
+ z-index: @zindex-dropdown;
35
+ display: none; // none by default, but block on "open" of the menu
36
+ float: left;
37
+ min-width: 160px;
38
+ padding: 5px 0;
39
+ margin: 2px 0 0; // override default ul
40
+ list-style: none;
41
+ font-size: @font-size-base;
42
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
43
+ background-color: @dropdown-bg;
44
+ border: 1px solid @dropdown-fallback-border; // IE8 fallback
45
+ border: 1px solid @dropdown-border;
46
+ border-radius: @border-radius-base;
47
+ .box-shadow(0 6px 12px rgba(0,0,0,.175));
48
+ background-clip: padding-box;
49
+
50
+ // Aligns the dropdown menu to right
51
+ //
52
+ // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
53
+ &.pull-right {
54
+ right: 0;
55
+ left: auto;
56
+ }
57
+
58
+ // Dividers (basically an hr) within the dropdown
59
+ .divider {
60
+ .nav-divider(@dropdown-divider-bg);
61
+ }
62
+
63
+ // Links within the dropdown menu
64
+ > li > a {
65
+ display: block;
66
+ padding: 3px 20px;
67
+ clear: both;
68
+ font-weight: normal;
69
+ line-height: @line-height-base;
70
+ color: @dropdown-link-color;
71
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
72
+ }
73
+ }
74
+
75
+ // Hover/Focus state
76
+ .dropdown-menu > li > a {
77
+ &:hover,
78
+ &:focus {
79
+ text-decoration: none;
80
+ color: @dropdown-link-hover-color;
81
+ background-color: @dropdown-link-hover-bg;
82
+ }
83
+ }
84
+
85
+ // Active state
86
+ .dropdown-menu > .active > a {
87
+ &,
88
+ &:hover,
89
+ &:focus {
90
+ color: @dropdown-link-active-color;
91
+ text-decoration: none;
92
+ outline: 0;
93
+ background-color: @dropdown-link-active-bg;
94
+ }
95
+ }
96
+
97
+ // Disabled state
98
+ //
99
+ // Gray out text and ensure the hover/focus state remains gray
100
+
101
+ .dropdown-menu > .disabled > a {
102
+ &,
103
+ &:hover,
104
+ &:focus {
105
+ color: @dropdown-link-disabled-color;
106
+ }
107
+
108
+ // Nuke hover/focus effects
109
+ &:hover,
110
+ &:focus {
111
+ text-decoration: none;
112
+ background-color: transparent;
113
+ background-image: none; // Remove CSS gradient
114
+ .reset-filter();
115
+ cursor: @cursor-disabled;
116
+ }
117
+ }
118
+
119
+ // Open state for the dropdown
120
+ .open {
121
+ // Show the menu
122
+ > .dropdown-menu {
123
+ display: block;
124
+ }
125
+
126
+ // Remove the outline when :focus is triggered
127
+ > a {
128
+ outline: 0;
129
+ }
130
+ }
131
+
132
+ // Menu positioning
133
+ //
134
+ // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
135
+ // menu with the parent.
136
+ .dropdown-menu-right {
137
+ left: auto; // Reset the default from `.dropdown-menu`
138
+ right: 0;
139
+ }
140
+ // With v3, we enabled auto-flipping if you have a dropdown within a right
141
+ // aligned nav component. To enable the undoing of that, we provide an override
142
+ // to restore the default dropdown menu alignment.
143
+ //
144
+ // This is only for left-aligning a dropdown menu within a `.navbar-right` or
145
+ // `.pull-right` nav component.
146
+ .dropdown-menu-left {
147
+ left: 0;
148
+ right: auto;
149
+ }
150
+
151
+ // Dropdown section headers
152
+ .dropdown-header {
153
+ display: block;
154
+ padding: 3px 20px;
155
+ font-size: @font-size-small;
156
+ line-height: @line-height-base;
157
+ color: @dropdown-header-color;
158
+ white-space: nowrap; // as with > li > a
159
+ }
160
+
161
+ // Backdrop to catch body clicks on mobile, etc.
162
+ .dropdown-backdrop {
163
+ position: fixed;
164
+ left: 0;
165
+ right: 0;
166
+ bottom: 0;
167
+ top: 0;
168
+ z-index: (@zindex-dropdown - 10);
169
+ }
170
+
171
+ // Right aligned dropdowns
172
+ .pull-right > .dropdown-menu {
173
+ right: 0;
174
+ left: auto;
175
+ }
176
+
177
+ // Allow for dropdowns to go bottom up (aka, dropup-menu)
178
+ //
179
+ // Just add .dropup after the standard .dropdown class and you're set, bro.
180
+ // TODO: abstract this so that the navbar fixed styles are not placed here?
181
+
182
+ .dropup,
183
+ .navbar-fixed-bottom .dropdown {
184
+ // Reverse the caret
185
+ .caret {
186
+ border-top: 0;
187
+ border-bottom: @caret-width-base solid;
188
+ content: "";
189
+ }
190
+ // Different positioning for bottom up menu
191
+ .dropdown-menu {
192
+ top: auto;
193
+ bottom: 100%;
194
+ margin-bottom: 2px;
195
+ }
196
+ }
197
+
198
+
199
+ // Component alignment
200
+ //
201
+ // Reiterate per navbar.less and the modified component alignment there.
202
+
203
+ @media (min-width: @grid-float-breakpoint) {
204
+ .navbar-right {
205
+ .dropdown-menu {
206
+ .dropdown-menu-right();
207
+ }
208
+ // Necessary for overrides of the default right aligned menu.
209
+ // Will remove come v4 in all likelihood.
210
+ .dropdown-menu-left {
211
+ .dropdown-menu-left();
212
+ }
213
+ }
214
+ }
@@ -0,0 +1,566 @@
1
+ //
2
+ // Forms
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Normalize non-controls
7
+ //
8
+ // Restyle and baseline non-control form elements.
9
+
10
+ fieldset {
11
+ padding: 0;
12
+ margin: 0;
13
+ border: 0;
14
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
15
+ // so we reset that to ensure it behaves more like a standard block element.
16
+ // See https://github.com/twbs/bootstrap/issues/12359.
17
+ min-width: 0;
18
+ }
19
+
20
+ legend {
21
+ display: block;
22
+ width: 100%;
23
+ padding: 0;
24
+ margin-bottom: @line-height-computed;
25
+ font-size: (@font-size-base * 1.5);
26
+ line-height: inherit;
27
+ color: @legend-color;
28
+ border: 0;
29
+ border-bottom: 1px solid @legend-border-color;
30
+ }
31
+
32
+ label {
33
+ display: inline-block;
34
+ max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
35
+ margin-bottom: 5px;
36
+ font-weight: bold;
37
+ }
38
+
39
+
40
+ // Normalize form controls
41
+ //
42
+ // While most of our form styles require extra classes, some basic normalization
43
+ // is required to ensure optimum display with or without those classes to better
44
+ // address browser inconsistencies.
45
+
46
+ // Override content-box in Normalize (* isn't specific enough)
47
+ input[type="search"] {
48
+ .box-sizing(border-box);
49
+ }
50
+
51
+ // Position radios and checkboxes better
52
+ input[type="radio"],
53
+ input[type="checkbox"] {
54
+ margin: 4px 0 0;
55
+ margin-top: 1px \9; // IE8-9
56
+ line-height: normal;
57
+ }
58
+
59
+ // Set the height of file controls to match text inputs
60
+ input[type="file"] {
61
+ display: block;
62
+ }
63
+
64
+ // Make range inputs behave like textual form controls
65
+ input[type="range"] {
66
+ display: block;
67
+ width: 100%;
68
+ }
69
+
70
+ // Make multiple select elements height not fixed
71
+ select[multiple],
72
+ select[size] {
73
+ height: auto;
74
+ }
75
+
76
+ // Focus for file, radio, and checkbox
77
+ input[type="file"]:focus,
78
+ input[type="radio"]:focus,
79
+ input[type="checkbox"]:focus {
80
+ .tab-focus();
81
+ }
82
+
83
+ // Adjust output element
84
+ output {
85
+ display: block;
86
+ padding-top: (@padding-base-vertical + 1);
87
+ font-size: @font-size-base;
88
+ line-height: @line-height-base;
89
+ color: @input-color;
90
+ }
91
+
92
+
93
+ // Common form controls
94
+ //
95
+ // Shared size and type resets for form controls. Apply `.form-control` to any
96
+ // of the following form controls:
97
+ //
98
+ // select
99
+ // textarea
100
+ // input[type="text"]
101
+ // input[type="password"]
102
+ // input[type="datetime"]
103
+ // input[type="datetime-local"]
104
+ // input[type="date"]
105
+ // input[type="month"]
106
+ // input[type="time"]
107
+ // input[type="week"]
108
+ // input[type="number"]
109
+ // input[type="email"]
110
+ // input[type="url"]
111
+ // input[type="search"]
112
+ // input[type="tel"]
113
+ // input[type="color"]
114
+
115
+ .form-control {
116
+ display: block;
117
+ width: 100%;
118
+ height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
119
+ padding: @padding-base-vertical @padding-base-horizontal;
120
+ font-size: @font-size-base;
121
+ line-height: @line-height-base;
122
+ color: @input-color;
123
+ background-color: @input-bg;
124
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
125
+ border: 1px solid @input-border;
126
+ border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
127
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
128
+ .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
129
+
130
+ // Customize the `:focus` state to imitate native WebKit styles.
131
+ .form-control-focus();
132
+
133
+ // Placeholder
134
+ .placeholder();
135
+
136
+ // Disabled and read-only inputs
137
+ //
138
+ // HTML5 says that controls under a fieldset > legend:first-child won't be
139
+ // disabled if the fieldset is disabled. Due to implementation difficulty, we
140
+ // don't honor that edge case; we style them as disabled anyway.
141
+ &[disabled],
142
+ &[readonly],
143
+ fieldset[disabled] & {
144
+ cursor: @cursor-disabled;
145
+ background-color: @input-bg-disabled;
146
+ opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
147
+ }
148
+
149
+ // Reset height for `textarea`s
150
+ textarea& {
151
+ height: auto;
152
+ }
153
+ }
154
+
155
+
156
+ // Search inputs in iOS
157
+ //
158
+ // This overrides the extra rounded corners on search inputs in iOS so that our
159
+ // `.form-control` class can properly style them. Note that this cannot simply
160
+ // be added to `.form-control` as it's not specific enough. For details, see
161
+ // https://github.com/twbs/bootstrap/issues/11586.
162
+
163
+ input[type="search"] {
164
+ -webkit-appearance: none;
165
+ }
166
+
167
+
168
+ // Special styles for iOS temporal inputs
169
+ //
170
+ // In Mobile Safari, setting `display: block` on temporal inputs causes the
171
+ // text within the input to become vertically misaligned. As a workaround, we
172
+ // set a pixel line-height that matches the given height of the input, but only
173
+ // for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
174
+
175
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
176
+ input[type="date"],
177
+ input[type="time"],
178
+ input[type="datetime-local"],
179
+ input[type="month"] {
180
+ line-height: @input-height-base;
181
+
182
+ &.input-sm,
183
+ .input-group-sm & {
184
+ line-height: @input-height-small;
185
+ }
186
+
187
+ &.input-lg,
188
+ .input-group-lg & {
189
+ line-height: @input-height-large;
190
+ }
191
+ }
192
+ }
193
+
194
+
195
+ // Form groups
196
+ //
197
+ // Designed to help with the organization and spacing of vertical forms. For
198
+ // horizontal forms, use the predefined grid classes.
199
+
200
+ .form-group {
201
+ margin-bottom: 15px;
202
+ }
203
+
204
+
205
+ // Checkboxes and radios
206
+ //
207
+ // Indent the labels to position radios/checkboxes as hanging controls.
208
+
209
+ .radio,
210
+ .checkbox {
211
+ position: relative;
212
+ display: block;
213
+ margin-top: 10px;
214
+ margin-bottom: 10px;
215
+
216
+ label {
217
+ min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
218
+ padding-left: 20px;
219
+ margin-bottom: 0;
220
+ font-weight: normal;
221
+ cursor: pointer;
222
+ }
223
+ }
224
+ .radio input[type="radio"],
225
+ .radio-inline input[type="radio"],
226
+ .checkbox input[type="checkbox"],
227
+ .checkbox-inline input[type="checkbox"] {
228
+ position: absolute;
229
+ margin-left: -20px;
230
+ margin-top: 4px \9;
231
+ }
232
+
233
+ .radio + .radio,
234
+ .checkbox + .checkbox {
235
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
236
+ }
237
+
238
+ // Radios and checkboxes on same line
239
+ .radio-inline,
240
+ .checkbox-inline {
241
+ display: inline-block;
242
+ padding-left: 20px;
243
+ margin-bottom: 0;
244
+ vertical-align: middle;
245
+ font-weight: normal;
246
+ cursor: pointer;
247
+ }
248
+ .radio-inline + .radio-inline,
249
+ .checkbox-inline + .checkbox-inline {
250
+ margin-top: 0;
251
+ margin-left: 10px; // space out consecutive inline controls
252
+ }
253
+
254
+ // Apply same disabled cursor tweak as for inputs
255
+ // Some special care is needed because <label>s don't inherit their parent's `cursor`.
256
+ //
257
+ // Note: Neither radios nor checkboxes can be readonly.
258
+ input[type="radio"],
259
+ input[type="checkbox"] {
260
+ &[disabled],
261
+ &.disabled,
262
+ fieldset[disabled] & {
263
+ cursor: @cursor-disabled;
264
+ }
265
+ }
266
+ // These classes are used directly on <label>s
267
+ .radio-inline,
268
+ .checkbox-inline {
269
+ &.disabled,
270
+ fieldset[disabled] & {
271
+ cursor: @cursor-disabled;
272
+ }
273
+ }
274
+ // These classes are used on elements with <label> descendants
275
+ .radio,
276
+ .checkbox {
277
+ &.disabled,
278
+ fieldset[disabled] & {
279
+ label {
280
+ cursor: @cursor-disabled;
281
+ }
282
+ }
283
+ }
284
+
285
+
286
+ // Static form control text
287
+ //
288
+ // Apply class to a `p` element to make any string of text align with labels in
289
+ // a horizontal form layout.
290
+
291
+ .form-control-static {
292
+ // Size it appropriately next to real form controls
293
+ padding-top: (@padding-base-vertical + 1);
294
+ padding-bottom: (@padding-base-vertical + 1);
295
+ // Remove default margin from `p`
296
+ margin-bottom: 0;
297
+
298
+ &.input-lg,
299
+ &.input-sm {
300
+ padding-left: 0;
301
+ padding-right: 0;
302
+ }
303
+ }
304
+
305
+
306
+ // Form control sizing
307
+ //
308
+ // Build on `.form-control` with modifier classes to decrease or increase the
309
+ // height and font-size of form controls.
310
+ //
311
+ // The `.form-group-* form-control` variations are sadly duplicated to avoid the
312
+ // issue documented in https://github.com/twbs/bootstrap/issues/15074.
313
+
314
+ .input-sm {
315
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
316
+ }
317
+ .form-group-sm {
318
+ .form-control {
319
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
320
+ }
321
+ .form-control-static {
322
+ height: @input-height-small;
323
+ padding: @padding-small-vertical @padding-small-horizontal;
324
+ font-size: @font-size-small;
325
+ line-height: @line-height-small;
326
+ }
327
+ }
328
+
329
+ .input-lg {
330
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
331
+ }
332
+ .form-group-lg {
333
+ .form-control {
334
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
335
+ }
336
+ .form-control-static {
337
+ height: @input-height-large;
338
+ padding: @padding-large-vertical @padding-large-horizontal;
339
+ font-size: @font-size-large;
340
+ line-height: @line-height-large;
341
+ }
342
+ }
343
+
344
+
345
+ // Form control feedback states
346
+ //
347
+ // Apply contextual and semantic states to individual form controls.
348
+
349
+ .has-feedback {
350
+ // Enable absolute positioning
351
+ position: relative;
352
+
353
+ // Ensure icons don't overlap text
354
+ .form-control {
355
+ padding-right: (@input-height-base * 1.25);
356
+ }
357
+ }
358
+ // Feedback icon (requires .glyphicon classes)
359
+ .form-control-feedback {
360
+ position: absolute;
361
+ top: 0;
362
+ right: 0;
363
+ z-index: 2; // Ensure icon is above input groups
364
+ display: block;
365
+ width: @input-height-base;
366
+ height: @input-height-base;
367
+ line-height: @input-height-base;
368
+ text-align: center;
369
+ pointer-events: none;
370
+ }
371
+ .input-lg + .form-control-feedback {
372
+ width: @input-height-large;
373
+ height: @input-height-large;
374
+ line-height: @input-height-large;
375
+ }
376
+ .input-sm + .form-control-feedback {
377
+ width: @input-height-small;
378
+ height: @input-height-small;
379
+ line-height: @input-height-small;
380
+ }
381
+
382
+ // Feedback states
383
+ .has-success {
384
+ .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
385
+ }
386
+ .has-warning {
387
+ .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
388
+ }
389
+ .has-error {
390
+ .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
391
+ }
392
+
393
+ // Reposition feedback icon if input has visible label above
394
+ .has-feedback label {
395
+
396
+ & ~ .form-control-feedback {
397
+ top: (@line-height-computed + 5); // Height of the `label` and its margin
398
+ }
399
+ &.sr-only ~ .form-control-feedback {
400
+ top: 0;
401
+ }
402
+ }
403
+
404
+
405
+ // Help text
406
+ //
407
+ // Apply to any element you wish to create light text for placement immediately
408
+ // below a form control. Use for general help, formatting, or instructional text.
409
+
410
+ .help-block {
411
+ display: block; // account for any element using help-block
412
+ margin-top: 5px;
413
+ margin-bottom: 10px;
414
+ color: lighten(@text-color, 25%); // lighten the text some for contrast
415
+ }
416
+
417
+
418
+ // Inline forms
419
+ //
420
+ // Make forms appear inline(-block) by adding the `.form-inline` class. Inline
421
+ // forms begin stacked on extra small (mobile) devices and then go inline when
422
+ // viewports reach <768px.
423
+ //
424
+ // Requires wrapping inputs and labels with `.form-group` for proper display of
425
+ // default HTML form controls and our custom form controls (e.g., input groups).
426
+ //
427
+ // Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
428
+
429
+ .form-inline {
430
+
431
+ // Kick in the inline
432
+ @media (min-width: @screen-sm-min) {
433
+ // Inline-block all the things for "inline"
434
+ .form-group {
435
+ display: inline-block;
436
+ margin-bottom: 0;
437
+ vertical-align: middle;
438
+ }
439
+
440
+ // In navbar-form, allow folks to *not* use `.form-group`
441
+ .form-control {
442
+ display: inline-block;
443
+ width: auto; // Prevent labels from stacking above inputs in `.form-group`
444
+ vertical-align: middle;
445
+ }
446
+
447
+ // Make static controls behave like regular ones
448
+ .form-control-static {
449
+ display: inline-block;
450
+ }
451
+
452
+ .input-group {
453
+ display: inline-table;
454
+ vertical-align: middle;
455
+
456
+ .input-group-addon,
457
+ .input-group-btn,
458
+ .form-control {
459
+ width: auto;
460
+ }
461
+ }
462
+
463
+ // Input groups need that 100% width though
464
+ .input-group > .form-control {
465
+ width: 100%;
466
+ }
467
+
468
+ .control-label {
469
+ margin-bottom: 0;
470
+ vertical-align: middle;
471
+ }
472
+
473
+ // Remove default margin on radios/checkboxes that were used for stacking, and
474
+ // then undo the floating of radios and checkboxes to match.
475
+ .radio,
476
+ .checkbox {
477
+ display: inline-block;
478
+ margin-top: 0;
479
+ margin-bottom: 0;
480
+ vertical-align: middle;
481
+
482
+ label {
483
+ padding-left: 0;
484
+ }
485
+ }
486
+ .radio input[type="radio"],
487
+ .checkbox input[type="checkbox"] {
488
+ position: relative;
489
+ margin-left: 0;
490
+ }
491
+
492
+ // Re-override the feedback icon.
493
+ .has-feedback .form-control-feedback {
494
+ top: 0;
495
+ }
496
+ }
497
+ }
498
+
499
+
500
+ // Horizontal forms
501
+ //
502
+ // Horizontal forms are built on grid classes and allow you to create forms with
503
+ // labels on the left and inputs on the right.
504
+
505
+ .form-horizontal {
506
+
507
+ // Consistent vertical alignment of radios and checkboxes
508
+ //
509
+ // Labels also get some reset styles, but that is scoped to a media query below.
510
+ .radio,
511
+ .checkbox,
512
+ .radio-inline,
513
+ .checkbox-inline {
514
+ margin-top: 0;
515
+ margin-bottom: 0;
516
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
517
+ }
518
+ // Account for padding we're adding to ensure the alignment and of help text
519
+ // and other content below items
520
+ .radio,
521
+ .checkbox {
522
+ min-height: (@line-height-computed + (@padding-base-vertical + 1));
523
+ }
524
+
525
+ // Make form groups behave like rows
526
+ .form-group {
527
+ .make-row();
528
+ }
529
+
530
+ // Reset spacing and right align labels, but scope to media queries so that
531
+ // labels on narrow viewports stack the same as a default form example.
532
+ @media (min-width: @screen-sm-min) {
533
+ .control-label {
534
+ text-align: right;
535
+ margin-bottom: 0;
536
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
537
+ }
538
+ }
539
+
540
+ // Validation states
541
+ //
542
+ // Reposition the icon because it's now within a grid column and columns have
543
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
544
+ .has-feedback .form-control-feedback {
545
+ right: (@grid-gutter-width / 2);
546
+ }
547
+
548
+ // Form group sizes
549
+ //
550
+ // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
551
+ // inputs and labels within a `.form-group`.
552
+ .form-group-lg {
553
+ @media (min-width: @screen-sm-min) {
554
+ .control-label {
555
+ padding-top: ((@padding-large-vertical * @line-height-large) + 1);
556
+ }
557
+ }
558
+ }
559
+ .form-group-sm {
560
+ @media (min-width: @screen-sm-min) {
561
+ .control-label {
562
+ padding-top: (@padding-small-vertical + 1);
563
+ }
564
+ }
565
+ }
566
+ }