archangel 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.editorconfig +19 -0
  4. data/.eslintignore +6 -0
  5. data/.eslintrc.json +40 -0
  6. data/.github/ISSUE_TEMPLATE.md +23 -0
  7. data/.github/PULL_REQUEST_TEMPLATE.md +18 -0
  8. data/.gitignore +22 -0
  9. data/.hound.yml +21 -0
  10. data/.mdlrc +2 -0
  11. data/.reek +35 -0
  12. data/.rspec +4 -0
  13. data/.rubocop.yml +28 -0
  14. data/.rubocop_disabled.yml +2 -0
  15. data/.rubocop_enabled.yml +2 -0
  16. data/.rubocop_todo.yml +7 -0
  17. data/.scss-lint.yml +22 -0
  18. data/.travis.yml +16 -0
  19. data/.yardopts +10 -0
  20. data/CODE_OF_CONDUCT.md +43 -0
  21. data/CONTRIBUTING.md +150 -0
  22. data/Gemfile +36 -0
  23. data/MIT-LICENSE +21 -0
  24. data/README.md +129 -0
  25. data/Rakefile +27 -0
  26. data/app/assets/config/archangel_manifest.js +14 -0
  27. data/app/assets/images/archangel/fallback/asset.png +0 -0
  28. data/app/assets/images/archangel/fallback/avatar.png +0 -0
  29. data/app/assets/images/archangel/fallback/default.png +0 -0
  30. data/app/assets/images/archangel/fallback/favicon.ico +0 -0
  31. data/app/assets/images/archangel/fallback/large_avatar.png +0 -0
  32. data/app/assets/images/archangel/fallback/large_logo.png +0 -0
  33. data/app/assets/images/archangel/fallback/logo.png +0 -0
  34. data/app/assets/images/archangel/fallback/medium_avatar.png +0 -0
  35. data/app/assets/images/archangel/fallback/medium_logo.png +0 -0
  36. data/app/assets/images/archangel/fallback/small_asset.png +0 -0
  37. data/app/assets/images/archangel/fallback/small_avatar.png +0 -0
  38. data/app/assets/images/archangel/fallback/small_logo.png +0 -0
  39. data/app/assets/images/archangel/fallback/tiny_asset.png +0 -0
  40. data/app/assets/images/archangel/fallback/tiny_avatar.png +0 -0
  41. data/app/assets/images/archangel/fallback/tiny_logo.png +0 -0
  42. data/app/assets/javascripts/archangel/input/datetime_picker.js +46 -0
  43. data/app/assets/javascripts/archangel/input/meta_keywords.js +22 -0
  44. data/app/assets/javascripts/archangel/input/parent/collection.js +0 -0
  45. data/app/assets/javascripts/archangel/input/parent/field.js +0 -0
  46. data/app/assets/javascripts/archangel/input/parent/page.js +0 -0
  47. data/app/assets/javascripts/archangel/input/wysiwyg.js.erb +51 -0
  48. data/app/assets/javascripts/archangel/object/flash.js +49 -0
  49. data/app/assets/javascripts/archangel/object/routes/auth.js +22 -0
  50. data/app/assets/javascripts/archangel/object/routes/backend.js +103 -0
  51. data/app/assets/javascripts/archangel/object/routes/frontend.js +24 -0
  52. data/app/assets/javascripts/archangel/object/routes.js.erb +84 -0
  53. data/app/assets/javascripts/archangel/object/translate/datetime_picker.js.erb +26 -0
  54. data/app/assets/javascripts/archangel/object/translate/sortable.js.erb +10 -0
  55. data/app/assets/javascripts/archangel/object/translate.js +8 -0
  56. data/app/assets/javascripts/archangel/object/url.js +24 -0
  57. data/app/assets/javascripts/archangel/object.js +25 -0
  58. data/app/assets/javascripts/archangel/sortable.js +72 -0
  59. data/app/assets/stylesheets/archangel/.keep +0 -0
  60. data/app/controllers/archangel/application_controller.rb +177 -0
  61. data/app/controllers/archangel/auth/registrations_controller.rb +22 -0
  62. data/app/controllers/archangel/auth_controller.rb +20 -0
  63. data/app/controllers/archangel/backend/assets_controller.rb +338 -0
  64. data/app/controllers/archangel/backend/collections_controller.rb +257 -0
  65. data/app/controllers/archangel/backend/dashboards_controller.rb +27 -0
  66. data/app/controllers/archangel/backend/entries_controller.rb +344 -0
  67. data/app/controllers/archangel/backend/pages_controller.rb +299 -0
  68. data/app/controllers/archangel/backend/profiles_controller.rb +211 -0
  69. data/app/controllers/archangel/backend/sites_controller.rb +175 -0
  70. data/app/controllers/archangel/backend/templates_controller.rb +270 -0
  71. data/app/controllers/archangel/backend/users_controller.rb +366 -0
  72. data/app/controllers/archangel/backend/widgets_controller.rb +264 -0
  73. data/app/controllers/archangel/backend_controller.rb +21 -0
  74. data/app/controllers/archangel/frontend/pages_controller.rb +158 -0
  75. data/app/controllers/archangel/frontend_controller.rb +10 -0
  76. data/app/controllers/concerns/archangel/actionable_concern.rb +152 -0
  77. data/app/controllers/concerns/archangel/authenticatable_concern.rb +14 -0
  78. data/app/controllers/concerns/archangel/authorizable_concern.rb +14 -0
  79. data/app/controllers/concerns/archangel/paginatable_concern.rb +34 -0
  80. data/app/controllers/concerns/archangel/seoable_concern.rb +40 -0
  81. data/app/controllers/concerns/archangel/skip_authorizable_concern.rb +14 -0
  82. data/app/controllers/concerns/archangel/themable_concern.rb +27 -0
  83. data/app/helpers/archangel/application_helper.rb +34 -0
  84. data/app/helpers/archangel/auth_helper.rb +9 -0
  85. data/app/helpers/archangel/backend/assets_helper.rb +14 -0
  86. data/app/helpers/archangel/backend/collections_helper.rb +14 -0
  87. data/app/helpers/archangel/backend/dashboards_helper.rb +14 -0
  88. data/app/helpers/archangel/backend/entries_helper.rb +14 -0
  89. data/app/helpers/archangel/backend/pages_helper.rb +14 -0
  90. data/app/helpers/archangel/backend/sites_helper.rb +14 -0
  91. data/app/helpers/archangel/backend/templates_helper.rb +14 -0
  92. data/app/helpers/archangel/backend/users_helper.rb +14 -0
  93. data/app/helpers/archangel/backend/widgets_helper.rb +14 -0
  94. data/app/helpers/archangel/backend_helper.rb +9 -0
  95. data/app/helpers/archangel/flash_helper.rb +22 -0
  96. data/app/helpers/archangel/frontend/pages_helper.rb +14 -0
  97. data/app/helpers/archangel/frontend_helper.rb +9 -0
  98. data/app/inputs/archangel/date_picker_input.rb +27 -0
  99. data/app/inputs/archangel/date_time_picker_input.rb +27 -0
  100. data/app/inputs/archangel/field_classification_input.rb +32 -0
  101. data/app/inputs/archangel/language_input.rb +31 -0
  102. data/app/inputs/archangel/meta_keywords_input.rb +27 -0
  103. data/app/inputs/archangel/role_input.rb +31 -0
  104. data/app/inputs/archangel/theme_input.rb +29 -0
  105. data/app/inputs/archangel/time_picker_input.rb +27 -0
  106. data/app/inputs/archangel/wysiwyg_input.rb +15 -0
  107. data/app/jobs/archangel/application_job.rb +9 -0
  108. data/app/mailers/archangel/application_mailer.rb +12 -0
  109. data/app/models/archangel/application_record.rb +10 -0
  110. data/app/models/archangel/asset.rb +42 -0
  111. data/app/models/archangel/collection.rb +51 -0
  112. data/app/models/archangel/entry.rb +22 -0
  113. data/app/models/archangel/field.rb +30 -0
  114. data/app/models/archangel/page.rb +123 -0
  115. data/app/models/archangel/site.rb +54 -0
  116. data/app/models/archangel/template.rb +37 -0
  117. data/app/models/archangel/user.rb +62 -0
  118. data/app/models/archangel/widget.rb +62 -0
  119. data/app/policies/archangel/application_policy.rb +142 -0
  120. data/app/policies/archangel/asset_policy.rb +17 -0
  121. data/app/policies/archangel/collection_policy.rb +9 -0
  122. data/app/policies/archangel/entry_policy.rb +17 -0
  123. data/app/policies/archangel/page_policy.rb +9 -0
  124. data/app/policies/archangel/site_policy.rb +27 -0
  125. data/app/policies/archangel/template_policy.rb +9 -0
  126. data/app/policies/archangel/user_policy.rb +9 -0
  127. data/app/policies/archangel/widget_policy.rb +9 -0
  128. data/app/services/archangel/render_service.rb +98 -0
  129. data/app/services/archangel/template_render_service.rb +40 -0
  130. data/app/themes/default/assets/javascripts/default/auth/.keep +0 -0
  131. data/app/themes/default/assets/javascripts/default/auth.js +18 -0
  132. data/app/themes/default/assets/javascripts/default/backend/core.js +7 -0
  133. data/app/themes/default/assets/javascripts/default/backend.js +50 -0
  134. data/app/themes/default/assets/javascripts/default/common/cards.js +28 -0
  135. data/app/themes/default/assets/javascripts/default/common/flash.js +48 -0
  136. data/app/themes/default/assets/javascripts/default/common/navigation.js +30 -0
  137. data/app/themes/default/assets/javascripts/default/common/sidebar.js +114 -0
  138. data/app/themes/default/assets/javascripts/default/frontend/.keep +0 -0
  139. data/app/themes/default/assets/javascripts/default/frontend.js +18 -0
  140. data/app/themes/default/assets/stylesheets/default/auth/core.scss +15 -0
  141. data/app/themes/default/assets/stylesheets/default/auth.css +13 -0
  142. data/app/themes/default/assets/stylesheets/default/backend/core.scss +22 -0
  143. data/app/themes/default/assets/stylesheets/default/backend.css +13 -0
  144. data/app/themes/default/assets/stylesheets/default/common/_bootstrap.scss +49 -0
  145. data/app/themes/default/assets/stylesheets/default/common/_selectize.scss +299 -0
  146. data/app/themes/default/assets/stylesheets/default/common/_variables.scss +82 -0
  147. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_animate.scss +27 -0
  148. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_aside.scss +67 -0
  149. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_avatars.scss +42 -0
  150. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_badge.scss +3 -0
  151. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_breadcrumb-menu.scss +36 -0
  152. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_breadcrumb.scss +4 -0
  153. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_buttons.scss +408 -0
  154. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_callout.scss +58 -0
  155. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_card.scss +199 -0
  156. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_charts.scss +9 -0
  157. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_dropdown-menu-right.scss +8 -0
  158. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_dropdown.scss +70 -0
  159. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_footer.scss +9 -0
  160. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_forms.scss +4 -0
  161. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_grid.scss +15 -0
  162. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_input-group.scss +5 -0
  163. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_layout.scss +390 -0
  164. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_loading.scss +128 -0
  165. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_mixins.scss +1 -0
  166. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_mobile.scss +0 -0
  167. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_modal.scss +12 -0
  168. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_nav.scss +39 -0
  169. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_navbar.scss +122 -0
  170. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_others.scss +4 -0
  171. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_progress.scss +15 -0
  172. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_rtl.scss +287 -0
  173. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_sidebar.scss +462 -0
  174. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_switches.scss +286 -0
  175. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_tables.scss +20 -0
  176. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_temp.scss +39 -0
  177. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_typography.scss +36 -0
  178. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_utilities.scss +3 -0
  179. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_variables.scss +208 -0
  180. data/app/themes/default/assets/stylesheets/default/common/bootstrap/_widgets.scss +251 -0
  181. data/app/themes/default/assets/stylesheets/default/common/bootstrap/mixins/_all.scss +117 -0
  182. data/app/themes/default/assets/stylesheets/default/common/bootstrap/utilities/_background.scss +20 -0
  183. data/app/themes/default/assets/stylesheets/default/common/bootstrap/utilities/_borders.scss +17 -0
  184. data/app/themes/default/assets/stylesheets/default/common/bootstrap/utilities/_display.scss +14 -0
  185. data/app/themes/default/assets/stylesheets/default/frontend/core.scss +15 -0
  186. data/app/themes/default/assets/stylesheets/default/frontend.css +13 -0
  187. data/app/themes/default/views/layouts/auth.html.erb +35 -0
  188. data/app/themes/default/views/layouts/backend/_footer.html.erb +7 -0
  189. data/app/themes/default/views/layouts/backend/_header.html.erb +31 -0
  190. data/app/themes/default/views/layouts/backend/_sidebar.html.erb +53 -0
  191. data/app/themes/default/views/layouts/backend.html.erb +37 -0
  192. data/app/themes/default/views/layouts/frontend.liquid +22 -0
  193. data/app/uploaders/archangel/application_uploader.rb +65 -0
  194. data/app/uploaders/archangel/asset_uploader.rb +52 -0
  195. data/app/uploaders/archangel/avatar_uploader.rb +44 -0
  196. data/app/uploaders/archangel/favicon_uploader.rb +38 -0
  197. data/app/uploaders/archangel/logo_uploader.rb +44 -0
  198. data/app/views/archangel/backend/assets/_buttons.html.erb +18 -0
  199. data/app/views/archangel/backend/assets/_form.html.erb +27 -0
  200. data/app/views/archangel/backend/assets/edit.html.erb +21 -0
  201. data/app/views/archangel/backend/assets/index.html.erb +64 -0
  202. data/app/views/archangel/backend/assets/new.html.erb +21 -0
  203. data/app/views/archangel/backend/assets/show.html.erb +53 -0
  204. data/app/views/archangel/backend/collections/_buttons.html.erb +20 -0
  205. data/app/views/archangel/backend/collections/_field_fields.html.erb +9 -0
  206. data/app/views/archangel/backend/collections/_form.html.erb +24 -0
  207. data/app/views/archangel/backend/collections/edit.html.erb +21 -0
  208. data/app/views/archangel/backend/collections/index.html.erb +60 -0
  209. data/app/views/archangel/backend/collections/new.html.erb +21 -0
  210. data/app/views/archangel/backend/collections/show.html.erb +44 -0
  211. data/app/views/archangel/backend/dashboards/_buttons.html.erb +3 -0
  212. data/app/views/archangel/backend/dashboards/show.html.erb +23 -0
  213. data/app/views/archangel/backend/entries/_buttons.html.erb +20 -0
  214. data/app/views/archangel/backend/entries/_form.html.erb +25 -0
  215. data/app/views/archangel/backend/entries/edit.html.erb +21 -0
  216. data/app/views/archangel/backend/entries/index.html.erb +68 -0
  217. data/app/views/archangel/backend/entries/new.html.erb +21 -0
  218. data/app/views/archangel/backend/entries/show.html.erb +28 -0
  219. data/app/views/archangel/backend/pages/_buttons.html.erb +18 -0
  220. data/app/views/archangel/backend/pages/_form.html.erb +19 -0
  221. data/app/views/archangel/backend/pages/edit.html.erb +21 -0
  222. data/app/views/archangel/backend/pages/index.html.erb +68 -0
  223. data/app/views/archangel/backend/pages/new.html.erb +21 -0
  224. data/app/views/archangel/backend/pages/show.html.erb +49 -0
  225. data/app/views/archangel/backend/profiles/_buttons.html.erb +9 -0
  226. data/app/views/archangel/backend/profiles/_form.html.erb +31 -0
  227. data/app/views/archangel/backend/profiles/edit.html.erb +21 -0
  228. data/app/views/archangel/backend/profiles/show.html.erb +36 -0
  229. data/app/views/archangel/backend/sites/_additional_colors.html.erb +49 -0
  230. data/app/views/archangel/backend/sites/_alerts.html.erb +130 -0
  231. data/app/views/archangel/backend/sites/_badge.html.erb +99 -0
  232. data/app/views/archangel/backend/sites/_button.html.erb +243 -0
  233. data/app/views/archangel/backend/sites/_buttons.html.erb +9 -0
  234. data/app/views/archangel/backend/sites/_buttons_group.html.erb +230 -0
  235. data/app/views/archangel/backend/sites/_cards.html.erb +441 -0
  236. data/app/views/archangel/backend/sites/_carousel.html.erb +159 -0
  237. data/app/views/archangel/backend/sites/_colors.html.erb +41 -0
  238. data/app/views/archangel/backend/sites/_display_headings.html.erb +41 -0
  239. data/app/views/archangel/backend/sites/_dl.html.erb +38 -0
  240. data/app/views/archangel/backend/sites/_dropdowns.html.erb +475 -0
  241. data/app/views/archangel/backend/sites/_form.html.erb +37 -0
  242. data/app/views/archangel/backend/sites/_forms.html.erb +1176 -0
  243. data/app/views/archangel/backend/sites/_grays.html.erb +21 -0
  244. data/app/views/archangel/backend/sites/_headings.html.erb +21 -0
  245. data/app/views/archangel/backend/sites/_inline_text.html.erb +45 -0
  246. data/app/views/archangel/backend/sites/_jumbotron.html.erb +45 -0
  247. data/app/views/archangel/backend/sites/_list_group.html.erb +254 -0
  248. data/app/views/archangel/backend/sites/_modals.html.erb +41 -0
  249. data/app/views/archangel/backend/sites/_navs.html.erb +389 -0
  250. data/app/views/archangel/backend/sites/_pagination.html.erb +160 -0
  251. data/app/views/archangel/backend/sites/_social_buttons.html.erb +746 -0
  252. data/app/views/archangel/backend/sites/_tables.html.erb +372 -0
  253. data/app/views/archangel/backend/sites/edit.html.erb +21 -0
  254. data/app/views/archangel/backend/sites/sample.html.erb +38 -0
  255. data/app/views/archangel/backend/sites/show.html.erb +48 -0
  256. data/app/views/archangel/backend/templates/_buttons.html.erb +18 -0
  257. data/app/views/archangel/backend/templates/_form.html.erb +14 -0
  258. data/app/views/archangel/backend/templates/edit.html.erb +21 -0
  259. data/app/views/archangel/backend/templates/index.html.erb +60 -0
  260. data/app/views/archangel/backend/templates/new.html.erb +21 -0
  261. data/app/views/archangel/backend/templates/show.html.erb +34 -0
  262. data/app/views/archangel/backend/users/_buttons.html.erb +18 -0
  263. data/app/views/archangel/backend/users/_form.html.erb +24 -0
  264. data/app/views/archangel/backend/users/edit.html.erb +21 -0
  265. data/app/views/archangel/backend/users/index.html.erb +62 -0
  266. data/app/views/archangel/backend/users/new.html.erb +21 -0
  267. data/app/views/archangel/backend/users/show.html.erb +36 -0
  268. data/app/views/archangel/backend/widgets/_buttons.html.erb +18 -0
  269. data/app/views/archangel/backend/widgets/_form.html.erb +14 -0
  270. data/app/views/archangel/backend/widgets/edit.html.erb +21 -0
  271. data/app/views/archangel/backend/widgets/index.html.erb +60 -0
  272. data/app/views/archangel/backend/widgets/new.html.erb +21 -0
  273. data/app/views/archangel/backend/widgets/show.html.erb +42 -0
  274. data/app/views/archangel/errors/error_401.html.erb +13 -0
  275. data/app/views/archangel/errors/error_401.json.erb +4 -0
  276. data/app/views/archangel/errors/error_404.html.erb +13 -0
  277. data/app/views/archangel/errors/error_404.json.erb +4 -0
  278. data/app/views/archangel/frontend/pages/show.json.jbuilder +9 -0
  279. data/app/views/archangel/shared/_auth_token.html.erb +8 -0
  280. data/app/views/archangel/shared/_flash_messages.html.erb +9 -0
  281. data/app/views/devise/confirmations/new.html.erb +18 -0
  282. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  283. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  284. data/app/views/devise/mailer/password_change.html.erb +3 -0
  285. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  286. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  287. data/app/views/devise/passwords/edit.html.erb +28 -0
  288. data/app/views/devise/passwords/new.html.erb +18 -0
  289. data/app/views/devise/registrations/edit.html.erb +45 -0
  290. data/app/views/devise/registrations/new.html.erb +41 -0
  291. data/app/views/devise/sessions/new.html.erb +28 -0
  292. data/app/views/devise/shared/_links.html.erb +41 -0
  293. data/app/views/devise/unlocks/new.html.erb +18 -0
  294. data/app/views/kaminari/_first_page.html.erb +11 -0
  295. data/app/views/kaminari/_gap.html.erb +8 -0
  296. data/app/views/kaminari/_last_page.html.erb +11 -0
  297. data/app/views/kaminari/_next_page.html.erb +11 -0
  298. data/app/views/kaminari/_page.html.erb +12 -0
  299. data/app/views/kaminari/_paginator.html.erb +25 -0
  300. data/app/views/kaminari/_prev_page.html.erb +11 -0
  301. data/archangel.gemspec +52 -0
  302. data/archangel.png +0 -0
  303. data/bin/rails +13 -0
  304. data/config/brakeman.yml +3 -0
  305. data/config/initializers/assets.rb +12 -0
  306. data/config/initializers/carrierwave.rb +14 -0
  307. data/config/initializers/devise.rb +341 -0
  308. data/config/initializers/kaminari.rb +13 -0
  309. data/config/initializers/liquid.rb +4 -0
  310. data/config/initializers/meta_tags.rb +31 -0
  311. data/config/initializers/simple_form.rb +177 -0
  312. data/config/initializers/simple_form_bootstrap.rb +177 -0
  313. data/config/locales/active_record.en.yml +80 -0
  314. data/config/locales/devise.en.yml +64 -0
  315. data/config/locales/devise_invitable.en.yml +31 -0
  316. data/config/locales/en.yml +109 -0
  317. data/config/locales/kaminari.en.yml +17 -0
  318. data/config/locales/responders.en.yml +12 -0
  319. data/config/locales/simple_form.en.yml +34 -0
  320. data/config/routes.rb +176 -0
  321. data/db/migrate/20171003191001_create_archangel_sites.rb +19 -0
  322. data/db/migrate/20171003210347_create_archangel_users.rb +68 -0
  323. data/db/migrate/20171005205520_create_archangel_templates.rb +18 -0
  324. data/db/migrate/20171005224054_create_archangel_pages.rb +30 -0
  325. data/db/migrate/20171006175939_create_archangel_widgets.rb +20 -0
  326. data/db/migrate/20171006184844_create_archangel_assets.rb +18 -0
  327. data/db/migrate/20171006194044_create_archangel_collections.rb +17 -0
  328. data/db/migrate/20171006194855_create_archangel_fields.rb +23 -0
  329. data/db/migrate/20171006195023_create_archangel_entries.rb +18 -0
  330. data/db/seeds.rb +65 -0
  331. data/docs/Developers.md +3 -0
  332. data/docs/ExtensionDevelopers.md +3 -0
  333. data/docs/ExtensionIdeas.md +132 -0
  334. data/docs/Release.md +25 -0
  335. data/docs/ThemeDevelopers.md +3 -0
  336. data/lib/archangel/application_responder.rb +15 -0
  337. data/lib/archangel/config.rb +21 -0
  338. data/lib/archangel/constants/language.rb +13 -0
  339. data/lib/archangel/constants/role.rb +13 -0
  340. data/lib/archangel/constants/theme.rb +18 -0
  341. data/lib/archangel/engine.rb +70 -0
  342. data/lib/archangel/i18n.rb +40 -0
  343. data/lib/archangel/liquid/drop.rb +119 -0
  344. data/lib/archangel/liquid/drops/page_drop.rb +33 -0
  345. data/lib/archangel/liquid/drops/site_drop.rb +30 -0
  346. data/lib/archangel/liquid/filters/link_to_filter.rb +35 -0
  347. data/lib/archangel/liquid/tags/application_tag.rb +17 -0
  348. data/lib/archangel/liquid/tags/asset_tag.rb +146 -0
  349. data/lib/archangel/liquid/tags/collection_tag.rb +135 -0
  350. data/lib/archangel/liquid/tags/collectionfor_tag.rb +91 -0
  351. data/lib/archangel/liquid/tags/csrf_meta_tags_tag.rb +28 -0
  352. data/lib/archangel/liquid/tags/gist_tag.rb +102 -0
  353. data/lib/archangel/liquid/tags/locale_tag.rb +27 -0
  354. data/lib/archangel/liquid/tags/meta_tags_tag.rb +30 -0
  355. data/lib/archangel/liquid/tags/text_direction_tag.rb +28 -0
  356. data/lib/archangel/liquid/tags/theme_javascript_tag.rb +30 -0
  357. data/lib/archangel/liquid/tags/theme_stylesheet_tag.rb +30 -0
  358. data/lib/archangel/liquid/tags/vimeo_tag.rb +125 -0
  359. data/lib/archangel/liquid/tags/widget_tag.rb +91 -0
  360. data/lib/archangel/liquid/tags/youtube_tag.rb +138 -0
  361. data/lib/archangel/liquid_view.rb +92 -0
  362. data/lib/archangel/testing_support/context/view_controller_context.rb +55 -0
  363. data/lib/archangel/testing_support/factories/archangel_assets.rb +20 -0
  364. data/lib/archangel/testing_support/factories/archangel_collections.rb +23 -0
  365. data/lib/archangel/testing_support/factories/archangel_entries.rb +17 -0
  366. data/lib/archangel/testing_support/factories/archangel_fields.rb +20 -0
  367. data/lib/archangel/testing_support/factories/archangel_pages.rb +39 -0
  368. data/lib/archangel/testing_support/factories/archangel_sites.rb +22 -0
  369. data/lib/archangel/testing_support/factories/archangel_templates.rb +22 -0
  370. data/lib/archangel/testing_support/factories/archangel_users.rb +53 -0
  371. data/lib/archangel/testing_support/factories/archangel_widgets.rb +19 -0
  372. data/lib/archangel/testing_support/fixtures/favicon.png +0 -0
  373. data/lib/archangel/testing_support/fixtures/image.gif +0 -0
  374. data/lib/archangel/testing_support/fixtures/stylesheet.css +3 -0
  375. data/lib/archangel/testing_support/helpers/authorization_helpers.rb +58 -0
  376. data/lib/archangel/testing_support/helpers/controller_helpers.rb +20 -0
  377. data/lib/archangel/testing_support/helpers/form_helpers.rb +18 -0
  378. data/lib/archangel/testing_support/helpers/routing_helpers.rb +22 -0
  379. data/lib/archangel/testing_support/matchers/match_stdout.rb +37 -0
  380. data/lib/archangel/testing_support/matchers/pundit.rb +17 -0
  381. data/lib/archangel/testing_support/rake/dummy_rake.rb +63 -0
  382. data/lib/archangel/testing_support/shared_contexts/rake.rb +26 -0
  383. data/lib/archangel/testing_support/support/capybara.rb +9 -0
  384. data/lib/archangel/testing_support/support/carrierwave.rb +13 -0
  385. data/lib/archangel/testing_support/support/controller.rb +11 -0
  386. data/lib/archangel/testing_support/support/database_cleaner.rb +22 -0
  387. data/lib/archangel/testing_support/support/devise.rb +7 -0
  388. data/lib/archangel/testing_support/support/factory_bot.rb +17 -0
  389. data/lib/archangel/testing_support/support/inputs.rb +24 -0
  390. data/lib/archangel/testing_support/support/liquid_filters.rb +23 -0
  391. data/lib/archangel/testing_support/support/liquid_tags.rb +23 -0
  392. data/lib/archangel/testing_support/support/shoulda.rb +12 -0
  393. data/lib/archangel/testing_support/support/verify_partial_doubles.rb +21 -0
  394. data/lib/archangel/testing_support/support.rb +26 -0
  395. data/lib/archangel/theme/themable_controller.rb +90 -0
  396. data/lib/archangel/version.rb +16 -0
  397. data/lib/archangel.rb +93 -0
  398. data/lib/generators/archangel/dummy/dummy_generator.rb +148 -0
  399. data/lib/generators/archangel/dummy/templates/config/database.yml +48 -0
  400. data/lib/generators/archangel/install/install_generator.rb +202 -0
  401. data/lib/generators/archangel/install/templates/.env.sample +4 -0
  402. data/lib/generators/archangel/install/templates/config/archangel.yml +54 -0
  403. data/lib/generators/archangel/install/templates/config/initializers/carrierwave.rb +15 -0
  404. data/lib/generators/archangel/install/templates/config/initializers/devise.rb +17 -0
  405. data/lib/generators/archangel/install/templates/vendor/assets/javascripts/archangel/auth.js +3 -0
  406. data/lib/generators/archangel/install/templates/vendor/assets/javascripts/archangel/backend.js +3 -0
  407. data/lib/generators/archangel/install/templates/vendor/assets/javascripts/archangel/frontend.js +3 -0
  408. data/lib/generators/archangel/install/templates/vendor/assets/stylesheets/archangel/auth.css +5 -0
  409. data/lib/generators/archangel/install/templates/vendor/assets/stylesheets/archangel/backend.css +5 -0
  410. data/lib/generators/archangel/install/templates/vendor/assets/stylesheets/archangel/frontend.css +5 -0
  411. data/lib/tasks/archangel/version_task.rake +8 -0
  412. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  413. data/package.json +33 -0
  414. data/spec/controllers/archangel/application_controller_spec.rb +183 -0
  415. data/spec/controllers/archangel/auth/registrations_controller_spec.rb +10 -0
  416. data/spec/controllers/archangel/auth_controller_spec.rb +8 -0
  417. data/spec/controllers/archangel/backend/assets_controller_spec.rb +237 -0
  418. data/spec/controllers/archangel/backend/collections_controller_spec.rb +252 -0
  419. data/spec/controllers/archangel/backend/dashboards_controller_spec.rb +27 -0
  420. data/spec/controllers/archangel/backend/entries_controller_spec.rb +273 -0
  421. data/spec/controllers/archangel/backend/pages_controller_spec.rb +204 -0
  422. data/spec/controllers/archangel/backend/profiles_controller_spec.rb +115 -0
  423. data/spec/controllers/archangel/backend/sites_controller_spec.rb +137 -0
  424. data/spec/controllers/archangel/backend/templates_controller_spec.rb +190 -0
  425. data/spec/controllers/archangel/backend/users_controller_spec.rb +181 -0
  426. data/spec/controllers/archangel/backend/widgets_controller_spec.rb +190 -0
  427. data/spec/controllers/archangel/backend_controller_spec.rb +8 -0
  428. data/spec/controllers/archangel/frontend/pages_controller_spec.rb +54 -0
  429. data/spec/controllers/archangel/frontend_controller_spec.rb +8 -0
  430. data/spec/features/auth/log_in_spec.rb +96 -0
  431. data/spec/features/auth/log_out_spec.rb +18 -0
  432. data/spec/features/auth/registration_spec.rb +27 -0
  433. data/spec/features/backend/duplicate_page_slugs_spec.rb +41 -0
  434. data/spec/features/frontend/drop_variables_spec.rb +125 -0
  435. data/spec/features/frontend/homepage_redirect_spec.rb +15 -0
  436. data/spec/helpers/archangel/application_helper_spec.rb +30 -0
  437. data/spec/helpers/archangel/auth_helper_spec.rb +8 -0
  438. data/spec/helpers/archangel/backend/assets_helper_spec.rb +10 -0
  439. data/spec/helpers/archangel/backend/collections_helper_spec.rb +10 -0
  440. data/spec/helpers/archangel/backend/dashboards_helper_spec.rb +10 -0
  441. data/spec/helpers/archangel/backend/entries_helper_spec.rb +10 -0
  442. data/spec/helpers/archangel/backend/pages_helper_spec.rb +10 -0
  443. data/spec/helpers/archangel/backend/sites_helper_spec.rb +10 -0
  444. data/spec/helpers/archangel/backend/templates_helper_spec.rb +10 -0
  445. data/spec/helpers/archangel/backend/users_helper_spec.rb +10 -0
  446. data/spec/helpers/archangel/backend/widgets_helper_spec.rb +10 -0
  447. data/spec/helpers/archangel/backend_helper_spec.rb +8 -0
  448. data/spec/helpers/archangel/flash_helper_spec.rb +29 -0
  449. data/spec/helpers/archangel/frontend/pages_helper_spec.rb +10 -0
  450. data/spec/helpers/archangel/frontend_helper_spec.rb +8 -0
  451. data/spec/inputs/archangel/date_picker_input_spec.rb +15 -0
  452. data/spec/inputs/archangel/date_time_picker_input_spec.rb +15 -0
  453. data/spec/inputs/archangel/field_classification_input_spec.rb +19 -0
  454. data/spec/inputs/archangel/language_input_spec.rb +17 -0
  455. data/spec/inputs/archangel/meta_keywords_input_spec.rb +13 -0
  456. data/spec/inputs/archangel/role_input_spec.rb +18 -0
  457. data/spec/inputs/archangel/theme_input_spec.rb +17 -0
  458. data/spec/inputs/archangel/time_picker_input_spec.rb +15 -0
  459. data/spec/inputs/archangel/wysiwyg_input_spec.rb +15 -0
  460. data/spec/jobs/archangel/application_job_spec.rb +8 -0
  461. data/spec/lib/archangel/liquid/filters/link_to_filter_spec.rb +63 -0
  462. data/spec/lib/archangel/liquid/tags/application_tag_spec.rb +12 -0
  463. data/spec/lib/archangel/liquid/tags/asset_tag_spec.rb +90 -0
  464. data/spec/lib/archangel/liquid/tags/collection_tag_spec.rb +105 -0
  465. data/spec/lib/archangel/liquid/tags/collectionfor_tag_spec.rb +164 -0
  466. data/spec/lib/archangel/liquid/tags/csrf_meta_tags_tag_spec.rb +33 -0
  467. data/spec/lib/archangel/liquid/tags/gist_tag_spec.rb +42 -0
  468. data/spec/lib/archangel/liquid/tags/locale_tag_spec.rb +22 -0
  469. data/spec/lib/archangel/liquid/tags/meta_tags_tag_spec.rb +24 -0
  470. data/spec/lib/archangel/liquid/tags/text_direction_tag_spec.rb +32 -0
  471. data/spec/lib/archangel/liquid/tags/theme_javascript_tag_spec.rb +25 -0
  472. data/spec/lib/archangel/liquid/tags/theme_stylesheet_tag_spec.rb +27 -0
  473. data/spec/lib/archangel/liquid/tags/vimeo_tag_spec.rb +39 -0
  474. data/spec/lib/archangel/liquid/tags/widget_tag_spec.rb +59 -0
  475. data/spec/lib/archangel/liquid/tags/youtube_tag_spec.rb +39 -0
  476. data/spec/lib/tasks/archangel/version_task_spec.rb +13 -0
  477. data/spec/mailers/archangel/application_job_spec.rb +8 -0
  478. data/spec/models/archangel/asset_spec.rb +32 -0
  479. data/spec/models/archangel/collection_spec.rb +25 -0
  480. data/spec/models/archangel/entry_spec.rb +20 -0
  481. data/spec/models/archangel/field_spec.rb +29 -0
  482. data/spec/models/archangel/page_spec.rb +94 -0
  483. data/spec/models/archangel/site_spec.rb +11 -0
  484. data/spec/models/archangel/template_spec.rb +24 -0
  485. data/spec/models/archangel/user_spec.rb +66 -0
  486. data/spec/models/archangel/widget_spec.rb +29 -0
  487. data/spec/policies/archangel/application_policy_spec.rb +8 -0
  488. data/spec/policies/archangel/asset_policy_spec.rb +22 -0
  489. data/spec/policies/archangel/collection_policy_spec.rb +20 -0
  490. data/spec/policies/archangel/entries_policy_spec.rb +22 -0
  491. data/spec/policies/archangel/page_policy_spec.rb +20 -0
  492. data/spec/policies/archangel/site_policy_spec.rb +30 -0
  493. data/spec/policies/archangel/template_policy_spec.rb +20 -0
  494. data/spec/policies/archangel/user_policy_spec.rb +20 -0
  495. data/spec/policies/archangel/widget_policy_spec.rb +20 -0
  496. data/spec/rails_helper.rb +46 -0
  497. data/spec/services/archangel/render_service_spec.rb +37 -0
  498. data/spec/services/archangel/template_render_service_spec.rb +42 -0
  499. data/spec/spec_helper.rb +23 -0
  500. data/spec/support/coveralls.rb +5 -0
  501. data/spec/uploaders/archangel/application_uploader_spec.rb +15 -0
  502. data/spec/uploaders/archangel/asset_uploader_spec.rb +71 -0
  503. data/spec/uploaders/archangel/avatar_uploader_spec.rb +50 -0
  504. data/spec/uploaders/archangel/favicon_uploader_spec.rb +39 -0
  505. data/spec/uploaders/archangel/logo_uploader_spec.rb +50 -0
  506. data/vendor/assets/icons/trumbowyg/icons.svg +1 -0
  507. data/vendor/assets/javascripts/sortable/sortable.js +3 -0
  508. data/vendor/assets/javascripts/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js +143 -0
  509. data/vendor/assets/javascripts/trumbowyg/plugins/base64/trumbowyg.base64.js +129 -0
  510. data/vendor/assets/javascripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js +110 -0
  511. data/vendor/assets/javascripts/trumbowyg/plugins/colors/trumbowyg.colors.js +183 -0
  512. data/vendor/assets/javascripts/trumbowyg/plugins/noembed/trumbowyg.noembed.js +104 -0
  513. data/vendor/assets/javascripts/trumbowyg/plugins/upload/trumbowyg.upload.js +261 -0
  514. data/vendor/assets/javascripts/trumbowyg/trumbowyg.js +1765 -0
  515. data/vendor/assets/stylesheets/trumbowyg/_trumbowyg.scss +831 -0
  516. data/vendor/assets/stylesheets/trumbowyg/plugins/colors/_trumbowyg.colors.scss +38 -0
  517. metadata +1003 -0
@@ -0,0 +1,1176 @@
1
+ <div class="row">
2
+ <div class="col-sm-6">
3
+ <div class="card">
4
+ <div class="card-header">
5
+ <%= fa_icon("tint") %> Credit Card
6
+
7
+ <small>Form</small>
8
+ </div>
9
+
10
+ <div class="card-body">
11
+ <div class="row">
12
+ <div class="col-sm-12">
13
+ <div class="form-group">
14
+ <label for="name">Name</label>
15
+ <input class="form-control" id="name" placeholder="Enter your name" type="text">
16
+ </div>
17
+ </div>
18
+ </div>
19
+
20
+ <div class="row">
21
+ <div class="col-sm-12">
22
+ <div class="form-group">
23
+ <label for="ccnumber">Credit Card Number</label>
24
+ <input class="form-control" id="ccnumber" placeholder="0000 0000 0000 0000" type="text">
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="row">
30
+ <div class="form-group col-sm-4">
31
+ <label for="ccmonth">Month</label>
32
+ <select class="form-control" id="ccmonth">
33
+ <option>1</option>
34
+ <option>2</option>
35
+ <option>3</option>
36
+ <option>4</option>
37
+ <option>5</option>
38
+ <option>6</option>
39
+ <option>7</option>
40
+ <option>8</option>
41
+ <option>9</option>
42
+ <option>10</option>
43
+ <option>11</option>
44
+ <option>12</option>
45
+ </select>
46
+ </div>
47
+
48
+ <div class="form-group col-sm-4">
49
+ <label for="ccyear">Year</label>
50
+ <select class="form-control" id="ccyear">
51
+ <option>2014</option>
52
+ <option>2015</option>
53
+ <option>2016</option>
54
+ <option>2017</option>
55
+ <option>2018</option>
56
+ <option>2019</option>
57
+ <option>2020</option>
58
+ <option>2021</option>
59
+ <option>2022</option>
60
+ <option>2023</option>
61
+ <option>2024</option>
62
+ <option>2025</option>
63
+ </select>
64
+ </div>
65
+
66
+ <div class="col-sm-4">
67
+ <div class="form-group">
68
+ <label for="cvv">CVV/CVC</label>
69
+ <input class="form-control" id="cvv" placeholder="123" type="text">
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </div>
76
+
77
+ <div class="col-sm-6">
78
+ <div class="card">
79
+ <div class="card-header">
80
+ <%= fa_icon("tint") %> Company
81
+
82
+ <small>Form</small>
83
+ </div>
84
+
85
+ <div class="card-body">
86
+ <div class="form-group">
87
+ <label for="company">Company</label>
88
+ <input class="form-control" id="company" placeholder="Enter your company name" type="text">
89
+ </div>
90
+ <div class="form-group">
91
+ <label for="vat">VAT</label>
92
+ <input class="form-control" id="vat" placeholder="PL1234567890" type="text">
93
+ </div>
94
+ <div class="form-group">
95
+ <label for="street">Street</label>
96
+ <input class="form-control" id="street" placeholder="Enter street name" type="text">
97
+ </div>
98
+
99
+ <div class="row">
100
+ <div class="form-group col-sm-8">
101
+ <label for="city">City</label>
102
+ <input class="form-control" id="city" placeholder="Enter your city" type="text">
103
+ </div>
104
+ <div class="form-group col-sm-4">
105
+ <label for="postal-code">Postal Code</label>
106
+ <input class="form-control" id="postal-code" placeholder="Postal Code" type="text">
107
+ </div>
108
+ </div>
109
+
110
+ <div class="form-group">
111
+ <label for="country">Country</label>
112
+ <input class="form-control" id="country" placeholder="Country name" type="text">
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+ <div class="row">
120
+ <div class="col-md-6">
121
+ <div class="card">
122
+ <div class="card-header">
123
+ <%= fa_icon("tint") %> Basic Form
124
+
125
+ Elements
126
+ </div>
127
+
128
+ <div class="card-body">
129
+ <form action="" method="post" enctype="multipart/form-data" class="form-horizontal">
130
+ <div class="form-group row">
131
+ <label class="col-md-3 col-form-label">Static</label>
132
+ <div class="col-md-9">
133
+ <p class="form-control-static">Username</p>
134
+ </div>
135
+ </div>
136
+ <div class="form-group row">
137
+ <label class="col-md-3 col-form-label" for="text-input">Text Input</label>
138
+ <div class="col-md-9">
139
+ <input id="text-input" name="text-input" class="form-control" placeholder="Text" type="text">
140
+ <span class="help-block">This is a help text</span>
141
+ </div>
142
+ </div>
143
+ <div class="form-group row">
144
+ <label class="col-md-3 col-form-label" for="email-input">Email Input</label>
145
+ <div class="col-md-9">
146
+ <input id="email-input" name="email-input" class="form-control" placeholder="Enter Email" type="email">
147
+ <span class="help-block">Please enter your email</span>
148
+ </div>
149
+ </div>
150
+ <div class="form-group row">
151
+ <label class="col-md-3 col-form-label" for="password-input">Password</label>
152
+ <div class="col-md-9">
153
+ <input id="password-input" name="password-input" class="form-control" placeholder="Password" type="password">
154
+ <span class="help-block">Please enter a complex password</span>
155
+ </div>
156
+ </div>
157
+ <div class="form-group row">
158
+ <label class="col-md-3 col-form-label" for="disabled-input">Disabled Input</label>
159
+ <div class="col-md-9">
160
+ <input id="disabled-input" name="disabled-input" class="form-control" placeholder="Disabled" disabled="" type="text">
161
+ </div>
162
+ </div>
163
+ <div class="form-group row">
164
+ <label class="col-md-3 col-form-label" for="textarea-input">Textarea</label>
165
+ <div class="col-md-9">
166
+ <textarea id="textarea-input" name="textarea-input" rows="9" class="form-control" placeholder="Content.."></textarea>
167
+ </div>
168
+ </div>
169
+ <div class="form-group row">
170
+ <label class="col-md-3 col-form-label" for="select1">Select</label>
171
+ <div class="col-md-9">
172
+ <select id="select1" name="select1" class="form-control">
173
+ <option value="0">Please select</option>
174
+ <option value="1">Option #1</option>
175
+ <option value="2">Option #2</option>
176
+ <option value="3">Option #3</option>
177
+ </select>
178
+ </div>
179
+ </div>
180
+ <div class="form-group row">
181
+ <label class="col-md-3 col-form-label" for="select2">Select Large</label>
182
+ <div class="col-md-9">
183
+ <select id="select2" name="select2" class="form-control form-control-lg">
184
+ <option value="0">Please select</option>
185
+ <option value="1">Option #1</option>
186
+ <option value="2">Option #2</option>
187
+ <option value="3">Option #3</option>
188
+ </select>
189
+ </div>
190
+ </div>
191
+ <div class="form-group row">
192
+ <label class="col-md-3 col-form-label" for="select3">Select Small</label>
193
+ <div class="col-md-9">
194
+ <select id="select3" name="select3" class="form-control form-control-sm">
195
+ <option value="0">Please select</option>
196
+ <option value="1">Option #1</option>
197
+ <option value="2">Option #2</option>
198
+ <option value="3">Option #3</option>
199
+ </select>
200
+ </div>
201
+ </div>
202
+ <div class="form-group row">
203
+ <label class="col-md-3 col-form-label" for="disabledSelect">Disabled Select</label>
204
+ <div class="col-md-9">
205
+ <select id="disabledSelect" class="form-control" disabled="">
206
+ <option value="0">Please select</option>
207
+ <option value="1">Option #1</option>
208
+ <option value="2">Option #2</option>
209
+ <option value="3">Option #3</option>
210
+ </select>
211
+ </div>
212
+ </div>
213
+ <div class="form-group row">
214
+ <label class="col-md-3 col-form-label" for="multiple-select">Multiple select</label>
215
+ <div class="col-md-9">
216
+ <select id="multiple-select" name="multiple-select" class="form-control" size="5" multiple="">
217
+ <option value="1">Option #1</option>
218
+ <option value="2">Option #2</option>
219
+ <option value="3">Option #3</option>
220
+ <option value="4">Option #4</option>
221
+ <option value="5">Option #5</option>
222
+ <option value="6">Option #6</option>
223
+ <option value="7">Option #7</option>
224
+ <option value="8">Option #8</option>
225
+ <option value="9">Option #9</option>
226
+ <option value="10">Option #10</option>
227
+ </select>
228
+ </div>
229
+ </div>
230
+ <div class="form-group row">
231
+ <label class="col-md-3 col-form-label">Radios</label>
232
+ <div class="col-md-9 col-form-label">
233
+ <div class="form-check">
234
+ <input class="form-check-input" value="radio1" id="radio1" name="radios" type="radio">
235
+ <label class="form-check-label" for="radio1">
236
+ Option 1
237
+ </label>
238
+ </div>
239
+ <div class="form-check">
240
+ <input class="form-check-input" value="radio2" id="radio2" name="radios" type="radio">
241
+ <label class="form-check-label" for="radio2">
242
+ Option 2
243
+ </label>
244
+ </div>
245
+ <div class="form-check">
246
+ <input class="form-check-input" value="radio2" id="radio3" name="radios" type="radio">
247
+ <label class="form-check-label" for="radio3">
248
+ Option 3
249
+ </label>
250
+ </div>
251
+ </div>
252
+ </div>
253
+ <div class="form-group row">
254
+ <label class="col-md-3 col-form-label">Inline Radios</label>
255
+ <div class="col-md-9 col-form-label">
256
+ <div class="form-check form-check-inline mr-1">
257
+ <input class="form-check-input" id="inline-radio1" value="option1" name="inline-radios" type="radio">
258
+ <label class="form-check-label" for="inline-radio1">One</label>
259
+ </div>
260
+ <div class="form-check form-check-inline mr-1">
261
+ <input class="form-check-input" id="inline-radio2" value="option2" name="inline-radios" type="radio">
262
+ <label class="form-check-label" for="inline-radio2">Two</label>
263
+ </div>
264
+ <div class="form-check form-check-inline mr-1">
265
+ <input class="form-check-input" id="inline-radio3" value="option3" name="inline-radios" type="radio">
266
+ <label class="form-check-label" for="inline-radio3">Three</label>
267
+ </div>
268
+ </div>
269
+ </div>
270
+ <div class="form-group row">
271
+ <label class="col-md-3 col-form-label">Checkboxes</label>
272
+ <div class="col-md-9 col-form-label">
273
+ <div class="form-check checkbox">
274
+ <input class="form-check-input" value="" id="check1" type="checkbox">
275
+ <label class="form-check-label" for="check1">
276
+ Option 1
277
+ </label>
278
+ </div>
279
+ <div class="form-check checkbox">
280
+ <input class="form-check-input" value="" id="check2" type="checkbox">
281
+ <label class="form-check-label" for="check2">
282
+ Option 2
283
+ </label>
284
+ </div>
285
+ <div class="form-check checkbox">
286
+ <input class="form-check-input" value="" id="check3" type="checkbox">
287
+ <label class="form-check-label" for="check3">
288
+ Option 3
289
+ </label>
290
+ </div>
291
+ </div>
292
+ </div>
293
+ <div class="form-group row">
294
+ <label class="col-md-3 col-form-label">Inline Checkboxes</label>
295
+ <div class="col-md-9 col-form-label">
296
+ <div class="form-check form-check-inline mr-1">
297
+ <input class="form-check-input" id="inline-checkbox1" value="check1" type="checkbox">
298
+ <label class="form-check-label" for="inline-checkbox1">One</label>
299
+ </div>
300
+ <div class="form-check form-check-inline mr-1">
301
+ <input class="form-check-input" id="inline-checkbox2" value="check2" type="checkbox">
302
+ <label class="form-check-label" for="inline-checkbox2">Two</label>
303
+ </div>
304
+ <div class="form-check form-check-inline mr-1">
305
+ <input class="form-check-input" id="inline-checkbox3" value="check3" type="checkbox">
306
+ <label class="form-check-label" for="inline-checkbox3">Three</label>
307
+ </div>
308
+ </div>
309
+ </div>
310
+ <div class="form-group row">
311
+ <label class="col-md-3 col-form-label" for="file-input">File input</label>
312
+ <div class="col-md-9">
313
+ <input id="file-input" name="file-input" type="file">
314
+ </div>
315
+ </div>
316
+ <div class="form-group row">
317
+ <label class="col-md-3 col-form-label" for="file-multiple-input">Multiple File input</label>
318
+ <div class="col-md-9">
319
+ <input id="file-multiple-input" name="file-multiple-input" multiple="" type="file">
320
+ </div>
321
+ </div>
322
+ </form>
323
+ </div>
324
+
325
+ <div class="card-footer">
326
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Submit</button>
327
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
328
+ </div>
329
+ </div>
330
+
331
+ <div class="card">
332
+ <div class="card-header">
333
+ <%= fa_icon("tint") %> Inline
334
+
335
+ Form
336
+ </div>
337
+
338
+ <div class="card-body">
339
+ <form action="" method="post" class="form-inline">
340
+ <div class="form-group">
341
+ <label for="exampleInputName2">Name</label>
342
+ <input class="form-control" id="exampleInputName2" placeholder="Jane Doe" type="text">
343
+ </div>
344
+ <div class="form-group">
345
+ <label for="exampleInputEmail2">Email</label>
346
+ <input class="form-control" id="exampleInputEmail2" placeholder="jane.doe@example.com" type="email">
347
+ </div>
348
+ </form>
349
+ </div>
350
+
351
+ <div class="card-footer">
352
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Submit</button>
353
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
354
+ </div>
355
+ </div>
356
+ </div>
357
+
358
+ <div class="col-md-6">
359
+ <div class="card">
360
+ <div class="card-header">
361
+ <%= fa_icon("tint") %> Horizontal
362
+
363
+ Form
364
+ </div>
365
+
366
+ <div class="card-body">
367
+ <form action="" method="post" class="form-horizontal">
368
+ <div class="form-group row">
369
+ <label class="col-md-3 col-form-label" for="hf-email">Email</label>
370
+ <div class="col-md-9">
371
+ <input id="hf-email" name="hf-email" class="form-control" placeholder="Enter Email.." type="email">
372
+ <span class="help-block">Please enter your email</span>
373
+ </div>
374
+ </div>
375
+
376
+ <div class="form-group row">
377
+ <label class="col-md-3 col-form-label" for="hf-password">Password</label>
378
+ <div class="col-md-9">
379
+ <input id="hf-password" name="hf-password" class="form-control" placeholder="Enter Password.." type="password">
380
+ <span class="help-block">Please enter your password</span>
381
+ </div>
382
+ </div>
383
+ </form>
384
+ </div>
385
+
386
+ <div class="card-footer">
387
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Submit</button>
388
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
389
+ </div>
390
+ </div>
391
+
392
+ <div class="card">
393
+ <div class="card-header">
394
+ <%= fa_icon("tint") %> Normal
395
+
396
+ Form
397
+ </div>
398
+
399
+ <div class="card-body">
400
+ <form action="" method="post">
401
+ <div class="form-group">
402
+ <label for="nf-email">Email</label>
403
+ <input id="nf-email" name="nf-email" class="form-control" placeholder="Enter Email.." type="email">
404
+ <span class="help-block">Please enter your email</span>
405
+ </div>
406
+
407
+ <div class="form-group">
408
+ <label for="nf-password">Password</label>
409
+ <input id="nf-password" name="nf-password" class="form-control" placeholder="Enter Password.." type="password">
410
+ <span class="help-block">Please enter your password</span>
411
+ </div>
412
+ </form>
413
+ </div>
414
+
415
+ <div class="card-footer">
416
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Submit</button>
417
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
418
+ </div>
419
+ </div>
420
+
421
+ <div class="card">
422
+ <div class="card-header">
423
+ <%= fa_icon("tint") %> Input
424
+
425
+ Grid
426
+ </div>
427
+
428
+ <div class="card-body">
429
+ <form action="" method="post" class="form-horizontal">
430
+ <div class="form-group row">
431
+ <div class="col-sm-3">
432
+ <input class="form-control" placeholder=".col-sm-3" type="text">
433
+ </div>
434
+ </div>
435
+ <div class="form-group row">
436
+ <div class="col-sm-4">
437
+ <input class="form-control" placeholder=".col-sm-4" type="text">
438
+ </div>
439
+ </div>
440
+ <div class="form-group row">
441
+ <div class="col-sm-5">
442
+ <input class="form-control" placeholder=".col-sm-5" type="text">
443
+ </div>
444
+ </div>
445
+ <div class="form-group row">
446
+ <div class="col-sm-6">
447
+ <input class="form-control" placeholder=".col-sm-6" type="text">
448
+ </div>
449
+ </div>
450
+ <div class="form-group row">
451
+ <div class="col-sm-7">
452
+ <input class="form-control" placeholder=".col-sm-7" type="text">
453
+ </div>
454
+ </div>
455
+ <div class="form-group row">
456
+ <div class="col-sm-8">
457
+ <input class="form-control" placeholder=".col-sm-8" type="text">
458
+ </div>
459
+ </div>
460
+ <div class="form-group row">
461
+ <div class="col-sm-9">
462
+ <input class="form-control" placeholder=".col-sm-9" type="text">
463
+ </div>
464
+ </div>
465
+ <div class="form-group row">
466
+ <div class="col-sm-10">
467
+ <input class="form-control" placeholder=".col-sm-10" type="text">
468
+ </div>
469
+ </div>
470
+ <div class="form-group row">
471
+ <div class="col-sm-11">
472
+ <input class="form-control" placeholder=".col-sm-11" type="text">
473
+ </div>
474
+ </div>
475
+ <div class="form-group row">
476
+ <div class="col-sm-12">
477
+ <input class="form-control" placeholder=".col-sm-12" type="text">
478
+ </div>
479
+ </div>
480
+ </form>
481
+ </div>
482
+
483
+ <div class="card-footer">
484
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-user"></i> Login</button>
485
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
486
+ </div>
487
+ </div>
488
+
489
+ <div class="card">
490
+ <div class="card-header">
491
+ <%= fa_icon("tint") %> Input
492
+
493
+ Sizes
494
+ </div>
495
+
496
+ <div class="card-body">
497
+ <form action="" method="post" class="form-horizontal">
498
+ <div class="form-group row">
499
+ <label class="col-sm-5 col-form-label" for="input-small">Small Input</label>
500
+ <div class="col-sm-6">
501
+ <input id="input-small" name="input-small" class="form-control form-control-sm" placeholder=".form-control-sm" type="text">
502
+ </div>
503
+ </div>
504
+ <div class="form-group row">
505
+ <label class="col-sm-5 col-form-label" for="input-normal">Normal Input</label>
506
+ <div class="col-sm-6">
507
+ <input id="input-normal" name="input-normal" class="form-control" placeholder="Normal" type="text">
508
+ </div>
509
+ </div>
510
+ <div class="form-group row">
511
+ <label class="col-sm-5 col-form-label" for="input-large">Large Input</label>
512
+ <div class="col-sm-6">
513
+ <input id="input-large" name="input-large" class="form-control form-control-lg" placeholder=".form-control-lg" type="text">
514
+ </div>
515
+ </div>
516
+ </form>
517
+ </div>
518
+
519
+ <div class="card-footer">
520
+ <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-dot-circle-o"></i> Submit</button>
521
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
522
+ </div>
523
+ </div>
524
+ </div>
525
+ </div>
526
+
527
+ <div class="row">
528
+ <div class="col-sm-6">
529
+ <div class="card">
530
+ <div class="card-header">
531
+ <%= fa_icon("tint") %> Validation states
532
+
533
+ Form
534
+ </div>
535
+
536
+ <div class="card-body">
537
+ <form class="was-validated">
538
+ <div class="form-group">
539
+ <label class="form-col-form-label" for="inputSuccess1">Input with success</label>
540
+ <input class="form-control is-valid" id="inputSuccess1" type="text">
541
+ </div>
542
+ <div class="form-group">
543
+ <label class="form-col-form-label" for="inputError1">Input with error</label>
544
+ <input class="form-control is-invalid" id="inputError1" type="text">
545
+ <div class="invalid-feedback">
546
+ Please provide a valid informations.
547
+ </div>
548
+ </div>
549
+ </form>
550
+ </div>
551
+ </div>
552
+ </div>
553
+
554
+ <div class="col-sm-6">
555
+ <div class="card">
556
+ <div class="card-header">
557
+ <%= fa_icon("tint") %> Validation
558
+
559
+ <code>was-validated</code>
560
+ </div>
561
+
562
+ <div class="card-body was-validated">
563
+ <div class="form-group">
564
+ <label class="form-col-form-label" for="inputSuccess2">Input is valid</label>
565
+ <input class="form-control is-valid" id="inputSuccess2" type="text">
566
+ </div>
567
+ <div class="form-group">
568
+ <label class="form-col-form-label" for="inputError2">Input required</label>
569
+ <input class="form-control is-invalid" id="inputError2" required="" type="text">
570
+ <div class="invalid-feedback">
571
+ Please provide a valid informations.
572
+ </div>
573
+ </div>
574
+ </div>
575
+ </div>
576
+ </div>
577
+ </div>
578
+
579
+ <div class="row">
580
+ <div class="col-sm-4">
581
+ <div class="card">
582
+ <div class="card-header">
583
+ <%= fa_icon("tint") %> Icon/Text
584
+
585
+ Groups
586
+ </div>
587
+
588
+ <div class="card-body">
589
+ <form action="" method="post" class="form-horizontal">
590
+ <div class="form-group row">
591
+ <div class="col-md-12">
592
+ <div class="input-group">
593
+ <div class="input-group-prepend">
594
+ <span class="input-group-text"><i class="fa fa-user"></i></span>
595
+ </div>
596
+ <input id="input1-group1" name="input1-group1" class="form-control" placeholder="Username" type="text">
597
+ </div>
598
+ </div>
599
+ </div>
600
+
601
+ <div class="form-group row">
602
+ <div class="col-md-12">
603
+ <div class="input-group">
604
+ <input id="input2-group1" name="input2-group1" class="form-control" placeholder="Email" type="email">
605
+ <div class="input-group-append">
606
+ <span class="input-group-text"><i class="fa fa-envelope-o"></i></span>
607
+ </div>
608
+ </div>
609
+ </div>
610
+ </div>
611
+
612
+ <div class="form-group row">
613
+ <div class="col-md-12">
614
+ <div class="input-group">
615
+ <div class="input-group-prepend">
616
+ <span class="input-group-text"><i class="fa fa-euro"></i></span>
617
+ </div>
618
+ <input id="input3-group1" name="input3-group1" class="form-control" placeholder=".." type="text">
619
+ <div class="input-group-append">
620
+ <span class="input-group-text">.00</span>
621
+ </div>
622
+ </div>
623
+ </div>
624
+ </div>
625
+ </form>
626
+ </div>
627
+
628
+ <div class="card-footer">
629
+ <button type="submit" class="btn btn-sm btn-success"><i class="fa fa-dot-circle-o"></i> Submit</button>
630
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
631
+ </div>
632
+ </div>
633
+ </div>
634
+
635
+ <div class="col-sm-4">
636
+ <div class="card">
637
+ <div class="card-header">
638
+ <%= fa_icon("tint") %> Buttons
639
+
640
+ Groups
641
+ </div>
642
+
643
+ <div class="card-body">
644
+ <form action="" method="post" class="form-horizontal">
645
+ <div class="form-group row">
646
+ <div class="col-md-12">
647
+ <div class="input-group">
648
+ <span class="input-group-prepend">
649
+ <button type="button" class="btn btn-primary"><i class="fa fa-search"></i> Search</button>
650
+ </span>
651
+ <input id="input1-group2" name="input1-group2" class="form-control" placeholder="Username" type="text">
652
+ </div>
653
+ </div>
654
+ </div>
655
+
656
+ <div class="form-group row">
657
+ <div class="col-md-12">
658
+ <div class="input-group">
659
+ <input id="input2-group2" name="input2-group2" class="form-control" placeholder="Email" type="email">
660
+ <span class="input-group-append">
661
+ <button type="button" class="btn btn-primary">Submit</button>
662
+ </span>
663
+ </div>
664
+ </div>
665
+ </div>
666
+
667
+ <div class="form-group row">
668
+ <div class="col-md-12">
669
+ <div class="input-group">
670
+ <span class="input-group-prepend">
671
+ <button type="button" class="btn btn-primary"><i class="fa fa-facebook"></i></button>
672
+ </span>
673
+ <input id="input3-group2" name="input3-group2" class="form-control" placeholder="Search" type="text">
674
+ <span class="input-group-append">
675
+ <button type="button" class="btn btn-primary"><i class="fa fa-twitter"></i></button>
676
+ </span>
677
+ </div>
678
+ </div>
679
+ </div>
680
+ </form>
681
+ </div>
682
+
683
+ <div class="card-footer">
684
+ <button type="submit" class="btn btn-sm btn-success"><i class="fa fa-dot-circle-o"></i> Submit</button>
685
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
686
+ </div>
687
+ </div>
688
+ </div>
689
+
690
+ <div class="col-sm-4">
691
+ <div class="card">
692
+ <div class="card-header">
693
+ <%= fa_icon("tint") %> Dropdowns
694
+
695
+ Groups
696
+ </div>
697
+
698
+ <div class="card-body">
699
+ <form action="" method="post" class="form-horizontal">
700
+ <div class="form-group row">
701
+ <div class="col-md-12">
702
+ <div class="input-group">
703
+ <div class="input-group-prepend">
704
+ <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action
705
+ <span class="caret"></span>
706
+ </button>
707
+
708
+ <div class="dropdown-menu">
709
+ <a class="dropdown-item" href="#">Action</a>
710
+ <a class="dropdown-item" href="#">Another action</a>
711
+ <a class="dropdown-item" href="#">Something else here</a>
712
+
713
+ <div role="separator" class="dropdown-divider"></div>
714
+
715
+ <a class="dropdown-item" href="#">Separated link</a>
716
+ </div>
717
+ </div>
718
+
719
+ <input id="input1-group3" name="input1-group3" class="form-control" placeholder="Username" type="text">
720
+ </div>
721
+ </div>
722
+ </div>
723
+
724
+ <div class="form-group row">
725
+ <div class="col-md-12">
726
+ <div class="input-group">
727
+ <input id="input2-group3" name="input2-group3" class="form-control" placeholder="Email" type="email">
728
+
729
+ <div class="input-group-append">
730
+ <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action
731
+ <span class="caret"></span>
732
+ </button>
733
+
734
+ <div class="dropdown-menu dropdown-menu-right">
735
+ <a class="dropdown-item" href="#">Action</a>
736
+ <a class="dropdown-item" href="#">Another action</a>
737
+ <a class="dropdown-item" href="#">Something else here</a>
738
+
739
+ <div role="separator" class="dropdown-divider"></div>
740
+
741
+ <a class="dropdown-item" href="#">Separated link</a>
742
+ </div>
743
+ </div>
744
+ </div>
745
+ </div>
746
+ </div>
747
+
748
+ <div class="row">
749
+ <div class="col-md-12">
750
+ <div class="input-group">
751
+ <div class="input-group-prepend">
752
+ <button type="button" class="btn btn-primary">Action</button>
753
+ <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown">
754
+ <span class="caret"></span>
755
+ </button>
756
+
757
+ <div class="dropdown-menu">
758
+ <a class="dropdown-item" href="#">Action</a>
759
+ <a class="dropdown-item" href="#">Another action</a>
760
+ <a class="dropdown-item" href="#">Something else here</a>
761
+
762
+ <div role="separator" class="dropdown-divider"></div>
763
+
764
+ <a class="dropdown-item" href="#">Separated link</a>
765
+ </div>
766
+ </div>
767
+
768
+ <input id="input3-group3" name="input3-group3" class="form-control" placeholder=".." type="text">
769
+
770
+ <div class="input-group-append">
771
+ <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
772
+ <span class="caret"></span>
773
+ </button>
774
+
775
+ <div class="dropdown-menu dropdown-menu-right">
776
+ <a class="dropdown-item" href="#">Action</a>
777
+ <a class="dropdown-item" href="#">Another action</a>
778
+ <a class="dropdown-item" href="#">Something else here</a>
779
+
780
+ <div role="separator" class="dropdown-divider"></div>
781
+
782
+ <a class="dropdown-item" href="#">Separated link</a>
783
+ </div>
784
+ </div>
785
+ </div>
786
+ </div>
787
+ </div>
788
+ </form>
789
+ </div>
790
+
791
+ <div class="card-footer">
792
+ <button type="submit" class="btn btn-sm btn-success"><i class="fa fa-dot-circle-o"></i> Submit</button>
793
+ <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Reset</button>
794
+ </div>
795
+ </div>
796
+ </div>
797
+ </div>
798
+
799
+ <div class="row">
800
+ <div class="col-md-6">
801
+ <div class="card">
802
+ <div class="card-header">
803
+ <%= fa_icon("tint") %> Use the grid for big devices!
804
+
805
+ <small>
806
+ <code>.col-lg-*</code>
807
+ <code>.col-md-*</code>
808
+ <code>.col-sm-*</code>
809
+ </small>
810
+ </div>
811
+
812
+ <div class="card-body">
813
+ <form action="" method="post" class="form-horizontal">
814
+ <div class="form-group row">
815
+ <div class="col-md-8">
816
+ <input class="form-control" placeholder=".col-md-8" type="text">
817
+ </div>
818
+ <div class="col-md-4">
819
+ <input class="form-control" placeholder=".col-md-4" type="text">
820
+ </div>
821
+ </div>
822
+ <div class="form-group row">
823
+ <div class="col-md-7">
824
+ <input class="form-control" placeholder=".col-md-7" type="text">
825
+ </div>
826
+ <div class="col-md-5">
827
+ <input class="form-control" placeholder=".col-md-5" type="text">
828
+ </div>
829
+ </div>
830
+ <div class="form-group row">
831
+ <div class="col-md-6">
832
+ <input class="form-control" placeholder=".col-md-6" type="text">
833
+ </div>
834
+ <div class="col-md-6">
835
+ <input class="form-control" placeholder=".col-md-6" type="text">
836
+ </div>
837
+ </div>
838
+ <div class="form-group row">
839
+ <div class="col-md-5">
840
+ <input class="form-control" placeholder=".col-md-5" type="text">
841
+ </div>
842
+ <div class="col-md-7">
843
+ <input class="form-control" placeholder=".col-md-7" type="text">
844
+ </div>
845
+ </div>
846
+ <div class="form-group row">
847
+ <div class="col-md-4">
848
+ <input class="form-control" placeholder=".col-md-4" type="text">
849
+ </div>
850
+ <div class="col-md-8">
851
+ <input class="form-control" placeholder=".col-md-8" type="text">
852
+ </div>
853
+ </div>
854
+ </form>
855
+ </div>
856
+
857
+ <div class="card-footer">
858
+ <button type="submit" class="btn btn-sm btn-primary">Action</button>
859
+ <button type="button" class="btn btn-sm btn-danger">Action</button>
860
+ <button type="button" class="btn btn-sm btn-warning">Action</button>
861
+ <button type="button" class="btn btn-sm btn-info">Action</button>
862
+ <button type="button" class="btn btn-sm btn-success">Action</button>
863
+ </div>
864
+ </div>
865
+ </div>
866
+
867
+ <div class="col-md-6">
868
+ <div class="card">
869
+ <div class="card-header">
870
+ <%= fa_icon("tint") %> Input Grid for small devices!
871
+
872
+ <small><code>.col-*</code></small>
873
+ </div>
874
+
875
+ <div class="card-body">
876
+ <form action="" method="post" class="form-horizontal">
877
+ <div class="form-group row">
878
+ <div class="col-4">
879
+ <input class="form-control" placeholder=".col-4" type="text">
880
+ </div>
881
+ <div class="col-8">
882
+ <input class="form-control" placeholder=".col-8" type="text">
883
+ </div>
884
+ </div>
885
+ <div class="form-group row">
886
+ <div class="col-5">
887
+ <input class="form-control" placeholder=".col-5" type="text">
888
+ </div>
889
+ <div class="col-7">
890
+ <input class="form-control" placeholder=".col-7" type="text">
891
+ </div>
892
+ </div>
893
+ <div class="form-group row">
894
+ <div class="col-6">
895
+ <input class="form-control" placeholder=".col-6" type="text">
896
+ </div>
897
+ <div class="col-6">
898
+ <input class="form-control" placeholder=".col-6" type="text">
899
+ </div>
900
+ </div>
901
+ <div class="form-group row">
902
+ <div class="col-7">
903
+ <input class="form-control" placeholder=".col-5" type="text">
904
+ </div>
905
+ <div class="col-5">
906
+ <input class="form-control" placeholder=".col-5" type="text">
907
+ </div>
908
+ </div>
909
+ <div class="form-group row">
910
+ <div class="col-8">
911
+ <input class="form-control" placeholder=".col-8" type="text">
912
+ </div>
913
+ <div class="col-4">
914
+ <input class="form-control" placeholder=".col-4" type="text">
915
+ </div>
916
+ </div>
917
+ </form>
918
+ </div>
919
+
920
+ <div class="card-footer">
921
+ <button type="submit" class="btn btn-sm btn-primary">Action</button>
922
+ <button type="button" class="btn btn-sm btn-danger">Action</button>
923
+ <button type="button" class="btn btn-sm btn-warning">Action</button>
924
+ <button type="button" class="btn btn-sm btn-info">Action</button>
925
+ <button type="button" class="btn btn-sm btn-success">Action</button>
926
+ </div>
927
+ </div>
928
+ </div>
929
+ </div>
930
+
931
+ <div class="row">
932
+ <div class="col-sm-4">
933
+ <div class="card">
934
+ <div class="card-header">
935
+ <%= fa_icon("tint") %> Example Form
936
+ </div>
937
+
938
+ <div class="card-body">
939
+ <form action="" method="post">
940
+ <div class="form-group">
941
+ <div class="input-group">
942
+ <div class="input-group-prepend">
943
+ <span class="input-group-text">Username</span>
944
+ </div>
945
+ <input id="username3" name="username3" class="form-control" type="text">
946
+ <div class="input-group-append">
947
+ <span class="input-group-text"><i class="fa fa-user"></i></span>
948
+ </div>
949
+ </div>
950
+ </div>
951
+
952
+ <div class="form-group">
953
+ <div class="input-group">
954
+ <div class="input-group-prepend">
955
+ <span class="input-group-text">Email</span>
956
+ </div>
957
+ <input id="email3" name="email3" class="form-control" type="email">
958
+ <div class="input-group-append">
959
+ <span class="input-group-text"><i class="fa fa-envelope"></i></span>
960
+ </div>
961
+ </div>
962
+ </div>
963
+
964
+ <div class="form-group">
965
+ <div class="input-group">
966
+ <div class="input-group-prepend">
967
+ <span class="input-group-text">Password</span>
968
+ </div>
969
+ <input id="password3" name="password3" class="form-control" type="password">
970
+ <div class="input-group-append">
971
+ <span class="input-group-text"><i class="fa fa-asterisk"></i></span>
972
+ </div>
973
+ </div>
974
+ </div>
975
+
976
+ <div class="form-group form-actions">
977
+ <button type="submit" class="btn btn-sm btn-primary">Submit</button>
978
+ </div>
979
+ </form>
980
+ </div>
981
+ </div>
982
+ </div>
983
+
984
+ <div class="col-sm-4">
985
+ <div class="card">
986
+ <div class="card-header">
987
+ <%= fa_icon("tint") %> Example Form
988
+ </div>
989
+
990
+ <div class="card-body">
991
+ <form action="" method="post">
992
+ <div class="form-group">
993
+ <div class="input-group">
994
+ <input id="username2" name="username2" class="form-control" placeholder="Username" type="text">
995
+ <div class="input-group-append">
996
+ <span class="input-group-text"><i class="fa fa-user"></i></span>
997
+ </div>
998
+ </div>
999
+ </div>
1000
+
1001
+ <div class="form-group">
1002
+ <div class="input-group">
1003
+ <input id="email2" name="email2" class="form-control" placeholder="Email" type="email">
1004
+ <div class="input-group-append">
1005
+ <span class="input-group-text"><i class="fa fa-envelope"></i></span>
1006
+ </div>
1007
+ </div>
1008
+ </div>
1009
+
1010
+ <div class="form-group">
1011
+ <div class="input-group">
1012
+ <input id="password2" name="password2" class="form-control" placeholder="Password" type="password">
1013
+ <div class="input-group-append">
1014
+ <span class="input-group-text"><i class="fa fa-asterisk"></i></span>
1015
+ </div>
1016
+ </div>
1017
+ </div>
1018
+
1019
+ <div class="form-group form-actions">
1020
+ <button type="submit" class="btn btn-sm btn-secondary">Submit</button>
1021
+ </div>
1022
+ </form>
1023
+ </div>
1024
+ </div>
1025
+ </div>
1026
+
1027
+ <div class="col-sm-4">
1028
+ <div class="card">
1029
+ <div class="card-header">
1030
+ <%= fa_icon("tint") %> Example Form
1031
+ </div>
1032
+
1033
+ <div class="card-body">
1034
+ <form action="" method="post">
1035
+ <div class="form-group">
1036
+ <div class="input-group">
1037
+ <div class="input-group-prepend">
1038
+ <span class="input-group-text"><i class="fa fa-user"></i></span>
1039
+ </div>
1040
+ <input id="username" name="username" class="form-control" placeholder="Username" type="text">
1041
+ </div>
1042
+ </div>
1043
+
1044
+ <div class="form-group">
1045
+ <div class="input-group">
1046
+ <div class="input-group-prepend">
1047
+ <span class="input-group-text"><i class="fa fa-envelope"></i></span>
1048
+ </div>
1049
+ <input id="email" name="email" class="form-control" placeholder="Email" type="email">
1050
+ </div>
1051
+ </div>
1052
+
1053
+ <div class="form-group">
1054
+ <div class="input-group">
1055
+ <div class="input-group-prepend">
1056
+ <span class="input-group-text"><i class="fa fa-asterisk"></i></span>
1057
+ </div>
1058
+ <input id="password" name="password" class="form-control" placeholder="Password" type="password">
1059
+ </div>
1060
+ </div>
1061
+
1062
+ <div class="form-group form-actions">
1063
+ <button type="submit" class="btn btn-sm btn-success">Submit</button>
1064
+ </div>
1065
+ </form>
1066
+ </div>
1067
+ </div>
1068
+ </div>
1069
+ </div>
1070
+
1071
+ <div class="row">
1072
+ <div class="col-lg-12">
1073
+ <div class="card">
1074
+ <div class="card-header">
1075
+ <%= fa_icon("tint") %> Form Elements
1076
+ </div>
1077
+
1078
+ <div class="card-body collapse show" id="collapseExample">
1079
+ <form class="form-horizontal">
1080
+ <div class="form-group">
1081
+ <label class="col-form-label" for="prependedInput">Prepended text</label>
1082
+ <div class="controls">
1083
+ <div class="input-prepend input-group">
1084
+ <div class="input-group-prepend">
1085
+ <span class="input-group-text">@</span>
1086
+ </div>
1087
+ <input id="prependedInput" class="form-control" size="16" type="text">
1088
+ </div>
1089
+ <p class="help-block">Here's some help text</p>
1090
+ </div>
1091
+ </div>
1092
+
1093
+ <div class="form-group">
1094
+ <label class="col-form-label" for="appendedInput">Appended text</label>
1095
+ <div class="controls">
1096
+ <div class="input-group">
1097
+ <input id="appendedInput" class="form-control" size="16" type="text">
1098
+ <div class="input-group-append">
1099
+ <span class="input-group-text">.00</span>
1100
+ </div>
1101
+ </div>
1102
+ <span class="help-block">Here's more help text</span>
1103
+ </div>
1104
+ </div>
1105
+
1106
+ <div class="form-group">
1107
+ <label class="col-form-label" for="appendedPrependedInput">Append and prepend</label>
1108
+ <div class="controls">
1109
+ <div class="input-prepend input-group">
1110
+ <div class="input-group-prepend">
1111
+ <span class="input-group-text">$</span>
1112
+ </div>
1113
+ <input id="appendedPrependedInput" class="form-control" size="16" type="text">
1114
+ <div class="input-group-append">
1115
+ <span class="input-group-text">.00</span>
1116
+ </div>
1117
+ </div>
1118
+ </div>
1119
+ </div>
1120
+
1121
+ <div class="form-group">
1122
+ <label class="col-form-label" for="appendedInputButton">Append with button</label>
1123
+ <div class="controls">
1124
+ <div class="input-group">
1125
+ <input id="appendedInputButton" class="form-control" size="16" type="text">
1126
+ <span class="input-group-append">
1127
+ <button class="btn btn-secondary" type="button">Go!</button>
1128
+ </span>
1129
+ </div>
1130
+ </div>
1131
+ </div>
1132
+
1133
+ <div class="form-group">
1134
+ <label class="col-form-label" for="appendedInputButtons">Two-button append</label>
1135
+ <div class="controls">
1136
+ <div class="input-group">
1137
+ <input id="appendedInputButtons" size="16" class="form-control" type="text">
1138
+ <span class="input-group-append">
1139
+ <button class="btn btn-secondary" type="button">Search</button>
1140
+ <button class="btn btn-secondary" type="button">Options</button>
1141
+ </span>
1142
+ </div>
1143
+ </div>
1144
+ </div>
1145
+
1146
+ <div class="form-actions">
1147
+ <button type="submit" class="btn btn-primary">Save changes</button>
1148
+ <button type="button" class="btn btn-secondary">Cancel</button>
1149
+ </div>
1150
+ </form>
1151
+ </div>
1152
+ </div>
1153
+ </div>
1154
+ </div>
1155
+
1156
+ <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
1157
+ <div class="modal-dialog" role="document">
1158
+ <div class="modal-content">
1159
+ <div class="modal-header">
1160
+ <h4 class="modal-title">Modal title</h4>
1161
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
1162
+ <span aria-hidden="true">×</span>
1163
+ </button>
1164
+ </div>
1165
+
1166
+ <div class="modal-body">
1167
+ <p>One fine body…</p>
1168
+ </div>
1169
+
1170
+ <div class="modal-footer">
1171
+ <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
1172
+ <button type="button" class="btn btn-primary">Save changes</button>
1173
+ </div>
1174
+ </div>
1175
+ </div>
1176
+ </div>