binda 0.1.5 → 0.1.6
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 +42 -26
- data/Rakefile +4 -0
- data/app/assets/javascripts/binda/application.js +3 -0
- data/app/assets/javascripts/binda/components/field_setting_choices.js +5 -5
- data/app/assets/javascripts/binda/components/fileupload.js +1 -1
- data/app/assets/javascripts/binda/components/form_item_collapsable.js +245 -0
- data/app/assets/javascripts/binda/components/form_item_image.js +1 -1
- data/app/assets/javascripts/binda/components/login-shader.js +1 -1
- data/app/assets/javascripts/binda/components/login_form.js +1 -1
- data/app/assets/javascripts/binda/components/sortable.js +21 -30
- data/app/assets/javascripts/binda/dist/binda.bundle.js +299 -377
- data/app/assets/javascripts/binda/index.js +9 -17
- data/app/assets/stylesheets/binda/components/field_setting_choices.scss +5 -3
- data/app/assets/stylesheets/binda/components/form_item.scss +23 -70
- data/app/assets/stylesheets/binda/components/standard-form.scss +56 -1
- data/app/assets/stylesheets/binda/settings/tiny_mce_overrides.scss +8 -0
- data/app/controllers/binda/application_controller.rb +6 -0
- data/app/controllers/binda/boards_controller.rb +18 -12
- data/app/controllers/binda/components_controller.rb +21 -16
- data/app/controllers/binda/field_groups_controller.rb +57 -16
- data/app/controllers/binda/field_settings_controller.rb +14 -2
- data/app/controllers/binda/repeaters_controller.rb +2 -2
- data/app/controllers/binda/structures_controller.rb +32 -16
- data/app/controllers/concerns/binda/fieldable_helpers.rb +2 -2
- data/app/helpers/binda/components_helper.rb +16 -4
- data/app/helpers/binda/field_groups_helper.rb +4 -1
- data/app/models/binda/asset.rb +1 -3
- data/app/models/binda/component.rb +17 -10
- data/app/models/binda/date.rb +2 -6
- data/app/models/binda/field_group.rb +7 -5
- data/app/models/binda/field_setting.rb +69 -8
- data/app/models/binda/gallery.rb +2 -3
- data/app/models/binda/image.rb +7 -1
- data/app/models/binda/relation.rb +2 -5
- data/app/models/binda/repeater.rb +10 -14
- data/app/models/binda/selection.rb +3 -3
- data/app/models/binda/structure.rb +9 -5
- data/app/models/binda/text.rb +2 -6
- data/app/models/binda/user.rb +10 -0
- data/app/models/concerns/binda/field_uniqueness.rb +31 -0
- data/app/models/concerns/binda/fieldable_association_helpers.rb +31 -11
- data/app/models/concerns/binda/fieldable_associations.rb +2 -3
- data/app/models/concerns/binda/fields.rb +21 -0
- data/app/views/binda/boards/edit.html.erb +2 -1
- data/app/views/binda/components/edit.html.erb +2 -1
- data/app/views/binda/field_groups/_form_body.html.erb +4 -42
- data/app/views/binda/field_groups/_form_header.html.erb +11 -0
- data/app/views/binda/field_groups/_form_item.html.erb +4 -6
- data/app/views/binda/field_groups/_form_new_item.html.erb +8 -0
- data/app/views/binda/field_groups/_form_section.html.erb +17 -27
- data/app/views/binda/field_groups/_form_section_repeater.html.erb +17 -18
- data/app/views/binda/field_groups/_form_sidebar.html.erb +13 -0
- data/app/views/binda/field_groups/form_item/_form_item_editor.html.erb +9 -5
- data/app/views/binda/field_groups/form_item/{_form_item_persisted_editor.html.erb → _form_item_editor_existing_item.html.erb} +1 -4
- data/app/views/binda/field_groups/form_item/_form_item_editor_new_item.html.erb +3 -0
- data/app/views/binda/field_groups/form_item/_form_item_header.html.erb +23 -24
- data/app/views/binda/field_groups/form_section/_form_section_header.html.erb +45 -0
- data/app/views/binda/field_groups/form_section/_form_section_list.html.erb +9 -0
- data/app/views/binda/fieldable/_form_body.html.erb +6 -1
- data/app/views/binda/fieldable/_form_item_date.html.erb +1 -1
- data/app/views/binda/fieldable/_form_item_image.html.erb +1 -1
- data/app/views/binda/fieldable/_form_item_new_repeater.html.erb +7 -21
- data/app/views/binda/fieldable/_form_item_relation.html.erb +7 -7
- data/app/views/binda/fieldable/_form_item_repeater.html.erb +9 -99
- data/app/views/binda/fieldable/_form_item_selections.html.erb +1 -1
- data/app/views/binda/fieldable/_form_item_string.html.erb +5 -12
- data/app/views/binda/fieldable/_form_item_text.html.erb +5 -13
- data/app/views/binda/fieldable/_form_item_video.html.erb +1 -1
- data/app/views/binda/fieldable/_form_section.html.erb +11 -10
- data/app/views/binda/fieldable/_form_section_repeater.html.erb +2 -3
- data/app/views/binda/fieldable/form_item_repeater/_form_item_repeater_header.html.erb +32 -0
- data/app/views/binda/fieldable/form_item_repeater/_form_item_repeater_list.html.erb +19 -0
- data/app/views/binda/fieldable/form_item_repeater/_form_item_repeater_list_item.html.erb +42 -0
- data/app/views/binda/structures/_form_field_group_item.html.erb +5 -0
- data/app/views/binda/structures/_form_new_field_group_item.html.erb +8 -0
- data/app/views/binda/structures/_form_section.html.erb +16 -78
- data/app/views/binda/structures/_form_sidebar.html.erb +9 -8
- data/app/views/binda/structures/form_field_group_item/_form_field_group_item_editor.html.erb +18 -0
- data/app/views/binda/structures/form_field_group_item/_form_field_group_item_field_setting_form.html.erb +12 -0
- data/app/views/binda/structures/form_field_group_item/_form_field_group_item_field_settings.html.erb +18 -0
- data/app/views/binda/structures/form_field_group_item/_form_field_group_item_header.html.erb +29 -0
- data/app/views/binda/structures/form_section/_form_section_header.html.erb +26 -0
- data/app/views/binda/structures/form_section/_form_section_list.html.erb +8 -0
- data/config/initializers/simple_form__fileupload.rb +3 -4
- data/config/locales/en.yml +9 -4
- data/config/routes.rb +4 -0
- data/lib/binda/version.rb +1 -1
- data/lib/generators/binda/install/install_generator.rb +17 -6
- data/lib/generators/binda/maintenance/maintenance_generator.rb +12 -8
- data/lib/generators/binda/setup/setup_generator.rb +23 -27
- data/lib/tasks/create_missing_field_instances_task.rake +10 -0
- data/lib/tasks/remove_orphan_fields_task.rake +1 -7
- data/lib/tasks/user_tasks.rake +1 -7
- data/vendor/assets/javascripts/lodash.js +17097 -0
- metadata +39 -7
- data/app/assets/javascripts/binda/components/form_item.js +0 -113
- data/app/assets/javascripts/binda/components/form_item_editor.js +0 -39
- data/app/assets/javascripts/binda/components/form_item_repeater.js +0 -127
- data/app/views/binda/field_groups/form_item/_form_item_new_editor.html.erb +0 -8
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: binda
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alessandro Barbieri
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-02-
|
|
11
|
+
date: 2018-02-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -592,6 +592,20 @@ dependencies:
|
|
|
592
592
|
- - "~>"
|
|
593
593
|
- !ruby/object:Gem::Version
|
|
594
594
|
version: '0.52'
|
|
595
|
+
- !ruby/object:Gem::Dependency
|
|
596
|
+
name: generator_spec
|
|
597
|
+
requirement: !ruby/object:Gem::Requirement
|
|
598
|
+
requirements:
|
|
599
|
+
- - "~>"
|
|
600
|
+
- !ruby/object:Gem::Version
|
|
601
|
+
version: 0.9.4
|
|
602
|
+
type: :development
|
|
603
|
+
prerelease: false
|
|
604
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
605
|
+
requirements:
|
|
606
|
+
- - "~>"
|
|
607
|
+
- !ruby/object:Gem::Version
|
|
608
|
+
version: 0.9.4
|
|
595
609
|
description: A modular CMS for Ruby on Rails 5 with an intuitive out-of-the-box interface
|
|
596
610
|
to manage and customize components. Use Binda if you want to speed up your setup
|
|
597
611
|
process and concentrate directly on what your application is about. Please read
|
|
@@ -611,10 +625,8 @@ files:
|
|
|
611
625
|
- app/assets/javascripts/binda/components/field_group_editor.js
|
|
612
626
|
- app/assets/javascripts/binda/components/field_setting_choices.js
|
|
613
627
|
- app/assets/javascripts/binda/components/fileupload.js
|
|
614
|
-
- app/assets/javascripts/binda/components/
|
|
615
|
-
- app/assets/javascripts/binda/components/form_item_editor.js
|
|
628
|
+
- app/assets/javascripts/binda/components/form_item_collapsable.js
|
|
616
629
|
- app/assets/javascripts/binda/components/form_item_image.js
|
|
617
|
-
- app/assets/javascripts/binda/components/form_item_repeater.js
|
|
618
630
|
- app/assets/javascripts/binda/components/login-shader.js
|
|
619
631
|
- app/assets/javascripts/binda/components/login_form.js
|
|
620
632
|
- app/assets/javascripts/binda/components/radio-toggle.js
|
|
@@ -716,8 +728,10 @@ files:
|
|
|
716
728
|
- app/models/binda/video.rb
|
|
717
729
|
- app/models/concerns/binda/default_helpers.rb
|
|
718
730
|
- app/models/concerns/binda/deprecations.rb
|
|
731
|
+
- app/models/concerns/binda/field_uniqueness.rb
|
|
719
732
|
- app/models/concerns/binda/fieldable_association_helpers.rb
|
|
720
733
|
- app/models/concerns/binda/fieldable_associations.rb
|
|
734
|
+
- app/models/concerns/binda/fields.rb
|
|
721
735
|
- app/uploaders/binda/image/image_uploader.rb
|
|
722
736
|
- app/uploaders/binda/video/video_uploader.rb
|
|
723
737
|
- app/views/binda/assets/_form.html.erb
|
|
@@ -735,20 +749,25 @@ files:
|
|
|
735
749
|
- app/views/binda/components/new.html.erb
|
|
736
750
|
- app/views/binda/components/sort_index.html.erb
|
|
737
751
|
- app/views/binda/field_groups/_form_body.html.erb
|
|
752
|
+
- app/views/binda/field_groups/_form_header.html.erb
|
|
738
753
|
- app/views/binda/field_groups/_form_item.html.erb
|
|
754
|
+
- app/views/binda/field_groups/_form_new_item.html.erb
|
|
739
755
|
- app/views/binda/field_groups/_form_section.html.erb
|
|
740
756
|
- app/views/binda/field_groups/_form_section_repeater.html.erb
|
|
757
|
+
- app/views/binda/field_groups/_form_sidebar.html.erb
|
|
741
758
|
- app/views/binda/field_groups/edit.html.erb
|
|
742
759
|
- app/views/binda/field_groups/form_item/_form_item_choice_editor.html.erb
|
|
743
760
|
- app/views/binda/field_groups/form_item/_form_item_editor.html.erb
|
|
761
|
+
- app/views/binda/field_groups/form_item/_form_item_editor_existing_item.html.erb
|
|
762
|
+
- app/views/binda/field_groups/form_item/_form_item_editor_new_item.html.erb
|
|
744
763
|
- app/views/binda/field_groups/form_item/_form_item_header.html.erb
|
|
745
|
-
- app/views/binda/field_groups/form_item/_form_item_new_editor.html.erb
|
|
746
|
-
- app/views/binda/field_groups/form_item/_form_item_persisted_editor.html.erb
|
|
747
764
|
- app/views/binda/field_groups/form_item/form_item_choice/_form_item_allow_null_choice.html.erb
|
|
748
765
|
- app/views/binda/field_groups/form_item/form_item_choice/_form_item_choice_header.html.erb
|
|
749
766
|
- app/views/binda/field_groups/form_item/form_item_choice/_form_item_default_choice.html.erb
|
|
750
767
|
- app/views/binda/field_groups/form_item/form_item_choice/_form_item_new_choice.html.erb
|
|
751
768
|
- app/views/binda/field_groups/form_item/form_item_choice/_form_item_persisted_choices.html.erb
|
|
769
|
+
- app/views/binda/field_groups/form_section/_form_section_header.html.erb
|
|
770
|
+
- app/views/binda/field_groups/form_section/_form_section_list.html.erb
|
|
752
771
|
- app/views/binda/field_groups/new.html.erb
|
|
753
772
|
- app/views/binda/field_settings/_form_body.html.erb
|
|
754
773
|
- app/views/binda/field_settings/edit.html.erb
|
|
@@ -768,6 +787,9 @@ files:
|
|
|
768
787
|
- app/views/binda/fieldable/_form_section.html.erb
|
|
769
788
|
- app/views/binda/fieldable/_form_section_repeater.html.erb
|
|
770
789
|
- app/views/binda/fieldable/_form_sidebar.html.erb
|
|
790
|
+
- app/views/binda/fieldable/form_item_repeater/_form_item_repeater_header.html.erb
|
|
791
|
+
- app/views/binda/fieldable/form_item_repeater/_form_item_repeater_list.html.erb
|
|
792
|
+
- app/views/binda/fieldable/form_item_repeater/_form_item_repeater_list_item.html.erb
|
|
771
793
|
- app/views/binda/fieldable/form_item_selections/_form_item_checkbox.html.erb
|
|
772
794
|
- app/views/binda/fieldable/form_item_selections/_form_item_radio.html.erb
|
|
773
795
|
- app/views/binda/fieldable/form_item_selections/_form_item_selection.html.erb
|
|
@@ -784,9 +806,17 @@ files:
|
|
|
784
806
|
- app/views/binda/manage/users/new.html.erb
|
|
785
807
|
- app/views/binda/manage/users/show.json.jbuilder
|
|
786
808
|
- app/views/binda/structures/_form_body.html.erb
|
|
809
|
+
- app/views/binda/structures/_form_field_group_item.html.erb
|
|
810
|
+
- app/views/binda/structures/_form_new_field_group_item.html.erb
|
|
787
811
|
- app/views/binda/structures/_form_section.html.erb
|
|
788
812
|
- app/views/binda/structures/_form_sidebar.html.erb
|
|
789
813
|
- app/views/binda/structures/edit.html.erb
|
|
814
|
+
- app/views/binda/structures/form_field_group_item/_form_field_group_item_editor.html.erb
|
|
815
|
+
- app/views/binda/structures/form_field_group_item/_form_field_group_item_field_setting_form.html.erb
|
|
816
|
+
- app/views/binda/structures/form_field_group_item/_form_field_group_item_field_settings.html.erb
|
|
817
|
+
- app/views/binda/structures/form_field_group_item/_form_field_group_item_header.html.erb
|
|
818
|
+
- app/views/binda/structures/form_section/_form_section_header.html.erb
|
|
819
|
+
- app/views/binda/structures/form_section/_form_section_list.html.erb
|
|
790
820
|
- app/views/binda/structures/index.html.erb
|
|
791
821
|
- app/views/binda/structures/new.html.erb
|
|
792
822
|
- app/views/binda/structures/sort_index.html.erb
|
|
@@ -852,6 +882,7 @@ files:
|
|
|
852
882
|
- lib/tasks/add_default_choice_to_all_selections_with_no_choices_task.rake
|
|
853
883
|
- lib/tasks/add_default_helpers_class_task.rake
|
|
854
884
|
- lib/tasks/add_video_feature_task.rake
|
|
885
|
+
- lib/tasks/create_missing_field_instances_task.rake
|
|
855
886
|
- lib/tasks/remove_orphan_fields_task.rake
|
|
856
887
|
- lib/tasks/set_repeater_position_task.rake
|
|
857
888
|
- lib/tasks/update_image_details_task.rake
|
|
@@ -898,6 +929,7 @@ files:
|
|
|
898
929
|
- vendor/assets/javascripts/bootstrap/bootstrap/tab.js
|
|
899
930
|
- vendor/assets/javascripts/bootstrap/bootstrap/tooltip.js
|
|
900
931
|
- vendor/assets/javascripts/bootstrap/bootstrap/transition.js
|
|
932
|
+
- vendor/assets/javascripts/lodash.js
|
|
901
933
|
- vendor/assets/javascripts/select2/i18n/af.js
|
|
902
934
|
- vendor/assets/javascripts/select2/i18n/ar.js
|
|
903
935
|
- vendor/assets/javascripts/select2/i18n/az.js
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FORM ITEM
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { _FormItemEditor } from "./form_item_editor";
|
|
6
|
-
import { setupSelect2 } from "./select2";
|
|
7
|
-
|
|
8
|
-
// Component Global Variables
|
|
9
|
-
let newFormItemId = 1;
|
|
10
|
-
|
|
11
|
-
class FormItem {
|
|
12
|
-
constructor() {}
|
|
13
|
-
|
|
14
|
-
isSet() {
|
|
15
|
-
if ($(".form-item").length > 0) {
|
|
16
|
-
return true;
|
|
17
|
-
} else {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
setEvents() {
|
|
23
|
-
$(document).on("click", ".form-item--add-new", addNewItem);
|
|
24
|
-
|
|
25
|
-
$(document).on("click", ".form-item--remove-item-with-js", function(event) {
|
|
26
|
-
// Stop default behaviour
|
|
27
|
-
event.preventDefault();
|
|
28
|
-
$(this)
|
|
29
|
-
.closest(".form-item")
|
|
30
|
-
.remove();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
$(document).on("click", ".form-item--collapse-btn", collapseToggle);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export let _FormItem = new FormItem();
|
|
38
|
-
|
|
39
|
-
///- - - - - - - - - - - - - - - - - - - -
|
|
40
|
-
/// COMPONENT HELPER FUNCTIONS
|
|
41
|
-
///- - - - - - - - - - - - - - - - - - - -
|
|
42
|
-
|
|
43
|
-
// This function could be improved as it generates an issue with
|
|
44
|
-
// input ids which are duplicated after the entire target has been cloned
|
|
45
|
-
function addNewItem(event) {
|
|
46
|
-
// Stop default behaviour
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
// Get the child to clone
|
|
49
|
-
// (`this` always refers to the second argument of the $(document).on() method, in this case '.form-item--add-new')
|
|
50
|
-
let id = $(this).data("new-form-item-id");
|
|
51
|
-
let $newChild = $("#" + id);
|
|
52
|
-
// Clone child and remove id and styles from cloned child
|
|
53
|
-
$newChild.clone().insertAfter($newChild);
|
|
54
|
-
// Remove class in order to remove styles, and change id so it's reachable when testing
|
|
55
|
-
$newChild
|
|
56
|
-
.removeClass("form-item--new")
|
|
57
|
-
.attr("id", "new-form-item-" + newFormItemId);
|
|
58
|
-
|
|
59
|
-
// // Update all ids to avoid duplication
|
|
60
|
-
$newChild.find("[id]").each(function() {
|
|
61
|
-
let oldId = $(this).attr("id");
|
|
62
|
-
let newId = oldId + "-" + newFormItemId;
|
|
63
|
-
$(this).attr("id", newId);
|
|
64
|
-
let $forId = $newChild.find("[for=" + oldId + "]");
|
|
65
|
-
if ($forId.length > 0) {
|
|
66
|
-
$forId.attr("for", newId);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// Update height (max-height) of the new element
|
|
71
|
-
let $formItemEditor = $("#new-form-item-" + newFormItemId).find(
|
|
72
|
-
".form-item--editor"
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
// override current max-height which is set to 0
|
|
76
|
-
$formItemEditor.get(0).style.maxHeight =
|
|
77
|
-
$formItemEditor.get(0).scrollHeight + "px";
|
|
78
|
-
|
|
79
|
-
_FormItemEditor.resize();
|
|
80
|
-
|
|
81
|
-
// Increment global id variable `newFormItemId` in case needs to be used again
|
|
82
|
-
newFormItemId++;
|
|
83
|
-
|
|
84
|
-
setupSelect2($formItemEditor.find("select"));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function close() {
|
|
88
|
-
this.style.maxHeight = "0px";
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function open() {
|
|
92
|
-
this.style.maxHeight = this.scrollHeight + "px";
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function collapseToggle(event) {
|
|
96
|
-
// This function is temporarely just set for repeaters.
|
|
97
|
-
// TODO: Need refactoring in order to be available also for generic form items
|
|
98
|
-
|
|
99
|
-
// Stop default behaviour
|
|
100
|
-
event.preventDefault();
|
|
101
|
-
|
|
102
|
-
let $collapsable = $(this).closest(".form-item--collapsable");
|
|
103
|
-
|
|
104
|
-
if ($collapsable.hasClass("form-item--collapsed")) {
|
|
105
|
-
$collapsable.find(".form-item--repeater-fields").each(open);
|
|
106
|
-
$collapsable.find(".form-item--editor").each(open);
|
|
107
|
-
$collapsable.removeClass("form-item--collapsed");
|
|
108
|
-
} else {
|
|
109
|
-
$collapsable.find(".form-item--repeater-fields").each(close);
|
|
110
|
-
$collapsable.find(".form-item--editor").each(close);
|
|
111
|
-
$collapsable.addClass("form-item--collapsed");
|
|
112
|
-
}
|
|
113
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FORM ITEM EDITOR
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
class FormItemEditor {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.target = ".form-item--editor";
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
isSet() {
|
|
11
|
-
if ($(this.target).length > 0) {
|
|
12
|
-
return true;
|
|
13
|
-
} else {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
setEvents() {
|
|
19
|
-
// run resize to set initial size
|
|
20
|
-
this.resize();
|
|
21
|
-
// run resize on each of these events
|
|
22
|
-
$(window).resize(() => {
|
|
23
|
-
this.resize();
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
resize() {
|
|
28
|
-
$(this.target).each(function() {
|
|
29
|
-
// If the form item editor is closed don't go any further
|
|
30
|
-
if ($(this).height() === 0) return;
|
|
31
|
-
// otherwise update the max-height which is needed for the CSS transition
|
|
32
|
-
// NOTE you need to remove the max-height (inside 'style' attribute) to get the real height
|
|
33
|
-
$(this).get(0).style.height = "auto";
|
|
34
|
-
$(this).get(0).style.maxHeight = $(this).get(0).scrollHeight + "px";
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export let _FormItemEditor = new FormItemEditor();
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FORM ITEM REPEATER
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { _FormItemEditor } from "./form_item_editor";
|
|
6
|
-
import { setupSelect2 } from "./select2";
|
|
7
|
-
|
|
8
|
-
class FormItemRepeater {
|
|
9
|
-
constructor() {}
|
|
10
|
-
|
|
11
|
-
isSet() {
|
|
12
|
-
if ($(".form-item--repeater-section").length > 0) {
|
|
13
|
-
return true;
|
|
14
|
-
} else {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
setEvents() {
|
|
20
|
-
$(document).on(
|
|
21
|
-
"click",
|
|
22
|
-
".form-item--repeater-section--add-new",
|
|
23
|
-
addNewItem
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
$(document).on("click", ".form-item--remove-item-with-js", function(event) {
|
|
27
|
-
// Stop default behaviour
|
|
28
|
-
event.preventDefault();
|
|
29
|
-
$(this)
|
|
30
|
-
.parent(".form-item--repeater-section")
|
|
31
|
-
.remove();
|
|
32
|
-
_FormItemEditor.resize();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
$(document).on("click", ".form-item--delete-repeater-item", deleteRepeter);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export let _FormItemRepeater = new FormItemRepeater();
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* COMPONENT HELPER FUNCTIONS
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
function addNewItem(event) {
|
|
46
|
-
// Stop default behaviour
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
// Get the child to clone
|
|
49
|
-
let id = $(this).data("id");
|
|
50
|
-
let $list = $("#form-item--repeater-setting-" + id);
|
|
51
|
-
let url = $(this).data("url");
|
|
52
|
-
$.post(url, { repeater_setting_id: id }, function(data) {
|
|
53
|
-
// Get repaeter code from Rails
|
|
54
|
-
// Due to the Rails way of creating nested forms it's necessary to
|
|
55
|
-
// create the nested item inside a different new form, then get just
|
|
56
|
-
// the code contained between the two SPLIT comments
|
|
57
|
-
let parts = data.split("<!-- SPLIT -->");
|
|
58
|
-
let newRepeater = parts[1];
|
|
59
|
-
setupAndAppend(newRepeater, $list);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function setupAndAppend(newRepeater, $list) {
|
|
64
|
-
// Append the item
|
|
65
|
-
$list.prepend(newRepeater);
|
|
66
|
-
let new_repeater_item = $list.find(".form-item--repeater").get(0);
|
|
67
|
-
|
|
68
|
-
// Prepare animation
|
|
69
|
-
new_repeater_item.style.maxHeight = 0;
|
|
70
|
-
|
|
71
|
-
// Group fields if sotrable is enabled
|
|
72
|
-
if ($list.hasClass("sortable--enabled")) {
|
|
73
|
-
$(new_repeater_item)
|
|
74
|
-
.find(".form-item--repeater-fields")
|
|
75
|
-
.each(function() {
|
|
76
|
-
this.style.maxHeight = 0 + "px";
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Setup TinyMCE for the newly created item
|
|
81
|
-
var textarea_editor_id = $list
|
|
82
|
-
.find("textarea")
|
|
83
|
-
.last("textarea")
|
|
84
|
-
.attr("id");
|
|
85
|
-
tinyMCE.EditorManager.execCommand("mceAddEditor", true, textarea_editor_id);
|
|
86
|
-
|
|
87
|
-
// Resize the editor (is it needed with the new configuration?)
|
|
88
|
-
// _FormItemEditor.resize()
|
|
89
|
-
|
|
90
|
-
// Update select input for Select2 plugin
|
|
91
|
-
setupSelect2($list.find("select"));
|
|
92
|
-
|
|
93
|
-
// Refresh Sortable to update the added item with Sortable features
|
|
94
|
-
$list.sortable("refresh");
|
|
95
|
-
|
|
96
|
-
// Run animation 50ms after previous style declaration (see above) otherwise animation doesn't get triggered
|
|
97
|
-
setTimeout(function() {
|
|
98
|
-
new_repeater_item.style.maxHeight = new_repeater_item.scrollHeight + "px";
|
|
99
|
-
}, 50);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function deleteRepeter(event) {
|
|
103
|
-
// Stop default behaviour
|
|
104
|
-
event.preventDefault();
|
|
105
|
-
|
|
106
|
-
let record_id = $(this).data("id");
|
|
107
|
-
let target = $("#repeater_" + record_id).get(0);
|
|
108
|
-
// As max-height isn't set you need to set it manually before changing it,
|
|
109
|
-
// otherwise the animation doesn't get triggered
|
|
110
|
-
target.style.maxHeight = target.scrollHeight + "px";
|
|
111
|
-
// Change max-height after 50ms to trigger css animation
|
|
112
|
-
setTimeout(function() {
|
|
113
|
-
target.style.maxHeight = 0 + "px";
|
|
114
|
-
}, 50);
|
|
115
|
-
|
|
116
|
-
$.ajax({
|
|
117
|
-
url: $(this).attr("href"),
|
|
118
|
-
data: { id: record_id, isAjax: true },
|
|
119
|
-
method: "DELETE"
|
|
120
|
-
}).done(() => {
|
|
121
|
-
// Make sure the animation completes before removing the item (it should last 600ms + 50ms)
|
|
122
|
-
setTimeout(function() {
|
|
123
|
-
$(target).remove();
|
|
124
|
-
}, 700);
|
|
125
|
-
// _FormItemEditor.resize()
|
|
126
|
-
});
|
|
127
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<%= ff.input :slug, as: :hidden, input_html: { class: "form-item--input" } %>
|
|
2
|
-
<div class="form-item--half-size">
|
|
3
|
-
<% if ff.object.field_type.nil? %>
|
|
4
|
-
<%= ff.input :field_type, as: :select, collection: get_field_types, include_blank: false, prompt: t(:select_field_type), input_html: { class: 'form-item--select-input' } %>
|
|
5
|
-
<% else %>
|
|
6
|
-
<%= ff.input :field_type, as: :string, disabled: true, input_html: { class: "form-item--input" } %>
|
|
7
|
-
<% end %>
|
|
8
|
-
</div>
|