para 0.8.12 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/para/inputs/nested_many.coffee +14 -8
- data/app/controllers/para/admin/nested_forms_controller.rb +1 -0
- data/app/helpers/para/admin/components_helper.rb +10 -2
- data/app/helpers/para/tag_helper.rb +6 -2
- data/app/views/para/admin/nested_forms/show.html.haml +10 -1
- data/app/views/para/admin/resources/_remote_nested_form.html.haml +1 -1
- data/app/views/para/admin/shared/_navigation.html.haml +1 -1
- data/app/views/para/inputs/_nested_many.html.haml +1 -0
- data/app/views/para/inputs/_nested_one.html.haml +2 -2
- data/app/views/para/inputs/nested_many/_container.html.haml +1 -1
- data/app/views/para/inputs/nested_one/_container.html.haml +1 -1
- data/config/locales/en.yml +4 -7
- data/lib/para/form_builder/nested_form.rb +8 -0
- data/lib/para/inputs/nested_many_input.rb +3 -1
- data/lib/para/markup/resources_table.rb +2 -2
- data/lib/para/version.rb +1 -1
- metadata +22 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36e1d56aa604b3827cc9e483a65deb72827424890f9125ee83cb43ca5d7e34ed
|
4
|
+
data.tar.gz: bf514778435313e925dbd1222bd85393f842416ac7a58833a21d02d45edc4eb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb0433062dd44b4b6f4b1278604e94cc751c586bee5196118cab5d7feaba6fe011df5e0900410ce1f2a65e78e88723e6e7cee8d22c82864dce99a52d2866d95c
|
7
|
+
data.tar.gz: 1d4fabf4b0160ae3e7fdbc238a8c047a93c7d1c69a8d07c89d4f1f565ba61d1cf452f17baa4db52e8180036bcae99df775d714fabc876208bd36d518ff6f927e
|
@@ -5,7 +5,7 @@ class Para.NestedManyField
|
|
5
5
|
@initializeOrderable()
|
6
6
|
@initializeCocoon()
|
7
7
|
|
8
|
-
@$field.on 'shown.bs.collapse',
|
8
|
+
@$field.on 'shown.bs.collapse', @stoppingPropagation(@collapseShown)
|
9
9
|
|
10
10
|
initializeOrderable: ->
|
11
11
|
@orderable = @$field.hasClass('orderable')
|
@@ -21,11 +21,17 @@ class Para.NestedManyField
|
|
21
21
|
$(el).find('.resource-position-field').val(i)
|
22
22
|
|
23
23
|
initializeCocoon: ->
|
24
|
-
@$fieldsList.on 'cocoon:after-insert',
|
25
|
-
@$fieldsList.on 'cocoon:before-remove',
|
26
|
-
@$fieldsList.on 'cocoon:after-remove',
|
24
|
+
@$fieldsList.on 'cocoon:after-insert', @afterInsertField
|
25
|
+
@$fieldsList.on 'cocoon:before-remove', @beforeRemoveField
|
26
|
+
@$fieldsList.on 'cocoon:after-remove', @afterRemoveField
|
27
27
|
|
28
|
-
|
28
|
+
stoppingPropagation: (callback) =>
|
29
|
+
(e, args...) =>
|
30
|
+
e.stopPropagation()
|
31
|
+
callback(e, args...)
|
32
|
+
|
33
|
+
|
34
|
+
afterInsertField: (e, $element) =>
|
29
35
|
if ($collapsible = $element.find('[data-open-on-insert="true"]')).length
|
30
36
|
@openInsertedField($collapsible)
|
31
37
|
|
@@ -36,21 +42,21 @@ class Para.NestedManyField
|
|
36
42
|
|
37
43
|
$element.simpleForm()
|
38
44
|
|
39
|
-
beforeRemoveField: (e, $element)
|
45
|
+
beforeRemoveField: (e, $element) =>
|
40
46
|
$nextEl = $element.next()
|
41
47
|
# Remove attributes mappings field for new records since it will try to
|
42
48
|
# create an empty nested resource otherwise
|
43
49
|
$nextEl.remove() if $nextEl.is('[data-attributes-mappings]') and not $element.is('[data-persisted]')
|
44
50
|
|
45
51
|
# When a sub field is removed, update every sub field position
|
46
|
-
afterRemoveField:
|
52
|
+
afterRemoveField: =>
|
47
53
|
@handleOrderingUpdated();
|
48
54
|
|
49
55
|
openInsertedField: ($field) ->
|
50
56
|
$target = $($field.attr('href'))
|
51
57
|
$target.collapse('show')
|
52
58
|
|
53
|
-
collapseShown: (e)
|
59
|
+
collapseShown: (e) =>
|
54
60
|
$target = $(e.target)
|
55
61
|
|
56
62
|
if $target.is("[data-rendered]") or $target.data("rendered")
|
@@ -5,8 +5,10 @@ module Para
|
|
5
5
|
#
|
6
6
|
def admin_component_sections
|
7
7
|
@admin_component_sections ||= begin
|
8
|
-
Para::ComponentSection.ordered.includes(:components)
|
9
|
-
|
8
|
+
sections = Para::ComponentSection.ordered.includes(:components, :parent_component)
|
9
|
+
|
10
|
+
sections.tap do |loaded_sections|
|
11
|
+
loaded_sections.flat_map(&:components).each(&method(:decorate))
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -23,5 +25,11 @@ module Para
|
|
23
25
|
config = Para.components.component_configuration_for(component.identifier)
|
24
26
|
!config.shown_if || instance_exec(&config.shown_if)
|
25
27
|
end
|
28
|
+
|
29
|
+
def current_component_or_parent?(component)
|
30
|
+
return false unless @component
|
31
|
+
|
32
|
+
@component == component || @component.parent_component == component
|
33
|
+
end
|
26
34
|
end
|
27
35
|
end
|
@@ -19,9 +19,13 @@ module Para
|
|
19
19
|
attributes = model_field_mappings(model).fields
|
20
20
|
relation = options.fetch(:relation, model.name.to_s.underscore.pluralize)
|
21
21
|
allow_adding_resource = options.fetch(:addable, true)
|
22
|
+
force_list = options.fetch(:force_list, false)
|
22
23
|
|
23
|
-
partial = :
|
24
|
-
|
24
|
+
partial = if !force_list && model.respond_to?(:roots) && can?(:tree, model)
|
25
|
+
:tree
|
26
|
+
else
|
27
|
+
:list
|
28
|
+
end
|
25
29
|
|
26
30
|
render(
|
27
31
|
partial: find_partial_for(relation, partial),
|
@@ -1,6 +1,15 @@
|
|
1
1
|
- nested_form = nil
|
2
2
|
|
3
|
-
|
3
|
+
-# Initialize an unredered form builder that will only be used to create the nested fields
|
4
|
+
-# by using the yielded block form builder argument.
|
5
|
+
-#
|
6
|
+
-# The form's object name is set through the provided :object_name param to ensure that
|
7
|
+
-# the form inputs are named correctly in the loading form.
|
8
|
+
-#
|
9
|
+
-# Builder options allow to customize the options passed to the form builder to customize
|
10
|
+
-# the rendered partials.
|
11
|
+
-#
|
12
|
+
- para_form_for(@object, @builder_options.merge(url: "")) do |form|
|
4
13
|
- form.object_name = @object_name
|
5
14
|
- nested_form = capture do
|
6
15
|
= render(partial: find_partial_for(@model, :remote_nested_form), locals: { form: form, model: @model, object: @object, object_name: @object_name })
|
@@ -1 +1 @@
|
|
1
|
-
= render partial: find_partial_for(model,
|
1
|
+
= render partial: find_partial_for(model, form.nested_fields_partial_name), locals: { form: form }
|
@@ -15,7 +15,7 @@
|
|
15
15
|
%ul.component-section-list-items.collapse.in{ id: "collapse-section-#{index}" }
|
16
16
|
- component_section.components.each do |component|
|
17
17
|
- if can?(:manage, component) && show_component?(component)
|
18
|
-
%li.component-item{ class: (
|
18
|
+
%li.component-item{ class: ('active' if current_component_or_parent?(component)) }
|
19
19
|
= link_to component.main_navigation_name, component.path
|
20
20
|
|
21
21
|
- else
|
@@ -2,6 +2,7 @@
|
|
2
2
|
.fields-list{ id: dom_identifier }
|
3
3
|
= form.simple_fields_for attribute_name, resources, nested_attribute_name: attribute_name, orderable: orderable, track_attribute_mappings: render_partial do |nested_form|
|
4
4
|
= render partial: find_partial_for(model, 'nested_many/container', partial_dir: 'inputs'), locals: { form: nested_form, model: nested_form.object.class, subclass: subclass, nested_locals: nested_locals, inset: inset, uncollapsed: uncollapsed, render_partial: render_partial, remote_partial_params: remote_partial_params }
|
5
|
+
|
5
6
|
-# Add button
|
6
7
|
- if add_button
|
7
8
|
- if subclass
|
@@ -6,7 +6,7 @@
|
|
6
6
|
= render partial: find_partial_for(model, 'nested_one/container', partial_dir: 'inputs'), locals: { nested_form: nested_form, form: form, model: nested_form.object.class, subclass: subclass, nested_locals: nested_locals }
|
7
7
|
|
8
8
|
- else
|
9
|
-
= render partial: find_partial_for(model,
|
9
|
+
= render partial: find_partial_for(model, form.nested_fields_partial_name), locals: { form: nested_form, parent: form.object }.merge(nested_locals)
|
10
10
|
|
11
11
|
- if defined?(subclass) && subclass
|
12
|
-
= render partial: 'para/inputs/nested_one/add_with_subclasses', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, subclasses: subclasses, add_button_label: add_button_label, add_button_class: add_button_class, subclass: subclass }
|
12
|
+
= render partial: 'para/inputs/nested_one/add_with_subclasses', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, subclasses: subclasses, add_button_label: add_button_label, add_button_class: add_button_class, subclass: subclass }
|
@@ -14,7 +14,7 @@
|
|
14
14
|
.panel-collapse.form-inputs.collapse{ id: form.nested_resource_dom_id, class: ('in' if uncollapsed && form.object.persisted?), data: { rendered: render_partial, render_path: @component.path(remote_partial_params), id: form.object.id, :"object-name" => form.object_name, :"model-name" => model.name } }
|
15
15
|
.panel-body{ data: { :"nested-form-container" => true } }
|
16
16
|
- if render_partial
|
17
|
-
= render partial: find_partial_for(model,
|
17
|
+
= render partial: find_partial_for(model, form.nested_fields_partial_name), locals: { form: form }.merge(nested_locals)
|
18
18
|
- else
|
19
19
|
= fa_icon "spinner spin"
|
20
20
|
|
@@ -6,4 +6,4 @@
|
|
6
6
|
%i.fa.fa-angle-up
|
7
7
|
|
8
8
|
.panel-body.panel-collapse.form-inputs.collapse{ id: nested_form.nested_resource_dom_id }
|
9
|
-
= render partial: find_partial_for(model,
|
9
|
+
= render partial: find_partial_for(model, form.nested_fields_partial_name), locals: { form: nested_form, parent: nested_form.object }.merge(nested_locals)
|
data/config/locales/en.yml
CHANGED
@@ -13,14 +13,14 @@ en:
|
|
13
13
|
error: "Could not delete %{model}"
|
14
14
|
clone:
|
15
15
|
success: "%{model} cloned"
|
16
|
-
error: "Could not clone %{model}"
|
17
|
-
|
16
|
+
error: "Could not clone %{model}"
|
17
|
+
|
18
18
|
jobs:
|
19
19
|
para/importer/base:
|
20
20
|
progressing: "The file is being imported, please wait a few moments ..."
|
21
21
|
success: "The import of the file was successfully completed"
|
22
22
|
success_with_errors: |
|
23
|
-
The import of the file was done, but some lines
|
23
|
+
The import of the file was done, but some lines
|
24
24
|
were not taken into account due to errors :
|
25
25
|
other_errors: "<br>And <b>%{count}</b> others errors ..."
|
26
26
|
error: "The selected file contains errors and could not be imported"
|
@@ -40,9 +40,6 @@ en:
|
|
40
40
|
confirmation:
|
41
41
|
shared:
|
42
42
|
destroy: 'Are you sure that you want to delete %{model} ?'
|
43
|
-
|
44
|
-
component:
|
45
|
-
none_created: "No components yet ..."
|
46
43
|
|
47
44
|
component:
|
48
45
|
create: "Create a component"
|
@@ -146,7 +143,7 @@ en:
|
|
146
143
|
type: "Type"
|
147
144
|
model_type: "Resource"
|
148
145
|
namespaced: "Only list component's resources"
|
149
|
-
|
146
|
+
|
150
147
|
activemodel:
|
151
148
|
models:
|
152
149
|
settings_rails/form:
|
@@ -76,6 +76,14 @@ module Para
|
|
76
76
|
nested? && options[:parent_builder].object
|
77
77
|
end
|
78
78
|
|
79
|
+
# Returns the partial name to be looked up for rendering used inside the nested
|
80
|
+
# fields partials, for the nested fields container and the remote nested fields
|
81
|
+
# partial.
|
82
|
+
#
|
83
|
+
def nested_fields_partial_name
|
84
|
+
:fields
|
85
|
+
end
|
86
|
+
|
79
87
|
private
|
80
88
|
|
81
89
|
def default_resource_name
|
@@ -3,7 +3,7 @@ module Para
|
|
3
3
|
class NestedManyInput < NestedBaseInput
|
4
4
|
attr_reader :resource
|
5
5
|
|
6
|
-
def input(
|
6
|
+
def input(_wrapper_options = nil)
|
7
7
|
input_html_options[:class] << "nested-many"
|
8
8
|
|
9
9
|
orderable = options.fetch(:orderable, model.orderable?)
|
@@ -40,6 +40,8 @@ module Para
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
private
|
44
|
+
|
43
45
|
def parent_model
|
44
46
|
@parent_model ||= @builder.object.class
|
45
47
|
end
|
@@ -92,9 +92,9 @@ module Para
|
|
92
92
|
end
|
93
93
|
|
94
94
|
content_tag(:th, options) do
|
95
|
-
if (sort = options.delete(:sort))
|
95
|
+
if search && (sort = options.delete(:sort))
|
96
96
|
view.sort_link(search, *sort, label, hide_indicator: true)
|
97
|
-
elsif searchable?(field_name)
|
97
|
+
elsif search && searchable?(field_name)
|
98
98
|
view.sort_link(search, field_name, label, hide_indicator: true)
|
99
99
|
else
|
100
100
|
label
|
data/lib/para/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: para
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valentin Ballestrino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '4.0'
|
20
20
|
- - "<="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '7.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '4.0'
|
30
30
|
- - "<="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '7.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rails-i18n
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,16 +152,22 @@ dependencies:
|
|
152
152
|
name: paperclip
|
153
153
|
requirement: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- - "
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '4.2'
|
158
|
+
- - "<"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '7.0'
|
158
161
|
type: :runtime
|
159
162
|
prerelease: false
|
160
163
|
version_requirements: !ruby/object:Gem::Requirement
|
161
164
|
requirements:
|
162
|
-
- - "
|
165
|
+
- - ">="
|
163
166
|
- !ruby/object:Gem::Version
|
164
167
|
version: '4.2'
|
168
|
+
- - "<"
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '7.0'
|
165
171
|
- !ruby/object:Gem::Dependency
|
166
172
|
name: cancancan
|
167
173
|
requirement: !ruby/object:Gem::Requirement
|
@@ -334,16 +340,22 @@ dependencies:
|
|
334
340
|
name: bootstrap-sass
|
335
341
|
requirement: !ruby/object:Gem::Requirement
|
336
342
|
requirements:
|
337
|
-
- - "
|
343
|
+
- - ">="
|
344
|
+
- !ruby/object:Gem::Version
|
345
|
+
version: '3.3'
|
346
|
+
- - "<"
|
338
347
|
- !ruby/object:Gem::Version
|
339
|
-
version: 3.
|
348
|
+
version: '3.5'
|
340
349
|
type: :runtime
|
341
350
|
prerelease: false
|
342
351
|
version_requirements: !ruby/object:Gem::Requirement
|
343
352
|
requirements:
|
344
|
-
- - "
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '3.3'
|
356
|
+
- - "<"
|
345
357
|
- !ruby/object:Gem::Version
|
346
|
-
version: 3.
|
358
|
+
version: '3.5'
|
347
359
|
- !ruby/object:Gem::Dependency
|
348
360
|
name: font-awesome-rails
|
349
361
|
requirement: !ruby/object:Gem::Requirement
|