it-logica-application-backbone 1.0.3 → 1.0.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.3
1
+ 1.0.4
@@ -69,10 +69,11 @@
69
69
  // the parameter is the node being loaded
70
70
  // (may be -1, 0, or undefined when loading the root nodes)
71
71
  "data":function (n) {
72
+ var root_id = typeof(self.settings['root_id']) == 'undefined' ? 0 : self.settings['root_id'];
72
73
  // the result is fed to the AJAX request `data` option
73
74
  return {
74
75
  "operation":"get_children",
75
- "id":n.attr ? n.attr("id").replace("node_", "") : 0
76
+ "id":n.attr ? n.attr("id").replace("node_", "") : root_id
76
77
  };
77
78
  },
78
79
  // "success" : function (data) {
@@ -238,7 +238,9 @@ function parse_link_and_load_page(element) {
238
238
  var settings = {};
239
239
  settings['url'] = element.attr("href");
240
240
  settings['symlink_remote'] = true;
241
-
241
+ if (element.data("content_id").length > 0) {
242
+ settings['content_id'] = element.data("content_id");
243
+ }
242
244
  load_page(settings);
243
245
  }
244
246
 
@@ -248,7 +250,9 @@ function parse_link_and_post(element) {
248
250
  settings['symlink_remote'] = true;
249
251
  settings['data'] = element.data("post");
250
252
  settings['method'] = "post";
251
-
253
+ if (element.data("content_id").length > 0) {
254
+ settings['content_id'] = element.data("content_id");
255
+ }
252
256
 
253
257
  load_page(settings);
254
258
  }
@@ -1,4 +1,8 @@
1
- <%= ajax_post_link_to "Smazat filtr", settings[:filter_path], :class => "btn", "data-post" => {:clear => true}.to_json, :style => "float: left" %>
1
+ <%= ajax_post_link_to "Smazat filtr", settings[:filter_path],
2
+ "data-content_id" => settings[:content_id].blank? ? "" : settings[:content_id],
3
+ :class => "btn",
4
+ "data-post" => {:clear => true}.to_json, :style => "float: left" %>
5
+
2
6
  <div id="<%= settings[:form_id] %>_pagination" class="pager <%= settings[:form_id] %>_pager">
3
7
  <span class="pager_pages">
4
8
  <%= will_paginate settings[:data_paginate], :container => false %>
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "it-logica-application-backbone"
8
- s.version = "1.0.3"
8
+ s.version = "1.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ladas"]
12
- s.date = "2012-07-25"
12
+ s.date = "2012-08-02"
13
13
  s.description = "longer description of your gem"
14
14
  s.email = "ladislav.smola@it-logica.cz"
