it-logica-application-backbone 1.0.14 → 1.0.15

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (3.2.6)
4
+ activesupport (3.2.8)
5
5
  i18n (~> 0.6)
6
6
  multi_json (~> 1.0)
7
7
  git (1.2.5)
@@ -12,7 +12,7 @@ GEM
12
12
  git (>= 1.2.5)
13
13
  rake
14
14
  rdoc
15
- json (1.7.3)
15
+ json (1.7.5)
16
16
  multi_json (1.3.6)
17
17
  rake (0.9.2.2)
18
18
  rdoc (3.12)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.14
1
+ 1.0.15
@@ -13,6 +13,8 @@
13
13
 
14
14
  //= require ./tinymce/jscripts/tiny_mce/jquery.tinymce.js
15
15
 
16
+ //= require ./ladas_table_checkbox_pool.js.coffee
17
+
16
18
  //= require_directory .
17
19
 
18
20
 
@@ -1,5 +1,5 @@
1
1
  class TableBuilder
2
- @render_tbody:(obj) ->
2
+ @render_tbody: (obj) ->
3
3
  TableBuilder.obj = obj
4
4
 
5
5
  TableBuilder.html = ""
@@ -13,14 +13,65 @@ class TableBuilder
13
13
  do (row) ->
14
14
  TableBuilder.html += '<tr>'
15
15
 
16
+ # todo make possible to insertt function on the first or last column
17
+ TableBuilder.add_row_checkboxes(row)
16
18
  TableBuilder.add_row_functions(row)
17
19
  TableBuilder.add_row_columns(row)
18
20
 
19
21
  TableBuilder.html += '</tr>'
20
- @make_row: ->
21
22
 
23
+ TableBuilder.add_summary_row()
22
24
 
23
- @add_row_functions:(row) ->
25
+ @add_summary_row: ->
26
+ functions_present = TableBuilder.obj.row? && TableBuilder.obj.row.functions?
27
+
28
+ # code for sumarizes of the page (paginated)
29
+ TableBuilder.html += '<tr class="summarize_page">'
30
+ # todo make sure functions collumn got skipped when placement is different, eg. on the end
31
+ TableBuilder.html += '<td class="summarize"></td>' if functions_present
32
+ TableBuilder.html += '<td class="summarize"></td>' if TableBuilder.obj.checkboxes?
33
+ for col in TableBuilder.obj.columns
34
+ do (col) ->
35
+ TableBuilder.html += '<td class="summarize">'
36
+ if col.summarize_page? || col.summarize_page_value?
37
+ TableBuilder.html += '<div class="summarize_page">'
38
+ TableBuilder.html += if col.summarize_page_label? then col.summarize_page_label else '<span class="label">Celkem na stránce: </span>'
39
+ TableBuilder.html += if col.summarize_page_value? then col.summarize_page_value else 0
40
+ TableBuilder.html += '</div>'
41
+
42
+ TableBuilder.html += '</td>'
43
+ TableBuilder.html += '</tr>'
44
+
45
+ # code for sumarizes of the all filtered data (paginated is not used)
46
+ TableBuilder.html += '<tr class="summarize_all">'
47
+ TableBuilder.html += '<td class="summarize"></td>' if functions_present
48
+ TableBuilder.html += '<td class="summarize"></td>' if TableBuilder.obj.checkboxes?
49
+ for col in TableBuilder.obj.columns
50
+ do (col) ->
51
+ TableBuilder.html += '<td class="summarize">'
52
+ if col.summarize_all? || col.summarize_all_value?
53
+ TableBuilder.html += '<div class="summarize_all">'
54
+ TableBuilder.html += if col.summarize_all_label? then col.summarize_all_label else '<span class="label">Celkem: </span>'
55
+ TableBuilder.html += if col.summarize_all_value? then col.summarize_all_value else 0
56
+ TableBuilder.html += '</div>'
57
+ TableBuilder.html += '</td>'
58
+ TableBuilder.html += '</tr>'
59
+
60
+ @add_row_checkboxes: (row) ->
61
+ if TableBuilder.obj.checkboxes?
62
+ TableBuilder.html += '<td class="checkbox_collumn">'
63
+ TableBuilder.html += '<input type="checkbox" class="row_checkboxes" name="checkboxes[' + row.row_id + ']"'
64
+ TableBuilder.html += ' onclick="CheckboxPool.change($(this))"'
65
+ #console.log CheckboxPool.get_pool_by_form_id(TableBuilder.obj.form_id, row.row_id)
66
+ #console.log CheckboxPool.include_value(TableBuilder.obj.form_id, row.row_id)
67
+ TableBuilder.html += ' checked="checked"' if CheckboxPool.include_value(TableBuilder.obj.form_id, row.row_id)
68
+ TableBuilder.html += ' value="' + row.row_id + '">'
69
+
70
+
71
+ TableBuilder.html += '</td>'
72
+
73
+
74
+ @add_row_functions: (row) ->
24
75
  if TableBuilder.obj.row? && TableBuilder.obj.row.functions?
