binda 0.0.7 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +850 -18
  3. data/Rakefile +1 -13
  4. data/app/assets/javascripts/binda/application.js +23 -0
  5. data/app/assets/javascripts/binda/components/bootstrap.js +9 -0
  6. data/app/assets/javascripts/binda/components/field_group_editor.js +18 -0
  7. data/app/assets/javascripts/binda/components/fileupload.js +182 -0
  8. data/app/assets/javascripts/binda/components/form_item.js +91 -23
  9. data/app/assets/javascripts/binda/components/form_item_choice.js +15 -8
  10. data/app/assets/javascripts/binda/components/form_item_editor.js +6 -6
  11. data/app/assets/javascripts/binda/components/form_item_image.js +23 -0
  12. data/app/assets/javascripts/binda/components/form_item_repeater.js +70 -23
  13. data/app/assets/javascripts/binda/components/login-shader.js +193 -0
  14. data/app/assets/javascripts/binda/components/login_form.js +116 -0
  15. data/app/assets/javascripts/binda/components/radio-toggle.js +18 -0
  16. data/app/assets/javascripts/binda/components/select2.js +22 -0
  17. data/app/assets/javascripts/binda/components/sortable.js +53 -8
  18. data/app/assets/javascripts/binda/dist/binda.bundle.js +914 -107
  19. data/app/assets/javascripts/binda/index.js +26 -3
  20. data/app/assets/stylesheets/binda/application.scss +6 -0
  21. data/app/assets/stylesheets/binda/components/assets_manager.scss +46 -36
  22. data/app/assets/stylesheets/binda/components/b-btn.scss +114 -0
  23. data/app/assets/stylesheets/binda/components/button.scss +4 -1
  24. data/app/assets/stylesheets/binda/components/fileupload.scss +134 -0
  25. data/app/assets/stylesheets/binda/components/form_item.scss +233 -168
  26. data/app/assets/stylesheets/binda/components/form_item_image.scss +0 -0
  27. data/app/assets/stylesheets/binda/components/form_item_video.scss +25 -0
  28. data/app/assets/stylesheets/binda/components/main_container.scss +3 -0
  29. data/app/assets/stylesheets/binda/components/main_content.scss +1 -2
  30. data/app/assets/stylesheets/binda/components/main_header.scss +21 -20
  31. data/app/assets/stylesheets/binda/components/main_sidebar.scss +121 -0
  32. data/app/assets/stylesheets/binda/components/main_table.scss +84 -28
  33. data/app/assets/stylesheets/binda/components/popup_warning.scss +71 -0
  34. data/app/assets/stylesheets/binda/components/select2.scss +126 -0
  35. data/app/assets/stylesheets/binda/components/sortable.scss +83 -56
  36. data/app/assets/stylesheets/binda/components/standard-form.scss +228 -0
  37. data/app/assets/stylesheets/binda/components/texts.scss +6 -0
  38. data/app/assets/stylesheets/binda/controllers/components_index.scss +3 -0
  39. data/app/assets/stylesheets/binda/controllers/users_sessions_new.scss +309 -0
  40. data/app/assets/stylesheets/binda/index.scss +16 -8
  41. data/app/assets/stylesheets/binda/settings/bootstrap_overrides.scss +0 -0
  42. data/app/assets/stylesheets/binda/settings/buttons.scss +36 -0
  43. data/app/assets/stylesheets/binda/settings/common.scss +36 -79
  44. data/app/assets/stylesheets/binda/settings/fonts.scss +88 -31
  45. data/app/assets/stylesheets/binda/settings/tiny_mce_overrides.scss +82 -0
  46. data/app/assets/stylesheets/binda/settings/variables.scss +36 -31
  47. data/app/controllers/binda/application_controller.rb +0 -2
  48. data/app/controllers/binda/assets_controller.rb +1 -1
  49. data/app/controllers/binda/boards_controller.rb +15 -4
  50. data/app/controllers/binda/components_controller.rb +30 -15
  51. data/app/controllers/binda/field_groups_controller.rb +19 -4
  52. data/app/controllers/binda/images_controller.rb +68 -0
  53. data/app/controllers/binda/repeaters_controller.rb +3 -12
  54. data/app/controllers/binda/structures_controller.rb +8 -1
  55. data/app/controllers/binda/videos_controller.rb +68 -0
  56. data/app/controllers/concerns/binda/fieldable_helpers.rb +113 -28
  57. data/app/controllers/concerns/binda/maintenance_helpers.rb +34 -0
  58. data/app/helpers/binda/components_helper.rb +26 -2
  59. data/app/helpers/binda/field_groups_helper.rb +16 -0
  60. data/app/helpers/binda/structures_helper.rb +6 -0
  61. data/app/models/binda/asset.rb +0 -4
  62. data/app/models/binda/b.rb +5 -0
  63. data/app/models/binda/board.rb +1 -18
  64. data/app/models/binda/choice.rb +48 -12
  65. data/app/models/binda/component.rb +20 -0
  66. data/app/models/binda/field_group.rb +2 -2
  67. data/app/models/binda/field_setting.rb +61 -28
  68. data/app/models/binda/gallery.rb +0 -2
  69. data/app/models/binda/image.rb +7 -0
  70. data/app/models/binda/relation.rb +79 -0
  71. data/app/models/binda/relation_link.rb +11 -0
  72. data/app/models/binda/repeater.rb +1 -1
  73. data/app/models/binda/selection.rb +0 -9
  74. data/app/models/binda/structure.rb +41 -39
  75. data/app/models/binda/video.rb +7 -0
  76. data/app/models/concerns/binda/default_helpers.rb +186 -0
  77. data/app/models/concerns/binda/fieldable_associations.rb +276 -30
  78. data/app/uploaders/binda/{asset → image}/image_uploader.rb +27 -9
  79. data/app/uploaders/binda/video/video_uploader.rb +51 -0
  80. data/app/views/binda/boards/edit.html.erb +6 -1
  81. data/app/views/binda/categories/_form.html.erb +41 -40
  82. data/app/views/binda/categories/edit.html.erb +1 -1
  83. data/app/views/binda/categories/index.html.erb +16 -13
  84. data/app/views/binda/components/edit.html.erb +6 -3
  85. data/app/views/binda/components/index.html.erb +69 -28
  86. data/app/views/binda/components/new.html.erb +1 -1
  87. data/app/views/binda/components/sort_index.html.erb +46 -0
  88. data/app/views/binda/field_groups/_form_body.html.erb +65 -44
  89. data/app/views/binda/field_groups/_form_item.html.erb +66 -23
  90. data/app/views/binda/field_groups/_form_item_choice.erb +34 -15
  91. data/app/views/binda/field_groups/_form_section.html.erb +6 -10
  92. data/app/views/binda/field_groups/_form_section_repeater.html.erb +3 -3
  93. data/app/views/binda/field_groups/edit.html.erb +1 -1
  94. data/app/views/binda/field_settings/_form_body.html.erb +5 -5
  95. data/app/views/binda/field_settings/edit.html.erb +1 -1
  96. data/app/views/binda/fieldable/_form_body.html.erb +93 -79
  97. data/app/views/binda/fieldable/_form_item_date.html.erb +14 -14
  98. data/app/views/binda/fieldable/_form_item_image.html.erb +35 -0
  99. data/app/views/binda/fieldable/_form_item_new_repeater.html.erb +12 -5
  100. data/app/views/binda/fieldable/_form_item_relation.html.erb +44 -0
  101. data/app/views/binda/fieldable/_form_item_repeater.html.erb +80 -58
  102. data/app/views/binda/fieldable/_form_item_selections.html.erb +109 -87
  103. data/app/views/binda/fieldable/_form_item_string.html.erb +19 -17
  104. data/app/views/binda/fieldable/_form_item_text.html.erb +19 -16
  105. data/app/views/binda/fieldable/_form_item_video.html.erb +32 -0
  106. data/app/views/binda/fieldable/_form_section.html.erb +27 -5
  107. data/app/views/binda/fieldable/_form_section_repeater.html.erb +30 -10
  108. data/app/views/binda/fieldable/_form_sidebar.html.erb +44 -20
  109. data/app/views/binda/manage/users/_form_body.html.erb +42 -37
  110. data/app/views/binda/manage/users/edit.html.erb +1 -1
  111. data/app/views/binda/manage/users/index.html.erb +21 -21
  112. data/app/views/binda/structures/_form_body.html.erb +54 -60
  113. data/app/views/binda/structures/_form_section.html.erb +32 -18
  114. data/app/views/binda/structures/_form_sidebar.html.erb +35 -0
  115. data/app/views/binda/structures/edit.html.erb +2 -2
  116. data/app/views/binda/structures/index.html.erb +21 -16
  117. data/app/views/binda/structures/sort_index.html.erb +36 -0
  118. data/app/views/{users → binda/users}/confirmations/new.html.erb +1 -1
  119. data/app/views/{users → binda/users}/mailer/confirmation_instructions.html.erb +0 -0
  120. data/app/views/{users → binda/users}/mailer/password_change.html.erb +0 -0
  121. data/app/views/{users → binda/users}/mailer/reset_password_instructions.html.erb +0 -0
  122. data/app/views/{users → binda/users}/mailer/unlock_instructions.html.erb +0 -0
  123. data/app/views/{users → binda/users}/passwords/edit.html.erb +1 -1
  124. data/app/views/{users → binda/users}/passwords/new.html.erb +1 -1
  125. data/app/views/{users → binda/users}/registrations/edit.html.erb +0 -0
  126. data/app/views/{users → binda/users}/registrations/new.html.erb +1 -1
  127. data/app/views/binda/users/sessions/_background.html.erb +139 -0
  128. data/app/views/binda/users/sessions/new.html.erb +62 -0
  129. data/app/views/{users → binda/users}/shared/_links.html.erb +3 -3
  130. data/app/views/{users → binda/users}/unlocks/new.html.erb +1 -1
  131. data/app/views/kaminari/_first_page.html.erb +11 -0
  132. data/app/views/kaminari/_gap.html.erb +8 -0
  133. data/app/views/kaminari/_last_page.html.erb +11 -0
  134. data/app/views/kaminari/_next_page.html.erb +11 -0
  135. data/app/views/kaminari/_page.html.erb +12 -0
  136. data/app/views/kaminari/_paginator.html.erb +19 -0
  137. data/app/views/kaminari/_prev_page.html.erb +11 -0
  138. data/app/views/layouts/binda/_flash.html.erb +1 -1
  139. data/app/views/layouts/binda/_header.html.erb +2 -6
  140. data/app/views/layouts/binda/_sidebar.html.erb +11 -4
  141. data/app/views/layouts/binda/application.html.erb +15 -7
  142. data/config/autoprefixer.yml +5 -0
  143. data/config/database.yml.travis +3 -0
  144. data/config/initializers/assets.rb +1 -0
  145. data/config/initializers/autoprefixer.yml +5 -0
  146. data/config/initializers/carrierwave.rb +32 -0
  147. data/config/initializers/devise.rb +14 -10
  148. data/config/initializers/devise_patch.rb +8 -8
  149. data/config/initializers/simple_form.rb +4 -0
  150. data/config/initializers/simple_form__fileupload.rb +121 -0
  151. data/config/initializers/{simple_form_bootstrap.rb → simple_form_custom.rb} +79 -50
  152. data/config/locales/en.yml +61 -3
  153. data/config/locales/it.yml +51 -0
  154. data/config/locales/simple_form.en.yml +3 -3
  155. data/config/routes.rb +41 -24
  156. data/db/migrate/1_create_binda_tables.rb +18 -7
  157. data/db/migrate/20171214140451_add_preview_mode.rb +5 -0
  158. data/lib/binda.rb +1 -1
  159. data/lib/binda/engine.rb +19 -23
  160. data/lib/binda/version.rb +2 -2
  161. data/lib/generators/binda/install/install_generator.rb +59 -54
  162. data/lib/generators/binda/install/templates/config/initializers/carrierwave.rb +11 -2
  163. data/lib/generators/binda/maintenance/USAGE +8 -0
  164. data/lib/generators/binda/maintenance/maintenance_generator.rb +50 -0
  165. data/lib/generators/binda/maintenance/templates/app/assets/javascripts/maintenance.js +0 -0
  166. data/lib/generators/binda/maintenance/templates/app/assets/stylesheets/maintenance.scss +0 -0
  167. data/lib/generators/binda/maintenance/templates/app/views/layouts/maintenance.html.erb +16 -0
  168. data/lib/generators/binda/maintenance/templates/config/initializers/maintenance.rb +1 -0
  169. data/lib/generators/binda/setup/setup_generator.rb +41 -30
  170. data/lib/tasks/add_default_helpers_class_task.rake +11 -0
  171. data/lib/tasks/add_video_feature_task.rake +15 -0
  172. data/lib/tasks/remove_orphan_fields_task.rake +16 -0
  173. data/lib/tasks/set_repeater_position_task.rake +13 -0
  174. data/lib/tasks/upgrade_to_v007_task.rake +72 -0
  175. data/lib/tasks/user_tasks.rake +14 -0
  176. data/vendor/assets/fonts/font-awesome/fa-brands-400.eot +0 -0
  177. data/vendor/assets/fonts/font-awesome/fa-brands-400.svg +978 -0
  178. data/vendor/assets/fonts/font-awesome/fa-brands-400.ttf +0 -0
  179. data/vendor/assets/fonts/font-awesome/fa-brands-400.woff +0 -0
  180. data/vendor/assets/fonts/font-awesome/fa-brands-400.woff2 +0 -0
  181. data/vendor/assets/fonts/font-awesome/fa-regular-400.eot +0 -0
  182. data/vendor/assets/fonts/font-awesome/fa-regular-400.svg +363 -0
  183. data/vendor/assets/fonts/font-awesome/fa-regular-400.ttf +0 -0
  184. data/vendor/assets/fonts/font-awesome/fa-regular-400.woff +0 -0
  185. data/vendor/assets/fonts/font-awesome/fa-regular-400.woff2 +0 -0
  186. data/vendor/assets/fonts/font-awesome/fa-solid-900.eot +0 -0
  187. data/vendor/assets/fonts/font-awesome/fa-solid-900.svg +1410 -0
  188. data/vendor/assets/fonts/font-awesome/fa-solid-900.ttf +0 -0
  189. data/vendor/assets/fonts/font-awesome/fa-solid-900.woff +0 -0
  190. data/vendor/assets/fonts/font-awesome/fa-solid-900.woff2 +0 -0
  191. data/vendor/assets/javascripts/GSAP/CSSPlugin.min.js +13 -0
  192. data/vendor/assets/javascripts/GSAP/EasePack.min.js +12 -0
  193. data/vendor/assets/javascripts/GSAP/ScrollToPlugin.min.js +12 -0
  194. data/vendor/assets/javascripts/GSAP/TweenLite.min.js +12 -0
  195. data/vendor/assets/javascripts/select2/i18n/af.js +3 -0
  196. data/vendor/assets/javascripts/select2/i18n/ar.js +3 -0
  197. data/vendor/assets/javascripts/select2/i18n/az.js +3 -0
  198. data/vendor/assets/javascripts/select2/i18n/bg.js +3 -0
  199. data/vendor/assets/javascripts/select2/i18n/bs.js +3 -0
  200. data/vendor/assets/javascripts/select2/i18n/ca.js +3 -0
  201. data/vendor/assets/javascripts/select2/i18n/cs.js +3 -0
  202. data/vendor/assets/javascripts/select2/i18n/da.js +3 -0
  203. data/vendor/assets/javascripts/select2/i18n/de.js +3 -0
  204. data/vendor/assets/javascripts/select2/i18n/dsb.js +3 -0
  205. data/vendor/assets/javascripts/select2/i18n/el.js +3 -0
  206. data/vendor/assets/javascripts/select2/i18n/en.js +3 -0
  207. data/vendor/assets/javascripts/select2/i18n/es.js +3 -0
  208. data/vendor/assets/javascripts/select2/i18n/et.js +3 -0
  209. data/vendor/assets/javascripts/select2/i18n/eu.js +3 -0
  210. data/vendor/assets/javascripts/select2/i18n/fa.js +3 -0
  211. data/vendor/assets/javascripts/select2/i18n/fi.js +3 -0
  212. data/vendor/assets/javascripts/select2/i18n/fr.js +3 -0
  213. data/vendor/assets/javascripts/select2/i18n/gl.js +3 -0
  214. data/vendor/assets/javascripts/select2/i18n/he.js +3 -0
  215. data/vendor/assets/javascripts/select2/i18n/hi.js +3 -0
  216. data/vendor/assets/javascripts/select2/i18n/hr.js +3 -0
  217. data/vendor/assets/javascripts/select2/i18n/hsb.js +3 -0
  218. data/vendor/assets/javascripts/select2/i18n/hu.js +3 -0
  219. data/vendor/assets/javascripts/select2/i18n/hy.js +3 -0
  220. data/vendor/assets/javascripts/select2/i18n/id.js +3 -0
  221. data/vendor/assets/javascripts/select2/i18n/is.js +3 -0
  222. data/vendor/assets/javascripts/select2/i18n/it.js +3 -0
  223. data/vendor/assets/javascripts/select2/i18n/ja.js +3 -0
  224. data/vendor/assets/javascripts/select2/i18n/km.js +3 -0
  225. data/vendor/assets/javascripts/select2/i18n/ko.js +3 -0
  226. data/vendor/assets/javascripts/select2/i18n/lt.js +3 -0
  227. data/vendor/assets/javascripts/select2/i18n/lv.js +3 -0
  228. data/vendor/assets/javascripts/select2/i18n/mk.js +3 -0
  229. data/vendor/assets/javascripts/select2/i18n/ms.js +3 -0
  230. data/vendor/assets/javascripts/select2/i18n/nb.js +3 -0
  231. data/vendor/assets/javascripts/select2/i18n/nl.js +3 -0
  232. data/vendor/assets/javascripts/select2/i18n/pl.js +3 -0
  233. data/vendor/assets/javascripts/select2/i18n/ps.js +3 -0
  234. data/vendor/assets/javascripts/select2/i18n/pt-BR.js +3 -0
  235. data/vendor/assets/javascripts/select2/i18n/pt.js +3 -0
  236. data/vendor/assets/javascripts/select2/i18n/ro.js +3 -0
  237. data/vendor/assets/javascripts/select2/i18n/ru.js +3 -0
  238. data/vendor/assets/javascripts/select2/i18n/sk.js +3 -0
  239. data/vendor/assets/javascripts/select2/i18n/sl.js +3 -0
  240. data/vendor/assets/javascripts/select2/i18n/sr-Cyrl.js +3 -0
  241. data/vendor/assets/javascripts/select2/i18n/sr.js +3 -0
  242. data/vendor/assets/javascripts/select2/i18n/sv.js +3 -0
  243. data/vendor/assets/javascripts/select2/i18n/th.js +3 -0
  244. data/vendor/assets/javascripts/select2/i18n/tr.js +3 -0
  245. data/vendor/assets/javascripts/select2/i18n/uk.js +3 -0
  246. data/vendor/assets/javascripts/select2/i18n/vi.js +3 -0
  247. data/vendor/assets/javascripts/select2/i18n/zh-CN.js +3 -0
  248. data/vendor/assets/javascripts/select2/i18n/zh-TW.js +3 -0
  249. data/vendor/assets/javascripts/select2/select2.full.min.js +1 -0
  250. data/vendor/assets/javascripts/select2/select2.min.js +1 -0
  251. data/vendor/assets/javascripts/tether.min.js +1 -0
  252. data/vendor/assets/stylesheets/{bootstrap-select.css → bootstrap/bootstrap-select.css} +0 -0
  253. data/vendor/assets/stylesheets/font-awesome/_animated.scss +6 -20
  254. data/vendor/assets/stylesheets/font-awesome/_bordered-pulled.scss +6 -11
  255. data/vendor/assets/stylesheets/font-awesome/_core.scss +11 -7
  256. data/vendor/assets/stylesheets/font-awesome/_fixed-width.scss +1 -1
  257. data/vendor/assets/stylesheets/font-awesome/_icons.scss +785 -787
  258. data/vendor/assets/stylesheets/font-awesome/_larger.scss +16 -6
  259. data/vendor/assets/stylesheets/font-awesome/_list.scss +7 -8
  260. data/vendor/assets/stylesheets/font-awesome/_mixins.scss +17 -20
  261. data/vendor/assets/stylesheets/font-awesome/_rotated-flipped.scss +9 -6
  262. data/vendor/assets/stylesheets/font-awesome/_screen-reader.scss +2 -2
  263. data/vendor/assets/stylesheets/font-awesome/_stacked.scss +19 -8
  264. data/vendor/assets/stylesheets/font-awesome/_variables.scss +795 -795
  265. data/vendor/assets/stylesheets/font-awesome/fa-brands.scss +21 -0
  266. data/vendor/assets/stylesheets/font-awesome/fa-regular.scss +22 -0
  267. data/vendor/assets/stylesheets/font-awesome/fa-solid.scss +23 -0
  268. data/vendor/assets/stylesheets/font-awesome/fontawesome.scss +20 -0
  269. data/vendor/assets/stylesheets/select2/select2.min.css +1 -0
  270. metadata +278 -125
  271. data/app/assets/javascripts/binda/components/form_item_asset.js +0 -25
  272. data/app/assets/stylesheets/binda/application.css +0 -6
  273. data/app/assets/stylesheets/binda/components/form_body.scss +0 -2
  274. data/app/assets/stylesheets/binda/components/form_item_asset.scss +0 -20
  275. data/app/assets/stylesheets/binda/components/form_section.scss +0 -40
  276. data/app/assets/stylesheets/binda/components/sidebar.scss +0 -131
  277. data/app/assets/stylesheets/binda/layout/components_index.scss +0 -9
  278. data/app/assets/stylesheets/binda/layout/dashboard.scss +0 -7
  279. data/app/assets/stylesheets/binda/layout/users_sign_in.scss +0 -29
  280. data/app/controllers/binda/bindings_controller.rb +0 -62
  281. data/app/controllers/concerns/binda/default_helpers.rb +0 -226
  282. data/app/helpers/binda/bindings_helper.rb +0 -4
  283. data/app/models/binda/binda.rb +0 -7
  284. data/app/models/binda/binding.rb +0 -24
  285. data/app/views/binda/bindings/_form.html.erb +0 -32
  286. data/app/views/binda/bindings/edit.html.erb +0 -6
  287. data/app/views/binda/bindings/index.html.erb +0 -31
  288. data/app/views/binda/bindings/new.html.erb +0 -5
  289. data/app/views/binda/bindings/show.html.erb +0 -19
  290. data/app/views/binda/field_groups/index.html.erb +0 -34
  291. data/app/views/binda/fieldable/_form_item_asset.html.erb +0 -20
  292. data/app/views/users/sessions/new.html.erb +0 -27
  293. data/lib/tasks/binda.rake +0 -79
  294. data/vendor/assets/fonts/font-awesome/FontAwesome.otf +0 -0
  295. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.eot +0 -0
  296. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.svg +0 -2671
  297. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
  298. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff +0 -0
  299. data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff2 +0 -0
  300. data/vendor/assets/stylesheets/font-awesome/_path.scss +0 -15
  301. data/vendor/assets/stylesheets/font-awesome/font-awesome.scss +0 -18
