uki 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/uki +1 -1
- data/frameworks/uki/README.rdoc +1 -1
- data/frameworks/uki/examples/core-examples/controls/controls.js +6 -6
- data/frameworks/uki/examples/core-examples/flow/flow.js +4 -4
- data/frameworks/uki/examples/core-examples/linearGradient/gradient.svg +11 -0
- data/frameworks/uki/examples/core-examples/linearGradient/linearGradient.js +87 -0
- data/frameworks/uki/examples/core-examples/popup/popup.js +23 -10
- data/frameworks/uki/examples/core-examples/resizeToContents/resizeToContents.js +12 -1
- data/frameworks/uki/examples/core-examples/slider/slider.js +1 -1
- data/frameworks/uki/examples/core-examples/splitPaneExtended/splitPaneExtended.js +1 -1
- data/frameworks/uki/examples/core-examples/table/table.js +19 -2
- data/frameworks/uki/examples/core-examples/wave/wave-theme.js +1 -1
- data/frameworks/uki/examples/core-examples/wave/wave.js +1 -1
- data/frameworks/uki/examples/more-examples/radioButton/radioButton.js +3 -3
- data/frameworks/uki/examples/more-examples/select/select.js +35 -0
- data/frameworks/uki/examples/touch-examples/scrollPane/scrollPane.js +53 -0
- data/frameworks/uki/spec/unit/background.spec.js +1 -1
- data/frameworks/uki/spec/unit/selector.spec.js +28 -12
- data/frameworks/uki/spec/unit/utils.spec.js +14 -0
- data/frameworks/uki/src/uki-core.js +3 -1
- data/frameworks/uki/src/uki-core/after.js +57 -0
- data/frameworks/uki/src/uki-core/attachment.js +15 -6
- data/frameworks/uki/src/uki-core/background.js +4 -3
- data/frameworks/uki/src/uki-core/background/css.js +1 -0
- data/frameworks/uki/src/uki-core/background/cssBox.js +5 -3
- data/frameworks/uki/src/uki-core/background/linearGradient.js +112 -0
- data/frameworks/uki/src/uki-core/background/multi.js +2 -2
- data/frameworks/uki/src/uki-core/background/rows.js +1 -0
- data/frameworks/uki/src/uki-core/background/sliced9.js +5 -2
- data/frameworks/uki/src/uki-core/builder.js +5 -4
- data/frameworks/uki/src/uki-core/collection.js +18 -13
- data/frameworks/uki/src/uki-core/dom/browser.js +114 -0
- data/frameworks/uki/src/uki-core/dom/event.js +3 -0
- data/frameworks/uki/src/uki-core/image.js +1 -26
- data/frameworks/uki/src/uki-core/selector.js +5 -0
- data/frameworks/uki/src/uki-core/theme.js +24 -23
- data/frameworks/uki/src/uki-core/theme/template.js +1 -1
- data/frameworks/uki/src/uki-core/uki.js +7 -4
- data/frameworks/uki/src/uki-core/utils.js +51 -26
- data/frameworks/uki/src/uki-core/view.js +6 -3
- data/frameworks/uki/src/uki-core/view/base.js +16 -1
- data/frameworks/uki/src/uki-core/view/container.js +15 -5
- data/frameworks/uki/src/uki-core/view/focusable.js +17 -4
- data/frameworks/uki/src/uki-core/view/observable.js +15 -2
- data/frameworks/uki/src/uki-core/view/styleable.js +4 -11
- data/frameworks/uki/src/uki-data/ajax.js +4 -30
- data/frameworks/uki/src/uki-data/json.js +191 -0
- data/frameworks/uki/src/uki-data/localStore.js +37 -0
- data/frameworks/uki/src/uki-data/model.js +1 -1
- data/frameworks/uki/src/uki-more.js +4 -0
- data/frameworks/uki/src/uki-more/more/background.js +2 -0
- data/frameworks/uki/src/uki-more/more/color.js +168 -0
- data/frameworks/uki/src/uki-more/more/utils.js +5 -12
- data/frameworks/uki/src/uki-more/more/view.js +3 -1
- data/frameworks/uki/src/uki-more/more/view/form.js +30 -0
- data/frameworks/uki/src/uki-more/more/view/hTile.js +59 -0
- data/frameworks/uki/src/uki-more/more/view/nativeButton.js +3 -0
- data/frameworks/uki/src/uki-more/more/view/nativeCheckbox.js +38 -0
- data/frameworks/uki/src/uki-more/more/view/nativeControl.js +40 -0
- data/frameworks/uki/src/uki-more/more/view/nativeInput.js +78 -0
- data/frameworks/uki/src/uki-more/more/view/nativeSelect.js +29 -0
- data/frameworks/uki/src/uki-more/more/view/radioButton.js +1 -1
- data/frameworks/uki/src/uki-more/more/view/select-theme.js +55 -0
- data/frameworks/uki/src/uki-more/more/view/select.js +208 -0
- data/frameworks/uki/src/uki-theme/airport.js +145 -88
- data/frameworks/uki/src/uki-theme/airport/i/table/a-down.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/table/a-up.png +0 -0
- data/frameworks/uki/src/uki-touch.js +2 -0
- data/frameworks/uki/src/uki-touch/touch.js +1 -0
- data/frameworks/uki/src/uki-touch/touch/const.js +24 -0
- data/frameworks/uki/src/uki-touch/touch/setup.js +52 -0
- data/frameworks/uki/src/uki-touch/touch/view.js +4 -0
- data/frameworks/uki/src/uki-touch/touch/view/scrollPane.js +505 -0
- data/frameworks/uki/src/uki-touch/touch/view/scrollableList.js +27 -0
- data/frameworks/uki/src/uki-view/view/box.js +9 -0
- data/frameworks/uki/src/uki-view/view/button.js +36 -1
- data/frameworks/uki/src/uki-view/view/checkbox.js +32 -3
- data/frameworks/uki/src/uki-view/view/flow.js +37 -9
- data/frameworks/uki/src/uki-view/view/image.js +14 -1
- data/frameworks/uki/src/uki-view/view/label.js +72 -11
- data/frameworks/uki/src/uki-view/view/list.js +143 -13
- data/frameworks/uki/src/uki-view/view/list/render.js +1 -0
- data/frameworks/uki/src/uki-view/view/popup.js +46 -2
- data/frameworks/uki/src/uki-view/view/radio.js +19 -4
- data/frameworks/uki/src/uki-view/view/scrollPane.js +91 -33
- data/frameworks/uki/src/uki-view/view/slider.js +67 -54
- data/frameworks/uki/src/uki-view/view/splitPane.js +102 -9
- data/frameworks/uki/src/uki-view/view/table.js +59 -2
- data/frameworks/uki/src/uki-view/view/table/column.js +45 -17
- data/frameworks/uki/src/uki-view/view/table/header.js +40 -12
- data/frameworks/uki/src/uki-view/view/table/render.js +4 -0
- data/frameworks/uki/src/uki-view/view/textField.js +75 -21
- data/frameworks/uki/src/uki-view/view/toolbar.js +16 -0
- data/lib/uki/builder.rb +1 -1
- data/lib/uki/include_js.rb +2 -2
- data/lib/uki/project.rb +14 -14
- data/templates/index.html.erb +2 -2
- data/templates/myapp.js.erb +2 -2
- data/uki.gemspec +34 -48
- metadata +44 -47
- data/frameworks/uki/src/uki-core/dom/nativeLayout.js +0 -18
- data/frameworks/uki/src/uki-theme/airport/i/button/down-c.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/down-c.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/down-h.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/down-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/down-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/down-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-c.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/focusRing.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-c.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-c.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-h.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/hover.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-c.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-c.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-h.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/button/normal.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/panel/dark-h.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/panel/dark-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/panel/dark-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/panel/dark.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/popup/normal.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/shadow/large-c.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/shadow/large-h.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/shadow/large-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/shadow/large-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/shadow/large.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/bar-m.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/bar-m.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/bar-v.gif +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/bar-v.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/bar.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/focus.png +0 -0
- data/frameworks/uki/src/uki-theme/airport/i/slider/handle.gif +0 -0
@@ -1,4 +1,14 @@
|
|
1
|
+
/**
|
2
|
+
* Horizontal Split Pane
|
3
|
+
*
|
4
|
+
* @author voloko
|
5
|
+
* @name uki.view.HSplitPane
|
6
|
+
* @class
|
7
|
+
* @extends uki.view.Container
|
8
|
+
*/
|
1
9
|
uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
10
|
+
this._throttle = 0; // do not try to render more often than every Xms
|
11
|
+
|
2
12
|
this._setup = function() {
|
3
13
|
Base._setup.call(this);
|
4
14
|
this._originalRect = this._rect;
|
@@ -16,14 +26,44 @@ uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
|
16
26
|
};
|
17
27
|
|
18
28
|
/**
|
19
|
-
|
20
|
-
|
29
|
+
* @function
|
30
|
+
* @name uki.view.HSplitPane#leftMin
|
31
|
+
*/
|
32
|
+
/**
|
33
|
+
* @function
|
34
|
+
* @name uki.view.HSplitPane#rightMin
|
35
|
+
*/
|
36
|
+
/**
|
37
|
+
* @function
|
38
|
+
* @name uki.view.HSplitPane#autogrowLeft
|
39
|
+
*/
|
40
|
+
/**
|
41
|
+
* @function
|
42
|
+
* @name uki.view.HSplitPane#autogrowRight
|
43
|
+
*/
|
44
|
+
/**
|
45
|
+
* @function
|
46
|
+
* @name uki.view.HSplitPane#throttle
|
47
|
+
*/
|
48
|
+
uki.addProps(this, ['leftMin', 'rightMin', 'autogrowLeft', 'autogrowRight', 'throttle']);
|
49
|
+
this.topMin = this.leftMin;
|
50
|
+
this.bottomMin = this.rightMin;
|
51
|
+
|
52
|
+
/**
|
53
|
+
* @function
|
54
|
+
* @fires event:handleMove
|
55
|
+
* @name uki.view.HSplitPane#handlePosition
|
56
|
+
*/
|
21
57
|
this.handlePosition = uki.newProp('_handlePosition', function(val) {
|
22
58
|
this._handlePosition = this._normalizePosition(val);
|
23
59
|
this.trigger('handleMove', {source: this, handlePosition: this._handlePosition, dragValue: val });
|
24
60
|
this._resizeChildViews();
|
25
61
|
});
|
26
62
|
|
63
|
+
/**
|
64
|
+
* @function
|
65
|
+
* @name uki.view.HSplitPane#handleWidth
|
66
|
+
*/
|
27
67
|
this.handleWidth = uki.newProp('_handleWidth', function(val) {
|
28
68
|
if (this._handleWidth != val) {
|
29
69
|
this._handleWidth = val;
|
@@ -47,10 +87,6 @@ uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
|
47
87
|
};
|
48
88
|
|
49
89
|
|
50
|
-
uki.addProps(this, ['leftMin', 'rightMin', 'autogrowLeft', 'autogrowRight']);
|
51
|
-
this.topMin = this.leftMin;
|
52
|
-
this.bottomMin = this.rightMin;
|
53
|
-
|
54
90
|
this._removeHandle = function() {
|
55
91
|
this._dom.removeChild(this._handle);
|
56
92
|
};
|
@@ -74,6 +110,7 @@ uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
|
74
110
|
|
75
111
|
this._createDom = function() {
|
76
112
|
this._dom = uki.createElement('div', this.defaultCss);
|
113
|
+
this._initClassName();
|
77
114
|
for (var i=0, paneML; i < 2; i++) {
|
78
115
|
paneML = { view: 'Container' };
|
79
116
|
paneML.anchors = i == 1 ? 'left top bottom right' :
|
@@ -124,26 +161,74 @@ uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
|
124
161
|
};
|
125
162
|
|
126
163
|
this._draggesture = function(e) {
|
127
|
-
|
128
|
-
this.handlePosition(e[this._vertical ? 'pageY' : 'pageX'] - offset[this._vertical ? 'y' : 'x'] - this._posWithinHandle);
|
129
|
-
this.layout();
|
164
|
+
this._updatePositionOnDrag(e);
|
130
165
|
};
|
131
166
|
|
132
167
|
this._draggestureend = function(e, offset) {
|
168
|
+
this._updatePositionOnDrag(e);
|
133
169
|
};
|
134
170
|
|
171
|
+
this._updatePositionOnDrag = function(e) {
|
172
|
+
var offset = uki.dom.offset(this.dom());
|
173
|
+
this.handlePosition(e[this._vertical ? 'pageY' : 'pageX'] - offset[this._vertical ? 'y' : 'x'] - this._posWithinHandle);
|
174
|
+
if (this._throttle) {
|
175
|
+
this._throttleHandler = this._throttleHandler || uki.proxy(function() {
|
176
|
+
this.layout();
|
177
|
+
this._trottling = false;
|
178
|
+
}, this);
|
179
|
+
if (this._trottling) return;
|
180
|
+
this._trottling = true;
|
181
|
+
setTimeout(this._throttleHandler, this._throttle);
|
182
|
+
} else {
|
183
|
+
this.layout();
|
184
|
+
}
|
185
|
+
};
|
186
|
+
|
187
|
+
|
188
|
+
/**
|
189
|
+
* @function
|
190
|
+
* @name uki.view.HSplitPane#topPane
|
191
|
+
*/
|
192
|
+
/**
|
193
|
+
* @function
|
194
|
+
* @name uki.view.HSplitPane#leftPane
|
195
|
+
*/
|
135
196
|
this.topPane = this.leftPane = function(pane) {
|
136
197
|
return this._paneAt(0, pane);
|
137
198
|
};
|
138
199
|
|
200
|
+
/**
|
201
|
+
* @function
|
202
|
+
* @name uki.view.HSplitPane#bottomPane
|
203
|
+
*/
|
204
|
+
/**
|
205
|
+
* @function
|
206
|
+
* @name uki.view.HSplitPane#rightPane
|
207
|
+
*/
|
139
208
|
this.bottomPane = this.rightPane = function(pane) {
|
140
209
|
return this._paneAt(1, pane);
|
141
210
|
};
|
142
211
|
|
212
|
+
/**
|
213
|
+
* @function
|
214
|
+
* @name uki.view.HSplitPane#topChildViews
|
215
|
+
*/
|
216
|
+
/**
|
217
|
+
* @function
|
218
|
+
* @name uki.view.HSplitPane#leftChildViews
|
219
|
+
*/
|
143
220
|
this.topChildViews = this.leftChildViews = function(views) {
|
144
221
|
return this._childViewsAt(0, views);
|
145
222
|
};
|
146
223
|
|
224
|
+
/**
|
225
|
+
* @function
|
226
|
+
* @name uki.view.HSplitPane#rightChildViews
|
227
|
+
*/
|
228
|
+
/**
|
229
|
+
* @function
|
230
|
+
* @name uki.view.HSplitPane#bottomChildViews
|
231
|
+
*/
|
147
232
|
this.bottomChildViews = this.rightChildViews = function(views) {
|
148
233
|
return this._childViewsAt(1, views);
|
149
234
|
};
|
@@ -199,6 +284,14 @@ uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
|
|
199
284
|
|
200
285
|
});
|
201
286
|
|
287
|
+
/**
|
288
|
+
* Vertical Split Pane
|
289
|
+
*
|
290
|
+
* @author voloko
|
291
|
+
* @name uki.view.VSplitPane
|
292
|
+
* @class
|
293
|
+
* @extends uki.view.HSplitPane
|
294
|
+
*/
|
202
295
|
uki.view.declare('uki.view.VSplitPane', uki.view.HSplitPane, function(Base) {
|
203
296
|
this._setup = function() {
|
204
297
|
Base._setup.call(this);
|
@@ -2,6 +2,36 @@ include('list.js');
|
|
2
2
|
|
3
3
|
uki.view.table = {};
|
4
4
|
|
5
|
+
/**
|
6
|
+
* Table
|
7
|
+
*
|
8
|
+
* Uses uki.view.List to render data. Wraps it into scroll pane and ads a header
|
9
|
+
* @author voloko
|
10
|
+
* @name uki.view.Table
|
11
|
+
* @class
|
12
|
+
* @extends uki.view.Container
|
13
|
+
*
|
14
|
+
* @lends uki.view.List#rowHeight as rowHeight
|
15
|
+
* @lends uki.view.List#data as data
|
16
|
+
* @lends uki.view.List#packSize as packSize
|
17
|
+
* @lends uki.view.List#visibleRectExt as visibleRectExt
|
18
|
+
* @lends uki.view.List#render as render
|
19
|
+
* @lends uki.view.List#selectedIndex as selectedIndex
|
20
|
+
* @lends uki.view.List#selectedIndexes as selectedIndexes
|
21
|
+
* @lends uki.view.List#selectedRow as selectedRow
|
22
|
+
* @lends uki.view.List#selectedRows as selectedRows
|
23
|
+
* @lends uki.view.List#lastClickIndex as lastClickIndex
|
24
|
+
* @lends uki.view.List#textSelectable as textSelectable
|
25
|
+
* @lends uki.view.List#multiselect as multiselect
|
26
|
+
* @lends uki.view.List#redrawRow as redrawRow
|
27
|
+
* @lends uki.view.List#addRow as addRow
|
28
|
+
* @lends uki.view.List#removeRow as removeRow
|
29
|
+
* @lends uki.view.List#focusable as lastClickIndex
|
30
|
+
* @lends uki.view.List#focus as focus
|
31
|
+
* @lends uki.view.List#blur as blur
|
32
|
+
* @lends uki.view.List#hasFocus as hasFocus
|
33
|
+
*
|
34
|
+
*/
|
5
35
|
uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
|
6
36
|
var propertiesToDelegate = 'rowHeight data packSize visibleRectExt render selectedIndex selectedIndexes selectedRows selectedRow focus blur hasFocus lastClickIndex focusable textSelectable multiselect'.split(' ');
|
7
37
|
|
@@ -22,14 +52,29 @@ uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
|
|
22
52
|
return Base._style.call(this, name, value);
|
23
53
|
};
|
24
54
|
|
55
|
+
/**
|
56
|
+
* @function
|
57
|
+
* @return {uki.view.List}
|
58
|
+
* @name uki.view.Table#list
|
59
|
+
*/
|
25
60
|
this.list = function() {
|
26
61
|
return this._list;
|
27
62
|
};
|
28
63
|
|
64
|
+
/**
|
65
|
+
* @function
|
66
|
+
* @return {uki.view.table.Header}
|
67
|
+
* @name uki.view.Table#header
|
68
|
+
*/
|
29
69
|
this.header = function() {
|
30
70
|
return this._header;
|
31
71
|
};
|
32
72
|
|
73
|
+
/**
|
74
|
+
* @function
|
75
|
+
* @param {Array.<uki.view.table.Column>} c
|
76
|
+
* @name uki.view.Table#columns
|
77
|
+
*/
|
33
78
|
this.columns = uki.newProp('_columns', function(c) {
|
34
79
|
for (var i = 0; i < this._columns.length; i++) {
|
35
80
|
this._columns[i].unbind();
|
@@ -47,6 +92,12 @@ uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
|
|
47
92
|
this._header.columns(this._columns);
|
48
93
|
});
|
49
94
|
|
95
|
+
/**
|
96
|
+
* @function
|
97
|
+
* @param {Number} row
|
98
|
+
* @param {Number} col
|
99
|
+
* @name uki.view.Table#redrawCell
|
100
|
+
*/
|
50
101
|
this.redrawCell = function(row, col) {
|
51
102
|
var item = this._list._itemAt(row);
|
52
103
|
if (item) {
|
@@ -67,11 +118,16 @@ uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
|
|
67
118
|
this.list()[name].apply(this.list(), arguments);
|
68
119
|
return this;
|
69
120
|
};
|
70
|
-
}, this)
|
121
|
+
}, this);
|
71
122
|
|
123
|
+
/**
|
124
|
+
* @function
|
125
|
+
* @param {Number} col
|
126
|
+
* @name uki.view.Table#redrawColumn
|
127
|
+
*/
|
72
128
|
this.redrawColumn = function(col) {
|
73
129
|
var from = this._list._packs[0].itemFrom,
|
74
|
-
to = this._list._packs[1].itemTo
|
130
|
+
to = this._list._packs[1].itemTo;
|
75
131
|
for (var i=from; i < to; i++) {
|
76
132
|
this.redrawCell(i, col);
|
77
133
|
};
|
@@ -91,6 +147,7 @@ uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
|
|
91
147
|
|
92
148
|
this._createDom = function() {
|
93
149
|
Base._createDom.call(this);
|
150
|
+
this._initClassName();
|
94
151
|
var scrollPaneRect = new Rect(0, this._headerHeight, this.rect().width, this.rect().height - this._headerHeight),
|
95
152
|
listRect = scrollPaneRect.clone().normalize(),
|
96
153
|
headerRect = new Rect(0, 0, this.rect().width, this._headerHeight),
|
@@ -1,3 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* @class
|
3
|
+
* @extends uki.view.Observable
|
4
|
+
*/
|
1
5
|
uki.view.table.Column = uki.newClass(uki.view.Observable, new function() {
|
2
6
|
this._width = 100;
|
3
7
|
this._offset = 0;
|
@@ -6,21 +10,36 @@ uki.view.table.Column = uki.newClass(uki.view.Observable, new function() {
|
|
6
10
|
this._maxWidth = 0;
|
7
11
|
this._css = 'float:left;white-space:nowrap;text-overflow:ellipsis;';
|
8
12
|
this._inset = new Inset(3, 5);
|
13
|
+
this._templatePrefix = 'table-';
|
9
14
|
|
10
15
|
this.init = function() {};
|
11
16
|
|
12
|
-
uki.addProps(this, ['position', 'css', 'formatter', 'label', 'resizable', 'maxWidth', 'minWidth', 'maxWidth', 'key']);
|
17
|
+
uki.addProps(this, ['position', 'css', 'formatter', 'label', 'resizable', 'maxWidth', 'minWidth', 'maxWidth', 'key', 'sort']);
|
13
18
|
|
14
|
-
this.template = function(
|
15
|
-
|
16
|
-
this._template =
|
17
|
-
return this;
|
19
|
+
this.template = function() {
|
20
|
+
// cache
|
21
|
+
return this._template || (this._template = uki.theme.template(this._templatePrefix + 'cell'));
|
18
22
|
};
|
19
23
|
|
20
|
-
this.headerTemplate = function(
|
21
|
-
|
22
|
-
this.
|
23
|
-
|
24
|
+
this.headerTemplate = function() {
|
25
|
+
var suffix = '';
|
26
|
+
if (this.sort() == 'ASC') suffix = '-asc';
|
27
|
+
if (this.sort() == 'DESC') suffix = '-desc';
|
28
|
+
return uki.theme.template(this._templatePrefix + 'header-cell' + suffix);
|
29
|
+
};
|
30
|
+
|
31
|
+
this.sortData = function(data) {
|
32
|
+
var _this = this;
|
33
|
+
return data.sort(function(a, b) {
|
34
|
+
return _this._key ?
|
35
|
+
_this.compare(uki.attr(a, _this._key), uki.attr(b, _this._key)) :
|
36
|
+
_this.compare(a[_this._position], b[_this._position]);
|
37
|
+
});
|
38
|
+
|
39
|
+
};
|
40
|
+
|
41
|
+
this.compare = function(a, b) {
|
42
|
+
return (a >= b ? 1 : a == b ? 0 : -1) * (this._sort == 'DESC' ? -1 : 1);
|
24
43
|
};
|
25
44
|
|
26
45
|
/**
|
@@ -70,8 +89,8 @@ uki.view.table.Column = uki.newClass(uki.view.Observable, new function() {
|
|
70
89
|
this.renderHeader = function(height) {
|
71
90
|
this._className || this._initStylesheet();
|
72
91
|
var x = this.headerTemplate().render({
|
73
|
-
data: '<div style="overflow:hidden;text-overflow:ellipsis;*width:100%;height:100%;">' + this.label() + '</div>',
|
74
|
-
style: '*overflow-y:hidden;' + this._cellStyle(
|
92
|
+
data: '<div style="overflow:hidden;text-overflow:ellipsis;*width:100%;height:100%;padding-top:' + this._inset.top + 'px">' + this.label() + '</div>',
|
93
|
+
style: '*overflow-y:hidden;' + this._cellStyle(true, height),
|
75
94
|
className: this._className
|
76
95
|
});
|
77
96
|
return x;
|
@@ -81,19 +100,22 @@ uki.view.table.Column = uki.newClass(uki.view.Observable, new function() {
|
|
81
100
|
this._className || this._initStylesheet();
|
82
101
|
this._prerenderedTemplate = this.template().render({
|
83
102
|
data: '\u0001\u0001',
|
84
|
-
style: 'overflow:hidden;' + this._cellStyle(rect.height),
|
103
|
+
style: 'overflow:hidden;' + this._cellStyle(false, rect.height),
|
85
104
|
className: this._className
|
86
105
|
}).split('\u0001');
|
87
106
|
};
|
88
107
|
|
89
|
-
this._cellPadding = function() {
|
108
|
+
this._cellPadding = function(skipVertical) {
|
90
109
|
var inset = this._inset;
|
91
|
-
return ['padding:', inset.top, 'px ', inset.right, 'px ', inset.bottom, 'px ', inset.left, 'px;'].join('');
|
110
|
+
return ['padding:', (skipVertical ? '0' : inset.top), 'px ', inset.right, 'px ', (skipVertical ? '0' : inset.bottom), 'px ', inset.left, 'px;'].join('');
|
92
111
|
};
|
93
112
|
|
94
|
-
this.
|
95
|
-
|
96
|
-
|
113
|
+
this._cellHeight = function(skipVertical, height) {
|
114
|
+
return 'height:' + (height - (uki.dom.offset.boxModel && !skipVertical ? this._inset.height() : 0)) + 'px;';
|
115
|
+
};
|
116
|
+
|
117
|
+
this._cellStyle = function(skipVertical, height) {
|
118
|
+
return this._css + this._cellPadding(skipVertical) + ';' + this._cellHeight(skipVertical, height);
|
97
119
|
};
|
98
120
|
|
99
121
|
this._clientWidth = function() {
|
@@ -114,6 +136,12 @@ uki.view.table.NumberColumn = uki.newClass(uki.view.table.Column, new function()
|
|
114
136
|
var Base = uki.view.table.Column.prototype;
|
115
137
|
|
116
138
|
this._css = Base._css + 'text-align:right;';
|
139
|
+
|
140
|
+
this.compare = function(a, b) {
|
141
|
+
a*=1;
|
142
|
+
b*=1;
|
143
|
+
return (a >= b ? 1 : a == b ? 0 : -1) * (this._sort == 'DESC' ? -1 : 1);
|
144
|
+
};
|
117
145
|
});
|
118
146
|
|
119
147
|
uki.view.table.CustomColumn = uki.view.table.Column;
|
@@ -1,24 +1,43 @@
|
|
1
1
|
include('../label.js');
|
2
2
|
|
3
|
-
|
3
|
+
/**
|
4
|
+
* @class
|
5
|
+
* @extends uki.view.Label
|
6
|
+
*/
|
7
|
+
uki.view.declare('uki.view.table.Header', uki.view.Label, function(Base) {
|
8
|
+
this._defaultBackground = 'theme(table-header)';
|
9
|
+
|
4
10
|
this._setup = function() {
|
5
11
|
Base._setup.call(this);
|
6
12
|
this._multiline = true;
|
7
13
|
this._resizers = [];
|
8
14
|
};
|
9
15
|
|
10
|
-
this.typeName = function() { return 'uki.view.table.Header'; };
|
11
|
-
|
12
16
|
this.columns = uki.newProp('_columns', function(v) {
|
13
17
|
this._columns = v;
|
14
18
|
this.html(this._createColumns());
|
15
19
|
this._createResizers();
|
16
20
|
});
|
17
21
|
|
18
|
-
this.
|
19
|
-
|
20
|
-
|
22
|
+
this._createDom = function() {
|
23
|
+
Base._createDom.call(this);
|
24
|
+
this.bind('click', this._click);
|
25
|
+
};
|
26
|
+
|
27
|
+
this._click = function(e) {
|
28
|
+
if (this._dragging) return;
|
29
|
+
|
30
|
+
var target = e.target;
|
31
|
+
if (target == this.dom() || target == this._label) return;
|
32
|
+
while (target.parentNode != this._label) target = target.parentNode;
|
33
|
+
var i = uki.inArray(target, this._label.childNodes);
|
34
|
+
if (i > -1) {
|
35
|
+
this.trigger('columnClick', { source: this, columnIndex: i, column: this._columns[i] });
|
21
36
|
}
|
37
|
+
};
|
38
|
+
|
39
|
+
this.redrawColumn = function(col) {
|
40
|
+
if (this._resizers[col]) uki.dom.unbind(this._resizers[col]);
|
22
41
|
var container = doc.createElement('div');
|
23
42
|
container.innerHTML = this._columns[col].renderHeader(this.rect().height);
|
24
43
|
this._label.replaceChild(container.firstChild, this._label.childNodes[col]);
|
@@ -30,7 +49,7 @@ uki.view.table.Header = uki.newClass(uki.view.Label, function(Base) {
|
|
30
49
|
for(var i = 0, offset = 0, columns = this._columns, l = columns.length; i < l; i++) {
|
31
50
|
html[html.length] = columns[i].renderHeader(this.rect().height);
|
32
51
|
}
|
33
|
-
return html.join('')
|
52
|
+
return html.join('');
|
34
53
|
};
|
35
54
|
|
36
55
|
this._createResizer = function(i) {
|
@@ -47,14 +66,23 @@ uki.view.table.Header = uki.newClass(uki.view.Label, function(Base) {
|
|
47
66
|
};
|
48
67
|
|
49
68
|
this._bindResizerDrag = function(resizer, columnIndex) {
|
50
|
-
|
51
|
-
|
69
|
+
var _this = this;
|
70
|
+
|
71
|
+
uki.dom.bind(resizer, 'draggesture', function(e) {
|
72
|
+
_this._dragging = true;
|
73
|
+
var headerOffset = uki.dom.offset(_this.dom()),
|
52
74
|
offsetWithinHeader = e.pageX - headerOffset.x,
|
53
|
-
columnOffset = 0, i, column =
|
75
|
+
columnOffset = 0, i, column = _this._columns[columnIndex];
|
54
76
|
for (i=0; i < columnIndex; i++) {
|
55
|
-
columnOffset +=
|
77
|
+
columnOffset += _this._columns[i].width();
|
56
78
|
};
|
57
79
|
column.width(offsetWithinHeader - columnOffset);
|
58
|
-
}
|
80
|
+
});
|
81
|
+
|
82
|
+
uki.dom.bind(resizer, 'draggestureend', function() {
|
83
|
+
setTimeout(function() {
|
84
|
+
_this._dragging = false;
|
85
|
+
}, 1);
|
86
|
+
});
|
59
87
|
};
|
60
88
|
});
|