25
76
  TableBuilder.html += '<td>'
26
77
 
@@ -30,7 +81,7 @@ class TableBuilder
30
81
 
31
82
  TableBuilder.html += '</td>'
32
83
 
33
- @add_row_columns:(row) ->
84
+ @add_row_columns: (row) ->
34
85
  for col in TableBuilder.obj.columns
35
86
  do (col) ->
36
87
  TableBuilder.html += '<td class="' + col.class + '">'
@@ -67,15 +118,14 @@ class TableBuilder
67
118
  text = ""
68
119
  text = row[col.table + '_' + col.name] if row[col.table + '_' + col.name]?
69
120
  text = row[col.name] if row[col.name]? && text? && text.length <= 0
70
- console.log[text]
121
+ # console.log[text]
71
122
 
72
123
  TableBuilder.html += '<span title="' + text + '">' + text + '</span>'
73
124
 
74
125
  TableBuilder.html += '</td>'
75
126
 
76
127
 
77
- @make_href_button:(settings, row, col) ->
78
-
128
+ @make_href_button: (settings, row, col) ->
79
129
  sliced_text = settings['name']
80
130
  if col?
81
131
  if (col.max_text_length)
@@ -89,7 +139,8 @@ class TableBuilder
89
139
  if it_is_link
90
140
  stringified_settings = JSON.stringify(settings)
91
141
 
