lato_cms 3.0.0 → 3.0.2

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/lato_cms/controllers/lato_cms_component_form_controller.js +4 -0
  3. data/app/assets/javascripts/lato_cms/controllers/lato_cms_file_field_controller.js +203 -0
  4. data/app/assets/javascripts/lato_cms/controllers/lato_cms_gallery_field_controller.js +36 -4
  5. data/app/assets/javascripts/lato_cms/controllers/lato_cms_image_field_controller.js +135 -6
  6. data/app/assets/javascripts/lato_cms/controllers/lato_cms_repeater_controller.js +33 -0
  7. data/app/assets/stylesheets/lato_cms/application.scss +107 -3
  8. data/app/controllers/lato_cms/pages_controller.rb +120 -49
  9. data/app/helpers/lato_cms/pages_helper.rb +15 -2
  10. data/app/models/lato_cms/page.rb +35 -4
  11. data/app/models/lato_cms/page_field.rb +27 -3
  12. data/app/models/lato_cms/template_manager.rb +2 -0
  13. data/app/views/lato_cms/pages/_component_accordion.html.erb +13 -9
  14. data/app/views/lato_cms/pages/_repeater.html.erb +22 -0
  15. data/app/views/lato_cms/pages/_repeater_item.html.erb +28 -0
  16. data/app/views/lato_cms/pages/fields/_boolean.html.erb +6 -4
  17. data/app/views/lato_cms/pages/fields/_color.html.erb +5 -3
  18. data/app/views/lato_cms/pages/fields/_date.html.erb +5 -3
  19. data/app/views/lato_cms/pages/fields/_datetime.html.erb +5 -3
  20. data/app/views/lato_cms/pages/fields/_file.html.erb +40 -15
  21. data/app/views/lato_cms/pages/fields/_gallery.html.erb +3 -2
  22. data/app/views/lato_cms/pages/fields/_image.html.erb +42 -14
  23. data/app/views/lato_cms/pages/fields/_json.html.erb +5 -3
  24. data/app/views/lato_cms/pages/fields/_multiselect.html.erb +5 -3
  25. data/app/views/lato_cms/pages/fields/_number.html.erb +5 -3
  26. data/app/views/lato_cms/pages/fields/_select.html.erb +5 -3
  27. data/app/views/lato_cms/pages/fields/_string.html.erb +5 -3
  28. data/app/views/lato_cms/pages/fields/_text.html.erb +5 -3
  29. data/app/views/lato_cms/pages/fields/_textarea.html.erb +5 -3
  30. data/config/locales/en.yml +6 -0
  31. data/config/locales/it.yml +6 -0
  32. data/lib/lato_cms/version.rb +1 -1
  33. metadata +5 -1
@@ -3,35 +3,63 @@
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% accept = settings['accept'] || 'image/*' %>
5
5
  <% current_file = page_field&.files&.attached? ? page_field.files.first : nil %>
6
+ <% files_input_name = lato_cms_field_input_name(field_id, 'files', input_name_prefix: local_assigns[:input_name_prefix], multiple: true) %>
7
+ <% remove_input_name = lato_cms_field_input_name(field_id, 'remove_file_ids', input_name_prefix: local_assigns[:input_name_prefix], multiple: true) %>
8
+ <% input_id = lato_cms_field_dom_id(field_id, 'files', dom_id_prefix: local_assigns[:dom_id_prefix]) %>
6
9
 
7
10
  <label class="form-label">
8
11
  <%= label %><%= ' *' if required %>
9
12
  </label>
10
13
 
11
- <div data-controller="lato-cms-image-field">
14
+ <div data-controller="lato-cms-image-field"
15
+ data-field-id="<%= field_id %>"
16
+ data-new-badge-label="<%= t('lato_cms.field_image_new_badge') %>"
17
+ data-remove-label="<%= t('lato_cms.field_image_remove') %>"
18
+ data-remove-pending-label="<%= t('lato_cms.field_image_remove_pending') %>"
19
+ data-undo-label="<%= t('lato_cms.field_file_remove_undo') %>">
12
20
  <% if current_file %>
