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
data/Rakefile
CHANGED
@@ -24,21 +24,9 @@ load 'rails/tasks/statistics.rake'
|
|
24
24
|
require 'bundler/gem_tasks'
|
25
25
|
|
26
26
|
|
27
|
-
|
28
|
-
# # I guess this generate test file every time you use `rails g` command
|
29
|
-
# require 'rake/testtask'
|
30
|
-
# Rake::TestTask.new(:test) do |t|
|
31
|
-
# t.libs << 'lib'
|
32
|
-
# t.libs << 'test'
|
33
|
-
# t.pattern = 'test/**/*_test.rb'
|
34
|
-
# t.verbose = false
|
35
|
-
# t.warning = false
|
36
|
-
# end
|
37
|
-
# task default: :test
|
38
|
-
|
39
27
|
# This should ensure creation of spec instead of test (partially true)
|
40
28
|
# https://stackoverflow.com/a/4632188/1498118
|
41
29
|
require 'rspec/core/rake_task'
|
42
30
|
RSpec::Core::RakeTask.new('spec')
|
43
31
|
# If you want to make this the default task
|
44
|
-
task default: :spec
|
32
|
+
task default: :spec
|
@@ -11,8 +11,31 @@
|
|
11
11
|
// about supported directives.
|
12
12
|
//
|
13
13
|
|
14
|
+
// JQuery
|
14
15
|
//= require jquery
|
15
16
|
//= require jquery_ujs
|
16
17
|
//= require jquery-ui/widgets/sortable
|
18
|
+
//= require jquery-ui/widget
|
19
|
+
|
20
|
+
// TinyMCE
|
17
21
|
//= require tinymce-jquery
|
22
|
+
|
23
|
+
// Bootstrap dependency
|
24
|
+
// https://v4-alpha.getbootstrap.com/components/tooltips/
|
25
|
+
// require tether.min
|
26
|
+
|
27
|
+
// Bootstrap
|
28
|
+
//= require bootstrap/bootstrap-sprockets
|
29
|
+
|
30
|
+
// Select2
|
31
|
+
//= require select2/select2.full.min
|
32
|
+
|
33
|
+
// TweenLite
|
34
|
+
// GSAP/CSSPlugin.min
|
35
|
+
// GSAP/EasePack.min
|
36
|
+
// GSAP/ScrollToPlugin.min
|
37
|
+
// GSAP/TweenLite.min
|
38
|
+
|
39
|
+
// Binda scripts
|
18
40
|
//= require binda/dist/binda.bundle.js
|
41
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/**
|
2
|
+
* FIELD GROUP EDITOR
|
3
|
+
*/
|
4
|
+
|
5
|
+
export default function()
|
6
|
+
{
|
7
|
+
$('.field_groups-edit #save').on('click', function(event)
|
8
|
+
{
|
9
|
+
let instanceType = $(this).data('instance-type')
|
10
|
+
let entriesNumber = $(this).data('entries-number')
|
11
|
+
|
12
|
+
// If the current structure have many entries updating the field group
|
13
|
+
// might be a slow operation, therefore it's good practice to inform the user
|
14
|
+
if ( entriesNumber > 500 ) {
|
15
|
+
alert(`You have ${entriesNumber} ${instanceType}. This operation might take some time to complete. To avoid unexpected behaviour don't leave or refresh the page`)
|
16
|
+
}
|
17
|
+
})
|
18
|
+
}
|
@@ -0,0 +1,182 @@
|
|
1
|
+
/**
|
2
|
+
* FILE UPLOAD
|
3
|
+
*
|
4
|
+
* see https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/
|
5
|
+
*
|
6
|
+
*/
|
7
|
+
|
8
|
+
class FileUpload {
|
9
|
+
|
10
|
+
constructor(){
|
11
|
+
this.target = '.fileupload'
|
12
|
+
}
|
13
|
+
|
14
|
+
isSet()
|
15
|
+
{
|
16
|
+
if ( $( this.target ).length > 0 ) { return true }
|
17
|
+
else { return false }
|
18
|
+
}
|
19
|
+
|
20
|
+
setEvents()
|
21
|
+
{
|
22
|
+
let self = this
|
23
|
+
|
24
|
+
$(document).on('click', '.fileupload--remove-image-btn', remove_preview)
|
25
|
+
|
26
|
+
$(document).on('change', `${this.target} input.file`, handle_file)
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
export let _FileUpload = new FileUpload()
|
31
|
+
|
32
|
+
|
33
|
+
/**
|
34
|
+
* HELPER FUNCTIONS
|
35
|
+
*/
|
36
|
+
|
37
|
+
// Reference --> http://blog.teamtreehouse.com/uploading-files-ajax
|
38
|
+
function handle_file(event)
|
39
|
+
{
|
40
|
+
let id = event.target.getAttribute('data-id')
|
41
|
+
let $parent = $('#fileupload-'+id)
|
42
|
+
let $preview = $('#fileupload-'+id+' .fileupload--preview')
|
43
|
+
|
44
|
+
// Get the selected file from the input
|
45
|
+
// This script doesn't consider multiple files upload
|
46
|
+
let file = event.target.files[0]
|
47
|
+
|
48
|
+
// Don't go any further if no file has been selected
|
49
|
+
if ( typeof file === 'undefined' ) { return }
|
50
|
+
|
51
|
+
// Create a new FormData object which will be sent to the server
|
52
|
+
let formData = new FormData()
|
53
|
+
|
54
|
+
// Get data from the input element
|
55
|
+
$parent.find('input').each(function()
|
56
|
+
{
|
57
|
+
if ( this.isSameNode(event.target) )
|
58
|
+
{
|
59
|
+
// Add the file to the request
|
60
|
+
formData.append(this.getAttribute('name'), file, file.name)
|
61
|
+
} else {
|
62
|
+
// Add secondary values to the request
|
63
|
+
formData.append(this.getAttribute('name'), this.getAttribute('value'))
|
64
|
+
}
|
65
|
+
})
|
66
|
+
|
67
|
+
// If it's inside a repeater add repeater parameters
|
68
|
+
let $parent_repeater = $parent.closest('.form-item--repeater-fields')
|
69
|
+
if ( $parent.closest('.form-item--repeater-fields').length > 0 )
|
70
|
+
{
|
71
|
+
$parent_repeater.children('.form-group').find('input').each(function()
|
72
|
+
{
|
73
|
+
formData.append(this.getAttribute('name'), this.getAttribute('value'))
|
74
|
+
})
|
75
|
+
}
|
76
|
+
|
77
|
+
// Is this needed? Apparently it works without it. Is it a security issue?
|
78
|
+
// let token = document.querySelector('meta[name="csrf-token"]').content
|
79
|
+
// formData.append('authenticity_token', token)
|
80
|
+
|
81
|
+
// Display loader
|
82
|
+
$('.popup-warning').removeClass('popup-warning--hidden')
|
83
|
+
|
84
|
+
// Open the connection
|
85
|
+
$.ajax(
|
86
|
+
{
|
87
|
+
url: event.target.getAttribute('data-url'),
|
88
|
+
type: 'PATCH',
|
89
|
+
processData: false, // needed to pass formData with the current format
|
90
|
+
contentType: false, // needed to pass formData with the current format
|
91
|
+
data: formData
|
92
|
+
}).done( function(data)
|
93
|
+
{
|
94
|
+
if ( data.type == 'image' ) { setup_image_preview(data, id) }
|
95
|
+
else if ( data.type == 'video' ) { setup_video_preview(data, id) }
|
96
|
+
else { alert('Something went wrong. No preview has been received.') }
|
97
|
+
|
98
|
+
// Hide loaded
|
99
|
+
$('.popup-warning').addClass('popup-warning--hidden')
|
100
|
+
|
101
|
+
// Display details and buttons
|
102
|
+
$parent.find('.fileupload--details').removeClass('fileupload--details--hidden')
|
103
|
+
$parent.find('.fileupload--remove-image-btn').removeClass('fileupload--remove-image-btn--hidden')
|
104
|
+
}).fail( function()
|
105
|
+
{
|
106
|
+
// Hide loaded
|
107
|
+
$('.popup-warning').addClass('popup-warning--hidden')
|
108
|
+
alert('Something went wrong. Upload process failed.')
|
109
|
+
})
|
110
|
+
}
|
111
|
+
|
112
|
+
function reset_file(event)
|
113
|
+
{
|
114
|
+
let input = event.target
|
115
|
+
|
116
|
+
input.value = ''
|
117
|
+
|
118
|
+
if(!/safari/i.test(navigator.userAgent)){
|
119
|
+
input.type = ''
|
120
|
+
input.type = 'file'
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
function remove_preview(event)
|
125
|
+
{
|
126
|
+
let id = event.target.getAttribute('data-id')
|
127
|
+
let $parent = $('#fileupload-'+id)
|
128
|
+
|
129
|
+
// Reset previews (either image or video)
|
130
|
+
$parent.find('.fileupload--preview').css('background-image','').removeClass('fileupload--preview--uploaded')
|
131
|
+
$parent.find('video source').attr('src', '')
|
132
|
+
|
133
|
+
// Reset buttons to initial state
|
134
|
+
$parent.find('.fileupload--remove-image-btn').addClass('fileupload--remove-image-btn--hidden')
|
135
|
+
$parent.find('.fileupload--details').addClass('fileupload--details--hidden')
|
136
|
+
}
|
137
|
+
|
138
|
+
function setup_image_preview(data, id)
|
139
|
+
{
|
140
|
+
let $parent = $('#fileupload-'+id)
|
141
|
+
let $preview = $('#fileupload-'+id+' .fileupload--preview')
|
142
|
+
|
143
|
+
// Update thumbnail
|
144
|
+
$preview.css('background-image', `url(${data.thumbnailUrl})`)
|
145
|
+
|
146
|
+
// Remove and add class to trigger css animation
|
147
|
+
let uploadedClass = 'fileupload--preview--uploaded'
|
148
|
+
$preview.removeClass(uploadedClass).addClass(uploadedClass)
|
149
|
+
|
150
|
+
// Update details
|
151
|
+
$parent.find('.fileupload--width').text(data.width)
|
152
|
+
$parent.find('.fileupload--height').text(data.height)
|
153
|
+
$parent.find('.fileupload--filesize').text(data.size)
|
154
|
+
$parent.find('.fileupload--filename').text(data.name)
|
155
|
+
}
|
156
|
+
|
157
|
+
function setup_video_preview(data, id)
|
158
|
+
{
|
159
|
+
let $parent = $('#fileupload-'+id)
|
160
|
+
let $preview = $('#fileupload-'+id+' .fileupload--preview')
|
161
|
+
|
162
|
+
$preview.removeClass('fileupload--preview--uploaded')
|
163
|
+
.find('video')
|
164
|
+
.attr('id', 'video-' + id)
|
165
|
+
.find('source')
|
166
|
+
.attr('src', data.url)
|
167
|
+
.attr('type', 'video/' + data.ext)
|
168
|
+
|
169
|
+
// If video source isn't blank load it (consider that a video tag is always present)
|
170
|
+
if ( $preview.find('video source').attr('src').length > 0 )
|
171
|
+
{
|
172
|
+
$preview.find('video').get(0).load()
|
173
|
+
}
|
174
|
+
|
175
|
+
// Remove and add class to trigger css animation
|
176
|
+
let uploadedClass = 'fileupload--preview--uploaded'
|
177
|
+
$preview.removeClass(uploadedClass).addClass(uploadedClass)
|
178
|
+
|
179
|
+
// Update details
|
180
|
+
$parent.find('.fileupload--filesize').text(data.size)
|
181
|
+
$parent.find('.fileupload--filename').text(data.name)
|
182
|
+
}
|
@@ -1,45 +1,78 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
/**
|
2
|
+
* FORM ITEM
|
3
|
+
*/
|
4
4
|
|
5
5
|
import { _FormItemEditor } from './form_item_editor'
|
6
|
+
import { setupSelect2 } from './select2'
|
7
|
+
|
8
|
+
// Component Global Variables
|
9
|
+
let newFormItemId = 1
|
6
10
|
|
7
11
|
class FormItem {
|
8
12
|
|
9
|
-
constructor()
|
10
|
-
{
|
11
|
-
this.target = '.form-item'
|
12
|
-
}
|
13
|
+
constructor(){}
|
13
14
|
|
14
15
|
isSet()
|
15
16
|
{
|
16
|
-
if ( $(
|
17
|
+
if ( $('.form-item').length > 0 ) { return true }
|
17
18
|
else { return false }
|
18
19
|
}
|
19
20
|
|
20
21
|
setEvents()
|
21
22
|
{
|
22
|
-
$(document).on('click',
|
23
|
+
$(document).on('click', '.form-item--add-new', addNewItem )
|
23
24
|
|
24
25
|
$(document).on('click', '.form-item--remove-item-with-js', function( event )
|
25
26
|
{
|
26
27
|
// Stop default behaviour
|
27
28
|
event.preventDefault()
|
28
|
-
$( this ).
|
29
|
+
$( this ).closest('.form-item').remove()
|
30
|
+
})
|
31
|
+
|
32
|
+
$(document).on('click', '.form-item--collapse-btn', function( event )
|
33
|
+
{
|
34
|
+
// This function is temporarely just set for repeaters.
|
35
|
+
// TODO: Need refactoring in order to be available also for generic form items
|
36
|
+
|
37
|
+
// Stop default behaviour
|
38
|
+
event.preventDefault()
|
39
|
+
|
40
|
+
let $collapsable = $(this).closest('.form-item--collapsable')
|
41
|
+
|
42
|
+
if ( $collapsable.hasClass('form-item--collapsed') )
|
43
|
+
{
|
44
|
+
$collapsable.find('.form-item--repeater-fields').each(open)
|
45
|
+
$collapsable.removeClass('form-item--collapsed')
|
46
|
+
}
|
47
|
+
else
|
48
|
+
{
|
49
|
+
$collapsable.find('.form-item--repeater-fields').each(close)
|
50
|
+
$collapsable.addClass('form-item--collapsed')
|
51
|
+
}
|
29
52
|
})
|
30
53
|
|
31
|
-
$(document).on('click', '.form-item--
|
54
|
+
$(document).on('click', '.form-item--toggle-button', function()
|
32
55
|
{
|
33
|
-
var formItemEditor = $( this ).parent('.form-item').children('.form-item--editor')
|
34
56
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
57
|
+
let $formItem = $( this ).closest('.form-item')
|
58
|
+
let $formItemEditor = $formItem.children('.form-item--editor')
|
59
|
+
|
60
|
+
if ( $formItemEditor.get(0).style.maxHeight === '' )
|
61
|
+
{
|
62
|
+
// Update height
|
63
|
+
$formItemEditor.get(0).style.maxHeight = $formItemEditor.get(0).scrollHeight + "px";
|
39
64
|
|
40
|
-
|
41
|
-
|
42
|
-
|
65
|
+
// Add class to trigger animation
|
66
|
+
$formItem.children('.form-item--toggle-button').removeClass('form-item--toggle-button-closed')
|
67
|
+
}
|
68
|
+
else
|
69
|
+
{
|
70
|
+
// Zero height
|
71
|
+
$formItemEditor.get(0).style.maxHeight = null;
|
72
|
+
|
73
|
+
// Add class to trigger animation
|
74
|
+
$formItem.children('.form-item--toggle-button').addClass('form-item--toggle-button-closed')
|
75
|
+
}
|
43
76
|
})
|
44
77
|
}
|
45
78
|
}
|
@@ -51,15 +84,50 @@ export let _FormItem = new FormItem()
|
|
51
84
|
/// COMPONENT HELPER FUNCTIONS
|
52
85
|
///- - - - - - - - - - - - - - - - - - - -
|
53
86
|
|
54
|
-
function
|
87
|
+
// This function could be improved as it generates an issue with
|
88
|
+
// input ids which are duplicated after the entire target has been cloned
|
89
|
+
function addNewItem(event)
|
55
90
|
{
|
56
91
|
// Stop default behaviour
|
57
92
|
event.preventDefault()
|
58
|
-
// Get the child to clone
|
59
|
-
|
93
|
+
// Get the child to clone
|
94
|
+
// (`this` always refers to the second argument of the $(document).on() method, in this case '.form-item--add-new')
|
95
|
+
let id = $( this ).data( 'new-form-item-id' )
|
60
96
|
let $newChild = $( '#' + id )
|
61
97
|
// Clone child and remove id and styles from cloned child
|
62
98
|
$newChild.clone().insertAfter( $newChild )
|
63
|
-
|
99
|
+
// Remove class in order to remove styles, and change id so it's reachable when testing
|
100
|
+
$newChild.removeClass( 'form-item--new' ).attr( 'id', 'new-form-item-'+newFormItemId )
|
101
|
+
|
102
|
+
// // Update all ids to avoid duplication
|
103
|
+
$newChild.find('[id]').each(function(){
|
104
|
+
let oldId = $(this).attr('id')
|
105
|
+
let newId = oldId + '-' + newFormItemId
|
106
|
+
$(this).attr('id', newId )
|
107
|
+
let $forId = $newChild.find('[for='+ oldId +']')
|
108
|
+
if ( $forId.length > 0 ) { $forId.attr('for', newId) }
|
109
|
+
})
|
110
|
+
|
111
|
+
// Update height (max-height) of the new element
|
112
|
+
let $formItemEditor = $('#new-form-item-'+newFormItemId).find('.form-item--editor')
|
113
|
+
|
114
|
+
// override current max-height which is set to 0
|
115
|
+
$formItemEditor.get(0).style.maxHeight = $formItemEditor.get(0).scrollHeight + "px";
|
116
|
+
|
64
117
|
_FormItemEditor.resize()
|
118
|
+
|
119
|
+
// Increment global id variable `newFormItemId` in case needs to be used again
|
120
|
+
newFormItemId++
|
121
|
+
|
122
|
+
setupSelect2( $formItemEditor.find('select') )
|
123
|
+
}
|
124
|
+
|
125
|
+
function close()
|
126
|
+
{
|
127
|
+
this.style.maxHeight = '0px'
|
128
|
+
}
|
129
|
+
|
130
|
+
function open()
|
131
|
+
{
|
132
|
+
this.style.maxHeight = this.scrollHeight + "px";
|
65
133
|
}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
/**
|
2
|
+
* FORM ITEM CHOICE
|
3
|
+
*/
|
4
4
|
|
5
5
|
import { _FormItemEditor } from './form_item_editor'
|
6
6
|
|
@@ -24,7 +24,7 @@ class FormItemChoice {
|
|
24
24
|
{
|
25
25
|
event.preventDefault()
|
26
26
|
// Clone the new choice field
|
27
|
-
var choices = $( this ).
|
27
|
+
var choices = $( this ).closest('.form-item--choices')
|
28
28
|
var newchoice = choices.find('.form-item--new-choice')
|
29
29
|
var clone = newchoice.clone().removeClass('form-item--new-choice').toggle()
|
30
30
|
clone.find('.form-item--toggle-choice').toggle()
|
@@ -38,19 +38,26 @@ class FormItemChoice {
|
|
38
38
|
{
|
39
39
|
event.preventDefault()
|
40
40
|
|
41
|
-
var choice = $( this ).
|
41
|
+
var choice = $( this ).closest('.form-item--choice')
|
42
42
|
var destination = $( this ).attr('href')
|
43
|
-
|
43
|
+
var self = this
|
44
|
+
|
44
45
|
$.ajax({
|
45
46
|
url: destination,
|
46
47
|
type: 'DELETE',
|
47
|
-
success: function() {
|
48
|
+
success: function() {
|
49
|
+
choice.remove()
|
50
|
+
// Update form item editor size
|
51
|
+
_FormItemEditor.resize()
|
52
|
+
}
|
48
53
|
})
|
49
54
|
})
|
50
55
|
$(document).on('click', '.form-item--js-delete-choice', function( event )
|
51
56
|
{
|
52
57
|
event.preventDefault()
|
53
|
-
$( this ).
|
58
|
+
$( this ).closest('.form-item--choice').remove()
|
59
|
+
// Update form item editor size
|
60
|
+
_FormItemEditor.resize()
|
54
61
|
})
|
55
62
|
}
|
56
63
|
}
|