92
- stringified_settings = stringified_settings.replace(/"/g,'&quot;') # this is crutial unless the double quotes will fuck up html
142
+ stringified_settings = stringified_settings.replace(/"/g, '&quot;')
143
+ # this is crutial unless the double quotes will fuck up html
93
144
  non_ajax_url = build_get_url(settings)
94
145
  TableBuilder.html += '<a href="' + non_ajax_url + '"'
95
146
  else
@@ -104,28 +155,29 @@ class TableBuilder
104
155
  if (settings.confirm)
105
156
  TableBuilder.html += ' onclick="if (confirm(\'' + settings.confirm + '\')){ load_page(' + stringified_settings + ',this); }; return false;"'
106
157
  else
107
- TableBuilder.html += ' onclick="load_page(' + stringified_settings + ',this); return false;"'
158
+ TableBuilder.html += ' onclick="load_page(' + stringified_settings + ',this); return false;"'
108
159
 
109
160
  else if settings.js_code?
110
161
  # a javascrip code can be passed, it will be put as onclick javascript of the button
111
- TableBuilder.html += ' onclick="'+ settings.js_code
162
+ TableBuilder.html += ' onclick="' + settings.js_code
112
163
  TableBuilder.html += '"'
113
164
 
114
165
  TableBuilder.html += '>' + sliced_text
115
166
 
116
167
  if it_is_link
117
- TableBuilder.html +='</a>'
168
+ TableBuilder.html += '</a>'
118
169
  else
119
170
  TableBuilder.html += '</span>'
120
171
 
121
172
 
122
173
 
123
174
 
124
- @make_row_function_button:(button_settings, row, col) ->
125
- button_settings.symlink_id = row.row_id if row? # only for generic row functions, they are defined without the id
175
+ @make_row_function_button: (button_settings, row, col) ->
176
+ button_settings.symlink_id = row.row_id if row?
177
+ # only for generic row functions, they are defined without the id
126
178
  TableBuilder.make_href_button(button_settings, row, col)
127
179
 
128
- @make_column_from_hash:(button_settings, row, col) ->
180
+ @make_column_from_hash: (button_settings, row, col) ->
129
181
  button_settings['origin'] = 'table'
130
182
  TableBuilder.make_href_button(button_settings, row, col)
131
183
 
@@ -0,0 +1,101 @@
1
+ class CheckboxPool
2
+ @include_value: (form_id, val) ->
3
+ return CheckboxPool.get_pool_by_form_id(form_id).indexOf(val + "") >= 0
4
+
5
+ @change: (obj) ->
6
+ if $(obj).attr('checked')#CheckboxPool.include(obj)
7
+ CheckboxPool.add(obj)
8
+ else
9
+ CheckboxPool.remove(obj)
10
+
11
+
12
+ @update_pool: (obj, pool_string) ->
13
+ form = $(obj).parents("form")
14
+ form_id = form.attr("id")
15
+
16
+ $('#' + form_id + '_checkbox_pool').val(pool_string)
17
+ CheckboxPool.update_number_of_checked(form_id)
18
+
19
+ @update_pool_by_form_id: (form_id, pool_string) ->
20
+ $('#' + form_id + '_checkbox_pool').val(pool_string)
21
+ CheckboxPool.update_number_of_checked(form_id)
22
+
23
+ @clear_by_form_id: (form_id) ->
24
+ CheckboxPool.update_pool_by_form_id(form_id, "")
25
+ $('#' + form_id + " .row_checkboxes").each (index, element) =>
26
+ $(element).attr("checked", false)
27
+
28
+ @check_page: (form_id) ->
29
+ $('#' + form_id + " .row_checkboxes").each (index, element) =>
30
+ $(element).attr("checked", true)
31
+ CheckboxPool.change(element)
32
+
33
+ @uncheck_page: (form_id) ->
34
+ $('#' + form_id + " .row_checkboxes").each (index, element) =>
35
+ $(element).attr("checked", false)
36
+ CheckboxPool.change(element)
37
+
38
+ #######################################################
39
+ #private
40
+ #######################################################
41
+
42
+ @add: (obj) ->
43
+ return if CheckboxPool.include(obj)
44
+
45
+ val = $(obj).val()
46
+ pool = CheckboxPool.get_pool(obj)
47
+ if pool.length <= 0
48
+ pool = Array(val)
49
+ else
50
+ pool.push(val)
51
+
52
+ new_pool_string = pool.join(",")
53
+
54
+ CheckboxPool.update_pool(obj, new_pool_string)
55
+
56
+ @remove: (obj) ->
57
+ return unless CheckboxPool.include(obj)
58
+
59
+ pool = CheckboxPool.get_pool(obj)
60
+ pool.splice(CheckboxPool.position(obj), 1)
61
+
62
+ if pool.length <= 0
63
+ new_pool_string = ""
64
+ else
65
+ new_pool_string = pool.join(",")
66
+
67
+ CheckboxPool.update_pool(obj, new_pool_string)
68
+
69
+
70
+ @position: (obj) ->
71
+ checkbox = $(obj)
72
+ return CheckboxPool.get_pool(obj).indexOf(checkbox.val())
73
+
74
+ @include: (obj) ->
75
+ checkbox = $(obj)
76
+ return CheckboxPool.get_pool(obj).indexOf(checkbox.val()) >= 0
77
+
78
+ @get_pool: (obj) ->
79
+ form = $(obj).parents("form")
80
+ form_id = form.attr("id")
81
+
82
+ return CheckboxPool.get_pool_by_form_id(form_id)
83
+
84
+ @get_pool_by_form_id: (form_id) ->
85
+ pool_string = $('#' + form_id + '_checkbox_pool').val()
86
+ if pool_string.length <= 0
87
+ pool = Array()
88
+ else
89
+ pool = pool_string.split(",")
90
+
91
+ return pool
92
+
93
+ @update_number_of_checked: (form_id) ->
94
+ $('#' + form_id + '_active_checkboxes_count').html(CheckboxPool.get_pool_by_form_id(form_id).length)
95
+
96
+ window.CheckboxPool = CheckboxPool
97
+
98
+
99
+
100
+
101
+
@@ -0,0 +1,97 @@
1
+ class TableSorting
2
+ @change_sorting: (form_id, order_by_value, dir, obj) ->
3
+ order_by_value = order_by_value.toLowerCase()
4
+ dir = dir.toLowerCase()
5
+
6
+ order_by_id = '#' + form_id + '_order_by'
7
+ default_order_by_val = $('#' + form_id + '_default_order_by').val().toLowerCase()
8
+
9
+ order_by_array = $(order_by_id).val().toLowerCase().split(",")
10
+ #console.log(order_by_value)
11
+ #console.log(dir)
12
+ #console.log(order_by_array)
13
+
14
+ if (order_by_array.indexOf(order_by_value + " " + dir) >= 0)
15
+ # the value is already there, if I click on it again I want to cancel the sorting by element value
16
+ #console.log("mazu")
17
+ index = order_by_array.indexOf(order_by_value + " " + dir)
18
+ order_by_array.splice(index, 1)
19
+ if (order_by_array.length <= 0)
20
+ # the ordering is empty I will fill it with default
21
+ order_by_array.push(default_order_by_val)
22
+
23
+ #console.log(order_by_array)
24
+
25
+ else if ((dir == "desc" && order_by_array.indexOf(order_by_value + " asc") >= 0) || (dir == "asc" && order_by_array.indexOf(order_by_value + " desc") >= 0))
26
+ # there is other variant of the column desc or asc, I will swith it to the other variant
27
+ #console.log("menim dir")
28
+ if (dir == "desc")
29
+ index = order_by_array.indexOf(order_by_value + " asc")
30
+ order_by_array[index] = order_by_value + " desc"
31
+
32
+ else
33
+ index = order_by_array.indexOf(order_by_value + " desc")
34
+ order_by_array[index] = order_by_value + " asc"
35
+
36
+ #console.log(order_by_array)
37
+
38
+ else # i am not ordering by element value, I will append it to end
39
+ #console.log("pridavam")
40
+ order_by_array.push(order_by_value + " " + dir)
41
+
42
+
43
+ $("#" + form_id + " .sort_button").each (index, element) =>
44
+ $(element).removeClass("active")
45
+ $(element).addClass("inactive") # give all disabled class
46
+
47
+
48
+ new_order_by_val = ""
49
+ for index,element of order_by_array
50
+ if (new_order_by_val != "")
51
+ new_order_by_val += ","
52
+
53
+ #console.log(element)
54
+ new_order_by_val += element
55
+
56
+ order_by_button_id = "#" + element.replace(" ", "___").replace(".", "___")
57
+ #console.log(order_by_button_id)
58
+ $(order_by_button_id).removeClass("inactive")
59
+ $(order_by_button_id).addClass("active")
60
+
61
+ #console.log(new_order_by_val)
62
+
63
+ $(order_by_id).val(new_order_by_val)
64
+
65
+
66
+ #$('#' + form_id).submit()
67
+
68
+ form_submit_watcher(form_id)
69
+
70
+
71
+ @force_change_sorting: (form_id, order_by_value, dir, obj) ->
72
+ order_by_value = order_by_value.toLowerCase()
73
+ dir = dir.toLowerCase()
74
+ order_by_id = '#' + form_id + '_order_by'
75
+
76
+ $("#" + form_id + " .sort_button").each (index, element) =>
77
+ $(element).removeClass("active")
78
+ $(element).addClass("inactive") # give all disabled class
79
+
80
+ element = order_by_value + " " + dir
81
+ order_by_button_id = "#" + element.replace(" ", "___").replace(".", "___")
82
+ $(order_by_button_id).removeClass("inactive")
83
+ $(order_by_button_id).addClass("active")
84
+
85
+ $(order_by_id).val(element)
86
+
87
+ #$('#' + form_id).submit()
88
+ form_submit_watcher(form_id)
89
+
90
+
91
+
92
+ window.TableSorting = TableSorting
93
+
94
+
95
+
96
+
97
+
@@ -1,4 +1,7 @@
1
1
  <%= form_tag settings[:filter_path], :html => {:'data-type' => 'html'}, :method => 'POST', :class => 'forms', :remote => true, :id => settings[:form_id] do |f| %>
2
+ <% if content_for?(:table_form) %>
3
+ <%= yield :table_form %>
4
+ <% end %>
2
5
  <%= render :partial => "/helpers/build_table_filter", :locals => {:settings => settings} %>
3
6
  <%= render :partial => "/helpers/build_table_wrapper", :locals => {:settings => settings} %>
4
7
  <% end %>
@@ -5,6 +5,8 @@
5
5
  <%#= submit_tag "Filter",{:class => 'button'} %>
6
6
  </fieldset>
7
7
 
8
+ <%= hidden_field_tag :checkbox_pool, (settings[:params].blank? || settings[:params][:checkbox_pool].blank?)? "" : settings[:params][:checkbox_pool], :id => settings[:form_id] + '_checkbox_pool' %>
9
+
8
10
  <%= hidden_field_tag :default_order_by, settings[:default][:order].blank? ? settings[:default][:order_by] + " " + settings[:default][:order_by_direction] : settings[:default][:order], :id => settings[:form_id] + '_default_order_by' %>
9
11
  <%= hidden_field_tag :order_by, settings[:params][:order_by], :id => settings[:form_id] + '_order_by' %>
10
12
  <%#= hidden_field_tag :order_by_direction, settings[:default][:order_by_direction], :id => settings[:form_id] + '_order_by_direction' %>
@@ -6,6 +6,23 @@
6
6
  </th>
7
7
  </tr>
8
8
  <tr>
9
+ <% if !settings[:checkboxes].blank? && settings[:checkboxes] %>
10
+ <th>
11
+
12
+ <div class="checkboxes_filtered">
13
+ Filtrováno položek:
14
+ <span id="<%= settings[:form_id]+ "_active_checkboxes_count" %>"><%= !settings[:params]["checkbox_pool"].blank? ? settings[:params]["checkbox_pool"].split(",").count : 0 %></span>
15
+ <a onclick="CheckboxPool.clear_by_form_id('<%= settings[:form_id] %>')" class="btn uncheck">Odznačit vše</a>
16
+ </div>
17
+
18
+ <div class="checkboxes_menu">
19
+ <a onclick="CheckboxPool.uncheck_page('<%= settings[:form_id] %>')" class="btn">Odznačit vše</a>
20
+ <a onclick="CheckboxPool.check_page('<%= settings[:form_id] %>')" class="btn">Označit vše</a>
21
+ </div>
22
+
23
+
24
+ </th>
25
+ <% end %>
9
26
  <% if !settings[:row].blank? && !settings[:row][:functions].blank? %>
10
27
  <th></th>
11
28
  <% end %>
@@ -22,12 +39,14 @@
22
39
  <span class="sortButtons az">
23
40
  <% if col[:column_method].blank? && col[:row_method].blank? && !col[:name].blank? %>
24
41
 
25
- <span onclick="filter_sort('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'asc', this); return false;"
42
+ <span onclick="TableSorting.change_sorting('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'asc', this); return false;"
43
+ ondblclick="TableSorting.force_change_sorting('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'asc', this); return false;"
26
44
  title="Seřadit vzestupně"
27
45
  class="icon-arrow-up sort_button sort-up <%= (order_by_arr.include?(col[:table] + "." + col[:name] + " asc")) ? "active" : "inactive" %>"
28
46
  id="<%= order_asc_id %>">
29
47
  <span class="oos"></span></span>
30
- <span onclick="filter_sort('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'desc', this); return false;"
48
+ <span onclick="TableSorting.change_sorting('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'desc', this); return false;"
49
+ ondblclick="TableSorting.force_change_sorting('<%= settings[:form_id] %>','<%= col[:table] + "." +col[:name] %>', 'desc', this); return false;"
31
50
  title="Seřadit sestupně"
32
51
  class="icon-arrow-down sort_button sort-down <%= (order_by_arr.include?(col[:table] + "." + col[:name] + " desc")) ? "active" : "inactive" %>"
33
52
  id="<%= order_desc_id %>">
@@ -49,13 +68,13 @@
49
68
  <% saved_param = (!settings[:params].blank? && !settings[:params]['date_from'].blank? && !settings[:params]['date_from']["#{col[:table]}.#{col[:name]}"].blank?) ? settings[:params]['date_from']["#{col[:table]}.#{col[:name]}"] : "" %>
50
69
 
51
70
  <%= text_field_tag "number_from[#{col[:table]}.#{col[:name]}]", saved_param, {:class => "input-small input-mini #{settings[:form_id] + '_column_find'}",
52
- :onchange => "form_submit_watcher('#{settings[:form_id]}')",
53
- :title => "Vetší nebo rovno"} %>
71
+ :onchange => "form_submit_watcher('#{settings[:form_id]}')",
72
+ :title => "Vetší nebo rovno"} %>
54
73
  <% saved_param = (!settings[:params].blank? && !settings[:params]['date_to'].blank? && !settings[:params]['date_to']["#{col[:table]}.#{col[:name]}"].blank?) ? settings[:params]['date_to']["#{col[:table]}.#{col[:name]}"] : "" %>
55
74
  <%#= label_tag "date_to[#{col[:table]}.#{col[:name]}]", "Do", :class => "datetime_class_label" %>
56
75
  <%= text_field_tag "number_to[#{col[:table]}.#{col[:name]}]", saved_param, {:class => "input-small input-mini #{settings[:form_id] + '_column_find'}",
57
- :onchange => "form_submit_watcher('#{settings[:form_id]}')",
58
- :title => "Menší nebo rovno"} %>
76
+ :onchange => "form_submit_watcher('#{settings[:form_id]}')",
77
+ :title => "Menší nebo rovno"} %>
59
78
  <span></span>
60
79
  <% when :date %>
61
80
  <% saved_param = (!settings[:params].blank? && !settings[:params]['date_from'].blank? && !settings[:params]['date_from']["#{col[:table]}.#{col[:name]}"].blank?) ? settings[:params]['date_from']["#{col[:table]}.#{col[:name]}"] : "" %>
@@ -124,7 +143,7 @@
124
143
  checkAllText:"Označit vše",
125
144
  uncheckAllText:"Zrušit vše",
126
145
  minWidth:100
127
- }, function () {
146
+ },function () {
128
147
  form_submit_watcher('<%=settings[:form_id] %>');
129
148
  }).multiselectfilter();
130
149
  //$('#filled_value_' + fid + '_' + rid).multiselect("open");
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "it-logica-application-backbone"
8
- s.version = "1.0.14"
8
+ s.version = "1.0.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ladas"]
@@ -144,7 +144,9 @@ Gem::Specification.new do |s|
144
144
  "app/assets/javascripts/backbone_js/ladas_paginate.js",
145
145
  "app/assets/javascripts/backbone_js/ladas_saving.js",
146
146
  "app/assets/javascripts/backbone_js/ladas_table_builder.js.coffee",
147
+ "app/assets/javascripts/backbone_js/ladas_table_checkbox_pool.js.coffee",
147
148
  "app/assets/javascripts/backbone_js/ladas_table_for.js",
149
+ "app/assets/javascripts/backbone_js/ladas_table_sorting.js.coffee",
148
150
  "app/assets/javascripts/backbone_js/ladas_table_summaries.js.coffee",
149
151
  "app/assets/javascripts/backbone_js/ladas_tinymce.js",
150
152
  "app/assets/javascripts/backbone_js/load-image.min.js",
@@ -6,8 +6,13 @@ module ModelMixins
6
6
 
7
7
  params[:order_by] = settings[:default][:order] if params[:order_by].blank? && !settings[:default][:order].blank?
8
8
 
9
+ # todo pokud budu predavat per page, mel bz byt i parametr s povolenymi hodnotami per page
10
+ params[:per_page] = params["per_page"] unless params["per_page"].blank?
11
+
12
+ params[:per_page] = settings[:default][:per_page] if params[:per_page].blank? && !settings[:default][:per_page].blank?
13
+ params[:per_page] = per_page if params[:per_page].blank?
14
+ per_page = params[:per_page]
9
15
 
10
- params[:per_page] = per_page
11
16
 
12
17
  # method below can change this if there were some virtual non exixtent columns
13
18
  params[:real_order_by] = params[:order_by]
@@ -21,6 +26,8 @@ module ModelMixins
21
26
  items = not_selected_items.selection(settings)
