lato_core 2.2.0 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2bba9533c6d8ca36fccc5d5c43cf5253221c58b2
4
- data.tar.gz: b778ebd736a83e911c7f44f5fb4737b71a523533
2
+ SHA256:
3
+ metadata.gz: 10d0d90847799a6bf6da6765a2b6bf85994cd47afb79dd60fc12a8cad41db9c4
4
+ data.tar.gz: 03ed9310de285a4245c1b1a110d8f95484dc5763cf16e241b0d93cd97ebe9875
5
5
  SHA512:
6
- metadata.gz: 54971b4d53cbfe95c08fdd91e26406957880008b831d162f445c4950464b0ba3da2e16697e35833b024d2848259eff8fe17982a8643a9e018346173288f3d3b1
7
- data.tar.gz: 0c7ea56aff524d2ec57c07e8075b8d2d762563e0c51cbbbd0c2252bde4c6b0a185693823864de9047bc53c637960ef854f7f44cc0b856242c3b958fe3654c44f
6
+ metadata.gz: 89af3d72a186ade8517edf0c88a7d11ea579dcd14eb5c5e37e830ab5de6f9779046b376c29f1afb9d6529dbf3f4fb249e5627069e2322c88555324b915d5ac32
7
+ data.tar.gz: 1742ef179d9b7d4d472e1ad2cb49305d5ad342bb2957e3b1eb5746ec42340d77e8fa6f844d6cf1dc19ed41309b9ac6571e51ed8847ae3ad9a1b2f7e2a1185d1e
data/README.md CHANGED
@@ -1,17 +1,19 @@
1
1
  # Lato Core
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/lato_core.svg)](https://badge.fury.io/rb/lato_core)
4
+
3
5
  Lato is a Rails engine used to develop modular admin panels. This is the module used to initialize the admin panel.
4
6
  The complete documentation is inside the application panel, so you must [install](#installation) it before.
5
7
 
6
- You can always try a demo here: https://lato-server.herokuapp.com
8
+ You can always try a demo here: https://lato-gem.herokuapp.com
7
9
 
8
- ![Alt text](lib/screen.png "Title")
10
+ ![Lato dashboard screenshot](lib/screen.png)
9
11
 
10
12
  ## Ecosystem
11
13
 
12
14
  - [Lato core](https://github.com/ideonetwork/lato-core): The core module used to initialize the panel.
13
15
  - [Lato media](https://github.com/ideonetwork/lato-media): A module used to manage attachments and media files.
14
- - [Lato blog](https://github.com/ideonetwork/lato-blog): A module used to manage a blog.
16
+ - [Lato blog](https://github.com/ideonetwork/lato-blog): A module to manage blog contents.
15
17
 
16
18
  ## Installation
17
19
 
@@ -39,4 +41,42 @@ Exec migrations
39
41
  bundle exec rake db:migrate
40
42
  ```
41
43
 
42
- Now you can start the server and go to the relative url */lato/core*
44
+ Now you can start the server and go to the relative url */lato/core*
45
+
46
+ ## Command line interface
47
+
48
+ Lato has some commands that can be used to generate files and configurations.
49
+
50
+ Inside the Lato admin panel there is a specific list of all command line commands that can be used to work with a lato project.
51
+
52
+ ### Configuration
53
+
54
+ ```console
55
+ rails lato:load_configs
56
+ ```
57
+
58
+ This command should create a list of **lato_*.yml** files inside **config/lato** containing settings and configuration of every module.
59
+
60
+ ### Languages
61
+
62
+ ```console
63
+ rails lato:load_languages
64
+ ```
65
+
66
+ This command should create a list of **lato_*_lang.yml** files inside **config/lato** containing strings that can be replaced for every lato module.
67
+
68
+ ### Generators
69
+
70
+ #### Initializer
71
+
72
+ ```console
73
+ rails generate lato_core:initializer
74
+ ```
75
+
76
+ This command should create some files that helps you to start to develop with lato.
77
+
78
+ #### Scaffold
79
+
80
+ ```console
81
+ rails generate lato_core:scaffold ModelName
82
+ ```
@@ -6,6 +6,30 @@
6
6
 
7
7
  thead {
8
8
  border-bottom: solid 1px darken($color_white, 3);
9
+
10
+ .attr-active {
11
+ color: $color_active;
12
+ }
13
+
14
+ .attr-sort-ASC {
15
+ position: relative;
16
+
17
+ &:after {
18
+ content: '\2193';
19
+ position: absolute;
20
+ right: -1em;
21
+ }
22
+ }
23
+
24
+ .attr-sort-DESC {
25
+ position: relative;
26
+
27
+ &:after {
28
+ content: '\2191';
29
+ position: absolute;
30
+ right: -1em;
31
+ }
32
+ }
9
33
  }
10
34
 
11
35
  tbody:before {
@@ -27,6 +27,17 @@
27
27
  }
28
28
  }
29
29
 
30
+ .elements-button--block {
31
+ display: block;
32
+ width: 100%;
33
+
34
+ > .elements-button__element {
35
+ display: block;
36
+ width: 100%;
37
+ text-align: left;
38
+ }
39
+ }
40
+
30
41
  .elements-button__element--info {
31
42
  background-color: $button_info_background;
32
43
  color: $button_info_color_text;
@@ -4,9 +4,25 @@
4
4
  padding-bottom: 30px;
5
5
  clear: both;
6
6
  }
7
+
8
+ }
9
+
10
+ .widgets-index--actions-start {
11
+ .elements-table__table thead th:first-child {
12
+ text-align: center;
13
+ }
14
+
15
+ .elements-table__row td:first-child {
16
+ text-align: center;
17
+ min-width: 250px;
18
+
19
+ .elements-button__element {
20
+ font-size: 0.8em;
21
+ }
22
+ }
7
23
  }
8
24
 
9
- .widgets-index--actions {
25
+ .widgets-index--actions-end {
10
26
  .elements-table__table thead th:last-child {
11
27
  text-align: center;
12
28
  }
@@ -12,6 +12,7 @@ module LatoCore
12
12
  icon: nil,
13
13
  icon_align: 'left',
14
14
  method: 'get',
15
+ block: false,
15
16
  remote: false,
16
17
  confirmation: {
17
18
  message: nil,
@@ -52,6 +53,8 @@ module LatoCore
52
53
  @args[:confirmation][:negative_response])
53
54
  @icon_left = (@args[:icon_align] === 'left')
54
55
  @icon_right = (@args[:icon_align] === 'right')
56
+
57
+ @block_class = @args[:block] ? ' elements-button--block ' : ' '
55
58
  end
56
59
 
57
60
  end
@@ -1,7 +1,11 @@
1
- <div class="elements-button">
1
+ <div class="elements-button <%= @block_class %>">
2
2
 
3
3
  <button
4
- class="button elements-button__element elements-button__element--<%= @args[:style] %> elements-button__button"
4
+ class="
5
+ button
6
+ elements-button__element
7
+ elements-button__element--<%= @args[:style] %>
8
+ elements-button__button"
5
9
  title="<%= @args[:label] %>"
6
10
  id="<%= @args[:id] %>"
7
11
  <% if @show_submit %>
@@ -1,7 +1,10 @@
1
- <div class="elements-button">
1
+ <div class="elements-button <%= @block_class %>">
2
2
 
3
3
  <a
4
- class="button elements-button__element elements-button__element--<%= @args[:style] %> elements-button__link"
4
+ class="
5
+ button elements-button__element
6
+ elements-button__element--<%= @args[:style] %>
7
+ elements-button__link"
5
8
  title="<%= @args[:label] %>"
6
9
  id="<%= @args[:id] %>"
7
10
  <% if !@show_confirmation %>
@@ -24,7 +24,8 @@ module LatoCore
24
24
  },
25
25
  table_body: {
26
26
  hover: false
27
- }
27
+ },
28
+ actions_on_start: false
28
29
  }
29
30
 
30
31
  def initialize(args = {})
@@ -48,7 +49,8 @@ module LatoCore
48
49
  @total = @args[:records].is_a?(Hash) ? @args[:records][:total] : @args[:records].length
49
50
  # conditions for show
50
51
  @show_row_actions = @args[:index_url] && @args[:actions] && (@args[:actions][:show] || @args[:actions][:edit] || @args[:actions][:delete])
51
- @show_row_actions_class = @show_row_actions ? 'widgets-index--actions' : ''
52
+ @show_row_actions_class = @args[:actions_on_start] && @show_row_actions ? 'widgets-index--actions-start' : ''
53
+ @show_row_actions_class = !@args[:actions_on_start] && @show_row_actions ? 'widgets-index--actions-end' : @show_row_actions_class
52
54
  @show_search = @args[:index_url] && @args[:search]
53
55
  @show_pagiantion = @args[:index_url] && @args[:pagination]
54
56
  @show_new_action = @args[:index_url] && @args[:actions] && @args[:actions][:new]
@@ -84,13 +86,41 @@ module LatoCore
84
86
 
85
87
  if @args[:head] && @args[:head].length > 0
86
88
  # manage case with custom head
87
- labels = @args[:head]
88
- labels.push(LANGUAGES[:lato_core][:mixed][:actions]) if @show_row_actions
89
- elsif @records && @records.length > 0
89
+ labels = []
90
+ if @args[:actions_on_start] && @show_row_actions
91
+ labels.push(LANGUAGES[:lato_core][:mixed][:actions])
92
+ end
93
+ @args[:head].each do |head|
94
+ if head.is_a?(Hash)
95
+ sort_value = @args[:records].is_a?(Hash) ? @args[:records][:sort] : ''
96
+ sort_dir_value = @args[:records].is_a?(Hash) ? @args[:records][:sort_dir] : 'ASC'
97
+ active_class = sort_value == head[:sort] ? "attr-active attr-sort-#{sort_dir_value}" : ''
98
+ active_sort = sort_value == head[:sort] ? (sort_dir_value == 'ASC' ? 'DESC' : 'ASC') : sort_dir_value
99
+ search_value = @args[:records].is_a?(Hash) ? @args[:records][:search] : ''
100
+
101
+ url = core__add_param_to_url(@args[:index_url], 'widget_index[search]', search_value)
102
+ url = core__add_param_to_url(url, 'widget_index[sort]', head[:sort])
103
+ url = core__add_param_to_url(url, 'widget_index[sort_dir]', active_sort)
104
+ string = "<a href='#{url}' class='#{active_class}'>#{head[:label]}</a>"
105
+ labels.push(string)
106
+ else
107
+ labels.push(head)
108
+ end
109
+ end
110
+ if !@args[:actions_on_start] && @show_row_actions
111
+ labels.push(LANGUAGES[:lato_core][:mixed][:actions])
112
+ end
113
+ elsif @records&.length > 0
90
114
  # manage case without custom head
91
- labels = @records.first.attributes.keys.map {|s| s.gsub('_', ' ')}
115
+ labels = []
116
+ if @args[:actions_on_start] && @show_row_actions
117
+ labels.push(LANGUAGES[:lato_core][:mixed][:actions])
118
+ end
119
+ labels = labels + @records.first.attributes.keys.map {|s| s.gsub('_', ' ')}
92
120
  labels = labels.map(&:capitalize)
93
- labels.push(LANGUAGES[:lato_core][:mixed][:actions]) if @show_row_actions
121
+ if !@args[:actions_on_start] && @show_row_actions
122
+ labels.push(LANGUAGES[:lato_core][:mixed][:actions])
123
+ end
94
124
  end
95
125
 
96
126
  return LatoCore::Elements::Table::Head::Cell.new(labels: labels)
@@ -124,12 +154,16 @@ module LatoCore
124
154
 
125
155
  @records.each do |record|
126
156
  labels = []
157
+ # add actions to row columns
158
+ if @args[:actions_on_start] && @show_row_actions
159
+ labels.push(generate_actions_bottongroup_for_record(record))
160
+ end
127
161
  # add function result to row columns
128
162
  columns_functions.each do |column_function|
129
163
  labels.push(record.send(column_function))
130
164
  end
131
165
  # add actions to row columns
132
- if @show_row_actions
166
+ if !@args[:actions_on_start] && @show_row_actions
133
167
  labels.push(generate_actions_bottongroup_for_record(record))
134
168
  end
135
169
  # puts rows on table rows
@@ -194,7 +228,10 @@ module LatoCore
194
228
 
195
229
  # This function generate and return the search input.
196
230
  def generate_search_input
197
- search_placeholder = @args[:records].is_a?(Hash) ? @args[:records][:search_key].humanize : ''
231
+ search_placeholder = ''
232
+ if @args[:records].is_a?(Hash)
233
+ search_placeholder = @args[:records][:search_key].is_a?(Array) ? @args[:records][:search_key].to_sentence : @args[:records][:search_key].humanize
234
+ end
198
235
  search_value = @args[:records].is_a?(Hash) ? @args[:records][:search] : ''
199
236
  return LatoCore::Inputs::Text::Cell.new(name: 'widget_index[search]', value: search_value, placeholder: search_placeholder)
200
237
  end
@@ -216,9 +253,14 @@ module LatoCore
216
253
  total_records_per_page = @args[:records].is_a?(Hash) ? @args[:records][:per_page] : @args[:records].length
217
254
  total_pages = (total_records.to_f / total_records_per_page.to_f).ceil
218
255
  current_page = @args[:records].is_a?(Hash) ? @args[:records][:pagination] : 1
256
+
219
257
  search_value = @args[:records].is_a?(Hash) ? @args[:records][:search] : ''
258
+ sort_value = @args[:records].is_a?(Hash) ? @args[:records][:sort] : ''
259
+ sort_dir_value = @args[:records].is_a?(Hash) ? @args[:records][:sort_dir] : ''
220
260
 
221
261
  url = core__add_param_to_url(@args[:index_url], 'widget_index[search]', search_value)
262
+ url = core__add_param_to_url(url, 'widget_index[sort]', sort_value)
263
+ url = core__add_param_to_url(url, 'widget_index[sort_dir]', sort_dir_value)
222
264
  return LatoCore::Elements::Pagination::Cell.new(total: total_pages, current: current_page, url: url,
223
265
  param: 'widget_index[pagination]')
224
266
  end
@@ -367,5 +367,37 @@
367
367
 
368
368
  <%=raw block.close %>
369
369
 
370
+ <%=raw row.close %>
371
+ <!-- / CODE SECTION -->
372
+
373
+ <hr>
374
+ <%=raw cell(:elements, :title).new(label: 'Button with block style', size: 3) %>
375
+
376
+ <%=raw row.open %>
377
+
378
+ <%=raw block.open %>
379
+
380
+ <%=raw cell(:elements, :button).new(label: 'Block link button', block: true, url: '#', remote: true) %>
381
+ <%=raw cell(:elements, :button).new(label: 'Block button', type: 'button', block: true, url: '#', remote: true) %>
382
+
383
+ <%=raw block.close %>
384
+
385
+ <%=raw row.close %>
386
+
387
+ <!-- CODE SECTION -->
388
+ <%=raw row.open %>
389
+
390
+ <%=raw block.open %>
391
+
392
+ <%=raw cell(:elements, :title).new(label: 'Code', size: 6) %>
393
+
394
+ <%=raw code.open %>
395
+
396
+ <%= erb_open_tag %>=raw cell(:elements, :button).new(label: 'Block button', block: true, url: '#', remote: true) <%= erb_close_tag %>
397
+
398
+ <%=raw code.close %>
399
+
400
+ <%=raw block.close %>
401
+
370
402
  <%=raw row.close %>
371
403
  <!-- / CODE SECTION -->
@@ -202,4 +202,51 @@ options</p>
202
202
  <%=raw block.close %>
203
203
 
204
204
  <%=raw row.close %>
205
- <!-- / CODE SECTION -->
205
+ <!-- / CODE SECTION -->
206
+
207
+ <hr>
208
+ <%=raw cell(:elements, :title).new(label: 'Index with sortable attributes', size: 3) %>
209
+
210
+ <%=raw row.open %>
211
+
212
+ <%=raw block.open %>
213
+
214
+ <%=raw cell(:widgets, :index).new(records: @widget_index_superusers,
215
+ head: [
216
+ {label: 'Name', sort: 'name'},
217
+ {label: 'Surname', sort: 'surname'},
218
+ 'Email', 'Username'
219
+ ],
220
+ columns: ['name', 'surname', 'email', 'username'], index_url: lato_core.doc_cells_widgets_index_path,
221
+ actions: {show: false, edit: false, delete: false, new: false}, search: true, pagination: true,
222
+ table: { fixed: true, height: 150 }, table_body: { hover: true }) %>
223
+
224
+ <%=raw block.close %>
225
+
226
+ <%=raw row.close %>
227
+
228
+ <!-- CODE SECTION -->
229
+ <%=raw row.open %>
230
+
231
+ <%=raw block.open %>
232
+
233
+ <%=raw cell(:elements, :title).new(label: 'Code', size: 6) %>
234
+
235
+ <%=raw code.open %>
236
+
237
+ <%= erb_open_tag %>raw cell(:widgets, :index).new(records: @widget_index_superusers,
238
+ head: [
239
+ {label: 'Name', sort: 'name'},
240
+ {label: 'Surname', sort: 'surname'},
241
+ 'Email', 'Username'
242
+ ],
243
+ columns: ['name', 'surname', 'email', 'username'], index_url: lato_core.doc_cells_widgets_index_path,
244
+ actions: {show: false, edit: false, delete: false, new: false}, search: true, pagination: true,
245
+ table: { fixed: true, height: 150 }, table_body: { hover: true })<%= erb_close_tag %>
246
+
247
+ <%=raw code.close %>
248
+
249
+ <%=raw block.close %>
250
+
251
+ <%=raw row.close %>
252
+ <!-- / CODE SECTION -->
@@ -18,14 +18,32 @@ module LatoCore
18
18
  per_page: pagination,
19
19
  search: '',
20
20
  search_key: search,
21
+ sort: '',
22
+ sort_dir: 'ASC',
21
23
  pagination: 1,
22
24
  }
25
+
23
26
  # manage search
24
27
  if search && params[:widget_index] && params[:widget_index][:search] && !params[:widget_index][:search].blank?
25
- response[:records] = response[:records].where("#{search} like ?", "%#{params[:widget_index][:search]}%")
28
+ search_array = search.is_a?(Array) ? search : [search]
29
+ query1 = ''
30
+ query2 = []
31
+ search_array.each do |s|
32
+ query1 += "#{s} like ? OR "
33
+ query2.push("%#{params[:widget_index][:search]}%")
34
+ end
35
+ query1 = query1[0...-4]
36
+ query = [query1] + query2
37
+ response[:records] = response[:records].where(query)
26
38
  response[:total] = response[:records].length
27
39
  response[:search] = params[:widget_index][:search]
28
40
  end
41
+ # manage sort
42
+ if params[:widget_index] && !params[:widget_index][:sort].blank? && !params[:widget_index][:sort_dir].blank?
43
+ response[:sort] = params[:widget_index][:sort]
44
+ response[:sort_dir] = params[:widget_index][:sort_dir]
45
+ response[:records] = response[:records].order("#{params[:widget_index][:sort]} #{params[:widget_index][:sort_dir]}")
46
+ end
29
47
  # manage pagination
30
48
  if pagination
31
49
  if params[:widget_index] && params[:widget_index][:pagination]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module LatoCore
4
4
 
5
- VERSION = '2.2.0'
5
+ VERSION = '2.2.2'
6
6
 
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lato_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ideonetwork
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-26 00:00:00.000000000 Z
11
+ date: 2018-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -471,7 +471,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
471
471
  version: '0'
472
472
  requirements: []
473
473
  rubyforge_project:
474
- rubygems_version: 2.6.14
474
+ rubygems_version: 2.7.3
475
475
  signing_key:
476
476
  specification_version: 4
477
477
  summary: Lato core module