lato_blog 2.1

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.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +27 -0
  4. data/Rakefile +5 -0
  5. data/app/assets/config/lato_blog_manifest.js +2 -0
  6. data/app/assets/javascripts/lato_blog/application.js +19 -0
  7. data/app/assets/javascripts/lato_blog/initializers/Fields.js +56 -0
  8. data/app/assets/javascripts/lato_blog/initializers/Posts.js +54 -0
  9. data/app/assets/stylesheets/lato_blog/_helpers.scss +37 -0
  10. data/app/assets/stylesheets/lato_blog/application.scss +20 -0
  11. data/app/assets/stylesheets/lato_blog/fields/_composed.scss +7 -0
  12. data/app/assets/stylesheets/lato_blog/fields/_datetime.scss +0 -0
  13. data/app/assets/stylesheets/lato_blog/fields/_editor.scss +3 -0
  14. data/app/assets/stylesheets/lato_blog/fields/_fields.scss +8 -0
  15. data/app/assets/stylesheets/lato_blog/fields/_general.scss +9 -0
  16. data/app/assets/stylesheets/lato_blog/fields/_geolocalization.scss +3 -0
  17. data/app/assets/stylesheets/lato_blog/fields/_image.scss +3 -0
  18. data/app/assets/stylesheets/lato_blog/fields/_relay.scss +121 -0
  19. data/app/assets/stylesheets/lato_blog/fields/_text.scss +3 -0
  20. data/app/assets/stylesheets/lato_blog/pages/_categories.scss +18 -0
  21. data/app/assets/stylesheets/lato_blog/pages/_pages.scss +2 -0
  22. data/app/assets/stylesheets/lato_blog/pages/_posts.scss +25 -0
  23. data/app/assets/stylesheets/lato_blog/theme.scss.erb +12 -0
  24. data/app/assets/stylesheets/lato_blog/widgets/_switchlang.scss +3 -0
  25. data/app/assets/stylesheets/lato_blog/widgets/_widgets.scss +1 -0
  26. data/app/controllers/lato_blog/api/api_controller.rb +5 -0
  27. data/app/controllers/lato_blog/api/categories_controller.rb +51 -0
  28. data/app/controllers/lato_blog/api/posts_controller.rb +93 -0
  29. data/app/controllers/lato_blog/application_controller.rb +13 -0
  30. data/app/controllers/lato_blog/back/back_controller.rb +45 -0
  31. data/app/controllers/lato_blog/back/categories_controller.rb +141 -0
  32. data/app/controllers/lato_blog/back/post_fields_controller.rb +86 -0
  33. data/app/controllers/lato_blog/back/posts_controller.rb +340 -0
  34. data/app/controllers/lato_blog/doc/doc_controller.rb +16 -0
  35. data/app/controllers/lato_blog/doc/fields_controller.rb +19 -0
  36. data/app/controllers/lato_blog/doc/general_controller.rb +11 -0
  37. data/app/helpers/lato_blog/application_helper.rb +13 -0
  38. data/app/helpers/lato_blog/fields_helper.rb +100 -0
  39. data/app/jobs/lato_blog/application_job.rb +4 -0
  40. data/app/mailers/lato_blog/application_mailer.rb +6 -0
  41. data/app/models/lato_blog/application_record.rb +5 -0
  42. data/app/models/lato_blog/category.rb +119 -0
  43. data/app/models/lato_blog/category/entity_helpers.rb +55 -0
  44. data/app/models/lato_blog/category/serializer_helpers.rb +66 -0
  45. data/app/models/lato_blog/category_parent.rb +9 -0
  46. data/app/models/lato_blog/category_post.rb +35 -0
  47. data/app/models/lato_blog/post.rb +112 -0
  48. data/app/models/lato_blog/post/entity_helpers.rb +42 -0
  49. data/app/models/lato_blog/post/serializer_helpers.rb +85 -0
  50. data/app/models/lato_blog/post_field.rb +50 -0
  51. data/app/models/lato_blog/post_field/entity_helpers.rb +5 -0
  52. data/app/models/lato_blog/post_field/serializer_helpers.rb +127 -0
  53. data/app/models/lato_blog/post_parent.rb +20 -0
  54. data/app/views/lato_blog/back/back/switch_current_language.js +2 -0
  55. data/app/views/lato_blog/back/categories/edit.html.erb +44 -0
  56. data/app/views/lato_blog/back/categories/index.html.erb +18 -0
  57. data/app/views/lato_blog/back/categories/new.html.erb +40 -0
  58. data/app/views/lato_blog/back/categories/shared/_form.html.erb +38 -0
  59. data/app/views/lato_blog/back/categories/shared/edit/_edit_child_tree.html.erb +23 -0
  60. data/app/views/lato_blog/back/categories/shared/edit/_edit_child_tree_level.html.erb +7 -0
  61. data/app/views/lato_blog/back/categories/shared/edit/_edit_informations.html.erb +24 -0
  62. data/app/views/lato_blog/back/categories/shared/edit/_edit_languages.html.erb +38 -0
  63. data/app/views/lato_blog/back/categories/shared/new/_new_informations.html.erb +21 -0
  64. data/app/views/lato_blog/back/post_fields/create_relay_field.js.erb +14 -0
  65. data/app/views/lato_blog/back/post_fields/destroy_relay_field.js.erb +14 -0
  66. data/app/views/lato_blog/back/post_fields/fields/_composed.html.erb +24 -0
  67. data/app/views/lato_blog/back/post_fields/fields/_datetime.html.erb +17 -0
  68. data/app/views/lato_blog/back/post_fields/fields/_editor.html.erb +17 -0
  69. data/app/views/lato_blog/back/post_fields/fields/_geolocalization.html.erb +22 -0
  70. data/app/views/lato_blog/back/post_fields/fields/_image.html.erb +18 -0
  71. data/app/views/lato_blog/back/post_fields/fields/_relay.html.erb +39 -0
  72. data/app/views/lato_blog/back/post_fields/fields/_text.html.erb +17 -0
  73. data/app/views/lato_blog/back/post_fields/index.html.erb +28 -0
  74. data/app/views/lato_blog/back/posts/edit.html.erb +48 -0
  75. data/app/views/lato_blog/back/posts/index.html.erb +38 -0
  76. data/app/views/lato_blog/back/posts/new.html.erb +40 -0
  77. data/app/views/lato_blog/back/posts/shared/_fields.html.erb +13 -0
  78. data/app/views/lato_blog/back/posts/shared/_form.html.erb +69 -0
  79. data/app/views/lato_blog/back/posts/shared/edit/_edit_categories.html.erb +36 -0
  80. data/app/views/lato_blog/back/posts/shared/edit/_edit_informations.html.erb +26 -0
  81. data/app/views/lato_blog/back/posts/shared/edit/_edit_languages.html.erb +40 -0
  82. data/app/views/lato_blog/back/posts/shared/edit/_edit_pubblication_datetime.html.erb +24 -0
  83. data/app/views/lato_blog/back/posts/shared/edit/_edit_status_switch.html.erb +27 -0
  84. data/app/views/lato_blog/back/posts/shared/index/_index.html.erb +28 -0
  85. data/app/views/lato_blog/back/posts/shared/index/_index_informations.html.erb +37 -0
  86. data/app/views/lato_blog/back/posts/shared/index/_index_status_switch.html.erb +29 -0
  87. data/app/views/lato_blog/back/posts/shared/new/_new_informations.html.erb +21 -0
  88. data/app/views/lato_blog/doc/doc/index.html.erb +83 -0
  89. data/app/views/lato_blog/doc/fields/composed.html.erb +87 -0
  90. data/app/views/lato_blog/doc/fields/datetime.html.erb +0 -0
  91. data/app/views/lato_blog/doc/fields/editor.html.erb +1 -0
  92. data/app/views/lato_blog/doc/fields/geolocalization.html.erb +1 -0
  93. data/app/views/lato_blog/doc/fields/image.html.erb +70 -0
  94. data/app/views/lato_blog/doc/fields/relay.html.erb +87 -0
  95. data/app/views/lato_blog/doc/fields/text.html.erb +70 -0
  96. data/app/views/lato_blog/doc/general/api.html.erb +0 -0
  97. data/app/views/lato_blog/doc/general/installation.html.erb +49 -0
  98. data/app/views/lato_blog/doc/general/personalization.html.erb +0 -0
  99. data/app/views/lato_blog/partials/_relay_destroy_button.html.erb +5 -0
  100. data/app/views/lato_blog/widgets/_switchlang.html.erb +20 -0
  101. data/config/configs.yml +109 -0
  102. data/config/initializers/assets.rb +4 -0
  103. data/config/initializers/init_system.rb +22 -0
  104. data/config/languages/default.yml +87 -0
  105. data/config/languages/it.yml +87 -0
  106. data/config/routes.rb +16 -0
  107. data/config/routes/api.rb +11 -0
  108. data/config/routes/back.rb +17 -0
  109. data/config/routes/doc.rb +19 -0
  110. data/db/migrate/20170504222008_create_lato_blog_posts.rb +19 -0
  111. data/db/migrate/20170504223521_create_lato_blog_post_parents.rb +9 -0
  112. data/db/migrate/20170516063317_create_lato_blog_categories.rb +16 -0
  113. data/db/migrate/20170516063320_create_lato_blog_category_parents.rb +9 -0
  114. data/db/migrate/20170516063330_create_lato_blog_category_posts.rb +10 -0
  115. data/db/migrate/20170516063330_create_lato_blog_post_fields.rb +18 -0
  116. data/lib/lato_blog.rb +6 -0
  117. data/lib/lato_blog/engine.rb +15 -0
  118. data/lib/lato_blog/interface.rb +17 -0
  119. data/lib/lato_blog/interfaces/categories.rb +34 -0
  120. data/lib/lato_blog/interfaces/fields.rb +195 -0
  121. data/lib/lato_blog/interfaces/languages.rb +15 -0
  122. data/lib/lato_blog/interfaces/posts.rb +13 -0
  123. data/lib/lato_blog/version.rb +3 -0
  124. data/lib/tasks/lato_blog_tasks.rake +4 -0
  125. metadata +223 -0
