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
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
/**
|
2
|
+
* FORM ITEM EDITOR
|
3
|
+
*/
|
4
4
|
|
5
5
|
class FormItemEditor {
|
6
6
|
|
@@ -26,14 +26,14 @@ class FormItemEditor {
|
|
26
26
|
resize()
|
27
27
|
{
|
28
28
|
$( this.target ).each( function(){
|
29
|
-
// If the form item
|
29
|
+
// If the form item editor is closed don't go any further
|
30
30
|
if ( $(this).height() === 0 ) return
|
31
31
|
// otherwise update the max-height which is needed for the CSS transition
|
32
32
|
// NOTE you need to remove the max-height (inside 'style' attribute) to get the real height
|
33
|
-
$(this).
|
33
|
+
$(this).get(0).style.height = 'auto'
|
34
|
+
$(this).get(0).style.maxHeight = $(this).get(0).scrollHeight + "px";
|
34
35
|
})
|
35
36
|
}
|
36
|
-
|
37
37
|
}
|
38
38
|
|
39
39
|
export let _FormItemEditor = new FormItemEditor()
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* FORM ITEM IMAGE
|
3
|
+
*/
|
4
|
+
|
5
|
+
class FormItemImage
|
6
|
+
{
|
7
|
+
constructor()
|
8
|
+
{
|
9
|
+
this.target = '.form-item--image--uploader'
|
10
|
+
}
|
11
|
+
|
12
|
+
isSet()
|
13
|
+
{
|
14
|
+
if ( $( this.target ).length > 0 ) { return true }
|
15
|
+
else { return false }
|
16
|
+
}
|
17
|
+
|
18
|
+
setEvents()
|
19
|
+
{
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
export var _FormItemImage = new FormItemImage()
|
@@ -1,31 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
/**
|
2
|
+
* FORM ITEM REPEATER
|
3
|
+
*/
|
4
4
|
|
5
5
|
import { _FormItemEditor } from './form_item_editor'
|
6
|
+
import { setupSelect2 } from './select2'
|
6
7
|
|
7
8
|
class FormItemRepeater {
|
8
9
|
|
9
|
-
constructor()
|
10
|
-
{
|
11
|
-
this.target = '.form-item--repeater-section'
|
12
|
-
}
|
10
|
+
constructor(){}
|
13
11
|
|
14
12
|
isSet()
|
15
13
|
{
|
16
|
-
if ( $(
|
14
|
+
if ( $('.form-item--repeater-section').length > 0 ) { return true }
|
17
15
|
else { return false }
|
18
16
|
}
|
19
17
|
|
20
18
|
setEvents()
|
21
19
|
{
|
22
|
-
$(document).on('click',
|
20
|
+
$(document).on('click', '.form-item--repeater-section--add-new', function(event){ addNewItem(this, event)} )
|
23
21
|
|
24
22
|
$(document).on('click', '.form-item--remove-item-with-js', function( event )
|
25
23
|
{
|
26
24
|
// Stop default behaviour
|
27
25
|
event.preventDefault()
|
28
|
-
$( this ).parent(
|
26
|
+
$( this ).parent('.form-item--repeater-section').remove()
|
29
27
|
_FormItemEditor.resize()
|
30
28
|
})
|
31
29
|
|
@@ -34,13 +32,24 @@ class FormItemRepeater {
|
|
34
32
|
// Stop default behaviour
|
35
33
|
event.preventDefault()
|
36
34
|
|
35
|
+
// if ( !confirm($(this).data('confirm')) ) return
|
36
|
+
|
37
|
+
let record_id = $( this ).data('id')
|
38
|
+
let target = $('#repeater_' + record_id).get(0)
|
39
|
+
// As max-height isn't set you need to set it manually before changing it,
|
40
|
+
// otherwise the animation doesn't get triggered
|
41
|
+
target.style.maxHeight = target.scrollHeight + 'px'
|
42
|
+
// Change max-height after 50ms to trigger css animation
|
43
|
+
setTimeout( function(){ target.style.maxHeight = 0 + 'px' }, 50)
|
44
|
+
|
37
45
|
$.ajax({
|
38
46
|
url: $( this ).attr('href'),
|
39
|
-
data: { id:
|
47
|
+
data: { id: record_id, isAjax: true },
|
40
48
|
method: "DELETE"
|
41
49
|
}).done( ()=>{
|
42
|
-
|
43
|
-
|
50
|
+
// Make sure the animation completes before removing the item (it should last 600ms + 50ms)
|
51
|
+
setTimeout( function(){ $(target).remove() }, 700)
|
52
|
+
// _FormItemEditor.resize()
|
44
53
|
})
|
45
54
|
})
|
46
55
|
}
|
@@ -49,25 +58,63 @@ class FormItemRepeater {
|
|
49
58
|
export let _FormItemRepeater = new FormItemRepeater()
|
50
59
|
|
51
60
|
|
52
|
-
|
53
|
-
|
54
|
-
|
61
|
+
/**
|
62
|
+
* COMPONENT HELPER FUNCTIONS
|
63
|
+
*
|
64
|
+
* @param {string} target The target
|
65
|
+
* @param {object} event The event
|
66
|
+
*/
|
55
67
|
|
56
|
-
function addNewItem( event )
|
68
|
+
function addNewItem( target, event )
|
57
69
|
{
|
58
70
|
// Stop default behaviour
|
59
71
|
event.preventDefault()
|
60
72
|
// Get the child to clone
|
61
|
-
let id = $(
|
73
|
+
let id = $( target ).data( 'id' )
|
62
74
|
let $list = $('#form-item--repeater-setting-' + id )
|
63
|
-
let url = $(
|
75
|
+
let url = $( target ).data( 'url' )
|
64
76
|
$.post( url, { repeater_setting_id: id }, function( data )
|
65
77
|
{
|
78
|
+
// Get repaeter code from Rails
|
79
|
+
// Due to the Rails way of creating nested forms it's necessary to
|
80
|
+
// create the nested item inside a different new form, then get just
|
81
|
+
// the code contained between the two SPLIT comments
|
66
82
|
let parts = data.split('<!-- SPLIT -->')
|
67
83
|
let newRepeater = parts[1]
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
84
|
+
|
85
|
+
// Append the item
|
86
|
+
$list.prepend( newRepeater )
|
87
|
+
let new_repeater_item = $list.find('.form-item--repeater').get(0)
|
88
|
+
|
89
|
+
// Prepare animation
|
90
|
+
new_repeater_item.style.maxHeight = 0
|
91
|
+
|
92
|
+
// Group fields if sotrable is enabled
|
93
|
+
if ( $list.hasClass('sortable--enabled') )
|
94
|
+
{
|
95
|
+
$(new_repeater_item).find('.form-item--repeater-fields').each(function()
|
96
|
+
{
|
97
|
+
this.style.maxHeight = 0 + 'px'
|
98
|
+
})
|
99
|
+
}
|
100
|
+
|
101
|
+
// Setup TinyMCE for the newly created item
|
102
|
+
var textarea_editor_id = $list.find('textarea').last('textarea').attr('id')
|
103
|
+
tinyMCE.EditorManager.execCommand('mceAddEditor',true, textarea_editor_id);
|
104
|
+
|
105
|
+
// Resize the editor (is it needed with the new configuration?)
|
106
|
+
// _FormItemEditor.resize()
|
107
|
+
|
108
|
+
// Update select input for Select2 plugin
|
109
|
+
setupSelect2( $list.find('select') )
|
110
|
+
|
111
|
+
// Refresh Sortable to update the added item with Sortable features
|
112
|
+
$list.sortable('refresh')
|
113
|
+
|
114
|
+
// Run animation 50ms after previous style declaration (see above) otherwise animation doesn't get triggered
|
115
|
+
setTimeout( function()
|
116
|
+
{
|
117
|
+
new_repeater_item.style.maxHeight = new_repeater_item.scrollHeight + 'px'
|
118
|
+
}, 50)
|
72
119
|
})
|
73
120
|
}
|
@@ -0,0 +1,193 @@
|
|
1
|
+
class Shader {
|
2
|
+
constructor(){}
|
3
|
+
|
4
|
+
isSet()
|
5
|
+
{
|
6
|
+
if ( $('#background-shader').length > 0 ) { return true }
|
7
|
+
else { return false }
|
8
|
+
}
|
9
|
+
|
10
|
+
// SETUP SHADER
|
11
|
+
setup () {
|
12
|
+
|
13
|
+
let Container = PIXI.Container,
|
14
|
+
autoDetectRenderer = PIXI.autoDetectRenderer,
|
15
|
+
loader = PIXI.loader,
|
16
|
+
resources = PIXI.loader.resources,
|
17
|
+
Sprite = PIXI.Sprite
|
18
|
+
|
19
|
+
// Create a container object called the `stage`
|
20
|
+
this.stage = new Container()
|
21
|
+
|
22
|
+
// Create 'renderer'
|
23
|
+
this.renderer = PIXI.autoDetectRenderer( window.innerWidth, window.innerHeight )
|
24
|
+
|
25
|
+
// //Add the canvas to the HTML document
|
26
|
+
|
27
|
+
document.getElementById('background-shader').appendChild(this.renderer.view)
|
28
|
+
|
29
|
+
|
30
|
+
this.renderer.backgroundColor = 0xFF00FF
|
31
|
+
|
32
|
+
// canvas full window
|
33
|
+
this.renderer.view.style.position = "fixed"
|
34
|
+
this.renderer.view.style.display = "block"
|
35
|
+
|
36
|
+
let fragmentShader = document.getElementById("fragmentShader").innerHTML
|
37
|
+
|
38
|
+
let currentTime = Math.sin( Date.now() ) + 0.5
|
39
|
+
|
40
|
+
this.uniforms = {
|
41
|
+
uTime : { type: '1f', value: 0.0 },
|
42
|
+
uCurrentTime : { type: '1f', value: currentTime },
|
43
|
+
uMouse : { type: '2f', value: [ window.innerWidth, window.innerHeight ] },
|
44
|
+
uWindowSize : { type: '2f', value: [ window.innerWidth, window.innerHeight ] }
|
45
|
+
}
|
46
|
+
|
47
|
+
this.customShader = new PIXI.AbstractFilter(null, fragmentShader, this.uniforms)
|
48
|
+
this.drawRectagle()
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
// DRAW RECTANGLE
|
53
|
+
drawRectagle() {
|
54
|
+
|
55
|
+
this.rectangle = new PIXI.Graphics()
|
56
|
+
|
57
|
+
// Set the default background color wo if browser doesn't support the filter we still see the primary color
|
58
|
+
let colorWithHash = '#FF00FF'
|
59
|
+
const colorWith0x = '0x' + colorWithHash.slice( 1, 7 )
|
60
|
+
this.rectangle.beginFill( colorWith0x )
|
61
|
+
|
62
|
+
// Create the background rectanlge
|
63
|
+
this.rectangle.drawRect( 0, 0, window.innerWidth, window.innerHeight )
|
64
|
+
this.rectangle.endFill()
|
65
|
+
|
66
|
+
// Setup the filter (shader)
|
67
|
+
this.rectangle.filters = [ this.customShader ]
|
68
|
+
|
69
|
+
// Add background to stage
|
70
|
+
this.stage.addChild( this.rectangle )
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
// START ANIMATION
|
75
|
+
start() { animate() }
|
76
|
+
|
77
|
+
|
78
|
+
// MOUSE UPDATE
|
79
|
+
mouseUpdate( event ) {
|
80
|
+
|
81
|
+
// If uniforms haven't been set yet don't do anything and exit
|
82
|
+
if ( typeof this.uniforms === 'undefined' ) return
|
83
|
+
|
84
|
+
// udpate mouse coordinates for the shader
|
85
|
+
this.customShader.uniforms.uMouse = [ event.pageX, event.pageY ]
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
// RESIZE
|
90
|
+
resize() {
|
91
|
+
|
92
|
+
// let scale = scaleToWindow( this.renderer.view )
|
93
|
+
let prevWidth = this.renderer.view.style.width
|
94
|
+
let prevHeight = this.renderer.view.style.height
|
95
|
+
this.renderer.view.style.width = window.innerWidth + "px"
|
96
|
+
this.renderer.view.style.height = window.innerHeight + "px"
|
97
|
+
this.customShader.uniforms.uWindowSize = [ window.innerWidth, window.innerHeight ]
|
98
|
+
|
99
|
+
// Plese check this out ↴↴↴
|
100
|
+
// this.rectangle.scale.x = window.innerWidth / prevWidth
|
101
|
+
// this.rectangle.scale.y = window.innerHeight / prevHeight
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
export let _Shader = new Shader()
|
107
|
+
|
108
|
+
|
109
|
+
// ANIMATE
|
110
|
+
// -------
|
111
|
+
function animate() {
|
112
|
+
|
113
|
+
// start the timer for the next animation loop
|
114
|
+
requestAnimationFrame( animate )
|
115
|
+
_Shader.customShader.uniforms.uTime += 0.01
|
116
|
+
// this is the main render call that makes pixi draw your container and its children.
|
117
|
+
_Shader.renderer.render( _Shader.stage )
|
118
|
+
}
|
119
|
+
|
120
|
+
// CONVERT HEX TO RGB COLORS
|
121
|
+
// -------------------------
|
122
|
+
function hexToShaderRgb( hex ) {
|
123
|
+
|
124
|
+
// Precision of the float number
|
125
|
+
var precision = 100
|
126
|
+
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
|
127
|
+
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i
|
128
|
+
hex = hex.replace(shorthandRegex, function(m, r, g, b) {
|
129
|
+
return r + r + g + g + b + b
|
130
|
+
})
|
131
|
+
|
132
|
+
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
|
133
|
+
return result ? {
|
134
|
+
// Get a number between 0.00 and 1.00
|
135
|
+
r: Math.round( parseInt(result[1], 16) * precision / 255 ) / precision,
|
136
|
+
g: Math.round( parseInt(result[2], 16) * precision / 255 ) / precision,
|
137
|
+
b: Math.round( parseInt(result[3], 16) * precision / 255 ) / precision
|
138
|
+
} : null;
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
// REQUEST ANIMATION POLYFILL
|
143
|
+
// --------------------------
|
144
|
+
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
145
|
+
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
146
|
+
// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
|
147
|
+
// MIT license
|
148
|
+
(function() {
|
149
|
+
var lastTime = 0;
|
150
|
+
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
151
|
+
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
152
|
+
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
153
|
+
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
|
154
|
+
}
|
155
|
+
|
156
|
+
if (!window.requestAnimationFrame)
|
157
|
+
window.requestAnimationFrame = function(callback, element) {
|
158
|
+
var currTime = new Date().getTime();
|
159
|
+
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
160
|
+
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
|
161
|
+
timeToCall);
|
162
|
+
lastTime = currTime + timeToCall;
|
163
|
+
return id;
|
164
|
+
};
|
165
|
+
|
166
|
+
if (!window.cancelAnimationFrame)
|
167
|
+
window.cancelAnimationFrame = function(id) {
|
168
|
+
clearTimeout(id);
|
169
|
+
};
|
170
|
+
}());
|
171
|
+
|
172
|
+
|
173
|
+
// Mozilla MDN optimized resize
|
174
|
+
// https://developer.mozilla.org/en-US/docs/Web/Events/resize
|
175
|
+
(function() {
|
176
|
+
var throttle = function(type, name, obj) {
|
177
|
+
obj = obj || window;
|
178
|
+
var running = false;
|
179
|
+
var func = function() {
|
180
|
+
if (running) { return; }
|
181
|
+
running = true;
|
182
|
+
requestAnimationFrame(function() {
|
183
|
+
obj.dispatchEvent(new CustomEvent(name));
|
184
|
+
running = false;
|
185
|
+
});
|
186
|
+
};
|
187
|
+
obj.addEventListener(type, func);
|
188
|
+
};
|
189
|
+
|
190
|
+
/* init - you can init any event */
|
191
|
+
throttle("resize", "optimizedResize");
|
192
|
+
})();
|
193
|
+
|
@@ -0,0 +1,116 @@
|
|
1
|
+
/**
|
2
|
+
* LOGIN FORM
|
3
|
+
*
|
4
|
+
* https://tympanus.net/Development/MinimalForm/
|
5
|
+
* https://github.com/codrops/MinimalForm/blob/master/js/stepsForm.js
|
6
|
+
*/
|
7
|
+
|
8
|
+
class LoginForm {
|
9
|
+
|
10
|
+
constructor()
|
11
|
+
{
|
12
|
+
this.current = 0
|
13
|
+
this.isFilled = false
|
14
|
+
}
|
15
|
+
|
16
|
+
isSet()
|
17
|
+
{
|
18
|
+
if ( $('.login--form').length > 0 ) { return true }
|
19
|
+
else { return false }
|
20
|
+
}
|
21
|
+
|
22
|
+
setEvents ()
|
23
|
+
{
|
24
|
+
this.$form = $('.login--form')
|
25
|
+
this.$questions = $('ol.login--questions > li')
|
26
|
+
this.questionsCount = this.$questions.length
|
27
|
+
this.$nextButton = $('button.login--next')
|
28
|
+
|
29
|
+
// Mark the first question as the current one
|
30
|
+
this.$questions.first().addClass('login--current')
|
31
|
+
|
32
|
+
//disable form autocomplete
|
33
|
+
this.$form.attr('autocomplete', 'off')
|
34
|
+
|
35
|
+
let self = this
|
36
|
+
|
37
|
+
|
38
|
+
// first input
|
39
|
+
let firstInput = this.$questions.get(this.current).querySelector( 'input, textarea, select' )
|
40
|
+
|
41
|
+
// focus
|
42
|
+
let onFocusStart = function()
|
43
|
+
{
|
44
|
+
firstInput.removeEventListener( 'focus', onFocusStart )
|
45
|
+
self.$nextButton.addClass('login--show')
|
46
|
+
}
|
47
|
+
// show the next question control first time the input gets focused
|
48
|
+
firstInput.addEventListener('focus', onFocusStart )
|
49
|
+
|
50
|
+
// show next question
|
51
|
+
this.$nextButton.on('click', function( event )
|
52
|
+
{
|
53
|
+
event.preventDefault()
|
54
|
+
self._nextQuestion()
|
55
|
+
} )
|
56
|
+
|
57
|
+
// pressing enter will jump to next question
|
58
|
+
this.$form.on('keydown', function( event )
|
59
|
+
{
|
60
|
+
let keyCode = event.keyCode || event.which
|
61
|
+
// enter
|
62
|
+
if( keyCode === 13 )
|
63
|
+
{
|
64
|
+
event.preventDefault()
|
65
|
+
self._nextQuestion()
|
66
|
+
}
|
67
|
+
})
|
68
|
+
}
|
69
|
+
|
70
|
+
_nextQuestion()
|
71
|
+
{
|
72
|
+
// check if form is filled
|
73
|
+
if( this.current === this.questionsCount - 1 )
|
74
|
+
{
|
75
|
+
this.isFilled = true
|
76
|
+
}
|
77
|
+
|
78
|
+
// current question
|
79
|
+
let currentQuestion = this.$questions.get(this.current)
|
80
|
+
|
81
|
+
// increment current question iterator
|
82
|
+
++this.current
|
83
|
+
|
84
|
+
if( !this.isFilled )
|
85
|
+
{
|
86
|
+
// add class "show-next" to form element (start animations)
|
87
|
+
this.$form.addClass('login--show-next')
|
88
|
+
|
89
|
+
// remove class "current" from current question and add it to the next one
|
90
|
+
// current question
|
91
|
+
var nextQuestion = this.$questions.get(this.current)
|
92
|
+
$(currentQuestion).removeClass('login--current')
|
93
|
+
$(nextQuestion).addClass('login--current')
|
94
|
+
}
|
95
|
+
|
96
|
+
// after animation ends, remove class "show-next" from form element and change current question placeholder
|
97
|
+
let self = this
|
98
|
+
let onEndTransition = function()
|
99
|
+
{
|
100
|
+
if( self.isFilled )
|
101
|
+
{
|
102
|
+
self.$form.submit()
|
103
|
+
}
|
104
|
+
else
|
105
|
+
{
|
106
|
+
self.$form.removeClass('login--show-next')
|
107
|
+
// force the focus on the next input
|
108
|
+
nextQuestion.querySelector( 'input, textarea, select' ).focus()
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
setTimeout( onEndTransition, 400 ) // Wait for CSS transition to complete
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
export let _LoginForm = new LoginForm()
|