lato_core 2.1.2 → 2.1.3

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/lato_core/application.js +18 -9
  3. data/app/assets/javascripts/lato_core/modules/CoreButton.js +38 -0
  4. data/app/assets/javascripts/lato_core/{initializers/Charts.js → modules/CoreChart.js} +12 -12
  5. data/app/assets/javascripts/lato_core/modules/CoreDatepicker.js +42 -0
  6. data/app/assets/javascripts/lato_core/modules/CoreEditor.js +27 -0
  7. data/app/assets/javascripts/lato_core/modules/CoreFlash.js +27 -0
  8. data/app/assets/javascripts/lato_core/modules/CoreFormValidator.js +110 -0
  9. data/app/assets/javascripts/lato_core/{initializers/Layout.js → modules/CoreLayout.js} +6 -5
  10. data/app/assets/javascripts/lato_core/modules/CoreMediapicker.js +140 -0
  11. data/app/assets/javascripts/lato_core/{interfaces/Modal.js → modules/CoreModal.js} +27 -2
  12. data/app/assets/javascripts/lato_core/modules/CoreSelect.js +110 -0
  13. data/app/assets/javascripts/lato_core/{initializers/inputs/SortableManager.js → modules/CoreSortableManager.js} +7 -6
  14. data/app/assets/javascripts/lato_core/modules/CoreTable.js +28 -0
  15. data/app/assets/stylesheets/lato_core/cells/inputs/_inputs.scss +1 -0
  16. data/app/assets/stylesheets/lato_core/cells/inputs/_multipleselect.scss +6 -0
  17. data/app/assets/stylesheets/lato_core/cells/widgets/_index.scss +9 -0
  18. data/app/cells/lato_core/inputs/dropzone/views/show.html.erb +24 -20
  19. data/app/cells/lato_core/inputs/multipleselect/cell.rb +52 -0
  20. data/app/cells/lato_core/inputs/multipleselect/views/show.html.erb +16 -0
  21. data/app/cells/lato_core/inputs/select/cell.rb +19 -1
  22. data/app/cells/lato_core/inputs/select/views/show.html.erb +10 -2
  23. data/app/cells/lato_core/widgets/index/cell.rb +1 -0
  24. data/app/cells/lato_core/widgets/index/views/partials/counter.html.erb +3 -0
  25. data/app/cells/lato_core/widgets/index/views/show.html.erb +2 -0
  26. data/app/controllers/lato_core/back/superusers_controller.rb +9 -9
  27. data/app/controllers/lato_core/doc/cells_inputs_controller.rb +28 -0
  28. data/app/views/lato_core/doc/cells_elements/button.html.erb +0 -4
  29. data/app/views/lato_core/doc/cells_elements/modal.html.erb +4 -4
  30. data/app/views/lato_core/doc/cells_inputs/multipleselect.html.erb +110 -0
  31. data/app/views/lato_core/doc/cells_inputs/select.html.erb +48 -2
  32. data/app/views/lato_core/doc/doc/index.html.erb +1 -0
  33. data/app/views/lato_core/doc/general/generators.html.erb +40 -0
  34. data/app/views/layouts/lato_core/partials/_logo.html.erb +7 -5
  35. data/config/languages/default.yml +2 -1
  36. data/config/languages/it.yml +2 -1
  37. data/config/routes/doc.rb +5 -0
  38. data/lib/generators/lato_core/crud_controller_generator.rb +35 -0
  39. data/lib/generators/lato_core/crud_generator.rb +31 -12
  40. data/lib/generators/lato_core/crud_views_generator.rb +52 -0
  41. data/lib/generators/lato_core/initializer_generator.rb +38 -28
  42. data/lib/generators/lato_core/scaffold_generator.rb +30 -0
  43. data/lib/generators/lato_core/templates/crud_controller/app/controllers/lato/crud_controller.rb +94 -0
  44. data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/edit.html.erb +24 -0
  45. data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/index.html.erb +35 -0
  46. data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/new.html.erb +24 -0
  47. data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/shared/_form.html.erb +42 -0
  48. data/lib/generators/lato_core/templates/crud_views/app/views/lato/crud/show.html.erb +22 -0
  49. data/lib/generators/lato_core/templates/{assets → initializer/assets}/images/logo.svg +0 -0
  50. data/lib/generators/lato_core/templates/{assets → initializer/assets}/javascripts/application.js +0 -0
  51. data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/application.scss +0 -0
  52. data/lib/generators/lato_core/templates/{assets → initializer/assets}/stylesheets/theme.scss.erb +0 -0
  53. data/lib/generators/lato_core/templates/initializer/controllers/application_controller.rb +25 -0
  54. data/lib/generators/lato_core/templates/initializer/views/application/index.html.erb +20 -0
  55. data/lib/lato_core/interfaces/token.rb +4 -3
  56. data/lib/lato_core/version.rb +1 -1
  57. metadata +33 -16
  58. data/app/assets/javascripts/lato_core/initializers/Elements.js +0 -67
  59. data/app/assets/javascripts/lato_core/initializers/Inputs.js +0 -249
  60. data/app/assets/javascripts/lato_core/initializers/inputs/MultipleSelect.js +0 -0
  61. data/lib/generators/lato_core/templates/controllers/application_controller.rb +0 -13
  62. data/lib/generators/lato_core/templates/views/application/index.html.erb +0 -16
@@ -1,4 +1,4 @@
1
- var Modal = (function () {
1
+ var CoreModal = (function () {
2
2
 
3
3
  function open (modalId, event) {
4
4
  $('#' + modalId + '.elements-modal').addClass('elements-modal--active')
@@ -20,9 +20,34 @@ var Modal = (function () {
20
20
  }
21
21
  }
22
22
 
23
+ function initializeModalCloseButton (modal) {
24
+ var closeButton = $(modal).find('.elements-modal__close-button')
25
+ $(closeButton).click(function (e) {
26
+ e.preventDefault()
27
+ // close modal
28
+ $(modal).removeClass('elements-modal--active')
29
+ $(modal).find('.elements-modal__modal').removeClass('elements-modal__modal--active')
30
+ // active body scrolling
31
+ $('body').removeClass('stop-scrolling')
32
+ })
33
+ }
34
+
35
+ function _initModalCloseButton () {
36
+ $('.elements-modal').each(function () {
37
+ initializeModalCloseButton(this)
38
+ })
39
+ }
40
+
41
+ // Init:
42
+ function init () {
43
+ _initModalCloseButton()
44
+ }
45
+
23
46
  return {
47
+ init: init,
48
+ initializeModalCloseButton: initializeModalCloseButton,
24
49
  open: open,
25
50
  close: close
26
51
  }
27
52
 
28
- })()
53
+ })()
@@ -0,0 +1,110 @@
1
+ var CoreSelect = (function () {
2
+
3
+ function initializeSelect (select) {
4
+ var selectInput = $(select).find('.inputs__select')
5
+ $(selectInput).selectize({
6
+ create: $(selectInput).attr('data-create') === 'true',
7
+ maxItems: $(selectInput).attr('data-multiple') === 'true' ? null : 1,
8
+ delimiter: ','
9
+ })
10
+ }
11
+
12
+ function initializeMultipleSelect (multipleSelect) {
13
+ var selects = $(multipleSelect).find('select.inputs__select')
14
+ // manage every select
15
+ selects.each(function (index) {
16
+ _initMultipleSelectSelectize(index, selects)
17
+ })
18
+ // load options for first selectize
19
+ _loadMultipleSelectOptions(null, 0, selects)
20
+ }
21
+
22
+ function _initMultipleSelectSelectize (selectPosition, selects) {
23
+ var select = selects[selectPosition]
24
+ var value = $(select).attr('value')
25
+ console.log(value)
26
+ var position = $(select).attr('data-position')
27
+ // clear old selectize
28
+ var selectize = select.selectize
29
+ if (selectize) {
30
+ selectize.destroy()
31
+ }
32
+ // initialize selectize
33
+ $(select).selectize({
34
+ maxItems: 1,
35
+ valueField: 'value',
36
+ labelField: 'label',
37
+ searchField: 'label',
38
+ options: [],
39
+ onChange: function (value) {
40
+ _loadMultipleSelectOptions(value, parseInt(position) + 1, selects)
41
+ },
42
+ onInitialize: function () {
43
+ if (value) {
44
+ this.setValue(value)
45
+ _loadMultipleSelectOptions(value, parseInt(position) + 1, selects)
46
+ }
47
+ }
48
+ })
49
+ }
50
+
51
+ function _updateMultipleSelectSelectize (options, selectPosition, selects) {
52
+ var select = selects[selectPosition]
53
+ var value = $(select).attr('value')
54
+ var position = $(select).attr('data-position')
55
+
56
+ var selectize = $(select)[0].selectize
57
+
58
+ if (selectize) {
59
+ selectize.clear();
60
+ selectize.clearOptions();
61
+ selectize.load(function (callback) {
62
+ callback(options)
63
+ })
64
+ if (value) {
65
+ selectize.setValue(value)
66
+ _loadMultipleSelectOptions(value, parseInt(position) + 1, selects)
67
+ }
68
+ }
69
+ }
70
+
71
+ function _loadMultipleSelectOptions (filterValue, selectPosition, selects) {
72
+ var select = selects[selectPosition]
73
+ if (!select) { return }
74
+ var apiUrl = $(select).attr('data-api')
75
+ $.ajax({
76
+ url: apiUrl,
77
+ cache: false,
78
+ data: (filterValue ? {value: filterValue} : null),
79
+ success: function (response) {
80
+ _updateMultipleSelectSelectize(response, selectPosition, selects)
81
+ }
82
+ })
83
+ }
84
+
85
+ function _initSelect () {
86
+ $('.inputs-select').each(function () {
87
+ initializeSelect(this)
88
+ })
89
+ }
90
+
91
+ function _initMultipleSelect () {
92
+ $('.inputs-multipleselect').each(function () {
93
+ initializeMultipleSelect(this)
94
+ })
95
+ }
96
+
97
+ // Init:
98
+ function init () {
99
+ _initSelect()
100
+ _initMultipleSelect()
101
+ }
102
+
103
+ return {
104
+ init: init,
105
+ initializeSelect: initializeSelect,
106
+ initializeMultipleSelect: initializeMultipleSelect
107
+ }
108
+
109
+ })()
110
+
@@ -1,8 +1,9 @@
1
- var SortableManager = (function () {
2
- function initSortable() {
1
+ var CoreSortableManager = (function () {
2
+
3
+ function _initSortable () {
3
4
  var sortableContainer = document.querySelectorAll('.js-sortable__main-container')
4
5
 
5
- if(sortableContainer.length > 0) {
6
+ if (sortableContainer.length > 0) {
6
7
  for (var i = 0; i < sortableContainer.length; i++) {
7
8
 
8
9
  var sort = Sortable.create(sortableContainer[i], {
@@ -36,7 +37,7 @@ var SortableManager = (function () {
36
37
  }
37
38
  }
38
39
 
39
- function updateOrder(container) {
40
+ function updateOrder (container) {
40
41
  var sortableElements = container.querySelectorAll('.js-sortable__element')
41
42
  for (var i = 0; i < sortableElements.length; i++) {
42
43
  var sortableElement = sortableElements[i]
@@ -50,12 +51,12 @@ var SortableManager = (function () {
50
51
  }
51
52
  }
52
53
 
53
- function destroySort(sortInstance) {
54
+ function destroySort (sortInstance) {
54
55
  sortInstance.destroy()
55
56
  }
56
57
 
57
58
  function init () {
58
- initSortable()
59
+ _initSortable()
59
60
  }
60
61
 
61
62
  return {
@@ -0,0 +1,28 @@
1
+ var CoreTable = (function () {
2
+
3
+ function initializeTableFixedHead (table) {
4
+ var tableElement = $(table).find('.elements-table__table')
5
+ $(tableElement).floatThead({
6
+ scrollContainer: function (table) {
7
+ return table.closest('.elements-table--fixed')
8
+ }
9
+ })
10
+ }
11
+
12
+ function _initTableFixedHead () {
13
+ $('.elements-table.elements-table--fixed').each(function () {
14
+ initializeTableFixedHead(this)
15
+ })
16
+ }
17
+
18
+ // Init:
19
+ function init () {
20
+ _initTableFixedHead()
21
+ }
22
+
23
+ return {
24
+ init: init,
25
+ initializeTableFixedHead: initializeTableFixedHead
26
+ }
27
+
28
+ })()
@@ -14,3 +14,4 @@
14
14
  @import "geolocalization";
15
15
  @import "sortableblock";
16
16
  @import "youtube";
17
+ @import "multipleselect";
@@ -0,0 +1,6 @@
1
+ .inputs-multipleselect {
2
+
3
+ >.row {
4
+ margin: -7.5px;
5
+ }
6
+ }
@@ -63,6 +63,15 @@
63
63
  }
64
64
  }
65
65
 
66
+ .widgets-index__counter {
67
+ height: 31px;
68
+ float: left;
69
+ padding-top: 10px;
70
+ padding-right: 15px;
71
+ border-bottom: solid 1px $color_grey;
72
+ font-size: 0.8em;
73
+ }
74
+
66
75
  // Responsive layout:
67
76
 
68
77
  @media(max-width:767px) {
@@ -1,24 +1,28 @@
1
- <%= render '../../shared/label.html' %>
1
+ <div class="inputs-dropzone inputs__container">
2
2
 
3
- <form
4
- method="<%= @args[:method] %>"
5
- action="<%= @args[:url] %>"
6
- class="inputs__dropzone"
7
- data-param-name="<%= @args[:param_name] %>"
8
- data-max-size="<%= @args[:max_size] %>"
9
- data-max-files="<%= @args[:max_files] %>"
10
- >
3
+ <%= render '../../shared/label.html' %>
11
4
 
12
- <input type="hidden" name="utf8" value="✓">
13
- <input type="hidden" name="authenticity_token" value="<%= @core__cells_authenticity_token %>">
14
- <input type="hidden" name="_method" value="<%= @args[:method] %>">
15
-
16
- <div class="fallback">
17
- <input name="<%= @args[:param_name] %>" type="file" multiple />
18
- </div>
5
+ <form
6
+ method="<%= @args[:method] %>"
7
+ action="<%= @args[:url] %>"
8
+ class="inputs__dropzone"
9
+ data-param-name="<%= @args[:param_name] %>"
10
+ data-max-size="<%= @args[:max_size] %>"
11
+ data-max-files="<%= @args[:max_files] %>"
12
+ >
19
13
 
20
- <div class="icon">
21
- <i class="fa fa-file-o" aria-hidden="true"></i>
22
- </div>
14
+ <input type="hidden" name="utf8" value="✓">
15
+ <input type="hidden" name="authenticity_token" value="<%= @core__cells_authenticity_token %>">
16
+ <input type="hidden" name="_method" value="<%= @args[:method] %>">
17
+
18
+ <div class="fallback">
19
+ <input name="<%= @args[:param_name] %>" type="file" multiple />
20
+ </div>
23
21
 
24
- </form>
22
+ <div class="icon">
23
+ <i class="fa fa-file-o" aria-hidden="true"></i>
24
+ </div>
25
+
26
+ </form>
27
+
28
+ </div>
@@ -0,0 +1,52 @@
1
+ module LatoCore
2
+
3
+ class Inputs::Multipleselect::Cell < Cell
4
+
5
+ @@requested_args = [:name]
6
+
7
+ @@default_args = {
8
+ label: '',
9
+ help: '',
10
+ class: 'md-12',
11
+ selects: [] # {name: '', label: '', api: '', value: '', class: ''}
12
+ }
13
+
14
+ def initialize(args = {})
15
+ @args = validate_args(
16
+ args: args,
17
+ requested_args: @@requested_args,
18
+ default_args: @@default_args
19
+ )
20
+
21
+ set_conditions
22
+ end
23
+
24
+ def show
25
+ render 'show.html'
26
+ end
27
+
28
+ protected
29
+
30
+ def generate_select(select_settings, position)
31
+ LatoCore::Inputs::Select::Cell.new(
32
+ name: "#{@args[:name]}[#{select_settings[:name]}]",
33
+ label: select_settings[:label],
34
+ value: select_settings[:value],
35
+ class: select_settings[:class],
36
+ attributes: {
37
+ api: select_settings[:api],
38
+ position: position
39
+ }
40
+ )
41
+ end
42
+
43
+ private
44
+
45
+ def set_conditions
46
+ @show_label = !@args[:label].nil? && !@args[:label].blank?
47
+ @show_help = !@args[:help].nil? && !@args[:help].blank?
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,16 @@
1
+ <div class="inputs-multipleselect inputs__container <%= @args[:class] %>">
2
+
3
+ <%= render '../../shared/label.html' %>
4
+
5
+ <div class="row">
6
+
7
+ <% @args[:selects].each_with_index do |select_settings, index| %>
8
+ <% select = generate_select(select_settings, index) %>
9
+ <%= select %>
10
+ <% end %>
11
+
12
+ </div>
13
+
14
+ <%= render '../../shared/help.html' %>
15
+
16
+ </div>
@@ -16,7 +16,8 @@ module LatoCore
16
16
  option_value: 'value',
17
17
  option_name: 'name',
18
18
  option_blank: true,
19
- class: 'md-12'
19
+ class: 'md-12',
20
+ attributes: {}
20
21
  }
21
22
 
22
23
  def initialize(args = {})
@@ -33,12 +34,24 @@ module LatoCore
33
34
  render 'show.html'
34
35
  end
35
36
 
37
+ # This function return a string used on the HTML option to
38
+ # set a an option value selected or not.
39
+ def get_option_value_selected(option_value)
40
+ if @args[:multiple]
41
+ values = @args[:value].is_a?(Array) ? @args[:value] : @args[:value].split(',')
42
+ return values.include?(option_value) ? "selected='selected'" : ''
43
+ end
44
+
45
+ @args[:value] == option_value ? "selected='selected'" : ''
46
+ end
47
+
36
48
  private
37
49
 
38
50
  def set_conditions
39
51
  @show_label = !@args[:label].nil? && !@args[:label].blank?
40
52
  @show_help = !@args[:help].nil? && !@args[:help].blank?
41
53
  @options = generate_options
54
+ @value = generate_value
42
55
  end
43
56
 
44
57
  def generate_options
@@ -53,6 +66,11 @@ module LatoCore
53
66
  return options
54
67
  end
55
68
 
69
+ def generate_value
70
+ return @args[:value].is_a?(Array) ? @args[:value].join(',') : @args[:value] if @args[:multiple]
71
+ @args[:value]
72
+ end
73
+
56
74
  end
57
75
 
58
76
  end
@@ -5,18 +5,26 @@
5
5
  <select
6
6
  class="inputs__select"
7
7
  type="text"
8
- value="<%= @args[:value] %>"
8
+ value="<%= @value %>"
9
9
  name="<%= @args[:name] %>"
10
10
  placeholder="<%= @args[:placeholder] %>"
11
11
  data-required="<%= @args[:required] %>"
12
12
  data-create="<%= @args[:create] %>"
13
13
  data-multiple="<%= @args[:multiple] %>"
14
+
15
+ <% if @args[:multiple] %>
16
+ multiple="multiple"
17
+ <% end %>
18
+
19
+ <% @args[:attributes].each do |key, value| %>
20
+ data-<%= key%>="<%= value %>"
21
+ <% end %>
14
22
  >
15
23
  <% if @args[:option_blank] %>
16
24
  <option value=""></option>
17
25
  <% end %>
18
26
  <% @options.each do |option| %>
19
- <option value="<%= option[:value] %>" <%= @args[:value] == option[:value] ? 'selected' : '' %>>
27
+ <option value="<%= option[:value] %>" <%= get_option_value_selected(option[:value]) %>>
20
28
  <%= option[:name] %>
21
29
  </option>
22
30
  <% end %>
@@ -38,6 +38,7 @@ module LatoCore
38
38
 
39
39
  def set_conditions
40
40
  @records = @args[:records].is_a?(Hash) ? @args[:records][:records] : @args[:records]
41
+ @total = @args[:records].is_a?(Hash) ? @args[:records][:total] : @args[:records].length
41
42
  # conditions for show
42
43
  @show_row_actions = @args[:index_url] && @args[:actions] && (@args[:actions][:show] || @args[:actions][:edit] || @args[:actions][:delete])
43
44
  @show_row_actions_class = @show_row_actions ? 'widgets-index--actions' : ''