sproutcore 1.0.1037 → 1.0.1042
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +31 -0
- data/README.txt +3 -1
- data/Rakefile +11 -4
- data/VERSION.yml +3 -3
- data/buildtasks/build.rake +5 -0
- data/frameworks/sproutcore/Buildfile +3 -1
- data/frameworks/sproutcore/frameworks/animation/Buildfile +3 -0
- data/frameworks/sproutcore/frameworks/animation/LICENSE +25 -0
- data/frameworks/sproutcore/frameworks/animation/README.md +102 -0
- data/frameworks/sproutcore/frameworks/animation/core.js +934 -0
- data/frameworks/sproutcore/frameworks/animation/tests/core.js +65 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +28 -16
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +5 -2
- data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +4 -0
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +27 -13
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +36 -6
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +7 -7
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +2 -1
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +13 -0
- data/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +250 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +0 -12
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +3 -6
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +0 -8
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +0 -4
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +1 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/well.css +0 -1
- data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +2 -1
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +11 -4
- data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +2 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +1 -5
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +24 -23
- data/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +91 -60
- data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +124 -24
- data/frameworks/sproutcore/frameworks/desktop/system/drag.js +5 -5
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +33 -25
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/pane_page.js +41 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/methods.js +30 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/ui.js +13 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +27 -21
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +81 -1
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +3 -4
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +65 -36
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +4 -7
- data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +8 -4
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +1 -1
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +38 -5
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +5 -1
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +4 -1
- data/frameworks/sproutcore/frameworks/desktop/views/progress.js +19 -13
- data/frameworks/sproutcore/frameworks/desktop/views/radio.js +30 -2
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +2 -3
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +14 -17
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +5 -3
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +4 -2
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +58 -59
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +2 -1
- data/frameworks/sproutcore/frameworks/desktop/views/well.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/core.js +6 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +2 -1
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +33 -30
- data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +8 -4
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +15 -10
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +61 -12
- data/frameworks/sproutcore/frameworks/foundation/system/bundle.js +2 -1
- data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +151 -131
- data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +29 -23
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +18 -10
- data/frameworks/sproutcore/frameworks/foundation/system/page.js +7 -5
- data/frameworks/sproutcore/frameworks/foundation/system/ready.js +1 -0
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +9 -6
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +41 -6
- data/frameworks/sproutcore/frameworks/foundation/system/response.js +89 -24
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +0 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +27 -8
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +6 -6
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +2 -2
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +65 -3
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +1 -1
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertLayouts.js +145 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/didAppendToDocument.js +48 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/nextValidKeyView.js +91 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/number.js +9 -5
- data/frameworks/sproutcore/frameworks/foundation/views/field.js +16 -14
- data/frameworks/sproutcore/frameworks/foundation/views/text_field.js +89 -67
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +221 -73
- data/frameworks/sproutcore/frameworks/runtime/core.js +43 -22
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +6 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +1 -1
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +53 -34
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +7 -3
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +19 -19
- data/frameworks/sproutcore/frameworks/runtime/system/logger.js +132 -88
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +15 -9
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +6 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +69 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +14 -2
- data/frameworks/sproutcore/license.js +3 -1
- data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/icons/mini_222222.png +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/icons/mini_454545.png +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/icons/mini_888888.png +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/panels/sprite-x.png +0 -0
- data/frameworks/sproutcore/{frameworks/desktop → themes/standard_theme}/english.lproj/images/panels/sprite-y.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +15 -1
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/menu_item_view.css +9 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panel.css +33 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/picker.css +17 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +9 -6
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +0 -4
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/well.css +36 -0
- data/gen/controller/templates/controllers/@filename@.js +1 -1
- data/lib/sproutcore/builders/minify.rb +45 -13
- data/lib/sproutcore/helpers/static_helper.rb +2 -2
- data/lib/sproutcore/models/manifest_entry.rb +42 -1
- data/lib/sproutcore/tools/build.rb +18 -2
- data/spec/lib/models/manifest_entry/hyperdomain_prefix.rb +34 -0
- data/vendor/yui-compressor/SCyuicompressor-2.4.2.jar +0 -0
- metadata +28 -22
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
@@ -190,7 +190,7 @@ SC.routes = SC.Object.create(
|
|
190
190
|
/** @private */
|
191
191
|
init: function() {
|
192
192
|
arguments.callee.base.call(this) ;
|
193
|
-
if (SC.browser.isSafari &&
|
193
|
+
if (SC.browser.isSafari && parseInt(SC.browser.version,0) < 417) {
|
194
194
|
SC.mixin(this,this.browserFuncs.safari) ;
|
195
195
|
} else if (SC.browser.isIE) {
|
196
196
|
SC.mixin(this,this.browserFuncs.ie) ;
|
@@ -138,7 +138,6 @@ SC.mixin( /** @scope SC */ {
|
|
138
138
|
*/
|
139
139
|
rectsEqual: function(r1, r2, delta) {
|
140
140
|
if (!r1 || !r2) return (r1 == r2) ;
|
141
|
-
|
142
141
|
if (!delta && delta !== 0) delta = 0.1;
|
143
142
|
if ((r1.y != r2.y) && (Math.abs(r1.y - r2.y) > delta)) return NO ;
|
144
143
|
if ((r1.x != r2.x) && (Math.abs(r1.x - r2.x) > delta)) return NO ;
|
@@ -183,17 +183,36 @@ test("array orderBy using function", function(){
|
|
183
183
|
// ADD SPECIAL CASES HERE
|
184
184
|
//
|
185
185
|
|
186
|
+
test("verify rangeObserver fires when content is deleted", function() {
|
187
|
+
|
188
|
+
content = "1 2 3 4 5".w().map(function(x) {
|
189
|
+
return TestObject.create({ title: x });
|
190
|
+
});
|
191
|
+
|
192
|
+
controller = SC.ArrayController.create({ content: content });
|
193
|
+
|
194
|
+
var cnt = 0,
|
195
|
+
observer = SC.Object.create({ method: function() { cnt++; } });
|
196
|
+
controller.addRangeObserver(SC.IndexSet.create(0,2), observer, observer.method);
|
197
|
+
|
198
|
+
SC.RunLoop.begin();
|
199
|
+
content.length = 0 ;
|
200
|
+
content.enumerableContentDidChange();
|
201
|
+
SC.RunLoop.end();
|
202
|
+
|
203
|
+
equals(cnt, 1, 'range observer should have fired once');
|
204
|
+
});
|
186
205
|
|
187
206
|
|
188
207
|
// ..........................................................
|
189
208
|
// VERIFY SC.ARRAY COMPLIANCE
|
190
209
|
//
|
191
210
|
|
192
|
-
SC.ArraySuite.generate("SC.ArrayController", {
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
});
|
211
|
+
// SC.ArraySuite.generate("SC.ArrayController", {
|
212
|
+
// newObject: function(amt) {
|
213
|
+
// if (amt === undefined || typeof amt === SC.T_NUMBER) {
|
214
|
+
// amt = this.expected(amt);
|
215
|
+
// }
|
216
|
+
// return SC.ArrayController.create({ content: amt });
|
217
|
+
// }
|
218
|
+
// });
|
@@ -1159,7 +1159,7 @@ test("prev([String])", function() {
|
|
1159
1159
|
|
1160
1160
|
|
1161
1161
|
test("addClass(String)", function() {
|
1162
|
-
expect(
|
1162
|
+
expect(1);
|
1163
1163
|
var div = SC.$("div");
|
1164
1164
|
div.addClass("test");
|
1165
1165
|
var pass = true;
|
@@ -1168,11 +1168,11 @@ test("addClass(String)", function() {
|
|
1168
1168
|
}
|
1169
1169
|
ok( pass, "Add Class" );
|
1170
1170
|
|
1171
|
-
// using contents will get regular, text, and comment nodes
|
1172
|
-
var j = SC.$("#nonnodes").contents();
|
1173
|
-
j.addClass("asdf");
|
1174
|
-
ok( j.hasClass("asdf"), "Check node,textnode,comment for addClass" );
|
1175
|
-
});
|
1171
|
+
// // using contents will get regular, text, and comment nodes
|
1172
|
+
// var j = SC.$("#nonnodes").contents();
|
1173
|
+
// j.addClass("asdf");
|
1174
|
+
// ok( j.hasClass("asdf"), "Check node,textnode,comment for addClass" );
|
1175
|
+
});
|
1176
1176
|
|
1177
1177
|
test("removeClass(String) - simple", function() {
|
1178
1178
|
expect(4);
|
data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js
CHANGED
@@ -47,13 +47,13 @@ test("clone on next retrieval if styles(foo) set with cloneOnModify=YES", functi
|
|
47
47
|
|
48
48
|
test("extracts styles from element on first retrieval", function() {
|
49
49
|
var elem = document.createElement('div');
|
50
|
-
SC.$(elem).attr('style', 'color: black; height: 20px; ');
|
50
|
+
SC.$(elem).attr('style', 'color: black; height: 20px; border-top: 1px solid hotpink; ');
|
51
51
|
context = SC.RenderContext(elem);
|
52
52
|
|
53
53
|
var result = context.styles();
|
54
54
|
|
55
55
|
|
56
|
-
same(result, { color: 'black', height: '20px' }, 'extracted style. This is failing in IE8 because it return styles like cOLOR.');
|
56
|
+
same(result, { color: 'black', height: '20px', borderTop: '1px solid hotpink' }, 'extracted style. This is failing in IE8 because it return styles like cOLOR.');
|
57
57
|
|
58
58
|
equals(context.styles(), result, "should reuse same instance thereafter");
|
59
59
|
});
|
@@ -27,11 +27,11 @@ test("Basic Requirements", function() {
|
|
27
27
|
});
|
28
28
|
|
29
29
|
test("Test Asynchronous GET Request", function() {
|
30
|
-
|
30
|
+
|
31
31
|
var response, timer;
|
32
32
|
|
33
33
|
timer = setTimeout(function() {
|
34
|
-
ok(false, 'response did not invoke notify()
|
34
|
+
ok(false, 'response did not invoke notify() within 2sec');
|
35
35
|
window.start();
|
36
36
|
}, 2000);
|
37
37
|
|
@@ -155,7 +155,69 @@ test("Test Multiple Asynchronous GET Request - two immediate, and two in serial"
|
|
155
155
|
setTimeout( function(){
|
156
156
|
equals(requestCount, 6, "requestCount should be 6");
|
157
157
|
equals(responseCount, 6, "responseCount should be 6");
|
158
|
-
window.start() ; // starts the test
|
158
|
+
window.start() ; // starts the test runner
|
159
159
|
}, 2000);
|
160
160
|
});
|
161
161
|
|
162
|
+
|
163
|
+
test("Test timeouts", function() {
|
164
|
+
var message;
|
165
|
+
|
166
|
+
// Sanity check 1
|
167
|
+
try {
|
168
|
+
SC.Request.getUrl(url).set('timeout', 0).send();
|
169
|
+
}
|
170
|
+
catch (e) {
|
171
|
+
message = e;
|
172
|
+
}
|
173
|
+
ok(message && message.indexOf("The timeout value must either not be specified or must be greater than 0") !== -1, 'An error should be thrown when the timeout value is 0 ms');
|
174
|
+
|
175
|
+
// Sanity check 2
|
176
|
+
try {
|
177
|
+
SC.Request.getUrl(url).set('isAsynchronous', NO).set('timeout', 10).send();
|
178
|
+
}
|
179
|
+
catch (e2) {
|
180
|
+
message = e2;
|
181
|
+
}
|
182
|
+
ok(message && message.indexOf("Timeout values cannot be used with synchronous requests") !== -1, 'An error should be thrown when trying to use a timeout with a synchronous request');
|
183
|
+
|
184
|
+
|
185
|
+
// Make sure timeouts actually fire, and fire when expected.
|
186
|
+
var changedBefore = NO,
|
187
|
+
changedAfter = NO,
|
188
|
+
timeoutRequest = SC.Request.getUrl("http://www.sproutcore.com"),
|
189
|
+
checkstop;
|
190
|
+
|
191
|
+
var now = Date.now();
|
192
|
+
|
193
|
+
// make the timeout as short as possible so that it will always happen
|
194
|
+
timeoutRequest.set('timeout', 10);
|
195
|
+
timeoutRequest.set('didTimeout', function() {
|
196
|
+
// at least timeout time must have elapsed
|
197
|
+
var elapsed = Date.now()-now;
|
198
|
+
ok(elapsed >= 10, 'timeout must not fire earlier than 10msec - actual %@'.fmt(elapsed));
|
199
|
+
|
200
|
+
// timeout did fire...just resume...
|
201
|
+
clearTimeout(checkstop);
|
202
|
+
window.start();
|
203
|
+
});
|
204
|
+
|
205
|
+
timeoutRequest.set('didReceive', function() {
|
206
|
+
ok(false, 'timeout did not fire before response was recieved. should have fired after 10msec. response time: %@msec'.fmt(Date.now() - now));
|
207
|
+
window.start(); // resume
|
208
|
+
});
|
209
|
+
|
210
|
+
SC.RunLoop.begin();
|
211
|
+
timeoutRequest.send();
|
212
|
+
SC.RunLoop.end();
|
213
|
+
|
214
|
+
stop() ; // stops the test runner
|
215
|
+
|
216
|
+
// in case nothing works
|
217
|
+
checkstop = setTimeout(function() {
|
218
|
+
ok(false, 'timeout did not fire at all');
|
219
|
+
window.start();
|
220
|
+
}, 500);
|
221
|
+
|
222
|
+
});
|
223
|
+
|
@@ -70,7 +70,7 @@ test("adding/remove/adding pane", function() {
|
|
70
70
|
var layer = pane.get('layer');
|
71
71
|
ok(layer, 'has layer');
|
72
72
|
equals(layer.parentNode, elem1, 'layer belongs to parent');
|
73
|
-
|
73
|
+
ok(pane.get('isVisibleInWindow'), 'isVisibleInWindow is YES before remove');
|
74
74
|
pane.remove();
|
75
75
|
ok(!pane.get('isVisibleInWindow'), 'isVisibleInWindow is NO');
|
76
76
|
|
@@ -0,0 +1,145 @@
|
|
1
|
+
// ========================================================================
|
2
|
+
// View Convertion Layout Unit Tests
|
3
|
+
// ========================================================================
|
4
|
+
|
5
|
+
/*globals module test ok same equals */
|
6
|
+
|
7
|
+
/* These unit tests verify: convertLayoutToAnchoredLayout(), convertLayoutToCustomLayout() */
|
8
|
+
|
9
|
+
var parent, child;
|
10
|
+
|
11
|
+
/**
|
12
|
+
Helper setup that creates a parent and child view so that you can do basic
|
13
|
+
tests.
|
14
|
+
*/
|
15
|
+
var commonSetup = {
|
16
|
+
setup: function() {
|
17
|
+
|
18
|
+
// create basic parent view
|
19
|
+
parent = SC.View.create({
|
20
|
+
layout: { top: 0, left: 0, width: 500, height: 500 }
|
21
|
+
});
|
22
|
+
|
23
|
+
// create child view to test against.
|
24
|
+
child = SC.View.create();
|
25
|
+
},
|
26
|
+
|
27
|
+
teardown: function() {
|
28
|
+
parent = child = null ;
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
// ..........................................................
|
33
|
+
// TEST LAYOUT WITH BASIC LAYOUT CONVERSION
|
34
|
+
//
|
35
|
+
|
36
|
+
module('BASIC LAYOUT CONVERSION', commonSetup);
|
37
|
+
|
38
|
+
test("layout {top, left, width, height}", function() {
|
39
|
+
var layout = { top: 10, left: 10, width: 50, height: 50 };
|
40
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
41
|
+
same(cl, layout, 'conversion is equal');
|
42
|
+
}) ;
|
43
|
+
|
44
|
+
test("layout {top, left, bottom, right}", function() {
|
45
|
+
var layout = { top: 10, left: 10, bottom: 10, right: 10 };
|
46
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
47
|
+
|
48
|
+
var testLayout = { top: 10, left: 10, width: 480, height: 480 };
|
49
|
+
same(cl, testLayout, 'conversion is equal');
|
50
|
+
}) ;
|
51
|
+
|
52
|
+
test("layout {bottom, right, width, height}", function() {
|
53
|
+
var layout = { bottom: 10, right: 10, width: 50, height: 50 };
|
54
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
55
|
+
|
56
|
+
var testLayout = { top: 440, left: 440, width: 50, height: 50 };
|
57
|
+
same(cl, testLayout, 'conversion is equal');
|
58
|
+
}) ;
|
59
|
+
|
60
|
+
test("layout {centerX, centerY, width, height}", function() {
|
61
|
+
var layout = { centerX: 10, centerY: 10, width: 50, height: 50 };
|
62
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
63
|
+
|
64
|
+
var testLayout = { top: 235, left: 235, width: 50, height: 50 };
|
65
|
+
same(cl, testLayout, 'conversion is equal');
|
66
|
+
}) ;
|
67
|
+
|
68
|
+
|
69
|
+
// ..........................................................
|
70
|
+
// TEST LAYOUT WITH INVALID LAYOUT VARIATIONS
|
71
|
+
//
|
72
|
+
|
73
|
+
module('INVALID LAYOUT VARIATIONS', commonSetup);
|
74
|
+
|
75
|
+
test("layout {top, left} - assume right/bottom=0", function() {
|
76
|
+
var layout = { top: 10, left: 10 };
|
77
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
78
|
+
|
79
|
+
var testLayout = { top: 10, left: 10, width: 490, height: 490 };
|
80
|
+
same(cl, testLayout, 'conversion is equal');
|
81
|
+
}) ;
|
82
|
+
|
83
|
+
test("layout {height, width} - assume top/left=0", function() {
|
84
|
+
var layout = { height: 60, width: 60 };
|
85
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
86
|
+
|
87
|
+
var testLayout = { top: 0, left: 0, width: 60, height: 60 };
|
88
|
+
same(cl, testLayout, 'conversion is equal');
|
89
|
+
}) ;
|
90
|
+
|
91
|
+
test("layout {right, bottom} - assume top/left=0", function() {
|
92
|
+
var layout = { right: 10, bottom: 10 };
|
93
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
94
|
+
|
95
|
+
var testLayout = { top: 0, left: 0, width: 490, height: 490 };
|
96
|
+
same(cl, testLayout, 'conversion is equal');
|
97
|
+
}) ;
|
98
|
+
|
99
|
+
test("layout {centerX, centerY} - assume width/height=0", function() {
|
100
|
+
var layout = { centerX: 10, centerY: 10 };
|
101
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
102
|
+
|
103
|
+
var testLayout = { top: 260, left: 260, width: 0, height: 0 };
|
104
|
+
same(cl, testLayout, 'conversion is equal');
|
105
|
+
}) ;
|
106
|
+
|
107
|
+
test("layout {top, left, centerX, centerY, height, width} - top/left take presidence", function() {
|
108
|
+
var layout = { top: 10, left: 10, centerX: 10, centerY: 10, height: 60, width: 60 };
|
109
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
110
|
+
|
111
|
+
var testLayout = { top: 10, left: 10, width: 60, height: 60 };
|
112
|
+
same(cl, testLayout, 'conversion is equal');
|
113
|
+
}) ;
|
114
|
+
|
115
|
+
test("layout {bottom, right, centerX, centerY, height, width} - bottom/right take presidence", function() {
|
116
|
+
var layout = { bottom: 10, right: 10, centerX: 10, centerY: 10, height: 60, width: 60 };
|
117
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
118
|
+
|
119
|
+
var testLayout = { top: 430, left: 430, width: 60, height: 60 };
|
120
|
+
same(cl, testLayout, 'conversion is equal');
|
121
|
+
|
122
|
+
}) ;
|
123
|
+
|
124
|
+
test("layout {top, left, bottom, right, centerX, centerY, height, width} - top/left take presidence", function() {
|
125
|
+
var layout = { top: 10, left: 10, bottom: 10, right: 10, centerX: 10, centerY: 10, height: 60, width: 60 };
|
126
|
+
var cl = SC.View.convertLayoutToAnchoredLayout(layout, parent.get('frame'));
|
127
|
+
|
128
|
+
var testLayout = { top: 10, left: 10, width: 60, height: 60 };
|
129
|
+
same(cl, testLayout, 'conversion is equal');
|
130
|
+
}) ;
|
131
|
+
|
132
|
+
|
133
|
+
test("layout {centerX, centerY, width:auto, height:auto}", function() {
|
134
|
+
// var error=null;
|
135
|
+
// var layout = { centerX: 10, centerY: 10, width: 'auto', height: 'auto' };
|
136
|
+
// child.set('layout', layout) ;
|
137
|
+
// try{
|
138
|
+
// child.layoutStyle();
|
139
|
+
// }catch(e){
|
140
|
+
// error=e;
|
141
|
+
// }
|
142
|
+
// equals(SC.T_ERROR,SC.typeOf(error),'Layout style functions should throw and '+
|
143
|
+
// 'error if centerx/y and width/height are set at the same time ' + error );
|
144
|
+
|
145
|
+
}) ;
|
@@ -0,0 +1,48 @@
|
|
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 Q$ */
|
9
|
+
|
10
|
+
|
11
|
+
var pane, view;
|
12
|
+
|
13
|
+
module("SC.View#didAppendToDocument");
|
14
|
+
|
15
|
+
test("Check that didAppendToDocument gets called at the right moment", function() {
|
16
|
+
var counter=0;
|
17
|
+
pane = SC.MainPane.create({
|
18
|
+
childViews: [
|
19
|
+
SC.View.extend({
|
20
|
+
render: function (context, firstTime) {
|
21
|
+
context.push('new string');
|
22
|
+
},
|
23
|
+
didAppendToDocument: function(){
|
24
|
+
counter++;
|
25
|
+
}
|
26
|
+
})
|
27
|
+
]
|
28
|
+
});
|
29
|
+
equals(counter, 0, "");
|
30
|
+
pane.append(); // make sure there is a layer...
|
31
|
+
equals(counter, 1, "");
|
32
|
+
view = pane.childViews[0];
|
33
|
+
view.displayDidChange();
|
34
|
+
SC.RunLoop.begin().end();
|
35
|
+
equals(counter, 2, "");
|
36
|
+
|
37
|
+
var additionalView = SC.View.extend({
|
38
|
+
didAppendToDocument: function(){
|
39
|
+
counter++;
|
40
|
+
}
|
41
|
+
});
|
42
|
+
additionalView = additionalView.create();
|
43
|
+
pane.appendChild(additionalView);
|
44
|
+
|
45
|
+
SC.RunLoop.begin().end();
|
46
|
+
equals(counter, 3, "");
|
47
|
+
pane.remove();
|
48
|
+
});
|
@@ -0,0 +1,91 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2009 Apple Inc. and contributors.
|
4
|
+
// License: Licened under MIT license (see license.js)
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
/*global module test equals context ok same Q$ htmlbody */
|
8
|
+
|
9
|
+
var pane, textfield_view1, textfield_view2, textfield_view3, view1, view2, view3, view4, view5;
|
10
|
+
|
11
|
+
module("SC.View#nextValidKeyView", {
|
12
|
+
setup: function() {
|
13
|
+
SC.RunLoop.begin();
|
14
|
+
|
15
|
+
pane = SC.Pane.design()
|
16
|
+
.layout({ top: 0, left: 0, bottom:0, right: 0 })
|
17
|
+
.childView(SC.TextFieldView.design())
|
18
|
+
.childView(SC.View.design())
|
19
|
+
.childView(SC.View.design()
|
20
|
+
.childView(SC.View.design()
|
21
|
+
.childView(SC.View.design()
|
22
|
+
.childView(SC.View.design()
|
23
|
+
.childView(SC.TextFieldView.design())
|
24
|
+
)
|
25
|
+
)
|
26
|
+
)
|
27
|
+
)
|
28
|
+
.childView(SC.View.design())
|
29
|
+
.childView(SC.View.design())
|
30
|
+
.childView(SC.View.design())
|
31
|
+
.childView(SC.View.design()
|
32
|
+
.childView(SC.TextFieldView.design())
|
33
|
+
)
|
34
|
+
.childView(SC.View.design())
|
35
|
+
.create();
|
36
|
+
pane.append();
|
37
|
+
SC.RunLoop.end();
|
38
|
+
|
39
|
+
textfield_view1 = pane.childViews[0];
|
40
|
+
textfield_view2 = pane.childViews[2].childViews[0].childViews[0].childViews[0].childViews[0];
|
41
|
+
textfield_view3 = pane.childViews[6].childViews[0];
|
42
|
+
view1 = pane.childViews[1];
|
43
|
+
view2 = pane.childViews[3];
|
44
|
+
view3 = pane.childViews[4];
|
45
|
+
view4 = pane.childViews[5];
|
46
|
+
view5 = pane.childViews[7];
|
47
|
+
},
|
48
|
+
|
49
|
+
|
50
|
+
teardown: function() {
|
51
|
+
SC.RunLoop.begin();
|
52
|
+
pane.remove();
|
53
|
+
pane = textfield_view1 = textfield_view2 = textfield_view3 = view1 = view2 = view3 = null;
|
54
|
+
SC.RunLoop.end();
|
55
|
+
}
|
56
|
+
});
|
57
|
+
|
58
|
+
test("Navigate between textfields- going forward", function() {
|
59
|
+
SC.SAFARI_FOCUS_BEHAVIOR = YES;
|
60
|
+
var v = view2.nextValidKeyView();
|
61
|
+
same(v, textfield_view3, "The next view should be " + textfield_view3.toString());
|
62
|
+
v = textfield_view3.nextValidKeyView();
|
63
|
+
same(v, null, "The next view should be null");
|
64
|
+
});
|
65
|
+
|
66
|
+
test("Navigate between textfields- going backwards", function() {
|
67
|
+
SC.SAFARI_FOCUS_BEHAVIOR = YES;
|
68
|
+
var v = view2.previousValidKeyView();
|
69
|
+
same(v, textfield_view2, "The previous key view should be " + textfield_view2.toString());
|
70
|
+
|
71
|
+
});
|
72
|
+
|
73
|
+
|
74
|
+
test("Navigate forward with view that have a nextKeyView set", function() {
|
75
|
+
SC.SAFARI_FOCUS_BEHAVIOR = YES;
|
76
|
+
var v = view2.nextValidKeyView();
|
77
|
+
same(v, textfield_view3, "The next view should be " + textfield_view3.toString());
|
78
|
+
view3.set('nextKeyView', textfield_view1);
|
79
|
+
v = view2.nextValidKeyView();
|
80
|
+
same(v, textfield_view1, "The next view should be " + textfield_view1.toString());
|
81
|
+
});
|
82
|
+
|
83
|
+
|
84
|
+
test("Navigate backwards with view that have a previousKeyView set", function() {
|
85
|
+
SC.SAFARI_FOCUS_BEHAVIOR = YES;
|
86
|
+
var v = view2.previousValidKeyView();
|
87
|
+
same(v, textfield_view2, "The next view should be " + textfield_view2.toString());
|
88
|
+
view4.set('previousKeyView', textfield_view1);
|
89
|
+
v = textfield_view3.previousValidKeyView();
|
90
|
+
same(v, textfield_view1, "The next view should be " + textfield_view1.toString());
|
91
|
+
});
|