extjsml 0.0.2
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.
- checksums.yaml +7 -0
- data/bin/extjsmlc +70 -0
- data/lib/extclasses/actioncolumn.rb +11 -0
- data/lib/extclasses/booleancolumn.rb +34 -0
- data/lib/extclasses/button.rb +11 -0
- data/lib/extclasses/checkbox.rb +30 -0
- data/lib/extclasses/checkboxgroup.rb +14 -0
- data/lib/extclasses/checkcolumn.rb +16 -0
- data/lib/extclasses/combo.rb +56 -0
- data/lib/extclasses/compositefield.rb +11 -0
- data/lib/extclasses/container.rb +12 -0
- data/lib/extclasses/datecolumn.rb +21 -0
- data/lib/extclasses/datefield.rb +16 -0
- data/lib/extclasses/editorgrid.rb +97 -0
- data/lib/extclasses/fieldcontainer.rb +23 -0
- data/lib/extclasses/fieldset.rb +61 -0
- data/lib/extclasses/filefield.rb +18 -0
- data/lib/extclasses/form.rb +33 -0
- data/lib/extclasses/grid.rb +141 -0
- data/lib/extclasses/gridcolumn.rb +19 -0
- data/lib/extclasses/hidden.rb +7 -0
- data/lib/extclasses/htmleditor.rb +15 -0
- data/lib/extclasses/label.rb +10 -0
- data/lib/extclasses/numbercolumn.rb +30 -0
- data/lib/extclasses/numberfield.rb +19 -0
- data/lib/extclasses/paging.rb +12 -0
- data/lib/extclasses/panel.rb +29 -0
- data/lib/extclasses/passwordfield.rb +27 -0
- data/lib/extclasses/pivotgrid.rb +91 -0
- data/lib/extclasses/radio.rb +25 -0
- data/lib/extclasses/radiogroup.rb +14 -0
- data/lib/extclasses/runningcolumn.rb +9 -0
- data/lib/extclasses/tabpanel.rb +17 -0
- data/lib/extclasses/tbfill.rb +5 -0
- data/lib/extclasses/tbseparator.rb +5 -0
- data/lib/extclasses/templatecolumn.rb +11 -0
- data/lib/extclasses/textarea.rb +12 -0
- data/lib/extclasses/textfield.rb +27 -0
- data/lib/extclasses/timefield.rb +16 -0
- data/lib/extclasses/toolbar.rb +7 -0
- data/lib/extclasses/viewport.rb +8 -0
- data/lib/extclasses/window.rb +34 -0
- data/lib/extjsml/basenode.rb +347 -0
- data/lib/extjsml/ext_util.rb +232 -0
- data/lib/extjsml/generator.rb +578 -0
- data/lib/extjsml/parser.rb +35 -0
- data/lib/extmodules/form_field.rb +32 -0
- data/lib/extmodules/magic.rb +196 -0
- data/lib/extplugins/currency.rb +25 -0
- data/lib/extplugins/currencycolumn.rb +18 -0
- data/lib/extplugins/numeric.rb +32 -0
- data/lib/extplugins/pricefield.rb +36 -0
- data/lib/extuxs/uxaccount.rb +8 -0
- data/lib/extuxs/uxbroker.rb +7 -0
- data/lib/extuxs/uxchq.rb +8 -0
- data/lib/extuxs/uxreceiverinfo.rb +8 -0
- data/lib/extuxs/uxsettlement.rb +8 -0
- data/lib/test/test_parser.rb +97 -0
- metadata +115 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
class ExtFieldset < ExtNode
|
|
2
|
+
include Magic::Title
|
|
3
|
+
|
|
4
|
+
@@ALIAS_CONFIG ={
|
|
5
|
+
:text => :title
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
def initialize(config, parent)
|
|
9
|
+
@default_config = {
|
|
10
|
+
layout: 'anchor',
|
|
11
|
+
animCollapse: true,
|
|
12
|
+
labelAlign: "right",
|
|
13
|
+
# collapsed: true,
|
|
14
|
+
# checkboxToggle: true,
|
|
15
|
+
autoHeight: true
|
|
16
|
+
# columnWidth: 0.5
|
|
17
|
+
}
|
|
18
|
+
super("fieldset", config, parent)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_extjs(at_deep = 0)
|
|
22
|
+
col_label_width = []
|
|
23
|
+
x = self.find_field_elements.map do |c|
|
|
24
|
+
[c.config[:fieldLabel], c.parent.config[:col_index], c.parent.config[:labelWidth] ]
|
|
25
|
+
end
|
|
26
|
+
self.find_field_elements.each do |c|
|
|
27
|
+
i = c.parent.config[:col_index] || 0
|
|
28
|
+
next unless i
|
|
29
|
+
unless col_label_width[i]
|
|
30
|
+
col_label_width[i] = []
|
|
31
|
+
end
|
|
32
|
+
col_label_width[i] << c.parent.config[:labelWidth]
|
|
33
|
+
end
|
|
34
|
+
max_label_width = []
|
|
35
|
+
col_label_width.each_with_index do |c, i|
|
|
36
|
+
max_label_width[i] = c.compact.max
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# update max label within every fields container
|
|
40
|
+
self.find_field_elements.each do |c|
|
|
41
|
+
i = c.parent.config[:col_index] || 0
|
|
42
|
+
c.parent.config[:labelWidth] = max_label_width[i]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if @config[:labelWidth]
|
|
46
|
+
@config.merge!({ :defaults => { :labelWidth => @config[:labelWidth] } } )
|
|
47
|
+
# if set a button at the last child
|
|
48
|
+
if @childs.last.xtype == "button"
|
|
49
|
+
btn_style = @childs.last.config[:style]
|
|
50
|
+
new_btn_style = btn_style.dup if btn_style
|
|
51
|
+
new_btn_style ||= "{}"
|
|
52
|
+
fix_style = "margin-left: #{@config[:labelWidth]+5}px; margin-bottom: 0.5em; }"
|
|
53
|
+
new_btn_style.gsub!("}", fix_style)
|
|
54
|
+
@childs.last.config[:style] = new_btn_style
|
|
55
|
+
end
|
|
56
|
+
@config.delete :labelWidth
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
super(at_deep)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# depend ux
|
|
2
|
+
class ExtFilefield < ExtNode
|
|
3
|
+
include FormField
|
|
4
|
+
|
|
5
|
+
@@ALIAS_CONFIG = {
|
|
6
|
+
:text => :buttonText
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
def initialize(config, parent)
|
|
10
|
+
@default_config = {
|
|
11
|
+
width: 355,
|
|
12
|
+
labelAlign: "right",
|
|
13
|
+
buttonText: "Browse"
|
|
14
|
+
}
|
|
15
|
+
super('fileuploadfield',config, parent)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class ExtForm < ExtNode
|
|
2
|
+
# include Magic::Toolbar
|
|
3
|
+
|
|
4
|
+
def initialize(config, parent)
|
|
5
|
+
@default_config = {
|
|
6
|
+
# padding: 10,
|
|
7
|
+
autoHeight: true,
|
|
8
|
+
layout: 'anchor',
|
|
9
|
+
border: false
|
|
10
|
+
}
|
|
11
|
+
super('form', config, parent)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_extjs(at_deep = 0)
|
|
15
|
+
if @childs.last.xtype == "toolbar"
|
|
16
|
+
# get only item form toolbar
|
|
17
|
+
@config.merge! :fbar => @childs.last.to_extjs(at_deep + 1)
|
|
18
|
+
|
|
19
|
+
@childs.pop
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if @childs.first.xtype == "toolbar"
|
|
23
|
+
@config.merge! :tbar => @childs.first.to_extjs(at_deep + 1)
|
|
24
|
+
@childs.slice!(0)
|
|
25
|
+
end
|
|
26
|
+
if find("paging",{:recursive => 1})
|
|
27
|
+
@config.merge! :bbar => find("paging").to_extjs(at_deep + 1)
|
|
28
|
+
self.remove_childs "paging"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
super at_deep
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
class ExtGrid < ExtNode
|
|
2
|
+
include Magic::Store
|
|
3
|
+
include Magic::Title
|
|
4
|
+
|
|
5
|
+
@@ALIAS_CONFIG = {
|
|
6
|
+
:text => :title
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
def initialize(config, parent)
|
|
10
|
+
@default_config = {
|
|
11
|
+
title: "My Grid",
|
|
12
|
+
# enableHdMenu: false,
|
|
13
|
+
columnLines: true,
|
|
14
|
+
sm: "",
|
|
15
|
+
selector: "row",
|
|
16
|
+
# enableColumnmove: false,
|
|
17
|
+
viewConfig: {
|
|
18
|
+
forceFit: true,
|
|
19
|
+
emptyText: "No record"
|
|
20
|
+
# for expanding row to show any infomation
|
|
21
|
+
# enableRowBody: true
|
|
22
|
+
},
|
|
23
|
+
frame: false,
|
|
24
|
+
width: "auto",
|
|
25
|
+
loadMask: true,
|
|
26
|
+
# TODO dummy store
|
|
27
|
+
store: [],
|
|
28
|
+
height: 200
|
|
29
|
+
# columns: [
|
|
30
|
+
# { id: 'company', header: 'Company', width: 200, sortable: true, dataIndex: 'company'},
|
|
31
|
+
# { header: 'Price', dataIndex: 'price'},
|
|
32
|
+
# { header: 'Change', dataIndex: 'change'},
|
|
33
|
+
# { header: '% Change', dataIndex: 'pctChange'},
|
|
34
|
+
# {
|
|
35
|
+
# header: 'Last Updated', width: 135, dataIndex: 'lastChange',
|
|
36
|
+
# xtype: 'datecolumn', format: 'M d, Y'
|
|
37
|
+
# }
|
|
38
|
+
# ]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
super('grid',config, parent)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# TODO refactor
|
|
45
|
+
def to_extjs(at_deep = 0)
|
|
46
|
+
# columns
|
|
47
|
+
cols = []
|
|
48
|
+
self.childs.each do |c|
|
|
49
|
+
cols << c.to_extjs(at_deep) unless c.xtype.match(/column$/).nil?
|
|
50
|
+
end
|
|
51
|
+
@config.merge! :columns => cols unless cols.nil?
|
|
52
|
+
|
|
53
|
+
# rowselection type : row | rows, cell | cells, checkbox | checkboxs
|
|
54
|
+
#
|
|
55
|
+
# unless @config[:selector].nil?
|
|
56
|
+
# # generate random js variable name
|
|
57
|
+
# require "securerandom"
|
|
58
|
+
# var = SecureRandom.urlsafe_base64.gsub(/\d|\W/,'')
|
|
59
|
+
# case @config[:selector]
|
|
60
|
+
# when "row"
|
|
61
|
+
# @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.RowSelectionModel({ singleSelect: true }))</js>)"
|
|
62
|
+
# when "rows"
|
|
63
|
+
# @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.RowSelectionModel({ singleSelect: false }))</js>)"
|
|
64
|
+
# # TODO
|
|
65
|
+
# # when "cell"
|
|
66
|
+
# # @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CellSelectionModel())</js>)"
|
|
67
|
+
# when "checkbox"
|
|
68
|
+
# @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CheckboxSelectionModel({ singleSelect: true, header: '' }))</js>)"
|
|
69
|
+
# @config[:columns].unshift("<js>this._#{var}</js>")
|
|
70
|
+
# when "checkboxs"
|
|
71
|
+
# @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CheckboxSelectionModel())</js>)"
|
|
72
|
+
# @config[:columns].unshift("<js>this._#{var}</js>")
|
|
73
|
+
# end
|
|
74
|
+
# @config.delete :selector
|
|
75
|
+
# end
|
|
76
|
+
|
|
77
|
+
toolbar = self.find("toolbar", {recursive: 1})
|
|
78
|
+
@config.merge! :tbar => toolbar.to_extjs(at_deep + 1) if toolbar
|
|
79
|
+
|
|
80
|
+
rand_store_id = nil
|
|
81
|
+
if @config[:store] == []
|
|
82
|
+
|
|
83
|
+
data_xtype = ExtUtil.data_xtype
|
|
84
|
+
data_cols = []
|
|
85
|
+
|
|
86
|
+
@config[:columns].each do |c|
|
|
87
|
+
if c.is_a? Hash
|
|
88
|
+
if data_xtype.include? c[:xtype]
|
|
89
|
+
data_cols << "{ name: '#{c[:dataIndex]}' }"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
rand_store_id = ExtUtil.random_id
|
|
95
|
+
if @config[:restful]
|
|
96
|
+
@config[:url] = @config[:restful]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
fetch_type = @config[:url] ? (@config[:restful] ? "rest" : "ajax") : "memory"
|
|
100
|
+
if data_cols.count > 0
|
|
101
|
+
@config[:store] = %Q{ <js>(
|
|
102
|
+
this.#{rand_store_id} = new Ext.data.JsonStore({
|
|
103
|
+
storeId: \"#{rand_store_id}\",
|
|
104
|
+
pageSize: #{@config[:pageSize] || default_page_size},
|
|
105
|
+
proxy: {
|
|
106
|
+
url: \"#{@config[:url]}\",
|
|
107
|
+
type: \"#{fetch_type}\",
|
|
108
|
+
reader: { type: \"json\", root: \"data\" }
|
|
109
|
+
},
|
|
110
|
+
fields: [#{data_cols.join(',')}]
|
|
111
|
+
}))
|
|
112
|
+
</js>}.strip
|
|
113
|
+
|
|
114
|
+
# remove internal usaged config
|
|
115
|
+
@config.delete :url
|
|
116
|
+
@config.delete :restful
|
|
117
|
+
end
|
|
118
|
+
@config.delete :pageSize
|
|
119
|
+
# auto create json store
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# set paging
|
|
123
|
+
paging = self.find("pagingtoolbar")
|
|
124
|
+
if paging
|
|
125
|
+
paging.override_config :store => ("<js>this.#{rand_store_id}</js>" || @config[:store])
|
|
126
|
+
unless @config[:store] =~ /<js>/
|
|
127
|
+
paging.override_config :store => (rand_store_id || @config[:store])
|
|
128
|
+
end
|
|
129
|
+
@config.merge! :bbar => paging.to_extjs(at_deep + 1)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# grid does not allow to have items
|
|
133
|
+
self.childs = []
|
|
134
|
+
|
|
135
|
+
super(at_deep)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def default_page_size
|
|
139
|
+
25
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class ExtGridcolumn < ExtNode
|
|
2
|
+
include Magic::Column
|
|
3
|
+
@@ALIAS_CONFIG = {
|
|
4
|
+
:text => :header,
|
|
5
|
+
:name => :dataIndex
|
|
6
|
+
}
|
|
7
|
+
def initialize(config, parent)
|
|
8
|
+
@default_config = {}
|
|
9
|
+
|
|
10
|
+
super "gridcolumn", config, parent
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_extjs(at_deep = 0)
|
|
14
|
+
if self.child_of? "editorgrid" and @config[:editor].nil?
|
|
15
|
+
@config.merge! :editor => { :xtype => "textfield" }
|
|
16
|
+
end
|
|
17
|
+
super at_deep
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
class ExtNumbercolumn < ExtNode
|
|
2
|
+
include Magic::Column
|
|
3
|
+
|
|
4
|
+
@@ALIAS_CONFIG = {
|
|
5
|
+
:text => :header,
|
|
6
|
+
:name => :dataIndex
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
def initialize(config, parent)
|
|
10
|
+
|
|
11
|
+
@default_config = {
|
|
12
|
+
:align => "right",
|
|
13
|
+
:sortable => true,
|
|
14
|
+
:format => "0,000"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
super "numbercolumn", config, parent
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_extjs(at_deep = 0)
|
|
21
|
+
if self.child_of? "editorgrid"
|
|
22
|
+
if @config[:editor].nil?
|
|
23
|
+
@config.merge! :editor => { :xtype => "numberfield" }
|
|
24
|
+
else
|
|
25
|
+
@config[:editor].merge! :xtype => "numberfield", :format => @config[:format] || "0,000.00"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
super at_deep
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class ExtNumberfield < ExtNode
|
|
2
|
+
include FormField
|
|
3
|
+
|
|
4
|
+
@@ALIAS_CONFIG = {
|
|
5
|
+
:text => :fieldLabel
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
def initialize(config, parent)
|
|
9
|
+
@default_config = {
|
|
10
|
+
labelAlign: "right",
|
|
11
|
+
decimalPrecision: 2,
|
|
12
|
+
decimalSeparator: '.',
|
|
13
|
+
allowDecimal: true,
|
|
14
|
+
allowNegative: false,
|
|
15
|
+
cls: "number"
|
|
16
|
+
}
|
|
17
|
+
super "numberfield", config, parent
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class ExtPanel < ExtNode
|
|
2
|
+
include Magic::Title
|
|
3
|
+
|
|
4
|
+
@@ALIAS_CONFIG = {
|
|
5
|
+
:text => :title
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
def initialize(options, parent)
|
|
9
|
+
@default_config = {
|
|
10
|
+
:padding => 5,
|
|
11
|
+
# :height => 200,
|
|
12
|
+
:title => 'Title By Default',
|
|
13
|
+
:autoHeight => true
|
|
14
|
+
}
|
|
15
|
+
super("panel", options, parent)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_extjs(at_deep = 0)
|
|
19
|
+
if find("toolbar", { :recursive => 1})
|
|
20
|
+
@config.merge! :tbar => find("toolbar").to_extjs(at_deep + 1)
|
|
21
|
+
self.remove_childs "toolbar"
|
|
22
|
+
end
|
|
23
|
+
if find("paging", { :recursive => 1})
|
|
24
|
+
@config.merge! :bbar => find("paging").to_extjs(at_deep + 1)
|
|
25
|
+
self.remove_childs "paging"
|
|
26
|
+
end
|
|
27
|
+
super at_deep
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class ExtPasswordfield < ExtNode
|
|
2
|
+
include FormField
|
|
3
|
+
|
|
4
|
+
@@ALIAS_CONFIG = {
|
|
5
|
+
:text => :fieldLabel
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
def initialize(config, parent)
|
|
9
|
+
@default_config = {
|
|
10
|
+
:width => 150,
|
|
11
|
+
:autoCreate => {
|
|
12
|
+
:tag => "input",
|
|
13
|
+
:type => "password",
|
|
14
|
+
:autocomplete => "off"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if config[:autoCreate]
|
|
18
|
+
@default_config.merge! config[:autoCreate]
|
|
19
|
+
config.delete :autoCreate
|
|
20
|
+
end
|
|
21
|
+
if config[:emptyText]
|
|
22
|
+
@default_config[:autoCreate][:placeholder] = config[:emptyText]
|
|
23
|
+
config.delete :emptyText
|
|
24
|
+
end
|
|
25
|
+
super('textfield', config, parent)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
class ExtPivotgrid < ExtNode
|
|
2
|
+
include Magic::Store
|
|
3
|
+
include Magic::Title
|
|
4
|
+
|
|
5
|
+
@@ALIAS_CONFIG = {
|
|
6
|
+
:text => :title
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
def initialize(config, parent)
|
|
10
|
+
@default_config = {
|
|
11
|
+
title: "My Grid",
|
|
12
|
+
# enableHdMenu: false,
|
|
13
|
+
columnLines: true,
|
|
14
|
+
sm: "",
|
|
15
|
+
selector: "row",
|
|
16
|
+
# enableColumnmove: false,
|
|
17
|
+
viewConfig: {
|
|
18
|
+
forceFit: true,
|
|
19
|
+
emptyText: "No record"
|
|
20
|
+
# for expanding row to show any infomation
|
|
21
|
+
# enableRowBody: true
|
|
22
|
+
},
|
|
23
|
+
frame: true,
|
|
24
|
+
width: "auto",
|
|
25
|
+
loadMask: true,
|
|
26
|
+
# TODO dummy store
|
|
27
|
+
store: [],
|
|
28
|
+
height: 200
|
|
29
|
+
# columns: [
|
|
30
|
+
# { id: 'company', header: 'Company', width: 200, sortable: true, dataIndex: 'company'},
|
|
31
|
+
# { header: 'Price', dataIndex: 'price'},
|
|
32
|
+
# { header: 'Change', dataIndex: 'change'},
|
|
33
|
+
# { header: '% Change', dataIndex: 'pctChange'},
|
|
34
|
+
# {
|
|
35
|
+
# header: 'Last Updated', width: 135, dataIndex: 'lastChange',
|
|
36
|
+
# xtype: 'datecolumn', format: 'M d, Y'
|
|
37
|
+
# }
|
|
38
|
+
# ]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
super('pivotgrid',config, parent)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# TODO refactor
|
|
45
|
+
def to_extjs(at_deep = 0)
|
|
46
|
+
# columns
|
|
47
|
+
cols = []
|
|
48
|
+
self.childs.each do |c|
|
|
49
|
+
cols << c.to_extjs(at_deep) unless c.xtype.match(/column$/).nil?
|
|
50
|
+
end
|
|
51
|
+
@config.merge! :columns => cols unless cols.nil?
|
|
52
|
+
|
|
53
|
+
# rowselection type : row | rows, cell | cells, checkbox | checkboxs
|
|
54
|
+
unless @config[:selector].nil?
|
|
55
|
+
# generate random js variable name
|
|
56
|
+
require "securerandom"
|
|
57
|
+
var = SecureRandom.urlsafe_base64.gsub(/\d|\W/,'')
|
|
58
|
+
case @config[:selector]
|
|
59
|
+
when "row"
|
|
60
|
+
@config.merge! :sm => "<js>(this._#{var} = new Ext.grid.RowSelectionModel({ singleSelect: true }))</js>)"
|
|
61
|
+
when "rows"
|
|
62
|
+
@config.merge! :sm => "<js>(this._#{var} = new Ext.grid.RowSelectionModel({ singleSelect: false }))</js>)"
|
|
63
|
+
# TODO
|
|
64
|
+
# when "cell"
|
|
65
|
+
# @config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CellSelectionModel())</js>)"
|
|
66
|
+
when "checkbox"
|
|
67
|
+
@config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CheckboxSelectionModel({ singleSelect: true, header: '' }))</js>)"
|
|
68
|
+
@config[:columns].unshift("<js>this._#{var}</js>")
|
|
69
|
+
when "checkboxs"
|
|
70
|
+
@config.merge! :sm => "<js>(this._#{var} = new Ext.grid.CheckboxSelectionModel())</js>)"
|
|
71
|
+
@config[:columns].unshift("<js>this._#{var}</js>")
|
|
72
|
+
end
|
|
73
|
+
@config.delete :selector
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
toolbar = self.find("toolbar", {recursive: 1})
|
|
77
|
+
@config.merge! :tbar => toolbar.to_extjs(at_deep + 1) if toolbar
|
|
78
|
+
|
|
79
|
+
paging = self.find("paging")
|
|
80
|
+
if paging
|
|
81
|
+
unless @config[:store] =~ /<js>/
|
|
82
|
+
paging.override_config :store => @config[:store]
|
|
83
|
+
end
|
|
84
|
+
@config.merge! :bbar => paging.to_extjs(at_deep + 1)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# grid not allow to have items
|
|
88
|
+
self.childs = []
|
|
89
|
+
super(at_deep)
|
|
90
|
+
end
|
|
91
|
+
end
|