netzke-basepack 0.3.4 → 0.3.5
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 +3 -0
- data/LICENSE +2 -19
- data/Manifest +4 -2
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/lib/netzke-basepack.rb +3 -17
- data/lib/netzke/ar_ext.rb +35 -31
- data/lib/netzke/form_panel.rb +5 -1
- data/lib/netzke/form_panel_extras/javascripts/xdatetime.js +634 -0
- data/lib/netzke/grid_panel.rb +19 -3
- data/{javascripts → lib/netzke/grid_panel_extras/javascripts}/check_column.js +0 -0
- data/{javascripts → lib/netzke/grid_panel_extras/javascripts}/filters.js +0 -0
- data/lib/netzke/tab_panel.rb +97 -0
- data/netzke-basepack.gemspec +7 -7
- data/test/border_layout_panel_test.rb +13 -12
- metadata +11 -5
data/CHANGELOG
CHANGED
data/LICENSE
CHANGED
@@ -1,20 +1,3 @@
|
|
1
|
-
Copyright (c) 2008 Sergei Kozlov
|
1
|
+
Copyright (c) 2008-2009 Sergei Kozlov
|
2
2
|
|
3
|
-
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
3
|
+
GNU GPL license v3
|
data/Manifest
CHANGED
@@ -9,8 +9,6 @@ generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb
|
|
9
9
|
init.rb
|
10
10
|
install.rb
|
11
11
|
javascripts/basepack.js
|
12
|
-
javascripts/check_column.js
|
13
|
-
javascripts/filters.js
|
14
12
|
lib/app/models/netzke_form_panel_field.rb
|
15
13
|
lib/app/models/netzke_grid_panel_column.rb
|
16
14
|
lib/netzke/accordion_panel.rb
|
@@ -22,14 +20,18 @@ lib/netzke/db_fields.rb
|
|
22
20
|
lib/netzke/fields_configurator.rb
|
23
21
|
lib/netzke/form_panel.rb
|
24
22
|
lib/netzke/form_panel_extras/interface.rb
|
23
|
+
lib/netzke/form_panel_extras/javascripts/xdatetime.js
|
25
24
|
lib/netzke/form_panel_extras/js_builder.rb
|
26
25
|
lib/netzke/grid_panel.rb
|
27
26
|
lib/netzke/grid_panel_extras/interface.rb
|
27
|
+
lib/netzke/grid_panel_extras/javascripts/check_column.js
|
28
|
+
lib/netzke/grid_panel_extras/javascripts/filters.js
|
28
29
|
lib/netzke/grid_panel_extras/js_builder.rb
|
29
30
|
lib/netzke/panel.rb
|
30
31
|
lib/netzke/preference_grid.rb
|
31
32
|
lib/netzke/properties_tool.rb
|
32
33
|
lib/netzke/property_grid.rb
|
34
|
+
lib/netzke/tab_panel.rb
|
33
35
|
lib/netzke/table_editor.rb
|
34
36
|
lib/netzke/wrapper.rb
|
35
37
|
lib/netzke-basepack.rb
|
data/README.rdoc
CHANGED
@@ -84,4 +84,4 @@ TODO: this part will be covered later
|
|
84
84
|
= Credentials
|
85
85
|
Testing done with the help of http://github.com/pluginaweek/plugin_test_helper
|
86
86
|
|
87
|
-
Copyright (c) 2008-2009 Sergei Kozlov, released under the
|
87
|
+
Copyright (c) 2008-2009 Sergei Kozlov, released under the GNU GPL license v3
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Echoe.new("netzke-basepack") do |p|
|
|
5
5
|
p.email = "sergei@writelesscode.com"
|
6
6
|
p.summary = "Base Netzke widgets - grid, form, tree, and more"
|
7
7
|
p.url = "http://writelesscode.com"
|
8
|
-
p.runtime_dependencies = ["searchlogic >=1.6.2", "netzke-core >= 0.2.
|
8
|
+
p.runtime_dependencies = ["searchlogic >=1.6.2", "netzke-core >= 0.2.8"]
|
9
9
|
p.development_dependencies = []
|
10
10
|
p.test_pattern = 'test/**/*_test.rb'
|
11
11
|
|
data/lib/netzke-basepack.rb
CHANGED
@@ -16,25 +16,11 @@ Netzke::Base.config.merge!({
|
|
16
16
|
ActiveSupport::Dependencies.load_once_paths.delete(path)
|
17
17
|
end
|
18
18
|
|
19
|
-
# Include the javascript
|
20
|
-
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/basepack.js"
|
21
|
-
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/check_column.js"
|
22
|
-
|
23
|
-
extjs_dir = "#{RAILS_ROOT}/public/extjs"
|
24
|
-
|
25
|
-
# Filters in GridPanel
|
26
|
-
if Netzke::Base.config[:grid_panel][:filters]
|
27
|
-
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/menu/EditableItem.js"
|
28
|
-
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/menu/RangeMenu.js"
|
29
|
-
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/grid/GridFilters.js"
|
30
|
-
%w{Boolean Date List Numeric String}.unshift("").each do |f|
|
31
|
-
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/grid/filter/#{f}Filter.js"
|
32
|
-
end
|
33
|
-
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/filters.js"
|
34
|
-
end
|
35
|
-
|
36
19
|
# Make this plugin reloadable for easier development
|
37
20
|
ActiveSupport::Dependencies.load_once_paths.delete(File.join(File.dirname(__FILE__)))
|
38
21
|
|
22
|
+
# Include the javascript
|
23
|
+
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/basepack.js"
|
24
|
+
|
39
25
|
# Include CSS
|
40
26
|
Netzke::Base.config[:css] << "#{File.dirname(__FILE__)}/../css/basepack.css"
|
data/lib/netzke/ar_ext.rb
CHANGED
@@ -174,6 +174,15 @@ module Netzke
|
|
174
174
|
|
175
175
|
DEFAULT_COLUMN_WIDTH = 100
|
176
176
|
|
177
|
+
# identify Ext editor for the data type
|
178
|
+
TYPE_EDITOR_MAP = {
|
179
|
+
:integer => :number_field,
|
180
|
+
:boolean => :checkbox,
|
181
|
+
:date => :date_field,
|
182
|
+
:datetime => :datetime,
|
183
|
+
:string => :text_field
|
184
|
+
}
|
185
|
+
|
177
186
|
# Returns default column config understood by Netzke::GridPanel
|
178
187
|
# Argument: column name (as Symbol) or column config
|
179
188
|
def default_column_config(config)
|
@@ -184,8 +193,28 @@ module Netzke
|
|
184
193
|
# Used by Netzke::FormPanel
|
185
194
|
#
|
186
195
|
|
187
|
-
|
188
|
-
|
196
|
+
# default configuration as a function of ActivRecord's column type
|
197
|
+
DEFAULTS_FOR_FIELD = {
|
198
|
+
:integer => {
|
199
|
+
:xtype => :numberfield
|
200
|
+
},
|
201
|
+
:boolean => {
|
202
|
+
:xtype => :numberfield
|
203
|
+
},
|
204
|
+
:date => {
|
205
|
+
:xtype => :datefield
|
206
|
+
},
|
207
|
+
:datetime => {
|
208
|
+
:xtype => :xdatetime
|
209
|
+
# :date_format => "Y-m-d",
|
210
|
+
# :time_format => "H:i",
|
211
|
+
# :time_width => 60
|
212
|
+
},
|
213
|
+
:string => {
|
214
|
+
:xtype => :textfield
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
189
218
|
def default_field_config(config)
|
190
219
|
# default_dbfield_config(config, :form)
|
191
220
|
config = config.is_a?(Symbol) ? {:name => config} : config.dup
|
@@ -193,42 +222,17 @@ module Netzke
|
|
193
222
|
# detect ActiveRecord column type (if the column is "real") or fall back to :virtual
|
194
223
|
type = (columns_hash[config[:name].to_s] && columns_hash[config[:name].to_s].type) || :virtual
|
195
224
|
|
196
|
-
|
225
|
+
common = {
|
197
226
|
:field_label => config[:name].to_s.gsub('__', '_').humanize,
|
198
|
-
:xtype => XTYPE_MAP[type],
|
199
227
|
:hidden => config[:name] == :id
|
200
228
|
}
|
201
229
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
# :name => config[:name].to_s || "unnamed",
|
206
|
-
# :field_label => config[:field_label] || config[:name].to_s.gsub('__', '_').humanize,
|
207
|
-
# # :disabled => config[:name] == :id, # make "id" column disabled by default
|
208
|
-
# # :hidden => config[:name] == :id, # hide "id" column by default
|
209
|
-
# :xtype => XTYPE_MAP[type]
|
210
|
-
# }
|
211
|
-
|
230
|
+
default = DEFAULTS_FOR_FIELD[type] || DEFAULTS_FOR_FIELD[:string] # fallback to plain textfield
|
231
|
+
|
232
|
+
res = default.merge(common).merge(config)
|
212
233
|
end
|
213
234
|
|
214
235
|
private
|
215
|
-
# identify Ext editor for the data type
|
216
|
-
TYPE_EDITOR_MAP = {
|
217
|
-
:integer => :number_field,
|
218
|
-
:boolean => :checkbox,
|
219
|
-
:date => :date_field,
|
220
|
-
:datetime => :datetime,
|
221
|
-
:string => :text_field
|
222
|
-
}
|
223
|
-
|
224
|
-
XTYPE_MAP = {
|
225
|
-
:integer => :numberfield,
|
226
|
-
:boolean => :textfield,
|
227
|
-
:date => :datefield,
|
228
|
-
:datetime => :datefield,
|
229
|
-
:string => :textfield
|
230
|
-
}
|
231
|
-
|
232
236
|
def ext_editor(type)
|
233
237
|
TYPE_EDITOR_MAP[type] || :text_field # fall back to :text_field
|
234
238
|
end
|
data/lib/netzke/form_panel.rb
CHANGED
@@ -0,0 +1,634 @@
|
|
1
|
+
/*global Ext */
|
2
|
+
/**
|
3
|
+
* @class Ext.ux.form.DateTime
|
4
|
+
* @extends Ext.form.Field
|
5
|
+
*
|
6
|
+
* DateTime field, combination of DateField and TimeField
|
7
|
+
*
|
8
|
+
* @author Ing. Jozef Sak�lo�
|
9
|
+
* @copyright (c) 2008, Ing. Jozef Sak�lo�
|
10
|
+
* @version 2.0
|
11
|
+
* @revision $Id: Ext.ux.form.DateTime.js 513 2009-01-29 19:59:22Z jozo $
|
12
|
+
*
|
13
|
+
* @license Ext.ux.form.DateTime is licensed under the terms of
|
14
|
+
* the Open Source LGPL 3.0 license. Commercial use is permitted to the extent
|
15
|
+
* that the code/component(s) do NOT become part of another Open Source or Commercially
|
16
|
+
* licensed development library or toolkit without explicit permission.
|
17
|
+
*
|
18
|
+
* <p>License details: <a href="http://www.gnu.org/licenses/lgpl.html"
|
19
|
+
* target="_blank">http://www.gnu.org/licenses/lgpl.html</a></p>
|
20
|
+
*
|
21
|
+
* @forum 22661
|
22
|
+
*/
|
23
|
+
|
24
|
+
Ext.ns('Ext.ux.form');
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @constructor
|
28
|
+
* Creates new DateTime
|
29
|
+
* @param {Object} config The config object
|
30
|
+
*/
|
31
|
+
Ext.ux.form.DateTime = Ext.extend(Ext.form.Field, {
|
32
|
+
/**
|
33
|
+
* @cfg {String/Object} defaultAutoCreate DomHelper element spec
|
34
|
+
* Let superclass to create hidden field instead of textbox. Hidden will be submittend to server
|
35
|
+
*/
|
36
|
+
defaultAutoCreate:{tag:'input', type:'hidden'}
|
37
|
+
/**
|
38
|
+
* @cfg {Number} timeWidth Width of time field in pixels (defaults to 100)
|
39
|
+
*/
|
40
|
+
,timeWidth:100
|
41
|
+
/**
|
42
|
+
* @cfg {String} dtSeparator Date - Time separator. Used to split date and time (defaults to ' ' (space))
|
43
|
+
*/
|
44
|
+
,dtSeparator:' '
|
45
|
+
/**
|
46
|
+
* @cfg {String} hiddenFormat Format of datetime used to store value in hidden field
|
47
|
+
* and submitted to server (defaults to 'Y-m-d H:i:s' that is mysql format)
|
48
|
+
*/
|
49
|
+
,hiddenFormat:'Y-m-d H:i:s'
|
50
|
+
/**
|
51
|
+
* @cfg {Boolean} otherToNow Set other field to now() if not explicly filled in (defaults to true)
|
52
|
+
*/
|
53
|
+
,otherToNow:true
|
54
|
+
/**
|
55
|
+
* @cfg {Boolean} emptyToNow Set field value to now on attempt to set empty value.
|
56
|
+
* If it is true then setValue() sets value of field to current date and time (defaults to false)
|
57
|
+
*/
|
58
|
+
/**
|
59
|
+
* @cfg {String} timePosition Where the time field should be rendered. 'right' is suitable for forms
|
60
|
+
* and 'below' is suitable if the field is used as the grid editor (defaults to 'right')
|
61
|
+
*/
|
62
|
+
,timePosition:'right' // valid values:'below', 'right'
|
63
|
+
/**
|
64
|
+
* @cfg {String} dateFormat Format of DateField. Can be localized. (defaults to 'm/y/d')
|
65
|
+
*/
|
66
|
+
,dateFormat:'m/d/y'
|
67
|
+
/**
|
68
|
+
* @cfg {String} timeFormat Format of TimeField. Can be localized. (defaults to 'g:i A')
|
69
|
+
*/
|
70
|
+
,timeFormat:'g:i A'
|
71
|
+
/**
|
72
|
+
* @cfg {Object} dateConfig Config for DateField constructor.
|
73
|
+
*/
|
74
|
+
/**
|
75
|
+
* @cfg {Object} timeConfig Config for TimeField constructor.
|
76
|
+
*/
|
77
|
+
|
78
|
+
// {{{
|
79
|
+
/**
|
80
|
+
* @private
|
81
|
+
* creates DateField and TimeField and installs the necessary event handlers
|
82
|
+
*/
|
83
|
+
,initComponent:function() {
|
84
|
+
// call parent initComponent
|
85
|
+
Ext.ux.form.DateTime.superclass.initComponent.call(this);
|
86
|
+
|
87
|
+
// create DateField
|
88
|
+
var dateConfig = Ext.apply({}, {
|
89
|
+
id:this.id + '-date'
|
90
|
+
,format:this.dateFormat || Ext.form.DateField.prototype.format
|
91
|
+
,width:this.timeWidth
|
92
|
+
,selectOnFocus:this.selectOnFocus
|
93
|
+
,listeners:{
|
94
|
+
blur:{scope:this, fn:this.onBlur}
|
95
|
+
,focus:{scope:this, fn:this.onFocus}
|
96
|
+
}
|
97
|
+
}, this.dateConfig);
|
98
|
+
this.df = new Ext.form.DateField(dateConfig);
|
99
|
+
this.df.ownerCt = this;
|
100
|
+
delete(this.dateFormat);
|
101
|
+
|
102
|
+
|
103
|
+
// create TimeField
|
104
|
+
var timeConfig = Ext.apply({}, {
|
105
|
+
id:this.id + '-time'
|
106
|
+
,format:this.timeFormat || Ext.form.TimeField.prototype.format
|
107
|
+
,width:this.timeWidth
|
108
|
+
,selectOnFocus:this.selectOnFocus
|
109
|
+
,listeners:{
|
110
|
+
blur:{scope:this, fn:this.onBlur}
|
111
|
+
,focus:{scope:this, fn:this.onFocus}
|
112
|
+
}
|
113
|
+
}, this.timeConfig);
|
114
|
+
this.tf = new Ext.form.TimeField(timeConfig);
|
115
|
+
this.tf.ownerCt = this;
|
116
|
+
delete(this.timeFormat);
|
117
|
+
|
118
|
+
// relay events
|
119
|
+
this.relayEvents(this.df, ['focus', 'specialkey', 'invalid', 'valid']);
|
120
|
+
this.relayEvents(this.tf, ['focus', 'specialkey', 'invalid', 'valid']);
|
121
|
+
|
122
|
+
} // eo function initComponent
|
123
|
+
// }}}
|
124
|
+
// {{{
|
125
|
+
/**
|
126
|
+
* @private
|
127
|
+
* Renders underlying DateField and TimeField and provides a workaround for side error icon bug
|
128
|
+
*/
|
129
|
+
,onRender:function(ct, position) {
|
130
|
+
// don't run more than once
|
131
|
+
if(this.isRendered) {
|
132
|
+
return;
|
133
|
+
}
|
134
|
+
|
135
|
+
// render underlying hidden field
|
136
|
+
Ext.ux.form.DateTime.superclass.onRender.call(this, ct, position);
|
137
|
+
|
138
|
+
// render DateField and TimeField
|
139
|
+
// create bounding table
|
140
|
+
var t;
|
141
|
+
if('below' === this.timePosition || 'bellow' === this.timePosition) {
|
142
|
+
t = Ext.DomHelper.append(ct, {tag:'table',style:'border-collapse:collapse',children:[
|
143
|
+
{tag:'tr',children:[{tag:'td', style:'padding-bottom:1px', cls:'ux-datetime-date'}]}
|
144
|
+
,{tag:'tr',children:[{tag:'td', cls:'ux-datetime-time'}]}
|
145
|
+
]}, true);
|
146
|
+
}
|
147
|
+
else {
|
148
|
+
t = Ext.DomHelper.append(ct, {tag:'table',style:'border-collapse:collapse',children:[
|
149
|
+
{tag:'tr',children:[
|
150
|
+
{tag:'td',style:'padding-right:4px', cls:'ux-datetime-date'},{tag:'td', cls:'ux-datetime-time'}
|
151
|
+
]}
|
152
|
+
]}, true);
|
153
|
+
}
|
154
|
+
|
155
|
+
this.tableEl = t;
|
156
|
+
// this.wrap = t.wrap({cls:'x-form-field-wrap'});
|
157
|
+
this.wrap = t.wrap();
|
158
|
+
this.wrap.on("mousedown", this.onMouseDown, this, {delay:10});
|
159
|
+
|
160
|
+
// render DateField & TimeField
|
161
|
+
this.df.render(t.child('td.ux-datetime-date'));
|
162
|
+
this.tf.render(t.child('td.ux-datetime-time'));
|
163
|
+
|
164
|
+
// workaround for IE trigger misalignment bug
|
165
|
+
if(Ext.isIE && Ext.isStrict) {
|
166
|
+
t.select('input').applyStyles({top:0});
|
167
|
+
}
|
168
|
+
|
169
|
+
this.on('specialkey', this.onSpecialKey, this);
|
170
|
+
this.df.el.swallowEvent(['keydown', 'keypress']);
|
171
|
+
this.tf.el.swallowEvent(['keydown', 'keypress']);
|
172
|
+
|
173
|
+
// create icon for side invalid errorIcon
|
174
|
+
if('side' === this.msgTarget) {
|
175
|
+
var elp = this.el.findParent('.x-form-element', 10, true);
|
176
|
+
this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
|
177
|
+
|
178
|
+
this.df.errorIcon = this.errorIcon;
|
179
|
+
this.tf.errorIcon = this.errorIcon;
|
180
|
+
}
|
181
|
+
|
182
|
+
// setup name for submit
|
183
|
+
this.el.dom.name = this.hiddenName || this.name || this.id;
|
184
|
+
|
185
|
+
// prevent helper fields from being submitted
|
186
|
+
this.df.el.dom.removeAttribute("name");
|
187
|
+
this.tf.el.dom.removeAttribute("name");
|
188
|
+
|
189
|
+
// we're rendered flag
|
190
|
+
this.isRendered = true;
|
191
|
+
|
192
|
+
// update hidden field
|
193
|
+
this.updateHidden();
|
194
|
+
|
195
|
+
} // eo function onRender
|
196
|
+
// }}}
|
197
|
+
// {{{
|
198
|
+
/**
|
199
|
+
* @private
|
200
|
+
*/
|
201
|
+
,adjustSize:Ext.BoxComponent.prototype.adjustSize
|
202
|
+
// }}}
|
203
|
+
// {{{
|
204
|
+
/**
|
205
|
+
* @private
|
206
|
+
*/
|
207
|
+
,alignErrorIcon:function() {
|
208
|
+
this.errorIcon.alignTo(this.tableEl, 'tl-tr', [2, 0]);
|
209
|
+
}
|
210
|
+
// }}}
|
211
|
+
// {{{
|
212
|
+
/**
|
213
|
+
* @private initializes internal dateValue
|
214
|
+
*/
|
215
|
+
,initDateValue:function() {
|
216
|
+
this.dateValue = this.otherToNow ? new Date() : new Date(1970, 0, 1, 0, 0, 0);
|
217
|
+
}
|
218
|
+
// }}}
|
219
|
+
// {{{
|
220
|
+
/**
|
221
|
+
* Calls clearInvalid on the DateField and TimeField
|
222
|
+
*/
|
223
|
+
,clearInvalid:function(){
|
224
|
+
this.df.clearInvalid();
|
225
|
+
this.tf.clearInvalid();
|
226
|
+
} // eo function clearInvalid
|
227
|
+
// }}}
|
228
|
+
// {{{
|
229
|
+
/**
|
230
|
+
* @private
|
231
|
+
* called from Component::destroy.
|
232
|
+
* Destroys all elements and removes all listeners we've created.
|
233
|
+
*/
|
234
|
+
,beforeDestroy:function() {
|
235
|
+
if(this.isRendered) {
|
236
|
+
// this.removeAllListeners();
|
237
|
+
this.wrap.removeAllListeners();
|
238
|
+
this.wrap.remove();
|
239
|
+
this.tableEl.remove();
|
240
|
+
this.df.destroy();
|
241
|
+
this.tf.destroy();
|
242
|
+
}
|
243
|
+
} // eo function beforeDestroy
|
244
|
+
// }}}
|
245
|
+
// {{{
|
246
|
+
/**
|
247
|
+
* Disable this component.
|
248
|
+
* @return {Ext.Component} this
|
249
|
+
*/
|
250
|
+
,disable:function() {
|
251
|
+
if(this.isRendered) {
|
252
|
+
this.df.disabled = this.disabled;
|
253
|
+
this.df.onDisable();
|
254
|
+
this.tf.onDisable();
|
255
|
+
}
|
256
|
+
this.disabled = true;
|
257
|
+
this.df.disabled = true;
|
258
|
+
this.tf.disabled = true;
|
259
|
+
this.fireEvent("disable", this);
|
260
|
+
return this;
|
261
|
+
} // eo function disable
|
262
|
+
// }}}
|
263
|
+
// {{{
|
264
|
+
/**
|
265
|
+
* Enable this component.
|
266
|
+
* @return {Ext.Component} this
|
267
|
+
*/
|
268
|
+
,enable:function() {
|
269
|
+
if(this.rendered){
|
270
|
+
this.df.onEnable();
|
271
|
+
this.tf.onEnable();
|
272
|
+
}
|
273
|
+
this.disabled = false;
|
274
|
+
this.df.disabled = false;
|
275
|
+
this.tf.disabled = false;
|
276
|
+
this.fireEvent("enable", this);
|
277
|
+
return this;
|
278
|
+
} // eo function enable
|
279
|
+
// }}}
|
280
|
+
// {{{
|
281
|
+
/**
|
282
|
+
* @private Focus date filed
|
283
|
+
*/
|
284
|
+
,focus:function() {
|
285
|
+
this.df.focus();
|
286
|
+
} // eo function focus
|
287
|
+
// }}}
|
288
|
+
// {{{
|
289
|
+
/**
|
290
|
+
* @private
|
291
|
+
*/
|
292
|
+
,getPositionEl:function() {
|
293
|
+
return this.wrap;
|
294
|
+
}
|
295
|
+
// }}}
|
296
|
+
// {{{
|
297
|
+
/**
|
298
|
+
* @private
|
299
|
+
*/
|
300
|
+
,getResizeEl:function() {
|
301
|
+
return this.wrap;
|
302
|
+
}
|
303
|
+
// }}}
|
304
|
+
// {{{
|
305
|
+
/**
|
306
|
+
* @return {Date/String} Returns value of this field
|
307
|
+
*/
|
308
|
+
,getValue:function() {
|
309
|
+
// create new instance of date
|
310
|
+
return this.dateValue ? new Date(this.dateValue) : '';
|
311
|
+
} // eo function getValue
|
312
|
+
// }}}
|
313
|
+
// {{{
|
314
|
+
/**
|
315
|
+
* @return {Boolean} true = valid, false = invalid
|
316
|
+
* @private Calls isValid methods of underlying DateField and TimeField and returns the result
|
317
|
+
*/
|
318
|
+
,isValid:function() {
|
319
|
+
return this.df.isValid() && this.tf.isValid();
|
320
|
+
} // eo function isValid
|
321
|
+
// }}}
|
322
|
+
// {{{
|
323
|
+
/**
|
324
|
+
* Returns true if this component is visible
|
325
|
+
* @return {boolean}
|
326
|
+
*/
|
327
|
+
,isVisible : function(){
|
328
|
+
return this.df.rendered && this.df.getActionEl().isVisible();
|
329
|
+
} // eo function isVisible
|
330
|
+
// }}}
|
331
|
+
// {{{
|
332
|
+
/**
|
333
|
+
* @private Handles blur event
|
334
|
+
*/
|
335
|
+
,onBlur:function(f) {
|
336
|
+
// called by both DateField and TimeField blur events
|
337
|
+
|
338
|
+
// revert focus to previous field if clicked in between
|
339
|
+
if(this.wrapClick) {
|
340
|
+
f.focus();
|
341
|
+
this.wrapClick = false;
|
342
|
+
}
|
343
|
+
|
344
|
+
// update underlying value
|
345
|
+
if(f === this.df) {
|
346
|
+
this.updateDate();
|
347
|
+
}
|
348
|
+
else {
|
349
|
+
this.updateTime();
|
350
|
+
}
|
351
|
+
this.updateHidden();
|
352
|
+
|
353
|
+
// fire events later
|
354
|
+
(function() {
|
355
|
+
if(!this.df.hasFocus && !this.tf.hasFocus) {
|
356
|
+
var v = this.getValue();
|
357
|
+
if(String(v) !== String(this.startValue)) {
|
358
|
+
this.fireEvent("change", this, v, this.startValue);
|
359
|
+
}
|
360
|
+
this.hasFocus = false;
|
361
|
+
this.fireEvent('blur', this);
|
362
|
+
}
|
363
|
+
}).defer(100, this);
|
364
|
+
|
365
|
+
} // eo function onBlur
|
366
|
+
// }}}
|
367
|
+
// {{{
|
368
|
+
/**
|
369
|
+
* @private Handles focus event
|
370
|
+
*/
|
371
|
+
,onFocus:function() {
|
372
|
+
if(!this.hasFocus){
|
373
|
+
this.hasFocus = true;
|
374
|
+
this.startValue = this.getValue();
|
375
|
+
this.fireEvent("focus", this);
|
376
|
+
}
|
377
|
+
}
|
378
|
+
// }}}
|
379
|
+
// {{{
|
380
|
+
/**
|
381
|
+
* @private Just to prevent blur event when clicked in the middle of fields
|
382
|
+
*/
|
383
|
+
,onMouseDown:function(e) {
|
384
|
+
if(!this.disabled) {
|
385
|
+
this.wrapClick = 'td' === e.target.nodeName.toLowerCase();
|
386
|
+
}
|
387
|
+
}
|
388
|
+
// }}}
|
389
|
+
// {{{
|
390
|
+
/**
|
391
|
+
* @private
|
392
|
+
* Handles Tab and Shift-Tab events
|
393
|
+
*/
|
394
|
+
,onSpecialKey:function(t, e) {
|
395
|
+
var key = e.getKey();
|
396
|
+
if(key === e.TAB) {
|
397
|
+
if(t === this.df && !e.shiftKey) {
|
398
|
+
e.stopEvent();
|
399
|
+
this.tf.focus();
|
400
|
+
}
|
401
|
+
if(t === this.tf && e.shiftKey) {
|
402
|
+
e.stopEvent();
|
403
|
+
this.df.focus();
|
404
|
+
}
|
405
|
+
}
|
406
|
+
// otherwise it misbehaves in editor grid
|
407
|
+
if(key === e.ENTER) {
|
408
|
+
this.updateValue();
|
409
|
+
}
|
410
|
+
|
411
|
+
} // eo function onSpecialKey
|
412
|
+
// }}}
|
413
|
+
// {{{
|
414
|
+
/**
|
415
|
+
* @private Sets the value of DateField
|
416
|
+
*/
|
417
|
+
,setDate:function(date) {
|
418
|
+
this.df.setValue(date);
|
419
|
+
} // eo function setDate
|
420
|
+
// }}}
|
421
|
+
// {{{
|
422
|
+
/**
|
423
|
+
* @private Sets the value of TimeField
|
424
|
+
*/
|
425
|
+
,setTime:function(date) {
|
426
|
+
this.tf.setValue(date);
|
427
|
+
} // eo function setTime
|
428
|
+
// }}}
|
429
|
+
// {{{
|
430
|
+
/**
|
431
|
+
* @private
|
432
|
+
* Sets correct sizes of underlying DateField and TimeField
|
433
|
+
* With workarounds for IE bugs
|
434
|
+
*/
|
435
|
+
,setSize:function(w, h) {
|
436
|
+
if(!w) {
|
437
|
+
return;
|
438
|
+
}
|
439
|
+
if('below' === this.timePosition) {
|
440
|
+
this.df.setSize(w, h);
|
441
|
+
this.tf.setSize(w, h);
|
442
|
+
if(Ext.isIE) {
|
443
|
+
this.df.el.up('td').setWidth(w);
|
444
|
+
this.tf.el.up('td').setWidth(w);
|
445
|
+
}
|
446
|
+
}
|
447
|
+
else {
|
448
|
+
this.df.setSize(w - this.timeWidth - 4, h);
|
449
|
+
this.tf.setSize(this.timeWidth, h);
|
450
|
+
|
451
|
+
if(Ext.isIE) {
|
452
|
+
this.df.el.up('td').setWidth(w - this.timeWidth - 4);
|
453
|
+
this.tf.el.up('td').setWidth(this.timeWidth);
|
454
|
+
}
|
455
|
+
}
|
456
|
+
} // eo function setSize
|
457
|
+
// }}}
|
458
|
+
// {{{
|
459
|
+
/**
|
460
|
+
* @param {Mixed} val Value to set
|
461
|
+
* Sets the value of this field
|
462
|
+
*/
|
463
|
+
,setValue:function(val) {
|
464
|
+
if(!val && true === this.emptyToNow) {
|
465
|
+
this.setValue(new Date());
|
466
|
+
return;
|
467
|
+
}
|
468
|
+
else if(!val) {
|
469
|
+
this.setDate('');
|
470
|
+
this.setTime('');
|
471
|
+
this.updateValue();
|
472
|
+
return;
|
473
|
+
}
|
474
|
+
if ('number' === typeof val) {
|
475
|
+
val = new Date(val);
|
476
|
+
}
|
477
|
+
else if('string' === typeof val && this.hiddenFormat) {
|
478
|
+
val = Date.parseDate(val, this.hiddenFormat)
|
479
|
+
}
|
480
|
+
val = val ? val : new Date(1970, 0 ,1, 0, 0, 0);
|
481
|
+
var da, time;
|
482
|
+
if(val instanceof Date) {
|
483
|
+
this.setDate(val);
|
484
|
+
this.setTime(val);
|
485
|
+
this.dateValue = new Date(val);
|
486
|
+
}
|
487
|
+
else {
|
488
|
+
da = val.split(this.dtSeparator);
|
489
|
+
this.setDate(da[0]);
|
490
|
+
if(da[1]) {
|
491
|
+
if(da[2]) {
|
492
|
+
// add am/pm part back to time
|
493
|
+
da[1] += da[2];
|
494
|
+
}
|
495
|
+
this.setTime(da[1]);
|
496
|
+
}
|
497
|
+
}
|
498
|
+
this.updateValue();
|
499
|
+
} // eo function setValue
|
500
|
+
// }}}
|
501
|
+
// {{{
|
502
|
+
/**
|
503
|
+
* Hide or show this component by boolean
|
504
|
+
* @return {Ext.Component} this
|
505
|
+
*/
|
506
|
+
,setVisible: function(visible){
|
507
|
+
if(visible) {
|
508
|
+
this.df.show();
|
509
|
+
this.tf.show();
|
510
|
+
}else{
|
511
|
+
this.df.hide();
|
512
|
+
this.tf.hide();
|
513
|
+
}
|
514
|
+
return this;
|
515
|
+
} // eo function setVisible
|
516
|
+
// }}}
|
517
|
+
//{{{
|
518
|
+
,show:function() {
|
519
|
+
return this.setVisible(true);
|
520
|
+
} // eo function show
|
521
|
+
//}}}
|
522
|
+
//{{{
|
523
|
+
,hide:function() {
|
524
|
+
return this.setVisible(false);
|
525
|
+
} // eo function hide
|
526
|
+
//}}}
|
527
|
+
// {{{
|
528
|
+
/**
|
529
|
+
* @private Updates the date part
|
530
|
+
*/
|
531
|
+
,updateDate:function() {
|
532
|
+
|
533
|
+
var d = this.df.getValue();
|
534
|
+
if(d) {
|
535
|
+
if(!(this.dateValue instanceof Date)) {
|
536
|
+
this.initDateValue();
|
537
|
+
if(!this.tf.getValue()) {
|
538
|
+
this.setTime(this.dateValue);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
this.dateValue.setMonth(0); // because of leap years
|
542
|
+
this.dateValue.setFullYear(d.getFullYear());
|
543
|
+
this.dateValue.setMonth(d.getMonth(), d.getDate());
|
544
|
+
// this.dateValue.setDate(d.getDate());
|
545
|
+
}
|
546
|
+
else {
|
547
|
+
this.dateValue = '';
|
548
|
+
this.setTime('');
|
549
|
+
}
|
550
|
+
} // eo function updateDate
|
551
|
+
// }}}
|
552
|
+
// {{{
|
553
|
+
/**
|
554
|
+
* @private
|
555
|
+
* Updates the time part
|
556
|
+
*/
|
557
|
+
,updateTime:function() {
|
558
|
+
var t = this.tf.getValue();
|
559
|
+
if(t && !(t instanceof Date)) {
|
560
|
+
t = Date.parseDate(t, this.tf.format);
|
561
|
+
}
|
562
|
+
if(t && !this.df.getValue()) {
|
563
|
+
this.initDateValue();
|
564
|
+
this.setDate(this.dateValue);
|
565
|
+
}
|
566
|
+
if(this.dateValue instanceof Date) {
|
567
|
+
if(t) {
|
568
|
+
this.dateValue.setHours(t.getHours());
|
569
|
+
this.dateValue.setMinutes(t.getMinutes());
|
570
|
+
this.dateValue.setSeconds(t.getSeconds());
|
571
|
+
}
|
572
|
+
else {
|
573
|
+
this.dateValue.setHours(0);
|
574
|
+
this.dateValue.setMinutes(0);
|
575
|
+
this.dateValue.setSeconds(0);
|
576
|
+
}
|
577
|
+
}
|
578
|
+
} // eo function updateTime
|
579
|
+
// }}}
|
580
|
+
// {{{
|
581
|
+
/**
|
582
|
+
* @private Updates the underlying hidden field value
|
583
|
+
*/
|
584
|
+
,updateHidden:function() {
|
585
|
+
if(this.isRendered) {
|
586
|
+
var value = this.dateValue instanceof Date ? this.dateValue.format(this.hiddenFormat) : '';
|
587
|
+
this.el.dom.value = value;
|
588
|
+
}
|
589
|
+
}
|
590
|
+
// }}}
|
591
|
+
// {{{
|
592
|
+
/**
|
593
|
+
* @private Updates all of Date, Time and Hidden
|
594
|
+
*/
|
595
|
+
,updateValue:function() {
|
596
|
+
|
597
|
+
this.updateDate();
|
598
|
+
this.updateTime();
|
599
|
+
this.updateHidden();
|
600
|
+
|
601
|
+
return;
|
602
|
+
} // eo function updateValue
|
603
|
+
// }}}
|
604
|
+
// {{{
|
605
|
+
/**
|
606
|
+
* @return {Boolean} true = valid, false = invalid
|
607
|
+
* calls validate methods of DateField and TimeField
|
608
|
+
*/
|
609
|
+
,validate:function() {
|
610
|
+
return this.df.validate() && this.tf.validate();
|
611
|
+
} // eo function validate
|
612
|
+
// }}}
|
613
|
+
// {{{
|
614
|
+
/**
|
615
|
+
* Returns renderer suitable to render this field
|
616
|
+
* @param {Object} Column model config
|
617
|
+
*/
|
618
|
+
,renderer: function(field) {
|
619
|
+
var format = field.editor.dateFormat || Ext.ux.form.DateTime.prototype.dateFormat;
|
620
|
+
format += ' ' + (field.editor.timeFormat || Ext.ux.form.DateTime.prototype.timeFormat);
|
621
|
+
var renderer = function(val) {
|
622
|
+
var retval = Ext.util.Format.date(val, format);
|
623
|
+
return retval;
|
624
|
+
};
|
625
|
+
return renderer;
|
626
|
+
} // eo function renderer
|
627
|
+
// }}}
|
628
|
+
|
629
|
+
}); // eo extend
|
630
|
+
|
631
|
+
// register xtype
|
632
|
+
Ext.reg('xdatetime', Ext.ux.form.DateTime);
|
633
|
+
|
634
|
+
// eof
|
data/lib/netzke/grid_panel.rb
CHANGED
@@ -12,11 +12,26 @@ module Netzke
|
|
12
12
|
# * properties and column configuration
|
13
13
|
#
|
14
14
|
class GridPanel < Base
|
15
|
-
|
15
|
+
# so that some inherited methods would know our real location
|
16
|
+
self.widget_file = __FILE__
|
17
|
+
|
18
|
+
# include javascripts from Ext examples
|
19
|
+
ext_js_include "examples/grid-filtering/menu/EditableItem.js",
|
20
|
+
"examples/grid-filtering/menu/RangeMenu.js",
|
21
|
+
"examples/grid-filtering/grid/GridFilters.js"
|
22
|
+
|
23
|
+
%w{Boolean Date List Numeric String}.unshift("").each do |f|
|
24
|
+
ext_js_include "examples/grid-filtering/grid/filter/#{f}Filter.js"
|
25
|
+
end
|
16
26
|
|
17
|
-
#
|
27
|
+
# include ruby code in grid_panel_extras
|
28
|
+
include_extras
|
29
|
+
|
30
|
+
# define connection points between client side and server side of GridPanel.
|
31
|
+
# See implementation of equally named methods in the GridPanelExtras::Interface module.
|
18
32
|
interface :get_data, :post_data, :delete_data, :resize_column, :move_column, :get_cb_choices
|
19
33
|
|
34
|
+
# database field operations
|
20
35
|
include Netzke::DbFields
|
21
36
|
|
22
37
|
module ClassMethods
|
@@ -27,7 +42,7 @@ module Netzke
|
|
27
42
|
# Global GridPanel configuration
|
28
43
|
def config
|
29
44
|
set_default_config({
|
30
|
-
|
45
|
+
:column_manager => "NetzkeGridPanelColumn"
|
31
46
|
})
|
32
47
|
end
|
33
48
|
|
@@ -36,6 +51,7 @@ module Netzke
|
|
36
51
|
rescue
|
37
52
|
nil
|
38
53
|
end
|
54
|
+
|
39
55
|
end
|
40
56
|
extend ClassMethods
|
41
57
|
|
File without changes
|
File without changes
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Netzke
|
2
|
+
class TabPanel < Base
|
3
|
+
def self.js_base_class
|
4
|
+
"Ext.TabPanel"
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.js_extend_properties
|
8
|
+
{
|
9
|
+
# loads widget into the panel if it wasn't loaded yet
|
10
|
+
:load_item_widget => <<-JS.l,
|
11
|
+
function(panel) {
|
12
|
+
if (!panel.getWidget()) panel.loadWidget(this.id + "__" + panel.containerFor + "__get_widget");
|
13
|
+
}
|
14
|
+
JS
|
15
|
+
|
16
|
+
:on_widget_load => <<-JS.l
|
17
|
+
function(){
|
18
|
+
// immediately instantiate the active panel
|
19
|
+
var activePanel = this.findById(this.id + "_active");
|
20
|
+
var activeItemConfig = this.initialConfig[this.initialConfig.expandedItem+"Config"];
|
21
|
+
if (activeItemConfig) activePanel.add(new Ext.netzke.cache[activeItemConfig.widgetClassName](activeItemConfig));
|
22
|
+
}
|
23
|
+
JS
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def js_config
|
28
|
+
active_item_config = config[:items].select{|i| i[:active]}.first
|
29
|
+
super.merge({
|
30
|
+
:active_item => active_item_config && active_item_config[:name],
|
31
|
+
:items => items
|
32
|
+
})
|
33
|
+
end
|
34
|
+
|
35
|
+
# some configuration normalization
|
36
|
+
def initialize(*args)
|
37
|
+
super
|
38
|
+
|
39
|
+
seen_active = false
|
40
|
+
|
41
|
+
config[:items].each_with_index do |item, i|
|
42
|
+
# if some items are provided without names, give them generated names
|
43
|
+
item[:name] ||= "item#{i}"
|
44
|
+
|
45
|
+
# remove duplucated :active configuration
|
46
|
+
if item[:active]
|
47
|
+
item[:active] = nil if seen_active
|
48
|
+
seen_active = true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# the items are late aggregatees, besides the ones that are marked "active"
|
54
|
+
def initial_aggregatees
|
55
|
+
res = {}
|
56
|
+
config[:items].each_with_index do |item, i|
|
57
|
+
item[:late_aggregation] = !item[:active]
|
58
|
+
res.merge!(item[:name].to_sym => item)
|
59
|
+
end
|
60
|
+
res
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def self.js_default_config
|
65
|
+
super.merge({
|
66
|
+
:active_tab => 0,
|
67
|
+
:id_delimiter => "___", # otherwise it conflicts with Netzke
|
68
|
+
:defaults => {:layout => 'fit'}, # all items will be of type Panel with layout 'fit'
|
69
|
+
:listeners => {
|
70
|
+
# every item gets an expand event set, which dynamically loads a widget into this item
|
71
|
+
:tabchange => {
|
72
|
+
:fn => <<-JS.l
|
73
|
+
function(self, tab){
|
74
|
+
this.loadItemWidget(tab);
|
75
|
+
// comp.on('expand', this.loadItemWidget, self)
|
76
|
+
}
|
77
|
+
JS
|
78
|
+
}
|
79
|
+
}
|
80
|
+
})
|
81
|
+
end
|
82
|
+
|
83
|
+
def items
|
84
|
+
res = []
|
85
|
+
config[:items].each_with_index do |item, i|
|
86
|
+
item_config = {
|
87
|
+
# :id => item[:active] && id_name + '_active',
|
88
|
+
:title => item[:title] || (item[:name] && item[:name].humanize),
|
89
|
+
:container_for => item[:name] # to know which fit panel will load which widget
|
90
|
+
}
|
91
|
+
res << item_config
|
92
|
+
end
|
93
|
+
res
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
data/netzke-basepack.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{netzke-basepack}
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.5"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sergei Kozlov"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-03-03}
|
10
10
|
s.description = %q{Base Netzke widgets - grid, form, tree, and more}
|
11
11
|
s.email = %q{sergei@writelesscode.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/container.rb", "lib/netzke/db_fields.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/form_panel_extras/interface.rb", "lib/netzke/form_panel_extras/js_builder.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_extras/interface.rb", "lib/netzke/grid_panel_extras/js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/table_editor.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "README.rdoc", "tasks/netzke_basepack_tasks.rake"]
|
13
|
-
s.files = ["CHANGELOG", "css/basepack.css", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/USAGE", "generators/netzke_form_panel/netzke_form_panel_generator.rb", "generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb", "generators/netzke_grid_panel/netzke_grid_panel_generator.rb", "generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb", "init.rb", "install.rb", "javascripts/basepack.js", "
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/container.rb", "lib/netzke/db_fields.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/form_panel_extras/interface.rb", "lib/netzke/form_panel_extras/javascripts/xdatetime.js", "lib/netzke/form_panel_extras/js_builder.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_extras/interface.rb", "lib/netzke/grid_panel_extras/javascripts/check_column.js", "lib/netzke/grid_panel_extras/javascripts/filters.js", "lib/netzke/grid_panel_extras/js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/tab_panel.rb", "lib/netzke/table_editor.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "README.rdoc", "tasks/netzke_basepack_tasks.rake"]
|
13
|
+
s.files = ["CHANGELOG", "css/basepack.css", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/USAGE", "generators/netzke_form_panel/netzke_form_panel_generator.rb", "generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb", "generators/netzke_grid_panel/netzke_grid_panel_generator.rb", "generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb", "init.rb", "install.rb", "javascripts/basepack.js", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/container.rb", "lib/netzke/db_fields.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/form_panel_extras/interface.rb", "lib/netzke/form_panel_extras/javascripts/xdatetime.js", "lib/netzke/form_panel_extras/js_builder.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_extras/interface.rb", "lib/netzke/grid_panel_extras/javascripts/check_column.js", "lib/netzke/grid_panel_extras/javascripts/filters.js", "lib/netzke/grid_panel_extras/js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/tab_panel.rb", "lib/netzke/table_editor.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "Manifest", "Rakefile", "README.rdoc", "tasks/netzke_basepack_tasks.rake", "test/app_root/app/controllers/application.rb", "test/app_root/app/models/book.rb", "test/app_root/app/models/category.rb", "test/app_root/app/models/city.rb", "test/app_root/app/models/continent.rb", "test/app_root/app/models/country.rb", "test/app_root/app/models/genre.rb", "test/app_root/config/boot.rb", "test/app_root/config/database.yml", "test/app_root/config/environment.rb", "test/app_root/config/environments/in_memory.rb", "test/app_root/config/environments/mysql.rb", "test/app_root/config/environments/postgresql.rb", "test/app_root/config/environments/sqlite.rb", "test/app_root/config/environments/sqlite3.rb", "test/app_root/config/routes.rb", "test/app_root/db/migrate/20081222033343_create_books.rb", "test/app_root/db/migrate/20081222033440_create_genres.rb", "test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb", "test/app_root/db/migrate/20081223024935_create_categories.rb", "test/app_root/db/migrate/20081223025635_create_countries.rb", "test/app_root/db/migrate/20081223025653_create_continents.rb", "test/app_root/db/migrate/20081223025732_create_cities.rb", "test/app_root/db/migrate/20090102223630_create_netzke_layouts.rb", "test/app_root/db/migrate/20090102223811_create_netzke_grid_panel_columns.rb", "test/app_root/script/console", "test/app_root/vendor/plugins/acts_as_list/init.rb", "test/app_root/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb", "test/app_root/vendor/plugins/acts_as_list/README", "test/ar_ext_test.rb", "test/border_layout_panel_test.rb", "test/console_with_fixtures.rb", "test/fixtures/books.yml", "test/fixtures/categories.yml", "test/fixtures/cities.yml", "test/fixtures/continents.yml", "test/fixtures/countries.yml", "test/fixtures/genres.yml", "test/grid_panel_test.rb", "test/netzke_basepack_test.rb", "test/schema.rb", "test/test_helper.rb", "uninstall.rb", "netzke-basepack.gemspec"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://writelesscode.com}
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netzke-basepack", "--main", "README.rdoc"]
|
@@ -26,13 +26,13 @@ Gem::Specification.new do |s|
|
|
26
26
|
|
27
27
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
28
|
s.add_runtime_dependency(%q<searchlogic>, [">= 1.6.2"])
|
29
|
-
s.add_runtime_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
29
|
+
s.add_runtime_dependency(%q<netzke-core>, [">= 0", "= 0.2.8"])
|
30
30
|
else
|
31
31
|
s.add_dependency(%q<searchlogic>, [">= 1.6.2"])
|
32
|
-
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
32
|
+
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.8"])
|
33
33
|
end
|
34
34
|
else
|
35
35
|
s.add_dependency(%q<searchlogic>, [">= 1.6.2"])
|
36
|
-
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
36
|
+
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.8"])
|
37
37
|
end
|
38
38
|
end
|
@@ -9,16 +9,17 @@ require 'netzke/db_fields'
|
|
9
9
|
require 'netzke/grid_panel'
|
10
10
|
|
11
11
|
class BorderLayoutPanelTest < ActiveSupport::TestCase
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
12
|
+
# TODO: rethink the test
|
13
|
+
# test "dependencies" do
|
14
|
+
# widget = Netzke::BorderLayoutPanel.new(:name => 'Bla', :regions => {:center => {:widget_class_name => 'Panel'}, :east => {:widget_class_name => 'GridPanel'}})
|
15
|
+
#
|
16
|
+
# assert(%w{BorderLayoutPanel Panel GridPanel}.all?{|k| widget.dependencies.include?(k)})
|
17
|
+
#
|
18
|
+
# assert(widget.js_missing_code.index("Ext.netzke.cache['BorderLayoutPanel']"))
|
19
|
+
# # assert(widget.js_missing_code.index("Ext.netzke.cache['Panel']"))
|
20
|
+
# assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.netzke.cache['GridPanel']"))
|
21
|
+
# # assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.netzke.cache['Panel']"))
|
22
|
+
# # assert(!widget.js_missing_code(%w{BorderLayoutPanel}).index("Ext.netzke.cache['BorderLayoutPanel']"))
|
23
|
+
#
|
24
|
+
# end
|
24
25
|
end
|
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.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergei Kozlov
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-03 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: "0"
|
34
34
|
- - "="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.2.
|
36
|
+
version: 0.2.8
|
37
37
|
version:
|
38
38
|
description: Base Netzke widgets - grid, form, tree, and more
|
39
39
|
email: sergei@writelesscode.com
|
@@ -54,14 +54,18 @@ extra_rdoc_files:
|
|
54
54
|
- lib/netzke/fields_configurator.rb
|
55
55
|
- lib/netzke/form_panel.rb
|
56
56
|
- lib/netzke/form_panel_extras/interface.rb
|
57
|
+
- lib/netzke/form_panel_extras/javascripts/xdatetime.js
|
57
58
|
- lib/netzke/form_panel_extras/js_builder.rb
|
58
59
|
- lib/netzke/grid_panel.rb
|
59
60
|
- lib/netzke/grid_panel_extras/interface.rb
|
61
|
+
- lib/netzke/grid_panel_extras/javascripts/check_column.js
|
62
|
+
- lib/netzke/grid_panel_extras/javascripts/filters.js
|
60
63
|
- lib/netzke/grid_panel_extras/js_builder.rb
|
61
64
|
- lib/netzke/panel.rb
|
62
65
|
- lib/netzke/preference_grid.rb
|
63
66
|
- lib/netzke/properties_tool.rb
|
64
67
|
- lib/netzke/property_grid.rb
|
68
|
+
- lib/netzke/tab_panel.rb
|
65
69
|
- lib/netzke/table_editor.rb
|
66
70
|
- lib/netzke/wrapper.rb
|
67
71
|
- lib/netzke-basepack.rb
|
@@ -80,8 +84,6 @@ files:
|
|
80
84
|
- init.rb
|
81
85
|
- install.rb
|
82
86
|
- javascripts/basepack.js
|
83
|
-
- javascripts/check_column.js
|
84
|
-
- javascripts/filters.js
|
85
87
|
- lib/app/models/netzke_form_panel_field.rb
|
86
88
|
- lib/app/models/netzke_grid_panel_column.rb
|
87
89
|
- lib/netzke/accordion_panel.rb
|
@@ -93,14 +95,18 @@ files:
|
|
93
95
|
- lib/netzke/fields_configurator.rb
|
94
96
|
- lib/netzke/form_panel.rb
|
95
97
|
- lib/netzke/form_panel_extras/interface.rb
|
98
|
+
- lib/netzke/form_panel_extras/javascripts/xdatetime.js
|
96
99
|
- lib/netzke/form_panel_extras/js_builder.rb
|
97
100
|
- lib/netzke/grid_panel.rb
|
98
101
|
- lib/netzke/grid_panel_extras/interface.rb
|
102
|
+
- lib/netzke/grid_panel_extras/javascripts/check_column.js
|
103
|
+
- lib/netzke/grid_panel_extras/javascripts/filters.js
|
99
104
|
- lib/netzke/grid_panel_extras/js_builder.rb
|
100
105
|
- lib/netzke/panel.rb
|
101
106
|
- lib/netzke/preference_grid.rb
|
102
107
|
- lib/netzke/properties_tool.rb
|
103
108
|
- lib/netzke/property_grid.rb
|
109
|
+
- lib/netzke/tab_panel.rb
|
104
110
|
- lib/netzke/table_editor.rb
|
105
111
|
- lib/netzke/wrapper.rb
|
106
112
|
- lib/netzke-basepack.rb
|