sproutcore 1.6.0.1-java → 1.7.1.beta-java
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +21 -0
- data/Gemfile +5 -0
- data/Rakefile +26 -13
- data/VERSION.yml +2 -2
- data/lib/Buildfile +43 -4
- data/lib/buildtasks/build.rake +10 -0
- data/lib/buildtasks/helpers/file_rule.rb +22 -0
- data/lib/buildtasks/helpers/file_rule_list.rb +137 -0
- data/lib/buildtasks/manifest.rake +133 -122
- data/lib/frameworks/sproutcore/CHANGELOG.md +69 -2
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +28 -22
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +9 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controls/button.js +18 -13
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/bind.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/collection.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +80 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +84 -116
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +8 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +157 -157
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +10 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/collection.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +71 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/attribute_bindings_test.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +18 -18
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +42 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +158 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +26 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +14 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +15 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +108 -108
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +2 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/builders.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +26 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +97 -96
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +17 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +7 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +12 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +23 -14
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +5 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/render_delegates/menu_scroller.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/tests/menu/scroll.js +235 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +363 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroller.js +250 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/desktop_scroller.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/native_scroll.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/scroll.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/touch_scroller.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/methods.js +143 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/ui.js +258 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +1164 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroller.js +332 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +236 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroller.js +347 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroller.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +804 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroller.js +133 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/number.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +2 -4
- data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +2 -4
- data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +2 -4
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +29 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/private/property_chain.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +2 -2
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/segmented.css +1 -1
- data/lib/gen/app/templates/apps/@target_name@/Buildfile +3 -5
- data/lib/gen/app/templates/apps/@target_name@/resources/_theme.css +18 -0
- data/lib/gen/project/templates/@filename@/Buildfile +2 -2
- data/lib/sproutcore.rb +30 -5
- data/lib/sproutcore/builders.rb +1 -0
- data/lib/sproutcore/builders/chance_file.rb +9 -16
- data/lib/sproutcore/builders/html.rb +2 -1
- data/lib/sproutcore/builders/minify.rb +4 -35
- data/lib/sproutcore/builders/module.rb +38 -1
- data/lib/sproutcore/builders/split.rb +63 -0
- data/lib/sproutcore/builders/strings.rb +7 -1
- data/lib/sproutcore/helpers.rb +1 -1
- data/lib/sproutcore/helpers/css_split.rb +190 -0
- data/lib/sproutcore/helpers/entry_sorter.rb +2 -0
- data/lib/sproutcore/helpers/minifier.rb +40 -16
- data/lib/sproutcore/helpers/static_helper.rb +35 -17
- data/lib/sproutcore/models/manifest.rb +26 -0
- data/lib/sproutcore/models/target.rb +12 -1
- data/lib/sproutcore/rack.rb +1 -0
- data/lib/sproutcore/rack/proxy.rb +244 -225
- data/lib/sproutcore/rack/restrict_ip.rb +67 -0
- data/lib/sproutcore/rack/service.rb +8 -2
- data/lib/sproutcore/tools.rb +102 -46
- data/lib/sproutcore/tools/build.rb +91 -43
- data/lib/sproutcore/tools/gen.rb +2 -3
- data/lib/sproutcore/tools/manifest.rb +22 -16
- data/lib/sproutcore/tools/server.rb +21 -0
- data/spec/buildtasks/helpers/accept_list +22 -0
- data/spec/buildtasks/helpers/accept_list.rb +128 -0
- data/spec/buildtasks/helpers/list.json +11 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/chance_2x_spec.rb +1 -39
- data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +0 -38
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +4 -4
- data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +2 -2
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_indirect_spec.rb +7 -16
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_spec.rb +7 -17
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +11 -6
- data/spec/fixtures/builder_tests/Buildfile +2 -1
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_module/core.js +0 -0
- data/spec/lib/builders/module_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/sproutcore.gemspec +4 -9
- data/vendor/chance/lib/chance.rb +25 -6
- data/vendor/chance/lib/chance/factory.rb +45 -0
- data/vendor/chance/lib/chance/instance.rb +173 -28
- data/vendor/chance/lib/chance/instance/data_url.rb +0 -29
- data/vendor/chance/lib/chance/instance/slicing.rb +57 -4
- data/vendor/chance/lib/chance/instance/spriting.rb +112 -21
- data/vendor/chance/lib/chance/parser.rb +80 -52
- data/vendor/sproutcore/SCCompiler.jar +0 -0
- data/vendor/sproutcore/lib/args4j-2.0.12.jar +0 -0
- data/vendor/sproutcore/lib/yuicompressor-2.4.2.jar +0 -0
- metadata +84 -25
@@ -1429,7 +1429,7 @@ SC.Query.mixin( /** @scope SC.Query */ {
|
|
1429
1429
|
|
1430
1430
|
// pass one or more recordTypes.
|
1431
1431
|
if (recordType && recordType.isEnumerable) {
|
1432
|
-
opts.
|
1432
|
+
opts.recordTypes = recordType;
|
1433
1433
|
} else opts.recordType = recordType;
|
1434
1434
|
|
1435
1435
|
// set conditions and params if needed
|
@@ -551,9 +551,7 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
551
551
|
// otherwise, lookup all storeKeys for the named recordType...
|
552
552
|
} else if (recordType = query.get('expandedRecordTypes')) {
|
553
553
|
sourceKeys = SC.IndexSet.create();
|
554
|
-
|
555
|
-
sourceKeys.addEach(store.storeKeysFor(recordType));
|
556
|
-
});
|
554
|
+
sourceKeys.addEach(store.storeKeysFor(recordType));
|
557
555
|
}
|
558
556
|
|
559
557
|
// loop through storeKeys to determine if it belongs in this query or
|
@@ -635,7 +633,7 @@ SC.RecordArray = SC.Object.extend(SC.Enumerable, SC.Array,
|
|
635
633
|
@type Boolean
|
636
634
|
*/
|
637
635
|
isError: function() {
|
638
|
-
return this.get('status') & SC.Record.ERROR;
|
636
|
+
return !!(this.get('status') & SC.Record.ERROR);
|
639
637
|
}.property('status').cacheable(),
|
640
638
|
|
641
639
|
/**
|
@@ -45,8 +45,8 @@ test("Verify error methods behave correctly", function() {
|
|
45
45
|
store.dataSourceDidError(storeKey, SC.Record.GENERIC_ERROR);
|
46
46
|
SC.RunLoop.end();
|
47
47
|
|
48
|
-
ok(thing1.get('isError'), "isError on thing1 should be YES");
|
49
|
-
ok(
|
48
|
+
ok((thing1.get('isError') === YES), "isError on thing1 should be YES");
|
49
|
+
ok((thing2.get('isError') === NO), "isError on thing2 should be NO");
|
50
50
|
|
51
51
|
equals(thing1.get('errorObject'), SC.Record.GENERIC_ERROR,
|
52
52
|
"get('errorObject') on thing1 should return the correct error object");
|
@@ -282,3 +282,29 @@ test("isEditable NO should not fire property change observer", function() {
|
|
282
282
|
rec5.removeObserver('readOnlyRelatedTo', modifierListener);
|
283
283
|
});
|
284
284
|
|
285
|
+
test("adding toOne pointing to non existing class should throw error", function() {
|
286
|
+
var message;
|
287
|
+
try {
|
288
|
+
MyApp.InvalidModel = SC.Record.extend({
|
289
|
+
foo: SC.Record.toOne(MyApp.DoesNotExist)
|
290
|
+
});
|
291
|
+
} catch (x) {
|
292
|
+
message = x;
|
293
|
+
}
|
294
|
+
|
295
|
+
same(message, 'Attempted to create toOne attribute with undefined recordType. Did you forget to sc_require a dependency?');
|
296
|
+
});
|
297
|
+
|
298
|
+
test("adding toMany pointing to non existing class should throw error", function() {
|
299
|
+
var message;
|
300
|
+
try {
|
301
|
+
MyApp.InvalidModel = SC.Record.extend({
|
302
|
+
foo: SC.Record.toMany(MyApp.DoesNotExist)
|
303
|
+
});
|
304
|
+
} catch (x) {
|
305
|
+
message = x;
|
306
|
+
}
|
307
|
+
|
308
|
+
same(message, 'Attempted to create toMany attribute with undefined recordType. Did you forget to sc_require a dependency?');
|
309
|
+
});
|
310
|
+
|
@@ -144,6 +144,13 @@ function performBasicTests(methodName, loc) {
|
|
144
144
|
equals(q5, q4, 'second call for different conditions should return cache');
|
145
145
|
});
|
146
146
|
|
147
|
+
test("query with record types and conditions hash", function() {
|
148
|
+
|
149
|
+
var q = invokeWith([TestRecord, TestRecord2], {});
|
150
|
+
queryEquals(q, loc, [TestRecord, TestRecord2], null, 'first query');
|
151
|
+
|
152
|
+
});
|
153
|
+
|
147
154
|
test("query with no record type and with conditions", function() {
|
148
155
|
var q1, q2;
|
149
156
|
|
data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js
CHANGED
@@ -43,7 +43,7 @@ test("Verify error methods behave correctly", function() {
|
|
43
43
|
store.dataSourceDidErrorQuery(q, SC.Record.GENERIC_ERROR);
|
44
44
|
SC.RunLoop.end();
|
45
45
|
|
46
|
-
ok(things.get('isError'), "isError on things array should be YES");
|
46
|
+
ok((things.get('isError') === YES), "isError on things array should be YES");
|
47
47
|
|
48
48
|
equals(things.get('errorObject'), SC.Record.GENERIC_ERROR,
|
49
49
|
"get('errorObject') on things array should return the correct error object");
|
@@ -975,7 +975,10 @@ SC.DateTime.mixin(SC.Comparable,
|
|
975
975
|
}
|
976
976
|
|
977
977
|
if (!SC.none(opts.meridian) && !SC.none(opts.hour)) {
|
978
|
-
if (opts.meridian === 1
|
978
|
+
if ((opts.meridian === 1 && opts.hour !== 12)
|
979
|
+
|| (opts.meridian === 0 && opts.hour === 12)) {
|
980
|
+
opts.hour = (opts.hour + 12) % 24;
|
981
|
+
}
|
979
982
|
delete opts.meridian;
|
980
983
|
}
|
981
984
|
|
@@ -306,6 +306,12 @@ test('parse', function() {
|
|
306
306
|
timeShouldBeEqualToHash(
|
307
307
|
SC.DateTime.parse('71-01-01 00:00:00', '%y-%m-%d %H:%M:%S'),
|
308
308
|
{ year: 1971, month: 1, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 });
|
309
|
+
timeShouldBeEqualToHash(
|
310
|
+
SC.DateTime.parse('71-01-01 12:00 AM', '%y-%m-%d %i:%M %p'),
|
311
|
+
{ year: 1971, month: 1, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 });
|
312
|
+
timeShouldBeEqualToHash(
|
313
|
+
SC.DateTime.parse('71-01-01 12:00 PM', '%y-%m-%d %i:%M %p'),
|
314
|
+
{ year: 1971, month: 1, day: 1, hour: 12, minute: 0, second: 0, millisecond: 0 });
|
309
315
|
});
|
310
316
|
|
311
317
|
test('parse with time zones',function() {
|
@@ -39,7 +39,7 @@ sc_require('views/menu_item');
|
|
39
39
|
|
40
40
|
var menuItems = [
|
41
41
|
{ title: 'Menu Item', keyEquivalent: 'ctrl_shift_n' },
|
42
|
-
{ title: 'Checked Menu Item',
|
42
|
+
{ title: 'Checked Menu Item', checkbox: YES, keyEquivalent: 'ctrl_a' },
|
43
43
|
{ title: 'Selected Menu Item', keyEquivalent: ['backspace', 'delete'] },
|
44
44
|
{ isSeparator: YES },
|
45
45
|
{ title: 'Menu Item with Icon', icon: 'inbox', keyEquivalent: 'ctrl_m' },
|
@@ -249,7 +249,7 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
249
249
|
|
250
250
|
/**
|
251
251
|
Disable context menu.
|
252
|
-
|
252
|
+
|
253
253
|
@property {Boolean}
|
254
254
|
@default NO
|
255
255
|
*/
|
@@ -465,6 +465,15 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
465
465
|
*/
|
466
466
|
itemLayerIdKey: 'layerId',
|
467
467
|
|
468
|
+
/**
|
469
|
+
The name of the property that determines whether a unique exampleView should be created for the item .
|
470
|
+
|
471
|
+
@type String
|
472
|
+
@default "exampleView"
|
473
|
+
@commonTask Menu Item Properties
|
474
|
+
*/
|
475
|
+
itemExampleViewKey: 'exampleView',
|
476
|
+
|
468
477
|
/**
|
469
478
|
The array of keys used by SC.MenuItemView when inspecting your menu items
|
470
479
|
for display properties.
|
@@ -588,7 +597,7 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
588
597
|
},
|
589
598
|
|
590
599
|
/**
|
591
|
-
Remove the menu pane status from the pane. This will simply set the
|
600
|
+
Remove the menu pane status from the pane. This will simply set the
|
592
601
|
`menuPane` on the `rootResponder` to `null.
|
593
602
|
|
594
603
|
@returns {SC.Pane} receiver
|
@@ -627,7 +636,7 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
627
636
|
*/
|
628
637
|
createMenuItemViews: function() {
|
629
638
|
var views = [], items = this.get('displayItems'),
|
630
|
-
exampleView = this.get('exampleView'), item, view,
|
639
|
+
exampleView = this.get('exampleView'), item, itemView, view,
|
631
640
|
height, heightKey, separatorKey, defaultHeight, separatorHeight,
|
632
641
|
menuHeight, menuHeightPadding, keyEquivalentKey, keyEquivalent,
|
633
642
|
keyArray, idx, layerIdKey, propertiesHash,
|
@@ -636,6 +645,7 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
636
645
|
if (!items) return views; // return an empty array
|
637
646
|
heightKey = this.get('itemHeightKey');
|
638
647
|
separatorKey = this.get('itemSeparatorKey');
|
648
|
+
exampleViewKey = this.get('itemExampleViewKey');
|
639
649
|
defaultHeight = this.get('itemHeight');
|
640
650
|
keyEquivalentKey = this.get('itemKeyEquivalentKey');
|
641
651
|
separatorHeight = this.get('itemSeparatorHeight');
|
@@ -652,16 +662,27 @@ SC.MenuPane = SC.PickerPane.extend(
|
|
652
662
|
if (!height) {
|
653
663
|
height = item.get(separatorKey) ? separatorHeight : defaultHeight;
|
654
664
|
}
|
665
|
+
|
655
666
|
propertiesHash = {
|
656
667
|
layout: { height: height, top: menuHeight },
|
657
668
|
contentDisplayProperties: keyArray,
|
658
669
|
content: item,
|
659
670
|
parentMenu: this
|
660
671
|
};
|
672
|
+
|
661
673
|
if(item.get(layerIdKey)) {
|
662
674
|
propertiesHash.layerId = item.get(layerIdKey);
|
663
675
|
}
|
664
|
-
|
676
|
+
|
677
|
+
// Item has its own exampleView so use it
|
678
|
+
itemExampleView = item.get(exampleViewKey);
|
679
|
+
if (itemExampleView) {
|
680
|
+
itemView = itemExampleView;
|
681
|
+
} else {
|
682
|
+
itemView = exampleView;
|
683
|
+
}
|
684
|
+
|
685
|
+
view = this._menuView.createChildView(itemView, propertiesHash);
|
665
686
|
views[idx] = view;
|
666
687
|
menuHeight += height;
|
667
688
|
keyEquivalent = item.get(keyEquivalentKey);
|
@@ -7,9 +7,9 @@
|
|
7
7
|
|
8
8
|
sc_require('panes/palette');
|
9
9
|
|
10
|
-
/**
|
10
|
+
/**
|
11
11
|
Popular customized picker position rules:
|
12
|
-
default: initiated just below the anchor.
|
12
|
+
default: initiated just below the anchor.
|
13
13
|
shift x, y to optimized picker visibility and make sure top-left corner is always visible.
|
14
14
|
menu : same as default rule +
|
15
15
|
default(1,4,3) or custom offset below the anchor for default location to fine tunned visual alignment +
|
@@ -51,7 +51,7 @@ SC.PICKER_POINTER = 'pointer';
|
|
51
51
|
*/
|
52
52
|
SC.PICKER_MENU_POINTER = 'menu-pointer';
|
53
53
|
|
54
|
-
/**
|
54
|
+
/**
|
55
55
|
Pointer layout for perfect right/left/top/bottom.
|
56
56
|
|
57
57
|
@constant
|
@@ -61,10 +61,10 @@ SC.POINTER_LAYOUT = ["perfectRight", "perfectLeft", "perfectTop", "perfectBottom
|
|
61
61
|
|
62
62
|
/**
|
63
63
|
@class
|
64
|
-
|
64
|
+
|
65
65
|
Display a non-modal pane that automatically repositions around a view so as
|
66
66
|
to remain visible.
|
67
|
-
|
67
|
+
|
68
68
|
An `SC.PickerPane` repositions around the view to which it is anchored as the
|
69
69
|
browser window is resized so as to ensure the pane's content remains visible.
|
70
70
|
A picker pane is useful for displaying supplementary information and does not
|
@@ -82,11 +82,11 @@ SC.POINTER_LAYOUT = ["perfectRight", "perfectLeft", "perfectTop", "perfectBottom
|
|
82
82
|
layout: { width: 400, height: 200 },
|
83
83
|
contentView: SC.View.extend({})
|
84
84
|
}).popup(someView);
|
85
|
-
|
85
|
+
|
86
86
|
This displays the `SC.PickerPane` anchored to `someView`.
|
87
87
|
|
88
88
|
## Positioning
|
89
|
-
|
89
|
+
|
90
90
|
Picker pane positioning can be classified into two broad categories:
|
91
91
|
offset-based and position-based.
|
92
92
|
|
@@ -99,66 +99,66 @@ SC.POINTER_LAYOUT = ["perfectRight", "perfectLeft", "perfectTop", "perfectBottom
|
|
99
99
|
value the y offset. The third value can be `0` (right) or `3` (bottom),
|
100
100
|
controlling whether the origin of the pane is further offset by the width
|
101
101
|
(in the case of 0) or the height (in the case of 3) of the anchor.
|
102
|
-
|
102
|
+
|
103
103
|
### Position-based
|
104
|
-
|
104
|
+
|
105
105
|
When `preferType` is `SC.PICKER_POINTER` or `SC.PICKER_MENU_POINTER`, then
|
106
106
|
the `preferMatrix` specifies the sides in the order in which you want the
|
107
107
|
`SC.PickerPane` to try to arrange itself around the view to which it is
|
108
108
|
anchored. The fifth element in the `preferMatrix` specifies which side the
|
109
109
|
`SC.PickerPane` should display on when there isn't enough space around any
|
110
110
|
of the preferred sides.
|
111
|
-
|
111
|
+
|
112
112
|
Anchor sides are defined by their index in `SC.POINTER_LAYOUT`, where right
|
113
113
|
is `0`, left is `1`, top is `2`, and bottom is `3`.
|
114
|
-
|
114
|
+
|
115
115
|
For example, the `preferMatrix` of `[3, 0, 1, 2, 2]` says: "Display below the
|
116
116
|
anchor (3); if there isn't enough space then display to the right of the anchor (0).
|
117
117
|
If there isn't enough space either below or to the right of the anchor, then appear
|
118
118
|
to the left (1), unless there is also no space on the left, in which case display
|
119
119
|
above the anchor (2)."
|
120
|
-
|
120
|
+
|
121
121
|
## Position Rules
|
122
|
-
|
122
|
+
|
123
123
|
When invoking `.popup()` you can optionally specify a picker position rule with
|
124
124
|
the `preferType` argument.
|
125
|
-
|
125
|
+
|
126
126
|
If no `preferType` is specified, the picker pane is displayed just below the anchor.
|
127
127
|
The pane will reposition automatically for optimal visibility, ensuring the top-left
|
128
128
|
corner is visible.
|
129
|
-
|
129
|
+
|
130
130
|
These position rules have the following behaviors:
|
131
|
-
|
131
|
+
|
132
132
|
### `SC.PICKER_MENU`
|
133
|
-
|
133
|
+
|
134
134
|
Positioning is offset-based, with `preferMatrix` defaulting to `[1, 4, 3]`.
|
135
135
|
Furthermore, a minimum left and right padding to window, of 7px and 8px, respectively,
|
136
136
|
is enforced.
|
137
|
-
|
138
|
-
|
137
|
+
|
138
|
+
|
139
139
|
### `SC.PICKER_FIXED`
|
140
|
-
|
140
|
+
|
141
141
|
Positioning is offset-based, with `preferMatrix` defaulting to `[1, 4, 3]` and
|
142
142
|
skipping `fitPositionToScreen`.
|
143
|
-
|
144
|
-
|
143
|
+
|
144
|
+
|
145
145
|
### `SC.PICKER_POINTER`
|
146
|
-
|
146
|
+
|
147
147
|
Positioning is position-based, with `preferMatrix` defaulting to `[0, 1, 2, 3, 2]`,
|
148
148
|
i.e. right > left > top > bottom; fallback to top.
|
149
|
-
|
150
|
-
|
149
|
+
|
150
|
+
|
151
151
|
### `SC.PICKER_MENU_POINTER`
|
152
|
-
|
152
|
+
|
153
153
|
Positioning is position-based, with `preferMatrix` defaulting to `[3, 0, 1, 2, 3]`,
|
154
154
|
i.e. bottom, right, left, top; fallback to bottom.
|
155
|
-
|
156
|
-
|
157
|
-
|
155
|
+
|
156
|
+
|
157
|
+
|
158
158
|
## Examples
|
159
|
-
|
159
|
+
|
160
160
|
Examples for applying popular customized picker position rules:
|
161
|
-
|
161
|
+
|
162
162
|
### default:
|
163
163
|
|
164
164
|
SC.PickerPane.create({
|
@@ -200,7 +200,7 @@ SC.POINTER_LAYOUT = ["perfectRight", "perfectLeft", "perfectTop", "perfectBottom
|
|
200
200
|
layout: { width: 400, height: 200 },
|
201
201
|
contentView: SC.View.extend({})
|
202
202
|
}).popup(anchor, SC.PICKER_POINTER);
|
203
|
-
|
203
|
+
|
204
204
|
Positioning: right (0) > left (1) > top (2) > bottom (3). Fallback to top (2).
|
205
205
|
|
206
206
|
### pointer with custom `preferMatrix` of `[3,0,1,2,2]`:
|
@@ -218,34 +218,34 @@ SC.POINTER_LAYOUT = ["perfectRight", "perfectLeft", "perfectTop", "perfectBottom
|
|
218
218
|
layout: { width: 400, height: 200 },
|
219
219
|
contentView: SC.View.extend({})
|
220
220
|
}).popup(anchor, SC.PICKER_MENU_POINTER);
|
221
|
-
|
221
|
+
|
222
222
|
Positioning: bottom (3) > right (0) > left (1) > top (2). Fallback to bottom (3).
|
223
|
-
|
223
|
+
|
224
224
|
@extends SC.PalettePane
|
225
225
|
@since SproutCore 1.0
|
226
226
|
*/
|
227
227
|
SC.PickerPane = SC.PalettePane.extend(
|
228
228
|
/** @scope SC.PickerPane.prototype */ {
|
229
|
-
|
229
|
+
|
230
230
|
/**
|
231
231
|
@type Array
|
232
232
|
@default ['sc-picker']
|
233
233
|
@see SC.View#classNames
|
234
234
|
*/
|
235
235
|
classNames: ['sc-picker'],
|
236
|
-
|
236
|
+
|
237
237
|
/**
|
238
238
|
@type Boolean
|
239
239
|
@default YES
|
240
240
|
*/
|
241
241
|
isAnchored: YES,
|
242
|
-
|
242
|
+
|
243
243
|
/**
|
244
244
|
@type Boolean
|
245
245
|
@default YES
|
246
246
|
*/
|
247
247
|
isModal: YES,
|
248
|
-
|
248
|
+
|
249
249
|
/**
|
250
250
|
@type String
|
251
251
|
@default 'perfectRight'
|
@@ -263,12 +263,12 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
263
263
|
@default 0
|
264
264
|
*/
|
265
265
|
pointerPosY: 0,
|
266
|
-
|
266
|
+
|
267
267
|
/**
|
268
|
-
This property will be set to the element (or view.get('layer')) that
|
269
|
-
triggered your picker to show. You can use this to properly position your
|
268
|
+
This property will be set to the element (or view.get('layer')) that
|
269
|
+
triggered your picker to show. You can use this to properly position your
|
270
270
|
picker.
|
271
|
-
|
271
|
+
|
272
272
|
@type HTMLElement
|
273
273
|
@default null
|
274
274
|
*/
|
@@ -281,18 +281,18 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
281
281
|
@default null
|
282
282
|
*/
|
283
283
|
anchorCached: null,
|
284
|
-
|
284
|
+
|
285
285
|
/**
|
286
286
|
popular customized picker position rule
|
287
|
-
|
287
|
+
|
288
288
|
@type String
|
289
289
|
@default null
|
290
290
|
*/
|
291
291
|
preferType: null,
|
292
|
-
|
292
|
+
|
293
293
|
/**
|
294
294
|
default/custom offset or position pref matrix for specific preferType
|
295
|
-
|
295
|
+
|
296
296
|
@type String
|
297
297
|
@default null
|
298
298
|
*/
|
@@ -313,13 +313,13 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
313
313
|
@default 0
|
314
314
|
*/
|
315
315
|
extraRightOffset: 0,
|
316
|
-
|
316
|
+
|
317
317
|
/**
|
318
|
-
The target object to invoke the remove action on when the user clicks off the
|
318
|
+
The target object to invoke the remove action on when the user clicks off the
|
319
319
|
picker that is to be removed.
|
320
320
|
|
321
321
|
If you set this target, the action will be called on the target object
|
322
|
-
directly when the user clicks off the picker. If you leave this property
|
322
|
+
directly when the user clicks off the picker. If you leave this property
|
323
323
|
set to null, then the button will search the responder chain for a view that
|
324
324
|
implements the action when the button is pressed instead.
|
325
325
|
|
@@ -327,19 +327,19 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
327
327
|
@default null
|
328
328
|
*/
|
329
329
|
removeTarget: null,
|
330
|
-
|
330
|
+
|
331
331
|
/**
|
332
332
|
The name of the action you want triggered when the user clicks off the
|
333
|
-
picker pane that is to be removed.
|
334
|
-
|
333
|
+
picker pane that is to be removed.
|
334
|
+
|
335
335
|
This property is used in conjunction with the removeTarget property to execute
|
336
|
-
a method when the user clicks off the picker pane.
|
336
|
+
a method when the user clicks off the picker pane.
|
337
337
|
|
338
338
|
If you do not set a target, then clicking off the picker pane will cause the
|
339
339
|
responder chain to search for a view that implements the action you name
|
340
|
-
here, if one was provided.
|
341
|
-
|
342
|
-
Note that this property is optional. If no explicit value is provided then the
|
340
|
+
here, if one was provided.
|
341
|
+
|
342
|
+
Note that this property is optional. If no explicit value is provided then the
|
343
343
|
picker pane will perform the default action which is to simply remove itself.
|
344
344
|
|
345
345
|
@type String
|
@@ -373,25 +373,26 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
373
373
|
},
|
374
374
|
|
375
375
|
/** @private
|
376
|
-
The ideal position for a picker pane is just below the anchor that
|
377
|
-
triggered it + offset of specific preferType. Find that ideal position,
|
378
|
-
then call fitPositionToScreen to get final position. If anchor is missing,
|
376
|
+
The ideal position for a picker pane is just below the anchor that
|
377
|
+
triggered it + offset of specific preferType. Find that ideal position,
|
378
|
+
then call fitPositionToScreen to get final position. If anchor is missing,
|
379
379
|
fallback to center.
|
380
|
-
*/
|
380
|
+
*/
|
381
381
|
positionPane: function(useAnchorCached) {
|
382
382
|
useAnchorCached = useAnchorCached && this.get('anchorCached');
|
383
|
-
|
383
|
+
|
384
384
|
var anchor = useAnchorCached ? this.get('anchorCached') : this.get('anchorElement'),
|
385
385
|
preferType = this.get('preferType'),
|
386
386
|
preferMatrix = this.get('preferMatrix'),
|
387
387
|
layout = this.get('layout'),
|
388
388
|
origin;
|
389
|
-
|
390
|
-
|
391
|
-
// usually an anchorElement will be passed. The ideal position is just
|
389
|
+
|
390
|
+
|
391
|
+
// usually an anchorElement will be passed. The ideal position is just
|
392
392
|
// below the anchor + default or custom offset according to preferType.
|
393
|
-
// If that is not possible, fitPositionToScreen will take care of that for
|
393
|
+
// If that is not possible, fitPositionToScreen will take care of that for
|
394
394
|
// other alternative and fallback position.
|
395
|
+
|
395
396
|
if (anchor) {
|
396
397
|
if(!useAnchorCached) {
|
397
398
|
anchor = this.computeAnchorRect(anchor);
|
@@ -405,19 +406,19 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
405
406
|
case SC.PICKER_MENU:
|
406
407
|
case SC.PICKER_FIXED:
|
407
408
|
if(!preferMatrix || preferMatrix.length !== 3) {
|
408
|
-
// default below the anchor with fine-tuned visual alignment
|
409
|
+
// default below the anchor with fine-tuned visual alignment
|
409
410
|
// for Menu to appear just below the anchorElement.
|
410
411
|
this.set('preferMatrix', [1, 4, 3]) ;
|
411
412
|
}
|
412
413
|
|
413
414
|
// fine-tuned visual alignment from preferMatrix
|
414
415
|
origin.x += ((this.preferMatrix[2]===0) ? origin.width : 0) + this.preferMatrix[0] ;
|
415
|
-
origin.y += ((this.preferMatrix[2]===3) ? origin.height : 0) + this.preferMatrix[1];
|
416
|
+
origin.y += ((this.preferMatrix[2]===3) ? origin.height : 0) + this.preferMatrix[1];
|
416
417
|
break;
|
417
418
|
default:
|
418
419
|
origin.y += origin.height ;
|
419
420
|
break;
|
420
|
-
}
|
421
|
+
}
|
421
422
|
} else {
|
422
423
|
origin.y += origin.height ;
|
423
424
|
}
|
@@ -434,10 +435,10 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
434
435
|
|
435
436
|
/** @private
|
436
437
|
This method will return ret (x, y, width, height) from a rectangular element
|
437
|
-
Notice: temp hack for calculating visiable anchor height by counting height
|
438
|
+
Notice: temp hack for calculating visiable anchor height by counting height
|
438
439
|
up to window bottom only. We do have 'clippingFrame' supported from view.
|
439
440
|
But since our anchor can be element, we use this solution for now.
|
440
|
-
*/
|
441
|
+
*/
|
441
442
|
computeAnchorRect: function(anchor) {
|
442
443
|
var bounding, ret, cq,
|
443
444
|
wsize = SC.RootResponder.responder.computeWindowSize();
|
@@ -482,14 +483,14 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
482
483
|
|
483
484
|
/** @private
|
484
485
|
This method will dispatch to the right re-position rule according to preferType
|
485
|
-
*/
|
486
|
+
*/
|
486
487
|
fitPositionToScreen: function(preferredPosition, picker, anchor) {
|
487
488
|
// get window rect.
|
488
489
|
//if(this._prefPosX && this._prefPosY)
|
489
|
-
|
490
|
+
|
490
491
|
var wsize = SC.RootResponder.responder.computeWindowSize(),
|
491
492
|
wret = { x: 0, y: 0, width: wsize.width, height: wsize.height } ;
|
492
|
-
|
493
|
+
|
493
494
|
picker.x = preferredPosition.x ; picker.y = preferredPosition.y ;
|
494
495
|
|
495
496
|
if(this.preferType) {
|
@@ -507,13 +508,13 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
507
508
|
this.setupPointer(anchor);
|
508
509
|
picker = this.fitPositionToScreenPointer(wret, picker, anchor) ;
|
509
510
|
break;
|
510
|
-
|
511
|
+
|
511
512
|
case SC.PICKER_FIXED:
|
512
513
|
// skip fitPositionToScreen
|
513
514
|
break;
|
514
515
|
default:
|
515
516
|
break;
|
516
|
-
}
|
517
|
+
}
|
517
518
|
} else {
|
518
519
|
// apply default re-position rule
|
519
520
|
picker = this.fitPositionToScreenDefault(wret, picker, anchor) ;
|
@@ -523,11 +524,11 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
523
524
|
},
|
524
525
|
|
525
526
|
/** @private
|
526
|
-
re-position rule migrated from old SC.OverlayPaneView.
|
527
|
+
re-position rule migrated from old SC.OverlayPaneView.
|
527
528
|
shift x, y to optimized picker visibility and make sure top-left corner is always visible.
|
528
529
|
*/
|
529
530
|
fitPositionToScreenDefault: function(w, f, a) {
|
530
|
-
// make sure the right edge fits on the screen. If not, anchor to
|
531
|
+
// make sure the right edge fits on the screen. If not, anchor to
|
531
532
|
// right edge of anchor or right edge of window, whichever is closer.
|
532
533
|
if (SC.maxX(f) > w.width) {
|
533
534
|
var mx = Math.max(SC.maxX(a), f.width) ;
|
@@ -535,7 +536,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
535
536
|
}
|
536
537
|
|
537
538
|
// if the left edge is off of the screen, try to position at left edge
|
538
|
-
// of anchor. If that pushes right edge off screen, shift back until
|
539
|
+
// of anchor. If that pushes right edge off screen, shift back until
|
539
540
|
// right is on screen or left = 0
|
540
541
|
if (SC.minX(f) < 0) {
|
541
542
|
f.x = SC.minX(Math.max(a,0)) ;
|
@@ -559,7 +560,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
559
560
|
mx = Math.min(SC.maxY(a), (w.height - a.height)) ;
|
560
561
|
f.y = Math.max(mx, 0) ;
|
561
562
|
}
|
562
|
-
return f ;
|
563
|
+
return f ;
|
563
564
|
},
|
564
565
|
|
565
566
|
/** @private
|
@@ -593,7 +594,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
593
594
|
|
594
595
|
// Make sure we are at least 7 pixels from the left edge of the screen.
|
595
596
|
if( paneFrame.x < 7 ) paneFrame.x = 7;
|
596
|
-
|
597
|
+
|
597
598
|
if (paneFrame.y < 7) {
|
598
599
|
paneFrame.height += paneFrame.y;
|
599
600
|
paneFrame.y = 7;
|
@@ -638,7 +639,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
638
639
|
fitPositionToScreenPointer: function(w, f, a) {
|
639
640
|
var offset = [this.pointerOffset[0], this.pointerOffset[1],
|
640
641
|
this.pointerOffset[2], this.pointerOffset[3]];
|
641
|
-
|
642
|
+
|
642
643
|
// initiate perfect positions matrix
|
643
644
|
// 4 perfect positions: right > left > top > bottom
|
644
645
|
// 2 coordinates: x, y
|
@@ -653,7 +654,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
653
654
|
[a.x+parseInt((a.width/2)-(f.width/2),0)+f.width, a.y+offset[2]],
|
654
655
|
[a.x+parseInt((a.width/2)-(f.width/2),0)+f.width, a.y+a.height+f.height+offset[3]]];
|
655
656
|
// cutoff of 4 perfect positioned f: top, right, bottom, left (4x4)
|
656
|
-
var cutoffPrefP =[[prefP1[0][1]>0 ? 0 : 0-prefP1[0][1], prefP2[0][0]<w.width ? 0 : prefP2[0][0]-w.width, prefP2[0][1]<w.height ? 0 : prefP2[0][1]-w.height, prefP1[0][0]>0 ? 0 : 0-prefP1[0][0]],
|
657
|
+
var cutoffPrefP =[[prefP1[0][1]>0 ? 0 : 0-prefP1[0][1], prefP2[0][0]<w.width ? 0 : prefP2[0][0]-w.width, prefP2[0][1]<w.height ? 0 : prefP2[0][1]-w.height, prefP1[0][0]>0 ? 0 : 0-prefP1[0][0]],
|
657
658
|
[prefP1[1][1]>0 ? 0 : 0-prefP1[1][1], prefP2[1][0]<w.width ? 0 : prefP2[1][0]-w.width, prefP2[1][1]<w.height ? 0 : prefP2[1][1]-w.height, prefP1[1][0]>0 ? 0 : 0-prefP1[1][0]],
|
658
659
|
[prefP1[2][1]>0 ? 0 : 0-prefP1[2][1], prefP2[2][0]<w.width ? 0 : prefP2[2][0]-w.width, prefP2[2][1]<w.height ? 0 : prefP2[2][1]-w.height, prefP1[2][0]>0 ? 0 : 0-prefP1[2][0]],
|
659
660
|
[prefP1[3][1]>0 ? 0 : 0-prefP1[3][1], prefP2[3][0]<w.width ? 0 : prefP2[3][0]-w.width, prefP2[3][1]<w.height ? 0 : prefP2[3][1]-w.height, prefP1[3][0]>0 ? 0 : 0-prefP1[3][0]]];
|
@@ -667,12 +668,12 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
667
668
|
f.x = a.x+parseInt(a.width/2,0);
|
668
669
|
f.y = a.y+parseInt(a.height/2,0)-parseInt(f.height/2,0);
|
669
670
|
this.set('pointerPos', SC.POINTER_LAYOUT[0]+' fallback');
|
670
|
-
this.set('pointerPosY', parseInt(f.height/2,0)-40);
|
671
|
+
this.set('pointerPosY', parseInt(f.height/2,0)-40);
|
671
672
|
} else {
|
672
673
|
f.x = prefP1[m[4]][0];
|
673
674
|
f.y = prefP1[m[4]][1];
|
674
675
|
this.set('pointerPos', SC.POINTER_LAYOUT[m[4]]);
|
675
|
-
this.set('pointerPosY', 0);
|
676
|
+
this.set('pointerPosY', 0);
|
676
677
|
}
|
677
678
|
this.set('pointerPosX', 0);
|
678
679
|
|
@@ -719,9 +720,9 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
719
720
|
i = SC.POINTER_LAYOUT.length;
|
720
721
|
}
|
721
722
|
}
|
722
|
-
return f ;
|
723
|
+
return f ;
|
723
724
|
},
|
724
|
-
|
725
|
+
|
725
726
|
/** @private
|
726
727
|
This method will set up pointerOffset and preferMatrix according to type
|
727
728
|
and size if not provided explicitly.
|
@@ -729,7 +730,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
729
730
|
setupPointer: function(a) {
|
730
731
|
var pointerOffset = this.pointerOffset,
|
731
732
|
K = SC.PickerPane;
|
732
|
-
|
733
|
+
|
733
734
|
// set up pointerOffset according to type and size if not provided explicitly
|
734
735
|
if (!pointerOffset || pointerOffset.length !== 4) {
|
735
736
|
if (this.get('preferType') == SC.PICKER_MENU_POINTER) {
|
@@ -783,7 +784,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
783
784
|
this.set('preferMatrix', this.get('preferType') == SC.PICKER_MENU_POINTER ? [3,0,1,2,3] : [0,1,2,3,2]) ;
|
784
785
|
}
|
785
786
|
},
|
786
|
-
|
787
|
+
|
787
788
|
/**
|
788
789
|
@type Array
|
789
790
|
@default ['preferType','pointerPos','pointerPosY']
|
@@ -820,30 +821,30 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
820
821
|
mouseDown: function(evt) {
|
821
822
|
return this.modalPaneDidClick(evt);
|
822
823
|
},
|
823
|
-
|
824
|
+
|
824
825
|
/** @private
|
825
|
-
internal method to define the range for clicking inside so the picker
|
826
|
-
won't be clicked away default is the range of contentView frame.
|
826
|
+
internal method to define the range for clicking inside so the picker
|
827
|
+
won't be clicked away default is the range of contentView frame.
|
827
828
|
Over-write for adjustments. ex: shadow
|
828
829
|
*/
|
829
830
|
clickInside: function(frame, evt) {
|
830
831
|
return SC.pointInRect({ x: evt.pageX, y: evt.pageY }, frame);
|
831
832
|
},
|
832
833
|
|
833
|
-
/**
|
834
|
+
/**
|
834
835
|
Invoked by the root responder. Re-position picker whenever the window resizes.
|
835
836
|
*/
|
836
837
|
windowSizeDidChange: function(oldSize, newSize) {
|
837
838
|
this.positionPane();
|
838
839
|
},
|
839
|
-
|
840
|
+
|
840
841
|
remove: function(){
|
841
842
|
if(this.get('isVisibleInWindow') && this.get('isPaneAttached')) this._showOverflow();
|
842
843
|
return sc_super();
|
843
844
|
},
|
844
|
-
|
845
|
+
|
845
846
|
/** @private
|
846
|
-
Internal method to hide the overflow on the body to make sure we don't
|
847
|
+
Internal method to hide the overflow on the body to make sure we don't
|
847
848
|
show scrollbars when the picker has shadows, as it's really anoying.
|
848
849
|
*/
|
849
850
|
_hideOverflow: function(){
|
@@ -877,7 +878,7 @@ SC.PickerPane = SC.PalettePane.extend(
|
|
877
878
|
Default metrics for the different control sizes.
|
878
879
|
*/
|
879
880
|
|
880
|
-
// Counter to track how many pickers are open. This help us to now when to
|
881
|
+
// Counter to track how many pickers are open. This help us to now when to
|
881
882
|
// show/hide the body overflow.
|
882
883
|
SC.PICKERS_OPEN = 0;
|
883
884
|
|