@@ -3,27 +3,35 @@
3
3
  <head>
4
4
  <title>Binda CMS -- <%= controller_name.capitalize %> <%= action_name.capitalize %></title>
5
5
  <%= csrf_meta_tags %>
6
- <%= tinymce %>
6
+
7
+ <link href="https://fonts.googleapis.com/css?family=Work+Sans:300,600" rel="stylesheet">
7
8
  <%= stylesheet_link_tag "binda/application", media: "all" %>
9
+
10
+ <% if controller_name == 'sessions' && action_name == 'new' %>
11
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.5.1/pixi.min.js"></script>
12
+ <% end %>
8
13
  <%= javascript_include_tag "binda/application" %>
14
+ <%= tinymce %><%# This one as to be called after "application" scripts%>
9
15
  </head>
10
16
 
11
17
  <body class="<%= action_name %> <%= "#{controller_name}-#{action_name}" %> <%= 'devise-view' if is_devise_controller %>">
12
18
 
13
19
  <div id="main-container">
14
-
20
+
21
+ <%= yield :background %>
22
+
15
23
  <%= render partial: 'layouts/binda/sidebar' %>
16
24
  <%= render partial: 'layouts/binda/header' %>
17
25
 
18
- <div id="main-content" class="container">
26
+ <div id="main-content">
19
27
 
20
- <%= render partial: 'layouts/binda/flash' %>
28
+ <%= render partial: 'layouts/binda/flash' %>
21
29
 
22
30
  <%= yield :content %>
23
31
  <%= yield %>
24
-
25
- </div>
26
- </div>
27
32
 
33
+ </div>
34
+
35
+ </div>
28
36
  </body>
29
37
  </html>
@@ -0,0 +1,5 @@
1
+ flexbox: no-2009
2
+ browsers:
3
+ - "> 1%"
4
+ - "last 2 versions"
5
+ - "IE > 8"
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: postgresql
3
+ database: travis_ci_test
@@ -1,3 +1,4 @@
1
1
  # Make fonts available to pipeline
2
2
  Rails.application.config.assets.paths << Rails.root.join("vendor", "assets", "fonts")
3
+ Rails.application.config.assets.paths << Rails.root.join("vendor", "assets", "stylesheets")
3
4
  Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
@@ -0,0 +1,5 @@
1
+ flexbox: no-2009
2
+ browsers:
3
+ - "> 1%"
4
+ - "last 2 versions"
5
+ - "IE > 8"
@@ -0,0 +1,32 @@
1
+ # see: https://til.codes/testing-carrierwave-file-uploads-with-rspec-and-factorygirl/
2
+ # This apparently doesn't work... needs further investigation
3
+ if Rails.env.test? || Rails.env.cucumber?
4
+
5
+ # Setup Carrierwave to use local storage and disable file processing in test env
6
+ CarrierWave.configure do |config|
7
+ config.storage = :file
8
+ config.enable_processing = false
9
+ end
10
+
11
+ # Separate out the upload folders for test environment.
12
+ CarrierWave::Uploader::Base.descendants.each do |klass|
13
+ next if klass.anonymous?
14
+ klass.class_eval do
15
+ def cache_dir
16
+ "#{Binda::Engine.root}/spec/support/uploads/tmp"
17
+ end
18
+
19
+ def store_dir
20
+ "#{Binda::Engine.root}/spec/support/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
21
+ end
22
+ end
23
+ end
24
+
25
+ # Setting asset_host
26
+ # (this line should stay outside the initial if statement)
27
+ CarrierWave::Uploader::Base.descendants.each do |klass|
28
+ # Set the asset_host option for the carrierwave.
29
+ config.asset_host = ActionController::Base.asset_host
30
+ end
31
+
32
+ end
@@ -5,16 +5,18 @@ Devise.setup do |config|
5
5
  # https://github.com/plataformatec/devise/wiki/How-To:-Use-devise-inside-a-mountable-engine