13
- <div class="mb-2" data-lato-cms-image-field-target="currentContainer">
14
- <div class="position-relative d-inline-block">
15
- <img src="<%= lato_cms_attachment_path(current_file) %>" class="img-thumbnail lato-cms-image-field__thumb" data-lato-cms-image-field-target="currentImage" alt="<%= current_file.filename %>">
16
- <label class="lato-cms-image-field__remove-btn" title="<%= t('lato_cms.field_image_remove') %>">
17
- <input type="checkbox" class="d-none" name="fields[<%= field_id %>][remove_file_ids][]" value="<%= current_file.id %>" data-lato-cms-image-field-target="removeCheck" data-action="change->lato-cms-image-field#toggleRemove">
18
- <i class="bi bi-x-lg"></i>
19
- </label>
21
+ <div class="lato-cms-file-field__item lato-cms-image-field__item" data-lato-cms-image-field-target="currentContainer" data-attachment-id="<%= current_file.id %>">
22
+ <div class="lato-cms-image-field__preview">
23
+ <img src="<%= lato_cms_attachment_path(current_file) %>" class="lato-cms-image-field__thumb" data-lato-cms-image-field-target="currentImage" alt="<%= current_file.filename %>">
24
+ </div>
25
+ <div class="lato-cms-file-field__info">
26
+ <i class="bi bi-image"></i>
27
+ <span><%= current_file.blob.filename %></span>
28
+ <span class="text-muted small">(<%= number_to_human_size(current_file.blob.byte_size) %>)</span>
29
+ </div>
30
+ <button type="button" class="btn btn-sm btn-outline-danger" data-action="lato-cms-image-field#remove">
31
+ <i class="bi bi-trash me-1"></i><%= t('lato_cms.field_image_remove') %>
32
+ </button>
33
+ <div class="lato-cms-image-field__removed d-none" data-lato-cms-image-field-target="removedNotice">
34
+ <span class="text-danger small">
35
+ <i class="bi bi-trash me-1"></i><%= t('lato_cms.field_image_remove_pending') %>
36
+ </span>
37
+ <button type="button" class="btn btn-link btn-sm p-0" data-action="lato-cms-image-field#undo">
38
+ <%= t('lato_cms.field_file_remove_undo') %>
39
+ </button>
20
40
  </div>
21
41
  </div>
22
42
  <% end %>
23
43
 
24
- <div class="mb-2 d-none" data-lato-cms-image-field-target="newPreviewContainer">
25
- <div class="position-relative d-inline-block">
26
- <img src="" class="img-thumbnail lato-cms-image-field__thumb" data-lato-cms-image-field-target="newPreview" alt="">
27
- <span class="badge bg-success lato-cms-image-field__new-badge"><%= t('lato_cms.field_image_new_badge') %></span>
44
+ <div class="lato-cms-file-field__item lato-cms-file-field__item--new lato-cms-image-field__item d-none" data-lato-cms-image-field-target="newPreviewContainer">
45
+ <div class="lato-cms-image-field__preview">
46
+ <img src="" class="lato-cms-image-field__thumb" data-lato-cms-image-field-target="newPreview" alt="">
47
+ </div>
48
+ <div class="lato-cms-file-field__info">
49
+ <i class="bi bi-image"></i>
50
+ <span data-lato-cms-image-field-target="newPreviewName"></span>
51
+ <span class="text-muted small" data-lato-cms-image-field-target="newPreviewSize"></span>
52
+ <span class="badge bg-success"><%= t('lato_cms.field_image_new_badge') %></span>
28
53
  </div>
54
+ <button type="button" class="btn btn-sm btn-outline-danger" data-action="lato-cms-image-field#removeNew">
55
+ <i class="bi bi-trash me-1"></i><%= t('lato_cms.field_image_remove') %>
56
+ </button>
29
57
  </div>
