fancygrid 1.1.0 → 2.0.0
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/CHANGELOG +9 -2
- data/Gemfile +6 -9
- data/Gemfile.lock +88 -103
- data/README.md +226 -0
- data/ROADMAP +0 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/app/views/fancygrid/controls.html.haml +34 -0
- data/app/views/fancygrid/fancygrid.html.haml +18 -0
- data/app/views/fancygrid/search.html.haml +24 -0
- data/app/views/fancygrid/sort.html.haml +8 -0
- data/app/views/fancygrid/table.html.haml +25 -0
- data/config/locales/fancygrid.de.yml +17 -19
- data/config/locales/fancygrid.en.yml +14 -17
- data/fancygrid.gemspec +48 -88
- data/lib/assets/javascripts/fancygrid.js +425 -0
- data/lib/assets/javascripts/fancygrid.min.js +15 -0
- data/lib/assets/stylesheets/fancygrid.css +177 -0
- data/lib/fancygrid.rb +63 -44
- data/lib/fancygrid/column.rb +165 -0
- data/lib/fancygrid/controller/helper.rb +46 -0
- data/lib/fancygrid/grid.rb +171 -317
- data/lib/fancygrid/node.rb +85 -490
- data/lib/fancygrid/object_wrapper.rb +24 -0
- data/lib/fancygrid/orm/active_record.rb +39 -0
- data/lib/fancygrid/orm/sql_generator.rb +127 -0
- data/lib/fancygrid/view/helper.rb +44 -0
- data/lib/fancygrid/view_state.rb +161 -0
- data/spec/column_spec.rb +29 -0
- data/spec/dummy/app/controllers/application_controller.rb +48 -0
- data/spec/dummy/app/views/application/index.html.haml +11 -0
- data/spec/dummy/app/views/layouts/application.html.erb +1 -1
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/config/environments/development.rb +2 -2
- data/spec/dummy/config/environments/test.rb +2 -2
- data/spec/dummy/config/routes.rb +3 -2
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +26 -0
- data/spec/dummy/public/javascripts/jquery-1.4.2.js +6240 -0
- data/spec/dummy/public/javascripts/jquery-fancygrid.js +425 -0
- data/spec/dummy/public/javascripts/jquery-ui.js +41 -0
- data/spec/dummy/public/stylesheets/fancygrid.css +183 -0
- data/spec/node_spec.rb +79 -301
- data/spec/spec_helper.rb +0 -29
- data/spec/view_state_spec.rb +91 -0
- metadata +124 -137
- data/.bundle/config +0 -2
- data/README.rdoc +0 -299
- data/app/views/fancygrid/_cells.html.haml +0 -13
- data/app/views/fancygrid/base/controls.html.haml +0 -40
- data/app/views/fancygrid/base/list_frame.html.haml +0 -37
- data/app/views/fancygrid/base/search.html.haml +0 -33
- data/app/views/fancygrid/base/sort.html.haml +0 -20
- data/app/views/fancygrid/base/table_frame.html.haml +0 -45
- data/config/initializers/fancygrid.rb +0 -67
- data/lib/fancygrid/helper.rb +0 -129
- data/lib/fancygrid/query_generator.rb +0 -340
- data/lib/fancygrid/view.rb +0 -148
- data/lib/generators/install_generator.rb +0 -61
- data/lib/generators/views_generator.rb +0 -25
- data/lib/version.rb +0 -0
- data/public/images/fancygrid/add.png +0 -0
- data/public/images/fancygrid/clear.png +0 -0
- data/public/images/fancygrid/ddn.png +0 -0
- data/public/images/fancygrid/dn.png +0 -0
- data/public/images/fancygrid/dots.png +0 -0
- data/public/images/fancygrid/loading.gif +0 -0
- data/public/images/fancygrid/magnifier.png +0 -0
- data/public/images/fancygrid/next.png +0 -0
- data/public/images/fancygrid/order.png +0 -0
- data/public/images/fancygrid/prev.png +0 -0
- data/public/images/fancygrid/reload.png +0 -0
- data/public/images/fancygrid/remove.png +0 -0
- data/public/images/fancygrid/spacer.gif +0 -0
- data/public/images/fancygrid/submit.png +0 -0
- data/public/images/fancygrid/th_bg.png +0 -0
- data/public/images/fancygrid/up.png +0 -0
- data/public/images/fancygrid/uup.png +0 -0
- data/public/javascripts/fancygrid.js +0 -477
- data/public/javascripts/fancygrid.min.js +0 -17
- data/public/stylesheets/fancygrid.css +0 -289
- data/public/stylesheets/fancygrid.scss +0 -302
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/production.log +0 -0
- data/spec/dummy/log/server.log +0 -0
- data/spec/dummy/log/test.log +0 -1026
- data/spec/dummy/public/javascripts/application.js +0 -2
- data/spec/dummy/public/javascripts/controls.js +0 -965
- data/spec/dummy/public/javascripts/dragdrop.js +0 -974
- data/spec/dummy/public/javascripts/effects.js +0 -1123
- data/spec/dummy/public/javascripts/prototype.js +0 -6001
- data/spec/dummy/public/javascripts/rails.js +0 -175
- data/spec/grid_spec.rb +0 -15
- data/spec/integration/navigation_spec.rb +0 -9
- data/spec/query_generator_spec.rb +0 -358
@@ -0,0 +1,183 @@
|
|
1
|
+
body {
|
2
|
+
margin: 0;
|
3
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
4
|
+
font-size: 13px;
|
5
|
+
line-height: 18px;
|
6
|
+
}
|
7
|
+
|
8
|
+
.fg-control-bar{
|
9
|
+
list-style: none;
|
10
|
+
display: block;
|
11
|
+
text-align: center;
|
12
|
+
margin: 0px;
|
13
|
+
padding: 5px;
|
14
|
+
}
|
15
|
+
|
16
|
+
.fg-control-bar li{
|
17
|
+
display: inline;
|
18
|
+
}
|
19
|
+
|
20
|
+
tr.fg-search td .fg-search-criterion{
|
21
|
+
border: 1px solid #ccc;
|
22
|
+
padding: 3px;
|
23
|
+
}
|
24
|
+
tr.fg-search td .fg-search-criterion input,
|
25
|
+
tr.fg-search td .fg-search-criterion select{
|
26
|
+
border: 0px;
|
27
|
+
padding: 0px;
|
28
|
+
width: 100%;
|
29
|
+
outline: none;
|
30
|
+
-webkit-appearance:scrollbarbutton-down;
|
31
|
+
}
|
32
|
+
tr.fg-search td .fg-search-criterion select:focus;{
|
33
|
+
outline: none;
|
34
|
+
}
|
35
|
+
|
36
|
+
tr.fg-header th.fg-orderable{
|
37
|
+
background-position: 50% 0%;
|
38
|
+
background-repeat: no-repeat;
|
39
|
+
cursor: pointer;
|
40
|
+
}
|
41
|
+
tr.fg-header th.fg-orderable[fg-sort-order=asc]{
|
42
|
+
background-image: url(
|
43
|
+
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiYEACkZER/0GYARuASoAxhiJkSQxF2CSRFQEEGADl3xw9oxw7tQAAAABJRU5ErkJggg==
|
44
|
+
);
|
45
|
+
}
|
46
|
+
tr.fg-header th.fg-orderable:hover[fg-sort-order=asc]{
|
47
|
+
background-image: url(
|
48
|
+
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAECAMAAAB1GNVPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNQTFRF1NTUfX190dHRtLS0l5eXQEBAR0dH1dXVREREr6+v2dnZn5+fbGxseXl5RkZGzMzM////BUSGAAAAABF0Uk5T/////////////////////wAlrZliAAAAJklEQVR42mIQEBBgA2IGAQEORh4QzcrLycwtwMDHwsTPwMUOEGAAFi0BOZt2IEwAAAAASUVORK5CYII=
|
49
|
+
);
|
50
|
+
}
|
51
|
+
tr.fg-header th.fg-orderable[fg-sort-order=desc]{
|
52
|
+
background-image: url(
|
53
|
+
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAEAgMAAADOo5ZjAAAACVBMVEUAAAAAAABZWVjux8MkAAAAAXRSTlMAQObYZgAAABRJREFUeNpjmBrGoBrBwJnAwNQAAA+QAlRLCPc3AAAAAElFTkSuQmCC
|
54
|
+
);
|
55
|
+
}
|
56
|
+
tr.fg-header th.fg-orderable:hover[fg-sort-order=desc]{
|
57
|
+
background-image: url(
|
58
|
+
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAECAMAAAB1GNVPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRFfX19xMTEbW1ttLS0jo6OREREr6+vycnJj4+Pubm5jIyMlpaWsLCwoKCg1NTU////gVMa/AAAABB0Uk5T////////////////////AOAjXRkAAAAmSURBVHjaYmBl4GLhZeNh4Gfi5mTn42fg5+dg5OMH0fzMQAwQYAAQZgEsd9uAdAAAAABJRU5ErkJggg==
|
59
|
+
);
|
60
|
+
}
|
61
|
+
|
62
|
+
.fg-control-bar [class^="fg-button"],
|
63
|
+
.fg-search [class^="fg-button"]{
|
64
|
+
cursor: pointer;
|
65
|
+
display: inline-block;
|
66
|
+
width: 14px;
|
67
|
+
height: 14px;
|
68
|
+
vertical-align: text-top;
|
69
|
+
background-image: url(
|
70
|
+
data:image/png;base64,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
|
71
|
+
);
|
72
|
+
|
73
|
+
background-position: 14px 14px;
|
74
|
+
background-repeat: no-repeat;
|
75
|
+
*margin-right: .3em;
|
76
|
+
}
|
77
|
+
.fg-control-bar .fg-button-search,
|
78
|
+
.fg-search .fg-button-refresh{
|
79
|
+
background-position: -48px 0;
|
80
|
+
}
|
81
|
+
.fg-search .fg-button-add-criterion{
|
82
|
+
background-position: 0 -96px;
|
83
|
+
}
|
84
|
+
.fg-search .fg-button-remove-criterion{
|
85
|
+
background-position: -24px -96px;
|
86
|
+
}
|
87
|
+
|
88
|
+
.fg-control-bar .fg-button-prev{
|
89
|
+
background-position: -432px -72px;
|
90
|
+
}
|
91
|
+
.fg-control-bar .fg-button-next{
|
92
|
+
background-position: -456px -72px;
|
93
|
+
}
|
94
|
+
.fg-control-bar .fg-button-clear,
|
95
|
+
.fg-search .fg-button-clear{
|
96
|
+
background-position: -456px 0;
|
97
|
+
}
|
98
|
+
.fg-control-bar .fg-button-refresh{
|
99
|
+
background-position: -240px -24px;
|
100
|
+
}
|
101
|
+
.fg-control-bar .fg-button-sort{
|
102
|
+
background-position: -264px -24px;
|
103
|
+
}
|
104
|
+
|
105
|
+
.fg-container input,
|
106
|
+
.fg-container select{
|
107
|
+
padding: 3px 5px;
|
108
|
+
border: 1px solid #CCCCCC;
|
109
|
+
}
|
110
|
+
.fg-container input{
|
111
|
+
padding: 4px 5px;
|
112
|
+
}
|
113
|
+
.fg-control-bar input.fg-current-page{
|
114
|
+
width: 25px;
|
115
|
+
text-align: right;
|
116
|
+
}
|
117
|
+
|
118
|
+
.fg-control-bar .separator{
|
119
|
+
border-left: 1px solid #ccc;
|
120
|
+
margin: 0px 5px;
|
121
|
+
}
|
122
|
+
|
123
|
+
.fg-sort-window{
|
124
|
+
background-color: black;
|
125
|
+
}
|
126
|
+
|
127
|
+
.fg-sort-content{
|
128
|
+
background-color: white;
|
129
|
+
}
|
130
|
+
|
131
|
+
.fg-sort-content .fg-sortable{
|
132
|
+
list-style : none;
|
133
|
+
padding-left: 10px;
|
134
|
+
}
|
135
|
+
.fg-sort-content .fg-sort-item{
|
136
|
+
cursor : move;
|
137
|
+
}
|
138
|
+
.fg-sort-content input[type=submit]{
|
139
|
+
width: 100%;
|
140
|
+
}
|
141
|
+
|
142
|
+
/*
|
143
|
+
*
|
144
|
+
*/
|
145
|
+
.fg-container table{
|
146
|
+
width: 100%;
|
147
|
+
border-collapse: collapse;
|
148
|
+
border-spacing: 0;
|
149
|
+
border: 1px solid #ddd;
|
150
|
+
*border-collapse: collapsed;
|
151
|
+
}
|
152
|
+
|
153
|
+
.fg-container th, .fg-container td {
|
154
|
+
padding: 8px;
|
155
|
+
line-height: 18px;
|
156
|
+
text-align: left;
|
157
|
+
border-top: 1px solid #ddd;
|
158
|
+
}
|
159
|
+
|
160
|
+
.fg-container th + th,
|
161
|
+
.fg-container td + td,
|
162
|
+
.fg-container th + td,
|
163
|
+
.fg-container td + th {
|
164
|
+
border-left: 1px solid #ddd;
|
165
|
+
}
|
166
|
+
|
167
|
+
.fg-container tbody tr:nth-child(odd) td,
|
168
|
+
.fg-container tbody tr:nth-child(odd) th {
|
169
|
+
background-color: #f9f9f9;
|
170
|
+
}
|
171
|
+
|
172
|
+
.fg-search-controls,
|
173
|
+
.fg-search-criteria{
|
174
|
+
margin: 0px;
|
175
|
+
padding: 0px;
|
176
|
+
list-style: none;
|
177
|
+
}
|
178
|
+
.fg-search-criteria li{
|
179
|
+
margin-top: 5px;
|
180
|
+
}
|
181
|
+
ul.fg-search-controls li{
|
182
|
+
display: inline-block;
|
183
|
+
}
|
data/spec/node_spec.rb
CHANGED
@@ -1,326 +1,104 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Fancygrid::Node do
|
4
|
-
|
5
|
-
# builds a test structure with
|
6
|
-
# 14 leafs
|
7
|
-
# 3 nodes
|
8
|
-
# 3 levels
|
9
|
-
#
|
10
|
-
# tickets
|
11
|
-
# +- title
|
12
|
-
# +- description
|
13
|
-
# +- status
|
14
|
-
# +- is_finished?
|
15
|
-
# +- actions
|
16
|
-
# +- project_id
|
17
|
-
# +- project
|
18
|
-
# +- title
|
19
|
-
# +- class
|
20
|
-
# +- actions
|
21
|
-
# +- id
|
22
|
-
# +- foo
|
23
|
-
# +- title
|
24
|
-
# +- foo
|
25
|
-
# +- bar
|
26
|
-
# +- id
|
27
|
-
#
|
28
|
-
def build_testgrid
|
29
|
-
grid = Fancygrid::Grid.new(:ticket)
|
30
|
-
grid.attributes(:title, :description, :status)
|
31
|
-
grid.methods(:is_finished?)
|
32
|
-
grid.rendered(:actions)
|
33
|
-
grid.hidden(:project_id)
|
34
|
-
grid.columns_for(:project) do |p|
|
35
|
-
p.attributes(:title)
|
36
|
-
p.methods(:class)
|
37
|
-
p.rendered(:actions)
|
38
|
-
p.hidden(:id)
|
39
|
-
|
40
|
-
p.columns_for(:foo, Project) do |f|
|
41
|
-
f.attributes(:title)
|
42
|
-
f.methods(:foo)
|
43
|
-
f.rendered(:bar)
|
44
|
-
f.hidden(:id)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
return grid
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should build a fancygrid tree" do
|
52
|
-
|
53
|
-
grid = build_testgrid
|
54
|
-
grid.children.length.should be 7
|
55
|
-
grid.leafs.length.should be 14
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should find node by path" do
|
60
|
-
|
61
|
-
grid = build_testgrid
|
62
|
-
grid.find_by_path("ticket").name.should == :ticket
|
63
|
-
grid.find_by_path("ticket.title").name.should == :title
|
64
|
-
grid.find_by_path("ticket.description").name.should == :description
|
65
|
-
grid.find_by_path("ticket.status").name.should == :status
|
66
|
-
grid.find_by_path("ticket.is_finished?").name.should == :is_finished?
|
67
|
-
grid.find_by_path("ticket.actions").name.should == :actions
|
68
|
-
grid.find_by_path("ticket.project_id").name.should == :project_id
|
69
|
-
|
70
|
-
grid.find_by_path("ticket.project").name.should == :project
|
71
|
-
grid.find_by_path("ticket.project.title").name.should == :title
|
72
|
-
grid.find_by_path("ticket.project.class").name.should == :class
|
73
|
-
grid.find_by_path("ticket.project.actions").name.should == :actions
|
74
|
-
grid.find_by_path("ticket.project.id").name.should == :id
|
75
|
-
|
76
|
-
grid.find_by_path("ticket.project.foo").name.should == :foo
|
77
|
-
grid.find_by_path("ticket.project.foo.title").name.should == :title
|
78
|
-
grid.find_by_path("ticket.project.foo.foo").name.should == :foo
|
79
|
-
grid.find_by_path("ticket.project.foo.bar").name.should == :bar
|
80
|
-
grid.find_by_path("ticket.project.foo.id").name.should == :id
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should have a fancygrid instance as root" do
|
85
|
-
|
86
|
-
grid = build_testgrid
|
87
|
-
grid.find_by_path("ticket").root.should be(grid)
|
88
|
-
grid.find_by_path("ticket.title").root.should be(grid)
|
89
|
-
grid.find_by_path("ticket.description").root.should be(grid)
|
90
|
-
grid.find_by_path("ticket.status").root.should be(grid)
|
91
|
-
grid.find_by_path("ticket.is_finished?").root.should be(grid)
|
92
|
-
grid.find_by_path("ticket.actions").root.should be(grid)
|
93
|
-
grid.find_by_path("ticket.project_id").root.should be(grid)
|
94
|
-
|
95
|
-
grid.find_by_path("ticket.project").root.should be(grid)
|
96
|
-
grid.find_by_path("ticket.project.title").root.should be(grid)
|
97
|
-
grid.find_by_path("ticket.project.class").root.should be(grid)
|
98
|
-
grid.find_by_path("ticket.project.actions").root.should be(grid)
|
99
|
-
grid.find_by_path("ticket.project.id").root.should be(grid)
|
100
|
-
|
101
|
-
grid.find_by_path("ticket.project.foo").root.should be(grid)
|
102
|
-
grid.find_by_path("ticket.project.foo.title").root.should be(grid)
|
103
|
-
grid.find_by_path("ticket.project.foo.foo").root.should be(grid)
|
104
|
-
grid.find_by_path("ticket.project.foo.bar").root.should be(grid)
|
105
|
-
grid.find_by_path("ticket.project.foo.id").root.should be(grid)
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should be a leaf if has no children" do
|
110
|
-
|
111
|
-
grid = build_testgrid
|
112
|
-
grid.find_by_path("ticket").is_leaf?.should be(false)
|
113
|
-
grid.find_by_path("ticket.title").is_leaf?.should be(true)
|
114
|
-
grid.find_by_path("ticket.description").is_leaf?.should be(true)
|
115
|
-
grid.find_by_path("ticket.status").is_leaf?.should be(true)
|
116
|
-
grid.find_by_path("ticket.is_finished?").is_leaf?.should be(true)
|
117
|
-
grid.find_by_path("ticket.actions").is_leaf?.should be(true)
|
118
|
-
grid.find_by_path("ticket.project_id").is_leaf?.should be(true)
|
119
|
-
|
120
|
-
grid.find_by_path("ticket.project").is_leaf?.should be(false)
|
121
|
-
grid.find_by_path("ticket.project.title").is_leaf?.should be(true)
|
122
|
-
grid.find_by_path("ticket.project.class").is_leaf?.should be(true)
|
123
|
-
grid.find_by_path("ticket.project.actions").is_leaf?.should be(true)
|
124
|
-
grid.find_by_path("ticket.project.id").is_leaf?.should be(true)
|
125
|
-
|
126
|
-
grid.find_by_path("ticket.project.foo").is_leaf?.should be(false)
|
127
|
-
grid.find_by_path("ticket.project.foo.title").is_leaf?.should be(true)
|
128
|
-
grid.find_by_path("ticket.project.foo.foo").is_leaf?.should be(true)
|
129
|
-
grid.find_by_path("ticket.project.foo.bar").is_leaf?.should be(true)
|
130
|
-
grid.find_by_path("ticket.project.foo.id").is_leaf?.should be(true)
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should have a tag name if is a leaf" do
|
135
|
-
|
136
|
-
grid = build_testgrid
|
137
|
-
grid.find_by_path("ticket").tag_name.should == nil
|
138
|
-
grid.find_by_path("ticket.title").tag_name.should == "tickets[title]"
|
139
|
-
grid.find_by_path("ticket.description").tag_name.should == "tickets[description]"
|
140
|
-
grid.find_by_path("ticket.status").tag_name.should == "tickets[status]"
|
141
|
-
grid.find_by_path("ticket.is_finished?").tag_name.should == "tickets[is_finished?]"
|
142
|
-
grid.find_by_path("ticket.actions").tag_name.should == "tickets[actions]"
|
143
|
-
grid.find_by_path("ticket.project_id").tag_name.should == "tickets[project_id]"
|
144
|
-
|
145
|
-
grid.find_by_path("ticket.project").tag_name.should == nil
|
146
|
-
grid.find_by_path("ticket.project.title").tag_name.should == "projects[title]"
|
147
|
-
grid.find_by_path("ticket.project.class").tag_name.should == "projects[class]"
|
148
|
-
grid.find_by_path("ticket.project.actions").tag_name.should == "projects[actions]"
|
149
|
-
grid.find_by_path("ticket.project.id").tag_name.should == "projects[id]"
|
150
|
-
|
151
|
-
grid.find_by_path("ticket.project.foo").tag_name.should == nil
|
152
|
-
grid.find_by_path("ticket.project.foo.title").tag_name.should == "projects[title]"
|
153
|
-
grid.find_by_path("ticket.project.foo.foo").tag_name.should == "projects[foo]"
|
154
|
-
grid.find_by_path("ticket.project.foo.bar").tag_name.should == "projects[bar]"
|
155
|
-
grid.find_by_path("ticket.project.foo.id").tag_name.should == "projects[id]"
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should have a select name if is a leaf and is selectable" do
|
160
|
-
|
161
|
-
grid = build_testgrid
|
162
|
-
grid.find_by_path("ticket").select_name.should == nil
|
163
|
-
grid.find_by_path("ticket.title").select_name.should == "tickets.title"
|
164
|
-
grid.find_by_path("ticket.description").select_name.should == "tickets.description"
|
165
|
-
grid.find_by_path("ticket.status").select_name.should == "tickets.status"
|
166
|
-
grid.find_by_path("ticket.is_finished?").select_name.should == nil
|
167
|
-
grid.find_by_path("ticket.actions").select_name.should == nil
|
168
|
-
grid.find_by_path("ticket.project_id").select_name.should == "tickets.project_id"
|
169
|
-
|
170
|
-
grid.find_by_path("ticket.project").select_name.should == nil
|
171
|
-
grid.find_by_path("ticket.project.title").select_name.should == "projects.title"
|
172
|
-
grid.find_by_path("ticket.project.class").select_name.should == nil
|
173
|
-
grid.find_by_path("ticket.project.actions").select_name.should == nil
|
174
|
-
grid.find_by_path("ticket.project.id").select_name.should == "projects.id"
|
175
|
-
|
176
|
-
grid.find_by_path("ticket.project.foo").select_name.should == nil
|
177
|
-
grid.find_by_path("ticket.project.foo.title").select_name.should == "projects.title"
|
178
|
-
grid.find_by_path("ticket.project.foo.foo").select_name.should == nil
|
179
|
-
grid.find_by_path("ticket.project.foo.bar").select_name.should == nil
|
180
|
-
grid.find_by_path("ticket.project.foo.id").select_name.should == "projects.id"
|
181
|
-
|
182
|
-
end
|
183
4
|
|
184
|
-
|
185
|
-
|
186
|
-
grid = build_testgrid
|
187
|
-
grid.find_by_path("ticket").css_class.should == nil
|
188
|
-
grid.find_by_path("ticket.title").css_class.should == "tickets title fg-orderable"
|
189
|
-
grid.find_by_path("ticket.description").css_class.should == "tickets description fg-orderable"
|
190
|
-
grid.find_by_path("ticket.status").css_class.should == "tickets status fg-orderable"
|
191
|
-
grid.find_by_path("ticket.is_finished?").css_class.should == "tickets is_finished?"
|
192
|
-
grid.find_by_path("ticket.actions").css_class.should == "tickets actions"
|
193
|
-
grid.find_by_path("ticket.project_id").css_class.should == "tickets project_id fg-orderable"
|
194
|
-
|
195
|
-
grid.find_by_path("ticket.project").css_class.should == nil
|
196
|
-
grid.find_by_path("ticket.project.title").css_class.should == "projects title fg-orderable"
|
197
|
-
grid.find_by_path("ticket.project.class").css_class.should == "projects class"
|
198
|
-
grid.find_by_path("ticket.project.actions").css_class.should == "projects actions"
|
199
|
-
grid.find_by_path("ticket.project.id").css_class.should == "projects id fg-orderable"
|
200
|
-
|
201
|
-
grid.find_by_path("ticket.project.foo").css_class.should == nil
|
202
|
-
grid.find_by_path("ticket.project.foo.title").css_class.should == "projects title fg-orderable"
|
203
|
-
grid.find_by_path("ticket.project.foo.foo").css_class.should == "projects foo"
|
204
|
-
grid.find_by_path("ticket.project.foo.bar").css_class.should == "projects bar"
|
205
|
-
grid.find_by_path("ticket.project.foo.id").css_class.should == "projects id fg-orderable"
|
206
|
-
|
5
|
+
class DummyClass
|
6
|
+
def self.table_name; "dummy_table"; end;
|
207
7
|
end
|
208
8
|
|
209
|
-
|
9
|
+
describe "#initialize" do
|
10
|
+
it "should call #to_s on name attribute" do
|
11
|
+
Fancygrid::Node.new(nil, :project).name.should == "project"
|
12
|
+
end
|
210
13
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
grid.find_by_path("ticket.description").i18n_path.should_not be nil
|
215
|
-
grid.find_by_path("ticket.status").i18n_path.should_not be nil
|
216
|
-
grid.find_by_path("ticket.is_finished?").i18n_path.should_not be nil
|
217
|
-
grid.find_by_path("ticket.actions").i18n_path.should_not be nil
|
218
|
-
grid.find_by_path("ticket.project_id").i18n_path.should_not be nil
|
14
|
+
it "should resolve resource class" do
|
15
|
+
Fancygrid::Node.new(nil, :project).resource_class.should == Project
|
16
|
+
end
|
219
17
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
grid.find_by_path("ticket.project.actions").i18n_path.should_not be nil
|
224
|
-
grid.find_by_path("ticket.project.id").i18n_path.should_not be nil
|
18
|
+
it "should resolve table name" do
|
19
|
+
Fancygrid::Node.new(nil, :project).table_name.should == "projects"
|
20
|
+
end
|
225
21
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
22
|
+
it "should override resource class" do
|
23
|
+
node = Fancygrid::Node.new(nil, :project, {
|
24
|
+
:class => DummyClass
|
25
|
+
})
|
26
|
+
|
27
|
+
node.resource_class.should == DummyClass
|
28
|
+
node.table_name.should == "dummy_table"
|
29
|
+
end
|
231
30
|
|
232
|
-
|
31
|
+
it "should override table name" do
|
32
|
+
node = Fancygrid::Node.new(nil, :project, { :table_name => "some_table_name" })
|
33
|
+
node.table_name.should == "some_table_name"
|
34
|
+
end
|
233
35
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
grid.find_by_path("ticket.description").trace_path.should == "ticket.description"
|
240
|
-
grid.find_by_path("ticket.status").trace_path.should == "ticket.status"
|
241
|
-
grid.find_by_path("ticket.is_finished?").trace_path.should == "ticket.is_finished?"
|
242
|
-
grid.find_by_path("ticket.actions").trace_path.should == "ticket.actions"
|
243
|
-
grid.find_by_path("ticket.project_id").trace_path.should == "ticket.project_id"
|
244
|
-
|
245
|
-
grid.find_by_path("ticket.project").trace_path.should == "ticket.project"
|
246
|
-
grid.find_by_path("ticket.project.title").trace_path.should == "ticket.project.title"
|
247
|
-
grid.find_by_path("ticket.project.class").trace_path.should == "ticket.project.class"
|
248
|
-
grid.find_by_path("ticket.project.actions").trace_path.should == "ticket.project.actions"
|
249
|
-
grid.find_by_path("ticket.project.id").trace_path.should == "ticket.project.id"
|
250
|
-
|
251
|
-
grid.find_by_path("ticket.project.foo").trace_path.should == "ticket.project.foo"
|
252
|
-
grid.find_by_path("ticket.project.foo.title").trace_path.should == "ticket.project.foo.title"
|
253
|
-
grid.find_by_path("ticket.project.foo.foo").trace_path.should == "ticket.project.foo.foo"
|
254
|
-
grid.find_by_path("ticket.project.foo.bar").trace_path.should == "ticket.project.foo.bar"
|
255
|
-
grid.find_by_path("ticket.project.foo.id").trace_path.should == "ticket.project.foo.id"
|
256
|
-
|
36
|
+
it "should be the root node when initialized without parent" do
|
37
|
+
node = Fancygrid::Node.new(nil, :project)
|
38
|
+
node.root.should be node
|
39
|
+
node.root?.should be true
|
40
|
+
end
|
257
41
|
end
|
258
42
|
|
259
|
-
|
260
|
-
it "should get attributes from model" do
|
261
|
-
ticket = Ticket.new({
|
262
|
-
:title => "ticket title",
|
263
|
-
:description => "ticket description",
|
264
|
-
:status => "ticket status",
|
265
|
-
:project => Project.new({ :title => "project title" })
|
266
|
-
})
|
43
|
+
describe "#columns_for" do
|
267
44
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
grid.find_by_path("ticket.status").value_from(ticket).should == "ticket status"
|
272
|
-
grid.find_by_path("ticket.project.title").value_from(ticket).should == "project title"
|
45
|
+
it "should add child node connect with parent" do
|
46
|
+
node1 = Fancygrid::Node.new(nil, :project)
|
47
|
+
node2 = node1.columns_for :ticket
|
273
48
|
|
274
|
-
|
275
|
-
|
276
|
-
|
49
|
+
node2.parent.should be node1
|
50
|
+
node1.children.should include node2
|
51
|
+
end
|
277
52
|
|
278
|
-
|
279
|
-
|
280
|
-
|
53
|
+
it "should propagate the root node" do
|
54
|
+
node1 = Fancygrid::Node.new(nil, :project)
|
55
|
+
node2 = node1.columns_for :ticket
|
56
|
+
|
57
|
+
node1.root?.should be true
|
58
|
+
node2.root?.should be false
|
59
|
+
|
60
|
+
node1.root.should be node2.root
|
61
|
+
end
|
281
62
|
|
282
|
-
|
283
|
-
|
284
|
-
|
63
|
+
it "#should create and yield Fancygrid::Node" do
|
64
|
+
node = Fancygrid::Node.new(nil, :project, {})
|
65
|
+
node.columns_for :project do |inner|
|
66
|
+
inner.class.should == Fancygrid::Node
|
67
|
+
end
|
68
|
+
node.children.count.should be 1
|
69
|
+
end
|
285
70
|
end
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
71
|
+
|
72
|
+
describe "#column" do
|
73
|
+
it "should create a Fancygrid::Column and add as child" do
|
74
|
+
node = Fancygrid::Node.new(nil, :project, {})
|
75
|
+
node.column(:project).class.should == Fancygrid::Column
|
76
|
+
end
|
292
77
|
|
293
|
-
|
294
|
-
|
295
|
-
|
78
|
+
it "should add a child" do
|
79
|
+
node = Fancygrid::Node.new(nil, :project, {})
|
80
|
+
node.children.count.should be 0
|
81
|
+
node.column(:project)
|
82
|
+
node.children.count.should be 1
|
83
|
+
end
|
296
84
|
end
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
grid.column(:title, :searchable => false )
|
306
|
-
grid.find_by_path("ticket.title").searchable.should be false
|
85
|
+
|
86
|
+
describe "#column" do
|
87
|
+
it "should add multiple columns at once" do
|
88
|
+
node = Fancygrid::Node.new(nil, :project, {})
|
89
|
+
node.children.count.should be 0
|
90
|
+
node.columns :project, :ticket
|
91
|
+
node.children.count.should be 2
|
92
|
+
end
|
307
93
|
end
|
308
94
|
|
309
|
-
it "should
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
95
|
+
it "#name_chain should return all names starting from root inclusive" do
|
96
|
+
node = Fancygrid::Node.new(nil, :project, {})
|
97
|
+
node.columns_for :ticket do |inner|
|
98
|
+
inner.name_chain.should == "project.ticket"
|
99
|
+
end
|
314
100
|
|
101
|
+
node.name_chain.should == "project"
|
315
102
|
end
|
316
103
|
|
317
|
-
|
318
|
-
|
319
|
-
ticket = Ticket.new(:title => "ticket title")
|
320
|
-
|
321
|
-
grid = Fancygrid::Grid.new(:ticket)
|
322
|
-
grid.column(:title, :proc => Proc.new { |t| t.title } )
|
323
|
-
grid.find_by_path("ticket.title").proc_block.call(ticket).should == "ticket title"
|
324
|
-
grid.find_by_path("ticket.title").value_from(ticket).should == "ticket title"
|
325
|
-
end
|
326
|
-
end
|
104
|
+
end
|