6
6
  # You probably want Devise's controllers to inherit from
7
7
  # your engine's controller and not the main controller.
8
- # Set this in config/initializers/devise.rb:
8
+ # ============== DON'T CHANGE IT ===============
9
9
  config.parent_controller = 'Binda::ApplicationController'
10
-
10
+ # ============== =============== ===============
11
11
 
12
12
  # The secret key used by Devise. Devise uses this key to generate
13
13
  # random tokens. Changing this key will render invalid all existing
14
14
  # confirmation, reset password and unlock tokens in the database.
15
15
  # Devise will use the `secret_key_base` as its `secret_key`
16
16
  # by default. You can change it below and use your own secret key.
17
- # config.secret_key = '477d441c458294ec4cef0652a0e96f1c5587593a3897c5459a43ccf8c7cc0f0e44003d17f7e5019ffa651806d22c24fb568096b56824f07df1dcad0ecd81bc2b'
17
+ # config.secret_key = 'a8395fa034e067da620d70f7f39ad4765d163e44ce05d5c243393e1bbfdc10f9a464aaf34fcac3291a6746424ea2b9f9564a01c31820e28bf1737c16d139cd5c'
18
+ # binda.hook.1
19
+ config.secret_key = '940fcbf616f851acdbcfb5af5629435e0ce550b51a0bf1db4cfb609b537d93b98a9ddefbf03a8274fa59a6483fe82df3aa1a6609a8ca0e62ae3269a91374cccd'
18
20
 