30
58
 
31
59
  <input type="file"
32
60
  class="form-control"
33
- name="fields[<%= field_id %>][files][]"
34
- id="fields_<%= field_id %>_files"
61
+ name="<%= files_input_name %>"
62
+ id="<%= input_id %>"
35
63
  accept="<%= accept %>"
36
64
  data-lato-cms-image-field-target="input"
37
65
  data-action="change->lato-cms-image-field#preview"
@@ -5,15 +5,17 @@
5
5
  <% if current_value.present? %>
6
6
  <% begin; current_value = JSON.pretty_generate(JSON.parse(current_value)); rescue JSON::ParserError; end %>
7
7
  <% end %>
8
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
9
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
8
10
 
9
- <label class="form-label" for="fields_<%= field_id %>_value">
11
+ <label class="form-label" for="<%= input_id %>">
10
12
  <%= label %><%= ' *' if required %>
11
13
  </label>
12
14
  <div data-controller="lato-cms-json-field">
13
15
  <textarea
14
16
  class="form-control font-monospace"
15
- name="fields[<%= field_id %>][value]"
16
- id="fields_<%= field_id %>_value"
17
+ name="<%= input_name %>"
18
+ id="<%= input_id %>"
17
19
  rows="<%= settings['rows'] || 6 %>"
18
20
  data-lato-cms-json-field-target="input"
19
21
  data-action="input->lato-cms-json-field#validate"
@@ -3,14 +3,16 @@
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% options = settings['options'] || [] %>
5
5
  <% current_values = begin; page_field&.value.present? ? JSON.parse(page_field.value) : []; rescue; []; end %>
6
+ <% input_name = lato_cms_field_input_name(field_id, 'value', input_name_prefix: local_assigns[:input_name_prefix], multiple: true) %>
7
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
6
8
 
7
- <label class="form-label" for="fields_<%= field_id %>_value">
9
+ <label class="form-label" for="<%= input_id %>">
8
10
  <%= label %><%= ' *' if required %>
9
11
  </label>
10
12
  <select
11
13
  class="form-select"
12
- name="fields[<%= field_id %>][value][]"
13
- id="fields_<%= field_id %>_value"
14
+ name="<%= input_name %>"
15
+ id="<%= input_id %>"
14
16
  multiple
15
17
  size="<%= [options.length, 6].min %>"
16
18
  <%= 'required' if required %>>
@@ -2,14 +2,16 @@
2
2
  <% required = field_config['required'] == true %>
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% current_value = page_field&.value || '' %>
5
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
6
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
5
7
 
6
- <label class="form-label" for="fields_<%= field_id %>_value">
8
+ <label class="form-label" for="<%= input_id %>">
7
9
  <%= label %><%= ' *' if required %>
8
10
  </label>
9
11
  <input type="number"
10
12
  class="form-control"
11
- name="fields[<%= field_id %>][value]"
12
- id="fields_<%= field_id %>_value"
13
+ name="<%= input_name %>"
14
+ id="<%= input_id %>"
13
15
  value="<%= current_value %>"
14
16
  <%= 'required' if required %>
15
17
  <% if settings['min'] %>min="<%= settings['min'] %>"<% end %>
@@ -3,14 +3,16 @@
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% options = settings['options'] || [] %>
5
5
  <% current_value = page_field&.value || '' %>
6
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
7
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
6
8
 
7
- <label class="form-label" for="fields_<%= field_id %>_value">
9
+ <label class="form-label" for="<%= input_id %>">
8
10
  <%= label %><%= ' *' if required %>
9
11
  </label>
10
12
  <select
11
13
  class="form-select"
12
- name="fields[<%= field_id %>][value]"
13
- id="fields_<%= field_id %>_value"
14
+ name="<%= input_name %>"
15
+ id="<%= input_id %>"
14
16
  <%= 'required' if required %>>
