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 +2 -2
- data/VERSION +1 -1
- data/app/assets/javascripts/backbone_js/index.js +2 -0
- data/app/assets/javascripts/backbone_js/ladas_table_builder.js.coffee +66 -14
- data/app/assets/javascripts/backbone_js/ladas_table_checkbox_pool.js.coffee +101 -0
- data/app/assets/javascripts/backbone_js/ladas_table_sorting.js.coffee +97 -0
- data/app/views/helpers/_build_table.html.erb +3 -0
- data/app/views/helpers/_build_table_filter.html.erb +2 -0
- data/app/views/helpers/_build_table_wrapper.html.erb +26 -7
- data/it-logica-application-backbone.gemspec +3 -1
- data/lib/model_mixins/table_builder_class_methods.rb +58 -14
- data/lib/table_settings/table_button.rb +14 -0
- data/lib/table_settings/table_column.rb +13 -0
- metadata +16 -14
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (3.2.
|
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.
|
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.
|
1
|
+
1.0.15
|
@@ -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
|
-
@
|
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,'"')
|
142
|
+
stringified_settings = stringified_settings.replace(/"/g, '"')
|
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 +=
|
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 +=
|
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?
|
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="
|
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="
|
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
|
-
|
53
|
-
|
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
|
-
|
58
|
-
|
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
|
-
},
|
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.
|
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]
|
352
|
-
ret= ret.joins("LEFT OUTER JOIN (SELECT #{
|
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
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *84148440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
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: *
|
35
|
+
version_requirements: *84148180
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rdoc
|
38
|
-
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: *
|
46
|
+
version_requirements: *84147870
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
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: *
|
57
|
+
version_requirements: *84147570
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
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: *
|
68
|
+
version_requirements: *84147250
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
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: *
|
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: -
|
577
|
+
hash: -449014353
|
576
578
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
577
579
|
none: false
|
578
580
|
requirements:
|