15
15
  s.extra_rdoc_files = [
@@ -476,7 +476,9 @@ Gem::Specification.new do |s|
476
476
  "lib/model_mixins/tree_node_class_methods.rb",
477
477
  "lib/model_mixins/tree_node_instance_methods.rb",
478
478
  "lib/table_settings.rb",
479
+ "lib/table_settings/detail_table.rb",
479
480
  "lib/table_settings/table_action.rb",
481
+ "lib/table_settings/table_button.rb",
480
482
  "lib/table_settings/table_column.rb",
481
483
  "lib/view_mixins/breadcrumb.rb",
482
484
  "lib/view_mixins/datafiles_for.rb",
@@ -39,45 +39,98 @@ module ControllerMixins
39
39
  end
40
40
  end
41
41
 
42
+ ##
43
+ # Nastavi data pro tabulku.
44
+ #
45
+ # @param [Hash] settings
46
+ # @param [User] logger_user
47
+ # @param [String] template
48
+ #
49
+ # @return [Hash | renderuje] Hash vraci pro vykresleni tabulky, renderuje pri filtrovani
42
50
  def render_table(settings, logged_user=nil, template = nil, &proc)
43
51
  settings[:template] = template unless template.blank?
44
52
  data = yield
45
53
  class_obj = data.respond_to?(:klass) ? data.klass : data
46
- if action_name == "filter"
47
- default_params = params
48
- if !params.blank? && params["clear"]
49
- default_params = settings[:default].dup
50
- default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
51
- default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?
52
- end
53
54
 
54
- settings = class_obj.prepare_settings(logged_user, data, settings, default_params)
55
- if !params.blank? && params["clear"]
56
- session["#{settings[:form_id]}_params"] = ""
57
- render :layout => false, :action => :index
58
- else
59
- paginate = render_to_string(:partial => "/helpers/build_table_pager", :locals => {:settings => settings})
60
- session["#{settings[:form_id]}_params"] = params
61
- if settings[:template].blank?
62
- # if there is no template a will return json and tbody renders in javascript template
63
- returned_t_body = settings.to_json
64
- else
65
- # or there is template so i will return template rendered here in ruby
66
- returned_t_body = render_to_string(:partial => settings[:template], :locals => {:settings => settings})
67
- end
55
+ filter_method = settings[:filter_method]
56
+ show_table_method = settings[:show_table_method]
57
+
58
+ default_params = set_default_params(filter_method, show_table_method, settings)
59
+
60
+ settings = class_obj.prepare_settings(logged_user, data, settings, default_params)
68
61
 
69
- render :layout => false, :json => {:settings => returned_t_body, :paginate => paginate}.to_json
62
+ # Filtrovani se renderuje zde
63
+ if is_filtering?(filter_method)
64
+
65
+ if clear_filter? # Tlacitko Smazat filtr
66
+ render_table_on_clear_filter(settings, show_table_method)
67
+ else # Ostatni filtry
68
+ render_tbody_on_filter(settings)
70
69
  end
71
- elsif action_name == "index"
72
- default_params = settings[:default].dup
73
- default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
74
- default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?
75
70
 
76
- default_params = session["#{settings[:form_id]}_params"] unless session["#{settings[:form_id]}_params"].blank?
77
- settings = class_obj.prepare_settings(logged_user, data, settings, default_params)
78
71
  end
72
+
73
+ # Cele vykresleni stranky normalne z metody, ktera toto zavolala
74
+ end
75
+
76
+ def set_default_params(filter_method, show_table_method, settings )
77
+ default_params = params
78
+ default_params = default_params_for_clear_filter(settings) if is_filtering?(filter_method) && clear_filter?
79
+ default_params = default_params_for_show_table(settings) if is_showing_table?(show_table_method)
80
+ default_params
81
+ end
82
+
83
+ def render_table_on_clear_filter(settings, show_table_method)
84
+ session["#{settings[:form_id]}_params"] = ""
85
+ render :layout => false, :action => (show_table_method.blank? ? :index : show_table_method)
86
+ end
87
+
88
+ def render_tbody_on_filter(settings)
89
+ paginate = render_to_string(:partial => "/helpers/build_table_pager", :locals => {:settings => settings})
90
+ session["#{settings[:form_id]}_params"] = params
91
+ if settings[:template].blank?
92
+ # if there is no template a will return json and tbody renders in javascript template
93
+ returned_t_body = settings.to_json
94
+ else
95
+ # or there is template so i will return template rendered here in ruby
96
+ returned_t_body = render_to_string(:partial => settings[:template], :locals => {:settings => settings})
97
+ end
98
+
99
+ render :layout => false, :json => {:settings => returned_t_body, :paginate => paginate}.to_json
100
+ end
101
+
102
+ def clear_filter?
103
+ !params.blank? && params["clear"]
104
+ end
105
+
106
+ def default_params_for_clear_filter(settings)
107
+ default_params = settings[:default].dup
108
+ default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
109
+ default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?
110
+ default_params
79
111
  end
80
112
 
113
+ def default_params_for_show_table(settings)
114
+ default_params = settings[:default].dup
115
+ default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
116
+ default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?
117
+
118
+ default_params = session["#{settings[:form_id]}_params"] unless session["#{settings[:form_id]}_params"].blank?
119
+ default_params
120
+ end
121
+
122
+
123
+ def is_showing_table?(show_table_method)
124
+ action_name == "index" ||
125
+ (!show_table_method.blank? && action_name == show_table_method)
126
+ end
127
+
128
+ def is_filtering?(filter_method)
129
+ action_name == "filter" ||
130
+ (!filter_method.blank? && action_name == filter_method)
131
+ end
132
+
133
+
81
134
  def fill_settings_with opts
82
135
  settings = {}
83
136
  settings[:symlink_remote] = true
@@ -1,5 +1,6 @@
1
1
  module ControllerMixins
2
2
  module TableSettingsInterface
3
+ delegate :url_helpers, to: 'Rails.application.routes'
3
4
 
4
5
  require "table_settings.rb"
5
6
 
@@ -1,7 +1,7 @@
1
1
  module ModelMixins
2
2
  module TableSettingsInterface
3
3
  def table_settings
4
- settings = TableSettings.new(self)
4
+ settings = ::TableSettings.new(self)
5
5
  yield(settings) if block_given?
6
6
  settings
7
7
  end
@@ -1,5 +1,6 @@
1
1
  require 'table_settings/table_column.rb'
2
2
  require 'table_settings/table_action.rb'
3
+ require 'table_settings/detail_table.rb'
3
4
 
4
5
  class TableSettings
5
6
 
@@ -159,6 +160,25 @@ class TableSettings
159
160
 
160
161
  self
161
162
  end
163
+ # Metoda, ze ktere se filtruje tabulka
164
+ def filter_method(name)
165
+ @settings[:filter_method] = name
166
+ self
167
+ end
168
+
169
+ # Metoda, ze ktere se vykresluje tabulka (default: index)
170
+ def on_method(name)
171
+ @settings[:show_table_method] = name
172
+ self
173
+ end
174
+ ##
175
+ # ID tagu (napr. <div>), do ktereho se ma prekreslit cela tabulka
176
+ # (napr. pro tlacitko "Smazat filtr")
177
+ #
178
+ def content_id(string)
179
+ @settings[:content_id] = string
180
+ self
181
+ end
162
182
 
163
183
  def includes(options)
164
184
  @settings[:includes] = options
@@ -0,0 +1,67 @@
1
+ class TableSettings
2
+ class DetailTable
3
+ attr_reader :hash
4
+
5
+ def initialize
6
+ @hash = {
7
+ :only => [],
8
+ :except => [],
9
+ :global_format_method => {},
10
+ :show_timestamps => false,
11
+ :show_id => false
12
+ }
13
+ end
14
+
15
+ def hash
16
+ @hash.delete(:only) if @hash[:only].empty?
17
+ @hash.delete(:except) if @hash[:except].empty?
18
+
19
+ @hash
20
+ end
21
+
22
+ def add(column)
23
+ @hash[:only] << column
24
+ self
25
+ end
26
+
27
+ def exclude(column)
28
+ @hash[:except] << column
29
+ self
30
+ end
31
+
32
+ def show_timestamps(boolean)
33
+ @hash[:show_timestamps] = boolean
34
+ self
35
+ end
36
+
37
+ def show_id(boolean)
38
+ @hash[:show_id] = boolean
39
+ self
40
+ end
41
+
42
+ def class_name(name)
43
+ @hash[:class_name] = name
44
+ self
45
+ end
46
+
47
+ def caption(name)
48
+ @hash[:caption] = caption
49
+ self
50
+ end
51
+
52
+ def global_format_method(col_name, fnc_name)
53
+ @hash[:global_format_method][:col_name] = fnc_name
54
+ self
55
+ end
56
+
57
+ def css_id(id)
58
+ @hash[:id] = id
59
+ self
60
+ end
61
+ def css_class(name)
62
+ @hash[:class] = name
63
+ self
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,137 @@
1
+ class TableSettings
2
+ class Buttons
3
+ def initialize()
4
+ @buttons_hash = {}
5
+ @rows = {}
6
+ end
7
+
8
+ def hash
9
+ @rows.each_value do |row|
10
+ @buttons_hash[row.id] = row.data
11
+ end
12
+
13
+ @buttons_hash
14
+ end
15
+
16
+ def add_row(row_id)
17
+ row = TableSettings::Row.new(row_id)
18
+
19
+ yield(row) if block_given?
20
+
21
+ @rows[row_id] = row
22
+
23
+ row
24
+ end
25
+
26
+ def add_button(row_id, label, url_path = nil)
27
+ row = add_row(row_id) if @rows[row_id].nil?
28
+
29
+ button = row.add_button(label, url_path)
30
+
31
+ yield(button) if block_given?
32
+
33
+ button
34
+ end
35
+
36
+ end
37
+
38
+ class Row
39
+ attr_reader :id
40
+
41
+ def initialize(row_id)
42
+ @id = row_id
43
+ @buttons = []
44
+ end
45
+
46
+ def add_button(label, url_path = nil)
47
+ button = TableSettings::Button.new(@id, label, url_path)
48
+ yield(button) if block_given?
49
+ @buttons << button
50
+ button
51
+ end
52
+
53
+ def data
54
+ if @buttons.empty?
55
+ {}
56
+ elsif @buttons.size == 1
57
+ @buttons[0].hash
58
+ else @buttons.size > 1
59
+ @buttons.collect { |button| button.hash }
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+
67
+ class Button
68
+
69
+ attr_reader :hash
70
+
71
+ def initialize(id, label, url_path)
72
+ @id = id
73
+ @hash = {:name => label}
74
+ remote(true)
75
+ url(url_path)
76
+ end
77
+
78
+ def url(path)
79
+ @hash[:url] = path
80
+ self
81
+ end
82
+
83
+ def remote(boolean)
84
+ @hash[:symlink_remote] = boolean
85
+ self
86
+ end
87
+
88
+ def outer_controller(name)
89
+ @hash[:symlink_outer_controller] = name
90
+ self
91
+ end
92
+
93
+ def outer_id(id)
94
+ @hash[:symlink_outer_id] = id
95
+ self
96
+ end
97
+
98
+ def controller(name)
99
+ @hash[:symlink_controller] = name
100
+ self
101
+ end
102
+
103
+ def action(name)
104
+ @hash[:symlink_action] = name
105
+ self
106
+ end
107
+
108
+ def method(symbol)
109
+ @hash[:method] = symbol
110
+ end
111
+
112
+ def css_class(name)
113
+ @hash[:class] = name
114
+ self
115
+ end
116
+
117
+ def css_class_type(type)
118
+ css=case type
119
+ when :show then "btn btn-success"
120
+ when :edit then "btn btn-warning"
121
+ when :destroy then "btn btn-danger"
122
+ else "btn"
123
+ end
124
+ @hash[:class] = css
125
+ self
126
+ end
127
+
128
+ def css_td_class(name)
129
+ @hash[:td_class] = name
130
+ self
131
+ end
132
+ def css_tr_class(name)
133
+ @hash[:tr_class] = name
134
+ end
135
+
136
+ end
137
+ end
@@ -64,13 +64,26 @@ class TableSettings
64
64
  :name => name,
65
65
  :label => label,
66
66
  :column_method => column_method,
67
- :filter => :find
67
+ :filter => :none
68
68
  }
