lato_blog 2.1

Sign up to get free protection for your applications and to get access to all the features.
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