15
17
  <option value=""><%= t('lato_cms.field_select_placeholder') %></option>
16
18
  <% options.each do |option| %>
@@ -2,14 +2,16 @@
2
2
  <% required = field_config['required'] == true %>
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% current_value = page_field&.value || '' %>
5
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
6
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
5
7
 
6
- <label class="form-label" for="fields_<%= field_id %>_value">
8
+ <label class="form-label" for="<%= input_id %>">
7
9
  <%= label %><%= ' *' if required %>
8
10
  </label>
9
11
  <input type="text"
10
12
  class="form-control"
11
- name="fields[<%= field_id %>][value]"
12
- id="fields_<%= field_id %>_value"
13
+ name="<%= input_name %>"
14
+ id="<%= input_id %>"
13
15
  value="<%= current_value %>"
14
16
  <%= 'required' if required %>
15
17
  <% if settings['placeholder'] %>placeholder="<%= settings['placeholder'] %>"<% end %>
@@ -1,8 +1,10 @@
1
1
  <% label = field_config['name'] || field_id.humanize %>
2
2
  <% required = field_config['required'] == true %>
3
3
  <% current_value = page_field&.value || '' %>
4
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
5
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
4
6
 
5
- <label class="form-label" for="fields_<%= field_id %>_value">
7
+ <label class="form-label" for="<%= input_id %>">
6
8
  <%= label %><%= ' *' if required %>
7
9
  </label>
8
10
 
@@ -73,8 +75,8 @@
73
75
 
74
76
  <%# ── Hidden input submitted with the form ───────────────────────────── %>
75
77
  <input type="hidden"
76
- name="fields[<%= field_id %>][value]"
77
- id="fields_<%= field_id %>_value"
78
+ name="<%= input_name %>"
79
+ id="<%= input_id %>"
78
80
  data-lato-cms-text-field-target="input"
79
81
  value="<%= CGI.escapeHTML(current_value) %>">
80
82
  </div>
@@ -2,14 +2,16 @@
2
2
  <% required = field_config['required'] == true %>
3
3
  <% settings = field_config['settings'] || {} %>
4
4
  <% current_value = page_field&.value || '' %>
5
+ <% input_name = lato_cms_field_input_name(field_id, input_name_prefix: local_assigns[:input_name_prefix]) %>
6
+ <% input_id = lato_cms_field_dom_id(field_id, dom_id_prefix: local_assigns[:dom_id_prefix]) %>
5
7
 
6
- <label class="form-label" for="fields_<%= field_id %>_value">
8
+ <label class="form-label" for="<%= input_id %>">
7
9
  <%= label %><%= ' *' if required %>
8
10
  </label>
9
11
  <textarea
10
12
  class="form-control"
11
- name="fields[<%= field_id %>][value]"
12
- id="fields_<%= field_id %>_value"
13
+ name="<%= input_name %>"
14
+ id="<%= input_id %>"
13
15
  rows="<%= settings['rows'] || 4 %>"
14
16
  <%= 'required' if required %>
15
17
  <% if settings['placeholder'] %>placeholder="<%= settings['placeholder'] %>"<% end %>
@@ -48,13 +48,19 @@ en:
48
48
  component_required_cannot_disable: Required component cannot be disabled
49
49
  component_disabled_cannot_save: Disabled component cannot be saved
50
50
  fields_save_component: Save
51
+ repeater_add_item: Add item
52
+ repeater_remove_item: Remove
51
53
  fields_component_missing_alert_html: "Component <strong>%{component_id}</strong> not found. The component configuration may have been removed."
52
54
  fields_previously_saved_data: "Previously saved data:"
53
55
  field_file_remove: Remove
56
+ field_file_remove_pending: File will be removed on save
57
+ field_file_remove_undo: Undo
58
+ field_file_new_badge: New
54
59
  field_gallery_empty: No images yet. Add images below.
55
60
  field_gallery_add_images: Add images
56
61
  field_gallery_drag_to_reorder: Drag to reorder
57
62
  field_image_remove: Remove
63
+ field_image_remove_pending: Image will be removed on save
58
64
  field_image_new_badge: New
59
65
  field_multiselect_hint: Hold Ctrl/Cmd to select multiple
60
66
  field_select_placeholder: "-- Select --"
@@ -48,13 +48,19 @@ it:
48
48
  component_required_cannot_disable: Una componente obbligatoria non puo essere disattivata
49
49
  component_disabled_cannot_save: Una componente disattivata non puo essere salvata
50
50
  fields_save_component: Salva
51
+ repeater_add_item: Aggiungi elemento
52
+ repeater_remove_item: Rimuovi
51
53
  fields_component_missing_alert_html: "Componente <strong>%{component_id}</strong> non trovato. La configurazione del componente potrebbe essere stata rimossa."
52
54
  fields_previously_saved_data: "Dati salvati in precedenza:"
53
55
  field_file_remove: Rimuovi
56
+ field_file_remove_pending: Il file verra rimosso al salvataggio
57
+ field_file_remove_undo: Annulla
58
+ field_file_new_badge: Nuovo
54
59
  field_gallery_empty: Nessuna immagine presente. Aggiungi immagini qui sotto.
55
60
  field_gallery_add_images: Aggiungi immagini
56
61
  field_gallery_drag_to_reorder: Trascina per riordinare
57
62
  field_image_remove: Rimuovi
63
+ field_image_remove_pending: L'immagine verra rimossa al salvataggio
58
64
  field_image_new_badge: Nuovo
59
65
  field_multiselect_hint: Tieni premuto Ctrl/Cmd per selezionare piu opzioni
60
66
  field_select_placeholder: "-- Seleziona --"
@@ -1,3 +1,3 @@
1
1
  module LatoCms
2
- VERSION = "3.0.0"
2
+ VERSION = "3.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lato_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregorio Galante
@@ -82,10 +82,12 @@ files:
82
82
  - app/assets/javascripts/lato_cms/controllers/lato_cms_component_accordion_controller.js
83
83
  - app/assets/javascripts/lato_cms/controllers/lato_cms_component_form_controller.js
84
84
  - app/assets/javascripts/lato_cms/controllers/lato_cms_component_toggle_controller.js
85
+ - app/assets/javascripts/lato_cms/controllers/lato_cms_file_field_controller.js
85
86
  - app/assets/javascripts/lato_cms/controllers/lato_cms_gallery_field_controller.js
86
87
  - app/assets/javascripts/lato_cms/controllers/lato_cms_image_field_controller.js
87
88
  - app/assets/javascripts/lato_cms/controllers/lato_cms_json_field_controller.js
88
89
  - app/assets/javascripts/lato_cms/controllers/lato_cms_page_preview_controller.js
90
+ - app/assets/javascripts/lato_cms/controllers/lato_cms_repeater_controller.js
89
91
  - app/assets/javascripts/lato_cms/controllers/lato_cms_text_field_controller.js
90
92
  - app/assets/stylesheets/lato_cms/application.scss
91
93
  - app/controllers/lato_cms/api/pages_controller.rb
@@ -102,6 +104,8 @@ files:
102
104
  - app/views/lato_cms/pages/_fields_editor.html.erb
103
105
  - app/views/lato_cms/pages/_form_create.html.erb
104
106
  - app/views/lato_cms/pages/_form_update.html.erb
107
+ - app/views/lato_cms/pages/_repeater.html.erb
108
+ - app/views/lato_cms/pages/_repeater_item.html.erb
105
109
  - app/views/lato_cms/pages/create.html.erb
106
110
  - app/views/lato_cms/pages/fields/_boolean.html.erb
107
111
  - app/views/lato_cms/pages/fields/_color.html.erb