19
21
  # ==> Mailer Configuration
20
22
  # Configure the e-mail address which will be shown in Devise::Mailer,
@@ -110,7 +112,9 @@ Devise.setup do |config|
110
112
  config.stretches = Rails.env.test? ? 1 : 11
111
113
 
112
114
  # Set up a pepper to generate the hashed password.
113
- # config.pepper = '3ae686c27e0413bd5b0a863730f082714caff4c040d987fd64367f0041e7e99f221a583cd3b0eaeb85408ce97d56ea59c00907a61b69988148f83d30f7ff92c3'
115
+ # config.pepper = '124ef1b08a92f891a392a9594b868887c945ca8438bd7852f8ac4d91e51f2cc699b8b6c7b12057c0f0e6dc03d04f8ee4eab72278b0f948e2c1e43f8b449c2262'
116
+ # binda.hook.2
117
+ config.pepper = '0586297a053d9c535c607464fb45c15325e4faa6f31f1b5361a431c1978c2dce2776047cef7b89500600bbfa82818b853ab896ad8b48334656bb907a06c8a9bb'
114
118
 
115
119
  # Send a notification email when the user's password is changed
116
120
  # config.send_password_change_notification = false
@@ -156,7 +160,7 @@ Devise.setup do |config|
156
160
 
