netzke-basepack 0.8.0 → 0.8.1
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.md +9 -1
- data/lib/netzke/basepack/grid/services.rb +16 -3
- data/lib/netzke/basepack/version.rb +1 -1
- data/lib/netzke/basepack/wrap_lazy_loaded.rb +16 -15
- data/netzke-basepack.gemspec +3 -3
- data/test/basepack_test_app/Gemfile +1 -1
- data/test/basepack_test_app/Gemfile.lock +8 -12
- data/test/basepack_test_app/app/components/simple_panel.rb +6 -2
- data/test/basepack_test_app/app/components/some_accordion.rb +8 -0
- data/test/basepack_test_app/app/components/some_tab_panel.rb +9 -1
- data/test/basepack_test_app/app/models/user.rb +6 -0
- data/test/basepack_test_app/features/{accordion_panel.feature → accordion.feature} +4 -2
- data/test/basepack_test_app/features/grid_panel.feature +11 -0
- data/test/basepack_test_app/features/step_definitions/generic_steps.rb +19 -0
- data/test/basepack_test_app/features/tab_panel.feature +3 -2
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
# 0.8.
|
1
|
+
# 0.8.1 - 2012-12-15
|
2
|
+
* bug fix
|
3
|
+
* TabPanel now shows the active tab's nested component upon loading
|
4
|
+
* Accordion now shows the active pane's nested component upon loading
|
5
|
+
|
6
|
+
* improvements
|
7
|
+
* Add support for validation errors on before_destroy (by firemind)
|
8
|
+
|
9
|
+
# 0.8.0 - 2012-12-09
|
2
10
|
* Basepack component renaming:
|
3
11
|
* GridPanel -> Grid
|
4
12
|
* FormPanel -> Form
|
@@ -30,10 +30,23 @@ module Netzke
|
|
30
30
|
endpoint :delete_data do |params, this|
|
31
31
|
if !config[:prohibit_delete]
|
32
32
|
record_ids = ActiveSupport::JSON.decode(params[:records])
|
33
|
-
|
33
|
+
success = true
|
34
|
+
record_ids.each {|id|
|
35
|
+
record = data_adapter.find_record(id)
|
36
|
+
if !record.destroy
|
37
|
+
success = false
|
38
|
+
record.errors.to_a.each do |msg|
|
39
|
+
flash :error => msg
|
40
|
+
end
|
41
|
+
end
|
42
|
+
}
|
34
43
|
on_data_changed
|
35
|
-
|
36
|
-
|
44
|
+
if success
|
45
|
+
this.netzke_feedback I18n.t('netzke.basepack.grid.deleted_n_records', :n => record_ids.size)
|
46
|
+
this.load_store_data get_data
|
47
|
+
else
|
48
|
+
this.netzke_feedback @flash
|
49
|
+
end
|
37
50
|
else
|
38
51
|
this.netzke_feedback I18n.t('netzke.basepack.grid.cannot_delete')
|
39
52
|
end
|
@@ -5,22 +5,23 @@ module Netzke
|
|
5
5
|
# Used, for instance, in TabPanel and Accordion to dynamically load components on expanding a panel or clicking
|
6
6
|
# a tab.
|
7
7
|
module WrapLazyLoaded
|
8
|
-
def
|
9
|
-
|
8
|
+
def js_configure(cfg)
|
9
|
+
super
|
10
|
+
cfg.items = cfg.items.each_with_index.map do |item,i|
|
11
|
+
c = components[item[:netzke_component]].try(:merge, item)
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
item
|
13
|
+
# when a nested component with lazy loading is detected, it gets replaced with a 'fit' panel,
|
14
|
+
# into which later the component itself is dynamically loaded on request.
|
15
|
+
if c && !c[:eager_loading] && i != config.active_tab.to_i # so it works for both TabPanel and Accordion
|
16
|
+
{ layout: :fit,
|
17
|
+
wrapped_component: c[:item_id],
|
18
|
+
title: c[:title] || c[:item_id].humanize,
|
19
|
+
icon_cls: c[:icon_cls],
|
20
|
+
disabled: c[:disabled]
|
21
|
+
}
|
22
|
+
else
|
23
|
+
item
|
24
|
+
end
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
data/netzke-basepack.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "netzke-basepack"
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["nomadcoder"]
|
12
|
-
s.date = "2012-12-
|
12
|
+
s.date = "2012-12-15"
|
13
13
|
s.description = "A set of feature-rich extendible Netzke components (such as Form, Grid, Window, TabPanel, etc) which can be used as building block for your RIA"
|
14
14
|
s.email = "nmcoder@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -189,7 +189,7 @@ Gem::Specification.new do |s|
|
|
189
189
|
"test/basepack_test_app/db/migrate/20110909071740_add_published_on_to_books.rb",
|
190
190
|
"test/basepack_test_app/db/schema.rb",
|
191
191
|
"test/basepack_test_app/db/seeds.rb",
|
192
|
-
"test/basepack_test_app/features/
|
192
|
+
"test/basepack_test_app/features/accordion.feature",
|
193
193
|
"test/basepack_test_app/features/form_panel.feature",
|
194
194
|
"test/basepack_test_app/features/grid_panel.feature",
|
195
195
|
"test/basepack_test_app/features/grid_panel_filters.feature",
|
@@ -1,10 +1,3 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/nomadcoder/netzke-core.git
|
3
|
-
revision: 74e19672cd7c270415714f1805f09b3262e577bc
|
4
|
-
specs:
|
5
|
-
netzke-core (0.8.0)
|
6
|
-
activesupport (>= 3.0.0)
|
7
|
-
|
8
1
|
GEM
|
9
2
|
remote: http://rubygems.org/
|
10
3
|
specs:
|
@@ -70,15 +63,18 @@ GEM
|
|
70
63
|
json (1.7.5)
|
71
64
|
launchy (2.1.2)
|
72
65
|
addressable (~> 2.3)
|
73
|
-
libwebsocket (0.1.
|
66
|
+
libwebsocket (0.1.7.1)
|
67
|
+
addressable
|
74
68
|
websocket
|
75
69
|
mail (2.4.4)
|
76
70
|
i18n (>= 0.4.0)
|
77
71
|
mime-types (~> 1.16)
|
78
72
|
treetop (~> 1.4.8)
|
79
73
|
mime-types (1.19)
|
80
|
-
multi_json (1.
|
74
|
+
multi_json (1.4.0)
|
81
75
|
mysql2 (0.3.11)
|
76
|
+
netzke-core (0.8.0)
|
77
|
+
activesupport (>= 3.1.0)
|
82
78
|
nokogiri (1.5.5)
|
83
79
|
pickle (0.4.11)
|
84
80
|
cucumber (>= 0.8)
|
@@ -109,7 +105,7 @@ GEM
|
|
109
105
|
rake (10.0.2)
|
110
106
|
rdoc (3.12)
|
111
107
|
json (~> 1.4)
|
112
|
-
rspec-core (2.12.
|
108
|
+
rspec-core (2.12.1)
|
113
109
|
rspec-expectations (2.12.0)
|
114
110
|
diff-lcs (~> 1.1.3)
|
115
111
|
rspec-mocks (2.12.0)
|
@@ -121,7 +117,7 @@ GEM
|
|
121
117
|
rspec-expectations (~> 2.12.0)
|
122
118
|
rspec-mocks (~> 2.12.0)
|
123
119
|
rubyzip (0.9.9)
|
124
|
-
selenium-webdriver (2.
|
120
|
+
selenium-webdriver (2.27.1)
|
125
121
|
childprocess (>= 0.2.5)
|
126
122
|
libwebsocket (~> 0.1.3)
|
127
123
|
multi_json (~> 1.0)
|
@@ -153,7 +149,7 @@ DEPENDENCIES
|
|
153
149
|
factory_girl
|
154
150
|
launchy
|
155
151
|
mysql2
|
156
|
-
netzke-core
|
152
|
+
netzke-core (~> 0.8.0)
|
157
153
|
pickle
|
158
154
|
rails (~> 3.2.0)
|
159
155
|
rspec-rails
|
@@ -3,7 +3,6 @@ class SimplePanel < Netzke::Base
|
|
3
3
|
|
4
4
|
js_configure do |c|
|
5
5
|
c.title = "SimplePanel"
|
6
|
-
c.html = "Original HTML"
|
7
6
|
c.on_update_html = <<-JS
|
8
7
|
function(){
|
9
8
|
this.updateHtmlFromServer();
|
@@ -12,8 +11,13 @@ class SimplePanel < Netzke::Base
|
|
12
11
|
end
|
13
12
|
|
14
13
|
def configure(c)
|
15
|
-
|
14
|
+
c.html = "Original HTML"
|
16
15
|
c.bbar = [:update_html]
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.server_side_config_options
|
20
|
+
super << :update_text
|
17
21
|
end
|
18
22
|
|
19
23
|
endpoint :update_html_from_server do |params, this|
|
@@ -1,4 +1,11 @@
|
|
1
1
|
class SomeAccordion < Netzke::Basepack::Accordion
|
2
|
+
# This component will be rendered immediately in the first tab
|
3
|
+
#
|
4
|
+
component :panel_zero do |c|
|
5
|
+
c.klass = SimplePanel
|
6
|
+
c.title = "Panel Zero"
|
7
|
+
end
|
8
|
+
|
2
9
|
# This component will be dynamically loaded on expanding the second accordion pane
|
3
10
|
component :simple_panel do |c|
|
4
11
|
c.update_text = "Update for Panel Two"
|
@@ -10,6 +17,7 @@ class SomeAccordion < Netzke::Basepack::Accordion
|
|
10
17
|
def configure(c)
|
11
18
|
c.title = "Some Accordion"
|
12
19
|
c.items = [
|
20
|
+
:panel_zero,
|
13
21
|
{ :html => "I'm a simple Ext.Panel", :title => "Panel One" },
|
14
22
|
:simple_panel
|
15
23
|
]
|
@@ -1,9 +1,16 @@
|
|
1
1
|
class SomeTabPanel < Netzke::Basepack::TabPanel
|
2
|
+
# This component will be rendered immediately in the first tab
|
3
|
+
#
|
4
|
+
component :tab_one do |c|
|
5
|
+
c.klass = SimplePanel
|
6
|
+
c.title = "Panel Zero"
|
7
|
+
end
|
8
|
+
|
2
9
|
# This component will be dynamically loaded on expanding the second accordion pane
|
3
10
|
component :simple_panel do |c|
|
4
11
|
c.update_text = "Update for Panel Two"
|
5
12
|
c.title = "Panel Two"
|
6
|
-
c.
|
13
|
+
c.header = false
|
7
14
|
c.border = false
|
8
15
|
|
9
16
|
# optionally, you can force a certain component to be eagerly loaded:
|
@@ -15,6 +22,7 @@ class SomeTabPanel < Netzke::Basepack::TabPanel
|
|
15
22
|
c.active_tab = 0
|
16
23
|
|
17
24
|
c.items = [
|
25
|
+
:tab_one,
|
18
26
|
{ :html => "I'm a simple Ext.Panel", :title => "Panel One" },
|
19
27
|
:simple_panel
|
20
28
|
]
|
@@ -2,4 +2,10 @@ class User < ActiveRecord::Base
|
|
2
2
|
# scope :latest, lambda {|param| where(:created_at.gt => param)}
|
3
3
|
belongs_to :role
|
4
4
|
has_one :address
|
5
|
+
|
6
|
+
before_destroy :is_admin
|
7
|
+
def is_admin
|
8
|
+
errors.add :base, "Can't delete Admin User." if self.first_name == "Admin"
|
9
|
+
errors.blank?
|
10
|
+
end
|
5
11
|
end
|
@@ -5,8 +5,10 @@ Feature: Accordion panel
|
|
5
5
|
|
6
6
|
@javascript
|
7
7
|
Scenario: Lazy loading of a component into a panel when the latter gets expanded
|
8
|
-
|
8
|
+
When I go to the SomeAccordion test page
|
9
|
+
Then expanded panel should have button "Update html"
|
9
10
|
When I expand "Panel Two"
|
10
|
-
|
11
|
+
And I sleep 1 second
|
12
|
+
Then expanded panel should have button "Update html"
|
11
13
|
When I press "Update html"
|
12
14
|
Then I should see "Update for Panel Two"
|
@@ -52,6 +52,17 @@ Scenario: Deleting a record
|
|
52
52
|
Then I should see "Deleted 1 record(s)"
|
53
53
|
Then a user should not exist with first_name: "Anton"
|
54
54
|
|
55
|
+
@javascript
|
56
|
+
Scenario: Try deleting an undeletable record
|
57
|
+
Given a user exists with first_name: "Admin", last_name: "Admin"
|
58
|
+
When I go to the UserGrid test page
|
59
|
+
And I select all rows in the grid
|
60
|
+
And I press "Delete"
|
61
|
+
Then I should see "Are you sure?"
|
62
|
+
When I press "Yes"
|
63
|
+
Then I should see "Can't delete Admin User"
|
64
|
+
Then a user should exist with first_name: "Admin"
|
65
|
+
|
55
66
|
@javascript
|
56
67
|
Scenario: Multi-editing records
|
57
68
|
Given a user exists with first_name: "Carlos", last_name: "Castaneda"
|
@@ -147,3 +147,22 @@ Then /^I should not see window$/ do
|
|
147
147
|
return out;
|
148
148
|
JS
|
149
149
|
end
|
150
|
+
|
151
|
+
Then /^active tab should have button "(.*?)"$/ do |text|
|
152
|
+
page.driver.browser.execute_script(<<-JS).should == true
|
153
|
+
var tp = Ext.ComponentQuery.query('tabpanel')[0],
|
154
|
+
at = tp.getActiveTab();
|
155
|
+
return !!at.down('button[text="#{text}"]');
|
156
|
+
JS
|
157
|
+
end
|
158
|
+
|
159
|
+
Then /^expanded panel should have button "(.*?)"$/ do |text|
|
160
|
+
page.driver.browser.execute_script(<<-JS).should == true
|
161
|
+
for (var prop in Netzke.page) {
|
162
|
+
var panel = Netzke.page[prop];
|
163
|
+
break;
|
164
|
+
}
|
165
|
+
ap = panel.down("[collapsed=false]");
|
166
|
+
return !!ap.down('button[text="#{text}"]');
|
167
|
+
JS
|
168
|
+
end
|
@@ -5,8 +5,9 @@ Feature: Tab panel
|
|
5
5
|
|
6
6
|
@javascript
|
7
7
|
Scenario: Lazy loading of a component into a tab when the latter gets open
|
8
|
-
|
8
|
+
When I go to the SomeTabPanel test page
|
9
|
+
Then active tab should have button "Update html"
|
9
10
|
When I press "Panel Two"
|
10
|
-
Then
|
11
|
+
Then active tab should have button "Update html"
|
11
12
|
When I press "Update html"
|
12
13
|
Then I should see "Update for Panel Two"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netzke-basepack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: netzke-core
|
@@ -208,7 +208,7 @@ files:
|
|
208
208
|
- test/basepack_test_app/db/migrate/20110909071740_add_published_on_to_books.rb
|
209
209
|
- test/basepack_test_app/db/schema.rb
|
210
210
|
- test/basepack_test_app/db/seeds.rb
|
211
|
-
- test/basepack_test_app/features/
|
211
|
+
- test/basepack_test_app/features/accordion.feature
|
212
212
|
- test/basepack_test_app/features/form_panel.feature
|
213
213
|
- test/basepack_test_app/features/grid_panel.feature
|
214
214
|
- test/basepack_test_app/features/grid_panel_filters.feature
|