@@ -53,15 +53,15 @@ def translated_row(*args, &block)
53
53
if options [ :inline ]
54
54
'' . html_safe . tap do |value |
55
55
# Add selectors for inline locale
56
- value << inline_locale_selectors
56
+ value << inline_locale_selectors ( field , options [ :locale ] , & block )
57
57
# Build translations spans
58
58
value << field_translations ( field , :span , options [ :locale ] , &block )
59
59
end
60
60
else
61
61
content_tag ( :div , class : 'activeadmin-translations' ) do
62
62
'' . html_safe . tap do |value |
63
63
# Render selectors as in translation ui
64
- value << block_locale_selectors
64
+ value << block_locale_selectors ( field , options [ :locale ] , & block )
65
65
# Build translations divs for actual translations
66
66
value << field_translations ( field , :div , options [ :locale ] , &block )
67
67
end
@@ -82,20 +82,18 @@ def translatable?(field)
82
82
# @param [String] field field name to render
83
83
# @param [Symbol] tag tag to enclose field translation
84
84
# @param [Symbol] initial_locale locale to set as not hidden
85
- def field_translations ( field , tag , initial_locale )
85
+ def field_translations ( field , tag , initial_locale , & block )
86
86
available_translations . map do |translation |
87
87
# Classes for translation span only first element is visible
88
88
css_classes = [ 'field-translation' , "locale-#{ translation . locale } " ]
89
89
# Initially only element for selected locale is visible
90
90
css_classes . push 'hidden' unless translation . locale == initial_locale . to_sym
91
91
# Build content for cell or div using translation locale and given block
92
- content = I18n . with_locale ( translation . locale ) do
93
- block_given? ? yield ( translation ) : translation . send ( field )
94
- end
92
+ content = field_translation_value ( translation , field , &block )
95
93
# return element
96
94
if tag == :span # inline element
97
95
# attach class to span if inline
98
- css_classes . push ( : empty) if content . blank?
96
+ css_classes . push ( ' empty' ) if content . blank?
99
97
content_tag ( tag , content . presence || 'Empty' , class : css_classes )
100
98
else
101
99
# block content
@@ -107,25 +105,32 @@ def field_translations(field, tag, initial_locale)
107
105
end . join ( ' ' ) . html_safe
108
106
end
109
107
110
- def block_locale_selectors
108
+ def block_locale_selectors ( field , initial_locale , & block )
111
109
content_tag ( :ul , class : 'available-locales locale-selector' ) do
112
- available_translations . map ( &:locale ) . map do |locale |
113
- default = 'default' if locale == I18n . default_locale
114
- content_tag ( :li , class : 'translation-tab' ) do
115
- I18n . with_locale ( locale ) do
116
- content_tag ( :a , I18n . t ( :"active_admin.globalize.language.#{ locale } " ) , href : ".locale-#{ locale } " , class : default )
110
+ available_translations . map do |translation |
111
+ css_classes = [ 'translation-tab' ]
112
+ css_classes << 'active' if translation . locale == initial_locale . to_sym
113
+ css_classes << 'empty' unless content . presence
114
+ content_tag ( :li , class : css_classes ) do
115
+ I18n . with_locale ( translation . locale ) do
116
+ default = 'default' if translation . locale == initial_locale . to_sym
117
+ content_tag ( :a , I18n . t ( :"active_admin.globalize.language.#{ translation . locale } " ) , href : ".locale-#{ translation . locale } " , class : default )
117
118
end
118
119
end
119
120
end . join . html_safe
120
121
end
121
122
end
122
123
123
124
# Return flag elements to show the given locale using javascript
124
- def inline_locale_selectors
125
+ def inline_locale_selectors ( field , initial_locale , & block )
125
126
content_tag ( :span , class : 'inline-locale-selector' ) do
126
127
available_translations . map do |translation |
128
+ content = field_translation_value ( translation , field , &block )
129
+ css_classes = [ 'ui-translation-trigger' ]
130
+ css_classes << 'active' if translation . locale == initial_locale . to_sym
131
+ css_classes << 'empty' unless content . presence
127
132
# Build a link to show the given translation
128
- link_to ( flag_icon ( translation . locale ) , '#' , class : 'ui-translation-trigger' , data : { locale : translation . locale } )
133
+ link_to ( flag_icon ( translation . locale ) , '#' , class : css_classes , data : { locale : translation . locale } )
129
134
end . join ( ' ' ) . html_safe
130
135
end
131
136
end
@@ -134,6 +139,11 @@ def available_translations
134
139
@record_translations ||= @collection . first . translations . order ( :locale )
135
140
end
136
141
142
+ def field_translation_value ( translation , field )
143
+ I18n . with_locale ( translation . locale ) do
144
+ block_given? ? yield ( translation ) : translation . send ( field )
145
+ end
146
+ end
137
147
end
138
148
end
139
149
end
0 commit comments