157
161
  # ==> Configuration for :validatable
158
162
  # Range for password length.
159
- config.password_length = 6..128
163
+ config.password_length = 8..128
160
164
 
161
165
  # Email regex used to validate email formats. It simply asserts that
162
166
  # one (and only one) @ exists in the given string. This is mainly
@@ -222,9 +226,7 @@ Devise.setup do |config|
222
226
  # Turn scoped views on. Before rendering "sessions/new", it will first check for
223
227
  # "users/sessions/new". It's turned off by default because it's slower if you
224
228
  # are using only default views.
225
- # ============== DON'T CHANGE IT ===============
226
- config.scoped_views = true
227
- # ============== =============== ===============
229
+ # config.scoped_views = false
228
230
 
229
231
  # Configure the default scope given to Warden. By default it's the first
230
232
  # devise role declared in your routes (usually :user).
@@ -267,11 +269,13 @@ Devise.setup do |config|
267
269
  # is mountable, there are some extra configurations to be taken into account.
268
270
  # The following options are available, assuming the engine is mounted as:
269
271
  #
270
- # mount MyEngine, at: '/binda'
272
+ # mount MyEngine, at: '/my_engine'
271
273
  #
272
274
  # The router that invoked `devise_for`, in the example above, would be:
275
+ # ============== DON'T CHANGE IT ===============
273
276
  config.router_name = :binda
274
- #
277
+ # ============== =============== ===============
278
+
275
279
  # When using OmniAuth, Devise cannot automatically set OmniAuth path,
276
280
  # so you need to do it manually. For the users scope, it would be:
277
281
  # config.omniauth_path_prefix = '/my_engine/users/auth'
@@ -28,18 +28,18 @@ module Devise
28
28
 
29
29
  opts[:format] = request_format unless skip_format?
30
30
 
31
- config = Rails.application.config
32
-
33
- if config.respond_to?(:relative_url_root) && config.relative_url_root.present?
34
- opts[:script_name] = config.relative_url_root
35
- end
36
-
37
31
  router_name = Devise.mappings[scope].router_name || Devise.available_router_name
38
-
39
32
  context = send(router_name)
40
33
 
34
+ if relative_url_root?
35
+ opts[:script_name] = relative_url_root
36
+ elsif defined? context.routes
37
+ rootpath = context.routes.url_helpers.root_path
38
+ opts[:script_name] = rootpath.chomp('/') unless rootpath.length <= 1
39
+ end
40
+
41
41
  if context.respond_to?(route)
42
- context.send(route)
42
+ context.send(route, opts)
43
43
  elsif respond_to?(:root_url)
44
44
  root_url(opts)
45
45
  else
@@ -28,8 +28,12 @@ SimpleForm.setup do |config|
28
28
  # extensions by default, you can change `b.optional` to `b.use`.
29
29
 
30
30
  # Calculates maxlength from length validations for string inputs
31
+ # and/or database column lengths
31
32
  b.optional :maxlength
32
33
 
34
+ # Calculate minlength from length validations for string inputs
35
+ b.optional :minlength
36
+
33
37
  # Calculates pattern from format validations for string inputs
34
38
  b.optional :pattern
35
39
 
@@ -0,0 +1,121 @@
1
+ module SimpleForm
2
+ module Components
3
+
4
+ # Needs to be enabled in order to do automatic lookups
5
+ module Previews
6
+
7
+ # Name of the component method
8
+ def preview(wrapper_options = nil)
9
+ @preview ||= begin
10
+ # open a div tag for the file preview
11
+ html = '<div class="fileupload--preview'
12
+
13
+ # add preview image if it's set
14
+ if options[:object].image.present?
15
+ html << " fileupload--preview--uploaded\" style=\"background-image: url(#{options[:object].image.url})"
16
+ elsif options[:object].video.present?
17
+ html << " fileupload--preview--uploaded"
18
+ end
19
+
20
+ # Add no-preview text
21
+ html << "\"><p>#{ t('binda.no_preview')}</p>"
22
+
23
+ # Add video tag
24
+ if options[:object].video.present?
25
+ html << "<video id=\"video-#{options[:object].id}\" class=\"form-item--video--video\">"
26
+ html << "<source src=\"#{options[:object].video.url}\" type=\"video/#{options[:object].video.file.extension.downcase}\"></video>"
27
+ else
28
+ html << "<video class=\"form-item--video--video\"><source></video>"
29
+ end
30
+
31
+ # Close preview container
32
+ html << "</div>"
33
+ end
34
+ end
35
+
36
+ # Used when the preview is optional
37
+ def has_preview?
38
+ preview.present?
39
+ end
40
+
41
+ end
42
+
43
+ module DeleteButtons
44
+ def delete_button(wrapper_options = nil)
45
+ @delete_button ||= begin
46
+ obj = options[:object]
47
+ url = options[:url]
48
+ html = '<a class="b-btn b-btn-outline-danger fileupload--remove-image-btn'
49
+ html << ' fileupload--remove-image-btn--hidden' unless obj.image.present? || obj.video.present?
50
+ html << '" href="'
51
+ html << url
52
+ html << '" data-method="delete" data-remote="true" data-confirm="'
53
+ html << t('binda.confirm_delete')
54
+ html << '" data-id="'
55
+ html << obj.id.to_s
56
+ html << '">'
57
+ html << '<i class="fa fa-trash-alt" aria-hidden="true"></i> Delete image'
58
+ html << '</a>'
59
+ html << '<div class="clearfix"></div>'
60
+ end
61
+ end
62
+
63
+ # Used when the preview is optional
64
+ def has_delete_button?
65
+ delete_button.present?
66
+ end
67
+ end
68
+
69
+ module Details
70
+ def detail(wrapper_options = nil)
71
+ @detail ||= begin
72
+ obj = options[:object]
73
+
74
+ if obj.image.present?
75
+ if CarrierWave::Uploader::Base.storage == CarrierWave::Storage::File
76
+ image = MiniMagick::Image.open(::Rails.root.join(obj.image.path))
77
+ else
78
+ image = MiniMagick::Image.open(obj.image.url)
79
+ end
80
+ end
81
+
82
+ html = '<div class="fileupload--details'
83
+ html << ' fileupload--details--hidden' unless obj.image.present? || obj.video.present?
84
+ html << '"><p class="fileupload--name">'
85
+ html << "<strong>#{t 'binda.filename'}:</strong> "
86
+ html << '<span class="fileupload--filename">'
87
+ html << File.basename(obj.image.path).to_s if obj.image.present?
88
+ html << File.basename(obj.video.path).to_s if obj.video.present?
89
+ html << '</span></p>'
90
+ html << '<p class="fileupload--size">'
91
+ html << "<strong>#{t 'binda.filesize'}:</strong> "
92
+ html << '<span class="fileupload--filesize">'
93
+ html << bytes_to_megabytes(obj.image.size).to_s if obj.image.present?
94
+ html << bytes_to_megabytes(obj.video.size).to_s if obj.video.present?
95
+ html << 'MB</span></p>'
96
+ html << '<p class="fileupload--dimension">'
97
+ html << "<strong>#{t 'binda.filedimension'}:</strong> "
98
+ html << '<span class="fileupload--width">'
99
+ html << image[:width].to_s unless image.nil?
100
+ html << '</span> x <span class="fileupload--height">'
101
+ html << image[:height].to_s unless image.nil?
102
+ html << '</span> px</p>'
103
+ html << '</div>'
104
+ end
105
+ end
106
+
107
+ # Used when the preview is optional
108
+ def has_detail?
109
+ detail.present?
110
+ end
111
+
112
+ def bytes_to_megabytes bytes
113
+ (bytes.to_f / 1.megabyte).round(2)
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Previews)
120
+ SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::DeleteButtons)
121
+ SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Details)
@@ -1,55 +1,11 @@
1
1
  # Use this setup block to configure all options available in SimpleForm.
