sproutcore 1.6.0.1-java → 1.7.1.beta-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|