it-logica-application-backbone 1.0.14 → 1.0.15

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