para-i18n 0.4.1 → 0.5.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 +5 -5
- data/app/helpers/para/i18n/form_helper.rb +13 -0
- data/app/views/para/admin/resources/_translations_fields.html.haml +9 -0
- data/app/views/para/admin/resources/_translations_form.html.haml +7 -3
- data/lib/generators/para/i18n/base_form_generator.rb +28 -0
- data/lib/generators/para/i18n/form/form_generator.rb +3 -14
- data/lib/generators/para/i18n/form/templates/_translations_form.html.haml +8 -2
- data/lib/generators/para/i18n/nested_fields/nested_fields_generator.rb +18 -0
- data/lib/generators/para/i18n/nested_fields/templates/_translations_fields.html.haml +11 -0
- data/lib/generators/para/i18n/translate/templates/model_migration.rb.erb +1 -1
- data/lib/para/i18n.rb +3 -0
- data/lib/para/i18n/form_builder.rb +10 -0
- data/lib/para/i18n/form_builder/nested_form.rb +46 -0
- data/lib/para/i18n/form_builder/translations_form.rb +42 -0
- data/lib/para/i18n/friendly_id.rb +1 -1
- data/lib/para/i18n/helpers/translations_helper.rb +9 -0
- data/lib/para/i18n/i18n_input.rb +5 -5
- data/lib/para/i18n/inputs.rb +4 -0
- data/lib/para/i18n/inputs/nested_many_input.rb +41 -0
- data/lib/para/i18n/version.rb +1 -1
- data/para-i18n.gemspec +1 -1
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 90d12992580fc4a99c6c61436e3fda627f33c8064316d72d9dac154234bf7e58
|
4
|
+
data.tar.gz: 4592e7c3895bc9200f212879171f5b039d75884bd0dfa73f576a8624346fbd5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cf9a1a632377a4d9d4f0780401028e4fd44b6991427a96af28e9ea21414d804a3ad97d0ca552b051fe43848a0c98f5df703a999e104bd0a8eae9309a3b7d69c
|
7
|
+
data.tar.gz: f676eac78ac6492fc3a283a162a0e06874d55873ead0e5a0c429ed93cc2445e6dfa2f0491e51e08626eca37dbcc59c08eaba07a083248c843d9d84c67a9bd8af
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Para
|
2
|
+
module I18n
|
3
|
+
module FormHelper
|
4
|
+
def para_translations_form_for(resource, options = {}, &block)
|
5
|
+
extended_options = options.reverse_merge(
|
6
|
+
Para::I18n::FormBuilder::TranslationsForm::TRANSLATIONS_FORM_PARAM_KEY => true
|
7
|
+
)
|
8
|
+
|
9
|
+
para_form_for(resource, extended_options, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
= form.fieldset do
|
2
|
+
- I18n.with_locale(@target_locale) do
|
3
|
+
= form.input :_disabled_for_locale, as: :boolean, label: t("para.i18n.disabled_for_locale")
|
4
|
+
|
5
|
+
- translated_model_fields_for(form.object.class).each do |field|
|
6
|
+
= form.input field.field_name, as: :i18n
|
7
|
+
|
8
|
+
- nested_relations_attributes_for(form.object.class).each do |field|
|
9
|
+
= form.input field.field_name, as: field.field_type
|
@@ -1,10 +1,14 @@
|
|
1
|
-
=
|
1
|
+
= para_translations_form_for(resource, url: @component.relation_path(resource, :translation), locale: @target_locale) do |form|
|
2
2
|
= target_locale_select
|
3
3
|
|
4
4
|
= form.fieldset do
|
5
|
-
|
5
|
+
- I18n.with_locale(@target_locale) do
|
6
|
+
= form.input :_disabled_for_locale, as: :boolean, label: t("para.i18n.disabled_for_locale")
|
6
7
|
|
7
8
|
- translated_model_fields_for(resource.class).each do |field|
|
8
|
-
= form.input field.field_name, as: :i18n
|
9
|
+
= form.input field.field_name, as: :i18n
|
10
|
+
|
11
|
+
- nested_relations_attributes_for(resource.class).each do |field|
|
12
|
+
= form.input field.field_name, as: field.field_type
|
9
13
|
|
10
14
|
= form.actions(except: :submit_and_add_another)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Para
|
2
|
+
module I18n
|
3
|
+
module FormGeneratorConcern
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
include Para::Admin::BaseHelper
|
8
|
+
include Para::Generators::FieldHelpers
|
9
|
+
include Para::ModelHelper
|
10
|
+
include Para::I18n::Helpers::TranslationsHelper
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def translated_attributes
|
16
|
+
translated_model_fields_for(model)
|
17
|
+
end
|
18
|
+
|
19
|
+
def nested_relations_attributes
|
20
|
+
nested_relations_attributes_for(model)
|
21
|
+
end
|
22
|
+
|
23
|
+
def model
|
24
|
+
@model ||= class_name.constantize
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
|
+
require "generators/para/i18n/base_form_generator"
|
2
|
+
|
1
3
|
module Para
|
2
4
|
module I18n
|
3
5
|
class FormGenerator < Para::Generators::NamedBase
|
4
|
-
include Para::
|
5
|
-
include Para::Generators::FieldHelpers
|
6
|
-
include Para::ModelHelper
|
7
|
-
include Para::I18n::Helpers::TranslationsHelper
|
6
|
+
include Para::I18n::FormGeneratorConcern
|
8
7
|
|
9
8
|
source_root File.expand_path("../templates", __FILE__)
|
10
9
|
|
@@ -14,16 +13,6 @@ module Para
|
|
14
13
|
"app/views/admin/#{ plural_namespaced_path }/_translations_form.html.haml"
|
15
14
|
)
|
16
15
|
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def translated_attributes
|
21
|
-
translated_model_fields_for(model)
|
22
|
-
end
|
23
|
-
|
24
|
-
def model
|
25
|
-
@model ||= class_name.constantize
|
26
|
-
end
|
27
16
|
end
|
28
17
|
end
|
29
18
|
end
|
@@ -1,9 +1,15 @@
|
|
1
|
-
=
|
1
|
+
= para_translations_form_for(resource, url: @component.relation_path(resource, :translation), locale: @target_locale) do |form|
|
2
2
|
= target_locale_select
|
3
3
|
|
4
4
|
= form.fieldset do
|
5
|
+
- I18n.with_locale(@target_locale) do
|
6
|
+
= form.input :_disabled_for_locale, as: :boolean, label: t("para.i18n.disabled_for_locale")
|
7
|
+
|
5
8
|
<%- translated_attributes.each do |field| -%>
|
6
|
-
= form.input :<%= field.field_name %>, as: :i18n
|
9
|
+
= form.input :<%= field.field_name %>, as: :i18n
|
10
|
+
<%- end -%>
|
11
|
+
<%- nested_relations_attributes.each do |field| -%>
|
12
|
+
= form.input :<%= field.field_name %>, as: :<%= field.field_type %>
|
7
13
|
<%- end -%>
|
8
14
|
|
9
15
|
= form.actions(except: :submit_and_add_another)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "generators/para/i18n/base_form_generator"
|
2
|
+
|
3
|
+
module Para
|
4
|
+
module I18n
|
5
|
+
class NestedFieldsGenerator < Para::Generators::NamedBase
|
6
|
+
include Para::I18n::FormGeneratorConcern
|
7
|
+
|
8
|
+
source_root File.expand_path("../templates", __FILE__)
|
9
|
+
|
10
|
+
def generate_nested_fields
|
11
|
+
template(
|
12
|
+
"_translations_fields.html.haml",
|
13
|
+
"app/views/admin/#{ plural_namespaced_path }/_translations_fields.html.haml"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
= form.fieldset do
|
2
|
+
- I18n.with_locale(@target_locale) do
|
3
|
+
= form.input :_disabled_for_locale, as: :boolean, label: t("para.i18n.disabled_for_locale")
|
4
|
+
|
5
|
+
<%- translated_attributes.each do |field| -%>
|
6
|
+
= form.input :<%= field.field_name %>, as: :i18n
|
7
|
+
<%- end -%>
|
8
|
+
<%- nested_relations_attributes.each do |field| -%>
|
9
|
+
= form.input :<%= field.field_name %>, as: :<%= field.field_type %>
|
10
|
+
<%- end -%>
|
11
|
+
|
data/lib/para/i18n.rb
CHANGED
@@ -13,6 +13,9 @@ require 'para/i18n/attribute_translation/base'
|
|
13
13
|
require 'para/i18n/attribute_translation/simple_attribute'
|
14
14
|
require 'para/i18n/attribute_translation/attachment'
|
15
15
|
|
16
|
+
require 'para/i18n/form_builder'
|
17
|
+
require 'para/i18n/inputs'
|
18
|
+
|
16
19
|
require 'para/i18n/friendly_id'
|
17
20
|
|
18
21
|
require 'para/i18n/i18n_input'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'para/form_builder'
|
2
|
+
|
3
|
+
require 'para/i18n/form_builder/nested_form'
|
4
|
+
require 'para/i18n/form_builder/translations_form'
|
5
|
+
|
6
|
+
# Extend the para extended simple_form form builder to included translations related
|
7
|
+
# methods.
|
8
|
+
#
|
9
|
+
SimpleForm::FormBuilder.prepend(Para::I18n::FormBuilder::NestedForm)
|
10
|
+
SimpleForm::FormBuilder.prepend(Para::I18n::FormBuilder::TranslationsForm)
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
3
|
+
module Para
|
4
|
+
module I18n
|
5
|
+
module FormBuilder
|
6
|
+
# Thid module provides methods to extend the para's nested form functionality by
|
7
|
+
# extending the SimpleForm::FormBuilder.
|
8
|
+
#
|
9
|
+
module NestedForm
|
10
|
+
# Traverses the parent_builder chain until the top of the builder chain returning
|
11
|
+
# the top-most form builder which represents the one created through the
|
12
|
+
# `form_for` like helper.
|
13
|
+
#
|
14
|
+
# Note that this could go into the Para::FormBuilder::NestedForm module, but it's
|
15
|
+
# not used inside Para, so we keep it here for now.
|
16
|
+
#
|
17
|
+
def top_level_form_builder
|
18
|
+
parent_builder = options[:parent_builder]
|
19
|
+
|
20
|
+
while parent_builder && parent_builder.options[:parent_builder]
|
21
|
+
parent_builder = parent_builder.options[:parent_builder]
|
22
|
+
end
|
23
|
+
|
24
|
+
parent_builder || self
|
25
|
+
end
|
26
|
+
|
27
|
+
# Don't allow nested fields destruction if we're in a translations form as this is
|
28
|
+
# the method used by the FormBuilder#remove_association_button method to check
|
29
|
+
# whether it's allowed to render the remove button or not.
|
30
|
+
#
|
31
|
+
def allow_destroy?
|
32
|
+
return false if translations_form?
|
33
|
+
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
# Overrides the Para::FormBuilder::NestedForm#fields_partial_name method to render
|
38
|
+
# a different nested fields partial when the builder is a translations form
|
39
|
+
#
|
40
|
+
def nested_fields_partial_name
|
41
|
+
translations_form? ? :translations_fields : :fields
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
3
|
+
module Para
|
4
|
+
module I18n
|
5
|
+
module FormBuilder
|
6
|
+
# Thid module extends the Para overriden SimpleForm::FormBuilder to include some
|
7
|
+
# trnaslations form related methods and overrides, allowing a simple use of
|
8
|
+
# translations forms with the para-i18n gem.
|
9
|
+
#
|
10
|
+
module TranslationsForm
|
11
|
+
TRANSLATIONS_FORM_PARAM_KEY = :_translations_form
|
12
|
+
|
13
|
+
# Allows storing a gobal reference to the target locale of the translations form,
|
14
|
+
# which allows input objects to fetch it directly, without having to provide
|
15
|
+
# manually the :locale parameter for each input
|
16
|
+
#
|
17
|
+
# Example :
|
18
|
+
#
|
19
|
+
# = para_translations_form_for(resource, locale: @target_Locale) do |form|
|
20
|
+
# = form.input :title, as: :i18n # No need to pass `:locale` option here.
|
21
|
+
#
|
22
|
+
def target_locale
|
23
|
+
top_level_form_builder.options.with_indifferent_access[:locale]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Allows checking if the current form builder is a translations form, depending
|
27
|
+
# on the passed TRANSLATIONS_FORM_PARAM_KEY option. This is automatically passed
|
28
|
+
# to the form builder when using the `para_translations_form_for` helper.
|
29
|
+
#
|
30
|
+
# Example :
|
31
|
+
#
|
32
|
+
# para_translations_form_for(resource)
|
33
|
+
# # OR
|
34
|
+
# para_form_for(resource, _translations_form: true)
|
35
|
+
#
|
36
|
+
def translations_form?
|
37
|
+
!!top_level_form_builder.options.with_indifferent_access[TRANSLATIONS_FORM_PARAM_KEY]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -14,7 +14,7 @@ module FriendlyId
|
|
14
14
|
# model. Example :
|
15
15
|
model_class.instance_eval do
|
16
16
|
relation.class.send(:include, ClassMethods)
|
17
|
-
if (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 2) || ActiveRecord::VERSION::MAJOR
|
17
|
+
if (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 2) || ActiveRecord::VERSION::MAJOR >= 5
|
18
18
|
model_class.send(:extend, ClassMethods)
|
19
19
|
end
|
20
20
|
end
|
@@ -9,6 +9,15 @@ module Para
|
|
9
9
|
model.translated_attribute_names.include?(field.name.to_sym)
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
def nested_relations_attributes_for(model)
|
14
|
+
model_field_mappings(model).fields.select do |field|
|
15
|
+
next unless field.field_type.in?(["nested_one", "nested_many"])
|
16
|
+
|
17
|
+
# This returns nil if the target model is not translated
|
18
|
+
model.reflect_on_association(field.name).klass.translatable?
|
19
|
+
end
|
20
|
+
end
|
12
21
|
end
|
13
22
|
end
|
14
23
|
end
|
data/lib/para/i18n/i18n_input.rb
CHANGED
@@ -26,11 +26,11 @@ module Para
|
|
26
26
|
private
|
27
27
|
|
28
28
|
def locale
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
locale = options.fetch(:locale, @builder.target_locale)
|
30
|
+
return locale if locale.present?
|
31
|
+
|
32
|
+
raise 'No target locale for the current i18n input. Please provide a `:locale`' \
|
33
|
+
'option to the :i18n input or the `para_translations_form_for` method'
|
34
34
|
end
|
35
35
|
|
36
36
|
def original_content
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Para
|
2
|
+
module I18n
|
3
|
+
module Inputs
|
4
|
+
module NestedManyInput
|
5
|
+
def input(_wrapper_options = nil)
|
6
|
+
# Disable the add button and orderable features of the input.
|
7
|
+
# Note : The remove button disabling is done by the
|
8
|
+
# Para::I18n::FormBuilder::TranslationsForm extension
|
9
|
+
if within_translations_form?
|
10
|
+
options[:add_button] = false
|
11
|
+
options[:orderable] = false
|
12
|
+
end
|
13
|
+
|
14
|
+
super
|
15
|
+
end
|
16
|
+
private
|
17
|
+
|
18
|
+
def within_translations_form?
|
19
|
+
@builder.translations_form?
|
20
|
+
end
|
21
|
+
|
22
|
+
# Extend remote partial params with the :_translations_form key if we're in the
|
23
|
+
# context of a translations form builder.
|
24
|
+
#
|
25
|
+
def remote_partial_params
|
26
|
+
super.tap do |remote_partial_params|
|
27
|
+
if within_translations_form?
|
28
|
+
remote_partial_params.deep_merge!(
|
29
|
+
builder_options: {
|
30
|
+
Para::I18n::FormBuilder::TranslationsForm::TRANSLATIONS_FORM_PARAM_KEY => true,
|
31
|
+
locale: @builder.target_locale
|
32
|
+
}
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
data/lib/para/i18n/version.rb
CHANGED
data/para-i18n.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "para", "
|
22
|
+
spec.add_dependency "para", ">= 0.9.2", "<= 1.0"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.11"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: para-i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valentin Ballestrino
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
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: para
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.2
|
20
|
+
- - "<="
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
22
|
+
version: '1.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.2
|
30
|
+
- - "<="
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
32
|
+
version: '1.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,14 +89,19 @@ files:
|
|
83
89
|
- app/assets/javascripts/para/admin/translation.coffee
|
84
90
|
- app/assets/javascripts/para/i18n.coffee
|
85
91
|
- app/controllers/para/admin/translations_controller.rb
|
92
|
+
- app/helpers/para/i18n/form_helper.rb
|
93
|
+
- app/views/para/admin/resources/_translations_fields.html.haml
|
86
94
|
- app/views/para/admin/resources/_translations_form.html.haml
|
87
95
|
- app/views/para/admin/translations/_target_locale_select.html.haml
|
88
96
|
- app/views/para/admin/translations/edit.html.haml
|
89
97
|
- bin/console
|
90
98
|
- bin/setup
|
91
99
|
- config/locales/para-i18n.fr.yml
|
100
|
+
- lib/generators/para/i18n/base_form_generator.rb
|
92
101
|
- lib/generators/para/i18n/form/form_generator.rb
|
93
102
|
- lib/generators/para/i18n/form/templates/_translations_form.html.haml
|
103
|
+
- lib/generators/para/i18n/nested_fields/nested_fields_generator.rb
|
104
|
+
- lib/generators/para/i18n/nested_fields/templates/_translations_fields.html.haml
|
94
105
|
- lib/generators/para/i18n/translate/templates/model_migration.rb.erb
|
95
106
|
- lib/generators/para/i18n/translate/translate_generator.rb
|
96
107
|
- lib/para/i18n.rb
|
@@ -100,11 +111,16 @@ files:
|
|
100
111
|
- lib/para/i18n/attribute_translation/simple_attribute.rb
|
101
112
|
- lib/para/i18n/engine.rb
|
102
113
|
- lib/para/i18n/fallbacks.rb
|
114
|
+
- lib/para/i18n/form_builder.rb
|
115
|
+
- lib/para/i18n/form_builder/nested_form.rb
|
116
|
+
- lib/para/i18n/form_builder/translations_form.rb
|
103
117
|
- lib/para/i18n/friendly_id.rb
|
104
118
|
- lib/para/i18n/helpers.rb
|
105
119
|
- lib/para/i18n/helpers/translations_form_helper.rb
|
106
120
|
- lib/para/i18n/helpers/translations_helper.rb
|
107
121
|
- lib/para/i18n/i18n_input.rb
|
122
|
+
- lib/para/i18n/inputs.rb
|
123
|
+
- lib/para/i18n/inputs/nested_many_input.rb
|
108
124
|
- lib/para/i18n/model.rb
|
109
125
|
- lib/para/i18n/resources_buttons.rb
|
110
126
|
- lib/para/i18n/resources_table.rb
|
@@ -129,8 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
145
|
- !ruby/object:Gem::Version
|
130
146
|
version: '0'
|
131
147
|
requirements: []
|
132
|
-
|
133
|
-
rubygems_version: 2.6.11
|
148
|
+
rubygems_version: 3.1.4
|
134
149
|
signing_key:
|
135
150
|
specification_version: 4
|
136
151
|
summary: Para CMS I18n admin module for models
|