22
27
  end
23
28
 
29
+ # the array of items, Will be filled with column method values, formatting values, etc.
30
+ all_items = items.all # maybe can be done more optimal
24
31
 
25
32
  if settings[:template].blank?
26
33
  # initialize another_global_formats,another_formats and column_methods
@@ -28,6 +35,18 @@ module ModelMixins
28
35
  another_formats = []
29
36
  column_methods = []
30
37
  settings[:columns].each do |col|
38
+ if !col[:summarize_page].blank? && col[:summarize_page]
39
+ # mysql SUM of the collumn on the page
40
+ # passing all_items.total_entries because I don't want it to count again
41
+ col[:summarize_page_value] = sumarize(object, col, object.filter(object, settings, params, per_page, all_items.total_entries).selection(settings))
42
+ end
43
+
44
+ if !col[:summarize_all].blank? && col[:summarize_all]
45
+ # mysql SUM of the collumn off all data
46
+ col[:summarize_all_value] = sumarize(object, col, object.filter(object, settings, params, false).selection(settings))
47
+ end
48
+
49
+
31
50
  unless col[:global_format_method].blank?
32
51
  # ToDo dodelat moznost predani parametru do formatovaci metody
33
52
  col[:name] = col[:name].blank? ? "non_existing_column___" + col[:global_format_method] : col[:name]
@@ -54,8 +73,6 @@ module ModelMixins
54
73
  end
55
74
 
56
75
 
57
- # the array of items, Will be filled with column method values, formatting values
58
- all_items = items.all # maybe can be done more optimal
59
76
  # same as template_items below, loads objects so column method are better to use
60
77
  # todo think about, but I dont need object, because it's making the same query twice, I just need class and with one outer join it return filtered data, and i include includes to it
61
78
  #template_items = object.joins("RIGHT OUTER JOIN (" + not_selected_items.select(settings[:row][:id] + " AS row_id").to_sql + ") temp_template_query ON #{settings[:row][:id]} = temp_template_query.row_id")
@@ -162,7 +179,7 @@ module ModelMixins
162
179
  end
163
180
  if val.kind_of?(Hash)
164
181
  summary[:value] = val[:value]
165
- summary[:class] = val[:class]
182
+ summary[:class] = val[:class]
166
183
  else
167
184
  summary[:value] = val
168
185
  end
@@ -176,6 +193,25 @@ module ModelMixins
176
193
  settings
177
194
  end
178
195
 
196
+ def sumarize(object, col, items)
197
+ #method for sumarizing values in column
198
+
199
+ if col[:sql_expression].blank?
200
+ col_name = "#{col[:table]}_#{col[:name]}"
201
+ else
202
+ col_name = col[:name]
203
+ end
204
+
205
+ if object.respond_to?(:klass)
206
+ mysql_count = object.klass.find_by_sql("SELECT SUM(#{col_name}) AS sum_column FROM (" + items.to_sql + ") count")
207
+ else
208
+ mysql_count = object.find_by_sql("SELECT SUM(#{col_name}) AS sum_column FROM (" + items.to_sql + ") count")
209
+ end
210
+
211
+ #count = items.sum(col[:name])
212
+ count = mysql_count.first[:sum_column]
213
+ end
214
+
179
215
  def selection(settings)
180
216
  select_string = ""
181
217
  settings[:columns].each do |col|
@@ -217,7 +253,7 @@ module ModelMixins
217
253
  select(select_string)
218
254
  end
219
255
 
220
- def filter(object, settings, params, per_page = 10)
256
+ def filter(object, settings, params, per_page = 10, total_count = nil)
221
257
  order_by = params[:real_order_by]
222
258
 
223
259
  cond_str = ""
@@ -348,20 +384,28 @@ module ModelMixins
348
384
  settings[:columns].each do |col|
349
385
  col[:table_primary_key] = "id" if col[:table_primary_key].blank?
350
386
  if !col[:join_on].blank?
351
- col[:select] += ", #{col[:table_primary_key]}" # adding primary key so it can be used in on condition
352
- ret= ret.joins("LEFT OUTER JOIN (SELECT #{col[:select]} FROM #{col[:table]}) #{col[:select_as]} ON #{col[:select_as]}.#{col[:table_primary_key]}=#{col[:join_on]}")
387
+ join_on_select = col[:select] + ", #{col[:table_primary_key]}" # adding primary key so it can be used in on condition
388
+ ret= ret.joins("LEFT OUTER JOIN (SELECT #{join_on_select} FROM #{col[:table]}) #{col[:select_as]} ON #{col[:select_as]}.#{col[:table_primary_key]}=#{col[:join_on]}")
353
389
  end
354
390
  end
355
391
 
392
+ if per_page && per_page > 0
393
+ # only when i need pagination
394
+ if total_count.blank?
395
+ # if I call this more times, I can pass the total count and not count it multiple times
356
396
 