69
69
  @column_hash[:column_class] = column_class unless column_class.nil?
70
70
  @column_hash[:column_params] = column_params unless column_params.nil?
71
71
 
72
72
  self
73
73
  end
74
+ def callback_params(params)
75
+ @column_hash[:column_params] = params
76
+ self
77
+ end
78
+
79
+ def callback_method(name)
80
+ @column_hash[:column_method] = name
81
+ self
82
+ end
83
+ def callback_class(name)
84
+ @column_hash[:column_class] = name
85
+ self
86
+ end
74
87
  end
75
88
 
76
89
  class StandardColumn < Column
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.3
4
+ version: 1.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-25 00:00:00.000000000 Z
12
+ date: 2012-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: htmlentities
16
- requirement: &75792670 !ruby/object:Gem::Requirement
16
+ requirement: &74326790 !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: *75792670
24
+ version_requirements: *74326790
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &75791590 !ruby/object:Gem::Requirement
27
+ requirement: &74311020 !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: *75791590
35
+ version_requirements: *74311020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &75790160 !ruby/object:Gem::Requirement
38
+ requirement: &74310720 !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: *75790160
46
+ version_requirements: *74310720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &75789750 !ruby/object:Gem::Requirement
49
+ requirement: &74310450 !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: *75789750
57
+ version_requirements: *74310450
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &75277040 !ruby/object:Gem::Requirement
60
+ requirement: &74310170 !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: *75277040
68
+ version_requirements: *74310170
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &75276750 !ruby/object:Gem::Requirement
71
+ requirement: &74309850 !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: *75276750
79
+ version_requirements: *74309850
80
80
  description: longer description of your gem
81
81
  email: ladislav.smola@it-logica.cz
82
82
  executables: []
@@ -544,7 +544,9 @@ files:
544
544
  - lib/model_mixins/tree_node_class_methods.rb
545
545
  - lib/model_mixins/tree_node_instance_methods.rb
546
546
  - lib/table_settings.rb
547
+ - lib/table_settings/detail_table.rb
547
548
  - lib/table_settings/table_action.rb
549
+ - lib/table_settings/table_button.rb
548
550
  - lib/table_settings/table_column.rb
549
551
  - lib/view_mixins/breadcrumb.rb
550
552
  - lib/view_mixins/datafiles_for.rb
@@ -568,7 +570,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
568
570
  version: '0'
569
571
  segments:
570
572
  - 0
571
- hash: 718720081
573
+ hash: 866527727
572
574
  required_rubygems_version: !ruby/object:Gem::Requirement
573
575
  none: false
574
576
  requirements: