sproutcore 1.0.1009 → 1.0.1024
Sign up to get free protection for your applications and to get access to all the features.
- data/DISTRIBUTION.yml +14 -0
- data/Rakefile +150 -23
- data/VERSION.yml +4 -2
- data/frameworks/sproutcore/Buildfile +1 -1
- data/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +1 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +66 -5
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +14 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +28 -3
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +1 -1
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +22 -2
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +5 -1
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/well.css +72 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +33 -7
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +24 -23
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_alternatingrows.js +130 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +9 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +4 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +18 -9
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +7 -6
- data/frameworks/sproutcore/frameworks/desktop/tests/views/well/ui.js +54 -0
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +21 -9
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +4 -3
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +23 -14
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +2 -2
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +3 -3
- data/frameworks/sproutcore/frameworks/desktop/views/radio.js +1 -2
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/well.js +80 -0
- data/frameworks/sproutcore/frameworks/foundation/fixtures/malformed.json +11 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +5 -1
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +11 -10
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +16 -15
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +3 -3
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +6 -5
- data/frameworks/sproutcore/frameworks/foundation/system/response.js +26 -8
- data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +2 -2
- data/frameworks/sproutcore/frameworks/foundation/system/timer.js +2 -2
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +122 -13
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +2 -3
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +9 -9
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +3 -3
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +27 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/rect.js +99 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +3 -1
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/system/cookie.js +160 -0
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/tests/system/cookie.js +163 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +12 -2
- data/lib/sproutcore/rack/proxy.rb +4 -2
- data/sproutcore-abbot.gemspec +23 -9
- metadata +32 -5
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
@@ -37,7 +37,7 @@ var ContentArray = SC.Object.extend(SC.Array, {
|
|
37
37
|
|
38
38
|
var pane = SC.ControlTestPane.design()
|
39
39
|
.add("Custom Row Heights", SC.ScrollView.design({
|
40
|
-
layout: { left: 0, right: 0, top: 0, height:
|
40
|
+
layout: { left: 0, right: 0, top: 0, height: 200 },
|
41
41
|
hasHorizontalScroller: NO,
|
42
42
|
contentView: SC.ListView.design({
|
43
43
|
content: ContentArray.create({ length: 100001 }),
|
@@ -45,7 +45,7 @@ var pane = SC.ControlTestPane.design()
|
|
45
45
|
|
46
46
|
// used for testing
|
47
47
|
adjustableRows: SC.IndexSet.create(0,5),
|
48
|
-
altRowHeight:
|
48
|
+
altRowHeight: 10,
|
49
49
|
|
50
50
|
contentIndexRowHeight: function(view, content, index) {
|
51
51
|
var ret =this.get('rowHeight');
|
@@ -91,8 +91,7 @@ module("SC.ListView - ui_row_heights", pane.standardSetup());
|
|
91
91
|
|
92
92
|
test("rendering only incremental portion", function() {
|
93
93
|
var listView = pane.view("Custom Row Heights").contentView;
|
94
|
-
|
95
|
-
same(listView.get("nowShowing"), SC.IndexSet.create(0, 21), 'nowShowing should be smaller IndexSet');
|
94
|
+
same(listView.get("nowShowing"), SC.IndexSet.create(0, 10), 'nowShowing should be smaller IndexSet');
|
96
95
|
equals(listView.get('childViews').length, listView.get('nowShowing').get('length'), 'should have same number of childViews as nowShowing length');
|
97
96
|
});
|
98
97
|
|
@@ -101,7 +100,7 @@ test("scrolling by small amount should update incremental rendering", function()
|
|
101
100
|
listView = scrollView.contentView,
|
102
101
|
exp;
|
103
102
|
|
104
|
-
same(listView.get('nowShowing'), SC.IndexSet.create(0,
|
103
|
+
same(listView.get('nowShowing'), SC.IndexSet.create(0,10), 'precond - nowShowing has incremental range');
|
105
104
|
|
106
105
|
// SCROLL DOWN ONE LINE
|
107
106
|
SC.run(function() {
|
@@ -109,7 +108,7 @@ test("scrolling by small amount should update incremental rendering", function()
|
|
109
108
|
});
|
110
109
|
|
111
110
|
// top line should have scrolled out of view
|
112
|
-
exp = SC.IndexSet.create(
|
111
|
+
exp = SC.IndexSet.create(4,9);
|
113
112
|
same(listView.get('nowShowing'), exp, 'nowShowing should change to reflect new clippingFrame');
|
114
113
|
|
115
114
|
verifyChildViewsMatch(listView.childViews, exp);
|
@@ -120,7 +119,7 @@ test("scrolling by small amount should update incremental rendering", function()
|
|
120
119
|
});
|
121
120
|
|
122
121
|
// top line should have scrolled out of view
|
123
|
-
exp = SC.IndexSet.create(
|
122
|
+
exp = SC.IndexSet.create(6,8);
|
124
123
|
same(listView.get('nowShowing'), exp, 'nowShowing should change to reflect new clippingFrame');
|
125
124
|
|
126
125
|
verifyChildViewsMatch(listView.childViews, exp);
|
@@ -132,7 +131,7 @@ test("scrolling by small amount should update incremental rendering", function()
|
|
132
131
|
});
|
133
132
|
|
134
133
|
// top line should have scrolled out of view
|
135
|
-
exp = SC.IndexSet.create(
|
134
|
+
exp = SC.IndexSet.create(4,9);
|
136
135
|
same(listView.get('nowShowing'), exp, 'nowShowing should change to reflect new clippingFrame');
|
137
136
|
|
138
137
|
verifyChildViewsMatch(listView.childViews, exp);
|
@@ -148,7 +147,7 @@ test("manually calling rowHeightDidChangeForIndexes()", function() {
|
|
148
147
|
listView = scrollView.contentView,
|
149
148
|
exp;
|
150
149
|
|
151
|
-
same(listView.get('nowShowing'), SC.IndexSet.create(0,
|
150
|
+
same(listView.get('nowShowing'), SC.IndexSet.create(0,10), 'precond - nowShowing has incremental range');
|
152
151
|
|
153
152
|
// adjust row height and then invalidate a portion range
|
154
153
|
SC.run(function() {
|
@@ -157,7 +156,7 @@ test("manually calling rowHeightDidChangeForIndexes()", function() {
|
|
157
156
|
});
|
158
157
|
|
159
158
|
// nowShowing should adjust
|
160
|
-
same(listView.get('nowShowing'), SC.IndexSet.create(0,
|
159
|
+
same(listView.get('nowShowing'), SC.IndexSet.create(0,5), 'visible range should decrease since row heights for some rows doubled');
|
161
160
|
|
162
161
|
// as well as offset and heights for rows - spot check
|
163
162
|
var view = listView.itemViewForContentIndex(3);
|
@@ -127,6 +127,10 @@ function basic(view, sel, disabled) {
|
|
127
127
|
|
128
128
|
equals(cq.hasClass('sel'), !!sel, 'expect sel class');
|
129
129
|
equals(cq.hasClass('disabled'), !!disabled, 'expect disabled class');
|
130
|
+
|
131
|
+
var idx = view.get('contentIndex');
|
132
|
+
var evenOrOdd = (idx % 2 == 0) ? 'even' : 'odd';
|
133
|
+
ok(cq.hasClass(evenOrOdd), 'should have an %@ class'.fmt(evenOrOdd));
|
130
134
|
}
|
131
135
|
|
132
136
|
function label(view, labelText) {
|
@@ -12,27 +12,32 @@ htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
|
|
12
12
|
var pane = SC.ControlTestPane.design()
|
13
13
|
|
14
14
|
.add("progress basic", SC.ProgressView, {
|
15
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
15
16
|
value: 25,
|
16
17
|
minimum: 0,
|
17
18
|
maximum: 100
|
18
19
|
})
|
19
20
|
.add("progress disabled", SC.ProgressView, {
|
21
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
20
22
|
value: 25,
|
21
23
|
minimum: 0,
|
22
24
|
maximum: 100,
|
23
25
|
isEnabled: NO
|
24
26
|
})
|
25
27
|
.add("progress basic value 0", SC.ProgressView, {
|
28
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
26
29
|
value: 0,
|
27
30
|
minimum: 0,
|
28
31
|
maximum: 100
|
29
32
|
})
|
30
33
|
.add("progress basic value 100", SC.ProgressView, {
|
34
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
31
35
|
value: 100,
|
32
36
|
minimum: 0,
|
33
37
|
maximum: 100
|
34
38
|
})
|
35
39
|
.add("progress basic max 50", SC.ProgressView, {
|
40
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
36
41
|
value: 25,
|
37
42
|
minimum: 0,
|
38
43
|
maximum: 50
|
@@ -40,22 +45,26 @@ var pane = SC.ControlTestPane.design()
|
|
40
45
|
|
41
46
|
// Slider View UI
|
42
47
|
.add("slider basic", SC.SliderView, {
|
48
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
43
49
|
value: 50,
|
44
50
|
minimum: 0,
|
45
51
|
maximum: 100
|
46
52
|
})
|
47
53
|
.add("slider disabled", SC.SliderView, {
|
54
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
48
55
|
value: 50,
|
49
56
|
minimum: 0,
|
50
57
|
maximum: 100,
|
51
58
|
isEnabled: NO
|
52
59
|
})
|
53
60
|
.add("slider value 100", SC.SliderView, {
|
61
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
54
62
|
value: 100,
|
55
63
|
minimum: 0,
|
56
64
|
maximum: 100
|
57
65
|
})
|
58
66
|
.add("slider basic step 20", SC.SliderView, {
|
67
|
+
layout: {top:0, bottom:0, left:0, width: 250},
|
59
68
|
value: 50,
|
60
69
|
minimum: 0,
|
61
70
|
maximum: 100,
|
@@ -82,7 +91,7 @@ test("basic", function() {
|
|
82
91
|
equals(view.$('.sc-inner').css("width"), "25%", 'width should be 25%');
|
83
92
|
|
84
93
|
// browsers compute the width after % adjustment differently. just be close
|
85
|
-
var v = (SC.browser.msie || SC.browser.mozilla) ?
|
94
|
+
var v = (SC.browser.msie || SC.browser.mozilla) ? 63 : 62;
|
86
95
|
equals(view.$('.sc-inner').width(), v, 'pixel width ');
|
87
96
|
|
88
97
|
});
|
@@ -116,7 +125,7 @@ test("basic value 100", function() {
|
|
116
125
|
ok(!view.$().hasClass('disabled'), 'should NOT have disabled class');
|
117
126
|
ok(view.$('.sc-inner'), 'should have sc-inner class');
|
118
127
|
equals(view.$('.sc-inner').css("width"), "100%", 'width should be 100%');
|
119
|
-
equals(view.$('.sc-inner').width(),
|
128
|
+
equals(view.$('.sc-inner').width(), 250, 'pixel width ');
|
120
129
|
|
121
130
|
});
|
122
131
|
|
@@ -127,7 +136,7 @@ test("basic max 50", function() {
|
|
127
136
|
ok(!view.$().hasClass('disabled'), 'should NOT have disabled class');
|
128
137
|
ok(view.$('.sc-inner'), 'should have sc-inner class');
|
129
138
|
equals(view.$('.sc-inner').css("width"), "50%", 'width should be 50%');
|
130
|
-
equals(view.$('.sc-inner').width(),
|
139
|
+
equals(view.$('.sc-inner').width(), 125, 'pixel width ');
|
131
140
|
|
132
141
|
});
|
133
142
|
|
@@ -143,13 +152,13 @@ test("changing value from empty -> value", function() {
|
|
143
152
|
view.set('value', 50);
|
144
153
|
SC.RunLoop.end();
|
145
154
|
equals(view.$('.sc-inner').css("width"), "50%", 'width should be 50%');
|
146
|
-
equals(view.$('.sc-inner').width(),
|
155
|
+
equals(view.$('.sc-inner').width(), 125, 'pixel width ');
|
147
156
|
});
|
148
157
|
|
149
158
|
test("changing value from full -> empty", function() {
|
150
159
|
var view = pane.view('progress basic value 100');
|
151
160
|
|
152
|
-
equals(view.$('.sc-inner').width(),
|
161
|
+
equals(view.$('.sc-inner').width(), 250, 'precon - pixel width should be 316');
|
153
162
|
SC.RunLoop.begin();
|
154
163
|
view.set('value', 0);
|
155
164
|
SC.RunLoop.end();
|
@@ -165,7 +174,7 @@ test("changing value from full -> negative number", function() {
|
|
165
174
|
view.set('value', 100);
|
166
175
|
SC.RunLoop.end();
|
167
176
|
|
168
|
-
equals(view.$('.sc-inner').width(),
|
177
|
+
equals(view.$('.sc-inner').width(), 250, 'precon - pixel width should be 338');
|
169
178
|
SC.RunLoop.begin();
|
170
179
|
view.set('value', -10);
|
171
180
|
SC.RunLoop.end();
|
@@ -177,13 +186,13 @@ test("changing value to over maximum", function() {
|
|
177
186
|
var view = pane.view('progress basic');
|
178
187
|
|
179
188
|
// browsers compute the width after % adjustment differently. just be close
|
180
|
-
var v = (SC.browser.msie || SC.browser.mozilla) ?
|
189
|
+
var v = (SC.browser.msie || SC.browser.mozilla) ? 63 : 62;
|
181
190
|
equals(view.$('.sc-inner').width(), v, 'precon - pixel width should be fixed');
|
182
191
|
SC.RunLoop.begin();
|
183
192
|
view.set('value', 110);
|
184
193
|
SC.RunLoop.end();
|
185
194
|
equals(view.$('.sc-inner').css("width"), "100%", 'width should be 100%');
|
186
|
-
equals(view.$('.sc-inner').width(),
|
195
|
+
equals(view.$('.sc-inner').width(), 250, 'pixel width ');
|
187
196
|
});
|
188
197
|
|
189
198
|
test("changing value to a string", function() {
|
@@ -193,7 +202,7 @@ test("changing value to a string", function() {
|
|
193
202
|
view.set('value', 25);
|
194
203
|
SC.RunLoop.end();
|
195
204
|
|
196
|
-
var v = (SC.browser.msie || SC.browser.mozilla) ?
|
205
|
+
var v = (SC.browser.msie || SC.browser.mozilla) ? 63 : 62;
|
197
206
|
equals(view.$('.sc-inner').width(), v, 'precon - pixel width should be fixed');
|
198
207
|
SC.RunLoop.begin();
|
199
208
|
view.set('value', 'aString');
|
@@ -114,29 +114,30 @@ test("maximumHorizontalScrollOffset() returns the maximum horizontal scroll dime
|
|
114
114
|
|
115
115
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
116
116
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
117
|
-
view2.
|
117
|
+
view2.scrollBy(5000, 0);
|
118
|
+
view2.get('horizontalScrollOffset');
|
119
|
+
|
118
120
|
equals(view2.get('horizontalScrollOffset'),1900, 'maximum y coordinate should be 1900');
|
119
121
|
|
120
122
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
121
123
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
122
|
-
view2.
|
124
|
+
view2.scrollBy(-5000,0);
|
123
125
|
equals(view2.get('horizontalScrollOffset'),0, 'minimum y coordinate should be 0');
|
124
126
|
|
125
127
|
});
|
126
128
|
|
127
|
-
|
128
129
|
test("maximumVerticalScrollOffset() returns the maximum vertical scroll dimention", function() {
|
129
130
|
var old_horizontalScrollOffset=2;
|
130
131
|
var old_verticalScrollOffset=2;
|
131
132
|
|
132
133
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
133
134
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
134
|
-
view2.
|
135
|
+
view2.scrollBy(0, 5000);
|
136
|
+
view2.get('maximumVerticalScrollOffset');
|
135
137
|
equals(view2.get('verticalScrollOffset'),1900, 'maximum coordinate should be 1900');
|
136
|
-
|
137
138
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
138
139
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
139
|
-
view2.
|
140
|
+
view2.scrollBy(0,-5000);
|
140
141
|
equals(view2.get('verticalScrollOffset'),0, 'The minimum y coordinate should be 0');
|
141
142
|
|
142
143
|
});
|
@@ -0,0 +1,54 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
+
// portions copyright @2009 Apple Inc.
|
5
|
+
// License: Licened under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
/*global module test htmlbody ok equals same stop start */
|
9
|
+
|
10
|
+
var iconURL= "http://www.freeiconsweb.com/Icons/16x16_people_icons/People_046.gif";
|
11
|
+
var pane, view;
|
12
|
+
module("SC.TabView", {
|
13
|
+
setup: function() {
|
14
|
+
SC.RunLoop.begin();
|
15
|
+
pane = SC.MainPane.create({
|
16
|
+
childViews: [
|
17
|
+
SC.TabView.extend({
|
18
|
+
nowShowing: 'tab2',
|
19
|
+
|
20
|
+
items: [
|
21
|
+
{ title: "tab1", value: "tab1" , icon: iconURL},
|
22
|
+
{ title: "tab2", value: "tab2" , icon: iconURL},
|
23
|
+
{ title: "tab3", value: "tab3" , icon: iconURL}
|
24
|
+
],
|
25
|
+
|
26
|
+
itemTitleKey: 'title',
|
27
|
+
itemValueKey: 'value',
|
28
|
+
itemIconKey: 'icon',
|
29
|
+
layout: { left:12, height: 200, right:12, top:12 }
|
30
|
+
|
31
|
+
})]
|
32
|
+
});
|
33
|
+
pane.append(); // make sure there is a layer...
|
34
|
+
SC.RunLoop.end();
|
35
|
+
|
36
|
+
view = pane.childViews[0];
|
37
|
+
},
|
38
|
+
|
39
|
+
teardown: function() {
|
40
|
+
pane.remove();
|
41
|
+
pane = view = null ;
|
42
|
+
}
|
43
|
+
});
|
44
|
+
|
45
|
+
test("Check that all segmentedViews are visible", function() {
|
46
|
+
ok(true, 'hello');
|
47
|
+
});
|
48
|
+
|
49
|
+
|
50
|
+
//_tab_nowShowingDidChange: function() {
|
51
|
+
|
52
|
+
//_tab_saveUserDefault: function() {
|
53
|
+
|
54
|
+
//_tab_itemsDidChange: function() {
|
@@ -165,14 +165,15 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
165
165
|
|
166
166
|
render: function(context, firstTime) {
|
167
167
|
// add href attr if tagName is anchor...
|
168
|
+
var href, toolTip, classes;
|
168
169
|
if (this.get('tagName') === 'a') {
|
169
|
-
|
170
|
+
href = this.get('href');
|
170
171
|
if (!href || (href.length === 0)) href = "javascript"+":;";
|
171
172
|
context.attr('href', href);
|
172
173
|
}
|
173
174
|
|
174
175
|
// If there is a toolTip set, grab it and localize if necessary.
|
175
|
-
|
176
|
+
toolTip = this.get('toolTip') ;
|
176
177
|
if (SC.typeOf(toolTip) === SC.T_STRING) {
|
177
178
|
if (this.get('localize')) toolTip = toolTip.loc() ;
|
178
179
|
context.attr('title', toolTip) ;
|
@@ -180,7 +181,7 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
180
181
|
}
|
181
182
|
|
182
183
|
// add some standard attributes & classes.
|
183
|
-
|
184
|
+
classes = this._TEMPORARY_CLASS_HASH;
|
184
185
|
classes.def = this.get('isDefault');
|
185
186
|
classes.cancel = this.get('isCancel');
|
186
187
|
classes.icon = !!this.get('icon');
|
@@ -188,8 +189,8 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
188
189
|
.setClass(classes).addClass(this.get('theme'));
|
189
190
|
// render inner html
|
190
191
|
if(firstTime){
|
191
|
-
|
192
|
-
|
192
|
+
context = context.push("<span class='sc-button-inner' style = 'min-width:%@px'>"
|
193
|
+
.fmt(this.get('titleMinWidth')));
|
193
194
|
this.renderTitle(context, firstTime) ; // from button mixin
|
194
195
|
context.push("</span>") ;
|
195
196
|
}else{
|
@@ -204,8 +205,8 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
204
205
|
Whenever the isDefault or isCancel property changes, update the display and change the keyEquivalent.
|
205
206
|
*/
|
206
207
|
_isDefaultOrCancelDidChange: function() {
|
207
|
-
var isDef = !!this.get('isDefault')
|
208
|
-
|
208
|
+
var isDef = !!this.get('isDefault'),
|
209
|
+
isCancel = !isDef && this.get('isCancel') ;
|
209
210
|
|
210
211
|
if(this.didChangeFor('defaultCancelChanged','isDefault','isCancel')) {
|
211
212
|
this.displayDidChange() ; // make sure to update the UI
|
@@ -317,8 +318,8 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
317
318
|
// otherwise, just trigger an action if there is one.
|
318
319
|
default:
|
319
320
|
//if (this.action) this.action(evt);
|
320
|
-
var action = this.get('action')
|
321
|
-
|
321
|
+
var action = this.get('action'),
|
322
|
+
target = this.get('target') || null;
|
322
323
|
if (action) {
|
323
324
|
if (this._hasLegacyActionHandler()) {
|
324
325
|
// old school...
|
@@ -371,6 +372,17 @@ SC.ButtonView = SC.View.extend(SC.Control, SC.Button, SC.StaticLayout,
|
|
371
372
|
|
372
373
|
willLoseKeyResponderTo: function(responder) {
|
373
374
|
if (this._isFocused) this._isFocused = NO ;
|
375
|
+
},
|
376
|
+
|
377
|
+
didCreateLayer: function() {
|
378
|
+
//Fix for IE7 min-with bug
|
379
|
+
if(SC.browser.msie<8) {
|
380
|
+
var buttonInner = this.$('.sc-button-inner')[0];
|
381
|
+
if (buttonInner){
|
382
|
+
var mL = buttonInner.style.marginLeft;
|
383
|
+
this.$('.sc-button-label')[0].style.minWidth=this.get('titleMinWidth')-mL;
|
384
|
+
}
|
385
|
+
}
|
374
386
|
}
|
375
387
|
|
376
388
|
}) ;
|
@@ -34,10 +34,11 @@ SC.CheckboxView = SC.FieldView.extend(SC.StaticLayout, SC.Button,
|
|
34
34
|
if (firstTime) {
|
35
35
|
dt = this._field_currentDisplayTitle = this.get('displayTitle');
|
36
36
|
|
37
|
-
var blank =
|
37
|
+
var blank = SC.BLANK_IMAGE_URL;
|
38
38
|
var disabled = this.get('isEnabled') ? '' : 'disabled="disabled"';
|
39
|
+
if(SC.browser.msie) context.attr('for', SC.guidFor(this));
|
39
40
|
context.push('<span class="button" ></span>');
|
40
|
-
context.push('<input type="checkbox" name="%@" %@ />'.fmt(SC.guidFor(this),disabled));
|
41
|
+
context.push('<input type="checkbox" id="%@" name="%@" %@ />'.fmt(SC.guidFor(this),SC.guidFor(this),disabled));
|
41
42
|
if(this.get('needsEllipsis')){
|
42
43
|
context.push('<span class="label ellipsis">', dt, '</span>');
|
43
44
|
}else{
|
@@ -118,7 +119,7 @@ SC.CheckboxView = SC.FieldView.extend(SC.StaticLayout, SC.Button,
|
|
118
119
|
SC.Event.remove(this.$input()[0], 'click', this, this._field_fieldValueDidChange);
|
119
120
|
},
|
120
121
|
|
121
|
-
mouseDown: function(evt) {
|
122
|
+
mouseDown: function(evt) {
|
122
123
|
this.set('isActive', YES);
|
123
124
|
this._field_isMouseDown = YES;
|
124
125
|
return YES;
|
@@ -1093,7 +1093,7 @@ SC.CollectionView = SC.View.extend(
|
|
1093
1093
|
// walk up the element hierarchy until we find this or an element with an
|
1094
1094
|
// id matching the base guid (i.e. a collection item)
|
1095
1095
|
while (element && element !== document && element !== layer) {
|
1096
|
-
id = element ? element.
|
1096
|
+
id = element ? SC.$(element).attr('id') : null ;
|
1097
1097
|
if (id && (contentIndex = this.contentIndexForLayerId(id)) !== null) {
|
1098
1098
|
break;
|
1099
1099
|
}
|
@@ -31,7 +31,7 @@ SC.GridView = SC.ListView.extend(
|
|
31
31
|
width of each item will be this value.
|
32
32
|
*/
|
33
33
|
columnWidth: 64,
|
34
|
-
|
34
|
+
|
35
35
|
/**
|
36
36
|
The default example item view will render text-based items.
|
37
37
|
|
@@ -41,19 +41,13 @@ SC.GridView = SC.ListView.extend(
|
|
41
41
|
|
42
42
|
insertionOrientation: SC.HORIZONTAL_ORIENTATION,
|
43
43
|
|
44
|
-
displayProperties: 'itemsPerRow'.w(),
|
45
|
-
|
46
44
|
/** @private */
|
47
45
|
itemsPerRow: function() {
|
48
46
|
var f = this.get('frame') ;
|
49
47
|
var columnWidth = this.get('columnWidth') || 0 ;
|
48
|
+
|
50
49
|
return (columnWidth <= 0) ? 1 : Math.floor(f.width / columnWidth) ;
|
51
|
-
}.property('
|
52
|
-
|
53
|
-
/** @private */
|
54
|
-
itemsPerRowDidChange: function() {
|
55
|
-
this.set('isDirty', YES) ;
|
56
|
-
}.observes('itemsPerRow'),
|
50
|
+
}.property('clippingFrame', 'columnWidth').cacheable(),
|
57
51
|
|
58
52
|
/** @private
|
59
53
|
Find the contentIndexes to display in the passed rect. Note that we
|
@@ -66,14 +60,13 @@ SC.GridView = SC.ListView.extend(
|
|
66
60
|
|
67
61
|
var min = Math.floor(SC.minY(rect) / rowHeight) * itemsPerRow ;
|
68
62
|
var max = Math.ceil(SC.maxY(rect) / rowHeight) * itemsPerRow ;
|
69
|
-
|
70
63
|
return SC.IndexSet.create(min, max-min);
|
71
64
|
},
|
72
65
|
|
73
66
|
/** @private */
|
74
|
-
layoutForContentIndex: function(contentIndex) {
|
67
|
+
layoutForContentIndex: function(contentIndex) {
|
75
68
|
var rowHeight = this.get('rowHeight') || 48 ;
|
76
|
-
var frameWidth = this.get('
|
69
|
+
var frameWidth = this.get('clippingFrame').width ;
|
77
70
|
var itemsPerRow = this.get('itemsPerRow') ;
|
78
71
|
var columnWidth = Math.floor(frameWidth/itemsPerRow);
|
79
72
|
|
@@ -197,6 +190,22 @@ SC.GridView = SC.ListView.extend(
|
|
197
190
|
// convert to index
|
198
191
|
var ret= (row*itemsPerRow) + col ;
|
199
192
|
return [ret, retOp] ;
|
200
|
-
}
|
201
|
-
|
193
|
+
},
|
194
|
+
|
195
|
+
/** @private
|
196
|
+
If the size of the clipping frame changes, all of the item views
|
197
|
+
on screen are potentially in the wrong position. Update all of their
|
198
|
+
layouts if different.
|
199
|
+
*/
|
200
|
+
_gv_clippingFrameDidChange: function() {
|
201
|
+
var nowShowing = this.get('nowShowing'), itemView, idx, len;
|
202
|
+
this.notifyPropertyChange('itemsPerRow');
|
203
|
+
|
204
|
+
len = nowShowing.get('length');
|
205
|
+
|
206
|
+
for (idx=0; idx < len; idx++) {
|
207
|
+
itemView = this.itemViewForContentIndex(idx);
|
208
|
+
itemView.adjust(this.layoutForContentIndex(idx));
|
209
|
+
}
|
210
|
+
}.observes('clippingFrame')
|
202
211
|
}) ;
|