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 +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:
|