2
2
  SimpleForm.setup do |config|
3
+
4
+ # Bootstrap Simple Form defaults
3
5
  config.error_notification_class = 'alert alert-danger'
4
- config.button_class = 'btn btn-default'
6
+ config.button_class = 'b-btn b-btn-default'
5
7
  config.boolean_label_class = nil
6
8
 
7
- config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
8
- b.use :html5
9
- b.use :placeholder
10
- b.optional :maxlength
11
- b.optional :pattern
12
- b.optional :min_max
13
- b.optional :readonly
14
- b.use :label, class: 'control-label'
15
-
16
- b.use :input, class: 'form-control'
17
- b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
18
- b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
19
- end
20
-
21
- config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
22
- b.use :html5
23
- b.use :placeholder
24
- b.optional :maxlength
25
- b.optional :readonly
26
- b.use :label, class: 'control-label'
27
-
28
- b.use :input
29
- b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
30
- b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
31
- end
32
-
33
- config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
34
- b.use :html5
35
- b.optional :readonly
36
-
37
- b.wrapper tag: 'div', class: 'checkbox' do |ba|
38
- ba.use :label_input
39
- end
40
-
41
- b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
42
- b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
43
- end
44
-
45
- config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
46
- b.use :html5
47
- b.optional :readonly
48
- b.use :label, class: 'control-label'
49
- b.use :input
50
- b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
51
- b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
52
- end
53
9
 
54
10
  config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
55
11
  b.use :html5
@@ -122,16 +78,88 @@ SimpleForm.setup do |config|
122
78
  b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
123
79
  end
124
80
 
81
+
82
+ # Binda custom settings
83
+ # ---------------------
84
+ config.label_text = proc { |label, required| "#{label} #{required}" }
85
+
86
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
87
+ b.use :html5
88
+ b.use :placeholder
89
+ b.optional :maxlength
90
+ b.optional :pattern
91
+ b.optional :min_max
92
+ b.optional :readonly
93
+ b.use :label, class: 'control-label', wrap_with: { tag: 'div', class: 'control-label-wrap' }
94
+
95
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
96
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
97
+ b.use :input, class: 'form-control'
98
+ end
99
+
100
+ config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
101
+ b.use :html5
102
+ b.use :placeholder
103
+ b.optional :maxlength
104
+ b.optional :readonly
105
+ b.use :label, class: 'control-label', wrap_with: { tag: 'div', class: 'control-label-wrap' }
106
+
107
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
108
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
109
+ b.use :input
110
+ end
111
+
112
+ config.wrappers :fileupload do |b|
113
+ b.optional :error, wrap_with: { tag: 'span', class: 'help-block' }
114
+ b.wrapper tag: :p, class: 'help-block', unless_blank: true do |bb|
115
+ bb.optional :hint
116
+ end
117
+ b.use :html5
118
+ b.use :placeholder
119
+ b.optional :maxlength
120
+ b.optional :readonly
121
+
122
+ b.use :preview
123
+ b.wrapper tag: 'div', class: 'fileupload--dashboard' do |bb|
124
+ bb.use :label, class: 'control-label b-btn b-btn-primary', wrap_with: { tag: 'div', class: 'control-label-wrap' }
125
+ bb.use :delete_button
126
+ bb.use :detail
127
+ end
128
+ b.use :input
129
+ end
130
+
131
+ config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
132
+ b.use :html5
133
+ b.optional :readonly
134
+
135
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
136
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
137
+
138
+ b.wrapper tag: 'div', class: 'checkbox' do |ba|
139
+ ba.use :label_input
140
+ end
141
+ end
142
+
143
+ config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
144
+ b.use :html5
145
+ b.optional :readonly
146
+ b.use :label, class: 'control-label', wrap_with: { tag: 'div', class: 'control-label-wrap' }
147
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
148
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
149
+ b.use :input
150
+ end
151
+
125
152
  config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
126
153
  b.use :html5
127
154
  b.optional :readonly
128
- b.use :label, class: 'control-label'
155
+ b.use :label, class: 'control-label', wrap_with: { tag: 'div', class: 'control-label-wrap' }
129
156
  b.wrapper tag: 'div', class: 'form-inline' do |ba|
130
- ba.use :input, class: 'form-control'
131
157
  ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
132
158
  ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
159
+ ba.use :input, class: 'form-control', style: 'width: 120px'
133
160
  end
134
161
  end
162
+
135
163
  # Wrappers for forms and inputs using the Bootstrap toolkit.
136
164
  # Check the Bootstrap docs (http://getbootstrap.com)
137
165
  # to learn about the different styles for forms and inputs,
@@ -140,10 +168,11 @@ SimpleForm.setup do |config|
140
168
  config.wrapper_mappings = {
141
169
  check_boxes: :vertical_radio_and_checkboxes,
142
170
  radio_buttons: :vertical_radio_and_checkboxes,
143
- file: :vertical_file_input,
171
+ file: :fileupload,
144
172
  boolean: :vertical_boolean,
145
173
  datetime: :multi_select,
146
174
  date: :multi_select,
147
175
  time: :multi_select
148
176
  }
177
+
149
178
  end