binda 0.1.3 → 0.1.4
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 +83 -25
- data/app/assets/javascripts/binda/application.js +3 -3
- data/app/assets/javascripts/binda/components/bootstrap.js +3 -4
- data/app/assets/javascripts/binda/components/field_group_editor.js +10 -10
- data/app/assets/javascripts/binda/components/field_setting_choices.js +61 -49
- data/app/assets/javascripts/binda/components/fileupload.js +135 -118
- data/app/assets/javascripts/binda/components/form_item.js +65 -65
- data/app/assets/javascripts/binda/components/form_item_editor.js +19 -19
- data/app/assets/javascripts/binda/components/form_item_image.js +11 -13
- data/app/assets/javascripts/binda/components/form_item_repeater.js +77 -71
- data/app/assets/javascripts/binda/components/login-shader.js +171 -164
- data/app/assets/javascripts/binda/components/login_form.js +65 -73
- data/app/assets/javascripts/binda/components/radio-toggle.js +8 -12
- data/app/assets/javascripts/binda/components/select2.js +19 -14
- data/app/assets/javascripts/binda/components/sortable.js +76 -71
- data/app/assets/javascripts/binda/dist/binda.bundle.js +735 -727
- data/app/assets/javascripts/binda/index.js +49 -35
- data/app/assets/stylesheets/binda/components/assets_manager.scss +13 -22
- data/app/assets/stylesheets/binda/components/b-alert.scss +18 -14
- data/app/assets/stylesheets/binda/components/b-btn.scss +24 -43
- data/app/assets/stylesheets/binda/components/field_setting_choices.scss +16 -31
- data/app/assets/stylesheets/binda/components/fileupload.scss +25 -42
- data/app/assets/stylesheets/binda/components/form_item.scss +51 -93
- data/app/assets/stylesheets/binda/components/form_item_choices.scss +7 -10
- data/app/assets/stylesheets/binda/components/login.scss +2 -2
- data/app/assets/stylesheets/binda/components/main_header.scss +5 -10
- data/app/assets/stylesheets/binda/components/main_sidebar.scss +42 -46
- data/app/assets/stylesheets/binda/components/main_sortable_table.scss +12 -21
- data/app/assets/stylesheets/binda/components/main_table.scss +18 -35
- data/app/assets/stylesheets/binda/components/popup_warning.scss +14 -27
- data/app/assets/stylesheets/binda/components/select2.scss +46 -48
- data/app/assets/stylesheets/binda/components/sortable.scss +25 -45
- data/app/assets/stylesheets/binda/components/standard-form.scss +43 -73
- data/app/assets/stylesheets/binda/controllers/users_sessions_new.scss +52 -89
- data/app/assets/stylesheets/binda/index.scss +0 -1
- data/app/assets/stylesheets/binda/settings/buttons.scss +9 -10
- data/app/assets/stylesheets/binda/settings/common.scss +17 -22
- data/app/assets/stylesheets/binda/settings/fonts.scss +112 -67
- data/app/assets/stylesheets/binda/settings/tiny_mce_overrides.scss +20 -36
- data/app/assets/stylesheets/binda/settings/variables.scss +38 -43
- data/app/controllers/binda/choices_controller.rb +14 -11
- data/app/controllers/binda/components_controller.rb +6 -4
- data/app/controllers/binda/structures_controller.rb +7 -3
- data/app/helpers/binda/components_helper.rb +69 -3
- data/app/helpers/binda/field_groups_helper.rb +16 -6
- data/app/helpers/binda/structures_helper.rb +1 -4
- data/app/models/binda/application_record.rb +4 -1
- data/app/models/binda/asset.rb +3 -1
- data/app/models/binda/b.rb +1 -0
- data/app/models/binda/category.rb +1 -0
- data/app/models/binda/checkbox.rb +2 -0
- data/app/models/binda/choice.rb +74 -41
- data/app/models/binda/component.rb +1 -1
- data/app/models/binda/date.rb +4 -0
- data/app/models/binda/deprecation.rb +7 -0
- data/app/models/binda/field_group.rb +16 -3
- data/app/models/binda/field_setting.rb +168 -41
- data/app/models/binda/image.rb +1 -0
- data/app/models/binda/radio.rb +2 -0
- data/app/models/binda/relation.rb +3 -0
- data/app/models/binda/repeater.rb +3 -0
- data/app/models/binda/selection.rb +237 -0
- data/app/models/binda/string.rb +4 -0
- data/app/models/binda/structure.rb +25 -14
- data/app/models/binda/text.rb +9 -0
- data/app/models/binda/video.rb +1 -0
- data/app/models/concerns/binda/default_helpers.rb +40 -31
- data/app/models/concerns/binda/deprecations.rb +6 -0
- data/app/models/concerns/binda/fieldable_association_helpers.rb +366 -0
- data/app/models/concerns/binda/fieldable_associations.rb +32 -369
- data/app/views/binda/boards/edit.html.erb +15 -2
- data/app/views/binda/categories/_form.html.erb +24 -51
- data/app/views/binda/categories/edit.html.erb +23 -3
- data/app/views/binda/categories/index.html.erb +49 -25
- data/app/views/binda/categories/new.html.erb +21 -2
- data/app/views/binda/components/edit.html.erb +27 -4
- data/app/views/binda/components/index.html.erb +47 -50
- data/app/views/binda/components/new.html.erb +12 -2
- data/app/views/binda/components/sort_index.html.erb +28 -13
- data/app/views/binda/field_groups/_form_body.html.erb +43 -82
- data/app/views/binda/field_groups/_form_item.html.erb +3 -120
- data/app/views/binda/field_groups/_form_section.html.erb +11 -16
- data/app/views/binda/field_groups/_form_section_repeater.html.erb +7 -15
- data/app/views/binda/field_groups/edit.html.erb +14 -2
- data/app/views/binda/field_groups/form_item/_form_item_choice_editor.html.erb +11 -0
- data/app/views/binda/field_groups/form_item/_form_item_editor.html.erb +14 -0
- data/app/views/binda/field_groups/form_item/_form_item_header.html.erb +25 -0
- data/app/views/binda/field_groups/form_item/_form_item_new_editor.html.erb +8 -0
- data/app/views/binda/field_groups/form_item/_form_item_persisted_editor.html.erb +27 -0
- data/app/views/binda/field_groups/form_item/form_item_choice/_form_item_allow_null_choice.html.erb +11 -0
- data/app/views/binda/field_groups/form_item/form_item_choice/_form_item_choice_header.html.erb +11 -0
- data/app/views/binda/field_groups/form_item/form_item_choice/_form_item_default_choice.html.erb +11 -0
- data/app/views/binda/field_groups/form_item/form_item_choice/_form_item_new_choice.html.erb +16 -0
- data/app/views/binda/field_groups/form_item/form_item_choice/_form_item_persisted_choices.html.erb +16 -0
- data/app/views/binda/field_groups/new.html.erb +14 -2
- data/app/views/binda/field_settings/_form_body.html.erb +1 -3
- data/app/views/binda/field_settings/edit.html.erb +1 -1
- data/app/views/binda/field_settings/new.html.erb +1 -1
- data/app/views/binda/fieldable/_form_body.html.erb +24 -72
- data/app/views/binda/fieldable/_form_item_date.html.erb +1 -4
- data/app/views/binda/fieldable/_form_item_image.html.erb +3 -7
- data/app/views/binda/fieldable/_form_item_new_repeater.html.erb +0 -13
- data/app/views/binda/fieldable/_form_item_selections.html.erb +20 -112
- data/app/views/binda/fieldable/form_item_selections/_form_item_checkbox.html.erb +34 -0
- data/app/views/binda/fieldable/form_item_selections/_form_item_radio.html.erb +28 -0
- data/app/views/binda/fieldable/form_item_selections/_form_item_selection.html.erb +30 -0
- data/app/views/binda/manage/users/_form_body.html.erb +1 -31
- data/app/views/binda/manage/users/edit.html.erb +12 -2
- data/app/views/binda/manage/users/index.html.erb +36 -19
- data/app/views/binda/manage/users/new.html.erb +14 -3
- data/app/views/binda/structures/_form_body.html.erb +2 -25
- data/app/views/binda/structures/_form_section.html.erb +43 -65
- data/app/views/binda/structures/_form_sidebar.html.erb +19 -12
- data/app/views/binda/structures/edit.html.erb +20 -3
- data/app/views/binda/structures/index.html.erb +46 -26
- data/app/views/binda/structures/new.html.erb +13 -2
- data/app/views/binda/structures/sort_index.html.erb +37 -17
- data/app/views/binda/users/sessions/new.html.erb +25 -20
- data/app/views/layouts/binda/_form_errors.html.erb +10 -0
- data/app/views/layouts/binda/_sidebar.html.erb +6 -6
- data/app/views/layouts/binda/application.html.erb +1 -1
- data/config/initializers/carrierwave.rb +3 -2
- data/config/locales/en.yml +56 -12
- data/config/tinymce.yml +2 -2
- data/db/migrate/1_create_binda_tables.rb +1 -1
- data/lib/binda/version.rb +1 -1
- data/lib/generators/binda/setup/setup_generator.rb +2 -2
- data/lib/tasks/add_default_choice_to_all_selections_with_no_choices_task.rake +6 -0
- metadata +58 -8
- data/app/assets/stylesheets/binda/components/form_item_image.scss +0 -0
- data/app/views/binda/field_groups/_form_item_choice.erb +0 -104
|
@@ -2,112 +2,112 @@
|
|
|
2
2
|
* FORM ITEM
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { _FormItemEditor } from
|
|
6
|
-
import { setupSelect2 } from
|
|
5
|
+
import { _FormItemEditor } from "./form_item_editor";
|
|
6
|
+
import { setupSelect2 } from "./select2";
|
|
7
7
|
|
|
8
8
|
// Component Global Variables
|
|
9
|
-
let newFormItemId = 1
|
|
9
|
+
let newFormItemId = 1;
|
|
10
10
|
|
|
11
11
|
class FormItem {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
constructor() {}
|
|
13
|
+
|
|
14
|
+
isSet() {
|
|
15
|
+
if ($(".form-item").length > 0) {
|
|
16
|
+
return true;
|
|
17
|
+
} else {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
setEvents()
|
|
22
|
-
|
|
23
|
-
$(document).on('click', '.form-item--add-new', addNewItem )
|
|
22
|
+
setEvents() {
|
|
23
|
+
$(document).on("click", ".form-item--add-new", addNewItem);
|
|
24
24
|
|
|
25
|
-
$(document).on(
|
|
26
|
-
{
|
|
25
|
+
$(document).on("click", ".form-item--remove-item-with-js", function(event) {
|
|
27
26
|
// Stop default behaviour
|
|
28
|
-
event.preventDefault()
|
|
29
|
-
$(
|
|
30
|
-
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
$(this)
|
|
29
|
+
.closest(".form-item")
|
|
30
|
+
.remove();
|
|
31
|
+
});
|
|
31
32
|
|
|
32
|
-
$(document).on(
|
|
33
|
+
$(document).on("click", ".form-item--collapse-btn", collapseToggle);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
export let _FormItem = new FormItem()
|
|
37
|
-
|
|
37
|
+
export let _FormItem = new FormItem();
|
|
38
38
|
|
|
39
39
|
///- - - - - - - - - - - - - - - - - - - -
|
|
40
40
|
/// COMPONENT HELPER FUNCTIONS
|
|
41
41
|
///- - - - - - - - - - - - - - - - - - - -
|
|
42
42
|
|
|
43
|
-
// This function could be improved as it generates an issue with
|
|
43
|
+
// This function could be improved as it generates an issue with
|
|
44
44
|
// input ids which are duplicated after the entire target has been cloned
|
|
45
|
-
function addNewItem(event)
|
|
46
|
-
{
|
|
45
|
+
function addNewItem(event) {
|
|
47
46
|
// Stop default behaviour
|
|
48
|
-
event.preventDefault()
|
|
49
|
-
// Get the child to clone
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
// Get the child to clone
|
|
50
49
|
// (`this` always refers to the second argument of the $(document).on() method, in this case '.form-item--add-new')
|
|
51
|
-
let id = $(
|
|
52
|
-
let $newChild = $(
|
|
50
|
+
let id = $(this).data("new-form-item-id");
|
|
51
|
+
let $newChild = $("#" + id);
|
|
53
52
|
// Clone child and remove id and styles from cloned child
|
|
54
|
-
$newChild.clone().insertAfter(
|
|
53
|
+
$newChild.clone().insertAfter($newChild);
|
|
55
54
|
// Remove class in order to remove styles, and change id so it's reachable when testing
|
|
56
|
-
$newChild
|
|
55
|
+
$newChild
|
|
56
|
+
.removeClass("form-item--new")
|
|
57
|
+
.attr("id", "new-form-item-" + newFormItemId);
|
|
57
58
|
|
|
58
59
|
// // Update all ids to avoid duplication
|
|
59
|
-
$newChild.find(
|
|
60
|
-
let oldId = $(this).attr(
|
|
61
|
-
let newId = oldId +
|
|
62
|
-
$(this).attr(
|
|
63
|
-
let $forId = $newChild.find(
|
|
64
|
-
if (
|
|
65
|
-
|
|
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
|
+
});
|
|
66
69
|
|
|
67
70
|
// Update height (max-height) of the new element
|
|
68
|
-
let $formItemEditor = $(
|
|
71
|
+
let $formItemEditor = $("#new-form-item-" + newFormItemId).find(
|
|
72
|
+
".form-item--editor"
|
|
73
|
+
);
|
|
69
74
|
|
|
70
75
|
// override current max-height which is set to 0
|
|
71
|
-
$formItemEditor.get(0).style.maxHeight =
|
|
76
|
+
$formItemEditor.get(0).style.maxHeight =
|
|
77
|
+
$formItemEditor.get(0).scrollHeight + "px";
|
|
72
78
|
|
|
73
|
-
_FormItemEditor.resize()
|
|
79
|
+
_FormItemEditor.resize();
|
|
74
80
|
|
|
75
81
|
// Increment global id variable `newFormItemId` in case needs to be used again
|
|
76
|
-
newFormItemId
|
|
82
|
+
newFormItemId++;
|
|
77
83
|
|
|
78
|
-
setupSelect2(
|
|
84
|
+
setupSelect2($formItemEditor.find("select"));
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
function close()
|
|
82
|
-
|
|
83
|
-
this.style.maxHeight = '0px'
|
|
87
|
+
function close() {
|
|
88
|
+
this.style.maxHeight = "0px";
|
|
84
89
|
}
|
|
85
90
|
|
|
86
|
-
function open()
|
|
87
|
-
{
|
|
91
|
+
function open() {
|
|
88
92
|
this.style.maxHeight = this.scrollHeight + "px";
|
|
89
93
|
}
|
|
90
94
|
|
|
91
|
-
function collapseToggle(
|
|
92
|
-
{
|
|
95
|
+
function collapseToggle(event) {
|
|
93
96
|
// This function is temporarely just set for repeaters.
|
|
94
97
|
// TODO: Need refactoring in order to be available also for generic form items
|
|
95
98
|
|
|
96
99
|
// Stop default behaviour
|
|
97
|
-
event.preventDefault()
|
|
98
|
-
|
|
99
|
-
let $collapsable = $(this).closest(
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
$collapsable.find(
|
|
104
|
-
$collapsable.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
$collapsable.find('.form-item--repeater-fields').each(close)
|
|
110
|
-
$collapsable.find('.form-item--editor').each(close)
|
|
111
|
-
$collapsable.addClass('form-item--collapsed')
|
|
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
112
|
}
|
|
113
|
-
}
|
|
113
|
+
}
|
|
@@ -3,37 +3,37 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
class FormItemEditor {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
this.target = '.form-item--editor'
|
|
6
|
+
constructor() {
|
|
7
|
+
this.target = ".form-item--editor";
|
|
10
8
|
}
|
|
11
9
|
|
|
12
|
-
isSet()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
else {
|
|
10
|
+
isSet() {
|
|
11
|
+
if ($(this.target).length > 0) {
|
|
12
|
+
return true;
|
|
13
|
+
} else {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
setEvents()
|
|
19
|
-
{
|
|
18
|
+
setEvents() {
|
|
20
19
|
// run resize to set initial size
|
|
21
|
-
this.resize()
|
|
20
|
+
this.resize();
|
|
22
21
|
// run resize on each of these events
|
|
23
|
-
$(window).resize(
|
|
22
|
+
$(window).resize(() => {
|
|
23
|
+
this.resize();
|
|
24
|
+
});
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
resize()
|
|
27
|
-
|
|
28
|
-
$( this.target ).each( function(){
|
|
27
|
+
resize() {
|
|
28
|
+
$(this.target).each(function() {
|
|
29
29
|
// If the form item editor is closed don't go any further
|
|
30
|
-
if (
|
|
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).get(0).style.height =
|
|
33
|
+
$(this).get(0).style.height = "auto";
|
|
34
34
|
$(this).get(0).style.maxHeight = $(this).get(0).scrollHeight + "px";
|
|
35
|
-
})
|
|
35
|
+
});
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
export let _FormItemEditor = new FormItemEditor()
|
|
39
|
+
export let _FormItemEditor = new FormItemEditor();
|
|
@@ -2,22 +2,20 @@
|
|
|
2
2
|
* FORM ITEM IMAGE
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
class FormItemImage
|
|
6
|
-
{
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
this.target = '.form-item--image--uploader'
|
|
5
|
+
class FormItemImage {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.target = ".form-item--image--uploader";
|
|
10
8
|
}
|
|
11
9
|
|
|
12
|
-
isSet()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
else {
|
|
10
|
+
isSet() {
|
|
11
|
+
if ($(this.target).length > 0) {
|
|
12
|
+
return true;
|
|
13
|
+
} else {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
setEvents()
|
|
19
|
-
{
|
|
20
|
-
}
|
|
18
|
+
setEvents() {}
|
|
21
19
|
}
|
|
22
20
|
|
|
23
|
-
export var _FormItemImage = new FormItemImage()
|
|
21
|
+
export var _FormItemImage = new FormItemImage();
|
|
@@ -2,120 +2,126 @@
|
|
|
2
2
|
* FORM ITEM REPEATER
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { _FormItemEditor } from
|
|
6
|
-
import { setupSelect2 } from
|
|
5
|
+
import { _FormItemEditor } from "./form_item_editor";
|
|
6
|
+
import { setupSelect2 } from "./select2";
|
|
7
7
|
|
|
8
8
|
class FormItemRepeater {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
constructor() {}
|
|
10
|
+
|
|
11
|
+
isSet() {
|
|
12
|
+
if ($(".form-item--repeater-section").length > 0) {
|
|
13
|
+
return true;
|
|
14
|
+
} else {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
setEvents()
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// Stop default behaviour
|
|
25
|
-
event.preventDefault()
|
|
26
|
-
$( this ).parent('.form-item--repeater-section').remove()
|
|
27
|
-
_FormItemEditor.resize()
|
|
28
|
-
})
|
|
19
|
+
setEvents() {
|
|
20
|
+
$(document).on(
|
|
21
|
+
"click",
|
|
22
|
+
".form-item--repeater-section--add-new",
|
|
23
|
+
addNewItem
|
|
24
|
+
);
|
|
29
25
|
|
|
30
|
-
$(document).on(
|
|
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);
|
|
31
36
|
}
|
|
32
37
|
}
|
|
33
38
|
|
|
34
|
-
export let _FormItemRepeater = new FormItemRepeater()
|
|
35
|
-
|
|
39
|
+
export let _FormItemRepeater = new FormItemRepeater();
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
42
|
* COMPONENT HELPER FUNCTIONS
|
|
39
43
|
*/
|
|
40
44
|
|
|
41
|
-
function addNewItem(
|
|
42
|
-
{
|
|
45
|
+
function addNewItem(event) {
|
|
43
46
|
// Stop default behaviour
|
|
44
|
-
event.preventDefault()
|
|
47
|
+
event.preventDefault();
|
|
45
48
|
// Get the child to clone
|
|
46
|
-
let id = $(
|
|
47
|
-
let $list = $(
|
|
48
|
-
let url = $(
|
|
49
|
-
$.post(
|
|
50
|
-
{
|
|
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) {
|
|
51
53
|
// Get repaeter code from Rails
|
|
52
|
-
// Due to the Rails way of creating nested forms it's necessary to
|
|
54
|
+
// Due to the Rails way of creating nested forms it's necessary to
|
|
53
55
|
// create the nested item inside a different new form, then get just
|
|
54
56
|
// the code contained between the two SPLIT comments
|
|
55
|
-
let parts = data.split(
|
|
56
|
-
let newRepeater = parts[1]
|
|
57
|
-
setupAndAppend(
|
|
58
|
-
})
|
|
57
|
+
let parts = data.split("<!-- SPLIT -->");
|
|
58
|
+
let newRepeater = parts[1];
|
|
59
|
+
setupAndAppend(newRepeater, $list);
|
|
60
|
+
});
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
function setupAndAppend(
|
|
62
|
-
{
|
|
63
|
+
function setupAndAppend(newRepeater, $list) {
|
|
63
64
|
// Append the item
|
|
64
|
-
$list.prepend(
|
|
65
|
-
let new_repeater_item = $list.find(
|
|
65
|
+
$list.prepend(newRepeater);
|
|
66
|
+
let new_repeater_item = $list.find(".form-item--repeater").get(0);
|
|
66
67
|
|
|
67
68
|
// Prepare animation
|
|
68
|
-
new_repeater_item.style.maxHeight = 0
|
|
69
|
+
new_repeater_item.style.maxHeight = 0;
|
|
69
70
|
|
|
70
71
|
// Group fields if sotrable is enabled
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
+
});
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
// Setup TinyMCE for the newly created item
|
|
80
|
-
var textarea_editor_id = $list
|
|
81
|
-
|
|
82
|
-
|
|
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
|
+
|
|
83
87
|
// Resize the editor (is it needed with the new configuration?)
|
|
84
88
|
// _FormItemEditor.resize()
|
|
85
|
-
|
|
89
|
+
|
|
86
90
|
// Update select input for Select2 plugin
|
|
87
|
-
setupSelect2(
|
|
91
|
+
setupSelect2($list.find("select"));
|
|
88
92
|
|
|
89
93
|
// Refresh Sortable to update the added item with Sortable features
|
|
90
|
-
$list.sortable(
|
|
94
|
+
$list.sortable("refresh");
|
|
91
95
|
|
|
92
96
|
// Run animation 50ms after previous style declaration (see above) otherwise animation doesn't get triggered
|
|
93
|
-
setTimeout(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}, 50)
|
|
97
|
+
setTimeout(function() {
|
|
98
|
+
new_repeater_item.style.maxHeight = new_repeater_item.scrollHeight + "px";
|
|
99
|
+
}, 50);
|
|
97
100
|
}
|
|
98
101
|
|
|
99
|
-
function deleteRepeter(
|
|
100
|
-
{
|
|
102
|
+
function deleteRepeter(event) {
|
|
101
103
|
// Stop default behaviour
|
|
102
|
-
event.preventDefault()
|
|
103
|
-
|
|
104
|
-
let record_id = $(
|
|
105
|
-
let target = $(
|
|
106
|
-
// As max-height isn't set you need to set it manually before changing it,
|
|
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,
|
|
107
109
|
// otherwise the animation doesn't get triggered
|
|
108
|
-
target.style.maxHeight = target.scrollHeight +
|
|
110
|
+
target.style.maxHeight = target.scrollHeight + "px";
|
|
109
111
|
// Change max-height after 50ms to trigger css animation
|
|
110
|
-
setTimeout(
|
|
112
|
+
setTimeout(function() {
|
|
113
|
+
target.style.maxHeight = 0 + "px";
|
|
114
|
+
}, 50);
|
|
111
115
|
|
|
112
116
|
$.ajax({
|
|
113
|
-
url: $(
|
|
117
|
+
url: $(this).attr("href"),
|
|
114
118
|
data: { id: record_id, isAjax: true },
|
|
115
119
|
method: "DELETE"
|
|
116
|
-
}).done(
|
|
120
|
+
}).done(() => {
|
|
117
121
|
// Make sure the animation completes before removing the item (it should last 600ms + 50ms)
|
|
118
|
-
setTimeout(
|
|
122
|
+
setTimeout(function() {
|
|
123
|
+
$(target).remove();
|
|
124
|
+
}, 700);
|
|
119
125
|
// _FormItemEditor.resize()
|
|
120
|
-
})
|
|
121
|
-
}
|
|
126
|
+
});
|
|
127
|
+
}
|