@@ -0,0 +1,340 @@
1
+ module LatoBlog
2
+ class Back::PostsController < Back::BackController
3
+
4
+ before_action do
5
+ core__set_menu_active_item('blog_articles')
6
+ end
7
+
8
+ # This function shows the list of published posts.
9
+ def index
10
+ core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:posts])
11
+ # find correct status to show
12
+ @posts_status = 'published'
13
+ @posts_status = 'drafted' if params[:status] && params[:status] === 'drafted'
14
+ @posts_status = 'deleted' if params[:status] && params[:status] === 'deleted'
15
+ # find informations data
16
+ @posts_informations = {
17
+ published_length: LatoBlog::Post.published.where(meta_language: cookies[:lato_blog__current_language]).length,
18
+ drafted_length: LatoBlog::Post.drafted.where(meta_language: cookies[:lato_blog__current_language]).length,
19
+ deleted_length: LatoBlog::Post.deleted.where(meta_language: cookies[:lato_blog__current_language]).length
20
+ }
21
+ # find posts to show
22
+ @posts = LatoBlog::Post.where(meta_status: @posts_status,
23
+ meta_language: cookies[:lato_blog__current_language]).joins(:post_parent).order('lato_blog_post_parents.publication_datetime DESC')
24
+
25
+ @widget_index_posts = core__widgets_index(@posts, search: 'title', pagination: 10)
26
+ end
27
+
28
+ # This function shows a single post. It create a redirect to the edit path.
29
+ def show
30
+ # use edit as default post show page
31
+ redirect_to lato_blog.edit_post_path(params[:id])
32
+ end
33
+
34
+ # This function shows the view to create a new post.
35
+ def new
36
+ core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:posts_new])
37
+ @post = LatoBlog::Post.new
38
+
39
+ set_current_language params[:language] if params[:language]
40
+
41
+ if params[:parent]
42
+ @post_parent = LatoBlog::PostParent.find_by(id: params[:parent])
43
+ end
44
+
45
+ fetch_external_objects
46
+ end
47
+
48
+ # This function creates a new post.
49
+ def create
50
+ @post = LatoBlog::Post.new(new_post_params)
51
+
52
+ unless @post.save
53
+ flash[:danger] = @post.errors.full_messages.to_sentence
54
+ redirect_to lato_blog.new_post_path
55
+ return
56
+ end
57
+
58
+ flash[:success] = LANGUAGES[:lato_blog][:flashes][:post_create_success]
59
+ redirect_to lato_blog.post_path(@post.id)
60
+ end
61
+
62
+ # This function show the view to edit a post.
63
+ def edit
64
+ core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:posts_edit])
65
+ @post = LatoBlog::Post.find_by(id: params[:id])
66
+ return unless check_post_presence
67
+
68
+ if @post.meta_language != cookies[:lato_blog__current_language]
69
+ set_current_language @post.meta_language
70
+ end
71
+
72
+ fetch_external_objects
73
+ end
74
+
75
+ # This function updates a post.
76
+ def update
77
+ @post = LatoBlog::Post.find_by(id: params[:id])
78
+ return unless check_post_presence
79
+
80
+ # update for autosaving
81
+ autosaving = params[:autosave] && params[:autosave] == 'true'
82
+ if autosaving
83
+ @post.update(edit_post_params)
84
+ update_fields
85
+ render status: 200, json: {} # render something positive :)
86
+ return
87
+ end
88
+
89
+ # check post data update
90
+ unless @post.update(edit_post_params)
91
+ flash[:danger] = @post.errors.full_messages.to_sentence
92
+ redirect_to lato_blog.edit_post_path(@post.id)
93
+ return
94
+ end
95
+
96
+ # update single fields
97
+ unless update_fields
98
+ flash[:warning] = LANGUAGES[:lato_blog][:flashes][:post_update_fields_warning]
99
+ redirect_to lato_blog.edit_post_path(@post.id)
100
+ return
101
+ end
102
+
103
+ # render positive response
104
+ flash[:success] = LANGUAGES[:lato_blog][:flashes][:post_update_success]
105
+ redirect_to lato_blog.post_path(@post.id)
106
+ end
107
+
108
+ # This function updates the status of a post.
109
+ def update_status
110
+ @post = LatoBlog::Post.find_by(id: params[:id])
111
+ return unless check_post_presence
112
+
113
+ @post.update(meta_status: params[:status])
114
+ end
115
+
116
+ # This function updates the publication datetime of a post (update the post parent).
117
+ def update_publication_datetime
118
+ @post = LatoBlog::Post.find_by(id: params[:id])
119
+ return unless check_post_presence
120
+
121
+ @post.post_parent.update(publication_datetime: params[:publication_datetime])
122
+ end
123
+
124
+ # This function updates the categories of a post.
125
+ def update_categories
126
+ @post = LatoBlog::Post.find_by(id: params[:id])
127
+ return unless check_post_presence
128
+
129
+ params[:categories].each do |category_id, value|
130
+ category = LatoBlog::Category.find_by(id: category_id)
131
+ next if !category || category.meta_language != @post.meta_language
132
+
133
+ category_post = LatoBlog::CategoryPost.find_by(lato_blog_post_id: @post.id, lato_blog_category_id: category.id)
134
+ if value == 'true'
135
+ LatoBlog::CategoryPost.create(lato_blog_post_id: @post.id, lato_blog_category_id: category.id) unless category_post
136
+ else
137
+ category_post.destroy if category_post
138
+ end
139
+ end
140
+ end
141
+
142
+ # This function destroyes a post.
143
+ def destroy
144
+ @post = LatoBlog::Post.find_by(id: params[:id])
145
+ return unless check_post_presence
146
+
147
+ unless @post.destroy
148
+ flash[:danger] = @post.post_parent.errors.full_messages.to_sentence
149
+ redirect_to lato_blog.edit_post_path(@post.id)
150
+ return
151
+ end
152
+
153
+ flash[:success] = LANGUAGES[:lato_blog][:flashes][:post_destroy_success]
154
+ redirect_to lato_blog.posts_path(status: 'deleted')
155
+ end
156
+
157
+ # Tis function destroyes all posts with status deleted.
158
+ def destroy_all_deleted
159
+ @posts = LatoBlog::Post.deleted
160
+
161
+ if !@posts || @posts.empty?
162
+ flash[:warning] = LANGUAGES[:lato_blog][:flashes][:deleted_posts_not_found]
163
+ redirect_to lato_blog.posts_path(status: 'deleted')
164
+ return
165
+ end
166
+
167
+ @posts.each do |post|
168
+ unless post.destroy
169
+ flash[:danger] = post.errors.full_messages.to_sentence
170
+ redirect_to lato_blog.edit_post_path(post.id)
171
+ return
172
+ end
173
+ end
174
+
175
+ flash[:success] = LANGUAGES[:lato_blog][:flashes][:deleted_posts_destroy_success]
176
+ redirect_to lato_blog.posts_path(status: 'deleted')
177
+ end
178
+
179
+ # Private functions:
180
+ # **************************************************************************
181
+
182
+ private
183
+
184
+ def fetch_external_objects
185
+ @categories = LatoBlog::Category.all.where(meta_language: cookies[:lato_blog__current_language])
186
+ @medias = LatoMedia::Media.all
187
+ end
188
+
189
+ # This function checks the @post variable is present and redirect to index if it not exist.
190
+ def check_post_presence
191
+ if !@post
192
+ flash[:warning] = LANGUAGES[:lato_blog][:flashes][:post_not_found]
193
+ redirect_to lato_blog.posts_path
194
+ return false
195
+ end
196
+
197
+ true
198
+ end
199
+
200
+ # Update fields helpers:
201
+ # **************************************************************************
202
+
203
+ # This function checks all fields params and update the value
204
+ # on the database for the field.
205
+ def update_fields
206
+ return true unless params[:fields]
207
+ params[:fields].each do |id, value|
208
+ field = @post.post_fields.find_by(id: id)
209
+ return false unless field
210
+ return false unless update_field(field, value)
211
+ end
212
+ true
213
+ end
214
+
215
+ # This function updates a single field from its key and value.
216
+ def update_field(field, value)
217
+ case field.typology
218
+ when 'text'
219
+ update_field_text(field, value)
220
+ when 'datetime'
221
+ update_field_datetime(field, value)
222
+ when 'editor'
223
+ update_field_editor(field, value)
224
+ when 'geolocalization'
225
+ update_field_geolocalization(field, value)
226
+ when 'image'
227
+ update_field_image(field, value)
228
+ when 'composed'
229
+ update_field_composed(field, value)
230
+ when 'relay'
231
+ update_field_relay(field, value)
232
+ end
233
+ end
234
+
235
+ # Update specific fields helpers:
236
+ # **************************************************************************
237
+
238
+ # Text.
239
+ def update_field_text(field, value)
240
+ field.update(value: value)
241
+ end
242
+
243
+ # Datetime.
244
+ def update_field_datetime(field, value)
245
+ field.update(value: value)
246
+ end
247
+
248
+ # Editor.
249
+ def update_field_editor(field, value)
250
+ field.update(value: value)
251
+ end
252
+
253
+ # Geolocalization.
254
+ def update_field_geolocalization(field, value)
255
+ final_value = {
256
+ lat: value[:lat],
257
+ lng: value[:lng],
258
+ address: value[:address]
259
+ }
260
+ field.update(value: final_value)
261
+ end
262
+
263
+ # Image.
264
+ def update_field_image(field, value)
265
+ field.update(value: value)
266
+ end
267
+
268
+ # Composed.
269
+ def update_field_composed(field, value)
270
+ # find composed children
271
+ child_fields = field.post_fields.visibles
272
+ # loop values and update single children
273
+ value.each do |child_id, child_value|
274
+ child_field = child_fields.find_by(id: child_id)
275
+ return false unless child_field
276
+ return false unless update_field(child_field, child_value)
277
+ end
278
+ true
279
+ end
280
+
281
+ # Relay.
282
+ def update_field_relay(field, value)
283
+ # find composed children
284
+ child_fields = field.post_fields.visibles
285
+ # loop values and update single children
286
+ value.each do |child_id, child_value|
287
+ if child_id.include?('position')
288
+ child_id = child_id.dup
289
+ child_id.slice! 'position'
290
+ return false unless update_field_relay_single_position(child_id, child_value, child_fields)
291
+ else
292
+ return false unless update_field_relay_single_value(child_id, child_value, child_fields)
293
+ end
294
+ end
295
+ true
296
+ end
297
+
298
+ def update_field_relay_single_value(id, value, child_fields)
299
+ child_field = child_fields.find_by(id: id)
300
+ return false unless child_field
301
+ update_field(child_field, value)
302
+ end
303
+
304
+ def update_field_relay_single_position(id, value, child_fields)
305
+ child_field = child_fields.find_by(id: id)
306
+ return false unless child_field
307
+ child_field.update(position: value)
308
+ end
309
+
310
+ # Params helpers:
311
+ # **************************************************************************
312
+
313
+ # This function generate params for a new post.
314
+ def new_post_params
315
+ # take params from front-end request
316
+ post_params = params.require(:post).permit(:title, :subtitle).to_h
317
+ # add current superuser id
318
+ post_params[:lato_core_superuser_creator_id] = @core__current_superuser.id
319
+ # add post parent id
320
+ post_params[:lato_blog_post_parent_id] = (params[:parent] && !params[:parent].blank? ? params[:parent] : generate_post_parent)
321
+ # add metadata
322
+ post_params[:meta_language] = cookies[:lato_blog__current_language]
323
+ post_params[:meta_status] = BLOG_POSTS_STATUS[:drafted]
324
+ # return final post object
325
+ post_params
326
+ end
327
+
328
+ # This function generate params for a edit post.
329
+ def edit_post_params
330
+ params.require(:post).permit(:meta_permalink, :title, :subtitle, :content, :excerpt)
331
+ end
332
+
333
+ # This function generate and save a new post parent and return the id.
334
+ def generate_post_parent
335
+ post_parent = LatoBlog::PostParent.create
336
+ post_parent.id
337
+ end
338
+
339
+ end
340
+ end
@@ -0,0 +1,16 @@
1
+ module LatoBlog
2
+ class Doc::DocController < ApplicationController
3
+
4
+ layout 'lato_core/admin'
5
+
6
+ before_action :core__manage_superuser_session
7
+
8
+ before_action do
9
+ core__set_menu_active_item('blog_documentation')
10
+ core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:documentation])
11
+ end
12
+
13
+ def index; end
14
+
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module LatoBlog
2
+ class Doc::FieldsController < Doc::DocController
3
+
4
+ def text; end
5
+
6
+ def datetime; end
7
+
8
+ def editor; end
9
+
10
+ def geolocalization; end
11
+
12
+ def image; end
13
+
14
+ def composed; end
15
+
16
+ def relay; end
17
+
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ module LatoBlog
2
+ class Doc::GeneralController < Doc::DocController
3
+
4
+ def installation; end
5
+
6
+ def personalization; end
7
+
8
+ def api; end
9
+
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module LatoBlog
2
+ module ApplicationHelper
3
+
4
+ # This function returns the title of the current language used by the system.
5
+ def get_current_language_title
6
+ return unless cookies[:lato_blog__current_language]
7
+ CONFIGS[:lato_blog][:languages].values.each do |language|
8
+ return language[:title] if language[:identifier] === cookies[:lato_blog__current_language]
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,100 @@
1
+ module LatoBlog
2
+ module FieldsHelper
3
+
4
+ # This function render the partial used to render post fields for a
5
+ # specific post.
6
+ def render_post_fields(post)
7
+ post_fields = post.post_fields.visibles.roots.order('position ASC')
8
+ render 'lato_blog/back/posts/shared/fields', post_fields: post_fields
9
+ end
10
+
11
+ # This function render a single post field.
12
+ def render_post_field(post_field, key_parent = 'fields')
13
+ # define key
14
+ key = "#{key_parent}[#{post_field.id}]"
15
+ # render correct field
16
+ case post_field.typology
17
+ when 'text'
18
+ render_post_field_text(post_field, key)
19
+ when 'datetime'
20
+ render_post_field_datetime(post_field, key)
21
+ when 'editor'
22
+ render_post_field_editor(post_field, key)
23
+ when 'geolocalization'
24
+ render_post_field_geolocalization(post_field, key)
25
+ when 'image'
26
+ render_post_field_image(post_field, key)
27
+ when 'composed'
28
+ render_post_field_composed(post_field, key)
29
+ when 'relay'
30
+ render_post_field_relay(post_field, key)
31
+ end
32
+ end
33
+
34
+ # Specific field render functions:
35
+ # **************************************************************************
36
+
37
+ # Text.
38
+ def render_post_field_text(post_field, key)
39
+ render 'lato_blog/back/post_fields/fields/text', post_field: post_field, key: key
40
+ end
41
+
42
+ # Datetime.
43
+ def render_post_field_datetime(post_field, key)
44
+ render 'lato_blog/back/post_fields/fields/datetime', post_field: post_field, key: key
45
+ end
46
+
47
+ # Editor.
48
+ def render_post_field_editor(post_field, key)
49
+ render 'lato_blog/back/post_fields/fields/editor', post_field: post_field, key: key
50
+ end
51
+
52
+ # Geolocalization.
53
+ def render_post_field_geolocalization(post_field, key)
54
+ value_object = post_field.value ? eval(post_field.value) : nil
55
+ render(
56
+ 'lato_blog/back/post_fields/fields/geolocalization',
57
+ post_field: post_field,
58
+ key: key,
59
+ lat: value_object ? value_object[:lat] : nil,
60
+ lng: value_object ? value_object[:lng] : nil,
61
+ address: value_object ? value_object[:address] : nil
62
+ )
63
+ end
64
+
65
+ # Image.
66
+ def render_post_field_image(post_field, key)
67
+ render 'lato_blog/back/post_fields/fields/image', post_field: post_field, key: key
68
+ end
69
+
70
+ # Composed.
71
+ def render_post_field_composed(post_field, key)
72
+ render 'lato_blog/back/post_fields/fields/composed', post_field: post_field, key: key
73
+ end
74
+
75
+ # Relay.
76
+ def render_post_field_relay(post_field, key)
77
+ render 'lato_blog/back/post_fields/fields/relay', post_field: post_field, key: key
78
+ end
79
+
80
+ # Single field helpers functions:
81
+ # **************************************************************************
82
+
83
+ def field_general_get_default_class
84
+ 'xs-12 sm-12 md-12 lg-12'
85
+ end
86
+
87
+ def field_relay_generate_components(post_field)
88
+ components = []
89
+ post_field.post_fields.visibles.order('position ASC').each do |child_post_field|
90
+ components.push({
91
+ id: "position#{child_post_field.id}",
92
+ position: child_post_field.position,
93
+ render: render_post_field(child_post_field, "fields[#{post_field.id}]")
94
+ })
95
+ end
96
+ components
97
+ end
98
+
99
+ end
100
+ end