357
- # fuck will paginate, if there are agregated queries that I use for condition, will_paginage will delete it
358
- # i am counting rows on my own
359
- if object.respond_to?(:klass)
360
- mysql_count = object.klass.find_by_sql("SELECT COUNT(*) AS count_all FROM (" + ret.selection(settings).to_sql + ") count")
361
- else
362
- mysql_count = object.find_by_sql("SELECT COUNT(*) AS count_all FROM (" + ret.selection(settings).to_sql + ") count")
397
+ # fuck will paginate, if there are agregated queries that I use for condition, will_paginage will delete it
398
+ # i am counting rows on my own (as sugested in will paginete gem, when the query got more complex)
399
+ if object.respond_to?(:klass)
400
+ mysql_count = object.klass.find_by_sql("SELECT COUNT(*) AS count_all FROM (" + ret.selection(settings).to_sql + ") count")
401
+ else
402
+ mysql_count = object.find_by_sql("SELECT COUNT(*) AS count_all FROM (" + ret.selection(settings).to_sql + ") count")
403
+ end
404
+ ret = ret.paginate(:page => params[:page], :per_page => per_page, :total_entries => mysql_count.first[:count_all])
405
+ else
406
+ ret = ret.paginate(:page => params[:page], :per_page => per_page, :total_entries => total_count)
407
+ end
363
408
  end
364
- ret = ret.paginate(:page => params[:page], :per_page => per_page, :total_entries => mysql_count.first[:count_all])
365
409
 
366
410
  ret
367
411
  end
@@ -33,6 +33,20 @@ class TableSettings
33
33
  button
34
34
  end
35
35
 
36
+ # Add summary value to page
37
+ def summarize_page_value(value)
38
+ @buttons_hash[:summarize_page_value] = value
39
+
40
+ self
41
+ end
42
+
43
+ # Add summary value to whole column
44
+ def summarize_page_all_value(value)
45
+ @buttons_hash[:summarize_page_all] = value
46
+
47
+ self
48
+ end
49
+
36
50
  end
37
51
 
38
52
  class Row
@@ -108,10 +108,23 @@ class TableSettings
108
108
  self
109
109
  end
110
110
 
111
+ # Table for column
111
112
  def table(name)
112
113
  @column_hash[:table] = name
113
114
  self
114
115
  end
116
+
117
+ # Count summary for page
118
+ def summarize_page
119
+ @column_hash[:summarize_page]
120
+ self
121
+ end
122
+
123
+ # Count summary for column
124
+ def summarize_all
125
+ @column_hash[:summarize_all]
126
+ self
127
+ end
115
128
  end
116
129
 
117
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: it-logica-application-backbone
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14
4
+ version: 1.0.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-08-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: htmlentities
16
- requirement: &74903850 !ruby/object:Gem::Requirement
16
+ requirement: &84148440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *74903850
24
+ version_requirements: *84148440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &74903540 !ruby/object:Gem::Requirement
27
+ requirement: &84148180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *74903540
35
+ version_requirements: *84148180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &74903250 !ruby/object:Gem::Requirement
38
+ requirement: &84147870 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.12'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *74903250
46
+ version_requirements: *84147870
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &74902960 !ruby/object:Gem::Requirement
49
+ requirement: &84147570 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.1.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *74902960
57
+ version_requirements: *84147570
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &74902650 !ruby/object:Gem::Requirement
60
+ requirement: &84147250 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.8.4
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *74902650
68
+ version_requirements: *84147250
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &74902320 !ruby/object:Gem::Requirement
71
+ requirement: &84146960 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *74902320
79
+ version_requirements: *84146960
80
80
  description: longer description of your gem
81
81
  email: ladislav.smola@it-logica.cz
82
82
  executables: []
@@ -212,7 +212,9 @@ files:
212
212
  - app/assets/javascripts/backbone_js/ladas_paginate.js
213
213
  - app/assets/javascripts/backbone_js/ladas_saving.js
214
214
  - app/assets/javascripts/backbone_js/ladas_table_builder.js.coffee
215
+ - app/assets/javascripts/backbone_js/ladas_table_checkbox_pool.js.coffee
215
216
  - app/assets/javascripts/backbone_js/ladas_table_for.js
217
+ - app/assets/javascripts/backbone_js/ladas_table_sorting.js.coffee
216
218
  - app/assets/javascripts/backbone_js/ladas_table_summaries.js.coffee
217
219
  - app/assets/javascripts/backbone_js/ladas_tinymce.js
218
220
  - app/assets/javascripts/backbone_js/load-image.min.js
@@ -572,7 +574,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
572
574
  version: '0'
573
575
  segments:
574
576
  - 0
575
- hash: -336138193
577
+ hash: -449014353
576
578
  required_rubygems_version: !ruby/object:Gem::Requirement
577
579
  none: false
578
580
  requirements: