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.
- checksums.yaml +4 -4
- data/README.md +850 -18
- data/Rakefile +1 -13
- data/app/assets/javascripts/binda/application.js +23 -0
- data/app/assets/javascripts/binda/components/bootstrap.js +9 -0
- data/app/assets/javascripts/binda/components/field_group_editor.js +18 -0
- data/app/assets/javascripts/binda/components/fileupload.js +182 -0
- data/app/assets/javascripts/binda/components/form_item.js +91 -23
- data/app/assets/javascripts/binda/components/form_item_choice.js +15 -8
- data/app/assets/javascripts/binda/components/form_item_editor.js +6 -6
- data/app/assets/javascripts/binda/components/form_item_image.js +23 -0
- data/app/assets/javascripts/binda/components/form_item_repeater.js +70 -23
- data/app/assets/javascripts/binda/components/login-shader.js +193 -0
- data/app/assets/javascripts/binda/components/login_form.js +116 -0
- data/app/assets/javascripts/binda/components/radio-toggle.js +18 -0
- data/app/assets/javascripts/binda/components/select2.js +22 -0
- data/app/assets/javascripts/binda/components/sortable.js +53 -8
- data/app/assets/javascripts/binda/dist/binda.bundle.js +914 -107
- data/app/assets/javascripts/binda/index.js +26 -3
- data/app/assets/stylesheets/binda/application.scss +6 -0
- data/app/assets/stylesheets/binda/components/assets_manager.scss +46 -36
- data/app/assets/stylesheets/binda/components/b-btn.scss +114 -0
- data/app/assets/stylesheets/binda/components/button.scss +4 -1
- data/app/assets/stylesheets/binda/components/fileupload.scss +134 -0
- data/app/assets/stylesheets/binda/components/form_item.scss +233 -168
- data/app/assets/stylesheets/binda/components/form_item_image.scss +0 -0
- data/app/assets/stylesheets/binda/components/form_item_video.scss +25 -0
- data/app/assets/stylesheets/binda/components/main_container.scss +3 -0
- data/app/assets/stylesheets/binda/components/main_content.scss +1 -2
- data/app/assets/stylesheets/binda/components/main_header.scss +21 -20
- data/app/assets/stylesheets/binda/components/main_sidebar.scss +121 -0
- data/app/assets/stylesheets/binda/components/main_table.scss +84 -28
- data/app/assets/stylesheets/binda/components/popup_warning.scss +71 -0
- data/app/assets/stylesheets/binda/components/select2.scss +126 -0
- data/app/assets/stylesheets/binda/components/sortable.scss +83 -56
- data/app/assets/stylesheets/binda/components/standard-form.scss +228 -0
- data/app/assets/stylesheets/binda/components/texts.scss +6 -0
- data/app/assets/stylesheets/binda/controllers/components_index.scss +3 -0
- data/app/assets/stylesheets/binda/controllers/users_sessions_new.scss +309 -0
- data/app/assets/stylesheets/binda/index.scss +16 -8
- data/app/assets/stylesheets/binda/settings/bootstrap_overrides.scss +0 -0
- data/app/assets/stylesheets/binda/settings/buttons.scss +36 -0
- data/app/assets/stylesheets/binda/settings/common.scss +36 -79
- data/app/assets/stylesheets/binda/settings/fonts.scss +88 -31
- data/app/assets/stylesheets/binda/settings/tiny_mce_overrides.scss +82 -0
- data/app/assets/stylesheets/binda/settings/variables.scss +36 -31
- data/app/controllers/binda/application_controller.rb +0 -2
- data/app/controllers/binda/assets_controller.rb +1 -1
- data/app/controllers/binda/boards_controller.rb +15 -4
- data/app/controllers/binda/components_controller.rb +30 -15
- data/app/controllers/binda/field_groups_controller.rb +19 -4
- data/app/controllers/binda/images_controller.rb +68 -0
- data/app/controllers/binda/repeaters_controller.rb +3 -12
- data/app/controllers/binda/structures_controller.rb +8 -1
- data/app/controllers/binda/videos_controller.rb +68 -0
- data/app/controllers/concerns/binda/fieldable_helpers.rb +113 -28
- data/app/controllers/concerns/binda/maintenance_helpers.rb +34 -0
- data/app/helpers/binda/components_helper.rb +26 -2
- data/app/helpers/binda/field_groups_helper.rb +16 -0
- data/app/helpers/binda/structures_helper.rb +6 -0
- data/app/models/binda/asset.rb +0 -4
- data/app/models/binda/b.rb +5 -0
- data/app/models/binda/board.rb +1 -18
- data/app/models/binda/choice.rb +48 -12
- data/app/models/binda/component.rb +20 -0
- data/app/models/binda/field_group.rb +2 -2
- data/app/models/binda/field_setting.rb +61 -28
- data/app/models/binda/gallery.rb +0 -2
- data/app/models/binda/image.rb +7 -0
- data/app/models/binda/relation.rb +79 -0
- data/app/models/binda/relation_link.rb +11 -0
- data/app/models/binda/repeater.rb +1 -1
- data/app/models/binda/selection.rb +0 -9
- data/app/models/binda/structure.rb +41 -39
- data/app/models/binda/video.rb +7 -0
- data/app/models/concerns/binda/default_helpers.rb +186 -0
- data/app/models/concerns/binda/fieldable_associations.rb +276 -30
- data/app/uploaders/binda/{asset → image}/image_uploader.rb +27 -9
- data/app/uploaders/binda/video/video_uploader.rb +51 -0
- data/app/views/binda/boards/edit.html.erb +6 -1
- data/app/views/binda/categories/_form.html.erb +41 -40
- data/app/views/binda/categories/edit.html.erb +1 -1
- data/app/views/binda/categories/index.html.erb +16 -13
- data/app/views/binda/components/edit.html.erb +6 -3
- data/app/views/binda/components/index.html.erb +69 -28
- data/app/views/binda/components/new.html.erb +1 -1
- data/app/views/binda/components/sort_index.html.erb +46 -0
- data/app/views/binda/field_groups/_form_body.html.erb +65 -44
- data/app/views/binda/field_groups/_form_item.html.erb +66 -23
- data/app/views/binda/field_groups/_form_item_choice.erb +34 -15
- data/app/views/binda/field_groups/_form_section.html.erb +6 -10
- data/app/views/binda/field_groups/_form_section_repeater.html.erb +3 -3
- data/app/views/binda/field_groups/edit.html.erb +1 -1
- data/app/views/binda/field_settings/_form_body.html.erb +5 -5
- data/app/views/binda/field_settings/edit.html.erb +1 -1
- data/app/views/binda/fieldable/_form_body.html.erb +93 -79
- data/app/views/binda/fieldable/_form_item_date.html.erb +14 -14
- data/app/views/binda/fieldable/_form_item_image.html.erb +35 -0
- data/app/views/binda/fieldable/_form_item_new_repeater.html.erb +12 -5
- data/app/views/binda/fieldable/_form_item_relation.html.erb +44 -0
- data/app/views/binda/fieldable/_form_item_repeater.html.erb +80 -58
- data/app/views/binda/fieldable/_form_item_selections.html.erb +109 -87
- data/app/views/binda/fieldable/_form_item_string.html.erb +19 -17
- data/app/views/binda/fieldable/_form_item_text.html.erb +19 -16
- data/app/views/binda/fieldable/_form_item_video.html.erb +32 -0
- data/app/views/binda/fieldable/_form_section.html.erb +27 -5
- data/app/views/binda/fieldable/_form_section_repeater.html.erb +30 -10
- data/app/views/binda/fieldable/_form_sidebar.html.erb +44 -20
- data/app/views/binda/manage/users/_form_body.html.erb +42 -37
- data/app/views/binda/manage/users/edit.html.erb +1 -1
- data/app/views/binda/manage/users/index.html.erb +21 -21
- data/app/views/binda/structures/_form_body.html.erb +54 -60
- data/app/views/binda/structures/_form_section.html.erb +32 -18
- data/app/views/binda/structures/_form_sidebar.html.erb +35 -0
- data/app/views/binda/structures/edit.html.erb +2 -2
- data/app/views/binda/structures/index.html.erb +21 -16
- data/app/views/binda/structures/sort_index.html.erb +36 -0
- data/app/views/{users → binda/users}/confirmations/new.html.erb +1 -1
- data/app/views/{users → binda/users}/mailer/confirmation_instructions.html.erb +0 -0
- data/app/views/{users → binda/users}/mailer/password_change.html.erb +0 -0
- data/app/views/{users → binda/users}/mailer/reset_password_instructions.html.erb +0 -0
- data/app/views/{users → binda/users}/mailer/unlock_instructions.html.erb +0 -0
- data/app/views/{users → binda/users}/passwords/edit.html.erb +1 -1
- data/app/views/{users → binda/users}/passwords/new.html.erb +1 -1
- data/app/views/{users → binda/users}/registrations/edit.html.erb +0 -0
- data/app/views/{users → binda/users}/registrations/new.html.erb +1 -1
- data/app/views/binda/users/sessions/_background.html.erb +139 -0
- data/app/views/binda/users/sessions/new.html.erb +62 -0
- data/app/views/{users → binda/users}/shared/_links.html.erb +3 -3
- data/app/views/{users → binda/users}/unlocks/new.html.erb +1 -1
- data/app/views/kaminari/_first_page.html.erb +11 -0
- data/app/views/kaminari/_gap.html.erb +8 -0
- data/app/views/kaminari/_last_page.html.erb +11 -0
- data/app/views/kaminari/_next_page.html.erb +11 -0
- data/app/views/kaminari/_page.html.erb +12 -0
- data/app/views/kaminari/_paginator.html.erb +19 -0
- data/app/views/kaminari/_prev_page.html.erb +11 -0
- data/app/views/layouts/binda/_flash.html.erb +1 -1
- data/app/views/layouts/binda/_header.html.erb +2 -6
- data/app/views/layouts/binda/_sidebar.html.erb +11 -4
- data/app/views/layouts/binda/application.html.erb +15 -7
- data/config/autoprefixer.yml +5 -0
- data/config/database.yml.travis +3 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/autoprefixer.yml +5 -0
- data/config/initializers/carrierwave.rb +32 -0
- data/config/initializers/devise.rb +14 -10
- data/config/initializers/devise_patch.rb +8 -8
- data/config/initializers/simple_form.rb +4 -0
- data/config/initializers/simple_form__fileupload.rb +121 -0
- data/config/initializers/{simple_form_bootstrap.rb → simple_form_custom.rb} +79 -50
- data/config/locales/en.yml +61 -3
- data/config/locales/it.yml +51 -0
- data/config/locales/simple_form.en.yml +3 -3
- data/config/routes.rb +41 -24
- data/db/migrate/1_create_binda_tables.rb +18 -7
- data/db/migrate/20171214140451_add_preview_mode.rb +5 -0
- data/lib/binda.rb +1 -1
- data/lib/binda/engine.rb +19 -23
- data/lib/binda/version.rb +2 -2
- data/lib/generators/binda/install/install_generator.rb +59 -54
- data/lib/generators/binda/install/templates/config/initializers/carrierwave.rb +11 -2
- data/lib/generators/binda/maintenance/USAGE +8 -0
- data/lib/generators/binda/maintenance/maintenance_generator.rb +50 -0
- data/lib/generators/binda/maintenance/templates/app/assets/javascripts/maintenance.js +0 -0
- data/lib/generators/binda/maintenance/templates/app/assets/stylesheets/maintenance.scss +0 -0
- data/lib/generators/binda/maintenance/templates/app/views/layouts/maintenance.html.erb +16 -0
- data/lib/generators/binda/maintenance/templates/config/initializers/maintenance.rb +1 -0
- data/lib/generators/binda/setup/setup_generator.rb +41 -30
- data/lib/tasks/add_default_helpers_class_task.rake +11 -0
- data/lib/tasks/add_video_feature_task.rake +15 -0
- data/lib/tasks/remove_orphan_fields_task.rake +16 -0
- data/lib/tasks/set_repeater_position_task.rake +13 -0
- data/lib/tasks/upgrade_to_v007_task.rake +72 -0
- data/lib/tasks/user_tasks.rake +14 -0
- data/vendor/assets/fonts/font-awesome/fa-brands-400.eot +0 -0
- data/vendor/assets/fonts/font-awesome/fa-brands-400.svg +978 -0
- data/vendor/assets/fonts/font-awesome/fa-brands-400.ttf +0 -0
- data/vendor/assets/fonts/font-awesome/fa-brands-400.woff +0 -0
- data/vendor/assets/fonts/font-awesome/fa-brands-400.woff2 +0 -0
- data/vendor/assets/fonts/font-awesome/fa-regular-400.eot +0 -0
- data/vendor/assets/fonts/font-awesome/fa-regular-400.svg +363 -0
- data/vendor/assets/fonts/font-awesome/fa-regular-400.ttf +0 -0
- data/vendor/assets/fonts/font-awesome/fa-regular-400.woff +0 -0
- data/vendor/assets/fonts/font-awesome/fa-regular-400.woff2 +0 -0
- data/vendor/assets/fonts/font-awesome/fa-solid-900.eot +0 -0
- data/vendor/assets/fonts/font-awesome/fa-solid-900.svg +1410 -0
- data/vendor/assets/fonts/font-awesome/fa-solid-900.ttf +0 -0
- data/vendor/assets/fonts/font-awesome/fa-solid-900.woff +0 -0
- data/vendor/assets/fonts/font-awesome/fa-solid-900.woff2 +0 -0
- data/vendor/assets/javascripts/GSAP/CSSPlugin.min.js +13 -0
- data/vendor/assets/javascripts/GSAP/EasePack.min.js +12 -0
- data/vendor/assets/javascripts/GSAP/ScrollToPlugin.min.js +12 -0
- data/vendor/assets/javascripts/GSAP/TweenLite.min.js +12 -0
- data/vendor/assets/javascripts/select2/i18n/af.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ar.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/az.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/bg.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/bs.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ca.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/cs.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/da.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/de.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/dsb.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/el.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/en.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/es.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/et.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/eu.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/fa.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/fi.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/fr.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/gl.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/he.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/hi.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/hr.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/hsb.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/hu.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/hy.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/id.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/is.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/it.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ja.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/km.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ko.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/lt.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/lv.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/mk.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ms.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/nb.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/nl.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/pl.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ps.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/pt-BR.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/pt.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ro.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/ru.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/sk.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/sl.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/sr-Cyrl.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/sr.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/sv.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/th.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/tr.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/uk.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/vi.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/zh-CN.js +3 -0
- data/vendor/assets/javascripts/select2/i18n/zh-TW.js +3 -0
- data/vendor/assets/javascripts/select2/select2.full.min.js +1 -0
- data/vendor/assets/javascripts/select2/select2.min.js +1 -0
- data/vendor/assets/javascripts/tether.min.js +1 -0
- data/vendor/assets/stylesheets/{bootstrap-select.css → bootstrap/bootstrap-select.css} +0 -0
- data/vendor/assets/stylesheets/font-awesome/_animated.scss +6 -20
- data/vendor/assets/stylesheets/font-awesome/_bordered-pulled.scss +6 -11
- data/vendor/assets/stylesheets/font-awesome/_core.scss +11 -7
- data/vendor/assets/stylesheets/font-awesome/_fixed-width.scss +1 -1
- data/vendor/assets/stylesheets/font-awesome/_icons.scss +785 -787
- data/vendor/assets/stylesheets/font-awesome/_larger.scss +16 -6
- data/vendor/assets/stylesheets/font-awesome/_list.scss +7 -8
- data/vendor/assets/stylesheets/font-awesome/_mixins.scss +17 -20
- data/vendor/assets/stylesheets/font-awesome/_rotated-flipped.scss +9 -6
- data/vendor/assets/stylesheets/font-awesome/_screen-reader.scss +2 -2
- data/vendor/assets/stylesheets/font-awesome/_stacked.scss +19 -8
- data/vendor/assets/stylesheets/font-awesome/_variables.scss +795 -795
- data/vendor/assets/stylesheets/font-awesome/fa-brands.scss +21 -0
- data/vendor/assets/stylesheets/font-awesome/fa-regular.scss +22 -0
- data/vendor/assets/stylesheets/font-awesome/fa-solid.scss +23 -0
- data/vendor/assets/stylesheets/font-awesome/fontawesome.scss +20 -0
- data/vendor/assets/stylesheets/select2/select2.min.css +1 -0
- metadata +278 -125
- data/app/assets/javascripts/binda/components/form_item_asset.js +0 -25
- data/app/assets/stylesheets/binda/application.css +0 -6
- data/app/assets/stylesheets/binda/components/form_body.scss +0 -2
- data/app/assets/stylesheets/binda/components/form_item_asset.scss +0 -20
- data/app/assets/stylesheets/binda/components/form_section.scss +0 -40
- data/app/assets/stylesheets/binda/components/sidebar.scss +0 -131
- data/app/assets/stylesheets/binda/layout/components_index.scss +0 -9
- data/app/assets/stylesheets/binda/layout/dashboard.scss +0 -7
- data/app/assets/stylesheets/binda/layout/users_sign_in.scss +0 -29
- data/app/controllers/binda/bindings_controller.rb +0 -62
- data/app/controllers/concerns/binda/default_helpers.rb +0 -226
- data/app/helpers/binda/bindings_helper.rb +0 -4
- data/app/models/binda/binda.rb +0 -7
- data/app/models/binda/binding.rb +0 -24
- data/app/views/binda/bindings/_form.html.erb +0 -32
- data/app/views/binda/bindings/edit.html.erb +0 -6
- data/app/views/binda/bindings/index.html.erb +0 -31
- data/app/views/binda/bindings/new.html.erb +0 -5
- data/app/views/binda/bindings/show.html.erb +0 -19
- data/app/views/binda/field_groups/index.html.erb +0 -34
- data/app/views/binda/fieldable/_form_item_asset.html.erb +0 -20
- data/app/views/users/sessions/new.html.erb +0 -27
- data/lib/tasks/binda.rake +0 -79
- data/vendor/assets/fonts/font-awesome/FontAwesome.otf +0 -0
- data/vendor/assets/fonts/font-awesome/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/font-awesome/fontawesome-webfont.svg +0 -2671
- data/vendor/assets/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff +0 -0
- data/vendor/assets/fonts/font-awesome/fontawesome-webfont.woff2 +0 -0
- data/vendor/assets/stylesheets/font-awesome/_path.scss +0 -15
- 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
|
-
|
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"
|
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>
|
@@ -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,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
|
-
#
|
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 = '
|
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 = '
|
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 =
|
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
|
-
#
|
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: '/
|
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: :
|
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
|